aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2015-02-15 14:16:48 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2015-02-15 14:16:48 -0400
commitbd0c83bf21d6ebd646576e60bedd0444b33468c7 (patch)
treee5abcbf96b8180b16f25e166786db2208e9163df
parent3776ebfd3f94a46df0878a9cc506ed0e3ff2cbd2 (diff)
parent7644cfac07de00f1d298b01d1a9d62fc9587f295 (diff)
Merge branch 'master' into database
-rw-r--r--.gitignore4
-rw-r--r--.mailmap7
-rw-r--r--Annex.hs80
-rw-r--r--Annex/AutoMerge.hs107
-rw-r--r--Annex/Branch.hs117
-rw-r--r--Annex/Branch/Transitions.hs26
-rw-r--r--Annex/BranchState.hs2
-rw-r--r--Annex/CatFile.hs32
-rw-r--r--Annex/CheckAttr.hs2
-rw-r--r--Annex/CheckIgnore.hs4
-rw-r--r--Annex/Content.hs109
-rw-r--r--Annex/Content/Direct.hs79
-rw-r--r--Annex/Difference.hs58
-rw-r--r--Annex/DirHashes.hs86
-rw-r--r--Annex/Direct.hs159
-rw-r--r--Annex/Direct/Fixup.hs2
-rw-r--r--Annex/Drop.hs5
-rw-r--r--Annex/Environment.hs33
-rw-r--r--Annex/Exception.hs50
-rw-r--r--Annex/FileMatcher.hs29
-rw-r--r--Annex/Hook.hs18
-rw-r--r--Annex/Index.hs42
-rw-r--r--Annex/Init.hs106
-rw-r--r--Annex/Journal.hs47
-rw-r--r--Annex/Link.hs21
-rw-r--r--Annex/LockFile.hs72
-rw-r--r--Annex/LockPool.hs60
-rw-r--r--Annex/MakeRepo.hs88
-rw-r--r--Annex/MetaData.hs21
-rw-r--r--Annex/MetaData/StandardFields.hs2
-rw-r--r--Annex/Notification.hs101
-rw-r--r--Annex/Path.hs2
-rw-r--r--Annex/Perms.hs7
-rw-r--r--Annex/Queue.hs2
-rw-r--r--Annex/Quvi.hs2
-rw-r--r--Annex/ReplaceFile.hs31
-rw-r--r--Annex/Ssh.hs204
-rw-r--r--Annex/TaggedPush.hs12
-rw-r--r--Annex/Transfer.hs145
-rw-r--r--Annex/UUID.hs24
-rw-r--r--Annex/Url.hs4
-rw-r--r--Annex/VariantFile.hs2
-rw-r--r--Annex/Version.hs2
-rw-r--r--Annex/View.hs28
-rw-r--r--Annex/View/ViewedFile.hs21
-rw-r--r--Annex/Wanted.hs10
-rw-r--r--Assistant.hs81
-rw-r--r--Assistant/Alert.hs29
-rw-r--r--Assistant/Alert/Utility.hs5
-rw-r--r--Assistant/BranchChange.hs2
-rw-r--r--Assistant/Changes.hs2
-rw-r--r--Assistant/Commits.hs2
-rw-r--r--Assistant/Common.hs2
-rw-r--r--Assistant/CredPairCache.hs53
-rw-r--r--Assistant/DaemonStatus.hs14
-rw-r--r--Assistant/DeleteRemote.hs8
-rw-r--r--Assistant/Drop.hs2
-rw-r--r--Assistant/Install.hs121
-rw-r--r--Assistant/Install/AutoStart.hs2
-rw-r--r--Assistant/Install/Menu.hs2
-rw-r--r--Assistant/MakeRemote.hs15
-rw-r--r--Assistant/Monad.hs8
-rw-r--r--Assistant/NamedThread.hs2
-rw-r--r--Assistant/NetMessager.hs6
-rw-r--r--Assistant/Pairing.hs11
-rw-r--r--Assistant/Pairing/MakeRemote.hs13
-rw-r--r--Assistant/Pairing/Network.hs3
-rw-r--r--Assistant/Pushes.hs2
-rw-r--r--Assistant/RemoteControl.hs21
-rw-r--r--Assistant/RepoProblem.hs2
-rw-r--r--Assistant/ScanRemotes.hs2
-rw-r--r--Assistant/Ssh.hs41
-rw-r--r--Assistant/Sync.hs7
-rw-r--r--Assistant/Threads/Committer.hs30
-rw-r--r--Assistant/Threads/ConfigMonitor.hs10
-rw-r--r--Assistant/Threads/Cronner.hs16
-rw-r--r--Assistant/Threads/DaemonStatus.hs2
-rw-r--r--Assistant/Threads/Glacier.hs2
-rw-r--r--Assistant/Threads/Merger.hs15
-rw-r--r--Assistant/Threads/MountWatcher.hs6
-rw-r--r--Assistant/Threads/NetWatcher.hs100
-rw-r--r--Assistant/Threads/PairListener.hs23
-rw-r--r--Assistant/Threads/ProblemFixer.hs2
-rw-r--r--Assistant/Threads/Pusher.hs2
-rw-r--r--Assistant/Threads/RemoteControl.hs121
-rw-r--r--Assistant/Threads/SanityChecker.hs87
-rw-r--r--Assistant/Threads/TransferPoller.hs5
-rw-r--r--Assistant/Threads/TransferScanner.hs8
-rw-r--r--Assistant/Threads/TransferWatcher.hs2
-rw-r--r--Assistant/Threads/Transferrer.hs2
-rw-r--r--Assistant/Threads/UpgradeWatcher.hs6
-rw-r--r--Assistant/Threads/Upgrader.hs22
-rw-r--r--Assistant/Threads/Watcher.hs31
-rw-r--r--Assistant/Threads/WebApp.hs15
-rw-r--r--Assistant/Threads/XMPPClient.hs41
-rw-r--r--Assistant/Threads/XMPPPusher.hs6
-rw-r--r--Assistant/TransferQueue.hs4
-rw-r--r--Assistant/TransferSlots.hs4
-rw-r--r--Assistant/TransferrerPool.hs9
-rw-r--r--Assistant/Types/Alert.hs6
-rw-r--r--Assistant/Types/BranchChange.hs2
-rw-r--r--Assistant/Types/Buddies.hs2
-rw-r--r--Assistant/Types/Changes.hs2
-rw-r--r--Assistant/Types/Commits.hs2
-rw-r--r--Assistant/Types/CredPairCache.hs18
-rw-r--r--Assistant/Types/DaemonStatus.hs5
-rw-r--r--Assistant/Types/NamedThread.hs2
-rw-r--r--Assistant/Types/NetMessager.hs6
-rw-r--r--Assistant/Types/Pushes.hs2
-rw-r--r--Assistant/Types/RemoteControl.hs16
-rw-r--r--Assistant/Types/RepoProblem.hs2
-rw-r--r--Assistant/Types/ScanRemotes.hs2
-rw-r--r--Assistant/Types/ThreadName.hs2
-rw-r--r--Assistant/Types/ThreadedMonad.hs2
-rw-r--r--Assistant/Types/TransferQueue.hs2
-rw-r--r--Assistant/Types/TransferSlots.hs2
-rw-r--r--Assistant/Types/TransferrerPool.hs2
-rw-r--r--Assistant/Types/UrlRenderer.hs2
-rw-r--r--Assistant/Unused.hs4
-rw-r--r--Assistant/XMPP.hs4
-rw-r--r--Assistant/XMPP/Buddies.hs2
-rw-r--r--Assistant/XMPP/Client.hs9
-rw-r--r--Assistant/XMPP/Git.hs44
-rw-r--r--Backend.hs41
-rw-r--r--Backend/Hash.hs81
-rw-r--r--Backend/URL.hs18
-rw-r--r--Backend/Utilities.hs27
-rw-r--r--Backend/WORM.hs23
-rw-r--r--Build/BuildVersion.hs6
-rw-r--r--Build/BundledPrograms.hs13
-rw-r--r--Build/Configure.hs23
-rw-r--r--Build/DesktopFile.hs2
-rw-r--r--Build/DistributionUpdate.hs134
-rw-r--r--Build/EvilLinker.hs14
-rw-r--r--Build/EvilSplicer.hs74
-rw-r--r--Build/InstallDesktopFile.hs2
-rw-r--r--Build/LinuxMkLibs.hs49
-rw-r--r--Build/NullSoftInstaller.hs88
-rw-r--r--Build/OSXMkLibs.hs4
-rw-r--r--Build/Standalone.hs4
-rw-r--r--Build/Version.hs10
-rwxr-xr-xBuild/make-sdist.sh7
-rw-r--r--BuildFlags.hs11
-rw-r--r--Checks.hs4
-rw-r--r--CmdLine.hs53
-rw-r--r--CmdLine/Action.hs20
-rw-r--r--CmdLine/GitAnnex.hs175
-rw-r--r--CmdLine/GitAnnex/Options.hs103
-rw-r--r--CmdLine/GitAnnexShell.hs22
-rw-r--r--CmdLine/GitAnnexShell/Fields.hs2
-rw-r--r--CmdLine/Option.hs27
-rw-r--r--CmdLine/Seek.hs81
-rw-r--r--CmdLine/Usage.hs6
-rw-r--r--Command.hs10
-rw-r--r--Command/Add.hs80
-rw-r--r--Command/AddUnused.hs6
-rw-r--r--Command/AddUrl.hs292
-rw-r--r--Command/Assistant.hs8
-rw-r--r--Command/Commit.hs6
-rw-r--r--Command/ConfigList.hs26
-rw-r--r--Command/Copy.hs14
-rw-r--r--Command/Dead.hs6
-rw-r--r--Command/Describe.hs6
-rw-r--r--Command/DiffDriver.hs102
-rw-r--r--Command/Direct.hs20
-rw-r--r--Command/Drop.hs99
-rw-r--r--Command/DropKey.hs10
-rw-r--r--Command/DropUnused.hs10
-rw-r--r--Command/EnableRemote.hs8
-rw-r--r--Command/ExamineKey.hs6
-rw-r--r--Command/Find.hs18
-rw-r--r--Command/FindRef.hs21
-rw-r--r--Command/Fix.hs15
-rw-r--r--Command/Forget.hs6
-rw-r--r--Command/FromKey.hs8
-rw-r--r--Command/Fsck.hs38
-rw-r--r--Command/FuzzTest.hs15
-rw-r--r--Command/GCryptSetup.hs8
-rw-r--r--Command/Get.hs36
-rw-r--r--Command/Group.hs16
-rw-r--r--Command/GroupWanted.hs45
-rw-r--r--Command/Help.hs24
-rw-r--r--Command/Import.hs101
-rw-r--r--Command/ImportFeed.hs140
-rw-r--r--Command/InAnnex.hs6
-rw-r--r--Command/Indirect.hs26
-rw-r--r--Command/Info.hs187
-rw-r--r--Command/Init.hs6
-rw-r--r--Command/InitRemote.hs22
-rw-r--r--Command/List.hs33
-rw-r--r--Command/Lock.hs7
-rw-r--r--Command/Log.hs23
-rw-r--r--Command/LookupKey.hs6
-rw-r--r--Command/Map.hs27
-rw-r--r--Command/Merge.hs6
-rw-r--r--Command/MetaData.hs17
-rw-r--r--Command/Migrate.hs60
-rw-r--r--Command/Mirror.hs10
-rw-r--r--Command/Move.hs53
-rw-r--r--Command/NotifyChanges.hs83
-rw-r--r--Command/NumCopies.hs29
-rw-r--r--Command/PreCommit.hs35
-rw-r--r--Command/Proxy.hs46
-rw-r--r--Command/ReKey.hs14
-rw-r--r--Command/RecvKey.hs32
-rw-r--r--Command/Reinit.hs38
-rw-r--r--Command/Reinject.hs29
-rw-r--r--Command/RemoteDaemon.hs24
-rw-r--r--Command/Repair.hs8
-rw-r--r--Command/ResolveMerge.hs40
-rw-r--r--Command/RmUrl.hs16
-rw-r--r--Command/Schedule.hs8
-rw-r--r--Command/Semitrust.hs6
-rw-r--r--Command/SendKey.hs18
-rw-r--r--Command/SetPresentKey.hs35
-rw-r--r--Command/Status.hs14
-rw-r--r--Command/Sync.hs142
-rw-r--r--Command/Test.hs8
-rw-r--r--Command/TestRemote.hs228
-rw-r--r--Command/TransferInfo.hs6
-rw-r--r--Command/TransferKey.hs16
-rw-r--r--Command/TransferKeys.hs65
-rw-r--r--Command/Trust.hs10
-rw-r--r--Command/Unannex.hs79
-rw-r--r--Command/Undo.hs84
-rw-r--r--Command/Ungroup.hs6
-rw-r--r--Command/Uninit.hs31
-rw-r--r--Command/Unlock.hs64
-rw-r--r--Command/Untrust.hs6
-rw-r--r--Command/Unused.hs23
-rw-r--r--Command/Upgrade.hs6
-rw-r--r--Command/VAdd.hs6
-rw-r--r--Command/VCycle.hs6
-rw-r--r--Command/VFilter.hs6
-rw-r--r--Command/VPop.hs6
-rw-r--r--Command/Version.hs6
-rw-r--r--Command/Vicfg.hs67
-rw-r--r--Command/View.hs18
-rw-r--r--Command/Wanted.hs8
-rw-r--r--Command/Watch.hs6
-rw-r--r--Command/WebApp.hs69
-rw-r--r--Command/Whereis.hs29
-rw-r--r--Command/XMPPGit.hs12
-rw-r--r--Common.hs9
-rw-r--r--Config.hs11
-rw-r--r--Config/Cost.hs4
-rw-r--r--Config/Files.hs4
-rw-r--r--Config/NumCopies.hs2
-rw-r--r--Creds.hs87
-rw-r--r--Crypto.hs32
-rw-r--r--Git.hs30
-rw-r--r--Git/AutoCorrect.hs6
-rw-r--r--Git/Branch.hs69
-rw-r--r--Git/BuildVersion.hs2
-rw-r--r--Git/CatFile.hs4
-rw-r--r--Git/CheckAttr.hs20
-rw-r--r--Git/CheckIgnore.hs2
-rw-r--r--Git/Command.hs17
-rw-r--r--Git/Command/Batch.hs19
-rw-r--r--Git/Config.hs13
-rw-r--r--Git/Construct.hs25
-rw-r--r--Git/CurrentRepo.hs22
-rw-r--r--Git/DiffTree.hs41
-rw-r--r--Git/DiffTreeItem.hs24
-rw-r--r--Git/FileMode.hs2
-rw-r--r--Git/FilePath.hs5
-rw-r--r--Git/Filename.hs2
-rw-r--r--Git/Fsck.hs3
-rw-r--r--Git/GCrypt.hs16
-rw-r--r--Git/HashObject.hs4
-rw-r--r--Git/Hook.hs41
-rw-r--r--Git/Index.hs31
-rw-r--r--Git/LsFiles.hs8
-rw-r--r--Git/LsTree.hs4
-rw-r--r--Git/Merge.hs27
-rw-r--r--Git/Objects.hs16
-rw-r--r--Git/Queue.hs17
-rw-r--r--Git/Ref.hs2
-rw-r--r--Git/RefLog.hs2
-rw-r--r--Git/Remote.hs25
-rw-r--r--Git/Remote/Remove.hs29
-rw-r--r--Git/Repair.hs67
-rw-r--r--Git/Sha.hs2
-rw-r--r--Git/SharedRepository.hs2
-rw-r--r--Git/Types.hs7
-rw-r--r--Git/UnionMerge.hs2
-rw-r--r--Git/UpdateIndex.hs20
-rw-r--r--Git/Url.hs2
-rw-r--r--Git/Version.hs41
-rw-r--r--Limit.hs73
-rw-r--r--Limit/Wanted.hs2
-rw-r--r--Locations.hs131
-rw-r--r--Logs.hs88
-rw-r--r--Logs/Chunk.hs55
-rw-r--r--Logs/Chunk/Pure.hs55
-rw-r--r--Logs/Difference.hs41
-rw-r--r--Logs/Difference/Pure.hs25
-rw-r--r--Logs/FsckResults.hs4
-rw-r--r--Logs/Group.hs2
-rw-r--r--Logs/Location.hs11
-rw-r--r--Logs/MapLog.hs4
-rw-r--r--Logs/MetaData.hs26
-rw-r--r--Logs/NumCopies.hs2
-rw-r--r--Logs/PreferredContent.hs86
-rw-r--r--Logs/PreferredContent/Raw.hs23
-rw-r--r--Logs/Presence.hs2
-rw-r--r--Logs/Presence/Pure.hs12
-rw-r--r--Logs/Remote.hs2
-rw-r--r--Logs/RemoteState.hs12
-rw-r--r--Logs/Schedule.hs4
-rw-r--r--Logs/SingleValue.hs6
-rw-r--r--Logs/Transfer.hs130
-rw-r--r--Logs/Transitions.hs8
-rw-r--r--Logs/Trust.hs28
-rw-r--r--Logs/Trust/Basic.hs38
-rw-r--r--Logs/Trust/Pure.hs2
-rw-r--r--Logs/UUID.hs2
-rw-r--r--Logs/UUIDBased.hs4
-rw-r--r--Logs/Unused.hs2
-rw-r--r--Logs/View.hs8
-rw-r--r--Logs/Web.hs76
-rw-r--r--Makefile20
-rw-r--r--Messages.hs22
-rw-r--r--Messages/JSON.hs2
-rw-r--r--README2
-rw-r--r--Remote.hs85
-rw-r--r--Remote/BitTorrent.hs391
-rw-r--r--Remote/Bup.hs124
-rw-r--r--Remote/Ddar.hs199
-rw-r--r--Remote/Directory.hs310
-rw-r--r--Remote/Directory/LegacyChunked.hs109
-rw-r--r--Remote/External.hs158
-rw-r--r--Remote/External/Types.hs205
-rw-r--r--Remote/GCrypt.hs221
-rw-r--r--Remote/Git.hs214
-rw-r--r--Remote/Glacier.hs216
-rw-r--r--Remote/Helper/AWS.hs24
-rw-r--r--Remote/Helper/Chunked.hs487
-rw-r--r--Remote/Helper/Chunked/Legacy.hs126
-rw-r--r--Remote/Helper/Encryptable.hs113
-rw-r--r--Remote/Helper/Git.hs24
-rw-r--r--Remote/Helper/Hooks.hs24
-rw-r--r--Remote/Helper/Http.hs85
-rw-r--r--Remote/Helper/Messages.hs16
-rw-r--r--Remote/Helper/ReadOnly.hs2
-rw-r--r--Remote/Helper/Special.hs247
-rw-r--r--Remote/Helper/Ssh.hs55
-rw-r--r--Remote/Hook.hs120
-rw-r--r--Remote/List.hs10
-rw-r--r--Remote/Rsync.hs154
-rw-r--r--Remote/Rsync/RsyncUrl.hs10
-rw-r--r--Remote/S3.hs635
-rw-r--r--Remote/Tahoe.hs70
-rw-r--r--Remote/Web.hs77
-rw-r--r--Remote/WebDAV.hs589
-rw-r--r--Remote/WebDAV/DavLocation.hs63
-rw-r--r--Remote/WebDAV/DavUrl.hs44
-rw-r--r--RemoteDaemon/Common.hs42
-rw-r--r--RemoteDaemon/Core.hs142
-rw-r--r--RemoteDaemon/Transport.hs23
-rw-r--r--RemoteDaemon/Transport/Ssh.hs123
-rw-r--r--RemoteDaemon/Transport/Ssh/Types.hs32
-rw-r--r--RemoteDaemon/Types.hs117
-rw-r--r--Test.hs1269
-rw-r--r--Types.hs2
-rw-r--r--Types/Availability.hs2
-rw-r--r--Types/Backend.hs10
-rw-r--r--Types/BranchState.hs2
-rw-r--r--Types/CleanupActions.hs5
-rw-r--r--Types/Command.hs4
-rw-r--r--Types/Creds.hs6
-rw-r--r--Types/Crypto.hs10
-rw-r--r--Types/DesktopNotify.hs27
-rw-r--r--Types/Difference.hs89
-rw-r--r--Types/Distribution.hs2
-rw-r--r--Types/FileMatcher.hs29
-rw-r--r--Types/GitConfig.hs20
-rw-r--r--Types/Group.hs2
-rw-r--r--Types/Key.hs44
-rw-r--r--Types/KeySource.hs2
-rw-r--r--Types/Limit.hs20
-rw-r--r--Types/LockPool.hs12
-rw-r--r--Types/Messages.hs7
-rw-r--r--Types/MetaData.hs8
-rw-r--r--Types/NumCopies.hs2
-rw-r--r--Types/Option.hs2
-rw-r--r--Types/Remote.hs33
-rw-r--r--Types/ScheduledActivity.hs4
-rw-r--r--Types/StandardGroups.hs4
-rw-r--r--Types/StoreRetrieve.hs43
-rw-r--r--Types/TrustLevel.hs6
-rw-r--r--Types/UUID.hs7
-rw-r--r--Types/UrlContents.hs47
-rw-r--r--Types/View.hs2
-rw-r--r--Upgrade.hs2
-rw-r--r--Upgrade/V0.hs2
-rw-r--r--Upgrade/V1.hs9
-rw-r--r--Upgrade/V2.hs6
-rw-r--r--Upgrade/V3.hs2
-rw-r--r--Upgrade/V4.hs2
-rw-r--r--Utility/Applicative.hs4
-rw-r--r--Utility/Base64.hs4
-rw-r--r--Utility/Batch.hs7
-rw-r--r--Utility/Bloom.hs60
-rw-r--r--Utility/CoProcess.hs14
-rw-r--r--Utility/CopyFile.hs28
-rw-r--r--Utility/DBus.hs7
-rw-r--r--Utility/Daemon.hs36
-rw-r--r--Utility/Data.hs4
-rw-r--r--Utility/DataUnits.hs9
-rw-r--r--Utility/DirWatcher.hs4
-rw-r--r--Utility/DirWatcher/FSEvents.hs8
-rw-r--r--Utility/DirWatcher/INotify.hs4
-rw-r--r--Utility/DirWatcher/Kqueue.hs4
-rw-r--r--Utility/DirWatcher/Types.hs4
-rw-r--r--Utility/DirWatcher/Win32Notify.hs8
-rw-r--r--Utility/Directory.hs110
-rw-r--r--Utility/DiskFree.hs4
-rw-r--r--Utility/Dot.hs4
-rw-r--r--Utility/DottedVersion.hs36
-rw-r--r--Utility/Env.hs33
-rw-r--r--Utility/Exception.hs79
-rw-r--r--Utility/ExternalSHA.hs10
-rw-r--r--Utility/FileMode.hs24
-rw-r--r--Utility/FileSize.hs35
-rw-r--r--Utility/FileSystemEncoding.hs6
-rw-r--r--Utility/Format.hs6
-rw-r--r--Utility/FreeDesktop.hs4
-rw-r--r--Utility/Glob.hs4
-rw-r--r--Utility/Gpg.hs57
-rw-r--r--Utility/Hash.hs23
-rw-r--r--Utility/HumanNumber.hs6
-rw-r--r--Utility/HumanTime.hs12
-rw-r--r--Utility/InodeCache.hs162
-rw-r--r--Utility/JSONStream.hs4
-rw-r--r--Utility/LinuxMkLibs.hs62
-rw-r--r--Utility/LockFile.hs20
-rw-r--r--Utility/LockFile/Posix.hs99
-rw-r--r--Utility/LockFile/Windows.hs75
-rw-r--r--Utility/LogFile.hs11
-rw-r--r--Utility/Lsof.hs24
-rw-r--r--Utility/Matcher.hs26
-rw-r--r--Utility/Metered.hs92
-rw-r--r--Utility/Misc.hs4
-rw-r--r--Utility/Monad.hs4
-rw-r--r--Utility/Mounts.hsc2
-rw-r--r--Utility/Network.hs4
-rw-r--r--Utility/NotificationBroadcaster.hs4
-rw-r--r--Utility/OSX.hs4
-rw-r--r--Utility/PID.hs4
-rw-r--r--Utility/Parallel.hs5
-rw-r--r--Utility/Path.hs71
-rw-r--r--Utility/Percentage.hs4
-rw-r--r--Utility/PosixFiles.hs4
-rw-r--r--Utility/Process.hs69
-rw-r--r--Utility/QuickCheck.hs4
-rw-r--r--Utility/Quvi.hs10
-rw-r--r--Utility/Rsync.hs77
-rw-r--r--Utility/SRV.hs6
-rw-r--r--Utility/SafeCommand.hs5
-rw-r--r--Utility/Scheduled.hs158
-rw-r--r--Utility/Shell.hs4
-rw-r--r--Utility/SimpleProtocol.hs90
-rw-r--r--Utility/SshConfig.hs10
-rw-r--r--Utility/TList.hs4
-rw-r--r--Utility/Tense.hs4
-rw-r--r--Utility/ThreadLock.hs4
-rw-r--r--Utility/ThreadScheduler.hs14
-rw-r--r--Utility/Tmp.hs51
-rw-r--r--Utility/Touch.hsc31
-rw-r--r--Utility/URI.hs18
-rw-r--r--Utility/Url.hs240
-rw-r--r--Utility/UserInfo.hs28
-rw-r--r--Utility/Verifiable.hs4
-rw-r--r--Utility/WebApp.hs61
-rw-r--r--Utility/WinLock.hs69
-rw-r--r--Utility/WinProcess.hs4
-rw-r--r--Utility/Yesod.hs27
-rw-r--r--Utility/libdiskfree.c10
-rw-r--r--Utility/libkqueue.c4
-rw-r--r--Utility/libmounts.c4
-rwxr-xr-xdebian/cabal-wrapper20
-rw-r--r--debian/changelog645
-rw-r--r--debian/control79
-rw-r--r--debian/copyright91
-rwxr-xr-xdebian/rules3
-rw-r--r--doc/Android/comment_20_81940ea56ace3dcd5fa84dfccd88ad96._comment2
-rw-r--r--doc/Android/oldcomments/comment_15_77bafc01b47d4cf8f96bde2b6704ed71._comment (renamed from doc/Android/comment_15_77bafc01b47d4cf8f96bde2b6704ed71._comment)0
-rw-r--r--doc/assistant.mdwn2
-rw-r--r--doc/assistant/comment_3_9bd3b532a5c026a1d664c898f8e335e6._comment8
-rw-r--r--doc/assistant/comment_4_c546a24459ca29025f00e424353c40d2._comment8
-rw-r--r--doc/assistant/comment_5_d17de359cdd46659170d373cd09c0979._comment8
-rw-r--r--doc/assistant/connection.pngbin0 -> 3181 bytes
-rw-r--r--doc/assistant/downloadnotification.pngbin0 -> 4513 bytes
-rw-r--r--doc/assistant/konquerormenu.pngbin0 -> 27159 bytes
-rw-r--r--doc/assistant/nautilusmenu.pngbin0 -> 59867 bytes
-rw-r--r--doc/assistant/release_notes.mdwn16
-rw-r--r--doc/assistant/share_with_a_friend_walkthrough/comment_1_c87889721e3a7e52ac1ed3752fa7db46._comment8
-rw-r--r--doc/automatic_conflict_resolution/comment_4_80539e11e36a0b64cee83b6b373bd843._comment17
-rw-r--r--doc/automatic_conflict_resolution/comment_5_00ac9e4a47ce9a886dbf573480f151bd._comment10
-rw-r--r--doc/automatic_conflict_resolution/comment_6_8a0860fee88f5954918305f055a39d8d._comment10
-rw-r--r--doc/automatic_conflict_resolution/comment_7_3d2250cc26036b8532faa980065e20d0._comment23
-rw-r--r--doc/automatic_conflict_resolution/comment_8_ef474c258ce8e0ebc6485c1366ae6315._comment8
-rw-r--r--doc/backends.mdwn19
-rw-r--r--doc/backends/comment_10_920cd139dfec8adb1089f5acf26de4d2._comment8
-rw-r--r--doc/backends/comment_11_f0f6316bbdc971a9ab157de9bbb9f74c._comment14
-rw-r--r--doc/backends/comment_12_da76dff5fe712318d7d4313f1d827883._comment10
-rw-r--r--doc/backends/comment_13_578423935bc71cdbdc23c3db06d1e870._comment8
-rw-r--r--doc/backends/comment_7_4aa8cfaec1090f79fed530720e4ddad4._comment18
-rw-r--r--doc/backends/comment_8_c40d2c2c929ad3239ee5d529e307c746._comment8
-rw-r--r--doc/backends/comment_9_5bef7f76f5e5b73a8e404fe6172b4368._comment12
-rw-r--r--doc/bugs.mdwn17
-rw-r--r--doc/bugs/127.0.0.1_references_on_remote_assistant_access.mdwn20
-rw-r--r--doc/bugs/3.20121112:_build_error_in_assistant.mdwn432
-rw-r--r--doc/bugs/3.20121112:_build_error_in_assistant/comment_1_b42f40ffd83321ab5cc0ef24ced15e98._comment8
-rw-r--r--doc/bugs/3.20121112:_build_error_in_assistant/comment_2_b1d2aa10ea84c5c370b3e76507fc8761._comment476
-rw-r--r--doc/bugs/3.20121112:_build_error_in_assistant/comment_3_b38e40d36bba95b16afbce68e7f25a80._comment8
-rw-r--r--doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04.mdwn97
-rw-r--r--doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_1_ce2efd2196e7682f4cdbabdb0616d449._comment8
-rw-r--r--doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_2_2a6faf662ebb85a8f1c89adcdfb9adb6._comment10
-rw-r--r--doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_3_37f34baa34068def1adf794d0942e462._comment8
-rw-r--r--doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_4_2f8a859fef9edc8eb93bf1cc74296702._comment8
-rw-r--r--doc/bugs/3.20121113_build_error___39__not_in_scope_getAddBoxComR__39__.mdwn33
-rw-r--r--doc/bugs/4.20130227_won__39__t_build_on_OS_X_Lion__44___because_testpack_won__39__t_build.mdwn57
-rw-r--r--doc/bugs/4.20130227_won__39__t_build_on_OS_X_Lion__44___because_testpack_won__39__t_build/comment_1_b7140e2bf1ea9c73ecc9e214095968e7._comment8
-rw-r--r--doc/bugs/4.20130227_won__39__t_build_on_OS_X_Lion__44___because_testpack_won__39__t_build/comment_2_6be87b2fb2ed828e7b4bf785729e910e._comment9
-rw-r--r--doc/bugs/4.20130601_xmpp_sync_error.mdwn125
-rw-r--r--doc/bugs/4.20130601_xmpp_sync_error/comment_1_5b50d97e44cbd5b31ff24537ec3f8603._comment14
-rw-r--r--doc/bugs/400_mode_leakage.mdwn25
-rw-r--r--doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes.mdwn37
-rw-r--r--doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes/comment_1_323262a080daed9cebd4caee4c887210._comment10
-rw-r--r--doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes/comment_2_6172dcd7db2322084483a18d4f3cc2d6._comment8
-rw-r--r--doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes/comment_3_5ae2178863709230ddb995905c629c4e._comment10
-rw-r--r--doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes/comment_4_19d32634789a09c1b04e9d3fcde364f7._comment8
-rw-r--r--doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop.mdwn22
-rw-r--r--doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_1_81839a6de7450734ee75b51e47a0898e._comment10
-rw-r--r--doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_2_907ce31a31df94984c2bd7aaafe5b10b._comment8
-rw-r--r--doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_3_d8a86ae0ae5fa1f91e0b40b8b2ba0406._comment10
-rw-r--r--doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_4_1f08fd5dd4f5d8723c2b5391cc3b60f9._comment22
-rw-r--r--doc/bugs/Adding_a_repository_as_a___34__remote_server__34___creates_a_bare_repository_next_to_the_existing_one.mdwn21
-rw-r--r--doc/bugs/Adding_a_repository_as_a___34__remote_server__34___creates_a_bare_repository_next_to_the_existing_one/comment_1_cb781d34889d583663e855c4074f8e0e._comment16
-rw-r--r--doc/bugs/Adding_a_repository_as_a___34__remote_server__34___creates_a_bare_repository_next_to_the_existing_one/comment_2_c0c87957d7c7a09664e60571a2ca0e8c._comment12
-rw-r--r--doc/bugs/Adding_box.com_remote_on_Android_fails_for_me.mdwn20
-rw-r--r--doc/bugs/Adding_box.com_remote_on_Android_fails_for_me/comment_1_0303ce880415d7e043533551c2b24694._comment10
-rw-r--r--doc/bugs/Adding_git_ssh_remote_fails.mdwn32
-rw-r--r--doc/bugs/Adding_git_ssh_remote_fails/comment_1_05c0bd9ac7c6f0045217fd72fc1f0a1b._comment10
-rw-r--r--doc/bugs/Adding_git_ssh_remote_fails/comment_2_df05456cafdd89e8ceea830199f42d45._comment10
-rw-r--r--doc/bugs/Adding_second_remote_repository_over_ssh_fails.mdwn41
-rw-r--r--doc/bugs/Adding_second_remote_repository_over_ssh_fails/comment_1_308d5f517bf00c8edc53db438de52355._comment14
-rw-r--r--doc/bugs/Adding_unencrypted_repo_on_drive_in_webapp_gives_internal_server_error__.mdwn69
-rw-r--r--doc/bugs/Addurl_with_quvi_not_working.mdwn74
-rw-r--r--doc/bugs/Allow_syncing_to_a_specific_directory_on_a_USB_remote.mdwn30
-rw-r--r--doc/bugs/Allow_syncing_to_a_specific_directory_on_a_USB_remote/comment_1_13ecedfbb34c3564af3a790b8bf0f591._comment25
-rw-r--r--doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__.mdwn22
-rw-r--r--doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__/comment_1_91787407727f7ed833d5970d3226d0cb._comment8
-rw-r--r--doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__/comment_2_f4c52fe33e9c4c107c2469fabb0c6826._comment10
-rw-r--r--doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__/comment_3_20c1f9399321dd85cb584b8845140b1d._comment8
-rw-r--r--doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__/comment_4_d92c30061e087878a2462b5a2e495346._comment12
-rw-r--r--doc/bugs/Android:_Clocking_on___34__Files__34___in_the_Dashboard_seems_to_do_nothing.mdwn24
-rw-r--r--doc/bugs/Android:_Clocking_on___34__Files__34___in_the_Dashboard_seems_to_do_nothing/comment_1_a9b03d4f4760fea2754a4dc93547f0a3._comment10
-rw-r--r--doc/bugs/Android:_Clocking_on___34__Files__34___in_the_Dashboard_seems_to_do_nothing/comment_2_015e859a16b1ce4c0c7601df0594d555._comment10
-rw-r--r--doc/bugs/Android:_no___34____47__etc__47__resolv.conf__34___when_submitting_jabber_user_and_password..mdwn20
-rw-r--r--doc/bugs/Android_4.4_install_fails_with_permission_denied_errors.mdwn295
-rw-r--r--doc/bugs/Android___34__This_build_of_git-annex_does_not_support_XMPP_pairing__34__.mdwn26
-rw-r--r--doc/bugs/Android___34__This_build_of_git-annex_does_not_support_XMPP_pairing__34__/comment_1_c034bb84e58b2dda1038ba205ec78c56._comment273
-rw-r--r--doc/bugs/Android___34__This_build_of_git-annex_does_not_support_XMPP_pairing__34__/comment_2_99a754f41d59fdd401ba6d169945e7c9._comment8
-rw-r--r--doc/bugs/Android___91__Terminal_session_finished__93__.mdwn33
-rw-r--r--doc/bugs/Android___91__Terminal_session_finished__93__/comment_1_31af3e5226430a4e94de58c0e33bd22b._comment12
-rw-r--r--doc/bugs/Android___91__Terminal_session_finished__93__/comment_2_a5bcbd2f85283e29e237e9850cd8109a._comment22
-rw-r--r--doc/bugs/Android___91__Terminal_session_finished__93__/comment_3_965efa6736dcff4d7010ea5533f31a59._comment8
-rw-r--r--doc/bugs/Android___91__Terminal_session_finished__93__/comment_4_90a0be2296b4a1d8c1708423666c9619._comment31
-rw-r--r--doc/bugs/Android___91__Terminal_session_finished__93__/comment_5_be4b720293992f75b9cc3e8f6687fb87._comment8
-rw-r--r--doc/bugs/Android___91__Terminal_session_finished__93__/comment_6_8e439138c97b8853ab2b6f96f6111568._comment8
-rw-r--r--doc/bugs/Android___91__Terminal_session_finished__93__/comment_7_6142516d816f78c724e22737aa3bca53._comment8
-rw-r--r--doc/bugs/Android_app_permission_denial_on_startup.mdwn18
-rw-r--r--doc/bugs/Android_app_permission_denial_on_startup/comment_10_dc06737997c8883ef0a12dbecd9ac30f._comment8
-rw-r--r--doc/bugs/Android_app_permission_denial_on_startup/comment_11_b444cd6717658116533745c51481dd3d._comment8
-rw-r--r--doc/bugs/Android_app_permission_denial_on_startup/comment_12_66181f34ed7496d1f6601b39e5ae3c65._comment13
-rw-r--r--doc/bugs/Android_app_permission_denial_on_startup/comment_1_ddf5761bf14de30ac97030ad338601ae._comment14
-rw-r--r--doc/bugs/Android_app_permission_denial_on_startup/comment_2_8b9fafa73ebf5f803c7da9531cfb5b34._comment10
-rw-r--r--doc/bugs/Android_app_permission_denial_on_startup/comment_3_58501bb043b4c5836d7472ffd6baa72c._comment23
-rw-r--r--doc/bugs/Android_app_permission_denial_on_startup/comment_4_d3a04dc7bbc1816cccc8d85c73ffb689._comment8
-rw-r--r--doc/bugs/Android_app_permission_denial_on_startup/comment_5_eeabbc0cc434ed84c36a3f4e03fcef36._comment10
-rw-r--r--doc/bugs/Android_app_permission_denial_on_startup/comment_6_4203b496bee1bdd424466ed63b5d31cf._comment10
-rw-r--r--doc/bugs/Android_app_permission_denial_on_startup/comment_7_74373eb2cc46b76659e3c463d6682d15._comment10
-rw-r--r--doc/bugs/Android_app_permission_denial_on_startup/comment_8_0923d2a09df01d152ec4784c92689c96._comment8
-rw-r--r--doc/bugs/Android_app_permission_denial_on_startup/comment_9_b60928e54a5b620899cf29820b9b8e70._comment10
-rw-r--r--doc/bugs/Android_can__39__t_sync_files_with_utf-8_characters_in_names.mdwn36
-rw-r--r--doc/bugs/Android_can__39__t_sync_files_with_utf-8_characters_in_names/comment_1_bcc3ce19cf26731057a7f3189fcbae19._comment10
-rw-r--r--doc/bugs/Android_daily_build_missing_webapp.mdwn23
-rw-r--r--doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean.mdwn166
-rw-r--r--doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean/comment_1_b41666c032aeb2d0de35023328391edb._comment25
-rw-r--r--doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean/comment_2_95ebed938df3db2b6d4ebe4c666c08f8._comment8
-rw-r--r--doc/bugs/Annex_thinks_file_exists_afer_being_dropped.mdwn27
-rw-r--r--doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_1_1d100441fd1ef529eb854b350fece9ee._comment29
-rw-r--r--doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_2_166c459c2b27859cf457e17da685fe75._comment14
-rw-r--r--doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_3_9d985b6e7973bfaaf8b4f5349d8c13ee._comment8
-rw-r--r--doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_4_3e084cff454b95c7170c0225a53f0c30._comment11
-rw-r--r--doc/bugs/Assistant_breaks_when_broken_symlinks_are_in_.git__47__annex__47__tmp.mdwn9
-rw-r--r--doc/bugs/Assistant_breaks_when_broken_symlinks_are_in_.git__47__annex__47__tmp/comment_1_659e0c5127c92b1c7643823d0c240543._comment10
-rw-r--r--doc/bugs/Assistant_does_not_actually_check_newly_annex-added_files_into_git_until_daily_sanity_check.mdwn106
-rw-r--r--doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default.mdwn16
-rw-r--r--doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_1_8577fdaa4d49e6241c4372b159694c9c._comment12
-rw-r--r--doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_2_027521e48283c68b39315bb8213f6e45._comment10
-rw-r--r--doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_3_fd8f6938596aace60b04fb35c4069e37._comment10
-rw-r--r--doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_4_ca908021ab5a2a50fd0d4a7e8d12498f._comment9
-rw-r--r--doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_5_73532556cfc354ad5f37a3f3a048fb32._comment12
-rw-r--r--doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_6_ced397b9e6119a0798a282ee07e885df._comment61
-rw-r--r--doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_7_8acb66850e5db8337cf3f2b2dd236ccc._comment10
-rw-r--r--doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_8_7eb530851ae6fa1a69813725c4e8fcec._comment59
-rw-r--r--doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_9_c7d51a26e1febc3894d02546940d64e5._comment19
-rw-r--r--doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files.mdwn64
-rw-r--r--doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_1_f32fbae29e4db039804c0853256c238c._comment10
-rw-r--r--doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_2_405bfa00dfd433352c263afe75e94b2c._comment10
-rw-r--r--doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_3_c8cac8d800199ca4d8a65ba72abf678e._comment40
-rw-r--r--doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_4_ee5fa8a22d1571b0040aa97c4979ef92._comment14
-rw-r--r--doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_5_eef448b9e3dd1a717430a60d1001a7ee._comment10
-rw-r--r--doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate.mdwn435
-rw-r--r--doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_1_418103046e296a43cfe0f0cf69e729d5._comment8
-rw-r--r--doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_2_9405804842bb23e8040ec85b271b18af._comment23
-rw-r--r--doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_3_01fc26e443ea3a8a351174b45f25dc2a._comment10
-rw-r--r--doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_4_6e8f0889359bb2f3e3438658c9776f76._comment14
-rw-r--r--doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_5_902fe9ff295453461b66d84463205fc3._comment10
-rw-r--r--doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_6_ce01656b191d2bb13a3ddc29794e1e7a._comment12
-rw-r--r--doc/bugs/Assistant_dropping_files_it_has_just_transferred_elsewhere_again.mdwn26
-rw-r--r--doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t.mdwn37
-rw-r--r--doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_1_5e7d5b0b996a171c641fa560a613d319._comment19
-rw-r--r--doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_2_2015dfc648d26d6dfabe6ad4f4754034._comment13
-rw-r--r--doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_3_8f394437982cebeaf878f5b3871afaf3._comment18
-rw-r--r--doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_4_ccd108a53a9fb747539e269becfb3e05._comment9
-rw-r--r--doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_5_7ee571496c6d7cd57a206e6356dc2be3._comment166
-rw-r--r--doc/bugs/Assistant_enters_eternal_loop_and_eats_up_all_of_RAM_after_X_restart.mdwn24
-rw-r--r--doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory.mdwn520
-rw-r--r--doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_10_edb2428552cf98bfb1735c2d6daf2b20._comment8
-rw-r--r--doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_1_ac8c39e362e6c806b9d68befc0199ccd._comment10
-rw-r--r--doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_2_b2941bf7901a1b2237b7210c8f0af2a5._comment22
-rw-r--r--doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_3_1429ca784a03bc424b3537cbe0449421._comment23
-rw-r--r--doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_4_f9e65cf5598b4b14eeee1f41f46d4084._comment12
-rw-r--r--doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_5_044ecac2d2e670e1ef69809c944093d1._comment19
-rw-r--r--doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_6_6f4f51e1583bed5e7e601e4f30f4207b._comment8
-rw-r--r--doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_7_683a0a3d4caea0ee625e41ae8a6c7c06._comment81
-rw-r--r--doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_8_03dd76b01f46a7cc66eddac3e054c8ad._comment8
-rw-r--r--doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_9_5f4444f03cbebaa44628288095383679._comment89
-rw-r--r--doc/bugs/Assistant_lost_dbus_connection_spamming_log.mdwn78
-rw-r--r--doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_10_b47d543e06a1a243211a2fa0cb5d09a3._comment13
-rw-r--r--doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_11_399c1e4455dce105df95414fe3ff939d._comment8
-rw-r--r--doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_12_1cfdd76e751ee3726bd80359cfc85c47._comment8
-rw-r--r--doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_1_27fc71cadcbe6d5f146ffdb72b64689a._comment12
-rw-r--r--doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_2_0fb01ff463e7da6df2864186dc28f8e4._comment12
-rw-r--r--doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_3_10fa5082909f5e568623cf6d901d5161._comment11
-rw-r--r--doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_4_f4e0fa25b7f466228622a6da02b157e7._comment24
-rw-r--r--doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_5_6b9b87bfb8b94171b3dba51919fd1ceb._comment10
-rw-r--r--doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_6_51f35f069c95a5ea7bd4dbab47b5702b._comment10
-rw-r--r--doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_7_691661d902acbf9c11d713541d5d39e4._comment8
-rw-r--r--doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_8_ef559feb7b350f2014055680d087c2bc._comment10
-rw-r--r--doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_9_278b41aaa73a214b2b38881242a29b17._comment12
-rw-r--r--doc/bugs/Assistant_merge_loop.mdwn19
-rw-r--r--doc/bugs/Assistant_merge_loop/comment_10_8fe176691f0f61c15085d3c38f0ea50f._comment8
-rw-r--r--doc/bugs/Assistant_merge_loop/comment_11_6e3a78327c0b813415ebf85e298813d4._comment10
-rw-r--r--doc/bugs/Assistant_merge_loop/comment_12_fc5ceb09cc358521b32877fe4b0fb821._comment8
-rw-r--r--doc/bugs/Assistant_merge_loop/comment_14_46bddc2451da3bf5029248198cf02dcd._comment8
-rw-r--r--doc/bugs/Assistant_merge_loop/comment_14_89947f4af19ceae36fbe0a69aa10df25._comment10
-rw-r--r--doc/bugs/Assistant_merge_loop/comment_1_ccf46511b924f86b488dba25060baa06._comment14
-rw-r--r--doc/bugs/Assistant_merge_loop/comment_2_afcbf3f8575e1a967c79693b94ef055c._comment12
-rw-r--r--doc/bugs/Assistant_merge_loop/comment_3_07341221b2839fdc1c43634e011451d2._comment62
-rw-r--r--doc/bugs/Assistant_merge_loop/comment_4_7ae215b478843d2a8c705cac385fcf22._comment8
-rw-r--r--doc/bugs/Assistant_merge_loop/comment_5_11873461f093a266f0bb7e129bc21cde._comment8
-rw-r--r--doc/bugs/Assistant_merge_loop/comment_6_e7b6ecdd7e2b0222ea0baa0ed770e66d._comment80
-rw-r--r--doc/bugs/Assistant_merge_loop/comment_7_7717d074611943b831f00ad10918b515._comment8
-rw-r--r--doc/bugs/Assistant_merge_loop/comment_8_5ce91ac76498539ada344d1639984302._comment8
-rw-r--r--doc/bugs/Assistant_merge_loop/comment_9_b09a5eaa2588559e19b3549bd3c8b496._comment10
-rw-r--r--doc/bugs/Assistant_redirects_to_127.0.0.1_in_some_cases__44___although_used_remotely.mdwn29
-rw-r--r--doc/bugs/Assistant_removed_all_references_to_files.mdwn1305
-rw-r--r--doc/bugs/Assistant_removed_all_references_to_files/comment_1_1f7da19ea99c263d56db6331d4b1e346._comment14
-rw-r--r--doc/bugs/Assistant_removed_all_references_to_files/comment_2_0dbb8df1ad267d1c502646a7131a99f1._comment10
-rw-r--r--doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux.mdwn75
-rw-r--r--doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_10_ec4a7388ea7106a953f599b664b37f1d._comment8
-rw-r--r--doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_1_6a60c23850a5e2a7bba355e1317abc69._comment13
-rw-r--r--doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_2_90b6ed232b2917b9fe041532284e1212._comment10
-rw-r--r--doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_3_5a89d79395d96c43d7d8a6fd9dc275f1._comment248
-rw-r--r--doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_4_cdd26c71875428dbe3c100944a443d3f._comment9
-rw-r--r--doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_5_76242f5d6c815acd5bd58213bd8bb0fe._comment10
-rw-r--r--doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_6_10852171c0207ca61ea6df1082107353._comment8
-rw-r--r--doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_7_73e8a5696709f8154e63693ba5e569c3._comment10
-rw-r--r--doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_8_392fc344e5833b0eb665fcd38f956b7a._comment8
-rw-r--r--doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_9_9f0fc19a7fcaf7a5827e59e1495cf8c9._comment8
-rw-r--r--doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor.mdwn28
-rw-r--r--doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_10_0e1db417a5815ea903c1f7ccd07308c4._comment8
-rw-r--r--doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_1_28b0cfcba8902c9c16dbe6c4b07984c4._comment10
-rw-r--r--doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_2_952b3f78da756ff5f89235db94bec67f._comment53
-rw-r--r--doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_3_d86aba42d014c4b4f708dcb5fe86e055._comment10
-rw-r--r--doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_4_9aaf296ef53da317d6dc6728705d5c56._comment16
-rw-r--r--doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_5_0d5f8a05a1505660f7ff1bc4ac6ff271._comment8
-rw-r--r--doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_6_3dfdfd49597c85575cb689adb70d2de6._comment8
-rw-r--r--doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_7_943a446c60ed9d7d4f240ba7f00fe925._comment8
-rw-r--r--doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_8_9563859850fb40b1cc2c20c516c12960._comment16
-rw-r--r--doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_9_cf6221c585ee3dbf039bdaea71842d9b._comment9
-rw-r--r--doc/bugs/Attempting_to_repair_repository_almost_every_day.mdwn5
-rw-r--r--doc/bugs/Auto-repair_greatly_slows_down_the_machine.mdwn2
-rw-r--r--doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_10_d46c6314bff75a0ae679bc2358b28c2b._comment8
-rw-r--r--doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_11_1c2c3adfbccd2b14a7d1c4618800e735._comment8
-rw-r--r--doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_7_4649fa11745ff668e43833209811d005._comment10
-rw-r--r--doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_8_6138a48f0b7e8be2bb66430397afdf5a._comment8
-rw-r--r--doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_9_3da5940bb2e9689b00239eec9a073f1c._comment8
-rw-r--r--doc/bugs/Auto_update_not_updating_to_newest_version.mdwn70
-rw-r--r--doc/bugs/Auto_update_not_updating_to_newest_version/comment_1_6f75569dc960ea5bc4d334b2b321ebf8._comment12
-rw-r--r--doc/bugs/Auto_update_not_updating_to_newest_version/comment_2_4f26cce07a9f37c79b166111db499ce1._comment11
-rw-r--r--doc/bugs/Auto_update_not_updating_to_newest_version/comment_3_585bfcaa655b0e838f9b66a241d5ffc2._comment2163
-rw-r--r--doc/bugs/Auto_update_not_updating_to_newest_version/comment_4_2705fbfd74652ab097ac48ec687517c7._comment8
-rw-r--r--doc/bugs/Auto_update_not_updating_to_newest_version/comment_5_ab1ee005dbd54e560ea6e3c716cc8f1b._comment70
-rw-r--r--doc/bugs/Automatic_upgrades_should_be_cryptographically_signed.mdwn5
-rw-r--r--doc/bugs/Automatic_upgrades_should_be_cryptographically_signed/comment_1_37ed871c82879a31c2d8cfc7d9736548._comment10
-rw-r--r--doc/bugs/Backup_repository_doesn__39__t_get_all_files.mdwn40
-rw-r--r--doc/bugs/Backup_repository_doesn__39__t_get_all_files/comment_1_a486dc0f741e08d5bcf2fd1a6ecbdf05._comment12
-rw-r--r--doc/bugs/Bloom_filter_capacity_too_large_to_represent.mdwn44
-rw-r--r--doc/bugs/Bloom_filter_capacity_too_large_to_represent/comment_1_43c824a3b843faa2377bfd78158c72fe._comment14
-rw-r--r--doc/bugs/Bloom_filter_capacity_too_large_to_represent/comment_2_9b74457549e2739ae45dccd128de946f._comment12
-rw-r--r--doc/bugs/Bloom_filter_capacity_too_large_to_represent/comment_3_5790bbbe347e1806062ccb60fcad046a._comment12
-rw-r--r--doc/bugs/Bloom_filter_capacity_too_large_to_represent/comment_4_9fb9fdbc6218d6b86b0921f411f78891._comment12
-rw-r--r--doc/bugs/Bootstrap3_icons_missing_on_Android.mdwn7
-rw-r--r--doc/bugs/Bootstrap3_icons_missing_on_Android/comment_10_da4e26c77376a8171493a815bdb51ff1._comment10
-rw-r--r--doc/bugs/Bootstrap3_icons_missing_on_Android/comment_11_506e26de284a6429366def33b007bc0c._comment8
-rw-r--r--doc/bugs/Bootstrap3_icons_missing_on_Android/comment_12_a77477951576fc657d693811f11f9975._comment24
-rw-r--r--doc/bugs/Bootstrap3_icons_missing_on_Android/comment_13_c3ef67bded8ed3c511a8ea85b8bd81a5._comment8
-rw-r--r--doc/bugs/Bootstrap3_icons_missing_on_Android/comment_1_97cf233d8401d642337d5fe9dd525e2b._comment8
-rw-r--r--doc/bugs/Bootstrap3_icons_missing_on_Android/comment_2_4981a0a894b77e94a3bffec82b0f6e51._comment16
-rw-r--r--doc/bugs/Bootstrap3_icons_missing_on_Android/comment_3_dbe960392aaa0839886381820754814a._comment10
-rw-r--r--doc/bugs/Bootstrap3_icons_missing_on_Android/comment_4_cdf9621fe3e9f8eb8b7af88f779a7116._comment8
-rw-r--r--doc/bugs/Bootstrap3_icons_missing_on_Android/comment_5_a2318f094b30f58fefc072807896c099._comment8
-rw-r--r--doc/bugs/Bootstrap3_icons_missing_on_Android/comment_6_7c2f1d914793798708ca13b6ac3dd474._comment29
-rw-r--r--doc/bugs/Bootstrap3_icons_missing_on_Android/comment_7_a24b5165590b5d58919da1003cd20c54._comment8
-rw-r--r--doc/bugs/Bootstrap3_icons_missing_on_Android/comment_8_71ed14b8e5a898b1643d5e37591c2476._comment8
-rw-r--r--doc/bugs/Bootstrap3_icons_missing_on_Android/comment_9_15357e33c2431080d45f7cef5f4f1209._comment8
-rw-r--r--doc/bugs/Browser_fails_to_launch_on_Android___39__git_annex_webapp__39__.mdwn35
-rw-r--r--doc/bugs/Browser_fails_to_launch_on_Android___39__git_annex_webapp__39__/comment_1_173393b0b3d2d8c622c0d8a2eaace421._comment8
-rw-r--r--doc/bugs/Build-depends_needs___39__hxt__39___added_-_3.20121127.mdwn36
-rw-r--r--doc/bugs/Build_error:_Ambiguous_occurrence___96__callCommand__39__.mdwn74
-rw-r--r--doc/bugs/Build_error:_Ambiguous_occurrence___96__callCommand__39__/comment_1_3127b3c448888fdf70096f24c7cbfd3c._comment50
-rw-r--r--doc/bugs/Build_error_on_Linux.mdwn29
-rw-r--r--doc/bugs/Build_error_on_Mac_OSX_10.6.mdwn11
-rw-r--r--doc/bugs/Build_error_when_S3_is_disabled.mdwn39
-rw-r--r--doc/bugs/Build_error_with_Yesod_1.4.mdwn287
-rw-r--r--doc/bugs/Build_error_with_Yesod_1.4/comment_1_42fe9d62c9dcc55deea35d16b67177e6._comment8
-rw-r--r--doc/bugs/Build_error_with_Yesod_1.4/comment_2_05f6fb19f2527f6dd72ab0e2f87c021a._comment8
-rw-r--r--doc/bugs/Build_fails_when_no_wget_avalible.mdwn46
-rw-r--r--doc/bugs/Build_fails_when_no_wget_avalible/comment_1_c40db66d48d69d03847d73154faf3f59._comment10
-rw-r--r--doc/bugs/Build_fails_when_no_wget_avalible/comment_2_f98ce0d40c60ea37f6174117bb7cef9f._comment7
-rw-r--r--doc/bugs/Building_fails:_Could_not_find_module___96__Text.Blaze__39__.mdwn105
-rw-r--r--doc/bugs/Building_fails:__Could_not_find_module___96__Data.XML.Types__39__.mdwn82
-rw-r--r--doc/bugs/Building_fails:___Not_in_scope:_type_constructor_or_class___96__Html__39__.mdwn189
-rw-r--r--doc/bugs/Building_in_cabal_using_--bindir___126____47__bin_breaks_the_desktop_link.mdwn15
-rw-r--r--doc/bugs/Building_in_cabal_using_--bindir___126____47__bin_breaks_the_desktop_link/comment_1_c0f0a2878070ed86900815c6b6a5fa5e._comment8
-rw-r--r--doc/bugs/Building_in_cabal_using_--bindir___126____47__bin_breaks_the_desktop_link/comment_2_53f2de3d3993821d8502fd08a0fcce12._comment8
-rw-r--r--doc/bugs/Building_on_OpenBSD.mdwn40
-rw-r--r--doc/bugs/Building_on_OpenBSD/comment_1_bec4a7253e851567cd47b96ceead5d91._comment10
-rw-r--r--doc/bugs/Building_on_OpenBSD/comment_2_4a37935080b86643ecda717fe17f8f87._comment18
-rw-r--r--doc/bugs/Building_on_OpenBSD/comment_3_2df229eb965189e2f7ea6dcd66cf68ca._comment24
-rw-r--r--doc/bugs/Building_on_OpenBSD/comment_4_d141c0bac92bdfbc8b95d532d032174c._comment8
-rw-r--r--doc/bugs/Building_on_OpenBSD/comment_5_8aba96ef58eb6954f1d15029e0dda9ed._comment10
-rw-r--r--doc/bugs/Building_on_OpenBSD/comment_6_82e6744e246fe5caa72081d4e921b168._comment11
-rw-r--r--doc/bugs/Button_to_cancel_conistency_checks.mdwn21
-rw-r--r--doc/bugs/CHECKPRESENT_could_check_file_size_as_well.mdwn7
-rw-r--r--doc/bugs/CHECKPRESENT_could_check_file_size_as_well/comment_1_7bbba896da745a8a6b69ec62bf71fc89._comment13
-rw-r--r--doc/bugs/Cabal_cannot_solve_dependencies.mdwn36
-rw-r--r--doc/bugs/Cabal_cannot_solve_dependencies/comment_1_1d41ac79867226dcb71f1c7b38da062d._comment21
-rw-r--r--doc/bugs/Cabal_cannot_solve_dependencies/comment_2_50e72633a4462f6f6eb33d57b137fdcc._comment48
-rw-r--r--doc/bugs/Cabal_cannot_solve_dependencies/comment_3_886f2d1f7c47a3973b8dc7d7c412289a._comment10
-rw-r--r--doc/bugs/Cabal_dependency_monadIO_missing.mdwn17
-rw-r--r--doc/bugs/Cabal_dependency_monadIO_missing/comment_1_14be660aa57fadec0d81b32a8b52c66f._comment75
-rw-r--r--doc/bugs/Cabal_dependency_monadIO_missing/comment_2_4f4d8e1e00a2a4f7e8a8ab082e16adac._comment8
-rw-r--r--doc/bugs/Calls_to_rsync_don__39__t_always_use__annex-rsync-options.mdwn35
-rw-r--r--doc/bugs/Can__39__t___34__git-annex_get__34___with_3.20111203.mdwn27
-rw-r--r--doc/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X.mdwn3
-rw-r--r--doc/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X/comment_10_2c8e8a4f35b392b1cb4dc8104786312d._comment17
-rw-r--r--doc/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X/comment_11_b0bd8c98b5a4d67f66f8d64665569490._comment10
-rw-r--r--doc/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X/comment_12_1a0337d1df87898db3d3dadc911bdb38._comment8
-rw-r--r--doc/bugs/Can__39__t_rename___34__here__34___repository.mdwn32
-rw-r--r--doc/bugs/Can__39__t_set_repositories_directory.mdwn15
-rw-r--r--doc/bugs/Can__39__t_set_repositories_directory/comment_1_beb5d5b66a8d0fab12be44a7d877e9b0._comment8
-rw-r--r--doc/bugs/Can__39__t_set_repositories_directory/comment_2_366aa798a5e55350d32b63b31c19112b._comment19
-rw-r--r--doc/bugs/Can__39__t_set_repositories_directory/comment_3_812554d58ad9274a50b2a33d5f4d2ec3._comment10
-rw-r--r--doc/bugs/Can__39__t_set_repositories_directory/comment_4_bec5f147441ad18c97845b44c90c728b._comment28
-rw-r--r--doc/bugs/Can__39__t_set_up_rsync.net_repo_on_OS_X_10.9.mdwn24
-rw-r--r--doc/bugs/Can__39__t_set_up_rsync.net_repo_on_OS_X_10.9/comment_1_91a961cfa5dd4d6f0e4abfbbcfb81e92._comment35
-rw-r--r--doc/bugs/Can__39__t_set_up_rsync.net_repo_on_OS_X_10.9/comment_2_0b5266e31fe7014bd11ea164f8e4744e._comment12
-rw-r--r--doc/bugs/Can__39__t_start_it_on_Debian_Wheezy.mdwn26
-rw-r--r--doc/bugs/Can__39__t_transfer_files_to_rsync_remote_with_encryption__61__shared.mdwn54
-rw-r--r--doc/bugs/Can__39__t_transfer_files_to_rsync_remote_with_encryption__61__shared/comment_1_ca7ec2041bbec330476fb040b1e66a92._comment8
-rw-r--r--doc/bugs/Can__39__t_transfer_files_to_rsync_remote_with_encryption__61__shared/comment_2_c476847665a5320214721497d8fad15b._comment8
-rw-r--r--doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1.mdwn18
-rw-r--r--doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_1_b25859c159d62f2e92b92f505535131b._comment14
-rw-r--r--doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_2_4c9eab9120718457fdc1ae9051e44bca._comment16
-rw-r--r--doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_3_61aec9801e1f76db4a286536ffacc3ed._comment12
-rw-r--r--doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_4_6381ff0ea419831d9bbed27511cad1e9._comment16
-rw-r--r--doc/bugs/Cannot_copy_to_a_git-annex_remote.mdwn14
-rw-r--r--doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_10_258a376cff4c62bc4be919322bb1bd88._comment10
-rw-r--r--doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_10_d9b830a1fdea8760cb7da1d36b3cd34d._comment12
-rw-r--r--doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_1_09d76e5f9480b9a35644a8f08790cd97._comment10
-rw-r--r--doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_2_7b586c705a937d09a1b44bd6af2d4686._comment8
-rw-r--r--doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_3_07dbd8f64982f1921077e23f468122cf._comment25
-rw-r--r--doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_4_926fd494f0b27103a99083cd5d0702d5._comment8
-rw-r--r--doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_5_80444a509cc340f5eb3cd08b193fd389._comment10
-rw-r--r--doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_6_4c6b99cd67b4aa742da5101fb1b379f7._comment8
-rw-r--r--doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_8_f45cdd2b6acc5f458b67539fced0e529._comment12
-rw-r--r--doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_9_5a455dd14fb9d3ff408bb3f81e366c38._comment10
-rw-r--r--doc/bugs/Cannot_set_direct_mode_with_non_default_worktree.mdwn45
-rw-r--r--doc/bugs/Cannot_sync_repos_setup_using_webapp:___34__git-annex-shell:_Only_allowed_to_access___126____47__foo_not___126____47__bar__47____34__.mdwn29
-rw-r--r--doc/bugs/Cannot_sync_repos_setup_using_webapp:___34__git-annex-shell:_Only_allowed_to_access___126____47__foo_not___126____47__bar__47____34__/comment_1_6f7b5c164ff64f00b8814b2ee334709f._comment13
-rw-r--r--doc/bugs/Cannot_sync_repos_setup_using_webapp:___34__git-annex-shell:_Only_allowed_to_access___126____47__foo_not___126____47__bar__47____34__/comment_2_807ef1250237bf4426e3a24c1f9ba357._comment10
-rw-r--r--doc/bugs/Check_for_minimum_Git_version.mdwn41
-rw-r--r--doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_.mdwn46
-rw-r--r--doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_/comment_1_81a4647a9b51bed8c230a2a16990915d._comment14
-rw-r--r--doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_/comment_2_f8e97dded9ba6d2305de1278025924fe._comment23
-rw-r--r--doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_/comment_3_eb34061429cb8c7d0b155825e84b657b._comment35
-rw-r--r--doc/bugs/Committer_crashed.mdwn32
-rw-r--r--doc/bugs/Compilation_error_when_building_version_5.20140402_in_cabal_sandbox.mdwn36
-rw-r--r--doc/bugs/Compilation_error_when_building_version_5.20140402_in_cabal_sandbox/comment_1_bd830cadaeffda0366b3ae46b34c0c55._comment39
-rw-r--r--doc/bugs/Compile_needs_more_than_1.5gb_of_memory.mdwn16
-rw-r--r--doc/bugs/Compile_needs_more_than_1.5gb_of_memory/comment_1_0806b5132c55d7a5a17fbdad7e3f2291._comment16
-rw-r--r--doc/bugs/Complete_failure_trying_to_unannex_a_large_annex.mdwn56
-rw-r--r--doc/bugs/Complete_failure_trying_to_unannex_a_large_annex/comment_1_1c202695ab7fe62cdc8770e1fb428d0c._comment10
-rw-r--r--doc/bugs/Conflicting_archive_descriptions.mdwn16
-rw-r--r--doc/bugs/ControlPath_too_long_for_Unix_domain_socket.mdwn53
-rw-r--r--doc/bugs/ControlPath_too_long_for_Unix_domain_socket/comment_1_60f58e205604eebe668b1e05dcfbf9a7._comment24
-rw-r--r--doc/bugs/ControlPath_too_long_for_Unix_domain_socket/comment_2_9c0c65389a3b4e7e81b8de96d430a3f1._comment8
-rw-r--r--doc/bugs/Corrupted_drive:_Assistant_seems_consider_files_deleted_and_deletes_them_elsewhere_too.mdwn2
-rw-r--r--doc/bugs/Could_not_find_module_Data.Default.mdwn33
-rw-r--r--doc/bugs/Could_not_read_from_remote_repository.mdwn2
-rw-r--r--doc/bugs/Could_not_read_from_remote_repository/comment_3_95d16045dc238dba19a98808de2eeedf._comment11
-rw-r--r--doc/bugs/Could_not_resolve_dependencies.mdwn40
-rw-r--r--doc/bugs/Crash_trying_to_sync_with_a_repo_over_ssh.mdwn43
-rw-r--r--doc/bugs/Crash_trying_to_sync_with_a_repo_over_ssh/comment_1_9705f295ad8101f3f0ede18e590b56ef._comment8
-rw-r--r--doc/bugs/Crash_trying_to_sync_with_a_repo_over_ssh/comment_2_0d751d81ac618f8d7e3f1dd20c830542._comment8
-rw-r--r--doc/bugs/Crash_when_adding_jabber_account_.mdwn32
-rw-r--r--doc/bugs/Crash_when_adding_jabber_account_/comment_1_2dc61ebcfa8919fb839656999c155c52._comment10
-rw-r--r--doc/bugs/Crash_when_adding_jabber_account_/comment_2_e49af3b8a937d82eda1509b6f67b21d4._comment8
-rw-r--r--doc/bugs/Crash_when_adding_jabber_account_/comment_3_e59f8813bf1a7c4e3c8c120fe82348b9._comment10
-rw-r--r--doc/bugs/Crash_when_adding_jabber_account_/comment_4_716ac138cb69eecd0fb586699b4aeb2a._comment8
-rw-r--r--doc/bugs/Crash_when_adding_jabber_account_/comment_5_9bfd8df548d5866599dfc69fb3aaf94a._comment8
-rw-r--r--doc/bugs/Crash_when_disabling_syncing_in_the_webapp.mdwn25
-rw-r--r--doc/bugs/Crash_when_disabling_syncing_in_the_webapp/comment_1_e25dd80370820782f9c6a877101d8703._comment10
-rw-r--r--doc/bugs/Crash_when_disabling_syncing_in_the_webapp/comment_2_4031c16362137747717e9595cb5c8a15._comment10
-rw-r--r--doc/bugs/Crash_when_disabling_syncing_in_the_webapp/comment_3_0667f39f60bdaba6670f5b8304a8a77c._comment12
-rw-r--r--doc/bugs/Creating_a_box.com_repository_fails.mdwn41
-rw-r--r--doc/bugs/Creating_a_box.com_repository_fails/comment_1_c0b4855b65cb7052daf6538c2ad73e99._comment11
-rw-r--r--doc/bugs/Creating_a_box.com_repository_fails/comment_2_b05a1e7b37989c698353cc6b3fd02d7c._comment12
-rw-r--r--doc/bugs/Creating_a_box.com_repository_fails/comment_3_6c3610fb95676592f17f36e4e1b09bd8._comment8
-rw-r--r--doc/bugs/Creating_a_box.com_repository_fails/comment_4_c9895712e72854e4b5ff7a58e82ae374._comment17
-rw-r--r--doc/bugs/Creating_a_box.com_repository_fails/comment_5_93981afe8162f64ebb9d8c2c6a7ef91e._comment8
-rw-r--r--doc/bugs/Creating_a_box.com_repository_fails/comment_6_752b5725b4596721438098d38af8fb66._comment8
-rw-r--r--doc/bugs/Creating_a_box.com_repository_fails/comment_7_73f71386f8eafbb65f4cc9769021710f._comment13
-rw-r--r--doc/bugs/Creating_a_box.com_repository_fails/comment_8_109e37051beb729834e05997c023b849._comment8
-rw-r--r--doc/bugs/Creating_a_remote_located_in___34____126____47__wherever__34___works_incorrectly.mdwn37
-rw-r--r--doc/bugs/Creating_an_S3_repository_with_an_invalid_name_throws_an_exception.mdwn18
-rw-r--r--doc/bugs/Creating_an_encrypted_S3_does_not_check_for_presence_of_GPG.mdwn1
-rw-r--r--doc/bugs/DS__95__Store_not_gitignored.mdwn26
-rw-r--r--doc/bugs/DS__95__Store_not_gitignored/comment_1_b93ac0ea3be82c361ceb4352e742ba39._comment8
-rw-r--r--doc/bugs/DS__95__Store_not_gitignored/comment_2_4136e1f4aba7aa7562dafcf6a213e10c._comment58
-rw-r--r--doc/bugs/Daemon_stops_working_on_mounted_CIF_share.mdwn12
-rw-r--r--doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_1_2a5fb522cbf6e2cefbee0a5fc48287d0._comment45
-rw-r--r--doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_2_6b8d35d464e248c29764e3adbc1c9bae._comment8
-rw-r--r--doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_3_e134ba74ec996a419d6f9903871b9b03._comment47
-rw-r--r--doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_4_2ad592d92dda2d1e78235bad5764f5d9._comment22
-rw-r--r--doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_5_42ad8c7944c210ac1be812e463e03d7c._comment13
-rw-r--r--doc/bugs/Default_startup_command.mdwn29
-rw-r--r--doc/bugs/Detection_assumes_that_shell_is_bash.mdwn24
-rw-r--r--doc/bugs/Difficult_to_troubleshoot_XMPP_login_failures.mdwn11
-rw-r--r--doc/bugs/Difficult_to_troubleshoot_XMPP_login_failures/comment_1_4205bccf515169031e4a9ed8e905262c._comment10
-rw-r--r--doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files.mdwn25
-rw-r--r--doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_1_cb10385a4f046bfe676720ded3409379._comment14
-rw-r--r--doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_2_4bcf1a897181e40c9c8969d597a844f0._comment8
-rw-r--r--doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_3_6a6d22d218f036c9977072973ed99aa8._comment11
-rw-r--r--doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_4_eaa7ffb3a1d9ffd6d89de301bd2cd5b2._comment11
-rw-r--r--doc/bugs/Direct_mode_repositories_end_up_with_unstaged_changes.mdwn46
-rw-r--r--doc/bugs/Direct_mode_repositories_end_up_with_unstaged_changes/comment_1_300a2b246182be3079db20a7e3322261._comment8
-rw-r--r--doc/bugs/Direct_mode_repositories_still_use_symlinks_sometimes.mdwn4
-rw-r--r--doc/bugs/Direct_mode_sync_fails_to_transfer_a_10GB_file.mdwn60
-rw-r--r--doc/bugs/Direct_mode_sync_fails_to_transfer_a_10GB_file/comment_1_cb9e9dada7baf4e48725a9483b3b448a._comment25
-rw-r--r--doc/bugs/Discrepancy_between_git_annex_add_and_git_annex_watch.mdwn33
-rw-r--r--doc/bugs/Displayed_copy_speed_is_wrong.mdwn8
-rw-r--r--doc/bugs/Displayed_copy_speed_is_wrong/comment_1_74de3091e8bfd7acd6795e61f39f07c6._comment8
-rw-r--r--doc/bugs/Displayed_copy_speed_is_wrong/comment_2_8b240de1d5ae9229fa2d77d1cc15a552._comment8
-rw-r--r--doc/bugs/Drop_--from_always_trusts_local_repository.mdwn46
-rw-r--r--doc/bugs/Drop_files_with_the_same_checksum..mdwn33
-rw-r--r--doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder.mdwn3747
-rw-r--r--doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_1_ae4a13ff121d27f78904eee9bf5e716b._comment20
-rw-r--r--doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_2_32e360cd7b100ddb9a526e7833fc55e1._comment15
-rw-r--r--doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_3_650dc9ede4e16ef668d96840f63dad47._comment12
-rw-r--r--doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_4_721cf184fb5a5244ec5c15de3302ebf7._comment33
-rw-r--r--doc/bugs/Error___39__get__39__ting_files_from_rsync_remote__44___versions_3.20120315_and_3.20120430.mdwn79
-rw-r--r--doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__.mdwn28
-rw-r--r--doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_1_9be1b577fa4d5fe9754845073fdf5d32._comment10
-rw-r--r--doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_2_0da0d68b646f2b38be6ecf7c0fe13743._comment8
-rw-r--r--doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_3_09c56f5574931f2ebe903069f0731160._comment16
-rw-r--r--doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_4_0c127396e682ca6ced43aec7deeb0335._comment12
-rw-r--r--doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_5_6bc3eadefde4750eec67a55de6651b2d._comment13
-rw-r--r--doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_6_263ab9c1483438b1717c8061ac81a2fa._comment9
-rw-r--r--doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_7_eccc10990dff37584f8e60cd481a7140._comment26
-rw-r--r--doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_8_f897d20cbe5e0f3f58ce1a0bacad3d71._comment8
-rw-r--r--doc/bugs/Error_creating_remote_repository_using_ssh_on_OSX.mdwn3
-rw-r--r--doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__.mdwn31
-rw-r--r--doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_10_8742f7ac27b5f4ad6261d04a174a691c._comment10
-rw-r--r--doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_11_b8e720340000537de6713c49b7733b2f._comment21
-rw-r--r--doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_1_489fa3a717519cd5d8b4c1a9d143d8c6._comment8
-rw-r--r--doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_2_b0796d3b1913e1b6f7b34d75a591be42._comment16
-rw-r--r--doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_3_d8ca17ccaa5ee48d590736af8e77d88a._comment8
-rw-r--r--doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_4_aa7a690aaf75d21f52051a31d7fce70e._comment8
-rw-r--r--doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_5_dc235dc2d024b7f340721bb578630e00._comment10
-rw-r--r--doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_6_5d1e6ea5b5725c773acc6e288add812c._comment8
-rw-r--r--doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_7_6389b4f03ebc916358bc6674398d70c4._comment14
-rw-r--r--doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_8_bcacc9fb3751042968118ebe33802e27._comment10
-rw-r--r--doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_9_6d4c9f0e133ebd94fc11346df446402e._comment16
-rw-r--r--doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location.mdwn21
-rw-r--r--doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location/comment_1_b524e70156e8bc1219d5c6741974ad99._comment18
-rw-r--r--doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location/comment_2_ff7349c396d1249204d621e71f6a7a52._comment10
-rw-r--r--doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location/comment_4_4bc7d4c51faea3fdafc977cb66b7f73a._comment26
-rw-r--r--doc/bugs/Error_while_adding_a_file___34__createSymbolicLink:_already_exists__34__.mdwn46
-rw-r--r--doc/bugs/Every_new_file_gets_symlinked_to_a_git_object.mdwn78
-rw-r--r--doc/bugs/Every_new_file_gets_symlinked_to_a_git_object/comment_1_d4e7ed56b16494a95e6c904c746cc91f._comment8
-rw-r--r--doc/bugs/Every_new_file_gets_symlinked_to_a_git_object/comment_2_656b2a2cc44e9102c86bdd57045549d5._comment10
-rw-r--r--doc/bugs/EvilLinker_needs_to_escape_spaces_in_user_name.mdwn18
-rw-r--r--doc/bugs/EvilLinker_needs_to_escape_spaces_in_user_name/comment_1_6b289221a65a750444b1b5850df3386c._comment10
-rw-r--r--doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications.mdwn138
-rw-r--r--doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_10_13a35801805ea3d2d4428b1539f96b16._comment18
-rw-r--r--doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_11_632456a0a1d399ee2bbac76b7d63a5f1._comment14
-rw-r--r--doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_12_e4d268f269cc1701736cc5a39719ac20._comment23
-rw-r--r--doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_13_962cd8d7280cbc1d61778d69f3a393f0._comment16
-rw-r--r--doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_14_5b3bb068b62b12c7cc7504836a8acf32._comment10
-rw-r--r--doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_15_5271ba4eed013adec8391ddfcc11eda8._comment19
-rw-r--r--doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_1_7a536b79bae7d8f897f014d17dbb90b6._comment8
-rw-r--r--doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_2_349959a6daa722c8350f73feb0b27162._comment16
-rw-r--r--doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_3_923fc470727ecf21f0bb368b0486b15d._comment22
-rw-r--r--doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_4_68a8434018430a0d2671c4e23e9a3b12._comment8
-rw-r--r--doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_5_0b7d69489b9f10bb5ed617b5b62ae063._comment8
-rw-r--r--doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_6_650d950da065eeac966c2498418c668d._comment22
-rw-r--r--doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_7_834c512e32ad5a157d8fa9fd472831b4._comment8
-rw-r--r--doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_8_2500e6f9545b916dfa41549140c053fd._comment41
-rw-r--r--doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_9_e2dc3ff80bbd66837f00975b16e17126._comment10
-rw-r--r--doc/bugs/Failed_to_make_repository___40__calling_nonexistant_shell__41__.mdwn28
-rw-r--r--doc/bugs/Failed_to_make_repository___40__calling_nonexistant_shell__41__/comment_1_fb8a379ed7f4b88bd55245ce5b18042c._comment8
-rw-r--r--doc/bugs/Fails_to_add_files_with_a_newline_in_their_name___59____41__.mdwn71
-rw-r--r--doc/bugs/Fails_to_create_remote_repo_if_no_global_email_set.mdwn55
-rw-r--r--doc/bugs/Feature_request:___34__quvi__34___flag.mdwn14
-rw-r--r--doc/bugs/Feature_request:___34__quvi__34___flag/comment_1_908c38024fd252328566034608c2dec3._comment12
-rw-r--r--doc/bugs/Feature_request:___34__quvi__34___flag/comment_2_4b6822fe91aa865f2ac1297a3daa3fca._comment8
-rw-r--r--doc/bugs/Feature_request:___34__quvi__34___flag/comment_3_c72ef77e76b1c99b5e0c78d0742080e7._comment8
-rw-r--r--doc/bugs/Feature_request:___34__quvi__34___flag/comment_4_6092695d6afb1608447afe6f86e6fb83._comment8
-rw-r--r--doc/bugs/Finding_an_Unused_file.mdwn152
-rw-r--r--doc/bugs/Fix_for_opening_a_browser_on_a_mac___40__or_xdg-open_on_linux__47__bsd__63____41__.mdwn26
-rw-r--r--doc/bugs/Forcing_https_for_Google_cloud_storage_remote__63__.mdwn31
-rw-r--r--doc/bugs/Forcing_https_for_Google_cloud_storage_remote__63__/comment_1_93183de95cc5c99a15eacbade19873ef._comment8
-rw-r--r--doc/bugs/Forcing_https_for_Google_cloud_storage_remote__63__/comment_2_c01a47b9df3167c9af8e5e43ec138401._comment16
-rw-r--r--doc/bugs/GPG_can__39__t_handle_some_files.mdwn23
-rw-r--r--doc/bugs/GPG_can__39__t_handle_some_files/comment_1_4388c971e991dbc0326e69c49994df1e._comment8
-rw-r--r--doc/bugs/GPG_passphrase_repeated_prompt.mdwn1
-rw-r--r--doc/bugs/GPG_problem_on_Mac.mdwn34
-rw-r--r--doc/bugs/GPG_problem_on_Mac/comment_1_9ccfa12e7a9569a7ae9a3b819917c275._comment9
-rw-r--r--doc/bugs/GPG_problem_on_Mac/comment_2_a5e07131e2bc1a646c8439fc2506128b._comment29
-rw-r--r--doc/bugs/GPG_problem_on_Mac/comment_3_388238360f2423f84881e904443efb86._comment12
-rw-r--r--doc/bugs/Git-Annex_requires_all_repositories_to_repair.mdwn3
-rw-r--r--doc/bugs/Git-Annex_requires_all_repositories_to_repair/comment_1_dff1424e48835d7d3eb8653fc59de18a._comment10
-rw-r--r--doc/bugs/Git_annex_add_._dies_when_you_add_too_much.mdwn2
-rw-r--r--doc/bugs/Git_annex_add_fails_on_read-only_files.mdwn49
-rw-r--r--doc/bugs/Git_annex_add_fails_on_read-only_files/comment_1_d31018e8bf31d729ee9fee43a0a07934._comment10
-rw-r--r--doc/bugs/Git_annex_add_fails_on_read-only_files/comment_2_e38e7048749f890169cd0be602be6ee7._comment10
-rw-r--r--doc/bugs/Git_annex_for_Windows_keyboard_shortcut.mdwn22
-rw-r--r--doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android.mdwn280
-rw-r--r--doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_1_2fc435d1c741f9fc422401f682e7c8b7._comment17
-rw-r--r--doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_2_b73fb99a75aef912f8286626c5bde66d._comment14
-rw-r--r--doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_3_b7115f2c658439ff59a029f500697fc1._comment57
-rw-r--r--doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_4_67de7a56ddb06fc0e31cc011d281c633._comment8
-rw-r--r--doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_5_58fdb2a00f1737746cdbc804f831a0e7._comment8
-rw-r--r--doc/bugs/Git_annexed_files_symlink_are_wrong_when_submodule_is_not_in_the_same_path.mdwn2
-rw-r--r--doc/bugs/Handling_of_files_inside_and_outside_archive_directory_at_the_same_time.mdwn2
-rw-r--r--doc/bugs/Hanging_on_install_on_Mountain_lion.mdwn26
-rw-r--r--doc/bugs/Hanging_on_install_on_Mountain_lion/comment_10_f57ff027b19ca16e2ecf1fc6aee9ef4a._comment10
-rw-r--r--doc/bugs/Hanging_on_install_on_Mountain_lion/comment_11_2ff78d2090d0fd3418ab50b27c6028ce._comment8
-rw-r--r--doc/bugs/Hanging_on_install_on_Mountain_lion/comment_1_523d3c0c71f80536850a001b90fd0e9e._comment8
-rw-r--r--doc/bugs/Hanging_on_install_on_Mountain_lion/comment_2_6c360c64093b016c2150206dc3ad1709._comment10
-rw-r--r--doc/bugs/Hanging_on_install_on_Mountain_lion/comment_3_7b77fd9b7dc236c345f2f6149c8138ee._comment18
-rw-r--r--doc/bugs/Hanging_on_install_on_Mountain_lion/comment_5_08289596445d7588e43d35490fbfe5f4._comment8
-rw-r--r--doc/bugs/Hanging_on_install_on_Mountain_lion/comment_5_2a336fe7b8aed07cbdaa868bd34078f9._comment8
-rw-r--r--doc/bugs/Hanging_on_install_on_Mountain_lion/comment_6_ea7a40c3b6748738421aed00a6f7ca10._comment10
-rw-r--r--doc/bugs/Hanging_on_install_on_Mountain_lion/comment_7_00962da9288976f8a48d0cbc08e1d9e2._comment15
-rw-r--r--doc/bugs/Hanging_on_install_on_Mountain_lion/comment_8_5d53d23e529f33f6e7deb10643831613._comment11
-rw-r--r--doc/bugs/Hanging_on_install_on_Mountain_lion/comment_9_f00c8761e3184975b6645c0c3e241365._comment10
-rw-r--r--doc/bugs/Hangs_on_creating_repository_when_using_--listen.mdwn49
-rw-r--r--doc/bugs/Hangs_on_creating_repository_when_using_--listen/comment_1_8cbe786de8cf8b407418149b9c811aab._comment14
-rw-r--r--doc/bugs/Hangs_on_creating_repository_when_using_--listen/comment_2_dc128eeddeaaf3f84e71aca0fb7d341f._comment8
-rw-r--r--doc/bugs/Hard_links_not_synced_in_direct_mode.mdwn1
-rw-r--r--doc/bugs/How_can_I_solve_a_non-fast-forward_push_without_using_the_assistant__63__.mdwn295
-rw-r--r--doc/bugs/How_can_I_solve_a_non-fast-forward_push_without_using_the_assistant__63__/comment_1_0ddcbe0ccecdec1012964dfa436a3eee._comment19
-rw-r--r--doc/bugs/How_can_I_solve_a_non-fast-forward_push_without_using_the_assistant__63__/comment_2_5765b849bcf045ead9f007bd50b2cfbd._comment20
-rw-r--r--doc/bugs/How_to_use_a_DRA_bucket_in_Google_cloud_storage__63__.mdwn27
-rw-r--r--doc/bugs/How_to_use_a_DRA_bucket_in_Google_cloud_storage__63__/comment_2_71e3fb544914c1924f8517173371c205._comment8
-rw-r--r--doc/bugs/How_to_use_a_DRA_bucket_in_Google_cloud_storage__63__/comment_2_94654cd68a183a1d6210aa4ca13aca70._comment13
-rw-r--r--doc/bugs/How_to_use_a_DRA_bucket_in_Google_cloud_storage__63__/comment_4_e13eac28bd05f09210018a29c13aa73c._comment15
-rw-r--r--doc/bugs/In_the_assistant__44___add_some_clarifications_near___34__Add_another_local_repository__34___for_the_case_of_adding_an_existing_repository.mdwn28
-rw-r--r--doc/bugs/Incorrect_symlink_path_in_simple_submodule_use_case.mdwn72
-rw-r--r--doc/bugs/Incorrect_symlink_path_in_simple_submodule_use_case/comment_1_73b4dc5f90c8ba5634caee35cd31af1a._comment14
-rw-r--r--doc/bugs/Incorrect_symlink_path_in_simple_submodule_use_case/comment_2_e84b93062c82453f18308a82ee270585._comment16
-rw-r--r--doc/bugs/Incorrect_version_on_64_Standalone_Build.mdwn11
-rw-r--r--doc/bugs/Incorrect_version_on_64_Standalone_Build/comment_1_1964e4cad33a9f98b2eedbf095e899ff._comment12
-rw-r--r--doc/bugs/Install_of_git-annex-3.20121112_fails.mdwn20
-rw-r--r--doc/bugs/Install_of_git-annex-3.20121112_fails/comment_1_80fc80151d4390bd8a4332f30723962e._comment8
-rw-r--r--doc/bugs/Install_of_git-annex-3.20121112_fails/comment_2_2613320a41a74dc757a3277c8c328bd0._comment62
-rw-r--r--doc/bugs/Install_of_git-annex-3.20121112_fails/comment_3_c364764d0c56e8dc3cac276905d99841._comment10
-rw-r--r--doc/bugs/Install_of_git-annex-3.20121112_fails/comment_4_f1057340dfa978071d3bbc9e2af1e612._comment19
-rw-r--r--doc/bugs/Install_of_git-annex-3.20121112_fails/comment_5_9007b1a3abd647945604968db19cb841._comment8
-rw-r--r--doc/bugs/Install_of_git-annex-3.20121112_fails/comment_6_0bb3ac5375f29ce9d3d0be93879267e3._comment11
-rw-r--r--doc/bugs/Install_of_git-annex-3.20121112_fails/comment_7_ae4443b8cd069080d1f77fca16aa8b04._comment10
-rw-r--r--doc/bugs/Installation_fails:___34__Duplicate_instance_declarations__34__.mdwn35
-rw-r--r--doc/bugs/Internal_Server_Error_when_adding_an_uncrypted_box.com_repo_after_deleted_an_encrypted_one..mdwn28
-rw-r--r--doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X.mdwn25
-rw-r--r--doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_1_b2ef077d87a9da624f20649c21401b5b._comment17
-rw-r--r--doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_2_ef849e25b0264808bff800d9d3836119._comment10
-rw-r--r--doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_3_ae3cbd0eb69cbeb9b349e0060d056d43._comment18
-rw-r--r--doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_4_0ff2897805928b14829b7b369a3aed91._comment16
-rw-r--r--doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_5_414a45573aeb5201f4d80433955669d5._comment12
-rw-r--r--doc/bugs/Internal_server_error_while_adding_remote_server_on_Windows.mdwn33
-rw-r--r--doc/bugs/Internal_server_error_while_adding_remote_server_on_Windows/comment_1_af5df473e49a149701b30accb63643a9._comment8
-rw-r--r--doc/bugs/Internal_server_error_while_adding_remote_server_on_Windows/comment_2_e7ab75a3c4cd6db900bc2b786bda4e8d._comment9
-rw-r--r--doc/bugs/Internal_server_error_while_adding_remote_server_on_Windows/comment_3_0ff9b2e15904ef64b7d1937a41da5f49._comment7
-rw-r--r--doc/bugs/Interrupted_switch_to_direct_mode_can_cause_all_following_switches_to_fail.mdwn50
-rw-r--r--doc/bugs/Is_there_any_way_to_rate_limit_uploads_to_an_S3_backend__63__.mdwn1
-rw-r--r--doc/bugs/Issue_fewer_S3_GET_requests.mdwn9
-rw-r--r--doc/bugs/Issue_fewer_S3_GET_requests/comment_1_59a6b87d01c003bf55cde4c882e1778c._comment18
-rw-r--r--doc/bugs/Issue_fewer_S3_GET_requests/comment_2_8fdeb3352ac00a76625ec9c007e5b76a._comment14
-rw-r--r--doc/bugs/Issue_fewer_S3_GET_requests/comment_3_6ccbb1cff7bc6b4640220d98f7ce21c3._comment12
-rw-r--r--doc/bugs/Issue_on_OSX_with_some_system_limits.mdwn1
-rw-r--r--doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__.mdwn21
-rw-r--r--doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_1_380a49b3c132f9f529729a1cb5a69621._comment8
-rw-r--r--doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_2_282f5f89fb4a46e1fad0980e0b2994a0._comment8
-rw-r--r--doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_3_7ff98958146b7f6396226bdd878ec86e._comment10
-rw-r--r--doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_4_f9e460a09e7e5f53c16c20ded2649201._comment8
-rw-r--r--doc/bugs/Jabber__47__xmpp_not_supported_on_Debian_Wheezy_backport.mdwn12
-rw-r--r--doc/bugs/Killing_the_assistant_daemon_leaves_ssh_mux_sessions_behind.mdwn38
-rw-r--r--doc/bugs/Killing_the_assistant_daemon_leaves_ssh_mux_sessions_behind/comment_1_17879b98a5e79ace03b543064751e46e._comment8
-rw-r--r--doc/bugs/Killing_the_assistant_daemon_leaves_ssh_mux_sessions_behind/comment_2_2dc877e281750004b16619ea7b931160._comment8
-rw-r--r--doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss.mdwn57
-rw-r--r--doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_10_52364dc5b1b43b51748453d1896e35c6._comment8
-rw-r--r--doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_11_99b4db1841f8630a9c5efd08910e87a3._comment104
-rw-r--r--doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_1_fbb410a54bb0bd82d0953ef58a88600e._comment24
-rw-r--r--doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_2_8007c9ba42a951a4426255ec3c37d961._comment13
-rw-r--r--doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_3_73ecd4cb8ee58a8dfe7cab0e893dbe5b._comment8
-rw-r--r--doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_4_e8a10886a564f35414c30a04335d9d32._comment8
-rw-r--r--doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_5_6a318edfe45c80343d017dc7b4837acb._comment8
-rw-r--r--doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_6_f7a1d9f9d40aff531d873a95d2196edd._comment8
-rw-r--r--doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_7_1724ffdf986301bf37ef7a6d16b6ea8a._comment10
-rw-r--r--doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_8_5470e2f50e6506139ecb1b342371c509._comment10
-rw-r--r--doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_9_e53148a9efa061a825f668a9492182f7._comment10
-rw-r--r--doc/bugs/Last_two_versions_didn__39__t_show_up_on_hackage.mdwn11
-rw-r--r--doc/bugs/Last_two_versions_didn__39__t_show_up_on_hackage/comment_1_74b56dea2100450e322e726bb55bb310._comment8
-rw-r--r--doc/bugs/Local_files_not_found.mdwn50
-rw-r--r--doc/bugs/Local_files_not_found/comment_1_5e1fcc0597594fa493ffa28aa32e1df8._comment12
-rw-r--r--doc/bugs/Local_network___40__ssh__41___fails_to_pair__47__sync.mdwn2
-rw-r--r--doc/bugs/Local_pairing_fails:_received_PairMsg_loop.mdwn39
-rw-r--r--doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_1_b8c485bafd98be8c21595597af361255._comment8
-rw-r--r--doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_2_bc63489334f44a423645021415ffe196._comment10
-rw-r--r--doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_3_6345b174d04b6613c2c55a6ec9e50c21._comment16
-rw-r--r--doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_4_f39ec6c3d5a016b3c5260162c0b42177._comment12
-rw-r--r--doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_5_ca0c5ef6e6a6d2c4b64430ac68370b6a._comment8
-rw-r--r--doc/bugs/Log_rotation_loses_large_logs.mdwn69
-rw-r--r--doc/bugs/Lost_S3_Remote.mdwn59
-rw-r--r--doc/bugs/Lost_S3_Remote/comment_1_6e80e6db6671581d471fc9a54181c04c._comment10
-rw-r--r--doc/bugs/Lost_S3_Remote/comment_2_c99c65882a3924f4890e500f9492b442._comment8
-rw-r--r--doc/bugs/Lost_S3_Remote/comment_3_1e434d5a20a692cd9dc7f6f8f20f30dd._comment8
-rw-r--r--doc/bugs/Makefile_is_missing_dependancies.mdwn47
-rw-r--r--doc/bugs/Makefile_is_missing_dependancies/comment_1_5a3da5f79c8563c7a450aa29728abe7c._comment47
-rw-r--r--doc/bugs/Makefile_is_missing_dependancies/comment_2_416f12dbd0c2b841fac8164645b81df5._comment8
-rw-r--r--doc/bugs/Makefile_is_missing_dependancies/comment_3_c38b6f4abc9b9ad413c3b83ca04386c3._comment25
-rw-r--r--doc/bugs/Makefile_is_missing_dependancies/comment_4_cc13873175edf191047282700315beee._comment30
-rw-r--r--doc/bugs/Makefile_is_missing_dependancies/comment_5_0a1c52e2c96d19b9c3eb7e99b8c2434f._comment59
-rw-r--r--doc/bugs/Makefile_is_missing_dependancies/comment_6_24119fc5d5963ce9dd669f7dcf006859._comment10
-rw-r--r--doc/bugs/Makefile_is_missing_dependancies/comment_7_96fd4725df4b54e670077a18d3ac4943._comment12
-rw-r--r--doc/bugs/Makefile_is_missing_dependancies/comment_8_a3555e3286cdc2bfeb9cde0ff727ba74._comment8
-rw-r--r--doc/bugs/Manual_mode_weirdness.mdwn37
-rw-r--r--doc/bugs/Manual_mode_weirdness/comment_1_f8ab3bac9e9a6768e5fd5a052f0d920f._comment8
-rw-r--r--doc/bugs/Manual_mode_weirdness/comment_2_e810daa488fad32ca8bdaae620051da8._comment8
-rw-r--r--doc/bugs/Matching_oddity_in_SafeCommand.hs.mdwn28
-rw-r--r--doc/bugs/Matching_oddity_in_SafeCommand.hs/comment_1_1a51630c0791547a7e0b68eea5d81e4c._comment8
-rw-r--r--doc/bugs/Merge_involving_symlink_yields_unexpected_results.mdwn51
-rw-r--r--doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_1_e8a2ea1b8573bee45b70bcc7ef7e3bed._comment8
-rw-r--r--doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_2_b6182038292bd72dc4711e4575510172._comment8
-rw-r--r--doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_3_c6ca13d475b3f846c95606c20e1a3052._comment8
-rw-r--r--doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_4_13179e0f72026092e48c13082818ce68._comment15
-rw-r--r--doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_5_585c8a5a13bb17032bfe30818345f936._comment10
-rw-r--r--doc/bugs/Missing_dependancy_in_commit_6cecc26206c4a539999b04664136c6f785211a41.mdwn35
-rw-r--r--doc/bugs/More_build_oddities_under_OpenBSD.mdwn2
-rw-r--r--doc/bugs/More_build_oddities_under_OpenBSD/comment_21_8a7f5a87bbd4289362f8f4609c02322d._comment8
-rw-r--r--doc/bugs/More_sync__39__ing_weirdness_with_the_assistant_branch_on_OSX.mdwn15
-rw-r--r--doc/bugs/More_sync__39__ing_weirdness_with_the_assistant_branch_on_OSX/comment_1_377525e70640751e1ead445aeed15efa._comment8
-rw-r--r--doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana.mdwn36
-rw-r--r--doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_1_f3c336ecfee51e074ea3a9fc95301de5._comment8
-rw-r--r--doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_2_102c0e998934e84deca92fd1c90145fa._comment8
-rw-r--r--doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_3_1449dd796ce9f2209f085d4b017a5f33._comment19
-rw-r--r--doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_4_c4aa8a4379b2c056ca9b7afcff412bbc._comment10
-rw-r--r--doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_5_6ca4dd2ad51182edf7198f38b336b9b6._comment8
-rw-r--r--doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X.mdwn24
-rw-r--r--doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_1_75c14b405929a8f771a7c261dcc4b7a2._comment42
-rw-r--r--doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_2_f52483415c623ea0649c3805728ce761._comment35
-rw-r--r--doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_3_fd73fbeef61df106f084ac235fca904a._comment8
-rw-r--r--doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_4_c5e9843a956984efd22bad629930f6bd._comment8
-rw-r--r--doc/bugs/Mtime_of_objects_reset_when_synchronized_to_a_different_repository.mdwn15
-rw-r--r--doc/bugs/Mtime_of_objects_reset_when_synchronized_to_a_different_repository/comment_1_651965d8a9f0e0c07313c1a2916f77e5._comment8
-rw-r--r--doc/bugs/Name_scheme_does_not_follow_git__39__s_rules.mdwn31
-rw-r--r--doc/bugs/Need_to_manually_install_c2hs_-_3.20121127_and_previous.mdwn37
-rw-r--r--doc/bugs/No_progress_bars_with_S3.mdwn26
-rw-r--r--doc/bugs/No_progress_bars_with_S3/comment_1_33a601201a9fdd2357f1c03e32fa6b9c._comment8
-rw-r--r--doc/bugs/No_progress_bars_with_S3/comment_2_52361805ced99c22d663b3b1e8a5b221._comment8
-rw-r--r--doc/bugs/No_progress_bars_with_S3/comment_3_5903c1c40c4562f4fbaccd1640fedb18._comment8
-rw-r--r--doc/bugs/No_progress_bars_with_S3/comment_4_80799c33e513384894b390fe34ab312a._comment8
-rw-r--r--doc/bugs/No_such_file_with_certain_filenames_using_WORM_backend.mdwn64
-rw-r--r--doc/bugs/No_such_file_with_certain_filenames_using_WORM_backend/comment_1_a1db4ff3e8517d7cbe649bca1ed275d0._comment8
-rw-r--r--doc/bugs/No_such_file_with_certain_filenames_using_WORM_backend/comment_2_c5645988eaf4f7493d70b6a63f21cdaf._comment18
-rw-r--r--doc/bugs/No_version_information_from_cli.mdwn18
-rw-r--r--doc/bugs/OSX_.dmg_unnecessarily_large_and_not_inherently_compressed.mdwn68
-rw-r--r--doc/bugs/OSX_alias_permissions_and_versions_problem.mdwn37
-rw-r--r--doc/bugs/OSX_alias_permissions_and_versions_problem/comment_1_4fabe32e7e626e6ca23aa0b6f449c4c6._comment14
-rw-r--r--doc/bugs/OSX_alias_permissions_and_versions_problem/comment_2_064d60fcc8366a70958540bc145e611a._comment11
-rw-r--r--doc/bugs/OSX_alias_permissions_and_versions_problem/comment_3_6c72d4f40ea0a9566a1185901beff5ba._comment14
-rw-r--r--doc/bugs/OSX_alias_permissions_and_versions_problem/comment_4_8a11f404bb72a1aeb2290744cce2d00d._comment12
-rw-r--r--doc/bugs/OSX_alias_permissions_and_versions_problem/comment_5_30888607199d6a48b76d0c48f5aa4f64._comment8
-rw-r--r--doc/bugs/OSX_app_issues.mdwn5
-rw-r--r--doc/bugs/OSX_app_issues/comment_10_54d8f3e429df9a9958370635c890abf0._comment11
-rw-r--r--doc/bugs/OSX_app_issues/comment_10_6d23232fbb15d0ee3ab532a4884f81ed._comment10
-rw-r--r--doc/bugs/OSX_app_issues/comment_11_5db2baa771fd01a284eac8a16c1c8c67._comment8
-rw-r--r--doc/bugs/OSX_app_issues/comment_11_bb2ceb95a844449795addee6986d0763._comment26
-rw-r--r--doc/bugs/OSX_app_issues/comment_12_62170597c7f441d84d48986857998858._comment10
-rw-r--r--doc/bugs/OSX_app_issues/comment_12_f3bc5a4e4895ac9351786f0bdd8005ba._comment11
-rw-r--r--doc/bugs/OSX_app_issues/comment_13_cb12d419459e5cac766022ee0697fedc._comment18
-rw-r--r--doc/bugs/OSX_app_issues/comment_14_c966fa549bc73c52034ac9abc49de52a._comment8
-rw-r--r--doc/bugs/OSX_app_issues/comment_15_10f1df95266f1a8c9ef933183190f6e2._comment8
-rw-r--r--doc/bugs/OSX_app_issues/comment_16_064e151da121f9c2ef13c19ecb4e7458._comment16
-rw-r--r--doc/bugs/OSX_app_issues/comment_17_0e6ac5e0a54ce78bdc56c62e6fb92846._comment8
-rw-r--r--doc/bugs/OSX_app_issues/comment_2_fd560811c57df5cbc3976639642b8b19._comment8
-rw-r--r--doc/bugs/OSX_app_issues/comment_7_93e0bb53ac2d7daef53426fbdc5f92d9._comment15
-rw-r--r--doc/bugs/OSX_app_issues/comment_8_141eac2f3fb25fe18b4268786f00ad6a._comment8
-rw-r--r--doc/bugs/OSX_app_issues/comment_8_f4d5b2645d7f29b80925159efb94a998._comment8
-rw-r--r--doc/bugs/OSX_app_issues/comment_9_2e6dfca0fd8df04066769653724eae28._comment17
-rw-r--r--doc/bugs/OSX_app_issues/comment_9_e1bbe83a1b9a7385ed6d443d0cc22bc7._comment18
-rw-r--r--doc/bugs/OSX_app_issues/old.mdwn1
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_10_bb823dc3cd6dc914ed14c176afa0b2f3._comment8
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_11_a30e69fed14b0809184ffe05358ab871._comment10
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_12_23d47b3696e537d60df1d383f33f19e4._comment15
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_13_be5738b42b13ec8cd828c5fa66f030e8._comment10
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_14_5783a4716cd104e1f1c276aa0b9cb153._comment41
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_14_e126d87a263f3aa6261f72ee7ff086fc._comment8
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_15_56c7fcafc7dca8be28ebf9e37a8f6b71._comment23
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_15_e58bd3d66f0f43c159d2b37172f152de._comment8
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_16_01f2c968bad66b0ff0c09eb468325deb._comment8
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_16_0b7cd3d5952c5abf36a89a68a4afc1e7._comment8
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_17_82d9963e1fbf17644ce697e5a43943f5._comment16
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_17_c2de94a48e7958b9efffd89dda9144ff._comment59
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_18_29af9df9ea295d114574e76e15b8e737._comment8
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_18_88ddc846eb4e4a2d54028a3412ba28d6._comment12
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_19_6d6341b05123cd317c4eac96353c8662._comment10
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_19_aff4ab761c4d196732baa046af45fe24._comment11
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_20_43bd5985d8a3a5e7f826a34e5dd9216e._comment10
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_3_08613b2e2318680508483d204a43da76._comment76
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_4_4cda124b57ddc87645d5822f14ed5c59._comment8
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_5_0d1df34f83a8dac9c438d93806236818._comment8
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_6_12bd83e7e2327c992448e87bdb85d17e._comment15
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_6_bc44d5aea5f77e331a32913ada293730._comment27
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_6_cea97dbbfb566a9fe463365ca4511119._comment16
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_7_911f187d46890093a54859032ada2442._comment10
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_7_acd73cc5c4caa88099e2d2f19947aadf._comment8
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_8_08b091a58106ca6050ac669579ed9ff4._comment11
-rw-r--r--doc/bugs/OSX_app_issues/old/comment_9_8464c839cb169a4c6e72bebdc2065e9a._comment8
-rw-r--r--doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass.mdwn119
-rw-r--r--doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_10_3feba4ba84efb77bd4f8f46b6b4600f1._comment8
-rw-r--r--doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_1_a33fcd088e419d8e6c459e42f21f8bbe._comment10
-rw-r--r--doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_2_47196f7e781137751ebd1a1d7083838a._comment18
-rw-r--r--doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_3_672d98ee06e051430f8e01faa93bb4cf._comment28
-rw-r--r--doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_4_06fb3031b838cd443326f4ecd689b600._comment10
-rw-r--r--doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_5_42d447400c15acf6ca031d165b2c781c._comment8
-rw-r--r--doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_6_edd7d5d5c761ff665840f0ef7bea50c9._comment10
-rw-r--r--doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_7_18e5334ab89efcf89ba8847436d55065._comment13
-rw-r--r--doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_8_35b2bbdc24a7bd686527cd1839dee7d0._comment10
-rw-r--r--doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_9_a771c6b453e6a4b3895dd69a53093440._comment246
-rw-r--r--doc/bugs/OSX_build_broken.mdwn13
-rw-r--r--doc/bugs/OSX_build_broken/comment_1_0b570aa6c58effeace2a989184c9c601._comment10
-rw-r--r--doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__.mdwn26
-rw-r--r--doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_1_0dfa839f1ba689b23f811787515b8cff._comment8
-rw-r--r--doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_2_612b947eb5474f6d792a833e33105665._comment8
-rw-r--r--doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_3_549b8bcae6f1f8b21932b734e32fbdd1._comment8
-rw-r--r--doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_4_23078dfea127fa3ef20696eb10ce964c._comment10
-rw-r--r--doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_5_7da5ef8325b8787bbf1c6e2c17b1142e._comment8
-rw-r--r--doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp.mdwn31
-rw-r--r--doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_1_2653fe701a1bb20254f3d6b90f10a43b._comment18
-rw-r--r--doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_2_d9ce701d077e40f39b142ce2cc570a3b._comment8
-rw-r--r--doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_3_14964ab68253dc1a8903d14a821b8b40._comment10
-rw-r--r--doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_4_4a579e9a13305ab4157f4b3eba46b92d._comment16
-rw-r--r--doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_5_2a710960dc3a177ce62ef92f8546c496._comment12
-rw-r--r--doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_6_a4ad73530cd0f6621bcc6394d5f39af7._comment41
-rw-r--r--doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple.mdwn67
-rw-r--r--doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_1_971224d2c0c0ce8d4530b1991508f849._comment12
-rw-r--r--doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_2_6866f96277dbe83a8aadcdeb426b6750._comment8
-rw-r--r--doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_3_eaed9b5532e30e401f50193a72b98310._comment13
-rw-r--r--doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_4_1fab407f3823ce8cec87f5df55e49f8c._comment8
-rw-r--r--doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__.mdwn93
-rw-r--r--doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_1_7508685b6f676c72e316642b80e40ee8._comment10
-rw-r--r--doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_2_c4dd12ea578d1f07464e1b9d68ec96cf._comment20
-rw-r--r--doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_3_8687c1d1c44d88a8ac13208273565d6c._comment37
-rw-r--r--doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_4_62be3dd4092b15cdf85cf9a231b2863a._comment8
-rw-r--r--doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_5_cca4905426a3e01da6e12be855c7a418._comment27
-rw-r--r--doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_6_ae2ca07169321c4a51b7e8e581fda5e2._comment72
-rw-r--r--doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_7_ae5c434a9c94aa000b604095f52e3d3c._comment14
-rw-r--r--doc/bugs/On_Windows__44___annex_get_fails_with_HTTP_Remote__44___but_believes_it_has_succeeded..mdwn180
-rw-r--r--doc/bugs/On_Windows__44___wget_is_not_used__44___even_if_available.mdwn67
-rw-r--r--doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_1_3a3891c9d7ee808f6a71780cb628f23d._comment2
-rw-r--r--doc/bugs/Out_of_memory_error_in_fsck_whereis_find_and_status_cmds/comment_8_cf1f9d0be5da4ba874209d981ff8afc6._comment38
-rw-r--r--doc/bugs/Partial_direct__47__indirect_repo.mdwn24
-rw-r--r--doc/bugs/Partial_direct__47__indirect_repo/comment_1_42344fce051d759f95215c985e9d1135._comment12
-rw-r--r--doc/bugs/Partial_direct__47__indirect_repo/comment_2_8ba64f2750d0ef4adf595674c723bc65._comment8
-rw-r--r--doc/bugs/Partial_direct__47__indirect_repo/comment_3_bd4985864b7dcd70a609ca7bc2617e4a._comment8
-rw-r--r--doc/bugs/Permission_problem_in_second_user_account_on_Android.mdwn15
-rw-r--r--doc/bugs/Permission_problem_in_second_user_account_on_Android/comment_1_4ac4f94354b6c5c4370f792689107ddc._comment8
-rw-r--r--doc/bugs/Permission_problem_in_second_user_account_on_Android/comment_2_ef775b5fceb4caf00227978318f73470._comment8
-rw-r--r--doc/bugs/Permission_problem_in_second_user_account_on_Android/comment_3_2977076f0f4f26daa7d6a087d8af18b3._comment43
-rw-r--r--doc/bugs/Photos___34__disappear__34___after_adding_a_remote_server_repository_on_Android.mdwn24
-rw-r--r--doc/bugs/Photos___34__disappear__34___after_adding_a_remote_server_repository_on_Android/comment_1_75b71bf556e54bbf503bb32d54445224._comment13
-rw-r--r--doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths.mdwn24
-rw-r--r--doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_1_b37615636e685b60fab8ae1c4276d032._comment12
-rw-r--r--doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_2_e8f011263bfa4c3c3d04494ea1c88523._comment21
-rw-r--r--doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_3_bda1e0d3569a6becf374d0e820219469._comment15
-rw-r--r--doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_4_4241c05a0fa7ce597c75ff5992b71b89._comment12
-rw-r--r--doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_5_8378cd8c03fabdaa300194b66c1ea53c._comment16
-rw-r--r--doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_6_d3c9a1bee717b5b99f31be81150a3ec8._comment10
-rw-r--r--doc/bugs/Possible_data_loss_-_git_status___39__typechange__39___and_direct_mode.mdwn32
-rw-r--r--doc/bugs/Possible_data_loss_-_git_status___39__typechange__39___and_direct_mode/comment_1_84cb8c651584ec2887f6e1b7dc107190._comment8
-rw-r--r--doc/bugs/Possible_issues_with_git_1.7.10_and_newer___40__merge_command_now_asks_for_a_commit_message__34__.mdwn18
-rw-r--r--doc/bugs/Prevent_accidental_merges.mdwn2
-rw-r--r--doc/bugs/Problem_setting_up_encrypted_repository_using_the_assistant_with___40__outside_of_git-annex__41___shared_pgp_key.mdwn387
-rw-r--r--doc/bugs/Problem_setting_up_encrypted_repository_using_the_assistant_with___40__outside_of_git-annex__41___shared_pgp_key/comment_1_c8e7be58222afff2a4c1df60f657d2ed._comment35
-rw-r--r--doc/bugs/Problem_when_dropping_unused_files.mdwn21
-rw-r--r--doc/bugs/Problem_when_dropping_unused_files/comment_10_d4f6bfe8e04560fc661a47b09ed8a5f4._comment8
-rw-r--r--doc/bugs/Problem_when_dropping_unused_files/comment_1_e1a99bd3eb8b3186653b52a52b1836de._comment10
-rw-r--r--doc/bugs/Problem_when_dropping_unused_files/comment_2_dec3e5ffe5cfdc439f418ee00d7d9810._comment8
-rw-r--r--doc/bugs/Problem_when_dropping_unused_files/comment_3_d106a87101db52f957da84d90dafcdbb._comment12
-rw-r--r--doc/bugs/Problem_when_dropping_unused_files/comment_4_f28ed0635612693e437e64d872af5c37._comment8
-rw-r--r--doc/bugs/Problem_when_dropping_unused_files/comment_5_f0237075653768c84deb702442645f28._comment8
-rw-r--r--doc/bugs/Problem_when_dropping_unused_files/comment_6_b509006e1590480a104627369bc910f2._comment8
-rw-r--r--doc/bugs/Problem_when_dropping_unused_files/comment_7_fe261c074211ccb94bbcb32cfd8ee654._comment14
-rw-r--r--doc/bugs/Problem_when_dropping_unused_files/comment_8_bc8e4dc7e0d6577ba5fcc98f56627b1f._comment8
-rw-r--r--doc/bugs/Problem_when_dropping_unused_files/comment_9_e9a22aa2ebcde5f6595b49dba9375761._comment14
-rw-r--r--doc/bugs/Problem_with_bup:_cannot_lock_refs.mdwn52
-rw-r--r--doc/bugs/Problem_with_windows_version:_1.9.5.msysgit.0_wrong_path.mdwn82
-rw-r--r--doc/bugs/Problem_with_windows_version:_1.9.5.msysgit.0_wrong_path/comment_1_c949934a5fc8889f7cbeac9e789116f4._comment10
-rw-r--r--doc/bugs/Problem_with_windows_version:_1.9.5.msysgit.0_wrong_path/comment_2_5087aa261b897090031ad32bdc1434f9._comment9
-rw-r--r--doc/bugs/Problem_with_windows_version:_1.9.5.msysgit/comment_1_720dbf9d959a0050a159713cd1386913._comment11
-rw-r--r--doc/bugs/Problems_building_on_Mac_OS_X.mdwn62
-rw-r--r--doc/bugs/Problems_building_on_Mac_OS_X/comment_1_1c199b826fdd84b5184b1466ad03a9a4._comment8
-rw-r--r--doc/bugs/Problems_running_make_on_osx.mdwn49
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_10_94e4ac430140042a2d0fb5a16d86b4e5._comment8
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_11_56f1143fa191361d63b441741699e17f._comment8
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_12_ec5131624d0d2285d3b6880e47033f97._comment8
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_13_88ed095a448096bf8a69015a04e64df1._comment16
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_14_89a960b6706ed703b390a81a8bc4e311._comment8
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_15_6b8867b8e48bf807c955779c9f8f0909._comment71
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_16_5c2dd6002aadaab30841b77a5f5aed34._comment8
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_17_62fccb04b0e4b695312f7a3f32fb96ee._comment43
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_18_64fab50d95de619eb2e8f08f90237de1._comment24
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_19_4253988ed178054c8b6400beeed68a29._comment11
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_1_34120e82331ace01a6a4960862d38f2d._comment17
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_20_7db27d1a22666c831848bc6c06d66a84._comment10
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_2_cc53d1681d576186dbc868dd9801d551._comment8
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_3_68f0f8ae953589ae26d57310b40c878d._comment57
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_4_c52be386f79f14c8570a8f1397c68581._comment12
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_5_7f1330a1e541b0f3e2192e596d7f7bee._comment107
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_6_0c46f5165ceb5a7b9ea9689c33b3a4f8._comment9
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_7_237a137cce58a28abcc736cbf2c420b0._comment22
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_8_efafa203addf8fa79e33e21a87fb5a2b._comment8
-rw-r--r--doc/bugs/Problems_running_make_on_osx/comment_9_cc283b485b3c95ba7eebc8f0c96969b3._comment66
-rw-r--r--doc/bugs/Problems_with_syncing_gnucash.mdwn568
-rw-r--r--doc/bugs/Problems_with_syncing_gnucash/comment_1_ca195af3ba4a286eb5ab687634192fa4._comment8
-rw-r--r--doc/bugs/Problems_with_syncing_gnucash/comment_2_754fb430381ad88e6248ecb902b32118._comment20
-rw-r--r--doc/bugs/Problems_with_syncing_gnucash/comment_4_25881998c6f149c70b1358f37b7c66ba._comment20
-rw-r--r--doc/bugs/Provide_64-bit_standalone_build.mdwn6
-rw-r--r--doc/bugs/Provide_64-bit_standalone_build/comment_1_1850bb3eb464f1d3c122cfeb4ccaf265._comment15
-rw-r--r--doc/bugs/Proxy_support.mdwn1
-rw-r--r--doc/bugs/Race_condition_between_watch__47__assistant_and_addurl.mdwn195
-rw-r--r--doc/bugs/Race_condition_between_watch__47__assistant_and_addurl/comment_1_8f56b8661a600729d7a9d569e8a0ba70._comment55
-rw-r--r--doc/bugs/Race_condition_between_watch__47__assistant_and_addurl/comment_2_46dc67bdcd174cd50ccc421ec56735ad._comment14
-rw-r--r--doc/bugs/Recreating_remote_repository__39__s_annex.mdwn34
-rw-r--r--doc/bugs/Recreating_remote_repository__39__s_annex/comment_1_9fffb1329a4a06111cf2afd8552aea62._comment8
-rw-r--r--doc/bugs/Recreating_remote_repository__39__s_annex/comment_2_b7f5634e136294ea1a3d4ce6de58fc5d._comment12
-rw-r--r--doc/bugs/Remote_repo_and_set_operation_with_find.mdwn6
-rw-r--r--doc/bugs/Remote_repositories_have_to_be_setup_encrypted.mdwn1
-rw-r--r--doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository.mdwn70
-rw-r--r--doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository/comment_1_92211091daf9827a4ec7e5b5a6769d59._comment8
-rw-r--r--doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository/comment_2_f0fa97a9eba1c624f6f8720ba8a160b7._comment8
-rw-r--r--doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository/comment_3_e3d677ea4170c07cd31efe6dc85fa5f3._comment8
-rw-r--r--doc/bugs/Repository_Information_Is_Lost.mdwn33
-rw-r--r--doc/bugs/Repository_Information_Is_Lost/comment_1_bae0ed4c0a6baf1675f8de1663042f43._comment8
-rw-r--r--doc/bugs/Repository_deletion_error.mdwn46
-rw-r--r--doc/bugs/Repository_deletion_error/comment_1_31673d0300986b6098d1af2cc4b180c6._comment10
-rw-r--r--doc/bugs/Repository_in_manual_mode_does_not_hold_files.mdwn305
-rw-r--r--doc/bugs/Repository_in_manual_mode_does_not_hold_files/comment_1_86e8a4e546610e8e265806eb245d8aba._comment8
-rw-r--r--doc/bugs/Repository_in_manual_mode_does_not_hold_files/comment_2_17d5775a38b67ba4f0e73f6b89cff2d0._comment8
-rw-r--r--doc/bugs/Req:_Upgrade_to_Yesod_1.4__63___https:__47____47__github.com__47__NixOS__47__nixpkgs__47__pull__47__4391.mdwn24
-rw-r--r--doc/bugs/Resource_leak_somewhere_in_the___39__get__39___code.mdwn24
-rw-r--r--doc/bugs/Resource_leak_somewhere_in_the___39__get__39___code/comment_1_66b21720cd1b2a4f66ef24252d3e6305._comment8
-rw-r--r--doc/bugs/Resource_leak_somewhere_in_the___39__get__39___code/comment_2_18c9f55c5af1f4f690a7727df71ab561._comment8
-rw-r--r--doc/bugs/Revert_to_old_file_version_in_direct_mode___40__VFAT__41__.mdwn29
-rw-r--r--doc/bugs/Revert_to_old_file_version_in_direct_mode___40__VFAT__41__/comment_1_7e512732f1d24300dd13bb093f28122d._comment9
-rw-r--r--doc/bugs/Revert_to_old_file_version_in_direct_mode___40__VFAT__41__/comment_2_0ede40e0d68bfb9c6dbc1777f944ed06._comment18
-rw-r--r--doc/bugs/Revert_to_old_file_version_in_direct_mode___40__VFAT__41__/comment_3_4ce1601f5dbd8fb769d3c5bb429c3bc5._comment8
-rw-r--r--doc/bugs/Rsync_encrypted_remote_asks_for_ssh_key_password_for_each_file.mdwn30
-rw-r--r--doc/bugs/Rsync_encrypted_remote_asks_for_ssh_key_password_for_each_file/comment_1_fd95e0bb61e80a72b4ac1304ef6c2e77._comment16
-rw-r--r--doc/bugs/S3_Access_fails_on_windows.mdwn42
-rw-r--r--doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing.mdwn10
-rw-r--r--doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_1_dc5ae7af499203cfd903e866595b8fea._comment18
-rw-r--r--doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_2_c62daf5b3bfcd2f684262c96ef6628c1._comment12
-rw-r--r--doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_3_e1f39c4af5bdb0daabf000da80858cd9._comment10
-rw-r--r--doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_4_bb6b814ab961818d514f6553455d2bf3._comment8
-rw-r--r--doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_5_5bb128f6d2ca4b5e4d881fae297fa1f8._comment8
-rw-r--r--doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_6_63fb74da342751fc35e1850409c506f6._comment8
-rw-r--r--doc/bugs/S3_memory_leaks.mdwn5
-rw-r--r--doc/bugs/S3_memory_leaks/comment_3_5e9cecb0e2ec7602963406779b6e3c1f._comment12
-rw-r--r--doc/bugs/S3_memory_leaks/comment_4_37e41b518813bd7c349017abf4a0ca0f._comment8
-rw-r--r--doc/bugs/S3_memory_leaks/comment_5_1b6d13852aeb37c5c29baf100bd62789._comment8
-rw-r--r--doc/bugs/S3_memory_leaks/comment_6_71ffb88f548969fd4d45eac4656380c0._comment11
-rw-r--r--doc/bugs/S3_memory_leaks/comment_7_1ac572b79caa23e3f791e4f8461fcddd._comment10
-rw-r--r--doc/bugs/S3_upload_not_using_multipart.mdwn9
-rw-r--r--doc/bugs/S3_upload_not_using_multipart/comment_11_ba1f866645419476bbedd6b1e4bbd33f._comment8
-rw-r--r--doc/bugs/S3_upload_not_using_multipart/comment_12_bf98d0c771dfdd15ddafdba2d94d911f._comment8
-rw-r--r--doc/bugs/S3_upload_not_using_multipart/comment_1_5bed9faafc43b535f7820749510aaa14._comment10
-rw-r--r--doc/bugs/S3_upload_not_using_multipart/comment_2_d82952cf324e769e45f4d90f200210f4._comment17
-rw-r--r--doc/bugs/S3_upload_not_using_multipart/comment_3_d878b87a05f4fcd380e6ff309b615aab._comment14
-rw-r--r--doc/bugs/S3_upload_not_using_multipart/comment_4_09a3372fd13734cbb05e79d0ba76d052._comment8
-rw-r--r--doc/bugs/S3_upload_not_using_multipart/comment_5_5add65b5b284f79ec09ee4d0326e7132._comment8
-rw-r--r--doc/bugs/S3_upload_not_using_multipart/comment_6_906abafc53070d8e4f33df486d2241ea._comment12
-rw-r--r--doc/bugs/S3_upload_not_using_multipart/comment_7_f620888512cd78628f82ec9e5eed4ad1._comment21
-rw-r--r--doc/bugs/S3_upload_not_using_multipart/comment_8_4d9242cde0d2348452438659a8aa8d6d._comment8
-rw-r--r--doc/bugs/S3_upload_not_using_multipart/comment_9_1f5578a9100f0f087a558e5e5968d753._comment8
-rw-r--r--doc/bugs/S3_upload_not_using_multipart/comment_9_74b2a392a537dde1c28089f1deed940c._comment31
-rw-r--r--doc/bugs/SSH:_command-line:_line_0:_Bad_configuration_option:_ControlPersist___40__SSH_too_old_on_OS_X_10.6.8__63____41__.mdwn27
-rw-r--r--doc/bugs/SSH:_command-line:_line_0:_Bad_configuration_option:_ControlPersist___40__SSH_too_old_on_OS_X_10.6.8__63____41__/comment_1_0c57a2196d35eb1ecfb0c51273bba05c._comment10
-rw-r--r--doc/bugs/SanityCheckerStartup_crashed.mdwn28
-rw-r--r--doc/bugs/SanityCheckerStartup_crashed/comment_1_f30b69c11b487334ef02ce7bfcdeb36c._comment8
-rw-r--r--doc/bugs/SanityCheckerStartup_crashed/comment_2_8b800bf7b54e487e82d0897c87967f22._comment8
-rw-r--r--doc/bugs/Segfaults_on_Fedora_18_with_SELinux_enabled.mdwn65
-rw-r--r--doc/bugs/Segfaults_on_Fedora_18_with_SELinux_enabled/comment_1_f708d87aa65cd38c20087859d3ab2dc7._comment12
-rw-r--r--doc/bugs/Segfaults_on_Fedora_18_with_SELinux_enabled/comment_2_fb7188db031147992f3c906783ebbee0._comment59
-rw-r--r--doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably..mdwn4
-rw-r--r--doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably./comment_4_a1948b7cd6ea990c8f1be5e483c835fa._comment14
-rw-r--r--doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably./comment_5_293b333134c97dc666a825cc7a8b2b62._comment12
-rw-r--r--doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__.mdwn46
-rw-r--r--doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_1_00b52dba3bc30516e06c44cbfd3a05a2._comment17
-rw-r--r--doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_2_8f5fa659c2ab91b1757bac31cd3b15eb._comment10
-rw-r--r--doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_3_ccf9623d60c58d036d8bf24757e50de3._comment10
-rw-r--r--doc/bugs/Should_ignore_.thumbnails__47___on_android.mdwn28
-rw-r--r--doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials.mdwn30
-rw-r--r--doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials/comment_1_804a51b57ac9261a95b268d122eb7cae._comment15
-rw-r--r--doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials/comment_2_ed27571352892fb5229b4daa50934308._comment14
-rw-r--r--doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials/comment_3_8d4217b54a37eabfd12016c04c7e55b1._comment16
-rw-r--r--doc/bugs/Specifying_a_filename_starting_with___34__-c__34___instead_applies_it_to_all_files.mdwn75
-rw-r--r--doc/bugs/Specifying_a_filename_starting_with___34__-c__34___instead_applies_it_to_all_files/comment_1_2fe6d735bc075275a6b8890fac48ee58._comment18
-rw-r--r--doc/bugs/Stale_lock_files_on_Android.mdwn44
-rw-r--r--doc/bugs/Switching_between_direct_and_indirect_stomps_on___39__regular__39___git_files.mdwn27
-rw-r--r--doc/bugs/Switching_between_direct_and_indirect_stomps_on___39__regular__39___git_files/comment_1_0d2cb3b8509cd0eba50aafa14afefc02._comment63
-rw-r--r--doc/bugs/Switching_from_indirect_mode_to_direct_mode_breaks_duplicates.mdwn30
-rw-r--r--doc/bugs/Switching_repositories_in_webapp_on_a_remote_server_is_not_honoring_--listen_parameter.mdwn24
-rw-r--r--doc/bugs/Switching_repositories_in_webapp_on_a_remote_server_is_not_honoring_--listen_parameter/comment_1_4dd773372979dd95538bfba6516a11eb._comment9
-rw-r--r--doc/bugs/Syncing_creates_broken_links_instead_of_proper_files.mdwn51
-rw-r--r--doc/bugs/Syncing_creates_broken_links_instead_of_proper_files/comment_1_a2bedb2e77451b02fc66fc9ef5c4405c._comment11
-rw-r--r--doc/bugs/Syncing_of_file_contents_seems_to_be_broken_in_recent_versions_of_the_assistant.mdwn2
-rw-r--r--doc/bugs/Test_failure_on_debian_dropunused.mdwn31
-rw-r--r--doc/bugs/The_assistant_hangs_forever.mdwn46
-rw-r--r--doc/bugs/The_assistant_hangs_forever/comment_1_b0291e32860e0da0b66837d14ed5aab6._comment8
-rw-r--r--doc/bugs/The_assistant_hangs_forever/comment_2_a2950cf91b8a4e4f2951f5522ef0e9c4._comment18
-rw-r--r--doc/bugs/The_assistant_hangs_forever/comment_3_db95f78519d5ffbad793906028730dab._comment12
-rw-r--r--doc/bugs/The_assistant_hangs_forever/comment_4_28b13fd3165b38a2fbc9e1a461c38921._comment22
-rw-r--r--doc/bugs/The_assistant_hangs_forever/comment_5_81a79c8840ff26307a9c6edad5b850f9._comment9
-rw-r--r--doc/bugs/The_assistant_hangs_forever/comment_6_b739719b14705f4d7e1d412b3cab090c._comment17
-rw-r--r--doc/bugs/The_assistant_hangs_forever/comment_7_2b300d960697c5b967c1f109dfd6dfbf._comment16
-rw-r--r--doc/bugs/The_assistant_hangs_forever/comment_8_8623220d08b1a72ed8b669a2d9cc0f75._comment15
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible.mdwn29
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_10_8305becdc6e70abdaf17e42f263173fc._comment12
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_11_d75896a6e204d1abdda04923aa668d04._comment8
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_12_a36a4a64a04c01c2db467b09300e6ebd._comment8
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_13_c9d6631c304acb289e485fb901e1f274._comment35
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_14_10282c4352075c8d148b8674973b7b16._comment22
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_15_ceb68da01d9e2fe9a70fab6244116da0._comment15
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_16_cca4abde86a8be5e2919c4738f5bdd0c._comment18
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_17_2fa5d7d9110c91b0a3a833cb3d9f53fd._comment10
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_18_bf21d28142e4c304aa0bc740955ddea0._comment10
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_19_45537758fa937f16fc82120bf8b234e8._comment8
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_1_a38497772834a4b12137390b461ce70b._comment12
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_20_b685050ee6fbb1a685e33f9656a10e84._comment8
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_3_17bc0220c20553c848875475c5fd4ae6._comment12
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_4_76472bc58bb790f773c46ec2c39fcf88._comment11
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_4_dcd9286e314779c25764484beff40561._comment10
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_5_2146eec77b87b615100d0d003e8dce75._comment15
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_6_2bd6f4e04903ee251d43d0a97bd40b6e._comment8
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_7_7db8ed002eb6313b07f09bd1a34019e3._comment10
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_8_1bcb2a238006044bc78849e56cb21a01._comment9
-rw-r--r--doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_9_26c6937cf78e7141e0e3b20f25ed8f7a._comment8
-rw-r--r--doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories.mdwn33
-rw-r--r--doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories/comment_1_1b80f9cfedd25e34997fa07e08d15012._comment8
-rw-r--r--doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories/comment_2_53499da1185c56d8fd25f86ba41d96ce._comment11
-rw-r--r--doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories/comment_3_3e07b8386d2c7afce2a78d24b9c260b9._comment14
-rw-r--r--doc/bugs/Too_many_open_files.mdwn59
-rw-r--r--doc/bugs/Too_many_open_files/comment_1_d5d509b9b431d2ea6000ebc0aed62857._comment8
-rw-r--r--doc/bugs/Too_much_system_load_on_startup.mdwn24
-rw-r--r--doc/bugs/Too_much_system_load_on_startup/comment_1_4470cddc0965062588acff1bc77285e9._comment8
-rw-r--r--doc/bugs/TransferScanner_crash_on_Android.mdwn28
-rw-r--r--doc/bugs/TransferScanner_crash_on_Android/comment_1_6c3584ade1ee6cccddddeaa8e1697945._comment20
-rw-r--r--doc/bugs/TransferScanner_crash_on_Android/comment_2_06574e05149a677d666a722061586658._comment10
-rw-r--r--doc/bugs/TransferScanner_crash_on_Android/comment_3_54ae097d30bb7a49fe151f38c9bac033._comment8
-rw-r--r--doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file.mdwn50
-rw-r--r--doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file/comment_1_a1392b92efdff82783a4b0cc2c3c7f2f._comment14
-rw-r--r--doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file/comment_2_5e153b7c59c474988fe551a505e545bc._comment8
-rw-r--r--doc/bugs/Trouble_initializing_git_annex_on_NFS.mdwn16
-rw-r--r--doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_1_e26952373150d63b8a5d3643a2762de1._comment10
-rw-r--r--doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_2_f80b10ed395738e50e345fc22c708ae5._comment10
-rw-r--r--doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_3_f99e0f05950fc2fc80fdecd35e17012c._comment8
-rw-r--r--doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_4_e42146d2dcc4052266dd61d204aeb551._comment8
-rw-r--r--doc/bugs/True_backup_support.mdwn7
-rw-r--r--doc/bugs/True_backup_support/comment_1_50aa0bc1e2502622585682cb703e0b85._comment10
-rw-r--r--doc/bugs/True_backup_support/comment_2_d6030c6c49b227e022f05d590746d4ca._comment8
-rw-r--r--doc/bugs/Truncated_file_transferred_via_S3.mdwn3
-rw-r--r--doc/bugs/Truncated_file_transferred_via_S3/comment_6_6aa9261c0cdb02c6dd66d25f5c71f622._comment8
-rw-r--r--doc/bugs/USB_drive_not_syncing.mdwn519
-rw-r--r--doc/bugs/USB_drive_not_syncing/comment_1_de76bd6b9f8eb2489d4854a4c8ddd308._comment15
-rw-r--r--doc/bugs/Unable_to_copy_from_Android.mdwn148
-rw-r--r--doc/bugs/Unable_to_copy_from_Android/comment_1_3bb70c44b6b8d451687591fcab5c1506._comment8
-rw-r--r--doc/bugs/Unable_to_import_feed.mdwn27
-rw-r--r--doc/bugs/Unable_to_import_feed/comment_1_16230fbbb996e165b84787ed4d5f72ea._comment45
-rw-r--r--doc/bugs/Unable_to_switch_back_to_direct_mode.mdwn55
-rw-r--r--doc/bugs/Unable_to_switch_back_to_direct_mode/comment_1_4585b251f011a153c62f377c324cf963._comment24
-rw-r--r--doc/bugs/Unable_to_switch_back_to_direct_mode/comment_2_5848ebbab38d1244347f7e7351b3a30d._comment10
-rw-r--r--doc/bugs/Unable_to_switch_back_to_direct_mode/comment_3_1c5c7b0c7bc336e00f43e257b87a6208._comment8
-rw-r--r--doc/bugs/Unable_to_switch_back_to_direct_mode/comment_4_b0bfd68998bc3e11d8e089646b8292a6._comment12
-rw-r--r--doc/bugs/Unable_to_sync_a_second_machine_through_Box.mdwn46
-rw-r--r--doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_1_cb43a2bc976e3eb1cfc3ee9d4d34e78e._comment22
-rw-r--r--doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_2_3375e9bfab3fed271413bd9bb5fa0121._comment30
-rw-r--r--doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_3_c4420e1a3db321b4135b1626d3582adb._comment12
-rw-r--r--doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_4_f4b2c88bb5938dacdd04dfe9a68560de._comment18
-rw-r--r--doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_5_6dcc95ffb3fc7bbbedd6be5df0111c85._comment8
-rw-r--r--doc/bugs/Unable_to_use_remotes_with_space_in_the_path.mdwn35
-rw-r--r--doc/bugs/Unclear_output_during_git-annex_copy.mdwn17
-rw-r--r--doc/bugs/Unfortunate_interaction_with_Calibre.mdwn24
-rw-r--r--doc/bugs/Unfortunate_interaction_with_Calibre/comment_1_7cb5561f11dfc7726a537ddde2477489._comment8
-rw-r--r--doc/bugs/Unfortunate_interaction_with_Calibre/comment_2_b8ae4bc589c787dacc08ab2ee5491d6e._comment8
-rw-r--r--doc/bugs/Unfortunate_interaction_with_Calibre/comment_3_977c5f6b82f9e18cdd81d57005bb8b89._comment8
-rw-r--r--doc/bugs/Unfortunate_interaction_with_Calibre/comment_4_ff7d2e9a39dfe12b975d04650ac57cc4._comment8
-rw-r--r--doc/bugs/Unfortunate_interaction_with_Calibre/comment_5_fc4d5301797589e92cc9a24697b2155d._comment15
-rw-r--r--doc/bugs/Uninstalling_removes_libcrypto.dll.mdwn25
-rw-r--r--doc/bugs/Uninstalling_removes_libcrypto.dll/comment_1_0a0c8c62ca4d314f14d50306546c33c2._comment21
-rw-r--r--doc/bugs/Uninstalling_removes_libcrypto.dll/comment_2_68f84ce2eb95567012ed4ff20524c166._comment9
-rw-r--r--doc/bugs/Uninstalling_removes_libcrypto.dll/comment_3_fad04c6f0c4d46b648d6cabfb59d92cf._comment12
-rw-r--r--doc/bugs/Uninstalling_removes_libcrypto.dll/comment_4_8d36cf821c62207df0a3b1fda5758fae._comment9
-rw-r--r--doc/bugs/Uninstalling_removes_libcrypto.dll/comment_5_4741efcc77b1bf1125ef230a0278ca51._comment8
-rw-r--r--doc/bugs/Unknown_command___39__list__39__.mdwn15
-rw-r--r--doc/bugs/Unknown_command___39__list__39__/comment_1_c625d03d1ed2019141ac9202f933466d._comment8
-rw-r--r--doc/bugs/Unknown_command___39__list__39__/comment_2_800e1b6417768bdadda311ebfb5df637._comment8
-rw-r--r--doc/bugs/Unknown_command___39__list__39__/comment_3_35dfc75ce9efffff139f8929dc311e29._comment10
-rw-r--r--doc/bugs/Unknown_remote_type_webdav.mdwn8
-rw-r--r--doc/bugs/Unnecessary_remote_transfers.mdwn27
-rw-r--r--doc/bugs/Unnecessary_remote_transfers/comment_10_b778fbb1386f0f51bf057ffacd590ebb._comment12
-rw-r--r--doc/bugs/Unnecessary_remote_transfers/comment_11_55430eac842d0a192dc7f41d7730e4d5._comment10
-rw-r--r--doc/bugs/Unnecessary_remote_transfers/comment_1_00c18e07678dc513a02d974fe059df73._comment12
-rw-r--r--doc/bugs/Unnecessary_remote_transfers/comment_2_2e9992dbfceabd6df535a2770626de16._comment35
-rw-r--r--doc/bugs/Unnecessary_remote_transfers/comment_3_a98f3091a6a658919f0562cf396439c2._comment8
-rw-r--r--doc/bugs/Unnecessary_remote_transfers/comment_4_417c1e8e27ee1a1f9ebf9160560605c5._comment96
-rw-r--r--doc/bugs/Unnecessary_remote_transfers/comment_5_eb5a2717a1f0c7bb761d2a7866b23def._comment8
-rw-r--r--doc/bugs/Unnecessary_remote_transfers/comment_6_89f756db1f3f2e60a3bd1f35f55fee43._comment40
-rw-r--r--doc/bugs/Unnecessary_remote_transfers/comment_7_5aaf8766a7ba05c4f92715e5d5175a8f._comment13
-rw-r--r--doc/bugs/Unnecessary_remote_transfers/comment_8_e856b350632cc865d16d1995a6cdf065._comment14
-rw-r--r--doc/bugs/Unnecessary_remote_transfers/comment_9_64f831545b34b78452952cf49b5f5b05._comment25
-rw-r--r--doc/bugs/Unused_files_not_being_reported:_Do_not_take_remote_tracking_branches_into_account__63__.mdwn18
-rw-r--r--doc/bugs/Unused_files_not_being_reported:_Do_not_take_remote_tracking_branches_into_account__63__/comment_1_8fe44da0581d9b8c6ab5fe6aea8d83d1._comment8
-rw-r--r--doc/bugs/Update_dependency_on_certificate___62____61___1.3.3.mdwn64
-rw-r--r--doc/bugs/Upgrade_Does_not_Complete_on_OS_X.mdwn32
-rw-r--r--doc/bugs/Upgrade_impossible_om_Mac_OSX.mdwn22
-rw-r--r--doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_10_8c1487635f724d017ebe2f8b7bc10e8d._comment8
-rw-r--r--doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_1_84e52a4d1502fd622bdb25e04b459292._comment13
-rw-r--r--doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_2_f2b109f6cf92f101d7f0afeb91605240._comment24
-rw-r--r--doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_3_df9b111aefea82b9d108495b79d7ffb4._comment24
-rw-r--r--doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_4_e3b5bc815376383bbd1f312cc1c32a41._comment12
-rw-r--r--doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_5_cd9b77e6670840a9902f5be80e1e658a._comment87
-rw-r--r--doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_6_4584393333d377532d8607b42319abd9._comment8
-rw-r--r--doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_7_d9d36ff62267dde98a27c5981951df7f._comment10
-rw-r--r--doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_8_5b26711c737eeb0b302060f098cb320b._comment8
-rw-r--r--doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_9_1bf050056dcac7c1e0f497ee6e87a95a._comment10
-rw-r--r--doc/bugs/Upload_to_S3_fails_.mdwn59
-rw-r--r--doc/bugs/Upload_to_S3_fails_/comment_10_b7e912bac673bdffa5775b71d5d39937._comment8
-rw-r--r--doc/bugs/Upload_to_S3_fails_/comment_11_65cb9b1dd69cd657f2cfde036eb60417._comment11
-rw-r--r--doc/bugs/Upload_to_S3_fails_/comment_1_398c014921f9af957fb5e9a92ed0ef4d._comment10
-rw-r--r--doc/bugs/Upload_to_S3_fails_/comment_2_f33ce058c9460cf7d151e739bff0440a._comment10
-rw-r--r--doc/bugs/Upload_to_S3_fails_/comment_3_cd1e768fe1e67daf08b5afd460620922._comment8
-rw-r--r--doc/bugs/Upload_to_S3_fails_/comment_4_0cdd2e8d6e83c03de717ecd3253e753d._comment8
-rw-r--r--doc/bugs/Upload_to_S3_fails_/comment_5_020c055f6c06860dda27c1debb123742._comment43
-rw-r--r--doc/bugs/Upload_to_S3_fails_/comment_6_8bc023fca8cedfc517856cdcd20b7f10._comment10
-rw-r--r--doc/bugs/Upload_to_S3_fails_/comment_7_32685258748a7cdd177e7af2105f128e._comment10
-rw-r--r--doc/bugs/Upload_to_S3_fails_/comment_8_841fd94d0f599c71a76fd22b07944366._comment8
-rw-r--r--doc/bugs/Upload_to_S3_fails_/comment_9_dd837a1cb2146224b9c000cbeea4f3b3._comment8
-rw-r--r--doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work.mdwn49
-rw-r--r--doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_1_2143f0540fdcd7efeb25b5a3b54fe0fd._comment12
-rw-r--r--doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_2_bca95245b457631d08b47591da6163ad._comment9
-rw-r--r--doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_3_f54bb003096752dae0442660267a1e37._comment11
-rw-r--r--doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_4_38bb916ed5b90b92ffa91a452ff052a9._comment10
-rw-r--r--doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_5_5b6ef464ab1ad061f27122db40191e26._comment8
-rw-r--r--doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_6_3727bda5082cb1f2b1f746f9f80ced7d._comment8
-rw-r--r--doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_7_a7139f19f0b73c024cd9218eb01e6104._comment8
-rw-r--r--doc/bugs/Using_Github_as_remote_throws_proxy_errors.mdwn27
-rw-r--r--doc/bugs/Using_Github_as_remote_throws_proxy_errors/comment_1_10616b17c3fb8286fdc64c841023f8a1._comment9
-rw-r--r--doc/bugs/Using_Github_as_remote_throws_proxy_errors/comment_2_8a72887d33e492a041f8246d93d0c778._comment8
-rw-r--r--doc/bugs/Using_a_revoked_GPG_key.mdwn34
-rw-r--r--doc/bugs/Using_a_revoked_GPG_key/comment_1_7bb01d081282e5b02b7720b2953fe5be._comment8
-rw-r--r--doc/bugs/Using_a_revoked_GPG_key/comment_2_9c0c40360f0058a4bd346c1362e302b6._comment8
-rw-r--r--doc/bugs/Using_a_revoked_GPG_key/comment_3_8f69f58107246595f5603f35c4aa7395._comment8
-rw-r--r--doc/bugs/Using_a_revoked_GPG_key/comment_4_78b3c52ba85edfa6ee6e273bec3bea5c._comment13
-rw-r--r--doc/bugs/Using_a_revoked_GPG_key/comment_5_a85ccf2f09ebe87147f8761b81a02326._comment8
-rw-r--r--doc/bugs/Using_a_revoked_GPG_key/comment_6_8b89eb5e6386acd0a922310c04f863ac._comment12
-rw-r--r--doc/bugs/Using_a_revoked_GPG_key/comment_7_20dc5a7ce7cb6ca97ccdfb923c3b24bb._comment10
-rw-r--r--doc/bugs/Using_a_revoked_GPG_key/comment_8_9dc921dc6077f828454a4444088b9a43._comment15
-rw-r--r--doc/bugs/Using_a_revoked_GPG_key/comment_9_f50c802d78041fd1522f0e7599ce6a45._comment42
-rw-r--r--doc/bugs/VFAT_crazy_limit_on_max_filenames_in_directory.mdwn2
-rw-r--r--doc/bugs/Visual_glitch_while_xmpp_pairing.mdwn14
-rw-r--r--doc/bugs/WEBDAV_443.mdwn307
-rw-r--r--doc/bugs/WEBDAV_443/comment_10_9ee2c5ed44295455af890caee7b06f1a._comment18
-rw-r--r--doc/bugs/WEBDAV_443/comment_11_863a7d315212c9a8ab8f6fafa5d1b7f5._comment8
-rw-r--r--doc/bugs/WEBDAV_443/comment_12_c17a4e23011e0a917dbe0ecf7e9f0cb5._comment8
-rw-r--r--doc/bugs/WEBDAV_443/comment_13_3414416ff455d2fd1a7c7e7c4554b54d._comment11
-rw-r--r--doc/bugs/WEBDAV_443/comment_14_e1da141eefb0445c217e5f5c119356da._comment8
-rw-r--r--doc/bugs/WEBDAV_443/comment_15_41c3134bcc222b97bf183559723713d9._comment27
-rw-r--r--doc/bugs/WEBDAV_443/comment_16_89621b526065b5bef753ce75db1af7b5._comment14
-rw-r--r--doc/bugs/WEBDAV_443/comment_17_131a1b65c8008cf9f02c93d4fb75720b._comment10
-rw-r--r--doc/bugs/WEBDAV_443/comment_18_b4f894a0b9ebb84ab73f6ffcf0778090._comment29
-rw-r--r--doc/bugs/WEBDAV_443/comment_1_c6572ca1eaaf89b01c0ed99a4058412f._comment10
-rw-r--r--doc/bugs/WEBDAV_443/comment_2_a357969cde382a91e13920ee1e9f711c._comment8
-rw-r--r--doc/bugs/WEBDAV_443/comment_3_213815d6b827d467c60f3e8af925813b._comment14
-rw-r--r--doc/bugs/WEBDAV_443/comment_4_b775be4b722fc7124d9fbe2d5d01cc9f._comment22
-rw-r--r--doc/bugs/WEBDAV_443/comment_5_c4ea745da437e56b2426d1c2c00dfcec._comment17
-rw-r--r--doc/bugs/WEBDAV_443/comment_6_ef05c0ae88fee9c626922c6064ffdf1e._comment8
-rw-r--r--doc/bugs/WEBDAV_443/comment_7_eecabe8d5ed564cb540450770ca7d0b6._comment8
-rw-r--r--doc/bugs/WEBDAV_443/comment_8_7f77ba8ebd90186d3b3949ae529ba393._comment12
-rw-r--r--doc/bugs/WEBDAV_443/comment_9_87ebdc92b48d672964fb3f248c53600f._comment9
-rw-r--r--doc/bugs/WORM:_Handle_long_filenames_correctly.mdwn4
-rw-r--r--doc/bugs/WORM:_Handle_long_filenames_correctly/comment_1_77aa9cafbe20367a41377f3edccc9ddb._comment10
-rw-r--r--doc/bugs/WORM:_Handle_long_filenames_correctly/comment_2_fe735d728878d889ccd34ec12b3a7dea._comment8
-rw-r--r--doc/bugs/WORM:_Handle_long_filenames_correctly/comment_3_2bf0f02d27190578e8f4a32ddb195a0a._comment10
-rw-r--r--doc/bugs/WORM:_Handle_long_filenames_correctly/comment_4_8f7ba9372463863dda5aae13205861bf._comment8
-rw-r--r--doc/bugs/WORM_keys_differ_depending_on_working_dir_during_add.mdwn68
-rw-r--r--doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults.mdwn31
-rw-r--r--doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_10_6c872dff4fcc63c16bf69d1e96891c89._comment8
-rw-r--r--doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_1_5cad24007f819e4be193123dab0d511a._comment10
-rw-r--r--doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_2_d449bf656a59d424833f9ab5a7fb4e82._comment8
-rw-r--r--doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_3_ffb1ce41477ad60840abd7a89a133067._comment8
-rw-r--r--doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_4_cebbc138c6861c086bb7937b54f5adbc._comment8
-rw-r--r--doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_5_5e27737a5bb0e9e46c98708700318e67._comment8
-rw-r--r--doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_6_1f92da712232d050e085a4f39063d7a6._comment21
-rw-r--r--doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_7_4153dc8029c545f8e86584a38bd536fb._comment15
-rw-r--r--doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_8_f85b6eb5bfd28ffc6973fb4ab0fe4337._comment8
-rw-r--r--doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_9_c747c488461c98cd285b51d3afc2c3eb._comment10
-rw-r--r--doc/bugs/Watcher_crashed:_addWatch:_does_not_exist.mdwn25
-rw-r--r--doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_1_24f511a8103727894c6e96798a559870._comment10
-rw-r--r--doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_2_e14eddbc09cadbf1e4dbbb0c07e0e5b0._comment10
-rw-r--r--doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_3_513fae4d379008f954a307be8df34976._comment13
-rw-r--r--doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_4_172eaeb3bb8b502379695aba35f96120._comment12
-rw-r--r--doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_5_8adb9de82cc8581422734acc66dd094c._comment11
-rw-r--r--doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_6_02f0beef1188bfa336bf4220eb5c6286._comment13
-rw-r--r--doc/bugs/WebDAV_HandshakeFailed_.mdwn7
-rw-r--r--doc/bugs/WebDAV_HandshakeFailed_/comment_1_40499110ea43bc99ad9dd9f642da434c._comment15
-rw-r--r--doc/bugs/WebDAV_HandshakeFailed_/comment_2_506712e8cc5b47b9bd69edf67ae54da7._comment10
-rw-r--r--doc/bugs/WebDAV_HandshakeFailed_/comment_3_5641481d9e9ed2b711b1516f1abc5c30._comment8
-rw-r--r--doc/bugs/WebDAV_HandshakeFailed_/comment_4_1d609de93fa66ce9dc802e67b5922243._comment8
-rw-r--r--doc/bugs/WebDAV_HandshakeFailed_/comment_5_62761882d30c1b02930c938cb8e30ed4._comment10
-rw-r--r--doc/bugs/WebDAV_HandshakeFailed_/comment_6_acda8fae848ec486ce2a0b3dff3bd0a5._comment8
-rw-r--r--doc/bugs/WebDAV_HandshakeFailed_/comment_7_6c51b6c7dd477d8911dd9a7a5c41ea2e._comment8
-rw-r--r--doc/bugs/WebDAV_HandshakeFailed_/comment_8_e834f791d3000669fab25732a7c72ab3._comment13
-rw-r--r--doc/bugs/WebDAV_error_when_connecting_to_box.com:_The_resource_you_tried_to_create_already_exists.mdwn36
-rw-r--r--doc/bugs/WebDAV_error_when_connecting_to_box.com:_The_resource_you_tried_to_create_already_exists/comment_1_ac40ddc26bff27dafdbc457837695a92._comment8
-rw-r--r--doc/bugs/Weird_behaviour_of_direct_and_indirect_annexes.mdwn57
-rw-r--r--doc/bugs/Weird_behaviour_of_direct_and_indirect_annexes/comment_1_56474a69c2f174d83be9137d3c045a47._comment33
-rw-r--r--doc/bugs/When_adding_a_box.com_repo_with_the_webapp_the_old-style_chunking_is_used.mdwn5
-rw-r--r--doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace.mdwn49
-rw-r--r--doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_0._comment34
-rw-r--r--doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_10_037a6dd6e15ef5f789a1f364f7507b53._comment45
-rw-r--r--doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_11_614e4110188fc6474e7da50fc4281e13._comment10
-rw-r--r--doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_12_dcb74fb91e1c2f0db4efd68c8bcbc96c._comment20
-rw-r--r--doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_14_38671ba8d302f4d32460d1478abd2111._comment45
-rw-r--r--doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_14_483244b1ed5744308022465f45c091fd._comment14
-rw-r--r--doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_1_d2c63723fa4bf828873770a42ffaab20._comment8
-rw-r--r--doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_3_52f0db73dc38c3e3a73f6c7a420bf016._comment8
-rw-r--r--doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_4_93596b4d5a48ffcf4bc11ba9c83cf7ca._comment9
-rw-r--r--doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_5_de94e80dde6d12485140bb079d74d775._comment14
-rw-r--r--doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_6_5f34c3d449247b4bce4665b3ea4d054c._comment25
-rw-r--r--doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_7_b43ae8aec23ba3acaf70edc0de058710._comment17
-rw-r--r--doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_8_13b8e0a62f6b6d02960687e206a8b016._comment15
-rw-r--r--doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_9_818b94a74b01a210d1106dd35bc932d8._comment10
-rw-r--r--doc/bugs/Windows_and_Linux_in_direct_mode_confuses_git.mdwn384
-rw-r--r--doc/bugs/Windows_and_Linux_in_direct_mode_confuses_git/comment_1_155e0c4d3aa41eebfe27533ab70a91d3._comment68
-rw-r--r--doc/bugs/Windows_build_has_hardcoded_paths.mdwn39
-rw-r--r--doc/bugs/Windows_build_has_hardcoded_paths/comment_1_03518523a823a89fbb97b6a57d650e2b._comment8
-rw-r--r--doc/bugs/Windows_build_has_hardcoded_paths/comment_2_58b856e19c8d5e59164b42399ba6b1fd._comment16
-rw-r--r--doc/bugs/Windows_build_has_hardcoded_paths/comment_3_f9543c0ca1ff81c4d495a01c77429ea8._comment9
-rw-r--r--doc/bugs/Windows_build_has_hardcoded_paths/comment_4_01096994c19b7d0df1cc6866d4f22e21._comment12
-rw-r--r--doc/bugs/Windows_build_has_hardcoded_paths/comment_5_0d7a4f740180dff7c0853062e4913804._comment22
-rw-r--r--doc/bugs/Windows_build_has_hardcoded_paths/comment_6_748aa921afee3d7e4667dee50e70a558._comment8
-rw-r--r--doc/bugs/Windows_daemon_silently_dies.mdwn132
-rw-r--r--doc/bugs/Windows_daemon_silently_dies/comment_1_b590aaeedec78c8540d549a8c773881e._comment10
-rw-r--r--doc/bugs/Windows_daemon_silently_dies/comment_2_472975d2bd9784ae40b35f11fc561231._comment72
-rw-r--r--doc/bugs/Windows_daemon_silently_dies/comment_3_48415a7251abffca998b8dccc5e0ba80._comment22
-rw-r--r--doc/bugs/Windows_daemon_silently_dies/comment_4_1c0b0b2e7180425ff2d5e5316a138f7d._comment10
-rw-r--r--doc/bugs/Windows_daemon_silently_dies/comment_5_0d14dd2c8d94a81ffd5aae07e927344f._comment40
-rw-r--r--doc/bugs/Windows_daemon_silently_dies/comment_6_20a420680058f84a8cbd43682957fe7b._comment8
-rw-r--r--doc/bugs/Windows_daemon_silently_dies/comment_7_1514739ba9885917d03597dcc6aa7bec._comment20
-rw-r--r--doc/bugs/Windows_daemon_silently_dies/comment_8_0210436870e6622a83c9b4788e31eef4._comment8
-rw-r--r--doc/bugs/Windows_file_timestamp_timezone_madness.mdwn31
-rw-r--r--doc/bugs/Windows_file_timestamp_timezone_madness/comment_1_9db59ab2242186a23a47337a1597f4e2._comment12
-rw-r--r--doc/bugs/Windows_file_timestamp_timezone_madness/comment_2_a6a3871747306913b69abcd73d13305e._comment26
-rw-r--r--doc/bugs/Windows_file_timestamp_timezone_madness/comment_3_7fe149bedb8ceab75953996ac8e20f0f._comment20
-rw-r--r--doc/bugs/Windows_file_timestamp_timezone_madness/comment_4_c9e8c9997b7c3a82c14fc34af319382d._comment10
-rw-r--r--doc/bugs/Windows_file_timestamp_timezone_madness/comment_5_0739426403f5bf9954acbc86ca0d11ea._comment23
-rw-r--r--doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase.mdwn21
-rw-r--r--doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_1_a4fc30bf7d39cae337286e9e815e6cba._comment13
-rw-r--r--doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_2_e5d42b623017acedf6a3890ce15680a3._comment12
-rw-r--r--doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_3_e5150b65b514896e14b9ad3d951963f7._comment10
-rw-r--r--doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_4_47c2fc167b0c396edc40468fb7c7bfee._comment8
-rw-r--r--doc/bugs/_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41_____91__2014-07-23_16:41:45_CEST__93___WebApp:_warning_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41__.mdwn46
-rw-r--r--doc/bugs/_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41_____91__2014-07-23_16:41:45_CEST__93___WebApp:_warning_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41__/comment_1_4d1b96911e3e227c7433ccea543872c1._comment10
-rw-r--r--doc/bugs/_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41_____91__2014-07-23_16:41:45_CEST__93___WebApp:_warning_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41__/comment_2_7be98a630e1deb655a4d1675bf622d05._comment8
-rw-r--r--doc/bugs/__171__transferkey__187___fails_for_bare_remotes.mdwn21
-rw-r--r--doc/bugs/__171__transferkey__187___fails_for_bare_remotes/comment_1_dd4538ab19a7f8e0f49aa0156aeaae43._comment32
-rw-r--r--doc/bugs/__171__transferkey__187___fails_for_bare_remotes/comment_2_4276ff682d10c1d4be9728f9b649ebae._comment10
-rw-r--r--doc/bugs/__171__uninit__187___on_direct_mode_repo_gives___171__removeLink:_permission_denied___40__Permission_denied__41____187__.mdwn33
-rw-r--r--doc/bugs/__34__Adding_4923_files__34___is_really_slow.mdwn2
-rw-r--r--doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error..mdwn42
-rw-r--r--doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error./comment_1_6d821af99ab3c83a5b0f52d3713ab8e2._comment10
-rw-r--r--doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error./comment_2_206b6c8cce8350fc088f01c42fc4715b._comment8
-rw-r--r--doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error./comment_3_ed36f503f88611382b50687608b9b7e7._comment10
-rw-r--r--doc/bugs/__34__annex_sync__34___gets_confused_when_operating_in_a_symlink__39__ed_directory.mdwn18
-rw-r--r--doc/bugs/__34__drop__34___deletes_all_files_with_identical_content.mdwn49
-rw-r--r--doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_1_2eb20b65582fa7f271b1d0bb5560d08c._comment10
-rw-r--r--doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_2_b14e1d31dd6a8fb930fcc0bec798e194._comment19
-rw-r--r--doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_3_1892bcfbe3c462aa74552a241d65cad9._comment8
-rw-r--r--doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_4_dfa0e31996eaa14e2945c1d11670c4d9._comment15
-rw-r--r--doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_5_e2a9336cf1080c158765d4adfe72f26b._comment9
-rw-r--r--doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit.mdwn24
-rw-r--r--doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_10_8abfe7417167df54b686960319465a65._comment8
-rw-r--r--doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_11_7776659e257a97c9a3855c8ad008207a._comment10
-rw-r--r--doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_12_e8bbfb4eb26dae31f90a5fa53b4dc948._comment9
-rw-r--r--doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_1_2a64a2da445a64149da7335f35142a08._comment35
-rw-r--r--doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_2_decb1689b8cc2541077e2d0ae273b5e7._comment30
-rw-r--r--doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_3_1f6443e495cc16a13e2e4175e73dc8f1._comment27
-rw-r--r--doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_4_522020e71393434834def6c80b82e39e._comment16
-rw-r--r--doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_5_cc4cba022869b32d298cdafed9545a34._comment8
-rw-r--r--doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_6_e71b251db2ff1f52a40fec40303cdefc._comment15
-rw-r--r--doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_7_0b6413f9ca403be3d83bb3306d1e7f8f._comment8
-rw-r--r--doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_8_f951981f0bf8cbaecfc46e7b9c903d70._comment8
-rw-r--r--doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_9_7c98c8b291fdf28a09ccb6c7e4001d5a._comment22
-rw-r--r--doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows.mdwn109
-rw-r--r--doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_1_ce2355485f2610b6a7a79914dcd365be._comment17
-rw-r--r--doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_2_dfc398002e2ffbe0b63ce422a1e16d67._comment25
-rw-r--r--doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_3_1d23e9760782a8d6d2ea2dd5a4c6253a._comment9
-rw-r--r--doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_4_108f3e4449fc9591bcdeb490b486357f._comment9
-rw-r--r--doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_5_a1c8ac1d7884d676f05db588b2894603._comment11
-rw-r--r--doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_6_739b4fd2156de7570ec71417f41eb188._comment23
-rw-r--r--doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_7_c561d2eb75a2579db620bf7877c98502._comment8
-rw-r--r--doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_8_169423dd4f3292e503b285f088f6701f._comment8
-rw-r--r--doc/bugs/__34__git_annex_metadata__34___without_a_file_name_is_hazardous.mdwn26
-rw-r--r--doc/bugs/__34__git_annex_watch__34___adds_map.dot.mdwn23
-rw-r--r--doc/bugs/__34__make_test__34___fails_silently.mdwn4
-rw-r--r--doc/bugs/__34__make_test__34___fails_silently/comment_1_f868e34f41d828d4571968d1ab07820a._comment16
-rw-r--r--doc/bugs/__34__make_test__34___fails_silently/comment_2_fb9e8e2716b0dea15b0d4807ae7cd114._comment8
-rw-r--r--doc/bugs/__34__old__34___and___34__new__34___hash_formats_are_mixed_up.mdwn31
-rw-r--r--doc/bugs/__34__old__34___and___34__new__34___hash_formats_are_mixed_up/comment_1_5ed3f7b21b007e269f5846cb2d805493._comment35
-rw-r--r--doc/bugs/__34__old__34___and___34__new__34___hash_formats_are_mixed_up/comment_2_436d8994457517e4c6f68f572b83decc._comment13
-rw-r--r--doc/bugs/__39__Cannot_write_a_repository_there__39___on_Windows.mdwn32
-rw-r--r--doc/bugs/__39__Internal_Server_Error__39___when_creating_repo_on_other_drive_than_C:_on_Windows.mdwn36
-rw-r--r--doc/bugs/__39__Internal_Server_Error__39___when_creating_repo_on_other_drive_than_C:_on_Windows/comment_1_ea3b2c0e3bdfb50ac0dce10ba1b6339f._comment24
-rw-r--r--doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content.mdwn24
-rw-r--r--doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_1_56f9cd5cc2e089b32cb076dc2e2a8ca5._comment22
-rw-r--r--doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_2_21c0f7f328cb51080fbd97e086c47a30._comment37
-rw-r--r--doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_3_3287b2f25f3b5ae4c27f4748694563ee._comment8
-rw-r--r--doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_4_e515eca68a70d40c522805d7e0d7c0e6._comment24
-rw-r--r--doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_5_b27f4c103dda050b6e9cf03ea3157abc._comment10
-rw-r--r--doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_6_2cc7083dab944705bf91fc00319b75e6._comment9
-rw-r--r--doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_7_1175f9be789d4c1907f0be98e435bd2f._comment10
-rw-r--r--doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_8_78e6164ef67a9560a3a9ead1f7a72473._comment15
-rw-r--r--doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_9_1d578fd13022dcd6382b415a7f6e097a._comment8
-rw-r--r--doc/bugs/__39__git_annex_get__39___returns_success_when_file_not_found.mdwn30
-rw-r--r--doc/bugs/__40__assistant__41___dependency_on_ssh-askpass_-_not_installed_automatically_on_xubuntu.mdwn4
-rw-r--r--doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__.mdwn20
-rw-r--r--doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_10_2e434e142a0d8b7ad27c00836043e261._comment9
-rw-r--r--doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_11_d8d5a0c61320b583dc1c42e875173bc3._comment7
-rw-r--r--doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_12_feeb65a0cb3273b605061ae3d3b8ff92._comment7
-rw-r--r--doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_13_bec0fb96b4b26382c20511a3c9ed537c._comment7
-rw-r--r--doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_14_fd30c9f9c3713728fb910b310397ba32._comment17
-rw-r--r--doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_15_82446751b835e95832d4aefd7805cd1f._comment7
-rw-r--r--doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_1_526c86345ab82e4344c6b50bc00f2437._comment7
-rw-r--r--doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_2_43bb5bb481f54764d355dfac536daba6._comment7
-rw-r--r--doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_3_3c37c32fe851f2a8cd854ccdd64b4453._comment8
-rw-r--r--doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_4_35a4da019f17c7979f220aba04b6b80a._comment8
-rw-r--r--doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_5_6b7da5bd28e8f9463b141ffdf2b60011._comment7
-rw-r--r--doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_6_105c4a78e10fd74f2775ec01be6a3324._comment7
-rw-r--r--doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_7_c9104ad6d9cfec93f561b9cd514b6f48._comment13
-rw-r--r--doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_8_e628cc5365b1268450f0245b362266cc._comment7
-rw-r--r--doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_9_0c8b65e117ffb3f00c57c4a420313c05._comment7
-rw-r--r--doc/bugs/__91__Android__93_____34__Make_Camera_Repository__34___button_goes_to_blank_page.mdwn17
-rw-r--r--doc/bugs/__91__Installation__93___There_is_no_available_version_of_quickcheck_that_satisfies___62____61__2.1.mdwn40
-rw-r--r--doc/bugs/__91__webapp__93___pause_syncing_with_specific_repository.mdwn8
-rw-r--r--doc/bugs/__91__wishlistAndroid:_bundle_an_ssh_server___40__dropbear__63____41___and_add_an_option_to_start_it_easily_with_the_terminal_app_menu.mdwn23
-rw-r--r--doc/bugs/__91__wishlistAndroid:_bundle_an_ssh_server___40__dropbear__63____41___and_add_an_option_to_start_it_easily_with_the_terminal_app_menu/comment_1_9bb53c45d685b368c7ba1758885f2874._comment12
-rw-r--r--doc/bugs/__91__wishlistAndroid:_bundle_an_ssh_server___40__dropbear__63____41___and_add_an_option_to_start_it_easily_with_the_terminal_app_menu/comment_2_251311a04f1a610e54ebe8e9b92de72e._comment13
-rw-r--r--doc/bugs/__91__wishlistAndroid:_bundle_an_ssh_server___40__dropbear__63____41___and_add_an_option_to_start_it_easily_with_the_terminal_app_menu/comment_3_83ac87a01639776a6e519af226bd84d5._comment8
-rw-r--r--doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op.mdwn15
-rw-r--r--doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_1_9b671e583eec5adf870dccd1e97b5dbc._comment8
-rw-r--r--doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_2_d11744202213d6f897f4234bc4c70c18._comment9
-rw-r--r--doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_3_a729deb465ff44f5a9b87c963cd6235a._comment15
-rw-r--r--doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_4_3f735503df9a08472d42fabd219c2ec5._comment31
-rw-r--r--doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_5_2c61eabbba7fd2a52ba02d59a0a76a42._comment8
-rw-r--r--doc/bugs/__96__git_annex_forget_--drop-dead_--force__96_____95__revives__95___repositories.mdwn88
-rw-r--r--doc/bugs/__96__git_annex_forget_--drop-dead_--force__96_____95__revives__95___repositories/comment_1_930b40e0f68da95d335eea5bd4216126._comment12
-rw-r--r--doc/bugs/__96__git_annex_forget_--drop-dead_--force__96_____95__revives__95___repositories/comment_2_5397d488bc337cb3d7cb46ed774d0437._comment90
-rw-r--r--doc/bugs/__96__git_annex_forget_--drop-dead_--force__96_____95__revives__95___repositories/comment_3_1b30e7611ec824dc6e79ef35e43ac740._comment10
-rw-r--r--doc/bugs/__96__git_annex_import__96___does_not_work_on_other_git_annex_repositories.mdwn113
-rw-r--r--doc/bugs/__96__git_annex_import__96___does_not_work_on_other_git_annex_repositories/comment_1_94ccd548c084286163eeb2af1ddc18e3._comment8
-rw-r--r--doc/bugs/__96__git_annex_import__96___does_not_work_on_other_git_annex_repositories/comment_2_befde3ef3d2b171ebb691915ff3af172._comment8
-rw-r--r--doc/bugs/__96__git_annex_sync__96___ignores_remotes.mdwn106
-rw-r--r--doc/bugs/__96__git_annex_sync__96___ignores_remotes/comment_1_39421e6935233cd8f45949ebdef369fe._comment9
-rw-r--r--doc/bugs/__96__git_annex_sync__96___ignores_remotes/comment_2_53fb15d6fbf96d43564ff7c866239d18._comment8
-rw-r--r--doc/bugs/_impossible_to_switch_repositories_on_android__in_webapp/comment_3_9ffafbeb572e110b3e072029d1ce177c._comment8
-rw-r--r--doc/bugs/acl_not_honoured_in_rsync_remote.mdwn2
-rw-r--r--doc/bugs/add_range_argument_to___34__git_annex_dropunused__34___.mdwn21
-rw-r--r--doc/bugs/add_script-friendly_output_options.mdwn19
-rw-r--r--doc/bugs/adding_a_remote_server_fails.mdwn27
-rw-r--r--doc/bugs/adding_a_remote_server_fails/comment_1_cf7ea9171f002c5793a882b42d33a77d._comment10
-rw-r--r--doc/bugs/adding_an_rsync.net_repo_give_an_gpg_error.mdwn22
-rw-r--r--doc/bugs/adding_an_rsync.net_repo_give_an_gpg_error/comment_1_f55cfc133be72ac10cae93c877c487df._comment21
-rw-r--r--doc/bugs/adding_an_rsync.net_repo_give_an_gpg_error/comment_2_24dd024ac4b21a82a781343b8fe3891e._comment11
-rw-r--r--doc/bugs/adding_existing_repo_as_remote_in_webapp_may_reset_its_group.mdwn16
-rw-r--r--doc/bugs/addurl_--relaxed_with_--file_doesn__39__t_actually_relax.mdwn26
-rw-r--r--doc/bugs/addurl_fails_on_the_internet_archive.mdwn65
-rw-r--r--doc/bugs/addurl_fails_on_the_internet_archive/comment_1_e227aa25eea0b41f1176037a601c5844._comment10
-rw-r--r--doc/bugs/addurl_fails_on_the_internet_archive/comment_2_6d4fd58f0caa1f75ee2dd3f0a909cd91._comment8
-rw-r--r--doc/bugs/addurl_file_doesn__39__t_work_with_spaces_in_filenames_and_--fast.mdwn29
-rw-r--r--doc/bugs/addurl_file_doesn__39__t_work_with_spaces_in_filenames_and_--fast/comment_1_eea9477ea1157cb88c8a07d8da5f0dba._comment10
-rw-r--r--doc/bugs/allows_repository_with_the_same_name_twice.mdwn24
-rw-r--r--doc/bugs/allows_repository_with_the_same_name_twice/comment_1_ba7801403e7138684704a3471c8bc4a6._comment12
-rw-r--r--doc/bugs/allows_repository_with_the_same_name_twice/comment_2_8c19a4ddedbe7ddb8bdcf84acac68cc8._comment14
-rw-r--r--doc/bugs/amd64_i386_standalone:_no_SKEIN.mdwn41
-rw-r--r--doc/bugs/amd64_i386_standalone:_no_SKEIN/comment_1_fcf7e1089b25993378df7574ccee8062._comment8
-rw-r--r--doc/bugs/amd64_standalone:_ld-linux-x86-64.so.2:_not_found.mdwn21
-rw-r--r--doc/bugs/amd64_standalone:_ld-linux-x86-64.so.2:_not_found/comment_1_5e40f32caf9c1177a5f7b9883cdcc6dd._comment8
-rw-r--r--doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit.mdwn28
-rw-r--r--doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_10_1d841ff0b0ffd814efed2449dc1f35f3._comment10
-rw-r--r--doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_10_cd101e0af45d8f463011fb0d04b3b822._comment9
-rw-r--r--doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_11_8595041cfe703d9bea49e792732dc15f._comment8
-rw-r--r--doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_1_8e7bc6965ea967a8d43240791a30c5bc._comment9
-rw-r--r--doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_2_891c1073f908b204651899d41599f944._comment8
-rw-r--r--doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_3_de02b8f1b5928fa1a7078c4aa2124bea._comment11
-rw-r--r--doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_6_506acc4275a81ed9e9b08e8a40fcf96a._comment9
-rw-r--r--doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_7_d38d6f40db4c9437764c7b2ddf36b5a9._comment10
-rw-r--r--doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_8_9bb23e9cbc77ecca4b1209b0f66bc2b0._comment8
-rw-r--r--doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_9_d1ce7fc251db076da61eed5bb9d71b9a._comment9
-rw-r--r--doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_9_feb71c1022ff65d82e66a3958a41dfb2._comment8
-rw-r--r--doc/bugs/android_4.3_install_failed_.mdwn20
-rw-r--r--doc/bugs/android_4.3_install_failed_/comment_1_82447f1e24d7e8df8048464d1b7df117._comment8
-rw-r--r--doc/bugs/android_4.3_install_failed_/comment_2_67ace7c454c7e962ca69e42178142e80._comment8
-rw-r--r--doc/bugs/android_4.3_install_failed_/comment_3_051e39129a38e439f24703385f503cf4._comment8
-rw-r--r--doc/bugs/android_autobuild_broken.mdwn4
-rw-r--r--doc/bugs/android_cannot_get_from_5.20131221.mdwn41
-rw-r--r--doc/bugs/android_cannot_get_from_5.20131221/comment_1_f8eeb67e58bf2a4658dcc32a9f275f19._comment8
-rw-r--r--doc/bugs/android_cannot_get_from_5.20131221/comment_2_eba841b1978c70a4c20a8d96c9f71172._comment36
-rw-r--r--doc/bugs/android_cannot_get_from_5.20131221/comment_3_4ba8208822c7f66e23037564b3501391._comment8
-rw-r--r--doc/bugs/annex-rsync-options_shell-split_carelessly.mdwn16
-rw-r--r--doc/bugs/annex-rsync-options_shell-split_carelessly/comment_1_2636e0d224317f2e6db94658d8a094c4._comment23
-rw-r--r--doc/bugs/annex-rsync-transport_ignored.mdwn30
-rw-r--r--doc/bugs/annex.autocommit_seems_ignored_for_new_files.mdwn39
-rw-r--r--doc/bugs/annex.numcopies_not_overriden_by_--numcopies_option.mdwn16
-rw-r--r--doc/bugs/annex_add_in_annex.mdwn6
-rw-r--r--doc/bugs/annex_get_fails:___34__No_such_file_or_directory__34__.mdwn68
-rw-r--r--doc/bugs/annex_get_fails_from_read-only_filesystem.mdwn27
-rw-r--r--doc/bugs/annex_get_fails_from_read-only_filesystem/comment_1_d8ab07429195c06ec4fae199ca9e0764._comment10
-rw-r--r--doc/bugs/annex_get_fails_from_read-only_filesystem/comment_2_03c16df9d6c14e1529c5dc8b5fc49691._comment8
-rw-r--r--doc/bugs/annex_get_fails_from_read-only_filesystem/comment_3_c505a9df0ef63bb7cac28af9502a953d._comment10
-rw-r--r--doc/bugs/annex_get_fails_from_read-only_filesystem/comment_4_2491fabe2eb7a14bfef0e388b4b9c4c7._comment10
-rw-r--r--doc/bugs/annex_get_fails_from_read-only_filesystem/comment_5_07f612d7059a9b561c48d63e471d5ed7._comment10
-rw-r--r--doc/bugs/annex_get_fails_from_read-only_filesystem/comment_6_c469f1fe8ae6981a038be7f8723a07b1._comment7
-rw-r--r--doc/bugs/annex_get_over_SSH_is_very_slow.mdwn33
-rw-r--r--doc/bugs/annex_seems_to_ignore_core.bare_setting.mdwn45
-rw-r--r--doc/bugs/annex_seems_to_ignore_core.bare_setting/comment_1_beb674205f06310f6a9060bea35fa3fe._comment11
-rw-r--r--doc/bugs/annex_seems_to_ignore_core.bare_setting/comment_2_bc5a4be517409f8da2f36299dc4cbbde._comment8
-rw-r--r--doc/bugs/annex_tries_to_start_old_binaray.mdwn45
-rw-r--r--doc/bugs/annex_tries_to_start_old_binaray/comment_1_209c36b737a48a6136eeb85d1f3d01b3._comment10
-rw-r--r--doc/bugs/another_build_error_in_assistant.mdwn79
-rw-r--r--doc/bugs/archiving_git_repositories.mdwn1
-rw-r--r--doc/bugs/archiving_git_repositories/comment_1_51f546a571303118446a9e0b3e6482c9._comment10
-rw-r--r--doc/bugs/aria2c_display_broken_in_git-annex.mdwn147
-rw-r--r--doc/bugs/aria2c_display_broken_in_git-annex/comment_1_770e1d657bba2a3f5782eac2e8bdca57._comment14
-rw-r--r--doc/bugs/aria2c_display_broken_in_git-annex/comment_2_2f26037c5a67f6f8928204ab0b7b7965._comment7
-rw-r--r--doc/bugs/assistant___40__OS_X_Lion__41___-___34__too_many_open_files__34___error.mdwn32
-rw-r--r--doc/bugs/assistant___40__OS_X_Lion__41___-___34__too_many_open_files__34___error/comment_1_9904c30a4c24a699d71e90ce5e9b89cf._comment8
-rw-r--r--doc/bugs/assistant_always_assumes_port_22__63__.mdwn39
-rw-r--r--doc/bugs/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address/comment_1_1650539846521ae11837e4ac73348af6._comment9
-rw-r--r--doc/bugs/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address/comment_2_b91415e4ee74eb12bc6e6faddd00af6e._comment12
-rw-r--r--doc/bugs/assistant_does_not_allow_adding_an_existing_repo.mdwn2
-rw-r--r--doc/bugs/assistant_does_not_always_use_repo_cost_info_when_queueing_downloads.mdwn2
-rw-r--r--doc/bugs/assistant_does_not_list_remote___39__origin__39__.mdwn26
-rw-r--r--doc/bugs/assistant_does_not_list_remote___39__origin__39__/comment_1_ffa008240c61b50396aa92f467731db6._comment12
-rw-r--r--doc/bugs/assistant_does_not_list_remote___39__origin__39__/comment_2_a53f80090bc2a0f32b8d8307cb24b563._comment8
-rw-r--r--doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add.mdwn46
-rw-r--r--doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_1_13b2f93b7d09c8fd6c22829a0dc6428b._comment10
-rw-r--r--doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_2_94e46bc0044b8a91a9fd51058825aa8f._comment60
-rw-r--r--doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_3_10a38bdbf31dd4071e4bc4ac746d9c56._comment11
-rw-r--r--doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_4_b8fdf502c7e80aece5a9544a2078c85c._comment36
-rw-r--r--doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_5_a2ff7668f2a0d549b362d7de97fac8a1._comment10
-rw-r--r--doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_6_60d72f34a6cfd1c081f74aa610f4305a._comment33
-rw-r--r--doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_7_53a73e662c9356b759fbfa1e5a3bd927._comment14
-rw-r--r--doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_8_10b65168b6a54d960427966d7e3d05f5._comment19
-rw-r--r--doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_9_b640e8fa6aafb041d66bbf8857a8fa3d._comment44
-rw-r--r--doc/bugs/assistant_doesn__39__t_sync_empty_directories.mdwn2
-rw-r--r--doc/bugs/assistant_doesn__39__t_sync_file_permissions.mdwn2
-rw-r--r--doc/bugs/assistant_doesn__39__t_sync_file_permissions/comment_6_13db3474113b157b7431eb1c835e5814._comment14
-rw-r--r--doc/bugs/assistant_eats_all_CPU.mdwn7
-rw-r--r--doc/bugs/assistant_eats_all_CPU/comment_23_48a4c8d9dcc6cec243c6072090f26b6d._comment12
-rw-r--r--doc/bugs/assistant_expensive_scan_unnecessarily_queues_files.mdwn65
-rw-r--r--doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_1_bc874e077009b81ab36a6d43d793030a._comment10
-rw-r--r--doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_2_a7e9d8ec500399dd6794e168f85e6a5c._comment40
-rw-r--r--doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_3_a0824e00f04f95c39823f29d6c76e7fe._comment10
-rw-r--r--doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual.mdwn24
-rw-r--r--doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_1_37acb3afafb1b4c4da7c778130cf3035._comment8
-rw-r--r--doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_2_9d58887ee0184663852bde83b8d497c7._comment10
-rw-r--r--doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_3_b70881c8026e30fd3ddc051bd01a888b._comment8
-rw-r--r--doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_4_43f756e2e6ff985c8e050da0e369d486._comment25
-rw-r--r--doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_5_eda947eb7f8c46b9a61d6430b5f9ebfd._comment25
-rw-r--r--doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files.mdwn56
-rw-r--r--doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_1_e3f545d9adc27a4e7340bf16177c4fe0._comment12
-rw-r--r--doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_2_1403076dbc47733607f0c8b2856e2381._comment37
-rw-r--r--doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_3_af83717bfb260bea6d52ff71c6b34743._comment8
-rw-r--r--doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_4_b4f811611d14e7392009c539fa6b8574._comment8
-rw-r--r--doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts.mdwn30
-rw-r--r--doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts/comment_1_91a62a2ce14a1027d2ac8b8e88df5f0c._comment12
-rw-r--r--doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts/comment_2_4982cd373eaaeee180be03c6e9fda7b1._comment10
-rw-r--r--doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts/comment_3_85d264e311acaa91dac0597ee8deda82._comment8
-rw-r--r--doc/bugs/assistant_locked_my_files.mdwn2
-rw-r--r--doc/bugs/assistant_on_windows_adding_remote_containing_linux_paths.mdwn23
-rw-r--r--doc/bugs/assistant_should_set_up_dedicated_ssh_keys_for_remotes_using_the_standalone_tarball.mdwn8
-rw-r--r--doc/bugs/assistant_windows_does_not_start.mdwn37
-rw-r--r--doc/bugs/assistant_windows_does_not_start/comment_1_007c2d489a521115d0e679d0130748fb._comment12
-rw-r--r--doc/bugs/authentication_to_rsync.net_fails.mdwn30
-rw-r--r--doc/bugs/authentication_to_rsync.net_fails/comment_1_9db65f89415c8d825f268afb75244998._comment10
-rw-r--r--doc/bugs/backend_version_upgrade_leaves_repo_unusable.mdwn72
-rw-r--r--doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa.mdwn22
-rw-r--r--doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_1_15cce6e6f455e83f4362a38c561bc973._comment17
-rw-r--r--doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_2_e9e1f38880a32610b3fbce475bffc3e4._comment12
-rw-r--r--doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_3_51da7f5881f65422328d341e5ab0d250._comment33
-rw-r--r--doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_4_ba384314c1e47ec4b72e1843e0500df9._comment10
-rw-r--r--doc/bugs/bad_merge_commit_deleting_all_files.mdwn78
-rw-r--r--doc/bugs/bad_merge_commit_deleting_all_files/comment_1_3503644244e39c65d531807769365f50._comment10
-rw-r--r--doc/bugs/bad_merge_commit_deleting_all_files/comment_2_9c4c950da0c07bf7c7edfcc7cc3b6011._comment8
-rw-r--r--doc/bugs/bad_merge_commit_deleting_all_files/comment_3_be42de12faf15562265ad6cf8964f5db._comment18
-rw-r--r--doc/bugs/bad_merge_commit_deleting_all_files/comment_4_d5cbd1440e4d6706eb14644a4ff1883b._comment8
-rw-r--r--doc/bugs/bad_merge_commit_deleting_all_files/comment_6_c532859deb682dff9e59037d08f66a51._comment8
-rw-r--r--doc/bugs/bad_merge_commit_deleting_all_files/comment_6_c946d2793fe0354151c447ddd0e59fd7._comment41
-rw-r--r--doc/bugs/bad_merge_commit_deleting_all_files/comment_7_24dea380fcf470e0ea488dece0410f37._comment8
-rw-r--r--doc/bugs/bare_git_repos.mdwn29
-rw-r--r--doc/bugs/bencode.mdwn32
-rw-r--r--doc/bugs/bencode/comment_1_24bc8c996eb32f344b3f091e14171a15._comment11
-rw-r--r--doc/bugs/bittorrent_special_url_double-encoding.mdwn177
-rw-r--r--doc/bugs/box.com.mdwn35
-rw-r--r--doc/bugs/box.com/comment_1_d904a08519424cb9f599b2154d1ef953._comment10
-rw-r--r--doc/bugs/bug_in_download_prebuilt_linux_tarball__44___and_constraints_issues_with_3.20121112.mdwn45
-rw-r--r--doc/bugs/build_is_broken_at_commit_cc0e5b7.mdwn13
-rw-r--r--doc/bugs/build_issue_with_latest_release_0.20110522-1-gde817ba.mdwn14
-rw-r--r--doc/bugs/build_problem_on_OSX.mdwn18
-rw-r--r--doc/bugs/building_on_lenny.mdwn80
-rw-r--r--doc/bugs/bup_initremote_failed_with_localhost_+_username.mdwn49
-rw-r--r--doc/bugs/bup_initremote_failed_with_localhost_+_username/comment_1_0e669c3039b089fa8a815d3ec11465d2._comment20
-rw-r--r--doc/bugs/cabal_build:___34__Could_not_find_module___96__Data.AssocList__39____34__.mdwn23
-rw-r--r--doc/bugs/cabal_build:___34__Could_not_find_module___96__Data.AssocList__39____34__/comment_1_0da9fd67c3cc01b316f95a1df4eb62ae._comment8
-rw-r--r--doc/bugs/cabal_configure_is_broken_on_OSX_builds.mdwn14
-rw-r--r--doc/bugs/cabal_install_fails:_Could_not_find_module___8216__Network.URI__8217__.mdwn216
-rw-r--r--doc/bugs/cabal_install_fails_to_install_manpage.mdwn43
-rw-r--r--doc/bugs/cabal_install_on_Ubuntu_12.04_fails_with_complaint_about_regex-base.mdwn34
-rw-r--r--doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository.mdwn208
-rw-r--r--doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository/comment_1_dd202a7764d9df998868d595a86ffb21._comment30
-rw-r--r--doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository/comment_2_ca065c82ac8e3215b581660f3e44f459._comment51
-rw-r--r--doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository/comment_3_927a01f9961c71bedb42c519a31b5fe5._comment14
-rw-r--r--doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode.mdwn23
-rw-r--r--doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode/comment_1_20c31a844d8351a99cf69e05d2836e0e._comment19
-rw-r--r--doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode/comment_2_f26e0f763f9027d9dfc08cd840ced153._comment10
-rw-r--r--doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain.mdwn21
-rw-r--r--doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain/comment_1_6537e928a0d6d5c41b55370f112f4afb._comment10
-rw-r--r--doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain/comment_2_b639ad750a4635d95f6ad16a1aa39a3e._comment8
-rw-r--r--doc/bugs/can__39__t_drop_unused_files_that_never_were_added.mdwn86
-rw-r--r--doc/bugs/can__39__t_run_the_assistant_from_the_command_line_anymore__63__.mdwn31
-rw-r--r--doc/bugs/can_not_add_ssh_remote_to_assistant_with___34__host:port__34___syntax.mdwn30
-rw-r--r--doc/bugs/can_not_add_ssh_remote_to_assistant_with___34__host:port__34___syntax/comment_1_397eb359c3f8ef30460a9556b6f55848._comment14
-rw-r--r--doc/bugs/cannot_add_file__44___get___34__user_error__34__.mdwn32
-rw-r--r--doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_1_14aa717c1befcbbf526f25ca2f0af825._comment14
-rw-r--r--doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_2_7f7ac59e7f3dce9d7a7d0c3379c2edcf._comment18
-rw-r--r--doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_3_5ebf03120b12edb3fbb8954546e7603e._comment8
-rw-r--r--doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_4_1ba6d2614778949520b47896fd98b598._comment8
-rw-r--r--doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_5_4a6e55861a63b350a02edb888b4da99b._comment21
-rw-r--r--doc/bugs/cannot_add_local_readonly_repo_through_the_webapp.mdwn98
-rw-r--r--doc/bugs/cannot_connect_to_xmpp_server.mdwn32
-rw-r--r--doc/bugs/cannot_connect_to_xmpp_server/comment_10_5072de8fcca9fe70bc235ea8c8ee2877._comment8
-rw-r--r--doc/bugs/cannot_connect_to_xmpp_server/comment_11_dabd74bba1f38b326a2d0c86d3027cd9._comment17
-rw-r--r--doc/bugs/cannot_connect_to_xmpp_server/comment_12_0245b426cc0ab64f8c167b8806b03f5d._comment10
-rw-r--r--doc/bugs/cannot_connect_to_xmpp_server/comment_1_307df11b5bcf289d7999e1e7f7c461c9._comment10
-rw-r--r--doc/bugs/cannot_connect_to_xmpp_server/comment_2_f24378cf30a7d32594da90749fabec3c._comment12
-rw-r--r--doc/bugs/cannot_connect_to_xmpp_server/comment_3_4b07093be844ac62b611cee1dfde5aa7._comment8
-rw-r--r--doc/bugs/cannot_connect_to_xmpp_server/comment_4_fe1ed152a485c4aebfa9b9f300101835._comment8
-rw-r--r--doc/bugs/cannot_connect_to_xmpp_server/comment_5_2d311f520aee04287df6bddfd8535734._comment28
-rw-r--r--doc/bugs/cannot_connect_to_xmpp_server/comment_6_d9f916f012184738446c5996ee9d2270._comment13
-rw-r--r--doc/bugs/cannot_connect_to_xmpp_server/comment_7_0b5f9350e2367301241c7668a15815ef._comment8
-rw-r--r--doc/bugs/cannot_connect_to_xmpp_server/comment_8_f00b6ae154004e405f0bd23b7359962e._comment8
-rw-r--r--doc/bugs/cannot_connect_to_xmpp_server/comment_9_41b86468013da15f46be29da520afa10._comment8
-rw-r--r--doc/bugs/cannot_determine_uuid_for_origin.mdwn135
-rw-r--r--doc/bugs/case_sensitivity_on_FAT.mdwn49
-rw-r--r--doc/bugs/check_for_curl_in_configure.hs.mdwn92
-rw-r--r--doc/bugs/clicking_back_in_the_web_browser_crashes.mdwn23
-rw-r--r--doc/bugs/clicking_back_in_the_web_browser_crashes/comment_1_c962218657a28494ff837a471d71b43f._comment8
-rw-r--r--doc/bugs/clicking_back_in_the_web_browser_crashes/comment_2_643b2c99ecfe851c576a023ce4385dbb._comment10
-rw-r--r--doc/bugs/clicking_back_in_the_web_browser_crashes/comment_3_6e85c50439da81212f4239c74947b75e._comment12
-rw-r--r--doc/bugs/com.branchable.git-annex.assistant.plist_is_invalid.mdwn15
-rw-r--r--doc/bugs/commit_f20a40f_breaks_on_OSX_as_mntent.h_doesn__39__t_exist.mdwn8
-rw-r--r--doc/bugs/configurable_path_to_git-annex-shell/comment_5_178452f3c2671830d1a9f5e1d11accb4._comment8
-rw-r--r--doc/bugs/configurable_path_to_git-annex-shell/comment_5_77b2269936f740cacbc955b95f9da51d._comment8
-rw-r--r--doc/bugs/configure_mistakes_hashalot_bins_for_sha__63____63____63__sum_and_builds_a_broken_git-annex_executable.mdwn57
-rw-r--r--doc/bugs/configure_script_should_detect_uuidgen_instead_of_just_uuid.mdwn6
-rw-r--r--doc/bugs/confirmed.mdwn5
-rw-r--r--doc/bugs/conflicting_haskell_packages.mdwn17
-rw-r--r--doc/bugs/conflicting_haskell_packages/comment_1_e552a6cc6d7d1882e14130edfc2d6b3b._comment24
-rw-r--r--doc/bugs/conq:_invalid_command_syntax.mdwn30
-rw-r--r--doc/bugs/conq:_invalid_command_syntax/comment_1_f33b83025ce974e496f83f248275a66a._comment10
-rw-r--r--doc/bugs/conq:_invalid_command_syntax/comment_2_195106ca8dedad5f4d755f625e38e8af._comment9
-rw-r--r--doc/bugs/conq:_invalid_command_syntax/comment_3_55af43e2f43a4c373f7a0a33678d0b1c._comment15
-rw-r--r--doc/bugs/copy_doesn__39__t_scale.mdwn38
-rw-r--r--doc/bugs/copy_doesn__39__t_scale/comment_1_7c12499c9ac28a9883c029f8c659eb57._comment10
-rw-r--r--doc/bugs/copy_doesn__39__t_scale/comment_2_f85d8023cdbc203bb439644cf7245d4e._comment15
-rw-r--r--doc/bugs/copy_doesn__39__t_scale/comment_3_4592765c3d77bb5664b8d16867e9d79c._comment11
-rw-r--r--doc/bugs/copy_fast_confusing_with_broken_locationlog.mdwn6
-rw-r--r--doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_10_435f87d54052f264096a8f23e99eae06._comment8
-rw-r--r--doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_11_9be0aef403a002c1706d17deee45763c._comment24
-rw-r--r--doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_12_26d60661196f63fd01ee4fbb6e2340e7._comment11
-rw-r--r--doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_13_ead55b915d3b92a62549b2957ad211c8._comment35
-rw-r--r--doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_14_191de89d3988083d9cf001799818ff4a._comment10
-rw-r--r--doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_15_b3e3b338ccfa0a32510c78ba1b1bb617._comment8
-rw-r--r--doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_16_04a9f4468c3246c8eff3dbe21dd90101._comment8
-rw-r--r--doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_1_6a41bf7e2db83db3a01722b516fb6886._comment18
-rw-r--r--doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_2_9f5f1dbffb2dd24f4fcf8c2027bf0384._comment8
-rw-r--r--doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_3_b596b5cfd3377e58dbbb5d509d026b90._comment14
-rw-r--r--doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_4_d7112c315fb016a8a399e24e9b6461d8._comment12
-rw-r--r--doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_5_4ea29a6f8152eddf806c536de33ef162._comment14
-rw-r--r--doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_6_0d85f114a103bd6532a3b3b24466012e._comment8
-rw-r--r--doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_7_d38d5bee6d360b0ea852f39e3a7b1bc6._comment12
-rw-r--r--doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_8_29c3de4bf5fbd990b230c443c0303cbe._comment10
-rw-r--r--doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_9_2cee4f6bd6db7518fd61453c595162c6._comment8
-rw-r--r--doc/bugs/copy_to_webdav_sometimes_doesn__39__t_work.mdwn74
-rw-r--r--doc/bugs/copy_to_webdav_sometimes_doesn__39__t_work/comment_1_77629f620b28ac62364de44b41fa539d._comment8
-rw-r--r--doc/bugs/cotinually_prompting_for_gpg_passphrase.mdwn77
-rw-r--r--doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been.mdwn2
-rw-r--r--doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been/comment_5_64bf56f2b0ff206c3caf5cadebfd0cda._comment20
-rw-r--r--doc/bugs/cross_platform_permissions_woes.mdwn36
-rw-r--r--doc/bugs/cross_platform_permissions_woes/comment_1_7f01104de38a6a319a8f36aa1dc8b4b3._comment14
-rw-r--r--doc/bugs/cross_platform_permissions_woes/comment_2_0a34e11b466fad287325425e76487fa1._comment73
-rw-r--r--doc/bugs/cross_platform_permissions_woes/comment_3_278f91b4bc4c32717ab1c39c2abf9305._comment8
-rw-r--r--doc/bugs/cross_platform_permissions_woes/comment_4_eb6a271cb63c71341469c9ff89dc0eb9._comment9
-rw-r--r--doc/bugs/cyclic_drop.mdwn104
-rw-r--r--doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos.mdwn199
-rw-r--r--doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_1_294c33af08649256908a97894f93c05d._comment10
-rw-r--r--doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_2_02a2b69adbb04b557146e713b70b34d2._comment14
-rw-r--r--doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_3_d296ef26fc90f4e3166bba6d2de0a1ee._comment8
-rw-r--r--doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_4_33ba2c890c962a71ae9fadc417359f8e._comment8
-rw-r--r--doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_5_39eb0bb96fd271bd0de4a3a40814ae1b._comment11
-rw-r--r--doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_6_d80c4b631bdf58901a06f29a2c5682e2._comment8
-rw-r--r--doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_.mdwn19
-rw-r--r--doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_1_eb6db7f6a156a065e2724c2de5fc4366._comment10
-rw-r--r--doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_2_59a96cade9e4881767562a139fc7fb4b._comment40
-rw-r--r--doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_3_bf9d2562d66f0f6a9478ac178606cf4e._comment12
-rw-r--r--doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_4_ad0dbdc448fff2e126ffec9aac6d7463._comment23
-rw-r--r--doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_5_e828585e56b10710598143483ce362b6._comment12
-rw-r--r--doc/bugs/detected_bad_bare_repository_with___60__SCREECH__62___files.mdwn73
-rw-r--r--doc/bugs/detected_bad_bare_repository_with___60__SCREECH__62___files/comment_1_523b80ad81ad49bddfb8855d12d5561d._comment10
-rw-r--r--doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted.mdwn45
-rw-r--r--doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted/comment_1_770e6ed8556fa6b259f517d5c398271f._comment16
-rw-r--r--doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted/comment_2_2f3fb399f976d96aa66310f11365207c._comment10
-rw-r--r--doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted/comment_3_2acff7b667e8618251075031cbef6b9a._comment8
-rw-r--r--doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted/comment_4_c3a4a1ce24fcbe1087041850f490a58a._comment8
-rw-r--r--doc/bugs/direct_mode_fails__44___left_in_an_inconsistent_state.mdwn60
-rw-r--r--doc/bugs/direct_mode_fails__44___left_in_an_inconsistent_state/comment_1_be1302a006a66e501fe543f3af191fea._comment22
-rw-r--r--doc/bugs/direct_mode_merge_interrupt.mdwn54
-rw-r--r--doc/bugs/direct_mode_renames.mdwn15
-rw-r--r--doc/bugs/direct_mode_renames/comment_1_f18c335e0d6f4259d2470935ef391cb8._comment8
-rw-r--r--doc/bugs/direct_mode_should_refuse_to_merge_with_illegal_filenames.mdwn38
-rw-r--r--doc/bugs/direct_mode_sync_should_avoid_git_commit.mdwn5
-rw-r--r--doc/bugs/direct_mode_sync_should_avoid_git_commit/comment_1_d286800081f019651cd40355b7d5518a._comment27
-rw-r--r--doc/bugs/direct_mode_sync_should_avoid_git_commit/comment_2_4e23201d1d1d549f72eec75987601a73._comment13
-rw-r--r--doc/bugs/directory_remote_+_shared_encryption_+_chunk_size___61___lost_files__63__.mdwn51
-rw-r--r--doc/bugs/directory_remote_+_shared_encryption_+_chunk_size___61___lost_files__63__/comment_1_69dfbf566c75396cdaaf5ad70f1a94a8._comment19
-rw-r--r--doc/bugs/directory_remote_+_shared_encryption_+_chunk_size___61___lost_files__63__/comment_2_8d09cc0e06548c4ebde7956edd1b5d85._comment8
-rw-r--r--doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_1_bcac9fd7b3f4a2ac28bee59bae674fa0._comment79
-rw-r--r--doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_2_c9088060fb9133b66951f1a3075981e8._comment18
-rw-r--r--doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_3_5bf34466187cfc9b34bd3ca8c89a07c6._comment20
-rw-r--r--doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_4_d6201f2d86d5b44051a7fd7a8c9de583._comment8
-rw-r--r--doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_5_61c5f0889f30a68ac3b57c4ea564ee0e._comment8
-rw-r--r--doc/bugs/dotdot_problem.mdwn4
-rw-r--r--doc/bugs/drop_fails_to_see_copies_that_whereis_sees.mdwn69
-rw-r--r--doc/bugs/drop_fails_to_see_copies_that_whereis_sees/comment_1_f5a9d99d90daf5eba4773d361fa1807a._comment14
-rw-r--r--doc/bugs/drop_fails_to_see_copies_that_whereis_sees/comment_2_040aa454cd8acd2857ef36884465576f._comment16
-rw-r--r--doc/bugs/drop_fails_to_see_copies_that_whereis_sees/comment_3_f5d8faab325ee26800ecad5aba49b54b._comment10
-rw-r--r--doc/bugs/dropping_and_re-adding_from_web_remotes_doesn__39__t_work.mdwn139
-rw-r--r--doc/bugs/dropunused_doesn__39__t_handle_double_spaces_in_filename.mdwn87
-rw-r--r--doc/bugs/dropunused_doesn__39__t_work_in_my_case__63__.mdwn70
-rw-r--r--doc/bugs/enableremote_broken_with_direct_mode__63__.mdwn41
-rw-r--r--doc/bugs/enableremote_broken_with_direct_mode__63__/comment_1_a2e61f5de7a28498de0c2d5e3d51eab4._comment8
-rw-r--r--doc/bugs/encrypted_S3_stalls.mdwn9
-rw-r--r--doc/bugs/encryption_given_a_gpg_keyid_still_uses_symmetric_encryption.mdwn46
-rw-r--r--doc/bugs/encryption_given_a_gpg_keyid_still_uses_symmetric_encryption/comment_1_2f4ec4b7b92a0f0a0c4c0758da4a05a5._comment13
-rw-r--r--doc/bugs/encryption_given_a_gpg_keyid_still_uses_symmetric_encryption/comment_2_7c0aeae6b1b2b0338735b0231c5db7d4._comment16
-rw-r--r--doc/bugs/encryption_key_is_surprising.mdwn24
-rw-r--r--doc/bugs/encryption_key_is_surprising/comment_1_5b172830ac31d51a1687bc8b1db489f9._comment10
-rw-r--r--doc/bugs/encryption_key_is_surprising/comment_2_5b7e6bb36c3333dfd71808e8b4544746._comment8
-rw-r--r--doc/bugs/encryption_key_is_surprising/comment_4_8ec86b8c35bce15337a143e275961cd5._comment8
-rw-r--r--doc/bugs/encryption_key_is_surprising/comment_4_c5e49b3a0eceabe6d14f5226d7ba4c7a._comment8
-rw-r--r--doc/bugs/encryption_key_is_surprising/comment_5_cd7cbf0c0ee9cafec344dfbf1acd9590._comment8
-rw-r--r--doc/bugs/encryption_key_is_surprising/comment_6_01381524114d885961704acc3f172536._comment8
-rw-r--r--doc/bugs/encryption_key_is_surprising/comment_7_c1eb59e1c5f583dcef7cea17623a2435._comment8
-rw-r--r--doc/bugs/error_building_git-annex_3.20120624_using_cabal.mdwn159
-rw-r--r--doc/bugs/error_compiling_network-info_when_compiling_git-annex.mdwn12
-rw-r--r--doc/bugs/error_compiling_network-info_when_compiling_git-annex/comment_1_1b5d236567123300924427624e0e48c8._comment53
-rw-r--r--doc/bugs/error_compiling_network-info_when_compiling_git-annex/comment_2_4e5ffd0d5b965b9429b937610b7998d5._comment8
-rw-r--r--doc/bugs/error_propigation.mdwn3
-rw-r--r--doc/bugs/error_when_using_repositories_with_non-ASCII_characters.mdwn62
-rw-r--r--doc/bugs/error_when_using_repositories_with_non-ASCII_characters/comment_1_38cc2d2ed907649df085de8ad83cb9dd._comment14
-rw-r--r--doc/bugs/error_with_file_names_starting_with_dash.mdwn15
-rw-r--r--doc/bugs/failed_sync_with_direct_mode_repo.mdwn9
-rw-r--r--doc/bugs/failed_sync_with_direct_mode_repo/comment_1_fb4026cc81eb0ec1e656e4a81ffacc4f._comment13
-rw-r--r--doc/bugs/fails_to_get_content_from_bare_repo_on_windows.mdwn143
-rw-r--r--doc/bugs/fails_to_get_content_from_bare_repo_on_windows/comment_1_31cf32ef2d597573ed3c5f06a1b40a1c._comment10
-rw-r--r--doc/bugs/fails_to_get_content_from_bare_repo_on_windows/comment_2_7d64382c66555ec9c5531840aa19e809._comment10
-rw-r--r--doc/bugs/fails_to_get_content_from_bare_repo_on_windows/comment_3_850a917a3d1ae50ba8f0e81a64168268._comment10
-rw-r--r--doc/bugs/fails_to_get_content_from_bare_repo_on_windows/comment_4_7c4660ea44178cba7f7a4cc5f1bebae4._comment8
-rw-r--r--doc/bugs/fails_to_handle_lot_of_files.mdwn445
-rw-r--r--doc/bugs/fails_to_handle_lot_of_files/comment_1_09d8e4e66d8273fab611bd29e82dc7fc._comment8
-rw-r--r--doc/bugs/fails_to_handle_lot_of_files/comment_2_fd2ec05f4b5a7a6ae6bd9f5dbc3156de._comment8
-rw-r--r--doc/bugs/fatal:_Cannot_handle_files_this_big.mdwn98
-rw-r--r--doc/bugs/fatal:_Cannot_handle_files_this_big/comment_1_e4f03a86a7adc6c5421d1e70c37659e0._comment17
-rw-r--r--doc/bugs/fatal:_empty_ident_name.mdwn51
-rw-r--r--doc/bugs/fatal:_empty_ident_name/comment_1_ceae87308fb75a1f79c7c8d63ec47226._comment8
-rw-r--r--doc/bugs/fatal:_empty_ident_name/comment_2_68832ee3e0e7244ce62bccabe2e52630._comment25
-rw-r--r--doc/bugs/fatal:_empty_ident_name/comment_3_ed31ad316747343d7730e4c2d7dacd24._comment10
-rw-r--r--doc/bugs/fatal:_empty_ident_name/comment_4_b812d6f30e8a866bce7260a9ee3218e3._comment13
-rw-r--r--doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__.mdwn52
-rw-r--r--doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__/comment_1_8a4045634bffc29c8147056096b7089d._comment13
-rw-r--r--doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__/comment_2_a1539aaec74074b4667ac27cfcfcccd6._comment16
-rw-r--r--doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__/comment_3_d252f39ddb9c9c14784c85a8b850a4ec._comment10
-rw-r--r--doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__/comment_4_eb07c84dc0b15b68c99d0ef4144f82f5._comment10
-rw-r--r--doc/bugs/feature_request:_addhash.mdwn29
-rw-r--r--doc/bugs/feature_request:_addhash/comment_1_064e963adb6834813380fd836bb58566._comment8
-rw-r--r--doc/bugs/feature_request:_addhash/comment_2_7b712786c580dd1ca24479664c31eed6._comment8
-rw-r--r--doc/bugs/file_access__47__locking_issues_with_the_assitant.mdwn54
-rw-r--r--doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_10_fadf06f5ab34e36ab130536ec55afc8e._comment12
-rw-r--r--doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_11_4a337f7b1140c45e5dd660b40202f696._comment10
-rw-r--r--doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_1_05e1398e78218ced9c2da6a2510949e8._comment21
-rw-r--r--doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_2_9226f0adf091154c0d8a08b340b71869._comment8
-rw-r--r--doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_3_44d3e2096b7d45a1062222bee83a346d._comment8
-rw-r--r--doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_4_f2e1d188b7b2d2daf0d832c59a68583e._comment8
-rw-r--r--doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_5_998fe58994ecf855310e4b8e6cce9e18._comment8
-rw-r--r--doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_6_4ce243cb0ea8ff810a4949a5320e4afc._comment13
-rw-r--r--doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_7_c713f6316d889c8fc52326f21375c1c4._comment8
-rw-r--r--doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_8_6dd23bab7983b8b1f938dd4f21a16f5a._comment8
-rw-r--r--doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_9_961c8f968eff0b39a85b607ee3f7630d._comment16
-rw-r--r--doc/bugs/file_in_manual_mode_repository_is_dropped_when_it_is_copied_to_another_manual_mode_repository.mdwn35
-rw-r--r--doc/bugs/file_modification_times.mdwn13
-rw-r--r--doc/bugs/file_permissions_on___126____47__.ssh__47__config___40__windows__41__.mdwn20
-rw-r--r--doc/bugs/file_permissions_on___126____47__.ssh__47__config___40__windows__41__/comment_1_a04b71f4f81c477d18f14d8dfe8b378f._comment8
-rw-r--r--doc/bugs/file_permissions_on___126____47__.ssh__47__config___40__windows__41__/comment_2_0dbc908984b4b5bcc1283db807e058cb._comment10
-rw-r--r--doc/bugs/file_permissions_on___126____47__.ssh__47__config___40__windows__41__/comment_3_ff6cd2bb007d41284a09e470e060c32d._comment8
-rw-r--r--doc/bugs/files_lost_during_upgrade.mdwn2191
-rw-r--r--doc/bugs/files_lost_during_upgrade/comment_1_3f779c4d0c9fb27532b2981bd3ad4eee._comment22
-rw-r--r--doc/bugs/files_lost_during_upgrade/comment_2_80ba8c217e83c9d44a9dc52f4028719d._comment11
-rw-r--r--doc/bugs/fix_for_makefile_to_check_if_OS_is_linux_or_not___40__relates_to_the_new_inotify_flag__41__.mdwn36
-rw-r--r--doc/bugs/flooding_me_with_ssh_password_prompts.mdwn42
-rw-r--r--doc/bugs/flooding_me_with_ssh_password_prompts/comment_1_dba769cf0fca540f50f5e4b732a7e353._comment14
-rw-r--r--doc/bugs/flooding_me_with_ssh_password_prompts/comment_2_4a283ef50351e8c604a1f87aaaee1bb0._comment7
-rw-r--r--doc/bugs/forget_corrupts_non-ascii_chars.mdwn78
-rw-r--r--doc/bugs/forget_corrupts_non-ascii_chars/comment_1_fc8a4a93be2c234567836a4acee90957._comment22
-rw-r--r--doc/bugs/forget_corrupts_non-ascii_chars/comment_2_31f9362619dee0b8ebae80694ae1b2d0._comment8
-rw-r--r--doc/bugs/forget_corrupts_non-ascii_chars/comment_3_6310ae21036582688881f1890a5c4643._comment8
-rw-r--r--doc/bugs/forwarded.mdwn2
-rw-r--r--doc/bugs/free_space_checking.mdwn21
-rw-r--r--doc/bugs/free_space_checking/comment_1_a868e805be43c5a7c19c41f1af8e41e6._comment10
-rw-r--r--doc/bugs/free_space_checking/comment_2_8a65f6d3dcf5baa3f7f2dbe1346e2615._comment8
-rw-r--r--doc/bugs/free_space_checking/comment_3_0fc6ff79a357b1619d13018ccacc7c10._comment8
-rw-r--r--doc/bugs/fsck__47__fix_should_check__47__fix_the_permissions_of_.git__47__annex.mdwn8
-rw-r--r--doc/bugs/fsck_claims_failed_checksum_when_less_copies_than_required_are_found.mdwn57
-rw-r--r--doc/bugs/fsck_of_special_remotes_incorrectly_reports_ok.mdwn36
-rw-r--r--doc/bugs/fsck_of_special_remotes_incorrectly_reports_ok/comment_1_b76598aebcaccf1e1065dc6372a333ab._comment26
-rw-r--r--doc/bugs/fsck_output.mdwn46
-rw-r--r--doc/bugs/fsck_should_double-check_when_a_content-check_fails.mdwn3
-rw-r--r--doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_1_03af24b70adbcd9f4b94d009f6b71d0a._comment13
-rw-r--r--doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_2_41214a7d18c66b694645248d6ebeadbf._comment25
-rw-r--r--doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_3_e7ddd77ea35994f2051f840e9b4c7e0c._comment11
-rw-r--r--doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_4_36a70d5a378983a76fcdbb7fba044044._comment32
-rw-r--r--doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_5_899c4afbc988d81984c5c3397285bb01._comment12
-rw-r--r--doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_6_dbff51d00c5645eb1832aa4644889c5e._comment10
-rw-r--r--doc/bugs/fsck_thinks_file_content_is_bad_when_it_isn__39__t.mdwn35
-rw-r--r--doc/bugs/fsck_thinks_file_content_is_bad_when_it_isn__39__t/comment_1_cafb58eca97a0a66110ac39b169d8de3._comment8
-rw-r--r--doc/bugs/gcrypt_initremote_pushes_git-annex_but_not_master.mdwn19
-rw-r--r--doc/bugs/getEffectiveUserID_not_supported_on_Windows.mdwn28
-rw-r--r--doc/bugs/get_failed__44___but_remote_has_the_file.mdwn40
-rw-r--r--doc/bugs/get_failed__44___but_remote_has_the_file/comment_1_55c8b73ce05dfca11a393bb296b99b9a._comment10
-rw-r--r--doc/bugs/get_failed__44___but_remote_has_the_file/comment_2_474c67a421dca4c245e7bfe495d3f6d3._comment18
-rw-r--r--doc/bugs/get_failed__44___but_remote_has_the_file/comment_3_845e8a23d63fb0b071c63ee736697d26._comment20
-rw-r--r--doc/bugs/get_failed__44___but_remote_has_the_file/comment_4_7dec21cb67e7f4dbdb49da97f2443e8f._comment35
-rw-r--r--doc/bugs/get_fails_for_file:__47____47___web_remotes_if_the_file_is_empty.mdwn26
-rw-r--r--doc/bugs/get_from_bup-remote_with_pubkey_failing.mdwn93
-rw-r--r--doc/bugs/get_from_glacier_fails_too_early.mdwn72
-rw-r--r--doc/bugs/get_from_glacier_fails_too_early/comment_1_5a4e37fef629e07dce6b83ae311d1b03._comment14
-rw-r--r--doc/bugs/get_from_glacier_fails_too_early/comment_2_da065d367d0a3c91e4957f588f36dc67._comment9
-rw-r--r--doc/bugs/get_from_glacier_fails_too_early/comment_3_1b49cd66a612bb46da5b73c83ab14688._comment11
-rw-r--r--doc/bugs/get_from_glacier_fails_too_early/comment_4_a20b46a5e9c1c72a484962f3539d3b3e._comment7
-rw-r--r--doc/bugs/get_from_glacier_fails_too_early/comment_5_488bb44796e6a4e16f7bfc1f229233e7._comment8
-rw-r--r--doc/bugs/get_from_glacier_fails_too_early/comment_6_9c8f262b3d8b37f2e68108337acbd303._comment48
-rw-r--r--doc/bugs/get_from_glacier_fails_too_early/comment_7_c96b71759fe0d2af450e321ca57edb46._comment12
-rw-r--r--doc/bugs/get_from_glacier_fails_too_early/comment_8_1267236ae339d1affd46edb5cf5f4ac5._comment8
-rw-r--r--doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799.mdwn75
-rw-r--r--doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_1_1c19e716069911f17bbebd196d9e4b61._comment10
-rw-r--r--doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_2_a4d66f29d257044e548313e014ca3dc3._comment66
-rw-r--r--doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_3_f5f1081eb18143383b2fb1f57d8640f5._comment38
-rw-r--r--doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_4_b1f818b85c3540591c48e7ba8560d070._comment10
-rw-r--r--doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_5_67406dd8d9bd4944202353508468c907._comment13
-rw-r--r--doc/bugs/git-annex-shell:_user_error___40__unrecognized_option___96__--uuid__39__.mdwn53
-rw-r--r--doc/bugs/git-annex-shell:_user_error___40__unrecognized_option___96__--uuid__39__/comment_1_13510e954e36484e196e7395a3a9bf1f._comment10
-rw-r--r--doc/bugs/git-annex-shell:_user_error___40__unrecognized_option___96__--uuid__39__/comment_2_7edc478a76983a3b3c68d01f24dce613._comment9
-rw-r--r--doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option.mdwn37
-rw-r--r--doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option/comment_1_8cda861c11ef2fff3442e5a0df741939._comment12
-rw-r--r--doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option/comment_2_15e06f6db9a14a8217dea25e24ddc23a._comment12
-rw-r--r--doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option/comment_3_d36045e2b466882108c5bf09580755fa._comment8
-rw-r--r--doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git.mdwn50
-rw-r--r--doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git/comment_1_73924adc1c3c0dca5adce9a5e1740e48._comment10
-rw-r--r--doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git/comment_2_81c2896c9dfe5d96ad5a8f40cb312790._comment10
-rw-r--r--doc/bugs/git-annex:_Argument_list_too_long.mdwn40
-rw-r--r--doc/bugs/git-annex:_Argument_list_too_long/comment_1_3f83ea525436b2379ab29a0f860c4669._comment8
-rw-r--r--doc/bugs/git-annex:_Argument_list_too_long/comment_2_b417c94169378ef7d0d278ebae517fa1._comment8
-rw-r--r--doc/bugs/git-annex:_Argument_list_too_long/comment_3_fa925cca216cb810ad80482b19fc6053._comment8
-rw-r--r--doc/bugs/git-annex:_Argument_list_too_long/comment_4_8bd2996107b2d272c32810658e07e715._comment8
-rw-r--r--doc/bugs/git-annex:_Argument_list_too_long/comment_5_378de7d7503a64611eab62f2f5cffef3._comment15
-rw-r--r--doc/bugs/git-annex:_Argument_list_too_long/comment_6_a94e17151348d02999442dd1219babfb._comment10
-rw-r--r--doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__.mdwn34
-rw-r--r--doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__/comment_1_f1a7352b04f395e06e0094c1f51b6fff._comment12
-rw-r--r--doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__/comment_2_c1890067079cd99667f31cbb4d2e4545._comment8
-rw-r--r--doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__/comment_3_213c96085c60c8e52cd803df07240158._comment13
-rw-r--r--doc/bugs/git-annex:_Not_in_a_git_repository._.mdwn22
-rw-r--r--doc/bugs/git-annex:_Not_in_a_git_repository._/comment_1_e10363a912953a646b87c824d1c6e5d4._comment10
-rw-r--r--doc/bugs/git-annex:_Not_in_a_git_repository._/comment_2_9e96063a664b2be8a36d7940e7632d3f._comment8
-rw-r--r--doc/bugs/git-annex:_Not_in_a_git_repository._/comment_3_8c9bd76b0e1200723ec13fbef943a2cc._comment10
-rw-r--r--doc/bugs/git-annex:_Not_in_a_git_repository._/comment_4_8c49979b8a815f0d6f9de39ee9a88730._comment8
-rw-r--r--doc/bugs/git-annex:_WebDAV_failed_to_write_file:_TlsNotSupported:_user_error.mdwn35
-rw-r--r--doc/bugs/git-annex:_WebDAV_failed_to_write_file:_TlsNotSupported:_user_error/comment_1_2c54c57f456e4570666fd7a5731dcd27._comment11
-rw-r--r--doc/bugs/git-annex:_WebDAV_failed_to_write_file:_TlsNotSupported:_user_error/comment_2_c9a9f070b2eaff9f68f603ca1defec81._comment8
-rw-r--r--doc/bugs/git-annex:_WebDAV_failed_to_write_file:_TlsNotSupported:_user_error/comment_3_62ff37a8429cfb3577d4250c701811d0._comment8
-rw-r--r--doc/bugs/git-annex:___60__socket:_16__62__:_hPutBuf:_resource_vanished___40__Broken_pipe__41__.mdwn4
-rw-r--r--doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__.mdwn33
-rw-r--r--doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_1_b7a327b668e2ca053713bec1dc4e6314._comment14
-rw-r--r--doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_2_8864149bd87f7956143109ab591afe4f._comment19
-rw-r--r--doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_3_1229d5ea8799f0a744b3f03f620df1ec._comment12
-rw-r--r--doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_4_975d2631faa17d257a6fce40e24a6e3b._comment14
-rw-r--r--doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_5_013be36151fc710ec30756b0f68f43dc._comment12
-rw-r--r--doc/bugs/git-annex:_status:_1_failed.mdwn25
-rw-r--r--doc/bugs/git-annex:_status:_1_failed/comment_10_7cd9de88e55633fc75460f4fe0400f09._comment8
-rw-r--r--doc/bugs/git-annex:_status:_1_failed/comment_11_504a944aab34155046f2fd82c2878f3e._comment18
-rw-r--r--doc/bugs/git-annex:_status:_1_failed/comment_1_c235cc83c75474e6393e08d2d94b119d._comment10
-rw-r--r--doc/bugs/git-annex:_status:_1_failed/comment_2_932f6aaa712298a47868002872e16310._comment10
-rw-r--r--doc/bugs/git-annex:_status:_1_failed/comment_3_4bf55320439de152a65e2f21d4a0604b._comment14
-rw-r--r--doc/bugs/git-annex:_status:_1_failed/comment_4_cb2cfb798c6171f77eb7c4c4061c0f0c._comment8
-rw-r--r--doc/bugs/git-annex:_status:_1_failed/comment_5_05c84dde377298adfd3fc20749b3108f._comment10
-rw-r--r--doc/bugs/git-annex:_status:_1_failed/comment_6_bb5141e29c665bc0bb82611ea27d4be8._comment11
-rw-r--r--doc/bugs/git-annex:_status:_1_failed/comment_7_5fd39168c9e1bf43909ee0ab3c75c40c._comment35
-rw-r--r--doc/bugs/git-annex:_status:_1_failed/comment_8_e493f6bddb0bfcd9478d5f4d9fc170e0._comment8
-rw-r--r--doc/bugs/git-annex:_status:_1_failed/comment_9_573377d444aee0895b231082bc6839a4._comment8
-rw-r--r--doc/bugs/git-annex_3.20130216.1_tests_are_broken.mdwn43
-rw-r--r--doc/bugs/git-annex___38___rsync_can__39__t_copy_files_with___39__:__39___in_their_names.mdwn38
-rw-r--r--doc/bugs/git-annex_add_hangs_indefinitely_on_all_files.mdwn32
-rw-r--r--doc/bugs/git-annex_add_hangs_indefinitely_on_all_files/comment_1_f787155da9a4d92c41546c35f3bd6a08._comment12
-rw-r--r--doc/bugs/git-annex_add_hangs_indefinitely_on_all_files/comment_2_66ad95d98c12b4b26e06e3fe28f0ed01._comment10
-rw-r--r--doc/bugs/git-annex_add_should_repack_as_it_goes.mdwn32
-rw-r--r--doc/bugs/git-annex_add_should_repack_as_it_goes/comment_1_dbcaa0be4cd764128fb7263a95f73a32._comment22
-rw-r--r--doc/bugs/git-annex_add_should_repack_as_it_goes/comment_2_6a27551c4fb7f62ed9f627134c755d01._comment14
-rw-r--r--doc/bugs/git-annex_add_should_repack_as_it_goes/comment_3_ff8b589fbcf25c98abd1c58830074650._comment8
-rw-r--r--doc/bugs/git-annex_annex_repo_not_found.mdwn23
-rw-r--r--doc/bugs/git-annex_assistant_not_working_with_nested_git_repos.mdwn22
-rw-r--r--doc/bugs/git-annex_auto_upgrade_is_redundant.mdwn34
-rw-r--r--doc/bugs/git-annex_auto_upgrade_is_redundant/comment_1_67cdbedc70695d1e4be81e59ab9b87bd._comment9
-rw-r--r--doc/bugs/git-annex_auto_upgrade_is_redundant/comment_2_3a8041ce622b9288261fab57ecb87c28._comment8
-rw-r--r--doc/bugs/git-annex_auto_upgrade_is_redundant/comment_3_2597b2008557b80f4b71630c5c4a4241._comment8
-rw-r--r--doc/bugs/git-annex_auto_upgrade_is_redundant/comment_4_5dc46103994f064f5b9e120a16317dbd._comment10
-rw-r--r--doc/bugs/git-annex_auto_upgrade_is_redundant/comment_5_e26cf6fa6358c8d53c0b16206d0d0ca6._comment14
-rw-r--r--doc/bugs/git-annex_auto_upgrade_is_redundant/comment_6_c2c7c071fc5b1d3a55254d01a287c9f8._comment8
-rw-r--r--doc/bugs/git-annex_auto_upgrade_is_redundant/comment_7_85e8a286d6b1ec5212614c36bf54addb._comment10
-rw-r--r--doc/bugs/git-annex_auto_upgrade_is_redundant/comment_8_2b2152844612d83f295a5de02f6ed3e7._comment8
-rw-r--r--doc/bugs/git-annex_branch_corruption.mdwn95
-rw-r--r--doc/bugs/git-annex_branch_push_race.mdwn45
-rw-r--r--doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog.mdwn74
-rw-r--r--doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_1_b83888a98075125dd043f323c99da03b._comment25
-rw-r--r--doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_2_4a7d824b6e75693cf47f6efbf2c99e2e._comment10
-rw-r--r--doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_3_cbbeaa691d102bd7d29f5e9bad9d6f53._comment32
-rw-r--r--doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_4_094191b806ac76b2aef325733fe37136._comment8
-rw-r--r--doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_5_c97926b15ba320f57a6441f9844cb139._comment7
-rw-r--r--doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_6_3b70a60ef1c47871a3933176eac38174._comment40
-rw-r--r--doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_7_fc56ec87725c7427794b70ee2ba2822a._comment12
-rw-r--r--doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed.mdwn47
-rw-r--r--doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_1_0fc5c7251ead7a0fbbcd357a8bc53f05._comment18
-rw-r--r--doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_2_992c1a51d0300bd676cb431688efa524._comment13
-rw-r--r--doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_3_3001a11839eff6a4c3a9f12096b29704._comment8
-rw-r--r--doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_4_a13abb45b9a94d275177641db0538765._comment10
-rw-r--r--doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_5_faac2d48950307ce245f0da501ace730._comment9
-rw-r--r--doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_6_7df03eee7d5dc5a7ed0c9abef5053788._comment17
-rw-r--r--doc/bugs/git-annex_died_of_signal_11_when_syncing_content.mdwn30
-rw-r--r--doc/bugs/git-annex_died_of_signal_11_when_syncing_content/comment_1_e982f985e5ca57454725e9e9a482e30c._comment12
-rw-r--r--doc/bugs/git-annex_direct_fails_on_repositories_with_a_partial_set_of_files.mdwn29
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx.mdwn100
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_10_f3594de3ba2ab17771a4b116031511bb._comment8
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_11_97de7252bf5d2a4f1381f4b2b4e24ef8._comment13
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_12_f1c53c3058a587185e7a78d84987539d._comment8
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_13_4f56aea35effe5c10ef37d7ad7adb48c._comment8
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_14_cc2a53c31332fe4b828ef1e72c2a4d49._comment10
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_15_37f1d669c1fa53ee371f781c7bb820ae._comment17
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_16_8a4ab1af59098f4950726cf53636c2b3._comment22
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_17_515d5c5fbf5bd0c188a4f1e936d913e2._comment9
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_18_db64c91dd1322a0ab168190686db494f._comment14
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_19_ff555c271637af065203ca99c9eeaf89._comment8
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_1_9a7b09de132097100c1a68ea7b846727._comment8
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_20_7e328b970169fffb8bce373d1522743b._comment19
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_21_98f632652b0db9131b0173d3572f4d62._comment10
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_22_52d41afd7fd0b71a4c8e84ab1b4df5bd._comment8
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_23_c2cd8a69c37539c0511bae02016180ca._comment8
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_2_174952fc3e3be12912e5fcfe78f2dd13._comment185
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_3_a18ada7ac74c63be5753fdb2fe68dae5._comment18
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_4_039e945617a6c1852c96974a402db29c._comment8
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_5_eacd0b18475c05ab9feed8cf7290b79a._comment37
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_6_e55117cb628dc532e468519252571474._comment14
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_7_0f4f471102e394ebb01da40e4d0fd9f6._comment68
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_8_68e2d6ccdb9622b879e4bc7005804623._comment12
-rw-r--r--doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_9_45b11ddd200261115b653c7a14d28aa9._comment8
-rw-r--r--doc/bugs/git-annex_does_not_install_on_windows_without_admin_rights.mdwn2
-rw-r--r--doc/bugs/git-annex_doesn__39__t_list_files_containing_ISO8859-15_characters.mdwn48
-rw-r--r--doc/bugs/git-annex_doesn__39__t_list_files_containing_ISO8859-15_characters/comment_1_b84e831298c03b12471fb75da597e365._comment8
-rw-r--r--doc/bugs/git-annex_dropunused_has_no_effect.mdwn12
-rw-r--r--doc/bugs/git-annex_dropunused_has_no_effect/comment_1_66b581eb7111a9e98c6406ec75b899cf._comment12
-rw-r--r--doc/bugs/git-annex_dropunused_has_no_effect/comment_2_11c46cd2087511c3d22b7ce7c149b3e9._comment16
-rw-r--r--doc/bugs/git-annex_dropunused_has_no_effect/comment_3_b1c3d8c6ec4b20727aaa9c4b746531b0._comment10
-rw-r--r--doc/bugs/git-annex_dropunused_has_no_effect/comment_4_f05a9a3760858c5ee5c98dd8ab059c28._comment8
-rw-r--r--doc/bugs/git-annex_fails_to_initialize_under_Windows_with_cygwin.mdwn40
-rw-r--r--doc/bugs/git-annex_fails_to_initialize_under_Windows_with_cygwin/comment_1_24d626923403b097f57bc3d3a8c5befa._comment10
-rw-r--r--doc/bugs/git-annex_fails_to_initialize_under_Windows_with_cygwin/comment_2_32a74f078f45ee069a7d386734e379e2._comment8
-rw-r--r--doc/bugs/git-annex_fails_to_start_when_nautilus_script_directory_is_missing.mdwn49
-rw-r--r--doc/bugs/git-annex_fix_not_noticing_file_renames.mdwn36
-rw-r--r--doc/bugs/git-annex_fix_not_noticing_file_renames/comment_1_4edd95200d59ec5a5426167b8da8e3f9._comment24
-rw-r--r--doc/bugs/git-annex_fix_not_noticing_file_renames/comment_2_a9a44debefb3bdd4b8ed2d1cf53f2338._comment8
-rw-r--r--doc/bugs/git-annex_fix_not_noticing_file_renames/comment_3_0efb11f35b872b75a3fbc4ebb71ac827._comment10
-rw-r--r--doc/bugs/git-annex_get:_requested_key_is_not_present.mdwn41
-rw-r--r--doc/bugs/git-annex_get:_requested_key_is_not_present/comment_1_d4baa6607a61d0e6a7cea1325a5ddf95._comment26
-rw-r--r--doc/bugs/git-annex_get:_requested_key_is_not_present/comment_2_b49725488c3db5e00ede7b65ed9d62fa._comment110
-rw-r--r--doc/bugs/git-annex_get:_requested_key_is_not_present/comment_3_c17a7138579b93c6f14e3444c11664ac._comment8
-rw-r--r--doc/bugs/git-annex_group_remote_allows_bad_settings_with_standard_groups.mdwn25
-rw-r--r--doc/bugs/git-annex_group_remote_allows_bad_settings_with_standard_groups/comment_1_b3090201e90a78e049cf299fc322d60e._comment12
-rw-r--r--doc/bugs/git-annex_has_issues_with_git_when_staging__47__commiting_logs.mdwn34
-rw-r--r--doc/bugs/git-annex_immediately_re-gets_dropped_files.mdwn27
-rw-r--r--doc/bugs/git-annex_immediately_re-gets_dropped_files/comment_1_09e616a4866e726a48be4febe6375cc8._comment8
-rw-r--r--doc/bugs/git-annex_incorrectly_parses_bare_IPv6_addresses.mdwn59
-rw-r--r--doc/bugs/git-annex_losing_rsync_remotes_with_encryption_enabled.mdwn103
-rw-r--r--doc/bugs/git-annex_merge_stalls.mdwn2
-rw-r--r--doc/bugs/git-annex_on_NAS_eats_all_memory.mdwn35
-rw-r--r--doc/bugs/git-annex_on_NAS_eats_all_memory/comment_1_0201600e27f38c5d8ee3774a827cc7a9._comment13
-rw-r--r--doc/bugs/git-annex_on_NAS_eats_all_memory/comment_3_70ae89522c001bbe2aa10531e66423be._comment10
-rw-r--r--doc/bugs/git-annex_on_NAS_eats_all_memory/comment_4_3b226c7ce28f1caee2d5e568d91c96bc._comment24
-rw-r--r--doc/bugs/git-annex_on_NAS_eats_all_memory/comment_4_46d66ab3216594fbe808c95baddba02f._comment14
-rw-r--r--doc/bugs/git-annex_on_NAS_eats_all_memory/comment_5_cc24b3cc44e66c8dce7448daa2fa7682._comment14
-rw-r--r--doc/bugs/git-annex_on_NAS_eats_all_memory/comment_6_2ad3d0960929533fef8f827bbf06f085._comment18
-rw-r--r--doc/bugs/git-annex_on_crippled_filesystem_can_still_failed_due_to_case_.mdwn32
-rw-r--r--doc/bugs/git-annex_on_crippled_filesystem_can_still_failed_due_to_case_/comment_1_850695231926dfe94f11342d3af7f63c._comment54
-rw-r--r--doc/bugs/git-annex_on_crippled_filesystem_can_still_failed_due_to_case_/comment_2_c2a2f801a3e18ad597ff0acf2f104557._comment22
-rw-r--r--doc/bugs/git-annex_quit_unexpectedly___40__macosx__41__.mdwn358
-rw-r--r--doc/bugs/git-annex_quit_unexpectedly___40__macosx__41__/comment_1_97abb8442329d19c9687002f43afac74._comment23
-rw-r--r--doc/bugs/git-annex_quit_unexpectedly___40__macosx__41__/comment_2_3405f3cd699860ee239cf23ade19e92c._comment10
-rw-r--r--doc/bugs/git-annex_remotedeamon.mdwn27
-rw-r--r--doc/bugs/git-annex_remotedeamon/comment_1_bf8aa639ddc7f51ed7b2b83e31694e85._comment12
-rw-r--r--doc/bugs/git-annex_remotedeamon/comment_2_82f71852df61d12333d08ba25af9d7be._comment10
-rw-r--r--doc/bugs/git-annex_sucking_up_all_available_RAM_after_startup.mdwn2
-rw-r--r--doc/bugs/git-annex_sync_broken_on_squeeze_backports.mdwn20
-rw-r--r--doc/bugs/git-annex_sync_does_not_push.mdwn52
-rw-r--r--doc/bugs/git-annex_sync_does_not_push/comment_1_8b9b53163b012563b3e80f8eded76aaa._comment10
-rw-r--r--doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not.mdwn29
-rw-r--r--doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_1_6722fd627ec4add9f2b16546bd8ef341._comment8
-rw-r--r--doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_2_508e475f764e1cb453b756eb50bc3a15._comment34
-rw-r--r--doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_3_1656ba18c519a262c57ef626a3449e77._comment12
-rw-r--r--doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_4_347dc3b6e5bc6c4195ec09d54bc1398e._comment24
-rw-r--r--doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_5_a9c93bfc3278ef8b1117eac2af859bc3._comment12
-rw-r--r--doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_6_804dd62beef64f7d4e203bdb28cbe660._comment11
-rw-r--r--doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_7_4ef107d70647780eb5347cae6f467fed._comment12
-rw-r--r--doc/bugs/git-repair_real_world_failure_example.mdwn11
-rw-r--r--doc/bugs/git_annex_add_..._adds_too_much.mdwn25
-rw-r--r--doc/bugs/git_annex_add_adds_unlocked_files.mdwn21
-rw-r--r--doc/bugs/git_annex_add_adds_unlocked_files/comment_2_4b46116eabe61946ae65b293d7bbacb7._comment12
-rw-r--r--doc/bugs/git_annex_add_adds_unlocked_files/comment_2_d53d0710d6ad9f0fdc8a29a98647e94b._comment55
-rw-r--r--doc/bugs/git_annex_add_eats_files_when_filename_is_too_long.mdwn14
-rw-r--r--doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_1_9650284913bec2a00cf551b90ab5d8ff._comment21
-rw-r--r--doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_2_c6c8d2a1f444d85c582bc5396b08e148._comment8
-rw-r--r--doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_3_5776864d78d56849001dd12e3adb9cbe._comment8
-rw-r--r--doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_4_371ec7b4ae73280ede31edfe90b42a95._comment9
-rw-r--r--doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_5_4fb04f646de591640f8504c0caf61acd._comment12
-rw-r--r--doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_6_b4055409fe48da95bb3101c0242ef0bc._comment8
-rw-r--r--doc/bugs/git_annex_add_error_with_Andrew_File_System.mdwn28
-rw-r--r--doc/bugs/git_annex_add_error_with_Andrew_File_System/comment_1_bc783e551fc0e8da87bc95bff5b8f73a._comment8
-rw-r--r--doc/bugs/git_annex_add_error_with_Andrew_File_System/comment_2_faefcf69bd61c47566131cb31b78cc19._comment10
-rw-r--r--doc/bugs/git_annex_add_error_with_Andrew_File_System/comment_3_d5014c8b78437b9fddbb1e83d3679081._comment10
-rw-r--r--doc/bugs/git_annex_add_ignores_some_files__47__directories.mdwn23
-rw-r--r--doc/bugs/git_annex_add_memory_leak.mdwn39
-rw-r--r--doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory.mdwn43
-rw-r--r--doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_1_984f75d8078f2809486f38ecb3b16be3._comment10
-rw-r--r--doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_2_c0f07e2d4bb142389629050479dd1465._comment10
-rw-r--r--doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_3_7a58a884aaacedca9697b17cd5248214._comment33
-rw-r--r--doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_4_aa4f1806207138115d2a95935bb0546b._comment8
-rw-r--r--doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_5_fa95f93416e3d6e66af557df6562f1e5._comment8
-rw-r--r--doc/bugs/git_annex_add_removes_file_with_no_data_left.mdwn103
-rw-r--r--doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_10_9cc749a6efd4359a99316036f5bc867f._comment12
-rw-r--r--doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_11_1fed5be9db29866e4dc3d3bb12907bf3._comment8
-rw-r--r--doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_12_06d517ac4ef8def4629a40d7c3549bac._comment8
-rw-r--r--doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_1_8f081aeba7065d143a453dc128543f59._comment18
-rw-r--r--doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_2_54a4b10723fd8a80dd486377ff15ce0d._comment10
-rw-r--r--doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_3_f1964e4e07991a251c2795da0361a4e2._comment28
-rw-r--r--doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_4_73c38d843c30f00f6fd8883db8e55f62._comment10
-rw-r--r--doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_5_7ede5ee312f3abdf78979c0d52a7871a._comment12
-rw-r--r--doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_6_e37cf18708f09619442c3a9532d12ed9._comment13
-rw-r--r--doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_7_a744ef7dd3a224a911ebb24858bc2fd6._comment8
-rw-r--r--doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_8_f97141b255073b90120895148220c2d7._comment10
-rw-r--r--doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_9_dd2be11dfd190129d491f5f891e7cd1a._comment10
-rw-r--r--doc/bugs/git_annex_assistant_--autostart_failed.mdwn39
-rw-r--r--doc/bugs/git_annex_assistant_--autostart_failed/comment_1_746545273b53849c42ff6272324e5155._comment10
-rw-r--r--doc/bugs/git_annex_assistant_--autostart_failed/comment_2_5bdf6f94da12e551ae12e7f550a84d62._comment8
-rw-r--r--doc/bugs/git_annex_assistant_--autostart_failed/comment_3_bfd646f69946a5fe926b270cf94f87cb._comment8
-rw-r--r--doc/bugs/git_annex_assistant_crashes_when_parsing_lsof_output_for_version_4.88.mdwn5
-rw-r--r--doc/bugs/git_annex_assistant_crashes_when_parsing_lsof_output_for_version_4.88/comment_1_e159e00e2ec7c128fda2190dc7d4c5ea._comment11
-rw-r--r--doc/bugs/git_annex_assistant_crashes_when_parsing_lsof_output_for_version_4.88/comment_2_d4ff043ebca6028105d6e38ee4020e7c._comment539
-rw-r--r--doc/bugs/git_annex_assistant_crashes_when_parsing_lsof_output_for_version_4.88/comment_3_ae25d140e01d9e2a8f76b8f892ff71ec._comment42
-rw-r--r--doc/bugs/git_annex_assistant_leaks_a_lot_of_memory.mdwn9
-rw-r--r--doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_1_a4805854c448e4bc70a47f5555e0f73c._comment21
-rw-r--r--doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_2_e9dca04e0456ca7356996365a4b87d59._comment14
-rw-r--r--doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_3_45ae862d4f940341d48d179583e65d66._comment38
-rw-r--r--doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_4_d597e15e9693ce6e8c1ca80cb225b044._comment21
-rw-r--r--doc/bugs/git_annex_content_fails_with_a_parse_error.mdwn32
-rw-r--r--doc/bugs/git_annex_content_fails_with_a_parse_error/comment_1_2b60b6ae0115de13ecf837b34dadcd1d._comment8
-rw-r--r--doc/bugs/git_annex_copy_-f_REMOTE_._doesn__39__t_work_as_expected.mdwn18
-rw-r--r--doc/bugs/git_annex_copy_trying_to_connect_to_remotes_uninvolved.mdwn27
-rw-r--r--doc/bugs/git_annex_copy_trying_to_connect_to_remotes_uninvolved/comment_1_f1330935a07460c9c8bc82ee8d4709c5._comment12
-rw-r--r--doc/bugs/git_annex_costs_not_working_as_expected_in_the_assistant.mdwn140
-rw-r--r--doc/bugs/git_annex_costs_not_working_as_expected_in_the_assistant/comment_1_ab82b880bd75a206e0717146e1b79aba._comment8
-rw-r--r--doc/bugs/git_annex_costs_not_working_as_expected_in_the_assistant/comment_2_460e78ea8603bd87203d8014bcc3eb9a._comment55
-rw-r--r--doc/bugs/git_annex_costs_not_working_as_expected_in_the_assistant/comment_3_17e9c2d29ddadcabc30ce884ffe0f853._comment12
-rw-r--r--doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de.mdwn26
-rw-r--r--doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_1_5ba4f22bda2f5438fb08753cf149b649._comment12
-rw-r--r--doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_2_b096cfdf26bfedfff16d882d7b2e060d._comment10
-rw-r--r--doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_3_210be77aabb0ef5b85865cd08c51861e._comment12
-rw-r--r--doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_4_bb974d882fbb31aa54e6de38410a2318._comment8
-rw-r--r--doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_5_be655cbea27b6c87d298a75e1697a87d._comment8
-rw-r--r--doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_6_72d1dac6627bbe22d5bd140215d82c47._comment8
-rw-r--r--doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_7_8a8dfb15684525e156d6334e9f67a55c._comment66
-rw-r--r--doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_8_f1a6e413756066659020e20147373a11._comment8
-rw-r--r--doc/bugs/git_annex_describe_can_break_uuid.log.mdwn46
-rw-r--r--doc/bugs/git_annex_describe_can_break_uuid.log/comment_2_9ead36f13cbde6c822b231441de636ae._comment8
-rw-r--r--doc/bugs/git_annex_direct_-__62___rename:_does_not_exist.mdwn28
-rw-r--r--doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_1_b4ad8561eab9b5c3a6eaa2f275aececc._comment10
-rw-r--r--doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_2_f995b3212c8140b386e4d1785994d29a._comment10
-rw-r--r--doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_3_4c914d08f473490f2077d76664a7d6dd._comment11
-rw-r--r--doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_4_3c7a7a0983d3a75a04395141aaf16dbb._comment33
-rw-r--r--doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_5_64000cfe5ef2cdf4260c3342f032e916._comment15
-rw-r--r--doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_6_da1b3ee6948afc81273aafe44c7604ba._comment12
-rw-r--r--doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_7_4712f638717c68ed3529dd2a078f1746._comment14
-rw-r--r--doc/bugs/git_annex_does_nothing_useful.mdwn67
-rw-r--r--doc/bugs/git_annex_does_nothing_useful/comment_10_457354dc0018333002dc5049935c0feb._comment8
-rw-r--r--doc/bugs/git_annex_does_nothing_useful/comment_11_8a6d244165dd238ddf9dd629795de2f6._comment10
-rw-r--r--doc/bugs/git_annex_does_nothing_useful/comment_12_30d06bc0f1c37d988a1a31962b57533c._comment18
-rw-r--r--doc/bugs/git_annex_does_nothing_useful/comment_1_fc4f51ddcbc69631e2835b86c3489c8e._comment7
-rw-r--r--doc/bugs/git_annex_does_nothing_useful/comment_2_9bb1647e6c59f1ed7b13b81ecc33f920._comment13
-rw-r--r--doc/bugs/git_annex_does_nothing_useful/comment_3_d434f5c614a27b75d73530b5b918b851._comment14
-rw-r--r--doc/bugs/git_annex_does_nothing_useful/comment_4_998e33219d29ea41b0b2a5d2955a9862._comment46
-rw-r--r--doc/bugs/git_annex_does_nothing_useful/comment_5_c72e2571e5b8c06bbfa2276a7ad1e8a6._comment16
-rw-r--r--doc/bugs/git_annex_does_nothing_useful/comment_6_bc8b42432ba25de8f972c192bc3cdff6._comment44
-rw-r--r--doc/bugs/git_annex_does_nothing_useful/comment_7_e7469a4c5e45078ade775f5cbdd17cfc._comment67
-rw-r--r--doc/bugs/git_annex_does_nothing_useful/comment_8_bc9e6fd284440a59ffe4e4ed1f73f7d7._comment30
-rw-r--r--doc/bugs/git_annex_does_nothing_useful/comment_9_38a2dbeee3750d79ca9a943a02fceb29._comment17
-rw-r--r--doc/bugs/git_annex_drop_direct_creates_symlinks_with_possibly_incorrect_path_separator.mdwn37
-rw-r--r--doc/bugs/git_annex_enableremote_gcrypt_failure_leaves_a_remote.mdwn31
-rw-r--r--doc/bugs/git_annex_fork_bombs_on_gpg_file.mdwn25
-rw-r--r--doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_10_6e29b60cd77f3288e33ad270f95f410e._comment8
-rw-r--r--doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_11_ad13e3221ae06086e86800316912d951._comment12
-rw-r--r--doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_12_41746b731eae7f280bb668c776022bcb._comment8
-rw-r--r--doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_13_56ca8590110abffeed6d826c54ca1136._comment10
-rw-r--r--doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_1_73ae438a37e4c5f56fe291448e1c64dd._comment13
-rw-r--r--doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_2_aa237adebe7674b8cdb9a967bb5f96a8._comment8
-rw-r--r--doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_3_ab403d7abbbbabd498b954b0b9742755._comment12
-rw-r--r--doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_4_a35d04440b1220faf9088107c3f17762._comment10
-rw-r--r--doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_5_8345331b9b313769ba401da2ffd89332._comment10
-rw-r--r--doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_6_7eb535ca38b3e84d44d0f8cbf5e61b8b._comment18
-rw-r--r--doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_7_a3aa4231a82917c56cbdf52b65db7133._comment21
-rw-r--r--doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_8_178fd4e4d6abbca192fcd6d592615fca._comment12
-rw-r--r--doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_9_7d80f131f43312bb061df2be7fa956ef._comment10
-rw-r--r--doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files.mdwn18
-rw-r--r--doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_1_a6cde4aa495512344fa7f50e10749c68._comment8
-rw-r--r--doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_2_4ac3b87ec0bc0514c4eff9f5a75b9f5d._comment26
-rw-r--r--doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_3_d18b1fdc866edf2786d2c6b7ec55119f._comment11
-rw-r--r--doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_4_31e4fcbf63c11cc374a849daf3ce1dbc._comment8
-rw-r--r--doc/bugs/git_annex_fsck_is_a_no-op_in_bare_repos.mdwn21
-rw-r--r--doc/bugs/git_annex_fsck_is_a_no-op_in_bare_repos/comment_1_fc59fbd1cdf8ca97b0a4471d9914aaa1._comment8
-rw-r--r--doc/bugs/git_annex_fsck_is_a_no-op_in_bare_repos/comment_2_273a45e6977d40d39e0d9ab924a83240._comment9
-rw-r--r--doc/bugs/git_annex_get_choke_when_remote_is_an_ssh_url_with_a_port.mdwn13
-rw-r--r--doc/bugs/git_annex_gets_confused_about_remotes_with_dots_in_their_names.mdwn34
-rw-r--r--doc/bugs/git_annex_ignores_GIT__95__SSH__63__.mdwn24
-rw-r--r--doc/bugs/git_annex_import_destroys_a_fellow_git_annex_repository.mdwn130
-rw-r--r--doc/bugs/git_annex_import_fails_on_filenames_with_newlines_in_them.mdwn47
-rw-r--r--doc/bugs/git_annex_import_fails_on_filenames_with_newlines_in_them/comment_1_249b198e1141e05fe39f49bd7ad8870e._comment16
-rw-r--r--doc/bugs/git_annex_import_fails_on_filenames_with_newlines_in_them/comment_2_7320c7806da93d0862f8f768092ef073._comment8
-rw-r--r--doc/bugs/git_annex_import_fails_on_filenames_with_newlines_in_them/comment_3_032d4a64e2f010fcf9359e4f77b6d784._comment12
-rw-r--r--doc/bugs/git_annex_importfeed_fails.mdwn64
-rw-r--r--doc/bugs/git_annex_indirect_can_fail_catastrophically.mdwn78
-rw-r--r--doc/bugs/git_annex_indirect_can_fail_catastrophically/comment_1_0b085e7e8c8e364f479574bc00c7c394._comment21
-rw-r--r--doc/bugs/git_annex_initremote_needs_some___34__error_checking__34__.mdwn65
-rw-r--r--doc/bugs/git_annex_initremote_walks_.git-annex.mdwn19
-rw-r--r--doc/bugs/git_annex_list__47__whereis_and_uncommited_local_changes.mdwn30
-rw-r--r--doc/bugs/git_annex_list__47__whereis_and_uncommited_local_changes/comment_1_99e8d2c1bbc23438f954d8ddc827078e._comment9
-rw-r--r--doc/bugs/git_annex_list__47__whereis_and_uncommited_local_changes/comment_2_7c8d91d78608d717164cb3e825654654._comment10
-rw-r--r--doc/bugs/git_annex_lock_dangerous.mdwn19
-rw-r--r--doc/bugs/git_annex_migrate_leaves_old_backend_versions_around.mdwn19
-rw-r--r--doc/bugs/git_annex_migrate_leaves_old_backend_versions_around/comment_1_f3e418144e5a5a9b3eda459546fc2bb0._comment8
-rw-r--r--doc/bugs/git_annex_remotedaemon_fails_to_connect_after_several_LOSTNET_messages_in_a_row.mdwn77
-rw-r--r--doc/bugs/git_annex_remotedaemon_fails_to_connect_after_several_LOSTNET_messages_in_a_row/comment_1_7340e9cf5493e94cc6cb53adb6965f2c._comment12
-rw-r--r--doc/bugs/git_annex_remotedaemon_fails_to_connect_after_several_LOSTNET_messages_in_a_row/comment_2_aa6f0371291eb27a55850d905cea381a._comment12
-rw-r--r--doc/bugs/git_annex_remotedaemon_fails_to_connect_after_several_LOSTNET_messages_in_a_row/comment_3_cafaa7f474fbd995d1c10ecd35d2efe5._comment7
-rw-r--r--doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__.mdwn40
-rw-r--r--doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__/comment_1_183c3740a108b5f09baf1c401dcfa7f9._comment10
-rw-r--r--doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__/comment_2_b8ee68b445c6a8d27121d90a2eeba0c7._comment10
-rw-r--r--doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__/comment_3_7502f88ae1c46e070e7fdbd9b9c1b54d._comment22
-rw-r--r--doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__/comment_4_9f67b14c9ac81f159439c5dff7354b8f._comment10
-rw-r--r--doc/bugs/git_annex_requested_key_is_not_present_on_random_files_even_though_they_exist___40__Direct_mode__41__.mdwn78
-rw-r--r--doc/bugs/git_annex_requested_key_is_not_present_on_random_files_even_though_they_exist___40__Direct_mode__41__/comment_1_410a591983ebb593e8ca978ceddf6a2c._comment12
-rw-r--r--doc/bugs/git_annex_requested_key_is_not_present_on_random_files_even_though_they_exist___40__Direct_mode__41__/comment_2_c4c0dcc0074ff89866fb261c2d30148f._comment12
-rw-r--r--doc/bugs/git_annex_requested_key_is_not_present_on_random_files_even_though_they_exist___40__Direct_mode__41__/comment_3_c377b56d20b291877be3c7bce5e7bd0c._comment8
-rw-r--r--doc/bugs/git_annex_should_use___39__git_add_-f__39___internally.mdwn11
-rw-r--r--doc/bugs/git_annex_should_use___39__git_add_-f__39___internally/comment_1_7683bf02cf9e97830fb4690314501568._comment8
-rw-r--r--doc/bugs/git_annex_still_deleting_content_when_merging.mdwn88
-rw-r--r--doc/bugs/git_annex_still_deleting_content_when_merging/comment_1_cb51e25c5e1656dcbb73b3ff680341f0._comment14
-rw-r--r--doc/bugs/git_annex_still_deleting_content_when_merging/comment_2_bbbcce7fc5f34d733126c42be8ec0a1d._comment27
-rw-r--r--doc/bugs/git_annex_still_deleting_content_when_merging/comment_3_f31a73e0e2c43f6a7f158455eadaa56c._comment27
-rw-r--r--doc/bugs/git_annex_sync_--content_may_copy_then_drop_a_file_to_a_remote.mdwn33
-rw-r--r--doc/bugs/git_annex_sync_--content_not_syncing_all_objects.mdwn2
-rw-r--r--doc/bugs/git_annex_sync_--content_not_syncing_all_objects/comment_6_4540c31acd63626fbad9bde487ec3005._comment8
-rw-r--r--doc/bugs/git_annex_sync_can_commit_files_to_.git__47__objects_instead_of_.git__47__annex.mdwn56
-rw-r--r--doc/bugs/git_annex_sync_can_commit_files_to_.git__47__objects_instead_of_.git__47__annex/comment_1_cf46f75c87a27cfc6883bcdb10fecf50._comment12
-rw-r--r--doc/bugs/git_annex_sync_in_direct_mode_does_not_honor_skip-worktree.mdwn2
-rw-r--r--doc/bugs/git_annex_sync_in_direct_mode_does_not_honor_skip-worktree/comment_5_cb98789c50c58f01055183dbaf7b4eba._comment11
-rw-r--r--doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command.mdwn102
-rw-r--r--doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command/comment_1_dd9490e8c9488a78475ccee1ffef08f5._comment12
-rw-r--r--doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command/comment_2_4c0097f25c067c3146024ae39ccb10f1._comment135
-rw-r--r--doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command/comment_3_c7f9b400336b29587b26a161041e7980._comment34
-rw-r--r--doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command/comment_4_b5e3c925fcfa7d8a48d24eb677c6c2a0._comment8
-rw-r--r--doc/bugs/git_annex_uninit_loses_content_when_interrupted.mdwn33
-rw-r--r--doc/bugs/git_annex_uninit_loses_content_when_interrupted/comment_1_fd9d2abbc90fb4f470b2212bc1f4a2dd._comment8
-rw-r--r--doc/bugs/git_annex_uninit_loses_content_when_interrupted/comment_2_0e99f6ef4f8b342ef0ebc64dbf8e2ce6._comment12
-rw-r--r--doc/bugs/git_annex_uninit_removes_files_not_previously_added_to_annex.mdwn32
-rw-r--r--doc/bugs/git_annex_uninit_removes_files_not_previously_added_to_annex/comment_1_ce4e3b1bf0d53119d049cf7dd621c5c4._comment10
-rw-r--r--doc/bugs/git_annex_uninit_removes_files_not_previously_added_to_annex/comment_2_3aa125635609fce41ab0c98cefb81f98._comment9
-rw-r--r--doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems.mdwn15
-rw-r--r--doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_1_8ba4fdb9f2d3bd44db5e910526cb9124._comment8
-rw-r--r--doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_2_2a4a2b3e287a0444a1c8e8d98768a206._comment8
-rw-r--r--doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_3_dacfdb8322045fc4ceefc9128bf7c505._comment17
-rw-r--r--doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_4_7889a3ff5ce80c6322448aa674df8525._comment10
-rw-r--r--doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_5_6d28c2537ce24eeb3496ca349823defd._comment19
-rw-r--r--doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_6_4bf14ecef622988e80976c0fb55c24b9._comment10
-rw-r--r--doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_7_d2e5382fe0f38fb9dd9ee69901c68151._comment8
-rw-r--r--doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_8_b282757537cda863d3dc6d0bbfd6b656._comment8
-rw-r--r--doc/bugs/git_annex_unused_considers_remote_branches_which_makes_it_inconsistent.mdwn106
-rw-r--r--doc/bugs/git_annex_unused_considers_remote_branches_which_makes_it_inconsistent/comment_1_a636ffe55b11c46a0afcc0b9a3a88cd4._comment10
-rw-r--r--doc/bugs/git_annex_unused_considers_remote_branches_which_makes_it_inconsistent/comment_2_5e1ad57420efd16ae09c9e5cad55b5f2._comment13
-rw-r--r--doc/bugs/git_annex_unused_fails_when_a_filename_contains_newline.mdwn69
-rw-r--r--doc/bugs/git_annex_unused_seems_to_check_for_current_path.mdwn39
-rw-r--r--doc/bugs/git_annex_upgrade_output_is_inconsistent_and_spammy.mdwn15
-rw-r--r--doc/bugs/git_annex_upgrade_output_is_inconsistent_and_spammy/comment_1_3a01c81efba321b0e46d1bc0426ad8d1._comment10
-rw-r--r--doc/bugs/git_annex_version_should_without_being_in_a_repo_.mdwn7
-rw-r--r--doc/bugs/git_annex_version_should_without_being_in_a_repo_/comment_1_e7b26eeb1a765fd83280ef907c0deef2._comment8
-rw-r--r--doc/bugs/git_annex_vicfg_fail_with_Buffer:_invalid_argument___40__invalid_character__41__.mdwn34
-rw-r--r--doc/bugs/git_annex_webapp_runs_on_wine.mdwn47
-rw-r--r--doc/bugs/git_annex_webapp_runs_on_wine/comment_1_c71dfa42780c0fc78f88ce054e5f3ee3._comment16
-rw-r--r--doc/bugs/git_annex_webapp_runs_on_wine/comment_2_f28441b18b0be90c1e58348455ce09d9._comment23
-rw-r--r--doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive.mdwn60
-rw-r--r--doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_1_7707017fbf3d92ee21d600fe0aefce4f._comment10
-rw-r--r--doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_2_f3392ec3ca7392823cbad2cc9b77f54e._comment9
-rw-r--r--doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_3_b3d016a487b12748fe2c4d14300eb158._comment20
-rw-r--r--doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_4_61f600511a3172f0707e5809fc444d0c._comment9
-rw-r--r--doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_5_8cf029ac7bf3c19dcb0b613eed3b52ac._comment10
-rw-r--r--doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_6_e40d88eba7d8aec1530ce1d32d1c85f2._comment11
-rw-r--r--doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_7_b101fab9e690d1b335a1a29abab68d6c._comment10
-rw-r--r--doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_8_b30d32086314a7e357f3dd6608828ee5._comment9
-rw-r--r--doc/bugs/git_annex_wont_work_with_git-dir_and_work-tree.mdwn29
-rw-r--r--doc/bugs/git_annex_wont_work_with_git-dir_and_work-tree/comment_1_cc3ea43301cd17b55794f9b9dd1e91cf._comment27
-rw-r--r--doc/bugs/git_annix_breaks_git_commit_after_uninstall.mdwn42
-rw-r--r--doc/bugs/git_annix_breaks_git_commit_after_uninstall/comment_1_c8b1bab40d3bb2468a5bba7b116e854e._comment8
-rw-r--r--doc/bugs/git_annix_breaks_git_commit_after_uninstall/comment_2_4173770375fca51dcaf9b974296d041a._comment8
-rw-r--r--doc/bugs/git_clone_ignores_annex.mdwn25
-rw-r--r--doc/bugs/git_clone_ignores_annex/comment_1_18ba05c51f82ddadd2558f6cd789e394._comment10
-rw-r--r--doc/bugs/git_defunct_processes___40__child_of_git-annex_assistant__41__.mdwn34
-rw-r--r--doc/bugs/git_defunct_processes___40__child_of_git-annex_assistant__41__/comment_1_5e3f4b63db5cd32b63fb3e6a78f9b093._comment10
-rw-r--r--doc/bugs/git_mv_before_commit_breaks_symlinks.mdwn28
-rw-r--r--doc/bugs/git_rename_detection_on_file_move.mdwn1
-rw-r--r--doc/bugs/git_repo_fails_to_checkout.mdwn39
-rw-r--r--doc/bugs/git_repo_fails_to_checkout/comment_1_d92e7e3b41382501a08f6a66c673b1fd._comment8
-rw-r--r--doc/bugs/git_version_in_prebuilt_linux_tarball_is_outdated.mdwn11
-rw-r--r--doc/bugs/git_version_in_prebuilt_linux_tarball_is_outdated/comment_1_2a5a07498df9d38531d4570f7b463b9a._comment8
-rw-r--r--doc/bugs/gix-annex_help_is_homicidal.mdwn23
-rw-r--r--doc/bugs/glacier_fails_to_copy.mdwn85
-rw-r--r--doc/bugs/glacier_fails_to_copy/comment_1_29ea384b6aa5a634ff75191eee14c7ef._comment17
-rw-r--r--doc/bugs/glacier_fails_to_copy/comment_2_329980c99dc244b227a967982cb9052c._comment7
-rw-r--r--doc/bugs/glacier_fails_to_copy/comment_2_b0614f2e7417af733f54c9ff569b11b0._comment33
-rw-r--r--doc/bugs/glacier_from_multiple_repos.mdwn2
-rw-r--r--doc/bugs/googlemail/comment_1_5614fa85029f9f97be03cb74899a7099._comment19
-rw-r--r--doc/bugs/googlemail/comment_2_bdb2b08346673f850709041d2f41be5c._comment12
-rw-r--r--doc/bugs/gpg-agent.mdwn5049
-rw-r--r--doc/bugs/gpg-agent/comment_1_86860841aaa38541968693ec02f6a506._comment10
-rw-r--r--doc/bugs/gpg_bundled_with_OSX_build_fails.mdwn25
-rw-r--r--doc/bugs/gpg_bundled_with_OSX_build_fails/comment_1_ec911f920db6c354ba998ffbb5886606._comment10
-rw-r--r--doc/bugs/gpg_bundled_with_OSX_build_fails/comment_2_bf2a3ab1bbe258bd501ec4b776882adf._comment12
-rw-r--r--doc/bugs/gpg_bundled_with_OSX_build_fails/comment_3_c0142427400323c00bd8294415ae32c5._comment15
-rw-r--r--doc/bugs/gpg_bundled_with_OSX_build_fails/comment_4_b56db4b5afc276f88a2b980e22fda8a0._comment10
-rw-r--r--doc/bugs/gpg_bundled_with_OSX_build_fails/comment_5_a4eda81e5f927c463593bc48fbe84077._comment12
-rw-r--r--doc/bugs/gpg_bundled_with_OSX_build_fails/comment_6_2f0b9331d16a208883bac586258a7b50._comment8
-rw-r--r--doc/bugs/gpg_bundled_with_OSX_build_fails/comment_7_c05c484a6134f93796cff08de0f63e80._comment16
-rw-r--r--doc/bugs/gpg_bundled_with_OSX_build_fails/comment_8_f2cb5467ebe80cf67e1155b771b73978._comment8
-rw-r--r--doc/bugs/gpg_bundled_with_OSX_build_fails/comment_9_27bbda7e31f55b29e1473555ee17e613._comment8
-rw-r--r--doc/bugs/gpg_does_not_ask_for_password_inside_tmux.mdwn25
-rw-r--r--doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_1_053b12e8b412723ff1d6b4e64e71af9e._comment24
-rw-r--r--doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_2_44830ba952cad3b153249bd405671507._comment10
-rw-r--r--doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_3_a63db33a1dc70e64418de8b4bea6a9fa._comment11
-rw-r--r--doc/bugs/gpg_error_on_android.mdwn39
-rw-r--r--doc/bugs/gpg_error_on_android/comment_1_870583fd1b7a33b688b9a228077d1333._comment629
-rw-r--r--doc/bugs/gpg_error_on_android/comment_2_9ce5511a109bde50d8cf87bad0268b4a._comment26
-rw-r--r--doc/bugs/gpg_error_on_android/comment_3_b345e80f38d38f82cfcfce3102138fb8._comment46
-rw-r--r--doc/bugs/gpg_error_on_android/comment_4_032f42235b7f26854e725041ca33384b._comment10
-rw-r--r--doc/bugs/gpg_fails_on_Mac_OS_10.9_when_creating_a_new_remote_repository_via_assistant.mdwn55
-rw-r--r--doc/bugs/gpg_fails_on_Mac_OS_10.9_when_creating_a_new_remote_repository_via_assistant/comment_1_7b409701c650b55b3472accd70555f16._comment8
-rw-r--r--doc/bugs/gpg_fails_on_Mac_OS_10.9_when_creating_a_new_remote_repository_via_assistant/comment_2_40b00f7258512677516ec5036b89090f._comment14
-rw-r--r--doc/bugs/gpg_hangs_on_glacier_remote_creation.mdwn78
-rw-r--r--doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_1_41ca74a4e4aaf4f6b012a92677037651._comment14
-rw-r--r--doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_2_dd11fd25c8bb1f2d7e1292c07abf553e._comment591
-rw-r--r--doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_3_543d8a13756c1355a5752867bdcbefd3._comment20
-rw-r--r--doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_4_6441cf25e6bd62c96d7e766da9bdd7fb._comment25
-rw-r--r--doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_5_72e152294e36bc5f2d78e8e2ebed6a23._comment8
-rw-r--r--doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_6_890e85df05903795e01efbd7879f9c87._comment8
-rw-r--r--doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_7_042047f9fcc45abbfa47c3973d79f08e._comment10
-rw-r--r--doc/bugs/gpg_needs_--use-agent.mdwn53
-rw-r--r--doc/bugs/gsha256sum_crashes.mdwn92
-rw-r--r--doc/bugs/gsha256sum_crashes/comment_1_8597d8ee29232494b1795526b6a0d8d1._comment81
-rw-r--r--doc/bugs/gsha256sum_crashes/comment_2_e410fc1998fbc7db8c13081f76acf7fc._comment12
-rw-r--r--doc/bugs/gsha256sum_crashes/comment_3_f796dd49097425148b785bb7b6213df6._comment10
-rw-r--r--doc/bugs/gsha256sum_crashes/comment_4_1c46b4ad0c981c6105ffb8531223f0b1._comment10
-rw-r--r--doc/bugs/gsha256sum_crashes/comment_5_3fa106ed7fb30226ee7c48b66edb963c._comment16
-rw-r--r--doc/bugs/gsha256sum_crashes/comment_6_276b181b2aeb1512e0468b88598e0a84._comment12
-rw-r--r--doc/bugs/gsha256sum_crashes/comment_7_c2898422ceb9e103d8acdde866b7a211._comment34
-rw-r--r--doc/bugs/hGetContents:_user_error.mdwn38
-rw-r--r--doc/bugs/hGetContents:_user_error/comment_1_30178f151f8c60d2ff856ca543dc506c._comment10
-rw-r--r--doc/bugs/hGetContents:_user_error/comment_2_f74eeed4a007058a22183fd678ecd6c6._comment8
-rw-r--r--doc/bugs/hGetContents:_user_error/comment_3_515e562228a89a13d6d857a874f4a468._comment8
-rw-r--r--doc/bugs/hGetContents:_user_error/comment_4_8c6ed5e459c5c66b77db446c6317114c._comment8
-rw-r--r--doc/bugs/hGetContents:_user_error/comment_5_f80bce48c3f96b0cd6892af43ee88a96._comment8
-rw-r--r--doc/bugs/hGetContents:_user_error/comment_6_69dc09e4ae726856dafbeec34170671c._comment8
-rw-r--r--doc/bugs/hGetContents:_user_error/comment_7_3f66b03f773341fad94ec16b4f55edaa._comment32
-rw-r--r--doc/bugs/hGetContents:_user_error/comment_8_a697e2d36abfc999e65c9f587c0de56e._comment10
-rw-r--r--doc/bugs/hGetContents:_user_error/comment_9_da7c5905a64bb6779970f9394155e629._comment10
-rw-r--r--doc/bugs/hS3_prevents_build.mdwn3
-rw-r--r--doc/bugs/haskell-dbus_problems_on_OSX___40__or_this_a_general_problem__41__.mdwn113
-rw-r--r--doc/bugs/host_with_rysnc_installed__44___not_recognized.mdwn19
-rw-r--r--doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_1_3ff000eb3efde41426c7b086ae627dcf._comment12
-rw-r--r--doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_2_34e592ab057df2df54e13d3f5cae64f0._comment14
-rw-r--r--doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_3_05ffbae13d8f9b08315f40bb9b206f46._comment21
-rw-r--r--doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_4_99d1f151263ca3433dd4afa8a928b1fe._comment30
-rw-r--r--doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_5_6ef1a377b0b4d3efeffdf9693d0b496b._comment12
-rw-r--r--doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_6_d9e36828ad55f3181a1c650010f23d6b._comment14
-rw-r--r--doc/bugs/how_to_get_git-annex_shell_on_MAC__63__.mdwn27
-rw-r--r--doc/bugs/how_to_get_git-annex_shell_on_MAC__63__/comment_1_780fbb7b8dda331503064dfa6bcabaa3._comment23
-rw-r--r--doc/bugs/how_to_get_git-annex_shell_on_MAC__63__/comment_2_1785e99846998aa50e1c62a88b558196._comment14
-rw-r--r--doc/bugs/huge_multiple_copies_of___39__.nfs__42____39___and___39__.panfs__42____39___being_created.mdwn32
-rw-r--r--doc/bugs/huge_multiple_copies_of___39__.nfs__42____39___and___39__.panfs__42____39___being_created/comment_1_833cf2db9881a401a3d5db6d4f3c450a._comment19
-rw-r--r--doc/bugs/immediately_drops_files.mdwn222
-rw-r--r--doc/bugs/immediately_drops_files/comment_1_9ef6e694ef8a8eee7a42f88554475db7._comment10
-rw-r--r--doc/bugs/immediately_drops_files/comment_2_76e4f8b73ab60b2540dd2a3e5379791d._comment8
-rw-r--r--doc/bugs/immediately_drops_files/comment_3_788db083f5ba2e5589c3b952203ec954._comment21
-rw-r--r--doc/bugs/immediately_drops_files/comment_4_425b79865eb77d69d0b7a71a14639f81._comment10
-rw-r--r--doc/bugs/immediately_drops_files/comment_5_7c9f660b6bcec31827a44a650e9d4622._comment10
-rw-r--r--doc/bugs/import_leaves_stray___96__.tmp__96___files_if_interrupted.mdwn12
-rw-r--r--doc/bugs/importfeed_fails__44___bad_feed_content.mdwn36
-rw-r--r--doc/bugs/importfeed_fails_when_using_the_option_--lazy_for_specific_podcast.mdwn77
-rw-r--r--doc/bugs/importfeed_fails_when_using_the_option_--lazy_for_specific_podcast/comment_1_4ccfabbaf75e139b32f6fa6f7bc6a7fe._comment8
-rw-r--r--doc/bugs/importfeed_should_allow_pubdate_in_the_template.mdwn5
-rw-r--r--doc/bugs/importfeed_uses___34____95__foo__34___as_extension.mdwn17
-rw-r--r--doc/bugs/incremental_fsck_should_not_use_sticky_bit.mdwn2
-rw-r--r--doc/bugs/incremental_fsck_should_not_use_sticky_bit/comment_7_f53d0542c9da38e0f6339df8c49c87db._comment8
-rw-r--r--doc/bugs/incremental_fsck_should_not_use_sticky_bit/comment_8_9f5acbc79b631a93d7cdf4ae37c07cab._comment19
-rw-r--r--doc/bugs/interference_with_Dropbox_results_in_data_loss.mdwn2
-rw-r--r--doc/bugs/internal_server_error:_unknown_UUID_on_webapp.mdwn147
-rw-r--r--doc/bugs/internal_server_error_creating_repo_on_ssh_server.mdwn26
-rw-r--r--doc/bugs/internal_server_error_creating_repo_on_ssh_server/comment_1_4a2c9338d5c779496049d78e29cf5cbd._comment8
-rw-r--r--doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option.mdwn28
-rw-r--r--doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_1_14a2f775f43a86129ce3649a06f8ba0b._comment8
-rw-r--r--doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_2_7b277320fcffd8d03e0d3d31398eb571._comment16
-rw-r--r--doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_3_ba9dd8f2cc46640383d4339a3661571f._comment16
-rw-r--r--doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_4_274ae39d55545bde0be931d7a6c42c94._comment12
-rw-r--r--doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_5_242291d46acc61bdfc112e3316de528b._comment10
-rw-r--r--doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_6_76b936263e82ca6c415a16ed57e770b4._comment8
-rw-r--r--doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_7_9ccd3749fd9f32b0906c0b9428cc514f._comment10
-rw-r--r--doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_8_4e8982668b5044b2286d55c90adb9da3._comment8
-rw-r--r--doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_9_aaf0ee250972d737a2ca57de5b5f1c0a._comment12
-rw-r--r--doc/bugs/interrupting_migration_causes_problems.mdwn52
-rw-r--r--doc/bugs/issues_with_non-posix_compatible_shells.mdwn41
-rw-r--r--doc/bugs/issues_with_non-posix_compatible_shells/comment_1_076948499a9d581a50da52b7690e5d4e._comment8
-rw-r--r--doc/bugs/javascript_functions_qouting_issue.mdwn44
-rw-r--r--doc/bugs/journal_commit_error_when_using_annex.mdwn21
-rw-r--r--doc/bugs/journal_commit_error_when_using_annex/comment_1_38f60ca3503ea1530c4bd2cde5c9182f._comment10
-rw-r--r--doc/bugs/journal_commit_error_when_using_annex/comment_2_6de455a67f37d9ee0a307a78123781bf._comment10
-rw-r--r--doc/bugs/json_is_broken_for_status.mdwn34
-rw-r--r--doc/bugs/local_pair_fails_if_non-ascii_characters_present_on_annex_path.mdwn18
-rw-r--r--doc/bugs/local_pair_fails_if_non-ascii_characters_present_on_annex_path/comment_1_cf4f286c55d319bd71c2fc573e313d4b._comment22
-rw-r--r--doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX.mdwn30
-rw-r--r--doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX/comment_1_91c911c29fd126ddc365c561591f627e._comment10
-rw-r--r--doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX/comment_2_c316aead931a6a2377a4515bbb34ac5b._comment8
-rw-r--r--doc/bugs/lsof__47__committer_thread_loops_occassionally.mdwn53
-rw-r--r--doc/bugs/lsof__47__committer_thread_loops_occassionally/comment_1_f8d1720aa26c719609720acf0772606e._comment11
-rw-r--r--doc/bugs/lsof__47__committer_thread_loops_occassionally/comment_2_0527569ea2924721d19dadcf4fe0ec5a._comment8
-rw-r--r--doc/bugs/lsof__47__committer_thread_loops_occassionally/comment_3_5b67ff08a897ea3d2266ccc910ab4278._comment8
-rw-r--r--doc/bugs/main_repo_not_available_on_downloads.kitenet.net.mdwn34
-rw-r--r--doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_1_fb324a4b1ec440275eca32dae15155b3._comment20
-rw-r--r--doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_2_22f456996079c88865b67caca51dfed9._comment9
-rw-r--r--doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_3_a617644a0287e11e980448f129ec9b65._comment51
-rw-r--r--doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_4_ef630a6b299790ab63bc696d3c5ae0c9._comment17
-rw-r--r--doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_5_f1bba569b1ccd1d0b2b75a3a26224e65._comment14
-rw-r--r--doc/bugs/make_SHA512E_the_default.mdwn29
-rw-r--r--doc/bugs/making_annex-merge_try_a_fast-forward.mdwn35
-rw-r--r--doc/bugs/map_error_after_forget/comment_1_81001ecda65d882ea946611d1e18d59f._comment10
-rw-r--r--doc/bugs/map_error_after_forget/comment_2_24f3b6699f646ec0c20f3d4ca010e345._comment28
-rw-r--r--doc/bugs/map_error_after_forget/comment_3_950e735c6d618e60cffffd1aebf06fd3._comment8
-rw-r--r--doc/bugs/map_error_after_forget/comment_4_39327211f3fd1f9ed196a1f09cf68bdc._comment8
-rw-r--r--doc/bugs/map_error_after_forget/comment_6_471a2f5792dfc7cde4f1eb793984abf1._comment8
-rw-r--r--doc/bugs/map_not_respecting_annex_ssh_options__63__.mdwn38
-rw-r--r--doc/bugs/map_not_respecting_annex_ssh_options__63__/comment_1_c63a1ed5909d53f116f06e60aba74dc6._comment10
-rw-r--r--doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build.mdwn38
-rw-r--r--doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build/comment_1_0527581ea60d28bb28504fa2a355ed87._comment10
-rw-r--r--doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build/comment_2_926a87b60e20d286d49639c8dad13a1a._comment8
-rw-r--r--doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build/comment_3_c509fba1a9adacfd26a2bd12b4aea988._comment8
-rw-r--r--doc/bugs/minor_bug:_errors_are_not_verbose_enough.mdwn26
-rw-r--r--doc/bugs/missing_dependency_in_git-annex-3.20130216.mdwn29
-rw-r--r--doc/bugs/missing_kde__47__gnome_menu_item..mdwn29
-rw-r--r--doc/bugs/misuse_of_--git-dir_might_destroy_a_git_repository_completely.mdwn34
-rw-r--r--doc/bugs/misuse_of_--git-dir_might_destroy_a_git_repository_completely/comment_1_5c0bdeb0e1fc6b2d524e5c33ff80ce8a._comment21
-rw-r--r--doc/bugs/modified_permissions_persist_after_unlock__44___commit.mdwn43
-rw-r--r--doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_1_875ca12936d4b4505f2e280a454fe558._comment16
-rw-r--r--doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_2_59f68098fa6edb2fe8902b120fda0280._comment94
-rw-r--r--doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_3_22df91abd8c025000e67bdcef891de3b._comment8
-rw-r--r--doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_4_ecf84eeb4feddafcfa7ba7d4a2f164b1._comment13
-rw-r--r--doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_5_2ea1d78ec8a652a53391969e43bcb6f0._comment39
-rw-r--r--doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_6_2a3ad3f95ee03c79404e3784c9ce1a4b._comment8
-rw-r--r--doc/bugs/moreinfo.mdwn8
-rw-r--r--doc/bugs/nautilus__47__scripts__47__git-annex_get:_openFile:_does_not_exist___40__No_such_file_or_directory__41__.mdwn30
-rw-r--r--doc/bugs/nautilus__47__scripts__47__git-annex_get:_openFile:_does_not_exist___40__No_such_file_or_directory__41__/comment_1_9fdeaa51ccc7c71dcfeea3ea783d3b50._comment9
-rw-r--r--doc/bugs/network___62____61___2.4.0.1_is_not_in_Haskell_Platform_2012.4.0.0.mdwn12
-rw-r--r--doc/bugs/network___62____61___2.4.0.1_is_not_in_Haskell_Platform_2012.4.0.0/comment_1_2c4b3757bb8de563edca65aeabcbbc5a._comment29
-rw-r--r--doc/bugs/new_AWS_region___40__eu-central-1__41__.mdwn10
-rw-r--r--doc/bugs/new_AWS_region___40__eu-central-1__41__/comment_1_23d65c7e05f6e7312bbdbd039bf8d308._comment14
-rw-r--r--doc/bugs/new_AWS_region___40__eu-central-1__41__/comment_2_6ceb3251b7067591d34cd146d19ccea9._comment8
-rw-r--r--doc/bugs/nfs_mounted_repo_results_in_errors_on_drop_move.mdwn59
-rw-r--r--doc/bugs/no_git-annex_shell_on_Windows.mdwn28
-rw-r--r--doc/bugs/no_git-annex_shell_on_Windows/comment_1_988768c3e4f30c751034a0b0390cdd88._comment8
-rw-r--r--doc/bugs/no_git-annex_shell_on_Windows/comment_2_70a6c9af57eed4f8ceb3de63cbf8a5e6._comment10
-rw-r--r--doc/bugs/no_git-annex_shell_on_Windows/comment_3_7f48959c6242c5cc52e9d0a79fd3f85d._comment8
-rw-r--r--doc/bugs/no_git-annex_shell_on_Windows/comment_4_04b30dd9e510762ee547e7b45bdba660._comment12
-rw-r--r--doc/bugs/no_git-annex_shell_on_Windows/comment_5_beebbd4a41cccfc7aac3c19d76c3b978._comment8
-rw-r--r--doc/bugs/no_git-annex_shell_on_Windows/comment_6_957c5da5f336c7ef59e4149602471888._comment15
-rw-r--r--doc/bugs/no_git-annex_shell_on_Windows/comment_7_a8654cf656de55ccdcf40270a1ef4ca9._comment35
-rw-r--r--doc/bugs/no_git-annex_shell_on_Windows/comment_8_3c8bb1b1d67ca1a6e568e381d24a2574._comment16
-rw-r--r--doc/bugs/no_git-annex_shell_on_Windows/comment_9_03646c9df9d4f4ea27459660fe65a976._comment25
-rw-r--r--doc/bugs/not_possible_to_have_annex_on_a_separate_filesystem.mdwn32
-rw-r--r--doc/bugs/old_data_isn__39__t_unused_after_migration.mdwn66
-rw-r--r--doc/bugs/on--git-dir_and_--work-tree_options.mdwn31
-rw-r--r--doc/bugs/one_test_fail_on_osx.mdwn30
-rw-r--r--doc/bugs/optinally_transfer_file_unencryptedly/comment_1_13a7653d96ddf91f4492a9f3555a69aa._comment16
-rw-r--r--doc/bugs/optinally_transfer_file_unencryptedly/comment_2_31f154011ec26a463de7b1e307e49cb6._comment8
-rw-r--r--doc/bugs/optinally_transfer_file_unencryptedly/comment_3_33433bcfb1946b52f1f41b9158ab452d._comment8
-rw-r--r--doc/bugs/ordering.mdwn12
-rw-r--r--doc/bugs/pages_of_packfile_errors.mdwn32
-rw-r--r--doc/bugs/pages_of_packfile_errors/comment_1_eb2989112b38bb27ce8f691dd5d318e5._comment10
-rw-r--r--doc/bugs/pages_of_packfile_errors/comment_2_69fba53035ebea213ae1c11be5326690._comment8
-rw-r--r--doc/bugs/pages_of_packfile_errors/comment_3_73b9f574e8ce36d5e0d0f6c6a89006b7._comment39
-rw-r--r--doc/bugs/pasting_into_annex_on_OSX.mdwn28
-rw-r--r--doc/bugs/pasting_into_annex_on_OSX/comment_1_4eab52bb6eda92e39bdaa8eee8f31a7f._comment8
-rw-r--r--doc/bugs/pasting_into_annex_on_OSX/comment_2_f1b58adfec179b75c1fc2bf578a3b5c4._comment8
-rw-r--r--doc/bugs/pasting_into_annex_on_OSX/comment_3_270aa7680c3b899a92ce6543eaba666a._comment17
-rw-r--r--doc/bugs/pasting_into_annex_on_OSX/comment_4_ec11a80d5b0f78c7a927f8aa71a6c57a._comment8
-rw-r--r--doc/bugs/pasting_into_annex_on_OSX/comment_5_1928bd25e5e6874a3b83c2f2adc776f5._comment7
-rw-r--r--doc/bugs/pasting_into_annex_on_OSX/comment_6_0fe288f54b781a0c51395cb32f0e2f9d._comment8
-rw-r--r--doc/bugs/preferred_content:_include_statement_does_not_allow_spaces_in_filenames.mdwn31
-rw-r--r--doc/bugs/preferred_content:_include_statement_does_not_allow_spaces_in_filenames/comment_1_ca10638d4b4b178cfd0de8736542c4dc._comment12
-rw-r--r--doc/bugs/preferred_content:_include_statement_does_not_allow_spaces_in_filenames/comment_2_986a393a512229d35e529ba242b77b1e._comment10
-rw-r--r--doc/bugs/present_files__47__directories_are_dropped_after_a_sync.mdwn41
-rw-r--r--doc/bugs/present_files__47__directories_are_dropped_after_a_sync/comment_1_9d7591faf99ce48b1e5753c80306ae8b._comment10
-rw-r--r--doc/bugs/present_files__47__directories_are_dropped_after_a_sync/comment_2_7316cba69b9dc0415fea1389238edf25._comment14
-rw-r--r--doc/bugs/problems_with_enableremote_on_gcrypt_remote___40__hosted_with_gitolite__41__.mdwn107
-rw-r--r--doc/bugs/problems_with_enableremote_on_gcrypt_remote___40__hosted_with_gitolite__41__/comment_1_72a97bc3ccb00c623baee874609bb4ca._comment21
-rw-r--r--doc/bugs/problems_with_enableremote_on_gcrypt_remote___40__hosted_with_gitolite__41__/comment_2_1bb55c9a35d9447a31237c8bfa24dba9._comment21
-rw-r--r--doc/bugs/problems_with_glacier.mdwn65
-rw-r--r--doc/bugs/problems_with_glacier/comment_1_8d233428a16ae4276d9c69b329e8216b._comment12
-rw-r--r--doc/bugs/problems_with_utf8_names.mdwn81
-rw-r--r--doc/bugs/problems_with_utf8_names/comment_10_c53c309771caa41accab5523cc6998dd._comment10
-rw-r--r--doc/bugs/problems_with_utf8_names/comment_1_3c7e3f021c2c94277eecf9c8af6cec5f._comment17
-rw-r--r--doc/bugs/problems_with_utf8_names/comment_2_bad4c4c5f54358d1bc0ab2adc713782a._comment10
-rw-r--r--doc/bugs/problems_with_utf8_names/comment_3_4f936a5d3f9c7df64c8a87e62b7fbfdc._comment8
-rw-r--r--doc/bugs/problems_with_utf8_names/comment_4_93bee35f5fa7744834994bc7a253a6f9._comment10
-rw-r--r--doc/bugs/problems_with_utf8_names/comment_5_519cda534c7aea7f5ad5acd3f76e21fa._comment11
-rw-r--r--doc/bugs/problems_with_utf8_names/comment_6_52e0bfff2b177b6f92e226b25d2f3ff1._comment8
-rw-r--r--doc/bugs/problems_with_utf8_names/comment_7_0cc588f787d6eecfa19a8f6cee4b07b5._comment8
-rw-r--r--doc/bugs/problems_with_utf8_names/comment_8_ff5c6da9eadfee20c18c86b648a62c47._comment10
-rw-r--r--doc/bugs/problems_with_utf8_names/comment_9_f358e617799e5a4e3afc6536d419eb08._comment10
-rw-r--r--doc/bugs/protocol_mismatch_after_interrupt.mdwn33
-rw-r--r--doc/bugs/protocol_mismatch_after_interrupt/comment_1_415de83053dc61a64cf2e301223f1916._comment11
-rw-r--r--doc/bugs/protocol_mismatch_after_interrupt/comment_2_e0894bd0d0037ee40050697748d4be47._comment47
-rw-r--r--doc/bugs/protocol_mismatch_after_interrupt/comment_3_3ff700a3daf515fceb715514a7cbd82a._comment10
-rw-r--r--doc/bugs/proxy_command_fails_on_Windows.mdwn36
-rw-r--r--doc/bugs/proxy_command_fails_on_Windows/comment_1_a6d85bd65cd4df957ed108b2966584ef._comment13
-rw-r--r--doc/bugs/proxy_command_fails_on_Windows/comment_1_f4cb0a0ab445a8e9993c6736a6e23887._comment10
-rw-r--r--doc/bugs/quvi_0.9.5_does_not_work_with_git-annex.mdwn87
-rw-r--r--doc/bugs/quvi_0.9.5_does_not_work_with_git-annex/comment_1_d0d2bcd97ef5c9bce8a57c4184a176e0._comment10
-rw-r--r--doc/bugs/quvi_0.9.5_does_not_work_with_git-annex/comment_2_ff9661198257b8c5e2e8ca3d85a7471c._comment8
-rw-r--r--doc/bugs/reinject_should_leave_file_in_place_on_checksum_mismatch.mdwn15
-rw-r--r--doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids.mdwn30
-rw-r--r--doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids/comment_1_11af589cf646cb7552eeb5c7401934f5._comment8
-rw-r--r--doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids/comment_2_d81cb9b47dea34b639dc250bb231010a._comment16
-rw-r--r--doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids/comment_3_8df00f0ed4a26f702e0935b366521530._comment164
-rw-r--r--doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids/comment_4_7eb33c23223dfc634eb3c9c6621f7f3e._comment12
-rw-r--r--doc/bugs/remote_not_showing_up_in_webapp.mdwn12
-rw-r--r--doc/bugs/remote_not_showing_up_in_webapp/comment_2_10638e99e2e11460f99266f56adbc1db._comment10
-rw-r--r--doc/bugs/remote_not_showing_up_in_webapp/comment_3_4aa72acc0938f7f824ba10f3f102e8bc._comment16
-rw-r--r--doc/bugs/removable_device_configurator_chokes_on_spaces.mdwn18
-rw-r--r--doc/bugs/rename:_permission_denied__44___after_direct_mode_switch.mdwn81
-rw-r--r--doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_1_14cec6448831c67794b62926a03b2fc5._comment13
-rw-r--r--doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_2_93af8f48a01b6e2d011bd6f60499ccd2._comment23
-rw-r--r--doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_3_f8fba1955e62360061613e5898b3d74e._comment16
-rw-r--r--doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_4_abffe1fb3b3e684b126e4768089dc5f4._comment8
-rw-r--r--doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_5_bccc53d2d6f659f21965042a057358f5._comment8
-rw-r--r--doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_6_ac8b3b042b882680f0eb0d53ade1ce15._comment14
-rw-r--r--doc/bugs/renaming_a_file_makes_annex_get_the_file__39__s_content_from_remote.mdwn27
-rw-r--r--doc/bugs/renaming_a_file_makes_annex_get_the_file__39__s_content_from_remote/comment_1_d6aad1831674586fe4cdf61dd2a4bbb9._comment15
-rw-r--r--doc/bugs/renaming_a_file_makes_annex_get_the_file__39__s_content_from_remote/comment_2_8591e174c1a8cddfae9371407a58ff1c._comment10
-rw-r--r--doc/bugs/repair_fails_when_home_on_seperate_partition.mdwn60
-rw-r--r--doc/bugs/repo_creation_fails_on_android_4.4.3.mdwn30
-rw-r--r--doc/bugs/repo_creation_fails_on_android_4.4.3/comment_1_01e638ec9c6d74966d76b6ceb7c06bad._comment26
-rw-r--r--doc/bugs/repo_creation_fails_on_android_4.4.3/comment_2_07c0f9387433b7107e9def2bfbed3039._comment8
-rw-r--r--doc/bugs/repo_creation_fails_on_android_4.4.3/comment_3_caf4f02677ea9e7fe28dbace99aa6860._comment8
-rw-r--r--doc/bugs/restart_daemon_required.mdwn22
-rw-r--r--doc/bugs/restart_daemon_required/comment_1_f79ac16cc9f1e3b08cd121bf5efb29c3._comment8
-rw-r--r--doc/bugs/restart_daemon_required/comment_2_50c1b268a3cc4514681059eabca674e3._comment8
-rw-r--r--doc/bugs/restart_daemon_required/comment_3_1716e0f3c7c44dc77ebf7f00fdd8f9e3._comment310
-rw-r--r--doc/bugs/restart_daemon_required/comment_4_3ce776786eca83fcb8ff94c8f6ff3eb9._comment15
-rw-r--r--doc/bugs/rsync_fails_with_sync_error:_syntax_or_usage_error_.mdwn85
-rw-r--r--doc/bugs/rsync_fails_with_sync_error:_syntax_or_usage_error_/comment_1_464d733de18f6ca438ebd84e88b8cee2._comment29
-rw-r--r--doc/bugs/rsync_remote_is_not_working.mdwn28
-rw-r--r--doc/bugs/rsync_remote_is_not_working/comment_1_8998edf856a411de1f90b27568628feb._comment20
-rw-r--r--doc/bugs/rsync_remote_shows_no_progress.mdwn15
-rw-r--r--doc/bugs/rsync_remote_shows_no_progress/comment_1_a7f5d646a924c462b987561cf6fc4318._comment8
-rw-r--r--doc/bugs/runs_of_of_memory_adding_2_million_files.mdwn17
-rw-r--r--doc/bugs/runs_of_of_memory_adding_2_million_files/comment_10_a201485bf41514fde7c61a4dcbb5064f._comment8
-rw-r--r--doc/bugs/runs_of_of_memory_adding_2_million_files/comment_1_8b60b7816b9bf2c8cdd21b5cae431555._comment8
-rw-r--r--doc/bugs/runs_of_of_memory_adding_2_million_files/comment_2_32908da23e4fb38a7d20b765a5ab4656._comment12
-rw-r--r--doc/bugs/runs_of_of_memory_adding_2_million_files/comment_3_3cff88b50eb3872565bccbeb6ee15716._comment27
-rw-r--r--doc/bugs/runs_of_of_memory_adding_2_million_files/comment_4_e991986eb8ae49d2e69f7ed7fd61485f._comment8
-rw-r--r--doc/bugs/runs_of_of_memory_adding_2_million_files/comment_5_241ad838135a7a377374ca9ba90aec5c._comment8
-rw-r--r--doc/bugs/runs_of_of_memory_adding_2_million_files/comment_6_744982b77cc867e9e3a7d638c7a653d6._comment12
-rw-r--r--doc/bugs/runs_of_of_memory_adding_2_million_files/comment_7_9add4ee13b7ea846e6495c28da214269._comment8
-rw-r--r--doc/bugs/runs_of_of_memory_adding_2_million_files/comment_8_7264b57f309d6e824c612eed8a088327._comment8
-rw-r--r--doc/bugs/runs_of_of_memory_adding_2_million_files/comment_9_27a31463bcf28b5c684bb483b46a3baf._comment8
-rw-r--r--doc/bugs/scp_interrupt_to_background.mdwn2
-rw-r--r--doc/bugs/set_metadata_on_wrong_files.mdwn90
-rw-r--r--doc/bugs/set_metadata_on_wrong_files/comment_1_074f124e5d313e90b3e9217325799587._comment8
-rw-r--r--doc/bugs/shared_cipher_for_S3_attempting_to_decrypt_a_non-encrypted_file.mdwn22
-rw-r--r--doc/bugs/shared_cipher_for_S3_attempting_to_decrypt_a_non-encrypted_file/comment_1_b42ff37be172ba841980c17ad6223e06._comment8
-rw-r--r--doc/bugs/shared_cipher_for_S3_attempting_to_decrypt_a_non-encrypted_file/comment_2_c0325903cdb8d24c72fd4e67e18fbdc8._comment14
-rw-r--r--doc/bugs/should_be_possible_to_use_ssh_hosts_from_.ssh__47__config.mdwn26
-rw-r--r--doc/bugs/should_be_possible_to_use_ssh_hosts_from_.ssh__47__config/comment_1_3dac095b7cf799e31925868d13888970._comment7
-rw-r--r--doc/bugs/should_be_possible_to_use_ssh_hosts_from_.ssh__47__config/comment_2_342b4913a063184650cdf4f541f7ea02._comment10
-rw-r--r--doc/bugs/show_version_without_having_to_be_in_a_git_repo.mdwn11
-rw-r--r--doc/bugs/signal_weirdness.mdwn2
-rw-r--r--doc/bugs/smarter_flood_filling.mdwn31
-rw-r--r--doc/bugs/softlink_mtime.mdwn54
-rw-r--r--doc/bugs/ssh-options_seems_to_be_ignored.mdwn48
-rw-r--r--doc/bugs/ssh-options_seems_to_be_ignored/comment_1_bd9062bd492a36f54883fa3635b1c35f._comment7
-rw-r--r--doc/bugs/ssh-options_seems_to_be_ignored/comment_2_77af42bd6017d9fa9d356014e62d8bcc._comment10
-rw-r--r--doc/bugs/ssh_connection_caching_broken_on_NTFS.mdwn66
-rw-r--r--doc/bugs/ssh_connection_caching_broken_on_NTFS/comment_1_54e7e12514f4c109fd57a4eb744b731a._comment14
-rw-r--r--doc/bugs/ssh_over_IPv6.mdwn29
-rw-r--r--doc/bugs/ssh_over_IPv6/comment_1_0287f73c44645a1f854ecfe4ddddb258._comment15
-rw-r--r--doc/bugs/ssh_over_IPv6/comment_2_cfa63d226ae411551a728af5ab043491._comment29
-rw-r--r--doc/bugs/ssh_portnum_bugs.mdwn15
-rw-r--r--doc/bugs/ssh_portnum_bugs/comment_1_2026785c06e99b55158cd65c221eb598._comment10
-rw-r--r--doc/bugs/ssh_portnum_bugs/comment_2_76551dfcd29b54814809c434d7cb64af._comment8
-rw-r--r--doc/bugs/ssh_portnum_bugs/comment_3_ab49a0e307a29c7c20627bbb3b10ab1d._comment8
-rw-r--r--doc/bugs/ssh_portnum_bugs/comment_4_e0d96a43208453dc29373d0e045751e3._comment8
-rw-r--r--doc/bugs/ssh_portnum_bugs/comment_5_9ed44cdb79224dac6b000983d77d53f3._comment8
-rw-r--r--doc/bugs/submodule_path_problem.mdwn56
-rw-r--r--doc/bugs/submodule_path_problem/comment_1_69aec9207d2e9da4bc042d3f4963d80e._comment48
-rw-r--r--doc/bugs/submodule_path_problem/comment_2_53d9eb28cb70b51637470175a80ddf35._comment8
-rw-r--r--doc/bugs/submodule_path_problem/comment_3_aa5e0f99000a5b4988bccbb2ca28353b._comment20
-rw-r--r--doc/bugs/submodule_path_problem/comment_4_ab1508a5a04e2106aad5e7985775a6fa._comment8
-rw-r--r--doc/bugs/submodule_path_problem/comment_5_8c7539d1c11b81f5d46aa8e1c61745ae._comment14
-rw-r--r--doc/bugs/submodule_path_problem/comment_6_cacc91afcb1739dfca3a60590bb70356._comment67
-rw-r--r--doc/bugs/subtle_build_issue_on_OSX_10.7_and_Haskell_Platform___40__if_you_have_the_32bit_version_installed__41__.mdwn50
-rw-r--r--doc/bugs/subtle_build_issue_on_OSX_10.7_and_Haskell_Platform___40__if_you_have_the_32bit_version_installed__41__/comment_1_6208e70a21a048d5423926d16e32d421._comment9
-rw-r--r--doc/bugs/subtle_build_issue_on_OSX_10.7_and_Haskell_Platform___40__if_you_have_the_32bit_version_installed__41__/comment_2_8765b6190e79251637bb59ba28f245c1._comment21
-rw-r--r--doc/bugs/sync_--content_tries_to_copy_content_to_metadata_only_repos.mdwn34
-rw-r--r--doc/bugs/sync_command_tries_to_connect_new_remote_despite_not_being_asked_to.mdwn46
-rw-r--r--doc/bugs/sync_command_tries_to_connect_new_remote_despite_not_being_asked_to/comment_1_dcd52b57192e83fe365f21dc12461008._comment10
-rw-r--r--doc/bugs/sync_does_not_commit_with_alwasycommit___61___false.mdwn90
-rw-r--r--doc/bugs/sync_does_not_commit_with_alwasycommit___61___false/comment_1_e6dc7fa1b0a131bb7533f8407e1b5510._comment8
-rw-r--r--doc/bugs/tahoe_remote_has_no_repair.mdwn27
-rw-r--r--doc/bugs/test_suite_failure_on_samba_mount.mdwn278
-rw-r--r--doc/bugs/test_suite_failure_on_samba_mount/comment_1_e074b20801b921ee2661025a050a8af2._comment12
-rw-r--r--doc/bugs/test_suite_shouldn__39__t_fail_silently.mdwn3
-rw-r--r--doc/bugs/tests_fail_when_there_is_no_global_.gitconfig_for_the_user.mdwn50
-rw-r--r--doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform.mdwn23
-rw-r--r--doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_1_20a6fe046111e9ae56fd4d9c9f41f536._comment8
-rw-r--r--doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_2_6fdc5f8b07908c6eda8a97690408f44e._comment45
-rw-r--r--doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_3_014474a133c7ff0131029d8721afc710._comment46
-rw-r--r--doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_4_9c537e251dc99667fe87870804d802c2._comment10
-rw-r--r--doc/bugs/the_tip_at_commit_6cecc26206c4a539999b04664136c6f785211a41_disables_the_watch_command_on_OSX.mdwn22
-rw-r--r--doc/bugs/three_character_directories_created.mdwn56
-rw-r--r--doc/bugs/three_character_directories_created/comment_1_dd91de24dab4f2eaded1f7d659869d4d._comment8
-rw-r--r--doc/bugs/three_character_directories_created/comment_2_f6375964a6c8bb1e6c5b7238effca66d._comment62
-rw-r--r--doc/bugs/three_character_directories_created/comment_3_776e0a9b938d8b260a5111594b442536._comment8
-rw-r--r--doc/bugs/three_character_directories_created/comment_4_e288bacdb336c4886adb6eeb4dca1e92._comment8
-rw-r--r--doc/bugs/three_character_directories_created/comment_5_359b80948ac92a0f1eb695599456486c._comment10
-rw-r--r--doc/bugs/three_way_sync_via_S3_and_Jabber.mdwn119
-rw-r--r--doc/bugs/three_way_sync_via_S3_and_Jabber/comment_10_fc5ec5505f141bb9135e772d1094bc4d._comment12
-rw-r--r--doc/bugs/three_way_sync_via_S3_and_Jabber/comment_11_0df2210c30dec6d88d7858d93eec19a3._comment10
-rw-r--r--doc/bugs/three_way_sync_via_S3_and_Jabber/comment_1_41682b2e72e657e0f23af244f8345e85._comment10
-rw-r--r--doc/bugs/three_way_sync_via_S3_and_Jabber/comment_2_c7b4ea9aea6839763eb8b89e8d6a5ad5._comment14
-rw-r--r--doc/bugs/three_way_sync_via_S3_and_Jabber/comment_3_063f5e5e554ad6710f16394906d87616._comment33
-rw-r--r--doc/bugs/three_way_sync_via_S3_and_Jabber/comment_4_197ad39b4a46936afeeb04eb26cf1ef3._comment138
-rw-r--r--doc/bugs/three_way_sync_via_S3_and_Jabber/comment_5_0b0d829ccd255be0177ae9d8f6b10e63._comment61
-rw-r--r--doc/bugs/three_way_sync_via_S3_and_Jabber/comment_6_37a8e19440c764317589bc4248cbccdf._comment10
-rw-r--r--doc/bugs/three_way_sync_via_S3_and_Jabber/comment_7_12eb333327d31ca2bfee3f3c5e26d641._comment24
-rw-r--r--doc/bugs/three_way_sync_via_S3_and_Jabber/comment_8_e6b1084b2f18d8e536c8692e165754a3._comment12
-rw-r--r--doc/bugs/three_way_sync_via_S3_and_Jabber/comment_9_2120a1c3e5f490a55f68bb1bef5efd0d._comment183
-rw-r--r--doc/bugs/tmp_file_handling.mdwn13
-rw-r--r--doc/bugs/tmp_file_handling/comment_1_0300c11ee3f94a9e7c832671e16f5511._comment13
-rw-r--r--doc/bugs/tmp_file_handling/comment_2_cc14c7a79a544e47654e4cd8abc85edd._comment8
-rw-r--r--doc/bugs/too_many_open_files_on_OSX.mdwn42
-rw-r--r--doc/bugs/too_many_open_files_on_OSX/comment_1_ef23a3c05a6bd187450e10c524d2ced9._comment8
-rw-r--r--doc/bugs/too_many_open_files_on_OSX/comment_2_798a02e42bfce56c50c9337a8111a57f._comment8
-rw-r--r--doc/bugs/too_many_ssh_connections_during_sync_of_gcrypt_remotes.mdwn27
-rw-r--r--doc/bugs/too_many_ssh_connections_during_sync_of_gcrypt_remotes/comment_1_8522285987f6d231c851861418af633a._comment24
-rw-r--r--doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems.mdwn1
-rw-r--r--doc/bugs/transferkey_fails_due_to_gpg.mdwn51
-rw-r--r--doc/bugs/transferkey_fails_due_to_gpg/comment_1_f6434400d528a0fa59c056995ff2e6f3._comment12
-rw-r--r--doc/bugs/transferkey_fails_due_to_gpg/comment_2_c540b05b62a3186a87efcb180ea2a52d._comment12
-rw-r--r--doc/bugs/transferkey_fails_due_to_gpg/comment_3_9ad2ef73169dbd2866da2f4259ab0f00._comment8
-rw-r--r--doc/bugs/transferkey_fails_due_to_gpg/comment_4_7631b8842efba6a4aad87386ce9443a7._comment8
-rw-r--r--doc/bugs/tweaks_to_directory_special_remote_doco.mdwn80
-rw-r--r--doc/bugs/typo_in___34__ready_to_add_remote_server__34___message.mdwn16
-rw-r--r--doc/bugs/unable_to_sync_complains_of_missing_git-upload_and_receive_pack.mdwn208
-rw-r--r--doc/bugs/unable_to_sync_complains_of_missing_git-upload_and_receive_pack/comment_1_8b0302bba2b99df0842dfead649080e7._comment8
-rw-r--r--doc/bugs/unannex_and_uninit_do_not_work_when_git_index_is_broken.mdwn17
-rw-r--r--doc/bugs/unannex_and_uninit_do_not_work_when_git_index_is_broken/comment_1_1931e733f0698af5603a8b92267203d4._comment8
-rw-r--r--doc/bugs/unannex_and_uninit_do_not_work_when_git_index_is_broken/comment_2_40920b88537b7715395808d8aa94bf03._comment8
-rw-r--r--doc/bugs/unannex_command_doesn__39__t_all_files.mdwn30
-rw-r--r--doc/bugs/unannex_removes_object_even_if_referred_to_by_others.mdwn20
-rw-r--r--doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_1_0ce72d0f67082f202cfa58b7c00f2fd3._comment39
-rw-r--r--doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_2_647f49ffcaa348660659f9954a59b3ae._comment16
-rw-r--r--doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_3_3f7f4b55b7ec2641a70109788e0b5672._comment10
-rw-r--r--doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_4_313d393c416495aa0f8573113e41c2f7._comment431
-rw-r--r--doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_5_c0e7742672db2629bd906cebefe74f72._comment10
-rw-r--r--doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_6_c56171665db3ed14109a09097d49ac5d._comment8
-rw-r--r--doc/bugs/unannex_vs_unlock_hook_confusion.mdwn15
-rw-r--r--doc/bugs/unfinished_repos_in_webapp.mdwn31
-rw-r--r--doc/bugs/unfinished_repos_in_webapp/comment_1_9628b100e39489be9f28ef75276a7341._comment11
-rw-r--r--doc/bugs/unfinished_repos_in_webapp/comment_2_ba0fbff536b1d067c4098db401dc49f2._comment10
-rw-r--r--doc/bugs/unfinished_repos_in_webapp/comment_3_fd554aa7d93117177784a29270ccf790._comment12
-rw-r--r--doc/bugs/unhappy_without_UTF8_locale.mdwn41
-rw-r--r--doc/bugs/uninit_and_indirect_don__39__t_work_on_android.mdwn23
-rw-r--r--doc/bugs/uninit_and_indirect_don__39__t_work_on_android/comment_1_fec69c4c41987b9469eaa8f745c0a124._comment8
-rw-r--r--doc/bugs/uninit_and_indirect_don__39__t_work_on_android/comment_2_54c3fa77a069b36d03c41aad08fee9af._comment8
-rw-r--r--doc/bugs/uninit_does_not_abort_when_hard_link_creation_fails.mdwn47
-rw-r--r--doc/bugs/uninit_does_not_work_in_old_repos.mdwn20
-rw-r--r--doc/bugs/uninit_does_not_work_in_old_repos/comment_1_bc0619c6e17139df74639448aa6a0f72._comment8
-rw-r--r--doc/bugs/uninit_loses_data_if_git-annex_add_didn__39__t_complete.mdwn15
-rw-r--r--doc/bugs/uninit_should_not_run_when_branch_git-annex_is_checked_out.mdwn15
-rw-r--r--doc/bugs/unlock_fails_silently_with_directory_symlinks.mdwn53
-rw-r--r--doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_.mdwn22
-rw-r--r--doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_1_a634a9f1c023bf836183de64abab1224._comment10
-rw-r--r--doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_2_d9ae61a7c3f1eb243ca650945b40f21d._comment19
-rw-r--r--doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_3_fe229c03c14e8eb2b57389e0e193ed99._comment8
-rw-r--r--doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_4_fa12afe295de63c4aa7eb043b715325a._comment15
-rw-r--r--doc/bugs/unlock_then_lock_of_uncommitted_file_loses_it.mdwn7
-rw-r--r--doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again.mdwn434
-rw-r--r--doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_10_51097a6b84edcc607abc0e6e21ca21f2._comment8
-rw-r--r--doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_1_c34a4009213c410bba3c147ae0552029._comment15
-rw-r--r--doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_2_634542867fd28962c47b7bc3ea022175._comment8
-rw-r--r--doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_3_301f3ff2d203ac4c58a037e553b2c14d._comment18
-rw-r--r--doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_4_82ecdc88ccc1f87386b128adc4ff9af4._comment14
-rw-r--r--doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_6_158b2ba3da815910505899606177d415._comment16
-rw-r--r--doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_6_b068924802f3917e3e005350cb0cc2a2._comment8
-rw-r--r--doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_7_f4772858c927d4a62edc3caf59b5da10._comment8
-rw-r--r--doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_8_d0923d2950357f4444c5ef94ff196ba3._comment8
-rw-r--r--doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_9_7fb30cb80aecc60e48c64846aa185206._comment9
-rw-r--r--doc/bugs/using_gpg_encryption_with_multiple_keys_fails.mdwn57
-rw-r--r--doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_1_584390159278577da78b05bc7bb0e673._comment10
-rw-r--r--doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_2_51855f5bb857e1b6bc5531cdd7073c31._comment10
-rw-r--r--doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_3_3a6ff3dbc24850b065d045c7c9398eb1._comment20
-rw-r--r--doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_4_84168b56288262e01280da59ffaf19f6._comment8
-rw-r--r--doc/bugs/using_old_remote_format_generates_irritating_output.mdwn2
-rw-r--r--doc/bugs/utf8.mdwn192
-rw-r--r--doc/bugs/utf8/comment_10_f298b8b480d3ab2dd9c279589afcd0ea._comment10
-rw-r--r--doc/bugs/utf8/comment_11_a8864a46f8154680beeea27449ac6f09._comment142
-rw-r--r--doc/bugs/utf8/comment_12_2202c3479d19d306f31aac5a47b55e7d._comment10
-rw-r--r--doc/bugs/utf8/comment_13_7044d2c5bb1c91ee37eb9868963a1ff2._comment41
-rw-r--r--doc/bugs/utf8/comment_14_656b3caa16ae93b092fb5804fa575a3b._comment8
-rw-r--r--doc/bugs/utf8/comment_15_25b3d4c47c45b72129b17b171a45c5f9._comment8
-rw-r--r--doc/bugs/utf8/comment_16_2aaab9253bbc75012292c7b5a7d55696._comment173
-rw-r--r--doc/bugs/utf8/comment_1_416ad6fb5f7379732129dc5283a7e550._comment23
-rw-r--r--doc/bugs/utf8/comment_2_cd55f6bbeb145fd554f331dcff64f5e1._comment10
-rw-r--r--doc/bugs/utf8/comment_3_bb583a419d6fa4e33e5364c4468b35c6._comment8
-rw-r--r--doc/bugs/utf8/comment_4_cd8a22cfb70d9d21f0a5339ccc52ee93._comment14
-rw-r--r--doc/bugs/utf8/comment_5_14eefd4bee283802e9c462fa20b7835c._comment19
-rw-r--r--doc/bugs/utf8/comment_6_58d8b5bdb9f11e8c344e86a675a075dd._comment11
-rw-r--r--doc/bugs/utf8/comment_7_00fa9672ce55b6bfa885b8a13287ac25._comment10
-rw-r--r--doc/bugs/utf8/comment_8_a01e26fa0fafbc291020f53dbfdf6443._comment10
-rw-r--r--doc/bugs/utf8/comment_9_b7c084be01ce985be51e48503fcba468._comment8
-rw-r--r--doc/bugs/uuid.log_trust.log_and_remote.log_merge_wackiness.mdwn36
-rw-r--r--doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash.mdwn13
-rw-r--r--doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_1_ffc5f79368b8927817e0e35a7a8f057b._comment12
-rw-r--r--doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_2_1382b486d198d707db760ae119f33ad1._comment8
-rw-r--r--doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_3_3c4074a1d4d7f63f6c07a05ca9717ce8._comment8
-rw-r--r--doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_4_deb848e50f6767d8a5f4348137744ec2._comment8
-rw-r--r--doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_5_b426c4569b7a788fbf963f787590e051._comment10
-rw-r--r--doc/bugs/version_doesn__39__t_show___34__Feeds__34___but_podcasting_feature_working.mdwn28
-rw-r--r--doc/bugs/version_doesn__39__t_show___34__Feeds__34___but_podcasting_feature_working/comment_1_ce06ba4f65f322362b23797f6190c7c3._comment17
-rw-r--r--doc/bugs/vicfg_and_description_often_not_propagated.mdwn154
-rw-r--r--doc/bugs/vicfg_and_description_often_not_propagated/comment_1_60c5ba2de0c8b9b4538a4abd146007f6._comment8
-rw-r--r--doc/bugs/vicfg_and_description_often_not_propagated/comment_2_d56aed617e0791aa17d9f37c8d3fd317._comment12
-rw-r--r--doc/bugs/view_logs_fails:_Internal_Server_Error__internal_liftAnnex.mdwn20
-rw-r--r--doc/bugs/view_logs_fails:_Internal_Server_Error__internal_liftAnnex/comment_1_57547f9a480df2c3f7b3997b0fb7039a._comment12
-rw-r--r--doc/bugs/view_logs_fails:_Internal_Server_Error__internal_liftAnnex/comment_2_99f12da3ef01141dc7a9105fcf966793._comment10
-rw-r--r--doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android.mdwn24
-rw-r--r--doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_1_e8866dc15f8fc049229e7451addad1d5._comment12
-rw-r--r--doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_2_ee616b0251ffaace9844cfd7af896c35._comment10
-rw-r--r--doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_3_6b8bd314b647ea3a485f5faf4856f9a9._comment35
-rw-r--r--doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_4_7009b6727ba40bc9bd1b1f939e75d093._comment8
-rw-r--r--doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_5_00ddf7ade6cca758afa838be0b9588cb._comment20
-rw-r--r--doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_6_6137ef0ad01d5600dab6fccbeed9a88b._comment14
-rw-r--r--doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_7_4b79d7ea338d9f70eb80b8cc2c5a21e4._comment8
-rw-r--r--doc/bugs/watch_command_on_OSX_--_hangs_with_a_small_repo.mdwn41
-rw-r--r--doc/bugs/watch_command_on_OSX_--_hangs_with_a_small_repo/comment_1_63f04694610839db0c2381005b15da35._comment14
-rw-r--r--doc/bugs/watch_command_on_OSX_--_hangs_with_a_small_repo/comment_2_8afe4720e301cf7ccf11ff0a23261936._comment8
-rw-r--r--doc/bugs/watch_command_on_OSX_10.7.mdwn37
-rw-r--r--doc/bugs/watcher_commits_unlocked_files.mdwn37
-rw-r--r--doc/bugs/watcher_commits_unlocked_files/comment_1_f70e1912fde0eee59e208307df06b503._comment8
-rw-r--r--doc/bugs/webapp_does_not_start_on_android.mdwn22
-rw-r--r--doc/bugs/webapp_doesn__39__t_start_when___126____47__annex_isn__39__t_a_git_repo.mdwn29
-rw-r--r--doc/bugs/webapp_hang.mdwn144
-rw-r--r--doc/bugs/webapp_hang/comment_1_08aa908a64d0fe2d50438d01545c3f01._comment8
-rw-r--r--doc/bugs/webapp_hang/comment_2_2a21ac5657128a454f9deb77c4d18057._comment21
-rw-r--r--doc/bugs/webapp_missing_on_redhat.mdwn21
-rw-r--r--doc/bugs/webapp_on_windows_7_64_bit_fail_to_add_server_repo.mdwn76
-rw-r--r--doc/bugs/webapp_raise_an_internal_server_error_upon_creating_the_initial_repo.mdwn26
-rw-r--r--doc/bugs/webapp_raise_an_internal_server_error_upon_creating_the_initial_repo/comment_1_1bcf0f565eacac851bd21cd428c8e0a5._comment33
-rw-r--r--doc/bugs/webapp_raise_an_internal_server_error_upon_creating_the_initial_repo/comment_2_7dd2483b5b07df8f3b37a34651c05962._comment8
-rw-r--r--doc/bugs/webapp_requires_reload_for_notification_bubbles.mdwn41
-rw-r--r--doc/bugs/webapp_requires_reload_for_notification_bubbles/comment_1_b15480e5dec1ffbebb8cde1ca8d7c9d5._comment11
-rw-r--r--doc/bugs/webapp_requires_reload_for_notification_bubbles/comment_2_8dad57a852e1db804aa38f90f3bb398b._comment8
-rw-r--r--doc/bugs/webapp_shows___34__Added_x_files__34___a_bit_ugly.mdwn15
-rw-r--r--doc/bugs/webapp_takes_100__37___of_the_cpu.mdwn41
-rw-r--r--doc/bugs/webapp_takes_100__37___of_the_cpu/comment_1_6312860de9f30cbb05762cd67edc705a._comment8
-rw-r--r--doc/bugs/webapp_usability:_put_the_notices_on_the_right.mdwn18
-rw-r--r--doc/bugs/webapp_usability:_put_the_notices_on_the_right/comment_1_ec7a444e09a028b5225bd41fb83442e8._comment9
-rw-r--r--doc/bugs/webdav_fails___40__server:_radicale_0.9-1__41__.mdwn45
-rw-r--r--doc/bugs/webdav_fails___40__server:_radicale_0.9-1__41__/comment_1_487bf264afeef2a3b0a61d306ebfc3c5._comment12
-rw-r--r--doc/bugs/webdav_special_remote_fails_on_android___40__box.com__41__.mdwn32
-rw-r--r--doc/bugs/webdav_special_remote_fails_on_android___40__box.com__41__/comment_1_f57757b4bcc4ace73bf660419d944c33._comment8
-rw-r--r--doc/bugs/weird_local_clone_confuses.mdwn20
-rw-r--r--doc/bugs/weird_unicode_bug_on_windows.mdwn17
-rw-r--r--doc/bugs/weird_unicode_bug_on_windows/comment_1_69af9bd8c7898fccc2219edd860d547b._comment12
-rw-r--r--doc/bugs/whereis_does_not_work_in_direct_mode.mdwn91
-rw-r--r--doc/bugs/whereis_does_not_work_in_direct_mode/comment_1_f119d2b322a7b33c08b8187deba690c2._comment17
-rw-r--r--doc/bugs/whereis_does_not_work_in_direct_mode/comment_2_d1005e29c32bddad109dd426d4dd8803._comment14
-rw-r--r--doc/bugs/whereis_does_not_work_in_direct_mode/comment_3_44dd6e0c6e7a7abd6483a4367baa7f0f._comment10
-rw-r--r--doc/bugs/whereis_does_not_work_in_direct_mode/comment_4_f334a85d6dd6c4971f0609ae0831766a._comment23
-rw-r--r--doc/bugs/whereis_does_not_work_in_direct_mode/comment_5_00926da970a20de67ba7719610f17142._comment12
-rw-r--r--doc/bugs/whereis_does_not_work_in_direct_mode/comment_6_7f68d9daa542f992c61b7b7c36819933._comment49
-rw-r--r--doc/bugs/whereis_outputs_no_informaiton_for_unlocked_files.mdwn2
-rw-r--r--doc/bugs/windows_fails_test___34__recoverEncode__34__.mdwn39
-rw-r--r--doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_1_424b3536e21e02f192f7f2b8e833ed18._comment67
-rw-r--r--doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_2_78db183aa401e2023d7faec5f7a4a573._comment10
-rw-r--r--doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_3_ed2da19eaf0bd0864f6b28816a79bc23._comment8
-rw-r--r--doc/bugs/windows_install_failure.mdwn3
-rw-r--r--doc/bugs/windows_isExecutable_fail.mdwn27
-rw-r--r--doc/bugs/windows_port_-_can__39__t_directly_access_files.mdwn250
-rw-r--r--doc/bugs/windows_port_-_can__39__t_directly_access_files/comment_1_03ef9d33839173044dcc4f2b37f575d2._comment8
-rw-r--r--doc/bugs/windows_port_-_can__39__t_directly_access_files/comment_2_c65e5491c82908af46fe2c97e048d210._comment20
-rw-r--r--doc/bugs/windows_port_-_git_annex_add_hangs_when_adding_17_files_at_once_or_more_.mdwn197
-rw-r--r--doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_.mdwn559
-rw-r--r--doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_10_b4f5e2d6a0d690f6b0089fa80a3c920b._comment8
-rw-r--r--doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_1_c2092add1430667108a3fdc5e1c9b5f5._comment8
-rw-r--r--doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_2_f0ea453951daf84dbddc653ac64822b6._comment8
-rw-r--r--doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_3_35a8be5ecc9d1b72c38f8ddb47678160._comment8
-rw-r--r--doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_4_29e72997b88f91f84639587b4cede34c._comment76
-rw-r--r--doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_5_2de7f6532de4cbc21737ce53a89d6525._comment10
-rw-r--r--doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_6_80d130b5af829763be77c61a9c5ca306._comment29
-rw-r--r--doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_7_ec199db851952b40e8b18922da574ea4._comment8
-rw-r--r--doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_8_d269fcadea9d5a668e3c6d6cf019f56a._comment353
-rw-r--r--doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_9_908d1b981d56107f29d8972bf11aefc8._comment12
-rw-r--r--doc/bugs/wrong_program_path_in___126____47__.config__47__git-annex__47__program.mdwn20
-rw-r--r--doc/bugs/wrong_program_path_in___126____47__.config__47__git-annex__47__program/comment_1_44c11918d00ead38d40556aade98c0af._comment12
-rw-r--r--doc/bugs/xdg-user-dir_error.mdwn8
-rw-r--r--doc/bugs/xmpp_needs_one_account_per_distinct_repository.mdwn107
-rw-r--r--doc/bugs/xmpp_needs_one_account_per_distinct_repository/comment_1_820732c4dcb15186b4f635c50fdb0805._comment19
-rw-r--r--doc/bugs/yesod-default_is_needed_as_a_dependancy.mdwn10
-rw-r--r--doc/bugs/yesod-form_missing.mdwn23
-rw-r--r--doc/bugs/youtube_web_download_gives_Prelude.undefined_in_webapp.mdwn27
-rw-r--r--doc/builds.mdwn35
-rw-r--r--doc/chunking.mdwn43
-rw-r--r--doc/coding_style.mdwn8
-rw-r--r--doc/coding_style/comment_1_70521cf79ad06832b1d73fc2c20c68ec._comment20
-rw-r--r--doc/coding_style/comment_2_a820b7c8ae7c2290eb000f61bdb5c514._comment8
-rw-r--r--doc/contact.mdwn2
-rw-r--r--doc/contribute.mdwn39
-rw-r--r--doc/copies.mdwn3
-rw-r--r--doc/design/assistant.mdwn2
-rw-r--r--doc/design/assistant/blog/day_12__freebsd_redux/comment_3_5ab7808595e3b51ca4141d15fdd44743._comment7
-rw-r--r--doc/design/assistant/blog/day_232__headless_webapp/comment_5_7e51a197ff9970ae50cf47bd3a922257._comment18
-rw-r--r--doc/design/assistant/chunks.mdwn264
-rw-r--r--doc/design/assistant/deltas.mdwn24
-rw-r--r--doc/design/assistant/inotify/comment_7_00809aaad6b68f189a9cc42af810a0a6._comment8
-rw-r--r--doc/design/assistant/polls/Android_default_directory.mdwn2
-rw-r--r--doc/design/assistant/polls/prioritizing_special_remotes.mdwn2
-rw-r--r--doc/design/assistant/progressbars.mdwn4
-rw-r--r--doc/design/assistant/sshpassword.mdwn53
-rw-r--r--doc/design/assistant/sshpassword/comment_1_24399abe0a0c1de271490ee15e064760._comment8
-rw-r--r--doc/design/assistant/sshpassword/comment_2_36a811bca209c7ac8a44d64bf8bc5bf3._comment8
-rw-r--r--doc/design/assistant/syncing/efficiency.mdwn4
-rw-r--r--doc/design/assistant/telehash.mdwn12
-rw-r--r--doc/design/caching_database.mdwn20
-rw-r--r--doc/design/external_special_remote_protocol.mdwn62
-rw-r--r--doc/design/git-remote-daemon.mdwn173
-rw-r--r--doc/design/git-remote-daemon/comment_1_bfa8f33a3fdb6e271dfbdd0378b5d364._comment16
-rw-r--r--doc/design/metadata.mdwn2
-rw-r--r--doc/design/metadata/comment_6_fa51ae544b193122334dbae7960ab3d9._comment15
-rw-r--r--doc/design/metadata/comment_7_04cd255a516c8520a7bc1a8fad253533._comment8
-rw-r--r--doc/design/metadata/comment_8_0a7e55e7626f72f63966fa1e1d2cf100._comment8
-rw-r--r--doc/design/metadata/comment_9_f0bb62c885a925e0da5ae8ce3c5e9003._comment10
-rw-r--r--doc/design/requests_routing.mdwn100
-rw-r--r--doc/design/requests_routing/comment_1_421b14a4dd9d6c431e00333057df1627._comment10
-rw-r--r--doc/design/requests_routing/simroutes.hs402
-rw-r--r--doc/design/roadmap.mdwn56
-rw-r--r--doc/design/v6.mdwn233
-rw-r--r--doc/design/v6/comment_1_b7b4819211910556838ec37bc2b6b37b._comment14
-rw-r--r--doc/design/v6/comment_2_8f35254d2cd5d0c273d5392ddd857c2d._comment24
-rw-r--r--doc/devblog.mdwn3
-rw-r--r--doc/devblog/day_-4__forgetting/comment_8_3f7045a00905b4287d950b08d5a77a82._comment9
-rw-r--r--doc/devblog/day_-4__forgetting/comment_9_d9121a5172f02df63364f19eae87d011._comment8
-rw-r--r--doc/devblog/day_133__db_and_bugfixes.mdwn2
-rw-r--r--doc/devblog/day_139-140__traveling.mdwn17
-rw-r--r--doc/devblog/day_141__f-droid_sprint.mdwn3
-rw-r--r--doc/devblog/day_141__f-droid_sprint/comment_1_1cc76207020ac478747117c76d7b5f9c._comment8
-rw-r--r--doc/devblog/day_142__digging_out.mdwn13
-rw-r--r--doc/devblog/day_143__foolish_hiatus.mdwn20
-rw-r--r--doc/devblog/day_144__catching_up.mdwn12
-rw-r--r--doc/devblog/day_144__catching_up/comment_1_311a7245dd12f1a7e432168d16041348._comment8
-rw-r--r--doc/devblog/day_145__a_plan.mdwn16
-rw-r--r--doc/devblog/day_145__a_plan/comment_1_c0ceea77443be1172527ed8549f000a4._comment10
-rw-r--r--doc/devblog/day_146__halfway_to_git-remote-daemon.mdwn17
-rw-r--r--doc/devblog/day_147__git-annex_remotedaemon.mdwn5
-rw-r--r--doc/devblog/day_148__too_many_documents.mdwn8
-rw-r--r--doc/devblog/day_149__remote_control_working.mdwn15
-rw-r--r--doc/devblog/day_149__signal.mdwn16
-rw-r--r--doc/devblog/day_151__birthday_bug.mdwn18
-rw-r--r--doc/devblog/day_152__more_ssh_connection_caching.mdwn37
-rw-r--r--doc/devblog/day_153__remotedaemon_has_landed.mdwn10
-rw-r--r--doc/devblog/day_153__remotedaemon_has_landed/comment_1_f19ae6b3d6f33a68e4ffe0c32f788745._comment13
-rw-r--r--doc/devblog/day_153__remotedaemon_has_landed/comment_2_fbf0c50f772e958af638d2b72dac73f5._comment10
-rw-r--r--doc/devblog/day_154__catching_up.mdwn13
-rw-r--r--doc/devblog/day_155__missing_bits.mdwn27
-rw-r--r--doc/devblog/day_155__missing_bits/comment_1_76424498600ba603946035efffb88023._comment8
-rw-r--r--doc/devblog/day_156__release_day.mdwn14
-rw-r--r--doc/devblog/day_157__upgrade_checking.mdwn22
-rw-r--r--doc/devblog/day_158__enroute_to_Brazil.mdwn10
-rw-r--r--doc/devblog/day_159__tmp_file_cleanup.mdwn12
-rw-r--r--doc/devblog/day_160__.mdwn20
-rw-r--r--doc/devblog/day_161__routing_design.mdwn13
-rw-r--r--doc/devblog/day_162__routing_sim_and_massive_contribution_landed.mdwn17
-rw-r--r--doc/devblog/day_163__request_and_routing_design.mdwn3
-rw-r--r--doc/devblog/day_164__back.mdwn17
-rw-r--r--doc/devblog/day_165__sshpassword_merged.mdwn18
-rw-r--r--doc/devblog/day_166__catching_up.mdwn40
-rw-r--r--doc/devblog/day_167__growing_the_community_of_git-annex_contributors.mdwn11
-rw-r--r--doc/devblog/day_168__backlog_continued.mdwn16
-rw-r--r--doc/devblog/day_169-171__juggling.mdwn14
-rw-r--r--doc/devblog/day_172__.mdwn7
-rw-r--r--doc/devblog/day_173-174__android_rebootstrap.mdwn8
-rw-r--r--doc/devblog/day_175__encoding_day.mdwn20
-rw-r--r--doc/devblog/day_176__mostly_a_day_off.mdwn8
-rw-r--r--doc/devblog/day_177__enabling.mdwn21
-rw-r--r--doc/devblog/day_177__enabling/comment_1_820d29f84dade09b0e7bb7435c52fcb8._comment12
-rw-r--r--doc/devblog/day_178-179__screencast_and_what_next.mdwn12
-rw-r--r--doc/devblog/day_178-179__screencast_and_what_next/comment_1_eeba788fed45cb22f9cc2a738ceaa074._comment8
-rw-r--r--doc/devblog/day_178-179__screencast_and_what_next/comment_2_d44e67e34615c7b00e29f307556cdd06._comment8
-rw-r--r--doc/devblog/day_180__porting.mdwn13
-rw-r--r--doc/devblog/day_180__porting/comment_1_133875f4435a298b85ddfb8a2cc11a7a._comment9
-rw-r--r--doc/devblog/day_181__tricky_merge.mdwn8
-rw-r--r--doc/devblog/day_182__service.mdwn6
-rw-r--r--doc/devblog/day_183__rubbing_sticks_together.mdwn23
-rw-r--r--doc/devblog/day_184__windows_month.mdwn22
-rw-r--r--doc/devblog/day_185__service.mdwn6
-rw-r--r--doc/devblog/day_186__cracked_it.mdwn8
-rw-r--r--doc/devblog/day_186__cracked_it/comment_1_288b736adf392acd0f45667b2980138d._comment11
-rw-r--r--doc/devblog/day_186__cracked_it/comment_2_d1d79e93ac420f6b3a6f8a622e8e00bd._comment8
-rw-r--r--doc/devblog/day_186__cracked_it/comment_3_8ca17a51b10b4e4a63d0672d5ce29024._comment8
-rw-r--r--doc/devblog/day_187__release_prep.mdwn10
-rw-r--r--doc/devblog/day_187__release_prep/comment_1_206692d16177c2a9ca11c0eeff545697._comment13
-rw-r--r--doc/devblog/day_187__release_prep/comment_2_961fb35d9cf7d5e518f8d0bddb8626a6._comment8
-rw-r--r--doc/devblog/day_188__back_sans_laptop.mdwn5
-rw-r--r--doc/devblog/day_189__finally_working_again.mdwn18
-rw-r--r--doc/devblog/day_190__fun_fixes.mdwn13
-rw-r--r--doc/devblog/day_191__semidistracted.mdwn7
-rw-r--r--doc/devblog/day_192__release_day.mdwn4
-rw-r--r--doc/devblog/day_193-194__ugly_bug.mdwn37
-rw-r--r--doc/devblog/day_195-196__catching_up.mdwn13
-rw-r--r--doc/devblog/day_197__autobuilder_rescuscitation.mdwn14
-rw-r--r--doc/devblog/day_198__branching_out.mdwn23
-rw-r--r--doc/devblog/day_198__branching_out/comment_1_91ce3dc707ba1ba7c5d9e57e20ffce40._comment8
-rw-r--r--doc/devblog/day_199__ten_minute_cycle.mdwn6
-rw-r--r--doc/devblog/day_200__one_year_along.mdwn17
-rw-r--r--doc/devblog/day_201__chunky.mdwn12
-rw-r--r--doc/devblog/day_202__new_chunk_groundwork.mdwn6
-rw-r--r--doc/devblog/day_203__in_the_weeds.mdwn39
-rw-r--r--doc/devblog/day_204__mowing.mdwn64
-rw-r--r--doc/devblog/day_205__incremental.mdwn21
-rw-r--r--doc/devblog/day_206__zap.mdwn83
-rw-r--r--doc/devblog/day_207__at_last.mdwn34
-rw-r--r--doc/devblog/day_208__testremote.mdwn10
-rw-r--r--doc/devblog/day_209__mass_conversion.mdwn32
-rw-r--r--doc/devblog/day_210__conversion_and_digression.mdwn14
-rw-r--r--doc/devblog/day_211__conversion_complete.mdwn12
-rw-r--r--doc/devblog/day_212__webdav_rewrite.mdwn18
-rw-r--r--doc/devblog/day_213__newchunks_merged.mdwn15
-rw-r--r--doc/devblog/day_214-215__wrapping_up_recent_work.mdwn16
-rw-r--r--doc/devblog/day_216__various_minor_bugs.mdwn16
-rw-r--r--doc/devblog/day_216__various_minor_bugs/comment_1_0d0a0e75b9446f8a1c4cc43f36569473._comment8
-rw-r--r--doc/devblog/day_216__various_minor_bugs/comment_2_6b06b3f46f20a6d2e60684d1d59fca07._comment8
-rw-r--r--doc/devblog/day_216__various_minor_bugs/comment_3_05177e2ed414d22711dcec57a614e38c._comment8
-rw-r--r--doc/devblog/day_217__autobuilders.mdwn10
-rw-r--r--doc/devblog/day_218__scary_locking.mdwn24
-rw-r--r--doc/devblog/day_219__catching_up_and_looking_back.mdwn109
-rw-r--r--doc/devblog/day_219__catching_up_and_looking_back/comment_1_16b13b2510183a9da5f960ae5765e581._comment10
-rw-r--r--doc/devblog/day_219__catching_up_and_looking_back/comment_2_460c064bebb5061fcba2a6c79f039362._comment19
-rw-r--r--doc/devblog/day_219__catching_up_and_looking_back/comment_3_9699d5a9de5ea64fbc876352e20261c4._comment8
-rw-r--r--doc/devblog/day_219__catching_up_and_looking_back/comment_4_23c4ede3db0ea8165311466881cfa6a2._comment10
-rw-r--r--doc/devblog/day_219__catching_up_and_looking_back/comment_5_7997305d7ec7db072b78dd0c31ecd824._comment8
-rw-r--r--doc/devblog/day_220__working_through_backlog.mdwn14
-rw-r--r--doc/devblog/day_221__another_fine_day_of_bugfixing.mdwn10
-rw-r--r--doc/devblog/day_222_preparing_for_debian_release.mdwn12
-rw-r--r--doc/devblog/day_223__partial_commit_problem.mdwn26
-rw-r--r--doc/devblog/day_224-226__long_rainy_slog.mdwn14
-rw-r--r--doc/devblog/day_227__info.mdwn33
-rw-r--r--doc/devblog/day_229__S3_multipart.mdwn11
-rw-r--r--doc/devblog/day_230__S3_multipart_round_2.mdwn9
-rw-r--r--doc/devblog/day_231__S3_multipart_wrapped_up.mdwn13
-rw-r--r--doc/devblog/day_232__OSX_Yosemite.mdwn6
-rw-r--r--doc/devblog/day_233__direct_mode_proxy.mdwn29
-rw-r--r--doc/devblog/day_234__undo_undo.mdwn6
-rw-r--r--doc/devblog/day_235__thanksgiving_backlog.mdwn18
-rw-r--r--doc/devblog/day_236__release_day.mdwn10
-rw-r--r--doc/devblog/day_237__extending_addurl.mdwn14
-rw-r--r--doc/devblog/day_238__extending_addurl_further.mdwn67
-rw-r--r--doc/devblog/day_239-240__bittorrent_remote.mdwn16
-rw-r--r--doc/devblog/day_241-242__end_of_year_cleanup.mdwn22
-rw-r--r--doc/devblog/day_243__android_5.mdwn16
-rw-r--r--doc/devblog/day_243__android_5/comment_1_59a139108f4cf20dd7443a5fa767f614._comment9
-rw-r--r--doc/devblog/day_244__relative_paths.mdwn14
-rw-r--r--doc/devblog/day_245__yak_shaving.mdwn9
-rw-r--r--doc/devblog/day_246__old_todos.mdwn9
-rw-r--r--doc/devblog/day_247__hooks_and_large_files_on_windows.mdwn30
-rw-r--r--doc/devblog/day_248__workload_tuning.mdwn54
-rw-r--r--doc/devblog/day_249_onward.mdwn28
-rw-r--r--doc/devblog/day_249_onward/comment_1_80af832a132ee37a470d0586ae751f2a._comment10
-rw-r--r--doc/devblog/day_249_onward/comment_2_ada958a8df4da36b25a456a7700b310f._comment8
-rw-r--r--doc/devblog/day_250__backog_bugfixing.mdwn10
-rw-r--r--doc/devblog/day_251-252__dusting_off_the_roadmap.mdwn12
-rw-r--r--doc/devblog/day_253__ssh-options.mdwn5
-rw-r--r--doc/devblog/day__228_new_AWS.mdwn13
-rw-r--r--doc/direct_mode.mdwn31
-rw-r--r--doc/direct_mode/comment_12_7d507b6f87085a19d8dd5014f580922b._comment24
-rw-r--r--doc/direct_mode/comment_13_5169c5541970d3b3bc1e080e07539b22._comment8
-rw-r--r--doc/direct_mode/comment_14_03a02e689d92faa596de98e02b2ffe28._comment10
-rw-r--r--doc/direct_mode/comment_15_599b2285d24ae1244a1945d572b2c397._comment8
-rw-r--r--doc/download.mdwn5
-rw-r--r--doc/encryption.mdwn22
-rw-r--r--doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__.mdwn3
-rw-r--r--doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_1_924521ad5972046bac44d2e04ec296c7._comment10
-rw-r--r--doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_2_e2a7f34a3ccc1b6467e6da611c067d66._comment8
-rw-r--r--doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_3_f9a369a6ac69f091e6128990274d3228._comment10
-rw-r--r--doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_4_91b422f8d55b68077245c606c4f7f87c._comment28
-rw-r--r--doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_5_f6128fe75ff3453747f69f12e0fd0a5b._comment12
-rw-r--r--doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_6_9b90b4031a5ed26c375903b33ed65a10._comment17
-rw-r--r--doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_7_acd64ce1b08a97ddf730622272e9f611._comment14
-rw-r--r--doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_8_9baacb14fc5eb449cb13e0b4a4995fb0._comment8
-rw-r--r--doc/forum/ARM_build_on_Zyxel_NAS.mdwn15
-rw-r--r--doc/forum/ARM_build_on_Zyxel_NAS/comment_1_38f38755c0afd76a2b968836fec395e8._comment11
-rw-r--r--doc/forum/ARM_build_on_Zyxel_NAS/comment_2_44c8f1af0cbe9ad51794e6d8d16be627._comment9
-rw-r--r--doc/forum/ARM_build_on_Zyxel_NAS/comment_3_b4f6e5ac672e8ece36cceb74ff3315dd._comment8
-rw-r--r--doc/forum/A_tiny_filesystem__63__.mdwn7
-rw-r--r--doc/forum/A_tiny_filesystem__63__/comment_1_993e3f5dbe4bcbb5b7bd9e08ab9554f3._comment8
-rw-r--r--doc/forum/A_tiny_filesystem__63__/comment_2_af57591d42868c8aa1cc1eda43ca8b98._comment8
-rw-r--r--doc/forum/A_tiny_filesystem__63__/comment_3_3869c0472b50d7cf5e29ac0720f4f20f._comment10
-rw-r--r--doc/forum/Add_annex_files_outside_git_root_directory.mdwn24
-rw-r--r--doc/forum/Add_annex_files_outside_git_root_directory/comment_1_3d7c8917633a6632f22385b8f7a98ccf._comment18
-rw-r--r--doc/forum/Add_annex_files_outside_git_root_directory/comment_2_312a57883d809857a69216fa47e04f17._comment15
-rw-r--r--doc/forum/Alternative_to_XMPP_on_Windows__63__.mdwn1
-rw-r--r--doc/forum/Alternative_to_XMPP_on_Windows__63__/comment_1_4084abf5b26fcc92e577eea34c331a15._comment8
-rw-r--r--doc/forum/Ambigous_argument___40__unknown_revision_or_path__41__.mdwn148
-rw-r--r--doc/forum/Android:_Encrypted_Remotes__63__.mdwn3
-rw-r--r--doc/forum/Android:_Encrypted_Remotes__63__/comment_1_6b16cd372a9bd4f99d4c8b09a82ce3ed._comment10
-rw-r--r--doc/forum/Android_version_does_not_sync.mdwn23
-rw-r--r--doc/forum/Android_version_does_not_sync/comment_1_ed9e33eef2c6d651847dca9d3f7a63f6._comment8
-rw-r--r--doc/forum/Android_version_does_not_sync/comment_2_4eafd3e989611f835c489b379bd6ec8a._comment8
-rw-r--r--doc/forum/Android_version_does_not_sync/comment_3_2a4efec37015ea44509e7ed16b36a72d._comment13
-rw-r--r--doc/forum/Annex_slow_on_Windows__47__direct_mode.mdwn11
-rw-r--r--doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_1_d80839f4582fc2a6269db31e30e1dbab._comment9
-rw-r--r--doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_2_593e1e01b70a2b6a15ad6bca09a80c7b._comment8
-rw-r--r--doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_3_c4e4c596f31aa97645fe1e1527dc2c31._comment12
-rw-r--r--doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_4_92db0b99ada9af15a5383da41397ebd7._comment19
-rw-r--r--doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_5_3d628c9db9ebdfd5bff92af105c47719._comment13
-rw-r--r--doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_6_db7965fa928c093233769ed52b2fcd43._comment10
-rw-r--r--doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_7_674f52c5e5484207db403b18efc986c6._comment8
-rw-r--r--doc/forum/Archive_USB_drive_not_working_as_documented.mdwn171
-rw-r--r--doc/forum/Archive_USB_drive_not_working_as_documented/comment_1_59de1e101e5e427abb1df3a71c6f1b04._comment23
-rw-r--r--doc/forum/Archive_USB_drive_not_working_as_documented/comment_2_3541fdd31d398a494a8fa452ac2c277f._comment14
-rw-r--r--doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas.mdwn21
-rw-r--r--doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas/comment_1_a8effe196e4a040630d183803768c5a1._comment10
-rw-r--r--doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas/comment_2_9f032e43b132bcad656e1337ab2551ad._comment10
-rw-r--r--doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas/comment_3_5a09f65c77dce3c62236c13aa90a1191._comment10
-rw-r--r--doc/forum/Auto_update_not_working.mdwn6
-rw-r--r--doc/forum/Automatically_dropping_files.mdwn7
-rw-r--r--doc/forum/Automatically_dropping_files/comment_1_f5fc608f9cb0edf3272b586b62050637._comment12
-rw-r--r--doc/forum/Bare_repo_on_USB_drive_not_providing_files.mdwn17
-rw-r--r--doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_1_0738174fb6984b777ec0a221502106ac._comment30
-rw-r--r--doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_2_1e07d1a9ddb88c0e1d84d8d88b7b4cc4._comment10
-rw-r--r--doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_2_65d007284287e709a8f6f07dd8630f15._comment12
-rw-r--r--doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_4_3bbce5d12ece481b669be10ef9a70f40._comment28
-rw-r--r--doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_5_5e6202c319e75a9758bb8c2f32152e0f._comment16
-rw-r--r--doc/forum/Basic_set_up_with_one_remote.mdwn14
-rw-r--r--doc/forum/Basic_set_up_with_one_remote/comment_1_3ad06a0dbebf62e6440f549e77af59b6._comment15
-rw-r--r--doc/forum/Basic_set_up_with_one_remote/comment_2_59e18e759c907b8adabf8c34eef08065._comment10
-rw-r--r--doc/forum/Basic_set_up_with_one_remote/comment_3_5221a713ee3f65fa2740c9fa6cb1db0f._comment27
-rw-r--r--doc/forum/Basic_set_up_with_one_remote/comment_4_62e554a546e4b50d211f5f65446fd289._comment13
-rw-r--r--doc/forum/Beginners_questions:_limit_content_on_special_remotes___38___use_non-git_clients_for_r__47__w_access_on_shared_git-annex_server.mdwn13
-rw-r--r--doc/forum/Beginners_questions:_limit_content_on_special_remotes___38___use_non-git_clients_for_r__47__w_access_on_shared_git-annex_server/comment_1_871b5a42f1134a059df520993bb55268._comment11
-rw-r--r--doc/forum/Beginners_questions:_limit_content_on_special_remotes___38___use_non-git_clients_for_r__47__w_access_on_shared_git-annex_server/comment_2_68d675096d9ea32780b8ec8526544b12._comment7
-rw-r--r--doc/forum/Best_approach_for_central_sharing_and_multiple_users.mdwn8
-rw-r--r--doc/forum/Best_approach_for_central_sharing_and_multiple_users/comment_1_48ffb50b92588daec6887bf08f1b97f5._comment10
-rw-r--r--doc/forum/Best_approach_for_central_sharing_and_multiple_users/comment_2_6b9a20f9707da9d2cfc3697a538d6935._comment12
-rw-r--r--doc/forum/Big_repository_vs._multiple_small.mdwn8
-rw-r--r--doc/forum/Big_repository_vs._multiple_small/comment_1_8e21ee3c674ef6e595bdab53dd5c2356._comment8
-rw-r--r--doc/forum/Big_repository_vs._multiple_small/comment_2_656c62351502492d20e8490242e51169._comment14
-rw-r--r--doc/forum/Big_repository_vs._multiple_small/comment_3_e9c44ea364513f090844f46af2ea46a1._comment8
-rw-r--r--doc/forum/Big_repository_vs._multiple_small/comment_4_82e13580426dc648688e4c26e7ed91ec._comment8
-rw-r--r--doc/forum/Big_repository_vs._multiple_small/comment_5_632aceb71dc6a4a9a4bb03de25a9b21a._comment23
-rw-r--r--doc/forum/Broken_symlinks_remain_after_drop.mdwn7
-rw-r--r--doc/forum/Broken_symlinks_remain_after_drop/comment_1_d4a59b9e58d43d7a3d437e521dd5c4e1._comment12
-rw-r--r--doc/forum/Broken_symlinks_remain_after_drop/comment_2_399ba969a17a41a022c69a1f7c480857._comment8
-rw-r--r--doc/forum/Can_Not_Sync_to_Git_Repo/comment_13_45132d348807fbf8ed32198e110d2caa._comment26
-rw-r--r--doc/forum/Can_git_annex___40__mostly__41___be_an_Ubuntu_One___40__or_Dropbox...__41___substitute__63__.mdwn76
-rw-r--r--doc/forum/Can_git_annex___40__mostly__41___be_an_Ubuntu_One___40__or_Dropbox...__41___substitute__63__/comment_1_a3fbae205c0312436f8861f432643811._comment10
-rw-r--r--doc/forum/Can_git_annex___40__mostly__41___be_an_Ubuntu_One___40__or_Dropbox...__41___substitute__63__/comment_2_de49cf261c644a6e7f6ac881a48d4e6c._comment10
-rw-r--r--doc/forum/Central_git_annex_server_that_always_keeps_one_copy.mdwn1
-rw-r--r--doc/forum/Central_git_annex_server_that_always_keeps_one_copy/comment_1_e786c8df6e48d88cf15b555af1b8639a._comment10
-rw-r--r--doc/forum/Central_git_annex_server_that_always_keeps_one_copy/comment_2_b0a091e11c18c8640888b0aedfbff5c5._comment19
-rw-r--r--doc/forum/Changing_files_during_git_annex_runs.mdwn12
-rw-r--r--doc/forum/Changing_files_during_git_annex_runs/comment_1_8067077c49dafbe2afa7d182b3314df4._comment14
-rw-r--r--doc/forum/Checking_for_missing_files_in_S3___40__reduced_redundancy__41__.mdwn5
-rw-r--r--doc/forum/Checking_for_missing_files_in_S3___40__reduced_redundancy__41__/comment_2_793b3d9f78562f3aecf27dd926bbcf82._comment8
-rw-r--r--doc/forum/Checkout_only_some_files_with_the_assistant.mdwn14
-rw-r--r--doc/forum/Checkout_only_some_files_with_the_assistant/comment_1_23d8ab1a05e3e9d3611bd12a4ba70b0c._comment10
-rw-r--r--doc/forum/Checkout_only_some_files_with_the_assistant/comment_2_bf095ff5b5af95b062ae1f7da566a279._comment12
-rw-r--r--doc/forum/Checkout_only_some_files_with_the_assistant/comment_3_7c026e36e1cdd52053c34638c87d793c._comment10
-rw-r--r--doc/forum/Comparison_with_other_big_files_solutions.mdwn11
-rw-r--r--doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__.mdwn16
-rw-r--r--doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__/comment_1_6a598b2a0fc6c241aa051f663dca9842._comment11
-rw-r--r--doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__/comment_3_09b7f1dd1fa4589b3fe0be0086849bf3._comment8
-rw-r--r--doc/forum/Copying_and_dropping_right_after.mdwn18
-rw-r--r--doc/forum/Copying_and_dropping_right_after/comment_1_87d81911964c2628ccb6156b0b631aa0._comment8
-rw-r--r--doc/forum/Copying_and_dropping_right_after/comment_2_87a14d14014aefc33f811bb15ea27e13._comment15
-rw-r--r--doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work.mdwn47
-rw-r--r--doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work/comment_1_ec390a7d521c697eb6b17e8db1dc9d1d._comment10
-rw-r--r--doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work/comment_2_14a584567ef42d5b7955ee970200e74d._comment10
-rw-r--r--doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work/comment_3_6cbd7329f1f11edf8dd90df27d45158f._comment10
-rw-r--r--doc/forum/Corrupt_Repository_Invalid_Object.mdwn10
-rw-r--r--doc/forum/Corrupt_Repository_Invalid_Object/comment_1_b7fd4b6212b50400342931e70684b96c._comment14
-rw-r--r--doc/forum/Corrupted_repository__44___can_not_be_repaired.mdwn40
-rw-r--r--doc/forum/Corrupted_repository__44___can_not_be_repaired/comment_1_297ea9c13096f6360358b3a3e7197c03._comment37
-rw-r--r--doc/forum/Corrupted_repository__44___can_not_be_repaired/comment_2_c3aabffbe9568cf7acb4018e445f22a5._comment13
-rw-r--r--doc/forum/Corrupted_repository__44___can_not_be_repaired/comment_3_baee46af6b2dbaf92be406ab22007a85._comment12
-rw-r--r--doc/forum/Creating_a_more_secure_shared_encryption.mdwn7
-rw-r--r--doc/forum/Crippled_FS:_remove_read_perms_from_dropped_files__63___.mdwn3
-rw-r--r--doc/forum/Crippled_FS:_remove_read_perms_from_dropped_files__63___/comment_1_53941b83ff173025934e002a26031d9b._comment15
-rw-r--r--doc/forum/Deduplication_in_direct_mode.mdwn18
-rw-r--r--doc/forum/Deduplication_in_direct_mode/comment_1_cb8eaa8c19f5bb9e145a5e4c8995a8ca._comment22
-rw-r--r--doc/forum/Default_annex.largefiles.mdwn1
-rw-r--r--doc/forum/Default_annex.largefiles/comment_1_74a3ad2388e41f1ff17f64a00485a35a._comment8
-rw-r--r--doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__.mdwn14
-rw-r--r--doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_1_67ac7e8b53a4374baf640d32dac79030._comment8
-rw-r--r--doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_2_eb6df2bfcb3892ae22050a8c5f67ee90._comment8
-rw-r--r--doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_3_15f36487383a631f16e041e2885c44ec._comment10
-rw-r--r--doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_4_9293831aff5b6cef490f65d03638d34d._comment12
-rw-r--r--doc/forum/Disadvantages_of_WORM:_long_filename__63__.mdwn13
-rw-r--r--doc/forum/Disadvantages_of_WORM:_long_filename__63__/comment_1_cc5502b55fb71c8fdb235ea9d17216ff._comment12
-rw-r--r--doc/forum/Disadvantages_of_WORM:_long_filename__63__/comment_2_d04b7adcc17a305fb1d7f1c1a3641be1._comment24
-rw-r--r--doc/forum/Disk_usage_during___96__import__96__.mdwn5
-rw-r--r--doc/forum/Disk_usage_during___96__import__96__/comment_1_3ed4d9a36cacb9be96860cfaae8cee90._comment8
-rw-r--r--doc/forum/Distributing_data_to_a_set_of_drives.mdwn1
-rw-r--r--doc/forum/Distributing_data_to_a_set_of_drives/comment_1_f1fa72879f4e1db13bf59dea33c91624._comment8
-rw-r--r--doc/forum/Distributing_data_to_a_set_of_drives/comment_2_e13b4e5c1e6f1f503f93d521b504d5c1._comment16
-rw-r--r--doc/forum/Duplicate_entries_in_location_tracking_logs.mdwn25
-rw-r--r--doc/forum/Duplicate_entries_in_location_tracking_logs/comment_1_3afb76397519b8ca8b55958a344f1871._comment10
-rw-r--r--doc/forum/Duplicate_entries_in_location_tracking_logs/comment_2_6f327444772ee1e660a12e7442162df5._comment10
-rw-r--r--doc/forum/Encrypted_Content_Remote_Daemon_.mdwn1
-rw-r--r--doc/forum/Encrypted_Content_Remote_Daemon_/comment_1_96f63e509e23c081c48302274e21db78._comment10
-rw-r--r--doc/forum/Encrypted_Content_Remote_Daemon_/comment_2_acd0ffdc3f5079265858073c2af81557._comment8
-rw-r--r--doc/forum/Equivalent_to_git_bundle__63__.mdwn10
-rw-r--r--doc/forum/Equivalent_to_git_bundle__63__/comment_1_e42936a9bc36fbee69f48e32df303dee._comment9
-rw-r--r--doc/forum/Equivalent_to_git_bundle__63__/comment_2_2b8b5c237d8572fdd27202f3502bea96._comment13
-rw-r--r--doc/forum/Error_from_git-annex-shell_on_creation_of_gcrypt_special_remote.mdwn28
-rw-r--r--doc/forum/Error_from_git-annex-shell_on_creation_of_gcrypt_special_remote/comment_1_2a69ce8607f97aabdf3cc402c1091d7a._comment30
-rw-r--r--doc/forum/Error_from_git-annex-shell_on_creation_of_gcrypt_special_remote/comment_2_a112f0bc1a30fa41504e3f52f679053b._comment11
-rw-r--r--doc/forum/Fast_cloning_a_repo_initially.mdwn3
-rw-r--r--doc/forum/Fast_cloning_a_repo_initially/comment_1_0db0caafe30dd1b6f15fb1679dec8f9f._comment10
-rw-r--r--doc/forum/Fast_cloning_a_repo_initially/comment_2_e17abc209c2b3ba20158be76801ce04a._comment8
-rw-r--r--doc/forum/Folders_for___34__actions__34___-_now_that_views_have_disrupted_the_file_structure__63__.mdwn20
-rw-r--r--doc/forum/Generating_a_Temp_View_of_Available_Files.mdwn1
-rw-r--r--doc/forum/Getting_the_status_of_a_remotely_changed_annex_file.mdwn75
-rw-r--r--doc/forum/Getting_the_status_of_a_remotely_changed_annex_file/comment_1_e323c21d27bb0946993ba1438429c457._comment14
-rw-r--r--doc/forum/Git-Annex_Android_sync_files_are_missing_on_Linuxx.mdwn4
-rw-r--r--doc/forum/Git-Annex_Android_sync_files_are_missing_on_Linuxx/comment_1_72d7811990e78fba0b7fc2e1c7ee515f._comment15
-rw-r--r--doc/forum/Git-Annex_with_Asustor_NAS.mdwn4
-rw-r--r--doc/forum/Git-Annex_with_Asustor_NAS/comment_1_44445200e5b716caeec225972a5d5dce._comment10
-rw-r--r--doc/forum/GitBlit_as_a_centralized_repository.mdwn2
-rw-r--r--doc/forum/GitBlit_as_a_centralized_repository/comment_1_06bedf5fbac45415e0cc81f41b25a5a0._comment8
-rw-r--r--doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive.mdwn3
-rw-r--r--doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive/comment_1_a1d1ae9488924b08682b355aff51130d._comment17
-rw-r--r--doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive/comment_2_6649077583bc14730a08aaaca7ccb62e._comment8
-rw-r--r--doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive/comment_3_f359d9b9356de7ee10b9e725a011cc43._comment8
-rw-r--r--doc/forum/Git_Annex_not_dropping_unused_content.mdwn9
-rw-r--r--doc/forum/Git_Annex_not_dropping_unused_content/comment_1_da47b6af512b19cba077499f41455189._comment23
-rw-r--r--doc/forum/Git_annex_assistant_can__39__t_find_rsync_nor_git-annex_on_server.mdwn14
-rw-r--r--doc/forum/Git_annex_assistant_can__39__t_find_rsync_nor_git-annex_on_server/comment_1_75c599cc26e7d3645f69173861d4f8be._comment9
-rw-r--r--doc/forum/Git_annex_assistant_can__39__t_find_rsync_nor_git-annex_on_server/comment_2_496e2f3a61b609ebb28ab55e5c30022b._comment12
-rw-r--r--doc/forum/Git_annex_hangs.mdwn2
-rw-r--r--doc/forum/Git_annex_hangs/comment_1_e6b854d4625ae3015aea9c5de71a28ef._comment8
-rw-r--r--doc/forum/Git_annex_hangs/comment_2_4f848771e60c38321a97361b0d1b33dd._comment8
-rw-r--r--doc/forum/Git_annex_hangs/comment_3_a07abdd1dc21a69ad6be0526edaeffc1._comment13
-rw-r--r--doc/forum/Git_annex_hangs/comment_4_2ba5992c32753ed03ddd5c12264e9acf._comment8
-rw-r--r--doc/forum/Git_annex_hangs/comment_5_5fd749f92343079b3916a4d32ddf39c7._comment12
-rw-r--r--doc/forum/Git_annex_on_Windows/comment_8_e4e5ad0cda34bb597fe1bb804acc15e9._comment10
-rw-r--r--doc/forum/Git_remote__63_____40__bitbucket__44___github__41__.mdwn1
-rw-r--r--doc/forum/Git_remote__63_____40__bitbucket__44___github__41__/comment_1_8a6de753ac0aa56f470b2aefca628388._comment10
-rw-r--r--doc/forum/Git_repos_in_git_annex__63__/comment_2_8546341a561a5f55216c2f437f8ec0c2._comment32
-rw-r--r--doc/forum/How_To_Permanently_Delete_a_File__63__.mdwn13
-rw-r--r--doc/forum/How_To_Permanently_Delete_a_File__63__/comment_1_7f2cefb0991789be5a960eb9c0a9df3f._comment22
-rw-r--r--doc/forum/How_To_Permanently_Delete_a_File__63__/comment_2_d13b456c5b3990082c16e78a50f5db91._comment14
-rw-r--r--doc/forum/How_To_Permanently_Delete_a_File__63__/comment_3_854c17ff8cb38486c4bef618d1e94919._comment24
-rw-r--r--doc/forum/How_To_Permanently_Delete_a_File__63__/comment_4_9572ad02bbf6845b1ab6d7c612c12a2a._comment19
-rw-r--r--doc/forum/How_To_Permanently_Delete_a_File__63__/comment_5_9c28faabb7d7bd1e83d551e2938d3532._comment14
-rw-r--r--doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__.mdwn13
-rw-r--r--doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_1_fc914b5998a09943fc8c1917a0e36096._comment8
-rw-r--r--doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_2_fd5257eff7f94971557c031a94ac2766._comment8
-rw-r--r--doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_3_5a11c45f92bae1328a5120945bee1fa0._comment36
-rw-r--r--doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_4_404a8f9daa86c20a046b4c9f9051dfc0._comment16
-rw-r--r--doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_5_3dcdaef370d0df38e7285f1fa11c6bb3._comment8
-rw-r--r--doc/forum/How_does_git_annex_handle_swp_files.mdwn1
-rw-r--r--doc/forum/How_does_git_annex_handle_swp_files/comment_1_8f0b81139fb66f28f9262e919692ecbd._comment7
-rw-r--r--doc/forum/How_to_change_the_name_of_a_repo_on_S3__63__.mdwn2
-rw-r--r--doc/forum/How_to_change_the_name_of_a_repo_on_S3__63__/comment_1_be74d63e1951f515948d232e096b4862._comment8
-rw-r--r--doc/forum/How_to_change_the_name_of_a_repo_on_S3__63__/comment_2_d54a7163cfe9a94b7ba337860958e5c5._comment8
-rw-r--r--doc/forum/How_to_completely_remove_tracking_of_a_deleted_file_in_direct_mode.mdwn7
-rw-r--r--doc/forum/How_to_completely_remove_tracking_of_a_deleted_file_in_direct_mode/comment_1_c6bd2ef90516dde928ff18ded36df625._comment8
-rw-r--r--doc/forum/How_to_debug_failing_sync.mdwn5
-rw-r--r--doc/forum/How_to_debug_failing_sync/comment_1_a597b868182e55e5f39394f154740534._comment10
-rw-r--r--doc/forum/How_to_debug_failing_sync/comment_2_db0a5652d76e4e568a4d7808195bc59c._comment10
-rw-r--r--doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__.mdwn9
-rw-r--r--doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__/comment_1_c5226964b4b64bd47d888b5616ff970b._comment22
-rw-r--r--doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__/comment_2_748d243bac14a8d55be4ac324c581c1d._comment62
-rw-r--r--doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__/comment_3_cf9234339bad14ad9a9d3027f9066936._comment49
-rw-r--r--doc/forum/How_to_get_detailed_information_on_special_remotes__63__.mdwn1
-rw-r--r--doc/forum/How_to_get_detailed_information_on_special_remotes__63__/comment_1_f1eca38ca0c1edb66e64ac64f0321829._comment8
-rw-r--r--doc/forum/How_to_get_detailed_information_on_special_remotes__63__/comment_2_73f8b7ebde5870f92bec02d15a533ef3._comment7
-rw-r--r--doc/forum/How_to_get_git-annex_to_forget_a_commit__63__.mdwn54
-rw-r--r--doc/forum/How_to_get_git-annex_to_forget_a_commit__63__/comment_1_65471c42e163ac8ee6ec109f1397271b._comment12
-rw-r--r--doc/forum/How_to_get_git-annex_to_forget_a_commit__63__/comment_2_cc991abd9155a8e4d935b04ba432744f._comment8
-rw-r--r--doc/forum/How_to_hide_broken_symlinks.mdwn45
-rw-r--r--doc/forum/How_to_hide_broken_symlinks/comment_1_07a70090a9ac8f675233b08b24f55544._comment22
-rw-r--r--doc/forum/How_to_know_why_is_git-annex_uploading_a_file_to_a_transfer_repository.mdwn3
-rw-r--r--doc/forum/How_to_know_why_is_git-annex_uploading_a_file_to_a_transfer_repository/comment_1_17db96492e6bc0e243fc7cb62565c4c4._comment17
-rw-r--r--doc/forum/How_to_know_why_is_git-annex_uploading_a_file_to_a_transfer_repository/comment_2_e772ea0383ac690cbcbcf125258986cf._comment16
-rw-r--r--doc/forum/How_to_list_all_existing_metadata_types__63__.mdwn15
-rw-r--r--doc/forum/How_to_list_all_existing_metadata_types__63__/comment_1_a8c30f697f32a3807661a59482d79b18._comment19
-rw-r--r--doc/forum/How_to_make_a_server_store_the_files.mdwn1
-rw-r--r--doc/forum/How_to_make_a_server_store_the_files/comment_1_20196067475918e788afa0debc4d5ce5._comment9
-rw-r--r--doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__.mdwn4
-rw-r--r--doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_1_c4e972c8635f2fa460cd6621f3d993c6._comment23
-rw-r--r--doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_2_e06abc9a2f7cf055523f3d35e4eed9bc._comment11
-rw-r--r--doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_3_81d128be0fa60475062e795f34d920f7._comment9
-rw-r--r--doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_4_43615e11f1c6d08f5850458d540f5bac._comment9
-rw-r--r--doc/forum/How_to_work_with_transfer_repos_manually__63__.mdwn18
-rw-r--r--doc/forum/How_to_work_with_transfer_repos_manually__63__/comment_1_3dec369405e6b6a4a6e5121546c03712._comment11
-rw-r--r--doc/forum/How_to_work_with_transfer_repos_manually__63__/comment_1_b8f3c09b470d99578a4a17064498dd39._comment12
-rw-r--r--doc/forum/How_to_work_with_transfer_repos_manually__63__/comment_3_be2c594bc1d162cfb1acc3a01fc284f2._comment7
-rw-r--r--doc/forum/Is_there_a_way_to_get_back_to_clean-state_after_unworking_annex_assistant_configuration_attempt__63__.mdwn28
-rw-r--r--doc/forum/Is_there_a_way_to_get_back_to_clean-state_after_unworking_annex_assistant_configuration_attempt__63__/comment_1_d77fbbbe3a7438a1e79f175df1f69ef3._comment17
-rw-r--r--doc/forum/Is_there_any_delta_handling_for_file_modifications__63__.mdwn20
-rw-r--r--doc/forum/Is_there_any_delta_handling_for_file_modifications__63__/comment_1_d901ac998c9fdb844c593d782c31cc73._comment9
-rw-r--r--doc/forum/Link_to_local_remote_instead_of_broken_link_when_possible__63__.mdwn4
-rw-r--r--doc/forum/Link_to_local_remote_instead_of_broken_link_when_possible__63__/comment_1_ce0464d5fca6ada9f1477831fd47ce09._comment8
-rw-r--r--doc/forum/List_annexed_files_in_chronological_order__63__.mdwn1
-rw-r--r--doc/forum/List_annexed_files_in_chronological_order__63__/comment_1_825c950574b3a2f083554f474c9f7b50._comment12
-rw-r--r--doc/forum/Local_and_remote_in_direct_mode/comment_2_90eeb2bffdb2db8032f9a0eac630ed56._comment8
-rw-r--r--doc/forum/Local_and_remote_in_direct_mode/comment_3_859ec2b3a8e938073b2099fdc5781109._comment8
-rw-r--r--doc/forum/Making_Firefox_not_dereference_symlinks_on_open.mdwn3
-rw-r--r--doc/forum/Making_Firefox_not_dereference_symlinks_on_open/comment_1_a7b092f2291fa515279cf7dce23df20d._comment8
-rw-r--r--doc/forum/Manual_commit_message_in_direct_mode.mdwn3
-rw-r--r--doc/forum/Manual_commit_message_in_direct_mode/comment_1_32f95eefec25bb127ed96248446c21b1._comment8
-rw-r--r--doc/forum/Manual_commit_message_in_direct_mode/comment_2_bf1d10067379c802ac5020d8becd6d35._comment10
-rw-r--r--doc/forum/MegaAnnex_not_working..mdwn32
-rw-r--r--doc/forum/MegaAnnex_not_working./comment_1_5aa3fd366d4c78ca79bb58005a49791c._comment8
-rw-r--r--doc/forum/MegaAnnex_not_working./comment_2_f3eaf1ee06ebac951514d865f298f9d3._comment8
-rw-r--r--doc/forum/Modification_time_of_files_retained_in_synchronized_remote_copies__63__.mdwn5
-rw-r--r--doc/forum/Modification_time_of_files_retained_in_synchronized_remote_copies__63__/comment_1_2b13584998108af0522b898c5d396ba4._comment8
-rw-r--r--doc/forum/Move_unsynced_file_in_direct_mode.mdwn97
-rw-r--r--doc/forum/Move_unsynced_file_in_direct_mode/comment_1_12a797cba753168dfde9e6339c00f481._comment10
-rw-r--r--doc/forum/Move_unsynced_file_in_direct_mode/comment_2_f3aec24668c35780a033f2b035df10ee._comment20
-rw-r--r--doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__.mdwn23
-rw-r--r--doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_1_af0ed0730645c1e3c9a4946acd48c18a._comment8
-rw-r--r--doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_2_12f3c2bb2458b69e6355c8f94bab868f._comment13
-rw-r--r--doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_3_b233b4daac32c452776e1e3d9a29f2cc._comment12
-rw-r--r--doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_4_8e079e92929dcfdf19f6adec16f800e5._comment23
-rw-r--r--doc/forum/OSX_Finder_extension.mdwn5
-rw-r--r--doc/forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set/comment_1_a136ff877389f0930c066ba118edd9fd._comment10
-rw-r--r--doc/forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set/comment_2_5fcc52a62770fb932a4a2101f5badbc0._comment17
-rw-r--r--doc/forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set/comment_3_521f34c340ad54cef6458a8b6cfff8a9._comment13
-rw-r--r--doc/forum/Performance_implications_of_triply_nested_objects_directory.mdwn23
-rw-r--r--doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_1_068a8f120d188b8fa5d3e5b687fd02dc._comment8
-rw-r--r--doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_2_cc0f5be21fd1523bdddc7bcf6ff04435._comment10
-rw-r--r--doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_3_1133795276371c86cdd52b25a8b20c52._comment28
-rw-r--r--doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_4_4e44289e6913797844e103f9cdf4c5a2._comment8
-rw-r--r--doc/forum/Preserving_extended_attributes.mdwn5
-rw-r--r--doc/forum/Problems_using_submodules_with_git-annex__63__/comment_2_26f6581b5969eb2cb77495c40de88951._comment11
-rw-r--r--doc/forum/Problems_when_cloning_a_repository.mdwn22
-rw-r--r--doc/forum/Problems_when_cloning_a_repository/comment_1_191c091c384d8d97d24f8a77e8ff90ee._comment9
-rw-r--r--doc/forum/Problems_when_cloning_a_repository/comment_2_74ccbb09677444478074e9eab405fbaf._comment16
-rw-r--r--doc/forum/Problems_when_cloning_a_repository/comment_3_3436e26dd9fe07233a070d4e95d81cdf._comment16
-rw-r--r--doc/forum/Pusher_crashed__44___attempt_to_repair_hangs__44___broken_symlinks.mdwn77
-rw-r--r--doc/forum/Pusher_crashed__44___attempt_to_repair_hangs__44___broken_symlinks/comment_1_c89b64b0dc7c5a760a84a9d2cfd8982c._comment11
-rw-r--r--doc/forum/Pusher_crashed__44___attempt_to_repair_hangs__44___broken_symlinks/comment_2_c511691c4ea6c77e63ef85c28c921be9._comment12
-rw-r--r--doc/forum/Recover_files__44___annex_stuck.mdwn28
-rw-r--r--doc/forum/Recover_files__44___annex_stuck/comment_10_6d85c3ec73ddc0682d9643f4d5eeda70._comment18
-rw-r--r--doc/forum/Recover_files__44___annex_stuck/comment_11_52e799bb6f24a1ebed58fad6cebd3a71._comment17
-rw-r--r--doc/forum/Recover_files__44___annex_stuck/comment_12_686a285bc7e950aae67856c47e7cb21e._comment18
-rw-r--r--doc/forum/Recover_files__44___annex_stuck/comment_13_a4d62d494b340458e6535d573bade965._comment12
-rw-r--r--doc/forum/Recover_files__44___annex_stuck/comment_14_c10f0fe1440ccd170804a433db2267ee._comment12
-rw-r--r--doc/forum/Recover_files__44___annex_stuck/comment_15_14446cafac6c33a3f95b5344c42c0bef._comment14
-rw-r--r--doc/forum/Recover_files__44___annex_stuck/comment_16_63c19f58b7e95e39ba25a735bdcc0bcf._comment10
-rw-r--r--doc/forum/Recover_files__44___annex_stuck/comment_17_8e5c7572ab8d1f0e41fedf6f805b942a._comment8
-rw-r--r--doc/forum/Recover_files__44___annex_stuck/comment_18_e5357c63107f79571bd3ff609b4406a7._comment26
-rw-r--r--doc/forum/Recover_files__44___annex_stuck/comment_19_3316652073710f39965cd49ceea5c4ff._comment8
-rw-r--r--doc/forum/Recover_files__44___annex_stuck/comment_1_d605f755c363d56cf5f1060ad06ee173._comment8
-rw-r--r--doc/forum/Recover_files__44___annex_stuck/comment_2_f3ee184a4d3b8d82a8a362a6c03a54a3._comment54
-rw-r--r--doc/forum/Recover_files__44___annex_stuck/comment_3_341b47663d133411587ec70ef2b178c6._comment14
-rw-r--r--doc/forum/Recover_files__44___annex_stuck/comment_4_66c0d9284d5edbac189a64b03c4fe50a._comment10
-rw-r--r--doc/forum/Recover_files__44___annex_stuck/comment_5_8b32f6597f447f88bee7a80698fb4df6._comment18
-rw-r--r--doc/forum/Recover_files__44___annex_stuck/comment_6_4cc81169e99a453cdb6e83e57e638f37._comment8
-rw-r--r--doc/forum/Recover_files__44___annex_stuck/comment_7_2d104cf4682e04906f8ca0ced7288cf1._comment17
-rw-r--r--doc/forum/Recover_files__44___annex_stuck/comment_8_d356c4fce9f1197e5292f9dedf85bbc9._comment22
-rw-r--r--doc/forum/Recover_files__44___annex_stuck/comment_9_856c7e1575f5d99530ecd54004315487._comment12
-rw-r--r--doc/forum/Recovering_deleted_file_in_direct_mode.mdwn13
-rw-r--r--doc/forum/Recovering_deleted_file_in_direct_mode/comment_1_a3e6fc93669ec76656c84793d1f59149._comment11
-rw-r--r--doc/forum/Recovering_deleted_file_in_direct_mode/comment_2_98c01a756c5f2dda28cffa5dd1dea385._comment16
-rw-r--r--doc/forum/Recovery_after_freeze_while_importing_files.mdwn3
-rw-r--r--doc/forum/Recovery_after_freeze_while_importing_files/comment_1_d033b77b9417468e13076ff9302f2963._comment7
-rw-r--r--doc/forum/Recovery_after_freeze_while_importing_files/comment_2_e14f330de3e9ebfa9a99c32e65d59d11._comment7
-rw-r--r--doc/forum/Reloading_.git__47__config_mid-sync.mdwn1
-rw-r--r--doc/forum/Reloading_.git__47__config_mid-sync/comment_1_69e8879e0fed0e1b1589a721f9c6e3c7._comment8
-rw-r--r--doc/forum/Remove_variants_from_all_repositories___40__and_possibly_restore_the_original_naming__41__.mdwn1
-rw-r--r--doc/forum/Remove_variants_from_all_repositories___40__and_possibly_restore_the_original_naming__41__/comment_1_dfc64d8618e07177bb196d9af4474698._comment19
-rw-r--r--doc/forum/Removing_git-annex_repo/comment_1_58fcceb96647a8c7f33d188ae908f3bd._comment8
-rw-r--r--doc/forum/Require_a_local_copy_of_all_new_files_without_explicitly_calling___34__get__34___or___34__sync__34__.mdwn9
-rw-r--r--doc/forum/Require_a_local_copy_of_all_new_files_without_explicitly_calling___34__get__34___or___34__sync__34__/comment_1_8adf9c6d2a3ef29120703bfa1b8f9ae2._comment8
-rw-r--r--doc/forum/Restricting_SSH_+_supply_key.mdwn7
-rw-r--r--doc/forum/Restricting_SSH_+_supply_key/comment_10_8bbd0b6488c23ce8b182bd6b1765c94b._comment11
-rw-r--r--doc/forum/Restricting_SSH_+_supply_key/comment_11_3b946519c9f52569ce60ac04bdc3380a._comment8
-rw-r--r--doc/forum/Restricting_SSH_+_supply_key/comment_1_cac35ac1ac0b300ddfac5ffc74291bce._comment12
-rw-r--r--doc/forum/Restricting_SSH_+_supply_key/comment_2_e9803dd1794b4d078efa9435ff5ba295._comment19
-rw-r--r--doc/forum/Restricting_SSH_+_supply_key/comment_3_1c3beb859e76cb69d2bacd2473ec72b7._comment10
-rw-r--r--doc/forum/Restricting_SSH_+_supply_key/comment_4_1c541fc9a44e5cfb13c7d3ef0eeba2c7._comment23
-rw-r--r--doc/forum/Restricting_SSH_+_supply_key/comment_5_4dbd5605f2638de0a3edfb3886a47938._comment22
-rw-r--r--doc/forum/Restricting_SSH_+_supply_key/comment_6_a9c5b424a6acb2da152bf87b2e7617bb._comment8
-rw-r--r--doc/forum/Restricting_SSH_+_supply_key/comment_7_93b7c2a5947fb6904c88cd5c120e404c._comment16
-rw-r--r--doc/forum/Restricting_SSH_+_supply_key/comment_8_beaa350751eca4642545d1b83e528dd7._comment10
-rw-r--r--doc/forum/Restricting_SSH_+_supply_key/comment_9_2faceeaf0d39f82e5d624eae19e4ca53._comment31
-rw-r--r--doc/forum/Retrieve_previous_version_in_direct_mode/comment_5_1360b936aa389a0ab5e5e453824b2ece._comment9
-rw-r--r--doc/forum/Revert_to_a_precedent_state_in_direct_mode.mdwn3
-rw-r--r--doc/forum/Revert_to_a_precedent_state_in_direct_mode/comment_1_1ae9f7defbab44621c3108973a4f683a._comment26
-rw-r--r--doc/forum/Revert_to_a_precedent_state_in_direct_mode/comment_2_0bcfc0e89de7072bfdf1e3cdeaa16a1b._comment11
-rw-r--r--doc/forum/Revert_to_a_precedent_state_in_direct_mode/comment_3_e49a37f92a3dd7d386e1e5f37ab37df4._comment12
-rw-r--r--doc/forum/SSH_remote_transfers_queued_but_no_movement.mdwn3
-rw-r--r--doc/forum/SSH_remote_transfers_queued_but_no_movement/comment_1_fea4e2317f850d6166480cddba088ae5._comment10
-rw-r--r--doc/forum/Sending_requests_across_the_network.mdwn15
-rw-r--r--doc/forum/Sending_requests_across_the_network/comment_1_8ff713d4c968705061bf2044ea0fe5a0._comment10
-rw-r--r--doc/forum/Sending_requests_across_the_network/comment_2_cb29e5346a8775d87d30b18b7fc005a7._comment10
-rw-r--r--doc/forum/Shared_Encryption_does_not_Work_as_Expected.mdwn11
-rw-r--r--doc/forum/Shared_Encryption_does_not_Work_as_Expected/comment_1_793c71a1efcf160e1829bec3ef0b1be6._comment10
-rw-r--r--doc/forum/Shared_Encryption_does_not_Work_as_Expected/comment_2_6b603265a2fc78bd2df54102bf94234f._comment12
-rw-r--r--doc/forum/Sharing_annex_with_local_clones/comment_4_5c870c49d8093e1a2895224cc6e91ca0._comment8
-rw-r--r--doc/forum/Sharing_annex_with_local_clones/comment_5_0bf4c0aa3258b156a3df794d5fabb6a2._comment23
-rw-r--r--doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff.mdwn22
-rw-r--r--doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff/comment_1_20147b287fd995fa8ac9e868b5974d8a._comment12
-rw-r--r--doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff/comment_2_f6d977a534264b4368401e1b13628931._comment8
-rw-r--r--doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff/comment_3_d534da276b79a40fdb7d8d158f6eae26._comment8
-rw-r--r--doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff/comment_4_8c817d08ca9d94a1228fb21cd0b15744._comment8
-rw-r--r--doc/forum/Special_remote_public_key_encryption_issue.mdwn18
-rw-r--r--doc/forum/Special_remote_public_key_encryption_issue/comment_1_a9caafea017a3c148f89d4ddeee15a4c._comment10
-rw-r--r--doc/forum/Special_remote_public_key_encryption_issue/comment_2_adfa582d611ca501e21110282df07315._comment18
-rw-r--r--doc/forum/Special_remote_public_key_encryption_issue/comment_3_eac16bf98a6e87461ba2f3ab7e990b2b._comment10
-rw-r--r--doc/forum/Special_remote_public_key_encryption_issue/comment_6_097f52aaf178340b3abb5bfc80f0d447._comment8
-rw-r--r--doc/forum/Ssh_remote_on_NAS.mdwn34
-rw-r--r--doc/forum/Ssh_remote_on_NAS/comment_1_1dd8a0d0e70a1fb36fce62e89c99b404._comment10
-rw-r--r--doc/forum/Ssh_remote_on_NAS/comment_2_261601313d8825c52322949b8509bc74._comment16
-rw-r--r--doc/forum/Ssh_remote_on_NAS/comment_3_ed602f4f972b78bce4f62bdfca8cfe47._comment11
-rw-r--r--doc/forum/Ssh_remote_on_NAS/comment_4_423244f174123318f1ece7b5794aeea5._comment28
-rw-r--r--doc/forum/Ssh_remote_on_NAS/comment_5_07348ed61ccdd93417365f1525a05bf2._comment8
-rw-r--r--doc/forum/Stale_keys_and_.cache_files_left_in_.git__47__annex__47__objects.mdwn39
-rw-r--r--doc/forum/Stale_keys_and_.cache_files_left_in_.git__47__annex__47__objects/comment_1_2aa80b317863a99e676a375d907d0e84._comment13
-rw-r--r--doc/forum/Standard_groups__47__preferred_contents.mdwn14
-rw-r--r--doc/forum/Standard_groups__47__preferred_contents/comment_1_143aa3095d7222c869c36a5039282e35._comment16
-rw-r--r--doc/forum/Standard_groups__47__preferred_contents/comment_2_65bef012eb113986a2e9b02470a6cbd1._comment15
-rw-r--r--doc/forum/Standard_groups__47__preferred_contents/comment_3_202a7e2820e0adf079ccd14a7993ad25._comment21
-rw-r--r--doc/forum/Standard_groups__47__preferred_contents/comment_4_e0faf9ebd3162e0de860eba0fd28c67c._comment15
-rw-r--r--doc/forum/Standard_groups__47__preferred_contents/comment_5_eb47696244931173bddcbeb8d5f78637._comment13
-rw-r--r--doc/forum/Standard_groups__47__preferred_contents/comment_6_c70c9fa97bce8e4eb9b3880d8f843aef._comment25
-rw-r--r--doc/forum/Standard_groups__47__preferred_contents/comment_7_413593ea0663874196305c9eb602e7c4._comment7
-rw-r--r--doc/forum/Standards_usage_pattern__63__.mdwn8
-rw-r--r--doc/forum/Standards_usage_pattern__63__/comment_1_1ccbfaefe3bbaf767e999cd1c61debfb._comment9
-rw-r--r--doc/forum/Starting_assistant_from_CLI.mdwn9
-rw-r--r--doc/forum/Starting_assistant_from_CLI/comment_1_afd51ddb0f1bb3cac528e1d96829ef83._comment12
-rw-r--r--doc/forum/Starting_assistant_from_CLI/comment_2_76c34c00cf2065809b15a594023a688b._comment11
-rw-r--r--doc/forum/Starting_assistant_from_CLI/comment_3_f7826867f78b1adbfc2dad2fad4d6720._comment17
-rw-r--r--doc/forum/Starting_assistant_from_CLI/comment_4_fa7055a232a1dcb743db47308f7acf0b._comment14
-rw-r--r--doc/forum/Storing_git_repos_in_git-annex.mdwn27
-rw-r--r--doc/forum/Storing_git_repos_in_git-annex/comment_1_ac7b52c0b0f75d79760ffe6a9b5c8759._comment20
-rw-r--r--doc/forum/Storing_git_repos_in_git-annex/comment_3_3bec1f02ff1a61791e3cbb428c7acb4c._comment12
-rw-r--r--doc/forum/Storing_git_repos_in_git-annex/comment_4_76ddbd27cc2f3785bb5aaebb0bb6e087._comment14
-rw-r--r--doc/forum/Storing_git_repos_in_git-annex/comment_5_f9520cbc6669622aa342acad35581943._comment14
-rw-r--r--doc/forum/Storing_git_repos_in_git-annex/comment_9_d5676400e7148b7d3408f2bdb3d54b7d._comment8
-rw-r--r--doc/forum/Sync_files_from_remote_to_remote.mdwn5
-rw-r--r--doc/forum/Sync_files_from_remote_to_remote/comment_1_c5247657a5b3cd68fd55112efe97ef99._comment8
-rw-r--r--doc/forum/Sync_files_from_remote_to_remote/comment_2_634e399d21271f26f7f77c15c5fb132b._comment7
-rw-r--r--doc/forum/Sync_files_from_remote_to_remote/comment_3_b89701582b40e2c337a1a49733877210._comment10
-rw-r--r--doc/forum/Sync_files_from_remote_to_remote/comment_4_b3ad93e032c3c9d2312970711540bf92._comment7
-rw-r--r--doc/forum/Sync_files_from_remote_to_remote/comment_5_bdf293d30692311983d0586231535bd4._comment20
-rw-r--r--doc/forum/Sync_files_from_remote_to_remote/comment_6_fda62d735035213f2a0b5b2fc95991ab._comment11
-rw-r--r--doc/forum/Sync_only_what_is_not_available_from_my_central_git_repo.mdwn7
-rw-r--r--doc/forum/Sync_only_what_is_not_available_from_my_central_git_repo/comment_1_b31d02c97447996495de73705ac39f71._comment12
-rw-r--r--doc/forum/Sync_only_what_is_not_available_from_my_central_git_repo/comment_2_098465ae8af32931779d2cd63750d5dc._comment10
-rw-r--r--doc/forum/This_account_is_restricted_by_rssh._Allowed_commands:_scp_rsync__160__.mdwn5
-rw-r--r--doc/forum/This_account_is_restricted_by_rssh._Allowed_commands:_scp_rsync__160__/comment_1_68e911629da672473bd6188407a68be2._comment13
-rw-r--r--doc/forum/Tracking_a_directory_with_some_hg_and_git_repositories/comment_4_c889050d3079edefc4633451bd5baff8._comment11
-rw-r--r--doc/forum/Two_computers__44___one_networked_repository__44___no_Jabber_-_how_to_setup_sync__63___.mdwn7
-rw-r--r--doc/forum/Two_computers__44___one_networked_repository__44___no_Jabber_-_how_to_setup_sync__63___/comment_1_b90aef011d853ad9feb6f8edc08bf7d9._comment16
-rw-r--r--doc/forum/USB_backup_with_files_visible/comment_10_b90b18ca57f9299f1920254bb2aa699b._comment7
-rw-r--r--doc/forum/USB_backup_with_files_visible/comment_9_dfb830fb00c10b797c3d26179e6dfefd._comment14
-rw-r--r--doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_2_f9eef3019fe690e90c1228d62a16f70a._comment10
-rw-r--r--doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_3_7fb74f7fab6c1baff4ffc270cf15ef0a._comment15
-rw-r--r--doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_4_5925b609aff0954f2860269cff107284._comment8
-rw-r--r--doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_5_45062d5776f8aefb0850d70f2a517c75._comment12
-rw-r--r--doc/forum/Ubuntu_PPA/comment_8_feecd478a4d44cb5ffc7020c646174ba._comment8
-rw-r--r--doc/forum/Understanding___34__deletion__34___and___34__dropping__34_____38___cleanup_of_history.mdwn9
-rw-r--r--doc/forum/Understanding___34__deletion__34___and___34__dropping__34_____38___cleanup_of_history/comment_1_08dbad67df1d8f07d3883c6fed2fe0c4._comment16
-rw-r--r--doc/forum/Update_on_remote_repo.mdwn6
-rw-r--r--doc/forum/Update_on_remote_repo/comment_1_d58cfe914d6c36d8bff8d1342e1c2102._comment11
-rw-r--r--doc/forum/User_name_with_whitespace_not_working_with___34____40__+__41___Local_computer__34__.mdwn7
-rw-r--r--doc/forum/User_name_with_whitespace_not_working_with___34____40__+__41___Local_computer__34__/comment_1_f803fc1fb340587fc4b55640fbae6604._comment9
-rw-r--r--doc/forum/Using_git-annex.mdwn73
-rw-r--r--doc/forum/Using_git-annex/comment_1_ac386ca07e9aaf009c264f3deed83832._comment16
-rw-r--r--doc/forum/Using_git-annex/comment_2_bf5e13a490e16943acd2732f093695fc._comment16
-rw-r--r--doc/forum/Using_git-annex/comment_3_471c9268b028f47ef3fac3f0be14b2b1._comment15
-rw-r--r--doc/forum/Using_git-annex_as_a_library/comment_3_ac52304a096ebc66967352efaffb060a._comment8
-rw-r--r--doc/forum/Using_git-annex_as_a_library/comment_4_d502fea60bf3a82f8a50f72a90a80c25._comment8
-rw-r--r--doc/forum/Using_git-annex_as_a_library/comment_5_a4ab4173620b72ac0a24d575fa9c810c._comment13
-rw-r--r--doc/forum/Using_git-annex_as_a_library/comment_6_45d9520ebc13d1b4fd88c25abc61f1b4._comment11
-rw-r--r--doc/forum/Using_the_Git-Annex_Assistant_as_a_Backup_and_Syncing_Service.mdwn5
-rw-r--r--doc/forum/Using_the_Git-Annex_Assistant_as_a_Backup_and_Syncing_Service/comment_1_7070f6e7e05fba7686d8620d62906a83._comment12
-rw-r--r--doc/forum/View_performance_with_7__44__000_files.mdwn26
-rw-r--r--doc/forum/View_performance_with_7__44__000_files/comment_1_e45ea752100d09d29efb6136a722eab3._comment34
-rw-r--r--doc/forum/View_performance_with_7__44__000_files/comment_2_b1942eed65e9b5c046095a094191a38c._comment8
-rw-r--r--doc/forum/View_performance_with_7__44__000_files/comment_3_e6e19339c9d72cf8eaae32ef4269e850._comment10
-rw-r--r--doc/forum/Walkthrough_for_direct_mode__63__.mdwn1
-rw-r--r--doc/forum/Want_to_stop_using_Git-Annex.mdwn9
-rw-r--r--doc/forum/Want_to_stop_using_Git-Annex/comment_1_32e37515bd4f5d22ff9aedd3c9d98046._comment10
-rw-r--r--doc/forum/Want_to_stop_using_Git-Annex/comment_2_e29e6d052ef3677ad7d5615721f3fe33._comment8
-rw-r--r--doc/forum/Web_app_on_server_without_X11__63__.mdwn3
-rw-r--r--doc/forum/Web_app_on_server_without_X11__63__/comment_1_bee409ad389e5fb5f3e8de4b5c68278d._comment10
-rw-r--r--doc/forum/What_does___34__disable__47__enable_expiry_after_X_days__34___mean__63__.mdwn1
-rw-r--r--doc/forum/What_does___34__disable__47__enable_expiry_after_X_days__34___mean__63__/comment_1_face45c85e4713325bb23bbca7b07502._comment28
-rw-r--r--doc/forum/Where_is_the_content__63__.mdwn8
-rw-r--r--doc/forum/Where_is_the_content__63__/comment_1_812e1cf740cbfa449ab3ef4dd5f2df08._comment132
-rw-r--r--doc/forum/Where_is_the_content__63__/comment_2_5e2cfdfab6c4f84fe7a19447b417b5a7._comment8
-rw-r--r--doc/forum/Where_is_the_content__63__/comment_3_bd4cbc8f256a94ffde4f57d2c406a9ec._comment16
-rw-r--r--doc/forum/Where_is_the_content__63__/comment_4_a36b35d47472b5db779b0489bf3d4893._comment10
-rw-r--r--doc/forum/Why_is_git_annex_status_slow__63__.mdwn20
-rw-r--r--doc/forum/Why_is_git_annex_status_slow__63__/comment_1_a5139c5a9fc94486cf62fc9a9fa9f8d9._comment18
-rw-r--r--doc/forum/Windows_installation_notes.mdwn146
-rw-r--r--doc/forum/Workflow_for_adding_files.mdwn32
-rw-r--r--doc/forum/Workflow_for_adding_files/comment_1_a60dae97db827bc641d6256d1f382b5f._comment8
-rw-r--r--doc/forum/Workflow_for_adding_files/comment_2_28dd15ac50f79fb07bacf8b8326c7edc._comment19
-rw-r--r--doc/forum/XMPP_problem_behind_router.mdwn3
-rw-r--r--doc/forum/XMPP_problem_behind_router/comment_1_25a7f8dc5cf14cda4d76b2f8c6ca77d5._comment8
-rw-r--r--doc/forum/XMPP_problem_behind_router/comment_2_3186ebe32c30764b9fd53625dd3e4eda._comment8
-rw-r--r--doc/forum/XMPP_problem_behind_router/comment_3_7fa8fe8cb92993c935ba2dbfb2aef728._comment8
-rw-r--r--doc/forum/__171__Locking__187___files_until_synced.mdwn7
-rw-r--r--doc/forum/__171__Locking__187___files_until_synced/comment_1_8bf59f47fee0a8d5741fe209b5899863._comment8
-rw-r--r--doc/forum/__171__Locking__187___files_until_synced/comment_2_0c683547a6178e4303f0b1ed1f5605a5._comment8
-rw-r--r--doc/forum/__34__Lost__34___data__63___Maybe_a_bug__63__.mdwn14
-rw-r--r--doc/forum/__34__Lost__34___data__63___Maybe_a_bug__63__/comment_1_52e4453432184524d84d88f6382cac9d._comment16
-rw-r--r--doc/forum/__34__Lost__34___data__63___Maybe_a_bug__63__/comment_2_4d80b96e788d233706fa8f3e363d2f76._comment12
-rw-r--r--doc/forum/__34__Preseeding__34___a_special_remote.mdwn5
-rw-r--r--doc/forum/__34__Preseeding__34___a_special_remote/comment_1_b0c46d0eba900d0f6169a2c698d7a222._comment12
-rw-r--r--doc/forum/__34__Preseeding__34___a_special_remote/comment_2_5e63f5e6f45c11cc86b293ce8acad77f._comment65
-rw-r--r--doc/forum/__34__git_annex_lock__34___very_slow_for_big_repo/comment_4_a4fd212cb066cd53d0d66eb09f3b39a8._comment18
-rw-r--r--doc/forum/__91__announce__93___metadata_extration_utility.mdwn30
-rw-r--r--doc/forum/add_only_binary_files__63__.mdwn1
-rw-r--r--doc/forum/add_only_binary_files__63__/comment_1_7ce3be5bafd62ce5ed78bcd9323039cc._comment16
-rw-r--r--doc/forum/adding_files_without_hashing_them.mdwn1
-rw-r--r--doc/forum/adding_files_without_hashing_them/comment_1_c3113d7aff6b64a325a32b8b281df605._comment12
-rw-r--r--doc/forum/adding_remote_bup_repo_using_ssh.mdwn42
-rw-r--r--doc/forum/adding_remote_bup_repo_using_ssh/comment_1_d1ab38bccc415a94fa3906f7f5e823f3._comment18
-rw-r--r--doc/forum/adding_remote_bup_repo_using_ssh/comment_2_6698ecb746e6edb25130c8dbceb36fc0._comment8
-rw-r--r--doc/forum/annex_merge_creates___34__synced__47____42____34___branches.mdwn7
-rw-r--r--doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_1_4667fadb05c594b0a212bf455ee65298._comment12
-rw-r--r--doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_2_cb6971a766a28bd8c094d0b986272c65._comment11
-rw-r--r--doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_3_1a0384edd20cc379e53fe7d7f650f7e2._comment8
-rw-r--r--doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_4_79219e920a6beb4bd3265571f59f51cb._comment36
-rw-r--r--doc/forum/armhf_binary.mdwn3
-rw-r--r--doc/forum/armhf_binary/comment_1_9ca7ff6cb1f5dfc1e5ce8527e7e0a45f._comment8
-rw-r--r--doc/forum/armhf_binary/comment_2_743ecf263d1ec1bc4f24e32c0a178f2b._comment8
-rw-r--r--doc/forum/assistant_created_encrypted__backup_remote:_Howto_restore__63__/comment_3_1ecea12a4be5ad09013cddb62df6ab20._comment8
-rw-r--r--doc/forum/assistant_created_encrypted__backup_remote:_Howto_restore__63__/comment_4_af4bc222d1479482bd83952353c97f05._comment8
-rw-r--r--doc/forum/assistant_created_encrypted__backup_remote:_Howto_restore__63__/comment_5_c1d247fa128c0a0fc899284f5f95002c._comment8
-rw-r--r--doc/forum/assistant_created_encrypted__backup_remote:_Howto_restore__63__/comment_6_cf877a3502802492cd2bc3012cb2d779._comment12
-rw-r--r--doc/forum/best_practices_for_importing_photos__63__.mdwn13
-rw-r--r--doc/forum/best_practices_for_importing_photos__63__/comment_1_37f0ae4b552ec2a4a144ddcdc17c8453._comment19
-rw-r--r--doc/forum/best_practices_for_importing_photos__63__/comment_2_7f96f0fe0fc073321bd7c5bbd9048425._comment11
-rw-r--r--doc/forum/big_overhead.mdwn46
-rw-r--r--doc/forum/big_overhead/comment_10_d5f4e353e7f711d8c38cdcc222339bca._comment14
-rw-r--r--doc/forum/big_overhead/comment_11_cbf25217e4149f2cfad4e2bf94f2b4ca._comment8
-rw-r--r--doc/forum/big_overhead/comment_12_475d5af95adcfcd3a51e10f270205eb7._comment71
-rw-r--r--doc/forum/big_overhead/comment_13_1c8cc992f04fc63179094c494bd25025._comment10
-rw-r--r--doc/forum/big_overhead/comment_14_cbfb3d557915258e72c65a4e84df77a9._comment8
-rw-r--r--doc/forum/big_overhead/comment_15_b973529bae549bcbaaae792f0403989b._comment10
-rw-r--r--doc/forum/big_overhead/comment_1_0c184520c30a89bd2604ab7c0eb7ac45._comment8
-rw-r--r--doc/forum/big_overhead/comment_2_13a017c6c84511894ded2d89d86eb541._comment10
-rw-r--r--doc/forum/big_overhead/comment_3_b4761cacc02396b5bdf34bcf3457cb91._comment10
-rw-r--r--doc/forum/big_overhead/comment_4_633f8538f368220eaca82b8bbfe9b49d._comment16
-rw-r--r--doc/forum/big_overhead/comment_5_599092b8d4f1fc8f378796328ef42931._comment8
-rw-r--r--doc/forum/big_overhead/comment_6_adb4b4e7eb4dac7760f3425bae6cbbc2._comment8
-rw-r--r--doc/forum/big_overhead/comment_7_a762eb55addf81c1c5350c7968598d0f._comment16
-rw-r--r--doc/forum/big_overhead/comment_8_4a66f57c6c0bdc6123618cb69a719be5._comment65
-rw-r--r--doc/forum/big_overhead/comment_9_5fa681ea0d6bd0dcac7142d40df9d54f._comment12
-rw-r--r--doc/forum/canceling_wrong_repository_merge.mdwn3
-rw-r--r--doc/forum/canceling_wrong_repository_merge/comment_1_7230f2be014afcb40514ef521d53c170._comment7
-rw-r--r--doc/forum/comprehension_question:_repository_vs._working_copy_in_direct_mode.mdwn10
-rw-r--r--doc/forum/comprehension_question:_repository_vs._working_copy_in_direct_mode/comment_1_a6b4db0cefa439f72b97089d48dfacbd._comment16
-rw-r--r--doc/forum/could_not_read_from_remote_repository/comment_2_cf7d5e231675921c3d98faab3613c92f._comment49
-rw-r--r--doc/forum/differenc_in_webapp_icons__63__.mdwn4
-rw-r--r--doc/forum/differenc_in_webapp_icons__63__/comment_1_c38e2692b13a1b76777bf88312a03966._comment8
-rw-r--r--doc/forum/difference_between_full_backup_and_number_of_copies__63__.mdwn9
-rw-r--r--doc/forum/difference_between_full_backup_and_number_of_copies__63__/comment_1_df1850059a7a3006db7cb5c588dac3d7._comment8
-rw-r--r--doc/forum/dot_git_slash_annex_slash_tmp/comment_14_92b1e8956513dbf52da31cec3f58e2c5._comment104
-rw-r--r--doc/forum/dot_git_slash_annex_slash_tmp/comment_15_839e29d41de9dcc8f01dfdc585a51d12._comment12
-rw-r--r--doc/forum/downloading_from_moodle.mdwn76
-rw-r--r--doc/forum/downloading_from_moodle/comment_1_3f677130d268de4288e87cfa86ea055c._comment10
-rw-r--r--doc/forum/downloading_from_moodle/comment_2_dcef60ec144f123dadd165fb602ab950._comment8
-rw-r--r--doc/forum/downloading_from_moodle/comment_3_d3efb767bf9b20f96242dcf64817bd4b._comment8
-rw-r--r--doc/forum/drop__47__whereis_not_showing_gcrypted_special_ssh_remote.mdwn11
-rw-r--r--doc/forum/drop__47__whereis_not_showing_gcrypted_special_ssh_remote/comment_1_968bc2be595008790e9b93d82342714c._comment10
-rw-r--r--doc/forum/drop__47__whereis_not_showing_gcrypted_special_ssh_remote/comment_2_2c14d88e55ea7d4edc90ce0091025f32._comment10
-rw-r--r--doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__.mdwn24
-rw-r--r--doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_1_bb6d749b758b17178227929bf7327fe1._comment8
-rw-r--r--doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_2_d834df30633f7d5569797ee818cf38c3._comment20
-rw-r--r--doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_3_1e02eff33c9fa7bea03aa6d58b910175._comment14
-rw-r--r--doc/forum/empty_directory_handling.mdwn3
-rw-r--r--doc/forum/empty_directory_handling/comment_1_34ac97b9337b6230ed8a4748203fe543._comment8
-rw-r--r--doc/forum/empty_directory_handling/comment_2_73a39e28d5a09ac342cb4195d263d91e._comment8
-rw-r--r--doc/forum/error:_refs__47__heads__47__git-annex_does_not_point_to_a_valid_object__33__.mdwn17
-rw-r--r--doc/forum/error:_refs__47__heads__47__git-annex_does_not_point_to_a_valid_object__33__/comment_1_d370b044da3bfebf9e4c90ce1e243587._comment18
-rw-r--r--doc/forum/example_of_massively_disconnected_operation.mdwn2
-rw-r--r--doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks.mdwn27
-rw-r--r--doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks/comment_1_3167052f67706797b00423a50f2ae7f1._comment23
-rw-r--r--doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks/comment_2_0082ac7a148db69293a4e37fa6d6c891._comment11
-rw-r--r--doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks/comment_2_6411aa3e6f5c1515845f3223bbcdabf1._comment14
-rw-r--r--doc/forum/faking_location_information.mdwn19
-rw-r--r--doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory.mdwn112
-rw-r--r--doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_1_d98a155fa01d10ecff9058d79290156d._comment13
-rw-r--r--doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_2_3b9ea7a1254ac5b50a5ab59cd331ec3f._comment8
-rw-r--r--doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_3_5ee300034819c5825c676cd7e3af659f._comment12
-rw-r--r--doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_4_cf7f5c91d3c15f72d2a714b7362c1197._comment30
-rw-r--r--doc/forum/files_being_dropped_undesirably.mdwn47
-rw-r--r--doc/forum/files_being_dropped_undesirably/comment_1_d03f8ed7d3f3da58612bf238c1790fb4._comment11
-rw-r--r--doc/forum/files_being_dropped_undesirably/comment_2_7d885abebfec789348639494b1bb1829._comment24
-rw-r--r--doc/forum/files_being_dropped_undesirably/comment_3_7c70b58f89408304055eefb1b166ef2e._comment10
-rw-r--r--doc/forum/folder_size_question.mdwn3
-rw-r--r--doc/forum/folder_size_question/comment_1_782cbf836335d86ff29853c34f00fec3._comment12
-rw-r--r--doc/forum/folder_size_question/comment_2_391aa62e4d8c496a58be4707522d8edb._comment22
-rw-r--r--doc/forum/folder_size_question/comment_3_1e850dbe36fafe0505b60dd2ce0bd5d7._comment8
-rw-r--r--doc/forum/folder_size_question/comment_4_907f3b1cfe745abf94a6a8ba0dbd4396._comment25
-rw-r--r--doc/forum/gadu_-_git-annex_disk_usage/comment_13_8e0e86ae716ff018025808f417e1f7f6._comment14
-rw-r--r--doc/forum/gcrypt_os_x_app_vs_brew.mdwn18
-rw-r--r--doc/forum/gcrypt_os_x_app_vs_brew/comment_1_cce5e2c16720cc8e32a4a479f50ce6b3._comment8
-rw-r--r--doc/forum/gcrypt_os_x_app_vs_brew/comment_2_8df8ba1ccea0f68110593ed90a9cad6d._comment8
-rw-r--r--doc/forum/gcrypt_os_x_app_vs_brew/comment_3_be4de1663a37f49a4e42d6b21c0178fe._comment10
-rw-r--r--doc/forum/ghost_semitrusted_repositories.mdwn28
-rw-r--r--doc/forum/ghost_semitrusted_repositories/comment_1_99bea1a964da9c5603b8cfbdc19bcde8._comment19
-rw-r--r--doc/forum/ghost_semitrusted_repositories/comment_2_fe5fe5539d06c6b1ef69f3ed805f1ab4._comment8
-rw-r--r--doc/forum/ghost_semitrusted_repositories/comment_3_588325ef52c80cfc67d1dd80a9d5bd13._comment8
-rw-r--r--doc/forum/git-annes_assistant_+_MAC_OSX_questions.mdwn16
-rw-r--r--doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_1_e661f31acd08a6459842f7f95e5c062b._comment9
-rw-r--r--doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_2_e71a9d1fcf1f945fec0b7834b6038e91._comment21
-rw-r--r--doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_3_372d9da8295d093b8b316f0a48b60ee1._comment12
-rw-r--r--doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_4_573537a49e082515bfb1be84c91b5d1b._comment10
-rw-r--r--doc/forum/git-annex:_map:_1_failed.mdwn12
-rw-r--r--doc/forum/git-annex:_map:_1_failed/comment_1_35ff3256e823ab8cfc53276a2123ad5f._comment8
-rw-r--r--doc/forum/git-annex:_map:_1_failed/comment_2_b0826073ebbd2847f4ab0d9bdba2dce5._comment14
-rw-r--r--doc/forum/git-annex_and_tagfs/comment_2_8769d6e57061023c0828af3e38faafba._comment7
-rw-r--r--doc/forum/git-annex_and_tagfs/comment_3_d96948c444f9f485a329420b7c9e3b16._comment7
-rw-r--r--doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__.mdwn1
-rw-r--r--doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_1_29eda7ec1519f339d5b3601559fe0bb0._comment14
-rw-r--r--doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_2_a2b2183ee86377cdfef7c3acbe9552fb._comment11
-rw-r--r--doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_3_5605d42a68b3140cb660eb710ce5031e._comment12
-rw-r--r--doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_4_f56508164c71b2080150bc354e5de4b7._comment9
-rw-r--r--doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_5_c8cdb0faa342fe1f9407ad4c97e6bc3c._comment10
-rw-r--r--doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_6_25ce5eddeb1b65aacd5d86e09c3719b8._comment13
-rw-r--r--doc/forum/git-annex_sync_content_available_from_which_version__63__.mdwn12
-rw-r--r--doc/forum/git-annex_sync_content_available_from_which_version__63__/comment_1_104e1b7e7643844f221f85dcbe9c9c4b._comment8
-rw-r--r--doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved.mdwn1
-rw-r--r--doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_1_81111f59caea9f70cb9d597381e42c96._comment8
-rw-r--r--doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_2_8ca9156d21d9f3db0d83d6aa9b69caa0._comment17
-rw-r--r--doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_3_9da6ca0250ab0dcfc9a012df75e2e711._comment12
-rw-r--r--doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_4_55c52c45f3aaddfb63a1f53efe2ee582._comment8
-rw-r--r--doc/forum/git:___39__annex__39___is_not_a_git_command_error_after_installing.mdwn38
-rw-r--r--doc/forum/git:___39__annex__39___is_not_a_git_command_error_after_installing/comment_1_8a2e3be32800b7b8a6fa78bbdcba7608._comment8
-rw-r--r--doc/forum/git:___39__annex__39___is_not_a_git_command_error_after_installing/comment_2_451b3c89d1b98212d5c21efa4e535424._comment8
-rw-r--r--doc/forum/git_annex_assistant_-_Changing_repository_information.mdwn1
-rw-r--r--doc/forum/git_annex_assistant_-_Changing_repository_information/comment_1_cde71a410200a7478180748fdcde0352._comment8
-rw-r--r--doc/forum/git_annex_assistant_repository_history__63__.mdwn7
-rw-r--r--doc/forum/git_annex_assistant_repository_history__63__/comment_1_6f87f31e18cefedcc6bce95dbeb85a0b._comment8
-rw-r--r--doc/forum/git_annex_drop_not_freeing_space_on_filesystem.mdwn25
-rw-r--r--doc/forum/git_annex_drop_not_freeing_space_on_filesystem/comment_1_ce1b32c2765edb695e5d9dc8f0ac86e3._comment16
-rw-r--r--doc/forum/git_annex_ls___47___metadata_in_git_annex_whereis/comment_3_24c54ed70220974b98700bf717d1e770._comment29
-rw-r--r--doc/forum/git_annex_sync:_only_git-annex.mdwn3
-rw-r--r--doc/forum/git_annex_sync:_only_git-annex/comment_1_2be68ed36a1e6bfc896d5aea9463d3c7._comment14
-rw-r--r--doc/forum/git_annex_sync:_only_git-annex/comment_2_50e137e4d278dfd0103a41aff0cfa3a9._comment10
-rw-r--r--doc/forum/git_annex_sync:_only_git-annex/comment_3_7753f8276478e0e05c10dba2b84bbc49._comment12
-rw-r--r--doc/forum/git_annex_sync:_only_git-annex/comment_5_52010f21a15d76d68986aa1fba29aaf1._comment10
-rw-r--r--doc/forum/git_annex_sync:_only_git-annex/comment_6_df94154fbbc4edbf7ff658f61bde48b5._comment11
-rw-r--r--doc/forum/git_annex_whereis_--json_output_with_two_variables_with_same_name.mdwn21
-rw-r--r--doc/forum/git_annex_whereis_--json_output_with_two_variables_with_same_name/comment_1_3bfde59729b904aa1ef815427dd35ae6._comment8
-rw-r--r--doc/forum/git_annex_whereis_--json_output_with_two_variables_with_same_name/comment_2_d08a955a11953cc783f09bfba180dbd6._comment8
-rw-r--r--doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_7_15d918ededb5b8375b0ca13d0b3523ff._comment8
-rw-r--r--doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_8_dcc3f2c6d55006776610e8d770b61d12._comment9
-rw-r--r--doc/forum/how_to_commit_removed_files_as_repo-droped_entries.mdwn9
-rw-r--r--doc/forum/how_to_commit_removed_files_as_repo-droped_entries/comment_1_a9a4baebfb647898a76ee3d5ab6febfd._comment13
-rw-r--r--doc/forum/how_to_commit_removed_files_as_repo-droped_entries/comment_2_68392de15bae234de1332b8bc80cc2ff._comment26
-rw-r--r--doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__.mdwn5
-rw-r--r--doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_1_440dcd19ea2512f968858b780c2a2913._comment22
-rw-r--r--doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_2_e9b70386774996a3d0446faaa3219120._comment8
-rw-r--r--doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_3_3dbd76accad2df2fff14b55452c828ef._comment8
-rw-r--r--doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_4_bfb4758fdb2a4afafd9c4d45de5c5c6b._comment28
-rw-r--r--doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit.mdwn9
-rw-r--r--doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_1_a0551431a57ccab2463f2a6d43553337._comment15
-rw-r--r--doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_2_e96e8cf6e08e3a21bfcefbc202e78fe2._comment8
-rw-r--r--doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_3_2ad4c1a4bfe00c22444ab878c84a8830._comment47
-rw-r--r--doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_4_44639388349a9ea5eabda9ebf79817b3._comment8
-rw-r--r--doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_5_339123ab87b69b11d6e999ad6eaf6df5._comment8
-rw-r--r--doc/forum/ignore_changes_made_by_a_remote.mdwn8
-rw-r--r--doc/forum/ignore_changes_made_by_a_remote/comment_1_825676069d2e1554499b76fd8c306c30._comment10
-rw-r--r--doc/forum/ignore_changes_made_by_a_remote/comment_2_dff49b72f7e072fddaf68584beb97f3c._comment10
-rw-r--r--doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__.mdwn37
-rw-r--r--doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__/comment_1_82820ce711b87b092a21e31fd381ffce._comment19
-rw-r--r--doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__/comment_2_160e80583b647eae53aa120ca734e34a._comment9
-rw-r--r--doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__/comment_3_6d81a41edf052e310e1f80cc6add3c09._comment7
-rw-r--r--doc/forum/local_subtree_and_broken_symlinks.mdwn21
-rw-r--r--doc/forum/local_subtree_and_broken_symlinks/comment_1_779cc4e49cb4da8aea7f5743e6257f21._comment10
-rw-r--r--doc/forum/lsof_resource_use_problems.mdwn42
-rw-r--r--doc/forum/lsof_resource_use_problems/comment_1_a5e5d410545fa7f93f08936ec6aeee42._comment10
-rw-r--r--doc/forum/manual_update_of_.git__47__annex__47__objects/comment_2_a7bbf304b26650a786e358bdc01e3069._comment33
-rw-r--r--doc/forum/manual_update_of_.git__47__annex__47__objects/comment_3_a855096b683c4c4f84e72c797e065d59._comment12
-rw-r--r--doc/forum/metadata_limits.mdwn10
-rw-r--r--doc/forum/metadata_limits/comment_1_a20bbe49f2f23d23131221ec79c8b973._comment28
-rw-r--r--doc/forum/metadata_limits/comment_2_4e8995ccd5fc2e5ee5d89a0780e5df9d._comment10
-rw-r--r--doc/forum/misctmp_filling_up.mdwn11
-rw-r--r--doc/forum/misctmp_filling_up/comment_1_2739dec72fe0950dd070c8fab9fbd751._comment10
-rw-r--r--doc/forum/misctmp_filling_up/comment_2_440081b5e2b9b5b19e8cd5db3649a976._comment10
-rw-r--r--doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository.mdwn19
-rw-r--r--doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_1_419b27cb1c71bce021ef9f2e471aa92e._comment10
-rw-r--r--doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_2_dae4c7a42080dd89150159b2946839b1._comment8
-rw-r--r--doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_3_9d9fa65559ba4bb0e4676289b5a65684._comment8
-rw-r--r--doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_4_4e89b3590cc33b2565cd173ef7c85013._comment11
-rw-r--r--doc/forum/multiple_urls_for_the_same_UUID/comment_5_7237986a34228282c6b764309afc1d57._comment33
-rw-r--r--doc/forum/multiple_urls_for_the_same_UUID/comment_6_392819ba657569a1b997b58aa921a0ad._comment25
-rw-r--r--doc/forum/multiple_urls_for_the_same_UUID/comment_7_276cb5d94cbd10e9fc7d1cf4ac607273._comment27
-rw-r--r--doc/forum/new_linux_arm_tarball_build/comment_10_5f9735ec62478c99b8c814055206cff0._comment12
-rw-r--r--doc/forum/new_linux_arm_tarball_build/comment_11_859c44046b00fe885f6878cfe0e46360._comment10
-rw-r--r--doc/forum/new_linux_arm_tarball_build/comment_12_35ade68d62e95036344ad33db3279c21._comment8
-rw-r--r--doc/forum/new_linux_arm_tarball_build/comment_13_36f48c30894b9b225b812ba5e5b2f504._comment17
-rw-r--r--doc/forum/new_linux_arm_tarball_build/comment_14_67021b6d239690c9d18e8630aa2254ff._comment9
-rw-r--r--doc/forum/original_filename_on_s3.mdwn5
-rw-r--r--doc/forum/overmounting_repository_at_home.mdwn12
-rw-r--r--doc/forum/overmounting_repository_at_home/comment_1_399ac5014c489698e1e45deec4db7311._comment10
-rw-r--r--doc/forum/overmounting_repository_at_home/comment_2_d006d89ba204568cdee0731b6251ec1a._comment11
-rw-r--r--doc/forum/overmounting_repository_at_home/comment_3_3734b50c37cbec675813cbeca7bf4ce9._comment8
-rw-r--r--doc/forum/performance_and_multiple_replication_problems/comment_5_8df6cc8b72e0e78c7380f7d471124498._comment12
-rw-r--r--doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517.mdwn13
-rw-r--r--doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517/comment_1_807d7da99f732f2fa5f9d3cb1ba9f1a1._comment8
-rw-r--r--doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517/comment_2_92a7509fc42ab2347d57f080081d14b5._comment8
-rw-r--r--doc/forum/possible_gpg_issue.mdwn28
-rw-r--r--doc/forum/possible_gpg_issue/comment_1_c5a33ff375cddd001e6cb7be8d0ce940._comment8
-rw-r--r--doc/forum/possible_gpg_issue/comment_2_e5ea7fc9be496f71516a238522193744._comment8
-rw-r--r--doc/forum/possible_gpg_issue/comment_3_d505b6e5050d2afa7c8543e21918193d._comment31
-rw-r--r--doc/forum/possible_gpg_issue/comment_4_e52099d461d0df99040f664a3af23caf._comment17
-rw-r--r--doc/forum/possible_gpg_issue/comment_5_a0c8afc2d8583d30073b62396b254a6e._comment17
-rw-r--r--doc/forum/possible_gpg_issue/comment_6_2a0120d6b586594cfd9baabbd6605373._comment15
-rw-r--r--doc/forum/public__44___read_only_annex_without_location_tracking.mdwn7
-rw-r--r--doc/forum/public__44___read_only_annex_without_location_tracking/comment_1_47262f048a87fd6b781090f880a9bf99._comment12
-rw-r--r--doc/forum/public__44___read_only_annex_without_location_tracking/comment_2_ec3ff6487c9e5c89c7e508d72518bd50._comment10
-rw-r--r--doc/forum/recovery_from_failed_merge.mdwn7
-rw-r--r--doc/forum/recovery_from_failed_merge/comment_1_84e5b55d473d16bc9bdba5d88dc29bc3._comment10
-rw-r--r--doc/forum/remembering_state.mdwn5
-rw-r--r--doc/forum/remembering_state/comment_1_4a6ac5f50dfa5a17a0f0ccd0c2e7a466._comment8
-rw-r--r--doc/forum/remembering_state/comment_2_1b02d3713a2986bc027d166589a11c3f._comment9
-rw-r--r--doc/forum/remembering_state/comment_3_b48775ea1e90b061b084f61a4a9baca5._comment19
-rw-r--r--doc/forum/remembering_state/comment_4_cbebcc6ed4bdae6815c0576475e96f6a._comment8
-rw-r--r--doc/forum/remote_server_client_repositories_are_bare__33____63__/comment_3_32bf10cf837db16566dcc99d0b9aaf67._comment10
-rw-r--r--doc/forum/remote_server_client_repositories_are_bare__33____63__/comment_4_cd04cfaf97f200d5e581b83bb8d018b2._comment26
-rw-r--r--doc/forum/repair_stuck_on_ls-tree_command.mdwn54
-rw-r--r--doc/forum/repair_stuck_on_ls-tree_command/comment_10_791c50f8a2284b704e34cacf15637341._comment14
-rw-r--r--doc/forum/repair_stuck_on_ls-tree_command/comment_11_1d951126a9633b206dffbc77bfc65f6a._comment12
-rw-r--r--doc/forum/repair_stuck_on_ls-tree_command/comment_1_9555c925516ce3be83b4dd17d587100f._comment37
-rw-r--r--doc/forum/repair_stuck_on_ls-tree_command/comment_2_17327b90d09f8dd0bf7f359c16cf69dd._comment21
-rw-r--r--doc/forum/repair_stuck_on_ls-tree_command/comment_2_2ae0c755f5a0bf5c93afe5e081fcb915._comment19
-rw-r--r--doc/forum/repair_stuck_on_ls-tree_command/comment_4_875f9e36a94264a92eb097e9f4bda444._comment20
-rw-r--r--doc/forum/repair_stuck_on_ls-tree_command/comment_5_d5c29dc4ea49542f7053bf2e83e0f07f._comment17
-rw-r--r--doc/forum/repair_stuck_on_ls-tree_command/comment_6_061770159851c0f06a962937dff035b9._comment30
-rw-r--r--doc/forum/repair_stuck_on_ls-tree_command/comment_7_5d9e5fd148d5f9e918ad818e07009d69._comment30
-rw-r--r--doc/forum/repair_stuck_on_ls-tree_command/comment_8_726c9a887b7df1833d7aef3bdce50517._comment7
-rw-r--r--doc/forum/repair_stuck_on_ls-tree_command/comment_9_163cdd18380a13aaa13d68d516af1e30._comment7
-rw-r--r--doc/forum/repo_corruption_in_usb_external_drive.mdwn41
-rw-r--r--doc/forum/repo_corruption_in_usb_external_drive/comment_1_d9122bb0cc3551d92877c299a25b9c9e._comment10
-rw-r--r--doc/forum/retrieving_previous_versions/comment_2_e9251f66154e49a77be661c4b4918e18._comment16
-rw-r--r--doc/forum/retrieving_previous_versions/comment_3_5b0ca6fbc000727bf78f5fc4ba34b91a._comment9
-rw-r--r--doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__.mdwn13
-rw-r--r--doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__/comment_1_7754e2cfb72b034effe8642c1b3e593e._comment11
-rw-r--r--doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__/comment_2_04e1da4352ef9f9be90253ea726e5f24._comment12
-rw-r--r--doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__/comment_3_84aceb9a9d3e5bd14c044861f47e3b9d._comment10
-rw-r--r--doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__/comment_4_2cd17d01edeb230197865e6ea0884de0._comment8
-rw-r--r--doc/forum/rsync_asking_for_an_unknown_password.mdwn60
-rw-r--r--doc/forum/rsync_asking_for_an_unknown_password/comment_1_f23d1c04a27625089eaef5b4bb7f8456._comment12
-rw-r--r--doc/forum/rsync_asking_for_an_unknown_password/comment_2_ce4b399fdb2f04e30bd8a951994f1c80._comment10
-rw-r--r--doc/forum/s3_server_side_encryption.mdwn9
-rw-r--r--doc/forum/s3_server_side_encryption/comment_1_68345d01b016abf96c226d2bfa17c641._comment16
-rw-r--r--doc/forum/s3_server_side_encryption/comment_2_b2ccef6dc00d58e103ac0fda48ee94d3._comment10
-rw-r--r--doc/forum/s3_server_side_encryption/comment_3_3eb57b98e4136b8550ea5d19393fe967._comment12
-rw-r--r--doc/forum/s3_server_side_encryption/comment_4_71d6c2356af8974cb848c3574cf3eb6d._comment8
-rw-r--r--doc/forum/scalability_with_lots_of_files.mdwn43
-rw-r--r--doc/forum/scalability_with_lots_of_files/comment_1_b9bb0a71d81b8cbc2a751bb7bab84812._comment18
-rw-r--r--doc/forum/schedule_repository___91__expression__93__.mdwn1
-rw-r--r--doc/forum/schedule_repository___91__expression__93__/comment_1_b123b657a92897017973927e3e47673b._comment12
-rw-r--r--doc/forum/some_symlinks_left_in_direct_mode.mdwn5
-rw-r--r--doc/forum/some_symlinks_left_in_direct_mode/comment_1_fd8d8107861453f0aa6b2c390e369307._comment17
-rw-r--r--doc/forum/some_symlinks_left_in_direct_mode/comment_2_63f61caf28e834d48e12467bf09b2e3d._comment9
-rw-r--r--doc/forum/special_remote_for_IMAP/comment_4_0f8e01c453afb02aebf44b3fb2c9a7c1._comment8
-rw-r--r--doc/forum/ssh_key_setup_woes_in_Android.mdwn15
-rw-r--r--doc/forum/ssh_key_setup_woes_in_Android/comment_1_f16fbff27a449409699f3dbcf9590622._comment10
-rw-r--r--doc/forum/ssh_vs_cifs__47__webdav.mdwn7
-rw-r--r--doc/forum/sync_stages_deletions_on_remote.mdwn72
-rw-r--r--doc/forum/sync_stages_deletions_on_remote/comment_1_2b639066095e450c2d9be3b2775d24b3._comment8
-rw-r--r--doc/forum/sync_stages_deletions_on_remote/comment_2_da5775526a2a476b6ead1cd1a735b8bd._comment8
-rw-r--r--doc/forum/sync_stages_deletions_on_remote/comment_3_9e07593228915936fadcf90373be9f4e._comment14
-rw-r--r--doc/forum/sync_stages_deletions_on_remote/comment_4_e5a3dc34c6229ec40bc999c3cab28041._comment8
-rw-r--r--doc/forum/taskwarrior/comment_2_4b3d70501763f6d36c927ae37bbd33c2._comment8
-rw-r--r--doc/forum/telehash_syncing.mdwn10
-rw-r--r--doc/forum/tips:_special__95__remotes__47__hook_with_tahoe-lafs/comment_9_2592749c2f02b3e151896e31acba359b._comment8
-rw-r--r--doc/forum/trouble_with_multiple_remotes_syncing_to_gcrypt_based_ssh_repo_.mdwn7
-rw-r--r--doc/forum/trouble_with_multiple_remotes_syncing_to_gcrypt_based_ssh_repo_/comment_1_4ad9a6a7cf5678ac0bc6d46a54f64cd3._comment10
-rw-r--r--doc/forum/trouble_with_multiple_remotes_syncing_to_gcrypt_based_ssh_repo_/comment_2_82dc18ed14879936d04133f248879fb9._comment10
-rw-r--r--doc/forum/unannex_--fast_+_uninit_leaves_files_in_.git__47__annex__47__objects__63__.mdwn47
-rw-r--r--doc/forum/unannex_--fast_+_uninit_leaves_files_in_.git__47__annex__47__objects__63__/comment_1_4aaf93801119b36a01e452c7bb0fc7e9._comment18
-rw-r--r--doc/forum/unrelated_repositories_sync.mdwn15
-rw-r--r--doc/forum/unrelated_repositories_sync/comment_1_c899b7b05a96d14e25c2efadff3b4e52._comment10
-rw-r--r--doc/forum/update_via_cabal_fails.mdwn35
-rw-r--r--doc/forum/update_via_cabal_fails/comment_1_e1235dc2acd3bac3dd51b7614dabbb88._comment8
-rw-r--r--doc/forum/usability:_creating_an_archive_on_a_new_external_drive.mdwn13
-rw-r--r--doc/forum/usability:_creating_an_archive_on_a_new_external_drive/comment_1_27b5283c65c402f330263426e4ca6ac1._comment10
-rw-r--r--doc/forum/usability:_creating_an_archive_on_a_new_external_drive/comment_2_b3a6b5ff0aaddd78903fc7bc7fbd6ee2._comment10
-rw-r--r--doc/forum/usability:_creating_an_archive_on_a_new_external_drive/comment_3_aab934c0e37771d7f834d2567a9e76a1._comment13
-rw-r--r--doc/forum/usability:_what_are_those_arrow_things__63__.mdwn29
-rw-r--r--doc/forum/usability:_what_are_those_arrow_things__63__/comment_1_bf34c169c725f9504e0f2114ba53be4b._comment10
-rw-r--r--doc/forum/usability:_what_are_those_arrow_things__63__/comment_2_364ce8b369fd0ba7ddaec3127840ff39._comment16
-rw-r--r--doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__.mdwn20
-rw-r--r--doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__/comment_1_955f3aac12c1ddb41267c5a23ccb79e3._comment12
-rw-r--r--doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__/comment_2_0aff36755f49afddd5482a602a1ccd2b._comment10
-rw-r--r--doc/forum/using_git-annex_with_lightroom.mdwn6
-rw-r--r--doc/forum/using_git-annex_with_lightroom/comment_1_ec977efd277f0644767a4fc7064e4baf._comment8
-rw-r--r--doc/forum/using_git-annex_with_lightroom/comment_2_4dc4f1ea91c72418843a682fab1854d2._comment28
-rw-r--r--doc/forum/view_from_numeric_values.mdwn9
-rw-r--r--doc/forum/view_from_numeric_values/comment_1_f3c440f3f0104002a0020ba96ddcf87b._comment11
-rw-r--r--doc/forum/view_from_numeric_values/comment_2_2414e1a8cfd154c339d8fc0e4a630ae9._comment12
-rw-r--r--doc/forum/view_from_numeric_values/comment_3_7879a11cc9767cdaac14f9993182dc25._comment13
-rw-r--r--doc/forum/view_from_numeric_values/comment_4_517c7659654a6fc608eb3332053df8a4._comment28
-rw-r--r--doc/forum/view_including_files_with_no_tags.mdwn5
-rw-r--r--doc/forum/view_including_files_with_no_tags/comment_1_b0aafc023fbec33af268576c4c199af3._comment24
-rw-r--r--doc/forum/view_including_files_with_no_tags/comment_2_5ae9d5308371bdb1f94342c9f9b01aff._comment8
-rw-r--r--doc/forum/views___40__branches__41___never_get_deleted.mdwn16
-rw-r--r--doc/forum/views___40__branches__41___never_get_deleted/comment_1_ff53fa0b5f0c4a6554a37e3309e26925._comment12
-rw-r--r--doc/forum/views___40__branches__41___never_get_deleted/comment_3_1d4a3f4e83b288262e291262a6636602._comment21
-rw-r--r--doc/forum/views___40__branches__41___never_get_deleted/comment_3_4e96e5325fd12e48f190fe551a6ac07e._comment12
-rw-r--r--doc/forum/views___40__branches__41___never_get_deleted/comment_4_a4764b5bfb08ebe90430ea14fcb6e8e0._comment10
-rw-r--r--doc/forum/views___40__branches__41___never_get_deleted/comment_5_02e08dffb01246010b390aeef8f32234._comment8
-rw-r--r--doc/forum/warning:_remote_HEAD_refers_to_nonexistent_ref__44___unable_to_checkout.mdwn69
-rw-r--r--doc/forum/warning:_remote_HEAD_refers_to_nonexistent_ref__44___unable_to_checkout/comment_1_c0d9758be80d1a349ffe82c80075bebd._comment12
-rw-r--r--doc/forum/warning:_remote_HEAD_refers_to_nonexistent_ref__44___unable_to_checkout/comment_2_c28dae2eb0ab825ee6d43735e04a18a3._comment22
-rw-r--r--doc/forum/webapp_and_manual_mode/comment_3_f0739bf4304a91a5d4ec33ac2421c966._comment9
-rw-r--r--doc/forum/webapp_does_not_start.mdwn72
-rw-r--r--doc/forum/webapp_does_not_start/comment_1_dd27d30ce305562a1552f46c87b1cd27._comment12
-rw-r--r--doc/forum/webapp_does_not_start/comment_2_ef37f40288a1181ca619ae13b0f7a994._comment8
-rw-r--r--doc/forum/webapp_does_not_start/comment_3_6e625dba9f7fa36bf9c7e9d77fbadeff._comment9
-rw-r--r--doc/forum/weird_view_file_naming.mdwn13
-rw-r--r--doc/forum/weird_view_file_naming/comment_1_24a44f94194231bb8efe9b20ee311d4c._comment12
-rw-r--r--doc/forum/weird_view_file_naming/comment_2_2ff3002e45a7443f0502243b3690df9d._comment11
-rw-r--r--doc/forum/whereis_command_with_file_names_instead_of_hashes.mdwn7
-rw-r--r--doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_1_4eaca07152916adc18032fb404e4dd92._comment10
-rw-r--r--doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_2_94b43ac23ff8332b35723422eede8997._comment8
-rw-r--r--doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_3_45ffa6dd17667ecd6685f85f34046eff._comment10
-rw-r--r--doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_4_d459fbcf0db59b821ae67f4949e48103._comment14
-rw-r--r--doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_5_e52a8c9cb418fbc2e2cba71f37bd44ad._comment8
-rw-r--r--doc/future_proofing/comment_1_2614eb2e9b7b23fa9bb4251c0d025909._comment16
-rw-r--r--doc/git-annex-shell.mdwn17
-rw-r--r--doc/git-annex.mdwn328
-rw-r--r--doc/git-union-merge.mdwn2
-rw-r--r--doc/index.mdwn3
-rw-r--r--doc/install.mdwn25
-rw-r--r--doc/install/Android.mdwn9
-rw-r--r--doc/install/Android/comment_10_4b565e73f02f0e84bdf7e686b0d7bf5f._comment8
-rw-r--r--doc/install/ArchLinux.mdwn33
-rw-r--r--doc/install/ArchLinux/comment_1_da5919c986d2ae187bc2f73de9633978._comment8
-rw-r--r--doc/install/ArchLinux/comment_5_cbc960cd78bf5b90e3bb6cb605d6d970._comment10
-rw-r--r--doc/install/ArchLinux/comment_6_1d597d6a95f9c2df7dae6e98813e4865._comment36
-rw-r--r--doc/install/ArchLinux/comment_7_2d708977e2fad6b68803494576382df5._comment10
-rw-r--r--doc/install/ArchLinux/comment_8_5b5f5e0b64e5bfb1ea12e8b251c6fb5f._comment15
-rw-r--r--doc/install/Debian/comment_10_d5da996e106d2e4d8a822aa9bcc78596._comment12
-rw-r--r--doc/install/Debian/comment_11_84283676da247c401bc9b4bb12c2b453._comment8
-rw-r--r--doc/install/Debian/comment_11_b44ed53973ac26eedd3838df28f74a7e._comment7
-rw-r--r--doc/install/Debian/comment_12_0aca83b055d0a9dd8589c50250a8bbea._comment13
-rw-r--r--doc/install/Debian/comment_13_167a091764e5e99ec0f35a65e95a22de._comment8
-rw-r--r--doc/install/Debian/comment_16_89f67da4a4a6a626a7db9c6674b244b6._comment11
-rw-r--r--doc/install/Debian/comment_17_ef7f3e88d61833e51f0302e938343818._comment10
-rw-r--r--doc/install/Debian/comment_5_38e6399083e10a6a274f35bddc15d4ac._comment18
-rw-r--r--doc/install/Debian/comment_6_2e7bbdbaabbfb9d89de22e913066e822._comment8
-rw-r--r--doc/install/Debian/comment_9_97eaed998ffd1ed79585075ed5cff06e._comment8
-rw-r--r--doc/install/Docker.mdwn42
-rw-r--r--doc/install/Fedora.mdwn2
-rw-r--r--doc/install/Fedora/comment_7_4832d271dcc63a6cd1c40fe38ad5e367._comment24
-rw-r--r--doc/install/Fedora/comment_8_80e167cde1a6511683a8f6e8029c0da6._comment10
-rw-r--r--doc/install/Linux_standalone.mdwn16
-rw-r--r--doc/install/NixOS.mdwn4
-rw-r--r--doc/install/NixOS/comment_1_4e487ddd2654a8a992c1538b9c3bf003._comment21
-rw-r--r--doc/install/OSX.mdwn47
-rw-r--r--doc/install/OSX/Homebrew.mdwn21
-rw-r--r--doc/install/OSX/MacPorts.mdwn27
-rw-r--r--doc/install/OSX/MacPorts/comment_21_987f1302f56107c926b6daf83e124654._comment (renamed from doc/install/OSX/comment_21_987f1302f56107c926b6daf83e124654._comment)0
-rw-r--r--doc/install/OSX/MacPorts/comment_3_47a77a03040fe628109bd54f82f9ad7a._comment (renamed from doc/install/OSX/comment_3_47a77a03040fe628109bd54f82f9ad7a._comment)0
-rw-r--r--doc/install/OSX/comment_4_bbe99673033e4c48c8bb3db24ee419f9._comment8
-rw-r--r--doc/install/OSX/comment_8_b94193a0583605920effa7179a6164d9._comment10
-rw-r--r--doc/install/OSX/comment_9_f11f726d1fee3c4c91f3c984e792037d._comment8
-rw-r--r--doc/install/OSX/porting.mdwn7
-rw-r--r--doc/install/OSX/porting/comment_10_cd2120552ef894a37933b328136fa4cc._comment (renamed from doc/install/OSX/comment_10_cd2120552ef894a37933b328136fa4cc._comment)0
-rw-r--r--doc/install/OSX/porting/comment_11_740fa80e2e54e6fb570f820ff1f56440._comment (renamed from doc/install/OSX/comment_11_740fa80e2e54e6fb570f820ff1f56440._comment)0
-rw-r--r--doc/install/OSX/porting/comment_12_a84028080578a8b60115b6c4ef823627._comment (renamed from doc/install/OSX/comment_12_a84028080578a8b60115b6c4ef823627._comment)0
-rw-r--r--doc/install/OSX/porting/comment_13_d6f1db401858ffea23c123db49f5b296._comment (renamed from doc/install/OSX/comment_13_d6f1db401858ffea23c123db49f5b296._comment)0
-rw-r--r--doc/install/OSX/porting/comment_14_035f856923276b0edad879e196e94097._comment (renamed from doc/install/OSX/comment_14_035f856923276b0edad879e196e94097._comment)0
-rw-r--r--doc/install/OSX/porting/comment_15_336e0acb00e84943715e69917643a69e._comment (renamed from doc/install/OSX/comment_15_336e0acb00e84943715e69917643a69e._comment)0
-rw-r--r--doc/install/OSX/porting/comment_16_1befafa862b7d07b1f6e57c0182497cf._comment (renamed from doc/install/OSX/comment_16_1befafa862b7d07b1f6e57c0182497cf._comment)0
-rw-r--r--doc/install/OSX/porting/comment_17_19c08b2c6c2c5cd88bf96d2bcbbd9055._comment (renamed from doc/install/OSX/comment_17_19c08b2c6c2c5cd88bf96d2bcbbd9055._comment)0
-rw-r--r--doc/install/OSX/porting/comment_18_537fad5d8854e765499d47602d1ab398._comment (renamed from doc/install/OSX/comment_18_537fad5d8854e765499d47602d1ab398._comment)0
-rw-r--r--doc/install/OSX/porting/comment_19_18d4377f4ded5604d395d73783ba82c9._comment (renamed from doc/install/OSX/comment_19_18d4377f4ded5604d395d73783ba82c9._comment)0
-rw-r--r--doc/install/OSX/porting/comment_22_6b5f44a98f9d37a1c6ecfe19a60fe6c5._comment (renamed from doc/install/OSX/comment_22_6b5f44a98f9d37a1c6ecfe19a60fe6c5._comment)0
-rw-r--r--doc/install/OSX/porting/comment_23_3d82a270dd4b0159f4aab5675166e1e3._comment (renamed from doc/install/OSX/comment_23_3d82a270dd4b0159f4aab5675166e1e3._comment)0
-rw-r--r--doc/install/OSX/porting/comment_24_b9d3563a2cc3d769f27876e028dc344d._comment (renamed from doc/install/OSX/comment_24_b9d3563a2cc3d769f27876e028dc344d._comment)0
-rw-r--r--doc/install/OSX/porting/comment_27_2a60108a440231ba83f5a54b6bcc5488._comment (renamed from doc/install/OSX/comment_27_2a60108a440231ba83f5a54b6bcc5488._comment)0
-rw-r--r--doc/install/OSX/porting/comment_27_d453510b9bb62072a4c663206c12c8a4._comment (renamed from doc/install/OSX/comment_27_d453510b9bb62072a4c663206c12c8a4._comment)0
-rw-r--r--doc/install/OSX/porting/comment_28_0970bfd63137ea48701dff6aea1b4bcb._comment (renamed from doc/install/OSX/comment_28_0970bfd63137ea48701dff6aea1b4bcb._comment)0
-rw-r--r--doc/install/OSX/porting/comment_29_8622ed56c6a8034c20fb311418d94003._comment (renamed from doc/install/OSX/comment_29_8622ed56c6a8034c20fb311418d94003._comment)0
-rw-r--r--doc/install/OSX/porting/comment_30_ce58633ef5b2f8f4caa7e626358f33be._comment (renamed from doc/install/OSX/comment_30_ce58633ef5b2f8f4caa7e626358f33be._comment)0
-rw-r--r--doc/install/OSX/porting/comment_31_09084a7b3cf06bfa3add0f4991476ffe._comment (renamed from doc/install/OSX/comment_31_09084a7b3cf06bfa3add0f4991476ffe._comment)0
-rw-r--r--doc/install/OSX/porting/comment_32_a46d8e3e7795b9afb1e1c2be943d12af._comment (renamed from doc/install/OSX/comment_32_a46d8e3e7795b9afb1e1c2be943d12af._comment)0
-rw-r--r--doc/install/OSX/porting/comment_33_203a36322b3c453c05c8906c64e62e06._comment (renamed from doc/install/OSX/comment_33_203a36322b3c453c05c8906c64e62e06._comment)0
-rw-r--r--doc/install/OSX/porting/comment_34_874ff01f27911baf6ef0f559d5d5f5a0._comment (renamed from doc/install/OSX/comment_34_874ff01f27911baf6ef0f559d5d5f5a0._comment)0
-rw-r--r--doc/install/OSX/porting/comment_8_38d9c2eea1090674de2361274eab5b0e._comment (renamed from doc/install/OSX/comment_8_38d9c2eea1090674de2361274eab5b0e._comment)0
-rw-r--r--doc/install/OSX/porting/comment_9_35bf3812db6f3ef25da9b3bc84f147c5._comment (renamed from doc/install/OSX/comment_9_35bf3812db6f3ef25da9b3bc84f147c5._comment)0
-rw-r--r--doc/install/Ubuntu/comment_13_7964374bb2332940677eea570bdb0b69._comment8
-rw-r--r--doc/install/Ubuntu/comment_14_b511063001af2e2170bef657cf016ff2._comment12
-rw-r--r--doc/install/Windows.mdwn23
-rw-r--r--doc/install/cabal.mdwn58
-rw-r--r--doc/install/comment_1_0aa16754fb08d8f2a54c8c3f78b6c187._comment14
-rw-r--r--doc/install/fromscratch.mdwn27
-rw-r--r--doc/install/fromsource.mdwn74
-rw-r--r--doc/install/fromsource/comment_10_7ebe353b05d4df29897dc9a4f45c8a91._comment (renamed from doc/install/cabal/comment_10_7ebe353b05d4df29897dc9a4f45c8a91._comment)0
-rw-r--r--doc/install/fromsource/comment_11_0d06702e6e0ae3cd331cf748a9f6f273._comment (renamed from doc/install/cabal/comment_11_0d06702e6e0ae3cd331cf748a9f6f273._comment)0
-rw-r--r--doc/install/fromsource/comment_12_b93ca271dffca3f948645d3e1326c1d9._comment (renamed from doc/install/cabal/comment_12_b93ca271dffca3f948645d3e1326c1d9._comment)0
-rw-r--r--doc/install/fromsource/comment_13_3dac019cda71bf99878c0a1d9382323b._comment (renamed from doc/install/cabal/comment_13_3dac019cda71bf99878c0a1d9382323b._comment)0
-rw-r--r--doc/install/fromsource/comment_14_14b46470593f84f8c3768a91cb77bdab._comment (renamed from doc/install/cabal/comment_14_14b46470593f84f8c3768a91cb77bdab._comment)0
-rw-r--r--doc/install/fromsource/comment_15_c3a5b0aad28a90e0bb8da31a430578eb._comment (renamed from doc/install/cabal/comment_15_c3a5b0aad28a90e0bb8da31a430578eb._comment)0
-rw-r--r--doc/install/fromsource/comment_16_4faf214f97f9516898d7c17d743ef825._comment (renamed from doc/install/cabal/comment_16_4faf214f97f9516898d7c17d743ef825._comment)0
-rw-r--r--doc/install/fromsource/comment_17_2a9d6807a3a13815c824985521757167._comment (renamed from doc/install/cabal/comment_17_2a9d6807a3a13815c824985521757167._comment)0
-rw-r--r--doc/install/fromsource/comment_18_1efa0c7a963ec452fc6336fbe4964f6e._comment (renamed from doc/install/cabal/comment_18_1efa0c7a963ec452fc6336fbe4964f6e._comment)0
-rw-r--r--doc/install/fromsource/comment_19_6f42f9234f9ff6a2ca6bbb4d2643843e._comment (renamed from doc/install/cabal/comment_19_6f42f9234f9ff6a2ca6bbb4d2643843e._comment)0
-rw-r--r--doc/install/fromsource/comment_1_9d085e460553fa045999ab7cb945cdec._comment13
-rw-r--r--doc/install/fromsource/comment_1_f04df6bcd50d1d01eb34868bb00ac35c._comment (renamed from doc/install/cabal/comment_1_f04df6bcd50d1d01eb34868bb00ac35c._comment)0
-rw-r--r--doc/install/fromsource/comment_20_0f553be2a4c666e3bed58b2bce549406._comment (renamed from doc/install/cabal/comment_20_0f553be2a4c666e3bed58b2bce549406._comment)0
-rw-r--r--doc/install/fromsource/comment_21_f91a6ec21e96eced73ea9579fd8cbd15._comment (renamed from doc/install/cabal/comment_21_f91a6ec21e96eced73ea9579fd8cbd15._comment)0
-rw-r--r--doc/install/fromsource/comment_22_2f27b78215f97ade1986ca806c634cb3._comment (renamed from doc/install/cabal/comment_22_2f27b78215f97ade1986ca806c634cb3._comment)0
-rw-r--r--doc/install/fromsource/comment_23_c34d2b1d95830a3e58671a5b566a1758._comment (renamed from doc/install/cabal/comment_23_c34d2b1d95830a3e58671a5b566a1758._comment)0
-rw-r--r--doc/install/fromsource/comment_24_40cbde8ec067b3a860e6df1a9bea5f76._comment (renamed from doc/install/cabal/comment_24_40cbde8ec067b3a860e6df1a9bea5f76._comment)0
-rw-r--r--doc/install/fromsource/comment_25_8a7664e6f9271718dc607a0782366c5b._comment (renamed from doc/install/cabal/comment_25_8a7664e6f9271718dc607a0782366c5b._comment)0
-rw-r--r--doc/install/fromsource/comment_26_bd455c732639728bce2bfc39e32871d2._comment (renamed from doc/install/cabal/comment_26_bd455c732639728bce2bfc39e32871d2._comment)0
-rw-r--r--doc/install/fromsource/comment_27_c080e9239b6eec88d329c28da7bb4141._comment (renamed from doc/install/cabal/comment_27_c080e9239b6eec88d329c28da7bb4141._comment)0
-rw-r--r--doc/install/fromsource/comment_28_15951dd070a675300420eea137a28ef9._comment (renamed from doc/install/cabal/comment_28_15951dd070a675300420eea137a28ef9._comment)0
-rw-r--r--doc/install/fromsource/comment_29_ac082dca67f4a29b06070c0283130f52._comment (renamed from doc/install/cabal/comment_29_ac082dca67f4a29b06070c0283130f52._comment)0
-rw-r--r--doc/install/fromsource/comment_2_a69d17c55e56a707ec6606d5cdddee25._comment (renamed from doc/install/cabal/comment_2_a69d17c55e56a707ec6606d5cdddee25._comment)0
-rw-r--r--doc/install/fromsource/comment_2_b7954521d9ab40622b665f278dd72e17._comment10
-rw-r--r--doc/install/fromsource/comment_30_ad639c07cb79e89406e95c1dafce3a01._comment (renamed from doc/install/cabal/comment_30_ad639c07cb79e89406e95c1dafce3a01._comment)0
-rw-r--r--doc/install/fromsource/comment_31_4763b24a29627d55f465b9ea260ea7ec._comment (renamed from doc/install/cabal/comment_31_4763b24a29627d55f465b9ea260ea7ec._comment)0
-rw-r--r--doc/install/fromsource/comment_32_1d34c294486c85b1149675fa5861ae35._comment (renamed from doc/install/cabal/comment_32_1d34c294486c85b1149675fa5861ae35._comment)0
-rw-r--r--doc/install/fromsource/comment_33_8d4dfc33cada6091c30d3a43ce404b8b._comment (renamed from doc/install/cabal/comment_33_8d4dfc33cada6091c30d3a43ce404b8b._comment)0
-rw-r--r--doc/install/fromsource/comment_34_38451e751add6daf479b559c4b6a7c61._comment (renamed from doc/install/cabal/comment_34_38451e751add6daf479b559c4b6a7c61._comment)0
-rw-r--r--doc/install/fromsource/comment_35_4d44e4531e6686bd340f26836ad40026._comment (renamed from doc/install/cabal/comment_35_4d44e4531e6686bd340f26836ad40026._comment)0
-rw-r--r--doc/install/fromsource/comment_36_2a095a5af53a356bd29abd22a9cb1bea._comment16
-rw-r--r--doc/install/fromsource/comment_37_f33e1a4575dccc20b0d3d7c00e6db709._comment69
-rw-r--r--doc/install/fromsource/comment_38_5c1e96221154a4ae4ebd636232044ced._comment16
-rw-r--r--doc/install/fromsource/comment_39_a86057d7e6d47113330f79e1812c3a5d._comment10
-rw-r--r--doc/install/fromsource/comment_3_55bed050bdb768543dbe1b86edec057d._comment (renamed from doc/install/cabal/comment_3_55bed050bdb768543dbe1b86edec057d._comment)0
-rw-r--r--doc/install/fromsource/comment_3_a3bf3ce57ea73515a059267f25b816eb._comment23
-rw-r--r--doc/install/fromsource/comment_45_d9cccbb9620cc8218e72b5380fd89a05._comment8
-rw-r--r--doc/install/fromsource/comment_46_954de34275d33bc4590927f911761563._comment10
-rw-r--r--doc/install/fromsource/comment_47_6de25c1e450e1e3b1d18d2c76235ccb8._comment7
-rw-r--r--doc/install/fromsource/comment_48_9c08300c5d172ba9223042a00c8acb2b._comment18
-rw-r--r--doc/install/fromsource/comment_4_2ff7f8a3b03bea7e860248829d595bd1._comment (renamed from doc/install/cabal/comment_4_2ff7f8a3b03bea7e860248829d595bd1._comment)0
-rw-r--r--doc/install/fromsource/comment_4_765334858ef1eedff2c5d89ed42aa7f6._comment37
-rw-r--r--doc/install/fromsource/comment_5_4aea55dc5b24d84e0953382ccfea1a01._comment12
-rw-r--r--doc/install/fromsource/comment_5_8789fc27466714faa5a3a7a6b8ec6e5d._comment (renamed from doc/install/cabal/comment_5_8789fc27466714faa5a3a7a6b8ec6e5d._comment)0
-rw-r--r--doc/install/fromsource/comment_6_5afb2d081e8b603bc338cd460ad9317d._comment (renamed from doc/install/cabal/comment_6_5afb2d081e8b603bc338cd460ad9317d._comment)0
-rw-r--r--doc/install/fromsource/comment_7_129c4f2e404c874e5adfa52902a81104._comment (renamed from doc/install/cabal/comment_7_129c4f2e404c874e5adfa52902a81104._comment)0
-rw-r--r--doc/install/fromsource/comment_8_738c108f131e3aab0d720bc4fd6a81fd._comment (renamed from doc/install/cabal/comment_8_738c108f131e3aab0d720bc4fd6a81fd._comment)0
-rw-r--r--doc/install/fromsource/comment_9_5ddbba419d96a7411f7edddaa4d7b739._comment (renamed from doc/install/cabal/comment_9_5ddbba419d96a7411f7edddaa4d7b739._comment)0
-rw-r--r--doc/install/verifying_downloads.mdwn33
-rw-r--r--doc/internals.mdwn78
-rw-r--r--doc/internals/comment_3_5a26ee5aab274f321a4ea6f8527f53bd._comment12
-rw-r--r--doc/internals/hashing.mdwn5
-rw-r--r--doc/internals/hashing/comment_2_086ea37acf15e2a8694b8386222b73f6._comment11
-rw-r--r--doc/internals/hashing/comment_3_19b7d20ca392078f14f9f10992f288ec._comment7
-rw-r--r--doc/internals/hashing/comment_4_7642d6ce5fd4d37d464b05d0b4f869c6._comment8
-rw-r--r--doc/internals/key_format.mdwn14
-rw-r--r--doc/internals/lockdown/comment_1_caa8b378e8c35177083e6cc2f6937180._comment15
-rw-r--r--doc/internals/lockdown/comment_2_7bf74adb5556b7fc74a94e751c5fd3d6._comment13
-rw-r--r--doc/metadata.mdwn12
-rw-r--r--doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_2_341b567722797eb02bd96ffada431b0c._comment8
-rw-r--r--doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_3_d6f6e7181f30094339a49ab420bee380._comment9
-rw-r--r--doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_4_ab0d45c5058595a71656035c962c1143._comment13
-rw-r--r--doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_5_b92045c91d92da7db794aed2c67dde0d._comment9
-rw-r--r--doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_6_6f3b5d5a5781b3a570f46481dc2ebca2._comment9
-rw-r--r--doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_7_6202ae898f24b3e02bc343d0fd2ac35a._comment9
-rw-r--r--doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_8_884a0b9571544a95fad55cb5fc5963d8._comment15
-rw-r--r--doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_9_32b5d0fb9c328fbcd8105dfa31f032d3._comment16
-rw-r--r--doc/news/version_4.20130827/comment_1_937cbaccf235d6d9118aacd49058bb4f._comment11
-rw-r--r--doc/news/version_4.20130827/comment_2_faa5cf0645728b4ade850a691fa472db._comment25
-rw-r--r--doc/news/version_4.20130827/comment_3_ad156d6199b525884114ff823d265bf7._comment39
-rw-r--r--doc/news/version_4.20130827/comment_4_877061eb24d9d9543cc9cd229906bd64._comment8
-rw-r--r--doc/news/version_4.20130827/comment_5_8991648dda991768e3a58477a4c3c923._comment10
-rw-r--r--doc/news/version_5.20140116/comment_1_a5e85a3258ae8a241674dda4172b3e94._comment8
-rw-r--r--doc/news/version_5.20140116/comment_2_016ef01507edd6baa26c6c9a90f35ed7._comment10
-rw-r--r--doc/news/version_5.20140116/comment_3_e4b6899c3b12fc260806ba8d36df6158._comment8
-rw-r--r--doc/news/version_5.20140127/comment_1_776574c242235d9256da287048e38dc0._comment8
-rw-r--r--doc/news/version_5.20140127/comment_2_aea5d528f3e0fdc81d0ea83d65f48812._comment8
-rw-r--r--doc/news/version_5.20140210.mdwn42
-rw-r--r--doc/news/version_5.20140210/comment_1_97065912d6a204c7387d7de5e48de420._comment8
-rw-r--r--doc/news/version_5.20140210/comment_2_e589892996ca7cca3febdbf0f2cc379b._comment8
-rw-r--r--doc/news/version_5.20140221.mdwn28
-rw-r--r--doc/news/version_5.20140221/comment_1_d50bff4ee026db3397333e8ded7c5940._comment8
-rw-r--r--doc/news/version_5.20140227.mdwn32
-rw-r--r--doc/news/version_5.20140306.mdwn34
-rw-r--r--doc/news/version_5.20141219.mdwn20
-rw-r--r--doc/news/version_5.20141231.mdwn14
-rw-r--r--doc/news/version_5.20150113.mdwn25
-rw-r--r--doc/news/version_5.20150113/comment_1_e1da6b6d532d8eb08373347de3a4f7ec._comment9
-rw-r--r--doc/news/version_5.20150205.mdwn34
-rw-r--r--doc/not.mdwn2
-rw-r--r--doc/not/comment_14_837e3699014b73e8f2bd2a668eea9eef._comment23
-rw-r--r--doc/not/comment_15_ac7396ca125abb80a42f9aaaf61a6ab4._comment10
-rw-r--r--doc/preferred_content.mdwn59
-rw-r--r--doc/preferred_content/standard_groups.mdwn15
-rw-r--r--doc/preferred_content/standard_groups/comment_1_026e47e425d06c4b2580238b3187a379._comment13
-rw-r--r--doc/preferred_content/standard_groups/comment_2_460bae34ba7c05357318a202b2932d25._comment8
-rw-r--r--doc/privacy.mdwn2
-rw-r--r--doc/publicrepos.mdwn16
-rw-r--r--doc/related_software.mdwn9
-rw-r--r--doc/required_content.mdwn17
-rw-r--r--doc/scalability.mdwn5
-rw-r--r--doc/scalability/comment_1_a6656ae397277719d67d0953a28fe1d8._comment12
-rw-r--r--doc/scalability/comment_2_71c7c3aa97284602d0f64c11a98d1782._comment8
-rw-r--r--doc/special_remotes.mdwn21
-rw-r--r--doc/special_remotes/S3.mdwn26
-rw-r--r--doc/special_remotes/bittorrent.mdwn31
-rw-r--r--doc/special_remotes/bup.mdwn11
-rw-r--r--doc/special_remotes/bup/comment_12_fca579678edde073716f099c767767e1._comment10
-rw-r--r--doc/special_remotes/comment_21_5c11e69c28b9ed4cbe238a36c0839a47._comment15
-rw-r--r--doc/special_remotes/comment_22_308afc586b86c66bbb3437d63864d9cb._comment16
-rw-r--r--doc/special_remotes/comment_23_0f5440e0e54cf7ac2a68b1ba115b0930._comment10
-rw-r--r--doc/special_remotes/ddar.mdwn40
-rw-r--r--doc/special_remotes/directory.mdwn12
-rw-r--r--doc/special_remotes/external.mdwn8
-rwxr-xr-xdoc/special_remotes/external/example.sh15
-rwxr-xr-xdoc/special_remotes/external/git-annex-remote-torrent203
-rw-r--r--doc/special_remotes/gcrypt.mdwn9
-rw-r--r--doc/special_remotes/glacier.mdwn2
-rw-r--r--doc/special_remotes/glacier/comment_8_a04bb5f27c1a7cfffe881903f973dbec._comment24
-rw-r--r--doc/special_remotes/glacier/comment_9_89c4506e079c299fd098d0fe746d032a._comment8
-rw-r--r--doc/special_remotes/hook.mdwn2
-rw-r--r--doc/special_remotes/rsync.mdwn14
-rw-r--r--doc/special_remotes/tahoe.mdwn6
-rw-r--r--doc/special_remotes/webdav.mdwn14
-rw-r--r--doc/special_remotes/webdav/comment_10_2c087a132c2203ac20636800bf73dfa7._comment8
-rw-r--r--doc/special_remotes/webdav/comment_11_cde4fccaf551ba1eab8235ebf6654316._comment10
-rw-r--r--doc/special_remotes/webdav/comment_12_76423262fceeced32ab18fa38ed53bdb._comment15
-rw-r--r--doc/special_remotes/webdav/comment_14_2390020fa7daac8a6d3e8b713bd3b8e7._comment12
-rw-r--r--doc/special_remotes/webdav/comment_14_45e3b7094d0611b2e082be352f74151a._comment18
-rw-r--r--doc/special_remotes/webdav/comment_15_d43673b8c8ed3534f31d026098ab673c._comment8
-rw-r--r--doc/special_remotes/webdav/comment_9_b8f17efe524bb45a3e16705996df1265._comment8
-rw-r--r--doc/sync/comment_11_7683879f6982c0eb0aa39b66ff5a5ea9._comment10
-rw-r--r--doc/sync/comment_12_2fea14fa314ddb7ab645a5cca5a95fd9._comment14
-rw-r--r--doc/sync/comment_13_690f66be9cefe28844d8df653b7a0331._comment10
-rw-r--r--doc/sync/comment_14_db342785a4dade30b5b75cb95031bed1._comment8
-rw-r--r--doc/sync/comment_15_168e0ab10b4084e13df1a3058fa7e8a9._comment8
-rw-r--r--doc/sync/comment_16_96096f994fc55f921f2b24b274f998f7._comment8
-rw-r--r--doc/sync/comment_17_44a4ae4685c4bf2b4e7c61897eb3ff80._comment14
-rw-r--r--doc/sync/comment_18_838fb249cd5be83962770d5cc394389a._comment9
-rw-r--r--doc/templates/buglist.tmpl25
-rw-r--r--doc/thanks.mdwn20
-rw-r--r--doc/tips/Bup_repositories_in_git-annex.mdwn51
-rw-r--r--doc/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo/comment_5_3062c0794ecd7c6237efae66f4d9b62f._comment13
-rw-r--r--doc/tips/Synology_NAS_and_git_annex/comment_1_ef7e19f1fd2005eb7cc74509ffb92766._comment9
-rw-r--r--doc/tips/Synology_NAS_and_git_annex/comment_2_5e723ccf026fe970ad31207f9f036b69._comment30
-rw-r--r--doc/tips/Synology_NAS_and_git_annex/comment_3_8beb2b4b79c7787a92689aaad3bfc452._comment10
-rw-r--r--doc/tips/Synology_NAS_and_git_annex/comment_4_b04a1245378d3580432e85dff8eefdec._comment26
-rw-r--r--doc/tips/Synology_NAS_and_git_annex/comment_5_7e4ec2b22fb15e653d3b2274493e460c._comment11
-rw-r--r--doc/tips/Synology_NAS_and_git_annex/comment_6_954fc1b423208928fafdeb8cdac47c50._comment8
-rw-r--r--doc/tips/ZSH_completion.mdwn13
-rw-r--r--doc/tips/automatically_adding_metadata.mdwn2
-rw-r--r--doc/tips/automatically_adding_metadata/comment_2_bd64a53914107bc000c887b4d4bdf6af._comment12
-rw-r--r--doc/tips/automatically_adding_metadata/comment_3_02e5314f827d17d482343e8f22c42fd9._comment10
-rw-r--r--doc/tips/automatically_adding_metadata/comment_4_cd3c8e2f45db93576d1b82cfbfbe601b._comment12
-rw-r--r--doc/tips/automatically_adding_metadata/comment_5_888f0a77405d616a0d51a6176b44f605._comment11
-rw-r--r--doc/tips/automatically_adding_metadata/comment_6_34f0c55d09ddee3de642f6b25a9f6269._comment9
-rw-r--r--doc/tips/automatically_adding_metadata/comment_7_94877b21bf80374c2874b971f26f0e55._comment16
-rwxr-xr-xdoc/tips/automatically_adding_metadata/pre-commit-annex24
-rw-r--r--doc/tips/centralised_repository:_starting_from_nothing.mdwn18
-rw-r--r--doc/tips/centralized_git_repository_tutorial.mdwn2
-rw-r--r--doc/tips/centralized_git_repository_tutorial/comment_3_8894229043935e70089caf67f0cc4ddb._comment10
-rw-r--r--doc/tips/centralized_git_repository_tutorial/comment_4_b496622537d2491854b02884acf1672c._comment11
-rw-r--r--doc/tips/deleting_unwanted_files.mdwn40
-rw-r--r--doc/tips/downloading_podcasts.mdwn12
-rw-r--r--doc/tips/downloading_podcasts/comment_21_98a1dacc8d264ff31801e6c5c5f2612d._comment8
-rw-r--r--doc/tips/downloading_podcasts/comment_22_00cc7a2fb936d7ea3d5d3764a1637663._comment10
-rw-r--r--doc/tips/downloading_podcasts/comment_23_62603cda8e581a2eb2cc799dffe8a740._comment15
-rw-r--r--doc/tips/downloading_podcasts/comment_24_e75af243654d15bc7b917fcd888bcf2f._comment13
-rw-r--r--doc/tips/dumb_metadata_extraction_from_xbmc.mdwn29
-rw-r--r--doc/tips/dumb_metadata_extraction_from_xbmc/git-annex-xbmc-playcount.pl227
-rw-r--r--doc/tips/emacs_integration.mdwn4
-rw-r--r--doc/tips/file_manager_integration.mdwn115
-rw-r--r--doc/tips/file_manager_integration/comment_1_0f82520f415b4715946358658e1799a8._comment8
-rw-r--r--doc/tips/file_manager_integration/comment_2_9cb6b7fcb8e33a75efd2f92d7e40a9c5._comment8
-rw-r--r--doc/tips/file_manager_integration/comment_3_e7096737268cf66fce2709e9e4937f51._comment8
-rw-r--r--doc/tips/flickrannex/comment_14_c728f10074d194efa8b2c60e97d275e7._comment12
-rw-r--r--doc/tips/flickrannex/comment_15_2dd75800e4db58761fcbbd1954a36f1f._comment11
-rw-r--r--doc/tips/flickrannex/comment_16_2f65093ec9f6d67d2cfe5b5fae201123._comment10
-rw-r--r--doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_10_4440a80d64c60c7312d5c405d54e607a._comment2
-rw-r--r--doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_9_3784e0c828cd60b6a9075c2d32d070cc._comment2
-rw-r--r--doc/tips/googledriveannex/comment_2_c98c00e87bc921158c9c3698fd9f89c9._comment23
-rw-r--r--doc/tips/googledriveannex/comment_3_e7ba5620c0946874f0ae1287f99d1177._comment8
-rw-r--r--doc/tips/googledriveannex/comment_4_239091adaea6ae39fa9a4d9719667a98._comment41
-rw-r--r--doc/tips/googledriveannex/comment_5_b547ee81946e14975f082f22ccbea035._comment29
-rw-r--r--doc/tips/googledriveannex/comment_6_3a693129a0928b327c7ac4ef45c96acb._comment10
-rw-r--r--doc/tips/googledriveannex/comment_7_3a645a0cd1e4c939b7a4b8a97a0e9b03._comment26
-rw-r--r--doc/tips/googledriveannex/comment_8_7df56c426b27f12dfde09edf345cb76b._comment8
-rw-r--r--doc/tips/megaannex/comment_1_eec701662debd2a78c48243dbcebf59a._comment8
-rw-r--r--doc/tips/megaannex/comment_2_c1158b7ec15646d64cae8215ce845642._comment10
-rw-r--r--doc/tips/metadata_driven_views.mdwn6
-rw-r--r--doc/tips/metadata_driven_views/comment_1_1d6793701fd8a1a66bae04662cf853ce._comment12
-rw-r--r--doc/tips/metadata_driven_views/comment_2_13ae4e3668b693c0eefaca23b88515cf._comment9
-rw-r--r--doc/tips/metadata_driven_views/comment_3_196f55e52a5d8a8f061603ab87ad04ad._comment18
-rw-r--r--doc/tips/owncloudannex/comment_8_6579203d726f4a39db02fcdda156e12c._comment8
-rw-r--r--doc/tips/publishing_your_files_to_the_public.mdwn55
-rw-r--r--doc/tips/publishing_your_files_to_the_public/comment_1_48f545ce26dbec944f96796ed3b9204d._comment21
-rw-r--r--doc/tips/shared_git_annex_directory_between_multiple_users/comment_1_01db8cf9dff016bd8e0498d36f325418._comment8
-rw-r--r--doc/tips/skydriveannex/comment_10_c3465b5587548dea56b80b32cd66d653._comment16
-rw-r--r--doc/tips/skydriveannex/comment_1_bf383481b2bbb962fbfe783b9f2f213a._comment8
-rw-r--r--doc/tips/skydriveannex/comment_2_1f747018b35ab8accd2bf0905e6ad926._comment8
-rw-r--r--doc/tips/skydriveannex/comment_3_8b9444006734262693f71e50a40eae1d._comment19
-rw-r--r--doc/tips/skydriveannex/comment_4_8b01dc6ca1082a8c24ff65fec9d759d8._comment8
-rw-r--r--doc/tips/skydriveannex/comment_5_1d220d96945d497f3a93b5d848eb3995._comment8
-rw-r--r--doc/tips/skydriveannex/comment_6_a7a3afdc7eed9a0eda48dcb57f1e87c6._comment12
-rw-r--r--doc/tips/skydriveannex/comment_7_7fcd9c6b5e2a3fc7b753eeac06164036._comment18
-rw-r--r--doc/tips/skydriveannex/comment_8_856eaa1b167033aede91a937099c7833._comment18
-rw-r--r--doc/tips/skydriveannex/comment_9_cfcf767a1bf07957b76d7f44ef8a9500._comment14
-rw-r--r--doc/tips/transmission_integration.mdwn11
-rw-r--r--doc/tips/transmission_integration/transmission_integration.sh38
-rw-r--r--doc/tips/using_Amazon_S3.mdwn6
-rw-r--r--doc/tips/using_Amazon_S3/comment_10_43f3f12a83e3ace1674eae395b865409._comment9
-rw-r--r--doc/tips/using_Amazon_S3/comment_11_70b4e62aabb93d078811cbdcd3cced20._comment24
-rw-r--r--doc/tips/using_Amazon_S3/comment_12_d00472bf4ac5f7b2212073c081ba04c2._comment12
-rw-r--r--doc/tips/using_Amazon_S3/comment_3_32acba030c2ad252e2f7027075e4303e._comment8
-rw-r--r--doc/tips/using_Amazon_S3/comment_4_92df5a9f923beafba55a1c455728112e._comment13
-rw-r--r--doc/tips/using_Amazon_S3/comment_5_6b288e06010bedbb71e0afed6b427704._comment8
-rw-r--r--doc/tips/using_Amazon_S3/comment_6_3b6c74b40ea666389ac04b52ab0819a0._comment10
-rw-r--r--doc/tips/using_Amazon_S3/comment_7_cf6755d88463878f2ea6e4c300899027._comment33
-rw-r--r--doc/tips/using_Amazon_S3/comment_8_4f9c2f6627f8ed3423bcc8b7bf2f76cb._comment10
-rw-r--r--doc/tips/using_Amazon_S3/comment_9_47e4ea77d0262d332d86a06d7aaeddd8._comment11
-rw-r--r--doc/tips/using_Google_Cloud_Storage/comment_2_0843bfb776b8b6d5de4de7fda4489f34._comment15
-rw-r--r--doc/tips/using_Google_Cloud_Storage/comment_3_9738f145014d8eae1f1aae7c39e71d31._comment12
-rw-r--r--doc/tips/using_box.com_as_a_special_remote.mdwn8
-rw-r--r--doc/tips/using_gitolite_with_git-annex.mdwn66
-rw-r--r--doc/tips/using_gitolite_with_git-annex/comment_19_33c19097b6f2b48dfe09ec4c8d952d06._comment11
-rw-r--r--doc/tips/using_gitolite_with_git-annex/comment_20_c82af00db3dd74ee9bfe12668e76e57b._comment13
-rw-r--r--doc/tips/using_gitolite_with_git-annex/comment_21_d2feaaf22d41413048dabf706d1b267e._comment8
-rw-r--r--doc/tips/using_gitolite_with_git-annex/comment_22_90ead0e1fe8615fe11f6f1bd7dcd7e84._comment13
-rw-r--r--doc/tips/using_the_web_as_a_special_remote.mdwn12
-rw-r--r--doc/tips/using_the_web_as_a_special_remote/comment_11_9889828caa47aad88267d0ec35f2240d._comment7
-rw-r--r--doc/tips/using_the_web_as_a_special_remote/comment_12_2ce018f181e039b5dd52e2b712f63eea._comment7
-rw-r--r--doc/tips/using_the_web_as_a_special_remote/comment_5_5ee9717e74ca2afed98e81fc0ea98a95._comment18
-rw-r--r--doc/tips/using_the_web_as_a_special_remote/comment_6_dceb15bd656e69eefa3ca975d9d642de._comment8
-rw-r--r--doc/tips/using_the_web_as_a_special_remote/comment_7_0bde977c62a53c90cb20491936bc399d._comment8
-rw-r--r--doc/tips/using_the_web_as_a_special_remote/comment_8_3f32d536f51d5e9908953caf5736b0a0._comment16
-rw-r--r--doc/tips/using_the_web_as_a_special_remote/comment_9_b420b1f320d620a9909cce5086c549bf._comment8
-rw-r--r--doc/tips/what_to_do_when_a_repository_is_corrupted.mdwn5
-rw-r--r--doc/tips/what_to_do_when_a_repository_is_corrupted/comment_1_c3543190eae2af594f3e050057e80db6._comment8
-rw-r--r--doc/tips/what_to_do_when_a_repository_is_corrupted/comment_2_025178c2b11affe2d42a87544b897dc8._comment8
-rw-r--r--doc/tips/what_to_do_when_a_repository_is_corrupted/comment_3_9a6bae9c0326ecc7610f5415db20f49e._comment8
-rw-r--r--doc/todo.mdwn2
-rw-r--r--doc/todo/A_Way_To_Extract_Previous_Versions_of_a_File_From_a_Direct_Repo.mdwn25
-rw-r--r--doc/todo/A_Way_To_Extract_Previous_Versions_of_a_File_From_a_Direct_Repo/comment_1_6f477af942aeb98683a56bcf0e819a38._comment11
-rw-r--r--doc/todo/A_Way_To_Extract_Previous_Versions_of_a_File_From_a_Direct_Repo/comment_2_45c22f596a18d5dc2331cfeef8c767fa._comment12
-rw-r--r--doc/todo/A_Way_To_Extract_Previous_Versions_of_a_File_From_a_Direct_Repo/comment_3_cbca264d86fe733b8106a4bf50c0c6ff._comment8
-rw-r--r--doc/todo/Bittorrent-like_features.mdwn4
-rw-r--r--doc/todo/Bittorrent-like_features/comment_5_194dd0e8404ea72af9fb6ff34b994998._comment20
-rw-r--r--doc/todo/Bittorrent-like_features/comment_6_489505da4143fb1c2bf21e7af695cdef._comment9
-rw-r--r--doc/todo/Build_for_Synology_DSM.mdwn4
-rw-r--r--doc/todo/Build_for_Synology_DSM/comment_10_e351084d9a83db3fd6d9d983227a6410._comment8
-rw-r--r--doc/todo/Build_for_Synology_DSM/comment_11_cc67a584f5c460a6fb63cf099c20e573._comment9
-rw-r--r--doc/todo/Build_for_Synology_DSM/comment_12_94023593d294b9cf69090fcfd6ca0e5a._comment9
-rw-r--r--doc/todo/Build_for_Synology_DSM/comment_13_314255fd503d125b5aeae2f62acfd592._comment8
-rw-r--r--doc/todo/Build_for_Synology_DSM/comment_15_9525cd0d75ff4c15182d10a855774b69._comment30
-rw-r--r--doc/todo/Build_for_Synology_DSM/comment_15_c12f525ef4cbe42cdf20fec0d53c8d86._comment10
-rw-r--r--doc/todo/Build_for_Synology_DSM/comment_1_4059016fa8da6af7a3eba8966821e8eb._comment10
-rw-r--r--doc/todo/Build_for_Synology_DSM/comment_2_8900c2985ab68b3b566c9f5d326471d6._comment8
-rw-r--r--doc/todo/Build_for_Synology_DSM/comment_3_f2b77368473d42b7f21e9d51d6415b58._comment10
-rw-r--r--doc/todo/Build_for_Synology_DSM/comment_4_a55fea734044c270ceb10adf9c8d9a76._comment8
-rw-r--r--doc/todo/Build_for_Synology_DSM/comment_5_59865ada057c640ac29855c65cf45dd9._comment23
-rw-r--r--doc/todo/Build_for_Synology_DSM/comment_6_6d860b1ad8816077b5fa596a71b12d5c._comment8
-rw-r--r--doc/todo/Build_for_Synology_DSM/comment_7_19ef2d293ba3bc7ece443d7278371c3f._comment8
-rw-r--r--doc/todo/Build_for_Synology_DSM/comment_8_609b7ad87dfbba49ec1f8c6fc2739ccd._comment12
-rw-r--r--doc/todo/Build_for_Synology_DSM/comment_9_d94a73b9a07c5cadf191005f817fd59a._comment29
-rw-r--r--doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client.mdwn (renamed from doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client.mdwn)0
-rw-r--r--doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_10_e33dddf4d1f104107c86800a0a9a89b2._comment7
-rw-r--r--doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_1_25eb2d7d0a9cdd1c55df0cec68472723._comment (renamed from doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_1_25eb2d7d0a9cdd1c55df0cec68472723._comment)0
-rw-r--r--doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_2_9e9b96e5113a50533251e946c2560d81._comment (renamed from doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_2_9e9b96e5113a50533251e946c2560d81._comment)0
-rw-r--r--doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_3_6b091198ddd6ed709b076df1296aeb77._comment (renamed from doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_3_6b091198ddd6ed709b076df1296aeb77._comment)0
-rw-r--r--doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_4_118b588685b535cca4c02eb6ef297c67._comment (renamed from doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_4_118b588685b535cca4c02eb6ef297c67._comment)0
-rw-r--r--doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_5_5cead277493e1c020e16be6f9245fe33._comment (renamed from doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_5_5cead277493e1c020e16be6f9245fe33._comment)0
-rw-r--r--doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_6_0f135f97c2808dce094628dc6608e617._comment (renamed from doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_6_0f135f97c2808dce094628dc6608e617._comment)0
-rw-r--r--doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_7_1d6f47f9e6cf935f19d68af6d5aa92fa._comment (renamed from doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_7_1d6f47f9e6cf935f19d68af6d5aa92fa._comment)0
-rw-r--r--doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_8_c5758fdb32348b9cd804ff17d27864e1._comment (renamed from doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_8_c5758fdb32348b9cd804ff17d27864e1._comment)0
-rw-r--r--doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_9_3f0bfc5a79aa59ac76a6968aacda6655._comment10
-rw-r--r--doc/todo/Check_if_an_upgrade_is_available_in_the_webapp.mdwn5
-rw-r--r--doc/todo/Check_if_an_upgrade_is_available_in_the_webapp/comment_1_c904182f6bff8b1a42070bbc038eb34e._comment17
-rw-r--r--doc/todo/Check_if_an_upgrade_is_available_in_the_webapp/comment_2_ebe7a75ca291e7f749bfe9f46d10909d._comment8
-rw-r--r--doc/todo/Chunks_support_in_all_special_remotes.mdwn10
-rw-r--r--doc/todo/Chunks_support_in_all_special_remotes/comment_1_d12604dbeb42bbb6850425d237cb01e7._comment8
-rw-r--r--doc/todo/Configuring_metadata_view_filenames.mdwn1
-rw-r--r--doc/todo/Configuring_metadata_view_filenames/comment_1_08f8f27e5a8dbd80a91ffd9fd6f64e6c._comment23
-rw-r--r--doc/todo/Deduplicate_archive___40__i.e._zip__41___files.mdwn9
-rw-r--r--doc/todo/Deduplicate_archive___40__i.e._zip__41___files/comment_1_619840f2337b018ff165565325cf1a61._comment10
-rw-r--r--doc/todo/Enhancement:_git_annex_whereis_KEY.mdwn19
-rw-r--r--doc/todo/Expose_auto-merge_for_manual__44___local_merges.mdwn9
-rw-r--r--doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running.mdwn5
-rw-r--r--doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_1_e5f2630591ffa7758ca4250a061a8589._comment12
-rw-r--r--doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_2_f8a5cc905d5b06bdbb1a778ab866a28c._comment44
-rw-r--r--doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_3_626c629654508d0d948ece849d43ed86._comment8
-rw-r--r--doc/todo/Feature_Request:_Sync_Now_Button_in_Webapp.mdwn3
-rw-r--r--doc/todo/Feature_Request:_Sync_Now_Button_in_Webapp/comment_1_0d5c90eb0e8fe61b82a19c5fea343613._comment8
-rw-r--r--doc/todo/Feature_Request:_Sync_Now_Button_in_Webapp/comment_2_196552002d70390e8b52b4af61dca903._comment8
-rw-r--r--doc/todo/LIst_of_Available_Remotes_in_Webapp.mdwn1
-rw-r--r--doc/todo/LIst_of_Available_Remotes_in_Webapp/comment_1_23fe2f3cd44c4357a385452dcd5eedef._comment10
-rw-r--r--doc/todo/Limit_file_revision_history.mdwn117
-rw-r--r--doc/todo/Move_ssh_config_to___126____47__ssh__47__git-annex__47__config.mdwn2
-rw-r--r--doc/todo/New_special_remote_suggeston_-_clean_directory.mdwn8
-rw-r--r--doc/todo/Not_working_on_Android-x86/comment_3_6b609af60bf1c477139e40eba5cb0c4e._comment10
-rw-r--r--doc/todo/Option_for_browser_to_launch_webapp_with.mdwn7
-rw-r--r--doc/todo/Pause_all_transfers_in_all_annexes_watched_by_the_assistant.mdwn11
-rw-r--r--doc/todo/Please_abort_build_if___34__make_test__34___fails.mdwn7
-rw-r--r--doc/todo/Please_add_support_for_monad-control_0.3.x.mdwn9
-rw-r--r--doc/todo/Provide_a___34__git_annex_satisfy__95__num__95__copies__34___command.mdwn16
-rw-r--r--doc/todo/Recovering_from_a_bad_sync.mdwn31
-rw-r--r--doc/todo/Recovering_from_a_bad_sync/comment_1_6f5f518a3190534b737203787149ef3c._comment10
-rw-r--r--doc/todo/Recovering_from_a_bad_sync/comment_2_e494df56dcede4d14bcaa4cdbf3da4f5._comment10
-rw-r--r--doc/todo/Recovering_from_a_bad_sync/comment_3_4d4904bcbf97401c7c11338f32577f96._comment14
-rw-r--r--doc/todo/Recursive_addurl_simlar_to_wget_--recursive.mdwn9
-rw-r--r--doc/todo/Recursive_addurl_simlar_to_wget_--recursive/comment_1_4ecd9ddba1b63b571555ec9bef18e2d8._comment8
-rw-r--r--doc/todo/S3.mdwn24
-rw-r--r--doc/todo/S3_multipart_interruption_cleanup.mdwn14
-rw-r--r--doc/todo/Slow_transfer_for_a_lot_of_small_files./comment_1_fa76bc744e30aaeed4a3b3e2fe3dd75e._comment12
-rw-r--r--doc/todo/Slow_transfer_for_a_lot_of_small_files./comment_2_80d1080bf6e82bd8aaccde9d7c1669c7._comment8
-rw-r--r--doc/todo/Speed_up___39__import_--clean-duplicates__39__.mdwn7
-rw-r--r--doc/todo/Speed_up___39__import_--clean-duplicates__39__/comment_1_9268c639d3d21cce4ca7b60d08e9cb65._comment10
-rw-r--r--doc/todo/Speed_up___39__import_--clean-duplicates__39__/comment_2_9c6688901ef20badd834419202627d5c._comment21
-rw-r--r--doc/todo/Sync_repo_names__63__.mdwn10
-rw-r--r--doc/todo/Time_Stamping_of_Events_in_Webapp.mdwn3
-rw-r--r--doc/todo/Use_a_remote_as_a_sharing_site_for_files_with_obfuscated_URLs/comment_2_735afa6f87a93cdf333c17da32010620._comment8
-rw-r--r--doc/todo/Use_bitcoin-mining_ASICs_for_hashing__63__.mdwn18
-rw-r--r--doc/todo/Use_bitcoin-mining_ASICs_for_hashing__63__/comment_1_a93805a8088402c6dc32d2b9785fcc7d._comment10
-rw-r--r--doc/todo/Views_Demo.mdwn2
-rw-r--r--doc/todo/Wishlist:_Import_youtube_playlists.mdwn30
-rw-r--r--doc/todo/Wishlist:_Import_youtube_playlists/comment_1_4235cbbb0c6f9d83524c970c4588cb2e._comment9
-rw-r--r--doc/todo/Wishlist:_disable_auto-repair_for_the_assistant.mdwn3
-rw-r--r--doc/todo/Wishlist:_disable_auto-repair_for_the_assistant/comment_1_3274820a0d1f10c505f15cd29a37b95a._comment12
-rw-r--r--doc/todo/Wishlist:_disable_auto-repair_for_the_assistant/comment_2_2cf5aef3f1d340c4ed6249ef94c1b607._comment8
-rw-r--r--doc/todo/Wishlist:_disable_auto-repair_for_the_assistant/comment_3_6c53d82e62b2d269a941ba967d05adf5._comment8
-rw-r--r--doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode.mdwn8
-rw-r--r--doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode/comment_1_6c6e192bc0f70a386cd4275f98e1bd6f._comment8
-rw-r--r--doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode/comment_2_8e22cfdbeb2c841870a623cf4c7baf60._comment10
-rw-r--r--doc/todo/__91__FR__93___No_consistency_check_while_on_battery-only.mdwn14
-rw-r--r--doc/todo/__91__FR__93___No_consistency_check_while_on_battery-only/comment_1_b557db02c3719152d392fa454c9c5ce5._comment15
-rw-r--r--doc/todo/__91__FR__93___No_consistency_check_while_on_battery-only/comment_2_374567f37635613a5d671c877d601367._comment7
-rw-r--r--doc/todo/__96__git_annex_import_--lazy__96___--_Delete_everything_that__39__s_in_the_source_directory_and_also_in_the_target_annex.mdwn29
-rw-r--r--doc/todo/__96__git_annex_import_--lazy__96___--_Delete_everything_that__39__s_in_the_source_directory_and_also_in_the_target_annex/comment_1_0cc16eb17151309113cec6d1cccf203d._comment20
-rw-r--r--doc/todo/__96__git_annex_status__47__version__96___should_print_the_local_OS.mdwn6
-rw-r--r--doc/todo/__96__git_annex_sync_--auto__96___or___96__git_annex_auto__96___--_synchronize_symlinks__44___tracking_info__44___and_actual_data.mdwn6
-rw-r--r--doc/todo/add_--exclude_option_to_git_annex_find.mdwn4
-rw-r--r--doc/todo/add_-all_option.mdwn22
-rw-r--r--doc/todo/add_a_git_backend.mdwn18
-rw-r--r--doc/todo/add_an_icon_for_the_.desktop_file.mdwn3
-rw-r--r--doc/todo/add_metadata_to_annexed_files.mdwn14
-rw-r--r--doc/todo/add_metadata_to_annexed_files/comment_1_38af9b352020194e9ace34d7dde188cf._comment10
-rw-r--r--doc/todo/allow_removing_jabber_configuration.mdwn5
-rw-r--r--doc/todo/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address.mdwn2
-rw-r--r--doc/todo/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address/comment_1_6b71a390fd16f593216793aec590d9a8._comment8
-rw-r--r--doc/todo/assistant_git_sync_laddering.mdwn10
-rw-r--r--doc/todo/assistant_smarter_archive_directory_handling.mdwn31
-rw-r--r--doc/todo/assistant_threaded_runtime.mdwn40
-rw-r--r--doc/todo/auto_remotes.mdwn29
-rw-r--r--doc/todo/auto_remotes/discussion.mdwn7
-rw-r--r--doc/todo/automatic_bookkeeping_watch_command.mdwn15
-rw-r--r--doc/todo/avoid_unnecessary_union_merges.mdwn20
-rw-r--r--doc/todo/backendSHA1.mdwn7
-rw-r--r--doc/todo/branching.mdwn159
-rw-r--r--doc/todo/build_a_user_guide.mdwn3
-rw-r--r--doc/todo/checkout.mdwn23
-rw-r--r--doc/todo/clear_file_names_in_special_remotes.mdwn13
-rw-r--r--doc/todo/clear_file_names_in_special_remotes/comment_1_630f17c9a7ce9a77d5d5867a6e0c799b._comment8
-rw-r--r--doc/todo/clear_file_names_in_special_remotes/comment_2_823c279683ac3f39c921be3fcbf6bfe2._comment10
-rw-r--r--doc/todo/clear_file_names_in_special_remotes/comment_3_4704e465025b543e47c18d565abd2747._comment8
-rw-r--r--doc/todo/custom_f-droid_repo.mdwn2
-rw-r--r--doc/todo/custom_f-droid_repo/comment_4_55f05624f0e939f7b8d0c505285e5690._comment11
-rw-r--r--doc/todo/custom_f-droid_repo/comment_6_de4229f04daf48a153e2f44f57a05a3b._comment11
-rw-r--r--doc/todo/direct_mode_guard.mdwn105
-rw-r--r--doc/todo/direct_mode_guard/comment_1_431b6e1577bbd30b07dce9002a8fe1a2._comment10
-rw-r--r--doc/todo/direct_mode_guard/comment_2_85bdb9dc601b87bd7c77150d7b0a5cde._comment8
-rw-r--r--doc/todo/direct_mode_undo.mdwn86
-rw-r--r--doc/todo/do_not_bug_me_about_intermediate_files.mdwn7
-rw-r--r--doc/todo/do_not_commit_with_empty_messages.mdwn15
-rw-r--r--doc/todo/do_not_commit_with_empty_messages/comment_1_3cff336e58c26eafade4a37b0c9e0634._comment11
-rw-r--r--doc/todo/do_not_commit_with_empty_messages/comment_2_46a80050beba50360b1c212a9ab5a6b2._comment17
-rw-r--r--doc/todo/document_standard_groups_more_extensively_in_the_UI.mdwn14
-rw-r--r--doc/todo/does_not_preserve_timestamps.mdwn16
-rw-r--r--doc/todo/does_not_preserve_timestamps/comment_1_caf5e5cb17f4d05fff8c2fab661cd93f._comment8
-rw-r--r--doc/todo/does_not_preserve_timestamps/comment_2_c337fca1474b5b78f61ad6f421138ae4._comment12
-rw-r--r--doc/todo/does_not_preserve_timestamps/comment_3_9a3eeddc46e5a420575f00cb47caf703._comment8
-rw-r--r--doc/todo/does_not_preserve_timestamps/comment_4_99b064259fc2e3c6eb83c3da3b2d3bac._comment10
-rw-r--r--doc/todo/does_not_preserve_timestamps/comment_5_c95c8b9bd617830604500213c962fc7a._comment9
-rw-r--r--doc/todo/does_not_preserve_timestamps/comment_6_b99e00d0bc4258c4cb28b544b19ea3b8._comment12
-rw-r--r--doc/todo/dumb_plaindir_remote___40__e.g._for_NAS_mounts__41__.mdwn7
-rw-r--r--doc/todo/dumb_plaindir_remote___40__e.g._for_NAS_mounts__41__/comment_1_5ed9a2336b432b842c1805add6d96509._comment10
-rw-r--r--doc/todo/dumb_plaindir_remote___40__e.g._for_NAS_mounts__41__/comment_2_e6ba58c5c31ba23a4575f1189689946f._comment8
-rw-r--r--doc/todo/dumb_plaindir_remote___40__e.g._for_NAS_mounts__41__/comment_3_e53cbc5765819de2d3c742e6cd4d77cd._comment11
-rw-r--r--doc/todo/exclude_files_on_a_given_remote.mdwn18
-rw-r--r--doc/todo/extensible_addurl.mdwn88
-rw-r--r--doc/todo/extensible_addurl/comment_1_5dca2eb8ee9e8676d372cd4bc6934975._comment14
-rw-r--r--doc/todo/extensible_addurl/comment_2_0e27f12c998a3ac4f0d4c3d4c9898d26._comment13
-rw-r--r--doc/todo/fast_migrate.mdwn16
-rw-r--r--doc/todo/faster_gnupg_cipher.mdwn9
-rw-r--r--doc/todo/faster_gnupg_cipher/comment_1_8f61f7c724a8224e61c015be68f43db7._comment14
-rw-r--r--doc/todo/faster_gnupg_cipher/comment_2_36e1f227a320527653500b445f7c001c._comment12
-rw-r--r--doc/todo/faster_gnupg_cipher/comment_3_bd0c975494333dfe558de048d888ace8._comment17
-rw-r--r--doc/todo/faster_rsync_remotes.mdwn4
-rw-r--r--doc/todo/faster_rsync_remotes/comment_1_0bc3ee0ae563357675eeccf42461e59a._comment8
-rw-r--r--doc/todo/faster_rsync_remotes/comment_2_ccf6f75450c89ca498c8130054f8d32d._comment24
-rw-r--r--doc/todo/faster_rsync_remotes/comment_3_2f6a9d23cb8351fbf0f60ed93752e76e._comment14
-rw-r--r--doc/todo/faster_rsync_remotes/comment_4_3a2f45defebae3dde336ee5f40c26d7e._comment8
-rw-r--r--doc/todo/file_copy_progress_bar.mdwn5
-rw-r--r--doc/todo/find_unused_in_any_commit.mdwn14
-rw-r--r--doc/todo/find_unused_in_any_commit/comment_1_cecdf4e8600fbcf5d1541e35a91fb37b._comment8
-rw-r--r--doc/todo/fsck.mdwn11
-rw-r--r--doc/todo/fsck_special_remotes.mdwn13
-rw-r--r--doc/todo/git-annex-shell.mdwn15
-rw-r--r--doc/todo/git-annex_ignores_GIT__95__SSH.mdwn39
-rw-r--r--doc/todo/git-annex_ignores_GIT__95__SSH/comment_1_958dd21d7e981232f03b4516521ac226._comment10
-rw-r--r--doc/todo/git-annex_ignores_GIT__95__SSH/comment_2_319a7e8122e7bc25d9399ba463a16158._comment22
-rw-r--r--doc/todo/git-annex_ignores_GIT__95__SSH/comment_3_cc1936f18721a912bb77903be6c4a45f._comment8
-rw-r--r--doc/todo/git-annex_unused_eats_memory.mdwn32
-rw-r--r--doc/todo/git_annex_init_:_include_repo_description_and__47__or_UUID_in_commit_message.mdwn13
-rw-r--r--doc/todo/git_annex_open.mdwn9
-rw-r--r--doc/todo/git_annex_open/comment_1_67d90a1cb104d98e816354d96e1b0306._comment21
-rw-r--r--doc/todo/gitolite_and_gitosis_support.mdwn39
-rw-r--r--doc/todo/gitrm.mdwn5
-rw-r--r--doc/todo/http_git_annex_404_retry.mdwn18
-rw-r--r--doc/todo/http_headers.mdwn8
-rw-r--r--doc/todo/immutable_annexed_files.mdwn8
-rw-r--r--doc/todo/incremental_fsck.mdwn24
-rw-r--r--doc/todo/incremental_fsck/comment_1_609b21141dd5686b2c0eaef2b8d63229._comment14
-rw-r--r--doc/todo/inject_on_import.mdwn63
-rw-r--r--doc/todo/integrate_support_for_spideroak_as_archive__47__backup.mdwn9
-rw-r--r--doc/todo/integrate_support_for_spideroak_as_archive__47__backup/comment_1_a47ea814f6d7727bbd0eeca6d1fd3219._comment10
-rw-r--r--doc/todo/link_file_to_remote_repo_feature.mdwn52
-rw-r--r--doc/todo/make_status_show_staged_files.mdwn23
-rw-r--r--doc/todo/make_status_show_staged_files/comment_1_3874f5da5a300b7d443e1ad6373b4099._comment11
-rw-r--r--doc/todo/makefile:_respect___36__PREFIX.mdwn25
-rw-r--r--doc/todo/mdwn2man:_make_backticks_bold.mdwn22
-rw-r--r--doc/todo/merge_in_ram___40__disk__41____63__.mdwn8
-rw-r--r--doc/todo/network_remotes.mdwn5
-rw-r--r--doc/todo/nicer_whereis_output.mdwn100
-rw-r--r--doc/todo/notifications.mdwn6
-rw-r--r--doc/todo/object_dir_reorg_v2.mdwn25
-rw-r--r--doc/todo/object_dir_reorg_v2/comment_1_ba03333dc76ff49eccaba375e68cb525._comment8
-rw-r--r--doc/todo/object_dir_reorg_v2/comment_2_81276ac309959dc741bc90101c213ab7._comment8
-rw-r--r--doc/todo/object_dir_reorg_v2/comment_3_79bdf9c51dec9f52372ce95b53233bb2._comment12
-rw-r--r--doc/todo/object_dir_reorg_v2/comment_4_93aada9b1680fed56cc6f0f7c3aca5e5._comment12
-rw-r--r--doc/todo/object_dir_reorg_v2/comment_5_821c382987f105da72a50e0a5ce61fdc._comment12
-rw-r--r--doc/todo/object_dir_reorg_v2/comment_6_8834c3a3f1258c4349d23aff8549bf35._comment10
-rw-r--r--doc/todo/object_dir_reorg_v2/comment_7_42501404c82ca07147e2cce0cff59474._comment12
-rw-r--r--doc/todo/openwrt_package/comment_4_132e67b34f9c616217e037e4ecac70a4._comment8
-rw-r--r--doc/todo/optinally_transfer_file_unencryptedly.mdwn6
-rw-r--r--doc/todo/optinally_transfer_file_unencryptedly/comment_1_4be47e7ac85d0f4e7029a96b615545a7._comment8
-rw-r--r--doc/todo/parallel_get.mdwn73
-rw-r--r--doc/todo/parallel_get/comment_1_5b7517214148731f81be6e61233ce13c._comment9
-rw-r--r--doc/todo/parallel_get/comment_2_c8548608023ef3d95035fe97164c8cd7._comment12
-rw-r--r--doc/todo/parallel_get/comment_3_36bfc494c34a6701c4780d13d669ff71._comment8
-rw-r--r--doc/todo/preferred_content_numcopies_check.mdwn86
-rw-r--r--doc/todo/pushpull.mdwn4
-rw-r--r--doc/todo/quvi_0.9_support.mdwn8
-rw-r--r--doc/todo/read-only_removable_drives.mdwn17
-rw-r--r--doc/todo/read-only_removable_drives/comment_1_979455e3694ae2403134ed6fa2add2fa._comment21
-rw-r--r--doc/todo/read-only_removable_drives/comment_2_08fced29b86b21f63bb0868747227e08._comment12
-rw-r--r--doc/todo/read-only_removable_drives/comment_3_2675e211c7bd248b7f7c1bbc6fd46679._comment10
-rw-r--r--doc/todo/read-only_removable_drives/comment_4_9e9bc6dd5fa8c4cf7f2511b771bd1bc7._comment8
-rw-r--r--doc/todo/read-only_removable_drives/comment_5_a693c5744bfc6c33f5605aa9d9c0bfe0._comment8
-rw-r--r--doc/todo/read-only_removable_drives/comment_6_737e3d315f29a4fc61597ce4f9ec6206._comment20
-rw-r--r--doc/todo/read-only_removable_drives/comment_7_16c8652d38ae57db4ed1860a4733a18b._comment8
-rw-r--r--doc/todo/remote_groups_support_for_sync.mdwn5
-rw-r--r--doc/todo/replace_dataenc_with_sandi.mdwn4
-rw-r--r--doc/todo/required_content.mdwn16
-rw-r--r--doc/todo/required_content/comment_3_b16a8e8b45ceee887c8c0167b7859654._comment8
-rw-r--r--doc/todo/resuming_encrypted_uploads.mdwn7
-rw-r--r--doc/todo/rsync.mdwn4
-rw-r--r--doc/todo/separate_rsync_bwlimit_options_for_upload_and_download.mdwn4
-rw-r--r--doc/todo/sharedRepository_mode_not_supported_by_git-annex.mdwn7
-rw-r--r--doc/todo/show_readonly_removable_drives_in_the_webapp.mdwn15
-rw-r--r--doc/todo/show_readonly_removable_drives_in_the_webapp/comment_1_c41140289f9b062e96cfd5d9d5382155._comment15
-rw-r--r--doc/todo/show_readonly_removable_drives_in_the_webapp/comment_2_b9236ea884a2934dd0c8e511a80f4fda._comment8
-rw-r--r--doc/todo/special_remote_for_amazon_glacier.mdwn30
-rw-r--r--doc/todo/special_remote_for_amazon_glacier/comment_1_68f129441eefcbfebf7a9db680f52759._comment8
-rw-r--r--doc/todo/special_remote_for_amazon_glacier/comment_2_c5eeaf8ceee414fa0379831ca52e290c._comment7
-rw-r--r--doc/todo/speed_up_fsck.mdwn40
-rw-r--r--doc/todo/ssh_special_remote.mdwn44
-rw-r--r--doc/todo/stream_feature__63__/comment_1_99f1f1872f86d4571c03a99fff1a7212._comment8
-rw-r--r--doc/todo/support-non-utf8-locales.mdwn26
-rw-r--r--doc/todo/support_S3_multipart_uploads.mdwn14
-rw-r--r--doc/todo/support_for_lossy_remotes.mdwn11
-rw-r--r--doc/todo/support_for_lossy_remotes/comment_1_f5cd9f9deab13ab2d2290ad763906dd3._comment8
-rw-r--r--doc/todo/support_for_writing_external_special_remotes.mdwn27
-rw-r--r--doc/todo/support_fsck_in_bare_repos.mdwn17
-rw-r--r--doc/todo/symlink_farming_commit_hook.mdwn14
-rw-r--r--doc/todo/symlink_git-annex_binaries_to___126____47__.local__47__bin_for_prebuilt_package.mdwn22
-rw-r--r--doc/todo/tahoe_lfs_for_reals.mdwn6
-rw-r--r--doc/todo/untracked_remotes.mdwn27
-rw-r--r--doc/todo/untracked_remotes/comment_1_ccc743554cf9270e1db5275273b28265._comment43
-rw-r--r--doc/todo/untracked_remotes/comment_2_48cc5d0e2282fa53625e0037a035fee3._comment18
-rw-r--r--doc/todo/untracked_remotes/comment_3_0d07c5bc8d42f35351c11411eaca88df._comment29
-rw-r--r--doc/todo/untracked_remotes/comment_4_75ae13c2135a2951b2af548139cb25cd._comment46
-rw-r--r--doc/todo/unwanted_repository_version_upgrades.mdwn25
-rw-r--r--doc/todo/unwanted_repository_version_upgrades/comment_1_48f71865b65db4574a10e5c32ee22197._comment12
-rw-r--r--doc/todo/use_cp_reflink.mdwn7
-rw-r--r--doc/todo/using_file_metadata_for_preferred___40__wanted__41___content.mdwn12
-rw-r--r--doc/todo/using_url_backend.mdwn11
-rw-r--r--doc/todo/utilising_the_mklink_command_on_windows_to_utilise_symlinks_and_therefore_indirect_mode_on_windows.mdwn7
-rw-r--r--doc/todo/utilising_the_mklink_command_on_windows_to_utilise_symlinks_and_therefore_indirect_mode_on_windows/comment_1_f974b0fc908277fcc35ee6c8073b65c8._comment13
-rw-r--r--doc/todo/vicfg_comment_gotcha.mdwn20
-rw-r--r--doc/todo/view_git_annex_log_in_webapp.mdwn7
-rw-r--r--doc/todo/view_git_annex_log_in_webapp/comment_1_945054441d93423b2c7b81712b364a3c._comment8
-rw-r--r--doc/todo/view_git_annex_log_in_webapp/comment_2_0f434dfe80e90951870218bc1b76c374._comment12
-rw-r--r--doc/todo/webapp_nudge_when_less_than_numcopies_clones.mdwn7
-rw-r--r--doc/todo/webapp_ssh_setup_should_work_with_locked_down_git-annex-shell_account.mdwn7
-rw-r--r--doc/todo/whishlist:_git_annex_drop_--dry-run.mdwn5
-rw-r--r--doc/todo/whishlist:_git_annex_drop_--dry-run/comment_1_20ecfa8ffa52c238d21b904076ac69a2._comment10
-rw-r--r--doc/todo/whishlist:_git_annex_drop_--dry-run/comment_2_d19bc268c9467d24baa8d8f77a6e5e09._comment8
-rw-r--r--doc/todo/whishlist:_temporary_relinking_to_remotes.mdwn30
-rw-r--r--doc/todo/whislist:_allow_setting_annex-ignore_from_the_webapp.mdwn2
-rw-r--r--doc/todo/windows_git-annex_service.mdwn30
-rw-r--r--doc/todo/windows_git-annex_service/comment_11_c3af14453e99dae5425deaa26ca7310e._comment14
-rw-r--r--doc/todo/windows_git-annex_service/comment_11_e2dda1037cc85f03613f2774c139ad56._comment10
-rw-r--r--doc/todo/windows_git-annex_service/comment_12_249a48a241f14f32dab49f381d2de3b3._comment8
-rw-r--r--doc/todo/windows_git-annex_service/comment_12_d3d91ddc00bc275455022d86b779b148._comment10
-rw-r--r--doc/todo/windows_git-annex_service/comment_13_59fbe4d07cdbeb786bae792f9c709ddd._comment10
-rw-r--r--doc/todo/windows_git-annex_service/comment_13_f1d254fe85b0e5cbc7edf9096af4f942._comment27
-rw-r--r--doc/todo/windows_git-annex_service/comment_14_79fc0ff98c5bba2ed616e52e5a58e28f._comment8
-rw-r--r--doc/todo/windows_git-annex_service/comment_14_7d5fdac0084c4742967879f5f0f9fccf._comment8
-rw-r--r--doc/todo/windows_git-annex_service/comment_15_8f10491f8c0a151284e6d81a83eab212._comment12
-rw-r--r--doc/todo/windows_git-annex_service/comment_15_fcd34607116183cc1a764fb307eabe0a._comment10
-rw-r--r--doc/todo/windows_git-annex_service/comment_16_51800fd83cd979b021eabdd4c44cfd61._comment13
-rw-r--r--doc/todo/windows_git-annex_service/comment_16_6a6424f23772e57f1adb1807ca8b93fa._comment14
-rw-r--r--doc/todo/windows_git-annex_service/comment_17_62a1a33c2aaf4b0b8a0149ec526907d7._comment16
-rw-r--r--doc/todo/windows_git-annex_service/comment_18_3a408492107ca6f120b631ce8c41faef._comment23
-rw-r--r--doc/todo/windows_git-annex_service/comment_19_c6cbc8fe9218f90c661cd1026658c939._comment8
-rw-r--r--doc/todo/windows_git-annex_service/comment_20_ca245781a37db5546da3f7204adbeebb._comment17
-rw-r--r--doc/todo/windows_support.mdwn21
-rw-r--r--doc/todo/windows_support/comment_11_c91eb7da8ee05064a5bc4a6e2203314b._comment8
-rw-r--r--doc/todo/windows_support/comment_12_0775dc22516cfa8c5e7deea954084947._comment18
-rw-r--r--doc/todo/wishlist:_--dry-run_option_for_all_commands.mdwn3
-rw-r--r--doc/todo/wishlist:_--maxdepth_option_for_git_annex_find.mdwn22
-rw-r--r--doc/todo/wishlist:_--maxdepth_option_for_git_annex_find/comment_1_c355878ac49bbb23a4cf82fe685da9ee._comment10
-rw-r--r--doc/todo/wishlist:_--maxdepth_option_for_git_annex_find/comment_2_da30a066c4de465fe172ad01057e2380._comment10
-rw-r--r--doc/todo/wishlist:_--maxdepth_option_for_git_annex_find/comment_3_f3eadd6241f5cc2886515b2826dc5cf9._comment10
-rw-r--r--doc/todo/wishlist:_--maxdepth_option_for_git_annex_find/comment_4_c766c1465407324fc933db78be325b33._comment12
-rw-r--r--doc/todo/wishlist:_Add_--byte-limit_option.mdwn14
-rw-r--r--doc/todo/wishlist:_Add_to_Android_version_to_Google_Play.mdwn9
-rw-r--r--doc/todo/wishlist:_An_--all_option_for_dropunused.mdwn4
-rw-r--r--doc/todo/wishlist:_An_--all_option_for_dropunused/comment_1_d8726d108b3b40116b4ec3c9935f2dff._comment8
-rw-r--r--doc/todo/wishlist:_An_--all_option_for_dropunused/comment_2_578248f7686ba2d80d7dc8b17c0cdf52._comment16
-rw-r--r--doc/todo/wishlist:_An_option_like_--git-dir.mdwn5
-rw-r--r--doc/todo/wishlist:_An_option_like_--git-dir/comment_1_5d877d90b8bdf21d4b8649744d229efd._comment8
-rw-r--r--doc/todo/wishlist:_An_option_like_--git-dir/comment_2_462264821cbc48a433330cbf7ec6044d._comment8
-rw-r--r--doc/todo/wishlist:_An_option_like_--git-dir/comment_3_0c3709b07a0a1091ceeee73b69e0f7ac._comment8
-rw-r--r--doc/todo/wishlist:_GnuPG_options.mdwn16
-rw-r--r--doc/todo/wishlist:_GnuPG_options/comment_1_6662e8a71ce20acc62147ef41ecffa50._comment12
-rw-r--r--doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size.mdwn10
-rw-r--r--doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_1_019a2457e07377510feaa089a93bd76c._comment8
-rw-r--r--doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_3_29a154699339bf040af0ee8aa24034f1._comment15
-rw-r--r--doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_3_8f7e1c4a5c714cbd719ee170354d79fa._comment12
-rw-r--r--doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_4_c7335f757e5546aa841cab38fffe7605._comment19
-rw-r--r--doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_5_d2a845354f23d07880612740cf99ddd4._comment8
-rw-r--r--doc/todo/wishlist:_Parity_files_for_encrypted_remotes.mdwn7
-rw-r--r--doc/todo/wishlist:_Prevent_repeated_password_prompts_for_one_command.mdwn45
-rw-r--r--doc/todo/wishlist:_Prevent_repeated_password_prompts_for_one_command/comment_1_3f9c0d08932c2ede61c802a91261a1f7._comment14
-rw-r--r--doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates.mdwn28
-rw-r--r--doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_10_d78d79fb2f3713aa69f45d2691cf8dfe._comment68
-rw-r--r--doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_11_4316d9d74312112dc4c823077af7febe._comment8
-rw-r--r--doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_12_ed6d07f16a11c6eee7e3d5005e8e6fa3._comment8
-rw-r--r--doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_1_fd213310ee548d8726791d2b02237fde._comment29
-rw-r--r--doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_2_4394bde1c6fd44acae649baffe802775._comment18
-rw-r--r--doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_3_076cb22057583957d5179d8ba9004605._comment18
-rw-r--r--doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_4_f120d1e83c1a447f2ecce302fc69cf74._comment35
-rw-r--r--doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_5_5c30294b3c59fdebb1eef0ae5da4cd4f._comment10
-rw-r--r--doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_6_f24541ada1c86d755acba7e9fa7cff24._comment16
-rw-r--r--doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_7_c39f1bb7c61a89b238c61bee1c049767._comment54
-rw-r--r--doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_8_221ed2e53420278072a6d879c6f251d1._comment8
-rw-r--r--doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_9_aecfa896c97b9448f235bce18a40621d._comment14
-rw-r--r--doc/todo/wishlist:_Restore_s3_files_moved_to_Glacier/comment_1_eb934756cb2af7fa13ad3b5fad7f85b2._comment9
-rw-r--r--doc/todo/wishlist:_Tell_git_annex___40__assistant__41___which_files___40__not__41___to_annex_via_.gitattributes.mdwn9
-rw-r--r--doc/todo/wishlist:__--dry*/comment_1_03bf493d5a7f957339f9aa388ba85ef8._comment15
-rw-r--r--doc/todo/wishlist:___34__git_annex_add__34___multiple_processes.mdwn10
-rw-r--r--doc/todo/wishlist:___34__git_annex_add__34___multiple_processes/comment_1_85b14478411a33e6186a64bd41f0910d._comment10
-rw-r--r--doc/todo/wishlist:___34__git_annex_add__34___multiple_processes/comment_2_82e857f463cfdf73c70f6c0a9f9a31d6._comment8
-rw-r--r--doc/todo/wishlist:___34__git_annex_add__34___multiple_processes/comment_3_8af85eba7472d9025c6fae4f03e3ad75._comment8
-rw-r--r--doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__/comment_3_3e830035df580601f038ce3a7003c39d._comment63
-rw-r--r--doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__/comment_4_e5516689bc128c061dcd66649dc69584._comment10
-rw-r--r--doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__/comment_5_be740e4b06d9130ae6afc5783da3c0e0._comment14
-rw-r--r--doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__/comment_6_79d115f95cec46bb51e7fba078524db1._comment17
-rw-r--r--doc/todo/wishlist:___96__git_annex_fsck_--checksums__96___--_verify_checksums_but_disregard_annex.numcopies.mdwn12
-rw-r--r--doc/todo/wishlist:___96__git_annex_fsck_--checksums__96___--_verify_checksums_but_disregard_annex.numcopies/comment_1_6bcf067e4860bdfeb1d7b9fd1702a43a._comment8
-rw-r--r--doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex.mdwn13
-rw-r--r--doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_1_b9fd1bfaf9a3d238fdb7bc9c2d75fe5f._comment22
-rw-r--r--doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_2_56f6972413c6f0d9f414245b6f4d27b9._comment62
-rw-r--r--doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_3_2c094bef802a2182de4fcd0def1ad29b._comment12
-rw-r--r--doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_4_14915c43001f7f72c9fe5119a104ef5c._comment10
-rw-r--r--doc/todo/wishlist:___96__git_annex_sync_-m__96__.mdwn1
-rw-r--r--doc/todo/wishlist:___96__git_annex_sync__96___without_auto-commit.mdwn5
-rw-r--r--doc/todo/wishlist:___96__git_annex_sync__96___without_auto-commit/comment_1_fff7cdff9e4bc988139152a799b65c99._comment8
-rw-r--r--doc/todo/wishlist:___96__git_annex_sync__96___without_auto-commit/comment_2_b8dd92d7710a9d194312058e53c38d21._comment10
-rw-r--r--doc/todo/wishlist:___96__git_annex_sync__96___without_auto-commit/comment_3_206e319f6d7c6b0d1f05af2475a8b335._comment8
-rw-r--r--doc/todo/wishlist:_a_spec.remote_for_network_directories_that_would_mount_them_whenever_needed___40__e.g.__44___with_WebDAV__41__.mdwn29
-rw-r--r--doc/todo/wishlist:_a_spec.remote_for_network_directories_that_would_mount_them_whenever_needed___40__e.g.__44___with_WebDAV__41__/comment_1_f46b0c9b49607e9f4f7a27f5a331ce83._comment8
-rw-r--r--doc/todo/wishlist:_a_spec.remote_for_network_directories_that_would_mount_them_whenever_needed___40__e.g.__44___with_WebDAV__41__/comment_2_1b34e1dd72011c65e881dec2543a0373._comment12
-rw-r--r--doc/todo/wishlist:_add_--symlink_option_to_import.mdwn3
-rw-r--r--doc/todo/wishlist:_add_--symlink_option_to_import/comment_1_d5d853142d401b95577567e3eb43495e._comment8
-rw-r--r--doc/todo/wishlist:_add_repository_name_to_commit_messages.mdwn3
-rw-r--r--doc/todo/wishlist:_add_systemd_services_file_samples_for_assistant_and_webapp/comment_3_f465134958d858a8be21f252abd78aae._comment8
-rw-r--r--doc/todo/wishlist:_add_systemd_services_file_samples_for_assistant_and_webapp/comment_4_268b35928a7a192644d32b6c1d12ecc4._comment17
-rw-r--r--doc/todo/wishlist:_addurl_https:.mdwn11
-rw-r--r--doc/todo/wishlist:_addurl_https:/comment_1_4e8f5e1fc52c3000eb2a1dad0624906e._comment14
-rw-r--r--doc/todo/wishlist:_allow_configuration_of_downloader_for_addurl.mdwn3
-rw-r--r--doc/todo/wishlist:_allow_the_same_remote_to_be_accissable_via_different_methods.mdwn5
-rw-r--r--doc/todo/wishlist:_allow_the_same_remote_to_be_accissable_via_different_methods/comment_1_abb6263f3807160222bba1122475c89c._comment8
-rw-r--r--doc/todo/wishlist:_allow_users_to_provide_UUID_when_running___96__git_annex_init__96__.mdwn5
-rw-r--r--doc/todo/wishlist:_annex.largefiles_support_for_mimetypes/comment_2_975edca7ec87158216d9e106903dfb48._comment8
-rw-r--r--doc/todo/wishlist:_annex.largefiles_support_for_mimetypes/comment_3_b2774d265de303143523607053811d23._comment12
-rw-r--r--doc/todo/wishlist:_assistant_autostart_port_and_secret_configuration.mdwn4
-rw-r--r--doc/todo/wishlist:_assistant_autostart_port_and_secret_configuration/comment_1_be53b8456eed7eadad5d4b8465c8a42b._comment10
-rw-r--r--doc/todo/wishlist:_command_options_changes.mdwn17
-rw-r--r--doc/todo/wishlist:_command_options_changes/comment_1_bfba72a696789bf21b2435dea15f967a._comment17
-rw-r--r--doc/todo/wishlist:_command_options_changes/comment_2_f6a637c78c989382e3c22d41b7fb4cc2._comment19
-rw-r--r--doc/todo/wishlist:_command_options_changes/comment_3_bf1114533d2895804e531e76eb6b8095._comment8
-rw-r--r--doc/todo/wishlist:_define_remotes_that_must_have_all_files.mdwn22
-rw-r--r--doc/todo/wishlist:_define_remotes_that_must_have_all_files/comment_1_cceccc1a1730ac688d712b81a44e31c3._comment10
-rw-r--r--doc/todo/wishlist:_define_remotes_that_must_have_all_files/comment_2_eec848fcf3979c03cbff2b7407c75a7a._comment16
-rw-r--r--doc/todo/wishlist:_detection_of_merge_conflicts.mdwn13
-rw-r--r--doc/todo/wishlist:_disable_automatic_commits.mdwn4
-rw-r--r--doc/todo/wishlist:_display_name_of_object_when_addWatcher_gets_a_permission_denied.mdwn6
-rw-r--r--doc/todo/wishlist:_display_name_of_object_when_addWatcher_gets_a_permission_denied/comment_1_d2665e7347689b520d37561cfddf0aa8._comment8
-rw-r--r--doc/todo/wishlist:_display_name_of_object_when_addWatcher_gets_a_permission_denied/comment_2_db153571a32fb072453ed583e3e9ccf4._comment8
-rw-r--r--doc/todo/wishlist:_do_not_import_new_files.mdwn7
-rw-r--r--doc/todo/wishlist:_do_not_import_new_files/comment_1_b41c214599d6601257a9d824cebbffcc._comment14
-rw-r--r--doc/todo/wishlist:_do_not_import_new_files/comment_2_7b26171458baaf5c0057276d2d97e14c._comment8
-rw-r--r--doc/todo/wishlist:_do_not_import_new_files/comment_3_6f80ce6cee4519d4f69193d5086e194a._comment20
-rw-r--r--doc/todo/wishlist:_do_not_import_new_files/comment_4_22a7a03c30174e42e6d8e639e31e1d34._comment12
-rw-r--r--doc/todo/wishlist:_do_not_import_new_files/comment_5_4294e92e2f4efb9dd10b280f5c9843f7._comment10
-rw-r--r--doc/todo/wishlist:_dropping_git-annex_history.mdwn28
-rw-r--r--doc/todo/wishlist:_dropping_git-annex_history/comment_1_a4bee2e26b22a9bdaadc05b7227769ef._comment10
-rw-r--r--doc/todo/wishlist:_dropping_git-annex_history/comment_2_f6d750bfe0c9d8a2aa6bc218ca5c49cc._comment14
-rw-r--r--doc/todo/wishlist:_git-annex_replicate.mdwn22
-rw-r--r--doc/todo/wishlist:_git-annex_replicate/comment_1_9926132ec6052760cdf28518a24e2358._comment10
-rw-r--r--doc/todo/wishlist:_git-annex_replicate/comment_2_c43932f4194aba8fb2470b18e0817599._comment12
-rw-r--r--doc/todo/wishlist:_git-annex_replicate/comment_3_c13f4f9c3d5884fc6255fd04feadc2b1._comment10
-rw-r--r--doc/todo/wishlist:_git-annex_replicate/comment_4_63f24abf086d644dced8b01e1a9948c9._comment8
-rw-r--r--doc/todo/wishlist:_git_annex_diff.mdwn4
-rw-r--r--doc/todo/wishlist:_git_annex_diff/comment_2_2e8324f47b66dce385263e258e94da16._comment32
-rw-r--r--doc/todo/wishlist:_git_annex_info_._also_return_numcopies_setting.mdwn44
-rw-r--r--doc/todo/wishlist:_git_annex_info_UUID.mdwn3
-rw-r--r--doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults.mdwn20
-rw-r--r--doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults/comment_1_d5413c8acce308505e4e2bec82fb1261._comment10
-rw-r--r--doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults/comment_2_0aa227c85d34dfff4e94febca44abea8._comment12
-rw-r--r--doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults/comment_3_2082f4d708a584a1403cc1d4d005fb56._comment10
-rw-r--r--doc/todo/wishlist:_git_annex_status.mdwn21
-rw-r--r--doc/todo/wishlist:_git_annex_status/comment_1_994bfd12c5d82e08040d6116915c5090._comment8
-rw-r--r--doc/todo/wishlist:_git_annex_status/comment_2_c2b0ce025805b774dc77ce264a222824._comment13
-rw-r--r--doc/todo/wishlist:_git_annex_status/comment_3_d1fd70c67243971c96d59e1ffb7ef6e7._comment23
-rw-r--r--doc/todo/wishlist:_git_annex_status/comment_4_9aeeb83d202dc8fb33ff364b0705ad94._comment8
-rw-r--r--doc/todo/wishlist:_git_backend_for_git-annex.mdwn9
-rw-r--r--doc/todo/wishlist:_git_backend_for_git-annex/comment_1_04319051fedc583e6c326bb21fcce5a5._comment10
-rw-r--r--doc/todo/wishlist:_git_backend_for_git-annex/comment_2_7f529f19a47e10b571f65ab382e97fd5._comment14
-rw-r--r--doc/todo/wishlist:_git_backend_for_git-annex/comment_3_a077bbad3e4b07cce019eb55a45330e7._comment10
-rw-r--r--doc/todo/wishlist:_git_backend_for_git-annex/comment_4_ecca429e12d734b509c671166a676c9d._comment8
-rw-r--r--doc/todo/wishlist:_git_backend_for_git-annex/comment_5_3459f0b41d818c23c8fb33edb89df634._comment8
-rw-r--r--doc/todo/wishlist:_incremental_unannex___40__currently_requires_twice_the_size_of_repo_to_complete__41__.mdwn10
-rw-r--r--doc/todo/wishlist:_incremental_unannex___40__currently_requires_twice_the_size_of_repo_to_complete__41__/comment_1_067b29fc47d26b9da0766f9810684ae8._comment10
-rw-r--r--doc/todo/wishlist:_metadata_metadata_view.mdwn23
-rw-r--r--doc/todo/wishlist:_metadata_metadata_view/comment_1_79dbf48cf2e0d649f32bd077f0c9bc5a._comment8
-rw-r--r--doc/todo/wishlist:_metadata_metadata_view/comment_2_5763d0e403c476ac692c1cd50630f824._comment12
-rw-r--r--doc/todo/wishlist:_metadata_metadata_view/comment_3_797e6578c60d8e2ed1f61a8d6403575f._comment8
-rw-r--r--doc/todo/wishlist:_metadata_metadata_view/comment_4_d271fe711b3fe5ffeb52f1caf44622b3._comment10
-rw-r--r--doc/todo/wishlist:_more_descriptive_commit_messages_in_git-annex_branch.mdwn55
-rw-r--r--doc/todo/wishlist:_option_to_disable_url_checking_with_addurl.mdwn9
-rw-r--r--doc/todo/wishlist:_option_to_disable_url_checking_with_addurl/comment_1_868a380faa1e55faa3c2d314e3258e86._comment10
-rw-r--r--doc/todo/wishlist:_provide_a_config_option_for_using_new_hashing_scheme_in_non-bare_remotes.mdwn5
-rw-r--r--doc/todo/wishlist:_push_to_cia.vc_from_the_website__39__s_repo__44___not_your_personal_one.mdwn3
-rw-r--r--doc/todo/wishlist:_push_to_cia.vc_from_the_website__39__s_repo__44___not_your_personal_one/comment_1_3480b0ec629ef29a151408d869186bf8._comment8
-rw-r--r--doc/todo/wishlist:_query_things_like_description__44___trust_level.mdwn4
-rw-r--r--doc/todo/wishlist:_query_things_like_description__44___trust_level/comment_1_14311384788312b96e550749ab7de9ea._comment10
-rw-r--r--doc/todo/wishlist:_query_things_like_description__44___trust_level/comment_2_342d1ac07573c7ef4e27f003a692e261._comment32
-rw-r--r--doc/todo/wishlist:_simple_url_for_webapp.mdwn36
-rw-r--r--doc/todo/wishlist:_simple_url_for_webapp/comment_1_552aad504fbb68d1f85abfde8c535e69._comment10
-rw-r--r--doc/todo/wishlist:_simpler_gpg_usage.mdwn12
-rw-r--r--doc/todo/wishlist:_simpler_gpg_usage/comment_1_6923fa6ebc0bbe7d93edb1d01d7c46c5._comment19
-rw-r--r--doc/todo/wishlist:_simpler_gpg_usage/comment_2_6fc874b6c391df242bd2592c4a65eae8._comment10
-rw-r--r--doc/todo/wishlist:_simpler_gpg_usage/comment_3_012f340c8c572fe598fc860c1046dabd._comment8
-rw-r--r--doc/todo/wishlist:_simpler_gpg_usage/comment_4_e0c2a13217b795964f3b630c001661ef._comment10
-rw-r--r--doc/todo/wishlist:_simpler_gpg_usage/comment_5_9668b58eb71901e1db8da7db38e068ca._comment8
-rw-r--r--doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote.mdwn22
-rw-r--r--doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_1_1a383c30df4fb1767f13d8c670b0c0b5._comment10
-rw-r--r--doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_2_81f7f893ac36c145b31f02db6a682a17._comment20
-rw-r--r--doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_3_a7e3cd68c5e5f05139151a58f358df95._comment13
-rw-r--r--doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_4_a57947ed257b28bbe995a68bfeb5eeaa._comment8
-rw-r--r--doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_5_a0612ae05dbda7f7935be648b42b30fc._comment8
-rw-r--r--doc/todo/wishlist:_special_remote_Ubuntu_One/comment_2_17e948acb1e29793cf172cd6def4160b._comment8
-rw-r--r--doc/todo/wishlist:_special_remote_for_sftp_or_rsync.mdwn28
-rw-r--r--doc/todo/wishlist:_special_remote_for_sftp_or_rsync/comment_1_6f07d9cc92cf8b4927b3a7d1820c9140._comment10
-rw-r--r--doc/todo/wishlist:_special_remote_for_sftp_or_rsync/comment_2_84e4414c88ae91c048564a2cdc2d3250._comment8
-rw-r--r--doc/todo/wishlist:_special_remote_for_sftp_or_rsync/comment_3_79de7ac44e3c0f0f5691a56d3fb88897._comment8
-rw-r--r--doc/todo/wishlist:_special_remote_mega.co.nz.mdwn3
-rw-r--r--doc/todo/wishlist:_special_remote_mega.co.nz/comment_2_6ca08ef808d4336fc42d0f279d6627b5._comment44
-rw-r--r--doc/todo/wishlist:_support_copy_--from__61__x_--to__61__y.mdwn29
-rw-r--r--doc/todo/wishlist:_support_copy_--from__61__x_--to__61__y/comment_1_cf8e0f16b723516374c95a93e4da42fc._comment12
-rw-r--r--doc/todo/wishlist:_support_copy_--from__61__x_--to__61__y/comment_2_d35359c9dd4dd4365d9a7caf695ff833._comment16
-rw-r--r--doc/todo/wishlist:_support_drop__44___find_on_special_remotes.mdwn18
-rw-r--r--doc/todo/wishlist:_support_drop__44___find_on_special_remotes/comment_1_f11ed642a83d965076778a162f701e84._comment8
-rw-r--r--doc/todo/wishlist:_support_for_more_ssh_urls_.mdwn22
-rw-r--r--doc/todo/wishlist:_use_hardlinks_for_local_clones/comment_2_ad51dced0c0146e1867830b93b520118._comment10
-rw-r--r--doc/todo/wishlist:_use_hardlinks_for_local_clones/comment_3_650ded07dfb4c0c598f6ae649e45760b._comment30
-rw-r--r--doc/todo/wishlist:_use_hardlinks_for_local_clones/comment_4_e0be9631d7f017dbff5baaabbd0e2d5c._comment14
-rw-r--r--doc/todo/wishlist:_vicfg_possible_repo_group_names.mdwn16
-rw-r--r--doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_2_06230669218541ac392d674bedd43176._comment43
-rw-r--r--doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_3_002afd775b82a0ced609c8305803a6c2._comment22
-rw-r--r--doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_4_9e8fdc41fdefcb8be0d6bae7cd4a04a9._comment59
-rw-r--r--doc/tuning.mdwn46
-rw-r--r--doc/tuning/comment_1_f8af8e9b696d32d238ebd56a3b8058c4._comment17
-rw-r--r--doc/tuning/comment_2_a0091dbb39b79dfe101d05f9a5db216f._comment12
-rw-r--r--doc/upgrades/insecure_embedded_creds.mdwn42
-rw-r--r--doc/use_case/Bob.mdwn2
-rw-r--r--doc/users/anarcat.mdwn17
-rw-r--r--doc/users/chris.mdwn1
-rw-r--r--doc/users/james.mdwn1
-rw-r--r--doc/users/joey.mdwn4
-rw-r--r--doc/users/tobiastheviking.mdwn23
-rw-r--r--doc/videos.mdwn2
-rw-r--r--doc/videos/git-annex_assistant_lan.mdwn6
-rw-r--r--doc/videos/git-annex_assistant_lan/comment_1_df8c8b6d9d63fbf5462b225edbb23c82._comment8
-rw-r--r--doc/videos/git-annex_assistant_lan/comment_2_d4e3122da9c9e27fbe872e09fcde762b._comment10
-rw-r--r--doc/videos/git-annex_assistant_lan/comment_3_d43ee0a335c2f010b437cf28437455c2._comment8
-rw-r--r--doc/videos/git-annex_assistant_lan/comment_4_c710e27db41311b157d8caaafc32dc7e._comment8
-rw-r--r--doc/walkthrough.mdwn2
-rw-r--r--doc/walkthrough/automatically_managing_content.mdwn4
-rw-r--r--doc/walkthrough/backups/comment_1_d0244791d2abbf29553546a6a6568a0f._comment10
-rw-r--r--doc/walkthrough/renaming_files.mdwn4
-rw-r--r--doc/walkthrough/setup_git.mdwn2
-rw-r--r--doc/walkthrough/transferring_files:_When_things_go_wrong.mdwn2
-rw-r--r--doc/walkthrough/unused_data/comment_2_e2ccd9a209c7a104004e998135d4b675._comment13
-rw-r--r--doc/walkthrough/unused_data/comment_3_5f973eb7c265015fcd400b6b0bbdf235._comment10
-rw-r--r--doc/walkthrough/using_ddar.mdwn32
-rw-r--r--doc/walkthrough/using_special_remotes.mdwn53
-rw-r--r--doc/walkthrough/using_ssh_remotes.mdwn10
-rw-r--r--git-annex.cabal88
-rw-r--r--git-annex.hs49
-rw-r--r--git-union-merge.hs2
-rw-r--r--standalone/android/Makefile132
-rwxr-xr-xstandalone/android/buildapk145
-rwxr-xr-xstandalone/android/buildchroot4
-rwxr-xr-xstandalone/android/buildchroot-inchroot19
-rwxr-xr-xstandalone/android/buildchroot-inchroot-asuser22
-rw-r--r--standalone/android/cabal.config208
-rw-r--r--standalone/android/git.patch47
-rw-r--r--standalone/android/haskell-patches/MissingH_1.2.0.0_0001-fix-build-not-Android-specific.patch34
-rw-r--r--standalone/android/haskell-patches/bloomfilter_fix-build-with-newer-base.patch26
-rw-r--r--standalone/android/haskell-patches/distributive_0.3-0001-fixes-for-cross-build.patch25
-rw-r--r--standalone/android/haskell-patches/distributive_0.4.4_0001-fixes-for-cross-build.patch25
-rw-r--r--standalone/android/haskell-patches/dns_use-android-net.dns1-command-instead-of-resolv.conf.patch42
-rw-r--r--standalone/android/haskell-patches/entropy_cross-build.patch25
-rw-r--r--standalone/android/haskell-patches/gnuidn_fix-build-with-new-base.patch50
-rw-r--r--standalone/android/haskell-patches/gnutls_0.1.4-0001-statically-link-with-gnutls.patch24
-rw-r--r--standalone/android/haskell-patches/libxml-sax_text-dep.patch25
-rw-r--r--standalone/android/haskell-patches/lifted-base_crossbuild.patch25
-rw-r--r--standalone/android/haskell-patches/network-protocol-xmpp_text-dapendency.patch25
-rw-r--r--standalone/android/haskell-patches/network_2.4.1.0_0001-android-port-fixes.patch1924
-rw-r--r--standalone/android/haskell-patches/network_2.4.1.0_0003-configure-misdetects-accept4.patch20
-rw-r--r--standalone/android/haskell-patches/network_2.5.0.0_0001-android-port-fixes.patch161
-rw-r--r--standalone/android/haskell-patches/primitive_0.5.0.1_0001-disable-i386-opt-stuff-to-allow-cross-compilation.patch24
-rw-r--r--standalone/android/haskell-patches/primitive_0.5.3.0_0001-disable-i386-opt-stuff-to-allow-cross-compilation.patch25
-rw-r--r--standalone/android/haskell-patches/shakespeare-text_remove-TH.patch (renamed from standalone/no-th/haskell-patches/shakespeare-text_remove-TH.patch)14
-rw-r--r--standalone/android/haskell-patches/system-filepath_cross-build.patch12
-rw-r--r--standalone/android/haskell-patches/unbounded-delays_crossbuild.patch25
-rw-r--r--standalone/android/haskell-patches/unix-time_hack-for-Bionic.patch16
-rw-r--r--standalone/android/haskell-patches/vector_hack-to-build-with-new-ghc.patch24
-rw-r--r--standalone/android/haskell-patches/x509-system_support-Android-cert-store.patch29
-rwxr-xr-xstandalone/android/install-haskell-packages66
-rwxr-xr-xstandalone/android/runshell3
-rw-r--r--standalone/android/term.patch4
-rw-r--r--standalone/android/wrapper.pl10
-rw-r--r--standalone/licences.gzbin60519 -> 55832 bytes
-rw-r--r--standalone/linux/cabal.config208
-rwxr-xr-xstandalone/linux/install-haskell-packages53
-rwxr-xr-xstandalone/linux/skel/git2
-rwxr-xr-xstandalone/linux/skel/git-annex2
-rwxr-xr-xstandalone/linux/skel/git-annex-shell2
-rwxr-xr-xstandalone/linux/skel/git-annex-webapp2
-rwxr-xr-xstandalone/linux/skel/git-receive-pack2
-rwxr-xr-xstandalone/linux/skel/git-shell2
-rwxr-xr-xstandalone/linux/skel/git-upload-pack2
-rwxr-xr-xstandalone/linux/skel/runshell15
-rw-r--r--standalone/no-th/evilsplicer-headers.hs4
-rw-r--r--standalone/no-th/haskell-patches/DAV_build-without-TH.patch513
-rw-r--r--standalone/no-th/haskell-patches/aeson_remove-TH.patch40
-rw-r--r--standalone/no-th/haskell-patches/file-embed_remove-TH.patch17
-rw-r--r--standalone/no-th/haskell-patches/hamlet_hack_TH.patch205
-rw-r--r--standalone/no-th/haskell-patches/hamlet_remove-TH.patch205
-rw-r--r--standalone/no-th/haskell-patches/lens_no-TH.patch99
-rw-r--r--standalone/no-th/haskell-patches/optparse-applicative_remove-ANN.patch33
-rw-r--r--standalone/no-th/haskell-patches/persistent-template_stub-out.patch14
-rw-r--r--standalone/no-th/haskell-patches/persistent_1.1.5.1_0001-disable-TH.patch14
-rw-r--r--standalone/no-th/haskell-patches/process-conduit_avoid-TH.patch30
-rw-r--r--standalone/no-th/haskell-patches/shakespeare-css_1.0.2_0002-expose-modules-used-by-TH.patch26
-rw-r--r--standalone/no-th/haskell-patches/shakespeare-css_1.0.2_0003-remove-more-TH.patch351
-rw-r--r--standalone/no-th/haskell-patches/shakespeare-css_remove_TH.patch366
-rw-r--r--standalone/no-th/haskell-patches/shakespeare-i18n_0001-remove-TH.patch215
-rw-r--r--standalone/no-th/haskell-patches/shakespeare-js_0001-remove-TH.patch316
-rw-r--r--standalone/no-th/haskell-patches/shakespeare-js_hack_TH.patch316
-rw-r--r--standalone/no-th/haskell-patches/shakespeare_remove-TH.patch181
-rw-r--r--standalone/no-th/haskell-patches/shakespeare_remove-th.patch189
-rw-r--r--standalone/no-th/haskell-patches/skein_hardcode_little-endian.patch (renamed from standalone/android/haskell-patches/skein_hardcode_little-endian.patch)2
-rw-r--r--standalone/no-th/haskell-patches/vector_hack-to-build-with-new-ghc.patch49
-rw-r--r--standalone/no-th/haskell-patches/wai-app-static_deal-with-TH.patch24
-rw-r--r--standalone/no-th/haskell-patches/yesod-auth_don-t-really-build.patch24
-rw-r--r--standalone/no-th/haskell-patches/yesod-core_expand_TH.patch111
-rw-r--r--standalone/no-th/haskell-patches/yesod-form_spliced-TH.patch1377
-rw-r--r--standalone/no-th/haskell-patches/yesod-persistent_do-not-really-build.patch33
-rw-r--r--standalone/no-th/haskell-patches/yesod-static_hack.patch61
-rw-r--r--standalone/no-th/haskell-patches/yesod_hack-TH.patch30
-rwxr-xr-xstandalone/osx/git-annex.app/Contents/MacOS/runshell15
-rw-r--r--standalone/trustedkeys.gpgbin0 -> 4979 bytes
-rwxr-xr-xstandalone/windows/build.sh30
4840 files changed, 69020 insertions, 67784 deletions
diff --git a/.gitignore b/.gitignore
index b842cc93c..0e90a5f80 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,6 +11,7 @@ Build/EvilSplicer
Build/Standalone
Build/OSXMkLibs
Build/LinuxMkLibs
+Build/BuildVersion
git-annex
git-annex.1
git-annex-shell.1
@@ -23,6 +24,9 @@ html
dist
# Sandboxed builds
cabal-dev
+.cabal-sandbox
+cabal.sandbox.config
+cabal.config
# Project-local emacs configuration
.dir-locals.el
# OSX related
diff --git a/.mailmap b/.mailmap
index 46423bd59..275b236df 100644
--- a/.mailmap
+++ b/.mailmap
@@ -1,6 +1,7 @@
-Joey Hess <joey@kitenet.net> http://joey.kitenet.net/ <joey@web>
-Joey Hess <joey@kitenet.net> http://joeyh.name/ <joey@web>
-Joey Hess <joey@kitenet.net> http://joeyh.name/ <http://joeyh.name/@web>
+Joey Hess <id@joeyh.name> http://joey.kitenet.net/ <joey@web>
+Joey Hess <id@joeyh.name> http://joeyh.name/ <joey@web>
+Joey Hess <id@joeyh.name> http://joeyh.name/ <http://joeyh.name/@web>
Yaroslav Halchenko <debian@onerussian.com>
Yaroslav Halchenko <debian@onerussian.com> http://yarikoptic.myopenid.com/ <site-myopenid@web>
Yaroslav Halchenko <debian@onerussian.com> https://www.google.com/accounts/o8/id?id=AItOawnx8kHW66N3BqmkVpgtXDlYMvr8TJ5VvfY <Yaroslav@web>
+Richard Hartmann <richih@debian.org> https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U <Richard@web>
diff --git a/Annex.hs b/Annex.hs
index 820c1d569..f85c7e0f2 100644
--- a/Annex.hs
+++ b/Annex.hs
@@ -1,21 +1,21 @@
{- git-annex monad
-
- - Copyright 2010-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
-{-# LANGUAGE GeneralizedNewtypeDeriving, PackageImports #-}
+{-# LANGUAGE CPP, GeneralizedNewtypeDeriving, PackageImports #-}
module Annex (
Annex,
AnnexState(..),
- PreferredContentMap,
new,
run,
eval,
getState,
changeState,
+ withState,
setFlag,
setField,
setOutput,
@@ -29,13 +29,11 @@ module Annex (
getGitConfig,
changeGitConfig,
changeGitRepo,
+ getRemoteGitConfig,
withCurrentState,
+ changeDirectory,
) where
-import "mtl" Control.Monad.Reader
-import "MonadCatchIO-transformers" Control.Monad.CatchIO
-import Control.Concurrent
-
import Common
import qualified Git
import qualified Git.Config
@@ -60,29 +58,38 @@ import Types.FileMatcher
import Types.NumCopies
import Types.LockPool
import Types.MetaData
+import Types.DesktopNotify
import Types.CleanupActions
-import qualified Utility.Matcher
+#ifdef WITH_QUVI
+import Utility.Quvi (QuviVersion)
+#endif
+import Utility.InodeCache
+import Utility.Url
+
+import "mtl" Control.Monad.Reader
+import Control.Concurrent
import qualified Data.Map as M
import qualified Data.Set as S
-import Utility.Quvi (QuviVersion)
{- git-annex's monad is a ReaderT around an AnnexState stored in a MVar.
- - This allows modifying the state in an exception-safe fashion.
- The MVar is not exposed outside this module.
+ -
+ - Note that when an Annex action fails and the exception is caught,
+ - ny changes the action has made to the AnnexState are retained,
+ - due to the use of the MVar to store the state.
-}
newtype Annex a = Annex { runAnnex :: ReaderT (MVar AnnexState) IO a }
deriving (
Monad,
MonadIO,
MonadReader (MVar AnnexState),
- MonadCatchIO,
+ MonadCatch,
+ MonadThrow,
+ MonadMask,
Functor,
Applicative
)
-type Matcher a = Either [Utility.Matcher.Token a] (Utility.Matcher.Matcher a)
-type PreferredContentMap = M.Map UUID (Utility.Matcher.Matcher (S.Set UUID -> MatchInfo -> Annex Bool))
-
-- internal state storage
data AnnexState = AnnexState
{ repo :: Git.Repo
@@ -103,9 +110,10 @@ data AnnexState = AnnexState
, forcebackend :: Maybe String
, globalnumcopies :: Maybe NumCopies
, forcenumcopies :: Maybe NumCopies
- , limit :: Matcher (MatchInfo -> Annex Bool)
+ , limit :: ExpandableMatcher Annex
, uuidmap :: Maybe UUIDMap
- , preferredcontentmap :: Maybe PreferredContentMap
+ , preferredcontentmap :: Maybe (FileMatcherMap Annex)
+ , requiredcontentmap :: Maybe (FileMatcherMap Annex)
, shared :: Maybe SharedRepository
, forcetrust :: TrustMap
, trustmap :: Maybe TrustMap
@@ -116,12 +124,16 @@ data AnnexState = AnnexState
, fields :: M.Map String String
, modmeta :: [ModMeta]
, cleanup :: M.Map CleanupAction (Annex ())
- , inodeschanged :: Maybe Bool
+ , sentinalstatus :: Maybe SentinalStatus
, useragent :: Maybe String
, errcounter :: Integer
, unusedkeys :: Maybe (S.Set Key)
+ , tempurls :: M.Map Key URLString
+#ifdef WITH_QUVI
, quviversion :: Maybe QuviVersion
+#endif
, existinghooks :: M.Map Git.Hook.Hook Bool
+ , desktopnotify :: DesktopNotify
}
newState :: GitConfig -> Git.Repo -> AnnexState
@@ -144,9 +156,10 @@ newState c r = AnnexState
, forcebackend = Nothing
, globalnumcopies = Nothing
, forcenumcopies = Nothing
- , limit = Left []
+ , limit = BuildingMatcher []
, uuidmap = Nothing
, preferredcontentmap = Nothing
+ , requiredcontentmap = Nothing
, shared = Nothing
, forcetrust = M.empty
, trustmap = Nothing
@@ -157,19 +170,23 @@ newState c r = AnnexState
, fields = M.empty
, modmeta = []
, cleanup = M.empty
- , inodeschanged = Nothing
+ , sentinalstatus = Nothing
, useragent = Nothing
, errcounter = 0
, unusedkeys = Nothing
+ , tempurls = M.empty
+#ifdef WITH_QUVI
, quviversion = Nothing
+#endif
, existinghooks = M.empty
+ , desktopnotify = mempty
}
{- Makes an Annex state object for the specified git repo.
- Ensures the config is read, if it was not already. -}
new :: Git.Repo -> IO AnnexState
new r = do
- r' <- Git.Config.read r
+ r' <- Git.Config.read =<< Git.relPath r
let c = extractGitConfig r'
newState c <$> if annexDirect c then fixupDirect r' else return r'
@@ -200,6 +217,11 @@ changeState modifier = do
mvar <- ask
liftIO $ modifyMVar_ mvar $ return . modifier
+withState :: (AnnexState -> (AnnexState, b)) -> Annex b
+withState modifier = do
+ mvar <- ask
+ liftIO $ modifyMVar mvar $ return . modifier
+
{- Sets a flag to True -}
setFlag :: String -> Annex ()
setFlag flag = changeState $ \s ->
@@ -261,6 +283,13 @@ changeGitRepo r = changeState $ \s -> s
, gitconfig = extractGitConfig r
}
+{- Gets the RemoteGitConfig from a remote, given the Git.Repo for that
+ - remote. -}
+getRemoteGitConfig :: Git.Repo -> Annex RemoteGitConfig
+getRemoteGitConfig r = do
+ g <- gitRepo
+ return $ extractRemoteGitConfig g (Git.repoDescribe r)
+
{- Converts an Annex action into an IO action, that runs with a copy
- of the current Annex state.
-
@@ -270,3 +299,14 @@ withCurrentState :: Annex a -> Annex (IO a)
withCurrentState a = do
s <- getState id
return $ eval s a
+
+{- It's not safe to use setCurrentDirectory in the Annex monad,
+ - because the git repo paths are stored relative.
+ - Instead, use this.
+ -}
+changeDirectory :: FilePath -> Annex ()
+changeDirectory d = do
+ r <- liftIO . Git.adjustPath absPath =<< gitRepo
+ liftIO $ setCurrentDirectory d
+ r' <- liftIO $ Git.relPath r
+ changeState $ \s -> s { repo = r' }
diff --git a/Annex/AutoMerge.hs b/Annex/AutoMerge.hs
index 2ed26b78f..f0f183dfb 100644
--- a/Annex/AutoMerge.hs
+++ b/Annex/AutoMerge.hs
@@ -1,24 +1,27 @@
{- git-annex automatic merge conflict resolution
-
- - Copyright 2012-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
-module Annex.AutoMerge (autoMergeFrom) where
+module Annex.AutoMerge
+ ( autoMergeFrom
+ , resolveMerge
+ , commitResolvedMerge
+ ) where
import Common.Annex
import qualified Annex.Queue
import Annex.Direct
import Annex.CatFile
import Annex.Link
-import qualified Git.Command
import qualified Git.LsFiles as LsFiles
import qualified Git.UpdateIndex as UpdateIndex
import qualified Git.Merge
import qualified Git.Ref
-import qualified Git.Sha
import qualified Git
+import qualified Git.Branch
import Git.Types (BlobType(..))
import Config
import Annex.ReplaceFile
@@ -29,23 +32,22 @@ import qualified Data.Set as S
{- Merges from a branch into the current branch
- (which may not exist yet),
- - with automatic merge conflict resolution. -}
-autoMergeFrom :: Git.Ref -> (Maybe Git.Ref) -> Annex Bool
-autoMergeFrom branch currbranch = do
+ - with automatic merge conflict resolution.
+ -
+ - Callers should use Git.Branch.changed first, to make sure that
+ - there are changed from the current branch to the branch being merged in.
+ -}
+autoMergeFrom :: Git.Ref -> (Maybe Git.Ref) -> Git.Branch.CommitMode -> Annex Bool
+autoMergeFrom branch currbranch commitmode = do
showOutput
case currbranch of
Nothing -> go Nothing
Just b -> go =<< inRepo (Git.Ref.sha b)
where
go old = ifM isDirect
- ( do
- d <- fromRepo gitAnnexMergeDir
- r <- inRepo (mergeDirect d branch)
- <||> resolveMerge old branch
- mergeDirectCleanup d (fromMaybe Git.Sha.emptyTree old) Git.Ref.headRef
- return r
- , inRepo (Git.Merge.mergeNonInteractive branch)
- <||> resolveMerge old branch
+ ( mergeDirect currbranch old branch (resolveMerge old branch) commitmode
+ , inRepo (Git.Merge.mergeNonInteractive branch commitmode)
+ <||> (resolveMerge old branch <&&> commitResolvedMerge commitmode)
)
{- Resolves a conflicted merge. It's important that any conflicts be
@@ -70,9 +72,11 @@ autoMergeFrom branch currbranch = do
-
- In indirect mode, the merge is resolved in the work tree and files
- staged, to clean up from a conflicted merge that was run in the work
- - tree. In direct mode, the work tree is not touched here; files are
- - staged to the index, and written to the gitAnnexMergeDir, and later
- - mergeDirectCleanup handles updating the work tree.
+ - tree.
+ -
+ - In direct mode, the work tree is not touched here; files are staged to
+ - the index, and written to the gitAnnexMergeDir, for later handling by
+ - the direct mode merge code.
-}
resolveMerge :: Maybe Git.Ref -> Git.Ref -> Annex Bool
resolveMerge us them = do
@@ -92,14 +96,6 @@ resolveMerge us them = do
unlessM isDirect $
cleanConflictCruft mergedfs top
Annex.Queue.flush
- whenM isDirect $
- void preCommitDirect
- void $ inRepo $ Git.Command.runBool
- [ Param "commit"
- , Param "--no-verify"
- , Param "-m"
- , Param "git-annex automatic merge conflict fix"
- ]
showLongNote "Merge conflict was automatically resolved; you may want to examine the result."
return merged
@@ -118,11 +114,11 @@ resolveMerge' (Just us) them u = do
makelink keyUs
-- Our side is annexed file, other side is not.
(Just keyUs, Nothing) -> resolveby $ do
- graftin them file
+ graftin them file LsFiles.valThem LsFiles.valThem
makelink keyUs
-- Our side is not annexed file, other side is.
(Nothing, Just keyThem) -> resolveby $ do
- graftin us file
+ graftin us file LsFiles.valUs LsFiles.valUs
makelink keyThem
-- Neither side is annexed file; cannot resolve.
(Nothing, Nothing) -> return Nothing
@@ -138,18 +134,42 @@ resolveMerge' (Just us) them u = do
makelink key = do
let dest = variantFile file key
- l <- inRepo $ gitAnnexLink dest key
- ifM isDirect
- ( do
- d <- fromRepo gitAnnexMergeDir
- replaceFile (d </> dest) $ makeAnnexLink l
- , replaceFile dest $ makeAnnexLink l
- )
+ l <- calcRepo $ gitAnnexLink dest key
+ replacewithlink dest l
stageSymlink dest =<< hashSymlink l
- {- stage a graft of a directory or file from a branch -}
- graftin b item = Annex.Queue.addUpdateIndex
- =<< fromRepo (UpdateIndex.lsSubTree b item)
+ replacewithlink dest link = ifM isDirect
+ ( do
+ d <- fromRepo gitAnnexMergeDir
+ replaceFile (d </> dest) $ makeGitLink link
+ , replaceFile dest $ makeGitLink link
+ )
+
+ {- Stage a graft of a directory or file from a branch.
+ -
+ - When there is a conflicted merge where one side is a directory
+ - or file, and the other side is a symlink, git merge always
+ - updates the work tree to contain the non-symlink. So, the
+ - directory or file will already be in the work tree correctly,
+ - and they just need to be staged into place. Do so by copying the
+ - index. (Note that this is also better than calling git-add
+ - because on a crippled filesystem, it preserves any symlink
+ - bits.)
+ -
+ - It's also possible for the branch to have a symlink in it,
+ - which is not a git-annex symlink. In this special case,
+ - git merge does not update the work tree to contain the symlink
+ - from the branch, so we have to do so manually.
+ -}
+ graftin b item select select' = do
+ Annex.Queue.addUpdateIndex
+ =<< fromRepo (UpdateIndex.lsSubTree b item)
+ when (select (LsFiles.unmergedBlobType u) == Just SymlinkBlob) $
+ case select' (LsFiles.unmergedSha u) of
+ Nothing -> noop
+ Just sha -> do
+ link <- catLink True sha
+ replacewithlink item link
resolveby a = do
{- Remove conflicted file from index so merge can be resolved. -}
@@ -158,7 +178,7 @@ resolveMerge' (Just us) them u = do
return (Just file)
{- git-merge moves conflicting files away to files
- - named something like f~HEAD or f~branch, but the
+ - named something like f~HEAD or f~branch or just f, but the
- exact name chosen can vary. Once the conflict is resolved,
- this cruft can be deleted. To avoid deleting legitimate
- files that look like this, only delete files that are
@@ -175,5 +195,12 @@ cleanConflictCruft resolvedfs top = do
liftIO $ nukeFile f
| otherwise = noop
s = S.fromList resolvedfs
- matchesresolved f = S.member (base f) s
+ matchesresolved f = S.member f s || S.member (base f) s
base f = reverse $ drop 1 $ dropWhile (/= '~') $ reverse f
+
+commitResolvedMerge :: Git.Branch.CommitMode -> Annex Bool
+commitResolvedMerge commitmode = inRepo $ Git.Branch.commitCommand commitmode
+ [ Param "--no-verify"
+ , Param "-m"
+ , Param "git-annex automatic merge conflict fix"
+ ]
diff --git a/Annex/Branch.hs b/Annex/Branch.hs
index 94c4c029c..6ce711996 100644
--- a/Annex/Branch.hs
+++ b/Annex/Branch.hs
@@ -1,6 +1,6 @@
{- management of the git-annex branch
-
- - Copyright 2011-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -25,9 +25,11 @@ module Annex.Branch (
performTransitions,
) where
-import qualified Data.ByteString.Lazy.Char8 as L
+import qualified Data.ByteString.Lazy as L
import qualified Data.Set as S
import qualified Data.Map as M
+import Data.Bits.Utils
+import Control.Concurrent (threadDelay)
import Common.Annex
import Annex.BranchState
@@ -48,9 +50,11 @@ import Annex.Perms
import Logs
import Logs.Transitions
import Logs.Trust.Pure
+import Logs.Difference.Pure
import Annex.ReplaceFile
import qualified Annex.Queue
import Annex.Branch.Transitions
+import qualified Annex
{- Name of the branch that is used to store git-annex's information. -}
name :: Git.Ref
@@ -91,7 +95,7 @@ getBranch = maybe (hasOrigin >>= go >>= use) return =<< branchsha
fromMaybe (error $ "failed to create " ++ fromRef name)
<$> branchsha
go False = withIndex' True $
- inRepo $ Git.Branch.commitAlways "branch created" fullname []
+ inRepo $ Git.Branch.commitAlways Git.Branch.AutomaticCommit "branch created" fullname []
use sha = do
setIndexSha sha
return sha
@@ -159,6 +163,7 @@ updateTo pairs = do
<$> getLocal transitionsLog
unless (null branches) $ do
showSideAction merge_desc
+ mapM_ checkBranchDifferences refs
mergeIndex jl refs
let commitrefs = nub $ fullname:refs
unlessM (handleTransitions jl localtransitions commitrefs) $ do
@@ -199,7 +204,7 @@ getHistorical :: RefDate -> FilePath -> Annex String
getHistorical date = getRef (Git.Ref.dateRef fullname date)
getRef :: Ref -> FilePath -> Annex String
-getRef ref file = withIndex $ L.unpack <$> catFile ref file
+getRef ref file = withIndex $ decodeBS <$> catFile ref file
{- Applies a function to modifiy the content of a file.
-
@@ -217,7 +222,7 @@ set = setJournalFile
commit :: String -> Annex ()
commit = whenM journalDirty . forceCommit
-{- Commits the current index to the branch even without any journalleda
+{- Commits the current index to the branch even without any journalled
- changes. -}
forceCommit :: String -> Annex ()
forceCommit message = lockJournal $ \jl -> do
@@ -228,30 +233,34 @@ forceCommit message = lockJournal $ \jl -> do
{- Commits the staged changes in the index to the branch.
-
- - Ensures that the branch's index file is first updated to the state
+ - Ensures that the branch's index file is first updated to merge the state
- of the branch at branchref, before running the commit action. This
- is needed because the branch may have had changes pushed to it, that
- are not yet reflected in the index.
- -
- - Also safely handles a race that can occur if a change is being pushed
- - into the branch at the same time. When the race happens, the commit will
- - be made on top of the newly pushed change, but without the index file
- - being updated to include it. The result is that the newly pushed
- - change is reverted. This race is detected and another commit made
- - to fix it.
-
- The branchref value can have been obtained using getBranch at any
- previous point, though getting it a long time ago makes the race
- more likely to occur.
+ -
+ - Note that changes may be pushed to the branch at any point in time!
+ - So, there's a race. If the commit is made using the newly pushed tip of
+ - the branch as its parent, and that ref has not yet been merged into the
+ - index, then the result is that the commit will revert the pushed
+ - changes, since they have not been merged into the index. This race
+ - is detected and another commit made to fix it.
+ -
+ - (It's also possible for the branch to be overwritten,
+ - losing the commit made here. But that's ok; the data is still in the
+ - index and will get committed again later.)
-}
commitIndex :: JournalLocked -> Git.Ref -> String -> [Git.Ref] -> Annex ()
commitIndex jl branchref message parents = do
showStoringStateAction
- commitIndex' jl branchref message parents
-commitIndex' :: JournalLocked -> Git.Ref -> String -> [Git.Ref] -> Annex ()
-commitIndex' jl branchref message parents = do
+ commitIndex' jl branchref message message 0 parents
+commitIndex' :: JournalLocked -> Git.Ref -> String -> String -> Integer -> [Git.Ref] -> Annex ()
+commitIndex' jl branchref message basemessage retrynum parents = do
updateIndex jl branchref
- committedref <- inRepo $ Git.Branch.commitAlways message fullname parents
+ committedref <- inRepo $ Git.Branch.commitAlways Git.Branch.AutomaticCommit message fullname parents
setIndexSha committedref
parentrefs <- commitparents <$> catObject committedref
when (racedetected branchref parentrefs) $
@@ -259,7 +268,8 @@ commitIndex' jl branchref message parents = do
where
-- look for "parent ref" lines and return the refs
commitparents = map (Git.Ref . snd) . filter isparent .
- map (toassoc . L.unpack) . L.lines
+ map (toassoc . decodeBS) . L.split newline
+ newline = c2w8 '\n'
toassoc = separate (== ' ')
isparent (k,_) = k == "parent"
@@ -271,12 +281,16 @@ commitIndex' jl branchref message parents = do
| otherwise = True -- race!
{- To recover from the race, union merge the lost refs
- - into the index, and recommit on top of the bad commit. -}
+ - into the index. -}
fixrace committedref lostrefs = do
+ showSideAction "recovering from race"
+ let retrynum' = retrynum+1
+ -- small sleep to let any activity that caused
+ -- the race settle down
+ liftIO $ threadDelay (100000 + fromInteger retrynum')
mergeIndex jl lostrefs
- commitIndex jl committedref racemessage [committedref]
-
- racemessage = message ++ " (recovery from race)"
+ let racemessage = basemessage ++ " (recovery from race #" ++ show retrynum' ++ "; expected commit parent " ++ show branchref ++ " but found " ++ show lostrefs ++ " )"
+ commitIndex' jl committedref racemessage basemessage retrynum' [committedref]
{- Lists all files on the branch. There may be duplicates in the list. -}
files :: Annex [FilePath]
@@ -332,7 +346,7 @@ withIndex :: Annex a -> Annex a
withIndex = withIndex' False
withIndex' :: Bool -> Annex a -> Annex a
withIndex' bootstrapping a = do
- f <- fromRepo gitAnnexIndex
+ f <- liftIO . absPath =<< fromRepo gitAnnexIndex
withIndexFile f $ do
checkIndexOnce $ unlessM (liftIO $ doesFileExist f) $ do
unless bootstrapping create
@@ -387,19 +401,40 @@ stageJournal jl = withIndex $ do
prepareModifyIndex jl
g <- gitRepo
let dir = gitAnnexJournalDir g
- fs <- getJournalFiles jl
- liftIO $ do
+ (jlogf, jlogh) <- openjlog
+ withJournalHandle $ \jh -> do
h <- hashObjectStart g
Git.UpdateIndex.streamUpdateIndex g
- [genstream dir h fs]
+ [genstream dir h jh jlogh]
hashObjectStop h
- return $ liftIO $ mapM_ (removeFile . (dir </>)) fs
+ return $ cleanup dir jlogh jlogf
where
- genstream dir h fs streamer = forM_ fs $ \file -> do
- let path = dir </> file
- sha <- hashFile h path
- streamer $ Git.UpdateIndex.updateIndexLine
- sha FileBlob (asTopFilePath $ fileJournal file)
+ genstream dir h jh jlogh streamer = do
+ v <- readDirectory jh
+ case v of
+ Nothing -> return ()
+ Just file -> do
+ unless (dirCruft file) $ do
+ let path = dir </> file
+ sha <- hashFile h path
+ hPutStrLn jlogh file
+ streamer $ Git.UpdateIndex.updateIndexLine
+ sha FileBlob (asTopFilePath $ fileJournal file)
+ genstream dir h jh jlogh streamer
+ -- Clean up the staged files, as listed in the temp log file.
+ -- The temp file is used to avoid needing to buffer all the
+ -- filenames in memory.
+ cleanup dir jlogh jlogf = do
+ hFlush jlogh
+ hSeek jlogh AbsoluteSeek 0
+ stagedfs <- lines <$> hGetContents jlogh
+ mapM_ (removeFile . (dir </>)) stagedfs
+ hClose jlogh
+ nukeFile jlogf
+ openjlog = do
+ tmpdir <- fromRepo gitAnnexTmpMiscDir
+ createAnnexDirectory tmpdir
+ liftIO $ openTempFile tmpdir "jlog"
{- This is run after the refs have been merged into the index,
- but before the result is committed to the branch.
@@ -431,8 +466,8 @@ handleTransitions jl localts refs = do
ignoreRefs untransitionedrefs
return True
where
- getreftransition ref = do
- ts <- parseTransitionsStrictly "remote" . L.unpack
+ getreftransition ref = do
+ ts <- parseTransitionsStrictly "remote" . decodeBS
<$> catFile ref transitionsLog
return (ref, ts)
@@ -447,7 +482,7 @@ ignoreRefs rs = do
getIgnoredRefs :: Annex (S.Set Git.Ref)
getIgnoredRefs = S.fromList . mapMaybe Git.Sha.extractSha . lines <$> content
where
- content = do
+ content = do
f <- fromRepo gitAnnexIgnoredRefs
liftIO $ catchDefaultIO "" $ readFile f
@@ -469,13 +504,13 @@ performTransitionsLocked jl ts neednewlocalbranch transitionedrefs = do
Annex.Queue.flush
if neednewlocalbranch
then do
- committedref <- inRepo $ Git.Branch.commitAlways message fullname transitionedrefs
+ committedref <- inRepo $ Git.Branch.commitAlways Git.Branch.AutomaticCommit message fullname transitionedrefs
setIndexSha committedref
else do
ref <- getBranch
commitIndex jl ref message (nub $ fullname:transitionedrefs)
where
- message
+ message
| neednewlocalbranch && null transitionedrefs = "new branch for transition " ++ tdesc
| otherwise = "continuing transition " ++ tdesc
tdesc = show $ map describeTransition $ transitionList ts
@@ -514,3 +549,11 @@ performTransitionsLocked jl ts neednewlocalbranch transitionedrefs = do
apply rest hasher file content' trustmap
PreserveFile ->
apply rest hasher file content trustmap
+
+checkBranchDifferences :: Git.Ref -> Annex ()
+checkBranchDifferences ref = do
+ theirdiffs <- allDifferences . parseDifferencesLog . decodeBS
+ <$> catFile ref differenceLog
+ mydiffs <- annexDifferences <$> Annex.getGitConfig
+ when (theirdiffs /= mydiffs) $
+ error "Remote repository is tuned in incompatable way; cannot be merged with local repository."
diff --git a/Annex/Branch/Transitions.hs b/Annex/Branch/Transitions.hs
index 42c61d96a..a9c7daa20 100644
--- a/Annex/Branch/Transitions.hs
+++ b/Annex/Branch/Transitions.hs
@@ -1,6 +1,6 @@
{- git-annex branch transitions
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -12,12 +12,14 @@ module Annex.Branch.Transitions (
import Logs
import Logs.Transitions
-import Logs.UUIDBased as UUIDBased
-import Logs.Presence.Pure as Presence
+import qualified Logs.UUIDBased as UUIDBased
+import qualified Logs.Presence.Pure as Presence
+import qualified Logs.Chunk.Pure as Chunk
import Types.TrustLevel
import Types.UUID
import qualified Data.Map as M
+import Data.Default
data FileTransition
= ChangeFile String
@@ -32,10 +34,16 @@ getTransitionCalculator ForgetDeadRemotes = Just dropDead
dropDead :: FilePath -> String -> TrustMap -> FileTransition
dropDead f content trustmap = case getLogVariety f of
- Just UUIDBasedLog -> ChangeFile $
- UUIDBased.showLog id $ dropDeadFromUUIDBasedLog trustmap $ UUIDBased.parseLog Just content
+ Just UUIDBasedLog
+ -- Don't remove the dead repo from the trust log,
+ -- because git remotes may still exist, and they need
+ -- to still know it's dead.
+ | f == trustLog -> PreserveFile
+ | otherwise -> ChangeFile $ UUIDBased.showLog id $ dropDeadFromMapLog trustmap id $ UUIDBased.parseLog Just content
Just NewUUIDBasedLog -> ChangeFile $
- UUIDBased.showLogNew id $ dropDeadFromUUIDBasedLog trustmap $ UUIDBased.parseLogNew Just content
+ UUIDBased.showLogNew id $ dropDeadFromMapLog trustmap id $ UUIDBased.parseLogNew Just content
+ Just (ChunkLog _) -> ChangeFile $
+ Chunk.showLog $ dropDeadFromMapLog trustmap fst $ Chunk.parseLog content
Just (PresenceLog _) ->
let newlog = Presence.compactLog $ dropDeadFromPresenceLog trustmap $ Presence.parseLog content
in if null newlog
@@ -44,8 +52,8 @@ dropDead f content trustmap = case getLogVariety f of
Just OtherLog -> PreserveFile
Nothing -> PreserveFile
-dropDeadFromUUIDBasedLog :: TrustMap -> UUIDBased.Log String -> UUIDBased.Log String
-dropDeadFromUUIDBasedLog trustmap = M.filterWithKey $ notDead trustmap . const
+dropDeadFromMapLog :: Ord k => TrustMap -> (k -> UUID) -> M.Map k v -> M.Map k v
+dropDeadFromMapLog trustmap getuuid = M.filterWithKey $ \k _v -> notDead trustmap getuuid k
{- Presence logs can contain UUIDs or other values. Any line that matches
- a dead uuid is dropped; any other values are passed through. -}
@@ -53,4 +61,4 @@ dropDeadFromPresenceLog :: TrustMap -> [Presence.LogLine] -> [Presence.LogLine]
dropDeadFromPresenceLog trustmap = filter $ notDead trustmap (toUUID . Presence.info)
notDead :: TrustMap -> (v -> UUID) -> v -> Bool
-notDead trustmap a v = M.findWithDefault SemiTrusted (a v) trustmap /= DeadTrusted
+notDead trustmap a v = M.findWithDefault def (a v) trustmap /= DeadTrusted
diff --git a/Annex/BranchState.hs b/Annex/BranchState.hs
index 9b2f9a04c..889a936b9 100644
--- a/Annex/BranchState.hs
+++ b/Annex/BranchState.hs
@@ -2,7 +2,7 @@
-
- Runtime state about the git-annex branch.
-
- - Copyright 2011-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Annex/CatFile.hs b/Annex/CatFile.hs
index 6a778db03..179149844 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-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -12,9 +12,11 @@ module Annex.CatFile (
catTree,
catObjectDetails,
catFileHandle,
+ catFileStop,
catKey,
catKeyFile,
catKeyFileHEAD,
+ catLink,
) where
import qualified Data.ByteString.Lazy as L
@@ -70,6 +72,14 @@ catFileHandle = do
Annex.changeState $ \s -> s { Annex.catfilehandles = m' }
return h
+{- Stops all running cat-files. Should only be run when it's known that
+ - nothing is using the handles, eg at shutdown. -}
+catFileStop :: Annex ()
+catFileStop = do
+ m <- Annex.withState $ \s ->
+ (s { Annex.catfilehandles = M.empty }, Annex.catfilehandles s)
+ liftIO $ mapM_ Git.CatFile.catFileStop (M.elems m)
+
{- From the Sha or Ref of a symlink back to the key.
-
- Requires a mode witness, to guarantee that the file is a symlink.
@@ -77,21 +87,25 @@ catFileHandle = do
catKey :: Ref -> FileMode -> Annex (Maybe Key)
catKey = catKey' True
-catKey' :: Bool -> Ref -> FileMode -> Annex (Maybe Key)
-catKey' modeguaranteed ref mode
+catKey' :: Bool -> Sha -> FileMode -> Annex (Maybe Key)
+catKey' modeguaranteed sha mode
| isSymLink mode = do
- l <- fromInternalGitPath . decodeBS <$> get
+ l <- catLink modeguaranteed sha
return $ if isLinkToAnnex l
then fileKey $ takeFileName l
else Nothing
| otherwise = return Nothing
+
+{- Gets a symlink target. -}
+catLink :: Bool -> Sha -> Annex String
+catLink modeguaranteed sha = fromInternalGitPath . decodeBS <$> get
where
- -- If the mode is not guaranteed to be correct, avoid
+ -- If the mode is not guaranteed to be correct, avoid
-- buffering the whole file content, which might be large.
-- 8192 is enough if it really is a symlink.
- get
- | modeguaranteed = catObject ref
- | otherwise = L.take 8192 <$> catObject ref
+ get
+ | modeguaranteed = catObject sha
+ | otherwise = L.take 8192 <$> catObject sha
{- Looks up the key corresponding to the Ref using the running cat-file.
-
@@ -106,7 +120,7 @@ catKeyChecked :: Bool -> Ref -> Annex (Maybe Key)
catKeyChecked needhead ref@(Ref r) =
catKey' False ref =<< findmode <$> catTree treeref
where
- pathparts = split "/" r
+ pathparts = split "/" r
dir = intercalate "/" $ take (length pathparts - 1) pathparts
file = fromMaybe "" $ lastMaybe pathparts
treeref = Ref $ if needhead then "HEAD" ++ dir ++ "/" else dir ++ "/"
diff --git a/Annex/CheckAttr.hs b/Annex/CheckAttr.hs
index 8eed9e804..46c71fe72 100644
--- a/Annex/CheckAttr.hs
+++ b/Annex/CheckAttr.hs
@@ -1,6 +1,6 @@
{- git check-attr interface, with handle automatically stored in the Annex monad
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Annex/CheckIgnore.hs b/Annex/CheckIgnore.hs
index d45e652bc..8d7df1e2c 100644
--- a/Annex/CheckIgnore.hs
+++ b/Annex/CheckIgnore.hs
@@ -1,7 +1,7 @@
{- git check-ignore interface, with handle automatically stored in
- the Annex monad
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -18,7 +18,7 @@ import qualified Annex
checkIgnored :: FilePath -> Annex Bool
checkIgnored file = go =<< checkIgnoreHandle
where
- go Nothing = return False
+ go Nothing = return False
go (Just h) = liftIO $ Git.checkIgnored h file
checkIgnoreHandle :: Annex (Maybe Git.CheckIgnoreHandle)
diff --git a/Annex/Content.hs b/Annex/Content.hs
index 9c71037de..f91c1e72a 100644
--- a/Annex/Content.hs
+++ b/Annex/Content.hs
@@ -1,6 +1,6 @@
{- git-annex file content managing
-
- - Copyright 2010-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -16,6 +16,7 @@ module Annex.Content (
getViaTmpChecked,
getViaTmpUnchecked,
prepGetViaTmpChecked,
+ prepTmp,
withTmp,
checkDiskSpace,
moveAnnex,
@@ -55,11 +56,7 @@ import Annex.Perms
import Annex.Link
import Annex.Content.Direct
import Annex.ReplaceFile
-import Annex.Exception
-
-#ifdef mingw32_HOST_OS
-import Utility.WinLock
-#endif
+import Utility.LockFile
{- Checks if a given key's content is currently present. -}
inAnnex :: Key -> Annex Bool
@@ -104,27 +101,32 @@ inAnnexSafe key = inAnnex' (fromMaybe False) (Just False) go key
=<< contentLockFile key
#ifndef mingw32_HOST_OS
- checkindirect f = liftIO $ openforlock f >>= check is_missing
+ checkindirect contentfile = liftIO $ checkOr is_missing contentfile
{- In direct mode, the content file must exist, but
- - the lock file often generally won't exist unless a removal is in
- - process. This does not create the lock file, it only checks for
- - it. -}
+ - the lock file generally won't exist unless a removal is in
+ - process. -}
checkdirect contentfile lockfile = liftIO $
ifM (doesFileExist contentfile)
- ( openforlock lockfile >>= check is_unlocked
+ ( checkOr is_unlocked lockfile
, return is_missing
)
- openforlock f = catchMaybeIO $
- openFd f ReadOnly Nothing defaultFileFlags
- check _ (Just h) = do
- v <- getLock h (ReadLock, AbsoluteSeek, 0, 0)
- closeFd h
+ checkOr d lockfile = do
+ v <- checkLocked lockfile
return $ case v of
- Just _ -> is_locked
- Nothing -> is_unlocked
- check def Nothing = return def
+ Nothing -> d
+ Just True -> is_locked
+ Just False -> is_unlocked
#else
- checkindirect _ = return is_missing
+ checkindirect f = liftIO $ ifM (doesFileExist f)
+ ( do
+ v <- lockShared f
+ case v of
+ Nothing -> return is_locked
+ Just lockhandle -> do
+ dropLock lockhandle
+ return is_unlocked
+ , return is_missing
+ )
{- In Windows, see if we can take a shared lock. If so,
- remove the lock file to clean up after ourselves. -}
checkdirect contentfile lockfile =
@@ -150,14 +152,20 @@ contentLockFile key = ifM isDirect
, return Nothing
)
+newtype ContentLock = ContentLock Key
+
{- Content is exclusively locked while running an action that might remove
- - it. (If the content is not present, no locking is done.) -}
-lockContent :: Key -> Annex a -> Annex a
+ - it. (If the content is not present, no locking is done.)
+ -}
+lockContent :: Key -> (ContentLock -> Annex a) -> Annex a
lockContent key a = do
contentfile <- calcRepo $ gitAnnexLocation key
lockfile <- contentLockFile key
maybe noop setuplockfile lockfile
- bracketAnnex (liftIO $ lock contentfile lockfile) (unlock lockfile) (const a)
+ bracket
+ (lock contentfile lockfile)
+ (unlock lockfile)
+ (const $ a $ ContentLock key)
where
alreadylocked = error "content is locked"
setuplockfile lockfile = modifyContent lockfile $
@@ -167,17 +175,17 @@ lockContent key a = do
void $ liftIO $ tryIO $
nukeFile lockfile
#ifndef mingw32_HOST_OS
- lock contentfile Nothing = opencontentforlock contentfile >>= dolock
- lock _ (Just lockfile) = openforlock lockfile >>= dolock . Just
+ lock contentfile Nothing = liftIO $
+ opencontentforlock contentfile >>= dolock
+ lock _ (Just lockfile) = do
+ mode <- annexFileMode
+ liftIO $ createLockFile mode lockfile >>= dolock . Just
{- Since content files are stored with the write bit disabled, have
- to fiddle with permissions to open for an exclusive lock. -}
- opencontentforlock f = catchMaybeIO $ ifM (doesFileExist f)
- ( withModifiedFileMode f
+ opencontentforlock f = catchDefaultIO Nothing $
+ withModifiedFileMode f
(`unionFileModes` ownerWriteMode)
- (openforlock f)
- , openforlock f
- )
- openforlock f = openFd f ReadWrite Nothing defaultFileFlags
+ (openExistingLockFile f)
dolock Nothing = return Nothing
dolock (Just fd) = do
v <- tryIO $ setLock fd (WriteLock, AbsoluteSeek, 0, 0)
@@ -188,7 +196,8 @@ lockContent key a = do
maybe noop cleanuplockfile mlockfile
liftIO $ maybe noop closeFd mfd
#else
- lock _ (Just lockfile) = maybe alreadylocked (return . Just) =<< lockExclusive lockfile
+ lock _ (Just lockfile) = liftIO $
+ maybe alreadylocked (return . Just) =<< lockExclusive lockfile
lock _ Nothing = return Nothing
unlock mlockfile mlockhandle = do
liftIO $ maybe noop dropLock mlockhandle
@@ -209,7 +218,7 @@ getViaTmpUnchecked = finishGetViaTmp (return True)
getViaTmpChecked :: Annex Bool -> Key -> (FilePath -> Annex Bool) -> Annex Bool
getViaTmpChecked check key action =
- prepGetViaTmpChecked key $
+ prepGetViaTmpChecked key False $
finishGetViaTmp check key action
{- Prepares to download a key via a tmp file, and checks that there is
@@ -220,20 +229,20 @@ getViaTmpChecked check key action =
-
- Wen there's enough free space, runs the download action.
-}
-prepGetViaTmpChecked :: Key -> Annex Bool -> Annex Bool
-prepGetViaTmpChecked key getkey = do
+prepGetViaTmpChecked :: Key -> a -> Annex a -> Annex a
+prepGetViaTmpChecked key unabletoget getkey = do
tmp <- fromRepo $ gitAnnexTmpObjectLocation key
e <- liftIO $ doesFileExist tmp
- alreadythere <- if e
- then fromIntegral . fileSize <$> liftIO (getFileStatus tmp)
+ alreadythere <- liftIO $ if e
+ then getFileSize tmp
else return 0
ifM (checkDiskSpace Nothing key alreadythere)
( do
-- The tmp file may not have been left writable
when e $ thawContent tmp
getkey
- , return False
+ , return unabletoget
)
finishGetViaTmp :: Annex Bool -> Key -> (FilePath -> Annex Bool) -> Annex Bool
@@ -255,7 +264,10 @@ prepTmp key = do
createAnnexDirectory (parentDir tmp)
return tmp
-{- Creates a temp file, runs an action on it, and cleans up the temp file. -}
+{- Creates a temp file for a key, runs an action on it, and cleans up
+ - the temp file. If the action throws an exception, the temp file is
+ - left behind, which allows for resuming.
+ -}
withTmp :: Key -> (FilePath -> Annex a) -> Annex a
withTmp key action = do
tmp <- prepTmp key
@@ -365,7 +377,7 @@ sendAnnex key rollback sendobject = go =<< prepSendAnnex key
)
{- Returns a file that contains an object's content,
- - and an check to run after the transfer is complete.
+ - and a check to run after the transfer is complete.
-
- In direct mode, it's possible for the file to change as it's being sent,
- and the check detects this case and returns False.
@@ -407,7 +419,7 @@ withObjectLoc key indirect direct = ifM isDirect
cleanObjectLoc :: Key -> Annex () -> Annex ()
cleanObjectLoc key cleaner = do
file <- calcRepo $ gitAnnexLocation key
- void $ tryAnnexIO $ thawContentDir file
+ void $ tryIO $ thawContentDir file
cleaner
liftIO $ removeparents file (3 :: Int)
where
@@ -420,9 +432,10 @@ cleanObjectLoc key cleaner = do
{- Removes a key's file from .git/annex/objects/
-
- In direct mode, deletes the associated files or files, and replaces
- - them with symlinks. -}
-removeAnnex :: Key -> Annex ()
-removeAnnex key = withObjectLoc key remove removedirect
+ - them with symlinks.
+ -}
+removeAnnex :: ContentLock -> Annex ()
+removeAnnex (ContentLock key) = withObjectLoc key remove removedirect
where
remove file = cleanObjectLoc key $ do
secureErase file
@@ -433,7 +446,7 @@ removeAnnex key = withObjectLoc key remove removedirect
removeInodeCache key
mapM_ (resetfile cache) fs
resetfile cache f = whenM (sameInodeCache f cache) $ do
- l <- inRepo $ gitAnnexLink f key
+ l <- calcRepo $ gitAnnexLink f key
secureErase f
replaceFile f $ makeAnnexLink l
@@ -443,7 +456,7 @@ removeAnnex key = withObjectLoc key remove removedirect
secureErase :: FilePath -> Annex ()
secureErase file = maybe noop go =<< annexSecureEraseCommand <$> Annex.getGitConfig
where
- go basecmd = void $ liftIO $
+ go basecmd = void $ liftIO $
boolSystem "sh" [Param "-c", Param $ gencmd basecmd]
gencmd = massReplace [ ("%file", shellEscape file) ]
@@ -542,7 +555,7 @@ saveState nocommit = doSideAction $ do
downloadUrl :: [Url.URLString] -> FilePath -> Annex Bool
downloadUrl urls file = go =<< annexWebDownloadCommand <$> Annex.getGitConfig
where
- go Nothing = Url.withUrlOptions $ \uo ->
+ go Nothing = Url.withUrlOptions $ \uo ->
anyM (\u -> Url.download u file uo) urls
go (Just basecmd) = liftIO $ anyM (downloadcmd basecmd) urls
downloadcmd basecmd url =
@@ -567,7 +580,7 @@ preseedTmp key file = go =<< inAnnex key
( return True
, do
s <- calcRepo $ gitAnnexLocation key
- liftIO $ copyFileExternal s file
+ liftIO $ copyFileExternal CopyTimeStamps s file
)
{- Blocks writing to an annexed file, and modifies file permissions to
diff --git a/Annex/Content/Direct.hs b/Annex/Content/Direct.hs
index 7a4fba455..e6a9b5eda 100644
--- a/Annex/Content/Direct.hs
+++ b/Annex/Content/Direct.hs
@@ -1,10 +1,12 @@
{- git-annex file content managing for direct mode
-
- - Copyright 2012-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Annex.Content.Direct (
associatedFiles,
associatedFilesRelative,
@@ -27,6 +29,8 @@ module Annex.Content.Direct (
inodesChanged,
createInodeSentinalFile,
addContentWhenNotPresent,
+ withTSDelta,
+ getTSDelta,
) where
import Common.Annex
@@ -110,7 +114,7 @@ addAssociatedFile key file = do
normaliseAssociatedFile :: FilePath -> Annex FilePath
normaliseAssociatedFile file = do
top <- fromRepo Git.repoPath
- liftIO $ relPathDirToFile top <$> absPath file
+ liftIO $ relPathDirToFile top file
{- Checks if a file in the tree, associated with a key, has not been modified.
-
@@ -136,7 +140,7 @@ recordedInodeCache key = withInodeCacheFile key $ \f ->
-}
updateInodeCache :: Key -> FilePath -> Annex ()
updateInodeCache key file = maybe noop (addInodeCache key)
- =<< liftIO (genInodeCache file)
+ =<< withTSDelta (liftIO . genInodeCache file)
{- Adds another inode to the cache for a key. -}
addInodeCache :: Key -> InodeCache -> Annex ()
@@ -164,16 +168,16 @@ withInodeCacheFile key a = a =<< calcRepo (gitAnnexInodeCache key)
{- Checks if a InodeCache matches the current version of a file. -}
sameInodeCache :: FilePath -> [InodeCache] -> Annex Bool
sameInodeCache _ [] = return False
-sameInodeCache file old = go =<< liftIO (genInodeCache file)
+sameInodeCache file old = go =<< withTSDelta (liftIO . genInodeCache file)
where
go Nothing = return False
go (Just curr) = elemInodeCaches curr old
{- Checks if a FileStatus matches the recorded InodeCache of a file. -}
-sameFileStatus :: Key -> FileStatus -> Annex Bool
-sameFileStatus key status = do
+sameFileStatus :: Key -> FilePath -> FileStatus -> Annex Bool
+sameFileStatus key f status = do
old <- recordedInodeCache key
- let curr = toInodeCache status
+ curr <- withTSDelta $ \delta -> liftIO $ toInodeCache delta f status
case (old, curr) of
(_, Just c) -> elemInodeCaches c old
([], Nothing) -> return True
@@ -206,7 +210,7 @@ addContentWhenNotPresent key contentfile associatedfile = do
v <- isAnnexLink associatedfile
when (Just key == v) $
replaceFile associatedfile $
- liftIO . void . copyFileExternal contentfile
+ liftIO . void . copyFileExternal CopyAllMetaData contentfile
updateInodeCache key associatedfile
{- Some filesystems get new inodes each time they are mounted.
@@ -217,40 +221,43 @@ addContentWhenNotPresent key contentfile associatedfile = do
- inodes have changed.
-}
inodesChanged :: Annex Bool
-inodesChanged = maybe calc return =<< Annex.getState Annex.inodeschanged
- where
- calc = do
- scache <- liftIO . genInodeCache
- =<< fromRepo gitAnnexInodeSentinal
- scached <- readInodeSentinalFile
- let changed = case (scache, scached) of
- (Just c1, Just c2) -> not $ compareStrong c1 c2
- _ -> True
- Annex.changeState $ \s -> s { Annex.inodeschanged = Just changed }
- return changed
+inodesChanged = sentinalInodesChanged <$> sentinalStatus
-readInodeSentinalFile :: Annex (Maybe InodeCache)
-readInodeSentinalFile = do
- sentinalcachefile <- fromRepo gitAnnexInodeSentinalCache
- liftIO $ catchDefaultIO Nothing $
- readInodeCache <$> readFile sentinalcachefile
+withTSDelta :: (TSDelta -> Annex a) -> Annex a
+withTSDelta a = a =<< getTSDelta
-writeInodeSentinalFile :: Annex ()
-writeInodeSentinalFile = do
- sentinalfile <- fromRepo gitAnnexInodeSentinal
- createAnnexDirectory (parentDir sentinalfile)
- sentinalcachefile <- fromRepo gitAnnexInodeSentinalCache
- liftIO $ writeFile sentinalfile ""
- liftIO $ maybe noop (writeFile sentinalcachefile . showInodeCache)
- =<< genInodeCache sentinalfile
+getTSDelta :: Annex TSDelta
+#ifdef mingw32_HOST_OS
+getTSDelta = sentinalTSDelta <$> sentinalStatus
+#else
+getTSDelta = pure noTSDelta -- optimisation
+#endif
+
+sentinalStatus :: Annex SentinalStatus
+sentinalStatus = maybe check return =<< Annex.getState Annex.sentinalstatus
+ where
+ check = do
+ sc <- liftIO . checkSentinalFile =<< annexSentinalFile
+ Annex.changeState $ \s -> s { Annex.sentinalstatus = Just sc }
+ return sc
{- The sentinal file is only created when first initializing a repository.
- If there are any annexed objects in the repository already, creating
- the file would invalidate their inode caches. -}
createInodeSentinalFile :: Annex ()
-createInodeSentinalFile =
- unlessM (alreadyexists <||> hasobjects)
- writeInodeSentinalFile
+createInodeSentinalFile = unlessM (alreadyexists <||> hasobjects) $ do
+ s <- annexSentinalFile
+ createAnnexDirectory (parentDir (sentinalFile s))
+ liftIO $ writeSentinalFile s
where
- alreadyexists = isJust <$> readInodeSentinalFile
+ alreadyexists = liftIO. sentinalFileExists =<< annexSentinalFile
hasobjects = liftIO . doesDirectoryExist =<< fromRepo gitAnnexObjectDir
+
+annexSentinalFile :: Annex SentinalFile
+annexSentinalFile = do
+ sentinalfile <- fromRepo gitAnnexInodeSentinal
+ sentinalcachefile <- fromRepo gitAnnexInodeSentinalCache
+ return $ SentinalFile
+ { sentinalFile = sentinalfile
+ , sentinalCacheFile = sentinalcachefile
+ }
diff --git a/Annex/Difference.hs b/Annex/Difference.hs
new file mode 100644
index 000000000..66dc03a32
--- /dev/null
+++ b/Annex/Difference.hs
@@ -0,0 +1,58 @@
+{- git-annex repository differences
+ -
+ - Copyright 2015 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Annex.Difference (
+ module Types.Difference,
+ setDifferences,
+) where
+
+import Common.Annex
+import Types.Difference
+import Logs.Difference
+import Config
+import Annex.UUID
+import Logs.UUID
+import Annex.Version
+import qualified Annex
+
+import qualified Data.Map as M
+
+-- Differences are only allowed to be tweaked when initializing a
+-- repository for the first time, and then only if there is not another
+-- known uuid. If the repository was cloned from elsewhere, it inherits
+-- the existing settings.
+--
+-- Must be called before setVersion, so it can check if this is the first
+-- time the repository is being initialized.
+setDifferences :: Annex ()
+setDifferences = do
+ u <- getUUID
+ otherds <- allDifferences <$> recordedDifferences
+ ds <- mappend otherds . annexDifferences <$> Annex.getGitConfig
+ when (ds /= mempty) $ do
+ ds' <- ifM (isJust <$> getVersion)
+ ( do
+ oldds <- recordedDifferencesFor u
+ when (ds /= oldds) $
+ warning $ "Cannot change tunable parameters in already initialized repository."
+ return oldds
+ , if otherds == mempty
+ then ifM (not . null . filter (/= u) . M.keys <$> uuidMap)
+ ( do
+ warning "Cannot change tunable parameters in a clone of an existing repository."
+ return mempty
+ , return ds
+ )
+ else if otherds /= ds
+ then do
+ warning "The specified tunable parameters differ from values being used in other clones of this repository."
+ return otherds
+ else return ds
+ )
+ forM_ (listDifferences ds') $ \d ->
+ setConfig (ConfigKey $ differenceConfigKey d) (differenceConfigVal d)
+ recordDifferences ds' u
diff --git a/Annex/DirHashes.hs b/Annex/DirHashes.hs
new file mode 100644
index 000000000..03769350d
--- /dev/null
+++ b/Annex/DirHashes.hs
@@ -0,0 +1,86 @@
+{- git-annex file locations
+ -
+ - Copyright 2010-2015 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Annex.DirHashes (
+ Hasher,
+ HashLevels(..),
+ objectHashLevels,
+ branchHashLevels,
+ branchHashDir,
+ dirHashes,
+ hashDirMixed,
+ hashDirLower,
+) where
+
+import Data.Bits
+import Data.Word
+import Data.Hash.MD5
+import Data.Default
+
+import Common
+import Types.Key
+import Types.GitConfig
+import Types.Difference
+
+type Hasher = Key -> FilePath
+
+-- Number of hash levels to use. 2 is the default.
+newtype HashLevels = HashLevels Int
+
+instance Default HashLevels where
+ def = HashLevels 2
+
+objectHashLevels :: GitConfig -> HashLevels
+objectHashLevels = configHashLevels OneLevelObjectHash
+
+branchHashLevels :: GitConfig -> HashLevels
+branchHashLevels = configHashLevels OneLevelBranchHash
+
+configHashLevels :: Difference -> GitConfig -> HashLevels
+configHashLevels d config
+ | hasDifference d (annexDifferences config) = HashLevels 1
+ | otherwise = def
+
+branchHashDir :: GitConfig -> Key -> String
+branchHashDir config key = hashDirLower (branchHashLevels config) key
+
+{- Two different directory hashes may be used. The mixed case hash
+ - came first, and is fine, except for the problem of case-strict
+ - filesystems such as Linux VFAT (mounted with shortname=mixed),
+ - which do not allow using a directory "XX" when "xx" already exists.
+ - To support that, most repositories use the lower case hash for new data. -}
+dirHashes :: [HashLevels -> Hasher]
+dirHashes = [hashDirLower, hashDirMixed]
+
+hashDirs :: HashLevels -> Int -> String -> FilePath
+hashDirs (HashLevels 1) sz s = addTrailingPathSeparator $ take sz s
+hashDirs _ sz s = addTrailingPathSeparator $ take sz s </> drop sz s
+
+hashDirMixed :: HashLevels -> Hasher
+hashDirMixed n k = hashDirs n 2 $ take 4 $ display_32bits_as_dir =<< [a,b,c,d]
+ where
+ ABCD (a,b,c,d) = md5 $ md5FilePath $ key2file $ nonChunkKey k
+
+hashDirLower :: HashLevels -> Hasher
+hashDirLower n k = hashDirs n 3 $ take 6 $ md5s $ md5FilePath $ key2file $ nonChunkKey k
+
+{- modified version of display_32bits_as_hex from Data.Hash.MD5
+ - Copyright (C) 2001 Ian Lynagh
+ - License: Either BSD or GPL
+ -}
+display_32bits_as_dir :: Word32 -> String
+display_32bits_as_dir w = trim $ swap_pairs cs
+ where
+ -- Need 32 characters to use. To avoid inaverdently making
+ -- a real word, use letters that appear less frequently.
+ chars = ['0'..'9'] ++ "zqjxkmvwgpfZQJXKMVWGPF"
+ cs = map (\x -> getc $ (shiftR w (6*x)) .&. 31) [0..7]
+ getc n = chars !! fromIntegral n
+ swap_pairs (x1:x2:xs) = x2:x1:swap_pairs xs
+ swap_pairs _ = []
+ -- Last 2 will always be 00, so omit.
+ trim = take 6
diff --git a/Annex/Direct.hs b/Annex/Direct.hs
index 2f583fd94..1c733cb55 100644
--- a/Annex/Direct.hs
+++ b/Annex/Direct.hs
@@ -1,6 +1,6 @@
{- git-annex direct mode
-
- - Copyright 2012, 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -32,8 +32,10 @@ import Utility.InodeCache
import Utility.CopyFile
import Annex.Perms
import Annex.ReplaceFile
-import Annex.Exception
import Annex.VariantFile
+import Git.Index
+import Annex.Index
+import Annex.LockFile
{- Uses git ls-files to find files that need to be committed, and stages
- them into the index. Returns True if some changes were staged. -}
@@ -51,11 +53,12 @@ stageDirect = do
{- Determine what kind of modified or deleted file this is, as
- efficiently as we can, by getting any key that's associated
- with it in git, as well as its stat info. -}
- go (file, Just sha, Just mode) = do
+ go (file, Just sha, Just mode) = withTSDelta $ \delta -> do
shakey <- catKey sha mode
mstat <- liftIO $ catchMaybeIO $ getSymbolicLinkStatus file
+ mcache <- liftIO $ maybe (pure Nothing) (toInodeCache delta file) mstat
filekey <- isAnnexLink file
- case (shakey, filekey, mstat, toInodeCache =<< mstat) of
+ case (shakey, filekey, mstat, mcache) of
(_, Just key, _, _)
| shakey == filekey -> noop
{- A changed symlink. -}
@@ -83,7 +86,7 @@ stageDirect = do
deletegit file
stageannexlink file key = do
- l <- inRepo $ gitAnnexLink file key
+ l <- calcRepo $ gitAnnexLink file key
stageSymlink file =<< hashSymlink l
void $ addAssociatedFile key file
@@ -128,7 +131,7 @@ addDirect file cache = do
return False
got (Just (key, _)) = ifM (sameInodeCache file [cache])
( do
- l <- inRepo $ gitAnnexLink file key
+ l <- calcRepo $ gitAnnexLink file key
stageSymlink file =<< hashSymlink l
addInodeCache key cache
void $ addAssociatedFile key file
@@ -141,21 +144,101 @@ addDirect file cache = do
)
{- In direct mode, git merge would usually refuse to do anything, since it
- - sees present direct mode files as type changed files. To avoid this,
- - merge is run with the work tree set to a temp directory.
+ - sees present direct mode files as type changed files.
+ -
+ - So, to handle a merge, it's run with the work tree set to a temp
+ - directory, and the merge is staged into a copy of the index.
+ - Then the work tree is updated to reflect the merge, and
+ - finally, the merge is committed and the real index updated.
+ -
+ - A lock file is used to avoid races with any other caller of mergeDirect.
+ -
+ - To avoid other git processes from making change to the index while our
+ - merge is in progress, the index lock file is used as the temp index
+ - file. This is the same as what git does when updating the index
+ - normally.
-}
-mergeDirect :: FilePath -> Git.Ref -> Git.Repo -> IO Bool
-mergeDirect d branch g = do
- whenM (doesDirectoryExist d) $
- removeDirectoryRecursive d
- createDirectoryIfMissing True d
- let g' = g { location = Local { gitdir = Git.localGitDir g, worktree = Just d } }
- Git.Merge.mergeNonInteractive branch g'
+mergeDirect :: Maybe Git.Ref -> Maybe Git.Ref -> Git.Branch -> Annex Bool -> Git.Branch.CommitMode -> Annex Bool
+mergeDirect startbranch oldref branch resolvemerge commitmode = exclusively $ do
+ reali <- liftIO . absPath =<< fromRepo indexFile
+ tmpi <- liftIO . absPath =<< fromRepo indexFileLock
+ liftIO $ copyFile reali tmpi
+
+ d <- fromRepo gitAnnexMergeDir
+ liftIO $ do
+ whenM (doesDirectoryExist d) $
+ removeDirectoryRecursive d
+ createDirectoryIfMissing True d
+
+ withIndexFile tmpi $ do
+ merged <- stageMerge d branch commitmode
+ r <- if merged
+ then return True
+ else resolvemerge
+ mergeDirectCleanup d (fromMaybe Git.Sha.emptyTree oldref)
+ mergeDirectCommit merged startbranch branch commitmode
+
+ liftIO $ rename tmpi reali
+
+ return r
+ where
+ exclusively = withExclusiveLock gitAnnexMergeLock
+
+{- Stage a merge into the index, avoiding changing HEAD or the current
+ - branch. -}
+stageMerge :: FilePath -> Git.Branch -> Git.Branch.CommitMode -> Annex Bool
+stageMerge d branch commitmode = do
+ -- XXX A bug in git makes stageMerge unsafe to use if the git repo
+ -- is configured with core.symlinks=false
+ -- Using mergeNonInteractive is not ideal though, since it will
+ -- update the current branch immediately, before the work tree
+ -- has been updated, which would leave things in an inconsistent
+ -- state if mergeDirectCleanup is interrupted.
+ -- <http://marc.info/?l=git&m=140262402204212&w=2>
+ merger <- ifM (coreSymlinks <$> Annex.getGitConfig)
+ ( return Git.Merge.stageMerge
+ , return $ \ref -> Git.Merge.mergeNonInteractive ref commitmode
+ )
+ inRepo $ \g -> do
+ wd <- liftIO $ absPath d
+ gd <- liftIO $ absPath $ Git.localGitDir g
+ merger branch $
+ g { location = Local { gitdir = gd, worktree = Just (addTrailingPathSeparator wd) } }
-{- Cleans up after a direct mode merge. The merge must have been committed,
- - and the commit sha passed in, along with the old sha of the tree
- - before the merge. Uses git diff-tree to find files that changed between
- - the two shas, and applies those changes to the work tree.
+{- Commits after a direct mode merge is complete, and after the work
+ - tree has been updated by mergeDirectCleanup.
+ -}
+mergeDirectCommit :: Bool -> Maybe Git.Ref -> Git.Branch -> Git.Branch.CommitMode -> Annex ()
+mergeDirectCommit allowff old branch commitmode = do
+ void preCommitDirect
+ d <- fromRepo Git.localGitDir
+ let merge_head = d </> "MERGE_HEAD"
+ let merge_msg = d </> "MERGE_MSG"
+ let merge_mode = d </> "MERGE_MODE"
+ ifM (pure allowff <&&> canff)
+ ( inRepo $ Git.Branch.update Git.Ref.headRef branch -- fast forward
+ , do
+ msg <- liftIO $
+ catchDefaultIO ("merge " ++ fromRef branch) $
+ readFile merge_msg
+ void $ inRepo $ Git.Branch.commit commitmode False msg
+ Git.Ref.headRef [Git.Ref.headRef, branch]
+ )
+ liftIO $ mapM_ nukeFile [merge_head, merge_msg, merge_mode]
+ where
+ canff = maybe (return False) (\o -> inRepo $ Git.Branch.fastForwardable o branch) old
+
+mergeDirectCleanup :: FilePath -> Git.Ref -> Annex ()
+mergeDirectCleanup d oldref = do
+ updateWorkTree d oldref
+ liftIO $ removeDirectoryRecursive d
+
+{- Updates the direct mode work tree to reflect the changes staged in the
+ - index by a git command, that was run in a temporary work tree.
+ -
+ - Uses diff-index to compare the staged changes with provided ref
+ - which should be the tree before the merge, and applies those
+ - changes to the work tree.
-
- There are really only two types of changes: An old item can be deleted,
- or a new item added. Two passes are made, first deleting and then
@@ -164,9 +247,9 @@ mergeDirect d branch g = do
- order, but we cannot add the directory until the file with the
- same name is removed.)
-}
-mergeDirectCleanup :: FilePath -> Git.Ref -> Git.Ref -> Annex ()
-mergeDirectCleanup d oldsha newsha = do
- (items, cleanup) <- inRepo $ DiffTree.diffTreeRecursive oldsha newsha
+updateWorkTree :: FilePath -> Git.Ref -> Annex ()
+updateWorkTree d oldref = do
+ (items, cleanup) <- inRepo $ DiffTree.diffIndex oldref
makeabs <- flip fromTopFilePath <$> gitRepo
let fsitems = zip (map (makeabs . DiffTree.file) items) items
forM_ fsitems $
@@ -174,12 +257,11 @@ mergeDirectCleanup d oldsha newsha = do
forM_ fsitems $
go makeabs DiffTree.dstsha DiffTree.dstmode movein movein_raw
void $ liftIO cleanup
- liftIO $ removeDirectoryRecursive d
where
go makeabs getsha getmode a araw (f, item)
| getsha item == nullSha = noop
| otherwise = void $
- tryAnnex . maybe (araw item makeabs f) (\k -> void $ a item makeabs k f)
+ tryNonAsync . maybe (araw item makeabs f) (\k -> void $ a item makeabs k f)
=<< catKey (getsha item) (getmode item)
moveout _ _ = removeDirect
@@ -194,26 +276,26 @@ mergeDirectCleanup d oldsha newsha = do
- key, it's left alone.
-
- If the file is already present, and does not exist in the
- - oldsha branch, preserve this local file.
+ - oldref, preserve this local file.
-
- Otherwise, create the symlink and then if possible, replace it
- with the content. -}
movein item makeabs k f = unlessM (goodContent k f) $ do
- preserveUnannexed item makeabs f oldsha
- l <- inRepo $ gitAnnexLink f k
+ preserveUnannexed item makeabs f oldref
+ l <- calcRepo $ gitAnnexLink f k
replaceFile f $ makeAnnexLink l
toDirect k f
{- Any new, modified, or renamed files were written to the temp
- directory by the merge, and are moved to the real work tree. -}
movein_raw item makeabs f = do
- preserveUnannexed item makeabs f oldsha
+ preserveUnannexed item makeabs f oldref
liftIO $ do
createDirectoryIfMissing True $ parentDir f
void $ tryIO $ rename (d </> getTopFilePath (DiffTree.file item)) f
{- If the file that's being moved in is already present in the work
- - tree, but did not exist in the oldsha branch, preserve this
+ - tree, but did not exist in the oldref, preserve this
- local, unannexed file (or directory), as "variant-local".
-
- It's also possible that the file that's being moved in
@@ -221,15 +303,15 @@ mergeDirectCleanup d oldsha newsha = do
- file (not a directory), which should be preserved.
-}
preserveUnannexed :: DiffTree.DiffTreeItem -> (TopFilePath -> FilePath) -> FilePath -> Ref -> Annex ()
-preserveUnannexed item makeabs absf oldsha = do
+preserveUnannexed item makeabs absf oldref = do
whenM (liftIO (collidingitem absf) <&&> unannexed absf) $
liftIO $ findnewname absf 0
checkdirs (DiffTree.file item)
where
- checkdirs from = do
- let p = parentDir (getTopFilePath from)
- let d = asTopFilePath p
- unless (null p) $ do
+ checkdirs from = case upFrom (getTopFilePath from) of
+ Nothing -> noop
+ Just p -> do
+ let d = asTopFilePath p
let absd = makeabs d
whenM (liftIO (colliding_nondir absd) <&&> unannexed absd) $
liftIO $ findnewname absd 0
@@ -241,7 +323,7 @@ preserveUnannexed item makeabs absf oldsha = do
<$> catchMaybeIO (getSymbolicLinkStatus f)
unannexed f = (isNothing <$> isAnnexLink f)
- <&&> (isNothing <$> catFileDetails oldsha f)
+ <&&> (isNothing <$> catFileDetails oldref f)
findnewname :: FilePath -> Int -> IO ()
findnewname f n = do
@@ -275,16 +357,17 @@ toDirectGen k f = do
(dloc:_) -> return $ Just $ fromdirect dloc
)
where
- fromindirect loc = do
+ fromindirect loc = do
{- Move content from annex to direct file. -}
updateInodeCache k loc
void $ addAssociatedFile k f
modifyContent loc $ do
thawContent loc
- replaceFile f $ liftIO . moveFile loc
+ liftIO (replaceFileFrom loc f)
+ `catchIO` (\_ -> freezeContent loc)
fromdirect loc = do
replaceFile f $
- liftIO . void . copyFileExternal loc
+ liftIO . void . copyFileExternal CopyAllMetaData loc
updateInodeCache k f
{- Removes a direct mode file, while retaining its content in the annex
diff --git a/Annex/Direct/Fixup.hs b/Annex/Direct/Fixup.hs
index 13485242a..793f92eaf 100644
--- a/Annex/Direct/Fixup.hs
+++ b/Annex/Direct/Fixup.hs
@@ -1,6 +1,6 @@
{- git-annex direct mode guard fixup
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Annex/Drop.hs b/Annex/Drop.hs
index 71263dc61..6f3b95615 100644
--- a/Annex/Drop.hs
+++ b/Annex/Drop.hs
@@ -1,6 +1,6 @@
{- dropping of unwanted content
-
- - Copyright 2012-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -16,7 +16,6 @@ import qualified Remote
import qualified Command.Drop
import Command
import Annex.Wanted
-import Annex.Exception
import Config
import Annex.Content.Direct
@@ -120,5 +119,5 @@ handleDropsFrom locs rs reason fromhere key afile knownpresentremote runner = do
slocs = S.fromList locs
- safely a = either (const False) id <$> tryAnnex a
+ safely a = either (const False) id <$> tryNonAsync a
diff --git a/Annex/Environment.hs b/Annex/Environment.hs
index f22c5f2d4..13b52aa75 100644
--- a/Annex/Environment.hs
+++ b/Annex/Environment.hs
@@ -1,6 +1,6 @@
{- git-annex environment
-
- - Copyright 2012, 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012, 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -13,11 +13,7 @@ import Common.Annex
import Utility.UserInfo
import qualified Git.Config
import Config
-import Annex.Exception
-
-#ifndef mingw32_HOST_OS
import Utility.Env
-#endif
{- Checks that the system's environment allows git to function.
- Git requires a GECOS username, or suitable git configuration, or
@@ -36,30 +32,27 @@ checkEnvironment = do
liftIO checkEnvironmentIO
checkEnvironmentIO :: IO ()
-checkEnvironmentIO =
-#ifdef mingw32_HOST_OS
- noop
-#else
- whenM (null <$> myUserGecos) $ do
- username <- myUserName
- ensureEnv "GIT_AUTHOR_NAME" username
- ensureEnv "GIT_COMMITTER_NAME" username
+checkEnvironmentIO = whenM (isNothing <$> myUserGecos) $ do
+ username <- myUserName
+ ensureEnv "GIT_AUTHOR_NAME" username
+ ensureEnv "GIT_COMMITTER_NAME" username
where
#ifndef __ANDROID__
- -- existing environment is not overwritten
- ensureEnv var val = void $ setEnv var val False
+ -- existing environment is not overwritten
+ ensureEnv var val = setEnv var val False
#else
-- Environment setting is broken on Android, so this is dealt with
-- in runshell instead.
ensureEnv _ _ = noop
#endif
-#endif
{- Runs an action that commits to the repository, and if it fails,
- - sets user.email to a dummy value and tries the action again. -}
+ - sets user.email and user.name to a dummy value and tries the action again. -}
ensureCommit :: Annex a -> Annex a
-ensureCommit a = either retry return =<< tryAnnex a
+ensureCommit a = either retry return =<< tryNonAsync a
where
- retry _ = do
- setConfig (ConfigKey "user.email") =<< liftIO myUserName
+ retry _ = do
+ name <- liftIO myUserName
+ setConfig (ConfigKey "user.name") name
+ setConfig (ConfigKey "user.email") name
a
diff --git a/Annex/Exception.hs b/Annex/Exception.hs
deleted file mode 100644
index 11613d51b..000000000
--- a/Annex/Exception.hs
+++ /dev/null
@@ -1,50 +0,0 @@
-{- exception handling in the git-annex monad
- -
- - Note that when an Annex action fails and the exception is handled
- - by these functions, any changes the action has made to the
- - AnnexState are retained. This works because the Annex monad
- - internally stores the AnnexState in a MVar.
- -
- - Copyright 2011-2013 Joey Hess <joey@kitenet.net>
- -
- - Licensed under the GNU GPL version 3 or higher.
- -}
-
-{-# LANGUAGE PackageImports #-}
-
-module Annex.Exception (
- bracketIO,
- bracketAnnex,
- tryAnnex,
- tryAnnexIO,
- throwAnnex,
- catchAnnex,
-) where
-
-import qualified "MonadCatchIO-transformers" Control.Monad.CatchIO as M
-import Control.Exception
-
-import Common.Annex
-
-{- Runs an Annex action, with setup and cleanup both in the IO monad. -}
-bracketIO :: IO v -> (v -> IO b) -> (v -> Annex a) -> Annex a
-bracketIO setup cleanup = M.bracket (liftIO setup) (liftIO . cleanup)
-
-bracketAnnex :: Annex v -> (v -> Annex b) -> (v -> Annex a) -> Annex a
-bracketAnnex = M.bracket
-
-{- try in the Annex monad -}
-tryAnnex :: Annex a -> Annex (Either SomeException a)
-tryAnnex = M.try
-
-{- try in the Annex monad, but only catching IO exceptions -}
-tryAnnexIO :: Annex a -> Annex (Either IOException a)
-tryAnnexIO = M.try
-
-{- throw in the Annex monad -}
-throwAnnex :: Exception e => e -> Annex a
-throwAnnex = M.throw
-
-{- catch in the Annex monad -}
-catchAnnex :: Exception e => Annex a -> (e -> Annex a) -> Annex a
-catchAnnex = M.catch
diff --git a/Annex/FileMatcher.hs b/Annex/FileMatcher.hs
index ae1bbb77b..0de4d83d1 100644
--- a/Annex/FileMatcher.hs
+++ b/Annex/FileMatcher.hs
@@ -1,6 +1,6 @@
{- git-annex file matching
-
- - Copyright 2012-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -13,7 +13,6 @@ import Common.Annex
import Limit
import Utility.Matcher
import Types.Group
-import Types.Limit
import Logs.Group
import Logs.Remote
import Annex.UUID
@@ -25,18 +24,16 @@ import Types.Remote (RemoteConfig)
import Data.Either
import qualified Data.Set as S
-type FileMatcher = Matcher MatchFiles
-
-checkFileMatcher :: FileMatcher -> FilePath -> Annex Bool
+checkFileMatcher :: (FileMatcher Annex) -> FilePath -> Annex Bool
checkFileMatcher matcher file = checkMatcher matcher Nothing (Just file) S.empty True
-checkMatcher :: FileMatcher -> Maybe Key -> AssociatedFile -> AssumeNotPresent -> Bool -> Annex Bool
-checkMatcher matcher mkey afile notpresent def
- | isEmpty matcher = return def
+checkMatcher :: (FileMatcher Annex) -> Maybe Key -> AssociatedFile -> AssumeNotPresent -> Bool -> Annex Bool
+checkMatcher matcher mkey afile notpresent d
+ | isEmpty matcher = return d
| otherwise = case (mkey, afile) of
(_, Just file) -> go =<< fileMatchInfo file
(Just key, _) -> go (MatchingKey key)
- _ -> return def
+ _ -> return d
where
go mi = matchMrun matcher $ \a -> a notpresent mi
@@ -45,18 +42,18 @@ fileMatchInfo file = do
matchfile <- getTopFilePath <$> inRepo (toTopFilePath file)
return $ MatchingFile FileInfo
{ matchFile = matchfile
- , relFile = file
+ , currFile = file
}
-matchAll :: FileMatcher
+matchAll :: FileMatcher Annex
matchAll = generate []
-parsedToMatcher :: [Either String (Token MatchFiles)] -> Either String FileMatcher
+parsedToMatcher :: [Either String (Token (MatchFiles Annex))] -> Either String (FileMatcher Annex)
parsedToMatcher parsed = case partitionEithers parsed of
([], vs) -> Right $ generate vs
(es, _) -> Left $ unwords $ map ("Parse failure: " ++) es
-exprParser :: FileMatcher -> FileMatcher -> GroupMap -> M.Map UUID RemoteConfig -> Maybe UUID -> String -> [Either String (Token MatchFiles)]
+exprParser :: FileMatcher Annex -> FileMatcher Annex -> GroupMap -> M.Map UUID RemoteConfig -> Maybe UUID -> String -> [Either String (Token (MatchFiles Annex))]
exprParser matchstandard matchgroupwanted groupmap configmap mu expr =
map parse $ tokenizeMatcher expr
where
@@ -69,7 +66,7 @@ exprParser matchstandard matchgroupwanted groupmap configmap mu expr =
preferreddir = fromMaybe "public" $
M.lookup "preferreddir" =<< (`M.lookup` configmap) =<< mu
-parseToken :: FileMatcher -> FileMatcher -> MkLimit -> MkLimit -> GroupMap -> String -> Either String (Token MatchFiles)
+parseToken :: FileMatcher Annex -> FileMatcher Annex -> MkLimit Annex -> MkLimit Annex -> GroupMap -> String -> Either String (Token (MatchFiles Annex))
parseToken matchstandard matchgroupwanted checkpresent checkpreferreddir groupmap t
| t `elem` tokens = Right $ token t
| t == "standard" = call matchstandard
@@ -106,10 +103,10 @@ tokenizeMatcher = filter (not . null ) . concatMap splitparens . words
{- Generates a matcher for files large enough (or meeting other criteria)
- to be added to the annex, rather than directly to git. -}
-largeFilesMatcher :: Annex FileMatcher
+largeFilesMatcher :: Annex (FileMatcher Annex)
largeFilesMatcher = go =<< annexLargeFiles <$> Annex.getGitConfig
where
- go Nothing = return matchAll
+ go Nothing = return matchAll
go (Just expr) = do
gm <- groupMap
rc <- readRemoteLog
diff --git a/Annex/Hook.hs b/Annex/Hook.hs
index 4848e2d61..253c77a60 100644
--- a/Annex/Hook.hs
+++ b/Annex/Hook.hs
@@ -4,7 +4,7 @@
- not change, otherwise removing old hooks using an old version of
- the script would fail.
-
- - Copyright 2013-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2013-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -16,7 +16,6 @@ import qualified Git.Hook as Git
import Config
import qualified Annex
import Utility.Shell
-import Utility.FileMode
import qualified Data.Map as M
@@ -53,19 +52,16 @@ hookWarning h msg = do
- the existing hooks are cached. -}
runAnnexHook :: Git.Hook -> Annex ()
runAnnexHook hook = do
- cmd <- fromRepo $ Git.hookFile hook
m <- Annex.getState Annex.existinghooks
case M.lookup hook m of
- Just True -> run cmd
+ Just True -> run
Just False -> noop
Nothing -> do
- exists <- hookexists cmd
+ exists <- inRepo $ Git.hookExists hook
Annex.changeState $ \s -> s
{ Annex.existinghooks = M.insert hook exists m }
- when exists $
- run cmd
+ when exists run
where
- hookexists f = liftIO $ catchBoolIO $
- isExecutable . fileMode <$> getFileStatus f
- run cmd = unlessM (liftIO $ boolSystem cmd []) $
- warning $ cmd ++ " failed"
+ run = unlessM (inRepo $ Git.runHook hook) $ do
+ h <- fromRepo $ Git.hookFile hook
+ warning $ h ++ " failed"
diff --git a/Annex/Index.hs b/Annex/Index.hs
index a1b2442fc..60340c50b 100644
--- a/Annex/Index.hs
+++ b/Annex/Index.hs
@@ -1,6 +1,6 @@
{- Using other git index files
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -9,6 +9,7 @@
module Annex.Index (
withIndexFile,
+ addGitEnv,
) where
import qualified Control.Exception as E
@@ -17,30 +18,35 @@ import Common.Annex
import Git.Types
import qualified Annex
import Utility.Env
-import Annex.Exception
{- Runs an action using a different git index file. -}
withIndexFile :: FilePath -> Annex a -> Annex a
withIndexFile f a = do
g <- gitRepo
-#ifdef __ANDROID__
- {- This should not be necessary on Android, but there is some
- - weird getEnvironment breakage. See
- - https://github.com/neurocyte/ghc-android/issues/7
- - Use getEnv to get some key environment variables that
- - git expects to have. -}
- let keyenv = words "USER PATH GIT_EXEC_PATH HOSTNAME HOME"
- let getEnvPair k = maybe Nothing (\v -> Just (k, v)) <$> getEnv k
- e <- liftIO $ catMaybes <$> forM keyenv getEnvPair
- let e' = ("GIT_INDEX_FILE", f):e
-#else
- e <- liftIO getEnvironment
- let e' = addEntry "GIT_INDEX_FILE" f e
-#endif
- let g' = g { gitEnv = Just e' }
+ g' <- liftIO $ addGitEnv g "GIT_INDEX_FILE" f
- r <- tryAnnex $ do
+ r <- tryNonAsync $ do
Annex.changeState $ \s -> s { Annex.repo = g' }
a
Annex.changeState $ \s -> s { Annex.repo = (Annex.repo s) { gitEnv = gitEnv g} }
either E.throw return r
+
+addGitEnv :: Repo -> String -> String -> IO Repo
+addGitEnv g var val = do
+ e <- maybe copyenv return (gitEnv g)
+ let e' = addEntry var val e
+ return $ g { gitEnv = Just e' }
+ where
+ copyenv = do
+#ifdef __ANDROID__
+ {- This should not be necessary on Android, but there is some
+ - weird getEnvironment breakage. See
+ - https://github.com/neurocyte/ghc-android/issues/7
+ - Use getEnv to get some key environment variables that
+ - git expects to have. -}
+ let keyenv = words "USER PATH GIT_EXEC_PATH HOSTNAME HOME"
+ let getEnvPair k = maybe Nothing (\v -> Just (k, v)) <$> getEnv k
+ liftIO $ catMaybes <$> forM keyenv getEnvPair
+#else
+ liftIO getEnvironment
+#endif
diff --git a/Annex/Init.hs b/Annex/Init.hs
index e095aef61..3f27a1172 100644
--- a/Annex/Init.hs
+++ b/Annex/Init.hs
@@ -1,6 +1,6 @@
{- git-annex repository initialization
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -11,44 +11,41 @@ module Annex.Init (
ensureInitialized,
isInitialized,
initialize,
+ initialize',
uninitialize,
probeCrippledFileSystem,
) where
import Common.Annex
-import Utility.Network
import qualified Annex
import qualified Git
import qualified Git.LsFiles
import qualified Git.Config
-import qualified Git.Construct
-import qualified Git.Types as Git
+import qualified Git.Objects
import qualified Annex.Branch
import Logs.UUID
+import Logs.Trust.Basic
+import Types.TrustLevel
import Annex.Version
+import Annex.Difference
import Annex.UUID
import Config
import Annex.Direct
import Annex.Content.Direct
import Annex.Environment
-import Annex.Perms
import Backend
+import Annex.Hook
+import Upgrade
#ifndef mingw32_HOST_OS
import Utility.UserInfo
import Utility.FileMode
+import Annex.Perms
#endif
-import Annex.Hook
-import Git.Hook (hookFile)
-import Upgrade
-import Annex.Content
-import Logs.Location
-
-import System.Log.Logger
genDescription :: Maybe String -> Annex String
genDescription (Just d) = return d
genDescription Nothing = do
- reldir <- liftIO . relHome =<< fromRepo Git.repoPath
+ reldir <- liftIO . relHome =<< liftIO . absPath =<< fromRepo Git.repoPath
hostname <- fromMaybe "" <$> liftIO getHostname
#ifndef mingw32_HOST_OS
let at = if null hostname then "" else "@"
@@ -61,10 +58,23 @@ genDescription Nothing = do
initialize :: Maybe String -> Annex ()
initialize mdescription = do
prepUUID
+ initialize'
+
+ u <- getUUID
+ {- This will make the first commit to git, so ensure git is set up
+ - properly to allow commits when running it. -}
+ ensureCommit $ do
+ Annex.Branch.create
+ describeUUID u =<< genDescription mdescription
+
+-- Everything except for uuid setup.
+initialize' :: Annex ()
+initialize' = do
checkFifoSupport
checkCrippledFileSystem
unlessM isBare $
hookWrite preCommitHook
+ setDifferences
setVersion supportedVersion
ifM (crippledFileSystem <&&> not <$> isBare)
( do
@@ -76,12 +86,7 @@ initialize mdescription = do
switchHEADBack
)
createInodeSentinalFile
- u <- getUUID
- {- This will make the first commit to git, so ensure git is set up
- - properly to allow commits when running it. -}
- ensureCommit $ do
- Annex.Branch.create
- describeUUID u =<< genDescription mdescription
+ checkSharedClone
uninitialize :: Annex ()
uninitialize = do
@@ -97,9 +102,7 @@ uninitialize = do
- Checks repository version and handles upgrades too.
-}
ensureInitialized :: Annex ()
-ensureInitialized = do
- getVersion >>= maybe needsinit checkUpgrade
- fixBadBare
+ensureInitialized = getVersion >>= maybe needsinit checkUpgrade
where
needsinit = ifM Annex.Branch.hasSibling
( initialize Nothing
@@ -184,56 +187,9 @@ enableDirectMode = unlessM isDirect $ do
maybe noop (`toDirect` f) =<< isAnnexLink f
void $ liftIO clean
-{- Work around for git-annex version 5.20131118 - 5.20131127, which
- - had a bug that unset core.bare when initializing a bare repository.
- -
- - This resulted in objects sent to the repository being stored in
- - repo/.git/annex/objects, so move them to repo/annex/objects.
- -
- - This check slows down every git-annex run somewhat (by one file stat),
- - so should be removed after a suitable period of time has passed.
- - Since the bare repository may be on an offline USB drive, best to
- - keep it for a while. However, git-annex was only buggy for a few
- - weeks, so not too long.
- -}
-fixBadBare :: Annex ()
-fixBadBare = whenM checkBadBare $ do
- ks <- getKeysPresent InAnnex
- liftIO $ debugM "Init" $ unwords
- [ "Detected bad bare repository with"
- , show (length ks)
- , "objects; fixing"
- ]
- g <- Annex.gitRepo
- gc <- Annex.getGitConfig
- d <- Git.repoPath <$> Annex.gitRepo
- void $ liftIO $ boolSystem "git"
- [ Param $ "--git-dir=" ++ d
- , Param "config"
- , Param Git.Config.coreBare
- , Param $ Git.Config.boolConfig True
- ]
- g' <- liftIO $ Git.Construct.fromPath d
- s' <- liftIO $ Annex.new $ g' { Git.location = Git.Local { Git.gitdir = d, Git.worktree = Nothing } }
- Annex.changeState $ \s -> s
- { Annex.repo = Annex.repo s'
- , Annex.gitconfig = Annex.gitconfig s'
- }
- forM_ ks $ \k -> do
- oldloc <- liftIO $ gitAnnexLocation k g gc
- thawContentDir oldloc
- moveAnnex k oldloc
- logStatus k InfoPresent
- let dotgit = d </> ".git"
- liftIO $ removeDirectoryRecursive dotgit
- `catchIO` const (renameDirectory dotgit (d </> "removeme"))
-
-{- A repostory with the problem won't know it's a bare repository, but will
- - have no pre-commit hook (which is not set up in a bare repository),
- - and will not have a HEAD file in its .git directory. -}
-checkBadBare :: Annex Bool
-checkBadBare = allM (not <$>)
- [isBare, hasPreCommitHook, hasDotGitHEAD]
- where
- hasPreCommitHook = inRepo $ doesFileExist . hookFile preCommitHook
- hasDotGitHEAD = inRepo $ \r -> doesFileExist $ Git.localGitDir r </> "HEAD"
+checkSharedClone :: Annex ()
+checkSharedClone = whenM (inRepo Git.Objects.isSharedClone) $ do
+ showSideAction "Repository was cloned with --shared; setting annex.hardlink=true and making repository untrusted."
+ u <- getUUID
+ trustSet u UnTrusted
+ setConfig (annexConfig "hardlink") (Git.Config.boolConfig True)
diff --git a/Annex/Journal.hs b/Annex/Journal.hs
index 395e81d29..148cefbbc 100644
--- a/Annex/Journal.hs
+++ b/Annex/Journal.hs
@@ -4,7 +4,7 @@
- git-annex branch. Among other things, it ensures that if git-annex is
- interrupted, its recorded data is not lost.
-
- - Copyright 2011-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -13,16 +13,10 @@
module Annex.Journal where
-import System.IO.Binary
-
import Common.Annex
-import Annex.Exception
import qualified Git
import Annex.Perms
-
-#ifdef mingw32_HOST_OS
-import Utility.WinLock
-#endif
+import Annex.LockFile
{- Records content for a file in the branch to the journal.
-
@@ -42,7 +36,12 @@ setJournalFile _jl file content = do
jfile <- fromRepo $ journalFile file
let tmpfile = tmp </> takeFileName jfile
liftIO $ do
- writeBinaryFile tmpfile content
+ withFile tmpfile WriteMode $ \h -> do
+ fileEncoding h
+#ifdef mingw32_HOST_OS
+ hSetNewlineMode h noNewlineTranslation
+#endif
+ hPutStr h content
moveFile tmpfile jfile
{- Gets any journalled content for a file in the branch. -}
@@ -54,7 +53,7 @@ getJournalFile _jl = getJournalFileStale
- changes. -}
getJournalFileStale :: FilePath -> Annex (Maybe String)
getJournalFileStale file = inRepo $ \g -> catchMaybeIO $
- readFileStrict $ journalFile file g
+ readFileStrictAnyEncoding $ journalFile file g
{- List of files that have updated content in the journal. -}
getJournalledFiles :: JournalLocked -> Annex [FilePath]
@@ -77,9 +76,18 @@ getJournalFilesStale = do
getDirectoryContents $ gitAnnexJournalDir g
return $ filter (`notElem` [".", ".."]) fs
+withJournalHandle :: (DirectoryHandle -> IO a) -> Annex a
+withJournalHandle a = do
+ d <- fromRepo gitAnnexJournalDir
+ bracketIO (openDirectory d) closeDirectory (liftIO . a)
+
{- Checks if there are changes in the journal. -}
journalDirty :: Annex Bool
-journalDirty = not . null <$> getJournalFilesStale
+journalDirty = do
+ d <- fromRepo gitAnnexJournalDir
+ liftIO $
+ (not <$> isDirectoryEmpty d)
+ `catchIO` (const $ doesDirectoryExist d)
{- Produces a filename to use in the journal for a file on the branch.
-
@@ -109,19 +117,4 @@ data JournalLocked = ProduceJournalLocked
{- Runs an action that modifies the journal, using locking to avoid
- contention with other git-annex processes. -}
lockJournal :: (JournalLocked -> Annex a) -> Annex a
-lockJournal a = do
- lockfile <- fromRepo gitAnnexJournalLock
- createAnnexDirectory $ takeDirectory lockfile
- mode <- annexFileMode
- bracketIO (lock lockfile mode) unlock (const $ a ProduceJournalLocked)
- where
-#ifndef mingw32_HOST_OS
- lock lockfile mode = do
- l <- noUmask mode $ createFile lockfile mode
- waitToSetLock l (WriteLock, AbsoluteSeek, 0, 0)
- return l
- unlock = closeFd
-#else
- lock lockfile _mode = waitToLock $ lockExclusive lockfile
- unlock = dropLock
-#endif
+lockJournal a = withExclusiveLock gitAnnexJournalLock $ a ProduceJournalLocked
diff --git a/Annex/Link.hs b/Annex/Link.hs
index 26991e911..98b200f0a 100644
--- a/Annex/Link.hs
+++ b/Annex/Link.hs
@@ -5,7 +5,7 @@
- On other filesystems, git instead stores the symlink target in a regular
- file.
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -35,13 +35,17 @@ isAnnexLink file = maybe Nothing (fileKey . takeFileName) <$> getAnnexLinkTarget
- content.
-}
getAnnexLinkTarget :: FilePath -> Annex (Maybe LinkTarget)
-getAnnexLinkTarget file = ifM (coreSymlinks <$> Annex.getGitConfig)
- ( check readSymbolicLink $
+getAnnexLinkTarget f = getAnnexLinkTarget' f
+ =<< (coreSymlinks <$> Annex.getGitConfig)
+
+{- Pass False to force looking inside file. -}
+getAnnexLinkTarget' :: FilePath -> Bool -> Annex (Maybe LinkTarget)
+getAnnexLinkTarget' file coresymlinks = if coresymlinks
+ then check readSymbolicLink $
return Nothing
- , check readSymbolicLink $
+ else check readSymbolicLink $
check probefilecontent $
return Nothing
- )
where
check getlinktarget fallback = do
v <- liftIO $ catchMaybeIO $ getlinktarget file
@@ -68,6 +72,9 @@ getAnnexLinkTarget file = ifM (coreSymlinks <$> Annex.getGitConfig)
then ""
else s
+makeAnnexLink :: LinkTarget -> FilePath -> Annex ()
+makeAnnexLink = makeGitLink
+
{- Creates a link on disk.
-
- On a filesystem that does not support symlinks, writes the link target
@@ -75,8 +82,8 @@ getAnnexLinkTarget file = ifM (coreSymlinks <$> Annex.getGitConfig)
- it's staged as such, so use addAnnexLink when adding a new file or
- modified link to git.
-}
-makeAnnexLink :: LinkTarget -> FilePath -> Annex ()
-makeAnnexLink linktarget file = ifM (coreSymlinks <$> Annex.getGitConfig)
+makeGitLink :: LinkTarget -> FilePath -> Annex ()
+makeGitLink linktarget file = ifM (coreSymlinks <$> Annex.getGitConfig)
( liftIO $ do
void $ tryIO $ removeFile file
createSymbolicLink linktarget file
diff --git a/Annex/LockFile.hs b/Annex/LockFile.hs
new file mode 100644
index 000000000..18e876c75
--- /dev/null
+++ b/Annex/LockFile.hs
@@ -0,0 +1,72 @@
+{- git-annex lock files.
+ -
+ - Copyright 2012, 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# LANGUAGE CPP #-}
+
+module Annex.LockFile (
+ lockFileShared,
+ unlockFile,
+ getLockPool,
+ withExclusiveLock,
+) where
+
+import Common.Annex
+import Annex
+import Types.LockPool
+import qualified Git
+import Annex.Perms
+import Utility.LockFile
+
+import qualified Data.Map as M
+
+{- Create a specified lock file, and takes a shared lock, which is retained
+ - in the pool. -}
+lockFileShared :: FilePath -> Annex ()
+lockFileShared file = go =<< fromLockPool file
+ where
+ go (Just _) = noop -- already locked
+ go Nothing = do
+#ifndef mingw32_HOST_OS
+ mode <- annexFileMode
+ lockhandle <- liftIO $ noUmask mode $ lockShared (Just mode) file
+#else
+ lockhandle <- liftIO $ waitToLock $ lockShared file
+#endif
+ changeLockPool $ M.insert file lockhandle
+
+unlockFile :: FilePath -> Annex ()
+unlockFile file = maybe noop go =<< fromLockPool file
+ where
+ go lockhandle = do
+ liftIO $ dropLock lockhandle
+ changeLockPool $ M.delete file
+
+getLockPool :: Annex LockPool
+getLockPool = getState lockpool
+
+fromLockPool :: FilePath -> Annex (Maybe LockHandle)
+fromLockPool file = M.lookup file <$> getLockPool
+
+changeLockPool :: (LockPool -> LockPool) -> Annex ()
+changeLockPool a = do
+ m <- getLockPool
+ changeState $ \s -> s { lockpool = a m }
+
+{- Runs an action with an exclusive lock held. If the lock is already
+ - held, blocks until it becomes free. -}
+withExclusiveLock :: (Git.Repo -> FilePath) -> Annex a -> Annex a
+withExclusiveLock getlockfile a = do
+ lockfile <- fromRepo getlockfile
+ createAnnexDirectory $ takeDirectory lockfile
+ mode <- annexFileMode
+ bracketIO (lock mode lockfile) dropLock (const a)
+ where
+#ifndef mingw32_HOST_OS
+ lock mode = noUmask mode . lockExclusive (Just mode)
+#else
+ lock _mode = waitToLock . lockExclusive
+#endif
diff --git a/Annex/LockPool.hs b/Annex/LockPool.hs
deleted file mode 100644
index 5fc167d28..000000000
--- a/Annex/LockPool.hs
+++ /dev/null
@@ -1,60 +0,0 @@
-{- git-annex lock pool
- -
- - Copyright 2012, 2014 Joey Hess <joey@kitenet.net>
- -
- - Licensed under the GNU GPL version 3 or higher.
- -}
-
-{-# LANGUAGE CPP #-}
-
-module Annex.LockPool where
-
-import Common.Annex
-import Annex
-import Types.LockPool
-
-import qualified Data.Map as M
-
-#ifndef mingw32_HOST_OS
-import Annex.Perms
-#else
-import Utility.WinLock
-#endif
-
-{- Create a specified lock file, and takes a shared lock. -}
-lockFile :: FilePath -> Annex ()
-lockFile file = go =<< fromPool file
- where
- go (Just _) = noop -- already locked
- go Nothing = do
-#ifndef mingw32_HOST_OS
- mode <- annexFileMode
- lockhandle <- liftIO $ noUmask mode $
- openFd file ReadOnly (Just mode) defaultFileFlags
- liftIO $ waitToSetLock lockhandle (ReadLock, AbsoluteSeek, 0, 0)
-#else
- lockhandle <- liftIO $ waitToLock $ lockShared file
-#endif
- changePool $ M.insert file lockhandle
-
-unlockFile :: FilePath -> Annex ()
-unlockFile file = maybe noop go =<< fromPool file
- where
- go lockhandle = do
-#ifndef mingw32_HOST_OS
- liftIO $ closeFd lockhandle
-#else
- liftIO $ dropLock lockhandle
-#endif
- changePool $ M.delete file
-
-getPool :: Annex LockPool
-getPool = getState lockpool
-
-fromPool :: FilePath -> Annex (Maybe LockHandle)
-fromPool file = M.lookup file <$> getPool
-
-changePool :: (LockPool -> LockPool) -> Annex ()
-changePool a = do
- m <- getPool
- changeState $ \s -> s { lockpool = a m }
diff --git a/Annex/MakeRepo.hs b/Annex/MakeRepo.hs
new file mode 100644
index 000000000..73443c43d
--- /dev/null
+++ b/Annex/MakeRepo.hs
@@ -0,0 +1,88 @@
+{- making local repositories (used by webapp mostly)
+ -
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Annex.MakeRepo where
+
+import Assistant.WebApp.Common
+import Annex.Init
+import qualified Git.Construct
+import qualified Git.Config
+import qualified Git.Command
+import qualified Git.Branch
+import qualified Annex
+import Annex.UUID
+import Annex.Direct
+import Types.StandardGroups
+import Logs.PreferredContent
+import qualified Annex.Branch
+
+{- Makes a new git repository. Or, if a git repository already
+ - exists, returns False. -}
+makeRepo :: FilePath -> Bool -> IO Bool
+makeRepo path bare = ifM (probeRepoExists path)
+ ( return False
+ , do
+ (transcript, ok) <-
+ processTranscript "git" (toCommand params) Nothing
+ unless ok $
+ error $ "git init failed!\nOutput:\n" ++ transcript
+ return True
+ )
+ where
+ baseparams = [Param "init", Param "--quiet"]
+ params
+ | bare = baseparams ++ [Param "--bare", File path]
+ | otherwise = baseparams ++ [File path]
+
+{- Runs an action in the git repository in the specified directory. -}
+inDir :: FilePath -> Annex a -> IO a
+inDir dir a = do
+ state <- Annex.new =<< Git.Config.read =<< Git.Construct.fromPath dir
+ Annex.eval state a
+
+{- Creates a new repository, and returns its UUID. -}
+initRepo :: Bool -> Bool -> FilePath -> Maybe String -> Maybe StandardGroup -> IO UUID
+initRepo True primary_assistant_repo dir desc mgroup = inDir dir $ do
+ initRepo' desc mgroup
+ {- Initialize the master branch, so things that expect
+ - to have it will work, before any files are added. -}
+ unlessM (Git.Config.isBare <$> gitRepo) $
+ void $ inRepo $ Git.Branch.commitCommand Git.Branch.AutomaticCommit
+ [ Param "--quiet"
+ , Param "--allow-empty"
+ , Param "-m"
+ , Param "created repository"
+ ]
+ {- Repositories directly managed by the assistant use direct mode.
+ -
+ - Automatic gc is disabled, as it can be slow. Insted, gc is done
+ - once a day.
+ -}
+ when primary_assistant_repo $ do
+ setDirect True
+ inRepo $ Git.Command.run
+ [Param "config", Param "gc.auto", Param "0"]
+ getUUID
+{- Repo already exists, could be a non-git-annex repo though so
+ - still initialize it. -}
+initRepo False _ dir desc mgroup = inDir dir $ do
+ initRepo' desc mgroup
+ getUUID
+
+initRepo' :: Maybe String -> Maybe StandardGroup -> Annex ()
+initRepo' desc mgroup = unlessM isInitialized $ do
+ initialize desc
+ u <- getUUID
+ maybe noop (defaultStandardGroup u) mgroup
+ {- Ensure branch gets committed right away so it is
+ - available for merging immediately. -}
+ Annex.Branch.commit "update"
+
+{- Checks if a git repo exists at a location. -}
+probeRepoExists :: FilePath -> IO Bool
+probeRepoExists dir = isJust <$>
+ catchDefaultIO Nothing (Git.Construct.checkForRepo dir)
diff --git a/Annex/MetaData.hs b/Annex/MetaData.hs
index f382f0ab1..3b776a6d7 100644
--- a/Annex/MetaData.hs
+++ b/Annex/MetaData.hs
@@ -1,12 +1,13 @@
{- git-annex metadata
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Annex.MetaData (
genMetaData,
+ dateMetaData,
module X
) where
@@ -37,20 +38,18 @@ genMetaData :: Key -> FilePath -> FileStatus -> Annex ()
genMetaData key file status = do
maybe noop (flip copyMetaData key) =<< catKeyFileHEAD file
whenM (annexGenMetaData <$> Annex.getGitConfig) $ do
- metadata <- getCurrentMetaData key
- let metadata' = genMetaData' status metadata
- unless (metadata' == emptyMetaData) $
- addMetaData key metadata'
+ curr <- getCurrentMetaData key
+ addMetaData key (dateMetaData mtime curr)
+ where
+ mtime = posixSecondsToUTCTime $ realToFrac $ modificationTime status
-{- Generates metadata from the FileStatus.
+{- Generates metadata for a file's date stamp.
- Does not overwrite any existing metadata values. -}
-genMetaData' :: FileStatus -> MetaData -> MetaData
-genMetaData' status old = MetaData $ M.fromList $ filter isnew
+dateMetaData :: UTCTime -> MetaData -> MetaData
+dateMetaData mtime old = MetaData $ M.fromList $ filter isnew
[ (yearMetaField, S.singleton $ toMetaValue $ show y)
, (monthMetaField, S.singleton $ toMetaValue $ show m)
]
where
isnew (f, _) = S.null (currentMetaDataValues f old)
- (y, m, _d) = toGregorian $ utctDay $
- posixSecondsToUTCTime $ realToFrac $
- modificationTime status
+ (y, m, _d) = toGregorian $ utctDay $ mtime
diff --git a/Annex/MetaData/StandardFields.hs b/Annex/MetaData/StandardFields.hs
index d41fb1506..c91b53930 100644
--- a/Annex/MetaData/StandardFields.hs
+++ b/Annex/MetaData/StandardFields.hs
@@ -1,6 +1,6 @@
{- git-annex metadata, standard fields
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Annex/Notification.hs b/Annex/Notification.hs
new file mode 100644
index 000000000..25f1ee678
--- /dev/null
+++ b/Annex/Notification.hs
@@ -0,0 +1,101 @@
+{- git-annex desktop notifications
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# LANGUAGE CPP #-}
+
+module Annex.Notification (NotifyWitness, notifyTransfer, notifyDrop) where
+
+import Common.Annex
+import Logs.Transfer
+#ifdef WITH_DBUS_NOTIFICATIONS
+import qualified Annex
+import Types.DesktopNotify
+import qualified DBus.Notify as Notify
+import qualified DBus.Client
+#endif
+
+-- Witness that notification has happened.
+data NotifyWitness = NotifyWitness
+
+{- Wrap around an action that performs a transfer, which may run multiple
+ - attempts. Displays notification when supported and when the user asked
+ - for it. -}
+notifyTransfer :: Direction -> Maybe FilePath -> (NotifyWitness -> Annex Bool) -> Annex Bool
+notifyTransfer _ Nothing a = a NotifyWitness
+#ifdef WITH_DBUS_NOTIFICATIONS
+notifyTransfer direction (Just f) a = do
+ wanted <- Annex.getState Annex.desktopnotify
+ if (notifyStart wanted || notifyFinish wanted)
+ then do
+ client <- liftIO DBus.Client.connectSession
+ startnotification <- liftIO $ if notifyStart wanted
+ then Just <$> Notify.notify client (startedTransferNote direction f)
+ else pure Nothing
+ ok <- a NotifyWitness
+ when (notifyFinish wanted) $ liftIO $ void $ maybe
+ (Notify.notify client $ finishedTransferNote ok direction f)
+ (\n -> Notify.replace client n $ finishedTransferNote ok direction f)
+ startnotification
+ return ok
+ else a NotifyWitness
+#else
+notifyTransfer _ (Just _) a = do a NotifyWitness
+#endif
+
+notifyDrop :: Maybe FilePath -> Bool -> Annex ()
+notifyDrop Nothing _ = noop
+#ifdef WITH_DBUS_NOTIFICATIONS
+notifyDrop (Just f) ok = do
+ wanted <- Annex.getState Annex.desktopnotify
+ when (notifyFinish wanted) $ liftIO $ do
+ client <- DBus.Client.connectSession
+ void $ Notify.notify client (droppedNote ok f)
+#else
+notifyDrop (Just _) _ = noop
+#endif
+
+#ifdef WITH_DBUS_NOTIFICATIONS
+startedTransferNote :: Direction -> FilePath -> Notify.Note
+startedTransferNote Upload = mkNote Notify.Transfer Notify.Low iconUpload
+ "Uploading"
+startedTransferNote Download = mkNote Notify.Transfer Notify.Low iconDownload
+ "Downloading"
+
+finishedTransferNote :: Bool -> Direction -> FilePath -> Notify.Note
+finishedTransferNote False Upload = mkNote Notify.TransferError Notify.Normal iconFailure
+ "Failed to upload"
+finishedTransferNote False Download = mkNote Notify.TransferError Notify.Normal iconFailure
+ "Failed to download"
+finishedTransferNote True Upload = mkNote Notify.TransferComplete Notify.Low iconSuccess
+ "Finished uploading"
+finishedTransferNote True Download = mkNote Notify.TransferComplete Notify.Low iconSuccess
+ "Finished downloading"
+
+droppedNote :: Bool -> FilePath -> Notify.Note
+droppedNote False = mkNote Notify.TransferError Notify.Normal iconFailure
+ "Failed to drop"
+droppedNote True = mkNote Notify.TransferComplete Notify.Low iconSuccess
+ "Dropped"
+
+iconUpload, iconDownload, iconFailure, iconSuccess :: String
+iconUpload = "network-transmit"
+iconDownload = "network-receive"
+iconFailure = "dialog-error"
+iconSuccess = "git-annex" -- Is there a standard icon for success/completion?
+
+mkNote :: Notify.Category -> Notify.UrgencyLevel -> String -> String -> FilePath -> Notify.Note
+mkNote category urgency icon desc path = Notify.blankNote
+ { Notify.appName = "git-annex"
+ , Notify.appImage = Just (Notify.Icon icon)
+ , Notify.summary = desc ++ " " ++ path
+ , Notify.hints =
+ [ Notify.Category category
+ , Notify.Urgency urgency
+ , Notify.SuppressSound True
+ ]
+ }
+#endif
diff --git a/Annex/Path.hs b/Annex/Path.hs
index a8c4907b2..6186a887b 100644
--- a/Annex/Path.hs
+++ b/Annex/Path.hs
@@ -1,6 +1,6 @@
{- git-annex program path
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Annex/Perms.hs b/Annex/Perms.hs
index e3a2fa65a..3ae351d8c 100644
--- a/Annex/Perms.hs
+++ b/Annex/Perms.hs
@@ -1,6 +1,6 @@
{- git-annex file permissions
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -21,7 +21,6 @@ import Common.Annex
import Utility.FileMode
import Git.SharedRepository
import qualified Annex
-import Annex.Exception
import Config
import System.Posix.Types
@@ -120,6 +119,6 @@ createContentDir dest = do
modifyContent :: FilePath -> Annex a -> Annex a
modifyContent f a = do
createContentDir f -- also thaws it
- v <- tryAnnex a
+ v <- tryNonAsync a
freezeContentDir f
- either throwAnnex return v
+ either throwM return v
diff --git a/Annex/Queue.hs b/Annex/Queue.hs
index a5ef60037..47837e2d9 100644
--- a/Annex/Queue.hs
+++ b/Annex/Queue.hs
@@ -1,6 +1,6 @@
{- git-annex command queue
-
- - Copyright 2011, 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2011, 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Annex/Quvi.hs b/Annex/Quvi.hs
index 1a2edf6b8..8d4591b48 100644
--- a/Annex/Quvi.hs
+++ b/Annex/Quvi.hs
@@ -1,6 +1,6 @@
{- quvi options for git-annex
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Annex/ReplaceFile.hs b/Annex/ReplaceFile.hs
index 8b15f5ce3..1144ba083 100644
--- a/Annex/ReplaceFile.hs
+++ b/Annex/ReplaceFile.hs
@@ -1,6 +1,6 @@
{- git-annex file replacing
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -9,7 +9,6 @@ module Annex.ReplaceFile where
import Common.Annex
import Annex.Perms
-import Annex.Exception
{- Replaces a possibly already existing file with a new version,
- atomically, by running an action.
@@ -23,17 +22,29 @@ import Annex.Exception
- Throws an IO exception when it was unable to replace the file.
-}
replaceFile :: FilePath -> (FilePath -> Annex ()) -> Annex ()
-replaceFile file a = do
+replaceFile file action = replaceFileOr file action (liftIO . nukeFile)
+
+{- If unable to replace the file with the temp file, runs the
+ - rollback action, which is responsible for cleaning up the temp file. -}
+replaceFileOr :: FilePath -> (FilePath -> Annex ()) -> (FilePath -> Annex ()) -> Annex ()
+replaceFileOr file action rollback = do
tmpdir <- fromRepo gitAnnexTmpMiscDir
void $ createAnnexDirectory tmpdir
- bracketIO (setup tmpdir) nukeFile $ \tmpfile -> do
- a tmpfile
- liftIO $ catchIO (rename tmpfile file) (fallback tmpfile)
+ tmpfile <- liftIO $ setup tmpdir
+ go tmpfile `catchNonAsync` (const $ rollback tmpfile)
where
- setup tmpdir = do
+ setup tmpdir = do
(tmpfile, h) <- openTempFileWithDefaultPermissions tmpdir "tmp"
hClose h
return tmpfile
- fallback tmpfile _ = do
- createDirectoryIfMissing True $ parentDir file
- moveFile tmpfile file
+ go tmpfile = do
+ action tmpfile
+ liftIO $ replaceFileFrom tmpfile file
+
+replaceFileFrom :: FilePath -> FilePath -> IO ()
+replaceFileFrom src dest = go `catchIO` fallback
+ where
+ go = moveFile src dest
+ fallback _ = do
+ createDirectoryIfMissing True $ parentDir dest
+ go
diff --git a/Annex/Ssh.hs b/Annex/Ssh.hs
index bd10a40d4..54c54d79f 100644
--- a/Annex/Ssh.hs
+++ b/Annex/Ssh.hs
@@ -1,6 +1,6 @@
{- git-annex ssh interface, with connection caching
-
- - Copyright 2012,2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2015 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -8,50 +8,59 @@
{-# LANGUAGE CPP #-}
module Annex.Ssh (
- sshCachingOptions,
+ sshOptions,
sshCacheDir,
sshReadPort,
+ forceSshCleanup,
+ sshOptionsEnv,
+ sshOptionsTo,
+ inRepoWithSshOptionsTo,
+ runSshOptions,
+ sshAskPassEnv,
+ runSshAskPass
) where
import qualified Data.Map as M
import Data.Hash.MD5
-import System.Process (cwd)
+import System.Exit
import Common.Annex
-import Annex.LockPool
+import Annex.LockFile
import qualified Build.SysConfig as SysConfig
import qualified Annex
+import qualified Git
+import qualified Git.Url
import Config
+import Config.Files
import Utility.Env
import Types.CleanupActions
+import Annex.Index (addGitEnv)
#ifndef mingw32_HOST_OS
import Annex.Perms
+import Utility.LockFile
#endif
{- Generates parameters to ssh to a given host (or user@host) on a given
- - port, with connection caching. -}
-sshCachingOptions :: (String, Maybe Integer) -> [CommandParam] -> Annex [CommandParam]
-sshCachingOptions (host, port) opts = do
- Annex.addCleanup SshCachingCleanup sshCleanup
- go =<< sshInfo (host, port)
+ - port. This includes connection caching parameters, and any ssh-options. -}
+sshOptions :: (String, Maybe Integer) -> RemoteGitConfig -> [CommandParam] -> Annex [CommandParam]
+sshOptions (host, port) gc opts = go =<< sshCachingInfo (host, port)
where
go (Nothing, params) = ret params
go (Just socketfile, params) = do
- cleanstale
- liftIO $ createDirectoryIfMissing True $ parentDir socketfile
- lockFile $ socket2lock socketfile
+ prepSocket socketfile
ret params
- ret ps = return $ ps ++ opts ++ portParams port ++ [Param "-T"]
- -- If the lock pool is empty, this is the first ssh of this
- -- run. There could be stale ssh connections hanging around
- -- from a previous git-annex run that was interrupted.
- cleanstale = whenM (not . any isLock . M.keys <$> getPool)
- sshCleanup
+ ret ps = return $ concat
+ [ ps
+ , map Param (remoteAnnexSshOptions gc)
+ , opts
+ , portParams port
+ , [Param "-T"]
+ ]
{- Returns a filename to use for a ssh connection caching socket, and
- parameters to enable ssh connection caching. -}
-sshInfo :: (String, Maybe Integer) -> Annex (Maybe FilePath, [CommandParam])
-sshInfo (host, port) = go =<< sshCacheDir
+sshCachingInfo :: (String, Maybe Integer) -> Annex (Maybe FilePath, [CommandParam])
+sshCachingInfo (host, port) = go =<< sshCacheDir
where
go Nothing = return (Nothing, [])
go (Just dir) = do
@@ -75,10 +84,10 @@ bestSocketPath abssocketfile = do
then Just socketfile
else Nothing
where
- -- ssh appends a 16 char extension to the socket when setting it
+ -- ssh appends a 16 char extension to the socket when setting it
-- up, which needs to be taken into account when checking
-- that a valid socket was constructed.
- sshgarbage = replicate (1+16) 'X'
+ sshgarbage = replicate (1+16) 'X'
sshConnectionCachingParams :: FilePath -> [CommandParam]
sshConnectionCachingParams socketfile =
@@ -102,55 +111,79 @@ sshCacheDir
where
gettmpdir = liftIO $ getEnv "GIT_ANNEX_TMP_DIR"
usetmpdir tmpdir = liftIO $ catchMaybeIO $ do
- createDirectoryIfMissing True tmpdir
- return tmpdir
+ let socktmp = tmpdir </> "ssh"
+ createDirectoryIfMissing True socktmp
+ return socktmp
portParams :: Maybe Integer -> [CommandParam]
portParams Nothing = []
portParams (Just port) = [Param "-p", Param $ show port]
-{- Stop any unused ssh processes. -}
+{- Prepare to use a socket file. Locks a lock file to prevent
+ - other git-annex processes from stopping the ssh on this socket. -}
+prepSocket :: FilePath -> Annex ()
+prepSocket socketfile = do
+ -- If the lock pool is empty, this is the first ssh of this
+ -- run. There could be stale ssh connections hanging around
+ -- from a previous git-annex run that was interrupted.
+ whenM (not . any isLock . M.keys <$> getLockPool)
+ sshCleanup
+ -- Cleanup at end of this run.
+ Annex.addCleanup SshCachingCleanup sshCleanup
+
+ liftIO $ createDirectoryIfMissing True $ parentDir socketfile
+ lockFileShared $ socket2lock socketfile
+
+enumSocketFiles :: Annex [FilePath]
+enumSocketFiles = go =<< sshCacheDir
+ where
+ go Nothing = return []
+ go (Just dir) = liftIO $ filter (not . isLock)
+ <$> catchDefaultIO [] (dirContents dir)
+
+{- Stop any unused ssh connection caching processes. -}
sshCleanup :: Annex ()
-sshCleanup = go =<< sshCacheDir
+sshCleanup = mapM_ cleanup =<< enumSocketFiles
where
- go Nothing = noop
- go (Just dir) = do
- sockets <- liftIO $ filter (not . isLock)
- <$> catchDefaultIO [] (dirContents dir)
- forM_ sockets cleanup
cleanup socketfile = do
#ifndef mingw32_HOST_OS
-- Drop any shared lock we have, and take an
-- exclusive lock, without blocking. If the lock
-- succeeds, nothing is using this ssh, and it can
-- be stopped.
+ --
+ -- After ssh is stopped cannot remove the lock file;
+ -- other processes may be waiting on our exclusive
+ -- lock to use it.
let lockfile = socket2lock socketfile
unlockFile lockfile
mode <- annexFileMode
- fd <- liftIO $ noUmask mode $
- openFd lockfile ReadWrite (Just mode) defaultFileFlags
- v <- liftIO $ tryIO $
- setLock fd (WriteLock, AbsoluteSeek, 0, 0)
+ v <- liftIO $ noUmask mode $ tryLockExclusive (Just mode) lockfile
case v of
- Left _ -> noop
- Right _ -> stopssh socketfile
- liftIO $ closeFd fd
+ Nothing -> noop
+ Just lck -> do
+ forceStopSsh socketfile
+ liftIO $ dropLock lck
#else
- stopssh socketfile
+ forceStopSsh socketfile
#endif
- stopssh socketfile = do
- let (dir, base) = splitFileName socketfile
- let params = sshConnectionCachingParams base
- -- "ssh -O stop" is noisy on stderr even with -q
- void $ liftIO $ catchMaybeIO $
- withQuietOutput createProcessSuccess $
- (proc "ssh" $ toCommand $
- [ Params "-O stop"
- ] ++ params ++ [Param "localhost"])
- { cwd = Just dir }
- liftIO $ nukeFile socketfile
- -- Cannot remove the lock file; other processes may
- -- be waiting on our exclusive lock to use it.
+
+{- Stop all ssh connection caching processes, even when they're in use. -}
+forceSshCleanup :: Annex ()
+forceSshCleanup = mapM_ forceStopSsh =<< enumSocketFiles
+
+forceStopSsh :: FilePath -> Annex ()
+forceStopSsh socketfile = do
+ let (dir, base) = splitFileName socketfile
+ let params = sshConnectionCachingParams base
+ -- "ssh -O stop" is noisy on stderr even with -q
+ void $ liftIO $ catchMaybeIO $
+ withQuietOutput createProcessSuccess $
+ (proc "ssh" $ toCommand $
+ [ Params "-O stop"
+ ] ++ params ++ [Param "localhost"])
+ { cwd = Just dir }
+ liftIO $ nukeFile socketfile
{- This needs to be as short as possible, due to limitations on the length
- of the path to a socket file. At the same time, it needs to be unique
@@ -199,3 +232,70 @@ sshReadPort params = (port, reverse args)
aux (p,ps) (q:rest) | "-p" `isPrefixOf` q = aux (readPort $ drop 2 q, ps) rest
| otherwise = aux (p,q:ps) rest
readPort p = fmap fst $ listToMaybe $ reads p
+
+{- When this env var is set, git-annex runs ssh with the specified
+ - options. (The options are separated by newlines.)
+ -
+ - This is a workaround for GIT_SSH not being able to contain
+ - additional parameters to pass to ssh. -}
+sshOptionsEnv :: String
+sshOptionsEnv = "GIT_ANNEX_SSHOPTION"
+
+toSshOptionsEnv :: [CommandParam] -> String
+toSshOptionsEnv = unlines . toCommand
+
+fromSshOptionsEnv :: String -> [CommandParam]
+fromSshOptionsEnv = map Param . lines
+
+{- Enables ssh caching for git push/pull to a particular
+ - remote git repo. (Can safely be used on non-ssh remotes.)
+ -
+ - Also propigates any configured ssh-options.
+ -
+ - Like inRepo, the action is run with the local git repo.
+ - But here it's a modified version, with gitEnv to set GIT_SSH=git-annex,
+ - and sshOptionsEnv set so that git-annex will know what socket
+ - file to use. -}
+inRepoWithSshOptionsTo :: Git.Repo -> RemoteGitConfig -> (Git.Repo -> IO a) -> Annex a
+inRepoWithSshOptionsTo remote gc a =
+ liftIO . a =<< sshOptionsTo remote gc =<< gitRepo
+
+{- To make any git commands be run with ssh caching enabled,
+ - and configured ssh-options alters the local Git.Repo's gitEnv
+ - to set GIT_SSH=git-annex, and sets sshOptionsEnv. -}
+sshOptionsTo :: Git.Repo -> RemoteGitConfig -> Git.Repo -> Annex Git.Repo
+sshOptionsTo remote gc g
+ | not (Git.repoIsUrl remote) || Git.repoIsHttp remote = uncached
+ | otherwise = case Git.Url.hostuser remote of
+ Nothing -> uncached
+ Just host -> do
+ (msockfile, _) <- sshCachingInfo (host, Git.Url.port remote)
+ case msockfile of
+ Nothing -> return g
+ Just sockfile -> do
+ command <- liftIO readProgramFile
+ prepSocket sockfile
+ let val = toSshOptionsEnv $ concat
+ [ sshConnectionCachingParams sockfile
+ , map Param (remoteAnnexSshOptions gc)
+ ]
+ liftIO $ do
+ g' <- addGitEnv g sshOptionsEnv val
+ addGitEnv g' "GIT_SSH" command
+ where
+ uncached = return g
+
+runSshOptions :: [String] -> String -> IO ()
+runSshOptions args s = do
+ let args' = toCommand (fromSshOptionsEnv s) ++ args
+ let p = proc "ssh" args'
+ exitWith =<< waitForProcess . processHandle =<< createProcess p
+
+{- When this env var is set, git-annex is being used as a ssh-askpass
+ - program, and should read the password from the specified location,
+ - and output it for ssh to read. -}
+sshAskPassEnv :: String
+sshAskPassEnv = "GIT_ANNEX_SSHASKPASS"
+
+runSshAskPass :: FilePath -> IO ()
+runSshAskPass passfile = putStrLn =<< readFile passfile
diff --git a/Annex/TaggedPush.hs b/Annex/TaggedPush.hs
index 35fdf333c..642d4db0b 100644
--- a/Annex/TaggedPush.hs
+++ b/Annex/TaggedPush.hs
@@ -1,6 +1,6 @@
{- git-annex tagged pushes
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -49,13 +49,13 @@ fromTaggedBranch b = case split "/" $ Git.fromRef b of
taggedPush :: UUID -> Maybe String -> Git.Ref -> Remote -> Git.Repo -> IO Bool
taggedPush u info branch remote = Git.Command.runBool
- [ Param "push"
- , Param $ Remote.name remote
+ [ Param "push"
+ , Param $ Remote.name remote
{- Using forcePush here is safe because we "own" the tagged branch
- we're pushing; it has no other writers. Ensures it is pushed
- even if it has been rewritten by a transition. -}
- , Param $ Git.Branch.forcePush $ refspec Annex.Branch.name
- , Param $ refspec branch
- ]
+ , Param $ Git.Branch.forcePush $ refspec Annex.Branch.name
+ , Param $ refspec branch
+ ]
where
refspec b = Git.fromRef b ++ ":" ++ Git.fromRef (toTaggedBranch u info b)
diff --git a/Annex/Transfer.hs b/Annex/Transfer.hs
new file mode 100644
index 000000000..2723b2351
--- /dev/null
+++ b/Annex/Transfer.hs
@@ -0,0 +1,145 @@
+{- git-annex transfers
+ -
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# LANGUAGE CPP #-}
+
+module Annex.Transfer (
+ module X,
+ upload,
+ download,
+ runTransfer,
+ alwaysRunTransfer,
+ noRetry,
+ forwardRetry,
+) where
+
+import Common.Annex
+import Logs.Transfer as X
+import Annex.Notification as X
+import Annex.Perms
+import Utility.Metered
+#ifdef mingw32_HOST_OS
+import Utility.LockFile
+#endif
+
+import Control.Concurrent
+
+upload :: UUID -> Key -> AssociatedFile -> RetryDecider -> (MeterUpdate -> Annex Bool) -> NotifyWitness -> Annex Bool
+upload u key f d a _witness = runTransfer (Transfer Upload u key) f d a
+
+download :: UUID -> Key -> AssociatedFile -> RetryDecider -> (MeterUpdate -> Annex Bool) -> NotifyWitness -> Annex Bool
+download u key f d a _witness = runTransfer (Transfer Download u key) f d a
+
+{- Runs a transfer action. Creates and locks the lock file while the
+ - action is running, and stores info in the transfer information
+ - file.
+ -
+ - If the transfer action returns False, the transfer info is
+ - left in the failedTransferDir.
+ -
+ - If the transfer is already in progress, returns False.
+ -
+ - An upload can be run from a read-only filesystem, and in this case
+ - no transfer information or lock file is used.
+ -}
+runTransfer :: Transfer -> Maybe FilePath -> RetryDecider -> (MeterUpdate -> Annex Bool) -> Annex Bool
+runTransfer = runTransfer' False
+
+{- Like runTransfer, but ignores any existing transfer lock file for the
+ - transfer, allowing re-running a transfer that is already in progress.
+ -
+ - Note that this may result in confusing progress meter display in the
+ - webapp, if multiple processes are writing to the transfer info file. -}
+alwaysRunTransfer :: Transfer -> Maybe FilePath -> RetryDecider -> (MeterUpdate -> Annex Bool) -> Annex Bool
+alwaysRunTransfer = runTransfer' True
+
+runTransfer' :: Bool -> Transfer -> Maybe FilePath -> RetryDecider -> (MeterUpdate -> Annex Bool) -> Annex Bool
+runTransfer' ignorelock t file shouldretry a = do
+ info <- liftIO $ startTransferInfo file
+ (meter, tfile, metervar) <- mkProgressUpdater t info
+ mode <- annexFileMode
+ (fd, inprogress) <- liftIO $ prep tfile mode info
+ if inprogress && not ignorelock
+ then do
+ showNote "transfer already in progress"
+ return False
+ else do
+ ok <- retry info metervar $
+ bracketIO (return fd) (cleanup tfile) (const $ a meter)
+ unless ok $ recordFailedTransfer t info
+ return ok
+ where
+#ifndef mingw32_HOST_OS
+ prep tfile mode info = do
+ mfd <- catchMaybeIO $
+ openFd (transferLockFile tfile) ReadWrite (Just mode)
+ defaultFileFlags { trunc = True }
+ case mfd of
+ Nothing -> return (Nothing, False)
+ Just fd -> do
+ setFdOption fd CloseOnExec True
+ locked <- catchMaybeIO $
+ setLock fd (WriteLock, AbsoluteSeek, 0, 0)
+ if isNothing locked
+ then do
+ closeFd fd
+ return (Nothing, True)
+ else do
+ void $ tryIO $ writeTransferInfoFile info tfile
+ return (mfd, False)
+#else
+ prep tfile _mode info = do
+ v <- catchMaybeIO $ lockExclusive (transferLockFile tfile)
+ case v of
+ Nothing -> return (Nothing, False)
+ Just Nothing -> return (Nothing, True)
+ Just (Just lockhandle) -> do
+ void $ tryIO $ writeTransferInfoFile info tfile
+ return (Just lockhandle, False)
+#endif
+ cleanup _ Nothing = noop
+ cleanup tfile (Just lockhandle) = do
+ void $ tryIO $ removeFile tfile
+#ifndef mingw32_HOST_OS
+ void $ tryIO $ removeFile $ transferLockFile tfile
+ closeFd lockhandle
+#else
+ {- Windows cannot delete the lockfile until the lock
+ - is closed. So it's possible to race with another
+ - process that takes the lock before it's removed,
+ - so ignore failure to remove.
+ -}
+ dropLock lockhandle
+ void $ tryIO $ removeFile $ transferLockFile tfile
+#endif
+ retry oldinfo metervar run = do
+ v <- tryNonAsync run
+ case v of
+ Right b -> return b
+ Left e -> do
+ warning (show e)
+ b <- getbytescomplete metervar
+ let newinfo = oldinfo { bytesComplete = Just b }
+ if shouldretry oldinfo newinfo
+ then retry newinfo metervar run
+ else return False
+ getbytescomplete metervar
+ | transferDirection t == Upload =
+ liftIO $ readMVar metervar
+ | otherwise = do
+ f <- fromRepo $ gitAnnexTmpObjectLocation (transferKey t)
+ liftIO $ catchDefaultIO 0 $ getFileSize f
+
+type RetryDecider = TransferInfo -> TransferInfo -> Bool
+
+noRetry :: RetryDecider
+noRetry _ _ = False
+
+{- Retries a transfer when it fails, as long as the failed transfer managed
+ - to send some data. -}
+forwardRetry :: RetryDecider
+forwardRetry old new = bytesComplete old < bytesComplete new
diff --git a/Annex/UUID.hs b/Annex/UUID.hs
index 4e274503b..7776b778a 100644
--- a/Annex/UUID.hs
+++ b/Annex/UUID.hs
@@ -6,7 +6,7 @@
- UUIDs of remotes are cached in git config, using keys named
- remote.<name>.annex-uuid
-
- - Copyright 2010-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -21,7 +21,10 @@ module Annex.UUID (
gCryptNameSpace,
removeRepoUUID,
storeUUID,
+ storeUUIDIn,
setUUID,
+ webUUID,
+ bitTorrentUUID,
) where
import Common.Annex
@@ -70,7 +73,7 @@ getRepoUUID r = do
where
updatecache u = do
g <- gitRepo
- when (g /= r) $ storeUUID cachekey u
+ when (g /= r) $ storeUUIDIn cachekey u
cachekey = remoteConfig r "uuid"
removeRepoUUID :: Annex ()
@@ -84,13 +87,24 @@ getUncachedUUID = toUUID . Git.Config.get key ""
{- Make sure that the repo has an annex.uuid setting. -}
prepUUID :: Annex ()
prepUUID = whenM ((==) NoUUID <$> getUUID) $
- storeUUID configkey =<< liftIO genUUID
+ storeUUID =<< liftIO genUUID
-storeUUID :: ConfigKey -> UUID -> Annex ()
-storeUUID configfield = setConfig configfield . fromUUID
+storeUUID :: UUID -> Annex ()
+storeUUID = storeUUIDIn configkey
+
+storeUUIDIn :: ConfigKey -> UUID -> Annex ()
+storeUUIDIn configfield = setConfig configfield . fromUUID
{- Only sets the configkey in the Repo; does not change .git/config -}
setUUID :: Git.Repo -> UUID -> IO Git.Repo
setUUID r u = do
let s = show configkey ++ "=" ++ fromUUID u
Git.Config.store s r
+
+-- Dummy uuid for the whole web. Do not alter.
+webUUID :: UUID
+webUUID = UUID "00000000-0000-0000-0000-000000000001"
+
+-- Dummy uuid for bittorrent. Do not alter.
+bitTorrentUUID :: UUID
+bitTorrentUUID = UUID "00000000-0000-0000-0000-000000000002"
diff --git a/Annex/Url.hs b/Annex/Url.hs
index 397a7910b..b1a932e62 100644
--- a/Annex/Url.hs
+++ b/Annex/Url.hs
@@ -1,7 +1,7 @@
{- Url downloading, with git-annex user agent and configured http
- headers and wget/curl options.
-
- - Copyright 2013-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2013-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -26,7 +26,7 @@ getUserAgent = Annex.getState $
Just . fromMaybe defaultUserAgent . Annex.useragent
getUrlOptions :: Annex U.UrlOptions
-getUrlOptions = U.UrlOptions
+getUrlOptions = mkUrlOptions
<$> getUserAgent
<*> headers
<*> options
diff --git a/Annex/VariantFile.hs b/Annex/VariantFile.hs
index 7c849c59f..89cfbc16a 100644
--- a/Annex/VariantFile.hs
+++ b/Annex/VariantFile.hs
@@ -1,6 +1,6 @@
{- git-annex .variant files for automatic merge conflict resolution
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Annex/Version.hs b/Annex/Version.hs
index 2a75a1c55..d08f994e9 100644
--- a/Annex/Version.hs
+++ b/Annex/Version.hs
@@ -1,6 +1,6 @@
{- git-annex repository versioning
-
- - Copyright 2010,2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010,2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Annex/View.hs b/Annex/View.hs
index 7c187befd..315cc7df2 100644
--- a/Annex/View.hs
+++ b/Annex/View.hs
@@ -1,6 +1,6 @@
{- metadata based branch views
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -102,7 +102,7 @@ refineView origview = checksize . calc Unchanged origview
let (components', viewchanges) = runWriter $
mapM (\c -> updateViewComponent c field vf) (viewComponents view)
viewchange = if field `elem` map viewField (viewComponents origview)
- then maximum viewchanges
+ then maximum viewchanges
else Narrowing
in (view { viewComponents = components' }, viewchange)
| otherwise =
@@ -207,7 +207,7 @@ viewComponentMatcher :: ViewComponent -> (MetaData -> Maybe [MetaValue])
viewComponentMatcher viewcomponent = \metadata ->
matcher (currentMetaDataValues metafield metadata)
where
- metafield = viewField viewcomponent
+ metafield = viewField viewcomponent
matcher = case viewFilter viewcomponent of
FilterValues s -> \values -> setmatches $
S.intersection s values
@@ -236,8 +236,8 @@ toViewPath = concatMap escapeslash . fromMetaValue
fromViewPath :: FilePath -> MetaValue
fromViewPath = toMetaValue . deescapeslash []
where
- deescapeslash s [] = reverse s
- deescapeslash s (c:cs)
+ deescapeslash s [] = reverse s
+ deescapeslash s (c:cs)
| c == pseudoSlash = case cs of
(c':cs')
| c' == pseudoSlash -> deescapeslash (pseudoSlash:s) cs'
@@ -340,19 +340,21 @@ applyView' mkviewedfile getfilemetadata view = do
genViewBranch view $ do
uh <- inRepo Git.UpdateIndex.startUpdateIndex
hasher <- inRepo hashObjectStart
- forM_ l $ \f ->
- go uh hasher f =<< Backend.lookupFile f
+ forM_ l $ \f -> do
+ relf <- getTopFilePath <$> inRepo (toTopFilePath f)
+ go uh hasher relf =<< Backend.lookupFile f
liftIO $ do
hashObjectStop hasher
void $ stopUpdateIndex uh
void clean
where
genviewedfiles = viewedFiles view mkviewedfile -- enables memoization
- go uh hasher f (Just (k, _)) = do
+ go uh hasher f (Just k) = do
metadata <- getCurrentMetaData k
let metadata' = getfilemetadata f `unionMetaData` metadata
forM_ (genviewedfiles f metadata') $ \fv -> do
- stagesymlink uh hasher fv =<< inRepo (gitAnnexLink fv k)
+ f' <- fromRepo $ fromTopFilePath $ asTopFilePath fv
+ stagesymlink uh hasher f' =<< calcRepo (gitAnnexLink f' k)
go uh hasher f Nothing
| "." `isPrefixOf` f = do
s <- liftIO $ getSymbolicLinkStatus f
@@ -410,19 +412,19 @@ withViewChanges addmeta removemeta = do
where
handleremovals item
| DiffTree.srcsha item /= nullSha =
- handle item removemeta
+ handlechange item removemeta
=<< catKey (DiffTree.srcsha item) (DiffTree.srcmode item)
| otherwise = noop
handleadds makeabs item
| DiffTree.dstsha item /= nullSha =
- handle item addmeta
+ handlechange item addmeta
=<< ifM isDirect
( catKey (DiffTree.dstsha item) (DiffTree.dstmode item)
-- optimisation
, isAnnexLink $ makeabs $ DiffTree.file item
)
| otherwise = noop
- handle item a = maybe noop
+ handlechange item a = maybe noop
(void . commandAction . a (getTopFilePath $ DiffTree.file item))
{- Generates a branch for a view. This is done using a different index
@@ -433,7 +435,7 @@ genViewBranch :: View -> Annex () -> Annex Git.Branch
genViewBranch view a = withIndex $ do
a
let branch = branchView view
- void $ inRepo $ Git.Branch.commit True (fromRef branch) branch []
+ void $ inRepo $ Git.Branch.commit Git.Branch.AutomaticCommit True (fromRef branch) branch []
return branch
{- Runs an action using the view index file.
diff --git a/Annex/View/ViewedFile.hs b/Annex/View/ViewedFile.hs
index 25ac16a34..0acba235a 100644
--- a/Annex/View/ViewedFile.hs
+++ b/Annex/View/ViewedFile.hs
@@ -1,10 +1,12 @@
{- filenames (not paths) used in views
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Annex.View.ViewedFile (
ViewedFile,
MkViewedFile,
@@ -43,10 +45,18 @@ viewedFileFromReference f = concat
{- To avoid collisions with filenames or directories that contain
- '%', and to allow the original directories to be extracted
- - from the ViewedFile, '%' is escaped to '\%' (and '\' to '\\').
+ - from the ViewedFile, '%' is escaped. )
-}
escape :: String -> String
- escape = replace "%" "\\%" . replace "\\" "\\\\"
+ escape = replace "%" (escchar:'%':[]) . replace [escchar] [escchar, escchar]
+
+escchar :: Char
+#ifndef mingw32_HOST_OS
+escchar = '\\'
+#else
+-- \ is path separator on Windows, so instead use !
+escchar = '!'
+#endif
{- For use when operating already within a view, so whatever filepath
- is present in the work tree is already a ViewedFile. -}
@@ -58,10 +68,10 @@ viewedFileReuse = takeFileName
dirFromViewedFile :: ViewedFile -> FilePath
dirFromViewedFile = joinPath . drop 1 . sep [] ""
where
- sep l _ [] = reverse l
+ sep l _ [] = reverse l
sep l curr (c:cs)
| c == '%' = sep (reverse curr:l) "" cs
- | c == '\\' = case cs of
+ | c == escchar = case cs of
(c':cs') -> sep l (c':curr) cs'
[] -> sep l curr cs
| otherwise = sep l (c:curr) cs
@@ -70,6 +80,7 @@ prop_viewedFile_roundtrips :: FilePath -> Bool
prop_viewedFile_roundtrips f
-- Relative filenames wanted, not directories.
| any (isPathSeparator) (end f ++ beginning f) = True
+ | isAbsolute f = True
| otherwise = dir == dirFromViewedFile (viewedFileFromReference f)
where
dir = joinPath $ beginning $ splitDirectories f
diff --git a/Annex/Wanted.hs b/Annex/Wanted.hs
index 42f813bbb..ba7df0a9c 100644
--- a/Annex/Wanted.hs
+++ b/Annex/Wanted.hs
@@ -1,6 +1,6 @@
{- git-annex checking whether content is wanted
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -15,15 +15,15 @@ import qualified Data.Set as S
{- Check if a file is preferred content for the local repository. -}
wantGet :: Bool -> Maybe Key -> AssociatedFile -> Annex Bool
-wantGet def key file = isPreferredContent Nothing S.empty key file def
+wantGet d key file = isPreferredContent Nothing S.empty key file d
{- Check if a file is preferred content for a remote. -}
wantSend :: Bool -> Maybe Key -> AssociatedFile -> UUID -> Annex Bool
-wantSend def key file to = isPreferredContent (Just to) S.empty key file def
+wantSend d key file to = isPreferredContent (Just to) S.empty key file d
{- Check if a file can be dropped, maybe from a remote.
- Don't drop files that are preferred content. -}
wantDrop :: Bool -> Maybe UUID -> Maybe Key -> AssociatedFile -> Annex Bool
-wantDrop def from key file = do
+wantDrop d from key file = do
u <- maybe getUUID (return . id) from
- not <$> isPreferredContent (Just u) (S.singleton u) key file def
+ not <$> isPreferredContent (Just u) (S.singleton u) key file d
diff --git a/Assistant.hs b/Assistant.hs
index 67398f23b..eb01bb9b9 100644
--- a/Assistant.hs
+++ b/Assistant.hs
@@ -1,6 +1,6 @@
{- git-annex assistant daemon
-
- - Copyright 2012-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -21,6 +21,7 @@ import Assistant.Threads.Pusher
import Assistant.Threads.Merger
import Assistant.Threads.TransferWatcher
import Assistant.Threads.Transferrer
+import Assistant.Threads.RemoteControl
import Assistant.Threads.SanityChecker
import Assistant.Threads.Cronner
import Assistant.Threads.ProblemFixer
@@ -51,9 +52,12 @@ import qualified Utility.Daemon
import Utility.ThreadScheduler
import Utility.HumanTime
import qualified Build.SysConfig as SysConfig
-#ifndef mingw32_HOST_OS
-import Utility.LogFile
import Annex.Perms
+import Utility.LogFile
+#ifdef mingw32_HOST_OS
+import Utility.Env
+import Config.Files
+import System.Environment (getArgs)
#endif
import System.Log.Logger
@@ -69,23 +73,21 @@ stopDaemon = liftIO . Utility.Daemon.stopDaemon =<< fromRepo gitAnnexPidFile
- stdout and stderr descriptors. -}
startDaemon :: Bool -> Bool -> Maybe Duration -> Maybe String -> Maybe HostName -> Maybe (Maybe Handle -> Maybe Handle -> String -> FilePath -> IO ()) -> Annex ()
startDaemon assistant foreground startdelay cannotrun listenhost startbrowser = do
+
Annex.changeState $ \s -> s { Annex.daemon = True }
pidfile <- fromRepo gitAnnexPidFile
-#ifndef mingw32_HOST_OS
logfile <- fromRepo gitAnnexLogFile
+ liftIO $ debugM desc $ "logging to " ++ logfile
+#ifndef mingw32_HOST_OS
createAnnexDirectory (parentDir logfile)
- logfd <- liftIO $ openLog logfile
+ logfd <- liftIO $ handleToFd =<< openLog logfile
if foreground
then do
origout <- liftIO $ catchMaybeIO $
fdToHandle =<< dup stdOutput
origerr <- liftIO $ catchMaybeIO $
fdToHandle =<< dup stdError
- let undaemonize a = do
- debugM desc $ "logging to " ++ logfile
- Utility.Daemon.lockPidFile pidfile
- Utility.LogFile.redirLog logfd
- a
+ let undaemonize = Utility.Daemon.foreground logfd (Just pidfile)
start undaemonize $
case startbrowser of
Nothing -> Nothing
@@ -93,16 +95,32 @@ startDaemon assistant foreground startdelay cannotrun listenhost startbrowser =
else
start (Utility.Daemon.daemonize logfd (Just pidfile) False) Nothing
#else
- -- Windows is always foreground, and has no log file.
+ -- Windows doesn't daemonize, but does redirect output to the
+ -- log file. The only way to do so is to restart the program.
when (foreground || not foreground) $ do
- liftIO $ Utility.Daemon.lockPidFile pidfile
- start id $ do
- case startbrowser of
- Nothing -> Nothing
- Just a -> Just $ a Nothing Nothing
+ let flag = "GIT_ANNEX_OUTPUT_REDIR"
+ createAnnexDirectory (parentDir logfile)
+ ifM (liftIO $ isNothing <$> getEnv flag)
+ ( liftIO $ withFile devNull WriteMode $ \nullh -> do
+ loghandle <- openLog logfile
+ e <- getEnvironment
+ cmd <- readProgramFile
+ ps <- getArgs
+ (_, _, _, pid) <- createProcess (proc cmd ps)
+ { env = Just (addEntry flag "1" e)
+ , std_in = UseHandle nullh
+ , std_out = UseHandle loghandle
+ , std_err = UseHandle loghandle
+ }
+ exitWith =<< waitForProcess pid
+ , start (Utility.Daemon.foreground (Just pidfile)) $
+ case startbrowser of
+ Nothing -> Nothing
+ Just a -> Just $ a Nothing Nothing
+ )
#endif
where
- desc
+ desc
| assistant = "assistant"
| otherwise = "watch"
start daemonize webappwaiter = withThreadState $ \st -> do
@@ -130,7 +148,7 @@ startDaemon assistant foreground startdelay cannotrun listenhost startbrowser =
let threads = if isJust cannotrun
then webappthread
else webappthread ++
- [ watch $ commitThread
+ [ watch commitThread
#ifdef WITH_WEBAPP
#ifdef WITH_PAIRING
, assist $ pairListenerThread urlrenderer
@@ -141,28 +159,29 @@ startDaemon assistant foreground startdelay cannotrun listenhost startbrowser =
, assist $ xmppReceivePackThread urlrenderer
#endif
#endif
- , assist $ pushThread
- , assist $ pushRetryThread
- , assist $ mergeThread
- , assist $ transferWatcherThread
- , assist $ transferPollerThread
- , assist $ transfererThread
- , assist $ daemonStatusThread
+ , assist pushThread
+ , assist pushRetryThread
+ , assist mergeThread
+ , assist transferWatcherThread
+ , assist transferPollerThread
+ , assist transfererThread
+ , assist remoteControlThread
+ , assist daemonStatusThread
, assist $ sanityCheckerDailyThread urlrenderer
- , assist $ sanityCheckerHourlyThread
+ , assist sanityCheckerHourlyThread
, assist $ problemFixerThread urlrenderer
#ifdef WITH_CLIBS
, assist $ mountWatcherThread urlrenderer
#endif
- , assist $ netWatcherThread
+ , assist netWatcherThread
, assist $ upgraderThread urlrenderer
, assist $ upgradeWatcherThread urlrenderer
- , assist $ netWatcherFallbackThread
+ , assist netWatcherFallbackThread
, assist $ transferScannerThread urlrenderer
, assist $ cronnerThread urlrenderer
- , assist $ configMonitorThread
- , assist $ glacierThread
- , watch $ watchThread
+ , assist configMonitorThread
+ , assist glacierThread
+ , watch watchThread
-- must come last so that all threads that wait
-- on it have already started waiting
, watch $ sanityCheckerStartupThread startdelay
diff --git a/Assistant/Alert.hs b/Assistant/Alert.hs
index 192952f56..1286e4590 100644
--- a/Assistant/Alert.hs
+++ b/Assistant/Alert.hs
@@ -1,6 +1,6 @@
{- git-annex assistant alerts
-
- - Copyright 2012-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -16,6 +16,7 @@ import qualified Remote
import Utility.Tense
import Logs.Transfer
import Types.Distribution
+import Git.Types (RemoteName)
import Data.String
import qualified Data.Text as T
@@ -117,11 +118,14 @@ commitAlert :: Alert
commitAlert = activityAlert Nothing
[Tensed "Committing" "Committed", "changes to git"]
-showRemotes :: [Remote] -> TenseChunk
-showRemotes = UnTensed . T.intercalate ", " . map (T.pack . Remote.name)
+showRemotes :: [RemoteName] -> TenseChunk
+showRemotes = UnTensed . T.intercalate ", " . map T.pack
syncAlert :: [Remote] -> Alert
-syncAlert rs = baseActivityAlert
+syncAlert = syncAlert' . map Remote.name
+
+syncAlert' :: [RemoteName] -> Alert
+syncAlert' rs = baseActivityAlert
{ alertName = Just SyncAlert
, alertHeader = Just $ tenseWords
[Tensed "Syncing" "Synced", "with", showRemotes rs]
@@ -130,13 +134,18 @@ syncAlert rs = baseActivityAlert
}
syncResultAlert :: [Remote] -> [Remote] -> Alert
-syncResultAlert succeeded failed = makeAlertFiller (not $ null succeeded) $
+syncResultAlert succeeded failed = syncResultAlert'
+ (map Remote.name succeeded)
+ (map Remote.name failed)
+
+syncResultAlert' :: [RemoteName] -> [RemoteName] -> Alert
+syncResultAlert' succeeded failed = makeAlertFiller (not $ null succeeded) $
baseActivityAlert
{ alertName = Just SyncAlert
, alertHeader = Just $ tenseWords msg
}
where
- msg
+ msg
| null succeeded = ["Failed to sync with", showRemotes failed]
| null failed = ["Synced with", showRemotes succeeded]
| otherwise =
@@ -320,10 +329,10 @@ pairRequestAcknowledgedAlert who button = baseActivityAlert
, alertButtons = maybeToList button
}
-xmppNeededAlert :: AlertButton -> Alert
-xmppNeededAlert button = Alert
+connectionNeededAlert :: AlertButton -> Alert
+connectionNeededAlert button = Alert
{ alertHeader = Just "Share with friends, and keep your devices in sync across the cloud."
- , alertIcon = Just TheCloud
+ , alertIcon = Just ConnectionIcon
, alertPriority = High
, alertButtons = [button]
, alertClosable = True
@@ -331,7 +340,7 @@ xmppNeededAlert button = Alert
, alertMessageRender = renderData
, alertCounter = 0
, alertBlockDisplay = True
- , alertName = Just $ XMPPNeededAlert
+ , alertName = Just ConnectionNeededAlert
, alertCombiner = Just $ dataCombiner $ \_old new -> new
, alertData = []
}
diff --git a/Assistant/Alert/Utility.hs b/Assistant/Alert/Utility.hs
index 73843be4c..65484e0e6 100644
--- a/Assistant/Alert/Utility.hs
+++ b/Assistant/Alert/Utility.hs
@@ -1,6 +1,6 @@
{- git-annex assistant alert utilities
-
- - Copyright 2012, 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012, 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -14,7 +14,6 @@ import Utility.Tense
import qualified Data.Text as T
import Data.Text (Text)
import qualified Data.Map as M
-import Data.Monoid
{- This is as many alerts as it makes sense to display at a time.
- A display might be smaller, or larger, the point is to not overwhelm the
@@ -120,7 +119,7 @@ mergeAlert i al m = maybe updatePrune updateCombine (alertCombiner al)
where
bloat = M.size m' - maxAlerts
pruneold l =
- let (f, rest) = partition (\(_, a) -> isFiller a) l
+ let (f, rest) = partition (\(_, a) -> isFiller a) l
in drop bloat f ++ rest
updatePrune = pruneBloat $ M.filterWithKey pruneSame $
M.insertWith' const i al m
diff --git a/Assistant/BranchChange.hs b/Assistant/BranchChange.hs
index c9354544a..c588c910a 100644
--- a/Assistant/BranchChange.hs
+++ b/Assistant/BranchChange.hs
@@ -1,6 +1,6 @@
{- git-annex assistant git-annex branch change tracking
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Changes.hs b/Assistant/Changes.hs
index 2ecd2036c..6eb9bc28e 100644
--- a/Assistant/Changes.hs
+++ b/Assistant/Changes.hs
@@ -1,6 +1,6 @@
{- git-annex assistant change tracking
-
- - Copyright 2012-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Commits.hs b/Assistant/Commits.hs
index 7d1d3780f..c82f8f4c7 100644
--- a/Assistant/Commits.hs
+++ b/Assistant/Commits.hs
@@ -1,6 +1,6 @@
{- git-annex assistant commit tracking
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Common.hs b/Assistant/Common.hs
index f9719422d..5fab84290 100644
--- a/Assistant/Common.hs
+++ b/Assistant/Common.hs
@@ -1,6 +1,6 @@
{- Common infrastructure for the git-annex assistant.
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/CredPairCache.hs b/Assistant/CredPairCache.hs
new file mode 100644
index 000000000..ac355b55a
--- /dev/null
+++ b/Assistant/CredPairCache.hs
@@ -0,0 +1,53 @@
+{- git-annex assistant CredPair cache.
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# LANGUAGE BangPatterns #-}
+
+module Assistant.CredPairCache (
+ cacheCred,
+ getCachedCred,
+ expireCachedCred,
+) where
+
+import Assistant.Types.CredPairCache
+import Types.Creds
+import Assistant.Common
+import Utility.ThreadScheduler
+
+import qualified Data.Map as M
+import Control.Concurrent
+
+{- Caches a CredPair, but only for a limited time, after which it
+ - will expire.
+ -
+ - Note that repeatedly caching the same CredPair
+ - does not reset its expiry time.
+ -}
+cacheCred :: CredPair -> Seconds -> Assistant ()
+cacheCred (login, password) expireafter = do
+ cache <- getAssistant credPairCache
+ liftIO $ do
+ changeStrict cache $ M.insert login password
+ void $ forkIO $ do
+ threadDelaySeconds expireafter
+ changeStrict cache $ M.delete login
+
+getCachedCred :: Login -> Assistant (Maybe Password)
+getCachedCred login = do
+ cache <- getAssistant credPairCache
+ liftIO $ M.lookup login <$> readMVar cache
+
+expireCachedCred :: Login -> Assistant ()
+expireCachedCred login = do
+ cache <- getAssistant credPairCache
+ liftIO $ changeStrict cache $ M.delete login
+
+{- Update map strictly to avoid keeping references to old creds in memory. -}
+changeStrict :: CredPairCache -> (M.Map Login Password -> M.Map Login Password) -> IO ()
+changeStrict cache a = modifyMVar_ cache $ \m -> do
+ let !m' = a m
+ return m'
diff --git a/Assistant/DaemonStatus.hs b/Assistant/DaemonStatus.hs
index eb842b784..1ed40595e 100644
--- a/Assistant/DaemonStatus.hs
+++ b/Assistant/DaemonStatus.hs
@@ -1,6 +1,6 @@
{- git-annex assistant daemon status
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -26,6 +26,7 @@ import Data.Time.Clock.POSIX
import Data.Time
import System.Locale
import qualified Data.Map as M
+import qualified Data.Set as S
import qualified Data.Text as T
getDaemonStatus :: Assistant DaemonStatus
@@ -64,7 +65,7 @@ calcSyncRemotes = do
, syncingToCloudRemote = any iscloud syncdata
}
where
- iscloud r = not (Remote.readonly r) && Remote.availability r == Remote.GloballyAvailable
+ iscloud r = not (Remote.readonly r) && Remote.availability r == Remote.GloballyAvailable
{- Updates the syncRemotes list from the list of all remotes in Annex state. -}
updateSyncRemotes :: Assistant ()
@@ -78,6 +79,15 @@ updateSyncRemotes = do
M.filter $ \alert ->
alertName alert /= Just CloudRepoNeededAlert
+changeCurrentlyConnected :: (S.Set UUID -> S.Set UUID) -> Assistant ()
+changeCurrentlyConnected sm = do
+ modifyDaemonStatus_ $ \ds -> ds
+ { currentlyConnectedRemotes = sm (currentlyConnectedRemotes ds)
+ }
+ v <- currentlyConnectedRemotes <$> getDaemonStatus
+ debug [show v]
+ liftIO . sendNotification =<< syncRemotesNotifier <$> getDaemonStatus
+
updateScheduleLog :: Assistant ()
updateScheduleLog =
liftIO . sendNotification =<< scheduleLogNotifier <$> getDaemonStatus
diff --git a/Assistant/DeleteRemote.hs b/Assistant/DeleteRemote.hs
index cc05786e4..5b044fd18 100644
--- a/Assistant/DeleteRemote.hs
+++ b/Assistant/DeleteRemote.hs
@@ -1,6 +1,6 @@
{- git-annex assistant remote deletion utilities
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -17,7 +17,7 @@ import Logs.Location
import Assistant.DaemonStatus
import qualified Remote
import Remote.List
-import qualified Git.Remote
+import qualified Git.Remote.Remove
import Logs.Trust
import qualified Annex
@@ -34,7 +34,7 @@ disableRemote uuid = do
remote <- fromMaybe (error "unknown remote")
<$> liftAnnex (Remote.remoteFromUUID uuid)
liftAnnex $ do
- inRepo $ Git.Remote.remove (Remote.name remote)
+ inRepo $ Git.Remote.Remove.remove (Remote.name remote)
void $ remoteListRefresh
updateSyncRemotes
return remote
@@ -62,7 +62,7 @@ removableRemote urlrenderer uuid = do
<$> liftAnnex (Remote.remoteFromUUID uuid)
mapM_ (queueremaining r) keys
where
- queueremaining r k =
+ queueremaining r k =
queueTransferWhenSmall "remaining object in unwanted remote"
Nothing (Transfer Download uuid k) r
{- Scanning for keys can take a long time; do not tie up
diff --git a/Assistant/Drop.hs b/Assistant/Drop.hs
index efd74fdb3..57eef8f3a 100644
--- a/Assistant/Drop.hs
+++ b/Assistant/Drop.hs
@@ -1,6 +1,6 @@
{- git-annex assistant dropping of unwanted content
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Install.hs b/Assistant/Install.hs
index d29cefb8c..6da6d2389 100644
--- a/Assistant/Install.hs
+++ b/Assistant/Install.hs
@@ -1,6 +1,6 @@
{- Assistant installation
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -22,6 +22,9 @@ import Utility.SshConfig
import Utility.OSX
#else
import Utility.FreeDesktop
+#ifdef linux_HOST_OS
+import Utility.UserInfo
+#endif
import Assistant.Install.Menu
#endif
@@ -30,16 +33,19 @@ standaloneAppBase = getEnv "GIT_ANNEX_APP_BASE"
{- The standalone app does not have an installation process.
- So when it's run, it needs to set up autostarting of the assistant
- - daemon, as well as writing the programFile, and putting a
- - git-annex-shell wrapper into ~/.ssh
+ - daemon, as well as writing the programFile, and putting the
+ - git-annex-shell and git-annex-wrapper wrapper scripts into ~/.ssh
-
- Note that this is done every time it's started, so if the user moves
- it around, the paths this sets up won't break.
+ -
+ - File manager hook script installation is done even for
+ - packaged apps, since it has to go into the user's home directory.
-}
ensureInstalled :: IO ()
ensureInstalled = go =<< standaloneAppBase
where
- go Nothing = noop
+ go Nothing = installFileManagerHooks "git-annex"
go (Just base) = do
let program = base </> "git-annex"
programfile <- programFile
@@ -56,27 +62,98 @@ ensureInstalled = go =<< standaloneAppBase
#endif
installAutoStart program autostartfile
- {- This shim is only updated if it doesn't
- - already exist with the right content. -}
sshdir <- sshDir
- let shim = sshdir </> "git-annex-shell"
- let runshell var = "exec " ++ base </> "runshell" ++
- " git-annex-shell -c \"" ++ var ++ "\""
- let content = unlines
+ let runshell var = "exec " ++ base </> "runshell " ++ var
+ let rungitannexshell var = runshell $ "git-annex-shell -c \"" ++ var ++ "\""
+
+ installWrapper (sshdir </> "git-annex-shell") $ unlines
[ shebang_local
, "set -e"
, "if [ \"x$SSH_ORIGINAL_COMMAND\" != \"x\" ]; then"
- , runshell "$SSH_ORIGINAL_COMMAND"
+ , rungitannexshell "$SSH_ORIGINAL_COMMAND"
, "else"
- , runshell "$@"
+ , rungitannexshell "$@"
, "fi"
]
+ installWrapper (sshdir </> "git-annex-wrapper") $ unlines
+ [ shebang_local
+ , "set -e"
+ , runshell "\"$@\""
+ ]
+
+ installFileManagerHooks program
+
+installWrapper :: FilePath -> String -> IO ()
+installWrapper file content = do
+ curr <- catchDefaultIO "" $ readFileStrict file
+ when (curr /= content) $ do
+ createDirectoryIfMissing True (parentDir file)
+ viaTmp writeFile file content
+ modifyFileMode file $ addModes [ownerExecuteMode]
+
+installFileManagerHooks :: FilePath -> IO ()
+#ifdef linux_HOST_OS
+installFileManagerHooks program = do
+ let actions = ["get", "drop", "undo"]
- curr <- catchDefaultIO "" $ readFileStrict shim
- when (curr /= content) $ do
- createDirectoryIfMissing True (parentDir shim)
- viaTmp writeFile shim content
- modifyFileMode shim $ addModes [ownerExecuteMode]
+ -- Gnome
+ nautilusScriptdir <- (\d -> d </> "nautilus" </> "scripts") <$> userDataDir
+ createDirectoryIfMissing True nautilusScriptdir
+ forM_ actions $
+ genNautilusScript nautilusScriptdir
+
+ -- KDE
+ home <- myHomeDir
+ let kdeServiceMenusdir = home </> ".kde" </> "share" </> "kde4" </> "services" </> "ServiceMenus"
+ createDirectoryIfMissing True kdeServiceMenusdir
+ writeFile (kdeServiceMenusdir </> "git-annex.desktop")
+ (kdeDesktopFile actions)
+ where
+ genNautilusScript scriptdir action =
+ installscript (scriptdir </> scriptname action) $ unlines
+ [ shebang_local
+ , autoaddedcomment
+ , "exec " ++ program ++ " " ++ action ++ " --notify-start --notify-finish -- \"$@\""
+ ]
+ scriptname action = "git-annex " ++ action
+ installscript f c = whenM (safetoinstallscript f) $ do
+ writeFile f c
+ modifyFileMode f $ addModes [ownerExecuteMode]
+ safetoinstallscript f = catchDefaultIO True $
+ elem autoaddedcomment . lines <$> readFileStrict f
+ autoaddedcomment = "# " ++ autoaddedmsg ++ " (To disable, chmod 600 this file.)"
+ autoaddedmsg = "Automatically added by git-annex, do not edit."
+
+ kdeDesktopFile actions = unlines $ concat $
+ kdeDesktopHeader actions : map kdeDesktopAction actions
+ kdeDesktopHeader actions =
+ [ "# " ++ autoaddedmsg
+ , "[Desktop Entry]"
+ , "Type=Service"
+ , "ServiceTypes=all/allfiles"
+ , "MimeType=all/all;"
+ , "Actions=" ++ intercalate ";" (map kdeDesktopSection actions)
+ , "X-KDE-Priority=TopLevel"
+ , "X-KDE-Submenu=Git-Annex"
+ , "X-KDE-Icon=git-annex"
+ , "X-KDE-ServiceTypes=KonqPopupMenu/Plugin"
+ ]
+ kdeDesktopSection command = "GitAnnex" ++ command
+ kdeDesktopAction command =
+ [ ""
+ , "[Desktop Action " ++ kdeDesktopSection command ++ "]"
+ , "Name=" ++ command
+ , "Icon=git-annex"
+ , unwords
+ [ "Exec=sh -c 'cd \"$(dirname '%U')\" &&"
+ , program
+ , command
+ , "--notify-start --notify-finish -- %U'"
+ ]
+ ]
+#else
+installFileManagerHooks _ = noop
+#endif
{- Returns a cleaned up environment that lacks settings used to make the
- standalone builds use their bundled libraries and programs.
@@ -87,15 +164,15 @@ ensureInstalled = go =<< standaloneAppBase
cleanEnvironment :: IO (Maybe [(String, String)])
cleanEnvironment = clean <$> getEnvironment
where
- clean env
+ clean environ
| null vars = Nothing
- | otherwise = Just $ catMaybes $ map (restoreorig env) env
+ | otherwise = Just $ catMaybes $ map (restoreorig environ) environ
| otherwise = Nothing
where
vars = words $ fromMaybe "" $
- lookup "GIT_ANNEX_STANDLONE_ENV" env
- restoreorig oldenv p@(k, _v)
- | k `elem` vars = case lookup ("ORIG_" ++ k) oldenv of
+ lookup "GIT_ANNEX_STANDLONE_ENV" environ
+ restoreorig oldenviron p@(k, _v)
+ | k `elem` vars = case lookup ("ORIG_" ++ k) oldenviron of
(Just v')
| not (null v') -> Just (k, v')
_ -> Nothing
diff --git a/Assistant/Install/AutoStart.hs b/Assistant/Install/AutoStart.hs
index b03d20224..b27b69775 100644
--- a/Assistant/Install/AutoStart.hs
+++ b/Assistant/Install/AutoStart.hs
@@ -1,6 +1,6 @@
{- Assistant autostart file installation
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Install/Menu.hs b/Assistant/Install/Menu.hs
index d095cdd88..32393abaf 100644
--- a/Assistant/Install/Menu.hs
+++ b/Assistant/Install/Menu.hs
@@ -1,6 +1,6 @@
{- Assistant menu installation.
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/MakeRemote.hs b/Assistant/MakeRemote.hs
index 349d4af9c..a5eace724 100644
--- a/Assistant/MakeRemote.hs
+++ b/Assistant/MakeRemote.hs
@@ -1,6 +1,6 @@
{- git-annex assistant remote creation utilities
-
- - Copyright 2012, 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012, 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -48,7 +48,7 @@ makeRsyncRemote :: RemoteName -> String -> Annex String
makeRsyncRemote name location = makeRemote name location $ const $ void $
go =<< Command.InitRemote.findExisting name
where
- go Nothing = setupSpecialRemote name Rsync.remote config Nothing
+ go Nothing = setupSpecialRemote name Rsync.remote config Nothing
(Nothing, Command.InitRemote.newConfig name)
go (Just (u, c)) = setupSpecialRemote name Rsync.remote config Nothing
(Just u, c)
@@ -90,18 +90,23 @@ enableSpecialRemote name remotetype mcreds config = do
r <- Command.InitRemote.findExisting name
case r of
Nothing -> error $ "Cannot find a special remote named " ++ name
- Just (u, c) -> setupSpecialRemote name remotetype config mcreds (Just u, c)
+ Just (u, c) -> setupSpecialRemote' False name remotetype config mcreds (Just u, c)
setupSpecialRemote :: RemoteName -> RemoteType -> R.RemoteConfig -> Maybe CredPair -> (Maybe UUID, R.RemoteConfig) -> Annex RemoteName
-setupSpecialRemote name remotetype config mcreds (mu, c) = do
+setupSpecialRemote = setupSpecialRemote' True
+
+setupSpecialRemote' :: Bool -> RemoteName -> RemoteType -> R.RemoteConfig -> Maybe CredPair -> (Maybe UUID, R.RemoteConfig) -> Annex RemoteName
+setupSpecialRemote' setdesc name remotetype config mcreds (mu, c) = do
{- Currently, only 'weak' ciphers can be generated from the
- assistant, because otherwise GnuPG may block once the entropy
- pool is drained, and as of now there's no way to tell the user
- to perform IO actions to refill the pool. -}
(c', u) <- R.setup remotetype mu mcreds $
M.insert "highRandomQuality" "false" $ M.union config c
- describeUUID u name
configSet u c'
+ when setdesc $
+ whenM (isNothing . M.lookup u <$> uuidMap) $
+ describeUUID u name
return name
{- Returns the name of the git remote it created. If there's already a
diff --git a/Assistant/Monad.hs b/Assistant/Monad.hs
index 7c28c7f6f..a34264a01 100644
--- a/Assistant/Monad.hs
+++ b/Assistant/Monad.hs
@@ -1,6 +1,6 @@
{- git-annex assistant monad
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -43,6 +43,8 @@ import Assistant.Types.RepoProblem
import Assistant.Types.Buddies
import Assistant.Types.NetMessager
import Assistant.Types.ThreadName
+import Assistant.Types.RemoteControl
+import Assistant.Types.CredPairCache
newtype Assistant a = Assistant { mkAssistant :: ReaderT AssistantData IO a }
deriving (
@@ -68,6 +70,8 @@ data AssistantData = AssistantData
, branchChangeHandle :: BranchChangeHandle
, buddyList :: BuddyList
, netMessager :: NetMessager
+ , remoteControl :: RemoteControl
+ , credPairCache :: CredPairCache
}
newAssistantData :: ThreadState -> DaemonStatusHandle -> IO AssistantData
@@ -86,6 +90,8 @@ newAssistantData st dstatus = AssistantData
<*> newBranchChangeHandle
<*> newBuddyList
<*> newNetMessager
+ <*> newRemoteControl
+ <*> newCredPairCache
runAssistant :: AssistantData -> Assistant a -> IO a
runAssistant d a = runReaderT (mkAssistant a) d
diff --git a/Assistant/NamedThread.hs b/Assistant/NamedThread.hs
index e1b3983f7..f80953053 100644
--- a/Assistant/NamedThread.hs
+++ b/Assistant/NamedThread.hs
@@ -1,6 +1,6 @@
{- git-annex assistant named threads.
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/NetMessager.hs b/Assistant/NetMessager.hs
index acb18b648..dd1811141 100644
--- a/Assistant/NetMessager.hs
+++ b/Assistant/NetMessager.hs
@@ -1,6 +1,6 @@
{- git-annex assistant out of band network messager interface
-
- - Copyright 2012-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -80,7 +80,7 @@ checkImportantNetMessages (storedclient, sentclient) = go <<~ netMessager
queuePushInitiation :: NetMessage -> Assistant ()
queuePushInitiation msg@(Pushing clientid stage) = do
tv <- getPushInitiationQueue side
- liftIO $ atomically $ do
+ liftIO $ atomically $ do
r <- tryTakeTMVar tv
case r of
Nothing -> putTMVar tv [msg]
@@ -88,7 +88,7 @@ queuePushInitiation msg@(Pushing clientid stage) = do
let !l' = msg : filter differentclient l
putTMVar tv l'
where
- side = pushDestinationSide stage
+ side = pushDestinationSide stage
differentclient (Pushing cid _) = cid /= clientid
differentclient _ = True
queuePushInitiation _ = noop
diff --git a/Assistant/Pairing.hs b/Assistant/Pairing.hs
index bb1384a15..b24e5fdb6 100644
--- a/Assistant/Pairing.hs
+++ b/Assistant/Pairing.hs
@@ -1,6 +1,6 @@
{- git-annex assistant repo pairing, core data types
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -58,6 +58,15 @@ data PairData = PairData
}
deriving (Eq, Read, Show)
+checkSane :: PairData -> Bool
+checkSane p = all (not . any isControl)
+ [ fromMaybe "" (remoteHostName p)
+ , remoteUserName p
+ , remoteDirectory p
+ , remoteSshPubKey p
+ , fromUUID (pairUUID p)
+ ]
+
type UserName = String
{- A pairing that is in progress has a secret, a thread that is
diff --git a/Assistant/Pairing/MakeRemote.hs b/Assistant/Pairing/MakeRemote.hs
index 3f3823664..05533e270 100644
--- a/Assistant/Pairing/MakeRemote.hs
+++ b/Assistant/Pairing/MakeRemote.hs
@@ -1,6 +1,6 @@
{- git-annex assistant pairing remote creation
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -23,12 +23,11 @@ import qualified Data.Text as T
{- Authorized keys are set up before pairing is complete, so that the other
- side can immediately begin syncing. -}
setupAuthorizedKeys :: PairMsg -> FilePath -> IO ()
-setupAuthorizedKeys msg repodir = do
- validateSshPubKey pubkey
- unlessM (liftIO $ addAuthorizedKeys True repodir pubkey) $
- error "failed setting up ssh authorized keys"
- where
- pubkey = remoteSshPubKey $ pairMsgData msg
+setupAuthorizedKeys msg repodir = case validateSshPubKey $ remoteSshPubKey $ pairMsgData msg of
+ Left err -> error err
+ Right pubkey ->
+ unlessM (liftIO $ addAuthorizedKeys True repodir pubkey) $
+ error "failed setting up ssh authorized keys"
{- When local pairing is complete, this is used to set up the remote for
- the host we paired with. -}
diff --git a/Assistant/Pairing/Network.hs b/Assistant/Pairing/Network.hs
index 6c625f881..7a4ac3ffe 100644
--- a/Assistant/Pairing/Network.hs
+++ b/Assistant/Pairing/Network.hs
@@ -4,7 +4,7 @@
- each message is repeated until acknowledged. This is done using a
- thread, that gets stopped before the next message is sent.
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -20,7 +20,6 @@ import Utility.Verifiable
import Network.Multicast
import Network.Info
import Network.Socket
-import Control.Exception (bracket)
import qualified Data.Map as M
import Control.Concurrent
diff --git a/Assistant/Pushes.hs b/Assistant/Pushes.hs
index 54f31a84b..7b4de450f 100644
--- a/Assistant/Pushes.hs
+++ b/Assistant/Pushes.hs
@@ -1,6 +1,6 @@
{- git-annex assistant push tracking
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/RemoteControl.hs b/Assistant/RemoteControl.hs
new file mode 100644
index 000000000..1016f1169
--- /dev/null
+++ b/Assistant/RemoteControl.hs
@@ -0,0 +1,21 @@
+{- git-annex assistant RemoteDaemon control
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Assistant.RemoteControl (
+ sendRemoteControl,
+ RemoteDaemon.Consumed(..)
+) where
+
+import Assistant.Common
+import qualified RemoteDaemon.Types as RemoteDaemon
+
+import Control.Concurrent
+
+sendRemoteControl :: RemoteDaemon.Consumed -> Assistant ()
+sendRemoteControl msg = do
+ clicker <- getAssistant remoteControl
+ liftIO $ writeChan clicker msg
diff --git a/Assistant/RepoProblem.hs b/Assistant/RepoProblem.hs
index 6913fefc6..32595916e 100644
--- a/Assistant/RepoProblem.hs
+++ b/Assistant/RepoProblem.hs
@@ -1,6 +1,6 @@
{- git-annex assistant remote problem handling
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/ScanRemotes.hs b/Assistant/ScanRemotes.hs
index 2743c0f36..0ce7a47cc 100644
--- a/Assistant/ScanRemotes.hs
+++ b/Assistant/ScanRemotes.hs
@@ -1,6 +1,6 @@
{- git-annex assistant remotes needing scanning
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Ssh.hs b/Assistant/Ssh.hs
index acb2fc11c..88afec713 100644
--- a/Assistant/Ssh.hs
+++ b/Assistant/Ssh.hs
@@ -1,6 +1,6 @@
{- git-annex assistant ssh utilities
-
- - Copyright 2012-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -92,7 +92,7 @@ parseSshUrl u
, sshCapabilities = []
}
where
- (user, host) = if '@' `elem` userhost
+ (user, host) = if '@' `elem` userhost
then separate (== '@') userhost
else ("", userhost)
fromrsync s
@@ -111,34 +111,26 @@ sshTranscript :: [String] -> (Maybe String) -> IO (String, Bool)
sshTranscript opts input = processTranscript "ssh" opts input
{- Ensure that the ssh public key doesn't include any ssh options, like
- - command=foo, or other weirdness -}
-validateSshPubKey :: SshPubKey -> IO ()
+ - command=foo, or other weirdness.
+ -
+ - The returned version of the key has its comment removed.
+ -}
+validateSshPubKey :: SshPubKey -> Either String SshPubKey
validateSshPubKey pubkey
- | length (lines pubkey) == 1 =
- either error return $ check $ words pubkey
- | otherwise = error "too many lines in ssh public key"
+ | length (lines pubkey) == 1 = check $ words pubkey
+ | otherwise = Left "too many lines in ssh public key"
where
- check [prefix, _key, comment] = do
- checkprefix prefix
- checkcomment comment
- check [prefix, _key] =
- checkprefix prefix
+ check (prefix:key:_) = checkprefix prefix (unwords [prefix, key])
check _ = err "wrong number of words in ssh public key"
- ok = Right ()
err msg = Left $ unwords [msg, pubkey]
- checkprefix prefix
- | ssh == "ssh" && all isAlphaNum keytype = ok
+ checkprefix prefix validpubkey
+ | ssh == "ssh" && all isAlphaNum keytype = Right validpubkey
| otherwise = err "bad ssh public key prefix"
where
(ssh, keytype) = separate (== '-') prefix
- checkcomment comment = case filter (not . safeincomment) comment of
- [] -> ok
- badstuff -> err $ "bad comment in ssh public key (contains: \"" ++ badstuff ++ "\")"
- safeincomment c = isAlphaNum c || c == '@' || c == '-' || c == '_' || c == '.'
-
addAuthorizedKeys :: Bool -> FilePath -> SshPubKey -> IO Bool
addAuthorizedKeys gitannexshellonly dir pubkey = boolSystem "sh"
[ Param "-c" , Param $ addAuthorizedKeysCommand gitannexshellonly dir pubkey ]
@@ -197,7 +189,7 @@ authorizedKeysLine gitannexshellonly dir pubkey
- long perl script. -}
| otherwise = pubkey
where
- limitcommand = "command=\"GIT_ANNEX_SHELL_DIRECTORY="++shellEscape dir++" ~/.ssh/git-annex-shell\",no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-pty "
+ limitcommand = "command=\"env GIT_ANNEX_SHELL_DIRECTORY="++shellEscape dir++" ~/.ssh/git-annex-shell\",no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-pty "
{- Generates a ssh key pair. -}
genSshKeyPair :: IO SshKeyPair
@@ -260,7 +252,7 @@ setupSshKeyPair sshkeypair sshdata = do
fixSshKeyPairIdentitiesOnly :: IO ()
fixSshKeyPairIdentitiesOnly = changeUserSshConfig $ unlines . go [] . lines
where
- go c [] = reverse c
+ go c [] = reverse c
go c (l:[])
| all (`isInfixOf` l) indicators = go (fixedline l:l:c) []
| otherwise = go (l:c) []
@@ -268,7 +260,7 @@ fixSshKeyPairIdentitiesOnly = changeUserSshConfig $ unlines . go [] . lines
| all (`isInfixOf` l) indicators && not ("IdentitiesOnly" `isInfixOf` next) =
go (fixedline l:l:c) (next:rest)
| otherwise = go (l:c) (next:rest)
- indicators = ["IdentityFile", "key.git-annex"]
+ indicators = ["IdentityFile", "key.git-annex"]
fixedline tmpl = takeWhile isSpace tmpl ++ "IdentitiesOnly yes"
{- Add StrictHostKeyChecking to any ssh config stanzas that were written
@@ -312,7 +304,7 @@ setSshConfig sshdata config = do
{- This hostname is specific to a given repository on the ssh host,
- so it is based on the real hostname, the username, and the directory.
-
- - The mangled hostname has the form "git-annex-realhostname-username_dir".
+ - The mangled hostname has the form "git-annex-realhostname-username-port_dir".
- The only use of "-" is to separate the parts shown; this is necessary
- to allow unMangleSshHostName to work. Any unusual characters in the
- username or directory are url encoded, except using "." rather than "%"
@@ -324,6 +316,7 @@ mangleSshHostName sshdata = "git-annex-" ++ T.unpack (sshHostName sshdata)
where
extra = intercalate "_" $ map T.unpack $ catMaybes
[ sshUserName sshdata
+ , Just $ T.pack $ show $ sshPort sshdata
, Just $ sshDirectory sshdata
]
safe c
diff --git a/Assistant/Sync.hs b/Assistant/Sync.hs
index fc95419ab..d914d2246 100644
--- a/Assistant/Sync.hs
+++ b/Assistant/Sync.hs
@@ -1,6 +1,6 @@
{- git-annex assistant repo syncing
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -15,6 +15,7 @@ import Assistant.Alert
import Assistant.Alert.Utility
import Assistant.DaemonStatus
import Assistant.ScanRemotes
+import Assistant.RemoteControl
import qualified Command.Sync
import Utility.Parallel
import qualified Git
@@ -95,7 +96,7 @@ reconnectRemotes notifypushes rs = void $ do
=<< fromMaybe [] . M.lookup (Remote.uuid r) . connectRemoteNotifiers
<$> getDaemonStatus
-{- Updates the local sync branch, then pushes it to all remotes, in
+{- Pushes the local sync branch to all remotes, in
- parallel, along with the git-annex branch. This is the same
- as "git annex sync", except in parallel, and will co-exist with use of
- "git annex sync".
@@ -147,7 +148,6 @@ pushToRemotes' now notifypushes remotes = do
go _ _ _ _ [] = return [] -- no remotes, so nothing to do
go shouldretry (Just branch) g u rs = do
debug ["pushing to", show rs]
- liftIO $ Command.Sync.updateBranch (Command.Sync.syncBranch branch) g
(succeeded, failed) <- liftIO $ inParallel (push g branch) rs
updatemap succeeded []
if null failed
@@ -258,6 +258,7 @@ changeSyncable Nothing enable = do
changeSyncable (Just r) True = do
liftAnnex $ changeSyncFlag r True
syncRemote r
+ sendRemoteControl RELOAD
changeSyncable (Just r) False = do
liftAnnex $ changeSyncFlag r False
updateSyncRemotes
diff --git a/Assistant/Threads/Committer.hs b/Assistant/Threads/Committer.hs
index cb98b017f..8cf6da2d2 100644
--- a/Assistant/Threads/Committer.hs
+++ b/Assistant/Threads/Committer.hs
@@ -1,6 +1,6 @@
{- git-annex assistant commit thread
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -27,7 +27,6 @@ import qualified Utility.Lsof as Lsof
import qualified Utility.DirWatcher as DirWatcher
import Types.KeySource
import Config
-import Annex.Exception
import Annex.Content
import Annex.Link
import Annex.CatFile
@@ -35,6 +34,7 @@ import qualified Annex
import Utility.InodeCache
import Annex.Content.Direct
import qualified Command.Sync
+import qualified Git.Branch
import Data.Time.Clock
import Data.Tuple.Utils
@@ -50,6 +50,7 @@ commitThread = namedThread "Committer" $ do
delayadd <- liftAnnex $
maybe delayaddDefault (return . Just . Seconds)
=<< annexDelayAdd <$> Annex.getGitConfig
+ msg <- liftAnnex Command.Sync.commitMsg
waitChangeTime $ \(changes, time) -> do
readychanges <- handleAdds havelsof delayadd changes
if shouldCommit False time (length readychanges) readychanges
@@ -60,7 +61,7 @@ commitThread = namedThread "Committer" $ do
, "changes"
]
void $ alertWhile commitAlert $
- liftAnnex commitStaged
+ liftAnnex $ commitStaged msg
recordCommit
let numchanges = length readychanges
mapM_ checkChangeContent readychanges
@@ -164,8 +165,8 @@ waitChangeTime a = waitchanges 0
-}
aftermaxcommit oldchanges = loop (30 :: Int)
where
- loop 0 = continue oldchanges
- loop n = do
+ loop 0 = continue oldchanges
+ loop n = do
liftAnnex noop -- ensure Annex state is free
liftIO $ threadDelaySeconds (Seconds 1)
changes <- getAnyChanges
@@ -212,14 +213,18 @@ shouldCommit scanning now len changes
recentchanges = filter thissecond changes
timeDelta c = now `diffUTCTime` changeTime c
-commitStaged :: Annex Bool
-commitStaged = do
+commitStaged :: String -> Annex Bool
+commitStaged msg = do
{- This could fail if there's another commit being made by
- something else. -}
- v <- tryAnnex Annex.Queue.flush
+ v <- tryNonAsync Annex.Queue.flush
case v of
Left _ -> return False
- Right _ -> Command.Sync.commitStaged ""
+ Right _ -> do
+ ok <- Command.Sync.commitStaged Git.Branch.AutomaticCommit msg
+ when ok $
+ Command.Sync.updateSyncBranch =<< inRepo Git.Branch.current
+ return ok
{- OSX needs a short delay after a file is added before locking it down,
- when using a non-direct mode repository, as pasting a file seems to
@@ -297,7 +302,7 @@ handleAdds havelsof delayadd cs = returnWhen (null incomplete) $ do
add change@(InProcessAddChange { keySource = ks }) =
catchDefaultIO Nothing <~> doadd
where
- doadd = sanitycheck ks $ do
+ doadd = sanitycheck ks $ do
(mkey, mcache) <- liftAnnex $ do
showStart "add" $ keyFilename ks
Command.Add.ingest $ Just ks
@@ -313,10 +318,11 @@ handleAdds havelsof delayadd cs = returnWhen (null incomplete) $ do
adddirect toadd = do
ct <- liftAnnex compareInodeCachesWith
m <- liftAnnex $ removedKeysMap ct cs
+ delta <- liftAnnex getTSDelta
if M.null m
then forM toadd add
else forM toadd $ \c -> do
- mcache <- liftIO $ genInodeCache $ changeFile c
+ mcache <- liftIO $ genInodeCache (changeFile c) delta
case mcache of
Nothing -> add c
Just cache ->
@@ -347,7 +353,7 @@ handleAdds havelsof delayadd cs = returnWhen (null incomplete) $ do
done change mcache file key = liftAnnex $ do
logStatus key InfoPresent
link <- ifM isDirect
- ( inRepo $ gitAnnexLink file key
+ ( calcRepo $ gitAnnexLink file key
, Command.Add.link file key mcache
)
whenM (pure DirWatcher.eventsCoalesce <||> isDirect) $
diff --git a/Assistant/Threads/ConfigMonitor.hs b/Assistant/Threads/ConfigMonitor.hs
index a92c7d785..7ab55fb82 100644
--- a/Assistant/Threads/ConfigMonitor.hs
+++ b/Assistant/Threads/ConfigMonitor.hs
@@ -1,6 +1,6 @@
{- git-annex assistant config monitor thread
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -62,15 +62,17 @@ configFilesActions =
, (groupLog, void $ liftAnnex groupMapLoad)
, (numcopiesLog, void $ liftAnnex globalNumCopiesLoad)
, (scheduleLog, void updateScheduleLog)
- -- Preferred content settings depend on most of the other configs,
- -- so will be reloaded whenever any configs change.
+ -- Preferred and required content settings depend on most of the
+ -- other configs, so will be reloaded whenever any configs change.
, (preferredContentLog, noop)
+ , (requiredContentLog, noop)
+ , (groupPreferredContentLog, noop)
]
reloadConfigs :: Configs -> Assistant ()
reloadConfigs changedconfigs = do
sequence_ as
- void $ liftAnnex preferredContentMapLoad
+ void $ liftAnnex preferredRequiredMapsLoad
{- Changes to the remote log, or the trust log, can affect the
- syncRemotes list. Changes to the uuid log may affect its
- display so are also included. -}
diff --git a/Assistant/Threads/Cronner.hs b/Assistant/Threads/Cronner.hs
index 55b3ca2f1..451fa75c6 100644
--- a/Assistant/Threads/Cronner.hs
+++ b/Assistant/Threads/Cronner.hs
@@ -1,6 +1,6 @@
{- git-annex assistant sceduled jobs runner
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -87,7 +87,7 @@ cronnerThread urlrenderer = namedThreadUnchecked "Cronner" $ do
liftIO $ waitNotification h
debug ["reloading changed activities"]
go h amap' nmap'
- startactivities as lastruntimes = forM as $ \activity ->
+ startactivities as lastruntimes = forM as $ \activity ->
case connectActivityUUID activity of
Nothing -> do
runner <- asIO2 (sleepingActivityThread urlrenderer)
@@ -108,8 +108,8 @@ cronnerThread urlrenderer = namedThreadUnchecked "Cronner" $ do
sleepingActivityThread :: UrlRenderer -> ScheduledActivity -> Maybe LocalTime -> Assistant ()
sleepingActivityThread urlrenderer activity lasttime = go lasttime =<< getnexttime lasttime
where
- getnexttime = liftIO . nextTime schedule
- go _ Nothing = debug ["no scheduled events left for", desc]
+ getnexttime = liftIO . nextTime schedule
+ go _ Nothing = debug ["no scheduled events left for", desc]
go l (Just (NextTimeExactly t)) = waitrun l t Nothing
go l (Just (NextTimeWindow windowstart windowend)) =
waitrun l windowstart (Just windowend)
@@ -129,7 +129,7 @@ sleepingActivityThread urlrenderer activity lasttime = go lasttime =<< getnextti
go l =<< getnexttime l
else run nowt
where
- tolate nowt tz = case mmaxt of
+ tolate nowt tz = case mmaxt of
Just maxt -> nowt > maxt
-- allow the job to start 10 minutes late
Nothing ->diffUTCTime
@@ -191,10 +191,10 @@ runActivity' urlrenderer (ScheduledSelfFsck _ d) = do
mapM_ reget =<< liftAnnex (dirKeys gitAnnexBadDir)
where
reget k = queueTransfers "fsck found bad file; redownloading" Next k Nothing Download
-runActivity' urlrenderer (ScheduledRemoteFsck u s d) = handle =<< liftAnnex (remoteFromUUID u)
+runActivity' urlrenderer (ScheduledRemoteFsck u s d) = dispatch =<< liftAnnex (remoteFromUUID u)
where
- handle Nothing = debug ["skipping remote fsck of uuid without a configured remote", fromUUID u, fromSchedule s]
- handle (Just rmt) = void $ case Remote.remoteFsck rmt of
+ dispatch Nothing = debug ["skipping remote fsck of uuid without a configured remote", fromUUID u, fromSchedule s]
+ dispatch (Just rmt) = void $ case Remote.remoteFsck rmt of
Nothing -> go rmt $ do
program <- readProgramFile
void $ batchCommand program $
diff --git a/Assistant/Threads/DaemonStatus.hs b/Assistant/Threads/DaemonStatus.hs
index 5bbb15acb..d5b2cc25d 100644
--- a/Assistant/Threads/DaemonStatus.hs
+++ b/Assistant/Threads/DaemonStatus.hs
@@ -1,6 +1,6 @@
{- git-annex assistant daemon status thread
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Threads/Glacier.hs b/Assistant/Threads/Glacier.hs
index 4c4012a67..900e0d423 100644
--- a/Assistant/Threads/Glacier.hs
+++ b/Assistant/Threads/Glacier.hs
@@ -1,6 +1,6 @@
{- git-annex assistant Amazon Glacier retrieval
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Threads/Merger.hs b/Assistant/Threads/Merger.hs
index 03bcf0aad..f1a64925d 100644
--- a/Assistant/Threads/Merger.hs
+++ b/Assistant/Threads/Merger.hs
@@ -1,6 +1,6 @@
{- git-annex assistant git merge thread
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -78,12 +78,13 @@ onChange file
changedbranch = fileToBranch file
mergecurrent (Just current)
- | equivBranches changedbranch current = do
- debug
- [ "merging", Git.fromRef changedbranch
- , "into", Git.fromRef current
- ]
- void $ liftAnnex $ autoMergeFrom changedbranch (Just current)
+ | equivBranches changedbranch current =
+ whenM (liftAnnex $ inRepo $ Git.Branch.changed current changedbranch) $ do
+ debug
+ [ "merging", Git.fromRef changedbranch
+ , "into", Git.fromRef current
+ ]
+ void $ liftAnnex $ autoMergeFrom changedbranch (Just current) Git.Branch.AutomaticCommit
mergecurrent _ = noop
handleDesynced = case fromTaggedBranch changedbranch of
diff --git a/Assistant/Threads/MountWatcher.hs b/Assistant/Threads/MountWatcher.hs
index 39ae67537..023af53cb 100644
--- a/Assistant/Threads/MountWatcher.hs
+++ b/Assistant/Threads/MountWatcher.hs
@@ -1,6 +1,6 @@
{- git-annex assistant mount watcher, using either dbus or mtab polling
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -63,7 +63,11 @@ dbusThread urlrenderer = do
wasmounted <- liftIO $ swapMVar mvar nowmounted
handleMounts urlrenderer wasmounted nowmounted
liftIO $ forM_ mountChanged $ \matcher ->
+#if MIN_VERSION_dbus(0,10,7)
+ void $ addMatch client matcher handleevent
+#else
listen client matcher handleevent
+#endif
, do
liftAnnex $
warning "No known volume monitor available through dbus; falling back to mtab polling"
diff --git a/Assistant/Threads/NetWatcher.hs b/Assistant/Threads/NetWatcher.hs
index 0b009647c..ad3a87a91 100644
--- a/Assistant/Threads/NetWatcher.hs
+++ b/Assistant/Threads/NetWatcher.hs
@@ -1,6 +1,6 @@
{- git-annex assistant network connection watcher, using dbus
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -18,10 +18,10 @@ import Assistant.DaemonStatus
import Utility.NotificationBroadcaster
#if WITH_DBUS
+import Assistant.RemoteControl
import Utility.DBus
import DBus.Client
import DBus
-import Data.Word (Word32)
import Assistant.NetMessager
#else
#ifdef linux_HOST_OS
@@ -44,8 +44,9 @@ netWatcherThread = thread noop
- while (despite the local network staying up), are synced with
- periodically.
-
- - Note that it does not call notifyNetMessagerRestart, because
- - it doesn't know that the network has changed.
+ - Note that it does not call notifyNetMessagerRestart, or
+ - signal the RemoteControl, because it doesn't know that the
+ - network has changed.
-}
netWatcherFallbackThread :: NamedThread
netWatcherFallbackThread = namedThread "NetWatcherFallback" $
@@ -61,16 +62,22 @@ dbusThread = do
where
go client = ifM (checkNetMonitor client)
( do
- listenNMConnections client <~> handleconn
- listenWicdConnections client <~> handleconn
+ callback <- asIO1 connchange
+ liftIO $ do
+ listenNMConnections client callback
+ listenWicdConnections client callback
, do
liftAnnex $
warning "No known network monitor available through dbus; falling back to polling"
)
- handleconn = do
+ connchange False = do
+ debug ["detected network disconnection"]
+ sendRemoteControl LOSTNET
+ connchange True = do
debug ["detected network connection"]
notifyNetMessagerRestart
handleConnection
+ sendRemoteControl RESUME
onerr e _ = do
liftAnnex $
warning $ "lost dbus connection; falling back to polling (" ++ show e ++ ")"
@@ -95,38 +102,75 @@ checkNetMonitor client = do
networkmanager = "org.freedesktop.NetworkManager"
wicd = "org.wicd.daemon"
-{- Listens for new NetworkManager connections. -}
-listenNMConnections :: Client -> IO () -> IO ()
-listenNMConnections client callback =
- listen client matcher $ \event ->
- when (Just True == anyM activeconnection (signalBody event)) $
- callback
+{- Listens for NetworkManager connections and diconnections.
+ -
+ - Connection example (once fully connected):
+ - [Variant {"ActivatingConnection": Variant (ObjectPath "/"), "PrimaryConnection": Variant (ObjectPath "/org/freedesktop/NetworkManager/ActiveConnection/34"), "State": Variant 70}]
+ -
+ - Disconnection example:
+ - [Variant {"ActiveConnections": Variant []}]
+ -}
+listenNMConnections :: Client -> (Bool -> IO ()) -> IO ()
+listenNMConnections client setconnected =
+#if MIN_VERSION_dbus(0,10,7)
+ void $ addMatch client matcher
+#else
+ listen client matcher
+#endif
+ $ \event -> mapM_ handleevent
+ (map dictionaryItems $ mapMaybe fromVariant $ signalBody event)
where
matcher = matchAny
- { matchInterface = Just "org.freedesktop.NetworkManager.Connection.Active"
+ { matchInterface = Just "org.freedesktop.NetworkManager"
, matchMember = Just "PropertiesChanged"
}
- nm_connection_activated = toVariant (2 :: Word32)
- nm_state_key = toVariant ("State" :: String)
- activeconnection v = do
- m <- fromVariant v
- vstate <- lookup nm_state_key $ dictionaryItems m
- state <- fromVariant vstate
- return $ state == nm_connection_activated
+ nm_active_connections_key = toVariant ("ActiveConnections" :: String)
+ nm_activatingconnection_key = toVariant ("ActivatingConnection" :: String)
+ noconnections = Just $ toVariant $ toVariant ([] :: [ObjectPath])
+ rootconnection = Just $ toVariant $ toVariant $ objectPath_ "/"
+ handleevent m
+ | lookup nm_active_connections_key m == noconnections =
+ setconnected False
+ | lookup nm_activatingconnection_key m == rootconnection =
+ setconnected True
+ | otherwise = noop
-{- Listens for new Wicd connections. -}
-listenWicdConnections :: Client -> IO () -> IO ()
-listenWicdConnections client callback =
- listen client matcher $ \event ->
+{- Listens for Wicd connections and disconnections.
+ -
+ - Connection example:
+ - ConnectResultsSent:
+ - Variant "success"
+ -
+ - Diconnection example:
+ - StatusChanged
+ - [Variant 0, Variant [Varient ""]]
+ -}
+listenWicdConnections :: Client -> (Bool -> IO ()) -> IO ()
+listenWicdConnections client setconnected = do
+ match connmatcher $ \event ->
when (any (== wicd_success) (signalBody event)) $
- callback
+ setconnected True
+ match statusmatcher $ \event -> handleevent (signalBody event)
where
- matcher = matchAny
+ connmatcher = matchAny
{ matchInterface = Just "org.wicd.daemon"
, matchMember = Just "ConnectResultsSent"
}
+ statusmatcher = matchAny
+ { matchInterface = Just "org.wicd.daemon"
+ , matchMember = Just "StatusChanged"
+ }
wicd_success = toVariant ("success" :: String)
-
+ wicd_disconnected = toVariant [toVariant ("" :: String)]
+ handleevent status
+ | any (== wicd_disconnected) status = setconnected False
+ | otherwise = noop
+ match matcher a =
+#if MIN_VERSION_dbus(0,10,7)
+ void $ addMatch client matcher a
+#else
+ listen client matcher a
+#endif
#endif
handleConnection :: Assistant ()
diff --git a/Assistant/Threads/PairListener.hs b/Assistant/Threads/PairListener.hs
index cd95ab5a4..e4f87494c 100644
--- a/Assistant/Threads/PairListener.hs
+++ b/Assistant/Threads/PairListener.hs
@@ -1,6 +1,6 @@
{- git-annex assistant thread to listen for incoming pairing traffic
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -16,13 +16,11 @@ import Assistant.WebApp.Types
import Assistant.Alert
import Assistant.DaemonStatus
import Utility.ThreadScheduler
-import Utility.Format
import Git
import Network.Multicast
import Network.Socket
import qualified Data.Text as T
-import Data.Char
pairListenerThread :: UrlRenderer -> NamedThread
pairListenerThread urlrenderer = namedThread "PairListener" $ do
@@ -39,16 +37,18 @@ pairListenerThread urlrenderer = namedThread "PairListener" $ do
Nothing -> go reqs cache sock
Just m -> do
debug ["received", show msg]
- sane <- checkSane msg
(pip, verified) <- verificationCheck m
=<< (pairingInProgress <$> getDaemonStatus)
let wrongstage = maybe False (\p -> pairMsgStage m <= inProgressPairStage p) pip
let fromus = maybe False (\p -> remoteSshPubKey (pairMsgData m) == remoteSshPubKey (inProgressPairData p)) pip
- case (wrongstage, fromus, sane, pairMsgStage m) of
+ case (wrongstage, fromus, checkSane (pairMsgData m), pairMsgStage m) of
(_, True, _, _) -> do
debug ["ignoring message that looped back"]
go reqs cache sock
- (_, _, False, _) -> go reqs cache sock
+ (_, _, False, _) -> do
+ liftAnnex $ warning
+ "illegal control characters in pairing message; ignoring"
+ go reqs cache sock
-- PairReq starts a pairing process, so a
-- new one is always heeded, even if
-- some other pairing is in process.
@@ -83,19 +83,10 @@ pairListenerThread urlrenderer = namedThread "PairListener" $ do
"detected possible pairing brute force attempt; disabled pairing"
stopSending pip
return (Nothing, False)
- |otherwise = return (Just pip, verified && sameuuid)
+ | otherwise = return (Just pip, verified && sameuuid)
where
verified = verifiedPairMsg m pip
sameuuid = pairUUID (inProgressPairData pip) == pairUUID (pairMsgData m)
-
- checkSane msg
- {- Control characters could be used in a
- - console poisoning attack. -}
- | any isControl (filter (/= '\n') (decode_c msg)) = do
- liftAnnex $ warning
- "illegal control characters in pairing message; ignoring"
- return False
- | otherwise = return True
{- PairReqs invalidate the cache of recently finished pairings.
- This is so that, if a new pairing is started with the
diff --git a/Assistant/Threads/ProblemFixer.hs b/Assistant/Threads/ProblemFixer.hs
index 8095581a6..86ee027f7 100644
--- a/Assistant/Threads/ProblemFixer.hs
+++ b/Assistant/Threads/ProblemFixer.hs
@@ -1,6 +1,6 @@
{- git-annex assistant thread to handle fixing problems with repositories
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Threads/Pusher.hs b/Assistant/Threads/Pusher.hs
index 3ec922fe4..35989ed48 100644
--- a/Assistant/Threads/Pusher.hs
+++ b/Assistant/Threads/Pusher.hs
@@ -1,6 +1,6 @@
{- git-annex assistant git pushing thread
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Threads/RemoteControl.hs b/Assistant/Threads/RemoteControl.hs
new file mode 100644
index 000000000..ae63aff5c
--- /dev/null
+++ b/Assistant/Threads/RemoteControl.hs
@@ -0,0 +1,121 @@
+{- git-annex assistant communication with remotedaemon
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Assistant.Threads.RemoteControl where
+
+import Assistant.Common
+import RemoteDaemon.Types
+import Config.Files
+import Utility.Batch
+import Utility.SimpleProtocol
+import Assistant.Alert
+import Assistant.Alert.Utility
+import Assistant.DaemonStatus
+import qualified Git
+import qualified Git.Types as Git
+import qualified Remote
+import qualified Types.Remote as Remote
+
+import Control.Concurrent
+import Control.Concurrent.Async
+import Network.URI
+import qualified Data.Map as M
+import qualified Data.Set as S
+
+remoteControlThread :: NamedThread
+remoteControlThread = namedThread "RemoteControl" $ do
+ program <- liftIO readProgramFile
+ (cmd, params) <- liftIO $ toBatchCommand
+ (program, [Param "remotedaemon"])
+ let p = proc cmd (toCommand params)
+ (Just toh, Just fromh, _, pid) <- liftIO $ createProcess p
+ { std_in = CreatePipe
+ , std_out = CreatePipe
+ }
+
+ urimap <- liftIO . newMVar =<< liftAnnex getURIMap
+
+ controller <- asIO $ remoteControllerThread toh
+ responder <- asIO $ remoteResponderThread fromh urimap
+
+ -- run controller and responder until the remotedaemon dies
+ liftIO $ void $ tryNonAsync $ controller `concurrently` responder
+ debug ["remotedaemon exited"]
+ liftIO $ forceSuccessProcess p pid
+
+-- feed from the remoteControl channel into the remotedaemon
+remoteControllerThread :: Handle -> Assistant ()
+remoteControllerThread toh = do
+ clicker <- getAssistant remoteControl
+ forever $ do
+ msg <- liftIO $ readChan clicker
+ debug [show msg]
+ liftIO $ do
+ hPutStrLn toh $ unwords $ formatMessage msg
+ hFlush toh
+
+-- read status messages emitted by the remotedaemon and handle them
+remoteResponderThread :: Handle -> MVar (M.Map URI Remote) -> Assistant ()
+remoteResponderThread fromh urimap = go M.empty
+ where
+ go syncalerts = do
+ l <- liftIO $ hGetLine fromh
+ debug [l]
+ case parseMessage l of
+ Just (CONNECTED uri) -> changeconnected S.insert uri
+ Just (DISCONNECTED uri) -> changeconnected S.delete uri
+ Just (SYNCING uri) -> withr uri $ \r ->
+ if M.member (Remote.uuid r) syncalerts
+ then go syncalerts
+ else do
+ i <- addAlert $ syncAlert [r]
+ go (M.insert (Remote.uuid r) i syncalerts)
+ Just (DONESYNCING uri status) -> withr uri $ \r ->
+ case M.lookup (Remote.uuid r) syncalerts of
+ Nothing -> cont
+ Just i -> do
+ let (succeeded, failed) = if status
+ then ([r], [])
+ else ([], [r])
+ updateAlertMap $ mergeAlert i $
+ syncResultAlert succeeded failed
+ go (M.delete (Remote.uuid r) syncalerts)
+ Just (WARNING (RemoteURI uri) msg) -> do
+ void $ addAlert $
+ warningAlert ("RemoteControl "++ show uri) msg
+ cont
+ Nothing -> do
+ debug ["protocol error from remotedaemon: ", l]
+ cont
+ where
+ cont = go syncalerts
+ withr uri = withRemote uri urimap cont
+ changeconnected sm uri = withr uri $ \r -> do
+ changeCurrentlyConnected $ sm $ Remote.uuid r
+ cont
+
+getURIMap :: Annex (M.Map URI Remote)
+getURIMap = Remote.remoteMap' id (mkk . Git.location . Remote.repo)
+ where
+ mkk (Git.Url u) = Just u
+ mkk _ = Nothing
+
+withRemote
+ :: RemoteURI
+ -> MVar (M.Map URI Remote)
+ -> Assistant a
+ -> (Remote -> Assistant a)
+ -> Assistant a
+withRemote (RemoteURI uri) remotemap noremote a = do
+ m <- liftIO $ readMVar remotemap
+ case M.lookup uri m of
+ Just r -> a r
+ Nothing -> do
+ {- Reload map, in case a new remote has been added. -}
+ m' <- liftAnnex getURIMap
+ void $ liftIO $ swapMVar remotemap $ m'
+ maybe noremote a (M.lookup uri m')
diff --git a/Assistant/Threads/SanityChecker.hs b/Assistant/Threads/SanityChecker.hs
index d7a71d477..3073cfe41 100644
--- a/Assistant/Threads/SanityChecker.hs
+++ b/Assistant/Threads/SanityChecker.hs
@@ -1,6 +1,6 @@
{- git-annex assistant sanity checker
-
- - Copyright 2012, 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012, 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -21,9 +21,11 @@ import Assistant.Drop
import Assistant.Ssh
import Assistant.TransferQueue
import Assistant.Types.UrlRenderer
+import Assistant.Restart
import qualified Annex.Branch
+import qualified Git
import qualified Git.LsFiles
-import qualified Git.Command
+import qualified Git.Command.Batch
import qualified Git.Config
import Utility.ThreadScheduler
import qualified Assistant.Threads.Watcher as Watcher
@@ -38,13 +40,14 @@ import Assistant.Unused
import Logs.Unused
import Logs.Transfer
import Config.Files
-import Utility.DiskFree
+import Types.Key (keyBackendName)
import qualified Annex
#ifdef WITH_WEBAPP
import Assistant.WebApp.Types
#endif
#ifndef mingw32_HOST_OS
import Utility.LogFile
+import Utility.DiskFree
#endif
import Data.Time.Clock.POSIX
@@ -82,6 +85,11 @@ sanityCheckerStartupThread startupdelay = namedThreadUnchecked "SanityCheckerSta
{- Fix up ssh remotes set up by past versions of the assistant. -}
liftIO $ fixUpSshRemotes
+ {- Clean up old temp files. -}
+ void $ liftAnnex $ tryNonAsync $ do
+ cleanOldTmpMisc
+ cleanReallyOldTmp
+
{- If there's a startup delay, it's done here. -}
liftIO $ maybe noop (threadDelaySeconds . Seconds . fromIntegral . durationSeconds) startupdelay
@@ -140,6 +148,8 @@ waitForNextCheck = do
- will block the watcher. -}
dailyCheck :: UrlRenderer -> Assistant Bool
dailyCheck urlrenderer = do
+ checkRepoExists
+
g <- liftAnnex gitRepo
batchmaker <- liftIO getBatchCommandMaker
@@ -160,7 +170,7 @@ dailyCheck urlrenderer = do
- to have a lot of small objects and they should not be a
- significant size. -}
when (Git.Config.getMaybe "gc.auto" g == Just "0") $
- liftIO $ void $ Git.Command.runBatch batchmaker
+ liftIO $ void $ Git.Command.Batch.run batchmaker
[ Param "-c", Param "gc.auto=670000"
, Param "gc"
, Param "--auto"
@@ -197,6 +207,7 @@ dailyCheck urlrenderer = do
hourlyCheck :: Assistant ()
hourlyCheck = do
+ checkRepoExists
#ifndef mingw32_HOST_OS
checkLogSize 0
#else
@@ -214,10 +225,10 @@ checkLogSize :: Int -> Assistant ()
checkLogSize n = do
f <- liftAnnex $ fromRepo gitAnnexLogFile
logs <- liftIO $ listLogs f
- totalsize <- liftIO $ sum <$> mapM filesize logs
+ totalsize <- liftIO $ sum <$> mapM getFileSize logs
when (totalsize > 2 * oneMegabyte) $ do
notice ["Rotated logs due to size:", show totalsize]
- liftIO $ openLog f >>= redirLog
+ liftIO $ openLog f >>= handleToFd >>= redirLog
when (n < maxLogs + 1) $ do
df <- liftIO $ getDiskFree $ takeDirectory f
case df of
@@ -226,9 +237,7 @@ checkLogSize n = do
checkLogSize (n + 1)
_ -> noop
where
- filesize f = fromIntegral . fileSize <$> liftIO (getFileStatus f)
-
- oneMegabyte :: Int
+ oneMegabyte :: Integer
oneMegabyte = 1000000
#endif
@@ -247,7 +256,7 @@ checkOldUnused :: UrlRenderer -> Assistant ()
checkOldUnused urlrenderer = go =<< annexExpireUnused <$> liftAnnex Annex.getGitConfig
where
go (Just Nothing) = noop
- go (Just (Just expireunused)) = expireUnused (Just expireunused)
+ go (Just (Just expireunused)) = expireUnused (Just expireunused)
go Nothing = maybe noop prompt =<< describeUnusedWhenBig
prompt msg =
@@ -258,3 +267,61 @@ checkOldUnused urlrenderer = go =<< annexExpireUnused <$> liftAnnex Annex.getGit
#else
debug [show $ renderTense Past msg]
#endif
+
+{- Files may be left in misctmp by eg, an interrupted add of files
+ - by the assistant, which hard links files to there as part of lockdown
+ - checks. Delete these files if they're more than a day old.
+ -
+ - Note that this is not safe to run after the Watcher starts up, since it
+ - will create such files, and due to hard linking they may have old
+ - mtimes. So, this should only be called from the
+ - sanityCheckerStartupThread, which runs before the Watcher starts up.
+ -
+ - Also, if a git-annex add is being run at the same time the assistant
+ - starts up, its tmp files could be deleted. However, the watcher will
+ - come along and add everything once it starts up anyway, so at worst
+ - this would make the git-annex add fail unexpectedly.
+ -}
+cleanOldTmpMisc :: Annex ()
+cleanOldTmpMisc = do
+ now <- liftIO getPOSIXTime
+ let oldenough = now - (60 * 60 * 24)
+ tmp <- fromRepo gitAnnexTmpMiscDir
+ liftIO $ mapM_ (cleanOld (<= oldenough)) =<< dirContentsRecursive tmp
+
+{- While .git/annex/tmp is now only used for storing partially transferred
+ - objects, older versions of git-annex used it for misctemp. Clean up any
+ - files that might be left from that, by looking for files whose names
+ - cannot be the key of an annexed object. Only delete files older than
+ - 1 week old.
+ -
+ - Also, some remotes such as rsync may use this temp directory for storing
+ - eg, encrypted objects that are being transferred. So, delete old
+ - objects that use a GPGHMAC backend.
+ -}
+cleanReallyOldTmp :: Annex ()
+cleanReallyOldTmp = do
+ now <- liftIO getPOSIXTime
+ let oldenough = now - (60 * 60 * 24 * 7)
+ tmp <- fromRepo gitAnnexTmpObjectDir
+ liftIO $ mapM_ (cleanjunk (<= oldenough)) =<< dirContentsRecursive tmp
+ where
+ cleanjunk check f = case fileKey (takeFileName f) of
+ Nothing -> cleanOld check f
+ Just k
+ | "GPGHMAC" `isPrefixOf` keyBackendName k ->
+ cleanOld check f
+ | otherwise -> noop
+
+cleanOld :: (POSIXTime -> Bool) -> FilePath -> IO ()
+cleanOld check f = go =<< catchMaybeIO getmtime
+ where
+ getmtime = realToFrac . modificationTime <$> getSymbolicLinkStatus f
+ go (Just mtime) | check mtime = nukeFile f
+ go _ = noop
+
+checkRepoExists :: Assistant ()
+checkRepoExists = do
+ g <- liftAnnex gitRepo
+ liftIO $ unlessM (doesDirectoryExist $ Git.repoPath g) $
+ terminateSelf
diff --git a/Assistant/Threads/TransferPoller.hs b/Assistant/Threads/TransferPoller.hs
index 71bfe3676..73562dbf7 100644
--- a/Assistant/Threads/TransferPoller.hs
+++ b/Assistant/Threads/TransferPoller.hs
@@ -1,6 +1,6 @@
{- git-annex assistant transfer polling thread
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -36,8 +36,7 @@ transferPollerThread = namedThread "TransferPoller" $ do
- temp file being used for the transfer. -}
| transferDirection t == Download = do
let f = gitAnnexTmpObjectLocation (transferKey t) g
- sz <- liftIO $ catchMaybeIO $
- fromIntegral . fileSize <$> getFileStatus f
+ sz <- liftIO $ catchMaybeIO $ getFileSize f
newsize t info sz
{- Uploads don't need to be polled for when the TransferWatcher
- thread can track file modifications. -}
diff --git a/Assistant/Threads/TransferScanner.hs b/Assistant/Threads/TransferScanner.hs
index 6df9b1e18..3cbaadf19 100644
--- a/Assistant/Threads/TransferScanner.hs
+++ b/Assistant/Threads/TransferScanner.hs
@@ -1,6 +1,6 @@
{- git-annex assistant thread to scan remotes to find needed transfers
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -19,7 +19,6 @@ import Assistant.Types.UrlRenderer
import Logs.Transfer
import Logs.Location
import Logs.Group
-import Logs.Web (webUUID)
import qualified Remote
import qualified Types.Remote as Remote
import Utility.ThreadScheduler
@@ -115,7 +114,7 @@ failedTransferScan r = do
- since we need to look at the locations of all keys anyway.
-}
expensiveScan :: UrlRenderer -> [Remote] -> Assistant ()
-expensiveScan urlrenderer rs = unless onlyweb $ batch <~> do
+expensiveScan urlrenderer rs = batch <~> do
debug ["starting scan of", show visiblers]
let us = map Remote.uuid rs
@@ -135,7 +134,6 @@ expensiveScan urlrenderer rs = unless onlyweb $ batch <~> do
remove <- asIO1 $ removableRemote urlrenderer
liftIO $ mapM_ (void . tryNonAsync . remove) $ S.toList removablers
where
- onlyweb = all (== webUUID) $ map Remote.uuid rs
visiblers = let rs' = filter (not . Remote.readonly) rs
in if null rs' then rs else rs'
@@ -151,7 +149,7 @@ expensiveScan urlrenderer rs = unless onlyweb $ batch <~> do
enqueue f (r, t) =
queueTransferWhenSmall "expensive scan found missing object"
(Just f) t r
- findtransfers f unwanted (key, _) = do
+ findtransfers f unwanted key = do
{- The syncable remotes may have changed since this
- scan began. -}
syncrs <- syncDataRemotes <$> getDaemonStatus
diff --git a/Assistant/Threads/TransferWatcher.hs b/Assistant/Threads/TransferWatcher.hs
index 6e8791732..c452d87c2 100644
--- a/Assistant/Threads/TransferWatcher.hs
+++ b/Assistant/Threads/TransferWatcher.hs
@@ -1,6 +1,6 @@
{- git-annex assistant transfer watching thread
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Threads/Transferrer.hs b/Assistant/Threads/Transferrer.hs
index 53d8a578c..073dbef3c 100644
--- a/Assistant/Threads/Transferrer.hs
+++ b/Assistant/Threads/Transferrer.hs
@@ -1,6 +1,6 @@
{- git-annex assistant data transferrer thread
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Threads/UpgradeWatcher.hs b/Assistant/Threads/UpgradeWatcher.hs
index ffad09d3d..e779c8e54 100644
--- a/Assistant/Threads/UpgradeWatcher.hs
+++ b/Assistant/Threads/UpgradeWatcher.hs
@@ -1,6 +1,6 @@
{- git-annex assistant thread to detect when git-annex is upgraded
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -51,9 +51,9 @@ upgradeWatcherThread urlrenderer = namedThread "UpgradeWatcher" $ do
let depth = length (splitPath dir) + 1
let nosubdirs f = length (splitPath f) == depth
void $ liftIO $ watchDir dir nosubdirs False hooks (startup mvar)
- -- Ignore bogus events generated during the startup scan.
+ -- Ignore bogus events generated during the startup scan.
-- We ask the watcher to not generate them, but just to be safe..
- startup mvar scanner = do
+ startup mvar scanner = do
r <- scanner
void $ swapMVar mvar Started
return r
diff --git a/Assistant/Threads/Upgrader.hs b/Assistant/Threads/Upgrader.hs
index 60aeec70b..602d09208 100644
--- a/Assistant/Threads/Upgrader.hs
+++ b/Assistant/Threads/Upgrader.hs
@@ -1,6 +1,6 @@
{- git-annex assistant thread to detect when upgrade is available
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -18,11 +18,8 @@ import Assistant.Types.UrlRenderer
import Assistant.DaemonStatus
import Assistant.Alert
import Utility.NotificationBroadcaster
-import Utility.Tmp
import qualified Annex
import qualified Build.SysConfig
-import qualified Utility.Url as Url
-import qualified Annex.Url as Url
import qualified Git.Version
import Types.Distribution
#ifdef WITH_WEBAPP
@@ -42,7 +39,7 @@ upgraderThread urlrenderer = namedThread "Upgrader" $
h <- liftIO . newNotificationHandle False . networkConnectedNotifier =<< getDaemonStatus
go h =<< liftIO getCurrentTime
where
- {- Wait for a network connection event. Then see if it's been
+ {- Wait for a network connection event. Then see if it's been
- half a day since the last upgrade check. If so, proceed with
- check. -}
go h lastchecked = do
@@ -62,7 +59,7 @@ upgraderThread urlrenderer = namedThread "Upgrader" $
checkUpgrade :: UrlRenderer -> Assistant ()
checkUpgrade urlrenderer = do
debug [ "Checking if an upgrade is available." ]
- go =<< getDistributionInfo
+ go =<< downloadDistributionInfo
where
go Nothing = debug [ "Failed to check if upgrade is available." ]
go (Just d) = do
@@ -86,16 +83,3 @@ canUpgrade urgency urlrenderer d = ifM autoUpgradeEnabled
noop
#endif
)
-
-getDistributionInfo :: Assistant (Maybe GitAnnexDistribution)
-getDistributionInfo = do
- uo <- liftAnnex Url.getUrlOptions
- liftIO $ withTmpFile "git-annex.tmp" $ \tmpfile h -> do
- hClose h
- ifM (Url.downloadQuiet distributionInfoUrl tmpfile uo)
- ( readish <$> readFileStrict tmpfile
- , return Nothing
- )
-
-distributionInfoUrl :: String
-distributionInfoUrl = fromJust Build.SysConfig.upgradelocation ++ ".info"
diff --git a/Assistant/Threads/Watcher.hs b/Assistant/Threads/Watcher.hs
index 8a8e8faf0..6f3afa8ca 100644
--- a/Assistant/Threads/Watcher.hs
+++ b/Assistant/Threads/Watcher.hs
@@ -1,6 +1,6 @@
{- git-annex assistant tree watcher
-
- - Copyright 2012-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -35,6 +35,7 @@ import Annex.CatFile
import Annex.CheckIgnore
import Annex.Link
import Annex.FileMatcher
+import Types.FileMatcher
import Annex.ReplaceFile
import Git.Types
import Config
@@ -71,7 +72,7 @@ needLsof = error $ unlines
{- A special exception that can be thrown to pause or resume the watcher. -}
data WatcherControl = PauseWatcher | ResumeWatcher
- deriving (Show, Eq, Typeable)
+ deriving (Show, Eq, Typeable)
instance E.Exception WatcherControl
@@ -103,13 +104,13 @@ runWatcher = do
, errHook = errhook
}
scanevents <- liftAnnex $ annexStartupScan <$> Annex.getGitConfig
- handle <- liftIO $ watchDir "." ignored scanevents hooks startup
+ h <- liftIO $ watchDir "." ignored scanevents hooks startup
debug [ "watching", "."]
{- Let the DirWatcher thread run until signalled to pause it,
- then wait for a resume signal, and restart. -}
waitFor PauseWatcher $ do
- liftIO $ stopWatchDir handle
+ liftIO $ stopWatchDir h
waitFor ResumeWatcher runWatcher
where
hook a = Just <$> asIO2 (runHandler a)
@@ -183,7 +184,7 @@ runHandler :: Handler -> FilePath -> Maybe FileStatus -> Assistant ()
runHandler handler file filestatus = void $ do
r <- tryIO <~> handler (normalize file) filestatus
case r of
- Left e -> liftIO $ print e
+ Left e -> liftIO $ warningIO $ show e
Right Nothing -> noop
Right (Just change) -> do
-- Just in case the commit thread is not
@@ -191,12 +192,12 @@ runHandler handler file filestatus = void $ do
liftAnnex Annex.Queue.flushWhenFull
recordChange change
where
- normalize f
+ normalize f
| "./" `isPrefixOf` file = drop 2 f
| otherwise = f
{- Small files are added to git as-is, while large ones go into the annex. -}
-add :: FileMatcher -> FilePath -> Assistant (Maybe Change)
+add :: FileMatcher Annex -> FilePath -> Assistant (Maybe Change)
add bigfilematcher file = ifM (liftAnnex $ checkFileMatcher bigfilematcher file)
( pendingAddChange file
, do
@@ -205,7 +206,7 @@ add bigfilematcher file = ifM (liftAnnex $ checkFileMatcher bigfilematcher file)
madeChange file AddFileChange
)
-onAdd :: FileMatcher -> Handler
+onAdd :: FileMatcher Annex -> Handler
onAdd matcher file filestatus
| maybe False isRegularFile filestatus =
unlessIgnored file $
@@ -218,12 +219,12 @@ shouldRestage ds = scanComplete ds || forceRestage ds
{- In direct mode, add events are received for both new files, and
- modified existing files.
-}
-onAddDirect :: Bool -> FileMatcher -> Handler
+onAddDirect :: Bool -> FileMatcher Annex -> Handler
onAddDirect symlinkssupported matcher file fs = do
v <- liftAnnex $ catKeyFile file
case (v, fs) of
(Just key, Just filestatus) ->
- ifM (liftAnnex $ sameFileStatus key filestatus)
+ ifM (liftAnnex $ sameFileStatus key file filestatus)
{- It's possible to get an add event for
- an existing file that is not
- really modified, but it might have
@@ -231,7 +232,7 @@ onAddDirect symlinkssupported matcher file fs = do
- so it symlink is restaged to make sure. -}
( ifM (shouldRestage <$> getDaemonStatus)
( do
- link <- liftAnnex $ inRepo $ gitAnnexLink file key
+ link <- liftAnnex $ calcRepo $ gitAnnexLink file key
addLink file link (Just key)
, noChange
)
@@ -245,7 +246,7 @@ onAddDirect symlinkssupported matcher file fs = do
debug ["add direct", file]
add matcher file
where
- {- On a filesystem without symlinks, we'll get changes for regular
+ {- On a filesystem without symlinks, we'll get changes for regular
- files that git uses to stand-in for symlinks. Detect when
- this happens, and stage the symlink, rather than annexing the
- file. -}
@@ -270,15 +271,15 @@ onAddSymlink :: Bool -> Handler
onAddSymlink isdirect file filestatus = unlessIgnored file $ do
linktarget <- liftIO (catchMaybeIO $ readSymbolicLink file)
kv <- liftAnnex (Backend.lookupFile file)
- onAddSymlink' linktarget (fmap fst kv) isdirect file filestatus
+ onAddSymlink' linktarget kv isdirect file filestatus
onAddSymlink' :: Maybe String -> Maybe Key -> Bool -> Handler
onAddSymlink' linktarget mk isdirect file filestatus = go mk
where
- go (Just key) = do
+ go (Just key) = do
when isdirect $
liftAnnex $ void $ addAssociatedFile key file
- link <- liftAnnex $ inRepo $ gitAnnexLink file key
+ link <- liftAnnex $ calcRepo $ gitAnnexLink file key
if linktarget == Just link
then ensurestaged (Just link) =<< getDaemonStatus
else do
diff --git a/Assistant/Threads/WebApp.hs b/Assistant/Threads/WebApp.hs
index 8d977194b..fd78ba8d8 100644
--- a/Assistant/Threads/WebApp.hs
+++ b/Assistant/Threads/WebApp.hs
@@ -1,11 +1,12 @@
{- git-annex assistant webapp thread
-
- - Copyright 2012-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
{-# LANGUAGE TemplateHaskell, MultiParamTypeClasses #-}
+{-# LANGUAGE ViewPatterns, OverloadedStrings #-}
{-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
@@ -47,6 +48,8 @@ import Yesod
import Network.Socket (SockAddr, HostName)
import Data.Text (pack, unpack)
import qualified Network.Wai.Handler.WarpTLS as TLS
+import Network.Wai.Middleware.RequestLogger
+import System.Log.Logger
mkYesodDispatch "WebApp" $(parseRoutesFile "Assistant/WebApp/routes")
@@ -83,7 +86,7 @@ webAppThread assistantdata urlrenderer noannex cannotrun postfirstrun listenhost
setUrlRenderer urlrenderer $ yesodRender webapp (pack "")
app <- toWaiAppPlain webapp
app' <- ifM debugEnabled
- ( return $ httpDebugLogger app
+ ( return $ logStdout app
, return app
)
runWebApp tlssettings listenhost' app' $ \addr -> if noannex
@@ -95,7 +98,7 @@ webAppThread assistantdata urlrenderer noannex cannotrun postfirstrun listenhost
urlfile <- getAnnex' $ fromRepo gitAnnexUrlFile
go tlssettings addr webapp htmlshim (Just urlfile)
where
- -- The webapp thread does not wait for the startupSanityCheckThread
+ -- The webapp thread does not wait for the startupSanityCheckThread
-- to finish, so that the user interface remains responsive while
-- that's going on.
thread = namedThreadUnchecked "WebApp"
@@ -135,3 +138,9 @@ getTlsSettings = do
#else
return Nothing
#endif
+
+{- Checks if debugging is actually enabled. -}
+debugEnabled :: IO Bool
+debugEnabled = do
+ l <- getRootLogger
+ return $ getLevel l <= Just DEBUG
diff --git a/Assistant/Threads/XMPPClient.hs b/Assistant/Threads/XMPPClient.hs
index ab4de9257..78d527920 100644
--- a/Assistant/Threads/XMPPClient.hs
+++ b/Assistant/Threads/XMPPClient.hs
@@ -1,6 +1,6 @@
{- git-annex XMPP client
-
- - Copyright 2012, 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012, 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -42,17 +42,20 @@ xmppClientThread urlrenderer = namedThread "XMPPClient" $
restartableClient . xmppClient urlrenderer =<< getAssistant id
{- Runs the client, handing restart events. -}
-restartableClient :: (XMPPCreds -> IO ()) -> Assistant ()
+restartableClient :: (XMPPCreds -> UUID -> IO ()) -> Assistant ()
restartableClient a = forever $ go =<< liftAnnex getXMPPCreds
where
go Nothing = waitNetMessagerRestart
go (Just creds) = do
- tid <- liftIO $ forkIO $ a creds
+ xmppuuid <- maybe NoUUID Remote.uuid . headMaybe
+ . filter Remote.isXMPPRemote . syncRemotes
+ <$> getDaemonStatus
+ tid <- liftIO $ forkIO $ a creds xmppuuid
waitNetMessagerRestart
liftIO $ killThread tid
-xmppClient :: UrlRenderer -> AssistantData -> XMPPCreds -> IO ()
-xmppClient urlrenderer d creds =
+xmppClient :: UrlRenderer -> AssistantData -> XMPPCreds -> UUID -> IO ()
+xmppClient urlrenderer d creds xmppuuid =
retry (runclient creds) =<< getCurrentTime
where
liftAssistant = runAssistant d
@@ -68,8 +71,11 @@ xmppClient urlrenderer d creds =
liftAssistant $
updateBuddyList (const noBuddies) <<~ buddyList
void client
- liftAssistant $ modifyDaemonStatus_ $ \s -> s
- { xmppClientID = Nothing }
+ liftAssistant $ do
+ modifyDaemonStatus_ $ \s -> s
+ { xmppClientID = Nothing }
+ changeCurrentlyConnected $ S.delete xmppuuid
+
now <- getCurrentTime
if diffUTCTime now starttime > 300
then do
@@ -87,6 +93,7 @@ xmppClient urlrenderer d creds =
inAssistant $ do
modifyDaemonStatus_ $ \s -> s
{ xmppClientID = Just $ xmppJID creds }
+ changeCurrentlyConnected $ S.insert xmppuuid
debug ["connected", logJid selfjid]
lasttraffic <- liftIO $ atomically . newTMVar =<< getCurrentTime
@@ -110,7 +117,7 @@ xmppClient urlrenderer d creds =
void $ liftIO $ atomically . swapTMVar lasttraffic =<< getCurrentTime
inAssistant $ debug
["received:", show $ map logXMPPEvent l]
- mapM_ (handle selfjid) l
+ mapM_ (handlemsg selfjid) l
sendpings selfjid lasttraffic = forever $ do
putStanza pingstanza
@@ -124,23 +131,23 @@ xmppClient urlrenderer d creds =
{- XEP-0199 says that the server will respond with either
- a ping response or an error message. Either will
- cause traffic, so good enough. -}
- pingstanza = xmppPing selfjid
+ pingstanza = xmppPing selfjid
- handle selfjid (PresenceMessage p) = do
+ handlemsg selfjid (PresenceMessage p) = do
void $ inAssistant $
updateBuddyList (updateBuddies p) <<~ buddyList
resendImportantMessages selfjid p
- handle _ (GotNetMessage QueryPresence) = putStanza gitAnnexSignature
- handle _ (GotNetMessage (NotifyPush us)) = void $ inAssistant $ pull us
- handle selfjid (GotNetMessage (PairingNotification stage c u)) =
+ handlemsg _ (GotNetMessage QueryPresence) = putStanza gitAnnexSignature
+ handlemsg _ (GotNetMessage (NotifyPush us)) = void $ inAssistant $ pull us
+ handlemsg selfjid (GotNetMessage (PairingNotification stage c u)) =
maybe noop (inAssistant . pairMsgReceived urlrenderer stage u selfjid) (parseJID c)
- handle _ (GotNetMessage m@(Pushing _ pushstage))
+ handlemsg _ (GotNetMessage m@(Pushing _ pushstage))
| isPushNotice pushstage = inAssistant $ handlePushNotice m
| isPushInitiation pushstage = inAssistant $ queuePushInitiation m
| otherwise = inAssistant $ storeInbox m
- handle _ (Ignorable _) = noop
- handle _ (Unknown _) = noop
- handle _ (ProtocolError _) = noop
+ handlemsg _ (Ignorable _) = noop
+ handlemsg _ (Unknown _) = noop
+ handlemsg _ (ProtocolError _) = noop
resendImportantMessages selfjid (Presence { presenceFrom = Just jid }) = do
let c = formatJID jid
diff --git a/Assistant/Threads/XMPPPusher.hs b/Assistant/Threads/XMPPPusher.hs
index 30c91c7f0..ec11b9b94 100644
--- a/Assistant/Threads/XMPPPusher.hs
+++ b/Assistant/Threads/XMPPPusher.hs
@@ -9,7 +9,7 @@
- they would deadlock with only one thread. For larger numbers of
- clients, the two threads are also sufficient.
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -34,7 +34,7 @@ xmppReceivePackThread = pusherThread "XMPPReceivePack" ReceivePack
pusherThread :: String -> PushSide -> UrlRenderer -> NamedThread
pusherThread threadname side urlrenderer = namedThread threadname $ go Nothing
where
- go lastpushedto = do
+ go lastpushedto = do
msg <- waitPushInitiation side $ selectNextPush lastpushedto
debug ["started running push", logNetMessage msg]
@@ -78,4 +78,4 @@ selectNextPush lastpushedto l = go [] l
(Pushing clientid _)
| Just clientid /= lastpushedto -> (m, rejected ++ ms)
_ -> go (m:rejected) ms
- go [] [] = undefined
+ go [] [] = undefined
diff --git a/Assistant/TransferQueue.hs b/Assistant/TransferQueue.hs
index 93c982224..ba13b3f04 100644
--- a/Assistant/TransferQueue.hs
+++ b/Assistant/TransferQueue.hs
@@ -1,6 +1,6 @@
{- git-annex assistant pending transfer queue
-
- - Copyright 2012-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -92,7 +92,7 @@ queueTransfersMatching matching reason schedule k f direction
filterM (wantSend True (Just k) f . Remote.uuid) $
filter (\r -> not (inset s r || Remote.readonly r)) rs
where
- locs = S.fromList <$> Remote.keyLocations k
+ locs = S.fromList <$> Remote.keyLocations k
inset s r = S.member (Remote.uuid r) s
gentransfer r = Transfer
{ transferDirection = direction
diff --git a/Assistant/TransferSlots.hs b/Assistant/TransferSlots.hs
index a36a3ee32..bbc2ec7e5 100644
--- a/Assistant/TransferSlots.hs
+++ b/Assistant/TransferSlots.hs
@@ -1,6 +1,6 @@
{- git-annex assistant transfer slots
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -149,7 +149,7 @@ genTransfer t info = case transferRemote info of
- usual cleanup. However, first check if something else is
- running the transfer, to avoid removing active transfers.
-}
- go remote transferrer = ifM (liftIO $ performTransfer transferrer t $ associatedFile info)
+ go remote transferrer = ifM (liftIO $ performTransfer transferrer t info)
( do
maybe noop
(void . addAlert . makeAlertFiller True
diff --git a/Assistant/TransferrerPool.hs b/Assistant/TransferrerPool.hs
index 6ad9b6b99..152625f4f 100644
--- a/Assistant/TransferrerPool.hs
+++ b/Assistant/TransferrerPool.hs
@@ -1,6 +1,6 @@
{- A pool of "git-annex transferkeys" processes
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -15,7 +15,6 @@ import Utility.Batch
import qualified Command.TransferKeys as T
import Control.Concurrent.STM hiding (check)
-import System.Process (create_group, std_in, std_out)
import Control.Exception (throw)
import Control.Concurrent
@@ -56,9 +55,9 @@ checkTransferrerPoolItem program batchmaker i = case i of
{- Requests that a Transferrer perform a Transfer, and waits for it to
- finish. -}
-performTransfer :: Transferrer -> Transfer -> AssociatedFile -> IO Bool
-performTransfer transferrer t f = catchBoolIO $ do
- T.sendRequest t f (transferrerWrite transferrer)
+performTransfer :: Transferrer -> Transfer -> TransferInfo -> IO Bool
+performTransfer transferrer t info = catchBoolIO $ do
+ T.sendRequest t info (transferrerWrite transferrer)
T.readResponse (transferrerRead transferrer)
{- Starts a new git-annex transferkeys process, setting up handles
diff --git a/Assistant/Types/Alert.hs b/Assistant/Types/Alert.hs
index 19fe55e6e..a2e5d5c82 100644
--- a/Assistant/Types/Alert.hs
+++ b/Assistant/Types/Alert.hs
@@ -1,6 +1,6 @@
{- git-annex assistant alert types
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -26,7 +26,7 @@ data AlertName
| SanityCheckFixAlert
| WarningAlert String
| PairAlert String
- | XMPPNeededAlert
+ | ConnectionNeededAlert
| RemoteRemovalAlert String
| CloudRepoNeededAlert
| SyncAlert
@@ -54,7 +54,7 @@ data Alert = Alert
, alertButtons :: [AlertButton]
}
-data AlertIcon = ActivityIcon | SyncIcon | SuccessIcon | ErrorIcon | InfoIcon | UpgradeIcon | TheCloud
+data AlertIcon = ActivityIcon | SyncIcon | SuccessIcon | ErrorIcon | InfoIcon | UpgradeIcon | ConnectionIcon
type AlertMap = M.Map AlertId Alert
diff --git a/Assistant/Types/BranchChange.hs b/Assistant/Types/BranchChange.hs
index 399abee54..f769657d0 100644
--- a/Assistant/Types/BranchChange.hs
+++ b/Assistant/Types/BranchChange.hs
@@ -1,6 +1,6 @@
{- git-annex assistant git-annex branch change tracking
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Types/Buddies.hs b/Assistant/Types/Buddies.hs
index 36d8a4fed..2887aaef0 100644
--- a/Assistant/Types/Buddies.hs
+++ b/Assistant/Types/Buddies.hs
@@ -1,6 +1,6 @@
{- git-annex assistant buddies
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Types/Changes.hs b/Assistant/Types/Changes.hs
index e8ecc6e48..1d8b51775 100644
--- a/Assistant/Types/Changes.hs
+++ b/Assistant/Types/Changes.hs
@@ -1,6 +1,6 @@
{- git-annex assistant change tracking
-
- - Copyright 2012-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Types/Commits.hs b/Assistant/Types/Commits.hs
index 500faa901..bf83fc486 100644
--- a/Assistant/Types/Commits.hs
+++ b/Assistant/Types/Commits.hs
@@ -1,6 +1,6 @@
{- git-annex assistant commit tracking
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Types/CredPairCache.hs b/Assistant/Types/CredPairCache.hs
new file mode 100644
index 000000000..9777e29ee
--- /dev/null
+++ b/Assistant/Types/CredPairCache.hs
@@ -0,0 +1,18 @@
+{- git-annex assistant CredPair cache.
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Assistant.Types.CredPairCache where
+
+import Types.Creds
+
+import Control.Concurrent
+import qualified Data.Map as M
+
+type CredPairCache = MVar (M.Map Login Password)
+
+newCredPairCache :: IO CredPairCache
+newCredPairCache = newMVar M.empty
diff --git a/Assistant/Types/DaemonStatus.hs b/Assistant/Types/DaemonStatus.hs
index a618c700d..e1b6c997e 100644
--- a/Assistant/Types/DaemonStatus.hs
+++ b/Assistant/Types/DaemonStatus.hs
@@ -1,6 +1,6 @@
{- git-annex assistant daemon status
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -52,6 +52,8 @@ data DaemonStatus = DaemonStatus
, syncDataRemotes :: [Remote]
-- Are we syncing to any cloud remotes?
, syncingToCloudRemote :: Bool
+ -- Set of uuids of remotes that are currently connected.
+ , currentlyConnectedRemotes :: S.Set UUID
-- List of uuids of remotes that we may have gotten out of sync with.
, desynced :: S.Set UUID
-- Pairing request that is in progress.
@@ -104,6 +106,7 @@ newDaemonStatus = DaemonStatus
<*> pure []
<*> pure False
<*> pure S.empty
+ <*> pure S.empty
<*> pure Nothing
<*> newNotificationBroadcaster
<*> newNotificationBroadcaster
diff --git a/Assistant/Types/NamedThread.hs b/Assistant/Types/NamedThread.hs
index 5dd1364ad..b07b322ad 100644
--- a/Assistant/Types/NamedThread.hs
+++ b/Assistant/Types/NamedThread.hs
@@ -1,6 +1,6 @@
{- named threads
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Types/NetMessager.hs b/Assistant/Types/NetMessager.hs
index 41ab4b272..475d810ae 100644
--- a/Assistant/Types/NetMessager.hs
+++ b/Assistant/Types/NetMessager.hs
@@ -1,6 +1,6 @@
{- git-annex assistant out of band network messager types
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -12,13 +12,13 @@ import Assistant.Pairing
import Git.Types
import qualified Data.Text as T
+import qualified Data.Text.Encoding as T
import qualified Data.Set as S
import qualified Data.Map as M
import qualified Data.DList as D
import Control.Concurrent.STM
import Control.Concurrent.MSampleVar
import Data.ByteString (ByteString)
-import qualified Data.ByteString.Char8 as B8
import Data.Text (Text)
{- Messages that can be sent out of band by a network messager. -}
@@ -85,7 +85,7 @@ logNetMessage (Pushing c stage) = show $ Pushing (logClientID c) $
SendPackOutput n _ -> SendPackOutput n elided
s -> s
where
- elided = B8.pack "<elided>"
+ elided = T.encodeUtf8 $ T.pack "<elided>"
logNetMessage (PairingNotification stage c uuid) =
show $ PairingNotification stage (logClientID c) uuid
logNetMessage m = show m
diff --git a/Assistant/Types/Pushes.hs b/Assistant/Types/Pushes.hs
index 99e0ee162..0da8b44b5 100644
--- a/Assistant/Types/Pushes.hs
+++ b/Assistant/Types/Pushes.hs
@@ -1,6 +1,6 @@
{- git-annex assistant push tracking
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Types/RemoteControl.hs b/Assistant/Types/RemoteControl.hs
new file mode 100644
index 000000000..42cb4a5aa
--- /dev/null
+++ b/Assistant/Types/RemoteControl.hs
@@ -0,0 +1,16 @@
+{- git-annex assistant RemoteDaemon control
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Assistant.Types.RemoteControl where
+
+import qualified RemoteDaemon.Types as RemoteDaemon
+import Control.Concurrent
+
+type RemoteControl = Chan RemoteDaemon.Consumed
+
+newRemoteControl :: IO RemoteControl
+newRemoteControl = newChan
diff --git a/Assistant/Types/RepoProblem.hs b/Assistant/Types/RepoProblem.hs
index ece5a5286..3b9c72cf8 100644
--- a/Assistant/Types/RepoProblem.hs
+++ b/Assistant/Types/RepoProblem.hs
@@ -1,6 +1,6 @@
{- git-annex assistant repository problem tracking
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Types/ScanRemotes.hs b/Assistant/Types/ScanRemotes.hs
index 8219f9baf..ac6d8fef9 100644
--- a/Assistant/Types/ScanRemotes.hs
+++ b/Assistant/Types/ScanRemotes.hs
@@ -1,6 +1,6 @@
{- git-annex assistant remotes needing scanning
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Types/ThreadName.hs b/Assistant/Types/ThreadName.hs
index c8d264a38..57c704dad 100644
--- a/Assistant/Types/ThreadName.hs
+++ b/Assistant/Types/ThreadName.hs
@@ -1,6 +1,6 @@
{- name of a thread
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Types/ThreadedMonad.hs b/Assistant/Types/ThreadedMonad.hs
index 1a2aa7eb7..eadf325ea 100644
--- a/Assistant/Types/ThreadedMonad.hs
+++ b/Assistant/Types/ThreadedMonad.hs
@@ -1,6 +1,6 @@
{- making the Annex monad available across threads
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Types/TransferQueue.hs b/Assistant/Types/TransferQueue.hs
index e4bf2ae92..73a7521c5 100644
--- a/Assistant/Types/TransferQueue.hs
+++ b/Assistant/Types/TransferQueue.hs
@@ -1,6 +1,6 @@
{- git-annex assistant pending transfer queue
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Types/TransferSlots.hs b/Assistant/Types/TransferSlots.hs
index 5140995a3..5fa1219a7 100644
--- a/Assistant/Types/TransferSlots.hs
+++ b/Assistant/Types/TransferSlots.hs
@@ -1,6 +1,6 @@
{- git-annex assistant transfer slots
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Types/TransferrerPool.hs b/Assistant/Types/TransferrerPool.hs
index b66fdfa13..697bb8dd5 100644
--- a/Assistant/Types/TransferrerPool.hs
+++ b/Assistant/Types/TransferrerPool.hs
@@ -1,6 +1,6 @@
{- A pool of "git-annex transferkeys" processes available for use
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Types/UrlRenderer.hs b/Assistant/Types/UrlRenderer.hs
index 521905bf3..68c238d6a 100644
--- a/Assistant/Types/UrlRenderer.hs
+++ b/Assistant/Types/UrlRenderer.hs
@@ -1,6 +1,6 @@
{- webapp url renderer access from the assistant
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/Unused.hs b/Assistant/Unused.hs
index 3ad98c12e..194739367 100644
--- a/Assistant/Unused.hs
+++ b/Assistant/Unused.hs
@@ -1,6 +1,6 @@
{- git-annex assistant unused files
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -77,7 +77,7 @@ expireUnused duration = do
forM_ oldkeys $ \k -> do
debug ["removing old unused key", key2file k]
liftAnnex $ do
- removeAnnex k
+ lockContent k removeAnnex
logStatus k InfoMissing
where
boundry = durationToPOSIXTime <$> duration
diff --git a/Assistant/XMPP.hs b/Assistant/XMPP.hs
index e74705021..b9ae50e27 100644
--- a/Assistant/XMPP.hs
+++ b/Assistant/XMPP.hs
@@ -1,6 +1,6 @@
{- core xmpp support
-
- - Copyright 2012-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -195,7 +195,7 @@ decodeMessage m = decode =<< gitAnnexTagInfo m
<*> a i
gen c i = c . toUUID <$> headMaybe (words (T.unpack (tagValue i)))
seqgen c i = do
- packet <- decodeTagContent $ tagElement i
+ packet <- decodeTagContent $ tagElement i
let seqnum = fromMaybe 0 $ readish $ T.unpack $ tagValue i
return $ c seqnum packet
shasgen c i = do
diff --git a/Assistant/XMPP/Buddies.hs b/Assistant/XMPP/Buddies.hs
index 0c466e51c..29e0e24cf 100644
--- a/Assistant/XMPP/Buddies.hs
+++ b/Assistant/XMPP/Buddies.hs
@@ -1,6 +1,6 @@
{- xmpp buddies
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Assistant/XMPP/Client.hs b/Assistant/XMPP/Client.hs
index 677bb2ff3..6d09d32e6 100644
--- a/Assistant/XMPP/Client.hs
+++ b/Assistant/XMPP/Client.hs
@@ -1,6 +1,6 @@
{- xmpp client support
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -15,7 +15,6 @@ import Network.Protocol.XMPP
import Network
import Control.Concurrent
import qualified Data.Text as T
-import Control.Exception (SomeException)
{- Everything we need to know to connect to an XMPP server. -}
data XMPPCreds = XMPPCreds
@@ -34,18 +33,18 @@ connectXMPP c a = case parseJID (xmppJID c) of
{- Do a SRV lookup, but if it fails, fall back to the cached xmppHostname. -}
connectXMPP' :: JID -> XMPPCreds -> (JID -> XMPP a) -> IO [(HostPort, Either SomeException ())]
-connectXMPP' jid c a = reverse <$> (handle =<< lookupSRV srvrecord)
+connectXMPP' jid c a = reverse <$> (handlesrv =<< lookupSRV srvrecord)
where
srvrecord = mkSRVTcp "xmpp-client" $
T.unpack $ strDomain $ jidDomain jid
serverjid = JID Nothing (jidDomain jid) Nothing
- handle [] = do
+ handlesrv [] = do
let h = xmppHostname c
let p = PortNumber $ fromIntegral $ xmppPort c
r <- run h p $ a jid
return [r]
- handle srvs = go [] srvs
+ handlesrv srvs = go [] srvs
go l [] = return l
go l ((h,p):rest) = do
diff --git a/Assistant/XMPP/Git.hs b/Assistant/XMPP/Git.hs
index ab34dce1e..2186b5bce 100644
--- a/Assistant/XMPP/Git.hs
+++ b/Assistant/XMPP/Git.hs
@@ -1,6 +1,6 @@
{- git over XMPP
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -38,7 +38,7 @@ import Utility.Env
import Network.Protocol.XMPP
import qualified Data.Text as T
import System.Posix.Types
-import System.Process (std_in, std_out, std_err)
+import qualified System.Posix.IO
import Control.Concurrent
import System.Timeout
import qualified Data.ByteString as B
@@ -74,7 +74,7 @@ makeXMPPGitRemote :: String -> JID -> UUID -> Assistant Bool
makeXMPPGitRemote buddyname jid u = do
remote <- liftAnnex $ addRemote $
makeGitRemote buddyname $ gitXMPPLocation jid
- liftAnnex $ storeUUID (remoteConfig (Remote.repo remote) "uuid") u
+ liftAnnex $ storeUUIDIn (remoteConfig (Remote.repo remote) "uuid") u
liftAnnex $ void remoteListRefresh
remote' <- liftAnnex $ fromMaybe (error "failed to add remote")
<$> Remote.byName (Just buddyname)
@@ -105,22 +105,22 @@ xmppPush cid gitpush = do
u <- liftAnnex getUUID
sendNetMessage $ Pushing cid (StartingPush u)
- (Fd inf, writepush) <- liftIO createPipe
- (readpush, Fd outf) <- liftIO createPipe
- (Fd controlf, writecontrol) <- liftIO createPipe
+ (Fd inf, writepush) <- liftIO System.Posix.IO.createPipe
+ (readpush, Fd outf) <- liftIO System.Posix.IO.createPipe
+ (Fd controlf, writecontrol) <- liftIO System.Posix.IO.createPipe
tmpdir <- gettmpdir
installwrapper tmpdir
- env <- liftIO getEnvironment
+ environ <- liftIO getEnvironment
path <- liftIO getSearchPath
- let myenv = addEntries
+ let myenviron = addEntries
[ ("PATH", intercalate [searchPathSeparator] $ tmpdir:path)
, (relayIn, show inf)
, (relayOut, show outf)
, (relayControl, show controlf)
]
- env
+ environ
inh <- liftIO $ fdToHandle readpush
outh <- liftIO $ fdToHandle writepush
@@ -132,7 +132,7 @@ xmppPush cid gitpush = do
{- This can take a long time to run, so avoid running it in the
- Annex monad. Also, override environment. -}
g <- liftAnnex gitRepo
- r <- liftIO $ gitpush $ g { gitEnv = Just myenv }
+ r <- liftIO $ gitpush $ g { gitEnv = Just myenviron }
liftIO $ do
mapM_ killThread [t1, t2]
@@ -151,16 +151,16 @@ xmppPush cid gitpush = do
SendPackOutput seqnum' b
toxmpp seqnum' inh
- fromxmpp outh controlh = withPushMessagesInSequence cid SendPack handle
+ fromxmpp outh controlh = withPushMessagesInSequence cid SendPack handlemsg
where
- handle (Just (Pushing _ (ReceivePackOutput _ b))) =
+ handlemsg (Just (Pushing _ (ReceivePackOutput _ b))) =
liftIO $ writeChunk outh b
- handle (Just (Pushing _ (ReceivePackDone exitcode))) =
+ handlemsg (Just (Pushing _ (ReceivePackDone exitcode))) =
liftIO $ do
hPrint controlh exitcode
hFlush controlh
- handle (Just _) = noop
- handle Nothing = do
+ handlemsg (Just _) = noop
+ handlemsg Nothing = do
debug ["timeout waiting for git receive-pack output via XMPP"]
-- Send a synthetic exit code to git-annex
-- xmppgit, which will exit and cause git push
@@ -265,12 +265,12 @@ xmppReceivePack cid = do
let seqnum' = succ seqnum
sendNetMessage $ Pushing cid $ ReceivePackOutput seqnum' b
relaytoxmpp seqnum' outh
- relayfromxmpp inh = withPushMessagesInSequence cid ReceivePack handle
+ relayfromxmpp inh = withPushMessagesInSequence cid ReceivePack handlemsg
where
- handle (Just (Pushing _ (SendPackOutput _ b))) =
+ handlemsg (Just (Pushing _ (SendPackOutput _ b))) =
liftIO $ writeChunk inh b
- handle (Just _) = noop
- handle Nothing = do
+ handlemsg (Just _) = noop
+ handlemsg Nothing = do
debug ["timeout waiting for git send-pack output via XMPP"]
-- closing the handle will make git receive-pack exit
liftIO $ do
@@ -338,7 +338,7 @@ handlePushNotice (Pushing cid (CanPush theiruuid shas)) =
, go
)
where
- go = do
+ go = do
u <- liftAnnex getUUID
sendNetMessage $ Pushing cid (PushRequest u)
haveall l = liftAnnex $ not <$> anyM donthave l
@@ -360,9 +360,9 @@ writeChunk h b = do
withPushMessagesInSequence :: ClientID -> PushSide -> (Maybe NetMessage -> Assistant ()) -> Assistant ()
withPushMessagesInSequence cid side a = loop 0
where
- loop seqnum = do
+ loop seqnum = do
m <- timeout xmppTimeout <~> waitInbox cid side
- let go s = a m >> loop s
+ let go s = a m >> loop s
let next = seqnum + 1
case extractSequence =<< m of
Just seqnum'
diff --git a/Backend.hs b/Backend.hs
index 38314687a..922d0c2a7 100644
--- a/Backend.hs
+++ b/Backend.hs
@@ -1,6 +1,6 @@
{- git-annex key/value backends
-
- - Copyright 2010,2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -10,10 +10,12 @@ module Backend (
orderedList,
genKey,
lookupFile,
+ getBackend,
isAnnexLink,
chooseBackend,
lookupBackendName,
- maybeLookupBackendName
+ maybeLookupBackendName,
+ isStableKey,
) where
import Common.Annex
@@ -31,6 +33,8 @@ import qualified Backend.Hash
import qualified Backend.WORM
import qualified Backend.URL
+import qualified Data.Map as M
+
list :: [Backend]
list = Backend.Hash.backends ++ Backend.WORM.backends ++ Backend.URL.backends
@@ -74,7 +78,7 @@ genKey' (b:bs) source = do
| c == '\n' = '_'
| otherwise = c
-{- Looks up the key and backend corresponding to an annexed file,
+{- Looks up the key corresponding to an annexed file,
- by examining what the file links to.
-
- In direct mode, there is often no link on disk, in which case
@@ -82,7 +86,7 @@ genKey' (b:bs) source = do
- on disk still takes precedence over what was committed to git in direct
- mode.
-}
-lookupFile :: FilePath -> Annex (Maybe (Key, Backend))
+lookupFile :: FilePath -> Annex (Maybe Key)
lookupFile file = do
mkey <- isAnnexLink file
case mkey of
@@ -92,14 +96,15 @@ lookupFile file = do
, return Nothing
)
where
- makeret k = let bname = keyBackendName k in
- case maybeLookupBackendName bname of
- Just backend -> return $ Just (k, backend)
- Nothing -> do
- warning $
- "skipping " ++ file ++
- " (unknown backend " ++ bname ++ ")"
- return Nothing
+ makeret k = return $ Just k
+
+getBackend :: FilePath -> Key -> Annex (Maybe Backend)
+getBackend file k = let bname = keyBackendName k in
+ case maybeLookupBackendName bname of
+ Just backend -> return $ Just backend
+ Nothing -> do
+ warning $ "skipping " ++ file ++ " (unknown backend " ++ bname ++ ")"
+ return Nothing
{- Looks up the backend that should be used for a file.
- That can be configured on a per-file basis in the gitattributes file. -}
@@ -114,7 +119,13 @@ lookupBackendName :: String -> Backend
lookupBackendName s = fromMaybe unknown $ maybeLookupBackendName s
where
unknown = error $ "unknown backend " ++ s
+
maybeLookupBackendName :: String -> Maybe Backend
-maybeLookupBackendName s = headMaybe matches
- where
- matches = filter (\b -> s == B.name b) list
+maybeLookupBackendName s = M.lookup s nameMap
+
+nameMap :: M.Map String Backend
+nameMap = M.fromList $ zip (map B.name list) list
+
+isStableKey :: Key -> Bool
+isStableKey k = maybe False (`B.isStableKey` k)
+ (maybeLookupBackendName (keyBackendName k))
diff --git a/Backend/Hash.hs b/Backend/Hash.hs
index 41368a5bb..f1b9d592d 100644
--- a/Backend/Hash.hs
+++ b/Backend/Hash.hs
@@ -1,13 +1,14 @@
-{- git-annex hashing backends
+{- git-tnnex hashing backends
-
- - Copyright 2011-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
-{-# LANGUAGE CPP #-}
-
-module Backend.Hash (backends) where
+module Backend.Hash (
+ backends,
+ testKeyBackend,
+) where
import Common.Annex
import qualified Annex
@@ -21,7 +22,7 @@ import qualified Build.SysConfig as SysConfig
import qualified Data.ByteString.Lazy as L
import Data.Char
-data Hash = SHAHash HashSize | SkeinHash HashSize
+data Hash = SHAHash HashSize | SkeinHash HashSize | MD5Hash
type HashSize = Int
{- Order is slightly significant; want SHA256 first, and more general
@@ -29,34 +30,34 @@ type HashSize = Int
hashes :: [Hash]
hashes = concat
[ map SHAHash [256, 1, 512, 224, 384]
-#ifdef WITH_CRYPTOHASH
, map SkeinHash [256, 512]
-#endif
+ , [MD5Hash]
]
{- The SHA256E backend is the default, so genBackendE comes first. -}
backends :: [Backend]
-backends = catMaybes $ map genBackendE hashes ++ map genBackend hashes
+backends = map genBackendE hashes ++ map genBackend hashes
-genBackend :: Hash -> Maybe Backend
-genBackend hash = Just Backend
+genBackend :: Hash -> Backend
+genBackend hash = Backend
{ name = hashName hash
, getKey = keyValue hash
, fsckKey = Just $ checkKeyChecksum hash
, canUpgradeKey = Just needsUpgrade
+ , fastMigrate = Just trivialMigrate
+ , isStableKey = const True
}
-genBackendE :: Hash -> Maybe Backend
-genBackendE hash = do
- b <- genBackend hash
- return $ b
- { name = hashNameE hash
- , getKey = keyValueE hash
- }
+genBackendE :: Hash -> Backend
+genBackendE hash = (genBackend hash)
+ { name = hashNameE hash
+ , getKey = keyValueE hash
+ }
hashName :: Hash -> String
hashName (SHAHash size) = "SHA" ++ show size
hashName (SkeinHash size) = "SKEIN" ++ show size
+hashName MD5Hash = "MD5"
hashNameE :: Hash -> String
hashNameE hash = hashName hash ++ "E"
@@ -65,8 +66,7 @@ hashNameE hash = hashName hash ++ "E"
keyValue :: Hash -> KeySource -> Annex (Maybe Key)
keyValue hash source = do
let file = contentLocation source
- stat <- liftIO $ getFileStatus file
- let filesize = fromIntegral $ fileSize stat
+ filesize <- liftIO $ getFileSize file
s <- hashFile hash file filesize
return $ Just $ stubKey
{ keyName = s
@@ -100,7 +100,7 @@ checkKeyChecksum hash key file = do
mstat <- liftIO $ catchMaybeIO $ getFileStatus file
case (mstat, fast) of
(Just stat, False) -> do
- let filesize = fromIntegral $ fileSize stat
+ filesize <- liftIO $ getFileSize' file stat
showSideAction "checksum"
check <$> hashFile hash file filesize
_ -> return True
@@ -129,15 +129,32 @@ needsUpgrade :: Key -> Bool
needsUpgrade key = "\\" `isPrefixOf` keyHash key ||
any (not . validExtension) (takeExtensions $ keyName key)
+trivialMigrate :: Key -> Backend -> AssociatedFile -> Maybe Key
+trivialMigrate oldkey newbackend afile
+ {- Fast migration from hashE to hash backend. -}
+ | keyBackendName oldkey == name newbackend ++ "E" = Just $ oldkey
+ { keyName = keyHash oldkey
+ , keyBackendName = name newbackend
+ }
+ {- Fast migration from hash to hashE backend. -}
+ | keyBackendName oldkey ++"E" == name newbackend = case afile of
+ Nothing -> Nothing
+ Just file -> Just $ oldkey
+ { keyName = keyHash oldkey ++ selectExtension file
+ , keyBackendName = name newbackend
+ }
+ | otherwise = Nothing
+
hashFile :: Hash -> FilePath -> Integer -> Annex String
hashFile hash file filesize = liftIO $ go hash
where
- go (SHAHash hashsize) = case shaHasher hashsize filesize of
+ go (SHAHash hashsize) = case shaHasher hashsize filesize of
Left sha -> sha <$> L.readFile file
Right command ->
either error return
=<< externalSHA command hashsize file
go (SkeinHash hashsize) = skeinHasher hashsize <$> L.readFile file
+ go MD5Hash = md5Hasher <$> L.readFile file
shaHasher :: HashSize -> Integer -> Either (L.ByteString -> String) String
shaHasher hashsize filesize
@@ -160,8 +177,24 @@ shaHasher hashsize filesize
skeinHasher :: HashSize -> (L.ByteString -> String)
skeinHasher hashsize
-#ifdef WITH_CRYPTOHASH
| hashsize == 256 = show . skein256
| hashsize == 512 = show . skein512
-#endif
| otherwise = error $ "unsupported skein size " ++ show hashsize
+
+md5Hasher :: L.ByteString -> String
+md5Hasher = show . md5
+
+{- A varient of the SHA256E backend, for testing that needs special keys
+ - that cannot collide with legitimate keys in the repository.
+ -
+ - This is accomplished by appending a special extension to the key,
+ - that is not one that selectExtension would select (due to being too
+ - long).
+ -}
+testKeyBackend :: Backend
+testKeyBackend =
+ let b = genBackendE (SHAHash 256)
+ in b { getKey = (fmap addE) <$$> getKey b }
+ where
+ addE k = k { keyName = keyName k ++ longext }
+ longext = ".this-is-a-test-key"
diff --git a/Backend/URL.hs b/Backend/URL.hs
index a8161c98d..8ec270e95 100644
--- a/Backend/URL.hs
+++ b/Backend/URL.hs
@@ -1,6 +1,6 @@
{- git-annex "URL" backend -- keys whose content is available from urls.
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -24,14 +24,16 @@ backend = Backend
, getKey = const $ return Nothing
, fsckKey = Nothing
, canUpgradeKey = Nothing
+ , fastMigrate = Nothing
+ -- The content of an url can change at any time, so URL keys are
+ -- not stable.
+ , isStableKey = const False
}
{- Every unique url has a corresponding key. -}
fromUrl :: String -> Maybe Integer -> Annex Key
-fromUrl url size = do
- n <- genKeyName url
- return $ stubKey
- { keyName = n
- , keyBackendName = "URL"
- , keySize = size
- }
+fromUrl url size = return $ stubKey
+ { keyName = genKeyName url
+ , keyBackendName = "URL"
+ , keySize = size
+ }
diff --git a/Backend/Utilities.hs b/Backend/Utilities.hs
index 24dbfd6d9..4c1f70eda 100644
--- a/Backend/Utilities.hs
+++ b/Backend/Utilities.hs
@@ -1,6 +1,6 @@
{- git-annex backend utilities
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -13,13 +13,18 @@ import Common.Annex
{- Generates a keyName from an input string. Takes care of sanitizing it.
- If it's not too long, the full string is used as the keyName.
- - Otherwise, it's truncated at half the filename length limit, and its
- - md5 is prepended to ensure a unique key. -}
-genKeyName :: String -> Annex String
-genKeyName s = do
- limit <- liftIO . fileNameLengthLimit =<< fromRepo gitAnnexDir
- let s' = preSanitizeKeyName s
- let truncs = truncateFilePath (limit `div` 2) s'
- return $ if s' == truncs
- then s'
- else truncs ++ "-" ++ md5s (Str s)
+ - Otherwise, it's truncated, and its md5 is prepended to ensure a unique
+ - key. -}
+genKeyName :: String -> String
+genKeyName s
+ -- Avoid making keys longer than the length of a SHA256 checksum.
+ | bytelen > sha256len =
+ truncateFilePath (sha256len - md5len - 1) s' ++ "-" ++ md5s (Str s)
+ | otherwise = s'
+ where
+ s' = preSanitizeKeyName s
+ bytelen = length (decodeW8 s')
+
+ sha256len = 64
+ md5len = 32
+
diff --git a/Backend/WORM.hs b/Backend/WORM.hs
index 60db42f56..59f9a7354 100644
--- a/Backend/WORM.hs
+++ b/Backend/WORM.hs
@@ -1,6 +1,6 @@
{- git-annex "WORM" backend -- Write Once, Read Many
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -12,6 +12,7 @@ import Types.Backend
import Types.Key
import Types.KeySource
import Backend.Utilities
+import Git.FilePath
backends :: [Backend]
backends = [backend]
@@ -22,22 +23,22 @@ backend = Backend
, getKey = keyValue
, fsckKey = Nothing
, canUpgradeKey = Nothing
+ , fastMigrate = Nothing
+ , isStableKey = const True
}
{- The key includes the file size, modification time, and the
- - basename of the filename.
- -
- - That allows multiple files with the same names to have different keys,
- - while also allowing a file to be moved around while retaining the
- - same key.
+ - original filename relative to the top of the git repository.
-}
keyValue :: KeySource -> Annex (Maybe Key)
keyValue source = do
- stat <- liftIO $ getFileStatus $ contentLocation source
- n <- genKeyName $ keyFilename source
- return $ Just Key
- { keyName = n
+ let f = contentLocation source
+ stat <- liftIO $ getFileStatus f
+ sz <- liftIO $ getFileSize' f stat
+ relf <- getTopFilePath <$> inRepo (toTopFilePath $ keyFilename source)
+ return $ Just $ stubKey
+ { keyName = genKeyName relf
, keyBackendName = name backend
- , keySize = Just $ fromIntegral $ fileSize stat
+ , keySize = Just sz
, keyMtime = Just $ modificationTime stat
}
diff --git a/Build/BuildVersion.hs b/Build/BuildVersion.hs
new file mode 100644
index 000000000..0093f5b5b
--- /dev/null
+++ b/Build/BuildVersion.hs
@@ -0,0 +1,6 @@
+{- Outputs the version of git-annex that was built, for use by
+ - autobuilders. Note that this includes the git rev. -}
+
+import Build.Version
+
+main = putStr =<< getVersion
diff --git a/Build/BundledPrograms.hs b/Build/BundledPrograms.hs
index d1f8cfd4a..1e826cb10 100644
--- a/Build/BundledPrograms.hs
+++ b/Build/BundledPrograms.hs
@@ -1,6 +1,6 @@
{- Bundled programs
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -20,7 +20,7 @@ bundledPrograms :: [FilePath]
bundledPrograms = catMaybes
[ Nothing
#ifndef mingw32_HOST_OS
- -- git is not included in the windows bundle
+ -- git is not included in the windows bundle; msysgit is used
, Just "git"
-- Not strictly needed in PATH by git-annex, but called
-- by git when it sshes to a remote.
@@ -36,7 +36,9 @@ bundledPrograms = catMaybes
, Just "rsync"
#ifndef darwin_HOST_OS
-- OS X has ssh installed by default.
- -- (Linux probably, but not guaranteed.)
+ -- Linux probably has ssh, but not guaranteed.
+ -- On Windows, msysgit provides ssh, but not in PATH,
+ -- so we ship our own.
, Just "ssh"
, Just "ssh-keygen"
#endif
@@ -45,7 +47,12 @@ bundledPrograms = catMaybes
#endif
, SysConfig.gpg
, ifset SysConfig.curl "curl"
+#ifndef darwin_HOST_OS
+ -- wget on OSX has been problimatic, looking for certs in the wrong
+ -- places. Don't ship it, use curl or the OSX's own wget if it has
+ -- one.
, ifset SysConfig.wget "wget"
+#endif
, ifset SysConfig.bup "bup"
, SysConfig.lsof
, SysConfig.gcrypt
diff --git a/Build/Configure.hs b/Build/Configure.hs
index 116a44215..4498838a1 100644
--- a/Build/Configure.hs
+++ b/Build/Configure.hs
@@ -10,24 +10,30 @@ import Control.Monad
import Build.TestConfig
import Build.Version
+import Utility.PartialPrelude
+import Utility.Process
import Utility.SafeCommand
import Utility.ExternalSHA
import Utility.Env
+import Utility.Exception
import qualified Git.Version
+import Utility.DottedVersion
tests :: [TestCase]
tests =
- [ TestCase "version" getVersion
+ [ TestCase "version" (Config "packageversion" . StringConfig <$> getVersion)
, TestCase "UPGRADE_LOCATION" getUpgradeLocation
, TestCase "git" $ requireCmd "git" "git --version >/dev/null"
, TestCase "git version" getGitVersion
, testCp "cp_a" "-a"
, testCp "cp_p" "-p"
+ , testCp "cp_preserve_timestamps" "--preserve=timestamps"
, testCp "cp_reflink_auto" "--reflink=auto"
, TestCase "xargs -0" $ requireCmd "xargs_0" "xargs -0 </dev/null"
, TestCase "rsync" $ requireCmd "rsync" "rsync --version >/dev/null"
, TestCase "curl" $ testCmd "curl" "curl --version >/dev/null"
, TestCase "wget" $ testCmd "wget" "wget --version >/dev/null"
+ , TestCase "wget supports -q --show-progress" checkWgetQuietProgress
, TestCase "bup" $ testCmd "bup" "bup --version >/dev/null"
, TestCase "nice" $ testCmd "nice" "nice true >/dev/null"
, TestCase "ionice" $ testCmd "ionice" "ionice -c3 true >/dev/null"
@@ -60,7 +66,7 @@ shaTestCases l = map make l
Config key . MaybeStringConfig <$> search (shacmds n)
where
key = "sha" ++ show n
- search [] = return Nothing
+ search [] = return Nothing
search (c:cmds) = do
sha <- externalSHA c n "/dev/null"
if sha == Right knowngood
@@ -95,6 +101,19 @@ getGitVersion = do
error $ "installed git version " ++ show v ++ " is too old! (Need " ++ show oldestallowed ++ " or newer)"
return $ Config "gitversion" $ StringConfig $ show v
+checkWgetQuietProgress :: Test
+checkWgetQuietProgress = Config "wgetquietprogress" . BoolConfig
+ . maybe False (>= normalize "1.16")
+ <$> getWgetVersion
+
+getWgetVersion :: IO (Maybe DottedVersion)
+getWgetVersion = catchDefaultIO Nothing $
+ extract <$> readProcess "wget" ["--version"]
+ where
+ extract s = case lines s of
+ [] -> Nothing
+ (l:_) -> normalize <$> headMaybe (drop 2 $ words l)
+
getSshConnectionCaching :: Test
getSshConnectionCaching = Config "sshconnectioncaching" . BoolConfig <$>
boolSystem "sh" [Param "-c", Param "ssh -o ControlPersist=yes -V >/dev/null 2>/dev/null"]
diff --git a/Build/DesktopFile.hs b/Build/DesktopFile.hs
index 6a5838f81..6e70b0d5f 100644
--- a/Build/DesktopFile.hs
+++ b/Build/DesktopFile.hs
@@ -1,7 +1,7 @@
{- Generating and installing a desktop menu entry file and icon,
- and a desktop autostart file. (And OSX equivilants.)
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Build/DistributionUpdate.hs b/Build/DistributionUpdate.hs
index a681ec2ed..e3990d039 100644
--- a/Build/DistributionUpdate.hs
+++ b/Build/DistributionUpdate.hs
@@ -1,55 +1,132 @@
-{- Builds distributon info files for each git-annex release in a directory
- - tree, which must itself be part of a git-annex repository. Only files
- - that are present have their info file created. -}
+{- Downloads git-annex autobuilds and installs them into the git-annex
+ - repository in ~/lib/downloads that is used to distribute git-annex
+ - releases.
+ -
+ - Generates info files, containing the version (of the corresponding file
+ - from the autobuild).
+ -
+ - Also gpg signs the files.
+ -}
import Common.Annex
import Types.Distribution
import Build.Version
import Utility.UserInfo
-import Utility.Path
+import Utility.Url
import qualified Git.Construct
import qualified Annex
import Annex.Content
import Backend
import Git.Command
+import Data.Default
import Data.Time.Clock
+import Data.Char
+import System.Posix.Directory
-main = do
- state <- Annex.new =<< Git.Construct.fromPath =<< getRepoDir
- Annex.eval state makeinfos
+-- git-annex distribution signing key (for Joey Hess)
+signingKey :: String
+signingKey = "89C809CB"
+
+-- URL to an autobuilt git-annex file, and the place to install
+-- it in the repository.
+autobuilds :: [(URLString, FilePath)]
+autobuilds =
+ (map linuxarch ["i386", "amd64", "armel"]) ++
+ (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")
+ ]
+ where
+ linuxarch a =
+ ( 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
-makeinfos :: Annex ()
-makeinfos = do
+main :: IO ()
+main = do
version <- liftIO getChangelogVersion
+ repodir <- getRepoDir
+ changeWorkingDirectory repodir
+ updated <- catMaybes <$> mapM (getbuild repodir) autobuilds
+ state <- Annex.new =<< Git.Construct.fromPath "."
+ Annex.eval state (makeinfos updated version)
+
+-- Download a build from the autobuilder, and return its version.
+-- It's very important that the version matches the build, otherwise
+-- auto-upgrades can loop reatedly. So, check build-version before
+-- and after downloading the file.
+getbuild :: FilePath -> (URLString, FilePath) -> IO (Maybe (FilePath, Version))
+getbuild repodir (url, f) = do
+ bv1 <- getbv
+ let dest = repodir </> f
+ let tmp = dest ++ ".tmp"
+ nukeFile tmp
+ createDirectoryIfMissing True (parentDir dest)
+ let oops s = do
+ nukeFile tmp
+ putStrLn $ "*** " ++ s
+ return Nothing
+ ifM (download url tmp def)
+ ( do
+ bv2 <- getbv
+ case bv2 of
+ Nothing -> oops $ "no build-version file for " ++ url
+ (Just v)
+ | bv2 == bv1 -> do
+ nukeFile dest
+ renameFile tmp dest
+ -- remove git rev part of version
+ let v' = takeWhile (/= '-') v
+ return $ Just (f, v')
+ | otherwise -> oops $ "build version changed while downloading " ++ url ++ " " ++ show (bv1, bv2)
+ , oops $ "failed to download " ++ url
+ )
+ where
+ bvurl = takeDirectory url ++ "/build-version"
+ getbv = do
+ bv <- catchDefaultIO "" $ readProcess "curl" ["--silent", bvurl]
+ return $ if null bv || any (not . versionchar) bv then Nothing else Just bv
+ versionchar c = isAlphaNum c || c == '.' || c == '-'
+
+makeinfos :: [(FilePath, Version)] -> Version -> Annex ()
+makeinfos updated version = do
+ mapM_ (\f -> inRepo $ runBool [Param "annex", Param "add", File f]) (map fst updated)
void $ inRepo $ runBool
[ Param "commit"
, Param "-a"
+ , Param "-S89C809CB" -- git-annex distribution signing key
, Param "-m"
, Param $ "publishing git-annex " ++ version
]
- basedir <- liftIO getRepoDir
now <- liftIO getCurrentTime
- liftIO $ putStrLn $ "building info files for version " ++ version ++ " in " ++ basedir
- fs <- liftIO $ dirContentsRecursiveSkipping (const False) True (basedir </> "git-annex")
- forM_ fs $ \f -> do
+ liftIO $ putStrLn $ "building info files"
+ forM_ updated $ \(f, bv) -> do
v <- lookupFile f
case v of
Nothing -> noop
- Just (k, _b) -> whenM (inAnnex k) $ do
+ Just k -> whenM (inAnnex k) $ do
liftIO $ putStrLn f
let infofile = f ++ ".info"
liftIO $ writeFile infofile $ show $ GitAnnexDistribution
- { distributionUrl = mkUrl basedir f
+ { distributionUrl = mkUrl f
, distributionKey = k
- , distributionVersion = version
+ , distributionVersion = bv
, distributionReleasedate = now
, distributionUrgentUpgrade = Nothing
}
- void $ inRepo $ runBool [Param "add", Param infofile]
+ void $ inRepo $ runBool [Param "add", File infofile]
+ signFile infofile
+ signFile f
void $ inRepo $ runBool
[ Param "commit"
, Param "-m"
+ , Param "-S89C809CB" -- git-annex distribution signing key
, Param $ "updated info files for git-annex " ++ version
]
void $ inRepo $ runBool
@@ -61,16 +138,16 @@ makeinfos = do
, Params "sync"
]
- {- Check for out of date info files. -}
+ -- Check for out of date info files.
infos <- liftIO $ filter (".info" `isSuffixOf`)
- <$> dirContentsRecursive (basedir </> "git-annex")
+ <$> dirContentsRecursive "git-annex"
ds <- liftIO $ forM infos (readish <$$> readFile)
let dis = zip infos ds
- let ood = filter (outofdate version) dis
+ let ood = filter outofdate dis
unless (null ood) $
error $ "Some info files are out of date: " ++ show (map fst ood)
where
- outofdate version (_, md) = case md of
+ outofdate (_, md) = case md of
Nothing -> True
Just d -> distributionVersion d /= version
@@ -79,5 +156,16 @@ getRepoDir = do
home <- liftIO myHomeDir
return $ home </> "lib" </> "downloads"
-mkUrl :: FilePath -> FilePath -> String
-mkUrl basedir f = "https://downloads.kitenet.net/" ++ relPathDirToFile basedir f
+mkUrl :: FilePath -> String
+mkUrl f = "https://downloads.kitenet.net/" ++ f
+
+signFile :: FilePath -> Annex ()
+signFile f = do
+ void $ liftIO $ boolSystem "gpg"
+ [ Param "-a"
+ , Param $ "--default-key=" ++ signingKey
+ , Param "--detach-sign"
+ , File f
+ ]
+ liftIO $ rename (f ++ ".asc") (f ++ ".sig")
+ void $ inRepo $ runBool [Param "add", File (f ++ ".sig")]
diff --git a/Build/EvilLinker.hs b/Build/EvilLinker.hs
index 1b57ba959..d1b0cc746 100644
--- a/Build/EvilLinker.hs
+++ b/Build/EvilLinker.hs
@@ -3,7 +3,7 @@
-
- See https://ghc.haskell.org/trac/ghc/ticket/8596
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -20,7 +20,7 @@ import Data.Maybe
import Data.List
import Utility.Monad
-import Utility.Process
+import Utility.Process hiding (env)
import Utility.Env
data CmdParams = CmdParams
@@ -58,13 +58,13 @@ parseGccLink = do
collect2params <- restOfLine
return $ CmdParams (path ++ collectcmd) (escapeDosPaths collect2params) cenv
where
- collectcmd = "collect2.exe"
- collectgccenv = "COLLECT_GCC"
+ collectcmd = "collect2.exe"
+ collectgccenv = "COLLECT_GCC"
collectltoenv = "COLLECT_LTO_WRAPPER"
pathenv = "COMPILER_PATH"
libpathenv = "LIBRARY_PATH"
- optenv = "COLLECT_GCC_OPTIONS"
- collectenv = do
+ optenv = "COLLECT_GCC_OPTIONS"
+ collectenv = do
void $ many1 $ do
notFollowedBy $ string collectgccenv
restOfLine
@@ -148,7 +148,7 @@ runAtFile p s f extraparams = do
removeFile f
return out
where
- c = case parse p "" s of
+ c = case parse p "" s of
Left e -> error $
(show e) ++
"\n<<<\n" ++ s ++ "\n>>>"
diff --git a/Build/EvilSplicer.hs b/Build/EvilSplicer.hs
index a7120f24f..1fd64670b 100644
--- a/Build/EvilSplicer.hs
+++ b/Build/EvilSplicer.hs
@@ -23,7 +23,7 @@
- need modifications to compile.
-
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -46,7 +46,7 @@ import Prelude hiding (log)
import Utility.Monad
import Utility.Misc
-import Utility.Exception
+import Utility.Exception hiding (try)
import Utility.Path
import Utility.FileSystemEncoding
@@ -86,7 +86,7 @@ number = read <$> many1 digit
coordsParser :: Parser (Coord, Coord)
coordsParser = (try singleline <|> try weird <|> multiline) <?> "Coords"
where
- singleline = do
+ singleline = do
line <- number
void $ char ':'
startcol <- number
@@ -151,7 +151,7 @@ spliceParser = do
(unlines codelines)
splicetype
where
- tosplicetype "declarations" = SpliceDeclaration
+ tosplicetype "declarations" = SpliceDeclaration
tosplicetype "expression" = SpliceExpression
tosplicetype s = error $ "unknown splice type: " ++ s
@@ -177,7 +177,7 @@ spliceParser = do
splicesExtractor :: Parser [Splice]
splicesExtractor = rights <$> many extract
where
- extract = try (Right <$> spliceParser) <|> (Left <$> compilerJunkLine)
+ extract = try (Right <$> spliceParser) <|> (Left <$> compilerJunkLine)
compilerJunkLine = restOfLine
{- Modifies the source file, expanding the splices, which all must
@@ -214,8 +214,8 @@ applySplices destdir imports splices@(first:_) = do
hPutStr h newcontent
hClose h
where
- expand lls [] = lls
- expand lls (s:rest)
+ expand lls [] = lls
+ expand lls (s:rest)
| isExpressionSplice s = expand (expandExpressionSplice s lls) rest
| otherwise = expand (expandDeclarationSplice s lls) rest
@@ -291,12 +291,12 @@ expandExpressionSplice sp lls = concat [before, spliced:padding, end]
-- ie: bar $(splice)
| otherwise = s ++ " $ "
where
- s' = filter (not . isSpace) s
+ s' = filter (not . isSpace) s
findindent = length . takeWhile isSpace
addindent n = unlines . map (i ++) . lines
where
- i = take n $ repeat ' '
+ i = take n $ repeat ' '
{- Tweaks code output by GHC in splices to actually build. Yipes. -}
mangleCode :: String -> String
@@ -310,11 +310,12 @@ mangleCode = flip_colon
. yesod_url_render_hack
. text_builder_hack
. nested_instances
+ . boxed_fileembed
. collapse_multiline_strings
. remove_package_version
. emptylambda
where
- {- Lambdas are often output without parens around them.
+ {- Lambdas are often output without parens around them.
- This breaks when the lambda is immediately applied to a
- parameter.
-
@@ -408,7 +409,7 @@ mangleCode = flip_colon
restofline = manyTill (noneOf "\n") newline
- {- For some reason, GHC sometimes doesn't like the multiline
+ {- For some reason, GHC sometimes doesn't like the multiline
- strings it creates. It seems to get hung up on \{ at the
- start of a new line sometimes, wanting it to not be escaped.
-
@@ -460,6 +461,11 @@ mangleCode = flip_colon
-
- Nothing
- -> foo
+ -
+ - -- This is not yet handled!
+ - ComplexConstructor var var
+ - var var
+ - -> foo
-}
case_layout_multiline = parsecAndReplace $ do
void newline
@@ -531,7 +537,11 @@ mangleCode = flip_colon
void $ char ':'
if length s < 5
then unexpected "too short to be a namespace"
- else hstoken
+ else do
+ t <- hstoken
+ case t of
+ (c:r) | isUpper c && "." `isInfixOf` r -> return t
+ _ -> unexpected "not a module qualified symbol"
hstoken :: Parser String
hstoken = do
@@ -544,6 +554,42 @@ mangleCode = flip_colon
- The ; is added by case_layout. -}
flip_colon = replace "; : _ " "; _ : "
+{- Embedded files use unsafe packing, which is problimatic
+ - for several reasons, including that GHC sometimes omits trailing
+ - newlines in the file content, which leads to the wrong byte
+ - count. Also, GHC sometimes outputs unicode characters, which
+ - are not legal in unboxed strings.
+ -
+ - Avoid problems by converting:
+ - GHC.IO.unsafePerformIO
+ - (Data.ByteString.Unsafe.unsafePackAddressLen
+ - lllll
+ - "blabblah"#)),
+ - to:
+ - Data.ByteString.Char8.pack "blabblah"),
+ -
+ - Note that the string is often multiline. This only works if
+ - collapse_multiline_strings has run first.
+ -}
+boxed_fileembed :: String -> String
+boxed_fileembed = parsecAndReplace $ do
+ i <- indent
+ void $ string "GHC.IO.unsafePerformIO"
+ void newline
+ void indent
+ void $ string "(Data.ByteString.Unsafe.unsafePackAddressLen"
+ void newline
+ void indent
+ void number
+ void newline
+ void indent
+ void $ char '"'
+ s <- restOfLine
+ let s' = take (length s - 5) s
+ if "\"#))," `isSuffixOf` s
+ then return (i ++ "Data.ByteString.Char8.pack \"" ++ s' ++ "\"),\n")
+ else fail "not an unboxed string"
+
{- This works around a problem in the expanded template haskell for Yesod
- type-safe url rendering.
-
@@ -600,7 +646,7 @@ parsecAndReplace p s = case parse find "" s of
Left _e -> s
Right l -> concatMap (either return id) l
where
- find :: Parser [Either Char String]
+ find :: Parser [Either Char String]
find = many $ try (Right <$> p) <|> (Left <$> anyChar)
main :: IO ()
@@ -608,7 +654,7 @@ main = go =<< getArgs
where
go (destdir:log:header:[]) = run destdir log (Just header)
go (destdir:log:[]) = run destdir log Nothing
- go _ = error "usage: EvilSplicer destdir logfile [headerfile]"
+ go _ = error "usage: EvilSplicer destdir logfile [headerfile]"
run destdir log mheader = do
r <- parseFromFile splicesExtractor log
diff --git a/Build/InstallDesktopFile.hs b/Build/InstallDesktopFile.hs
index c8a3f07f5..d6a94adde 100644
--- a/Build/InstallDesktopFile.hs
+++ b/Build/InstallDesktopFile.hs
@@ -1,7 +1,7 @@
{- Generating and installing a desktop menu entry file and icon,
- and a desktop autostart file. (And OSX equivilants.)
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Build/LinuxMkLibs.hs b/Build/LinuxMkLibs.hs
index be605c5a5..3fb757a22 100644
--- a/Build/LinuxMkLibs.hs
+++ b/Build/LinuxMkLibs.hs
@@ -1,6 +1,6 @@
{- Linux library copier and binary shimmer
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -14,12 +14,10 @@ import System.FilePath
import System.Directory
import Control.Monad
import Data.List
-import Data.List.Utils
import System.Posix.Files
-import Data.Char
import Control.Monad.IfElse
-import Utility.PartialPrelude
+import Utility.LinuxMkLibs
import Utility.Directory
import Utility.Process
import Utility.Monad
@@ -41,7 +39,7 @@ mklibs top = do
libs <- parseLdd <$> readProcess "ldd" exes
glibclibs <- glibcLibs
let libs' = nub $ libs ++ glibclibs
- libdirs <- nub . catMaybes <$> mapM (installLib top) libs'
+ libdirs <- nub . catMaybes <$> mapM (installLib installFile top) libs'
-- Various files used by runshell to set up env vars used by the
-- linker shims.
@@ -53,26 +51,6 @@ mklibs top = do
mapM_ (installLinkerShim top) exes
-{- Installs a library. If the library is a symlink to another file,
- - install the file it links to, and update the symlink to be relative. -}
-installLib :: FilePath -> FilePath -> IO (Maybe FilePath)
-installLib top lib = ifM (doesFileExist lib)
- ( do
- installFile top lib
- checksymlink lib
- return $ Just $ parentDir lib
- , return Nothing
- )
- where
- checksymlink f = whenM (isSymbolicLink <$> getSymbolicLinkStatus (inTop top f)) $ do
- l <- readSymbolicLink (inTop top f)
- let absl = absPathFrom (parentDir f) l
- let target = relPathDirToFile (parentDir f) absl
- installFile top absl
- nukeFile (top ++ f)
- createSymbolicLink target (inTop top f)
- checksymlink absl
-
{- Installs a linker shim script around a binary.
-
- Note that each binary is put into its own separate directory,
@@ -104,14 +82,10 @@ symToHardLink f = whenM (isSymbolicLink <$> getSymbolicLinkStatus f) $ do
installFile :: FilePath -> FilePath -> IO ()
installFile top f = do
createDirectoryIfMissing True destdir
- void $ copyFileExternal f destdir
+ void $ copyFileExternal CopyTimeStamps f destdir
where
destdir = inTop top $ parentDir f
--- Note that f is not relative, so cannot use </>
-inTop :: FilePath -> FilePath -> FilePath
-inTop top f = top ++ f --
-
checkExe :: FilePath -> IO Bool
checkExe f
| ".so" `isSuffixOf` f = return False
@@ -127,18 +101,3 @@ checkFileExe s = and
[ "ELF" `isInfixOf` s
, "executable" `isInfixOf` s || "shared object" `isInfixOf` s
]
-
-{- Parse ldd output, getting all the libraries that the input files
- - link to. Note that some of the libraries may not exist
- - (eg, linux-vdso.so) -}
-parseLdd :: String -> [FilePath]
-parseLdd = catMaybes . map (getlib . dropWhile isSpace) . lines
- where
- getlib l = headMaybe . words =<< lastMaybe (split " => " l)
-
-{- Get all glibc libs and other support files, including gconv files
- -
- - XXX Debian specific. -}
-glibcLibs :: IO [FilePath]
-glibcLibs = lines <$> readProcess "sh"
- ["-c", "dpkg -L libc6:$(dpkg --print-architecture) libgcc1:$(dpkg --print-architecture) | egrep '\\.so|gconv'"]
diff --git a/Build/NullSoftInstaller.hs b/Build/NullSoftInstaller.hs
index b3d323ce2..846c8d621 100644
--- a/Build/NullSoftInstaller.hs
+++ b/Build/NullSoftInstaller.hs
@@ -11,7 +11,7 @@
- exception of git. The user needs to install git separately,
- and the installer checks for that.
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -37,13 +37,18 @@ main = do
mustSucceed "ln" [File "dist/build/git-annex/git-annex.exe", File gitannex]
let license = tmpdir </> licensefile
mustSucceed "sh" [Param "-c", Param $ "zcat standalone/licences.gz > '" ++ license ++ "'"]
- extrafiles <- forM (cygwinPrograms ++ cygwinDlls) $ \f -> do
+ extrabins <- forM (cygwinPrograms ++ cygwinDlls) $ \f -> do
p <- searchPath f
when (isNothing p) $
print ("unable to find in PATH", f)
return p
- writeFile nsifile $ makeInstaller gitannex license $
- catMaybes extrafiles
+ webappscript <- vbsLauncher tmpdir "git-annex-webapp" "git-annex webapp"
+ autostartscript <- vbsLauncher tmpdir "git-annex-autostart" "git annex assistant --autostart"
+ let htmlhelp = tmpdir </> "git-annex.html"
+ writeFile htmlhelp htmlHelpText
+ writeFile nsifile $ makeInstaller gitannex license htmlhelp
+ (catMaybes extrabins)
+ [ webappscript, autostartscript ]
mustSucceed "makensis" [File nsifile]
removeFile nsifile -- left behind if makensis fails
where
@@ -54,6 +59,17 @@ main = do
True -> return ()
False -> error $ cmd ++ " failed"
+{- Generates a .vbs launcher which runs a command without any visible DOS
+ - box. -}
+vbsLauncher :: FilePath -> String -> String -> IO String
+vbsLauncher tmpdir basename cmd = do
+ let f = tmpdir </> basename ++ ".vbs"
+ writeFile f $ unlines
+ [ "Set objshell=CreateObject(\"Wscript.Shell\")"
+ , "objShell.Run(\"" ++ cmd ++ "\"), 0, False"
+ ]
+ return f
+
gitannexprogram :: FilePath
gitannexprogram = "git-annex.exe"
@@ -67,11 +83,14 @@ uninstaller :: FilePath
uninstaller = "git-annex-uninstall.exe"
gitInstallDir :: Exp FilePath
-gitInstallDir = fromString "$PROGRAMFILES\\Git\\bin"
+gitInstallDir = fromString "$PROGRAMFILES\\Git"
startMenuItem :: Exp FilePath
startMenuItem = "$SMPROGRAMS/git-annex.lnk"
+autoStartItem :: Exp FilePath
+autoStartItem = "$SMSTARTUP/git-annex-autostart.lnk"
+
needGit :: Exp String
needGit = strConcat
[ fromString "You need git installed to use git-annex. Looking at "
@@ -81,12 +100,12 @@ needGit = strConcat
, fromString "You can install git from http:////git-scm.com//"
]
-makeInstaller :: FilePath -> FilePath -> [FilePath] -> String
-makeInstaller gitannex license extrafiles = nsis $ do
+makeInstaller :: FilePath -> FilePath -> FilePath -> [FilePath] -> [FilePath] -> String
+makeInstaller gitannex license htmlhelp extrabins launchers = nsis $ do
name "git-annex"
outFile $ str installer
{- Installing into the same directory as git avoids needing to modify
- - path myself, since the git installer already does it. -}
+ - path myself, since the git installer already does it. -}
installDir gitInstallDir
requestExecutionLevel Admin
@@ -101,30 +120,44 @@ makeInstaller gitannex license extrafiles = nsis $ do
-- Start menu shortcut
Development.NSIS.createDirectory "$SMPROGRAMS"
createShortcut startMenuItem
- [ Target "$INSTDIR/git-annex.exe"
- , Parameters "webapp"
- , IconFile "$INSTDIR/git-annex.exe"
+ [ Target "wscript.exe"
+ , Parameters "\"$INSTDIR/git-annex-webapp.vbs\""
+ , StartOptions "SW_SHOWNORMAL"
+ , IconFile "$INSTDIR/cmd/git-annex.exe"
, IconIndex 2
- , StartOptions "SW_SHOWMINIMIZED"
- , KeyboardShortcut "ALT|CONTROL|a"
, Description "git-annex webapp"
]
- -- Groups of files to install
- section "main" [] $ do
+ createShortcut autoStartItem
+ [ Target "wscript.exe"
+ , Parameters "\"$INSTDIR/git-annex-autostart.vbs\""
+ , StartOptions "SW_SHOWNORMAL"
+ , IconFile "$INSTDIR/cmd/git-annex.exe"
+ , IconIndex 2
+ , Description "git-annex autostart"
+ ]
+ section "cmd" [] $ do
+ setOutPath "$INSTDIR\\cmd"
+ mapM_ addfile (gitannex:extrabins)
+ section "meta" [] $ do
+ setOutPath "$INSTDIR\\doc\\git\\html"
+ addfile htmlhelp
setOutPath "$INSTDIR"
- addfile gitannex
addfile license
- mapM_ addfile extrafiles
+ mapM_ addfile launchers
writeUninstaller $ str uninstaller
uninstall $ do
delete [RebootOK] $ startMenuItem
- mapM_ (\f -> delete [RebootOK] $ fromString $ "$INSTDIR/" ++ f) $
- [ gitannexprogram
- , licensefile
+ delete [RebootOK] $ autoStartItem
+ removefilesFrom "$INSTDIR/cmd" (gitannex:extrabins)
+ removefilesFrom "$INSTDIR\\doc\\git\\html" [htmlhelp]
+ removefilesFrom "$INSTDIR" $
+ launchers ++
+ [ license
, uninstaller
- ] ++ cygwinPrograms ++ cygwinDlls
+ ]
where
addfile f = file [] (str f)
+ removefilesFrom d = mapM_ (\f -> delete [RebootOK] $ fromString $ d ++ "/" ++ takeFileName f)
cygwinPrograms :: [FilePath]
cygwinPrograms = map (\p -> p ++ ".exe") bundledPrograms
@@ -168,3 +201,16 @@ cygwinDlls =
, "cygncursesw-10.dll"
, "cygusb0.dll"
]
+
+-- msysgit opens Program Files/Git/doc/git/html/git-annex.html
+-- when git annex --help is run.
+htmlHelpText :: String
+htmlHelpText = unlines
+ [ "<html>"
+ , "<title>git-annex help</title>"
+ , "<body>"
+ , "For help on git-annex, run \"git annex help\", or"
+ , "<a href=\"https://git-annex.branchable.com/git-annex/\">read the man page</a>."
+ , "</body>"
+ , "</html"
+ ]
diff --git a/Build/OSXMkLibs.hs b/Build/OSXMkLibs.hs
index 5640e4d36..9622bcb14 100644
--- a/Build/OSXMkLibs.hs
+++ b/Build/OSXMkLibs.hs
@@ -1,6 +1,6 @@
{- OSX library copier
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -112,7 +112,7 @@ expand_rpath libs replacement_libs cmd
return $ map (replacem m) libs
| otherwise = return libs
where
- probe c = "DYLD_PRINT_RPATHS=1 " ++ c ++ " --getting-rpath-dummy-option 2>&1 | grep RPATH"
+ probe c = "DYLD_PRINT_RPATHS=1 " ++ c ++ " --getting-rpath-dummy-option 2>&1 | grep RPATH"
parse s = case words s of
("RPATH":"successful":"expansion":"of":old:"to:":new:[]) ->
Just (old, new)
diff --git a/Build/Standalone.hs b/Build/Standalone.hs
index 110163acf..2a6c04e6d 100644
--- a/Build/Standalone.hs
+++ b/Build/Standalone.hs
@@ -1,6 +1,6 @@
{- Makes standalone bundle.
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -40,7 +40,7 @@ main :: IO ()
main = getArgs >>= go
where
go [] = error "specify topdir"
- go (topdir:_) = do
+ go (topdir:_) = do
let dir = progDir topdir
createDirectoryIfMissing True dir
installed <- forM bundledPrograms $ installProg dir
diff --git a/Build/Version.hs b/Build/Version.hs
index 7ff2fe662..da9d1bbcb 100644
--- a/Build/Version.hs
+++ b/Build/Version.hs
@@ -10,10 +10,11 @@ import System.Directory
import Data.Char
import System.Process
-import Build.TestConfig
import Utility.Monad
import Utility.Exception
+type Version = String
+
{- Set when making an official release. (Distribution vendors should set
- this too.) -}
isReleaseBuild :: IO Bool
@@ -25,10 +26,10 @@ isReleaseBuild = isJust <$> catchMaybeIO (getEnv "RELEASE_BUILD")
-
- If git or a git repo is not available, or something goes wrong,
- or this is a release build, just use the version from the changelog. -}
-getVersion :: Test
+getVersion :: IO Version
getVersion = do
changelogversion <- getChangelogVersion
- version <- ifM (isReleaseBuild)
+ ifM (isReleaseBuild)
( return changelogversion
, catchDefaultIO changelogversion $ do
let major = takeWhile (/= '.') changelogversion
@@ -40,9 +41,8 @@ getVersion = do
then return changelogversion
else return $ concat [ major, ".", autoversion ]
)
- return $ Config "packageversion" (StringConfig version)
-getChangelogVersion :: IO String
+getChangelogVersion :: IO Version
getChangelogVersion = do
changelog <- readFile "debian/changelog"
let verline = takeWhile (/= '\n') changelog
diff --git a/Build/make-sdist.sh b/Build/make-sdist.sh
index 950334532..6e1ddae62 100755
--- a/Build/make-sdist.sh
+++ b/Build/make-sdist.sh
@@ -9,11 +9,12 @@ mkdir --parents dist/$sdist_dir
find . \( -name .git -or -name dist -or -name cabal-dev \) -prune \
-or -not -name \\*.orig -not -type d -print \
-| perl -ne "print unless length >= 100 - length q{$sdist_dir}" \
-| xargs cp --parents --target-directory dist/$sdist_dir
+ | perl -ne "print unless length >= 100 - length q{$sdist_dir}" \
+ | grep -v ':' \
+ | xargs cp --parents --target-directory dist/$sdist_dir
cd dist
-tar -caf $sdist_dir.tar.gz $sdist_dir
+tar --format=ustar -caf $sdist_dir.tar.gz $sdist_dir
# Check that tarball can be unpacked by cabal.
# It's picky about tar longlinks etc.
diff --git a/BuildFlags.hs b/BuildFlags.hs
index e36cf6a14..7ae526f63 100644
--- a/BuildFlags.hs
+++ b/BuildFlags.hs
@@ -1,6 +1,6 @@
{- git-annex build flags reporting
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -57,6 +57,9 @@ buildFlags = filter (not . null)
#ifdef WITH_DBUS
, "DBus"
#endif
+#ifdef WITH_DESKTOP_NOTIFY
+ , "DesktopNotify"
+#endif
#ifdef WITH_XMPP
, "XMPP"
#else
@@ -78,10 +81,10 @@ buildFlags = filter (not . null)
#ifdef WITH_TDFA
, "TDFA"
#endif
-#ifdef WITH_CRYPTOHASH
- , "CryptoHash"
+#ifdef WITH_TORRENTPARSER
+ , "TorrentParser"
#else
-#warning Building without CryptoHash.
+#warning Building without haskell torrent library; will instead use btshowmetainfo to parse torrent files.
#endif
#ifdef WITH_EKG
, "EKG"
diff --git a/Checks.hs b/Checks.hs
index 7a9cd1e38..e344cef2d 100644
--- a/Checks.hs
+++ b/Checks.hs
@@ -3,7 +3,7 @@
- Common sanity checks for commands, and an interface to selectively
- remove them, or add others.
-
- - Copyright 2011-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -35,7 +35,7 @@ noDaemonRunning :: Command -> Command
noDaemonRunning = addCheck $ whenM (isJust <$> daemonpid) $
error "You cannot run this command while git-annex watch or git-annex assistant is running."
where
- daemonpid = liftIO . checkDaemon =<< fromRepo gitAnnexPidFile
+ daemonpid = liftIO . checkDaemon =<< fromRepo gitAnnexPidFile
dontCheck :: CommandCheck -> Command -> Command
dontCheck check cmd = mutateCheck cmd $ \c -> filter (/= check) c
diff --git a/CmdLine.hs b/CmdLine.hs
index a165b041a..cd7a1a986 100644
--- a/CmdLine.hs
+++ b/CmdLine.hs
@@ -1,6 +1,6 @@
{- git-annex command line parsing and dispatch
-
- - Copyright 2010-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -25,6 +25,7 @@ import Common.Annex
import qualified Annex
import qualified Git
import qualified Git.AutoCorrect
+import qualified Git.Config
import Annex.Content
import Annex.Environment
import Command
@@ -34,30 +35,34 @@ import Types.Messages
dispatch :: Bool -> CmdParams -> [Command] -> [Option] -> [(String, String)] -> String -> IO Git.Repo -> IO ()
dispatch fuzzyok allargs allcmds commonoptions fields header getgitrepo = do
setupConsole
- r <- E.try getgitrepo :: IO (Either E.SomeException Git.Repo)
- case r of
- Left e -> maybe (throw e) (\a -> a params) (cmdnorepo cmd)
- Right g -> do
- state <- Annex.new g
- Annex.eval state $ do
- checkEnvironment
- checkfuzzy
- forM_ fields $ uncurry Annex.setField
- when (cmdnomessages cmd) $
- Annex.setOutput QuietOutput
- sequence_ flags
- whenM (annexDebug <$> Annex.getGitConfig) $
- liftIO enableDebugOutput
- startup
- performCommandAction cmd params
- shutdown $ cmdnocommit cmd
+ case getOptCmd args cmd commonoptions of
+ Right (flags, params) -> go flags params
+ =<< (E.try getgitrepo :: IO (Either E.SomeException Git.Repo))
+ Left parseerr -> error parseerr
where
+ go flags params (Right g) = do
+ state <- Annex.new g
+ Annex.eval state $ do
+ checkEnvironment
+ when fuzzy $
+ inRepo $ autocorrect . Just
+ forM_ fields $ uncurry Annex.setField
+ when (cmdnomessages cmd) $
+ Annex.setOutput QuietOutput
+ sequence_ flags
+ whenM (annexDebug <$> Annex.getGitConfig) $
+ liftIO enableDebugOutput
+ startup
+ performCommandAction cmd params $
+ shutdown $ cmdnocommit cmd
+ go _flags params (Left e) = do
+ when fuzzy $
+ autocorrect =<< Git.Config.global
+ maybe (throw e) (\a -> a params) (cmdnorepo cmd)
err msg = msg ++ "\n\n" ++ usage header allcmds
cmd = Prelude.head cmds
(fuzzy, cmds, name, args) = findCmd fuzzyok allargs allcmds err
- (flags, params) = getOptCmd args cmd commonoptions
- checkfuzzy = when fuzzy $
- inRepo $ Git.AutoCorrect.prepare name cmdname cmds
+ autocorrect = Git.AutoCorrect.prepare name cmdname cmds
{- Parses command line params far enough to find the Command to run, and
- returns the remaining params.
@@ -81,12 +86,12 @@ findCmd fuzzyok argv cmds err
{- Parses command line options, and returns actions to run to configure flags
- and the remaining parameters for the command. -}
-getOptCmd :: CmdParams -> Command -> [Option] -> ([Annex ()], CmdParams)
+getOptCmd :: CmdParams -> Command -> [Option] -> Either String ([Annex ()], CmdParams)
getOptCmd argv cmd commonoptions = check $
getOpt Permute (commonoptions ++ cmdoptions cmd) argv
where
- check (flags, rest, []) = (flags, rest)
- check (_, _, errs) = error $ unlines
+ check (flags, rest, []) = Right (flags, rest)
+ check (_, _, errs) = Left $ unlines
[ concat errs
, commandUsage cmd
]
diff --git a/CmdLine/Action.hs b/CmdLine/Action.hs
index 247c658bc..57e1fa60b 100644
--- a/CmdLine/Action.hs
+++ b/CmdLine/Action.hs
@@ -1,6 +1,6 @@
{- git-annex command-line actions
-
- - Copyright 2010-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -13,18 +13,18 @@ import Common.Annex
import qualified Annex
import Types.Command
import qualified Annex.Queue
-import Annex.Exception
type CommandActionRunner = CommandStart -> CommandCleanup
{- Runs a command, starting with the check stage, and then
- - the seek stage. Finishes by printing the number of commandActions that
- - failed. -}
-performCommandAction :: Command -> CmdParams -> Annex ()
-performCommandAction Command { cmdseek = seek, cmdcheck = c, cmdname = name } params = do
+ - the seek stage. Finishes by running the continutation, and
+ - then showing a count of any failures. -}
+performCommandAction :: Command -> CmdParams -> Annex () -> Annex ()
+performCommandAction Command { cmdseek = seek, cmdcheck = c, cmdname = name } params cont = do
mapM_ runCheck c
Annex.changeState $ \s -> s { Annex.errcounter = 0 }
seek params
+ cont
showerrcount =<< Annex.getState Annex.errcounter
where
showerrcount 0 = noop
@@ -37,14 +37,14 @@ performCommandAction Command { cmdseek = seek, cmdcheck = c, cmdname = name } pa
-
- This should only be run in the seek stage. -}
commandAction :: CommandActionRunner
-commandAction a = handle =<< tryAnnexIO go
+commandAction a = account =<< tryIO go
where
go = do
Annex.Queue.flushWhenFull
callCommandAction a
- handle (Right True) = return True
- handle (Right False) = incerr
- handle (Left err) = do
+ account (Right True) = return True
+ account (Right False) = incerr
+ account (Left err) = do
showErr err
showEndFail
incerr
diff --git a/CmdLine/GitAnnex.hs b/CmdLine/GitAnnex.hs
index 3604681f9..f794f8127 100644
--- a/CmdLine/GitAnnex.hs
+++ b/CmdLine/GitAnnex.hs
@@ -1,6 +1,6 @@
{- git-annex main program
-
- - Copyright 2010-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -12,6 +12,8 @@ module CmdLine.GitAnnex where
import qualified Git.CurrentRepo
import CmdLine
import Command
+import Utility.Env
+import Annex.Ssh
import qualified Command.Add
import qualified Command.Unannex
@@ -25,6 +27,7 @@ import qualified Command.FromKey
import qualified Command.DropKey
import qualified Command.TransferKey
import qualified Command.TransferKeys
+import qualified Command.SetPresentKey
import qualified Command.ReKey
import qualified Command.MetaData
import qualified Command.View
@@ -47,14 +50,17 @@ import qualified Command.Unlock
import qualified Command.Lock
import qualified Command.PreCommit
import qualified Command.Find
+import qualified Command.FindRef
import qualified Command.Whereis
import qualified Command.List
import qualified Command.Log
import qualified Command.Merge
+import qualified Command.ResolveMerge
import qualified Command.Info
import qualified Command.Status
import qualified Command.Migrate
import qualified Command.Uninit
+import qualified Command.Reinit
import qualified Command.NumCopies
import qualified Command.Trust
import qualified Command.Untrust
@@ -62,6 +68,7 @@ import qualified Command.Semitrust
import qualified Command.Dead
import qualified Command.Group
import qualified Command.Wanted
+import qualified Command.GroupWanted
import qualified Command.Schedule
import qualified Command.Ungroup
import qualified Command.Vicfg
@@ -78,6 +85,9 @@ import qualified Command.Direct
import qualified Command.Indirect
import qualified Command.Upgrade
import qualified Command.Forget
+import qualified Command.Proxy
+import qualified Command.DiffDriver
+import qualified Command.Undo
import qualified Command.Version
import qualified Command.Help
#ifdef WITH_ASSISTANT
@@ -89,10 +99,12 @@ import qualified Command.WebApp
#ifdef WITH_XMPP
import qualified Command.XMPPGit
#endif
+import qualified Command.RemoteDaemon
#endif
import qualified Command.Test
#ifdef WITH_TESTSUITE
import qualified Command.FuzzTest
+import qualified Command.TestRemote
#endif
#ifdef WITH_EKG
import System.Remote.Monitoring
@@ -100,86 +112,96 @@ import System.Remote.Monitoring
cmds :: [Command]
cmds = concat
- [ Command.Add.def
- , Command.Get.def
- , Command.Drop.def
- , Command.Move.def
- , Command.Copy.def
- , Command.Unlock.def
- , Command.Lock.def
- , Command.Sync.def
- , Command.Mirror.def
- , Command.AddUrl.def
+ [ Command.Add.cmd
+ , Command.Get.cmd
+ , Command.Drop.cmd
+ , Command.Move.cmd
+ , Command.Copy.cmd
+ , Command.Unlock.cmd
+ , Command.Lock.cmd
+ , Command.Sync.cmd
+ , Command.Mirror.cmd
+ , Command.AddUrl.cmd
#ifdef WITH_FEED
- , Command.ImportFeed.def
+ , Command.ImportFeed.cmd
#endif
- , Command.RmUrl.def
- , Command.Import.def
- , Command.Init.def
- , Command.Describe.def
- , Command.InitRemote.def
- , Command.EnableRemote.def
- , Command.Reinject.def
- , Command.Unannex.def
- , Command.Uninit.def
- , Command.PreCommit.def
- , Command.NumCopies.def
- , Command.Trust.def
- , Command.Untrust.def
- , Command.Semitrust.def
- , Command.Dead.def
- , Command.Group.def
- , Command.Wanted.def
- , Command.Schedule.def
- , Command.Ungroup.def
- , Command.Vicfg.def
- , Command.LookupKey.def
- , Command.ExamineKey.def
- , Command.FromKey.def
- , Command.DropKey.def
- , Command.TransferKey.def
- , Command.TransferKeys.def
- , Command.ReKey.def
- , Command.MetaData.def
- , Command.View.def
- , Command.VAdd.def
- , Command.VFilter.def
- , Command.VPop.def
- , Command.VCycle.def
- , Command.Fix.def
- , Command.Fsck.def
- , Command.Repair.def
- , Command.Unused.def
- , Command.DropUnused.def
- , Command.AddUnused.def
- , Command.Find.def
- , Command.Whereis.def
- , Command.List.def
- , Command.Log.def
- , Command.Merge.def
- , Command.Info.def
- , Command.Status.def
- , Command.Migrate.def
- , Command.Map.def
- , Command.Direct.def
- , Command.Indirect.def
- , Command.Upgrade.def
- , Command.Forget.def
- , Command.Version.def
- , Command.Help.def
+ , Command.RmUrl.cmd
+ , Command.Import.cmd
+ , Command.Init.cmd
+ , Command.Describe.cmd
+ , Command.InitRemote.cmd
+ , Command.EnableRemote.cmd
+ , Command.Reinject.cmd
+ , Command.Unannex.cmd
+ , Command.Uninit.cmd
+ , Command.Reinit.cmd
+ , Command.PreCommit.cmd
+ , Command.NumCopies.cmd
+ , Command.Trust.cmd
+ , Command.Untrust.cmd
+ , Command.Semitrust.cmd
+ , Command.Dead.cmd
+ , Command.Group.cmd
+ , Command.Wanted.cmd
+ , Command.GroupWanted.cmd
+ , Command.Schedule.cmd
+ , Command.Ungroup.cmd
+ , Command.Vicfg.cmd
+ , Command.LookupKey.cmd
+ , Command.ExamineKey.cmd
+ , Command.FromKey.cmd
+ , Command.DropKey.cmd
+ , Command.TransferKey.cmd
+ , Command.TransferKeys.cmd
+ , Command.SetPresentKey.cmd
+ , Command.ReKey.cmd
+ , Command.MetaData.cmd
+ , Command.View.cmd
+ , Command.VAdd.cmd
+ , Command.VFilter.cmd
+ , Command.VPop.cmd
+ , Command.VCycle.cmd
+ , Command.Fix.cmd
+ , Command.Fsck.cmd
+ , Command.Repair.cmd
+ , Command.Unused.cmd
+ , Command.DropUnused.cmd
+ , Command.AddUnused.cmd
+ , Command.Find.cmd
+ , Command.FindRef.cmd
+ , Command.Whereis.cmd
+ , Command.List.cmd
+ , Command.Log.cmd
+ , Command.Merge.cmd
+ , Command.ResolveMerge.cmd
+ , Command.Info.cmd
+ , Command.Status.cmd
+ , Command.Migrate.cmd
+ , Command.Map.cmd
+ , Command.Direct.cmd
+ , Command.Indirect.cmd
+ , Command.Upgrade.cmd
+ , Command.Forget.cmd
+ , Command.Proxy.cmd
+ , Command.DiffDriver.cmd
+ , Command.Undo.cmd
+ , Command.Version.cmd
+ , Command.Help.cmd
#ifdef WITH_ASSISTANT
- , Command.Watch.def
- , Command.Assistant.def
+ , Command.Watch.cmd
+ , Command.Assistant.cmd
#ifdef WITH_WEBAPP
- , Command.WebApp.def
+ , Command.WebApp.cmd
#endif
#ifdef WITH_XMPP
- , Command.XMPPGit.def
+ , Command.XMPPGit.cmd
#endif
+ , Command.RemoteDaemon.cmd
#endif
- , Command.Test.def
+ , Command.Test.cmd
#ifdef WITH_TESTSUITE
- , Command.FuzzTest.def
+ , Command.FuzzTest.cmd
+ , Command.TestRemote.cmd
#endif
]
@@ -191,4 +213,11 @@ run args = do
#ifdef WITH_EKG
_ <- forkServer "localhost" 4242
#endif
- dispatch True args cmds gitAnnexOptions [] header Git.CurrentRepo.get
+ go envmodes
+ where
+ go [] = dispatch True args cmds gitAnnexOptions [] header Git.CurrentRepo.get
+ go ((v, a):rest) = maybe (go rest) a =<< getEnv v
+ envmodes =
+ [ (sshOptionsEnv, runSshOptions args)
+ , (sshAskPassEnv, runSshAskPass)
+ ]
diff --git a/CmdLine/GitAnnex/Options.hs b/CmdLine/GitAnnex/Options.hs
index f9f5989ee..add29d8da 100644
--- a/CmdLine/GitAnnex/Options.hs
+++ b/CmdLine/GitAnnex/Options.hs
@@ -1,6 +1,6 @@
{- git-annex options
-
- - Copyright 2010, 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2015 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -22,6 +22,8 @@ import qualified Limit.Wanted
import CmdLine.Option
import CmdLine.Usage
+-- Options that are accepted by all git-annex sub-commands,
+-- although not always used.
gitAnnexOptions :: [Option]
gitAnnexOptions = commonOptions ++
[ Option ['N'] ["numcopies"] (ReqArg setnumcopies paramNumber)
@@ -34,39 +36,11 @@ gitAnnexOptions = commonOptions ++
"override trust setting to untrusted"
, Option ['c'] ["config"] (ReqArg setgitconfig "NAME=VALUE")
"override git configuration setting"
- , Option ['x'] ["exclude"] (ReqArg Limit.addExclude paramGlob)
- "skip files matching the glob pattern"
- , Option ['I'] ["include"] (ReqArg Limit.addInclude paramGlob)
- "limit to files matching the glob pattern"
- , Option ['i'] ["in"] (ReqArg Limit.addIn paramRemote)
- "match files present in a remote"
- , Option ['C'] ["copies"] (ReqArg Limit.addCopies paramNumber)
- "skip files with fewer copies"
- , Option [] ["lackingcopies"] (ReqArg (Limit.addLackingCopies False) paramNumber)
- "match files that need more copies"
- , Option [] ["approxlackingcopies"] (ReqArg (Limit.addLackingCopies True) paramNumber)
- "match files that need more copies (faster)"
- , Option ['B'] ["inbackend"] (ReqArg Limit.addInBackend paramName)
- "match files using a key-value backend"
- , Option [] ["inallgroup"] (ReqArg Limit.addInAllGroup paramGroup)
- "match files present in all remotes in a group"
- , Option [] ["largerthan"] (ReqArg Limit.addLargerThan paramSize)
- "match files larger than a size"
- , Option [] ["smallerthan"] (ReqArg Limit.addSmallerThan paramSize)
- "match files smaller than a size"
- , Option [] ["metadata"] (ReqArg Limit.addMetaData "FIELD=VALUE")
- "match files with attached metadata"
- , Option [] ["want-get"] (NoArg Limit.Wanted.addWantGet)
- "match files the repository wants to get"
- , Option [] ["want-drop"] (NoArg Limit.Wanted.addWantDrop)
- "match files the repository wants to drop"
- , Option ['T'] ["time-limit"] (ReqArg Limit.addTimeLimit paramTime)
- "stop after the specified amount of time"
, Option [] ["user-agent"] (ReqArg setuseragent paramName)
"override default User-Agent"
, Option [] ["trust-glacier"] (NoArg (Annex.setFlag "trustglacier"))
"Trust Amazon Glacier inventory"
- ] ++ matcherOptions
+ ]
where
trustArg t = ReqArg (Remote.forceTrust t) paramRemote
setnumcopies v = maybe noop
@@ -77,6 +51,7 @@ gitAnnexOptions = commonOptions ++
>>= pure . (\r -> r { gitGlobalOpts = gitGlobalOpts r ++ [Param "-c", Param v] })
>>= Annex.changeGitRepo
+-- Options for matching on annexed keys, rather than work tree files.
keyOptions :: [Option]
keyOptions =
[ Option ['A'] ["all"] (NoArg (Annex.setFlag "all"))
@@ -87,6 +62,69 @@ keyOptions =
"operate on specified key"
]
+-- Options to match properties of annexed files.
+annexedMatchingOptions :: [Option]
+annexedMatchingOptions = concat
+ [ nonWorkTreeMatchingOptions'
+ , fileMatchingOptions'
+ , combiningOptions
+ , [timeLimitOption]
+ ]
+
+-- Matching options that don't need to examine work tree files.
+nonWorkTreeMatchingOptions :: [Option]
+nonWorkTreeMatchingOptions = nonWorkTreeMatchingOptions' ++ combiningOptions
+
+nonWorkTreeMatchingOptions' :: [Option]
+nonWorkTreeMatchingOptions' =
+ [ Option ['i'] ["in"] (ReqArg Limit.addIn paramRemote)
+ "match files present in a remote"
+ , Option ['C'] ["copies"] (ReqArg Limit.addCopies paramNumber)
+ "skip files with fewer copies"
+ , Option [] ["lackingcopies"] (ReqArg (Limit.addLackingCopies False) paramNumber)
+ "match files that need more copies"
+ , Option [] ["approxlackingcopies"] (ReqArg (Limit.addLackingCopies True) paramNumber)
+ "match files that need more copies (faster)"
+ , Option ['B'] ["inbackend"] (ReqArg Limit.addInBackend paramName)
+ "match files using a key-value backend"
+ , Option [] ["inallgroup"] (ReqArg Limit.addInAllGroup paramGroup)
+ "match files present in all remotes in a group"
+ , Option [] ["metadata"] (ReqArg Limit.addMetaData "FIELD=VALUE")
+ "match files with attached metadata"
+ , Option [] ["want-get"] (NoArg Limit.Wanted.addWantGet)
+ "match files the repository wants to get"
+ , Option [] ["want-drop"] (NoArg Limit.Wanted.addWantDrop)
+ "match files the repository wants to drop"
+ ]
+
+-- Options to match files which may not yet be annexed.
+fileMatchingOptions :: [Option]
+fileMatchingOptions = fileMatchingOptions' ++ combiningOptions
+
+fileMatchingOptions' :: [Option]
+fileMatchingOptions' =
+ [ Option ['x'] ["exclude"] (ReqArg Limit.addExclude paramGlob)
+ "skip files matching the glob pattern"
+ , Option ['I'] ["include"] (ReqArg Limit.addInclude paramGlob)
+ "limit to files matching the glob pattern"
+ , Option [] ["largerthan"] (ReqArg Limit.addLargerThan paramSize)
+ "match files larger than a size"
+ , Option [] ["smallerthan"] (ReqArg Limit.addSmallerThan paramSize)
+ "match files smaller than a size"
+ ]
+
+combiningOptions :: [Option]
+combiningOptions =
+ [ longopt "not" "negate next option"
+ , longopt "and" "both previous and next option must match"
+ , longopt "or" "either previous or next option must match"
+ , shortopt "(" "open group of options"
+ , shortopt ")" "close group of options"
+ ]
+ where
+ longopt o = Option [] [o] $ NoArg $ Limit.addToken o
+ shortopt o = Option o [] $ NoArg $ Limit.addToken o
+
fromOption :: Option
fromOption = fieldOption ['f'] "from" paramRemote "source remote"
@@ -99,3 +137,8 @@ fromToOptions = [fromOption, toOption]
jsonOption :: Option
jsonOption = Option ['j'] ["json"] (NoArg (Annex.setOutput JSONOutput))
"enable JSON output"
+
+timeLimitOption :: Option
+timeLimitOption = Option ['T'] ["time-limit"]
+ (ReqArg Limit.addTimeLimit paramTime)
+ "stop after the specified amount of time"
diff --git a/CmdLine/GitAnnexShell.hs b/CmdLine/GitAnnexShell.hs
index f490792b0..b1b351e3b 100644
--- a/CmdLine/GitAnnexShell.hs
+++ b/CmdLine/GitAnnexShell.hs
@@ -1,6 +1,6 @@
{- git-annex-shell main program
-
- - Copyright 2010-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -29,22 +29,24 @@ import qualified Command.RecvKey
import qualified Command.SendKey
import qualified Command.TransferInfo
import qualified Command.Commit
+import qualified Command.NotifyChanges
import qualified Command.GCryptSetup
cmds_readonly :: [Command]
cmds_readonly = concat
- [ gitAnnexShellCheck Command.ConfigList.def
- , gitAnnexShellCheck Command.InAnnex.def
- , gitAnnexShellCheck Command.SendKey.def
- , gitAnnexShellCheck Command.TransferInfo.def
+ [ gitAnnexShellCheck Command.ConfigList.cmd
+ , gitAnnexShellCheck Command.InAnnex.cmd
+ , gitAnnexShellCheck Command.SendKey.cmd
+ , gitAnnexShellCheck Command.TransferInfo.cmd
+ , gitAnnexShellCheck Command.NotifyChanges.cmd
]
cmds_notreadonly :: [Command]
cmds_notreadonly = concat
- [ gitAnnexShellCheck Command.RecvKey.def
- , gitAnnexShellCheck Command.DropKey.def
- , gitAnnexShellCheck Command.Commit.def
- , Command.GCryptSetup.def
+ [ gitAnnexShellCheck Command.RecvKey.cmd
+ , gitAnnexShellCheck Command.DropKey.cmd
+ , gitAnnexShellCheck Command.Commit.cmd
+ , Command.GCryptSetup.cmd
]
cmds :: [Command]
@@ -64,7 +66,7 @@ options = commonOptions ++
check u = unexpectedUUID expected u
checkGCryptUUID expected = check =<< getGCryptUUID True =<< gitRepo
where
- check (Just u) | u == toUUID expected = noop
+ check (Just u) | u == toUUID expected = noop
check Nothing = unexpected expected "uninitialized repository"
check (Just u) = unexpectedUUID expected u
unexpectedUUID expected u = unexpected expected $ "UUID " ++ fromUUID u
diff --git a/CmdLine/GitAnnexShell/Fields.hs b/CmdLine/GitAnnexShell/Fields.hs
index 4f208773b..93b048040 100644
--- a/CmdLine/GitAnnexShell/Fields.hs
+++ b/CmdLine/GitAnnexShell/Fields.hs
@@ -1,6 +1,6 @@
{- git-annex-shell fields
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/CmdLine/Option.hs b/CmdLine/Option.hs
index 915b06849..2d4e67fa3 100644
--- a/CmdLine/Option.hs
+++ b/CmdLine/Option.hs
@@ -1,16 +1,16 @@
{- common command-line options
-
- - Copyright 2010-2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module CmdLine.Option (
commonOptions,
- matcherOptions,
flagOption,
fieldOption,
optionName,
+ optionParam,
ArgDescr(..),
OptDescr(..),
) where
@@ -20,9 +20,10 @@ import System.Console.GetOpt
import Common.Annex
import qualified Annex
import Types.Messages
-import Limit
+import Types.DesktopNotify
import CmdLine.Usage
+-- Options accepted by both git-annex and git-annex-shell sub-commands.
commonOptions :: [Option]
commonOptions =
[ Option [] ["force"] (NoArg (setforce True))
@@ -41,6 +42,10 @@ commonOptions =
"don't show debug messages"
, Option ['b'] ["backend"] (ReqArg setforcebackend paramName)
"specify key-value backend to use"
+ , Option [] ["notify-finish"] (NoArg (setdesktopnotify mkNotifyFinish))
+ "show desktop notification after transfer finishes"
+ , Option [] ["notify-start"] (NoArg (setdesktopnotify mkNotifyStart))
+ "show desktop notification after transfer completes"
]
where
setforce v = Annex.changeState $ \s -> s { Annex.force = v }
@@ -49,18 +54,7 @@ commonOptions =
setforcebackend v = Annex.changeState $ \s -> s { Annex.forcebackend = Just v }
setdebug = Annex.changeGitConfig $ \c -> c { annexDebug = True }
unsetdebug = Annex.changeGitConfig $ \c -> c { annexDebug = False }
-
-matcherOptions :: [Option]
-matcherOptions =
- [ longopt "not" "negate next option"
- , longopt "and" "both previous and next option must match"
- , longopt "or" "either previous or next option must match"
- , shortopt "(" "open group of options"
- , shortopt ")" "close group of options"
- ]
- where
- longopt o = Option [] [o] $ NoArg $ addToken o
- shortopt o = Option o [] $ NoArg $ addToken o
+ setdesktopnotify v = Annex.changeState $ \s -> s { Annex.desktopnotify = Annex.desktopnotify s <> v }
{- An option that sets a flag. -}
flagOption :: String -> String -> String -> Option
@@ -75,3 +69,6 @@ fieldOption short opt paramdesc description =
{- The flag or field name used for an option. -}
optionName :: Option -> String
optionName (Option _ o _ _) = Prelude.head o
+
+optionParam :: Option -> String
+optionParam o = "--" ++ optionName o
diff --git a/CmdLine/Seek.hs b/CmdLine/Seek.hs
index e95b9f005..7bfea45d0 100644
--- a/CmdLine/Seek.hs
+++ b/CmdLine/Seek.hs
@@ -4,7 +4,7 @@
- the values a user passes to a command, and prepare actions operating
- on them.
-
- - Copyright 2010-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -19,6 +19,8 @@ import qualified Annex
import qualified Git
import qualified Git.Command
import qualified Git.LsFiles as LsFiles
+import qualified Git.LsTree as LsTree
+import Git.FilePath
import qualified Limit
import CmdLine.Option
import CmdLine.Action
@@ -30,14 +32,36 @@ withFilesInGit :: (FilePath -> CommandStart) -> CommandSeek
withFilesInGit a params = seekActions $ prepFiltered a $
seekHelper LsFiles.inRepo params
-withFilesNotInGit :: (FilePath -> CommandStart) -> CommandSeek
-withFilesNotInGit a params = do
- {- dotfiles are not acted on unless explicitly listed -}
- files <- filter (not . dotfile) <$>
- seekunless (null ps && not (null params)) ps
- dotfiles <- seekunless (null dotps) dotps
- seekActions $ prepFiltered a $
- return $ concat $ segmentPaths params (files++dotfiles)
+withFilesInGitNonRecursive :: (FilePath -> CommandStart) -> CommandSeek
+withFilesInGitNonRecursive a params = ifM (Annex.getState Annex.force)
+ ( withFilesInGit a params
+ , if null params
+ then needforce
+ else seekActions $ prepFiltered a (getfiles [] params)
+ )
+ where
+ getfiles c [] = return (reverse c)
+ getfiles c (p:ps) = do
+ (fs, cleanup) <- inRepo $ LsFiles.inRepo [p]
+ case fs of
+ [f] -> do
+ void $ liftIO $ cleanup
+ getfiles (f:c) ps
+ [] -> do
+ void $ liftIO $ cleanup
+ getfiles c ps
+ _ -> needforce
+ needforce = error "Not recursively setting metadata. Use --force to do that."
+
+withFilesNotInGit :: Bool -> (FilePath -> CommandStart) -> CommandSeek
+withFilesNotInGit skipdotfiles a params
+ | skipdotfiles = do
+ {- dotfiles are not acted on unless explicitly listed -}
+ files <- filter (not . dotfile) <$>
+ seekunless (null ps && not (null params)) ps
+ dotfiles <- seekunless (null dotps) dotps
+ go (files++dotfiles)
+ | otherwise = go =<< seekunless False params
where
(dotps, ps) = partition dotfile params
seekunless True _ = return []
@@ -45,16 +69,38 @@ withFilesNotInGit a params = do
force <- Annex.getState Annex.force
g <- gitRepo
liftIO $ Git.Command.leaveZombie <$> LsFiles.notInRepo force l g
+ go l = seekActions $ prepFiltered a $
+ return $ concat $ segmentPaths params l
+
+withFilesInRefs :: (FilePath -> Key -> CommandStart) -> CommandSeek
+withFilesInRefs a = mapM_ go
+ where
+ go r = do
+ matcher <- Limit.getMatcher
+ l <- inRepo $ LsTree.lsTree (Git.Ref r)
+ forM_ l $ \i -> do
+ let f = getTopFilePath $ LsTree.file i
+ v <- catKey (Git.Ref $ LsTree.sha i) (LsTree.mode i)
+ case v of
+ Nothing -> noop
+ Just k -> whenM (matcher $ MatchingKey k) $
+ void $ commandAction $ a f k
withPathContents :: ((FilePath, FilePath) -> CommandStart) -> CommandSeek
-withPathContents a params = seekActions $
- map a . concat <$> liftIO (mapM get params)
+withPathContents a params = do
+ matcher <- Limit.getMatcher
+ seekActions $ map a <$> (filterM (checkmatch matcher) =<< ps)
where
+ ps = concat <$> liftIO (mapM get params)
get p = ifM (isDirectory <$> getFileStatus p)
( map (\f -> (f, makeRelative (parentDir p) f))
<$> dirContentsRecursiveSkipping (".git" `isSuffixOf`) True p
, return [(p, takeFileName p)]
)
+ checkmatch matcher (f, relf) = matcher $ MatchingFile $ FileInfo
+ { currFile = f
+ , matchFile = relf
+ }
withWords :: ([String] -> CommandStart) -> CommandSeek
withWords a params = seekActions $ return [a params]
@@ -88,9 +134,11 @@ withFilesUnlocked' :: ([FilePath] -> Git.Repo -> IO ([FilePath], IO Bool)) -> (F
withFilesUnlocked' typechanged a params = seekActions $
prepFiltered a unlockedfiles
where
- check f = liftIO (notSymlink f) <&&>
- (isJust <$> catKeyFile f <||> isJust <$> catKeyFileHEAD f)
- unlockedfiles = filterM check =<< seekHelper typechanged params
+ unlockedfiles = filterM isUnlocked =<< seekHelper typechanged params
+
+isUnlocked :: FilePath -> Annex Bool
+isUnlocked f = liftIO (notSymlink f) <&&>
+ (isJust <$> catKeyFile f <||> isJust <$> catKeyFileHEAD f)
{- Finds files that may be modified. -}
withFilesMaybeModified :: (FilePath -> CommandStart) -> CommandSeek
@@ -146,7 +194,7 @@ withKeyOptions keyop fallbackop params = do
Just k -> go auto $ return [k]
_ -> error "Can only specify one of file names, --all, --unused, or --key"
where
- go True _ = error "Cannot use --auto with --all or --unused or --key"
+ go True _ = error "Cannot use --auto with --all or --unused or --key"
go False a = do
matcher <- Limit.getMatcher
seekActions $ map (process matcher) <$> a
@@ -170,10 +218,9 @@ seekHelper :: ([FilePath] -> Git.Repo -> IO ([FilePath], IO Bool)) -> [FilePath]
seekHelper a params = do
ll <- inRepo $ \g ->
runSegmentPaths (\fs -> Git.Command.leaveZombie <$> a fs g) params
- {- Show warnings only for files/directories that do not exist. -}
forM_ (map fst $ filter (null . snd) $ zip params ll) $ \p ->
unlessM (isJust <$> liftIO (catchMaybeIO $ getSymbolicLinkStatus p)) $
- fileNotFound p
+ error $ p ++ " not found"
return $ concat ll
notSymlink :: FilePath -> IO Bool
diff --git a/CmdLine/Usage.hs b/CmdLine/Usage.hs
index 1d0bba954..82619a304 100644
--- a/CmdLine/Usage.hs
+++ b/CmdLine/Usage.hs
@@ -1,6 +1,6 @@
{- git-annex usage messages
-
- - Copyright 2010-2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -93,6 +93,8 @@ paramFormat :: String
paramFormat = "FORMAT"
paramFile :: String
paramFile = "FILE"
+paramRef :: String
+paramRef = "REF"
paramGroup :: String
paramGroup = "GROUP"
paramExpression :: String
@@ -101,6 +103,8 @@ paramSize :: String
paramSize = "SIZE"
paramAddress :: String
paramAddress = "ADDRESS"
+paramItem :: String
+paramItem = "ITEM"
paramKeyValue :: String
paramKeyValue = "K=V"
paramNothing :: String
diff --git a/Command.hs b/Command.hs
index 3faa4053c..fd12991a4 100644
--- a/Command.hs
+++ b/Command.hs
@@ -1,6 +1,6 @@
{- git-annex command infrastructure
-
- - Copyright 2010-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -55,7 +55,7 @@ noRepo a c = c { cmdnorepo = Just a }
{- Adds options to a command. -}
withOptions :: [Option] -> Command -> Command
-withOptions o c = c { cmdoptions = o }
+withOptions o c = c { cmdoptions = cmdoptions c ++ o }
{- For start and perform stages to indicate what step to run next. -}
next :: a -> Annex (Maybe a)
@@ -70,11 +70,11 @@ stopUnless :: Annex Bool -> Annex (Maybe a) -> Annex (Maybe a)
stopUnless c a = ifM c ( a , stop )
{- Modifies an action to only act on files that are already annexed,
- - and passes the key and backend on to it. -}
-whenAnnexed :: (FilePath -> (Key, Backend) -> Annex (Maybe a)) -> FilePath -> Annex (Maybe a)
+ - and passes the key on to it. -}
+whenAnnexed :: (FilePath -> Key -> Annex (Maybe a)) -> FilePath -> Annex (Maybe a)
whenAnnexed a file = ifAnnexed file (a file) (return Nothing)
-ifAnnexed :: FilePath -> ((Key, Backend) -> Annex a) -> Annex a -> Annex a
+ifAnnexed :: FilePath -> (Key -> Annex a) -> Annex a -> Annex a
ifAnnexed file yes no = maybe no yes =<< Backend.lookupFile file
isBareRepo :: Annex Bool
diff --git a/Command/Add.hs b/Command/Add.hs
index 0c8e2a48d..7faa7c80d 100644
--- a/Command/Add.hs
+++ b/Command/Add.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010, 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010, 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -10,7 +10,6 @@
module Command.Add where
import Common.Annex
-import Annex.Exception
import Command
import Types.KeySource
import Backend
@@ -33,9 +32,17 @@ import Annex.FileMatcher
import Annex.ReplaceFile
import Utility.Tmp
-def :: [Command]
-def = [notBareRepo $ command "add" paramPaths seek SectionCommon
- "add files to annex"]
+import Control.Exception (IOException)
+
+cmd :: [Command]
+cmd = [notBareRepo $ withOptions addOptions $
+ command "add" paramPaths seek SectionCommon "add files to annex"]
+
+addOptions :: [Option]
+addOptions = includeDotFilesOption : fileMatchingOptions
+
+includeDotFilesOption :: Option
+includeDotFilesOption = flagOption [] "include-dotfiles" "don't skip dotfiles"
{- Add acts on both files not checked into git yet, and unlocked files.
-
@@ -47,7 +54,8 @@ seek ps = do
( start file
, stop
)
- go withFilesNotInGit
+ skipdotfiles <- not <$> Annex.getFlag (optionName includeDotFilesOption)
+ go $ withFilesNotInGit skipdotfiles
ifM isDirect
( go withFilesMaybeModified
, go withFilesUnlocked
@@ -68,15 +76,20 @@ start file = ifAnnexed file addpresent add
| otherwise -> do
showStart "add" file
next $ perform file
- addpresent (key, _) = ifM isDirect
- ( ifM (goodContent key file) ( stop , add )
+ addpresent key = ifM isDirect
+ ( do
+ ms <- liftIO $ catchMaybeIO $ getSymbolicLinkStatus file
+ case ms of
+ Just s | isSymbolicLink s -> fixup key
+ _ -> ifM (goodContent key file) ( stop , add )
, fixup key
)
fixup key = do
- -- fixup from an interrupted add; the symlink
- -- is present but not yet added to git
+ -- the annexed symlink is present but not yet added to git
showStart "add" file
liftIO $ removeFile file
+ whenM isDirect $
+ void $ addAssociatedFile key file
next $ next $ cleanup file key Nothing =<< inAnnex key
{- The file that's being added is locked down before a key is generated,
@@ -97,8 +110,8 @@ lockDown = either (\e -> showErr e >> return Nothing) (return . Just) <=< lockDo
lockDown' :: FilePath -> Annex (Either IOException KeySource)
lockDown' file = ifM crippledFileSystem
- ( liftIO $ tryIO nohardlink
- , tryAnnexIO $ do
+ ( withTSDelta $ liftIO . tryIO . nohardlink
+ , tryIO $ do
tmp <- fromRepo gitAnnexTmpMiscDir
createAnnexDirectory tmp
go tmp
@@ -114,25 +127,25 @@ lockDown' file = ifM crippledFileSystem
- This is not done in direct mode, because files there need to
- remain writable at all times.
-}
- go tmp = do
+ go tmp = do
unlessM isDirect $
freezeContent file
- liftIO $ do
+ withTSDelta $ \delta -> liftIO $ do
(tmpfile, h) <- openTempFile tmp $
relatedTemplate $ takeFileName file
hClose h
nukeFile tmpfile
- withhardlink tmpfile `catchIO` const nohardlink
- nohardlink = do
- cache <- genInodeCache file
+ withhardlink delta tmpfile `catchIO` const (nohardlink delta)
+ nohardlink delta = do
+ cache <- genInodeCache file delta
return KeySource
{ keyFilename = file
, contentLocation = file
, inodeCache = cache
}
- withhardlink tmpfile = do
+ withhardlink delta tmpfile = do
createLink file tmpfile
- cache <- genInodeCache tmpfile
+ cache <- genInodeCache tmpfile delta
return KeySource
{ keyFilename = file
, contentLocation = tmpfile
@@ -146,11 +159,12 @@ lockDown' file = ifM crippledFileSystem
-}
ingest :: Maybe KeySource -> Annex (Maybe Key, Maybe InodeCache)
ingest Nothing = return (Nothing, Nothing)
-ingest (Just source) = do
+ingest (Just source) = withTSDelta $ \delta -> do
backend <- chooseBackend $ keyFilename source
k <- genKey source backend
- ms <- liftIO $ catchMaybeIO $ getFileStatus $ contentLocation source
- let mcache = toInodeCache =<< ms
+ let src = contentLocation source
+ ms <- liftIO $ catchMaybeIO $ getFileStatus src
+ mcache <- maybe (pure Nothing) (liftIO . toInodeCache delta src) ms
case (mcache, inodeCache source) of
(_, Nothing) -> go k mcache ms
(Just newc, Just c) | compareStrong c newc -> go k mcache ms
@@ -162,18 +176,18 @@ ingest (Just source) = do
)
goindirect (Just (key, _)) mcache ms = do
- catchAnnex (moveAnnex key $ contentLocation source)
+ catchNonAsync (moveAnnex key $ contentLocation source)
(undo (keyFilename source) key)
maybe noop (genMetaData key (keyFilename source)) ms
liftIO $ nukeFile $ keyFilename source
- return $ (Just key, mcache)
+ return (Just key, mcache)
goindirect _ _ _ = failure "failed to generate a key"
godirect (Just (key, _)) (Just cache) ms = do
addInodeCache key cache
maybe noop (genMetaData key (keyFilename source)) ms
finishIngestDirect key source
- return $ (Just key, Just cache)
+ return (Just key, Just cache)
godirect _ _ _ = failure "failed to generate a key"
failure msg = do
@@ -196,29 +210,29 @@ finishIngestDirect key source = do
perform :: FilePath -> CommandPerform
perform file = lockDown file >>= ingest >>= go
where
- go (Just key, cache) = next $ cleanup file key cache True
+ go (Just key, cache) = next $ cleanup file key cache True
go (Nothing, _) = stop
{- On error, put the file back so it doesn't seem to have vanished.
- This can be called before or after the symlink is in place. -}
-undo :: FilePath -> Key -> IOException -> Annex a
+undo :: FilePath -> Key -> SomeException -> Annex a
undo file key e = do
whenM (inAnnex key) $ do
liftIO $ nukeFile file
- catchAnnex (fromAnnex key file) tryharder
+ catchNonAsync (fromAnnex key file) tryharder
logStatus key InfoMissing
- throwAnnex e
+ throwM e
where
-- fromAnnex could fail if the file ownership is weird
- tryharder :: IOException -> Annex ()
+ tryharder :: SomeException -> Annex ()
tryharder _ = do
src <- calcRepo $ gitAnnexLocation key
liftIO $ moveFile src file
{- Creates the symlink to the annexed content, returns the link target. -}
link :: FilePath -> Key -> Maybe InodeCache -> Annex String
-link file key mcache = flip catchAnnex (undo file key) $ do
- l <- inRepo $ gitAnnexLink file key
+link file key mcache = flip catchNonAsync (undo file key) $ do
+ l <- calcRepo $ gitAnnexLink file key
replaceFile file $ makeAnnexLink l
-- touch symlink to have same time as the original file,
@@ -260,7 +274,7 @@ cleanup :: FilePath -> Key -> Maybe InodeCache -> Bool -> CommandCleanup
cleanup file key mcache hascontent = do
ifM (isDirect <&&> pure hascontent)
( do
- l <- inRepo $ gitAnnexLink file key
+ l <- calcRepo $ gitAnnexLink file key
stageSymlink file =<< hashSymlink l
, addLink file key mcache
)
diff --git a/Command/AddUnused.hs b/Command/AddUnused.hs
index 91427e819..4aab8d017 100644
--- a/Command/AddUnused.hs
+++ b/Command/AddUnused.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -14,8 +14,8 @@ import qualified Command.Add
import Command.Unused (withUnusedMaps, UnusedMaps(..), startUnused)
import Types.Key
-def :: [Command]
-def = [notDirect $ command "addunused" (paramRepeating paramNumRange)
+cmd :: [Command]
+cmd = [notDirect $ command "addunused" (paramRepeating paramNumRange)
seek SectionMaintenance "add back unused files"]
seek :: CommandSeek
diff --git a/Command/AddUrl.hs b/Command/AddUrl.hs
index a0978a88d..426bc372c 100644
--- a/Command/AddUrl.hs
+++ b/Command/AddUrl.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2011-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -19,21 +19,26 @@ import qualified Annex
import qualified Annex.Queue
import qualified Annex.Url as Url
import qualified Backend.URL
+import qualified Remote
+import qualified Types.Remote as Remote
import Annex.Content
+import Annex.UUID
import Logs.Web
import Types.Key
import Types.KeySource
+import Types.UrlContents
import Config
import Annex.Content.Direct
import Logs.Location
-import qualified Logs.Transfer as Transfer
+import Utility.Metered
+import qualified Annex.Transfer as Transfer
#ifdef WITH_QUVI
import Annex.Quvi
import qualified Utility.Quvi as Quvi
#endif
-def :: [Command]
-def = [notBareRepo $ withOptions [fileOption, pathdepthOption, relaxedOption] $
+cmd :: [Command]
+cmd = [notBareRepo $ withOptions [fileOption, pathdepthOption, relaxedOption] $
command "addurl" (paramRepeating paramUrl) seek
SectionCommon "add urls to annex"]
@@ -47,24 +52,84 @@ relaxedOption :: Option
relaxedOption = flagOption [] "relaxed" "skip size check"
seek :: CommandSeek
-seek ps = do
- f <- getOptionField fileOption return
+seek us = do
+ optfile <- getOptionField fileOption return
relaxed <- getOptionFlag relaxedOption
- d <- getOptionField pathdepthOption (return . maybe Nothing readish)
- withStrings (start relaxed f d) ps
+ pathdepth <- getOptionField pathdepthOption (return . maybe Nothing readish)
+ forM_ us $ \u -> do
+ r <- Remote.claimingUrl u
+ if Remote.uuid r == webUUID
+ then void $ commandAction $ startWeb relaxed optfile pathdepth u
+ else do
+ pathmax <- liftIO $ fileNameLengthLimit "."
+ let deffile = fromMaybe (urlString2file u pathdepth pathmax) optfile
+ res <- tryNonAsync $ maybe
+ (error $ "unable to checkUrl of " ++ Remote.name r)
+ (flip id u)
+ (Remote.checkUrl r)
+ case res of
+ Left e -> void $ commandAction $ do
+ showStart "addurl" u
+ warning (show e)
+ next $ next $ return False
+ Right (UrlContents sz mf) -> do
+ void $ commandAction $
+ startRemote r relaxed (maybe deffile fromSafeFilePath mf) u sz
+ Right (UrlMulti l) ->
+ forM_ l $ \(u', sz, f) ->
+ void $ commandAction $
+ startRemote r relaxed (deffile </> fromSafeFilePath f) u' sz
-start :: Bool -> Maybe FilePath -> Maybe Int -> String -> CommandStart
-start relaxed optfile pathdepth s = go $ fromMaybe bad $ parseURI s
+startRemote :: Remote -> Bool -> FilePath -> URLString -> Maybe Integer -> CommandStart
+startRemote r relaxed file uri sz = do
+ pathmax <- liftIO $ fileNameLengthLimit "."
+ let file' = joinPath $ map (truncateFilePath pathmax) $ splitDirectories file
+ showStart "addurl" file'
+ showNote $ "from " ++ Remote.name r
+ next $ performRemote r relaxed uri file' sz
+
+performRemote :: Remote -> Bool -> URLString -> FilePath -> Maybe Integer -> CommandPerform
+performRemote r relaxed uri file sz = ifAnnexed file adduri geturi
where
- (s', downloader) = getDownloader s
- bad = fromMaybe (error $ "bad url " ++ s') $
- parseURI $ escapeURIString isUnescapedInURI s'
- choosefile = flip fromMaybe optfile
+ loguri = setDownloader uri OtherDownloader
+ adduri = addUrlChecked relaxed loguri (Remote.uuid r) checkexistssize
+ checkexistssize key = return $ case sz of
+ Nothing -> (True, True)
+ Just n -> (True, n == fromMaybe n (keySize key))
+ geturi = next $ isJust <$> downloadRemoteFile r relaxed uri file sz
+
+downloadRemoteFile :: Remote -> Bool -> URLString -> FilePath -> Maybe Integer -> Annex (Maybe Key)
+downloadRemoteFile r relaxed uri file sz = do
+ urlkey <- Backend.URL.fromUrl uri sz
+ liftIO $ createDirectoryIfMissing True (parentDir file)
+ ifM (Annex.getState Annex.fast <||> pure relaxed)
+ ( do
+ cleanup (Remote.uuid r) loguri file urlkey Nothing
+ return (Just urlkey)
+ , do
+ -- Set temporary url for the urlkey
+ -- so that the remote knows what url it
+ -- should use to download it.
+ setTempUrl urlkey loguri
+ let downloader = Remote.retrieveKeyFile r urlkey (Just file)
+ ret <- downloadWith downloader urlkey (Remote.uuid r) loguri file
+ removeTempUrl urlkey
+ return ret
+ )
+ where
+ loguri = setDownloader uri OtherDownloader
+
+startWeb :: Bool -> Maybe FilePath -> Maybe Int -> String -> CommandStart
+startWeb relaxed optfile pathdepth s = go $ fromMaybe bad $ parseURI urlstring
+ where
+ (urlstring, downloader) = getDownloader s
+ bad = fromMaybe (error $ "bad url " ++ urlstring) $
+ parseURI $ escapeURIString isUnescapedInURI urlstring
go url = case downloader of
QuviDownloader -> usequvi
- DefaultDownloader ->
+ _ ->
#ifdef WITH_QUVI
- ifM (quviSupported s')
+ ifM (quviSupported urlstring)
( usequvi
, regulardownload url
)
@@ -73,98 +138,133 @@ start relaxed optfile pathdepth s = go $ fromMaybe bad $ parseURI s
#endif
regulardownload url = do
pathmax <- liftIO $ fileNameLengthLimit "."
- let file = choosefile $ url2file url pathdepth pathmax
+ urlinfo <- if relaxed
+ then pure $ Url.UrlInfo True Nothing Nothing
+ else Url.withUrlOptions (Url.getUrlInfo urlstring)
+ file <- case optfile of
+ Just f -> pure f
+ Nothing -> case Url.urlSuggestedFile urlinfo of
+ Nothing -> pure $ url2file url pathdepth pathmax
+ Just sf -> do
+ let f = truncateFilePath pathmax $
+ sanitizeFilePath sf
+ ifM (liftIO $ doesFileExist f <||> doesDirectoryExist f)
+ ( pure $ url2file url pathdepth pathmax
+ , pure f
+ )
showStart "addurl" file
- next $ perform relaxed s' file
+ next $ performWeb relaxed urlstring file urlinfo
#ifdef WITH_QUVI
- badquvi = error $ "quvi does not know how to download url " ++ s'
+ badquvi = error $ "quvi does not know how to download url " ++ urlstring
usequvi = do
page <- fromMaybe badquvi
- <$> withQuviOptions Quvi.forceQuery [Quvi.quiet, Quvi.httponly] s'
+ <$> withQuviOptions Quvi.forceQuery [Quvi.quiet, Quvi.httponly] urlstring
let link = fromMaybe badquvi $ headMaybe $ Quvi.pageLinks page
pathmax <- liftIO $ fileNameLengthLimit "."
- let file = choosefile $ truncateFilePath pathmax $ sanitizeFilePath $
- Quvi.pageTitle page ++ "." ++ Quvi.linkSuffix link
+ let file = flip fromMaybe optfile $
+ truncateFilePath pathmax $ sanitizeFilePath $
+ Quvi.pageTitle page ++ "." ++ Quvi.linkSuffix link
showStart "addurl" file
- next $ performQuvi relaxed s' (Quvi.linkUrl link) file
+ next $ performQuvi relaxed urlstring (Quvi.linkUrl link) file
#else
usequvi = error "not built with quvi support"
#endif
+performWeb :: Bool -> URLString -> FilePath -> Url.UrlInfo -> CommandPerform
+performWeb relaxed url file urlinfo = ifAnnexed file addurl geturl
+ where
+ geturl = next $ isJust <$> addUrlFile relaxed url urlinfo file
+ addurl = addUrlChecked relaxed url webUUID $ \k -> return $
+ (Url.urlExists urlinfo, Url.urlSize urlinfo == keySize k)
+
#ifdef WITH_QUVI
performQuvi :: Bool -> URLString -> URLString -> FilePath -> CommandPerform
performQuvi relaxed pageurl videourl file = ifAnnexed file addurl geturl
where
- quviurl = setDownloader pageurl QuviDownloader
- addurl (key, _backend) = next $ cleanup quviurl file key Nothing
- geturl = next $ addUrlFileQuvi relaxed quviurl videourl file
+ quviurl = setDownloader pageurl QuviDownloader
+ addurl key = next $ do
+ cleanup webUUID quviurl file key Nothing
+ return True
+ geturl = next $ isJust <$> addUrlFileQuvi relaxed quviurl videourl file
#endif
#ifdef WITH_QUVI
-addUrlFileQuvi :: Bool -> URLString -> URLString -> FilePath -> Annex Bool
+addUrlFileQuvi :: Bool -> URLString -> URLString -> FilePath -> Annex (Maybe Key)
addUrlFileQuvi relaxed quviurl videourl file = do
key <- Backend.URL.fromUrl quviurl Nothing
ifM (pure relaxed <||> Annex.getState Annex.fast)
- ( cleanup quviurl file key Nothing
+ ( do
+ cleanup webUUID quviurl file key Nothing
+ return (Just key)
, do
{- Get the size, and use that to check
- disk space. However, the size info is not
- retained, because the size of a video stream
- might change and we want to be able to download
- it later. -}
- sizedkey <- addSizeUrlKey videourl key
- prepGetViaTmpChecked sizedkey $ do
+ urlinfo <- Url.withUrlOptions (Url.getUrlInfo videourl)
+ let sizedkey = addSizeUrlKey urlinfo key
+ prepGetViaTmpChecked sizedkey Nothing $ do
tmp <- fromRepo $ gitAnnexTmpObjectLocation key
showOutput
- ok <- Transfer.download webUUID key (Just file) Transfer.forwardRetry $ const $ do
- liftIO $ createDirectoryIfMissing True (parentDir tmp)
- downloadUrl [videourl] tmp
+ ok <- Transfer.notifyTransfer Transfer.Download (Just file) $
+ Transfer.download webUUID key (Just file) Transfer.forwardRetry $ const $ do
+ liftIO $ createDirectoryIfMissing True (parentDir tmp)
+ downloadUrl [videourl] tmp
if ok
- then cleanup quviurl file key (Just tmp)
- else return False
+ then do
+ cleanup webUUID quviurl file key (Just tmp)
+ return (Just key)
+ else return Nothing
)
#endif
-perform :: Bool -> URLString -> FilePath -> CommandPerform
-perform relaxed url file = ifAnnexed file addurl geturl
- where
- geturl = next $ addUrlFile relaxed url file
- addurl (key, _backend)
- | relaxed = do
- setUrlPresent key url
- next $ return True
- | otherwise = do
- (exists, samesize) <- Url.withUrlOptions $ Url.check url (keySize key)
+addUrlChecked :: Bool -> URLString -> UUID -> (Key -> Annex (Bool, Bool)) -> Key -> CommandPerform
+addUrlChecked relaxed url u checkexistssize key
+ | relaxed = do
+ setUrlPresent u key url
+ next $ return True
+ | otherwise = ifM ((elem url <$> getUrls key) <&&> (elem u <$> loggedLocations key))
+ ( next $ return True -- nothing to do
+ , do
+ (exists, samesize) <- checkexistssize key
if exists && samesize
then do
- setUrlPresent key url
+ setUrlPresent u key url
next $ return True
else do
- warning $ if exists
+ warning $ "while adding a new url to an already annexed file, " ++ if exists
then "url does not have expected file size (use --relaxed to bypass this check) " ++ url
else "failed to verify url exists: " ++ url
stop
+ )
-addUrlFile :: Bool -> URLString -> FilePath -> Annex Bool
-addUrlFile relaxed url file = do
+addUrlFile :: Bool -> URLString -> Url.UrlInfo -> FilePath -> Annex (Maybe Key)
+addUrlFile relaxed url urlinfo file = do
liftIO $ createDirectoryIfMissing True (parentDir file)
ifM (Annex.getState Annex.fast <||> pure relaxed)
- ( nodownload relaxed url file
- , do
- showAction $ "downloading " ++ url ++ " "
- download url file
+ ( nodownload url urlinfo file
+ , downloadWeb url urlinfo file
)
-download :: URLString -> FilePath -> Annex Bool
-download url file = do
- {- Generate a dummy key to use for this download, before we can
- - examine the file and find its real key. This allows resuming
- - downloads, as the dummy key for a given url is stable. -}
- dummykey <- addSizeUrlKey url =<< Backend.URL.fromUrl url Nothing
- prepGetViaTmpChecked dummykey $ do
- tmp <- fromRepo $ gitAnnexTmpObjectLocation dummykey
+downloadWeb :: URLString -> Url.UrlInfo -> FilePath -> Annex (Maybe Key)
+downloadWeb url urlinfo file = do
+ dummykey <- addSizeUrlKey urlinfo <$> Backend.URL.fromUrl url Nothing
+ let downloader f _ = do
showOutput
- ifM (runtransfer dummykey tmp)
+ downloadUrl [url] f
+ showAction $ "downloading " ++ url ++ " "
+ downloadWith downloader dummykey webUUID url file
+
+{- The Key should be a dummy key, based on the URL, which is used
+ - for this download, before we can examine the file and find its real key.
+ - For resuming downloads to work, the dummy key for a given url should be
+ - stable. -}
+downloadWith :: (FilePath -> MeterUpdate -> Annex Bool) -> Key -> UUID -> URLString -> FilePath -> Annex (Maybe Key)
+downloadWith downloader dummykey u url file =
+ prepGetViaTmpChecked dummykey Nothing $ do
+ tmp <- fromRepo $ gitAnnexTmpObjectLocation dummykey
+ ifM (runtransfer tmp)
( do
backend <- chooseBackend file
let source = KeySource
@@ -174,31 +274,27 @@ download url file = do
}
k <- genKey source backend
case k of
- Nothing -> return False
- Just (key, _) -> cleanup url file key (Just tmp)
- , return False
+ Nothing -> return Nothing
+ Just (key, _) -> do
+ cleanup u url file key (Just tmp)
+ return (Just key)
+ , return Nothing
)
where
- runtransfer dummykey tmp =
- Transfer.download webUUID dummykey (Just file) Transfer.forwardRetry $ const $ do
+ runtransfer tmp = Transfer.notifyTransfer Transfer.Download (Just file) $
+ Transfer.download u dummykey (Just file) Transfer.forwardRetry $ \p -> do
liftIO $ createDirectoryIfMissing True (parentDir tmp)
- downloadUrl [url] tmp
+ downloader tmp p
-{- Hits the url to get the size, if available.
- -
- - This is needed to avoid exceeding the diskreserve when downloading,
- - and so the assistant can display a pretty progress bar.
- -}
-addSizeUrlKey :: URLString -> Key -> Annex Key
-addSizeUrlKey url key = do
- size <- snd <$> Url.withUrlOptions (Url.exists url)
- return $ key { keySize = size }
+{- Adds the url size to the Key. -}
+addSizeUrlKey :: Url.UrlInfo -> Key -> Key
+addSizeUrlKey urlinfo key = key { keySize = Url.urlSize urlinfo }
-cleanup :: URLString -> FilePath -> Key -> Maybe FilePath -> Annex Bool
-cleanup url file key mtmp = do
+cleanup :: UUID -> URLString -> FilePath -> Key -> Maybe FilePath -> Annex ()
+cleanup u url file key mtmp = do
when (isJust mtmp) $
logStatus key InfoPresent
- setUrlPresent key url
+ setUrlPresent u key url
Command.Add.addLink file key Nothing
whenM isDirect $ do
void $ addAssociatedFile key file
@@ -206,20 +302,16 @@ cleanup url file key mtmp = do
- must already exist, so flush the queue. -}
Annex.Queue.flush
maybe noop (moveAnnex key) mtmp
- return True
-
-nodownload :: Bool -> URLString -> FilePath -> Annex Bool
-nodownload relaxed url file = do
- (exists, size) <- if relaxed
- then pure (True, Nothing)
- else Url.withUrlOptions (Url.exists url)
- if exists
- then do
- key <- Backend.URL.fromUrl url size
- cleanup url file key Nothing
- else do
- warning $ "unable to access url: " ++ url
- return False
+
+nodownload :: URLString -> Url.UrlInfo -> FilePath -> Annex (Maybe Key)
+nodownload url urlinfo file
+ | Url.urlExists urlinfo = do
+ key <- Backend.URL.fromUrl url (Url.urlSize urlinfo)
+ cleanup webUUID url file key Nothing
+ return (Just key)
+ | otherwise = do
+ warning $ "unable to access url: " ++ url
+ return Nothing
url2file :: URI -> Maybe Int -> Int -> FilePath
url2file url pathdepth pathmax = case pathdepth of
@@ -230,8 +322,16 @@ url2file url pathdepth pathmax = case pathdepth of
| depth < 0 -> frombits $ reverse . take (negate depth) . reverse
| otherwise -> error "bad --pathdepth"
where
- fullurl = uriRegName auth ++ uriPath url ++ uriQuery url
+ fullurl = concat
+ [ maybe "" uriRegName (uriAuthority url)
+ , uriPath url
+ , uriQuery url
+ ]
frombits a = intercalate "/" $ a urlbits
urlbits = map (truncateFilePath pathmax . sanitizeFilePath) $
filter (not . null) $ split "/" fullurl
- auth = fromMaybe (error $ "bad url " ++ show url) $ uriAuthority url
+
+urlString2file :: URLString -> Maybe Int -> Int -> FilePath
+urlString2file s pathdepth pathmax = case Url.parseURIRelaxed s of
+ Nothing -> error $ "bad uri " ++ s
+ Just u -> url2file u pathdepth pathmax
diff --git a/Command/Assistant.hs b/Command/Assistant.hs
index 496df1dd2..5bdf51682 100644
--- a/Command/Assistant.hs
+++ b/Command/Assistant.hs
@@ -1,6 +1,6 @@
{- git-annex assistant
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -14,11 +14,12 @@ import Annex.Init
import Config.Files
import qualified Build.SysConfig
import Utility.HumanTime
+import Assistant.Install
import System.Environment
-def :: [Command]
-def = [noRepo checkAutoStart $ dontCheck repoExists $ withOptions options $
+cmd :: [Command]
+cmd = [noRepo checkAutoStart $ dontCheck repoExists $ withOptions options $
notBareRepo $ command "assistant" paramNothing seek SectionCommon
"automatically handle changes"]
@@ -50,6 +51,7 @@ start foreground stopdaemon autostart startdelay
liftIO $ autoStart startdelay
stop
| otherwise = do
+ liftIO ensureInstalled
ensureInitialized
Command.Watch.start True foreground stopdaemon startdelay
diff --git a/Command/Commit.hs b/Command/Commit.hs
index f5f13d248..73f9e2d5e 100644
--- a/Command/Commit.hs
+++ b/Command/Commit.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -12,8 +12,8 @@ import Command
import qualified Annex.Branch
import qualified Git
-def :: [Command]
-def = [command "commit" paramNothing seek
+cmd :: [Command]
+cmd = [command "commit" paramNothing seek
SectionPlumbing "commits any staged changes to the git-annex branch"]
seek :: CommandSeek
diff --git a/Command/ConfigList.hs b/Command/ConfigList.hs
index 58b738864..33b348b07 100644
--- a/Command/ConfigList.hs
+++ b/Command/ConfigList.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -10,11 +10,13 @@ module Command.ConfigList where
import Common.Annex
import Command
import Annex.UUID
+import Annex.Init
+import qualified Annex.Branch
import qualified Git.Config
import Remote.GCrypt (coreGCryptId)
-def :: [Command]
-def = [noCommit $ command "configlist" paramNothing seek
+cmd :: [Command]
+cmd = [noCommit $ command "configlist" paramNothing seek
SectionPlumbing "outputs relevant git configuration"]
seek :: CommandSeek
@@ -22,9 +24,23 @@ seek = withNothing start
start :: CommandStart
start = do
- u <- getUUID
+ u <- findOrGenUUID
showConfig "annex.uuid" $ fromUUID u
showConfig coreGCryptId =<< fromRepo (Git.Config.get coreGCryptId "")
stop
where
- showConfig k v = liftIO $ putStrLn $ k ++ "=" ++ v
+ showConfig k v = liftIO $ putStrLn $ k ++ "=" ++ v
+
+{- The repository may not yet have a UUID; automatically initialize it
+ - when there's a git-annex branch available. -}
+findOrGenUUID :: Annex UUID
+findOrGenUUID = do
+ u <- getUUID
+ if u /= NoUUID
+ then return u
+ else ifM Annex.Branch.hasSibling
+ ( do
+ initialize Nothing
+ getUUID
+ , return NoUUID
+ )
diff --git a/Command/Copy.hs b/Command/Copy.hs
index 29606061d..e5b093c61 100644
--- a/Command/Copy.hs
+++ b/Command/Copy.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -14,8 +14,8 @@ import qualified Remote
import Annex.Wanted
import Config.NumCopies
-def :: [Command]
-def = [withOptions Command.Move.moveOptions $ command "copy" paramPaths seek
+cmd :: [Command]
+cmd = [withOptions Command.Move.moveOptions $ command "copy" paramPaths seek
SectionCommon "copy content of files to/from another repository"]
seek :: CommandSeek
@@ -23,16 +23,16 @@ seek ps = do
to <- getOptionField toOption Remote.byNameWithUUID
from <- getOptionField fromOption Remote.byNameWithUUID
withKeyOptions
- (Command.Move.startKey to from False)
+ (Command.Move.startKey to from False)
(withFilesInGit $ whenAnnexed $ start to from)
ps
{- A copy is just a move that does not delete the source file.
- However, --auto mode avoids unnecessary copies, and avoids getting or
- sending non-preferred content. -}
-start :: Maybe Remote -> Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart
-start to from file (key, backend) = stopUnless shouldCopy $
- Command.Move.start to from False file (key, backend)
+start :: Maybe Remote -> Maybe Remote -> FilePath -> Key -> CommandStart
+start to from file key = stopUnless shouldCopy $
+ Command.Move.start to from False file key
where
shouldCopy = checkAuto (check <||> numCopiesCheck file key (<))
check = case to of
diff --git a/Command/Dead.hs b/Command/Dead.hs
index f9e5c2e27..464db25f9 100644
--- a/Command/Dead.hs
+++ b/Command/Dead.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -11,8 +11,8 @@ import Command
import Types.TrustLevel
import Command.Trust (trustCommand)
-def :: [Command]
-def = [command "dead" (paramRepeating paramRemote) seek
+cmd :: [Command]
+cmd = [command "dead" (paramRepeating paramRemote) seek
SectionSetup "hide a lost repository"]
seek :: CommandSeek
diff --git a/Command/Describe.hs b/Command/Describe.hs
index 601b3fcc9..56a73334d 100644
--- a/Command/Describe.hs
+++ b/Command/Describe.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -12,8 +12,8 @@ import Command
import qualified Remote
import Logs.UUID
-def :: [Command]
-def = [command "describe" (paramPair paramRemote paramDesc) seek
+cmd :: [Command]
+cmd = [command "describe" (paramPair paramRemote paramDesc) seek
SectionSetup "change description of a repository"]
seek :: CommandSeek
diff --git a/Command/DiffDriver.hs b/Command/DiffDriver.hs
new file mode 100644
index 000000000..fa4f49366
--- /dev/null
+++ b/Command/DiffDriver.hs
@@ -0,0 +1,102 @@
+{- git-annex command
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Command.DiffDriver where
+
+import Common.Annex
+import Command
+import Annex.Content
+import Annex.Link
+import Git.Types
+
+cmd :: [Command]
+cmd = [dontCheck repoExists $
+ command "diffdriver" ("[-- cmd --opts]") seek
+ SectionPlumbing "external git diff driver shim"]
+
+seek :: CommandSeek
+seek = withWords start
+
+start :: [String] -> CommandStart
+start opts = do
+ let (req, differ) = parseReq opts
+ void $ liftIO . exitBool =<< liftIO . differ =<< fixupReq req
+ stop
+
+data Req
+ = Req
+ { rPath :: FilePath
+ , rOldFile :: FilePath
+ , rOldHex :: String
+ , rOldMode :: String
+ , rNewFile :: FilePath
+ , rNewHex :: String
+ , rNewMode ::String
+ }
+ | UnmergedReq
+ { rPath :: FilePath
+ }
+
+type Differ = Req -> IO Bool
+
+serializeReq :: Req -> [CommandParam]
+serializeReq req@(UnmergedReq {}) = [Param $ rPath req]
+serializeReq req@(Req {}) = map Param
+ [ rPath req
+ , rOldFile req
+ , rOldHex req
+ , rOldMode req
+ , rNewFile req
+ , rNewHex req
+ , rNewMode req
+ ]
+
+parseReq :: [String] -> (Req, Differ)
+parseReq opts = case separate (== "--") opts of
+ (c:ps, l) -> (mk l, externalDiffer c ps)
+ ([],_) -> badopts
+ where
+ mk (path:old_file:old_hex:old_mode:new_file:new_hex:new_mode:[]) =
+ Req
+ { rPath = path
+ , rOldFile = old_file
+ , rOldHex = old_hex
+ , rOldMode = old_mode
+ , rNewFile = new_file
+ , rNewHex = new_hex
+ , rNewMode = new_mode
+ }
+ mk (unmergedpath:[]) = UnmergedReq { rPath = unmergedpath }
+ mk _ = badopts
+
+ badopts = error $ "Unexpected input: " ++ unwords opts
+
+{- Check if either file is a symlink to a git-annex object,
+ - which git-diff will leave as a normal file containing the link text.
+ - Adjust the Req to instead point to the actual location of the annexed
+ - object (which may or may not exist). -}
+fixupReq :: Req -> Annex Req
+fixupReq req@(UnmergedReq {}) = return req
+fixupReq req@(Req {}) =
+ check rOldFile rOldMode (\r f -> r { rOldFile = f }) req
+ >>= check rNewFile rNewMode (\r f -> r { rNewFile = f })
+ where
+ check getfile getmode setfile r = case readBlobType (getmode r) of
+ Just SymlinkBlob -> do
+ v <- getAnnexLinkTarget' (getfile r) False
+ case fileKey . takeFileName =<< v of
+ Nothing -> return r
+ Just k -> setfile r <$>
+ withObjectLoc k
+ -- indirect mode
+ return
+ -- direct mode
+ (return . Prelude.head)
+ _ -> return r
+
+externalDiffer :: String -> [String] -> Differ
+externalDiffer c ps = \req -> boolSystem c (map Param ps ++ serializeReq req )
diff --git a/Command/Direct.hs b/Command/Direct.hs
index 47f622a81..1a6b2cb05 100644
--- a/Command/Direct.hs
+++ b/Command/Direct.hs
@@ -1,25 +1,22 @@
{- git-annex command
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Command.Direct where
-import Control.Exception.Extensible
-
import Common.Annex
import Command
import qualified Git
-import qualified Git.Command
import qualified Git.LsFiles
+import qualified Git.Branch
import Config
import Annex.Direct
-import Annex.Exception
-def :: [Command]
-def = [notBareRepo $ noDaemonRunning $
+cmd :: [Command]
+cmd = [notBareRepo $ noDaemonRunning $
command "direct" paramNothing seek
SectionSetup "switch repository to direct mode"]
@@ -33,9 +30,8 @@ perform :: CommandPerform
perform = do
showStart "commit" ""
showOutput
- _ <- inRepo $ Git.Command.runBool
- [ Param "commit"
- , Param "-a"
+ _ <- inRepo $ Git.Branch.commitCommand Git.Branch.ManualCommit
+ [ Param "-a"
, Param "-m"
, Param "commit before switching to direct mode"
]
@@ -47,13 +43,13 @@ perform = do
void $ liftIO clean
next cleanup
where
- go = whenAnnexed $ \f (k, _) -> do
+ go = whenAnnexed $ \f k -> do
r <- toDirectGen k f
case r of
Nothing -> noop
Just a -> do
showStart "direct" f
- r' <- tryAnnex a
+ r' <- tryNonAsync a
case r' of
Left e -> warnlocked e
Right _ -> showEndOk
diff --git a/Command/Drop.hs b/Command/Drop.hs
index d29195b05..35c2f5cf4 100644
--- a/Command/Drop.hs
+++ b/Command/Drop.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -14,14 +14,21 @@ import qualified Annex
import Annex.UUID
import Logs.Location
import Logs.Trust
+import Logs.PreferredContent
import Config.NumCopies
import Annex.Content
import Annex.Wanted
+import Annex.Notification
-def :: [Command]
-def = [withOptions [dropFromOption] $ command "drop" paramPaths seek
+import qualified Data.Set as S
+
+cmd :: [Command]
+cmd = [withOptions (dropOptions) $ command "drop" paramPaths seek
SectionCommon "indicate content of files not currently wanted"]
+dropOptions :: [Option]
+dropOptions = dropFromOption : annexedMatchingOptions
+
dropFromOption :: Option
dropFromOption = fieldOption ['f'] "from" paramRemote "drop content from a remote"
@@ -30,8 +37,8 @@ seek ps = do
from <- getOptionField dropFromOption Remote.byNameWithUUID
withFilesInGit (whenAnnexed $ start from) ps
-start :: Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart
-start from file (key, _) = checkDropAuto from file key $ \numcopies ->
+start :: Maybe Remote -> FilePath -> Key -> CommandStart
+start from file key = checkDropAuto from file key $ \numcopies ->
stopUnless (checkAuto $ wantDrop False (Remote.uuid <$> from) (Just key) (Just file)) $
case from of
Nothing -> startLocal (Just file) numcopies key Nothing
@@ -44,39 +51,56 @@ start from file (key, _) = checkDropAuto from file key $ \numcopies ->
startLocal :: AssociatedFile -> NumCopies -> Key -> Maybe Remote -> CommandStart
startLocal afile numcopies key knownpresentremote = stopUnless (inAnnex key) $ do
showStart' "drop" key afile
- next $ performLocal key numcopies knownpresentremote
+ next $ performLocal key afile numcopies knownpresentremote
startRemote :: AssociatedFile -> NumCopies -> Key -> Remote -> CommandStart
startRemote afile numcopies key remote = do
showStart' ("drop " ++ Remote.name remote) key afile
- next $ performRemote key numcopies remote
-
-performLocal :: Key -> NumCopies -> Maybe Remote -> CommandPerform
-performLocal key numcopies knownpresentremote = lockContent key $ do
+ next $ performRemote key afile numcopies remote
+
+-- Note that lockContent is called before checking if the key is present
+-- on enough remotes to allow removal. This avoids a scenario where two
+-- or more remotes are trying to remove a key at the same time, and each
+-- see the key is present on the other.
+performLocal :: Key -> AssociatedFile -> NumCopies -> Maybe Remote -> CommandPerform
+performLocal key afile numcopies knownpresentremote = lockContent key $ \contentlock -> do
(remotes, trusteduuids) <- Remote.keyPossibilitiesTrusted key
let trusteduuids' = case knownpresentremote of
Nothing -> trusteduuids
Just r -> nub (Remote.uuid r:trusteduuids)
untrusteduuids <- trustGet UnTrusted
let tocheck = Remote.remotesWithoutUUID remotes (trusteduuids'++untrusteduuids)
- stopUnless (canDropKey key numcopies trusteduuids' tocheck []) $ do
- removeAnnex key
- next $ cleanupLocal key
-
-performRemote :: Key -> NumCopies -> Remote -> CommandPerform
-performRemote key numcopies remote = lockContent key $ do
+ u <- getUUID
+ ifM (canDrop u key afile numcopies trusteduuids' tocheck [])
+ ( do
+ removeAnnex contentlock
+ notifyDrop afile True
+ next $ cleanupLocal key
+ , do
+ notifyDrop afile False
+ stop
+ )
+
+performRemote :: Key -> AssociatedFile -> NumCopies -> Remote -> CommandPerform
+performRemote key afile numcopies remote = do
-- Filter the remote it's being dropped from out of the lists of
-- places assumed to have the key, and places to check.
- -- When the local repo has the key, that's one additional copy.
+ -- When the local repo has the key, that's one additional copy,
+ -- as long asthe local repo is not untrusted.
(remotes, trusteduuids) <- Remote.keyPossibilitiesTrusted key
present <- inAnnex key
u <- getUUID
- let have = filter (/= uuid) $
- if present then u:trusteduuids else trusteduuids
+ trusteduuids' <- if present
+ then ifM ((<= SemiTrusted) <$> lookupTrust u)
+ ( pure (u:trusteduuids)
+ , pure trusteduuids
+ )
+ else pure trusteduuids
+ let have = filter (/= uuid) trusteduuids'
untrusteduuids <- trustGet UnTrusted
let tocheck = filter (/= remote) $
Remote.remotesWithoutUUID remotes (have++untrusteduuids)
- stopUnless (canDropKey key numcopies have tocheck [uuid]) $ do
+ stopUnless (canDrop uuid key afile numcopies have tocheck [uuid]) $ do
ok <- Remote.removeKey remote key
next $ cleanupRemote key remote ok
where
@@ -95,13 +119,19 @@ cleanupRemote key remote ok = do
{- Checks specified remotes to verify that enough copies of a key exist to
- allow it to be safely removed (with no data loss). Can be provided with
- - some locations where the key is known/assumed to be present. -}
-canDropKey :: Key -> NumCopies -> [UUID] -> [Remote] -> [UUID] -> Annex Bool
-canDropKey key numcopies have check skip = do
- force <- Annex.getState Annex.force
- if force || numcopies == NumCopies 0
- then return True
- else findCopies key numcopies skip have check
+ - some locations where the key is known/assumed to be present.
+ -
+ - Also checks if it's required content, and refuses to drop if so.
+ -
+ - --force overrides and always allows dropping.
+ -}
+canDrop :: UUID -> Key -> AssociatedFile -> NumCopies -> [UUID] -> [Remote] -> [UUID] -> Annex Bool
+canDrop dropfrom key afile numcopies have check skip = ifM (Annex.getState Annex.force)
+ ( return True
+ , checkRequiredContent dropfrom key afile
+ <&&>
+ findCopies key numcopies skip have check
+ )
findCopies :: Key -> NumCopies -> [UUID] -> [UUID] -> [Remote] -> Annex Bool
findCopies key need skip = helper [] []
@@ -129,7 +159,7 @@ notEnoughCopies key need have skip bad = do
show (length have) ++ " out of " ++ show (fromNumCopies need) ++
" necessary copies"
Remote.showTriedRemotes bad
- Remote.showLocations key (have++skip)
+ Remote.showLocations True key (have++skip)
"Rather than dropping this file, try using: git annex move"
hint
return False
@@ -137,6 +167,19 @@ notEnoughCopies key need have skip bad = do
unsafe = showNote "unsafe"
hint = showLongNote "(Use --force to override this check, or adjust numcopies.)"
+checkRequiredContent :: UUID -> Key -> AssociatedFile -> Annex Bool
+checkRequiredContent u k afile =
+ ifM (isRequiredContent (Just u) S.empty (Just k) afile False)
+ ( requiredContent
+ , return True
+ )
+
+requiredContent :: Annex Bool
+requiredContent = do
+ showLongNote "That file is required content, it cannot be dropped!"
+ showLongNote "(Use --force to override this check, or adjust required content configuration.)"
+ return False
+
{- In auto mode, only runs the action if there are enough
- copies on other semitrusted repositories. -}
checkDropAuto :: Maybe Remote -> FilePath -> Key -> (NumCopies -> CommandStart) -> CommandStart
diff --git a/Command/DropKey.hs b/Command/DropKey.hs
index 125e6ded4..890a79466 100644
--- a/Command/DropKey.hs
+++ b/Command/DropKey.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -13,8 +13,8 @@ import qualified Annex
import Logs.Location
import Annex.Content
-def :: [Command]
-def = [noCommit $ command "dropkey" (paramRepeating paramKey) seek
+cmd :: [Command]
+cmd = [noCommit $ command "dropkey" (paramRepeating paramKey) seek
SectionPlumbing "drops annexed content for specified keys"]
seek :: CommandSeek
@@ -28,8 +28,8 @@ start key = stopUnless (inAnnex key) $ do
next $ perform key
perform :: Key -> CommandPerform
-perform key = lockContent key $ do
- removeAnnex key
+perform key = lockContent key $ \contentlock -> do
+ removeAnnex contentlock
next $ cleanup key
cleanup :: Key -> CommandCleanup
diff --git a/Command/DropUnused.hs b/Command/DropUnused.hs
index 345d03032..36ff49720 100644
--- a/Command/DropUnused.hs
+++ b/Command/DropUnused.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010,2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2010,2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -16,8 +16,8 @@ import qualified Git
import Command.Unused (withUnusedMaps, UnusedMaps(..), startUnused)
import Config.NumCopies
-def :: [Command]
-def = [withOptions [Command.Drop.dropFromOption] $
+cmd :: [Command]
+cmd = [withOptions [Command.Drop.dropFromOption] $
command "dropunused" (paramRepeating paramNumRange)
seek SectionMaintenance "drop unused file content"]
@@ -34,8 +34,8 @@ perform numcopies key = maybe droplocal dropremote =<< Remote.byNameWithUUID =<<
where
dropremote r = do
showAction $ "from " ++ Remote.name r
- Command.Drop.performRemote key numcopies r
- droplocal = Command.Drop.performLocal key numcopies Nothing
+ Command.Drop.performRemote key Nothing numcopies r
+ droplocal = Command.Drop.performLocal key Nothing numcopies Nothing
from = Annex.getField $ optionName Command.Drop.dropFromOption
performOther :: (Key -> Git.Repo -> FilePath) -> Key -> CommandPerform
diff --git a/Command/EnableRemote.hs b/Command/EnableRemote.hs
index 42ab43374..db3ec2b37 100644
--- a/Command/EnableRemote.hs
+++ b/Command/EnableRemote.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -15,8 +15,8 @@ import qualified Command.InitRemote as InitRemote
import qualified Data.Map as M
-def :: [Command]
-def = [command "enableremote"
+cmd :: [Command]
+cmd = [command "enableremote"
(paramPair paramName $ paramOptional $ paramRepeating paramKeyValue)
seek SectionSetup "enables use of an existing special remote"]
@@ -29,7 +29,7 @@ start (name:ws) = go =<< InitRemote.findExisting name
where
config = Logs.Remote.keyValToConfig ws
- go Nothing = unknownNameError "Unknown special remote name."
+ go Nothing = unknownNameError "Unknown special remote name."
go (Just (u, c)) = do
let fullconfig = config `M.union` c
t <- InitRemote.findType fullconfig
diff --git a/Command/ExamineKey.hs b/Command/ExamineKey.hs
index dd2bec507..00d4d3a95 100644
--- a/Command/ExamineKey.hs
+++ b/Command/ExamineKey.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -13,8 +13,8 @@ import qualified Utility.Format
import Command.Find (formatOption, getFormat, showFormatted, keyVars)
import Types.Key
-def :: [Command]
-def = [noCommit $ noMessages $ withOptions [formatOption, jsonOption] $
+cmd :: [Command]
+cmd = [noCommit $ noMessages $ withOptions [formatOption, jsonOption] $
command "examinekey" (paramRepeating paramKey) seek
SectionPlumbing "prints information from a key"]
diff --git a/Command/Find.hs b/Command/Find.hs
index c6a32a944..236824643 100644
--- a/Command/Find.hs
+++ b/Command/Find.hs
@@ -1,12 +1,13 @@
{- git-annex command
-
- - Copyright 2010-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Command.Find where
+import Data.Default
import qualified Data.Map as M
import Common.Annex
@@ -18,10 +19,13 @@ import qualified Utility.Format
import Utility.DataUnits
import Types.Key
-def :: [Command]
-def = [noCommit $ noMessages $ withOptions [formatOption, print0Option, jsonOption] $
+cmd :: [Command]
+cmd = [withOptions annexedMatchingOptions $ mkCommand $
command "find" paramPaths seek SectionQuery "lists available files"]
+mkCommand :: Command -> Command
+mkCommand = noCommit . noMessages . withOptions [formatOption, print0Option, jsonOption]
+
formatOption :: Option
formatOption = fieldOption [] "format" paramFormat "control format of output"
@@ -39,8 +43,8 @@ seek ps = do
format <- getFormat
withFilesInGit (whenAnnexed $ start format) ps
-start :: Maybe Utility.Format.Format -> FilePath -> (Key, Backend) -> CommandStart
-start format file (key, _) = do
+start :: Maybe Utility.Format.Format -> FilePath -> Key -> CommandStart
+start format file key = do
-- only files inAnnex are shown, unless the user has requested
-- others via a limit
whenM (limited <||> inAnnex key) $
@@ -63,8 +67,8 @@ keyVars key =
, ("bytesize", size show)
, ("humansize", size $ roughSize storageUnits True)
, ("keyname", keyName key)
- , ("hashdirlower", hashDirLower key)
- , ("hashdirmixed", hashDirMixed key)
+ , ("hashdirlower", hashDirLower def key)
+ , ("hashdirmixed", hashDirMixed def key)
, ("mtime", whenavail show $ keyMtime key)
]
where
diff --git a/Command/FindRef.hs b/Command/FindRef.hs
new file mode 100644
index 000000000..e7f7eae6d
--- /dev/null
+++ b/Command/FindRef.hs
@@ -0,0 +1,21 @@
+{- git-annex command
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Command.FindRef where
+
+import Command
+import qualified Command.Find as Find
+
+cmd :: [Command]
+cmd = [withOptions nonWorkTreeMatchingOptions $ Find.mkCommand $
+ command "findref" paramRef seek SectionPlumbing
+ "lists files in a git ref"]
+
+seek :: CommandSeek
+seek refs = do
+ format <- Find.getFormat
+ Find.start format `withFilesInRefs` refs
diff --git a/Command/Fix.hs b/Command/Fix.hs
index f730226e3..c4e5e52ee 100644
--- a/Command/Fix.hs
+++ b/Command/Fix.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -18,17 +18,18 @@ import Utility.Touch
#endif
#endif
-def :: [Command]
-def = [notDirect $ noCommit $ command "fix" paramPaths seek
- SectionMaintenance "fix up symlinks to point to annexed content"]
+cmd :: [Command]
+cmd = [notDirect $ noCommit $ withOptions annexedMatchingOptions $
+ command "fix" paramPaths seek
+ SectionMaintenance "fix up symlinks to point to annexed content"]
seek :: CommandSeek
seek = withFilesInGit $ whenAnnexed start
{- Fixes the symlink to an annexed file. -}
-start :: FilePath -> (Key, Backend) -> CommandStart
-start file (key, _) = do
- link <- inRepo $ gitAnnexLink file key
+start :: FilePath -> Key -> CommandStart
+start file key = do
+ link <- calcRepo $ gitAnnexLink file key
stopUnless ((/=) (Just link) <$> liftIO (catchMaybeIO $ readSymbolicLink file)) $ do
showStart "fix" file
next $ perform file link
diff --git a/Command/Forget.hs b/Command/Forget.hs
index dbcce6cc3..94a1fb421 100644
--- a/Command/Forget.hs
+++ b/Command/Forget.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -15,8 +15,8 @@ import qualified Annex
import Data.Time.Clock.POSIX
-def :: [Command]
-def = [withOptions forgetOptions $ command "forget" paramNothing seek
+cmd :: [Command]
+cmd = [withOptions forgetOptions $ command "forget" paramNothing seek
SectionMaintenance "prune git-annex branch history"]
forgetOptions :: [Option]
diff --git a/Command/FromKey.hs b/Command/FromKey.hs
index 7eb62fa4e..d9ebe6b4c 100644
--- a/Command/FromKey.hs
+++ b/Command/FromKey.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -13,8 +13,8 @@ import qualified Annex.Queue
import Annex.Content
import Types.Key
-def :: [Command]
-def = [notDirect $ notBareRepo $
+cmd :: [Command]
+cmd = [notDirect $ notBareRepo $
command "fromkey" (paramPair paramKey paramPath) seek
SectionPlumbing "adds a file using a specific key"]
@@ -33,7 +33,7 @@ start _ = error "specify a key and a dest file"
perform :: Key -> FilePath -> CommandPerform
perform key file = do
- link <- inRepo $ gitAnnexLink file key
+ link <- calcRepo $ gitAnnexLink file key
liftIO $ createDirectoryIfMissing True (parentDir file)
liftIO $ createSymbolicLink link file
next $ cleanup file
diff --git a/Command/Fsck.hs b/Command/Fsck.hs
index 88a9915c4..49b49407a 100644
--- a/Command/Fsck.hs
+++ b/Command/Fsck.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -39,8 +39,8 @@ import Data.Time
import System.Posix.Types (EpochTime)
import System.Locale
-def :: [Command]
-def = [withOptions fsckOptions $ command "fsck" paramPaths seek
+cmd :: [Command]
+cmd = [withOptions fsckOptions $ command "fsck" paramPaths seek
SectionMaintenance "check for problems"]
fsckFromOption :: Option
@@ -62,7 +62,7 @@ fsckOptions =
, startIncrementalOption
, moreIncrementalOption
, incrementalScheduleOption
- ] ++ keyOptions
+ ] ++ keyOptions ++ annexedMatchingOptions
seek :: CommandSeek
seek ps = do
@@ -104,12 +104,16 @@ getIncremental = do
resetStartTime
return True
-start :: Maybe Remote -> Incremental -> FilePath -> (Key, Backend) -> CommandStart
-start from inc file (key, backend) = do
- numcopies <- getFileNumCopies file
- case from of
- Nothing -> go $ perform key file backend numcopies
- Just r -> go $ performRemote key file backend numcopies r
+start :: Maybe Remote -> Incremental -> FilePath -> Key -> CommandStart
+start from inc file key = do
+ v <- Backend.getBackend file key
+ case v of
+ Nothing -> stop
+ Just backend -> do
+ numcopies <- getFileNumCopies file
+ case from of
+ Nothing -> go $ perform key file backend numcopies
+ Just r -> go $ performRemote key file backend numcopies r
where
go = runFsck inc file key
@@ -137,7 +141,10 @@ performRemote key file backend numcopies remote =
dispatch (Right True) = withtmp $ \tmpfile ->
ifM (getfile tmpfile)
( go True (Just tmpfile)
- , go True Nothing
+ , do
+ warning "failed to download file from remote"
+ void $ go True Nothing
+ return False
)
dispatch (Right False) = go False Nothing
go present localcopy = check
@@ -188,7 +195,7 @@ check cs = and <$> sequence cs
-}
fixLink :: Key -> FilePath -> Annex Bool
fixLink key file = do
- want <- inRepo $ gitAnnexLink file key
+ want <- calcRepo $ gitAnnexLink file key
have <- getAnnexLinkTarget file
maybe noop (go want) have
return True
@@ -278,7 +285,7 @@ verifyDirectMode key file = do
- the key's metadata, if available.
-
- Not checked in direct mode, because files can be changed directly.
- -}
+ -}
checkKeySize :: Key -> Annex Bool
checkKeySize key = ifM isDirect
( return True
@@ -299,8 +306,7 @@ checkKeySizeOr :: (Key -> Annex String) -> Key -> FilePath -> Annex Bool
checkKeySizeOr bad key file = case Types.Key.keySize key of
Nothing -> return True
Just size -> do
- size' <- fromIntegral . fileSize
- <$> liftIO (getFileStatus file)
+ size' <- liftIO $ getFileSize file
comparesizes size size'
where
comparesizes a b = do
@@ -325,7 +331,7 @@ checkKeySizeOr bad key file = case Types.Key.keySize key of
checkBackend :: Backend -> Key -> Maybe FilePath -> Annex Bool
checkBackend backend key mfile = go =<< isDirect
where
- go False = do
+ go False = do
content <- calcRepo $ gitAnnexLocation key
checkBackendOr badContent backend key content
go True = maybe nocheck checkdirect mfile
diff --git a/Command/FuzzTest.hs b/Command/FuzzTest.hs
index 08103edc8..d6c9e1ac1 100644
--- a/Command/FuzzTest.hs
+++ b/Command/FuzzTest.hs
@@ -1,6 +1,6 @@
{- git-annex fuzz generator
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -13,7 +13,6 @@ import Command
import qualified Git.Config
import Config
import Utility.ThreadScheduler
-import Annex.Exception
import Utility.DiskFree
import Data.Time.Clock
@@ -21,8 +20,8 @@ import System.Random (getStdRandom, random, randomR)
import Test.QuickCheck
import Control.Concurrent
-def :: [Command]
-def = [ notBareRepo $ command "fuzztest" paramNothing seek SectionPlumbing
+cmd :: [Command]
+cmd = [ notBareRepo $ command "fuzztest" paramNothing seek SectionTesting
"generates fuzz test files"]
seek :: CommandSeek
@@ -48,7 +47,7 @@ guardTest = unlessM (fromMaybe False . Git.Config.isTrue <$> getConfig key "") $
, "Refusing to run fuzz tests, since " ++ keyname ++ " is not set!"
]
where
- key = annexConfig "eat-my-repository"
+ key = annexConfig "eat-my-repository"
(ConfigKey keyname) = key
@@ -56,7 +55,7 @@ fuzz :: Handle -> Annex ()
fuzz logh = do
action <- genFuzzAction
record logh $ flip Started action
- result <- tryAnnex $ runFuzzAction action
+ result <- tryNonAsync $ runFuzzAction action
record logh $ flip Finished $
either (const False) (const True) result
@@ -258,7 +257,7 @@ existingDir = do
newFile :: IO (Maybe FuzzFile)
newFile = go (100 :: Int)
where
- go 0 = return Nothing
+ go 0 = return Nothing
go n = do
f <- genFuzzFile
ifM (doesnotexist (toFilePath f))
@@ -269,7 +268,7 @@ newFile = go (100 :: Int)
newDir :: FilePath -> IO (Maybe FuzzDir)
newDir parent = go (100 :: Int)
where
- go 0 = return Nothing
+ go 0 = return Nothing
go n = do
(FuzzDir d) <- genFuzzDir
ifM (doesnotexist (parent </> d))
diff --git a/Command/GCryptSetup.hs b/Command/GCryptSetup.hs
index 2448467fd..7a7f8ae50 100644
--- a/Command/GCryptSetup.hs
+++ b/Command/GCryptSetup.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -13,8 +13,8 @@ import Annex.UUID
import qualified Remote.GCrypt
import qualified Git
-def :: [Command]
-def = [dontCheck repoExists $ noCommit $
+cmd :: [Command]
+cmd = [dontCheck repoExists $ noCommit $
command "gcryptsetup" paramValue seek
SectionPlumbing "sets up gcrypt repository"]
@@ -30,7 +30,7 @@ start gcryptid = next $ next $ do
g <- gitRepo
gu <- Remote.GCrypt.getGCryptUUID True g
let newgu = genUUIDInNameSpace gCryptNameSpace gcryptid
- if gu == Nothing || gu == Just newgu
+ if isNothing gu || gu == Just newgu
then if Git.repoIsLocalBare g
then do
void $ Remote.GCrypt.setupRepo gcryptid g
diff --git a/Command/Get.hs b/Command/Get.hs
index f436b15b5..85960fc1a 100644
--- a/Command/Get.hs
+++ b/Command/Get.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010, 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010, 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -11,17 +11,17 @@ import Common.Annex
import Command
import qualified Remote
import Annex.Content
-import Logs.Transfer
+import Annex.Transfer
import Config.NumCopies
import Annex.Wanted
import qualified Command.Move
-def :: [Command]
-def = [withOptions getOptions $ command "get" paramPaths seek
+cmd :: [Command]
+cmd = [withOptions getOptions $ command "get" paramPaths seek
SectionCommon "make content of annexed files available"]
getOptions :: [Option]
-getOptions = fromOption : keyOptions
+getOptions = fromOption : annexedMatchingOptions ++ keyOptions
seek :: CommandSeek
seek ps = do
@@ -31,8 +31,8 @@ seek ps = do
(withFilesInGit $ whenAnnexed $ start from)
ps
-start :: Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart
-start from file (key, _) = start' expensivecheck from key (Just file)
+start :: Maybe Remote -> FilePath -> Key -> CommandStart
+start from file key = start' expensivecheck from key (Just file)
where
expensivecheck = checkAuto (numCopiesCheck file key (<) <||> wantGet False (Just key) (Just file))
@@ -48,7 +48,7 @@ start' expensivecheck from key afile = stopUnless (not <$> inAnnex key) $
stopUnless (Command.Move.fromOk src key) $
go $ Command.Move.fromPerform src False key afile
where
- go a = do
+ go a = do
showStart' "get" key afile
next a
@@ -69,17 +69,17 @@ getKeyFile' key afile dest = dispatch
showNote "not available"
showlocs
return False
- dispatch remotes = trycopy remotes remotes
- trycopy full [] = do
+ dispatch remotes = notifyTransfer Download afile $ trycopy remotes remotes
+ trycopy full [] _ = do
Remote.showTriedRemotes full
showlocs
return False
- trycopy full (r:rs) =
+ trycopy full (r:rs) witness =
ifM (probablyPresent r)
- ( docopy r (trycopy full rs)
- , trycopy full rs
+ ( docopy r witness <||> trycopy full rs witness
+ , trycopy full rs witness
)
- showlocs = Remote.showLocations key []
+ showlocs = Remote.showLocations False key []
"No other repository is known to contain the file."
-- This check is to avoid an ugly message if a remote is a
-- drive that is not mounted.
@@ -87,8 +87,6 @@ getKeyFile' key afile dest = dispatch
| Remote.hasKeyCheap r =
either (const False) id <$> Remote.hasKey r key
| otherwise = return True
- docopy r continue = do
- ok <- download (Remote.uuid r) key afile noRetry $ \p -> do
- showAction $ "from " ++ Remote.name r
- Remote.retrieveKeyFile r key afile dest p
- if ok then return ok else continue
+ docopy r = download (Remote.uuid r) key afile noRetry $ \p -> do
+ showAction $ "from " ++ Remote.name r
+ Remote.retrieveKeyFile r key afile dest p
diff --git a/Command/Group.hs b/Command/Group.hs
index b0dbc1465..820f6ab17 100644
--- a/Command/Group.hs
+++ b/Command/Group.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -15,8 +15,8 @@ import Types.Group
import qualified Data.Set as S
-def :: [Command]
-def = [command "group" (paramPair paramRemote paramDesc) seek
+cmd :: [Command]
+cmd = [command "group" (paramPair paramRemote paramDesc) seek
SectionSetup "add a repository to a group"]
seek :: CommandSeek
@@ -26,10 +26,14 @@ start :: [String] -> CommandStart
start (name:g:[]) = do
showStart "group" name
u <- Remote.nameToUUID name
- next $ perform u g
+ next $ setGroup u g
+start (name:[]) = do
+ u <- Remote.nameToUUID name
+ showRaw . unwords . S.toList =<< lookupGroups u
+ stop
start _ = error "Specify a repository and a group."
-perform :: UUID -> Group -> CommandPerform
-perform uuid g = do
+setGroup :: UUID -> Group -> CommandPerform
+setGroup uuid g = do
groupChange uuid (S.insert g)
next $ return True
diff --git a/Command/GroupWanted.hs b/Command/GroupWanted.hs
new file mode 100644
index 000000000..859a39c1b
--- /dev/null
+++ b/Command/GroupWanted.hs
@@ -0,0 +1,45 @@
+{- git-annex command
+ -
+ - Copyright 2015 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Command.GroupWanted where
+
+import Common.Annex
+import qualified Annex
+import Command
+import Logs.PreferredContent
+import Types.Messages
+import Types.Group
+
+import qualified Data.Map as M
+
+cmd :: [Command]
+cmd = [command "groupwanted" (paramPair paramGroup (paramOptional paramExpression)) seek
+ SectionSetup "get or set groupwanted expression"]
+
+seek :: CommandSeek
+seek = withWords start
+
+start :: [String] -> CommandStart
+start (g:[]) = next $ performGet g
+start (g:expr:[]) = do
+ showStart "groupwanted" g
+ next $ performSet g expr
+start _ = error "Specify a group."
+
+performGet :: Group -> CommandPerform
+performGet g = do
+ Annex.setOutput QuietOutput
+ m <- groupPreferredContentMapRaw
+ liftIO $ putStrLn $ fromMaybe "" $ M.lookup g m
+ next $ return True
+
+performSet :: Group -> String -> CommandPerform
+performSet g expr = case checkPreferredContentExpression expr of
+ Just e -> error $ "Parse error: " ++ e
+ Nothing -> do
+ groupPreferredContentSet g expr
+ next $ return True
diff --git a/Command/Help.hs b/Command/Help.hs
index 7998ed796..72913d7c4 100644
--- a/Command/Help.hs
+++ b/Command/Help.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -21,8 +21,8 @@ import qualified Command.Fsck
import System.Console.GetOpt
-def :: [Command]
-def = [noCommit $ noRepo startNoRepo $ dontCheck repoExists $
+cmd :: [Command]
+cmd = [noCommit $ noRepo startNoRepo $ dontCheck repoExists $
command "help" paramNothing seek SectionQuery "display help"]
seek :: CommandSeek
@@ -47,15 +47,15 @@ showGeneralHelp :: IO ()
showGeneralHelp = putStrLn $ unlines
[ "The most frequently used git-annex commands are:"
, unlines $ map cmdline $ concat
- [ Command.Init.def
- , Command.Add.def
- , Command.Drop.def
- , Command.Get.def
- , Command.Move.def
- , Command.Copy.def
- , Command.Sync.def
- , Command.Whereis.def
- , Command.Fsck.def
+ [ Command.Init.cmd
+ , Command.Add.cmd
+ , Command.Drop.cmd
+ , Command.Get.cmd
+ , Command.Move.cmd
+ , Command.Copy.cmd
+ , Command.Sync.cmd
+ , Command.Whereis.cmd
+ , Command.Fsck.cmd
]
, "Run 'git-annex' for a complete command list."
, "Run 'git-annex command --help' for help on a specific command."
diff --git a/Command/Import.hs b/Command/Import.hs
index db3601a1b..025563b49 100644
--- a/Command/Import.hs
+++ b/Command/Import.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2012-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -16,47 +16,43 @@ import Backend
import Remote
import Types.KeySource
-def :: [Command]
-def = [withOptions opts $ notBareRepo $ command "import" paramPaths seek
+cmd :: [Command]
+cmd = [withOptions opts $ notBareRepo $ command "import" paramPaths seek
SectionCommon "move and add files from outside git working copy"]
opts :: [Option]
-opts =
- [ duplicateOption
- , deduplicateOption
- , cleanDuplicatesOption
- , skipDuplicatesOption
- ]
+opts = duplicateModeOptions ++ fileMatchingOptions
-duplicateOption :: Option
-duplicateOption = flagOption [] "duplicate" "do not delete source files"
-
-deduplicateOption :: Option
-deduplicateOption = flagOption [] "deduplicate" "delete source files whose content was imported before"
-
-cleanDuplicatesOption :: Option
-cleanDuplicatesOption = flagOption [] "clean-duplicates" "delete duplicate source files (import nothing)"
+data DuplicateMode = Default | Duplicate | DeDuplicate | CleanDuplicates | SkipDuplicates
+ deriving (Eq, Enum, Bounded)
-skipDuplicatesOption :: Option
-skipDuplicatesOption = flagOption [] "skip-duplicates" "import only new files"
+associatedOption :: DuplicateMode -> Maybe Option
+associatedOption Default = Nothing
+associatedOption Duplicate = Just $
+ flagOption [] "duplicate" "do not delete source files"
+associatedOption DeDuplicate = Just $
+ flagOption [] "deduplicate" "delete source files whose content was imported before"
+associatedOption CleanDuplicates = Just $
+ flagOption [] "clean-duplicates" "delete duplicate source files (import nothing)"
+associatedOption SkipDuplicates = Just $
+ flagOption [] "skip-duplicates" "import only new files"
-data DuplicateMode = Default | Duplicate | DeDuplicate | CleanDuplicates | SkipDuplicates
- deriving (Eq)
+duplicateModeOptions :: [Option]
+duplicateModeOptions = mapMaybe associatedOption [minBound..maxBound]
getDuplicateMode :: Annex DuplicateMode
-getDuplicateMode = gen
- <$> getflag duplicateOption
- <*> getflag deduplicateOption
- <*> getflag cleanDuplicatesOption
- <*> getflag skipDuplicatesOption
+getDuplicateMode = go . catMaybes <$> mapM getflag [minBound..maxBound]
where
- getflag = Annex.getFlag . optionName
- gen False False False False = Default
- gen True False False False = Duplicate
- gen False True False False = DeDuplicate
- gen False False True False = CleanDuplicates
- gen False False False True = SkipDuplicates
- gen _ _ _ _ = error "bad combination of --duplicate, --deduplicate, --clean-duplicates, --skip-duplicates"
+ getflag m = case associatedOption m of
+ Nothing -> return Nothing
+ Just o -> ifM (Annex.getFlag (optionName o))
+ ( return (Just m)
+ , return Nothing
+ )
+ go [] = Default
+ go [m] = m
+ go ms = error $ "cannot combine " ++
+ unwords (map (optionParam . fromJust . associatedOption) ms)
seek :: CommandSeek
seek ps = do
@@ -67,14 +63,8 @@ start :: DuplicateMode -> (FilePath, FilePath) -> CommandStart
start mode (srcfile, destfile) =
ifM (liftIO $ isRegularFile <$> getSymbolicLinkStatus srcfile)
( do
- isdup <- do
- backend <- chooseBackend destfile
- let ks = KeySource srcfile srcfile Nothing
- v <- genKey ks backend
- case v of
- Just (k, _) -> not . null <$> keyLocations k
- _ -> return False
- case pickaction isdup of
+ ma <- pickaction
+ case ma of
Nothing -> stop
Just a -> do
showStart "import" destfile
@@ -90,26 +80,27 @@ start mode (srcfile, destfile) =
handleexisting =<< liftIO (catchMaybeIO $ getSymbolicLinkStatus destfile)
liftIO $ createDirectoryIfMissing True (parentDir destfile)
liftIO $ if mode == Duplicate || mode == SkipDuplicates
- then void $ copyFileExternal srcfile destfile
+ then void $ copyFileExternal CopyAllMetaData srcfile destfile
else moveFile srcfile destfile
Command.Add.perform destfile
handleexisting Nothing = noop
handleexisting (Just s)
| isDirectory s = notoverwriting "(is a directory)"
- | otherwise = ifM (Annex.getState Annex.force) $
+ | otherwise = ifM (Annex.getState Annex.force)
( liftIO $ nukeFile destfile
, notoverwriting "(use --force to override)"
)
notoverwriting why = error $ "not overwriting existing " ++ destfile ++ " " ++ why
- pickaction isdup = case mode of
- DeDuplicate
- | isdup -> Just deletedup
- | otherwise -> Just importfile
- CleanDuplicates
- | isdup -> Just deletedup
- | otherwise -> Nothing
- SkipDuplicates
- | isdup -> Nothing
- | otherwise -> Just importfile
- _ -> Just importfile
-
+ checkdup dupa notdupa = do
+ backend <- chooseBackend destfile
+ let ks = KeySource srcfile srcfile Nothing
+ v <- genKey ks backend
+ isdup <- case v of
+ Just (k, _) -> not . null <$> keyLocations k
+ _ -> return False
+ return $ if isdup then dupa else notdupa
+ pickaction = case mode of
+ DeDuplicate -> checkdup (Just deletedup) (Just importfile)
+ CleanDuplicates -> checkdup (Just deletedup) Nothing
+ SkipDuplicates -> checkdup Nothing (Just importfile)
+ _ -> return (Just importfile)
diff --git a/Command/ImportFeed.hs b/Command/ImportFeed.hs
index 50f4278b6..ed035fa85 100644
--- a/Command/ImportFeed.hs
+++ b/Command/ImportFeed.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -15,25 +15,34 @@ import Text.Feed.Types
import qualified Data.Set as S
import qualified Data.Map as M
import Data.Time.Clock
+import Data.Time.Format
+import System.Locale
import Common.Annex
import qualified Annex
import Command
import qualified Annex.Url as Url
+import qualified Remote
+import qualified Types.Remote as Remote
+import Types.UrlContents
import Logs.Web
import qualified Utility.Format
import Utility.Tmp
-import Command.AddUrl (addUrlFile, relaxedOption)
+import Command.AddUrl (addUrlFile, downloadRemoteFile, relaxedOption)
import Annex.Perms
+import Annex.UUID
import Backend.URL (fromUrl)
#ifdef WITH_QUVI
import Annex.Quvi
import qualified Utility.Quvi as Quvi
import Command.AddUrl (addUrlFileQuvi)
#endif
+import Types.MetaData
+import Logs.MetaData
+import Annex.MetaData
-def :: [Command]
-def = [notBareRepo $ withOptions [templateOption, relaxedOption] $
+cmd :: [Command]
+cmd = [notBareRepo $ withOptions [templateOption, relaxedOption] $
command "importfeed" (paramRepeating paramUrl) seek
SectionCommon "import files from podcast feeds"]
@@ -132,9 +141,31 @@ downloadFeed url = do
performDownload :: Bool -> Cache -> ToDownload -> Annex Bool
performDownload relaxed cache todownload = case location todownload of
Enclosure url -> checkknown url $
- rundownload url (takeExtension url) $
- addUrlFile relaxed url
+ rundownload url (takeExtension url) $ \f -> do
+ r <- Remote.claimingUrl url
+ if Remote.uuid r == webUUID
+ then do
+ urlinfo <- Url.withUrlOptions (Url.getUrlInfo url)
+ maybeToList <$> addUrlFile relaxed url urlinfo f
+ else do
+ res <- tryNonAsync $ maybe
+ (error $ "unable to checkUrl of " ++ Remote.name r)
+ (flip id url)
+ (Remote.checkUrl r)
+ case res of
+ Left _ -> return []
+ Right (UrlContents sz _) ->
+ maybeToList <$>
+ downloadRemoteFile r relaxed url f sz
+ Right (UrlMulti l) -> do
+ kl <- forM l $ \(url', sz, subf) ->
+ downloadRemoteFile r relaxed url' (f </> fromSafeFilePath subf) sz
+ return $ if all isJust kl
+ then catMaybes kl
+ else []
+
QuviLink pageurl -> do
+#ifdef WITH_QUVI
let quviurl = setDownloader pageurl QuviDownloader
checkknown quviurl $ do
mp <- withQuviOptions Quvi.query [Quvi.quiet, Quvi.httponly] pageurl
@@ -145,10 +176,13 @@ performDownload relaxed cache todownload = case location todownload of
Just link -> do
let videourl = Quvi.linkUrl link
checkknown videourl $
- rundownload videourl ("." ++ Quvi.linkSuffix link) $
- addUrlFileQuvi relaxed quviurl videourl
+ rundownload videourl ("." ++ Quvi.linkSuffix link) $ \f ->
+ maybeToList <$> addUrlFileQuvi relaxed quviurl videourl f
+#else
+ return False
+#endif
where
- forced = Annex.getState Annex.force
+ forced = Annex.getState Annex.force
{- Avoids downloading any urls that are already known to be
- associated with a file in the annex, unless forced. -}
@@ -163,14 +197,17 @@ performDownload relaxed cache todownload = case location todownload of
Nothing -> return True
Just f -> do
showStart "addurl" f
- ok <- getter f
- if ok
+ ks <- getter f
+ if null ks
then do
- showEndOk
- return True
- else do
showEndFail
checkFeedBroken (feedurl todownload)
+ else do
+ forM_ ks $ \key ->
+ whenM (annexGenMetaData <$> Annex.getGitConfig) $
+ addMetaData key $ extractMetaData todownload
+ showEndOk
+ return True
{- Find a unique filename to save the url to.
- If the file exists, prefixes it with a number.
@@ -185,47 +222,84 @@ performDownload relaxed cache todownload = case location todownload of
, return $ Just f
)
where
- f = if n < 2
+ f = if n < 2
then file
else
let (d, base) = splitFileName file
in d </> show n ++ "_" ++ base
tryanother = makeunique url (n + 1) file
alreadyexists = liftIO $ isJust <$> catchMaybeIO (getSymbolicLinkStatus f)
- checksameurl (k, _) = ifM (elem url <$> getUrls k)
+ checksameurl k = ifM (elem url <$> getUrls k)
( return Nothing
, tryanother
)
-
+
defaultTemplate :: String
defaultTemplate = "${feedtitle}/${itemtitle}${extension}"
{- Generates a filename to use for a feed item by filling out the template.
- The filename may not be unique. -}
feedFile :: Utility.Format.Format -> ToDownload -> String -> FilePath
-feedFile tmpl i extension = Utility.Format.format tmpl $ M.fromList
- [ field "feedtitle" $ getFeedTitle $ feed i
- , fieldMaybe "itemtitle" $ getItemTitle $ item i
- , fieldMaybe "feedauthor" $ getFeedAuthor $ feed i
- , fieldMaybe "itemauthor" $ getItemAuthor $ item i
- , fieldMaybe "itemsummary" $ getItemSummary $ item i
- , fieldMaybe "itemdescription" $ getItemDescription $ item i
- , fieldMaybe "itemrights" $ getItemRights $ item i
- , fieldMaybe "itemid" $ snd <$> getItemId (item i)
- , ("extension", sanitizeFilePath extension)
+feedFile tmpl i extension = Utility.Format.format tmpl $
+ M.map sanitizeFilePath $ M.fromList $ extractFields i ++
+ [ ("extension", extension)
+ , extractField "itempubdate" [pubdate $ item i]
+ ]
+ where
+#if MIN_VERSION_feed(0,3,9)
+ pubdate itm = case getItemPublishDate itm :: Maybe (Maybe UTCTime) of
+ Just (Just d) -> Just $
+ formatTime defaultTimeLocale "%F" d
+ -- if date cannot be parsed, use the raw string
+ _ -> replace "/" "-" <$> getItemPublishDateString itm
+#else
+ pubdate _ = Nothing
+#endif
+
+extractMetaData :: ToDownload -> MetaData
+#if MIN_VERSION_feed(0,3,9)
+extractMetaData i = case getItemPublishDate (item i) :: Maybe (Maybe UTCTime) of
+ Just (Just d) -> unionMetaData meta (dateMetaData d meta)
+ _ -> meta
+#else
+extractMetaData i = meta
+#endif
+ where
+ tometa (k, v) = (mkMetaFieldUnchecked k, S.singleton (toMetaValue v))
+ meta = MetaData $ M.fromList $ map tometa $ extractFields i
+
+{- Extract fields from the feed and item, that are both used as metadata,
+ - and to generate the filename. -}
+extractFields :: ToDownload -> [(String, String)]
+extractFields i = map (uncurry extractField)
+ [ ("feedtitle", [feedtitle])
+ , ("itemtitle", [itemtitle])
+ , ("feedauthor", [feedauthor])
+ , ("itemauthor", [itemauthor])
+ , ("itemsummary", [getItemSummary $ item i])
+ , ("itemdescription", [getItemDescription $ item i])
+ , ("itemrights", [getItemRights $ item i])
+ , ("itemid", [snd <$> getItemId (item i)])
+ , ("title", [itemtitle, feedtitle])
+ , ("author", [itemauthor, feedauthor])
]
where
- field k v =
- let s = sanitizeFilePath v in
- if null s then (k, "none") else (k, s)
- fieldMaybe k Nothing = (k, "none")
- fieldMaybe k (Just v) = field k v
+ feedtitle = Just $ getFeedTitle $ feed i
+ itemtitle = getItemTitle $ item i
+ feedauthor = getFeedAuthor $ feed i
+ itemauthor = getItemAuthor $ item i
+
+extractField :: String -> [Maybe String] -> (String, String)
+extractField k [] = (k, "none")
+extractField k (Just v:_)
+ | not (null v) = (k, v)
+extractField k (_:rest) = extractField k rest
{- Called when there is a problem with a feed.
- Throws an error if the feed is broken, otherwise shows a warning. -}
feedProblem :: URLString -> String -> Annex ()
feedProblem url message = ifM (checkFeedBroken url)
- ( error $ message ++ " (having repeated problems with this feed!)"
+ ( error $ message ++ " (having repeated problems with feed: " ++ url ++ ")"
, warning $ "warning: " ++ message
)
diff --git a/Command/InAnnex.hs b/Command/InAnnex.hs
index 11cbdb73d..8e792c4bb 100644
--- a/Command/InAnnex.hs
+++ b/Command/InAnnex.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -11,8 +11,8 @@ import Common.Annex
import Command
import Annex.Content
-def :: [Command]
-def = [noCommit $ command "inannex" (paramRepeating paramKey) seek
+cmd :: [Command]
+cmd = [noCommit $ command "inannex" (paramRepeating paramKey) seek
SectionPlumbing "checks if keys are present in the annex"]
seek :: CommandSeek
diff --git a/Command/Indirect.hs b/Command/Indirect.hs
index c0dd57959..1d703d2f3 100644
--- a/Command/Indirect.hs
+++ b/Command/Indirect.hs
@@ -1,18 +1,16 @@
{- git-annex command
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Command.Indirect where
-import Control.Exception.Extensible
-
import Common.Annex
import Command
import qualified Git
-import qualified Git.Command
+import qualified Git.Branch
import qualified Git.LsFiles
import Git.FileMode
import Config
@@ -21,12 +19,11 @@ import Annex.Direct
import Annex.Content
import Annex.Content.Direct
import Annex.CatFile
-import Annex.Exception
import Annex.Init
import qualified Command.Add
-def :: [Command]
-def = [notBareRepo $ noDaemonRunning $
+cmd :: [Command]
+cmd = [notBareRepo $ noDaemonRunning $
command "indirect" paramNothing seek
SectionSetup "switch repository to indirect mode"]
@@ -49,9 +46,8 @@ perform = do
showStart "commit" ""
whenM stageDirect $ do
showOutput
- void $ inRepo $ Git.Command.runBool
- [ Param "commit"
- , Param "-m"
+ void $ inRepo $ Git.Branch.commitCommand Git.Branch.ManualCommit
+ [ Param "-m"
, Param "commit before switching to indirect mode"
]
showEndOk
@@ -74,7 +70,7 @@ perform = do
case r of
Just s
| isSymbolicLink s -> void $ flip whenAnnexed f $
- \_ (k, _) -> do
+ \_ k -> do
removeInodeCache k
removeAssociatedFiles k
return Nothing
@@ -89,16 +85,16 @@ perform = do
removeInodeCache k
removeAssociatedFiles k
whenM (liftIO $ not . isSymbolicLink <$> getSymbolicLinkStatus f) $ do
- v <-tryAnnexIO (moveAnnex k f)
+ v <- tryNonAsync (moveAnnex k f)
case v of
Right _ -> do
- l <- inRepo $ gitAnnexLink f k
+ l <- calcRepo $ gitAnnexLink f k
liftIO $ createSymbolicLink l f
- Left e -> catchAnnex (Command.Add.undo f k e)
+ Left e -> catchNonAsync (Command.Add.undo f k e)
warnlocked
showEndOk
- warnlocked :: SomeException -> Annex ()
+ warnlocked :: SomeException -> Annex ()
warnlocked e = do
warning $ show e
warning "leaving this file as-is; correct this problem and run git annex add on it"
diff --git a/Command/Info.hs b/Command/Info.hs
index 11ed98cd9..e04a72a3c 100644
--- a/Command/Info.hs
+++ b/Command/Info.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -16,17 +16,20 @@ import Data.Tuple
import Data.Ord
import Common.Annex
-import qualified Remote
import qualified Command.Unused
import qualified Git
import qualified Annex
+import qualified Remote
+import qualified Types.Remote as Remote
import Command
import Utility.DataUnits
import Utility.DiskFree
import Annex.Content
+import Annex.Link
import Types.Key
import Logs.UUID
import Logs.Trust
+import Logs.Location
import Config.NumCopies
import Remote
import Config
@@ -63,44 +66,82 @@ instance Show Variance where
data StatInfo = StatInfo
{ presentData :: Maybe KeyData
, referencedData :: Maybe KeyData
+ , remoteData :: M.Map UUID KeyData
, numCopiesStats :: Maybe NumCopiesStats
}
+emptyStatInfo :: StatInfo
+emptyStatInfo = StatInfo Nothing Nothing M.empty Nothing
+
-- a state monad for running Stats in
type StatState = StateT StatInfo Annex
-def :: [Command]
-def = [noCommit $ withOptions [jsonOption] $
- command "info" paramPaths seek SectionQuery
- "shows general information about the annex"]
+cmd :: [Command]
+cmd = [noCommit $ dontCheck repoExists $ withOptions (jsonOption : annexedMatchingOptions) $
+ command "info" (paramOptional $ paramRepeating paramItem) seek SectionQuery
+ "shows information about the specified item or the repository as a whole"]
seek :: CommandSeek
seek = withWords start
-start :: [FilePath] -> CommandStart
+start :: [String] -> CommandStart
start [] = do
globalInfo
stop
start ps = do
- mapM_ localInfo =<< filterM isdir ps
+ mapM_ itemInfo ps
stop
- where
- isdir = liftIO . catchBoolIO . (isDirectory <$$> getFileStatus)
globalInfo :: Annex ()
globalInfo = do
stats <- selStats global_fast_stats global_slow_stats
showCustom "info" $ do
- evalStateT (mapM_ showStat stats) (StatInfo Nothing Nothing Nothing)
+ evalStateT (mapM_ showStat stats) emptyStatInfo
return True
-localInfo :: FilePath -> Annex ()
-localInfo dir = showCustom (unwords ["info", dir]) $ do
- stats <- selStats (tostats local_fast_stats) (tostats local_slow_stats)
- evalStateT (mapM_ showStat stats) =<< getLocalStatInfo dir
+itemInfo :: String -> Annex ()
+itemInfo p = ifM (isdir p)
+ ( dirInfo p
+ , do
+ v <- Remote.byName' p
+ case v of
+ Right r -> remoteInfo r
+ Left _ -> do
+ v' <- Remote.nameToUUID' p
+ case v' of
+ Right u -> uuidInfo u
+ Left _ -> maybe noinfo (fileInfo p)
+ =<< isAnnexLink p
+ )
+ where
+ isdir = liftIO . catchBoolIO . (isDirectory <$$> getFileStatus)
+ noinfo = error $ p ++ " is not a directory or an annexed file or a remote or a uuid"
+
+dirInfo :: FilePath -> Annex ()
+dirInfo dir = showCustom (unwords ["info", dir]) $ do
+ stats <- selStats (tostats dir_fast_stats) (tostats dir_slow_stats)
+ evalStateT (mapM_ showStat stats) =<< getDirStatInfo dir
return True
where
- tostats = map (\s -> s dir)
+ tostats = map (\s -> s dir)
+
+fileInfo :: FilePath -> Key -> Annex ()
+fileInfo file k = showCustom (unwords ["info", file]) $ do
+ evalStateT (mapM_ showStat (file_stats file k)) emptyStatInfo
+ return True
+
+remoteInfo :: Remote -> Annex ()
+remoteInfo r = showCustom (unwords ["info", Remote.name r]) $ do
+ info <- map (\(k, v) -> simpleStat k (pure v)) <$> Remote.getInfo r
+ l <- selStats (remote_fast_stats r ++ info) (uuid_slow_stats (Remote.uuid r))
+ evalStateT (mapM_ showStat l) emptyStatInfo
+ return True
+
+uuidInfo :: UUID -> Annex ()
+uuidInfo u = showCustom (unwords ["info", fromUUID u]) $ do
+ l <- selStats [] ((uuid_slow_stats u))
+ evalStateT (mapM_ showStat l) emptyStatInfo
+ return True
selStats :: [Stat] -> [Stat] -> Annex [Stat]
selStats fast_stats slow_stats = do
@@ -132,22 +173,48 @@ global_slow_stats =
, bloom_info
, backend_usage
]
-local_fast_stats :: [FilePath -> Stat]
-local_fast_stats =
- [ local_dir
+dir_fast_stats :: [FilePath -> Stat]
+dir_fast_stats =
+ [ dir_name
, const local_annex_keys
, const local_annex_size
, const known_annex_files
, const known_annex_size
]
-local_slow_stats :: [FilePath -> Stat]
-local_slow_stats =
+dir_slow_stats :: [FilePath -> Stat]
+dir_slow_stats =
[ const numcopies_stats
]
+file_stats :: FilePath -> Key -> [Stat]
+file_stats f k =
+ [ file_name f
+ , key_size k
+ , key_name k
+ ]
+
+remote_fast_stats :: Remote -> [Stat]
+remote_fast_stats r = map (\s -> s r)
+ [ remote_name
+ , remote_description
+ , remote_uuid
+ , remote_cost
+ , remote_type
+ ]
+
+uuid_slow_stats :: UUID -> [Stat]
+uuid_slow_stats u = map (\s -> s u)
+ [ remote_annex_keys
+ , remote_annex_size
+ ]
+
stat :: String -> (String -> StatState String) -> Stat
stat desc a = return $ Just (desc, a desc)
+-- The json simply contains the same string that is displayed.
+simpleStat :: String -> StatState String -> Stat
+simpleStat desc getval = stat desc $ json id getval
+
nostat :: Stat
nostat = return Nothing
@@ -168,36 +235,67 @@ showStat s = maybe noop calc =<< s
lift . showRaw =<< a
repository_mode :: Stat
-repository_mode = stat "repository mode" $ json id $ lift $
+repository_mode = simpleStat "repository mode" $ lift $
ifM isDirect
( return "direct", return "indirect" )
remote_list :: TrustLevel -> Stat
remote_list level = stat n $ nojson $ lift $ do
- us <- M.keys <$> (M.union <$> uuidMap <*> remoteMap Remote.name)
+ us <- filter (/= NoUUID) . M.keys
+ <$> (M.union <$> uuidMap <*> remoteMap Remote.name)
rs <- fst <$> trustPartition level us
s <- prettyPrintUUIDs n rs
return $ if null s then "0" else show (length rs) ++ "\n" ++ beginning s
where
n = showTrustLevel level ++ " repositories"
-local_dir :: FilePath -> Stat
-local_dir dir = stat "directory" $ json id $ return dir
+dir_name :: FilePath -> Stat
+dir_name dir = simpleStat "directory" $ pure dir
+
+file_name :: FilePath -> Stat
+file_name file = simpleStat "file" $ pure file
+
+remote_name :: Remote -> Stat
+remote_name r = simpleStat "remote" $ pure (Remote.name r)
+
+remote_description :: Remote -> Stat
+remote_description r = simpleStat "description" $ lift $
+ Remote.prettyUUID (Remote.uuid r)
+
+remote_uuid :: Remote -> Stat
+remote_uuid r = simpleStat "uuid" $ pure $
+ fromUUID $ Remote.uuid r
+
+remote_cost :: Remote -> Stat
+remote_cost r = simpleStat "cost" $ pure $
+ show $ Remote.cost r
+
+remote_type :: Remote -> Stat
+remote_type r = simpleStat "type" $ pure $
+ Remote.typename $ Remote.remotetype r
local_annex_keys :: Stat
local_annex_keys = stat "local annex keys" $ json show $
countKeys <$> cachedPresentData
local_annex_size :: Stat
-local_annex_size = stat "local annex size" $ json id $
+local_annex_size = simpleStat "local annex size" $
showSizeKeys <$> cachedPresentData
+remote_annex_keys :: UUID -> Stat
+remote_annex_keys u = stat "remote annex keys" $ json show $
+ countKeys <$> cachedRemoteData u
+
+remote_annex_size :: UUID -> Stat
+remote_annex_size u = simpleStat "remote annex size" $
+ showSizeKeys <$> cachedRemoteData u
+
known_annex_files :: Stat
known_annex_files = stat "annexed files in working tree" $ json show $
countKeys <$> cachedReferencedData
known_annex_size :: Stat
-known_annex_size = stat "size of annexed files in working tree" $ json id $
+known_annex_size = simpleStat "size of annexed files in working tree" $
showSizeKeys <$> cachedReferencedData
tmp_size :: Stat
@@ -206,8 +304,14 @@ tmp_size = staleSize "temporary object directory size" gitAnnexTmpObjectDir
bad_data_size :: Stat
bad_data_size = staleSize "bad keys size" gitAnnexBadDir
+key_size :: Key -> Stat
+key_size k = simpleStat "size" $ pure $ showSizeKeys $ foldKeys [k]
+
+key_name :: Key -> Stat
+key_name k = simpleStat "key" $ pure $ key2file k
+
bloom_info :: Stat
-bloom_info = stat "bloom filter size" $ json id $ do
+bloom_info = simpleStat "bloom filter size" $ do
localkeys <- countKeys <$> cachedPresentData
capacity <- fromIntegral <$> lift Command.Unused.bloomCapacity
let note = aside $
@@ -240,7 +344,7 @@ transfer_list = stat "transfers in progress" $ nojson $ lift $ do
]
disk_size :: Stat
-disk_size = stat "available local disk space" $ json id $ lift $
+disk_size = simpleStat "available local disk space" $ lift $
calcfree
<$> (annexDiskReserve <$> Annex.getGitConfig)
<*> inRepo (getDiskFree . gitAnnexDir)
@@ -264,7 +368,7 @@ backend_usage = stat "backend usage" $ nojson $
where
calc x y = multiLine $
map (\(n, b) -> b ++ ": " ++ show n) $
- reverse $ sort $ map swap $ M.toList $
+ sortBy (flip compare) $ map swap $ M.toList $
M.unionWith (+) x y
numcopies_stats :: Stat
@@ -273,7 +377,7 @@ numcopies_stats = stat "numcopies stats" $ nojson $
where
calc = multiLine
. map (\(variance, count) -> show variance ++ ": " ++ show count)
- . reverse . sortBy (comparing snd) . M.toList
+ . sortBy (flip (comparing snd)) . M.toList
cachedPresentData :: StatState KeyData
cachedPresentData = do
@@ -285,6 +389,16 @@ cachedPresentData = do
put s { presentData = Just v }
return v
+cachedRemoteData :: UUID -> StatState KeyData
+cachedRemoteData u = do
+ s <- get
+ case M.lookup u (remoteData s) of
+ Just v -> return v
+ Nothing -> do
+ v <- foldKeys <$> lift (loggedKeysFor u)
+ put s { remoteData = M.insert u v (remoteData s) }
+ return v
+
cachedReferencedData :: StatState KeyData
cachedReferencedData = do
s <- get
@@ -296,18 +410,18 @@ cachedReferencedData = do
put s { referencedData = Just v }
return v
--- currently only available for local info
+-- currently only available for directory info
cachedNumCopiesStats :: StatState (Maybe NumCopiesStats)
cachedNumCopiesStats = numCopiesStats <$> get
-getLocalStatInfo :: FilePath -> Annex StatInfo
-getLocalStatInfo dir = do
+getDirStatInfo :: FilePath -> Annex StatInfo
+getDirStatInfo dir = do
fast <- Annex.getState Annex.fast
matcher <- Limit.getMatcher
(presentdata, referenceddata, numcopiesstats) <-
Command.Unused.withKeysFilesReferencedIn dir initial
(update matcher fast)
- return $ StatInfo (Just presentdata) (Just referenceddata) (Just numcopiesstats)
+ return $ StatInfo (Just presentdata) (Just referenceddata) M.empty (Just numcopiesstats)
where
initial = (emptyKeyData, emptyKeyData, emptyNumCopiesStats)
update matcher fast key file vs@(presentdata, referenceddata, numcopiesstats) =
@@ -375,8 +489,7 @@ staleSize label dirspec = go =<< lift (dirKeys dirspec)
keysizes keys = do
dir <- lift $ fromRepo dirspec
liftIO $ forM keys $ \k -> catchDefaultIO 0 $
- fromIntegral . fileSize
- <$> getFileStatus (dir </> keyFile k)
+ getFileSize (dir </> keyFile k)
aside :: String -> String
aside s = " (" ++ s ++ ")"
diff --git a/Command/Init.hs b/Command/Init.hs
index e8d9af167..23203b035 100644
--- a/Command/Init.hs
+++ b/Command/Init.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -11,8 +11,8 @@ import Common.Annex
import Command
import Annex.Init
-def :: [Command]
-def = [dontCheck repoExists $
+cmd :: [Command]
+cmd = [dontCheck repoExists $
command "init" paramDesc seek SectionSetup "initialize git-annex"]
seek :: CommandSeek
diff --git a/Command/InitRemote.hs b/Command/InitRemote.hs
index dc54023cc..7831fe22a 100644
--- a/Command/InitRemote.hs
+++ b/Command/InitRemote.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2011,2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011,2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -19,8 +19,8 @@ import Logs.Trust
import Data.Ord
-def :: [Command]
-def = [command "initremote"
+cmd :: [Command]
+cmd = [command "initremote"
(paramPair paramName $ paramOptional $ paramRepeating paramKeyValue)
seek SectionSetup "creates a special (non-git) remote"]
@@ -33,11 +33,15 @@ start (name:ws) = ifM (isJust <$> findExisting name)
( error $ "There is already a special remote named \"" ++ name ++
"\". (Use enableremote to enable an existing special remote.)"
, do
- let c = newConfig name
- t <- findType config
-
- showStart "initremote" name
- next $ perform t name $ M.union config c
+ ifM (isJust <$> Remote.byNameOnly name)
+ ( error $ "There is already a remote named \"" ++ name ++ "\""
+ , do
+ let c = newConfig name
+ t <- findType config
+
+ showStart "initremote" name
+ next $ perform t name $ M.union config c
+ )
)
where
config = Logs.Remote.keyValToConfig ws
@@ -63,7 +67,7 @@ findExisting name = do
return $ headMaybe matches
newConfig :: String -> R.RemoteConfig
-newConfig name = M.singleton nameKey name
+newConfig = M.singleton nameKey
findByName :: String -> M.Map UUID R.RemoteConfig -> [(UUID, R.RemoteConfig)]
findByName n = filter (matching . snd) . M.toList
diff --git a/Command/List.hs b/Command/List.hs
index ba6251333..b9b3a376c 100644
--- a/Command/List.hs
+++ b/Command/List.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
- Copyright 2013 Antoine Beaupré
-
- Licensed under the GNU GPL version 3 or higher.
@@ -23,9 +23,10 @@ import Annex.UUID
import qualified Annex
import Git.Types (RemoteName)
-def :: [Command]
-def = [noCommit $ withOptions [allrepos] $ command "list" paramPaths seek
- SectionQuery "show which remotes contain files"]
+cmd :: [Command]
+cmd = [noCommit $ withOptions (allrepos : annexedMatchingOptions) $
+ command "list" paramPaths seek
+ SectionQuery "show which remotes contain files"]
allrepos :: Option
allrepos = flagOption [] "allrepos" "show all repositories, not only remotes"
@@ -38,7 +39,7 @@ seek ps = do
getList :: Annex [(UUID, RemoteName, TrustLevel)]
getList = ifM (Annex.getFlag $ optionName allrepos)
- ( nubBy ((==) `on` fst3) <$> ((++) <$> getRemotes <*> getAll)
+ ( nubBy ((==) `on` fst3) <$> ((++) <$> getRemotes <*> getAllUUIDs)
, getRemotes
)
where
@@ -48,7 +49,7 @@ getList = ifM (Annex.getFlag $ optionName allrepos)
hereu <- getUUID
heretrust <- lookupTrust hereu
return $ (hereu, "here", heretrust) : zip3 (map uuid rs) (map name rs) ts
- getAll = do
+ getAllUUIDs = do
rs <- M.toList <$> uuidMap
rs3 <- forM rs $ \(u, n) -> (,,)
<$> pure u
@@ -60,8 +61,8 @@ getList = ifM (Annex.getFlag $ optionName allrepos)
printHeader :: [(UUID, RemoteName, TrustLevel)] -> Annex ()
printHeader l = liftIO $ putStrLn $ header $ map (\(_, n, t) -> (n, t)) l
-start :: [(UUID, RemoteName, TrustLevel)] -> FilePath -> (Key, Backend) -> CommandStart
-start l file (key, _) = do
+start :: [(UUID, RemoteName, TrustLevel)] -> FilePath -> Key -> CommandStart
+start l file key = do
ls <- S.fromList <$> keyLocations key
liftIO $ putStrLn $ format (map (\(u, _, t) -> (t, S.member u ls)) l) file
stop
@@ -71,15 +72,15 @@ type Present = Bool
header :: [(RemoteName, TrustLevel)] -> String
header remotes = unlines (zipWith formatheader [0..] remotes) ++ pipes (length remotes)
where
- formatheader n (remotename, trustlevel) = pipes n ++ remotename ++ trust trustlevel
- pipes = flip replicate '|'
- trust UnTrusted = " (untrusted)"
- trust _ = ""
+ formatheader n (remotename, trustlevel) = pipes n ++ remotename ++ trust trustlevel
+ pipes = flip replicate '|'
+ trust UnTrusted = " (untrusted)"
+ trust _ = ""
format :: [(TrustLevel, Present)] -> FilePath -> String
format remotes file = thereMap ++ " " ++ file
where
- thereMap = concatMap there remotes
- there (UnTrusted, True) = "x"
- there (_, True) = "X"
- there (_, False) = "_"
+ thereMap = concatMap there remotes
+ there (UnTrusted, True) = "x"
+ there (_, True) = "X"
+ there (_, False) = "_"
diff --git a/Command/Lock.hs b/Command/Lock.hs
index e6733dcb1..720169506 100644
--- a/Command/Lock.hs
+++ b/Command/Lock.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -12,8 +12,9 @@ import Command
import qualified Annex.Queue
import qualified Annex
-def :: [Command]
-def = [notDirect $ command "lock" paramPaths seek SectionCommon
+cmd :: [Command]
+cmd = [notDirect $ withOptions annexedMatchingOptions $
+ command "lock" paramPaths seek SectionCommon
"undo unlock command"]
seek :: CommandSeek
diff --git a/Command/Log.hs b/Command/Log.hs
index 84583a93a..4bc7bb89a 100644
--- a/Command/Log.hs
+++ b/Command/Log.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -34,12 +34,12 @@ data RefChange = RefChange
type Outputter = Bool -> POSIXTime -> [UUID] -> Annex ()
-def :: [Command]
-def = [withOptions options $
+cmd :: [Command]
+cmd = [withOptions options $
command "log" paramPaths seek SectionQuery "shows location log"]
options :: [Option]
-options = passthruOptions ++ [gourceOption]
+options = passthruOptions ++ [gourceOption] ++ annexedMatchingOptions
passthruOptions :: [Option]
passthruOptions = map odate ["since", "after", "until", "before"] ++
@@ -64,9 +64,15 @@ seek ps = do
Annex.getField (optionName o)
use o v = [Param ("--" ++ optionName o), Param v]
-start :: M.Map UUID String -> TimeZone -> [CommandParam] -> Bool ->
- FilePath -> (Key, Backend) -> CommandStart
-start m zone os gource file (key, _) = do
+start
+ :: M.Map UUID String
+ -> TimeZone
+ -> [CommandParam]
+ -> Bool
+ -> FilePath
+ -> Key
+ -> CommandStart
+start m zone os gource file key = do
showLog output =<< readLog <$> getLog key os
-- getLog produces a zombie; reap it
liftIO reapZombies
@@ -135,7 +141,8 @@ getLog :: Key -> [CommandParam] -> Annex [String]
getLog key os = do
top <- fromRepo Git.repoPath
p <- liftIO $ relPathCwdToFile top
- let logfile = p </> locationLogFile key
+ config <- Annex.getGitConfig
+ let logfile = p </> locationLogFile config key
inRepo $ pipeNullSplitZombie $
[ Params "log -z --pretty=format:%ct --raw --abbrev=40"
, Param "--remove-empty"
diff --git a/Command/LookupKey.hs b/Command/LookupKey.hs
index 814c5d2d7..0485232ae 100644
--- a/Command/LookupKey.hs
+++ b/Command/LookupKey.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -12,8 +12,8 @@ import Command
import Annex.CatFile
import Types.Key
-def :: [Command]
-def = [notBareRepo $ noCommit $ noMessages $
+cmd :: [Command]
+cmd = [notBareRepo $ noCommit $ noMessages $
command "lookupkey" (paramRepeating paramFile) seek
SectionPlumbing "looks up key used for file"]
diff --git a/Command/Map.hs b/Command/Map.hs
index 7c11fb2ef..75af591d5 100644
--- a/Command/Map.hs
+++ b/Command/Map.hs
@@ -1,13 +1,12 @@
{- git-annex command
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Command.Map where
-import Control.Exception.Extensible
import qualified Data.Map as M
import Common.Annex
@@ -26,8 +25,8 @@ import qualified Utility.Dot as Dot
-- a link from the first repository to the second (its remote)
data Link = Link Git.Repo Git.Repo
-def :: [Command]
-def = [dontCheck repoExists $
+cmd :: [Command]
+cmd = [dontCheck repoExists $
command "map" paramNothing seek SectionQuery
"generate map of repositories"]
@@ -195,25 +194,27 @@ tryScan r
| Git.repoIsUrl r = return Nothing
| otherwise = liftIO $ safely $ Git.Config.read r
where
- pipedconfig cmd params = liftIO $ safely $
+ pipedconfig pcmd params = liftIO $ safely $
withHandle StdoutHandle createProcessSuccess p $
Git.Config.hRead r
where
- p = proc cmd $ toCommand params
+ p = proc pcmd $ toCommand params
- configlist = Ssh.onRemote r (pipedconfig, Nothing) "configlist" [] []
+ configlist = Ssh.onRemote r (pipedconfig, return Nothing) "configlist" [] []
manualconfiglist = do
- sshparams <- Ssh.toRepo r [Param sshcmd]
+ gc <- Annex.getRemoteGitConfig r
+ sshparams <- Ssh.toRepo r gc [Param sshcmd]
liftIO $ pipedconfig "ssh" sshparams
where
- sshcmd = cddir ++ " && " ++
- "git config --null --list"
+ sshcmd = "sh -c " ++ shellEscape
+ (cddir ++ " && " ++ "git config --null --list")
dir = Git.repoPath r
cddir
| "/~" `isPrefixOf` dir =
let (userhome, reldir) = span (/= '/') (drop 1 dir)
- in "cd " ++ userhome ++ " && cd " ++ shellEscape (drop 1 reldir)
- | otherwise = "cd " ++ shellEscape dir
+ in "cd " ++ userhome ++ " && " ++ cdto (drop 1 reldir)
+ | otherwise = cdto dir
+ cdto p = "if ! cd " ++ shellEscape p ++ " 2>/dev/null; then cd " ++ shellEscape p ++ ".git; fi"
-- First, try sshing and running git config manually,
-- only fall back to git-annex-shell configlist if that
@@ -246,7 +247,7 @@ combineSame = map snd . nubBy sameuuid . map pair
safely :: IO Git.Repo -> IO (Maybe Git.Repo)
safely a = do
- result <- try a :: IO (Either SomeException Git.Repo)
+ result <- tryNonAsync a
case result of
Left _ -> return Nothing
Right r' -> return $ Just r'
diff --git a/Command/Merge.hs b/Command/Merge.hs
index 51a8b9c52..28e3bbb4d 100644
--- a/Command/Merge.hs
+++ b/Command/Merge.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2011, 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011, 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -13,8 +13,8 @@ import qualified Annex.Branch
import qualified Git.Branch
import Command.Sync (prepMerge, mergeLocal)
-def :: [Command]
-def = [command "merge" paramNothing seek SectionMaintenance
+cmd :: [Command]
+cmd = [command "merge" paramNothing seek SectionMaintenance
"automatically merge changes from remotes"]
seek :: CommandSeek
diff --git a/Command/MetaData.hs b/Command/MetaData.hs
index d932315ab..f1de6b6de 100644
--- a/Command/MetaData.hs
+++ b/Command/MetaData.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -16,8 +16,8 @@ import Logs.MetaData
import qualified Data.Set as S
import Data.Time.Clock.POSIX
-def :: [Command]
-def = [withOptions metaDataOptions $
+cmd :: [Command]
+cmd = [withOptions metaDataOptions $
command "metadata" paramPaths seek
SectionMetaData "sets metadata of a file"]
@@ -28,7 +28,7 @@ metaDataOptions =
, untagOption
, getOption
, jsonOption
- ] ++ keyOptions
+ ] ++ keyOptions ++ annexedMatchingOptions
storeModMeta :: ModMeta -> Annex ()
storeModMeta modmeta = Annex.changeState $
@@ -58,13 +58,16 @@ seek ps = do
getfield <- getOptionField getOption $ \ms ->
return $ either error id . mkMetaField <$> ms
now <- liftIO getPOSIXTime
+ let seeker = if null modmeta
+ then withFilesInGit
+ else withFilesInGitNonRecursive
withKeyOptions
(startKeys now getfield modmeta)
- (withFilesInGit (whenAnnexed $ start now getfield modmeta))
+ (seeker $ whenAnnexed $ start now getfield modmeta)
ps
-start :: POSIXTime -> Maybe MetaField -> [ModMeta] -> FilePath -> (Key, Backend) -> CommandStart
-start now f ms file (k, _) = start' (Just file) now f ms k
+start :: POSIXTime -> Maybe MetaField -> [ModMeta] -> FilePath -> Key -> CommandStart
+start now f ms file = start' (Just file) now f ms
startKeys :: POSIXTime -> Maybe MetaField -> [ModMeta] -> Key -> CommandStart
startKeys = start' Nothing
diff --git a/Command/Migrate.hs b/Command/Migrate.hs
index c14c07bdd..46c0eb675 100644
--- a/Command/Migrate.hs
+++ b/Command/Migrate.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -11,29 +11,33 @@ import Common.Annex
import Command
import Backend
import qualified Types.Key
-import qualified Types.Backend
+import Types.Backend (canUpgradeKey, fastMigrate)
import Types.KeySource
import Annex.Content
import qualified Command.ReKey
import qualified Command.Fsck
-def :: [Command]
-def = [notDirect $
+cmd :: [Command]
+cmd = [notDirect $ withOptions annexedMatchingOptions $
command "migrate" paramPaths seek
SectionUtility "switch data to different backend"]
seek :: CommandSeek
seek = withFilesInGit $ whenAnnexed start
-start :: FilePath -> (Key, Backend) -> CommandStart
-start file (key, oldbackend) = do
- exists <- inAnnex key
- newbackend <- choosebackend =<< chooseBackend file
- if (newbackend /= oldbackend || upgradableKey oldbackend key) && exists
- then do
- showStart "migrate" file
- next $ perform file key oldbackend newbackend
- else stop
+start :: FilePath -> Key -> CommandStart
+start file key = do
+ v <- Backend.getBackend file key
+ case v of
+ Nothing -> stop
+ Just oldbackend -> do
+ exists <- inAnnex key
+ newbackend <- choosebackend =<< chooseBackend file
+ if (newbackend /= oldbackend || upgradableKey oldbackend key) && exists
+ then do
+ showStart "migrate" file
+ next $ perform file key oldbackend newbackend
+ else stop
where
choosebackend Nothing = Prelude.head <$> orderedList
choosebackend (Just backend) = return backend
@@ -47,8 +51,7 @@ start file (key, oldbackend) = do
upgradableKey :: Backend -> Key -> Bool
upgradableKey backend key = isNothing (Types.Key.keySize key) || backendupgradable
where
- backendupgradable = maybe False (\a -> a key)
- (Types.Backend.canUpgradeKey backend)
+ backendupgradable = maybe False (\a -> a key) (canUpgradeKey backend)
{- Store the old backend's key in the new backend
- The old backend's key is not dropped from it, because there may
@@ -62,16 +65,23 @@ upgradableKey backend key = isNothing (Types.Key.keySize key) || backendupgradab
perform :: FilePath -> Key -> Backend -> Backend -> CommandPerform
perform file oldkey oldbackend newbackend = go =<< genkey
where
- go Nothing = stop
- go (Just newkey) = stopUnless checkcontent $ finish newkey
+ go Nothing = stop
+ go (Just (newkey, knowngoodcontent))
+ | knowngoodcontent = finish newkey
+ | otherwise = stopUnless checkcontent $ finish newkey
checkcontent = Command.Fsck.checkBackend oldbackend oldkey $ Just file
finish newkey = stopUnless (Command.ReKey.linkKey oldkey newkey) $
next $ Command.ReKey.cleanup file oldkey newkey
- genkey = do
- content <- calcRepo $ gitAnnexLocation oldkey
- let source = KeySource
- { keyFilename = file
- , contentLocation = content
- , inodeCache = Nothing
- }
- liftM fst <$> genKey source (Just newbackend)
+ genkey = case maybe Nothing (\fm -> fm oldkey newbackend (Just file)) (fastMigrate oldbackend) of
+ Just newkey -> return $ Just (newkey, True)
+ Nothing -> do
+ content <- calcRepo $ gitAnnexLocation oldkey
+ let source = KeySource
+ { keyFilename = file
+ , contentLocation = content
+ , inodeCache = Nothing
+ }
+ v <- genKey source (Just newbackend)
+ return $ case v of
+ Just (newkey, _) -> Just (newkey, False)
+ _ -> Nothing
diff --git a/Command/Mirror.hs b/Command/Mirror.hs
index 4a7a8dd99..7d3a7ef67 100644
--- a/Command/Mirror.hs
+++ b/Command/Mirror.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -17,8 +17,8 @@ import Annex.Content
import qualified Annex
import Config.NumCopies
-def :: [Command]
-def = [withOptions (fromToOptions ++ keyOptions) $
+cmd :: [Command]
+cmd = [withOptions (fromToOptions ++ annexedMatchingOptions ++ keyOptions) $
command "mirror" paramPaths seek
SectionCommon "mirror content of files to/from another repository"]
@@ -31,8 +31,8 @@ seek ps = do
(withFilesInGit $ whenAnnexed $ start to from)
ps
-start :: Maybe Remote -> Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart
-start to from file (key, _backend) = startKey to from (Just file) key
+start :: Maybe Remote -> Maybe Remote -> FilePath -> Key -> CommandStart
+start to from file = startKey to from (Just file)
startKey :: Maybe Remote -> Maybe Remote -> Maybe FilePath -> Key -> CommandStart
startKey to from afile key = do
diff --git a/Command/Move.hs b/Command/Move.hs
index 3a39e1de0..5317cefdd 100644
--- a/Command/Move.hs
+++ b/Command/Move.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -14,15 +14,15 @@ import qualified Annex
import Annex.Content
import qualified Remote
import Annex.UUID
+import Annex.Transfer
import Logs.Presence
-import Logs.Transfer
-def :: [Command]
-def = [withOptions moveOptions $ command "move" paramPaths seek
+cmd :: [Command]
+cmd = [withOptions moveOptions $ command "move" paramPaths seek
SectionCommon "move content of files to/from another repository"]
moveOptions :: [Option]
-moveOptions = fromToOptions ++ keyOptions
+moveOptions = fromToOptions ++ keyOptions ++ annexedMatchingOptions
seek :: CommandSeek
seek ps = do
@@ -33,8 +33,8 @@ seek ps = do
(withFilesInGit $ whenAnnexed $ start to from True)
ps
-start :: Maybe Remote -> Maybe Remote -> Bool -> FilePath -> (Key, Backend) -> CommandStart
-start to from move file (key, _) = start' to from move (Just file) key
+start :: Maybe Remote -> Maybe Remote -> Bool -> FilePath -> Key -> CommandStart
+start to from move = start' to from move . Just
startKey :: Maybe Remote -> Maybe Remote -> Bool -> Key -> CommandStart
startKey to from move = start' to from move Nothing
@@ -91,15 +91,16 @@ expectedPresent dest key = do
return $ dest `elem` remotes
toPerform :: Remote -> Bool -> Key -> AssociatedFile -> Bool -> Either String Bool -> CommandPerform
-toPerform dest move key afile fastcheck isthere = moveLock move key $
+toPerform dest move key afile fastcheck isthere =
case isthere of
Left err -> do
showNote err
stop
Right False -> do
showAction $ "to " ++ Remote.name dest
- ok <- upload (Remote.uuid dest) key afile noRetry $
- Remote.storeKey dest key afile
+ ok <- notifyTransfer Upload afile $
+ upload (Remote.uuid dest) key afile noRetry $
+ Remote.storeKey dest key afile
if ok
then do
Remote.logStatus dest key InfoPresent
@@ -114,8 +115,8 @@ toPerform dest move key afile fastcheck isthere = moveLock move key $
finish
where
finish
- | move = do
- removeAnnex key
+ | move = lockContent key $ \contentlock -> do
+ removeAnnex contentlock
next $ Command.Drop.cleanupLocal key
| otherwise = next $ return True
@@ -149,23 +150,17 @@ fromOk src key = go =<< Annex.getState Annex.force
return $ u /= Remote.uuid src && elem src remotes
fromPerform :: Remote -> Bool -> Key -> AssociatedFile -> CommandPerform
-fromPerform src move key afile = moveLock move key $
- ifM (inAnnex key)
- ( handle move True
- , handle move =<< go
- )
+fromPerform src move key afile = ifM (inAnnex key)
+ ( dispatch move True
+ , dispatch move =<< go
+ )
where
- go = download (Remote.uuid src) key afile noRetry $ \p -> do
- showAction $ "from " ++ Remote.name src
- getViaTmp key $ \t -> Remote.retrieveKeyFile src key afile t p
- handle _ False = stop -- failed
- handle False True = next $ return True -- copy complete
- handle True True = do -- finish moving
+ go = notifyTransfer Download afile $
+ download (Remote.uuid src) key afile noRetry $ \p -> do
+ showAction $ "from " ++ Remote.name src
+ getViaTmp key $ \t -> Remote.retrieveKeyFile src key afile t p
+ dispatch _ False = stop -- failed
+ dispatch False True = next $ return True -- copy complete
+ dispatch True True = do -- finish moving
ok <- Remote.removeKey src key
next $ Command.Drop.cleanupRemote key src ok
-
-{- Locks a key in order for it to be moved.
- - No lock is needed when a key is being copied. -}
-moveLock :: Bool -> Key -> Annex a -> Annex a
-moveLock True key a = lockContent key a
-moveLock False _ a = a
diff --git a/Command/NotifyChanges.hs b/Command/NotifyChanges.hs
new file mode 100644
index 000000000..7ec6072dd
--- /dev/null
+++ b/Command/NotifyChanges.hs
@@ -0,0 +1,83 @@
+{- git-annex-shell command
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Command.NotifyChanges where
+
+import Common.Annex
+import Command
+import Utility.DirWatcher
+import Utility.DirWatcher.Types
+import qualified Git
+import Git.Sha
+import RemoteDaemon.Transport.Ssh.Types
+
+import Control.Concurrent
+import Control.Concurrent.Async
+import Control.Concurrent.STM
+
+cmd :: [Command]
+cmd = [noCommit $ command "notifychanges" paramNothing seek SectionPlumbing
+ "sends notification when git refs are changed"]
+
+seek :: CommandSeek
+seek = withNothing start
+
+start :: CommandStart
+start = do
+ -- This channel is used to accumulate notifcations,
+ -- because the DirWatcher might have multiple threads that find
+ -- changes at the same time.
+ chan <- liftIO newTChanIO
+
+ g <- gitRepo
+ let refdir = Git.localGitDir g </> "refs"
+ liftIO $ createDirectoryIfMissing True refdir
+
+ let notifyhook = Just $ notifyHook chan
+ let hooks = mkWatchHooks
+ { addHook = notifyhook
+ , modifyHook = notifyhook
+ }
+
+ void $ liftIO $ watchDir refdir (const False) True hooks id
+
+ let sender = do
+ send READY
+ forever $ send . CHANGED =<< drain chan
+
+ -- No messages need to be received from the caller,
+ -- but when it closes the connection, notice and terminate.
+ let receiver = forever $ void getLine
+ void $ liftIO $ concurrently sender receiver
+ stop
+
+notifyHook :: TChan Git.Sha -> FilePath -> Maybe FileStatus -> IO ()
+notifyHook chan reffile _
+ | ".lock" `isSuffixOf` reffile = noop
+ | otherwise = void $ do
+ sha <- catchDefaultIO Nothing $
+ extractSha <$> readFile reffile
+ maybe noop (atomically . writeTChan chan) sha
+
+-- When possible, coalesce ref writes that occur closely together
+-- in time. Delay up to 0.05 seconds to get more ref writes.
+drain :: TChan Git.Sha -> IO [Git.Sha]
+drain chan = do
+ r <- atomically $ readTChan chan
+ threadDelay 50000
+ rs <- atomically $ drain' chan
+ return (r:rs)
+
+drain' :: TChan Git.Sha -> STM [Git.Sha]
+drain' chan = loop []
+ where
+ loop rs = maybe (return rs) (\r -> loop (r:rs)) =<< tryReadTChan chan
+
+send :: Notification -> IO ()
+send n = do
+ putStrLn $ unwords $ formatMessage n
+ hFlush stdout
diff --git a/Command/NumCopies.hs b/Command/NumCopies.hs
index b7323ae35..6c69b2166 100644
--- a/Command/NumCopies.hs
+++ b/Command/NumCopies.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -13,8 +13,8 @@ import Command
import Config.NumCopies
import Types.Messages
-def :: [Command]
-def = [command "numcopies" paramNumber seek
+cmd :: [Command]
+cmd = [command "numcopies" paramNumber seek
SectionSetup "configure desired number of copies"]
seek :: CommandSeek
@@ -22,16 +22,15 @@ seek = withWords start
start :: [String] -> CommandStart
start [] = startGet
-start [s] = do
- case readish s of
- Nothing -> error $ "Bad number: " ++ s
- Just n
- | n > 0 -> startSet n
- | n == 0 -> ifM (Annex.getState Annex.force)
- ( startSet n
- , error "Setting numcopies to 0 is very unsafe. You will lose data! If you really want to do that, specify --force."
- )
- | otherwise -> error "Number cannot be negative!"
+start [s] = case readish s of
+ Nothing -> error $ "Bad number: " ++ s
+ Just n
+ | n > 0 -> startSet n
+ | n == 0 -> ifM (Annex.getState Annex.force)
+ ( startSet n
+ , error "Setting numcopies to 0 is very unsafe. You will lose data! If you really want to do that, specify --force."
+ )
+ | otherwise -> error "Number cannot be negative!"
start _ = error "Specify a single number."
startGet :: CommandStart
@@ -39,9 +38,9 @@ startGet = next $ next $ do
Annex.setOutput QuietOutput
v <- getGlobalNumCopies
case v of
- Just n -> liftIO $ putStrLn $ show $ fromNumCopies n
+ Just n -> liftIO $ print $ fromNumCopies n
Nothing -> do
- liftIO $ putStrLn $ "global numcopies is not set"
+ liftIO $ putStrLn "global numcopies is not set"
old <- deprecatedNumCopies
case old of
Nothing -> liftIO $ putStrLn "(default is 1)"
diff --git a/Command/PreCommit.hs b/Command/PreCommit.hs
index fa34ad245..f4dcff269 100644
--- a/Command/PreCommit.hs
+++ b/Command/PreCommit.hs
@@ -1,10 +1,12 @@
{- git-annex command
-
- - Copyright 2010-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Command.PreCommit where
import Common.Annex
@@ -16,28 +18,39 @@ import Annex.Direct
import Annex.Hook
import Annex.View
import Annex.View.ViewedFile
+import Annex.LockFile
import Logs.View
import Logs.MetaData
import Types.View
import Types.MetaData
+import qualified Git.Index as Git
+import qualified Git.LsFiles as Git
import qualified Data.Set as S
-def :: [Command]
-def = [command "pre-commit" paramPaths seek SectionPlumbing
+cmd :: [Command]
+cmd = [command "pre-commit" paramPaths seek SectionPlumbing
"run by git pre-commit hook"]
seek :: CommandSeek
-seek ps = ifM isDirect
+seek ps = lockPreCommitHook $ ifM isDirect
( do
-- update direct mode mappings for committed files
withWords startDirect ps
runAnnexHook preCommitAnnexHook
, do
- -- fix symlinks to files being committed
- withFilesToBeCommitted (whenAnnexed Command.Fix.start) ps
- -- inject unlocked files into the annex
- withFilesUnlockedToBeCommitted startIndirect ps
+ ifM (liftIO Git.haveFalseIndex)
+ ( do
+ (fs, cleanup) <- inRepo $ Git.typeChangedStaged ps
+ whenM (anyM isUnlocked fs) $
+ error "Cannot make a partial commit with unlocked annexed files. You should `git annex add` the files you want to commit, and then run git commit."
+ void $ liftIO cleanup
+ , do
+ -- fix symlinks to files being committed
+ withFilesToBeCommitted (whenAnnexed Command.Fix.start) ps
+ -- inject unlocked files into the annex
+ withFilesUnlockedToBeCommitted startIndirect ps
+ )
runAnnexHook preCommitAnnexHook
-- committing changes to a view updates metadata
mv <- currentView
@@ -56,7 +69,7 @@ startIndirect f = next $ do
next $ return True
startDirect :: [String] -> CommandStart
-startDirect _ = next $ next $ preCommitDirect
+startDirect _ = next $ next preCommitDirect
addViewMetaData :: View -> ViewedFile -> Key -> CommandStart
addViewMetaData v f k = do
@@ -82,3 +95,7 @@ showMetaDataChange = showLongNote . unlines . concatMap showmeta . fromMetaData
showset v
| isSet v = "+"
| otherwise = "-"
+
+{- Takes exclusive lock; blocks until available. -}
+lockPreCommitHook :: Annex a -> Annex a
+lockPreCommitHook = withExclusiveLock gitAnnexPreCommitLock
diff --git a/Command/Proxy.hs b/Command/Proxy.hs
new file mode 100644
index 000000000..59a6bf959
--- /dev/null
+++ b/Command/Proxy.hs
@@ -0,0 +1,46 @@
+{- git-annex command
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Command.Proxy where
+
+import Common.Annex
+import Command
+import Config
+import Utility.Tmp
+import Utility.Env
+import Annex.Direct
+import qualified Git.Branch
+import qualified Git.Sha
+
+cmd :: [Command]
+cmd = [notBareRepo $
+ command "proxy" ("-- git command") seek
+ SectionPlumbing "safely bypass direct mode guard"]
+
+seek :: CommandSeek
+seek = withWords start
+
+start :: [String] -> CommandStart
+start [] = error "Did not specify command to run."
+start (c:ps) = liftIO . exitWith =<< ifM isDirect
+ ( do
+ g <- gitRepo
+ withTmpDirIn (gitAnnexTmpMiscDir g) "proxy" go
+ , liftIO $ safeSystem c (map Param ps)
+ )
+ where
+ go tmp = do
+ oldref <- fromMaybe Git.Sha.emptyTree
+ <$> inRepo Git.Branch.currentSha
+ exitcode <- liftIO $ proxy tmp
+ mergeDirectCleanup tmp oldref
+ return exitcode
+ proxy tmp = do
+ usetmp <- Just . addEntry "GIT_WORK_TREE" tmp <$> getEnvironment
+ unlessM (boolSystemEnv "git" [Param "checkout", Param "--", Param "."] usetmp) $
+ error "Failed to set up proxy work tree."
+ safeSystemEnv c (map Param ps) usetmp
diff --git a/Command/ReKey.hs b/Command/ReKey.hs
index 805300f9f..980b27f5a 100644
--- a/Command/ReKey.hs
+++ b/Command/ReKey.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -16,9 +16,10 @@ import qualified Command.Add
import Logs.Web
import Logs.Location
import Utility.CopyFile
+import qualified Remote
-def :: [Command]
-def = [notDirect $ command "rekey"
+cmd :: [Command]
+cmd = [notDirect $ command "rekey"
(paramOptional $ paramRepeating $ paramPair paramPath paramKey)
seek SectionPlumbing "change keys used for files"]
@@ -29,7 +30,7 @@ start :: (FilePath, String) -> CommandStart
start (file, keyname) = ifAnnexed file go stop
where
newkey = fromMaybe (error "bad key") $ file2key keyname
- go (oldkey, _)
+ go oldkey
| oldkey == newkey = stop
| otherwise = do
showStart "rekey" file
@@ -61,8 +62,9 @@ cleanup file oldkey newkey = do
-- If the old key had some associated urls, record them for
-- the new key as well.
urls <- getUrls oldkey
- unless (null urls) $
- mapM_ (setUrlPresent newkey) urls
+ forM_ urls $ \url -> do
+ r <- Remote.claimingUrl url
+ setUrlPresent (Remote.uuid r) newkey url
-- Update symlink to use the new key.
liftIO $ removeFile file
diff --git a/Command/RecvKey.hs b/Command/RecvKey.hs
index 1794596c5..8572596d2 100644
--- a/Command/RecvKey.hs
+++ b/Command/RecvKey.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -20,26 +20,23 @@ import qualified Types.Key
import qualified Types.Backend
import qualified Backend
-def :: [Command]
-def = [noCommit $ command "recvkey" paramKey seek
+cmd :: [Command]
+cmd = [noCommit $ command "recvkey" paramKey seek
SectionPlumbing "runs rsync in server mode to receive content"]
seek :: CommandSeek
seek = withKeys start
start :: Key -> CommandStart
-start key = ifM (inAnnex key)
- ( error "key is already present in annex"
- , fieldTransfer Download key $ \_p ->
- ifM (getViaTmp key go)
- ( do
- -- forcibly quit after receiving one key,
- -- and shutdown cleanly
- _ <- shutdown True
- return True
- , return False
- )
- )
+start key = fieldTransfer Download key $ \_p ->
+ ifM (getViaTmp key go)
+ ( do
+ -- forcibly quit after receiving one key,
+ -- and shutdown cleanly
+ _ <- shutdown True
+ return True
+ , return False
+ )
where
go tmp = do
opts <- filterRsyncSafeOptions . maybe [] words
@@ -65,8 +62,7 @@ start key = ifM (inAnnex key)
oksize <- case Types.Key.keySize key of
Nothing -> return True
Just size -> do
- size' <- fromIntegral . fileSize
- <$> liftIO (getFileStatus tmp)
+ size' <- liftIO $ getFileSize tmp
return $ size == size'
if oksize
then case Backend.maybeLookupBackendName (Types.Key.keyBackendName key) of
@@ -79,7 +75,7 @@ start key = ifM (inAnnex key)
warning "recvkey: received key with wrong size; discarding"
return False
where
- runfsck check = ifM (check key tmp)
+ runfsck check = ifM (check key tmp)
( return True
, do
warning "recvkey: received key from direct mode repository seems to have changed as it was transferred; discarding"
diff --git a/Command/Reinit.hs b/Command/Reinit.hs
new file mode 100644
index 000000000..b1264effa
--- /dev/null
+++ b/Command/Reinit.hs
@@ -0,0 +1,38 @@
+{- git-annex command
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Command.Reinit where
+
+import Common.Annex
+import Command
+import Annex.Init
+import Annex.UUID
+import Types.UUID
+import qualified Remote
+
+cmd :: [Command]
+cmd = [dontCheck repoExists $
+ command "reinit" (paramUUID ++ " or " ++ paramDesc) seek SectionUtility ""]
+
+seek :: CommandSeek
+seek = withWords start
+
+start :: [String] -> CommandStart
+start ws = do
+ showStart "reinit" s
+ next $ perform s
+ where
+ s = unwords ws
+
+perform :: String -> CommandPerform
+perform s = do
+ u <- if isUUID s
+ then return $ toUUID s
+ else Remote.nameToUUID s
+ storeUUID u
+ initialize'
+ next $ return True
diff --git a/Command/Reinject.hs b/Command/Reinject.hs
index 1609c6097..2c785feb6 100644
--- a/Command/Reinject.hs
+++ b/Command/Reinject.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -12,9 +12,10 @@ import Command
import Logs.Location
import Annex.Content
import qualified Command.Fsck
+import qualified Backend
-def :: [Command]
-def = [command "reinject" (paramPair "SRC" "DEST") seek
+cmd :: [Command]
+cmd = [command "reinject" (paramPair "SRC" "DEST") seek
SectionUtility "sets content of annexed file"]
seek :: CommandSeek
@@ -33,16 +34,20 @@ start (src:dest:[])
next $ whenAnnexed (perform src) dest
start _ = error "specify a src file and a dest file"
-perform :: FilePath -> FilePath -> (Key, Backend) -> CommandPerform
-perform src _dest (key, backend) =
+perform :: FilePath -> FilePath -> Key -> CommandPerform
+perform src dest key = do
{- Check the content before accepting it. -}
- ifM (Command.Fsck.checkKeySizeOr reject key src
- <&&> Command.Fsck.checkBackendOr reject backend key src)
- ( do
- unlessM move $ error "mv failed!"
- next $ cleanup key
- , error "not reinjecting"
- )
+ v <- Backend.getBackend dest key
+ case v of
+ Nothing -> stop
+ Just backend ->
+ ifM (Command.Fsck.checkKeySizeOr reject key src
+ <&&> Command.Fsck.checkBackendOr reject backend key src)
+ ( do
+ unlessM move $ error "mv failed!"
+ next $ cleanup key
+ , error "not reinjecting"
+ )
where
-- the file might be on a different filesystem,
-- so mv is used rather than simply calling
diff --git a/Command/RemoteDaemon.hs b/Command/RemoteDaemon.hs
new file mode 100644
index 000000000..2e3d62555
--- /dev/null
+++ b/Command/RemoteDaemon.hs
@@ -0,0 +1,24 @@
+{- git-annex command
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Command.RemoteDaemon where
+
+import Common.Annex
+import Command
+import RemoteDaemon.Core
+
+cmd :: [Command]
+cmd = [noCommit $ command "remotedaemon" paramNothing seek SectionPlumbing
+ "detects when remotes have changed, and fetches from them"]
+
+seek :: CommandSeek
+seek = withNothing start
+
+start :: CommandStart
+start = do
+ liftIO runForeground
+ stop
diff --git a/Command/Repair.hs b/Command/Repair.hs
index 56925d83d..d41a074c0 100644
--- a/Command/Repair.hs
+++ b/Command/Repair.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -16,8 +16,8 @@ import qualified Git.Ref
import Git.Types
import Annex.Version
-def :: [Command]
-def = [noCommit $ dontCheck repoExists $
+cmd :: [Command]
+cmd = [noCommit $ dontCheck repoExists $
command "repair" paramNothing seek SectionMaintenance "recover broken git repository"]
seek :: CommandSeek
@@ -68,7 +68,7 @@ repairAnnexBranch modifiedbranches
)
)
where
- okindex = Annex.Branch.withIndex $ inRepo $ Git.Repair.checkIndex
+ okindex = Annex.Branch.withIndex $ inRepo Git.Repair.checkIndex
commitindex = do
Annex.Branch.forceCommit "committing index after git repository repair"
liftIO $ putStrLn "Successfully recovered the git-annex branch using .git/annex/index"
diff --git a/Command/ResolveMerge.hs b/Command/ResolveMerge.hs
new file mode 100644
index 000000000..ce199e504
--- /dev/null
+++ b/Command/ResolveMerge.hs
@@ -0,0 +1,40 @@
+{- git-annex command
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Command.ResolveMerge where
+
+import Common.Annex
+import Command
+import qualified Git
+import Git.Sha
+import qualified Git.Branch
+import Annex.AutoMerge
+
+cmd :: [Command]
+cmd = [command "resolvemerge" paramNothing seek SectionPlumbing
+ "resolve merge conflicts"]
+
+seek :: CommandSeek
+seek = withNothing start
+
+start :: CommandStart
+start = do
+ showStart "resolvemerge" ""
+ us <- fromMaybe nobranch <$> inRepo Git.Branch.current
+ d <- fromRepo Git.localGitDir
+ let merge_head = d </> "MERGE_HEAD"
+ them <- fromMaybe (error nomergehead) . extractSha
+ <$> liftIO (readFile merge_head)
+ ifM (resolveMerge (Just us) them)
+ ( do
+ void $ commitResolvedMerge Git.Branch.ManualCommit
+ next $ next $ return True
+ , error "Merge conflict could not be automatically resolved."
+ )
+ where
+ nobranch = error "No branch is currently checked out."
+ nomergehead = error "No SHA found in .git/merge_head"
diff --git a/Command/RmUrl.hs b/Command/RmUrl.hs
index 3f304b76e..5287718c5 100644
--- a/Command/RmUrl.hs
+++ b/Command/RmUrl.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -10,9 +10,11 @@ module Command.RmUrl where
import Common.Annex
import Command
import Logs.Web
+import Annex.UUID
+import qualified Remote
-def :: [Command]
-def = [notBareRepo $
+cmd :: [Command]
+cmd = [notBareRepo $
command "rmurl" (paramPair paramFile paramUrl) seek
SectionCommon "record file is not available at url"]
@@ -20,11 +22,15 @@ seek :: CommandSeek
seek = withPairs start
start :: (FilePath, String) -> CommandStart
-start (file, url) = flip whenAnnexed file $ \_ (key, _) -> do
+start (file, url) = flip whenAnnexed file $ \_ key -> do
showStart "rmurl" file
next $ next $ cleanup url key
cleanup :: String -> Key -> CommandCleanup
cleanup url key = do
- setUrlMissing key url
+ r <- Remote.claimingUrl url
+ let url' = if Remote.uuid r == webUUID
+ then url
+ else setDownloader url OtherDownloader
+ setUrlMissing (Remote.uuid r) key url'
return True
diff --git a/Command/Schedule.hs b/Command/Schedule.hs
index a088dbef8..91ef2c138 100644
--- a/Command/Schedule.hs
+++ b/Command/Schedule.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -17,8 +17,8 @@ import Types.Messages
import qualified Data.Set as S
-def :: [Command]
-def = [command "schedule" (paramPair paramRemote (paramOptional paramExpression)) seek
+cmd :: [Command]
+cmd = [command "schedule" (paramPair paramRemote (paramOptional paramExpression)) seek
SectionSetup "get or set scheduled jobs"]
seek :: CommandSeek
@@ -27,7 +27,7 @@ seek = withWords start
start :: [String] -> CommandStart
start = parse
where
- parse (name:[]) = go name performGet
+ parse (name:[]) = go name performGet
parse (name:expr:[]) = go name $ \uuid -> do
showStart "schedile" name
performSet expr uuid
diff --git a/Command/Semitrust.hs b/Command/Semitrust.hs
index edba27346..49004d7f9 100644
--- a/Command/Semitrust.hs
+++ b/Command/Semitrust.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -11,8 +11,8 @@ import Command
import Types.TrustLevel
import Command.Trust (trustCommand)
-def :: [Command]
-def = [command "semitrust" (paramRepeating paramRemote) seek
+cmd :: [Command]
+cmd = [command "semitrust" (paramRepeating paramRemote) seek
SectionSetup "return repository to default trust level"]
seek :: CommandSeek
diff --git a/Command/SendKey.hs b/Command/SendKey.hs
index 2215b16b2..62b4edcba 100644
--- a/Command/SendKey.hs
+++ b/Command/SendKey.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010,2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2010,2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -12,12 +12,12 @@ import Command
import Annex.Content
import Annex
import Utility.Rsync
-import Logs.Transfer
+import Annex.Transfer
import qualified CmdLine.GitAnnexShell.Fields as Fields
import Utility.Metered
-def :: [Command]
-def = [noCommit $ command "sendkey" paramKey seek
+cmd :: [Command]
+cmd = [noCommit $ command "sendkey" paramKey seek
SectionPlumbing "runs rsync in server mode to send content"]
seek :: CommandSeek
@@ -44,6 +44,14 @@ fieldTransfer :: Direction -> Key -> (MeterUpdate -> Annex Bool) -> CommandStart
fieldTransfer direction key a = do
afile <- Fields.getField Fields.associatedFile
ok <- maybe (a $ const noop)
- (\u -> runTransfer (Transfer direction (toUUID u) key) afile noRetry a)
+ (\u -> runner (Transfer direction (toUUID u) key) afile noRetry a)
=<< Fields.getField Fields.remoteUUID
liftIO $ exitBool ok
+ where
+ {- Allow the key to be sent to the remote even if there seems to be
+ - another transfer of that key going on to that remote.
+ - That one may be stale, etc.
+ -}
+ runner
+ | direction == Upload = alwaysRunTransfer
+ | otherwise = runTransfer
diff --git a/Command/SetPresentKey.hs b/Command/SetPresentKey.hs
new file mode 100644
index 000000000..1c41dc2ae
--- /dev/null
+++ b/Command/SetPresentKey.hs
@@ -0,0 +1,35 @@
+{- git-annex command
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Command.SetPresentKey where
+
+import Common.Annex
+import Command
+import Logs.Location
+import Logs.Presence.Pure
+import Types.Key
+
+cmd :: [Command]
+cmd = [noCommit $ command "setpresentkey" (paramPair paramKey (paramPair paramUUID "[1|0]")) seek
+ SectionPlumbing "change records of where key is present"]
+
+seek :: CommandSeek
+seek = withWords start
+
+start :: [String] -> CommandStart
+start (ks:us:vs:[]) = do
+ showStart' "setpresentkey" k Nothing
+ next $ perform k (toUUID us) s
+ where
+ k = fromMaybe (error "bad key") (file2key ks)
+ s = fromMaybe (error "bad value") (parseStatus vs)
+start _ = error "Wrong number of parameters"
+
+perform :: Key -> UUID -> LogStatus -> CommandPerform
+perform k u s = next $ do
+ logChange k u s
+ return True
diff --git a/Command/Status.hs b/Command/Status.hs
index cd6c25983..26e96a925 100644
--- a/Command/Status.hs
+++ b/Command/Status.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -16,8 +16,8 @@ import qualified Git.LsFiles as LsFiles
import qualified Git.Ref
import qualified Git
-def :: [Command]
-def = [notBareRepo $ noCommit $ noMessages $ withOptions [jsonOption] $
+cmd :: [Command]
+cmd = [notBareRepo $ noCommit $ noMessages $ withOptions [jsonOption] $
command "status" paramPaths seek SectionCommon
"show the working tree status"]
@@ -28,9 +28,9 @@ start :: [FilePath] -> CommandStart
start [] = do
-- Like git status, when run without a directory, behave as if
-- given the path to the top of the repository.
- cwd <- liftIO getCurrentDirectory
top <- fromRepo Git.repoPath
- start' [relPathDirToFile cwd top]
+ d <- liftIO $ relPathCwdToFile top
+ start' [d]
start locs = start' locs
start' :: [FilePath] -> CommandStart
@@ -65,12 +65,12 @@ statusDirect f = checkstatus =<< liftIO (catchMaybeIO $ getFileStatus f)
where
checkstatus Nothing = return $ Just DeletedFile
checkstatus (Just s)
- -- Git thinks that present direct mode files modifed,
+ -- Git thinks that present direct mode files are modifed,
-- so have to check.
| not (isSymbolicLink s) = checkkey s =<< catKeyFile f
| otherwise = Just <$> checkNew f
- checkkey s (Just k) = ifM (sameFileStatus k s)
+ checkkey s (Just k) = ifM (sameFileStatus k f s)
( return Nothing
, return $ Just ModifiedFile
)
diff --git a/Command/Sync.hs b/Command/Sync.hs
index a4004736a..16932b87c 100644
--- a/Command/Sync.hs
+++ b/Command/Sync.hs
@@ -1,12 +1,23 @@
{- git-annex command
-
- Copyright 2011 Joachim Breitner <mail@joachim-breitner.de>
- - Copyright 2011-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
-module Command.Sync where
+module Command.Sync (
+ cmd,
+ prepMerge,
+ mergeLocal,
+ mergeRemote,
+ commitStaged,
+ commitMsg,
+ pushBranch,
+ updateBranch,
+ syncBranch,
+ updateSyncBranch,
+) where
import Common.Annex
import Command
@@ -19,9 +30,9 @@ import Annex.Hook
import qualified Git.Command
import qualified Git.LsFiles as LsFiles
import qualified Git.Branch
+import qualified Git.Types as Git
import qualified Git.Ref
import qualified Git
-import qualified Types.Remote
import qualified Remote.Git
import Config
import Annex.Wanted
@@ -31,21 +42,30 @@ import qualified Command.Move
import Logs.Location
import Annex.Drop
import Annex.UUID
+import Logs.UUID
import Annex.AutoMerge
+import Annex.Ssh
import Control.Concurrent.MVar
+import qualified Data.Map as M
-def :: [Command]
-def = [withOptions syncOptions $
+cmd :: [Command]
+cmd = [withOptions syncOptions $
command "sync" (paramOptional (paramRepeating paramRemote))
seek SectionCommon "synchronize local repository with remotes"]
syncOptions :: [Option]
-syncOptions = [ contentOption ]
+syncOptions =
+ [ contentOption
+ , messageOption
+ ]
contentOption :: Option
contentOption = flagOption [] "content" "also transfer file contents"
+messageOption :: Option
+messageOption = fieldOption ['m'] "message" "MSG" "specify commit message"
+
seek :: CommandSeek
seek rs = do
prepMerge
@@ -97,7 +117,7 @@ seek rs = do
- of the repo. This also means that sync always acts on all files in the
- repository, not just on a subdirectory. -}
prepMerge :: Annex ()
-prepMerge = liftIO . setCurrentDirectory =<< fromRepo Git.repoPath
+prepMerge = Annex.changeDirectory =<< fromRepo Git.repoPath
syncBranch :: Git.Ref -> Git.Ref
syncBranch = Git.Ref.under "refs/heads/synced" . fromDirectBranch
@@ -109,48 +129,57 @@ syncRemotes :: [String] -> Annex [Remote]
syncRemotes rs = ifM (Annex.getState Annex.fast) ( nub <$> pickfast , wanted )
where
pickfast = (++) <$> listed <*> (filterM good =<< fastest <$> available)
+
wanted
| null rs = filterM good =<< concat . Remote.byCost <$> available
| otherwise = listed
- listed = catMaybes <$> mapM (Remote.byName . Just) rs
- available = filter (remoteAnnexSync . Types.Remote.gitconfig)
+
+ listed = concat <$> mapM Remote.byNameOrGroup rs
+
+ available = filter (remoteAnnexSync . Remote.gitconfig)
. filter (not . Remote.isXMPPRemote)
<$> Remote.remoteList
+
good r
- | Remote.gitSyncableRemote r = Remote.Git.repoAvail $ Types.Remote.repo r
+ | Remote.gitSyncableRemote r = Remote.Git.repoAvail $ Remote.repo r
| otherwise = return True
+
fastest = fromMaybe [] . headMaybe . Remote.byCost
commit :: CommandStart
-commit = next $ next $ ifM isDirect
- ( do
- showStart "commit" ""
- void stageDirect
- void preCommitDirect
- commitStaged commitmessage
- , do
- showStart "commit" ""
- Annex.Branch.commit "update"
- -- Commit will fail when the tree is clean, so ignore failure.
- _ <- inRepo $ tryIO . Git.Command.runQuiet
- [ Param "commit"
- , Param "-a"
- , Param "-m"
- , Param commitmessage
- ]
- return True
- )
- where
- commitmessage = "git-annex automatic sync"
+commit = next $ next $ do
+ commitmessage <- maybe commitMsg return
+ =<< Annex.getField (optionName messageOption)
+ showStart "commit" ""
+ Annex.Branch.commit "update"
+ ifM isDirect
+ ( do
+ void stageDirect
+ void preCommitDirect
+ commitStaged Git.Branch.ManualCommit commitmessage
+ , do
+ inRepo $ Git.Branch.commitQuiet Git.Branch.ManualCommit
+ [ Param "-a"
+ , Param "-m"
+ , Param commitmessage
+ ]
+ return True
+ )
+
+commitMsg :: Annex String
+commitMsg = do
+ u <- getUUID
+ m <- uuidMap
+ return $ "git-annex in " ++ fromMaybe "unknown" (M.lookup u m)
-commitStaged :: String -> Annex Bool
-commitStaged commitmessage = go =<< inRepo Git.Branch.currentUnsafe
+commitStaged :: Git.Branch.CommitMode -> String -> Annex Bool
+commitStaged commitmode commitmessage = go =<< inRepo Git.Branch.currentUnsafe
where
go Nothing = return False
go (Just branch) = do
runAnnexHook preCommitAnnexHook
parent <- inRepo $ Git.Ref.sha branch
- void $ inRepo $ Git.Branch.commit False commitmessage branch
+ void $ inRepo $ Git.Branch.commit commitmode False commitmessage branch
(maybeToList parent)
return True
@@ -169,11 +198,16 @@ mergeLocal (Just branch) = go =<< needmerge
go False = stop
go True = do
showStart "merge" $ Git.Ref.describe syncbranch
- next $ next $ autoMergeFrom syncbranch (Just branch)
+ next $ next $ autoMergeFrom syncbranch (Just branch) Git.Branch.ManualCommit
pushLocal :: Maybe Git.Ref -> CommandStart
-pushLocal Nothing = stop
-pushLocal (Just branch) = do
+pushLocal b = do
+ updateSyncBranch b
+ stop
+
+updateSyncBranch :: Maybe Git.Ref -> Annex ()
+updateSyncBranch Nothing = noop
+updateSyncBranch (Just branch) = do
-- Update the sync branch to match the new state of the branch
inRepo $ updateBranch $ syncBranch branch
-- In direct mode, we're operating on some special direct mode
@@ -181,7 +215,6 @@ pushLocal (Just branch) = do
-- branch.
whenM isDirect $
inRepo $ updateBranch $ fromDirectBranch branch
- stop
updateBranch :: Git.Ref -> Git.Repo -> IO ()
updateBranch syncbranch g =
@@ -201,8 +234,9 @@ pullRemote remote branch = do
stopUnless fetch $
next $ mergeRemote remote branch
where
- fetch = inRepo $ Git.Command.runBool
- [Param "fetch", Param $ Remote.name remote]
+ fetch = inRepoWithSshOptionsTo (Remote.repo remote) (Remote.gitconfig remote) $
+ Git.Command.runBool
+ [Param "fetch", Param $ Remote.name remote]
{- The remote probably has both a master and a synced/master branch.
- Which to merge from? Well, the master has whatever latest changes
@@ -210,14 +244,17 @@ pullRemote remote branch = do
- while the synced/master may have changes that some
- other remote synced to this remote. So, merge them both. -}
mergeRemote :: Remote -> Maybe Git.Ref -> CommandCleanup
-mergeRemote remote b = case b of
- Nothing -> do
- branch <- inRepo Git.Branch.currentUnsafe
- and <$> mapM (merge Nothing) (branchlist branch)
- Just thisbranch ->
- and <$> (mapM (merge (Just thisbranch)) =<< tomerge (branchlist b))
+mergeRemote remote b = ifM isBareRepo
+ ( return True
+ , case b of
+ Nothing -> do
+ branch <- inRepo Git.Branch.currentUnsafe
+ and <$> mapM (merge Nothing) (branchlist branch)
+ Just thisbranch ->
+ and <$> (mapM (merge (Just thisbranch)) =<< tomerge (branchlist b))
+ )
where
- merge thisbranch = flip autoMergeFrom thisbranch . remoteBranch remote
+ merge thisbranch br = autoMergeFrom (remoteBranch remote br) thisbranch Git.Branch.ManualCommit
tomerge = filterM (changed remote)
branchlist Nothing = []
branchlist (Just branch) = [branch, syncBranch branch]
@@ -227,14 +264,15 @@ pushRemote _remote Nothing = stop
pushRemote remote (Just branch) = go =<< needpush
where
needpush
- | remoteAnnexReadOnly (Types.Remote.gitconfig remote) = return False
+ | remoteAnnexReadOnly (Remote.gitconfig remote) = return False
| otherwise = anyM (newer remote) [syncBranch branch, Annex.Branch.name]
go False = stop
go True = do
showStart "push" (Remote.name remote)
next $ next $ do
showOutput
- ok <- inRepo $ pushBranch remote branch
+ ok <- inRepoWithSshOptionsTo (Remote.repo remote) (Remote.gitconfig remote) $
+ pushBranch remote branch
unless ok $ do
warning $ unwords [ "Pushing to " ++ Remote.name remote ++ " failed." ]
showLongNote "(non-fast-forward problems can be solved by setting receive.denyNonFastforwards to false in the remote's git config)"
@@ -337,8 +375,8 @@ seekSyncContent rs = do
(\v -> void (liftIO (tryPutMVar mvar ())) >> syncFile rs f v)
noop
-syncFile :: [Remote] -> FilePath -> (Key, Backend) -> Annex ()
-syncFile rs f (k, _) = do
+syncFile :: [Remote] -> FilePath -> Key -> Annex ()
+syncFile rs f k = do
locs <- loggedLocations k
let (have, lack) = partition (\r -> Remote.uuid r `elem` locs) rs
@@ -353,7 +391,7 @@ syncFile rs f (k, _) = do
handleDropsFrom locs' rs "unwanted" True k (Just f)
Nothing callCommandAction
where
- wantget have = allM id
+ wantget have = allM id
[ pure (not $ null have)
, not <$> inAnnex k
, wantGet True (Just k) (Just f)
@@ -367,7 +405,7 @@ syncFile rs f (k, _) = do
next $ next $ getViaTmp k $ \dest -> getKeyFile' k (Just f) dest have
wantput r
- | Remote.readonly r || remoteAnnexReadOnly (Types.Remote.gitconfig r) = return False
+ | Remote.readonly r || remoteAnnexReadOnly (Remote.gitconfig r) = return False
| otherwise = wantSend True (Just k) (Just f) (Remote.uuid r)
handleput lack = ifM (inAnnex k)
( map put <$> filterM wantput lack
diff --git a/Command/Test.hs b/Command/Test.hs
index ee7220142..3c4251460 100644
--- a/Command/Test.hs
+++ b/Command/Test.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -11,9 +11,9 @@ import Common
import Command
import Messages
-def :: [Command]
-def = [ noRepo startIO $ dontCheck repoExists $
- command "test" paramNothing seek SectionPlumbing
+cmd :: [Command]
+cmd = [ noRepo startIO $ dontCheck repoExists $
+ command "test" paramNothing seek SectionTesting
"run built-in test suite"]
seek :: CommandSeek
diff --git a/Command/TestRemote.hs b/Command/TestRemote.hs
new file mode 100644
index 000000000..4a65aa4ec
--- /dev/null
+++ b/Command/TestRemote.hs
@@ -0,0 +1,228 @@
+{- git-annex command
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Command.TestRemote where
+
+import Common
+import Command
+import qualified Annex
+import qualified Remote
+import qualified Types.Remote as Remote
+import Types
+import Types.Key (key2file, keyBackendName, keySize)
+import Types.Backend (getKey, fsckKey)
+import Types.KeySource
+import Annex.Content
+import Backend
+import qualified Backend.Hash
+import Utility.Tmp
+import Utility.Metered
+import Utility.DataUnits
+import Utility.CopyFile
+import Messages
+import Types.Messages
+import Remote.Helper.Chunked
+import Locations
+
+import Test.Tasty
+import Test.Tasty.Runners
+import Test.Tasty.HUnit
+import "crypto-api" Crypto.Random
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Lazy as L
+import qualified Data.Map as M
+
+cmd :: [Command]
+cmd = [ withOptions [sizeOption] $
+ command "testremote" paramRemote seek SectionTesting
+ "test transfers to/from a remote"]
+
+sizeOption :: Option
+sizeOption = fieldOption [] "size" paramSize "base key size (default 1MiB)"
+
+seek :: CommandSeek
+seek ps = do
+ basesz <- fromInteger . fromMaybe (1024 * 1024)
+ <$> getOptionField sizeOption (pure . getsize)
+ withWords (start basesz) ps
+ where
+ getsize v = v >>= readSize dataUnits
+
+start :: Int -> [String] -> CommandStart
+start basesz ws = do
+ let name = unwords ws
+ showStart "testremote" name
+ r <- either error id <$> Remote.byName' name
+ showSideAction "generating test keys"
+ fast <- Annex.getState Annex.fast
+ ks <- mapM randKey (keySizes basesz fast)
+ rs <- catMaybes <$> mapM (adjustChunkSize r) (chunkSizes basesz fast)
+ rs' <- concat <$> mapM encryptionVariants rs
+ unavailrs <- catMaybes <$> mapM Remote.mkUnavailable [r]
+ next $ perform rs' unavailrs ks
+
+perform :: [Remote] -> [Remote] -> [Key] -> CommandPerform
+perform rs unavailrs ks = do
+ st <- Annex.getState id
+ let tests = testGroup "Remote Tests" $ concat
+ [ [ testGroup "unavailable remote" (testUnavailable st r (Prelude.head ks)) | r <- unavailrs ]
+ , [ testGroup (desc r k) (test st r k) | k <- ks, r <- rs ]
+ ]
+ ok <- case tryIngredients [consoleTestReporter] mempty tests of
+ Nothing -> error "No tests found!?"
+ Just act -> liftIO act
+ next $ cleanup rs ks ok
+ where
+ desc r' k = intercalate "; " $ map unwords
+ [ [ "key size", show (keySize k) ]
+ , [ show (getChunkConfig (Remote.config r')) ]
+ , ["encryption", fromMaybe "none" (M.lookup "encryption" (Remote.config r'))]
+ ]
+
+adjustChunkSize :: Remote -> Int -> Annex (Maybe Remote)
+adjustChunkSize r chunksize = adjustRemoteConfig r
+ (M.insert "chunk" (show chunksize))
+
+-- Variants of a remote with no encryption, and with simple shared
+-- encryption. Gpg key based encryption is not tested.
+encryptionVariants :: Remote -> Annex [Remote]
+encryptionVariants r = do
+ noenc <- adjustRemoteConfig r (M.insert "encryption" "none")
+ sharedenc <- adjustRemoteConfig r $
+ M.insert "encryption" "shared" .
+ M.insert "highRandomQuality" "false"
+ return $ catMaybes [noenc, sharedenc]
+
+-- Regenerate a remote with a modified config.
+adjustRemoteConfig :: Remote -> (Remote.RemoteConfig -> Remote.RemoteConfig) -> Annex (Maybe Remote)
+adjustRemoteConfig r adjustconfig = Remote.generate (Remote.remotetype r)
+ (Remote.repo r)
+ (Remote.uuid r)
+ (adjustconfig (Remote.config r))
+ (Remote.gitconfig r)
+
+test :: Annex.AnnexState -> Remote -> Key -> [TestTree]
+test st r k =
+ [ check "removeKey when not present" remove
+ , present False
+ , check "storeKey" store
+ , present True
+ , check "storeKey when already present" store
+ , present True
+ , check "retrieveKeyFile" $ do
+ lockContent k removeAnnex
+ get
+ , check "fsck downloaded object" fsck
+ , check "retrieveKeyFile resume from 33%" $ do
+ loc <- Annex.calcRepo (gitAnnexLocation k)
+ tmp <- prepTmp k
+ partial <- liftIO $ bracket (openBinaryFile loc ReadMode) hClose $ \h -> do
+ sz <- hFileSize h
+ L.hGet h $ fromInteger $ sz `div` 3
+ liftIO $ L.writeFile tmp partial
+ lockContent k removeAnnex
+ get
+ , check "fsck downloaded object" fsck
+ , check "retrieveKeyFile resume from 0" $ do
+ tmp <- prepTmp k
+ liftIO $ writeFile tmp ""
+ lockContent k removeAnnex
+ get
+ , check "fsck downloaded object" fsck
+ , check "retrieveKeyFile resume from end" $ do
+ loc <- Annex.calcRepo (gitAnnexLocation k)
+ tmp <- prepTmp k
+ void $ liftIO $ copyFileExternal CopyAllMetaData loc tmp
+ lockContent k removeAnnex
+ get
+ , check "fsck downloaded object" fsck
+ , check "removeKey when present" remove
+ , present False
+ ]
+ where
+ check desc a = testCase desc $
+ Annex.eval st (Annex.setOutput QuietOutput >> a) @? "failed"
+ present b = check ("present " ++ show b) $
+ (== Right b) <$> Remote.hasKey r k
+ fsck = case maybeLookupBackendName (keyBackendName k) of
+ Nothing -> return True
+ Just b -> case fsckKey b of
+ Nothing -> return True
+ Just fscker -> fscker k (key2file k)
+ get = getViaTmp k $ \dest ->
+ Remote.retrieveKeyFile r k Nothing dest nullMeterUpdate
+ store = Remote.storeKey r k Nothing nullMeterUpdate
+ remove = Remote.removeKey r k
+
+testUnavailable :: Annex.AnnexState -> Remote -> Key -> [TestTree]
+testUnavailable st r k =
+ [ check (== Right False) "removeKey" $
+ Remote.removeKey r k
+ , check (== Right False) "storeKey" $
+ Remote.storeKey r k Nothing nullMeterUpdate
+ , check (`notElem` [Right True, Right False]) "checkPresent" $
+ Remote.checkPresent r k
+ , check (== Right False) "retrieveKeyFile" $
+ getViaTmp k $ \dest ->
+ Remote.retrieveKeyFile r k Nothing dest nullMeterUpdate
+ , check (== Right False) "retrieveKeyFileCheap" $
+ getViaTmp k $ \dest ->
+ Remote.retrieveKeyFileCheap r k dest
+ ]
+ where
+ check checkval desc a = testCase desc $ do
+ v <- Annex.eval st $ do
+ Annex.setOutput QuietOutput
+ either (Left . show) Right <$> tryNonAsync a
+ checkval v @? ("(got: " ++ show v ++ ")")
+
+cleanup :: [Remote] -> [Key] -> Bool -> CommandCleanup
+cleanup rs ks ok = do
+ forM_ rs $ \r -> forM_ ks (Remote.removeKey r)
+ forM_ ks $ \k -> lockContent k removeAnnex
+ return ok
+
+chunkSizes :: Int -> Bool -> [Int]
+chunkSizes base False =
+ [ 0 -- no chunking
+ , base `div` 100
+ , base `div` 1000
+ , base
+ ]
+chunkSizes _ True =
+ [ 0
+ ]
+
+keySizes :: Int -> Bool -> [Int]
+keySizes base fast = filter want
+ [ 0 -- empty key is a special case when chunking
+ , base
+ , base + 1
+ , base - 1
+ , base * 2
+ ]
+ where
+ want sz
+ | fast = sz <= base && sz > 0
+ | otherwise = sz > 0
+
+randKey :: Int -> Annex Key
+randKey sz = withTmpFile "randkey" $ \f h -> do
+ gen <- liftIO (newGenIO :: IO SystemRandom)
+ case genBytes sz gen of
+ Left e -> error $ "failed to generate random key: " ++ show e
+ Right (rand, _) -> liftIO $ B.hPut h rand
+ liftIO $ hClose h
+ let ks = KeySource
+ { keyFilename = f
+ , contentLocation = f
+ , inodeCache = Nothing
+ }
+ k <- fromMaybe (error "failed to generate random key")
+ <$> getKey Backend.Hash.testKeyBackend ks
+ moveAnnex k f
+ return k
diff --git a/Command/TransferInfo.hs b/Command/TransferInfo.hs
index 8ab577a81..f90e2ad73 100644
--- a/Command/TransferInfo.hs
+++ b/Command/TransferInfo.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -15,8 +15,8 @@ import Types.Key
import qualified CmdLine.GitAnnexShell.Fields as Fields
import Utility.Metered
-def :: [Command]
-def = [noCommit $ command "transferinfo" paramKey seek SectionPlumbing
+cmd :: [Command]
+cmd = [noCommit $ command "transferinfo" paramKey seek SectionPlumbing
"updates sender on number of bytes of content received"]
seek :: CommandSeek
diff --git a/Command/TransferKey.hs b/Command/TransferKey.hs
index b6b237467..55d6b95a1 100644
--- a/Command/TransferKey.hs
+++ b/Command/TransferKey.hs
@@ -1,6 +1,6 @@
{- git-annex plumbing command (for use by old assistant, and users)
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -11,12 +11,12 @@ import Common.Annex
import Command
import Annex.Content
import Logs.Location
-import Logs.Transfer
+import Annex.Transfer
import qualified Remote
import Types.Remote
-def :: [Command]
-def = [withOptions transferKeyOptions $
+cmd :: [Command]
+cmd = [withOptions transferKeyOptions $
noCommit $ command "transferkey" paramKey seek SectionPlumbing
"transfers a key from or to a remote"]
@@ -41,7 +41,7 @@ start to from file key =
_ -> error "specify either --from or --to"
toPerform :: Remote -> Key -> AssociatedFile -> CommandPerform
-toPerform remote key file = go $
+toPerform remote key file = go Upload file $
upload (uuid remote) key file forwardRetry $ \p -> do
ok <- Remote.storeKey remote key file p
when ok $
@@ -49,9 +49,9 @@ toPerform remote key file = go $
return ok
fromPerform :: Remote -> Key -> AssociatedFile -> CommandPerform
-fromPerform remote key file = go $
+fromPerform remote key file = go Upload file $
download (uuid remote) key file forwardRetry $ \p ->
getViaTmp key $ \t -> Remote.retrieveKeyFile remote key file t p
-go :: Annex Bool -> CommandPerform
-go a = a >>= liftIO . exitBool
+go :: Direction -> AssociatedFile -> (NotifyWitness -> Annex Bool) -> CommandPerform
+go direction file a = notifyTransfer direction file a >>= liftIO . exitBool
diff --git a/Command/TransferKeys.hs b/Command/TransferKeys.hs
index b42628609..990582196 100644
--- a/Command/TransferKeys.hs
+++ b/Command/TransferKeys.hs
@@ -1,6 +1,6 @@
{- git-annex command, used internally by assistant
-
- - Copyright 2012, 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012, 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -13,50 +13,37 @@ import Common.Annex
import Command
import Annex.Content
import Logs.Location
-import Logs.Transfer
+import Annex.Transfer
import qualified Remote
import Types.Key
-
-import GHC.IO.Handle
+import Utility.SimpleProtocol (ioHandles)
+import Git.Types (RemoteName)
data TransferRequest = TransferRequest Direction Remote Key AssociatedFile
-def :: [Command]
-def = [command "transferkeys" paramNothing seek
+cmd :: [Command]
+cmd = [command "transferkeys" paramNothing seek
SectionPlumbing "transfers keys"]
seek :: CommandSeek
seek = withNothing start
start :: CommandStart
-start = withHandles $ \(readh, writeh) -> do
+start = do
+ (readh, writeh) <- liftIO ioHandles
runRequests readh writeh runner
stop
where
runner (TransferRequest direction remote key file)
- | direction == Upload =
+ | direction == Upload = notifyTransfer direction file $
upload (Remote.uuid remote) key file forwardRetry $ \p -> do
ok <- Remote.storeKey remote key file p
when ok $
Remote.logStatus remote key InfoPresent
return ok
- | otherwise = download (Remote.uuid remote) key file forwardRetry $ \p ->
- getViaTmp key $ \t -> Remote.retrieveKeyFile remote key file t p
-
-{- stdin and stdout are connected with the caller, to be used for
- - communication with it. But doing a transfer might involve something
- - that tries to read from stdin, or write to stdout. To avoid that, close
- - stdin, and duplicate stderr to stdout. Return two new handles
- - that are duplicates of the original (stdin, stdout). -}
-withHandles :: ((Handle, Handle) -> Annex a) -> Annex a
-withHandles a = do
- readh <- liftIO $ hDuplicate stdin
- writeh <- liftIO $ hDuplicate stdout
- liftIO $ do
- nullh <- openFile devNull ReadMode
- nullh `hDuplicateTo` stdin
- stderr `hDuplicateTo` stdout
- a (readh, writeh)
+ | otherwise = notifyTransfer direction file $
+ download (Remote.uuid remote) key file forwardRetry $ \p ->
+ getViaTmp key $ \t -> Remote.retrieveKeyFile remote key file t p
runRequests
:: Handle
@@ -70,13 +57,13 @@ runRequests readh writeh a = do
fileEncoding writeh
go =<< readrequests
where
- go (d:u:k:f:rest) = do
- case (deserialize d, deserialize u, deserialize k, deserialize f) of
- (Just direction, Just uuid, Just key, Just file) -> do
- mremote <- Remote.remoteFromUUID uuid
+ go (d:rn:k:f:rest) = do
+ case (deserialize d, deserialize rn, deserialize k, deserialize f) of
+ (Just direction, Just remotename, Just key, Just file) -> do
+ mremote <- Remote.byName' remotename
case mremote of
- Nothing -> sendresult False
- Just remote -> sendresult =<< a
+ Left _ -> sendresult False
+ Right remote -> sendresult =<< a
(TransferRequest direction remote key file)
_ -> sendresult False
go rest
@@ -89,13 +76,15 @@ runRequests readh writeh a = do
hPutStrLn writeh $ serialize b
hFlush writeh
-sendRequest :: Transfer -> AssociatedFile -> Handle -> IO ()
-sendRequest t f h = do
+sendRequest :: Transfer -> TransferInfo -> Handle -> IO ()
+sendRequest t info h = do
hPutStr h $ intercalate fieldSep
[ serialize (transferDirection t)
- , serialize (transferUUID t)
+ , maybe (serialize (fromUUID (transferUUID t)))
+ (serialize . Remote.name)
+ (transferRemote info)
, serialize (transferKey t)
- , serialize f
+ , serialize (associatedFile info)
, "" -- adds a trailing null
]
hFlush h
@@ -130,9 +119,9 @@ instance TCSerialized AssociatedFile where
deserialize "" = Just Nothing
deserialize f = Just $ Just f
-instance TCSerialized UUID where
- serialize = fromUUID
- deserialize = Just . toUUID
+instance TCSerialized RemoteName where
+ serialize n = n
+ deserialize n = Just n
instance TCSerialized Key where
serialize = key2file
diff --git a/Command/Trust.hs b/Command/Trust.hs
index c0f013699..9d380990e 100644
--- a/Command/Trust.hs
+++ b/Command/Trust.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010, 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2010, 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -16,19 +16,19 @@ import Logs.Group
import qualified Data.Set as S
-def :: [Command]
-def = [command "trust" (paramRepeating paramRemote) seek
+cmd :: [Command]
+cmd = [command "trust" (paramRepeating paramRemote) seek
SectionSetup "trust a repository"]
seek :: CommandSeek
seek = trustCommand "trust" Trusted
trustCommand :: String -> TrustLevel -> CommandSeek
-trustCommand cmd level = withWords start
+trustCommand c level = withWords start
where
start ws = do
let name = unwords ws
- showStart cmd name
+ showStart c name
u <- Remote.nameToUUID name
next $ perform u
perform uuid = do
diff --git a/Command/Unannex.hs b/Command/Unannex.hs
index 1f2978430..3fe4cf69c 100644
--- a/Command/Unannex.hs
+++ b/Command/Unannex.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -16,18 +16,51 @@ import qualified Annex
import Annex.Content
import Annex.Content.Direct
import qualified Git.Command
-import qualified Git.LsFiles as LsFiles
+import qualified Git.Branch
+import qualified Git.Ref
+import qualified Git.DiffTree as DiffTree
import Utility.CopyFile
+import Command.PreCommit (lockPreCommitHook)
-def :: [Command]
-def = [command "unannex" paramPaths seek SectionUtility
+cmd :: [Command]
+cmd = [withOptions annexedMatchingOptions $
+ command "unannex" paramPaths seek SectionUtility
"undo accidential add command"]
seek :: CommandSeek
-seek = withFilesInGit $ whenAnnexed start
+seek = wrapUnannex . (withFilesInGit $ whenAnnexed start)
-start :: FilePath -> (Key, Backend) -> CommandStart
-start file (key, _) = stopUnless (inAnnex key) $ do
+wrapUnannex :: Annex a -> Annex a
+wrapUnannex a = ifM isDirect
+ ( a
+ {- Run with the pre-commit hook disabled, to avoid confusing
+ - behavior if an unannexed file is added back to git as
+ - a normal, non-annexed file and then committed.
+ - Otherwise, the pre-commit hook would think that the file
+ - has been unlocked and needs to be re-annexed.
+ -
+ - At the end, make a commit removing the unannexed files.
+ -}
+ , ifM cleanindex
+ ( lockPreCommitHook $ commit `after` a
+ , error "Cannot proceed with uncommitted changes staged in the index. Recommend you: git commit"
+ )
+ )
+ where
+ commit = inRepo $ Git.Branch.commitCommand Git.Branch.ManualCommit
+ [ Param "-q"
+ , Param "--allow-empty"
+ , Param "--no-verify"
+ , Param "-m", Param "content removed from git annex"
+ ]
+ cleanindex = do
+ (diff, cleanup) <- inRepo $ DiffTree.diffIndex Git.Ref.headRef
+ if null diff
+ then void (liftIO cleanup) >> return True
+ else void (liftIO cleanup) >> return False
+
+start :: FilePath -> Key -> CommandStart
+start file key = stopUnless (inAnnex key) $ do
showStart "unannex" file
next $ ifM isDirect
( performDirect file key
@@ -36,38 +69,28 @@ start file (key, _) = stopUnless (inAnnex key) $ do
performIndirect :: FilePath -> Key -> CommandPerform
performIndirect file key = do
liftIO $ removeFile file
-
- -- git rm deletes empty directory without --cached
inRepo $ Git.Command.run [Params "rm --cached --force --quiet --", File file]
-
- -- If the file was already committed, it is now staged for removal.
- -- Commit that removal now, to avoid later confusing the
- -- pre-commit hook, if this file is later added back to
- -- git as a normal non-annexed file, to thinking that the
- -- file has been unlocked and needs to be re-annexed.
- (s, reap) <- inRepo $ LsFiles.staged [file]
- unless (null s) $
- inRepo $ Git.Command.run
- [ Param "commit"
- , Param "-q"
- , Param "--no-verify"
- , Param "-m", Param "content removed from git annex"
- , Param "--", File file
- ]
- void $ liftIO reap
-
next $ cleanupIndirect file key
cleanupIndirect :: FilePath -> Key -> CommandCleanup
cleanupIndirect file key = do
src <- calcRepo $ gitAnnexLocation key
ifM (Annex.getState Annex.fast)
- ( hardlinkfrom src
+ ( do
+ -- Only make a hard link if the annexed file does not
+ -- already have other hard links pointing at it.
+ -- This avoids unannexing (and uninit) ending up
+ -- hard linking files together, which would be
+ -- surprising.
+ s <- liftIO $ getFileStatus src
+ if linkCount s > 1
+ then copyfrom src
+ else hardlinkfrom src
, copyfrom src
)
where
copyfrom src =
- thawContent file `after` liftIO (copyFileExternal src file)
+ thawContent file `after` liftIO (copyFileExternal CopyAllMetaData src file)
hardlinkfrom src =
#ifndef mingw32_HOST_OS
-- creating a hard link could fall; fall back to copying
diff --git a/Command/Undo.hs b/Command/Undo.hs
new file mode 100644
index 000000000..8e6b1c44f
--- /dev/null
+++ b/Command/Undo.hs
@@ -0,0 +1,84 @@
+{- git-annex command
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Command.Undo where
+
+import Common.Annex
+import Command
+import Config
+import Annex.Direct
+import Annex.CatFile
+import Git.DiffTree
+import Git.FilePath
+import Git.UpdateIndex
+import Git.Sha
+import qualified Git.LsFiles as LsFiles
+import qualified Git.Command as Git
+import qualified Git.Branch
+import qualified Command.Sync
+
+cmd :: [Command]
+cmd = [notBareRepo $
+ command "undo" paramPaths seek
+ SectionCommon "undo last change to a file or directory"]
+
+seek :: CommandSeek
+seek ps = do
+ -- Safety first; avoid any undo that would touch files that are not
+ -- in the index.
+ (fs, cleanup) <- inRepo $ LsFiles.notInRepo False ps
+ unless (null fs) $
+ error $ "Cannot undo changes to files that are not checked into git: " ++ unwords fs
+ void $ liftIO $ cleanup
+
+ -- Committing staged changes before undo allows later
+ -- undoing the undo. It would be nicer to only commit staged
+ -- changes to the specified files, rather than all staged changes,
+ -- but that is difficult to do; a partial git-commit can't be done
+ -- in direct mode.
+ void $ Command.Sync.commitStaged Git.Branch.ManualCommit
+ "commit before undo"
+
+ withStrings start ps
+
+start :: FilePath -> CommandStart
+start p = do
+ showStart "undo" p
+ next $ perform p
+
+perform :: FilePath -> CommandPerform
+perform p = do
+ g <- gitRepo
+
+ -- Get the reversed diff that needs to be applied to undo.
+ (diff, cleanup) <- inRepo $
+ diffLog [Param "-R", Param "--", Param p]
+ top <- inRepo $ toTopFilePath p
+ let diff' = filter (`isDiffOf` top) diff
+ liftIO $ streamUpdateIndex g (map stageDiffTreeItem diff')
+
+ -- Take two passes through the diff, first doing any removals,
+ -- and then any adds. This order is necessary to handle eg, removing
+ -- a directory and replacing it with a file.
+ let (removals, adds) = partition (\di -> dstsha di == nullSha) diff'
+ let mkrel di = liftIO $ relPathCwdToFile $ fromTopFilePath (file di) g
+
+ forM_ removals $ \di -> do
+ f <- mkrel di
+ whenM isDirect $
+ maybe noop (`removeDirect` f)
+ =<< catKey (srcsha di) (srcmode di)
+ liftIO $ nukeFile f
+
+ forM_ adds $ \di -> do
+ f <- mkrel di
+ inRepo $ Git.run [Param "checkout", Param "--", File f]
+ whenM isDirect $
+ maybe noop (`toDirect` f)
+ =<< catKey (dstsha di) (dstmode di)
+
+ next $ liftIO cleanup
diff --git a/Command/Ungroup.hs b/Command/Ungroup.hs
index a88e3f7c8..dd6e8c952 100644
--- a/Command/Ungroup.hs
+++ b/Command/Ungroup.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -15,8 +15,8 @@ import Types.Group
import qualified Data.Set as S
-def :: [Command]
-def = [command "ungroup" (paramPair paramRemote paramDesc) seek
+cmd :: [Command]
+cmd = [command "ungroup" (paramPair paramRemote paramDesc) seek
SectionSetup "remove a repository from a group"]
seek :: CommandSeek
diff --git a/Command/Uninit.hs b/Command/Uninit.hs
index 2a9e3e687..28c169919 100644
--- a/Command/Uninit.hs
+++ b/Command/Uninit.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -8,6 +8,7 @@
module Command.Uninit where
import Common.Annex
+import qualified Annex
import Command
import qualified Git
import qualified Git.Command
@@ -15,9 +16,13 @@ import qualified Command.Unannex
import qualified Annex.Branch
import Annex.Content
import Annex.Init
+import Utility.FileMode
-def :: [Command]
-def = [addCheck check $ command "uninit" paramPaths seek
+import System.IO.HVFS
+import System.IO.HVFS.Utils
+
+cmd :: [Command]
+cmd = [addCheck check $ command "uninit" paramPaths seek
SectionUtility "de-initialize git-annex and clean out repository"]
check :: Annex ()
@@ -26,8 +31,8 @@ check = do
when (b == Annex.Branch.name) $ error $
"cannot uninit when the " ++ Git.fromRef b ++ " branch is checked out"
top <- fromRepo Git.repoPath
- cwd <- liftIO getCurrentDirectory
- whenM ((/=) <$> liftIO (absPath top) <*> liftIO (absPath cwd)) $
+ currdir <- liftIO getCurrentDirectory
+ whenM ((/=) <$> liftIO (absPath top) <*> liftIO (absPath currdir)) $
error "can only run uninit from the top of the git repository"
where
current_branch = Git.Ref . Prelude.head . lines <$> revhead
@@ -36,13 +41,14 @@ check = do
seek :: CommandSeek
seek ps = do
- withFilesNotInGit (whenAnnexed startCheckIncomplete) ps
+ withFilesNotInGit False (whenAnnexed startCheckIncomplete) ps
+ Annex.changeState $ \s -> s { Annex.fast = True }
withFilesInGit (whenAnnexed Command.Unannex.start) ps
finish
{- git annex symlinks that are not checked into git could be left by an
- interrupted add. -}
-startCheckIncomplete :: FilePath -> (Key, Backend) -> CommandStart
+startCheckIncomplete :: FilePath -> Key -> CommandStart
startCheckIncomplete file _ = error $ unlines
[ file ++ " points to annexed content, but is not checked into git."
, "Perhaps this was left behind by an interrupted git annex add?"
@@ -54,6 +60,7 @@ finish = do
annexdir <- fromRepo gitAnnexDir
annexobjectdir <- fromRepo gitAnnexObjectDir
leftovers <- removeUnannexed =<< getKeysPresent InAnnex
+ liftIO $ prepareRemoveAnnexDir annexdir
if null leftovers
then liftIO $ removeDirectoryRecursive annexdir
else error $ unlines
@@ -80,6 +87,12 @@ finish = do
[Param "branch", Param "-D", Param $ Git.fromRef Annex.Branch.name]
liftIO exitSuccess
+{- Turn on write bits in all remaining files in the annex directory, in
+ - preparation for removal. -}
+prepareRemoveAnnexDir :: FilePath -> IO ()
+prepareRemoveAnnexDir annexdir =
+ recurseDir SystemFS annexdir >>= mapM_ (void . tryIO . allowWrite)
+
{- Keys that were moved out of the annex have a hard link still in the
- annex, with > 1 link count, and those can be removed.
-
@@ -87,10 +100,10 @@ finish = do
removeUnannexed :: [Key] -> Annex [Key]
removeUnannexed = go []
where
- go c [] = return c
+ go c [] = return c
go c (k:ks) = ifM (inAnnexCheck k $ liftIO . enoughlinks)
( do
- removeAnnex k
+ lockContent k removeAnnex
go c ks
, go (k:c) ks
)
diff --git a/Command/Unlock.hs b/Command/Unlock.hs
index 4cfe39307..208381930 100644
--- a/Command/Unlock.hs
+++ b/Command/Unlock.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -10,41 +10,57 @@ module Command.Unlock where
import Common.Annex
import Command
import Annex.Content
+import Annex.CatFile
import Utility.CopyFile
-def :: [Command]
-def =
+cmd :: [Command]
+cmd =
[ c "unlock" "unlock files for modification"
, c "edit" "same as unlock"
]
where
- c n = notDirect . command n paramPaths seek SectionCommon
+ c n = notDirect . withOptions annexedMatchingOptions
+ . command n paramPaths seek SectionCommon
seek :: CommandSeek
seek = withFilesInGit $ whenAnnexed start
{- The unlock subcommand replaces the symlink with a copy of the file's
- content. -}
-start :: FilePath -> (Key, Backend) -> CommandStart
-start file (key, _) = do
+start :: FilePath -> Key -> CommandStart
+start file key = do
showStart "unlock" file
- next $ perform file key
+ ifM (inAnnex key)
+ ( ifM (isJust <$> catKeyFileHEAD file)
+ ( next $ perform file key
+ , do
+ warning "this has not yet been committed to git; cannot unlock it"
+ next $ next $ return False
+ )
+ , do
+ warning "content not present; cannot unlock"
+ next $ next $ return False
+ )
perform :: FilePath -> Key -> CommandPerform
-perform dest key = do
- unlessM (inAnnex key) $ error "content not present"
- unlessM (checkDiskSpace Nothing key 0) $ error "cannot unlock"
-
- src <- calcRepo $ gitAnnexLocation key
- tmpdest <- fromRepo $ gitAnnexTmpObjectLocation key
- liftIO $ createDirectoryIfMissing True (parentDir tmpdest)
- showAction "copying"
- ifM (liftIO $ copyFileExternal src tmpdest)
- ( do
- liftIO $ do
- removeFile dest
- moveFile tmpdest dest
- thawContent dest
- next $ return True
- , error "copy failed!"
- )
+perform dest key = ifM (checkDiskSpace Nothing key 0)
+ ( do
+ src <- calcRepo $ gitAnnexLocation key
+ tmpdest <- fromRepo $ gitAnnexTmpObjectLocation key
+ liftIO $ createDirectoryIfMissing True (parentDir tmpdest)
+ showAction "copying"
+ ifM (liftIO $ copyFileExternal CopyAllMetaData src tmpdest)
+ ( do
+ liftIO $ do
+ removeFile dest
+ moveFile tmpdest dest
+ thawContent dest
+ next $ return True
+ , do
+ warning "copy failed!"
+ next $ return False
+ )
+ , do
+ warning "not enough disk space to copy file"
+ next $ return False
+ )
diff --git a/Command/Untrust.hs b/Command/Untrust.hs
index 4c1035dcd..92e28b637 100644
--- a/Command/Untrust.hs
+++ b/Command/Untrust.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -11,8 +11,8 @@ import Command
import Types.TrustLevel
import Command.Trust (trustCommand)
-def :: [Command]
-def = [command "untrust" (paramRepeating paramRemote) seek
+cmd :: [Command]
+cmd = [command "untrust" (paramRepeating paramRemote) seek
SectionSetup "do not trust a repository"]
seek :: CommandSeek
diff --git a/Command/Unused.hs b/Command/Unused.hs
index 3e844e5a8..4bbde4da4 100644
--- a/Command/Unused.hs
+++ b/Command/Unused.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -10,9 +10,6 @@
module Command.Unused where
import qualified Data.Set as S
-import Data.BloomFilter
-import Data.BloomFilter.Easy
-import Data.BloomFilter.Hash
import Control.Monad.ST
import qualified Data.Map as M
@@ -35,9 +32,11 @@ import qualified Annex.Branch
import Annex.CatFile
import Types.Key
import Git.FilePath
+import Logs.View (is_branchView)
+import Utility.Bloom
-def :: [Command]
-def = [withOptions [unusedFromOption] $ command "unused" paramNothing seek
+cmd :: [Command]
+cmd = [withOptions [unusedFromOption] $ command "unused" paramNothing seek
SectionMaintenance "look for unused file content"]
unusedFromOption :: Option
@@ -190,7 +189,12 @@ bloomBitsHashes :: Annex (Int, Int)
bloomBitsHashes = do
capacity <- bloomCapacity
accuracy <- bloomAccuracy
- return $ suggestSizing capacity (1/ fromIntegral accuracy)
+ case safeSuggestSizing capacity (1 / fromIntegral accuracy) of
+ Left e -> do
+ warning $ "bloomfilter " ++ e ++ "; falling back to sane value"
+ -- precaulculated value for 500000 (1/1000)
+ return (8388608,10)
+ Right v -> return v
{- Creates a bloom filter, and runs an action, such as withKeysReferenced,
- to populate it.
@@ -250,7 +254,7 @@ withKeysReferenced' mdir initial a = do
x <- Backend.lookupFile f
case x of
Nothing -> go v fs
- Just (k, _) -> do
+ Just k -> do
!v' <- a k f v
go v' fs
@@ -270,6 +274,7 @@ withKeysReferencedInGit a = do
ourbranchend = '/' : Git.fromRef Annex.Branch.name
ourbranches (_, b) = not (ourbranchend `isSuffixOf` b)
&& not ("refs/synced/" `isPrefixOf` b)
+ && not (is_branchView (Git.Ref b))
addHead headRef refs = case headRef of
-- if HEAD diverges from all branches (except the branch it
-- points to), run the actions on staged keys (and keys
@@ -294,7 +299,7 @@ withKeysReferencedInGitRef a ref = do
forM_ ts $ tKey lookAtWorkingTree >=> maybe noop a
liftIO $ void clean
where
- tKey True = fmap fst <$$> Backend.lookupFile . getTopFilePath . DiffTree.file
+ tKey True = Backend.lookupFile . getTopFilePath . DiffTree.file
tKey False = fileKey . takeFileName . decodeBS <$$>
catFile ref . getTopFilePath . DiffTree.file
diff --git a/Command/Upgrade.hs b/Command/Upgrade.hs
index 80876290a..081d7ff35 100644
--- a/Command/Upgrade.hs
+++ b/Command/Upgrade.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -11,8 +11,8 @@ import Common.Annex
import Command
import Upgrade
-def :: [Command]
-def = [dontCheck repoExists $ -- because an old version may not seem to exist
+cmd :: [Command]
+cmd = [dontCheck repoExists $ -- because an old version may not seem to exist
command "upgrade" paramNothing seek
SectionMaintenance "upgrade repository layout"]
diff --git a/Command/VAdd.hs b/Command/VAdd.hs
index e3726a051..ea98e6639 100644
--- a/Command/VAdd.hs
+++ b/Command/VAdd.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -12,8 +12,8 @@ import Command
import Annex.View
import Command.View (checkoutViewBranch)
-def :: [Command]
-def = [notBareRepo $ notDirect $ command "vadd" (paramRepeating "FIELD=GLOB")
+cmd :: [Command]
+cmd = [notBareRepo $ notDirect $ command "vadd" (paramRepeating "FIELD=GLOB")
seek SectionMetaData "add subdirs to current view"]
seek :: CommandSeek
diff --git a/Command/VCycle.hs b/Command/VCycle.hs
index f7da47fa2..f9a21892b 100644
--- a/Command/VCycle.hs
+++ b/Command/VCycle.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -14,8 +14,8 @@ import Types.View
import Logs.View
import Command.View (checkoutViewBranch)
-def :: [Command]
-def = [notBareRepo $ notDirect $
+cmd :: [Command]
+cmd = [notBareRepo $ notDirect $
command "vcycle" paramNothing seek SectionUtility
"switch view to next layout"]
diff --git a/Command/VFilter.hs b/Command/VFilter.hs
index bd17aca45..fd5ec9630 100644
--- a/Command/VFilter.hs
+++ b/Command/VFilter.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -12,8 +12,8 @@ import Command
import Annex.View
import Command.View (paramView, checkoutViewBranch)
-def :: [Command]
-def = [notBareRepo $ notDirect $
+cmd :: [Command]
+cmd = [notBareRepo $ notDirect $
command "vfilter" paramView seek SectionMetaData "filter current view"]
seek :: CommandSeek
diff --git a/Command/VPop.hs b/Command/VPop.hs
index 706a522f8..1fb1d7a56 100644
--- a/Command/VPop.hs
+++ b/Command/VPop.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -16,8 +16,8 @@ import Types.View
import Logs.View
import Command.View (checkoutViewBranch)
-def :: [Command]
-def = [notBareRepo $ notDirect $
+cmd :: [Command]
+cmd = [notBareRepo $ notDirect $
command "vpop" (paramOptional paramNumber) seek SectionMetaData
"switch back to previous view"]
diff --git a/Command/Version.hs b/Command/Version.hs
index 526b752f0..c0c89af68 100644
--- a/Command/Version.hs
+++ b/Command/Version.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -17,8 +17,8 @@ import qualified Types.Remote as R
import qualified Remote
import qualified Backend
-def :: [Command]
-def = [noCommit $ noRepo startNoRepo $ dontCheck repoExists $
+cmd :: [Command]
+cmd = [noCommit $ noRepo startNoRepo $ dontCheck repoExists $
command "version" paramNothing seek SectionQuery "show version info"]
seek :: CommandSeek
diff --git a/Command/Vicfg.hs b/Command/Vicfg.hs
index c62769c95..f1a64ba23 100644
--- a/Command/Vicfg.hs
+++ b/Command/Vicfg.hs
@@ -1,10 +1,12 @@
{- git-annex command
-
- - Copyright 2012-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE RankNTypes #-}
+
module Command.Vicfg where
import qualified Data.Map as M
@@ -12,6 +14,7 @@ import qualified Data.Set as S
import System.Environment (getEnv)
import Data.Tuple (swap)
import Data.Char (isSpace)
+import Data.Default
import Common.Annex
import Command
@@ -26,8 +29,8 @@ import Types.StandardGroups
import Types.ScheduledActivity
import Remote
-def :: [Command]
-def = [command "vicfg" paramNothing seek
+cmd :: [Command]
+cmd = [command "vicfg" paramNothing seek
SectionSetup "edit git-annex's configuration"]
seek :: CommandSeek
@@ -39,7 +42,7 @@ start = do
createAnnexDirectory $ parentDir f
cfg <- getCfg
descs <- uuidDescriptions
- liftIO $ writeFile f $ genCfg cfg descs
+ liftIO $ writeFileAnyEncoding f $ genCfg cfg descs
vicfg cfg f
stop
@@ -49,11 +52,11 @@ vicfg curcfg f = do
-- Allow EDITOR to be processed by the shell, so it can contain options.
unlessM (liftIO $ boolSystem "sh" [Param "-c", Param $ unwords [vi, shellEscape f]]) $
error $ vi ++ " exited nonzero; aborting"
- r <- parseCfg curcfg <$> liftIO (readFileStrict f)
+ r <- parseCfg (defCfg curcfg) <$> liftIO (readFileStrictAnyEncoding f)
liftIO $ nukeFile f
case r of
Left s -> do
- liftIO $ writeFile f s
+ liftIO $ writeFileAnyEncoding f s
vicfg curcfg f
Right newcfg -> setCfg curcfg newcfg
@@ -61,6 +64,7 @@ data Cfg = Cfg
{ cfgTrustMap :: TrustMap
, cfgGroupMap :: M.Map UUID (S.Set Group)
, cfgPreferredContentMap :: M.Map UUID PreferredContentExpression
+ , cfgRequiredContentMap :: M.Map UUID PreferredContentExpression
, cfgGroupPreferredContentMap :: M.Map Group PreferredContentExpression
, cfgScheduleMap :: M.Map UUID [ScheduledActivity]
}
@@ -70,6 +74,7 @@ getCfg = Cfg
<$> trustMapRaw -- without local trust overrides
<*> (groupsByUUID <$> groupMap)
<*> preferredContentMapRaw
+ <*> requiredContentMapRaw
<*> groupPreferredContentMapRaw
<*> scheduleMap
@@ -79,14 +84,31 @@ setCfg curcfg newcfg = do
mapM_ (uncurry trustSet) $ M.toList $ cfgTrustMap diff
mapM_ (uncurry groupSet) $ M.toList $ cfgGroupMap diff
mapM_ (uncurry preferredContentSet) $ M.toList $ cfgPreferredContentMap diff
+ mapM_ (uncurry requiredContentSet) $ M.toList $ cfgRequiredContentMap diff
mapM_ (uncurry groupPreferredContentSet) $ M.toList $ cfgGroupPreferredContentMap diff
mapM_ (uncurry scheduleSet) $ M.toList $ cfgScheduleMap diff
+{- Default config has all the keys from the input config, but with their
+ - default values. -}
+defCfg :: Cfg -> Cfg
+defCfg curcfg = Cfg
+ { cfgTrustMap = mapdef $ cfgTrustMap curcfg
+ , cfgGroupMap = mapdef $ cfgGroupMap curcfg
+ , cfgPreferredContentMap = mapdef $ cfgPreferredContentMap curcfg
+ , cfgRequiredContentMap = mapdef $ cfgRequiredContentMap curcfg
+ , cfgGroupPreferredContentMap = mapdef $ cfgGroupPreferredContentMap curcfg
+ , cfgScheduleMap = mapdef $ cfgScheduleMap curcfg
+ }
+ where
+ mapdef :: forall k v. Default v => M.Map k v -> M.Map k v
+ mapdef = M.map (const def)
+
diffCfg :: Cfg -> Cfg -> Cfg
diffCfg curcfg newcfg = Cfg
{ cfgTrustMap = diff cfgTrustMap
, cfgGroupMap = diff cfgGroupMap
, cfgPreferredContentMap = diff cfgPreferredContentMap
+ , cfgRequiredContentMap = diff cfgRequiredContentMap
, cfgGroupPreferredContentMap = diff cfgGroupPreferredContentMap
, cfgScheduleMap = diff cfgScheduleMap
}
@@ -102,6 +124,7 @@ genCfg cfg descs = unlines $ intercalate [""]
, preferredcontent
, grouppreferredcontent
, standardgroups
+ , requiredcontent
, schedule
]
where
@@ -119,7 +142,7 @@ genCfg cfg descs = unlines $ intercalate [""]
, com "(Valid trust levels: " ++ trustlevels ++ ")"
]
(\(t, u) -> line "trust" u $ showTrustLevel t)
- (\u -> lcom $ line "trust" u $ showTrustLevel SemiTrusted)
+ (\u -> lcom $ line "trust" u $ showTrustLevel def)
where
trustlevels = unwords $ map showTrustLevel [Trusted .. DeadTrusted]
@@ -131,21 +154,28 @@ genCfg cfg descs = unlines $ intercalate [""]
(\(s, u) -> line "group" u $ unwords $ S.toList s)
(\u -> lcom $ line "group" u "")
where
- grouplist = unwords $ map fromStandardGroup [minBound..]
+ grouplist = unwords $ map fromStandardGroup [minBound..]
preferredcontent = settings cfg descs cfgPreferredContentMap
- [ com "Repository preferred contents" ]
+ [ com "Repository preferred contents"
+ , com "(Set to \"standard\" to use a repository's group's preferred contents)"
+ ]
(\(s, u) -> line "wanted" u s)
- (\u -> line "wanted" u "standard")
+ (\u -> line "wanted" u "")
+
+ requiredcontent = settings cfg descs cfgRequiredContentMap
+ [ com "Repository required contents" ]
+ (\(s, u) -> line "required" u s)
+ (\u -> line "required" u "")
grouppreferredcontent = settings' cfg allgroups cfgGroupPreferredContentMap
[ com "Group preferred contents"
, com "(Used by repositories with \"groupwanted\" in their preferred contents)"
]
(\(s, g) -> gline g s)
- (\g -> gline g "standard")
+ (\g -> gline g "")
where
- gline g value = [ unwords ["groupwanted", g, "=", value] ]
+ gline g value = [ unwords ["groupwanted", g, "=", value] ]
allgroups = S.unions $ stdgroups : M.elems (cfgGroupMap cfg)
stdgroups = S.fromList $ map fromStandardGroup [minBound..maxBound]
@@ -191,7 +221,7 @@ lcom = map (\l -> if "#" `isPrefixOf` l then l else '#' : l)
{- If there's a parse error, returns a new version of the file,
- with the problem lines noted. -}
parseCfg :: Cfg -> String -> Either String Cfg
-parseCfg curcfg = go [] curcfg . lines
+parseCfg defcfg = go [] defcfg . lines
where
go c cfg []
| null (mapMaybe fst c) = Right cfg
@@ -205,7 +235,7 @@ parseCfg curcfg = go [] curcfg . lines
| null l = Right cfg
| "#" `isPrefixOf` l = Right cfg
| null setting || null f = Left "missing field"
- | otherwise = handle cfg f setting value'
+ | otherwise = parsed cfg f setting value'
where
(setting, rest) = separate isSpace l
(r, value) = separate (== '=') rest
@@ -213,7 +243,7 @@ parseCfg curcfg = go [] curcfg . lines
f = reverse $ trimspace $ reverse $ trimspace r
trimspace = dropWhile isSpace
- handle cfg f setting value
+ parsed cfg f setting value
| setting == "trust" = case readTrustLevel value of
Nothing -> badval "trust value" value
Just t ->
@@ -228,6 +258,12 @@ parseCfg curcfg = go [] curcfg . lines
Nothing ->
let m = M.insert u value (cfgPreferredContentMap cfg)
in Right $ cfg { cfgPreferredContentMap = m }
+ | setting == "required" =
+ case checkPreferredContentExpression value of
+ Just e -> Left e
+ Nothing ->
+ let m = M.insert u value (cfgRequiredContentMap cfg)
+ in Right $ cfg { cfgRequiredContentMap = m }
| setting == "groupwanted" =
case checkPreferredContentExpression value of
Just e -> Left e
@@ -255,7 +291,6 @@ parseCfg curcfg = go [] curcfg . lines
[ com "** There was a problem parsing your input!"
, com "** Search for \"Parse error\" to find the bad lines."
, com "** Either fix the bad lines, or delete them (to discard your changes)."
- , ""
]
parseerr = com "** Parse error in next line: "
diff --git a/Command/View.hs b/Command/View.hs
index 93b045c39..ae2878396 100644
--- a/Command/View.hs
+++ b/Command/View.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -17,8 +17,8 @@ import Types.View
import Annex.View
import Logs.View
-def :: [Command]
-def = [notBareRepo $ notDirect $
+cmd :: [Command]
+cmd = [notBareRepo $ notDirect $
command "view" paramView seek SectionMetaData "enter a view branch"]
seek :: CommandSeek
@@ -42,7 +42,7 @@ perform view = do
next $ checkoutViewBranch view applyView
paramView :: String
-paramView = paramPair (paramRepeating "TAG") (paramRepeating "FIELD=VALUE")
+paramView = paramRepeating "FIELD=VALUE"
mkView :: [String] -> Annex View
mkView params = go =<< inRepo Git.Branch.current
@@ -53,10 +53,8 @@ mkView params = go =<< inRepo Git.Branch.current
checkoutViewBranch :: View -> (View -> Annex Git.Branch) -> CommandCleanup
checkoutViewBranch view mkbranch = do
- oldcwd <- liftIO getCurrentDirectory
+ here <- liftIO getCurrentDirectory
- {- Change to top of repository before creating view branch. -}
- liftIO . setCurrentDirectory =<< fromRepo Git.repoPath
branch <- mkbranch view
showOutput
@@ -68,9 +66,9 @@ checkoutViewBranch view mkbranch = do
setView view
{- A git repo can easily have empty directories in it,
- and this pollutes the view, so remove them. -}
- liftIO $ removeemptydirs "."
- unlessM (liftIO $ doesDirectoryExist oldcwd) $ do
- top <- fromRepo Git.repoPath
+ top <- fromRepo Git.repoPath
+ liftIO $ removeemptydirs top
+ unlessM (liftIO $ doesDirectoryExist here) $ do
showLongNote (cwdmissing top)
return ok
where
diff --git a/Command/Wanted.hs b/Command/Wanted.hs
index bae450d26..6b87e51d8 100644
--- a/Command/Wanted.hs
+++ b/Command/Wanted.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -16,8 +16,8 @@ import Types.Messages
import qualified Data.Map as M
-def :: [Command]
-def = [command "wanted" (paramPair paramRemote (paramOptional paramExpression)) seek
+cmd :: [Command]
+cmd = [command "wanted" (paramPair paramRemote (paramOptional paramExpression)) seek
SectionSetup "get or set preferred content expression"]
seek :: CommandSeek
@@ -26,7 +26,7 @@ seek = withWords start
start :: [String] -> CommandStart
start = parse
where
- parse (name:[]) = go name performGet
+ parse (name:[]) = go name performGet
parse (name:expr:[]) = go name $ \uuid -> do
showStart "wanted" name
performSet expr uuid
diff --git a/Command/Watch.hs b/Command/Watch.hs
index 79079337c..2f82a7b7f 100644
--- a/Command/Watch.hs
+++ b/Command/Watch.hs
@@ -1,6 +1,6 @@
{- git-annex watch command
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -12,8 +12,8 @@ import Assistant
import Command
import Utility.HumanTime
-def :: [Command]
-def = [notBareRepo $ withOptions [foregroundOption, stopOption] $
+cmd :: [Command]
+cmd = [notBareRepo $ withOptions [foregroundOption, stopOption] $
command "watch" paramNothing seek SectionCommon "watch for changes"]
seek :: CommandSeek
diff --git a/Command/WebApp.hs b/Command/WebApp.hs
index 91c9afcd0..46ba556a3 100644
--- a/Command/WebApp.hs
+++ b/Command/WebApp.hs
@@ -1,6 +1,6 @@
{- git-annex webapp launcher
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -34,12 +34,11 @@ import Annex.Version
import Control.Concurrent
import Control.Concurrent.STM
-import System.Process (env, std_out, std_err)
import Network.Socket (HostName)
import System.Environment (getArgs)
-def :: [Command]
-def = [ withOptions [listenOption] $
+cmd :: [Command]
+cmd = [ withOptions [listenOption] $
noCommit $ noRepo startNoRepo $ dontCheck repoExists $ notBareRepo $
command "webapp" paramNothing seek SectionCommon "launch webapp"]
@@ -59,13 +58,14 @@ start' :: Bool -> Maybe HostName -> CommandStart
start' allowauto listenhost = do
liftIO ensureInstalled
ifM isInitialized
- ( go
- , auto
+ ( maybe notinitialized (go <=< needsUpgrade) =<< getVersion
+ , if allowauto
+ then liftIO $ startNoRepo []
+ else notinitialized
)
stop
where
- go = do
- cannotrun <- needsUpgrade . fromMaybe (error "no version") =<< getVersion
+ go cannotrun = do
browser <- fromRepo webBrowser
f <- liftIO . absPath =<< fromRepo gitAnnexHtmlShim
listenhost' <- if isJust listenhost
@@ -87,18 +87,17 @@ start' allowauto listenhost = do
then maybe noop (`hPutStrLn` url) origout
else openBrowser browser htmlshim url origout origerr
)
- auto
- | allowauto = liftIO $ startNoRepo []
- | otherwise = do
- d <- liftIO getCurrentDirectory
- error $ "no git repository in " ++ d
checkpid = do
pidfile <- fromRepo gitAnnexPidFile
liftIO $ isJust <$> checkDaemon pidfile
checkshim f = liftIO $ doesFileExist f
+ notinitialized = do
+ g <- Annex.gitRepo
+ liftIO $ cannotStartIn (Git.repoLocation g) "repository has not been initialized by git-annex"
+ liftIO $ firstRun listenhost
{- When run without a repo, start the first available listed repository in
- - the autostart file. If not, it's our first time being run! -}
+ - the autostart file. If none, it's our first time being run! -}
startNoRepo :: CmdParams -> IO ()
startNoRepo _ = do
-- FIXME should be able to reuse regular getopt, but
@@ -107,18 +106,26 @@ startNoRepo _ = do
let listenhost = headMaybe $ map (snd . separate (== '=')) $
filter ("--listen=" `isPrefixOf`) args
- dirs <- liftIO $ filterM doesDirectoryExist =<< readAutoStartFile
- case dirs of
- [] -> firstRun listenhost
- (d:_) -> do
+ go listenhost =<< liftIO (filterM doesDirectoryExist =<< readAutoStartFile)
+ where
+ go listenhost [] = firstRun listenhost
+ go listenhost (d:ds) = do
+ v <- tryNonAsync $ do
setCurrentDirectory d
- state <- Annex.new =<< Git.CurrentRepo.get
- void $ Annex.eval state $ do
+ Annex.new =<< Git.CurrentRepo.get
+ case v of
+ Left e -> do
+ cannotStartIn d (show e)
+ go listenhost ds
+ Right state -> void $ Annex.eval state $ do
whenM (fromRepo Git.repoIsLocalBare) $
error $ d ++ " is a bare git repository, cannot run the webapp in it"
callCommandAction $
start' False listenhost
+cannotStartIn :: FilePath -> String -> IO ()
+cannotStartIn d reason = warningIO $ "unable to start webapp in repository " ++ d ++ ": " ++ reason
+
{- Run the webapp without a repository, which prompts the user, makes one,
- changes to it, starts the regular assistant, and redirects the
- browser to its url.
@@ -188,10 +195,15 @@ recordUrl _ = noop
#endif
openBrowser :: Maybe FilePath -> FilePath -> String -> Maybe Handle -> Maybe Handle -> IO ()
+openBrowser mcmd htmlshim realurl outh errh = do
+ htmlshim' <- absPath htmlshim
+ openBrowser' mcmd htmlshim' realurl outh errh
+
+openBrowser' :: Maybe FilePath -> FilePath -> String -> Maybe Handle -> Maybe Handle -> IO ()
#ifndef __ANDROID__
-openBrowser mcmd htmlshim _realurl outh errh = runbrowser
+openBrowser' mcmd htmlshim _realurl outh errh = runbrowser
#else
-openBrowser mcmd htmlshim realurl outh errh = do
+openBrowser' mcmd htmlshim realurl outh errh = do
recordUrl url
{- Android's `am` command does not work reliably across the
- wide range of Android devices. Intead, FIFO should be set to
@@ -206,8 +218,17 @@ openBrowser mcmd htmlshim realurl outh errh = do
#endif
where
p = case mcmd of
- Just cmd -> proc cmd [htmlshim]
- Nothing -> browserProc url
+ Just c -> proc c [htmlshim]
+ Nothing ->
+#ifndef mingw32_HOST_OS
+ browserProc url
+#else
+ {- Windows hack to avoid using the full path,
+ - which might contain spaces that cause problems
+ - for browserProc. -}
+ (browserProc (takeFileName htmlshim))
+ { cwd = Just (takeDirectory htmlshim) }
+#endif
#ifdef __ANDROID__
{- Android does not support file:// urls, but neither is
- the security of the url in the process table important
diff --git a/Command/Whereis.hs b/Command/Whereis.hs
index 387ffebc9..5f31998c5 100644
--- a/Command/Whereis.hs
+++ b/Command/Whereis.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -13,9 +13,10 @@ import Common.Annex
import Command
import Remote
import Logs.Trust
+import Logs.Web
-def :: [Command]
-def = [noCommit $ withOptions (jsonOption : keyOptions) $
+cmd :: [Command]
+cmd = [noCommit $ withOptions (jsonOption : annexedMatchingOptions ++ keyOptions) $
command "whereis" paramPaths seek SectionQuery
"lists repositories that have file content"]
@@ -27,8 +28,8 @@ seek ps = do
(withFilesInGit $ whenAnnexed $ start m)
ps
-start :: M.Map UUID Remote -> FilePath -> (Key, Backend) -> CommandStart
-start remotemap file (key, _) = start' remotemap key (Just file)
+start :: M.Map UUID Remote -> FilePath -> Key -> CommandStart
+start remotemap file key = start' remotemap key (Just file)
startKeys :: M.Map UUID Remote -> Key -> CommandStart
startKeys remotemap key = start' remotemap key Nothing
@@ -57,9 +58,17 @@ perform remotemap key = do
untrustedheader = "The following untrusted locations may also have copies:\n"
performRemote :: Key -> Remote -> Annex ()
-performRemote key remote = maybe noop go $ whereisKey remote
+performRemote key remote = do
+ ls <- (++)
+ <$> askremote
+ <*> claimedurls
+ unless (null ls) $ showLongNote $ unlines $
+ map (\l -> name remote ++ ": " ++ l) ls
where
- go a = do
- ls <- a key
- unless (null ls) $ showLongNote $ unlines $
- map (\l -> name remote ++ ": " ++ l) ls
+ askremote = maybe (pure []) (flip id key) (whereisKey remote)
+ claimedurls = do
+ us <- map fst
+ . filter (\(_, d) -> d == OtherDownloader)
+ . map getDownloader
+ <$> getUrls key
+ filterM (\u -> (==) <$> pure remote <*> claimingUrl u) us
diff --git a/Command/XMPPGit.hs b/Command/XMPPGit.hs
index 47c2d7ff2..2bcb7405e 100644
--- a/Command/XMPPGit.hs
+++ b/Command/XMPPGit.hs
@@ -1,6 +1,6 @@
{- git-annex command
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -11,8 +11,8 @@ import Common.Annex
import Command
import Assistant.XMPP.Git
-def :: [Command]
-def = [noCommit $ noRepo startNoRepo $ dontCheck repoExists $
+cmd :: [Command]
+cmd = [noCommit $ noRepo startNoRepo $ dontCheck repoExists $
command "xmppgit" paramNothing seek
SectionPlumbing "git to XMPP relay"]
@@ -37,9 +37,9 @@ gitRemoteHelper = do
respond []
where
expect s = do
- cmd <- getLine
- unless (cmd == s) $
- error $ "git-remote-helpers protocol error: expected: " ++ s ++ ", but got: " ++ cmd
+ gitcmd <- getLine
+ unless (gitcmd == s) $
+ error $ "git-remote-helpers protocol error: expected: " ++ s ++ ", but got: " ++ gitcmd
respond l = do
mapM_ putStrLn l
putStrLn ""
diff --git a/Common.hs b/Common.hs
index 6612c9c54..8272043c2 100644
--- a/Common.hs
+++ b/Common.hs
@@ -6,17 +6,18 @@ import Control.Monad as X
import Control.Monad.IfElse as X
import Control.Applicative as X
import "mtl" Control.Monad.State.Strict as X (liftIO)
-import Control.Exception.Extensible as X (IOException)
import Data.Maybe as X
import Data.List as X hiding (head, tail, init, last)
import Data.String.Utils as X hiding (join)
+import Data.Monoid as X
+import Data.Default as X
import System.FilePath as X
import System.Directory as X
import System.IO as X hiding (FilePath)
#ifndef mingw32_HOST_OS
-import System.Posix.IO as X
+import System.Posix.IO as X hiding (createPipe)
#endif
import System.Exit as X
@@ -30,6 +31,8 @@ import Utility.Monad as X
import Utility.Data as X
import Utility.Applicative as X
import Utility.FileSystemEncoding as X
-import Utility.PosixFiles as X
+import Utility.PosixFiles as X hiding (fileSize)
+import Utility.FileSize as X
+import Utility.Network as X
import Utility.PartialPrelude as X
diff --git a/Config.hs b/Config.hs
index 10d4fd190..29135ed96 100644
--- a/Config.hs
+++ b/Config.hs
@@ -1,6 +1,6 @@
{- Git configuration
-
- - Copyright 2011-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -23,7 +23,7 @@ instance Show ConfigKey where
{- Looks up a setting in git config. -}
getConfig :: ConfigKey -> String -> Annex String
-getConfig (ConfigKey key) def = fromRepo $ Git.Config.get key def
+getConfig (ConfigKey key) d = fromRepo $ Git.Config.get key d
getConfigMaybe :: ConfigKey -> Annex (Maybe String)
getConfigMaybe (ConfigKey key) = fromRepo $ Git.Config.getMaybe key
@@ -32,7 +32,10 @@ getConfigMaybe (ConfigKey key) = fromRepo $ Git.Config.getMaybe key
setConfig :: ConfigKey -> String -> Annex ()
setConfig (ConfigKey key) value = do
inRepo $ Git.Command.run [Param "config", Param key, Param value]
- Annex.changeGitRepo =<< inRepo Git.Config.reRead
+ reloadConfig
+
+reloadConfig :: Annex ()
+reloadConfig = Annex.changeGitRepo =<< inRepo Git.Config.reRead
{- Unsets a git config setting. (Leaves it in state currently.) -}
unsetConfig :: ConfigKey -> Annex ()
@@ -55,7 +58,7 @@ annexConfig key = ConfigKey $ "annex." ++ key
- by remote.<name>.annex-cost, or if remote.<name>.annex-cost-command
- is set and prints a number, that is used. -}
remoteCost :: RemoteGitConfig -> Cost -> Annex Cost
-remoteCost c def = fromMaybe def <$> remoteCost' c
+remoteCost c d = fromMaybe d <$> remoteCost' c
remoteCost' :: RemoteGitConfig -> Annex (Maybe Cost)
remoteCost' c = case remoteAnnexCostCommand c of
diff --git a/Config/Cost.hs b/Config/Cost.hs
index 2d94a6b15..026a90576 100644
--- a/Config/Cost.hs
+++ b/Config/Cost.hs
@@ -1,6 +1,6 @@
{- Remote costs.
-
- - Copyright 2011-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -52,7 +52,7 @@ insertCostAfter l pos
| otherwise =
firstsegment ++ [costBetween item nextitem ] ++ lastsegment
where
- nextpos = pos + 1
+ nextpos = pos + 1
maxpos = length l - 1
item = l !! pos
diff --git a/Config/Files.hs b/Config/Files.hs
index 30ed0a3cf..b503a5443 100644
--- a/Config/Files.hs
+++ b/Config/Files.hs
@@ -1,6 +1,6 @@
{- git-annex extra config files
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -66,4 +66,4 @@ readProgramFile = do
)
)
where
- cmd = "git-annex"
+ cmd = "git-annex"
diff --git a/Config/NumCopies.hs b/Config/NumCopies.hs
index 26d81b8a4..b25e0818d 100644
--- a/Config/NumCopies.hs
+++ b/Config/NumCopies.hs
@@ -1,6 +1,6 @@
{- git-annex numcopies configuration
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Creds.hs b/Creds.hs
index 0586f2070..765be5a17 100644
--- a/Creds.hs
+++ b/Creds.hs
@@ -1,6 +1,6 @@
{- Credentials storage
-
- - Copyright 2012-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -14,6 +14,8 @@ module Creds (
getEnvCredPair,
writeCacheCreds,
readCacheCreds,
+ removeCreds,
+ includeCredsInfo,
) where
import Common.Annex
@@ -22,7 +24,7 @@ import Annex.Perms
import Utility.FileMode
import Crypto
import Types.Remote (RemoteConfig, RemoteConfigKey)
-import Remote.Helper.Encryptable (remoteCipher, embedCreds)
+import Remote.Helper.Encryptable (remoteCipher, remoteCipher', embedCreds, EncryptionIsSetup, extractCipher)
import Utility.Env (getEnv)
import qualified Data.ByteString.Lazy.Char8 as L
@@ -38,16 +40,23 @@ data CredPairStorage = CredPairStorage
}
{- Stores creds in a remote's configuration, if the remote allows
- - that. Otherwise, caches them locally.
- - The creds are found in storage if not provided. -}
-setRemoteCredPair :: RemoteConfig -> CredPairStorage -> Maybe CredPair -> Annex RemoteConfig
-setRemoteCredPair c storage Nothing =
- maybe (return c) (setRemoteCredPair c storage . Just)
+ - that. Also caches them locally.
+ -
+ - The creds are found from the CredPairStorage storage if not provided,
+ - so may be provided by an environment variable etc.
+ -
+ - The remote's configuration should have already had a cipher stored in it
+ - if that's going to be done, so that the creds can be encrypted using the
+ - cipher. The EncryptionIsSetup phantom type ensures that is the case.
+ -}
+setRemoteCredPair :: EncryptionIsSetup -> RemoteConfig -> CredPairStorage -> Maybe CredPair -> Annex RemoteConfig
+setRemoteCredPair encsetup c storage Nothing =
+ maybe (return c) (setRemoteCredPair encsetup c storage . Just)
=<< getRemoteCredPair c storage
-setRemoteCredPair c storage (Just creds)
+setRemoteCredPair _ c storage (Just creds)
| embedCreds c = case credPairRemoteKey storage of
Nothing -> localcache
- Just key -> storeconfig key =<< remoteCipher c
+ Just key -> storeconfig key =<< remoteCipher =<< localcache
| otherwise = localcache
where
localcache = do
@@ -84,20 +93,32 @@ getRemoteCredPair c storage = maybe fromcache (return . Just) =<< fromenv
fromcache = maybe fromconfig (return . Just) =<< readCacheCredPair storage
fromconfig = case credPairRemoteKey storage of
Just key -> do
- mcipher <- remoteCipher c
+ mcipher <- remoteCipher' c
case (M.lookup key c, mcipher) of
(Nothing, _) -> return Nothing
- (Just enccreds, Just cipher) -> do
- creds <- liftIO $ decrypt cipher
- (feedBytes $ L.pack $ fromB64 enccreds)
- (readBytes $ return . L.unpack)
- fromcreds creds
+ (Just enccreds, Just (cipher, storablecipher)) ->
+ fromenccreds enccreds cipher storablecipher
(Just bcreds, Nothing) ->
fromcreds $ fromB64 bcreds
Nothing -> return Nothing
+ fromenccreds enccreds cipher storablecipher = do
+ mcreds <- liftIO $ catchMaybeIO $ decrypt cipher
+ (feedBytes $ L.pack $ fromB64 enccreds)
+ (readBytes $ return . L.unpack)
+ case mcreds of
+ Just creds -> fromcreds creds
+ Nothing -> do
+ -- Work around un-encrypted creds storage
+ -- bug in old S3 and glacier remotes.
+ -- Not a problem for shared cipher.
+ case storablecipher of
+ SharedCipher {} -> showLongNote "gpg error above was caused by an old git-annex bug in credentials storage. Working around it.."
+ _ -> error "*** Insecure credentials storage detected for this remote! See https://git-annex.branchable.com/upgrades/insecure_embedded_creds/"
+ fromcreds $ fromB64 enccreds
fromcreds creds = case decodeCredPair creds of
Just credpair -> do
writeCacheCredPair credpair storage
+
return $ Just credpair
_ -> error "bad creds"
@@ -126,10 +147,16 @@ readCacheCredPair storage = maybe Nothing decodeCredPair
<$> readCacheCreds (credPairFile storage)
readCacheCreds :: FilePath -> Annex (Maybe Creds)
-readCacheCreds file = do
+readCacheCreds f = liftIO . catchMaybeIO . readFile =<< cacheCredsFile f
+
+cacheCredsFile :: FilePath -> Annex FilePath
+cacheCredsFile basefile = do
d <- fromRepo gitAnnexCredsDir
- let f = d </> file
- liftIO $ catchMaybeIO $ readFile f
+ return $ d </> basefile
+
+existsCacheCredPair :: CredPairStorage -> Annex Bool
+existsCacheCredPair storage =
+ liftIO . doesFileExist =<< cacheCredsFile (credPairFile storage)
encodeCredPair :: CredPair -> Creds
encodeCredPair (l, p) = unlines [l, p]
@@ -138,3 +165,27 @@ decodeCredPair :: Creds -> Maybe CredPair
decodeCredPair creds = case lines creds of
l:p:[] -> Just (l, p)
_ -> Nothing
+
+removeCreds :: FilePath -> Annex ()
+removeCreds file = do
+ d <- fromRepo gitAnnexCredsDir
+ let f = d </> file
+ liftIO $ nukeFile f
+
+includeCredsInfo :: RemoteConfig -> CredPairStorage -> [(String, String)] -> Annex [(String, String)]
+includeCredsInfo c storage info = do
+ v <- liftIO $ getEnvCredPair storage
+ case v of
+ Just _ -> do
+ let (uenv, penv) = credPairEnvironment storage
+ ret $ "from environment variables (" ++ unwords [uenv, penv] ++ ")"
+ Nothing -> case (\ck -> M.lookup ck c) =<< credPairRemoteKey storage of
+ Nothing -> ifM (existsCacheCredPair storage)
+ ( ret "stored locally"
+ , ret "not available"
+ )
+ Just _ -> case extractCipher c of
+ Just (EncryptedCipher _ _ _) -> ret "embedded in git repository (gpg encrypted)"
+ _ -> ret "embedded in git repository (not encrypted)"
+ where
+ ret s = return $ ("creds", s) : info
diff --git a/Crypto.hs b/Crypto.hs
index f3a9e3957..c2076f461 100644
--- a/Crypto.hs
+++ b/Crypto.hs
@@ -3,16 +3,18 @@
- Currently using gpg; could later be modified to support different
- crypto backends if neccessary.
-
- - Copyright 2011-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE Rank2Types #-}
module Crypto (
Cipher,
KeyIds(..),
+ EncKey,
StorableCipher(..),
genEncryptedCipher,
genSharedCipher,
@@ -20,6 +22,7 @@ module Crypto (
describeCipher,
decryptCipher,
encryptKey,
+ isEncKey,
feedFile,
feedBytes,
readBytes,
@@ -34,6 +37,7 @@ import qualified Data.ByteString.Lazy as L
import Data.ByteString.Lazy.UTF8 (fromString)
import Control.Applicative
import qualified Data.Map as M
+import Control.Monad.IO.Class
import Common.Annex
import qualified Utility.Gpg as Gpg
@@ -138,19 +142,25 @@ decryptCipher (EncryptedCipher t variant _) =
Hybrid -> Cipher
PubKey -> MacOnlyCipher
+type EncKey = Key -> Key
+
{- Generates an encrypted form of a Key. The encryption does not need to be
- reversable, nor does it need to be the same type of encryption used
- on content. It does need to be repeatable. -}
-encryptKey :: Mac -> Cipher -> Key -> Key
-encryptKey mac c k = Key
+encryptKey :: Mac -> Cipher -> EncKey
+encryptKey mac c k = stubKey
{ keyName = macWithCipher mac c (key2file k)
- , keyBackendName = "GPG" ++ showMac mac
- , keySize = Nothing -- size and mtime omitted
- , keyMtime = Nothing -- to avoid leaking data
+ , keyBackendName = encryptedBackendNamePrefix ++ showMac mac
}
+encryptedBackendNamePrefix :: String
+encryptedBackendNamePrefix = "GPG"
+
+isEncKey :: Key -> Bool
+isEncKey k = encryptedBackendNamePrefix `isPrefixOf` keyBackendName k
+
type Feeder = Handle -> IO ()
-type Reader a = Handle -> IO a
+type Reader m a = Handle -> m a
feedFile :: FilePath -> Feeder
feedFile f h = L.hPut h =<< L.readFile f
@@ -158,8 +168,8 @@ feedFile f h = L.hPut h =<< L.readFile f
feedBytes :: L.ByteString -> Feeder
feedBytes = flip L.hPut
-readBytes :: (L.ByteString -> IO a) -> Reader a
-readBytes a h = L.hGetContents h >>= a
+readBytes :: (MonadIO m) => (L.ByteString -> m a) -> Reader m a
+readBytes a h = liftIO (L.hGetContents h) >>= a
{- Runs a Feeder action, that generates content that is symmetrically
- encrypted with the Cipher (unless it is empty, in which case
@@ -167,7 +177,7 @@ readBytes a h = L.hGetContents h >>= a
- read by the Reader action. Note: For public-key encryption,
- recipients MUST be included in 'params' (for instance using
- 'getGpgEncParams'). -}
-encrypt :: [CommandParam] -> Cipher -> Feeder -> Reader a -> IO a
+encrypt :: (MonadIO m, MonadMask m) => [CommandParam] -> Cipher -> Feeder -> Reader m a -> m a
encrypt params cipher = case cipher of
Cipher{} -> Gpg.feedRead (params ++ Gpg.stdEncryptionParams True) $
cipherPassphrase cipher
@@ -176,7 +186,7 @@ encrypt params cipher = case cipher of
{- Runs a Feeder action, that generates content that is decrypted with the
- Cipher (or using a private key if the Cipher is empty), and read by the
- Reader action. -}
-decrypt :: Cipher -> Feeder -> Reader a -> IO a
+decrypt :: (MonadIO m, MonadMask m) => Cipher -> Feeder -> Reader m a -> m a
decrypt cipher = case cipher of
Cipher{} -> Gpg.feedRead [Param "--decrypt"] $ cipherPassphrase cipher
MacOnlyCipher{} -> Gpg.pipeLazy [Param "--decrypt"]
diff --git a/Git.hs b/Git.hs
index 55b44a925..6e270815e 100644
--- a/Git.hs
+++ b/Git.hs
@@ -3,7 +3,7 @@
- This is written to be completely independant of git-annex and should be
- suitable for other uses.
-
- - Copyright 2010-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -30,6 +30,8 @@ module Git (
attributes,
hookPath,
assertLocal,
+ adjustPath,
+ relPath,
) where
import Network.URI (uriPath, uriScheme, unEscapeString)
@@ -139,3 +141,29 @@ hookPath script repo = do
#else
isexecutable f = isExecutable . fileMode <$> getFileStatus f
#endif
+
+{- Makes the path to a local Repo be relative to the cwd. -}
+relPath :: Repo -> IO Repo
+relPath = adjustPath torel
+ where
+ torel p = do
+ p' <- relPathCwdToFile p
+ if null p'
+ then return "."
+ else return p'
+
+{- Adusts the path to a local Repo using the provided function. -}
+adjustPath :: (FilePath -> IO FilePath) -> Repo -> IO Repo
+adjustPath f r@(Repo { location = l@(Local { gitdir = d, worktree = w }) }) = do
+ d' <- f d
+ w' <- maybe (pure Nothing) (Just <$$> f) w
+ return $ r
+ { location = l
+ { gitdir = d'
+ , worktree = w'
+ }
+ }
+adjustPath f r@(Repo { location = LocalUnknown d }) = do
+ d' <- f d
+ return $ r { location = LocalUnknown d' }
+adjustPath _ r = pure r
diff --git a/Git/AutoCorrect.hs b/Git/AutoCorrect.hs
index aa8379849..7a9d78851 100644
--- a/Git/AutoCorrect.hs
+++ b/Git/AutoCorrect.hs
@@ -1,6 +1,6 @@
{- git autocorrection using Damerau-Levenshtein edit distance
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -41,9 +41,9 @@ fuzzymatches input showchoice choices = fst $ unzip $
{- Takes action based on git's autocorrect configuration, in preparation for
- an autocorrected command being run. -}
-prepare :: String -> (c -> String) -> [c] -> Repo -> IO ()
+prepare :: String -> (c -> String) -> [c] -> Maybe Repo -> IO ()
prepare input showmatch matches r =
- case readish $ Git.Config.get "help.autocorrect" "0" r of
+ case readish . Git.Config.get "help.autocorrect" "0" =<< r of
Just n
| n == 0 -> list
| n < 0 -> warn
diff --git a/Git/Branch.hs b/Git/Branch.hs
index d182ceb39..fd04f1f46 100644
--- a/Git/Branch.hs
+++ b/Git/Branch.hs
@@ -1,6 +1,6 @@
{- git branch stuff
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -14,6 +14,7 @@ import Git
import Git.Sha
import Git.Command
import qualified Git.Ref
+import qualified Git.BuildVersion
{- The currently checked out branch.
-
@@ -42,6 +43,9 @@ currentUnsafe r = parse . firstLine
| null l = Nothing
| otherwise = Just $ Git.Ref l
+currentSha :: Repo -> IO (Maybe Git.Sha)
+currentSha r = maybe (pure Nothing) (`Git.Ref.sha` r) =<< current r
+
{- Checks if the second branch has any commits not present on the first
- branch. -}
changed :: Branch -> Branch -> Repo -> IO Bool
@@ -52,7 +56,22 @@ changed origbranch newbranch repo
diffs = pipeReadStrict
[ Param "log"
, Param (fromRef origbranch ++ ".." ++ fromRef newbranch)
- , Params "--oneline -n1"
+ , Param "-n1"
+ , Param "--pretty=%H"
+ ] repo
+
+{- Check if it's possible to fast-forward from the old
+ - ref to the new ref.
+ -
+ - This requires there to be a path from the old to the new. -}
+fastForwardable :: Ref -> Ref -> Repo -> IO Bool
+fastForwardable old new repo = not . null <$>
+ pipeReadStrict
+ [ Param "log"
+ , Param $ fromRef old ++ ".." ++ fromRef new
+ , Param "-n1"
+ , Param "--pretty=%H"
+ , Param "--ancestry-path"
] repo
{- Given a set of refs that are all known to have commits not
@@ -74,7 +93,7 @@ fastForward branch (first:rest) repo =
where
no_ff = return False
do_ff to = do
- run [Param "update-ref", Param $ fromRef branch, Param $ fromRef to] repo
+ update branch to repo
return True
findbest c [] = return $ Just c
findbest c (r:rs)
@@ -88,6 +107,31 @@ fastForward branch (first:rest) repo =
(False, True) -> findbest c rs -- worse
(False, False) -> findbest c rs -- same
+{- The user may have set commit.gpgsign, indending all their manual
+ - commits to be signed. But signing automatic/background commits could
+ - easily lead to unwanted gpg prompts or failures.
+ -}
+data CommitMode = ManualCommit | AutomaticCommit
+ deriving (Eq)
+
+applyCommitMode :: CommitMode -> [CommandParam] -> [CommandParam]
+applyCommitMode commitmode ps
+ | commitmode == AutomaticCommit && not (Git.BuildVersion.older "2.0.0") =
+ Param "--no-gpg-sign" : ps
+ | otherwise = ps
+
+{- Commit via the usual git command. -}
+commitCommand :: CommitMode -> [CommandParam] -> Repo -> IO Bool
+commitCommand = commitCommand' runBool
+
+{- Commit will fail when the tree is clean. This suppresses that error. -}
+commitQuiet :: CommitMode -> [CommandParam] -> Repo -> IO ()
+commitQuiet commitmode ps = void . tryIO . commitCommand' runQuiet commitmode ps
+
+commitCommand' :: ([CommandParam] -> Repo -> IO a) -> CommitMode -> [CommandParam] -> Repo -> IO a
+commitCommand' runner commitmode ps = runner $
+ Param "commit" : applyCommitMode commitmode ps
+
{- Commits the index into the specified branch (or other ref),
- with the specified parent refs, and returns the committed sha.
-
@@ -97,30 +141,31 @@ fastForward branch (first:rest) repo =
- Unlike git-commit, does not run any hooks, or examine the work tree
- in any way.
-}
-commit :: Bool -> String -> Branch -> [Ref] -> Repo -> IO (Maybe Sha)
-commit allowempty message branch parentrefs repo = do
+commit :: CommitMode -> Bool -> String -> Branch -> [Ref] -> Repo -> IO (Maybe Sha)
+commit commitmode allowempty message branch parentrefs repo = do
tree <- getSha "write-tree" $
pipeReadStrict [Param "write-tree"] repo
ifM (cancommit tree)
( do
- sha <- getSha "commit-tree" $ pipeWriteRead
- (map Param $ ["commit-tree", fromRef tree] ++ ps)
- (Just $ flip hPutStr message) repo
+ sha <- getSha "commit-tree" $
+ pipeWriteRead ([Param "commit-tree", Param (fromRef tree)] ++ ps) sendmsg repo
update branch sha repo
return $ Just sha
, return Nothing
)
where
- ps = concatMap (\r -> ["-p", fromRef r]) parentrefs
+ ps = applyCommitMode commitmode $
+ map Param $ concatMap (\r -> ["-p", fromRef r]) parentrefs
cancommit tree
| allowempty = return True
| otherwise = case parentrefs of
[p] -> maybe False (tree /=) <$> Git.Ref.tree p repo
_ -> return True
+ sendmsg = Just $ flip hPutStr message
-commitAlways :: String -> Branch -> [Ref] -> Repo -> IO Sha
-commitAlways message branch parentrefs repo = fromJust
- <$> commit True message branch parentrefs repo
+commitAlways :: CommitMode -> String -> Branch -> [Ref] -> Repo -> IO Sha
+commitAlways commitmode message branch parentrefs repo = fromJust
+ <$> commit commitmode True message branch parentrefs repo
{- A leading + makes git-push force pushing a branch. -}
forcePush :: String -> String
diff --git a/Git/BuildVersion.hs b/Git/BuildVersion.hs
index 832ee8ab7..50e4a3ae7 100644
--- a/Git/BuildVersion.hs
+++ b/Git/BuildVersion.hs
@@ -1,6 +1,6 @@
{- git build version
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Git/CatFile.hs b/Git/CatFile.hs
index 8e64fc558..a1a0a0d28 100644
--- a/Git/CatFile.hs
+++ b/Git/CatFile.hs
@@ -1,6 +1,6 @@
{- git cat-file interface
-
- - Copyright 2011, 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011, 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -94,7 +94,7 @@ catTree :: CatFileHandle -> Ref -> IO [(FilePath, FileMode)]
catTree h treeref = go <$> catObjectDetails h treeref
where
go (Just (b, _, TreeObject)) = parsetree [] b
- go _ = []
+ go _ = []
parsetree c b = case L.break (== 0) b of
(modefile, rest)
diff --git a/Git/CheckAttr.hs b/Git/CheckAttr.hs
index 94ead5b4c..21eeed493 100644
--- a/Git/CheckAttr.hs
+++ b/Git/CheckAttr.hs
@@ -1,6 +1,6 @@
{- git check-attr interface
-
- - Copyright 2010-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -10,12 +10,12 @@ module Git.CheckAttr where
import Common
import Git
import Git.Command
-import qualified Git.BuildVersion
+import qualified Git.Version
import qualified Utility.CoProcess as CoProcess
import System.IO.Error
-type CheckAttrHandle = (CoProcess.CoProcessHandle, [Attr], String)
+type CheckAttrHandle = (CoProcess.CoProcessHandle, [Attr], Bool, String)
type Attr = String
@@ -23,9 +23,10 @@ type Attr = String
- values and returns a handle. -}
checkAttrStart :: [Attr] -> Repo -> IO CheckAttrHandle
checkAttrStart attrs repo = do
- cwd <- getCurrentDirectory
+ currdir <- getCurrentDirectory
h <- CoProcess.rawMode =<< gitCoProcessStart True params repo
- return (h, attrs, cwd)
+ oldgit <- Git.Version.older "1.7.7"
+ return (h, attrs, oldgit, currdir)
where
params =
[ Param "check-attr"
@@ -34,11 +35,11 @@ checkAttrStart attrs repo = do
[ Param "--" ]
checkAttrStop :: CheckAttrHandle -> IO ()
-checkAttrStop (h, _, _) = CoProcess.stop h
+checkAttrStop (h, _, _, _) = CoProcess.stop h
{- Gets an attribute of a file. -}
checkAttr :: CheckAttrHandle -> Attr -> FilePath -> IO String
-checkAttr (h, attrs, cwd) want file = do
+checkAttr (h, attrs, oldgit, currdir) want file = do
pairs <- CoProcess.query h send (receive "")
let vals = map snd $ filter (\(attr, _) -> attr == want) pairs
case vals of
@@ -81,10 +82,9 @@ checkAttr (h, attrs, cwd) want file = do
- With newer git, git check-attr chokes on some absolute
- filenames, and the bugs that necessitated them were fixed,
- so use relative filenames. -}
- oldgit = Git.BuildVersion.older "1.7.7"
file'
- | oldgit = absPathFrom cwd file
- | otherwise = relPathDirToFile cwd $ absPathFrom cwd file
+ | oldgit = absPathFrom currdir file
+ | otherwise = relPathDirToFileAbs currdir $ absPathFrom currdir file
oldattrvalue attr l = end bits !! 0
where
bits = split sep l
diff --git a/Git/CheckIgnore.hs b/Git/CheckIgnore.hs
index 2ab7cb3dc..5fa3cb637 100644
--- a/Git/CheckIgnore.hs
+++ b/Git/CheckIgnore.hs
@@ -1,6 +1,6 @@
{- git check-ignore interface
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Git/Command.hs b/Git/Command.hs
index a0c7c4b2a..02e3e5a34 100644
--- a/Git/Command.hs
+++ b/Git/Command.hs
@@ -1,6 +1,6 @@
{- running git commands
-
- - Copyright 2010-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -9,17 +9,14 @@
module Git.Command where
-import System.Process (std_out, env)
-
import Common
import Git
import Git.Types
import qualified Utility.CoProcess as CoProcess
-import Utility.Batch
{- Constructs a git command line operating on the specified repo. -}
gitCommandLine :: [CommandParam] -> Repo -> [CommandParam]
-gitCommandLine params r@(Repo { location = l@(Local _ _ ) }) =
+gitCommandLine params r@(Repo { location = l@(Local { } ) }) =
setdir : settree ++ gitGlobalOpts r ++ params
where
setdir = Param $ "--git-dir=" ++ gitdir l
@@ -33,12 +30,6 @@ runBool :: [CommandParam] -> Repo -> IO Bool
runBool params repo = assertLocal repo $
boolSystemEnv "git" (gitCommandLine params repo) (gitEnv repo)
-{- Runs git in batch mode. -}
-runBatch :: BatchCommandMaker -> [CommandParam] -> Repo -> IO Bool
-runBatch batchmaker params repo = assertLocal repo $ do
- let (cmd, params') = batchmaker ("git", gitCommandLine params repo)
- boolSystemEnv cmd params' (gitEnv repo)
-
{- Runs git in the specified repo, throwing an error if it fails. -}
run :: [CommandParam] -> Repo -> IO ()
run params repo = assertLocal repo $
@@ -88,7 +79,7 @@ pipeWriteRead params writer repo = assertLocal repo $
writeReadProcessEnv "git" (toCommand $ gitCommandLine params repo)
(gitEnv repo) writer (Just adjusthandle)
where
- adjusthandle h = do
+ adjusthandle h = do
fileEncoding h
hSetNewlineMode h noNewlineTranslation
@@ -126,7 +117,7 @@ gitCoProcessStart restartable params repo = CoProcess.start numrestarts "git"
(toCommand $ gitCommandLine params repo)
(gitEnv repo)
where
- {- If a long-running git command like cat-file --batch
+ {- If a long-running git command like cat-file --batch
- crashes, it will likely start up again ok. If it keeps crashing
- 10 times, something is badly wrong. -}
numrestarts = if restartable then 10 else 0
diff --git a/Git/Command/Batch.hs b/Git/Command/Batch.hs
new file mode 100644
index 000000000..b2d6509b6
--- /dev/null
+++ b/Git/Command/Batch.hs
@@ -0,0 +1,19 @@
+{- running batch git commands
+ -
+ - Copyright 2010-2013 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Git.Command.Batch where
+
+import Common
+import Git
+import Git.Command
+import Utility.Batch
+
+{- Runs git in batch mode. -}
+run :: BatchCommandMaker -> [CommandParam] -> Repo -> IO Bool
+run batchmaker params repo = assertLocal repo $ do
+ let (cmd, params') = batchmaker ("git", gitCommandLine params repo)
+ boolSystemEnv cmd params' (gitEnv repo)
diff --git a/Git/Config.hs b/Git/Config.hs
index b5c1be04a..44e0ad9a9 100644
--- a/Git/Config.hs
+++ b/Git/Config.hs
@@ -1,6 +1,6 @@
{- git repository configuration handling
-
- - Copyright 2010-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -9,8 +9,6 @@ module Git.Config where
import qualified Data.Map as M
import Data.Char
-import System.Process (cwd, env)
-import Control.Exception.Extensible
import Common
import Git
@@ -68,10 +66,9 @@ global = do
home <- myHomeDir
ifM (doesFileExist $ home </> ".gitconfig")
( do
- repo <- Git.Construct.fromUnknown
- repo' <- withHandle StdoutHandle createProcessSuccess p $
- hRead repo
- return $ Just repo'
+ repo <- withHandle StdoutHandle createProcessSuccess p $
+ hRead (Git.Construct.fromUnknown)
+ return $ Just repo
, return Nothing
)
where
@@ -169,7 +166,7 @@ coreBare = "core.bare"
fromPipe :: Repo -> String -> [CommandParam] -> IO (Either SomeException (Repo, String))
fromPipe r cmd params = try $
withHandle StdoutHandle createProcessSuccess p $ \h -> do
- fileEncoding h
+ fileEncoding h
val <- hGetContentsStrict h
r' <- store val r
return (r', val)
diff --git a/Git/Construct.hs b/Git/Construct.hs
index eed2b9930..5b206054b 100644
--- a/Git/Construct.hs
+++ b/Git/Construct.hs
@@ -1,6 +1,6 @@
{- Construction of Git Repo objects
-
- - Copyright 2010-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -19,8 +19,8 @@ module Git.Construct (
fromRemotes,
fromRemoteLocation,
repoAbsPath,
- newFrom,
checkForRepo,
+ newFrom,
) where
#ifndef mingw32_HOST_OS
@@ -45,10 +45,10 @@ fromCwd = getCurrentDirectory >>= seekUp
seekUp dir = do
r <- checkForRepo dir
case r of
- Nothing -> case parentDir dir of
- "" -> return Nothing
- d -> seekUp d
- Just loc -> Just <$> newFrom loc
+ Nothing -> case upFrom dir of
+ Nothing -> return Nothing
+ Just d -> seekUp d
+ Just loc -> pure $ Just $ newFrom loc
{- Local Repo constructor, accepts a relative or absolute path. -}
fromPath :: FilePath -> IO Repo
@@ -62,7 +62,7 @@ fromAbsPath dir
| otherwise =
error $ "internal error, " ++ dir ++ " is not absolute"
where
- ret = newFrom . LocalUnknown
+ ret = pure . newFrom . LocalUnknown
{- Git always looks for "dir.git" in preference to
- to "dir", even if dir ends in a "/". -}
canondir = dropTrailingPathSeparator dir
@@ -90,13 +90,13 @@ fromUrl url
fromUrlStrict :: String -> IO Repo
fromUrlStrict url
| startswith "file://" url = fromAbsPath $ unEscapeString $ uriPath u
- | otherwise = newFrom $ Url u
+ | otherwise = pure $ newFrom $ Url u
where
u = fromMaybe bad $ parseURI url
bad = error $ "bad url " ++ url
{- Creates a repo that has an unknown location. -}
-fromUnknown :: IO Repo
+fromUnknown :: Repo
fromUnknown = newFrom Unknown
{- Converts a local Repo into a remote repo, using the reference repo
@@ -153,7 +153,7 @@ fromRemoteLocation s repo = gen $ parseRemoteLocation s repo
fromRemotePath :: FilePath -> Repo -> IO Repo
fromRemotePath dir repo = do
dir' <- expandTilde dir
- fromAbsPath $ repoPath repo </> dir'
+ fromPath $ repoPath repo </> dir'
{- Git remotes can have a directory that is specified relative
- to the user's home directory, or that contains tilde expansions.
@@ -223,8 +223,8 @@ checkForRepo dir =
gitdirprefix = "gitdir: "
gitSignature file = doesFileExist $ dir </> file
-newFrom :: RepoLocation -> IO Repo
-newFrom l = return Repo
+newFrom :: RepoLocation -> Repo
+newFrom l = Repo
{ location = l
, config = M.empty
, fullconfig = M.empty
@@ -234,4 +234,3 @@ newFrom l = return Repo
, gitGlobalOpts = []
}
-
diff --git a/Git/CurrentRepo.hs b/Git/CurrentRepo.hs
index ee91a6b81..dab4ad21b 100644
--- a/Git/CurrentRepo.hs
+++ b/Git/CurrentRepo.hs
@@ -1,21 +1,17 @@
{- The current git repository.
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
-{-# LANGUAGE CPP #-}
-
module Git.CurrentRepo where
import Common
import Git.Types
import Git.Construct
import qualified Git.Config
-#ifndef mingw32_HOST_OS
import Utility.Env
-#endif
{- Gets the current git repository.
-
@@ -37,29 +33,25 @@ get = do
case wt of
Nothing -> return r
Just d -> do
- cwd <- getCurrentDirectory
- unless (d `dirContains` cwd) $
+ curr <- getCurrentDirectory
+ unless (d `dirContains` curr) $
setCurrentDirectory d
return $ addworktree wt r
where
-#ifndef mingw32_HOST_OS
pathenv s = do
v <- getEnv s
case v of
Just d -> do
- void $ unsetEnv s
+ unsetEnv s
Just <$> absPath d
Nothing -> return Nothing
-#else
- pathenv _ = return Nothing
-#endif
configure Nothing (Just r) = Git.Config.read r
configure (Just d) _ = do
absd <- absPath d
- cwd <- getCurrentDirectory
- r <- newFrom $ Local { gitdir = absd, worktree = Just cwd }
- Git.Config.read r
+ curr <- getCurrentDirectory
+ Git.Config.read $ newFrom $
+ Local { gitdir = absd, worktree = Just curr }
configure Nothing Nothing = error "Not in a git repository."
addworktree w r = changelocation r $
diff --git a/Git/DiffTree.hs b/Git/DiffTree.hs
index 9e4fef9d6..5cdcc16bc 100644
--- a/Git/DiffTree.hs
+++ b/Git/DiffTree.hs
@@ -1,37 +1,37 @@
{- git diff-tree interface
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Git.DiffTree (
DiffTreeItem(..),
+ isDiffOf,
diffTree,
diffTreeRecursive,
diffIndex,
diffWorkTree,
+ diffLog,
) where
import Numeric
-import System.Posix.Types
import Common
import Git
import Git.Sha
import Git.Command
import Git.FilePath
+import Git.DiffTreeItem
import qualified Git.Filename
import qualified Git.Ref
-data DiffTreeItem = DiffTreeItem
- { srcmode :: FileMode
- , dstmode :: FileMode
- , srcsha :: Sha -- nullSha if file was added
- , dstsha :: Sha -- nullSha if file was deleted
- , status :: String
- , file :: TopFilePath
- } deriving Show
+{- Checks if the DiffTreeItem modifies a file with a given name
+ - or under a directory by that name. -}
+isDiffOf :: DiffTreeItem -> TopFilePath -> Bool
+isDiffOf diff f = case getTopFilePath f of
+ "" -> True -- top of repo contains all
+ d -> d `dirContains` getTopFilePath (file diff)
{- Diffs two tree Refs. -}
diffTree :: Ref -> Ref -> Repo -> IO ([DiffTreeItem], IO Bool)
@@ -49,11 +49,11 @@ diffIndex :: Ref -> Repo -> IO ([DiffTreeItem], IO Bool)
diffIndex ref = diffIndex' ref [Param "--cached"]
{- Diffs between a tree and the working tree. Does nothing if there is not
- - yet a commit in the repository, of if the repository is bare. -}
+ - yet a commit in the repository, or if the repository is bare. -}
diffWorkTree :: Ref -> Repo -> IO ([DiffTreeItem], IO Bool)
diffWorkTree ref repo =
ifM (Git.Ref.headExists repo)
- ( diffIndex' ref [] repo
+ ( diffIndex' ref [] repo
, return ([], return True)
)
@@ -61,21 +61,28 @@ diffIndex' :: Ref -> [CommandParam] -> Repo -> IO ([DiffTreeItem], IO Bool)
diffIndex' ref params repo =
ifM (Git.Ref.headExists repo)
( getdiff (Param "diff-index")
- ( params ++ [Param $ fromRef ref] )
+ ( params ++ [Param $ fromRef ref] ++ [Param "--"] )
repo
, return ([], return True)
)
+{- Runs git log in --raw mode to get the changes that were made in
+ - a particular commit. The output format is adjusted to be the same
+ - as diff-tree --raw._-}
+diffLog :: [CommandParam] -> Repo -> IO ([DiffTreeItem], IO Bool)
+diffLog params = getdiff (Param "log")
+ (Param "-n1" : Param "--abbrev=40" : Param "--pretty=format:" : params)
+
getdiff :: CommandParam -> [CommandParam] -> Repo -> IO ([DiffTreeItem], IO Bool)
getdiff command params repo = do
(diff, cleanup) <- pipeNullSplit ps repo
- return (parseDiffTree diff, cleanup)
+ return (parseDiffRaw diff, cleanup)
where
ps = command : Params "-z --raw --no-renames -l0" : params
-{- Parses diff-tree output. -}
-parseDiffTree :: [String] -> [DiffTreeItem]
-parseDiffTree l = go l []
+{- Parses --raw output used by diff-tree and git-log. -}
+parseDiffRaw :: [String] -> [DiffTreeItem]
+parseDiffRaw l = go l []
where
go [] c = c
go (info:f:rest) c = go rest (mk info f : c)
diff --git a/Git/DiffTreeItem.hs b/Git/DiffTreeItem.hs
new file mode 100644
index 000000000..859f590c1
--- /dev/null
+++ b/Git/DiffTreeItem.hs
@@ -0,0 +1,24 @@
+{- git diff-tree item
+ -
+ - Copyright 2012 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Git.DiffTreeItem (
+ DiffTreeItem(..),
+) where
+
+import System.Posix.Types
+
+import Git.FilePath
+import Git.Types
+
+data DiffTreeItem = DiffTreeItem
+ { srcmode :: FileMode
+ , dstmode :: FileMode
+ , srcsha :: Sha -- nullSha if file was added
+ , dstsha :: Sha -- nullSha if file was deleted
+ , status :: String
+ , file :: TopFilePath
+ } deriving Show
diff --git a/Git/FileMode.hs b/Git/FileMode.hs
index fc4d0264e..c3dfe570a 100644
--- a/Git/FileMode.hs
+++ b/Git/FileMode.hs
@@ -1,6 +1,6 @@
{- git file modes
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Git/FilePath.hs b/Git/FilePath.hs
index 42eb0812e..edc3c0f90 100644
--- a/Git/FilePath.hs
+++ b/Git/FilePath.hs
@@ -5,7 +5,7 @@
- top of the repository even when run in a subdirectory. Adding some
- types helps keep that straight.
-
- - Copyright 2012-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -39,8 +39,7 @@ fromTopFilePath p repo = absPathFrom (repoPath repo) (getTopFilePath p)
{- The input FilePath can be absolute, or relative to the CWD. -}
toTopFilePath :: FilePath -> Git.Repo -> IO TopFilePath
-toTopFilePath file repo = TopFilePath <$>
- relPathDirToFile (repoPath repo) <$> absPath file
+toTopFilePath file repo = TopFilePath <$> relPathDirToFile (repoPath repo) file
{- The input FilePath must already be relative to the top of the git
- repository -}
diff --git a/Git/Filename.hs b/Git/Filename.hs
index 5e076d3b5..382eb8d48 100644
--- a/Git/Filename.hs
+++ b/Git/Filename.hs
@@ -1,7 +1,7 @@
{- Some git commands output encoded filenames, in a rather annoyingly complex
- C-style encoding.
-
- - Copyright 2010, 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2010, 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Git/Fsck.hs b/Git/Fsck.hs
index 80f76dd90..f3e6db9f9 100644
--- a/Git/Fsck.hs
+++ b/Git/Fsck.hs
@@ -1,6 +1,6 @@
{- git fsck interface
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -23,7 +23,6 @@ import Utility.Batch
import qualified Git.Version
import qualified Data.Set as S
-import System.Process (std_out, std_err)
import Control.Concurrent.Async
type MissingObjects = S.Set Sha
diff --git a/Git/GCrypt.hs b/Git/GCrypt.hs
index 156441dae..46da37257 100644
--- a/Git/GCrypt.hs
+++ b/Git/GCrypt.hs
@@ -2,7 +2,7 @@
-
- https://github.com/blake2-ppc/git-remote-gcrypt
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -16,8 +16,11 @@ import qualified Git.Config as Config
import qualified Git.Command as Command
import Utility.Gpg
+urlScheme :: String
+urlScheme = "gcrypt:"
+
urlPrefix :: String
-urlPrefix = "gcrypt::"
+urlPrefix = urlScheme ++ ":"
isEncrypted :: Repo -> Bool
isEncrypted Repo { location = Url url } = urlPrefix `isPrefixOf` show url
@@ -35,12 +38,12 @@ isEncrypted _ = False
encryptedRemote :: Repo -> Repo -> IO Repo
encryptedRemote baserepo = go
where
- go Repo { location = Url url }
+ go Repo { location = Url url }
| urlPrefix `isPrefixOf` u =
fromRemoteLocation (drop plen u) baserepo
| otherwise = notencrypted
where
- u = show url
+ u = show url
plen = length urlPrefix
go _ = notencrypted
notencrypted = error "not a gcrypt encrypted repository"
@@ -89,13 +92,16 @@ getParticiantList globalconfigrepo repo remotename = KeyIds $ parse $ firstJust
]
where
defaultkey = "gcrypt.participants"
- parse (Just "simple") = []
+ parse (Just "simple") = []
parse (Just l) = words l
parse Nothing = []
remoteParticipantConfigKey :: RemoteName -> String
remoteParticipantConfigKey = remoteConfigKey "gcrypt-participants"
+remotePublishParticipantConfigKey :: RemoteName -> String
+remotePublishParticipantConfigKey = remoteConfigKey "gcrypt-publish-participants"
+
remoteSigningKey :: RemoteName -> String
remoteSigningKey = remoteConfigKey "gcrypt-signingkey"
diff --git a/Git/HashObject.hs b/Git/HashObject.hs
index 97e1befe6..07c72d080 100644
--- a/Git/HashObject.hs
+++ b/Git/HashObject.hs
@@ -1,6 +1,6 @@
{- git hash-object interface
-
- - Copyright 2011-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -32,7 +32,7 @@ hashObjectStop = CoProcess.stop
hashFile :: HashObjectHandle -> FilePath -> IO Sha
hashFile h file = CoProcess.query h send receive
where
- send to = hPutStrLn to file
+ send to = hPutStrLn to =<< absPath file
receive from = getSha "hash-object" $ hGetLine from
{- Injects a blob into git. Unfortunately, the current git-hash-object
diff --git a/Git/Hook.hs b/Git/Hook.hs
index 6245a292d..aec2563f4 100644
--- a/Git/Hook.hs
+++ b/Git/Hook.hs
@@ -1,15 +1,20 @@
{- git hooks
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013-2015 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Git.Hook where
import Common
import Git
import Utility.Tmp
+#ifndef mingw32_HOST_OS
+import Utility.FileMode
+#endif
data Hook = Hook
{ hookName :: FilePath
@@ -56,3 +61,37 @@ expectedContent :: Hook -> Repo -> IO Bool
expectedContent h r = do
content <- readFile $ hookFile h r
return $ content == hookScript h
+
+hookExists :: Hook -> Repo -> IO Bool
+hookExists h r = do
+ let f = hookFile h r
+ catchBoolIO $
+#ifndef mingw32_HOST_OS
+ isExecutable . fileMode <$> getFileStatus f
+#else
+ doesFileExist f
+#endif
+
+runHook :: Hook -> Repo -> IO Bool
+runHook h r = do
+ let f = hookFile h r
+ (c, ps) <- findcmd f
+ boolSystem c ps
+ where
+#ifndef mingw32_HOST_OS
+ findcmd = defcmd
+#else
+ {- Like msysgit, parse the first line of the hook file,
+ - look for "#!", and dispatch the interpreter on the file. -}
+ findcmd f = do
+ l <- headMaybe . lines <$> catchDefaultIO "" (readFile f)
+ case l of
+ Just ('#':'!':rest) -> case words rest of
+ [] -> defcmd f
+ (c:ps) -> do
+ let ps' = map Param (ps ++ [f])
+ ok <- inPath c
+ return (if ok then c else takeFileName c, ps')
+ _ -> defcmd f
+#endif
+ defcmd f = return (f, [])
diff --git a/Git/Index.hs b/Git/Index.hs
index d9d5b03bf..551fd98d3 100644
--- a/Git/Index.hs
+++ b/Git/Index.hs
@@ -1,6 +1,6 @@
{- git index file stuff
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -11,6 +11,9 @@ import Common
import Git
import Utility.Env
+indexEnv :: String
+indexEnv = "GIT_INDEX_FILE"
+
{- Forces git to use the specified index file.
-
- Returns an action that will reset back to the default
@@ -21,12 +24,32 @@ import Utility.Env
override :: FilePath -> IO (IO ())
override index = do
res <- getEnv var
- void $ setEnv var index True
- return $ void $ reset res
+ setEnv var index True
+ return $ reset res
where
var = "GIT_INDEX_FILE"
- reset (Just v) = setEnv var v True
+ reset (Just v) = setEnv indexEnv v True
reset _ = unsetEnv var
indexFile :: Repo -> FilePath
indexFile r = localGitDir r </> "index"
+
+{- Git locks the index by creating this file. -}
+indexFileLock :: Repo -> FilePath
+indexFileLock r = indexFile r ++ ".lock"
+
+{- When the pre-commit hook is run, and git commit has been run with
+ - a file or files specified to commit, rather than committing the staged
+ - index, git provides the pre-commit hook with a "false index file".
+ -
+ - Changes made to this index will influence the commit, but won't
+ - affect the real index file.
+ -
+ - This detects when we're in this situation, using a heuristic, which
+ - might be broken by changes to git. Any use of this should have a test
+ - case to make sure it works.
+ -}
+haveFalseIndex :: IO Bool
+haveFalseIndex = maybe (False) check <$> getEnv indexEnv
+ where
+ check f = "next-index" `isPrefixOf` takeFileName f
diff --git a/Git/LsFiles.hs b/Git/LsFiles.hs
index e1558456f..c23c282d0 100644
--- a/Git/LsFiles.hs
+++ b/Git/LsFiles.hs
@@ -1,6 +1,6 @@
{- git ls-files interface
-
- - Copyright 2010,2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2010,2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -131,9 +131,9 @@ typeChanged' ps l repo = do
(fs, cleanup) <- pipeNullSplit (prefix ++ ps ++ suffix) repo
-- git diff returns filenames relative to the top of the git repo;
-- convert to filenames relative to the cwd, like git ls-files.
- let top = repoPath repo
- cwd <- getCurrentDirectory
- return (map (\f -> relPathDirToFile cwd $ top </> f) fs, cleanup)
+ top <- absPath (repoPath repo)
+ currdir <- getCurrentDirectory
+ return (map (\f -> relPathDirToFileAbs currdir $ top </> f) fs, cleanup)
where
prefix = [Params "diff --name-only --diff-filter=T -z"]
suffix = Param "--" : (if null l then [File "."] else map File l)
diff --git a/Git/LsTree.hs b/Git/LsTree.hs
index 6d3ca4813..7ef951807 100644
--- a/Git/LsTree.hs
+++ b/Git/LsTree.hs
@@ -1,6 +1,6 @@
{- git ls-tree interface
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -44,7 +44,7 @@ lsTreeParams t = [ Params "ls-tree --full-tree -z -r --", File $ fromRef t ]
lsTreeFiles :: Ref -> [FilePath] -> Repo -> IO [TreeItem]
lsTreeFiles t fs repo = map parseLsTree <$> pipeNullSplitStrict ps repo
where
- ps = [Params "ls-tree --full-tree -z --", File $ fromRef t] ++ map File fs
+ ps = [Params "ls-tree --full-tree -z --", File $ fromRef t] ++ map File fs
{- Parses a line of ls-tree output.
- (The --long format is not currently supported.) -}
diff --git a/Git/Merge.hs b/Git/Merge.hs
index 948e09e01..b3a048937 100644
--- a/Git/Merge.hs
+++ b/Git/Merge.hs
@@ -1,6 +1,6 @@
{- git merging
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012, 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -11,11 +11,28 @@ import Common
import Git
import Git.Command
import Git.BuildVersion
+import Git.Branch (CommitMode(..))
{- Avoids recent git's interactive merge. -}
-mergeNonInteractive :: Ref -> Repo -> IO Bool
-mergeNonInteractive branch
+mergeNonInteractive :: Ref -> CommitMode -> Repo -> IO Bool
+mergeNonInteractive branch commitmode
| older "1.7.7.6" = merge [Param $ fromRef branch]
- | otherwise = merge [Param "--no-edit", Param $ fromRef branch]
+ | otherwise = merge $ [Param "--no-edit", Param $ fromRef branch]
where
- merge ps = runBool $ Param "merge" : ps
+ merge ps = runBool $ cp ++ [Param "merge"] ++ ps
+ cp
+ | commitmode == AutomaticCommit =
+ [Param "-c", Param "commit.gpgsign=false"]
+ | otherwise = []
+
+{- Stage the merge into the index, but do not commit it.-}
+stageMerge :: Ref -> Repo -> IO Bool
+stageMerge branch = runBool
+ [ Param "merge"
+ , Param "--quiet"
+ , Param "--no-commit"
+ -- Without this, a fast-forward merge is done, since it involves no
+ -- commit.
+ , Param "--no-ff"
+ , Param $ fromRef branch
+ ]
diff --git a/Git/Objects.hs b/Git/Objects.hs
index 516aa6d3e..bda220b5e 100644
--- a/Git/Objects.hs
+++ b/Git/Objects.hs
@@ -1,6 +1,6 @@
{- .git/objects
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -33,3 +33,17 @@ looseObjectFile :: Repo -> Sha -> FilePath
looseObjectFile r sha = objectsDir r </> prefix </> rest
where
(prefix, rest) = splitAt 2 (fromRef sha)
+
+listAlternates :: Repo -> IO [FilePath]
+listAlternates r = catchDefaultIO [] (lines <$> readFile alternatesfile)
+ where
+ alternatesfile = objectsDir r </> "info" </> "alternates"
+
+{- A repository recently cloned with --shared will have one or more
+ - alternates listed, and contain no loose objects or packs. -}
+isSharedClone :: Repo -> IO Bool
+isSharedClone r = allM id
+ [ not . null <$> listAlternates r
+ , null <$> listLooseObjectShas r
+ , null <$> listPackFiles r
+ ]
diff --git a/Git/Queue.hs b/Git/Queue.hs
index 5f7b142c0..d5c19cd95 100644
--- a/Git/Queue.hs
+++ b/Git/Queue.hs
@@ -1,6 +1,6 @@
{- git repository command queue
-
- - Copyright 2010,2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2010,2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -24,9 +24,6 @@ import Git.Command
import qualified Git.UpdateIndex
import qualified Data.Map as M
-#ifndef mingw32_HOST_OS
-import System.Process
-#endif
{- Queable actions that can be performed in a git repository.
-}
@@ -85,16 +82,16 @@ new lim = Queue 0 (fromMaybe defaultLimit lim) M.empty
-}
addCommand :: String -> [CommandParam] -> [FilePath] -> Queue -> Repo -> IO Queue
addCommand subcommand params files q repo =
- updateQueue action different (length newfiles) q repo
+ updateQueue action different (length files) q repo
where
key = actionKey action
action = CommandAction
{ getSubcommand = subcommand
, getParams = params
- , getFiles = newfiles
+ , getFiles = allfiles
}
- newfiles = map File files ++ maybe [] getFiles (M.lookup key $ items q)
-
+ allfiles = map File files ++ maybe [] getFiles (M.lookup key $ items q)
+
different (CommandAction { getSubcommand = s }) = s /= subcommand
different _ = True
@@ -159,9 +156,9 @@ runAction repo action@(CommandAction {}) = do
-- Using xargs on Windows is problimatic, so just run the command
-- once per file (not as efficient.)
if null (getFiles action)
- then void $ boolSystem "git" gitparams
+ then void $ boolSystemEnv "git" gitparams (gitEnv repo)
else forM_ (getFiles action) $ \f ->
- void $ boolSystem "git" (gitparams ++ [f])
+ void $ boolSystemEnv "git" (gitparams ++ [f]) (gitEnv repo)
#endif
where
gitparams = gitCommandLine
diff --git a/Git/Ref.hs b/Git/Ref.hs
index 3d0c68fb0..5ad7577ff 100644
--- a/Git/Ref.hs
+++ b/Git/Ref.hs
@@ -1,6 +1,6 @@
{- git ref stuff
-
- - Copyright 2011-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Git/RefLog.hs b/Git/RefLog.hs
index 98c9d66ff..f3a9dad38 100644
--- a/Git/RefLog.hs
+++ b/Git/RefLog.hs
@@ -1,6 +1,6 @@
{- git reflog interface
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Git/Remote.hs b/Git/Remote.hs
index 9d969c416..717b54045 100644
--- a/Git/Remote.hs
+++ b/Git/Remote.hs
@@ -1,6 +1,6 @@
{- git remote stuff
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -12,8 +12,6 @@ module Git.Remote where
import Common
import Git
import Git.Types
-import qualified Git.Command
-import qualified Git.BuildVersion
import Data.Char
import qualified Data.Map as M
@@ -44,17 +42,6 @@ makeLegalName s = case filter legal $ replace "/" "_" s of
legal '.' = True
legal c = isAlphaNum c
-remove :: RemoteName -> Repo -> IO ()
-remove remotename = Git.Command.run
- [ Param "remote"
- -- name of this subcommand changed
- , Param $
- if Git.BuildVersion.older "1.8.0"
- then "rm"
- else "remove"
- , Param remotename
- ]
-
data RemoteLocation = RemoteUrl String | RemotePath FilePath
remoteLocationIsUrl :: RemoteLocation -> Bool
@@ -70,7 +57,7 @@ remoteLocationIsSshUrl _ = False
parseRemoteLocation :: String -> Repo -> RemoteLocation
parseRemoteLocation s repo = ret $ calcloc s
where
- ret v
+ ret v
#ifdef mingw32_HOST_OS
| dosstyle v = RemotePath (dospath v)
#endif
@@ -102,7 +89,13 @@ parseRemoteLocation s repo = ret $ calcloc s
&& not ("::" `isInfixOf` v)
scptourl v = "ssh://" ++ host ++ slash dir
where
- (host, dir) = separate (== ':') v
+ (host, dir)
+ -- handle ipv6 address inside []
+ | "[" `isPrefixOf` v = case break (== ']') v of
+ (h, ']':':':d) -> (h ++ "]", d)
+ (h, ']':d) -> (h ++ "]", d)
+ (h, d) -> (h, d)
+ | otherwise = separate (== ':') v
slash d | d == "" = "/~/" ++ d
| "/" `isPrefixOf` d = d
| "~" `isPrefixOf` d = '/':d
diff --git a/Git/Remote/Remove.hs b/Git/Remote/Remove.hs
new file mode 100644
index 000000000..2ffc9b358
--- /dev/null
+++ b/Git/Remote/Remove.hs
@@ -0,0 +1,29 @@
+{- git remote stuff
+ -
+ - Copyright 2012 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# LANGUAGE CPP #-}
+
+module Git.Remote.Remove where
+
+import Common
+import Git
+import Git.Types
+import qualified Git.Command
+import qualified Git.Version
+
+remove :: RemoteName -> Repo -> IO ()
+remove remotename r = do
+ old <- Git.Version.older "1.8.0"
+ Git.Command.run
+ [ Param "remote"
+ -- name of this subcommand changed
+ , Param $
+ if old
+ then "rm"
+ else "remove"
+ , Param remotename
+ ] r
diff --git a/Git/Repair.hs b/Git/Repair.hs
index 67ded359f..2557e3b83 100644
--- a/Git/Repair.hs
+++ b/Git/Repair.hs
@@ -1,6 +1,6 @@
{- git repository recovery
-
- - Copyright 2013-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2013-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -8,6 +8,7 @@
module Git.Repair (
runRepair,
runRepairOf,
+ removeBadBranches,
successfulRepair,
cleanCorruptObjects,
retrieveMissingObjects,
@@ -134,11 +135,16 @@ retrieveMissingObjects missing referencerepo r
pullremotes tmpr rmts fetchrefs (FsckFoundMissing stillmissing t)
, pullremotes tmpr rmts fetchrefs ms
)
- fetchfrom fetchurl ps = runBool $
- [ Param "fetch"
- , Param fetchurl
- , Params "--force --update-head-ok --quiet"
- ] ++ ps
+ fetchfrom fetchurl ps fetchr = runBool ps' fetchr'
+ where
+ ps' =
+ [ Param "fetch"
+ , Param fetchurl
+ , Params "--force --update-head-ok --quiet"
+ ] ++ ps
+ fetchr' = fetchr { gitGlobalOpts = gitGlobalOpts fetchr ++ nogc }
+ nogc = [ Param "-c", Param "gc.auto=0" ]
+
-- fetch refs and tags
fetchrefstags = [ Param "+refs/heads/*:refs/heads/*", Param "--tags"]
-- Fetch all available refs (more likely to fail,
@@ -191,8 +197,11 @@ isTrackingBranch b = "refs/remotes/" `isPrefixOf` fromRef b
- any branches (filtered by a predicate) that reference them
- Returns a list of all removed branches.
-}
-removeBadBranches :: (Ref -> Bool) -> MissingObjects -> GoodCommits -> Repo -> IO ([Branch], GoodCommits)
-removeBadBranches removablebranch missing goodcommits r =
+removeBadBranches :: (Ref -> Bool) -> Repo -> IO [Branch]
+removeBadBranches removablebranch r = fst <$> removeBadBranches' removablebranch S.empty emptyGoodCommits r
+
+removeBadBranches' :: (Ref -> Bool) -> MissingObjects -> GoodCommits -> Repo -> IO ([Branch], GoodCommits)
+removeBadBranches' removablebranch missing goodcommits r =
go [] goodcommits =<< filter removablebranch <$> getAllRefs r
where
go removed gcs [] = return (removed, gcs)
@@ -204,6 +213,11 @@ removeBadBranches removablebranch missing goodcommits r =
nukeBranchRef b r
go (b:removed) gcs' bs
+badBranches :: MissingObjects -> Repo -> IO [Branch]
+badBranches missing r = filterM isbad =<< getAllRefs r
+ where
+ isbad b = not . fst <$> verifyCommit missing emptyGoodCommits b r
+
{- Gets all refs, including ones that are corrupt.
- git show-ref does not output refs to commits that are directly
- corrupted, so it is not used.
@@ -211,10 +225,13 @@ removeBadBranches removablebranch missing goodcommits r =
- Relies on packed refs being exploded before it's called.
-}
getAllRefs :: Repo -> IO [Ref]
-getAllRefs r = map toref <$> dirContentsRecursive refdir
- where
- refdir = localGitDir r </> "refs"
- toref = Ref . relPathDirToFile (localGitDir r)
+getAllRefs r = getAllRefs' (localGitDir r </> "refs")
+
+getAllRefs' :: FilePath -> IO [Ref]
+getAllRefs' refdir = do
+ let topsegs = length (splitPath refdir) - 1
+ let toref = Ref . joinPath . drop topsegs . splitPath
+ map toref <$> dirContentsRecursive refdir
explodePackedRefsFile :: Repo -> IO ()
explodePackedRefsFile r = do
@@ -402,7 +419,7 @@ displayList items header
putStrLn header
putStr $ unlines $ map (\i -> "\t" ++ i) truncateditems
where
- numitems = length items
+ numitems = length items
truncateditems
| numitems > 10 = take 10 items ++ ["(and " ++ show (numitems - 10) ++ " more)"]
| otherwise = items
@@ -439,8 +456,12 @@ runRepair removablebranch forced g = do
if foundBroken fsckresult
then runRepair' removablebranch fsckresult forced Nothing g
else do
- putStrLn "No problems found."
- return (True, [])
+ bad <- badBranches S.empty g
+ if null bad
+ then do
+ putStrLn "No problems found."
+ return (True, [])
+ else runRepair' removablebranch fsckresult forced Nothing g
runRepairOf :: FsckResults -> (Ref -> Bool) -> Bool -> Maybe FilePath -> Repo -> IO (Bool, [Branch])
runRepairOf fsckresult removablebranch forced referencerepo g = do
@@ -455,9 +476,9 @@ runRepair' removablebranch fsckresult forced referencerepo g = do
case stillmissing of
FsckFoundMissing s t
| S.null s -> if repoIsLocalBare g
- then successfulfinish []
+ then checkbadbranches s
else ifM (checkIndex g)
- ( successfulfinish []
+ ( checkbadbranches s
, do
putStrLn "No missing objects found, but the index file is corrupt!"
if forced
@@ -488,7 +509,7 @@ runRepair' removablebranch fsckresult forced referencerepo g = do
| otherwise -> unsuccessfulfinish
where
repairbranches missing = do
- (removedbranches, goodcommits) <- removeBadBranches removablebranch missing emptyGoodCommits g
+ (removedbranches, goodcommits) <- removeBadBranches' removablebranch missing emptyGoodCommits g
let remotebranches = filter isTrackingBranch removedbranches
unless (null remotebranches) $
putStrLn $ unwords
@@ -503,6 +524,16 @@ runRepair' removablebranch fsckresult forced referencerepo g = do
"Deleted these local branches, which could not be recovered due to missing objects:"
return (resetbranches ++ deletedbranches)
+ checkbadbranches missing = do
+ bad <- badBranches missing g
+ case (null bad, forced) of
+ (True, _) -> successfulfinish []
+ (False, False) -> do
+ displayList (map fromRef bad)
+ "Some git branches refer to missing objects:"
+ unsuccessfulfinish
+ (False, True) -> successfulfinish =<< repairbranches missing
+
forcerepair missing fscktruncated = do
modifiedbranches <- repairbranches missing
deindexedfiles <- rewriteIndex g
diff --git a/Git/Sha.hs b/Git/Sha.hs
index cbb66ea2d..b802c8556 100644
--- a/Git/Sha.hs
+++ b/Git/Sha.hs
@@ -1,6 +1,6 @@
{- git SHA stuff
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Git/SharedRepository.hs b/Git/SharedRepository.hs
index f3efa8fde..3aab1e39a 100644
--- a/Git/SharedRepository.hs
+++ b/Git/SharedRepository.hs
@@ -1,6 +1,6 @@
{- git core.sharedRepository handling
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Git/Types.hs b/Git/Types.hs
index 802922532..bb91a1703 100644
--- a/Git/Types.hs
+++ b/Git/Types.hs
@@ -1,6 +1,6 @@
{- git data types
-
- - Copyright 2010-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -11,6 +11,7 @@ import Network.URI
import qualified Data.Map as M
import System.Posix.Types
import Utility.SafeCommand
+import Utility.URI ()
{- Support repositories on local disk, and repositories accessed via an URL.
-
@@ -27,7 +28,7 @@ data RepoLocation
| LocalUnknown FilePath
| Url URI
| Unknown
- deriving (Show, Eq)
+ deriving (Show, Eq, Ord)
data Repo = Repo
{ location :: RepoLocation
@@ -41,7 +42,7 @@ data Repo = Repo
, gitEnv :: Maybe [(String, String)]
-- global options to pass to git when running git commands
, gitGlobalOpts :: [CommandParam]
- } deriving (Show, Eq)
+ } deriving (Show, Eq, Ord)
type RemoteName = String
diff --git a/Git/UnionMerge.hs b/Git/UnionMerge.hs
index 464200af4..d4dc35e4a 100644
--- a/Git/UnionMerge.hs
+++ b/Git/UnionMerge.hs
@@ -1,6 +1,6 @@
{- git-union-merge library
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Git/UpdateIndex.hs b/Git/UpdateIndex.hs
index 4ecd77363..55c5b3bb2 100644
--- a/Git/UpdateIndex.hs
+++ b/Git/UpdateIndex.hs
@@ -1,6 +1,6 @@
{- git-update-index library
-
- - Copyright 2011-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -19,7 +19,8 @@ module Git.UpdateIndex (
updateIndexLine,
stageFile,
unstageFile,
- stageSymlink
+ stageSymlink,
+ stageDiffTreeItem,
) where
import Common
@@ -28,9 +29,7 @@ import Git.Types
import Git.Command
import Git.FilePath
import Git.Sha
-
-import Control.Exception (bracket)
-import System.Process (std_in)
+import qualified Git.DiffTreeItem as Diff
{- Streamers are passed a callback and should feed it lines in the form
- read by update-index, and generated by ls-tree. -}
@@ -98,7 +97,10 @@ stageFile sha filetype file repo = do
unstageFile :: FilePath -> Repo -> IO Streamer
unstageFile file repo = do
p <- toTopFilePath file repo
- return $ pureStreamer $ "0 " ++ fromRef nullSha ++ "\t" ++ indexPath p
+ return $ unstageFile' p
+
+unstageFile' :: TopFilePath -> Streamer
+unstageFile' p = pureStreamer $ "0 " ++ fromRef nullSha ++ "\t" ++ indexPath p
{- A streamer that adds a symlink to the index. -}
stageSymlink :: FilePath -> Sha -> Repo -> IO Streamer
@@ -109,5 +111,11 @@ stageSymlink file sha repo = do
<*> toTopFilePath file repo
return $ pureStreamer line
+{- A streamer that applies a DiffTreeItem to the index. -}
+stageDiffTreeItem :: Diff.DiffTreeItem -> Streamer
+stageDiffTreeItem d = case toBlobType (Diff.dstmode d) of
+ Nothing -> unstageFile' (Diff.file d)
+ Just t -> pureStreamer $ updateIndexLine (Diff.dstsha d) t (Diff.file d)
+
indexPath :: TopFilePath -> InternalGitPath
indexPath = toInternalGitPath . getTopFilePath
diff --git a/Git/Url.hs b/Git/Url.hs
index d383a6aca..fa7d200dc 100644
--- a/Git/Url.hs
+++ b/Git/Url.hs
@@ -1,6 +1,6 @@
{- git repository urls
-
- - Copyright 2010, 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2010, 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Git/Version.hs b/Git/Version.hs
index 5ad1d5959..ecd12444c 100644
--- a/Git/Version.hs
+++ b/Git/Version.hs
@@ -1,43 +1,30 @@
{- git versions
-
- - Copyright 2011, 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011, 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
-module Git.Version where
+module Git.Version (
+ installed,
+ older,
+ normalize,
+ GitVersion,
+) where
import Common
+import Utility.DottedVersion
-data GitVersion = GitVersion String Integer
- deriving (Eq)
-
-instance Ord GitVersion where
- compare (GitVersion _ x) (GitVersion _ y) = compare x y
-
-instance Show GitVersion where
- show (GitVersion s _) = s
+type GitVersion = DottedVersion
installed :: IO GitVersion
installed = normalize . extract <$> readProcess "git" ["--version"]
where
- extract s = case lines s of
+ extract s = case lines s of
[] -> ""
(l:_) -> unwords $ drop 2 $ words l
-{- To compare dotted versions like 1.7.7 and 1.8, they are normalized to
- - a somewhat arbitrary integer representation. -}
-normalize :: String -> GitVersion
-normalize v = GitVersion v $
- sum $ mult 1 $ reverse $ extend precision $ take precision $
- map readi $ split "." v
- where
- extend n l = l ++ replicate (n - length l) 0
- mult _ [] = []
- mult n (x:xs) = (n*x) : mult (n*10^width) xs
- readi :: String -> Integer
- readi s = case reads s of
- ((x,_):_) -> x
- _ -> 0
- precision = 10 -- number of segments of the version to compare
- width = length "yyyymmddhhmmss" -- maximum width of a segment
+older :: String -> IO Bool
+older n = do
+ v <- installed
+ return $ v < normalize n
diff --git a/Limit.hs b/Limit.hs
index 7654842e1..030ee6a5f 100644
--- a/Limit.hs
+++ b/Limit.hs
@@ -1,6 +1,6 @@
{- user-specified limits on files to act on
-
- - Copyright 2011-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -20,7 +20,6 @@ import Types.TrustLevel
import Types.Key
import Types.Group
import Types.FileMatcher
-import Types.Limit
import Types.MetaData
import Logs.MetaData
import Logs.Group
@@ -45,21 +44,20 @@ getMatcher :: Annex (MatchInfo -> Annex Bool)
getMatcher = Utility.Matcher.matchM <$> getMatcher'
getMatcher' :: Annex (Utility.Matcher.Matcher (MatchInfo -> Annex Bool))
-getMatcher' = do
- m <- Annex.getState Annex.limit
- case m of
- Right r -> return r
- Left l -> do
- let matcher = Utility.Matcher.generate (reverse l)
- Annex.changeState $ \s ->
- s { Annex.limit = Right matcher }
- return matcher
+getMatcher' = go =<< Annex.getState Annex.limit
+ where
+ go (CompleteMatcher matcher) = return matcher
+ go (BuildingMatcher l) = do
+ let matcher = Utility.Matcher.generate (reverse l)
+ Annex.changeState $ \s ->
+ s { Annex.limit = CompleteMatcher matcher }
+ return matcher
{- Adds something to the limit list, which is built up reversed. -}
add :: Utility.Matcher.Token (MatchInfo -> Annex Bool) -> Annex ()
add l = Annex.changeState $ \s -> s { Annex.limit = prepend $ Annex.limit s }
where
- prepend (Left ls) = Left $ l:ls
+ prepend (BuildingMatcher ls) = BuildingMatcher $ l:ls
prepend _ = error "internal"
{- Adds a new token. -}
@@ -67,24 +65,24 @@ addToken :: String -> Annex ()
addToken = add . Utility.Matcher.token
{- Adds a new limit. -}
-addLimit :: Either String MatchFiles -> Annex ()
+addLimit :: Either String (MatchFiles Annex) -> Annex ()
addLimit = either error (\l -> add $ Utility.Matcher.Operation $ l S.empty)
{- Add a limit to skip files that do not match the glob. -}
addInclude :: String -> Annex ()
addInclude = addLimit . limitInclude
-limitInclude :: MkLimit
+limitInclude :: MkLimit Annex
limitInclude glob = Right $ const $ return . matchGlobFile glob
{- Add a limit to skip files that match the glob. -}
addExclude :: String -> Annex ()
addExclude = addLimit . limitExclude
-limitExclude :: MkLimit
+limitExclude :: MkLimit Annex
limitExclude glob = Right $ const $ return . not . matchGlobFile glob
-matchGlobFile :: String -> (MatchInfo -> Bool)
+matchGlobFile :: String -> MatchInfo -> Bool
matchGlobFile glob = go
where
cglob = compileGlob glob CaseSensative -- memoized
@@ -119,10 +117,10 @@ addIn s = addLimit =<< mk
else inAnnex key
{- Limit to content that is currently present on a uuid. -}
-limitPresent :: Maybe UUID -> MkLimit
+limitPresent :: Maybe UUID -> MkLimit Annex
limitPresent u _ = Right $ matchPresent u
-matchPresent :: Maybe UUID -> MatchFiles
+matchPresent :: Maybe UUID -> MatchFiles Annex
matchPresent u _ = checkKey $ \key -> do
hereu <- getUUID
if u == Just hereu || isNothing u
@@ -132,7 +130,7 @@ matchPresent u _ = checkKey $ \key -> do
return $ maybe False (`elem` us) u
{- Limit to content that is in a directory, anywhere in the repository tree -}
-limitInDir :: FilePath -> MkLimit
+limitInDir :: FilePath -> MkLimit Annex
limitInDir dir = const $ Right $ const go
where
go (MatchingFile fi) = return $ elem dir $ splitPath $ takeDirectory $ matchFile fi
@@ -143,7 +141,7 @@ limitInDir dir = const $ Right $ const go
addCopies :: String -> Annex ()
addCopies = addLimit . limitCopies
-limitCopies :: MkLimit
+limitCopies :: MkLimit Annex
limitCopies want = case split ":" want of
[v, n] -> case parsetrustspec v of
Just checker -> go n $ checktrust checker
@@ -154,8 +152,8 @@ limitCopies want = case split ":" want of
go num good = case readish num of
Nothing -> Left "bad number for copies"
Just n -> Right $ \notpresent -> checkKey $
- handle n good notpresent
- handle n good notpresent key = do
+ go' n good notpresent
+ go' n good notpresent key = do
us <- filter (`S.notMember` notpresent)
<$> (filterM good =<< Remote.keyLocations key)
return $ length us >= n
@@ -169,13 +167,13 @@ limitCopies want = case split ":" want of
addLackingCopies :: Bool -> String -> Annex ()
addLackingCopies approx = addLimit . limitLackingCopies approx
-limitLackingCopies :: Bool -> MkLimit
+limitLackingCopies :: Bool -> MkLimit Annex
limitLackingCopies approx want = case readish want of
Just needed -> Right $ \notpresent mi -> flip checkKey mi $
- handle mi needed notpresent
+ go mi needed notpresent
Nothing -> Left "bad value for number of lacking copies"
where
- handle mi needed notpresent key = do
+ go mi needed notpresent key = do
NumCopies numcopies <- if approx
then approxNumCopies
else case mi of
@@ -191,7 +189,7 @@ limitLackingCopies approx want = case readish want of
- This has a nice optimisation: When a file exists,
- its key is obviously not unused.
-}
-limitUnused :: MatchFiles
+limitUnused :: MatchFiles Annex
limitUnused _ (MatchingFile _) = return False
limitUnused _ (MatchingKey k) = S.member k <$> unusedKeys
@@ -202,7 +200,7 @@ addInAllGroup groupname = do
m <- groupMap
addLimit $ limitInAllGroup m groupname
-limitInAllGroup :: GroupMap -> MkLimit
+limitInAllGroup :: GroupMap -> MkLimit Annex
limitInAllGroup m groupname
| S.null want = Right $ const $ const $ return True
| otherwise = Right $ \notpresent -> checkKey $ check notpresent
@@ -219,7 +217,7 @@ limitInAllGroup m groupname
addInBackend :: String -> Annex ()
addInBackend = addLimit . limitInBackend
-limitInBackend :: MkLimit
+limitInBackend :: MkLimit Annex
limitInBackend name = Right $ const $ checkKey check
where
check key = pure $ keyBackendName key == name
@@ -231,32 +229,30 @@ addLargerThan = addLimit . limitSize (>)
addSmallerThan :: String -> Annex ()
addSmallerThan = addLimit . limitSize (<)
-limitSize :: (Maybe Integer -> Maybe Integer -> Bool) -> MkLimit
+limitSize :: (Maybe Integer -> Maybe Integer -> Bool) -> MkLimit Annex
limitSize vs s = case readSize dataUnits s of
Nothing -> Left "bad size"
Just sz -> Right $ go sz
where
- go sz _ (MatchingFile fi) = lookupFile fi >>= check fi sz
+ go sz _ (MatchingFile fi) = lookupFileKey fi >>= check fi sz
go sz _ (MatchingKey key) = checkkey sz key
checkkey sz key = return $ keySize key `vs` Just sz
- check _ sz (Just (key, _)) = checkkey sz key
+ check _ sz (Just key) = checkkey sz key
check fi sz Nothing = do
- filesize <- liftIO $ catchMaybeIO $
- fromIntegral . fileSize
- <$> getFileStatus (relFile fi)
+ filesize <- liftIO $ catchMaybeIO $ getFileSize (currFile fi)
return $ filesize `vs` Just sz
addMetaData :: String -> Annex ()
addMetaData = addLimit . limitMetaData
-limitMetaData :: MkLimit
+limitMetaData :: MkLimit Annex
limitMetaData s = case parseMetaData s of
Left e -> Left e
Right (f, v) ->
let cglob = compileGlob (fromMetaValue v) CaseInsensative
in Right $ const $ checkKey (check f cglob)
where
- check f cglob k = not . S.null
+ check f cglob k = not . S.null
. S.filter (matchGlob cglob . fromMetaValue)
. metaDataValues f <$> getCurrentMetaData k
@@ -274,11 +270,8 @@ addTimeLimit s = do
liftIO $ exitWith $ ExitFailure 101
else return True
-lookupFile :: FileInfo -> Annex (Maybe (Key, Backend))
-lookupFile = Backend.lookupFile . relFile
-
lookupFileKey :: FileInfo -> Annex (Maybe Key)
-lookupFileKey = (fst <$>) <$$> Backend.lookupFile . relFile
+lookupFileKey = Backend.lookupFile . currFile
checkKey :: (Key -> Annex Bool) -> MatchInfo -> Annex Bool
checkKey a (MatchingFile fi) = lookupFileKey fi >>= maybe (return False) a
diff --git a/Limit/Wanted.hs b/Limit/Wanted.hs
index 01b8da6b3..e3305398d 100644
--- a/Limit/Wanted.hs
+++ b/Limit/Wanted.hs
@@ -1,6 +1,6 @@
{- git-annex limits by wanted status
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Locations.hs b/Locations.hs
index 74cace156..02995ee4a 100644
--- a/Locations.hs
+++ b/Locations.hs
@@ -1,6 +1,6 @@
{- git-annex file locations
-
- - Copyright 2010-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2015 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -20,7 +20,6 @@ module Locations (
gitAnnexInodeSentinal,
gitAnnexInodeSentinalCache,
annexLocations,
- annexLocation,
gitAnnexDir,
gitAnnexObjectDir,
gitAnnexTmpMiscDir,
@@ -41,6 +40,8 @@ module Locations (
gitAnnexMergeDir,
gitAnnexJournalDir,
gitAnnexJournalLock,
+ gitAnnexPreCommitLock,
+ gitAnnexMergeLock,
gitAnnexIndex,
gitAnnexIndexStatus,
gitAnnexViewIndex,
@@ -57,7 +58,7 @@ module Locations (
gitAnnexRemotesDir,
gitAnnexAssistantDefaultDir,
isLinkToAnnex,
- annexHashes,
+ HashLevels(..),
hashDirMixed,
hashDirLower,
preSanitizeKeyName,
@@ -65,16 +66,17 @@ module Locations (
prop_idempotent_fileKey
) where
-import Data.Bits
-import Data.Word
-import Data.Hash.MD5
import Data.Char
+import Data.Default
import Common
-import Types
+import Types.GitConfig
import Types.Key
import Types.UUID
+import Types.Difference
import qualified Git
+import Git.FilePath
+import Annex.DirHashes
{- Conventions:
-
@@ -85,8 +87,8 @@ import qualified Git
- Everything else should not end in a trailing path sepatator.
-
- Only functions (with names starting with "git") that build a path
- - based on a git repository should return an absolute path.
- - Everything else should use relative paths.
+ - based on a git repository should return full path relative to the git
+ - repository. Everything else returns path segments.
-}
{- The directory git annex uses for local state, relative to the .git
@@ -100,13 +102,17 @@ objectDir :: FilePath
objectDir = addTrailingPathSeparator $ annexDir </> "objects"
{- Annexed file's possible locations relative to the .git directory.
- - There are two different possibilities, using different hashes. -}
-annexLocations :: Key -> [FilePath]
-annexLocations key = map (annexLocation key) annexHashes
-annexLocation :: Key -> Hasher -> FilePath
-annexLocation key hasher = objectDir </> keyPath key hasher
+ - There are two different possibilities, using different hashes.
+ -
+ - Also, some repositories have a Difference in hash directory depth.
+ -}
+annexLocations :: GitConfig -> Key -> [FilePath]
+annexLocations config key = map (annexLocation config key) dirHashes
-{- Annexed object's absolute location in a repository.
+annexLocation :: GitConfig -> Key -> (HashLevels -> Hasher) -> FilePath
+annexLocation config key hasher = objectDir </> keyPath key (hasher $ objectHashLevels config)
+
+{- Annexed object's location in a repository.
-
- When there are multiple possible locations, returns the one where the
- file is actually present.
@@ -118,35 +124,40 @@ annexLocation key hasher = objectDir </> keyPath key hasher
- the actual location of the file's content.
-}
gitAnnexLocation :: Key -> Git.Repo -> GitConfig -> IO FilePath
-gitAnnexLocation key r config = gitAnnexLocation' key r (annexCrippledFileSystem config)
-gitAnnexLocation' :: Key -> Git.Repo -> Bool -> IO FilePath
-gitAnnexLocation' key r crippled
+gitAnnexLocation key r config = gitAnnexLocation' key r config (annexCrippledFileSystem config)
+gitAnnexLocation' :: Key -> Git.Repo -> GitConfig -> Bool -> IO FilePath
+gitAnnexLocation' key r config crippled
{- Bare repositories default to hashDirLower for new
- content, as it's more portable.
-
- Repositories on filesystems that are crippled also use
- hashDirLower, since they do not use symlinks and it's
- - more portable. -}
- | Git.repoIsLocalBare r || crippled =
- check $ map inrepo $ annexLocations key
+ - more portable.
+ -
+ - ObjectHashLower can also be set to force it.
+ -}
+ | Git.repoIsLocalBare r
+ || crippled
+ || hasDifference ObjectHashLower (annexDifferences config) =
+ check $ map inrepo $ annexLocations config key
{- Non-bare repositories only use hashDirMixed, so
- don't need to do any work to check if the file is
- present. -}
- | otherwise = return $ inrepo $ annexLocation key hashDirMixed
+ | otherwise = return $ inrepo $ annexLocation config key hashDirMixed
where
inrepo d = Git.localGitDir r </> d
check locs@(l:_) = fromMaybe l <$> firstM doesFileExist locs
check [] = error "internal"
{- Calculates a symlink to link a file to an annexed object. -}
-gitAnnexLink :: FilePath -> Key -> Git.Repo -> IO FilePath
-gitAnnexLink file key r = do
- cwd <- getCurrentDirectory
- let absfile = fromMaybe whoops $ absNormPathUnix cwd file
- loc <- gitAnnexLocation' key r False
- return $ relPathDirToFile (parentDir absfile) loc
+gitAnnexLink :: FilePath -> Key -> Git.Repo -> GitConfig -> IO FilePath
+gitAnnexLink file key r config = do
+ currdir <- getCurrentDirectory
+ let absfile = fromMaybe whoops $ absNormPathUnix currdir file
+ loc <- gitAnnexLocation' key r config False
+ toInternalGitPath <$> relPathDirToFile (parentDir absfile) loc
where
- whoops = error $ "unable to normalize " ++ file
+ whoops = error $ "unable to normalize " ++ file
{- File used to lock a key's content. -}
gitAnnexContentLock :: Key -> Git.Repo -> GitConfig -> IO FilePath
@@ -257,6 +268,14 @@ gitAnnexJournalDir r = addTrailingPathSeparator $ gitAnnexDir r </> "journal"
gitAnnexJournalLock :: Git.Repo -> FilePath
gitAnnexJournalLock r = gitAnnexDir r </> "journal.lck"
+{- Lock file for the pre-commit hook. -}
+gitAnnexPreCommitLock :: Git.Repo -> FilePath
+gitAnnexPreCommitLock r = gitAnnexDir r </> "precommit.lck"
+
+{- Lock file for direct mode merge. -}
+gitAnnexMergeLock :: Git.Repo -> FilePath
+gitAnnexMergeLock r = gitAnnexDir r </> "merge.lck"
+
{- .git/annex/index is used to stage changes to the git-annex branch -}
gitAnnexIndex :: Git.Repo -> FilePath
gitAnnexIndex r = gitAnnexDir r </> "index"
@@ -346,7 +365,7 @@ isLinkToAnnex s = (pathSeparator:objectDir) `isInfixOf` s
preSanitizeKeyName :: String -> String
preSanitizeKeyName = concatMap escape
where
- escape c
+ escape c
| isAsciiUpper c || isAsciiLower c || isDigit c = [c]
| c `elem` ".-_ " = [c] -- common, assumed safe
| c `elem` "/%:" = [c] -- handled by keyFile
@@ -389,9 +408,9 @@ prop_idempotent_fileKey s
where
k = stubKey { keyName = s, keyBackendName = "test" }
-{- A location to store a key on the filesystem. A directory hash is used,
- - to protect against filesystems that dislike having many items in a
- - single directory.
+{- A location to store a key on a special remote that uses a filesystem.
+ - A directory hash is used, to protect against filesystems that dislike
+ - having many items in a single directory.
-
- The file is put in a directory with the same name, this allows
- write-protecting the directory to avoid accidental deletion of the file.
@@ -401,43 +420,11 @@ keyPath key hasher = hasher key </> f </> f
where
f = keyFile key
-{- All possibile locations to store a key using different directory hashes. -}
-keyPaths :: Key -> [FilePath]
-keyPaths key = map (keyPath key) annexHashes
-
-{- Two different directory hashes may be used. The mixed case hash
- - came first, and is fine, except for the problem of case-strict
- - filesystems such as Linux VFAT (mounted with shortname=mixed),
- - which do not allow using a directory "XX" when "xx" already exists.
- - To support that, most repositories use the lower case hash for new data. -}
-type Hasher = Key -> FilePath
-annexHashes :: [Hasher]
-annexHashes = [hashDirLower, hashDirMixed]
-
-hashDirMixed :: Hasher
-hashDirMixed k = addTrailingPathSeparator $ take 2 dir </> drop 2 dir
- where
- dir = take 4 $ display_32bits_as_dir =<< [a,b,c,d]
- ABCD (a,b,c,d) = md5 $ md5FilePath $ key2file k
-
-hashDirLower :: Hasher
-hashDirLower k = addTrailingPathSeparator $ take 3 dir </> drop 3 dir
- where
- dir = take 6 $ md5s $ md5FilePath $ key2file k
-
-{- modified version of display_32bits_as_hex from Data.Hash.MD5
- - Copyright (C) 2001 Ian Lynagh
- - License: Either BSD or GPL
+{- All possibile locations to store a key in a special remote
+ - using different directory hashes.
+ -
+ - This is compatible with the annexLocations, for interoperability between
+ - special remotes and git-annex repos.
-}
-display_32bits_as_dir :: Word32 -> String
-display_32bits_as_dir w = trim $ swap_pairs cs
- where
- -- Need 32 characters to use. To avoid inaverdently making
- -- a real word, use letters that appear less frequently.
- chars = ['0'..'9'] ++ "zqjxkmvwgpfZQJXKMVWGPF"
- cs = map (\x -> getc $ (shiftR w (6*x)) .&. 31) [0..7]
- getc n = chars !! fromIntegral n
- swap_pairs (x1:x2:xs) = x2:x1:swap_pairs xs
- swap_pairs _ = []
- -- Last 2 will always be 00, so omit.
- trim = take 6
+keyPaths :: Key -> [FilePath]
+keyPaths key = map (\h -> keyPath key (h def)) dirHashes
diff --git a/Logs.hs b/Logs.hs
index 2a2fc430e..1f8cf9f9c 100644
--- a/Logs.hs
+++ b/Logs.hs
@@ -1,6 +1,6 @@
{- git-annex log file names
-
- - Copyright 2013-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2013-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -9,11 +9,13 @@ module Logs where
import Common.Annex
import Types.Key
+import Annex.DirHashes
{- There are several varieties of log file formats. -}
data LogVariety
= UUIDBasedLog
| NewUUIDBasedLog
+ | ChunkLog Key
| PresenceLog Key
| OtherLog
deriving (Show)
@@ -24,6 +26,7 @@ getLogVariety :: FilePath -> Maybe LogVariety
getLogVariety f
| f `elem` topLevelUUIDBasedLogs = Just UUIDBasedLog
| isRemoteStateLog f = Just NewUUIDBasedLog
+ | isChunkLog f = ChunkLog <$> chunkLogFileKey f
| isMetaDataLog f || f `elem` otherLogs = Just OtherLog
| otherwise = PresenceLog <$> firstJust (presenceLogs f)
@@ -35,7 +38,9 @@ topLevelUUIDBasedLogs =
, trustLog
, groupLog
, preferredContentLog
+ , requiredContentLog
, scheduleLog
+ , differenceLog
]
{- All the ways to get a key from a presence log file -}
@@ -70,36 +75,44 @@ groupLog = "group.log"
preferredContentLog :: FilePath
preferredContentLog = "preferred-content.log"
+requiredContentLog :: FilePath
+requiredContentLog = "required-content.log"
+
groupPreferredContentLog :: FilePath
groupPreferredContentLog = "group-preferred-content.log"
scheduleLog :: FilePath
scheduleLog = "schedule.log"
+differenceLog :: FilePath
+differenceLog = "difference.log"
+
{- The pathname of the location log file for a given key. -}
-locationLogFile :: Key -> String
-locationLogFile key = hashDirLower key ++ keyFile key ++ ".log"
+locationLogFile :: GitConfig -> Key -> String
+locationLogFile config key = branchHashDir config key </> keyFile key ++ ".log"
{- Converts a pathname into a key if it's a location log. -}
locationLogFileKey :: FilePath -> Maybe Key
locationLogFileKey path
| ["remote", "web"] `isPrefixOf` splitDirectories dir = Nothing
- | ext == ".log" = fileKey base
- | otherwise = Nothing
+ | ext == ".log" = fileKey base
+ | otherwise = Nothing
where
(dir, file) = splitFileName path
- (base, ext) = splitAt (length file - 4) file
+ (base, ext) = splitAt (length file - 4) file
{- The filename of the url log for a given key. -}
-urlLogFile :: Key -> FilePath
-urlLogFile key = hashDirLower key </> keyFile key ++ urlLogExt
+urlLogFile :: GitConfig -> Key -> FilePath
+urlLogFile config key = branchHashDir config key </> keyFile key ++ urlLogExt
{- Old versions stored the urls elsewhere. -}
-oldurlLogs :: Key -> [FilePath]
-oldurlLogs key =
- [ "remote/web" </> hashDirLower key </> key2file key ++ ".log"
- , "remote/web" </> hashDirLower key </> keyFile key ++ ".log"
+oldurlLogs :: GitConfig -> Key -> [FilePath]
+oldurlLogs config key =
+ [ "remote/web" </> hdir </> key2file key ++ ".log"
+ , "remote/web" </> hdir </> keyFile key ++ ".log"
]
+ where
+ hdir = branchHashDir config key
urlLogExt :: String
urlLogExt = ".log.web"
@@ -111,7 +124,7 @@ urlLogFileKey path
| ext == urlLogExt = fileKey base
| otherwise = Nothing
where
- file = takeFileName path
+ file = takeFileName path
(base, ext) = splitAt (length file - extlen) file
extlen = length urlLogExt
@@ -120,8 +133,9 @@ isUrlLog :: FilePath -> Bool
isUrlLog file = urlLogExt `isSuffixOf` file
{- The filename of the remote state log for a given key. -}
-remoteStateLogFile :: Key -> FilePath
-remoteStateLogFile key = hashDirLower key </> keyFile key ++ remoteStateLogExt
+remoteStateLogFile :: GitConfig -> Key -> FilePath
+remoteStateLogFile config key = branchHashDir config key
+ </> keyFile key ++ remoteStateLogExt
remoteStateLogExt :: String
remoteStateLogExt = ".log.rmt"
@@ -129,33 +143,31 @@ remoteStateLogExt = ".log.rmt"
isRemoteStateLog :: FilePath -> Bool
isRemoteStateLog path = remoteStateLogExt `isSuffixOf` path
+{- The filename of the chunk log for a given key. -}
+chunkLogFile :: GitConfig -> Key -> FilePath
+chunkLogFile config key = branchHashDir config key </> keyFile key ++ chunkLogExt
+
+chunkLogFileKey :: FilePath -> Maybe Key
+chunkLogFileKey path
+ | ext == chunkLogExt = fileKey base
+ | otherwise = Nothing
+ where
+ file = takeFileName path
+ (base, ext) = splitAt (length file - extlen) file
+ extlen = length chunkLogExt
+
+chunkLogExt :: String
+chunkLogExt = ".log.cnk"
+
+isChunkLog :: FilePath -> Bool
+isChunkLog path = chunkLogExt `isSuffixOf` path
+
{- The filename of the metadata log for a given key. -}
-metaDataLogFile :: Key -> FilePath
-metaDataLogFile key = hashDirLower key </> keyFile key ++ metaDataLogExt
+metaDataLogFile :: GitConfig -> Key -> FilePath
+metaDataLogFile config key = branchHashDir config key </> keyFile key ++ metaDataLogExt
metaDataLogExt :: String
metaDataLogExt = ".log.met"
isMetaDataLog :: FilePath -> Bool
isMetaDataLog path = metaDataLogExt `isSuffixOf` path
-
-prop_logs_sane :: Key -> Bool
-prop_logs_sane dummykey = and
- [ isNothing (getLogVariety "unknown")
- , expect isUUIDBasedLog (getLogVariety uuidLog)
- , expect isPresenceLog (getLogVariety $ locationLogFile dummykey)
- , expect isPresenceLog (getLogVariety $ urlLogFile dummykey)
- , expect isNewUUIDBasedLog (getLogVariety $ remoteStateLogFile dummykey)
- , expect isOtherLog (getLogVariety $ metaDataLogFile dummykey)
- , expect isOtherLog (getLogVariety $ numcopiesLog)
- ]
- where
- expect = maybe False
- isUUIDBasedLog UUIDBasedLog = True
- isUUIDBasedLog _ = False
- isNewUUIDBasedLog NewUUIDBasedLog = True
- isNewUUIDBasedLog _ = False
- isPresenceLog (PresenceLog k) = k == dummykey
- isPresenceLog _ = False
- isOtherLog OtherLog = True
- isOtherLog _ = False
diff --git a/Logs/Chunk.hs b/Logs/Chunk.hs
new file mode 100644
index 000000000..8f0e7cedb
--- /dev/null
+++ b/Logs/Chunk.hs
@@ -0,0 +1,55 @@
+{- Chunk logs.
+ -
+ - An object can be stored in chunked for on a remote; these logs keep
+ - track of the chunk size used, and the number of chunks.
+ -
+ - It's possible for a single object to be stored multiple times on the
+ - same remote using different chunk sizes. So, while this is a MapLog, it
+ - is not a normal UUIDBased log. Intead, it's a map from UUID and chunk
+ - size to number of chunks.
+ -
+ - Format: "timestamp uuid:chunksize chunkcount"
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Logs.Chunk (
+ ChunkMethod(..),
+ ChunkSize,
+ ChunkCount,
+ chunksStored,
+ chunksRemoved,
+ getCurrentChunks,
+) where
+
+import Common.Annex
+import Logs
+import Logs.MapLog
+import qualified Annex.Branch
+import Logs.Chunk.Pure
+import qualified Annex
+
+import qualified Data.Map as M
+import Data.Time.Clock.POSIX
+
+chunksStored :: UUID -> Key -> ChunkMethod -> ChunkCount -> Annex ()
+chunksStored u k chunkmethod chunkcount = do
+ ts <- liftIO getPOSIXTime
+ config <- Annex.getGitConfig
+ Annex.Branch.change (chunkLogFile config k) $
+ showLog . changeMapLog ts (u, chunkmethod) chunkcount . parseLog
+
+chunksRemoved :: UUID -> Key -> ChunkMethod -> Annex ()
+chunksRemoved u k chunkmethod = chunksStored u k chunkmethod 0
+
+getCurrentChunks :: UUID -> Key -> Annex [(ChunkMethod, ChunkCount)]
+getCurrentChunks u k = do
+ config <- Annex.getGitConfig
+ select . parseLog <$> Annex.Branch.get (chunkLogFile config k)
+ where
+ select = filter (\(_m, ct) -> ct > 0)
+ . map (\((_ku, m), l) -> (m, value l))
+ . M.toList
+ . M.filterWithKey (\(ku, _m) _ -> ku == u)
diff --git a/Logs/Chunk/Pure.hs b/Logs/Chunk/Pure.hs
new file mode 100644
index 000000000..af209d7e1
--- /dev/null
+++ b/Logs/Chunk/Pure.hs
@@ -0,0 +1,55 @@
+{- Chunk logs, pure operations.
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Logs.Chunk.Pure
+ ( ChunkMethod(..)
+ , ChunkSize
+ , ChunkCount
+ , ChunkLog
+ , parseLog
+ , showLog
+ ) where
+
+import Common.Annex
+import Logs.MapLog
+import Data.Int
+
+-- Currently chunks are all fixed size, but other chunking methods
+-- may be added.
+data ChunkMethod = FixedSizeChunks ChunkSize | UnknownChunks String
+ deriving (Ord, Eq, Show)
+
+type ChunkSize = Int64
+
+-- 0 when chunks are no longer present
+type ChunkCount = Integer
+
+type ChunkLog = MapLog (UUID, ChunkMethod) ChunkCount
+
+parseChunkMethod :: String -> ChunkMethod
+parseChunkMethod s = maybe (UnknownChunks s) FixedSizeChunks (readish s)
+
+showChunkMethod :: ChunkMethod -> String
+showChunkMethod (FixedSizeChunks sz) = show sz
+showChunkMethod (UnknownChunks s) = s
+
+parseLog :: String -> ChunkLog
+parseLog = parseMapLog fieldparser valueparser
+ where
+ fieldparser s =
+ let (u,m) = separate (== sep) s
+ in Just (toUUID u, parseChunkMethod m)
+ valueparser = readish
+
+showLog :: ChunkLog -> String
+showLog = showMapLog fieldshower valueshower
+ where
+ fieldshower (u, m) = fromUUID u ++ sep : showChunkMethod m
+ valueshower = show
+
+sep :: Char
+sep = ':'
diff --git a/Logs/Difference.hs b/Logs/Difference.hs
new file mode 100644
index 000000000..fcebffee9
--- /dev/null
+++ b/Logs/Difference.hs
@@ -0,0 +1,41 @@
+{- git-annex difference log
+ -
+ - Copyright 2015 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Logs.Difference (
+ recordDifferences,
+ recordedDifferences,
+ recordedDifferencesFor,
+ module Logs.Difference.Pure
+) where
+
+import Data.Monoid
+import Data.Time.Clock.POSIX
+import qualified Data.Map as M
+
+import Common.Annex
+import Types.Difference
+import qualified Annex.Branch
+import Logs
+import Logs.UUIDBased
+import Logs.Difference.Pure
+
+recordDifferences :: Differences -> UUID -> Annex ()
+recordDifferences (Differences differences) uuid = do
+ ts <- liftIO getPOSIXTime
+ Annex.Branch.change differenceLog $
+ showLog id . changeLog ts uuid (show differences) . parseLog Just
+recordDifferences UnknownDifferences _ = return ()
+
+-- Map of UUIDs that have Differences recorded.
+-- If a new version of git-annex has added a Difference this version
+-- doesn't know about, it will contain UnknownDifferences.
+recordedDifferences :: Annex (M.Map UUID Differences)
+recordedDifferences = parseDifferencesLog <$> Annex.Branch.get differenceLog
+
+recordedDifferencesFor :: UUID -> Annex Differences
+recordedDifferencesFor u = fromMaybe mempty . M.lookup u
+ <$> recordedDifferences
diff --git a/Logs/Difference/Pure.hs b/Logs/Difference/Pure.hs
new file mode 100644
index 000000000..25f3844d6
--- /dev/null
+++ b/Logs/Difference/Pure.hs
@@ -0,0 +1,25 @@
+{- git-annex difference log, pure functions
+ -
+ - Copyright 2015 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Logs.Difference.Pure (
+ allDifferences,
+ parseDifferencesLog,
+) where
+
+import Data.Monoid
+import qualified Data.Map as M
+
+import Common.Annex
+import Types.Difference
+import Logs.UUIDBased
+
+parseDifferencesLog :: String -> (M.Map UUID Differences)
+parseDifferencesLog = simpleMap . parseLog (Just . readDifferences)
+
+-- The sum of all recorded differences, across all UUIDs.
+allDifferences :: M.Map UUID Differences -> Differences
+allDifferences = mconcat . M.elems
diff --git a/Logs/FsckResults.hs b/Logs/FsckResults.hs
index 619dd586c..e6db9a076 100644
--- a/Logs/FsckResults.hs
+++ b/Logs/FsckResults.hs
@@ -1,6 +1,6 @@
{- git-annex fsck results log files
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -28,7 +28,7 @@ writeFsckResults u fsckresults = do
| S.null s -> nukeFile logfile
| otherwise -> store s t logfile
where
- store s t logfile = do
+ store s t logfile = do
createDirectoryIfMissing True (parentDir logfile)
liftIO $ viaTmp writeFile logfile $ serialize s t
serialize s t =
diff --git a/Logs/Group.hs b/Logs/Group.hs
index 3f88b627d..3725c046c 100644
--- a/Logs/Group.hs
+++ b/Logs/Group.hs
@@ -1,6 +1,6 @@
{- git-annex group log
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Logs/Location.hs b/Logs/Location.hs
index cb1e415fd..7c6888c0b 100644
--- a/Logs/Location.hs
+++ b/Logs/Location.hs
@@ -8,7 +8,7 @@
- Repositories record their UUID and the date when they --get or --drop
- a value.
-
- - Copyright 2010-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -29,6 +29,7 @@ import Logs
import Logs.Presence
import Annex.UUID
import Git.Types (RefDate)
+import qualified Annex
{- Log a change in the presence of a key's value in current repository. -}
logStatus :: Key -> LogStatus -> Annex ()
@@ -38,7 +39,9 @@ logStatus key s = do
{- Log a change in the presence of a key's value in a repository. -}
logChange :: Key -> UUID -> LogStatus -> Annex ()
-logChange key (UUID u) s = addLog (locationLogFile key) =<< logNow s u
+logChange key (UUID u) s = do
+ config <- Annex.getGitConfig
+ addLog (locationLogFile config key) =<< logNow s u
logChange _ NoUUID _ = noop
{- Returns a list of repository UUIDs that, according to the log, have
@@ -51,7 +54,9 @@ loggedLocationsHistorical :: RefDate -> Key -> Annex [UUID]
loggedLocationsHistorical = getLoggedLocations . historicalLog
getLoggedLocations :: (FilePath -> Annex [String]) -> Key -> Annex [UUID]
-getLoggedLocations getter key = map toUUID <$> (getter . locationLogFile) key
+getLoggedLocations getter key = do
+ config <- Annex.getGitConfig
+ map toUUID <$> (getter . locationLogFile config) key
{- Finds all keys that have location log information.
- (There may be duplicate keys in the list.) -}
diff --git a/Logs/MapLog.hs b/Logs/MapLog.hs
index 1725ef953..3c7eef26b 100644
--- a/Logs/MapLog.hs
+++ b/Logs/MapLog.hs
@@ -4,7 +4,7 @@
-
- A line of the log will look like: "timestamp field value"
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -15,7 +15,7 @@ import qualified Data.Map as M
import Data.Time.Clock.POSIX
import Data.Time
import System.Locale
-
+
import Common
data TimeStamp = Unknown | Date POSIXTime
diff --git a/Logs/MetaData.hs b/Logs/MetaData.hs
index b682ca005..ed4e2363e 100644
--- a/Logs/MetaData.hs
+++ b/Logs/MetaData.hs
@@ -18,7 +18,7 @@
- and so foo currently has no value.
-
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -38,6 +38,7 @@ import Common.Annex
import Types.MetaData
import Annex.MetaData.StandardFields
import qualified Annex.Branch
+import qualified Annex
import Logs
import Logs.SingleValue
@@ -52,7 +53,9 @@ instance SingleValueSerializable MetaData where
deserialize = Types.MetaData.deserialize
getMetaDataLog :: Key -> Annex (Log MetaData)
-getMetaDataLog = readLog . metaDataLogFile
+getMetaDataLog key = do
+ config <- Annex.getGitConfig
+ readLog $ metaDataLogFile config key
{- Go through the log from oldest to newest, and combine it all
- into a single MetaData representing the current state.
@@ -67,7 +70,7 @@ getCurrentMetaData k = do
return $ currentMetaData $ unionMetaData loggedmeta
(lastchanged ls loggedmeta)
where
- lastchanged [] _ = emptyMetaData
+ lastchanged [] _ = emptyMetaData
lastchanged ls (MetaData currentlyset) =
let m = foldl' (flip M.union) M.empty (map genlastchanged ls)
in MetaData $
@@ -95,10 +98,14 @@ addMetaData k metadata = addMetaData' k metadata =<< liftIO getPOSIXTime
- will tend to be generated across the different log files, and so
- git will be able to pack the data more efficiently. -}
addMetaData' :: Key -> MetaData -> POSIXTime -> Annex ()
-addMetaData' k (MetaData m) now = Annex.Branch.change (metaDataLogFile k) $
- showLog . simplifyLog
- . S.insert (LogEntry now metadata)
- . parseLog
+addMetaData' k d@(MetaData m) now
+ | d == emptyMetaData = noop
+ | otherwise = do
+ config <- Annex.getGitConfig
+ Annex.Branch.change (metaDataLogFile config k) $
+ showLog . simplifyLog
+ . S.insert (LogEntry now metadata)
+ . parseLog
where
metadata = MetaData $ M.filterWithKey (\f _ -> not (isLastChangedField f)) m
@@ -179,6 +186,7 @@ copyMetaData oldkey newkey
| oldkey == newkey = noop
| otherwise = do
l <- getMetaDataLog oldkey
- unless (S.null l) $
- Annex.Branch.change (metaDataLogFile newkey) $
+ unless (S.null l) $ do
+ config <- Annex.getGitConfig
+ Annex.Branch.change (metaDataLogFile config newkey) $
const $ showLog l
diff --git a/Logs/NumCopies.hs b/Logs/NumCopies.hs
index 5cce61ce6..3fc29c2f2 100644
--- a/Logs/NumCopies.hs
+++ b/Logs/NumCopies.hs
@@ -1,6 +1,6 @@
{- git-annex numcopies log
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Logs/PreferredContent.hs b/Logs/PreferredContent.hs
index 5580c062d..6c885041a 100644
--- a/Logs/PreferredContent.hs
+++ b/Logs/PreferredContent.hs
@@ -1,21 +1,25 @@
{- git-annex preferred content matcher configuration
-
- - Copyright 2012-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Logs.PreferredContent (
- preferredContentLog,
preferredContentSet,
+ requiredContentSet,
groupPreferredContentSet,
isPreferredContent,
+ isRequiredContent,
preferredContentMap,
- preferredContentMapLoad,
preferredContentMapRaw,
+ requiredContentMap,
+ requiredContentMapRaw,
groupPreferredContentMapRaw,
checkPreferredContentExpression,
setStandardGroup,
+ defaultStandardGroup,
+ preferredRequiredMapsLoad,
) where
import qualified Data.Map as M
@@ -28,43 +32,57 @@ import qualified Annex.Branch
import qualified Annex
import Logs
import Logs.UUIDBased
-import qualified Utility.Matcher
+import Utility.Matcher hiding (tokens)
import Annex.FileMatcher
import Annex.UUID
-import Types.Limit
import Types.Group
import Types.Remote (RemoteConfig)
import Logs.Group
import Logs.Remote
+import Types.FileMatcher
import Types.StandardGroups
import Limit
{- Checks if a file is preferred content for the specified repository
- (or the current repository if none is specified). -}
isPreferredContent :: Maybe UUID -> AssumeNotPresent -> Maybe Key -> AssociatedFile -> Bool -> Annex Bool
-isPreferredContent mu notpresent mkey afile def = do
+isPreferredContent = checkMap preferredContentMap
+
+isRequiredContent :: Maybe UUID -> AssumeNotPresent -> Maybe Key -> AssociatedFile -> Bool -> Annex Bool
+isRequiredContent = checkMap requiredContentMap
+
+checkMap :: Annex (FileMatcherMap Annex) -> Maybe UUID -> AssumeNotPresent -> Maybe Key -> AssociatedFile -> Bool -> Annex Bool
+checkMap getmap mu notpresent mkey afile d = do
u <- maybe getUUID return mu
- m <- preferredContentMap
+ m <- getmap
case M.lookup u m of
- Nothing -> return def
- Just matcher -> checkMatcher matcher mkey afile notpresent def
+ Nothing -> return d
+ Just matcher -> checkMatcher matcher mkey afile notpresent d
-{- The map is cached for speed. -}
-preferredContentMap :: Annex Annex.PreferredContentMap
-preferredContentMap = maybe preferredContentMapLoad return
+preferredContentMap :: Annex (FileMatcherMap Annex)
+preferredContentMap = maybe (fst <$> preferredRequiredMapsLoad) return
=<< Annex.getState Annex.preferredcontentmap
-{- Loads the map, updating the cache. -}
-preferredContentMapLoad :: Annex Annex.PreferredContentMap
-preferredContentMapLoad = do
+requiredContentMap :: Annex (FileMatcherMap Annex)
+requiredContentMap = maybe (snd <$> preferredRequiredMapsLoad) return
+ =<< Annex.getState Annex.requiredcontentmap
+
+preferredRequiredMapsLoad :: Annex (FileMatcherMap Annex, FileMatcherMap Annex)
+preferredRequiredMapsLoad = do
groupmap <- groupMap
configmap <- readRemoteLog
- groupwantedmap <- groupPreferredContentMapRaw
- m <- simpleMap
- . parseLogWithUUID ((Just .) . makeMatcher groupmap configmap groupwantedmap)
- <$> Annex.Branch.get preferredContentLog
- Annex.changeState $ \s -> s { Annex.preferredcontentmap = Just m }
- return m
+ let genmap l gm = simpleMap
+ . parseLogWithUUID ((Just .) . makeMatcher groupmap configmap gm)
+ <$> Annex.Branch.get l
+ pc <- genmap preferredContentLog =<< groupPreferredContentMapRaw
+ rc <- genmap requiredContentLog M.empty
+ -- Required content is implicitly also preferred content, so OR
+ let m = M.unionWith MOr pc rc
+ Annex.changeState $ \s -> s
+ { Annex.preferredcontentmap = Just m
+ , Annex.requiredcontentmap = Just rc
+ }
+ return (m, rc)
{- This intentionally never fails, even on unparsable expressions,
- because the configuration is shared among repositories and newer
@@ -75,11 +93,11 @@ makeMatcher
-> M.Map Group PreferredContentExpression
-> UUID
-> PreferredContentExpression
- -> FileMatcher
+ -> FileMatcher Annex
makeMatcher groupmap configmap groupwantedmap u = go True True
where
go expandstandard expandgroupwanted expr
- | null (lefts tokens) = Utility.Matcher.generate $ rights tokens
+ | null (lefts tokens) = generate $ rights tokens
| otherwise = unknownMatcher u
where
tokens = exprParser matchstandard matchgroupwanted groupmap configmap (Just u) expr
@@ -102,10 +120,10 @@ makeMatcher groupmap configmap groupwantedmap u = go True True
-
- This avoid unwanted/expensive changes to the content, until the problem
- is resolved. -}
-unknownMatcher :: UUID -> FileMatcher
-unknownMatcher u = Utility.Matcher.generate [present]
+unknownMatcher :: UUID -> FileMatcher Annex
+unknownMatcher u = generate [present]
where
- present = Utility.Matcher.Operation $ matchPresent (Just u)
+ present = Operation $ matchPresent (Just u)
{- Checks if an expression can be parsed, if not returns Just error -}
checkPreferredContentExpression :: PreferredContentExpression -> Maybe String
@@ -116,10 +134,20 @@ checkPreferredContentExpression expr = case parsedToMatcher tokens of
tokens = exprParser matchAll matchAll emptyGroupMap M.empty Nothing expr
{- Puts a UUID in a standard group, and sets its preferred content to use
- - the standard expression for that group, unless something is already set. -}
+ - the standard expression for that group (unless preferred content is
+ - already set). -}
setStandardGroup :: UUID -> StandardGroup -> Annex ()
setStandardGroup u g = do
groupSet u $ S.singleton $ fromStandardGroup g
- m <- preferredContentMap
- unless (isJust $ M.lookup u m) $
+ unlessM (isJust . M.lookup u <$> preferredContentMap) $
preferredContentSet u "standard"
+
+{- Avoids overwriting the UUID's standard group or preferred content
+ - when it's already been configured. -}
+defaultStandardGroup :: UUID -> StandardGroup -> Annex ()
+defaultStandardGroup u g =
+ unlessM (hasgroup <||> haspc) $
+ setStandardGroup u g
+ where
+ hasgroup = not . S.null <$> lookupGroups u
+ haspc = isJust . M.lookup u <$> preferredContentMap
diff --git a/Logs/PreferredContent/Raw.hs b/Logs/PreferredContent/Raw.hs
index ce91c2dcd..119261ab8 100644
--- a/Logs/PreferredContent/Raw.hs
+++ b/Logs/PreferredContent/Raw.hs
@@ -1,6 +1,6 @@
{- unparsed preferred content expressions
-
- - Copyright 2012-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -21,14 +21,23 @@ import Types.Group
{- Changes the preferred content configuration of a remote. -}
preferredContentSet :: UUID -> PreferredContentExpression -> Annex ()
-preferredContentSet uuid@(UUID _) val = do
+preferredContentSet = setLog preferredContentLog
+
+requiredContentSet :: UUID -> PreferredContentExpression -> Annex ()
+requiredContentSet = setLog requiredContentLog
+
+setLog :: FilePath -> UUID -> PreferredContentExpression -> Annex ()
+setLog logfile uuid@(UUID _) val = do
ts <- liftIO getPOSIXTime
- Annex.Branch.change preferredContentLog $
+ Annex.Branch.change logfile $
showLog id
. changeLog ts uuid val
. parseLog Just
- Annex.changeState $ \s -> s { Annex.preferredcontentmap = Nothing }
-preferredContentSet NoUUID _ = error "unknown UUID; cannot modify"
+ Annex.changeState $ \s -> s
+ { Annex.preferredcontentmap = Nothing
+ , Annex.requiredcontentmap = Nothing
+ }
+setLog _ NoUUID _ = error "unknown UUID; cannot modify"
{- Changes the preferred content configuration of a group. -}
groupPreferredContentSet :: Group -> PreferredContentExpression -> Annex ()
@@ -44,6 +53,10 @@ preferredContentMapRaw :: Annex (M.Map UUID PreferredContentExpression)
preferredContentMapRaw = simpleMap . parseLog Just
<$> Annex.Branch.get preferredContentLog
+requiredContentMapRaw :: Annex (M.Map UUID PreferredContentExpression)
+requiredContentMapRaw = simpleMap . parseLog Just
+ <$> Annex.Branch.get requiredContentLog
+
groupPreferredContentMapRaw :: Annex (M.Map Group PreferredContentExpression)
groupPreferredContentMapRaw = simpleMap . parseMapLog Just Just
<$> Annex.Branch.get groupPreferredContentLog
diff --git a/Logs/Presence.hs b/Logs/Presence.hs
index 7545f5afc..cb21adfb3 100644
--- a/Logs/Presence.hs
+++ b/Logs/Presence.hs
@@ -6,7 +6,7 @@
- A line of the log will look like: "date N INFO"
- Where N=1 when the INFO is present, and 0 otherwise.
-
- - Copyright 2010-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Logs/Presence/Pure.hs b/Logs/Presence/Pure.hs
index ffeb78b26..88f18435f 100644
--- a/Logs/Presence/Pure.hs
+++ b/Logs/Presence/Pure.hs
@@ -1,6 +1,6 @@
{- git-annex presence log, pure operations
-
- - Copyright 2010-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -30,14 +30,16 @@ parseLog = mapMaybe parseline . lines
where
parseline l = LogLine
<$> (utcTimeToPOSIXSeconds <$> parseTime defaultTimeLocale "%s%Qs" d)
- <*> parsestatus s
+ <*> parseStatus s
<*> pure rest
where
(d, pastd) = separate (== ' ') l
(s, rest) = separate (== ' ') pastd
- parsestatus "1" = Just InfoPresent
- parsestatus "0" = Just InfoMissing
- parsestatus _ = Nothing
+
+parseStatus :: String -> Maybe LogStatus
+parseStatus "1" = Just InfoPresent
+parseStatus "0" = Just InfoMissing
+parseStatus _ = Nothing
{- Generates a log file. -}
showLog :: [LogLine] -> String
diff --git a/Logs/Remote.hs b/Logs/Remote.hs
index 48ee9eb60..91afa242b 100644
--- a/Logs/Remote.hs
+++ b/Logs/Remote.hs
@@ -1,6 +1,6 @@
{- git-annex remote log
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Logs/RemoteState.hs b/Logs/RemoteState.hs
index 195d710c7..b302b739a 100644
--- a/Logs/RemoteState.hs
+++ b/Logs/RemoteState.hs
@@ -1,6 +1,6 @@
{- Remote state logs.
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -14,6 +14,7 @@ import Common.Annex
import Logs
import Logs.UUIDBased
import qualified Annex.Branch
+import qualified Annex
import qualified Data.Map as M
import Data.Time.Clock.POSIX
@@ -23,11 +24,14 @@ type RemoteState = String
setRemoteState :: UUID -> Key -> RemoteState -> Annex ()
setRemoteState u k s = do
ts <- liftIO getPOSIXTime
- Annex.Branch.change (remoteStateLogFile k) $
+ config <- Annex.getGitConfig
+ Annex.Branch.change (remoteStateLogFile config k) $
showLogNew id . changeLog ts u s . parseLogNew Just
getRemoteState :: UUID -> Key -> Annex (Maybe RemoteState)
-getRemoteState u k = extract . parseLogNew Just
- <$> Annex.Branch.get (remoteStateLogFile k)
+getRemoteState u k = do
+ config <- Annex.getGitConfig
+ extract . parseLogNew Just
+ <$> Annex.Branch.get (remoteStateLogFile config k)
where
extract m = value <$> M.lookup u m
diff --git a/Logs/Schedule.hs b/Logs/Schedule.hs
index 1d78467bb..d2dd0c343 100644
--- a/Logs/Schedule.hs
+++ b/Logs/Schedule.hs
@@ -1,6 +1,6 @@
{- git-annex scheduled activities log
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -35,7 +35,7 @@ scheduleSet uuid@(UUID _) activities = do
Annex.Branch.change scheduleLog $
showLog id . changeLog ts uuid val . parseLog Just
where
- val = fromScheduledActivities activities
+ val = fromScheduledActivities activities
scheduleSet NoUUID _ = error "unknown UUID; cannot modify"
scheduleMap :: Annex (M.Map UUID [ScheduledActivity])
diff --git a/Logs/SingleValue.hs b/Logs/SingleValue.hs
index cbebdc8e5..dbbe996f3 100644
--- a/Logs/SingleValue.hs
+++ b/Logs/SingleValue.hs
@@ -6,7 +6,7 @@
-
- The line with the newest timestamp wins.
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -60,6 +60,6 @@ getLog = newestValue <$$> readLog
setLog :: (SingleValueSerializable v) => FilePath -> v -> Annex ()
setLog f v = do
- now <- liftIO getPOSIXTime
- let ent = LogEntry now v
+ now <- liftIO getPOSIXTime
+ let ent = LogEntry now v
Annex.Branch.change f $ \_old -> showLog (S.singleton ent)
diff --git a/Logs/Transfer.hs b/Logs/Transfer.hs
index 742bdc7b9..5b5b8f8cb 100644
--- a/Logs/Transfer.hs
+++ b/Logs/Transfer.hs
@@ -1,6 +1,6 @@
{- git-annex transfer information files and lock files
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -11,16 +11,13 @@ module Logs.Transfer where
import Common.Annex
import Annex.Perms
-import Annex.Exception
import qualified Git
import Types.Key
import Utility.Metered
import Utility.Percentage
import Utility.QuickCheck
import Utility.PID
-#ifdef mingw32_HOST_OS
-import Utility.WinLock
-#endif
+import Utility.LockFile
import Data.Time.Clock
import Data.Time.Clock.POSIX
@@ -88,115 +85,13 @@ percentComplete :: Transfer -> TransferInfo -> Maybe Percentage
percentComplete (Transfer { transferKey = key }) info =
percentage <$> keySize key <*> Just (fromMaybe 0 $ bytesComplete info)
-type RetryDecider = TransferInfo -> TransferInfo -> Bool
-
-noRetry :: RetryDecider
-noRetry _ _ = False
-
-{- Retries a transfer when it fails, as long as the failed transfer managed
- - to send some data. -}
-forwardRetry :: RetryDecider
-forwardRetry old new = bytesComplete old < bytesComplete new
-
-upload :: UUID -> Key -> AssociatedFile -> RetryDecider -> (MeterUpdate -> Annex Bool) -> Annex Bool
-upload u key = runTransfer (Transfer Upload u key)
-
-download :: UUID -> Key -> AssociatedFile -> RetryDecider -> (MeterUpdate -> Annex Bool) -> Annex Bool
-download u key = runTransfer (Transfer Download u key)
-
-{- Runs a transfer action. Creates and locks the lock file while the
- - action is running, and stores info in the transfer information
- - file.
- -
- - If the transfer action returns False, the transfer info is
- - left in the failedTransferDir.
- -
- - If the transfer is already in progress, returns False.
- -
- - An upload can be run from a read-only filesystem, and in this case
- - no transfer information or lock file is used.
- -}
-runTransfer :: Transfer -> Maybe FilePath -> RetryDecider -> (MeterUpdate -> Annex Bool) -> Annex Bool
-runTransfer t file shouldretry a = do
- info <- liftIO $ startTransferInfo file
- (meter, tfile, metervar) <- mkProgressUpdater t info
- mode <- annexFileMode
- (fd, inprogress) <- liftIO $ prep tfile mode info
- if inprogress
- then do
- showNote "transfer already in progress"
- return False
- else do
- ok <- retry info metervar $
- bracketIO (return fd) (cleanup tfile) (const $ a meter)
- unless ok $ recordFailedTransfer t info
- return ok
- where
-#ifndef mingw32_HOST_OS
- prep tfile mode info = do
- mfd <- catchMaybeIO $
- openFd (transferLockFile tfile) ReadWrite (Just mode)
- defaultFileFlags { trunc = True }
- case mfd of
- Nothing -> return (Nothing, False)
- Just fd -> do
- locked <- catchMaybeIO $
- setLock fd (WriteLock, AbsoluteSeek, 0, 0)
- if isNothing locked
- then return (Nothing, True)
- else do
- void $ tryIO $ writeTransferInfoFile info tfile
- return (mfd, False)
-#else
- prep tfile _mode info = do
- v <- catchMaybeIO $ lockExclusive (transferLockFile tfile)
- case v of
- Nothing -> return (Nothing, False)
- Just Nothing -> return (Nothing, True)
- Just (Just lockhandle) -> do
- void $ tryIO $ writeTransferInfoFile info tfile
- return (Just lockhandle, False)
-#endif
- cleanup _ Nothing = noop
- cleanup tfile (Just lockhandle) = do
- void $ tryIO $ removeFile tfile
-#ifndef mingw32_HOST_OS
- void $ tryIO $ removeFile $ transferLockFile tfile
- closeFd lockhandle
-#else
- {- Windows cannot delete the lockfile until the lock
- - is closed. So it's possible to race with another
- - process that takes the lock before it's removed,
- - so ignore failure to remove.
- -}
- dropLock lockhandle
- void $ tryIO $ removeFile $ transferLockFile tfile
-#endif
- retry oldinfo metervar run = do
- v <- tryAnnex run
- case v of
- Right b -> return b
- Left _ -> do
- b <- getbytescomplete metervar
- let newinfo = oldinfo { bytesComplete = Just b }
- if shouldretry oldinfo newinfo
- then retry newinfo metervar run
- else return False
- getbytescomplete metervar
- | transferDirection t == Upload =
- liftIO $ readMVar metervar
- | otherwise = do
- f <- fromRepo $ gitAnnexTmpObjectLocation (transferKey t)
- liftIO $ catchDefaultIO 0 $
- fromIntegral . fileSize <$> getFileStatus f
-
{- Generates a callback that can be called as transfer progresses to update
- the transfer info file. Also returns the file it'll be updating, and a
- MVar that can be used to read the number of bytesComplete. -}
mkProgressUpdater :: Transfer -> TransferInfo -> Annex (MeterUpdate, FilePath, MVar Integer)
mkProgressUpdater t info = do
tfile <- fromRepo $ transferFile t
- _ <- tryAnnex $ createAnnexDirectory $ takeDirectory tfile
+ _ <- tryNonAsync $ createAnnexDirectory $ takeDirectory tfile
mvar <- liftIO $ newMVar 0
return (liftIO . updater tfile mvar, tfile, mvar)
where
@@ -234,19 +129,12 @@ checkTransfer :: Transfer -> Annex (Maybe TransferInfo)
checkTransfer t = do
tfile <- fromRepo $ transferFile t
#ifndef mingw32_HOST_OS
- mode <- annexFileMode
- mfd <- liftIO $ catchMaybeIO $
- openFd (transferLockFile tfile) ReadOnly (Just mode) defaultFileFlags
- case mfd of
- Nothing -> return Nothing -- failed to open file; not running
- Just fd -> do
- locked <- liftIO $
- getLock fd (WriteLock, AbsoluteSeek, 0, 0)
- liftIO $ closeFd fd
- case locked of
- Nothing -> return Nothing
- Just (pid, _) -> liftIO $ catchDefaultIO Nothing $
- readTransferInfoFile (Just pid) tfile
+ liftIO $ do
+ v <- getLockStatus (transferLockFile tfile)
+ case v of
+ Just (pid, _) -> catchDefaultIO Nothing $
+ readTransferInfoFile (Just pid) tfile
+ Nothing -> return Nothing
#else
v <- liftIO $ lockShared $ transferLockFile tfile
liftIO $ case v of
diff --git a/Logs/Transitions.hs b/Logs/Transitions.hs
index 64e9d3344..d782455a6 100644
--- a/Logs/Transitions.hs
+++ b/Logs/Transitions.hs
@@ -7,7 +7,7 @@
- done that is listed in the remote branch by checking that the local
- branch contains the same transition, with the same or newer start time.
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -53,7 +53,7 @@ showTransitions = unlines . map showTransitionLine . S.elems
parseTransitions :: String -> Maybe Transitions
parseTransitions = check . map parseTransitionLine . lines
where
- check l
+ check l
| all isJust l = Just $ S.fromList $ catMaybes l
| otherwise = Nothing
@@ -68,8 +68,8 @@ showTransitionLine (TransitionLine ts t) = unwords [show t, show ts]
parseTransitionLine :: String -> Maybe TransitionLine
parseTransitionLine s = TransitionLine <$> pdate ds <*> readish ts
where
- ws = words s
- ts = Prelude.head ws
+ ws = words s
+ ts = Prelude.head ws
ds = unwords $ Prelude.tail ws
pdate = utcTimeToPOSIXSeconds <$$> parseTime defaultTimeLocale "%s%Qs"
diff --git a/Logs/Trust.hs b/Logs/Trust.hs
index c6f0ad3ab..3d8d7bbae 100644
--- a/Logs/Trust.hs
+++ b/Logs/Trust.hs
@@ -1,6 +1,6 @@
{- git-annex trust log
-
- - Copyright 2010-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -11,26 +11,22 @@ module Logs.Trust (
TrustLevel(..),
trustGet,
trustMap,
- trustSet,
trustPartition,
trustExclude,
lookupTrust,
trustMapLoad,
- trustMapRaw,
) where
import qualified Data.Map as M
-import Data.Time.Clock.POSIX
+import Data.Default
import Common.Annex
import Types.TrustLevel
-import qualified Annex.Branch
import qualified Annex
import Logs
-import Logs.UUIDBased
import Remote.List
import qualified Types.Remote
-import Logs.Trust.Pure as X
+import Logs.Trust.Basic as X
{- Returns a list of UUIDs that the trustLog indicates have the
- specified trust level.
@@ -39,20 +35,9 @@ import Logs.Trust.Pure as X
trustGet :: TrustLevel -> Annex [UUID]
trustGet level = M.keys . M.filter (== level) <$> trustMap
-{- Changes the trust level for a uuid in the trustLog. -}
-trustSet :: UUID -> TrustLevel -> Annex ()
-trustSet uuid@(UUID _) level = do
- ts <- liftIO getPOSIXTime
- Annex.Branch.change trustLog $
- showLog showTrustLog .
- changeLog ts uuid level .
- parseLog (Just . parseTrustLog)
- Annex.changeState $ \s -> s { Annex.trustmap = Nothing }
-trustSet NoUUID _ = error "unknown UUID; cannot modify"
-
{- Returns the TrustLevel of a given repo UUID. -}
lookupTrust :: UUID -> Annex TrustLevel
-lookupTrust u = (fromMaybe SemiTrusted . M.lookup u) <$> trustMap
+lookupTrust u = (fromMaybe def . M.lookup u) <$> trustMap
{- Partitions a list of UUIDs to those matching a TrustLevel and not. -}
trustPartition :: TrustLevel -> [UUID] -> Annex ([UUID], [UUID])
@@ -90,8 +75,3 @@ trustMapLoad = do
configuredtrust r = (\l -> Just (Types.Remote.uuid r, l))
=<< readTrustLevel
=<< remoteAnnexTrustLevel (Types.Remote.gitconfig r)
-
-{- Does not include forcetrust or git config values, just those from the
- - log file. -}
-trustMapRaw :: Annex TrustMap
-trustMapRaw = calcTrustMap <$> Annex.Branch.get trustLog
diff --git a/Logs/Trust/Basic.hs b/Logs/Trust/Basic.hs
new file mode 100644
index 000000000..30e8dfb58
--- /dev/null
+++ b/Logs/Trust/Basic.hs
@@ -0,0 +1,38 @@
+{- git-annex trust log, basics
+ -
+ - Copyright 2010-2012 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Logs.Trust.Basic (
+ module X,
+ trustSet,
+ trustMapRaw,
+) where
+
+import Data.Time.Clock.POSIX
+
+import Common.Annex
+import Types.TrustLevel
+import qualified Annex.Branch
+import qualified Annex
+import Logs
+import Logs.UUIDBased
+import Logs.Trust.Pure as X
+
+{- Changes the trust level for a uuid in the trustLog. -}
+trustSet :: UUID -> TrustLevel -> Annex ()
+trustSet uuid@(UUID _) level = do
+ ts <- liftIO getPOSIXTime
+ Annex.Branch.change trustLog $
+ showLog showTrustLog .
+ changeLog ts uuid level .
+ parseLog (Just . parseTrustLog)
+ Annex.changeState $ \s -> s { Annex.trustmap = Nothing }
+trustSet NoUUID _ = error "unknown UUID; cannot modify"
+
+{- Does not include forcetrust or git config values, just those from the
+ - log file. -}
+trustMapRaw :: Annex TrustMap
+trustMapRaw = calcTrustMap <$> Annex.Branch.get trustLog
diff --git a/Logs/Trust/Pure.hs b/Logs/Trust/Pure.hs
index 11cfbe056..d493db63c 100644
--- a/Logs/Trust/Pure.hs
+++ b/Logs/Trust/Pure.hs
@@ -1,6 +1,6 @@
{- git-annex trust log, pure operations
-
- - Copyright 2010-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Logs/UUID.hs b/Logs/UUID.hs
index 154f86d51..8bdf41b9a 100644
--- a/Logs/UUID.hs
+++ b/Logs/UUID.hs
@@ -8,7 +8,7 @@
-
- uuid.log stores a list of known uuids, and their descriptions.
-
- - Copyright 2010-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Logs/UUIDBased.hs b/Logs/UUIDBased.hs
index b403b6253..ac876e65f 100644
--- a/Logs/UUIDBased.hs
+++ b/Logs/UUIDBased.hs
@@ -1,6 +1,6 @@
{- git-annex uuid-based logs
-
- - This is used to store information about a UUID in a way that can
+ - This is used to store information about UUIDs in a way that can
- be union merged.
-
- A line of the log will look like: "UUID[ INFO[ timestamp=foo]]"
@@ -9,7 +9,7 @@
-
- New uuid based logs instead use the form: "timestamp UUID INFO"
-
- - Copyright 2011-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Logs/Unused.hs b/Logs/Unused.hs
index cadf7ed9d..883ab8c5b 100644
--- a/Logs/Unused.hs
+++ b/Logs/Unused.hs
@@ -10,7 +10,7 @@
- The timestamp indicates when the key was first determined to be unused.
- Older versions of the log omit the timestamp.
-
- - Copyright 2010-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Logs/View.hs b/Logs/View.hs
index 79c2556b3..5ba4bf7c2 100644
--- a/Logs/View.hs
+++ b/Logs/View.hs
@@ -4,7 +4,7 @@
-
- This file is stored locally in .git/annex/, not in the git-annex branch.
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -15,6 +15,7 @@ module Logs.View (
removeView,
recentViews,
branchView,
+ is_branchView,
prop_branchView_legal,
) where
@@ -87,5 +88,10 @@ branchView view
| Git.Ref.legal True s = s
| otherwise = map (\c -> if isAlphaNum c then c else '_') s
+is_branchView :: Git.Branch -> Bool
+is_branchView (Ref b)
+ | b == branchViewPrefix = True
+ | otherwise = (branchViewPrefix ++ "/") `isPrefixOf` b
+
prop_branchView_legal :: View -> Bool
prop_branchView_legal = Git.Ref.legal False . fromRef . branchView
diff --git a/Logs/Web.hs b/Logs/Web.hs
index ede600ec2..38993c33c 100644
--- a/Logs/Web.hs
+++ b/Logs/Web.hs
@@ -1,26 +1,30 @@
{- Web url logs.
-
- - Copyright 2011, 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Logs.Web (
URLString,
- webUUID,
getUrls,
+ getUrlsWithPrefix,
setUrlPresent,
setUrlMissing,
knownUrls,
Downloader(..),
getDownloader,
setDownloader,
+ setTempUrl,
+ removeTempUrl,
) where
import qualified Data.ByteString.Lazy.Char8 as L
+import qualified Data.Map as M
import Data.Tuple.Utils
import Common.Annex
+import qualified Annex
import Logs
import Logs.Presence
import Logs.Location
@@ -28,16 +32,15 @@ import qualified Annex.Branch
import Annex.CatFile
import qualified Git
import qualified Git.LsFiles
-
-type URLString = String
-
--- Dummy uuid for the whole web. Do not alter.
-webUUID :: UUID
-webUUID = UUID "00000000-0000-0000-0000-000000000001"
+import Utility.Url
{- Gets all urls that a key might be available from. -}
getUrls :: Key -> Annex [URLString]
-getUrls key = go $ urlLogFile key : oldurlLogs key
+getUrls key = do
+ config <- Annex.getGitConfig
+ l <- go $ urlLogFile config key : oldurlLogs config key
+ tmpl <- Annex.getState (maybeToList . M.lookup key . Annex.tempurls)
+ return (tmpl ++ l)
where
go [] = return []
go (l:ls) = do
@@ -46,19 +49,23 @@ getUrls key = go $ urlLogFile key : oldurlLogs key
then go ls
else return us
-setUrlPresent :: Key -> URLString -> Annex ()
-setUrlPresent key url = do
+getUrlsWithPrefix :: Key -> String -> Annex [URLString]
+getUrlsWithPrefix key prefix = filter (prefix `isPrefixOf`) <$> getUrls key
+
+setUrlPresent :: UUID -> Key -> URLString -> Annex ()
+setUrlPresent uuid key url = do
us <- getUrls key
unless (url `elem` us) $ do
- addLog (urlLogFile key) =<< logNow InfoPresent url
- -- update location log to indicate that the web has the key
- logChange key webUUID InfoPresent
+ config <- Annex.getGitConfig
+ addLog (urlLogFile config key) =<< logNow InfoPresent url
+ logChange key uuid InfoPresent
-setUrlMissing :: Key -> URLString -> Annex ()
-setUrlMissing key url = do
- addLog (urlLogFile key) =<< logNow InfoMissing url
+setUrlMissing :: UUID -> Key -> URLString -> Annex ()
+setUrlMissing uuid key url = do
+ config <- Annex.getGitConfig
+ addLog (urlLogFile config key) =<< logNow InfoMissing url
whenM (null <$> getUrls key) $
- logChange key webUUID InfoMissing
+ logChange key uuid InfoMissing
{- Finds all known urls. -}
knownUrls :: Annex [URLString]
@@ -76,20 +83,29 @@ knownUrls = do
return $ concat r
where
geturls Nothing = return []
- geturls (Just logsha) = getLog . L.unpack <$> catObject logsha
+ geturls (Just logsha) = getLog . L.unpack <$> catObject logsha
-data Downloader = DefaultDownloader | QuviDownloader
+setTempUrl :: Key -> URLString -> Annex ()
+setTempUrl key url = Annex.changeState $ \s ->
+ s { Annex.tempurls = M.insert key url (Annex.tempurls s) }
+
+removeTempUrl :: Key -> Annex ()
+removeTempUrl key = Annex.changeState $ \s ->
+ s { Annex.tempurls = M.delete key (Annex.tempurls s) }
+
+data Downloader = WebDownloader | QuviDownloader | OtherDownloader
+ deriving (Eq)
+
+{- To keep track of how an url is downloaded, it's mangled slightly in
+ - the log. For quvi, "quvi:" is prefixed. For urls that are handled by
+ - some other remote, ":" is prefixed. -}
+setDownloader :: URLString -> Downloader -> String
+setDownloader u WebDownloader = u
+setDownloader u QuviDownloader = "quvi:" ++ u
+setDownloader u OtherDownloader = ":" ++ u
-{- Determines the downloader for an URL.
- -
- - Some URLs are not downloaded by normal means, and this is indicated
- - by prefixing them with downloader: when they are recorded in the url
- - logs. -}
getDownloader :: URLString -> (URLString, Downloader)
getDownloader u = case separate (== ':') u of
("quvi", u') -> (u', QuviDownloader)
- _ -> (u, DefaultDownloader)
-
-setDownloader :: URLString -> Downloader -> URLString
-setDownloader u DefaultDownloader = u
-setDownloader u QuviDownloader = "quvi:" ++ u
+ ("", u') -> (u', OtherDownloader)
+ _ -> (u, WebDownloader)
diff --git a/Makefile b/Makefile
index 45b9a578b..75c74ff90 100644
--- a/Makefile
+++ b/Makefile
@@ -59,7 +59,7 @@ retest: git-annex
# hothasktags chokes on some template haskell etc, so ignore errors
tags:
- find . | grep -v /.git/ | grep -v /tmp/ | grep -v /dist/ | grep -v /doc/ | egrep '\.hs$$' | xargs hothasktags > tags 2>/dev/null
+ (for f in $$(find . | grep -v /.git/ | grep -v /tmp/ | grep -v /dist/ | grep -v /doc/ | egrep '\.hs$$'); do hothasktags -c --cpp -c -traditional -c --include=dist/build/autogen/cabal_macros.h $$f; done) 2>/dev/null | sort > tags
# If ikiwiki is available, build static html docs suitable for being
# shipped in the software package.
@@ -83,7 +83,8 @@ clean:
rm -rf tmp dist git-annex $(mans) configure *.tix .hpc \
doc/.ikiwiki html dist tags Build/SysConfig.hs build-stamp \
Setup Build/InstallDesktopFile Build/EvilSplicer \
- Build/Standalone Build/OSXMkLibs Build/LinuxMkLibs Build/DistributionUpdate \
+ Build/Standalone Build/OSXMkLibs Build/LinuxMkLibs \
+ Build/DistributionUpdate Build/BuildVersion \
git-union-merge .tasty-rerun-log
find . -name \*.o -exec rm {} \;
find . -name \*.hi -exec rm {} \;
@@ -120,6 +121,7 @@ linuxstandalone-nobuild: Build/Standalone Build/LinuxMkLibs
ln -sf git-annex "$(LINUXSTANDALONE_DEST)/bin/git-annex-shell"
zcat standalone/licences.gz > $(LINUXSTANDALONE_DEST)/LICENSE
cp doc/logo_16x16.png doc/logo.svg $(LINUXSTANDALONE_DEST)
+ cp standalone/trustedkeys.gpg $(LINUXSTANDALONE_DEST)
./Build/Standalone "$(LINUXSTANDALONE_DEST)"
@@ -140,7 +142,7 @@ OSXAPP_BASE=$(OSXAPP_DEST)/Contents/MacOS/bundle
osxapp: Build/Standalone Build/OSXMkLibs
$(MAKE) git-annex
- rm -rf "$(OSXAPP_DEST)"
+ rm -rf "$(OSXAPP_DEST)" "$(OSXAPP_BASE)"
install -d tmp/build-dmg
cp -R standalone/osx/git-annex.app "$(OSXAPP_DEST)"
@@ -150,6 +152,7 @@ osxapp: Build/Standalone Build/OSXMkLibs
ln -sf git-annex "$(OSXAPP_BASE)/git-annex-shell"
gzcat standalone/licences.gz > $(OSXAPP_BASE)/LICENSE
cp $(OSXAPP_BASE)/LICENSE tmp/build-dmg/LICENSE.txt
+ cp standalone/trustedkeys.gpg $(OSXAPP_BASE)
./Build/Standalone $(OSXAPP_BASE)
@@ -185,6 +188,7 @@ no-th-webapp-stage1: Build/EvilSplicer
sed -i 's/^ Build-Depends: / Build-Depends: yesod-routes, yesod-core, shakespeare-css, shakespeare-js, shakespeare, blaze-markup, file-embed, wai-app-static, /' tmp/no-th-tree/git-annex.cabal
# Avoid warnings due to sometimes unused imports added for the splices.
sed -i 's/GHC-Options: \(.*\)-Wall/GHC-Options: \1-Wall -fno-warn-unused-imports /i' tmp/no-th-tree/git-annex.cabal
+ sed -i 's/Extensions: /Extensions: MagicHash /i' tmp/no-th-tree/git-annex.cabal
# Run on the arm system, after stage1
no-th-webapp-stage2:
@@ -214,10 +218,11 @@ android: Build/EvilSplicer
sed -i 's/^ Build-Depends: / Build-Depends: yesod-routes, yesod-core, shakespeare-css, shakespeare-js, shakespeare, blaze-markup, file-embed, wai-app-static, /' tmp/androidtree/git-annex.cabal
# Avoid warnings due to sometimes unused imports added for the splices.
sed -i 's/GHC-Options: \(.*\)-Wall/GHC-Options: \1-Wall -fno-warn-unused-imports /i' tmp/androidtree/git-annex.cabal
+ sed -i 's/Extensions: /Extensions: MagicHash /i' tmp/androidtree/git-annex.cabal
# Cabal cannot cross compile with custom build type, so workaround.
sed -i 's/Build-type: Custom/Build-type: Simple/' tmp/androidtree/git-annex.cabal
-# Build just once, but link twice, for 2 different versions of Android.
- mkdir -p tmp/androidtree/dist/build/git-annex/4.0 tmp/androidtree/dist/build/git-annex/4.3
+# Build just once, but link repeatedly, for different versions of Android.
+ mkdir -p tmp/androidtree/dist/build/git-annex/4.0 tmp/androidtree/dist/build/git-annex/4.3 tmp/androidtree/dist/build/git-annex/5.0
if [ ! -e tmp/androidtree/dist/setup-config ]; then \
cd tmp/androidtree && $$HOME/.ghc/$(shell cat standalone/android/abiversion)/arm-linux-androideabi/bin/cabal configure -fAndroid $(ANDROID_FLAGS); \
fi
@@ -226,6 +231,9 @@ android: Build/EvilSplicer
cd tmp/androidtree && $$HOME/.ghc/$(shell cat standalone/android/abiversion)/arm-linux-androideabi/bin/cabal build \
--ghc-options=-optl-z --ghc-options=-optlnocopyreloc \
&& mv dist/build/git-annex/git-annex dist/build/git-annex/4.3/git-annex
+ cd tmp/androidtree && $$HOME/.ghc/$(shell cat standalone/android/abiversion)/arm-linux-androideabi/bin/cabal build \
+ --ghc-options=-optl-z --ghc-options=-optlnocopyreloc --ghc-options=-optl-fPIE --ghc-options=-optl-pie --ghc-options=-optc-fPIE --ghc-options=-optc-pie \
+ && mv dist/build/git-annex/git-annex dist/build/git-annex/5.0/git-annex
androidapp:
$(MAKE) android
@@ -253,7 +261,7 @@ hdevtools:
distributionupdate:
git pull
cabal configure
- ghc --make Build/DistributionUpdate -XPackageImports
+ ghc -Wall --make Build/DistributionUpdate -XPackageImports -optP-include -optPdist/build/autogen/cabal_macros.h
./Build/DistributionUpdate
.PHONY: git-annex git-union-merge git-recover-repository tags build-stamp
diff --git a/Messages.hs b/Messages.hs
index 9f473110a..88a4a8c18 100644
--- a/Messages.hs
+++ b/Messages.hs
@@ -1,6 +1,6 @@
{- git-annex output messages
-
- - Copyright 2010-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -25,7 +25,6 @@ module Messages (
showErr,
warning,
warningIO,
- fileNotFound,
indent,
maybeShowJSON,
showFullJSON,
@@ -43,11 +42,10 @@ import Data.Progress.Tracker
import Data.Quantity
import System.Log.Logger
import System.Log.Formatter
-import System.Log.Handler (setFormatter, LogHandler)
+import System.Log.Handler (setFormatter)
import System.Log.Handler.Simple
-import qualified Data.Set as S
-import Common
+import Common hiding (handle)
import Types
import Types.Messages
import qualified Messages.JSON as JSON
@@ -113,7 +111,7 @@ showSideAction m = Annex.getState Annex.output >>= go
p = handle q $ putStrLn $ "(" ++ m ++ "...)"
showStoringStateAction :: Annex ()
-showStoringStateAction = showSideAction "Recording state in git"
+showStoringStateAction = showSideAction "recording state in git"
{- Performs an action, supressing showSideAction messages. -}
doQuietSideAction :: Annex a -> Annex a
@@ -172,18 +170,6 @@ warningIO w = do
hFlush stdout
hPutStrLn stderr w
-{- Displays a warning one time about a file the user specified not existing. -}
-fileNotFound :: FilePath -> Annex ()
-fileNotFound file = do
- st <- Annex.getState Annex.output
- let shown = fileNotFoundShown st
- when (S.notMember file shown) $ do
- let shown' = S.insert file shown
- let st' = st { fileNotFoundShown = shown' }
- Annex.changeState $ \s -> s { Annex.output = st' }
- liftIO $ hPutStrLn stderr $ unwords
- [ "git-annex:", file, "not found" ]
-
indent :: String -> String
indent = intercalate "\n" . map (\l -> " " ++ l) . lines
diff --git a/Messages/JSON.hs b/Messages/JSON.hs
index d57d69318..d0ed85a1f 100644
--- a/Messages/JSON.hs
+++ b/Messages/JSON.hs
@@ -1,6 +1,6 @@
{- git-annex JSON output
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/README b/README
index ce67d6816..3ff0a9bfb 100644
--- a/README
+++ b/README
@@ -3,4 +3,4 @@ contents into git. While that may seem paradoxical, it is useful when
dealing with files larger than git can currently easily handle, whether due
to limitations in memory, checksumming time, or disk space.
-For documentation, see doc/ or <http://git-annex.branchable.com/>
+For documentation, see doc/ or <https://git-annex.branchable.com/>
diff --git a/Remote.hs b/Remote.hs
index 0f31b99b2..58c1a0f17 100644
--- a/Remote.hs
+++ b/Remote.hs
@@ -1,6 +1,6 @@
{- git-annex remotes
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -22,8 +22,11 @@ module Remote (
remoteList,
gitSyncableRemote,
remoteMap,
+ remoteMap',
uuidDescriptions,
byName,
+ byName',
+ byNameOrGroup,
byNameOnly,
byNameWithUUID,
byCost,
@@ -43,7 +46,8 @@ module Remote (
forceTrust,
logStatus,
checkAvailable,
- isXMPPRemote
+ isXMPPRemote,
+ claimingUrl,
) where
import qualified Data.Map as M
@@ -58,15 +62,26 @@ import Annex.UUID
import Logs.UUID
import Logs.Trust
import Logs.Location hiding (logStatus)
+import Logs.Web
import Remote.List
import Config
import Git.Types (RemoteName)
import qualified Git
{- Map from UUIDs of Remotes to a calculated value. -}
-remoteMap :: (Remote -> a) -> Annex (M.Map UUID a)
-remoteMap c = M.fromList . map (\r -> (uuid r, c r)) .
- filter (\r -> uuid r /= NoUUID) <$> remoteList
+remoteMap :: (Remote -> v) -> Annex (M.Map UUID v)
+remoteMap mkv = remoteMap' mkv mkk
+ where
+ mkk r = case uuid r of
+ NoUUID -> Nothing
+ u -> Just u
+
+remoteMap' :: Ord k => (Remote -> v) -> (Remote -> Maybe k) -> Annex (M.Map k v)
+remoteMap' mkv mkk = M.fromList . mapMaybe mk <$> remoteList
+ where
+ mk r = case mkk r of
+ Nothing -> Nothing
+ Just k -> Just (k, mkv r)
{- Map of UUIDs of remotes and their descriptions.
- The names of Remotes are added to suppliment any description that has
@@ -76,12 +91,15 @@ uuidDescriptions = M.unionWith addName <$> uuidMap <*> remoteMap name
addName :: String -> RemoteName -> String
addName desc n
- | desc == n = desc
- | null desc = n
- | otherwise = n ++ " (" ++ desc ++ ")"
+ | desc == n || null desc = "[" ++ n ++ "]"
+ | otherwise = desc ++ " [" ++ n ++ "]"
{- When a name is specified, looks up the remote matching that name.
- - (Or it can be a UUID.) -}
+ - (Or it can be a UUID.)
+ -
+ - Throws an error if a name is specified and no matching remote can be
+ - found.
+ -}
byName :: Maybe RemoteName -> Annex (Maybe Remote)
byName Nothing = return Nothing
byName (Just n) = either error Just <$> byName' n
@@ -90,24 +108,32 @@ byName (Just n) = either error Just <$> byName' n
byNameWithUUID :: Maybe RemoteName -> Annex (Maybe Remote)
byNameWithUUID = checkuuid <=< byName
where
- checkuuid Nothing = return Nothing
+ checkuuid Nothing = return Nothing
checkuuid (Just r)
- | uuid r == NoUUID =
+ | uuid r == NoUUID = error $
if remoteAnnexIgnore (gitconfig r)
- then error $ noRemoteUUIDMsg r ++
+ then noRemoteUUIDMsg r ++
" (" ++ show (remoteConfig (repo r) "ignore") ++
" is set)"
- else error $ noRemoteUUIDMsg r
+ else noRemoteUUIDMsg r
| otherwise = return $ Just r
byName' :: RemoteName -> Annex (Either String Remote)
byName' "" = return $ Left "no remote specified"
-byName' n = handle . filter matching <$> remoteList
+byName' n = go . filter matching <$> remoteList
where
- handle [] = Left $ "there is no available git remote named \"" ++ n ++ "\""
- handle (match:_) = Right match
+ go [] = Left $ "there is no available git remote named \"" ++ n ++ "\""
+ go (match:_) = Right match
matching r = n == name r || toUUID n == uuid r
+{- Finds the remote or remote group matching the name. -}
+byNameOrGroup :: RemoteName -> Annex [Remote]
+byNameOrGroup n = go =<< getConfigMaybe (ConfigKey ("remotes." ++ n))
+ where
+ go (Just l) = concatMap maybeToList <$>
+ mapM (byName . Just) (split " " l)
+ go Nothing = maybeToList <$> byName (Just n)
+
{- Only matches remote name, not UUID -}
byNameOnly :: RemoteName -> Annex (Maybe Remote)
byNameOnly n = headMaybe . filter matching <$> remoteList
@@ -246,15 +272,17 @@ keyPossibilities' key trusted = do
return (sortBy (comparing cost) validremotes, validtrusteduuids)
{- Displays known locations of a key. -}
-showLocations :: Key -> [UUID] -> String -> Annex ()
-showLocations key exclude nolocmsg = do
+showLocations :: Bool -> Key -> [UUID] -> String -> Annex ()
+showLocations separateuntrusted key exclude nolocmsg = do
u <- getUUID
uuids <- keyLocations key
- untrusteduuids <- trustGet UnTrusted
+ untrusteduuids <- if separateuntrusted
+ then trustGet UnTrusted
+ else pure []
let uuidswanted = filteruuids uuids (u:exclude++untrusteduuids)
let uuidsskipped = filteruuids uuids (u:exclude++uuidswanted)
- ppuuidswanted <- Remote.prettyPrintUUIDs "wanted" uuidswanted
- ppuuidsskipped <- Remote.prettyPrintUUIDs "skipped" uuidsskipped
+ ppuuidswanted <- prettyPrintUUIDs "wanted" uuidswanted
+ ppuuidsskipped <- prettyPrintUUIDs "skipped" uuidsskipped
showLongNote $ message ppuuidswanted ppuuidsskipped
ignored <- filter (remoteAnnexIgnore . gitconfig) <$> remoteList
unless (null ignored) $
@@ -301,3 +329,18 @@ isXMPPRemote :: Remote -> Bool
isXMPPRemote remote = Git.repoIsUrl r && "xmpp::" `isPrefixOf` Git.repoLocation r
where
r = repo remote
+
+hasKey :: Remote -> Key -> Annex (Either String Bool)
+hasKey r k = either (Left . show) Right <$> tryNonAsync (checkPresent r k)
+
+hasKeyCheap :: Remote -> Bool
+hasKeyCheap = checkPresentCheap
+
+{- The web special remote claims urls by default. -}
+claimingUrl :: URLString -> Annex Remote
+claimingUrl url = do
+ rs <- remoteList
+ let web = Prelude.head $ filter (\r -> uuid r == webUUID) rs
+ fromMaybe web <$> firstM checkclaim rs
+ where
+ checkclaim = maybe (pure False) (flip id url) . claimUrl
diff --git a/Remote/BitTorrent.hs b/Remote/BitTorrent.hs
new file mode 100644
index 000000000..fe49d023a
--- /dev/null
+++ b/Remote/BitTorrent.hs
@@ -0,0 +1,391 @@
+{- BitTorrent remote.
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# LANGUAGE CPP #-}
+
+module Remote.BitTorrent (remote) where
+
+import Common.Annex
+import Types.Remote
+import qualified Annex
+import qualified Git
+import qualified Git.Construct
+import Config.Cost
+import Logs.Web
+import Types.UrlContents
+import Types.CleanupActions
+import Types.Key
+import Utility.Metered
+import Utility.Tmp
+import Backend.URL
+import Annex.Perms
+import Annex.UUID
+import qualified Annex.Url as Url
+
+import Network.URI
+
+#ifdef WITH_TORRENTPARSER
+import Data.Torrent
+import qualified Data.ByteString.Lazy as B
+#endif
+
+remote :: RemoteType
+remote = RemoteType {
+ typename = "bittorrent",
+ enumerate = list,
+ generate = gen,
+ setup = error "not supported"
+}
+
+-- There is only one bittorrent remote, and it always exists.
+list :: Annex [Git.Repo]
+list = do
+ r <- liftIO $ Git.Construct.remoteNamed "bittorrent" (pure Git.Construct.fromUnknown)
+ return [r]
+
+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
+gen r _ c gc =
+ return $ Just Remote
+ { uuid = bitTorrentUUID
+ , cost = expensiveRemoteCost
+ , name = Git.repoDescribe r
+ , storeKey = uploadKey
+ , retrieveKeyFile = downloadKey
+ , retrieveKeyFileCheap = downloadKeyCheap
+ , removeKey = dropKey
+ , checkPresent = checkKey
+ , checkPresentCheap = False
+ , whereisKey = Nothing
+ , remoteFsck = Nothing
+ , repairRepo = Nothing
+ , config = c
+ , gitconfig = gc
+ , localpath = Nothing
+ , repo = r
+ , readonly = True
+ , availability = GloballyAvailable
+ , remotetype = remote
+ , mkUnavailable = return Nothing
+ , getInfo = return []
+ , claimUrl = Just (pure . isSupportedUrl)
+ , checkUrl = Just checkTorrentUrl
+ }
+
+downloadKey :: Key -> AssociatedFile -> FilePath -> MeterUpdate -> Annex Bool
+downloadKey key _file dest p =
+ get . map (torrentUrlNum . fst . getDownloader) =<< getBitTorrentUrls key
+ where
+ get [] = do
+ warning "could not download torrent"
+ return False
+ get urls = do
+ showOutput -- make way for download progress bar
+ untilTrue urls $ \(u, filenum) -> do
+ registerTorrentCleanup u
+ checkDependencies
+ ifM (downloadTorrentFile u)
+ ( downloadTorrentContent key u dest filenum p
+ , return False
+ )
+
+downloadKeyCheap :: Key -> FilePath -> Annex Bool
+downloadKeyCheap _ _ = return False
+
+uploadKey :: Key -> AssociatedFile -> MeterUpdate -> Annex Bool
+uploadKey _ _ _ = do
+ warning "upload to bittorrent not supported"
+ return False
+
+dropKey :: Key -> Annex Bool
+dropKey k = do
+ mapM_ (setUrlMissing bitTorrentUUID k) =<< getBitTorrentUrls k
+ return True
+
+{- We punt and don't try to check if a torrent has enough seeders
+ - with all the pieces etc. That would be quite hard.. and even if
+ - implemented, it tells us nothing about the later state of the torrent.
+ -}
+checkKey :: Key -> Annex Bool
+checkKey = error "cannot reliably check torrent status"
+
+getBitTorrentUrls :: Key -> Annex [URLString]
+getBitTorrentUrls key = filter supported <$> getUrls key
+ where
+ supported u =
+ let (u', dl) = (getDownloader u)
+ in dl == OtherDownloader && isSupportedUrl u'
+
+isSupportedUrl :: URLString -> Bool
+isSupportedUrl u = isTorrentMagnetUrl u || isTorrentUrl u
+
+isTorrentUrl :: URLString -> Bool
+isTorrentUrl = maybe False (\u -> ".torrent" `isSuffixOf` uriPath u) . parseURI
+
+isTorrentMagnetUrl :: URLString -> Bool
+isTorrentMagnetUrl u = "magnet:" `isPrefixOf` u && checkbt (parseURI u)
+ where
+ checkbt (Just uri) | "xt=urn:btih:" `isInfixOf` uriQuery uri = True
+ checkbt _ = False
+
+checkTorrentUrl :: URLString -> Annex UrlContents
+checkTorrentUrl u = do
+ checkDependencies
+ registerTorrentCleanup u
+ ifM (downloadTorrentFile u)
+ ( torrentContents u
+ , error "could not download torrent file"
+ )
+
+{- To specify which file inside a multi-url torrent, the file number is
+ - appended to the url. -}
+torrentUrlWithNum :: URLString -> Int -> URLString
+torrentUrlWithNum u n = u ++ "#" ++ show n
+
+torrentUrlNum :: URLString -> (URLString, Int)
+torrentUrlNum u
+ | '#' `elem` u =
+ let (n, ru) = separate (== '#') (reverse u)
+ in (reverse ru, fromMaybe 1 $ readish $ reverse n)
+ | otherwise = (u, 1)
+
+{- A Key corresponding to the URL of a torrent file. -}
+torrentUrlKey :: URLString -> Annex Key
+torrentUrlKey u = fromUrl (fst $ torrentUrlNum u) Nothing
+
+{- Temporary directory used to download a torrent. -}
+tmpTorrentDir :: URLString -> Annex FilePath
+tmpTorrentDir u = do
+ d <- fromRepo gitAnnexTmpMiscDir
+ f <- keyFile <$> torrentUrlKey u
+ return (d </> f)
+
+{- Temporary filename to use to store the torrent file. -}
+tmpTorrentFile :: URLString -> Annex FilePath
+tmpTorrentFile u = fromRepo . gitAnnexTmpObjectLocation =<< torrentUrlKey u
+
+{- A cleanup action is registered to delete the torrent file and its
+ - associated temp directory when git-annex exits.
+ -
+ - This allows multiple actions that use the same torrent file and temp
+ - directory to run in a single git-annex run.
+ -}
+registerTorrentCleanup :: URLString -> Annex ()
+registerTorrentCleanup u = Annex.addCleanup (TorrentCleanup u) $ do
+ liftIO . nukeFile =<< tmpTorrentFile u
+ d <- tmpTorrentDir u
+ liftIO $ whenM (doesDirectoryExist d) $
+ removeDirectoryRecursive d
+
+{- Downloads the torrent file. (Not its contents.) -}
+downloadTorrentFile :: URLString -> Annex Bool
+downloadTorrentFile u = do
+ torrent <- tmpTorrentFile u
+ ifM (liftIO $ doesFileExist torrent)
+ ( return True
+ , do
+ showAction "downloading torrent file"
+ showOutput
+ createAnnexDirectory (parentDir torrent)
+ if isTorrentMagnetUrl u
+ then do
+ tmpdir <- tmpTorrentDir u
+ let metadir = tmpdir </> "meta"
+ createAnnexDirectory metadir
+ ok <- downloadMagnetLink u metadir torrent
+ liftIO $ removeDirectoryRecursive metadir
+ return ok
+ else do
+ misctmp <- fromRepo gitAnnexTmpMiscDir
+ withTmpFileIn misctmp "torrent" $ \f h -> do
+ liftIO $ hClose h
+ ok <- Url.withUrlOptions $ Url.download u f
+ when ok $
+ liftIO $ renameFile f torrent
+ return ok
+ )
+
+downloadMagnetLink :: URLString -> FilePath -> FilePath -> Annex Bool
+downloadMagnetLink u metadir dest = ifM download
+ ( liftIO $ do
+ ts <- filter (".torrent" `isPrefixOf`)
+ <$> dirContents metadir
+ case ts of
+ (t:[]) -> do
+ renameFile t dest
+ return True
+ _ -> return False
+ , return False
+ )
+ where
+ download = runAria
+ [ Param "--bt-metadata-only"
+ , Param "--bt-save-metadata"
+ , Param u
+ , Param "--seed-time=0"
+ , Param "--summary-interval=0"
+ , Param "-d"
+ , File metadir
+ ]
+
+downloadTorrentContent :: Key -> URLString -> FilePath -> Int -> MeterUpdate -> Annex Bool
+downloadTorrentContent k u dest filenum p = do
+ torrent <- tmpTorrentFile u
+ tmpdir <- tmpTorrentDir u
+ createAnnexDirectory tmpdir
+ f <- wantedfile torrent
+ showOutput
+ ifM (download torrent tmpdir <&&> liftIO (doesFileExist (tmpdir </> f)))
+ ( do
+ liftIO $ renameFile (tmpdir </> f) dest
+ return True
+ , return False
+ )
+ where
+ download torrent tmpdir = ariaProgress (keySize k) p
+ [ Param $ "--select-file=" ++ show filenum
+ , File torrent
+ , Param "-d"
+ , File tmpdir
+ , Param "--seed-time=0"
+ , Param "--summary-interval=0"
+ , Param "--file-allocation=none"
+ -- Needed so aria will resume partially downloaded files
+ -- in multi-file torrents.
+ , Param "--check-integrity=true"
+ ]
+
+ {- aria2c will create part of the directory structure
+ - contained in the torrent. It may download parts of other files
+ - in addition to the one we asked for. So, we need to find
+ - out the filename we want based on the filenum.
+ -}
+ wantedfile torrent = do
+ fs <- liftIO $ map fst <$> torrentFileSizes torrent
+ if length fs >= filenum
+ then return (fs !! (filenum - 1))
+ else error "Number of files in torrent seems to have changed."
+
+checkDependencies :: Annex ()
+checkDependencies = do
+ missing <- liftIO $ filterM (not <$$> inPath) deps
+ unless (null missing) $
+ error $ "need to install additional software in order to download from bittorrent: " ++ unwords missing
+ where
+ deps =
+ [ "aria2c"
+#ifndef TORRENT
+ , "btshowmetainfo"
+#endif
+ ]
+
+ariaParams :: [CommandParam] -> Annex [CommandParam]
+ariaParams ps = do
+ opts <- map Param . annexAriaTorrentOptions <$> Annex.getGitConfig
+ return (ps ++ opts)
+
+runAria :: [CommandParam] -> Annex Bool
+runAria ps = liftIO . boolSystem "aria2c" =<< ariaParams ps
+
+-- Parse aria output to find "(n%)" and update the progress meter
+-- with it. The output is also output to stdout.
+ariaProgress :: Maybe Integer -> MeterUpdate -> [CommandParam] -> Annex Bool
+ariaProgress Nothing _ ps = runAria ps
+ariaProgress (Just sz) meter ps =
+ liftIO . commandMeter (parseAriaProgress sz) meter "aria2c"
+ =<< ariaParams ps
+
+parseAriaProgress :: Integer -> ProgressParser
+parseAriaProgress totalsize = go [] . reverse . split ['\r']
+ where
+ go remainder [] = (Nothing, remainder)
+ go remainder (x:xs) = case readish (findpercent x) of
+ Nothing -> go (x++remainder) xs
+ Just p -> (Just (frompercent p), remainder)
+
+ -- "(N%)"
+ findpercent = takeWhile (/= '%') . drop 1 . dropWhile (/= '(')
+
+ frompercent p = toBytesProcessed $ totalsize * p `div` 100
+
+{- Used only if the haskell torrent library is not available. -}
+#ifndef WITH_TORRENTPARSER
+btshowmetainfo :: FilePath -> String -> IO [String]
+btshowmetainfo torrent field =
+ findfield [] . lines <$> readProcess "btshowmetainfo" [torrent]
+ where
+ findfield c [] = reverse c
+ findfield c (l:ls)
+ | l == fieldkey = multiline c ls
+ | fieldkey `isPrefixOf` l =
+ findfield ((drop (length fieldkey) l):c) ls
+ | otherwise = findfield c ls
+
+ multiline c (l:ls)
+ | " " `isPrefixOf` l = multiline (drop 3 l:c) ls
+ | otherwise = findfield c ls
+ multiline c [] = findfield c []
+
+ fieldkey = field ++ take (14 - length field) (repeat '.') ++ ": "
+#endif
+
+{- Examines the torrent file and gets the list of files in it,
+ - and their sizes.
+ -}
+torrentFileSizes :: FilePath -> IO [(FilePath, Integer)]
+torrentFileSizes torrent = do
+#ifdef WITH_TORRENTPARSER
+ let mkfile = joinPath . map (scrub . decodeBS)
+ b <- B.readFile torrent
+ return $ case readTorrent b of
+ Left e -> error $ "failed to parse torrent: " ++ e
+ Right t -> case tInfo t of
+ SingleFile { tLength = l, tName = f } ->
+ [ (mkfile [f], l) ]
+ MultiFile { tFiles = fs, tName = dir } ->
+ map (\tf -> (mkfile $ dir:filePath tf, fileLength tf)) fs
+ where
+#else
+ files <- getfield "files"
+ if null files
+ then do
+ fnl <- getfield "file name"
+ szl <- map readish <$> getfield "file size"
+ case (fnl, szl) of
+ ((fn:[]), (Just sz:[])) -> return [(scrub fn, sz)]
+ _ -> parsefailed (show (fnl, szl))
+ else do
+ v <- getfield "directory name"
+ case v of
+ (d:[]) -> return $ map (splitsize d) files
+ _ -> parsefailed (show v)
+ where
+ getfield = btshowmetainfo torrent
+ parsefailed s = error $ "failed to parse btshowmetainfo output for torrent file: " ++ show s
+
+ -- btshowmetainfo outputs a list of "filename (size)"
+ splitsize d l = (scrub (d </> fn), sz)
+ where
+ sz = fromMaybe (parsefailed l) $ readish $
+ reverse $ takeWhile (/= '(') $ dropWhile (== ')') $
+ reverse l
+ fn = reverse $ drop 2 $
+ dropWhile (/= '(') $ dropWhile (== ')') $ reverse l
+#endif
+ -- a malicious torrent file might try to do directory traversal
+ scrub f = if isAbsolute f || any (== "..") (splitPath f)
+ then error "found unsafe filename in torrent!"
+ else f
+
+torrentContents :: URLString -> Annex UrlContents
+torrentContents u = convert
+ <$> (liftIO . torrentFileSizes =<< tmpTorrentFile u)
+ where
+ convert [(fn, sz)] = UrlContents (Just sz) (Just (mkSafeFilePath fn))
+ convert l = UrlMulti $ map mkmulti (zip l [1..])
+
+ mkmulti ((fn, sz), n) =
+ (torrentUrlWithNum u n, Just sz, mkSafeFilePath $ joinPath $ drop 1 $ splitPath fn)
diff --git a/Remote/Bup.hs b/Remote/Bup.hs
index 4e79eca42..01501dc9e 100644
--- a/Remote/Bup.hs
+++ b/Remote/Bup.hs
@@ -1,18 +1,18 @@
{- Using bup as a remote.
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Remote.Bup (remote) where
-import qualified Data.ByteString.Lazy as L
import qualified Data.Map as M
-import System.Process
+import qualified Data.ByteString.Lazy as L
import Data.ByteString.Lazy.UTF8 (fromString)
import Common.Annex
+import qualified Annex
import Types.Remote
import Types.Key
import Types.Creds
@@ -25,12 +25,9 @@ import Config
import Config.Cost
import qualified Remote.Helper.Ssh as Ssh
import Remote.Helper.Special
-import Remote.Helper.Encryptable
import Remote.Helper.Messages
-import Crypto
import Utility.Hash
import Utility.UserInfo
-import Annex.Content
import Annex.UUID
import Utility.Metered
@@ -53,16 +50,16 @@ gen r u c gc = do
else expensiveRemoteCost
(u', bupr') <- getBupUUID bupr u
- let new = Remote
+ let this = Remote
{ uuid = u'
, cost = cst
, name = Git.repoDescribe r
- , storeKey = store new buprepo
- , retrieveKeyFile = retrieve buprepo
+ , storeKey = storeKeyDummy
+ , retrieveKeyFile = retreiveKeyFileDummy
, retrieveKeyFileCheap = retrieveCheap buprepo
- , removeKey = remove
- , hasKey = checkPresent r bupr'
- , hasKeyCheap = bupLocal buprepo
+ , removeKey = removeKeyDummy
+ , checkPresent = checkPresentDummy
+ , checkPresentCheap = bupLocal buprepo
, whereisKey = Nothing
, remoteFsck = Nothing
, repairRepo = Nothing
@@ -75,13 +72,23 @@ gen r u c gc = do
, remotetype = remote
, availability = if bupLocal buprepo then LocallyAvailable else GloballyAvailable
, readonly = False
+ , mkUnavailable = return Nothing
+ , getInfo = return [("repo", buprepo)]
+ , claimUrl = Nothing
+ , checkUrl = Nothing
}
- return $ Just $ encryptableRemote c
- (storeEncrypted new buprepo)
- (retrieveEncrypted buprepo)
- new
+ return $ Just $ specialRemote' specialcfg c
+ (simplyPrepare $ store this buprepo)
+ (simplyPrepare $ retrieve buprepo)
+ (simplyPrepare $ remove buprepo)
+ (simplyPrepare $ checkKey r bupr')
+ this
where
buprepo = fromMaybe (error "missing buprepo") $ remoteAnnexBupRepo gc
+ specialcfg = (specialRemoteCfg c)
+ -- chunking would not improve bup
+ { chunkConfig = NoChunks
+ }
bupSetup :: Maybe UUID -> Maybe CredPair -> RemoteConfig -> Annex (RemoteConfig, UUID)
bupSetup mu _ c = do
@@ -90,7 +97,7 @@ bupSetup mu _ c = do
-- verify configuration is sane
let buprepo = fromMaybe (error "Specify buprepo=") $
M.lookup "buprepo" c
- c' <- encryptionSetup c
+ (c', _encsetup) <- encryptionSetup c
-- bup init will create the repository.
-- (If the repository already exists, bup init again appears safe.)
@@ -114,85 +121,61 @@ bup command buprepo params = do
showOutput -- make way for bup output
liftIO $ boolSystem "bup" $ bupParams command buprepo params
-pipeBup :: [CommandParam] -> Maybe Handle -> Maybe Handle -> IO Bool
-pipeBup params inh outh = do
- p <- runProcess "bup" (toCommand params)
- Nothing Nothing inh outh Nothing
- ok <- waitForProcess p
- case ok of
- ExitSuccess -> return True
- _ -> return False
-
bupSplitParams :: Remote -> BupRepo -> Key -> [CommandParam] -> Annex [CommandParam]
bupSplitParams r buprepo k src = do
let os = map Param $ remoteAnnexBupSplitOptions $ gitconfig r
showOutput -- make way for bup output
return $ bupParams "split" buprepo
- (os ++ [Param "-n", Param (bupRef k)] ++ src)
-
-store :: Remote -> BupRepo -> Key -> AssociatedFile -> MeterUpdate -> Annex Bool
-store r buprepo k _f _p = sendAnnex k (rollback k buprepo) $ \src -> do
- params <- bupSplitParams r buprepo k [File src]
- liftIO $ boolSystem "bup" params
+ (os ++ [Param "-q", Param "-n", Param (bupRef k)] ++ src)
-storeEncrypted :: Remote -> BupRepo -> (Cipher, Key) -> Key -> MeterUpdate -> Annex Bool
-storeEncrypted r buprepo (cipher, enck) k _p =
- sendAnnex k (rollback enck buprepo) $ \src -> do
- params <- bupSplitParams r buprepo enck []
- liftIO $ catchBoolIO $
- encrypt (getGpgEncParams r) cipher (feedFile src) $ \h ->
- pipeBup params (Just h) Nothing
+store :: Remote -> BupRepo -> Storer
+store r buprepo = byteStorer $ \k b p -> do
+ params <- bupSplitParams r buprepo k []
+ let cmd = proc "bup" (toCommand params)
+ liftIO $ withHandle StdinHandle createProcessSuccess cmd $ \h -> do
+ meteredWrite p h b
+ return True
-retrieve :: BupRepo -> Key -> AssociatedFile -> FilePath -> MeterUpdate -> Annex Bool
-retrieve buprepo k _f d _p = do
+retrieve :: BupRepo -> Retriever
+retrieve buprepo = byteRetriever $ \k sink -> do
let params = bupParams "join" buprepo [Param $ bupRef k]
- liftIO $ catchBoolIO $ withFile d WriteMode $
- pipeBup params Nothing . Just
+ let p = proc "bup" (toCommand params)
+ (_, Just h, _, pid) <- liftIO $ createProcess $ p { std_out = CreatePipe }
+ liftIO (hClose h >> forceSuccessProcess p pid)
+ `after` (sink =<< liftIO (L.hGetContents h))
retrieveCheap :: BupRepo -> Key -> FilePath -> Annex Bool
retrieveCheap _ _ _ = return False
-retrieveEncrypted :: BupRepo -> (Cipher, Key) -> Key -> FilePath -> MeterUpdate -> Annex Bool
-retrieveEncrypted buprepo (cipher, enck) _ f _p = liftIO $ catchBoolIO $
- withHandle StdoutHandle createProcessSuccess p $ \h -> do
- decrypt cipher (\toh -> L.hPut toh =<< L.hGetContents h) $
- readBytes $ L.writeFile f
- return True
- where
- params = bupParams "join" buprepo [Param $ bupRef enck]
- p = proc "bup" $ toCommand params
-
-remove :: Key -> Annex Bool
-remove _ = do
- warning "content cannot be removed from bup remote"
- return False
-
{- Cannot revert having stored a key in bup, but at least the data for the
- key will be used for deltaing data of other keys stored later.
-
- We can, however, remove the git branch that bup created for the key.
-}
-rollback :: Key -> BupRepo -> Annex ()
-rollback k bupr = go =<< liftIO (bup2GitRemote bupr)
+remove :: BupRepo -> Remover
+remove buprepo k = do
+ go =<< liftIO (bup2GitRemote buprepo)
+ warning "content cannot be completely removed from bup remote"
+ return True
where
go r
| Git.repoIsUrl r = void $ onBupRemote r boolSystem "git" params
- | otherwise = void $ liftIO $ catchMaybeIO $
- boolSystem "git" $ Git.Command.gitCommandLine params r
- params = [ Params "branch -D", Param (bupRef k) ]
+ | otherwise = void $ liftIO $ catchMaybeIO $ do
+ r' <- Git.Config.read r
+ boolSystem "git" $ Git.Command.gitCommandLine params r'
+ params = [ Params "branch -q -D", Param (bupRef k) ]
{- Bup does not provide a way to tell if a given dataset is present
- in a bup repository. One way it to check if the git repository has
- a branch matching the name (as created by bup split -n).
-}
-checkPresent :: Git.Repo -> Git.Repo -> Key -> Annex (Either String Bool)
-checkPresent r bupr k
+checkKey :: Git.Repo -> Git.Repo -> CheckPresent
+checkKey r bupr k
| Git.repoIsUrl bupr = do
showChecking r
- ok <- onBupRemote bupr boolSystem "git" params
- return $ Right ok
- | otherwise = liftIO $ catchMsgIO $
- boolSystem "git" $ Git.Command.gitCommandLine params bupr
+ onBupRemote bupr boolSystem "git" params
+ | otherwise = liftIO $ boolSystem "git" $
+ Git.Command.gitCommandLine params bupr
where
params =
[ Params "show-ref --quiet --verify"
@@ -223,7 +206,8 @@ storeBupUUID u buprepo = do
onBupRemote :: Git.Repo -> (FilePath -> [CommandParam] -> IO a) -> FilePath -> [CommandParam] -> Annex a
onBupRemote r a command params = do
- sshparams <- Ssh.toRepo r [Param $
+ c <- Annex.getRemoteGitConfig r
+ sshparams <- Ssh.toRepo r c [Param $
"cd " ++ dir ++ " && " ++ unwords (command : toCommand params)]
liftIO $ a "ssh" sshparams
where
diff --git a/Remote/Ddar.hs b/Remote/Ddar.hs
new file mode 100644
index 000000000..7495fcd42
--- /dev/null
+++ b/Remote/Ddar.hs
@@ -0,0 +1,199 @@
+{- Using ddar as a remote. Based on bup and rsync remotes.
+ -
+ - Copyright 2011 Joey Hess <id@joeyh.name>
+ - Copyright 2014 Robie Basak <robie@justgohome.co.uk>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Remote.Ddar (remote) where
+
+import qualified Data.Map as M
+import qualified Data.ByteString.Lazy as L
+import System.IO.Error
+
+import Common.Annex
+import Types.Remote
+import Types.Key
+import Types.Creds
+import qualified Git
+import Config
+import Config.Cost
+import Remote.Helper.Special
+import Annex.Ssh
+import Annex.UUID
+
+data DdarRepo = DdarRepo
+ { ddarRepoConfig :: RemoteGitConfig
+ , ddarRepoLocation :: String
+ }
+
+remote :: RemoteType
+remote = RemoteType {
+ typename = "ddar",
+ enumerate = findSpecialRemotes "ddarrepo",
+ generate = gen,
+ setup = ddarSetup
+}
+
+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
+gen r u c gc = do
+ cst <- remoteCost gc $
+ if ddarLocal ddarrepo
+ then nearlyCheapRemoteCost
+ else expensiveRemoteCost
+ return $ Just $ specialRemote' specialcfg c
+ (simplyPrepare $ store ddarrepo)
+ (simplyPrepare $ retrieve ddarrepo)
+ (simplyPrepare $ remove ddarrepo)
+ (simplyPrepare $ checkKey ddarrepo)
+ (this cst)
+ where
+ this cst = Remote
+ { uuid = u
+ , cost = cst
+ , name = Git.repoDescribe r
+ , storeKey = storeKeyDummy
+ , retrieveKeyFile = retreiveKeyFileDummy
+ , retrieveKeyFileCheap = retrieveCheap
+ , removeKey = removeKeyDummy
+ , checkPresent = checkPresentDummy
+ , checkPresentCheap = ddarLocal ddarrepo
+ , whereisKey = Nothing
+ , remoteFsck = Nothing
+ , repairRepo = Nothing
+ , config = c
+ , repo = r
+ , gitconfig = gc
+ , localpath = if ddarLocal ddarrepo && not (null $ ddarRepoLocation ddarrepo)
+ then Just $ ddarRepoLocation ddarrepo
+ else Nothing
+ , remotetype = remote
+ , availability = if ddarLocal ddarrepo then LocallyAvailable else GloballyAvailable
+ , readonly = False
+ , mkUnavailable = return Nothing
+ , getInfo = return [("repo", ddarRepoLocation ddarrepo)]
+ , claimUrl = Nothing
+ , checkUrl = Nothing
+ }
+ ddarrepo = maybe (error "missing ddarrepo") (DdarRepo gc) (remoteAnnexDdarRepo gc)
+ specialcfg = (specialRemoteCfg c)
+ -- chunking would not improve ddar
+ { chunkConfig = NoChunks
+ }
+
+ddarSetup :: Maybe UUID -> Maybe CredPair -> RemoteConfig -> Annex (RemoteConfig, UUID)
+ddarSetup mu _ c = do
+ u <- maybe (liftIO genUUID) return mu
+
+ -- verify configuration is sane
+ let ddarrepo = fromMaybe (error "Specify ddarrepo=") $
+ M.lookup "ddarrepo" c
+ (c', _encsetup) <- encryptionSetup c
+
+ -- The ddarrepo is stored in git config, as well as this repo's
+ -- persistant state, so it can vary between hosts.
+ gitConfigSpecialRemote u c' "ddarrepo" ddarrepo
+
+ return (c', u)
+
+store :: DdarRepo -> Storer
+store ddarrepo = fileStorer $ \k src _p -> do
+ let params =
+ [ Param "c"
+ , Param "-N"
+ , Param $ key2file k
+ , Param $ ddarRepoLocation ddarrepo
+ , File src
+ ]
+ liftIO $ boolSystem "ddar" params
+
+{- Convert remote DdarRepo to host and path on remote end -}
+splitRemoteDdarRepo :: DdarRepo -> (String, String)
+splitRemoteDdarRepo ddarrepo =
+ (host, ddarrepo')
+ where
+ (host, remainder) = span (/= ':') (ddarRepoLocation ddarrepo)
+ ddarrepo' = drop 1 remainder
+
+{- Return the command and parameters to use for a ddar call that may need to be
+ - made on a remote repository. This will call ssh if needed. -}
+ddarRemoteCall :: DdarRepo -> Char -> [CommandParam] -> Annex (String, [CommandParam])
+ddarRemoteCall ddarrepo cmd params
+ | ddarLocal ddarrepo = return ("ddar", localParams)
+ | otherwise = do
+ os <- sshOptions (host, Nothing) (ddarRepoConfig ddarrepo) remoteParams
+ return ("ssh", os)
+ where
+ (host, ddarrepo') = splitRemoteDdarRepo ddarrepo
+ localParams = Param [cmd] : Param (ddarRepoLocation ddarrepo) : params
+ remoteParams = Param host : Param "ddar" : Param [cmd] : Param ddarrepo' : params
+
+{- Specialized ddarRemoteCall that includes extraction command and flags -}
+ddarExtractRemoteCall :: DdarRepo -> Key -> Annex (String, [CommandParam])
+ddarExtractRemoteCall ddarrepo k =
+ ddarRemoteCall ddarrepo 'x' [Param "--force-stdout", Param $ key2file k]
+
+retrieve :: DdarRepo -> Retriever
+retrieve ddarrepo = byteRetriever $ \k sink -> do
+ (cmd, params) <- ddarExtractRemoteCall ddarrepo k
+ let p = (proc cmd $ toCommand params) { std_out = CreatePipe }
+ (_, Just h, _, pid) <- liftIO $ createProcess p
+ liftIO (hClose h >> forceSuccessProcess p pid)
+ `after` (sink =<< liftIO (L.hGetContents h))
+
+retrieveCheap :: Key -> FilePath -> Annex Bool
+retrieveCheap _ _ = return False
+
+remove :: DdarRepo -> Remover
+remove ddarrepo key = do
+ (cmd, params) <- ddarRemoteCall ddarrepo 'd' [Param $ key2file key]
+ liftIO $ boolSystem cmd params
+
+ddarDirectoryExists :: DdarRepo -> Annex (Either String Bool)
+ddarDirectoryExists ddarrepo
+ | ddarLocal ddarrepo = do
+ maybeStatus <- liftIO $ tryJust (guard . isDoesNotExistError) $ getFileStatus $ ddarRepoLocation ddarrepo
+ return $ case maybeStatus of
+ Left _ -> Right False
+ Right status -> Right $ isDirectory status
+ | otherwise = do
+ ps <- sshOptions (host, Nothing) (ddarRepoConfig ddarrepo) params
+ exitCode <- liftIO $ safeSystem "ssh" ps
+ case exitCode of
+ ExitSuccess -> return $ Right True
+ ExitFailure 1 -> return $ Right False
+ ExitFailure code -> return $ Left $ "ssh call " ++
+ show (unwords $ toCommand params) ++
+ " failed with status " ++ show code
+ where
+ (host, ddarrepo') = splitRemoteDdarRepo ddarrepo
+ params =
+ [ Param host
+ , Param "test"
+ , Param "-d"
+ , Param ddarrepo'
+ ]
+
+{- Use "ddar t" to determine if a given key is present in a ddar archive -}
+inDdarManifest :: DdarRepo -> Key -> Annex (Either String Bool)
+inDdarManifest ddarrepo k = do
+ (cmd, params) <- ddarRemoteCall ddarrepo 't' []
+ let p = proc cmd $ toCommand params
+ liftIO $ catchMsgIO $ withHandle StdoutHandle createProcessSuccess p $ \h -> do
+ contents <- hGetContents h
+ return $ elem k' $ lines contents
+ where
+ k' = key2file k
+
+checkKey :: DdarRepo -> CheckPresent
+checkKey ddarrepo key = do
+ directoryExists <- ddarDirectoryExists ddarrepo
+ case directoryExists of
+ Left e -> error e
+ Right True -> either error return
+ =<< inDdarManifest ddarrepo key
+ Right False -> return False
+
+ddarLocal :: DdarRepo -> Bool
+ddarLocal = notElem ':' . ddarRepoLocation
diff --git a/Remote/Directory.hs b/Remote/Directory.hs
index afa2296ec..2eeb79317 100644
--- a/Remote/Directory.hs
+++ b/Remote/Directory.hs
@@ -1,18 +1,21 @@
{- A "remote" that is just a filesystem directory.
-
- - Copyright 2011-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
{-# LANGUAGE CPP #-}
-module Remote.Directory (remote) where
+module Remote.Directory (
+ remote,
+ finalizeStoreGeneric,
+ removeDirGeneric,
+) where
import qualified Data.ByteString.Lazy as L
-import qualified Data.ByteString as S
import qualified Data.Map as M
-import Data.Int
+import Data.Default
import Common.Annex
import Types.Remote
@@ -22,9 +25,7 @@ import Config.Cost
import Config
import Utility.FileMode
import Remote.Helper.Special
-import Remote.Helper.Encryptable
-import Remote.Helper.Chunked
-import Crypto
+import qualified Remote.Directory.LegacyChunked as Legacy
import Annex.Content
import Annex.UUID
import Utility.Metered
@@ -40,31 +41,38 @@ remote = RemoteType {
gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
gen r u c gc = do
cst <- remoteCost gc cheapRemoteCost
- let chunksize = chunkSize c
- return $ Just $ encryptableRemote c
- (storeEncrypted dir (getGpgEncParams (c,gc)) chunksize)
- (retrieveEncrypted dir chunksize)
- Remote {
- uuid = u,
- cost = cst,
- name = Git.repoDescribe r,
- storeKey = store dir chunksize,
- retrieveKeyFile = retrieve dir chunksize,
- retrieveKeyFileCheap = retrieveCheap dir chunksize,
- removeKey = remove dir,
- hasKey = checkPresent dir chunksize,
- hasKeyCheap = True,
- whereisKey = Nothing,
- remoteFsck = Nothing,
- repairRepo = Nothing,
- config = c,
- repo = r,
- gitconfig = gc,
- localpath = Just dir,
- readonly = False,
- availability = LocallyAvailable,
- remotetype = remote
- }
+ let chunkconfig = getChunkConfig c
+ return $ Just $ specialRemote c
+ (prepareStore dir chunkconfig)
+ (retrieve dir chunkconfig)
+ (simplyPrepare $ remove dir)
+ (simplyPrepare $ checkKey dir chunkconfig)
+ Remote
+ { uuid = u
+ , cost = cst
+ , name = Git.repoDescribe r
+ , storeKey = storeKeyDummy
+ , retrieveKeyFile = retreiveKeyFileDummy
+ , retrieveKeyFileCheap = retrieveCheap dir chunkconfig
+ , removeKey = removeKeyDummy
+ , checkPresent = checkPresentDummy
+ , checkPresentCheap = True
+ , whereisKey = Nothing
+ , remoteFsck = Nothing
+ , repairRepo = Nothing
+ , config = c
+ , repo = r
+ , gitconfig = gc
+ , localpath = Just dir
+ , readonly = False
+ , availability = LocallyAvailable
+ , remotetype = remote
+ , mkUnavailable = gen r u c $
+ gc { remoteAnnexDirectory = Just "/dev/null" }
+ , getInfo = return [("directory", dir)]
+ , claimUrl = Nothing
+ , checkUrl = Nothing
+ }
where
dir = fromMaybe (error "missing directory") $ remoteAnnexDirectory gc
@@ -77,179 +85,125 @@ directorySetup mu _ c = do
absdir <- liftIO $ absPath dir
liftIO $ unlessM (doesDirectoryExist absdir) $
error $ "Directory does not exist: " ++ absdir
- c' <- encryptionSetup c
+ (c', _encsetup) <- encryptionSetup c
-- The directory is stored in git config, not in this remote's
-- persistant state, so it can vary between hosts.
gitConfigSpecialRemote u c' "directory" absdir
return (M.delete "directory" c', u)
-{- Locations to try to access a given Key in the Directory.
- - We try more than since we used to write to different hash directories. -}
+{- Locations to try to access a given Key in the directory.
+ - We try more than one since we used to write to different hash
+ - directories. -}
locations :: FilePath -> Key -> [FilePath]
locations d k = map (d </>) (keyPaths k)
+{- Returns the location off a Key in the directory. If the key is
+ - present, returns the location that is actually used, otherwise
+ - returns the first, default location. -}
+getLocation :: FilePath -> Key -> IO FilePath
+getLocation d k = do
+ let locs = locations d k
+ fromMaybe (Prelude.head locs) <$> firstM doesFileExist locs
+
{- Directory where the file(s) for a key are stored. -}
storeDir :: FilePath -> Key -> FilePath
-storeDir d k = addTrailingPathSeparator $ d </> hashDirLower k </> keyFile k
+storeDir d k = addTrailingPathSeparator $ d </> hashDirLower def k </> keyFile k
-{- Where we store temporary data for a key as it's being uploaded. -}
+{- Where we store temporary data for a key, in the directory, as it's being
+ - written. -}
tmpDir :: FilePath -> Key -> FilePath
tmpDir d k = addTrailingPathSeparator $ d </> "tmp" </> keyFile k
-withCheckedFiles :: (FilePath -> IO Bool) -> ChunkSize -> FilePath -> Key -> ([FilePath] -> IO Bool) -> IO Bool
-withCheckedFiles _ _ [] _ _ = return False
-withCheckedFiles check Nothing d k a = go $ locations d k
- where
- go [] = return False
- go (f:fs) = ifM (check f) ( a [f] , go fs )
-withCheckedFiles check (Just _) d k a = go $ locations d k
- where
- go [] = return False
- go (f:fs) = do
- let chunkcount = f ++ chunkCount
- ifM (check chunkcount)
- ( do
- chunks <- listChunks f <$> readFile chunkcount
- ifM (allM check chunks)
- ( a chunks , return False )
- , do
- chunks <- probeChunks f check
- if null chunks
- then go fs
- else a chunks
- )
-
-withStoredFiles :: ChunkSize -> FilePath -> Key -> ([FilePath] -> IO Bool) -> IO Bool
-withStoredFiles = withCheckedFiles doesFileExist
-
-store :: FilePath -> ChunkSize -> Key -> AssociatedFile -> MeterUpdate -> Annex Bool
-store d chunksize k _f p = sendAnnex k (void $ remove d k) $ \src ->
- metered (Just p) k $ \meterupdate ->
- storeHelper d chunksize k k $ \dests ->
- case chunksize of
- Nothing -> do
- let dest = Prelude.head dests
- meteredWriteFile meterupdate dest
- =<< L.readFile src
- return [dest]
- Just _ ->
- storeSplit meterupdate chunksize dests
- =<< L.readFile src
-
-storeEncrypted :: FilePath -> [CommandParam] -> ChunkSize -> (Cipher, Key) -> Key -> MeterUpdate -> Annex Bool
-storeEncrypted d gpgOpts chunksize (cipher, enck) k p = sendAnnex k (void $ remove d enck) $ \src ->
- metered (Just p) k $ \meterupdate ->
- storeHelper d chunksize enck k $ \dests ->
- encrypt gpgOpts cipher (feedFile src) $ readBytes $ \b ->
- case chunksize of
- Nothing -> do
- let dest = Prelude.head dests
- meteredWriteFile meterupdate dest b
- return [dest]
- Just _ -> storeSplit meterupdate chunksize dests b
-
-{- Splits a ByteString into chunks and writes to dests, obeying configured
- - chunk size (not to be confused with the L.ByteString chunk size).
- - Note: Must always write at least one file, even for empty ByteString. -}
-storeSplit :: MeterUpdate -> ChunkSize -> [FilePath] -> L.ByteString -> IO [FilePath]
-storeSplit _ Nothing _ _ = error "bad storeSplit call"
-storeSplit _ _ [] _ = error "bad storeSplit call"
-storeSplit meterupdate (Just chunksize) alldests@(firstdest:_) b
- | L.null b = do
- -- must always write at least one file, even for empty
- L.writeFile firstdest b
- return [firstdest]
- | otherwise = storeSplit' meterupdate chunksize alldests (L.toChunks b) []
-storeSplit' :: MeterUpdate -> Int64 -> [FilePath] -> [S.ByteString] -> [FilePath] -> IO [FilePath]
-storeSplit' _ _ [] _ _ = error "ran out of dests"
-storeSplit' _ _ _ [] c = return $ reverse c
-storeSplit' meterupdate chunksize (d:dests) bs c = do
- bs' <- withFile d WriteMode $
- feed zeroBytesProcessed chunksize bs
- storeSplit' meterupdate chunksize dests bs' (d:c)
- where
- feed _ _ [] _ = return []
- feed bytes sz (l:ls) h = do
- let len = S.length l
- let s = fromIntegral len
- if s <= sz || sz == chunksize
- then do
- S.hPut h l
- let bytes' = addBytesProcessed bytes len
- meterupdate bytes'
- feed bytes' (sz - s) ls h
- else return (l:ls)
-
-storeHelper :: FilePath -> ChunkSize -> Key -> Key -> ([FilePath] -> IO [FilePath]) -> Annex Bool
-storeHelper d chunksize key origkey storer = check <&&> go
- where
- tmpdir = tmpDir d key
- destdir = storeDir d key
- {- An encrypted key does not have a known size,
- - so check that the size of the original key is available as free
- - space. -}
- check = do
- liftIO $ createDirectoryIfMissing True tmpdir
- checkDiskSpace (Just tmpdir) origkey 0
- go = liftIO $ catchBoolIO $
- storeChunks key tmpdir destdir chunksize storer recorder finalizer
- finalizer tmp dest = do
- void $ tryIO $ allowWrite dest -- may already exist
- void $ tryIO $ removeDirectoryRecursive dest -- or not exist
- createDirectoryIfMissing True (parentDir dest)
- renameDirectory tmp dest
- -- may fail on some filesystems
- void $ tryIO $ do
- mapM_ preventWrite =<< dirContents dest
- preventWrite dest
- recorder f s = do
- void $ tryIO $ allowWrite f
- writeFile f s
- void $ tryIO $ preventWrite f
-
-retrieve :: FilePath -> ChunkSize -> Key -> AssociatedFile -> FilePath -> MeterUpdate -> Annex Bool
-retrieve d chunksize k _ f p = metered (Just p) k $ \meterupdate ->
- liftIO $ withStoredFiles chunksize d k $ \files ->
- catchBoolIO $ do
- meteredWriteFileChunks meterupdate f files L.readFile
- return True
-
-retrieveEncrypted :: FilePath -> ChunkSize -> (Cipher, Key) -> Key -> FilePath -> MeterUpdate -> Annex Bool
-retrieveEncrypted d chunksize (cipher, enck) k f p = metered (Just p) k $ \meterupdate ->
- liftIO $ withStoredFiles chunksize d enck $ \files ->
- catchBoolIO $ do
- decrypt cipher (feeder files) $
- readBytes $ meteredWriteFile meterupdate f
+{- Check if there is enough free disk space in the remote's directory to
+ - store the key. Note that the unencrypted key size is checked. -}
+prepareStore :: FilePath -> ChunkConfig -> Preparer Storer
+prepareStore d chunkconfig = checkPrepare
+ (\k -> checkDiskSpace (Just d) k 0)
+ (byteStorer $ store d chunkconfig)
+
+store :: FilePath -> ChunkConfig -> Key -> L.ByteString -> MeterUpdate -> Annex Bool
+store d chunkconfig k b p = liftIO $ do
+ void $ tryIO $ createDirectoryIfMissing True tmpdir
+ case chunkconfig of
+ LegacyChunks chunksize -> Legacy.store chunksize finalizeStoreGeneric k b p tmpdir destdir
+ _ -> do
+ let tmpf = tmpdir </> keyFile k
+ meteredWriteFile p tmpf b
+ finalizeStoreGeneric tmpdir destdir
return True
where
- feeder files h = forM_ files $ L.hPut h <=< L.readFile
-
-retrieveCheap :: FilePath -> ChunkSize -> Key -> FilePath -> Annex Bool
-retrieveCheap _ (Just _) _ _ = return False -- no cheap retrieval for chunks
+ tmpdir = tmpDir d k
+ destdir = storeDir d k
+
+{- Passed a temp directory that contains the files that should be placed
+ - in the dest directory, moves it into place. Anything already existing
+ - in the dest directory will be deleted. File permissions will be locked
+ - down. -}
+finalizeStoreGeneric :: FilePath -> FilePath -> IO ()
+finalizeStoreGeneric tmp dest = do
+ void $ tryIO $ allowWrite dest -- may already exist
+ void $ tryIO $ removeDirectoryRecursive dest -- or not exist
+ createDirectoryIfMissing True (parentDir dest)
+ renameDirectory tmp dest
+ -- may fail on some filesystems
+ void $ tryIO $ do
+ mapM_ preventWrite =<< dirContents dest
+ preventWrite dest
+
+retrieve :: FilePath -> ChunkConfig -> Preparer Retriever
+retrieve d (LegacyChunks _) = Legacy.retrieve locations d
+retrieve d _ = simplyPrepare $ byteRetriever $ \k sink ->
+ sink =<< liftIO (L.readFile =<< getLocation d k)
+
+retrieveCheap :: FilePath -> ChunkConfig -> Key -> FilePath -> Annex Bool
+-- no cheap retrieval possible for chunks
+retrieveCheap _ (UnpaddedChunks _) _ _ = return False
+retrieveCheap _ (LegacyChunks _) _ _ = return False
#ifndef mingw32_HOST_OS
-retrieveCheap d _ k f = liftIO $ withStoredFiles Nothing d k go
- where
- go [file] = catchBoolIO $ createSymbolicLink file f >> return True
- go _files = return False
+retrieveCheap d NoChunks k f = liftIO $ catchBoolIO $ do
+ file <- getLocation d k
+ createSymbolicLink file f
+ return True
#else
retrieveCheap _ _ _ _ = return False
#endif
-remove :: FilePath -> Key -> Annex Bool
-remove d k = liftIO $ do
+remove :: FilePath -> Remover
+remove d k = liftIO $ removeDirGeneric d (storeDir d k)
+
+{- Removes the directory, which must be located under the topdir.
+ -
+ - Succeeds even on directories and contents that do not have write
+ - permission.
+ -
+ - If the directory does not exist, succeeds as long as the topdir does
+ - exist. If the topdir does not exist, fails, because in this case the
+ - remote is not currently accessible and probably still has the content
+ - we were supposed to remove from it.
+ -}
+removeDirGeneric :: FilePath -> FilePath -> IO Bool
+removeDirGeneric topdir dir = do
void $ tryIO $ allowWrite dir
#ifdef mingw32_HOST_OS
{- Windows needs the files inside the directory to be writable
- before it can delete them. -}
void $ tryIO $ mapM_ allowWrite =<< dirContents dir
#endif
- catchBoolIO $ do
+ ok <- catchBoolIO $ do
removeDirectoryRecursive dir
return True
- where
- dir = storeDir d k
-
-checkPresent :: FilePath -> ChunkSize -> Key -> Annex (Either String Bool)
-checkPresent d chunksize k = liftIO $ catchMsgIO $ withStoredFiles chunksize d k $
- const $ return True -- withStoredFiles checked that it exists
+ if ok
+ then return ok
+ else doesDirectoryExist topdir <&&> (not <$> doesDirectoryExist dir)
+
+checkKey :: FilePath -> ChunkConfig -> CheckPresent
+checkKey d (LegacyChunks _) k = Legacy.checkKey d locations k
+checkKey d _ k = liftIO $
+ ifM (anyM doesFileExist (locations d k))
+ ( return True
+ , ifM (doesDirectoryExist d)
+ ( return False
+ , error $ "directory " ++ d ++ " is not accessible"
+ )
+ )
diff --git a/Remote/Directory/LegacyChunked.hs b/Remote/Directory/LegacyChunked.hs
new file mode 100644
index 000000000..72d52f95d
--- /dev/null
+++ b/Remote/Directory/LegacyChunked.hs
@@ -0,0 +1,109 @@
+{- Legacy chunksize support for directory special remote.
+ -
+ - Can be removed eventually.
+ -
+ - Copyright 2011-2012 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Remote.Directory.LegacyChunked where
+
+import qualified Data.ByteString.Lazy as L
+import qualified Data.ByteString as S
+
+import Common.Annex
+import Utility.FileMode
+import Remote.Helper.Special
+import qualified Remote.Helper.Chunked.Legacy as Legacy
+import Annex.Perms
+import Utility.Metered
+
+withCheckedFiles :: (FilePath -> IO Bool) -> FilePath -> (FilePath -> Key -> [FilePath]) -> Key -> ([FilePath] -> IO Bool) -> IO Bool
+withCheckedFiles _ [] _locations _ _ = return False
+withCheckedFiles check d locations k a = go $ locations d k
+ where
+ go [] = return False
+ go (f:fs) = do
+ let chunkcount = f ++ Legacy.chunkCount
+ ifM (check chunkcount)
+ ( do
+ chunks <- Legacy.listChunks f <$> readFile chunkcount
+ ifM (allM check chunks)
+ ( a chunks , return False )
+ , do
+ chunks <- Legacy.probeChunks f check
+ if null chunks
+ then go fs
+ else a chunks
+ )
+withStoredFiles :: FilePath -> (FilePath -> Key -> [FilePath]) -> Key -> ([FilePath] -> IO Bool) -> IO Bool
+withStoredFiles = withCheckedFiles doesFileExist
+
+{- Splits a ByteString into chunks and writes to dests, obeying configured
+ - chunk size (not to be confused with the L.ByteString chunk size). -}
+storeLegacyChunked :: MeterUpdate -> ChunkSize -> [FilePath] -> L.ByteString -> IO [FilePath]
+storeLegacyChunked _ _ [] _ = error "bad storeLegacyChunked call"
+storeLegacyChunked meterupdate chunksize alldests@(firstdest:_) b
+ | L.null b = do
+ -- always write at least one file, even for empty
+ L.writeFile firstdest b
+ return [firstdest]
+ | otherwise = storeLegacyChunked' meterupdate chunksize alldests (L.toChunks b) []
+storeLegacyChunked' :: MeterUpdate -> ChunkSize -> [FilePath] -> [S.ByteString] -> [FilePath] -> IO [FilePath]
+storeLegacyChunked' _ _ [] _ _ = error "ran out of dests"
+storeLegacyChunked' _ _ _ [] c = return $ reverse c
+storeLegacyChunked' meterupdate chunksize (d:dests) bs c = do
+ bs' <- withFile d WriteMode $
+ feed zeroBytesProcessed chunksize bs
+ storeLegacyChunked' meterupdate chunksize dests bs' (d:c)
+ where
+ feed _ _ [] _ = return []
+ feed bytes sz (l:ls) h = do
+ let len = S.length l
+ let s = fromIntegral len
+ if s <= sz || sz == chunksize
+ then do
+ S.hPut h l
+ let bytes' = addBytesProcessed bytes len
+ meterupdate bytes'
+ feed bytes' (sz - s) ls h
+ else return (l:ls)
+
+storeHelper :: (FilePath -> FilePath -> IO ()) -> Key -> ([FilePath] -> IO [FilePath]) -> FilePath -> FilePath -> IO Bool
+storeHelper finalizer key storer tmpdir destdir = do
+ void $ liftIO $ tryIO $ createDirectoryIfMissing True tmpdir
+ Legacy.storeChunks key tmpdir destdir storer recorder finalizer
+ where
+ recorder f s = do
+ void $ tryIO $ allowWrite f
+ writeFile f s
+ void $ tryIO $ preventWrite f
+
+store :: ChunkSize -> (FilePath -> FilePath -> IO ()) -> Key -> L.ByteString -> MeterUpdate -> FilePath -> FilePath -> IO Bool
+store chunksize finalizer k b p = storeHelper finalizer k $ \dests ->
+ storeLegacyChunked p chunksize dests b
+
+{- Need to get a single ByteString containing every chunk.
+ - Done very innefficiently, by writing to a temp file.
+ - :/ This is legacy code..
+ -}
+retrieve :: (FilePath -> Key -> [FilePath]) -> FilePath -> Preparer Retriever
+retrieve locations d basek a = do
+ showLongNote "This remote uses the deprecated chunksize setting. So this will be quite slow."
+ tmpdir <- fromRepo $ gitAnnexTmpMiscDir
+ createAnnexDirectory tmpdir
+ let tmp = tmpdir </> keyFile basek ++ ".directorylegacy.tmp"
+ a $ Just $ byteRetriever $ \k sink -> do
+ liftIO $ void $ withStoredFiles d locations k $ \fs -> do
+ forM_ fs $
+ S.appendFile tmp <=< S.readFile
+ return True
+ b <- liftIO $ L.readFile tmp
+ liftIO $ nukeFile tmp
+ sink b
+
+checkKey :: FilePath -> (FilePath -> Key -> [FilePath]) -> Key -> Annex Bool
+checkKey d locations k = liftIO $ withStoredFiles d locations k $
+ -- withStoredFiles checked that it exists
+ const $ return True
diff --git a/Remote/External.hs b/Remote/External.hs
index 9be9175c7..0579400ed 100644
--- a/Remote/External.hs
+++ b/Remote/External.hs
@@ -1,6 +1,6 @@
{- External special remote interface.
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -12,26 +12,22 @@ import qualified Annex
import Common.Annex
import Types.Remote
import Types.CleanupActions
+import Types.UrlContents
import qualified Git
import Config
import Remote.Helper.Special
-import Remote.Helper.Encryptable
-import Crypto
import Utility.Metered
import Logs.Transfer
import Logs.PreferredContent.Raw
import Logs.RemoteState
+import Logs.Web
import Config.Cost
-import Annex.Content
import Annex.UUID
-import Annex.Exception
import Creds
import Control.Concurrent.STM
-import System.Process (std_in, std_out, std_err)
import System.Log.Logger (debugM)
import qualified Data.Map as M
-import qualified Data.ByteString.Lazy as L
remote :: RemoteType
remote = RemoteType {
@@ -47,30 +43,37 @@ gen r u c gc = do
Annex.addCleanup (RemoteCleanup u) $ stopExternal external
cst <- getCost external r gc
avail <- getAvailability external r gc
- return $ Just $ encryptableRemote c
- (storeEncrypted external $ getGpgEncParams (c,gc))
- (retrieveEncrypted external)
- Remote {
- uuid = u,
- cost = cst,
- name = Git.repoDescribe r,
- storeKey = store external,
- retrieveKeyFile = retrieve external,
- retrieveKeyFileCheap = \_ _ -> return False,
- removeKey = remove external,
- hasKey = checkPresent external,
- hasKeyCheap = False,
- whereisKey = Nothing,
- remoteFsck = Nothing,
- repairRepo = Nothing,
- config = c,
- localpath = Nothing,
- repo = r,
- gitconfig = gc,
- readonly = False,
- availability = avail,
- remotetype = remote
- }
+ return $ Just $ specialRemote c
+ (simplyPrepare $ store external)
+ (simplyPrepare $ retrieve external)
+ (simplyPrepare $ remove external)
+ (simplyPrepare $ checkKey external)
+ Remote
+ { uuid = u
+ , cost = cst
+ , name = Git.repoDescribe r
+ , storeKey = storeKeyDummy
+ , retrieveKeyFile = retreiveKeyFileDummy
+ , retrieveKeyFileCheap = \_ _ -> return False
+ , removeKey = removeKeyDummy
+ , checkPresent = checkPresentDummy
+ , checkPresentCheap = False
+ , whereisKey = Nothing
+ , remoteFsck = Nothing
+ , repairRepo = Nothing
+ , config = c
+ , localpath = Nothing
+ , repo = r
+ , gitconfig = gc
+ , readonly = False
+ , availability = avail
+ , remotetype = remote
+ , mkUnavailable = gen r u c $
+ gc { remoteAnnexExternalType = Just "!dne!" }
+ , getInfo = return [("externaltype", externaltype)]
+ , claimUrl = Just (claimurl external)
+ , checkUrl = Just (checkurl external)
+ }
where
externaltype = fromMaybe (error "missing externaltype") (remoteAnnexExternalType gc)
@@ -79,7 +82,7 @@ externalSetup mu _ c = do
u <- maybe (liftIO genUUID) return mu
let externaltype = fromMaybe (error "Specify externaltype=") $
M.lookup "externaltype" c
- c' <- encryptionSetup c
+ (c', _encsetup) <- encryptionSetup c
external <- newExternal externaltype u c'
handleRequest external INITREMOTE Nothing $ \resp -> case resp of
@@ -91,25 +94,8 @@ externalSetup mu _ c = do
gitConfigSpecialRemote u c'' "externaltype" externaltype
return (c'', u)
-store :: External -> Key -> AssociatedFile -> MeterUpdate -> Annex Bool
-store external k _f p = sendAnnex k rollback $ \f ->
- metered (Just p) k $
- storeHelper external k f
- where
- rollback = void $ remove external k
-
-storeEncrypted :: External -> [CommandParam] -> (Cipher, Key) -> Key -> MeterUpdate -> Annex Bool
-storeEncrypted external gpgOpts (cipher, enck) k p = withTmp enck $ \tmp ->
- sendAnnex k rollback $ \src -> do
- metered (Just p) k $ \meterupdate -> do
- liftIO $ encrypt gpgOpts cipher (feedFile src) $
- readBytes $ L.writeFile tmp
- storeHelper external enck tmp meterupdate
- where
- rollback = void $ remove external enck
-
-storeHelper :: External -> Key -> FilePath -> MeterUpdate -> Annex Bool
-storeHelper external k f p = safely $
+store :: External -> Storer
+store external = fileStorer $ \k f p ->
handleRequest external (TRANSFER Upload k f) (Just p) $ \resp ->
case resp of
TRANSFER_SUCCESS Upload k' | k == k' ->
@@ -120,34 +106,18 @@ storeHelper external k f p = safely $
return False
_ -> Nothing
-retrieve :: External -> Key -> AssociatedFile -> FilePath -> MeterUpdate -> Annex Bool
-retrieve external k _f d p = metered (Just p) k $
- retrieveHelper external k d
-
-retrieveEncrypted :: External -> (Cipher, Key) -> Key -> FilePath -> MeterUpdate -> Annex Bool
-retrieveEncrypted external (cipher, enck) k f p = withTmp enck $ \tmp ->
- metered (Just p) k $ \meterupdate ->
- ifM (retrieveHelper external enck tmp meterupdate)
- ( liftIO $ catchBoolIO $ do
- decrypt cipher (feedFile tmp) $
- readBytes $ L.writeFile f
- return True
- , return False
- )
-
-retrieveHelper :: External -> Key -> FilePath -> MeterUpdate -> Annex Bool
-retrieveHelper external k d p = safely $
+retrieve :: External -> Retriever
+retrieve external = fileRetriever $ \d k p ->
handleRequest external (TRANSFER Download k d) (Just p) $ \resp ->
case resp of
TRANSFER_SUCCESS Download k'
- | k == k' -> Just $ return True
+ | k == k' -> Just $ return ()
TRANSFER_FAILURE Download k' errmsg
| k == k' -> Just $ do
- warning errmsg
- return False
+ error errmsg
_ -> Nothing
-remove :: External -> Key -> Annex Bool
+remove :: External -> Remover
remove external k = safely $
handleRequest external (REMOVE k) Nothing $ \resp ->
case resp of
@@ -159,8 +129,8 @@ remove external k = safely $
return False
_ -> Nothing
-checkPresent :: External -> Key -> Annex (Either String Bool)
-checkPresent external k = either (Left . show) id <$> tryAnnex go
+checkKey :: External -> CheckPresent
+checkKey external k = either error id <$> go
where
go = handleRequest external (CHECKPRESENT k) Nothing $ \resp ->
case resp of
@@ -173,7 +143,7 @@ checkPresent external k = either (Left . show) id <$> tryAnnex go
_ -> Nothing
safely :: Annex Bool -> Annex Bool
-safely a = go =<< tryAnnex a
+safely a = go =<< tryNonAsync a
where
go (Right r) = return r
go (Left e) = do
@@ -204,7 +174,7 @@ handleRequest' lck external req mp responsehandler
go
| otherwise = go
where
- go = do
+ go = do
sendMessage lck external req
loop
loop = receiveMessage lck external responsehandler
@@ -214,7 +184,7 @@ handleRequest' lck external req mp responsehandler
handleRemoteRequest (PROGRESS bytesprocessed) =
maybe noop (\a -> liftIO $ a bytesprocessed) mp
handleRemoteRequest (DIRHASH k) =
- send $ VALUE $ hashDirMixed k
+ send $ VALUE $ hashDirMixed def k
handleRemoteRequest (SETCONFIG setting value) =
liftIO $ atomically $ do
let v = externalConfig external
@@ -226,7 +196,7 @@ handleRequest' lck external req mp responsehandler
send $ VALUE value
handleRemoteRequest (SETCREDS setting login password) = do
c <- liftIO $ atomically $ readTMVar $ externalConfig external
- c' <- setRemoteCredPair c (credstorage setting) $
+ c' <- setRemoteCredPair encryptionAlreadySetup c (credstorage setting) $
Just (login, password)
void $ liftIO $ atomically $ swapTMVar (externalConfig external) c'
handleRemoteRequest (GETCREDS setting) = do
@@ -249,6 +219,14 @@ handleRequest' lck external req mp responsehandler
state <- fromMaybe ""
<$> getRemoteState (externalUUID external) key
send $ VALUE state
+ handleRemoteRequest (SETURLPRESENT key url) =
+ setUrlPresent (externalUUID external) key url
+ handleRemoteRequest (SETURLMISSING key url) =
+ setUrlMissing (externalUUID external) key url
+ handleRemoteRequest (GETURLS key prefix) = do
+ mapM_ (send . VALUE . fst . getDownloader)
+ =<< getUrlsWithPrefix key prefix
+ send (VALUE "") -- end of list
handleRemoteRequest (DEBUG msg) = liftIO $ debugM "external" msg
handleRemoteRequest (VERSION _) =
sendMessage lck external $ ERROR "too late to send VERSION"
@@ -443,3 +421,27 @@ getAvailability external r gc = maybe query return (remoteAnnexAvailability gc)
_ -> Nothing
setRemoteAvailability r avail
return avail
+
+claimurl :: External -> URLString -> Annex Bool
+claimurl external url =
+ handleRequest external (CLAIMURL url) Nothing $ \req -> case req of
+ CLAIMURL_SUCCESS -> Just $ return True
+ CLAIMURL_FAILURE -> Just $ return False
+ UNSUPPORTED_REQUEST -> Just $ return False
+ _ -> Nothing
+
+checkurl :: External -> URLString -> Annex UrlContents
+checkurl external url =
+ handleRequest external (CHECKURL url) Nothing $ \req -> case req of
+ CHECKURL_CONTENTS sz f -> Just $ return $ UrlContents sz
+ (if null f then Nothing else Just $ mkSafeFilePath f)
+ -- Treat a single item multi response specially to
+ -- simplify the external remote implementation.
+ CHECKURL_MULTI ((_, sz, f):[]) ->
+ Just $ return $ UrlContents sz $ Just $ mkSafeFilePath f
+ CHECKURL_MULTI l -> Just $ return $ UrlMulti $ map mkmulti l
+ CHECKURL_FAILURE errmsg -> Just $ error errmsg
+ UNSUPPORTED_REQUEST -> error "CHECKURL not implemented by external special remote"
+ _ -> Nothing
+ where
+ mkmulti (u, s, f) = (u, s, mkSafeFilePath f)
diff --git a/Remote/External/Types.hs b/Remote/External/Types.hs
index 1e17a2c4c..d0fb2ff7a 100644
--- a/Remote/External/Types.hs
+++ b/Remote/External/Types.hs
@@ -1,11 +1,12 @@
{- External special remote data types.
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
{-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
module Remote.External.Types (
External(..),
@@ -15,9 +16,9 @@ module Remote.External.Types (
withExternalLock,
ExternalState(..),
PrepareStatus(..),
- parseMessage,
- Sendable(..),
- Receivable(..),
+ Proto.parseMessage,
+ Proto.Sendable(..),
+ Proto.Receivable(..),
Request(..),
needsPREPARE,
Response(..),
@@ -31,7 +32,6 @@ module Remote.External.Types (
) where
import Common.Annex
-import Annex.Exception
import Types.Key (file2key, key2file)
import Types.StandardGroups (PreferredContentExpression)
import Utility.Metered (BytesProcessed(..))
@@ -39,12 +39,12 @@ import Logs.Transfer (Direction(..))
import Config.Cost (Cost)
import Types.Remote (RemoteConfig)
import Types.Availability (Availability(..))
+import Utility.Url (URLString)
+import qualified Utility.SimpleProtocol as Proto
-import Data.Char
import Control.Concurrent.STM
-- If the remote is not yet running, the ExternalState TMVar is empty.
--- The
data External = External
{ externalType :: ExternalType
, externalUUID :: UUID
@@ -85,28 +85,14 @@ withExternalLock external = bracketIO setup cleanup
cleanup = atomically . putTMVar v
v = externalLock external
--- Messages that git-annex can send.
-class Sendable m where
- formatMessage :: m -> [String]
-
--- Messages that git-annex can receive.
-class Receivable m where
- -- Passed the first word of the message, returns
- -- a Parser that can be be fed the rest of the message to generate
- -- the value.
- parseCommand :: String -> Parser m
-
-parseMessage :: (Receivable m) => String -> Maybe m
-parseMessage s = parseCommand command rest
- where
- (command, rest) = splitWord s
-
-- Messages that can be sent to the external remote to request it do something.
data Request
= PREPARE
| INITREMOTE
| GETCOST
| GETAVAILABILITY
+ | CLAIMURL URLString
+ | CHECKURL URLString
| TRANSFER Direction Key FilePath
| CHECKPRESENT Key
| REMOVE Key
@@ -118,15 +104,21 @@ needsPREPARE PREPARE = False
needsPREPARE INITREMOTE = False
needsPREPARE _ = True
-instance Sendable Request where
+instance Proto.Sendable Request where
formatMessage PREPARE = ["PREPARE"]
formatMessage INITREMOTE = ["INITREMOTE"]
formatMessage GETCOST = ["GETCOST"]
formatMessage GETAVAILABILITY = ["GETAVAILABILITY"]
+ formatMessage (CLAIMURL url) = [ "CLAIMURL", Proto.serialize url ]
+ formatMessage (CHECKURL url) = [ "CHECKURL", Proto.serialize url ]
formatMessage (TRANSFER direction key file) =
- [ "TRANSFER", serialize direction, serialize key, serialize file ]
- formatMessage (CHECKPRESENT key) = [ "CHECKPRESENT", serialize key ]
- formatMessage (REMOVE key) = [ "REMOVE", serialize key ]
+ [ "TRANSFER"
+ , Proto.serialize direction
+ , Proto.serialize key
+ , Proto.serialize file
+ ]
+ formatMessage (CHECKPRESENT key) = [ "CHECKPRESENT", Proto.serialize key ]
+ formatMessage (REMOVE key) = [ "REMOVE", Proto.serialize key ]
-- Responses the external remote can make to requests.
data Response
@@ -143,25 +135,35 @@ data Response
| AVAILABILITY Availability
| INITREMOTE_SUCCESS
| INITREMOTE_FAILURE ErrorMsg
+ | CLAIMURL_SUCCESS
+ | CLAIMURL_FAILURE
+ | CHECKURL_CONTENTS Size FilePath
+ | CHECKURL_MULTI [(URLString, Size, FilePath)]
+ | CHECKURL_FAILURE ErrorMsg
| UNSUPPORTED_REQUEST
deriving (Show)
-instance Receivable Response where
- parseCommand "PREPARE-SUCCESS" = parse0 PREPARE_SUCCESS
- parseCommand "PREPARE-FAILURE" = parse1 PREPARE_FAILURE
- parseCommand "TRANSFER-SUCCESS" = parse2 TRANSFER_SUCCESS
- parseCommand "TRANSFER-FAILURE" = parse3 TRANSFER_FAILURE
- parseCommand "CHECKPRESENT-SUCCESS" = parse1 CHECKPRESENT_SUCCESS
- parseCommand "CHECKPRESENT-FAILURE" = parse1 CHECKPRESENT_FAILURE
- parseCommand "CHECKPRESENT-UNKNOWN" = parse2 CHECKPRESENT_UNKNOWN
- parseCommand "REMOVE-SUCCESS" = parse1 REMOVE_SUCCESS
- parseCommand "REMOVE-FAILURE" = parse2 REMOVE_FAILURE
- parseCommand "COST" = parse1 COST
- parseCommand "AVAILABILITY" = parse1 AVAILABILITY
- parseCommand "INITREMOTE-SUCCESS" = parse0 INITREMOTE_SUCCESS
- parseCommand "INITREMOTE-FAILURE" = parse1 INITREMOTE_FAILURE
- parseCommand "UNSUPPORTED-REQUEST" = parse0 UNSUPPORTED_REQUEST
- parseCommand _ = parseFail
+instance Proto.Receivable Response where
+ parseCommand "PREPARE-SUCCESS" = Proto.parse0 PREPARE_SUCCESS
+ parseCommand "PREPARE-FAILURE" = Proto.parse1 PREPARE_FAILURE
+ parseCommand "TRANSFER-SUCCESS" = Proto.parse2 TRANSFER_SUCCESS
+ parseCommand "TRANSFER-FAILURE" = Proto.parse3 TRANSFER_FAILURE
+ parseCommand "CHECKPRESENT-SUCCESS" = Proto.parse1 CHECKPRESENT_SUCCESS
+ parseCommand "CHECKPRESENT-FAILURE" = Proto.parse1 CHECKPRESENT_FAILURE
+ parseCommand "CHECKPRESENT-UNKNOWN" = Proto.parse2 CHECKPRESENT_UNKNOWN
+ parseCommand "REMOVE-SUCCESS" = Proto.parse1 REMOVE_SUCCESS
+ parseCommand "REMOVE-FAILURE" = Proto.parse2 REMOVE_FAILURE
+ parseCommand "COST" = Proto.parse1 COST
+ parseCommand "AVAILABILITY" = Proto.parse1 AVAILABILITY
+ parseCommand "INITREMOTE-SUCCESS" = Proto.parse0 INITREMOTE_SUCCESS
+ parseCommand "INITREMOTE-FAILURE" = Proto.parse1 INITREMOTE_FAILURE
+ parseCommand "CLAIMURL-SUCCESS" = Proto.parse0 CLAIMURL_SUCCESS
+ parseCommand "CLAIMURL-FAILURE" = Proto.parse0 CLAIMURL_FAILURE
+ parseCommand "CHECKURL-CONTENTS" = Proto.parse2 CHECKURL_CONTENTS
+ parseCommand "CHECKURL-MULTI" = Proto.parse1 CHECKURL_MULTI
+ parseCommand "CHECKURL-FAILURE" = Proto.parse1 CHECKURL_FAILURE
+ parseCommand "UNSUPPORTED-REQUEST" = Proto.parse0 UNSUPPORTED_REQUEST
+ parseCommand _ = Proto.parseFail
-- Requests that the external remote can send at any time it's in control.
data RemoteRequest
@@ -178,25 +180,31 @@ data RemoteRequest
| GETWANTED
| SETSTATE Key String
| GETSTATE Key
+ | SETURLPRESENT Key URLString
+ | SETURLMISSING Key URLString
+ | GETURLS Key String
| DEBUG String
deriving (Show)
-instance Receivable RemoteRequest where
- parseCommand "VERSION" = parse1 VERSION
- parseCommand "PROGRESS" = parse1 PROGRESS
- parseCommand "DIRHASH" = parse1 DIRHASH
- parseCommand "SETCONFIG" = parse2 SETCONFIG
- parseCommand "GETCONFIG" = parse1 GETCONFIG
- parseCommand "SETCREDS" = parse3 SETCREDS
- parseCommand "GETCREDS" = parse1 GETCREDS
- parseCommand "GETUUID" = parse0 GETUUID
- parseCommand "GETGITDIR" = parse0 GETGITDIR
- parseCommand "SETWANTED" = parse1 SETWANTED
- parseCommand "GETWANTED" = parse0 GETWANTED
- parseCommand "SETSTATE" = parse2 SETSTATE
- parseCommand "GETSTATE" = parse1 GETSTATE
- parseCommand "DEBUG" = parse1 DEBUG
- parseCommand _ = parseFail
+instance Proto.Receivable RemoteRequest where
+ parseCommand "VERSION" = Proto.parse1 VERSION
+ parseCommand "PROGRESS" = Proto.parse1 PROGRESS
+ parseCommand "DIRHASH" = Proto.parse1 DIRHASH
+ parseCommand "SETCONFIG" = Proto.parse2 SETCONFIG
+ parseCommand "GETCONFIG" = Proto.parse1 GETCONFIG
+ parseCommand "SETCREDS" = Proto.parse3 SETCREDS
+ parseCommand "GETCREDS" = Proto.parse1 GETCREDS
+ parseCommand "GETUUID" = Proto.parse0 GETUUID
+ parseCommand "GETGITDIR" = Proto.parse0 GETGITDIR
+ parseCommand "SETWANTED" = Proto.parse1 SETWANTED
+ parseCommand "GETWANTED" = Proto.parse0 GETWANTED
+ parseCommand "SETSTATE" = Proto.parse2 SETSTATE
+ parseCommand "GETSTATE" = Proto.parse1 GETSTATE
+ parseCommand "SETURLPRESENT" = Proto.parse2 SETURLPRESENT
+ parseCommand "SETURLMISSING" = Proto.parse2 SETURLMISSING
+ parseCommand "GETURLS" = Proto.parse2 GETURLS
+ parseCommand "DEBUG" = Proto.parse1 DEBUG
+ parseCommand _ = Proto.parseFail
-- Responses to RemoteRequest.
data RemoteResponse
@@ -204,36 +212,33 @@ data RemoteResponse
| CREDS String String
deriving (Show)
-instance Sendable RemoteResponse where
- formatMessage (VALUE s) = [ "VALUE", serialize s ]
- formatMessage (CREDS login password) = [ "CREDS", serialize login, serialize password ]
+instance Proto.Sendable RemoteResponse where
+ formatMessage (VALUE s) = [ "VALUE", Proto.serialize s ]
+ formatMessage (CREDS login password) = [ "CREDS", Proto.serialize login, Proto.serialize password ]
-- Messages that can be sent at any time by either git-annex or the remote.
data AsyncMessage
= ERROR ErrorMsg
deriving (Show)
-instance Sendable AsyncMessage where
- formatMessage (ERROR err) = [ "ERROR", serialize err ]
+instance Proto.Sendable AsyncMessage where
+ formatMessage (ERROR err) = [ "ERROR", Proto.serialize err ]
-instance Receivable AsyncMessage where
- parseCommand "ERROR" = parse1 ERROR
- parseCommand _ = parseFail
+instance Proto.Receivable AsyncMessage where
+ parseCommand "ERROR" = Proto.parse1 ERROR
+ parseCommand _ = Proto.parseFail
-- Data types used for parameters when communicating with the remote.
-- All are serializable.
type ErrorMsg = String
type Setting = String
type ProtocolVersion = Int
+type Size = Maybe Integer
supportedProtocolVersions :: [ProtocolVersion]
supportedProtocolVersions = [1]
-class ExternalSerializable a where
- serialize :: a -> String
- deserialize :: String -> Maybe a
-
-instance ExternalSerializable Direction where
+instance Proto.Serializable Direction where
serialize Upload = "STORE"
serialize Download = "RETRIEVE"
@@ -241,23 +246,29 @@ instance ExternalSerializable Direction where
deserialize "RETRIEVE" = Just Download
deserialize _ = Nothing
-instance ExternalSerializable Key where
+instance Proto.Serializable Key where
serialize = key2file
deserialize = file2key
-instance ExternalSerializable [Char] where
+instance Proto.Serializable [Char] where
serialize = id
deserialize = Just
-instance ExternalSerializable ProtocolVersion where
+instance Proto.Serializable ProtocolVersion where
serialize = show
deserialize = readish
-instance ExternalSerializable Cost where
+instance Proto.Serializable Cost where
serialize = show
deserialize = readish
-instance ExternalSerializable Availability where
+instance Proto.Serializable Size where
+ serialize (Just s) = show s
+ serialize Nothing = "UNKNOWN"
+ deserialize "UNKNOWN" = Just Nothing
+ deserialize s = maybe Nothing (Just . Just) (readish s)
+
+instance Proto.Serializable Availability where
serialize GloballyAvailable = "GLOBAL"
serialize LocallyAvailable = "LOCAL"
@@ -265,37 +276,15 @@ instance ExternalSerializable Availability where
deserialize "LOCAL" = Just LocallyAvailable
deserialize _ = Nothing
-instance ExternalSerializable BytesProcessed where
+instance Proto.Serializable BytesProcessed where
serialize (BytesProcessed n) = show n
deserialize = BytesProcessed <$$> readish
-{- Parsing the parameters of messages. Using the right parseN ensures
- - that the string is split into exactly the requested number of words,
- - which allows the last parameter of a message to contain arbitrary
- - whitespace, etc, without needing any special quoting.
- -}
-type Parser a = String -> Maybe a
-
-parseFail :: Parser a
-parseFail _ = Nothing
-
-parse0 :: a -> Parser a
-parse0 mk "" = Just mk
-parse0 _ _ = Nothing
-
-parse1 :: ExternalSerializable p1 => (p1 -> a) -> Parser a
-parse1 mk p1 = mk <$> deserialize p1
-
-parse2 :: (ExternalSerializable p1, ExternalSerializable p2) => (p1 -> p2 -> a) -> Parser a
-parse2 mk s = mk <$> deserialize p1 <*> deserialize p2
- where
- (p1, p2) = splitWord s
-
-parse3 :: (ExternalSerializable p1, ExternalSerializable p2, ExternalSerializable p3) => (p1 -> p2 -> p3 -> a) -> Parser a
-parse3 mk s = mk <$> deserialize p1 <*> deserialize p2 <*> deserialize p3
- where
- (p1, rest) = splitWord s
- (p2, p3) = splitWord rest
-
-splitWord :: String -> (String, String)
-splitWord = separate isSpace
+instance Proto.Serializable [(URLString, Size, FilePath)] where
+ serialize = unwords . map go
+ where
+ go (url, sz, f) = url ++ " " ++ maybe "UNKNOWN" show sz ++ " " ++ f
+ deserialize = Just . go [] . words
+ where
+ go c (url:sz:f:rest) = go ((url, readish sz, f):c) rest
+ go c _ = reverse c
diff --git a/Remote/GCrypt.hs b/Remote/GCrypt.hs
index 60c2df73e..54c90536f 100644
--- a/Remote/GCrypt.hs
+++ b/Remote/GCrypt.hs
@@ -1,13 +1,13 @@
{- git remotes encrypted using git-remote-gcrypt
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Remote.GCrypt (
remote,
- gen,
+ chainGen,
getGCryptUUID,
coreGCryptId,
setupRepo
@@ -15,7 +15,8 @@ module Remote.GCrypt (
import qualified Data.Map as M
import qualified Data.ByteString.Lazy as L
-import Control.Exception.Extensible
+import Control.Exception
+import Data.Default
import Common.Annex
import Types.Remote
@@ -29,7 +30,6 @@ import qualified Git.GCrypt
import qualified Git.Construct
import qualified Git.Types as Git ()
import qualified Annex.Branch
-import qualified Annex.Content
import Config
import Config.Cost
import Remote.Helper.Git
@@ -38,16 +38,15 @@ import Remote.Helper.Special
import Remote.Helper.Messages
import qualified Remote.Helper.Ssh as Ssh
import Utility.Metered
-import Crypto
import Annex.UUID
import Annex.Ssh
import qualified Remote.Rsync
+import qualified Remote.Directory
import Utility.Rsync
import Utility.Tmp
import Logs.Remote
import Logs.Transfer
import Utility.Gpg
-import Annex.Content
remote :: RemoteType
remote = RemoteType {
@@ -59,19 +58,24 @@ remote = RemoteType {
setup = gCryptSetup
}
-gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
-gen gcryptr u c gc = do
+chainGen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
+chainGen gcryptr u c gc = do
g <- gitRepo
-- get underlying git repo with real path, not gcrypt path
r <- liftIO $ Git.GCrypt.encryptedRemote g gcryptr
let r' = r { Git.remoteName = Git.remoteName gcryptr }
+ gen r' u c gc
+
+gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
+gen baser u c gc = do
-- doublecheck that cache matches underlying repo's gcrypt-id
-- (which might not be set), only for local repos
- (mgcryptid, r'') <- getGCryptId True r'
- case (mgcryptid, Git.GCrypt.remoteRepoId g (Git.remoteName gcryptr)) of
+ (mgcryptid, r) <- getGCryptId True baser gc
+ g <- gitRepo
+ case (mgcryptid, Git.GCrypt.remoteRepoId g (Git.remoteName baser)) of
(Just gcryptid, Just cachedgcryptid)
- | gcryptid /= cachedgcryptid -> resetup gcryptid r''
- _ -> gen' r'' u c gc
+ | gcryptid /= cachedgcryptid -> resetup gcryptid r
+ _ -> gen' r u c gc
where
-- A different drive may have been mounted, making a different
-- gcrypt remote available. So need to set the cached
@@ -81,10 +85,10 @@ gen gcryptr u c gc = do
resetup gcryptid r = do
let u' = genUUIDInNameSpace gCryptNameSpace gcryptid
v <- M.lookup u' <$> readRemoteLog
- case (Git.remoteName gcryptr, v) of
+ case (Git.remoteName baser, v) of
(Just remotename, Just c') -> do
setGcryptEncryption c' remotename
- setConfig (remoteConfig gcryptr "uuid") (fromUUID u')
+ setConfig (remoteConfig baser "uuid") (fromUUID u')
setConfig (ConfigKey $ Git.GCrypt.remoteConfigKey "gcrypt-id" remotename) gcryptid
gen' r u' c' gc
_ -> do
@@ -95,18 +99,18 @@ gen' :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remo
gen' r u c gc = do
cst <- remoteCost gc $
if repoCheap r then nearlyCheapRemoteCost else expensiveRemoteCost
- (rsynctransport, rsyncurl) <- rsyncTransportToObjects r
+ (rsynctransport, rsyncurl) <- rsyncTransportToObjects r gc
let rsyncopts = Remote.Rsync.genRsyncOpts c gc rsynctransport rsyncurl
let this = Remote
{ uuid = u
, cost = cst
, name = Git.repoDescribe r
- , storeKey = \_ _ _ -> noCrypto
- , retrieveKeyFile = \_ _ _ _ -> noCrypto
+ , storeKey = storeKeyDummy
+ , retrieveKeyFile = retreiveKeyFileDummy
, retrieveKeyFileCheap = \_ _ -> return False
- , removeKey = remove this rsyncopts
- , hasKey = checkPresent this rsyncopts
- , hasKeyCheap = repoCheap r
+ , removeKey = removeKeyDummy
+ , checkPresent = checkPresentDummy
+ , checkPresentCheap = repoCheap r
, whereisKey = Nothing
, remoteFsck = Nothing
, repairRepo = Nothing
@@ -117,46 +121,58 @@ gen' r u c gc = do
, readonly = Git.repoIsHttp r
, availability = availabilityCalc r
, remotetype = remote
+ , mkUnavailable = return Nothing
+ , getInfo = gitRepoInfo this
+ , claimUrl = Nothing
+ , checkUrl = Nothing
}
- return $ Just $ encryptableRemote c
- (store this rsyncopts)
- (retrieve this rsyncopts)
+ return $ Just $ specialRemote' specialcfg c
+ (simplyPrepare $ store this rsyncopts)
+ (simplyPrepare $ retrieve this rsyncopts)
+ (simplyPrepare $ remove this rsyncopts)
+ (simplyPrepare $ checkKey this rsyncopts)
this
+ where
+ specialcfg
+ | Git.repoIsUrl r = (specialRemoteCfg c)
+ -- Rsync displays its own progress.
+ { displayProgress = False }
+ | otherwise = specialRemoteCfg c
-rsyncTransportToObjects :: Git.Repo -> Annex ([CommandParam], String)
-rsyncTransportToObjects r = do
- (rsynctransport, rsyncurl, _) <- rsyncTransport r
+rsyncTransportToObjects :: Git.Repo -> RemoteGitConfig -> Annex ([CommandParam], String)
+rsyncTransportToObjects r gc = do
+ (rsynctransport, rsyncurl, _) <- rsyncTransport r gc
return (rsynctransport, rsyncurl ++ "/annex/objects")
-rsyncTransport :: Git.Repo -> Annex ([CommandParam], String, AccessMethod)
-rsyncTransport r
+rsyncTransport :: Git.Repo -> RemoteGitConfig -> Annex ([CommandParam], String, AccessMethod)
+rsyncTransport r gc
| "ssh://" `isPrefixOf` loc = sshtransport $ break (== '/') $ drop (length "ssh://") loc
| "//:" `isInfixOf` loc = othertransport
| ":" `isInfixOf` loc = sshtransport $ separate (== ':') loc
| otherwise = othertransport
where
- loc = Git.repoLocation r
+ loc = Git.repoLocation r
sshtransport (host, path) = do
let rsyncpath = if "/~/" `isPrefixOf` path
then drop 3 path
else path
- opts <- sshCachingOptions (host, Nothing) []
+ opts <- sshOptions (host, Nothing) gc []
return (rsyncShell $ Param "ssh" : opts, host ++ ":" ++ rsyncpath, AccessShell)
othertransport = return ([], loc, AccessDirect)
noCrypto :: Annex a
noCrypto = error "cannot use gcrypt remote without encryption enabled"
-unsupportedUrl :: Annex a
+unsupportedUrl :: a
unsupportedUrl = error "using non-ssh remote repo url with gcrypt is not supported"
gCryptSetup :: Maybe UUID -> Maybe CredPair -> RemoteConfig -> Annex (RemoteConfig, UUID)
gCryptSetup mu _ c = go $ M.lookup "gitrepo" c
where
remotename = fromJust (M.lookup "name" c)
- go Nothing = error "Specify gitrepo="
+ go Nothing = error "Specify gitrepo="
go (Just gitrepo) = do
- c' <- encryptionSetup c
+ (c', _encsetup) <- encryptionSetup c
inRepo $ Git.Command.run
[ Params "remote add"
, Param remotename
@@ -189,7 +205,7 @@ gCryptSetup mu _ c = go $ M.lookup "gitrepo" c
method <- setupRepo gcryptid =<< inRepo (Git.Construct.fromRemoteLocation gitrepo)
gitConfigSpecialRemote u c' "gcrypt" (fromAccessMethod method)
return (c', u)
- else error $ "uuid mismatch " ++ show (u, mu, gcryptid)
+ else error $ "uuid mismatch; expected " ++ show mu ++ " but remote gitrepo has " ++ show u ++ " (" ++ show gcryptid ++ ")"
{- Sets up the gcrypt repository. The repository is either a local
- repo, or it is accessed via rsync directly, or it is accessed over ssh
@@ -202,7 +218,7 @@ gCryptSetup mu _ c = go $ M.lookup "gitrepo" c
setupRepo :: Git.GCrypt.GCryptId -> Git.Repo -> Annex AccessMethod
setupRepo gcryptid r
| Git.repoIsUrl r = do
- (_, _, accessmethod) <- rsyncTransport r
+ (_, _, accessmethod) <- rsyncTransport r def
case accessmethod of
AccessDirect -> rsyncsetup
AccessShell -> ifM gitannexshellsetup
@@ -222,9 +238,9 @@ setupRepo gcryptid r
- create the objectDir on the remote,
- which is needed for direct rsync of objects to work.
-}
- rsyncsetup = Remote.Rsync.withRsyncScratchDir $ \tmp -> do
+ rsyncsetup = Remote.Rsync.withRsyncScratchDir $ \tmp -> do
liftIO $ createDirectoryIfMissing True $ tmp </> objectDir
- (rsynctransport, rsyncurl, _) <- rsyncTransport r
+ (rsynctransport, rsyncurl, _) <- rsyncTransport r def
let tmpconfig = tmp </> "config"
void $ liftIO $ rsync $ rsynctransport ++
[ Param $ rsyncurl ++ "/config"
@@ -244,29 +260,38 @@ setupRepo gcryptid r
{- Ask git-annex-shell to configure the repository as a gcrypt
- repository. May fail if it is too old. -}
- gitannexshellsetup = Ssh.onRemote r (boolSystem, False)
+ gitannexshellsetup = Ssh.onRemote r (boolSystem, return False)
"gcryptsetup" [ Param gcryptid ] []
denyNonFastForwards = "receive.denyNonFastForwards"
-shellOrRsync :: Remote -> Annex a -> Annex a -> Annex a
-shellOrRsync r ashell arsync = case method of
- AccessShell -> ashell
- _ -> arsync
+isShell :: Remote -> Bool
+isShell r = case method of
+ AccessShell -> True
+ _ -> False
where
- method = toAccessMethod $ fromMaybe "" $
+ method = toAccessMethod $ fromMaybe "" $
remoteAnnexGCrypt $ gitconfig r
+shellOrRsync :: Remote -> Annex a -> Annex a -> Annex a
+shellOrRsync r ashell arsync
+ | isShell r = ashell
+ | otherwise = arsync
+
{- Configure gcrypt to use the same list of keyids that
- were passed to initremote as its participants.
- Also, configure it to use a signing key that is in the list of
- participants, which gcrypt requires is the case, and may not be
- depending on system configuration.
-
- - (For shared encryption, gcrypt's default behavior is used.) -}
+ - (For shared encryption, gcrypt's default behavior is used.)
+ -
+ - Also, sets gcrypt-publish-participants to avoid unncessary gpg
+ - passphrase prompts.
+ -}
setGcryptEncryption :: RemoteConfig -> String -> Annex ()
setGcryptEncryption c remotename = do
- let participants = ConfigKey $ Git.GCrypt.remoteParticipantConfigKey remotename
+ let participants = remoteconfig Git.GCrypt.remoteParticipantConfigKey
case extractCipher c of
Nothing -> noCrypto
Just (EncryptedCipher _ _ (KeyIds { keyIds = ks})) -> do
@@ -278,80 +303,66 @@ setGcryptEncryption c remotename = do
(k:_) -> setConfig signingkey k
Just (SharedCipher _) ->
unsetConfig participants
+ setConfig (remoteconfig Git.GCrypt.remotePublishParticipantConfigKey)
+ (Git.Config.boolConfig True)
+ where
+ remoteconfig n = ConfigKey $ n remotename
-store :: Remote -> Remote.Rsync.RsyncOpts -> (Cipher, Key) -> Key -> MeterUpdate -> Annex Bool
-store r rsyncopts (cipher, enck) k p
- | not $ Git.repoIsUrl (repo r) = guardUsable (repo r) False $
- metered (Just p) k $ \meterupdate -> spoolencrypted $ \h -> do
- let dest = gCryptLocation r enck
- createDirectoryIfMissing True $ parentDir dest
- readBytes (meteredWriteFile meterupdate dest) h
+store :: Remote -> Remote.Rsync.RsyncOpts -> Storer
+store r rsyncopts
+ | not $ Git.repoIsUrl (repo r) =
+ byteStorer $ \k b p -> guardUsable (repo r) (return False) $ liftIO $ do
+ let tmpdir = Git.repoLocation (repo r) </> "tmp" </> keyFile k
+ void $ tryIO $ createDirectoryIfMissing True tmpdir
+ let tmpf = tmpdir </> keyFile k
+ meteredWriteFile p tmpf b
+ let destdir = parentDir $ gCryptLocation r k
+ Remote.Directory.finalizeStoreGeneric tmpdir destdir
return True
- | Git.repoIsSsh (repo r) = shellOrRsync r storeshell storersync
+ | Git.repoIsSsh (repo r) = if isShell r
+ then fileStorer $ \k f p -> Ssh.rsyncHelper (Just p)
+ =<< Ssh.rsyncParamsRemote False r Upload k f Nothing
+ else fileStorer $ Remote.Rsync.store rsyncopts
| otherwise = unsupportedUrl
- where
- gpgopts = getGpgEncParams r
- storersync = Remote.Rsync.storeEncrypted rsyncopts gpgopts (cipher, enck) k p
- storeshell = withTmp enck $ \tmp ->
- ifM (spoolencrypted $ readBytes $ \b -> catchBoolIO $ L.writeFile tmp b >> return True)
- ( Ssh.rsyncHelper (Just p)
- =<< Ssh.rsyncParamsRemote False r Upload enck tmp Nothing
- , return False
- )
- spoolencrypted a = Annex.Content.sendAnnex k noop $ \src ->
- liftIO $ catchBoolIO $
- encrypt gpgopts cipher (feedFile src) a
-
-retrieve :: Remote -> Remote.Rsync.RsyncOpts -> (Cipher, Key) -> Key -> FilePath -> MeterUpdate -> Annex Bool
-retrieve r rsyncopts (cipher, enck) k d p
- | not $ Git.repoIsUrl (repo r) = guardUsable (repo r) False $ do
- retrievewith $ L.readFile src
- return True
- | Git.repoIsSsh (repo r) = shellOrRsync r retrieveshell retrieversync
+
+retrieve :: Remote -> Remote.Rsync.RsyncOpts -> Retriever
+retrieve r rsyncopts
+ | not $ Git.repoIsUrl (repo r) = byteRetriever $ \k sink ->
+ guardUsable (repo r) (return False) $
+ sink =<< liftIO (L.readFile $ gCryptLocation r k)
+ | Git.repoIsSsh (repo r) = if isShell r
+ then fileRetriever $ \f k p ->
+ unlessM (Ssh.rsyncHelper (Just p) =<< Ssh.rsyncParamsRemote False r Download k f Nothing) $
+ error "rsync failed"
+ else fileRetriever $ Remote.Rsync.retrieve rsyncopts
| otherwise = unsupportedUrl
where
- src = gCryptLocation r enck
- retrievewith a = metered (Just p) k $ \meterupdate -> liftIO $
- a >>= \b ->
- decrypt cipher (feedBytes b)
- (readBytes $ meteredWriteFile meterupdate d)
- retrieversync = Remote.Rsync.retrieveEncrypted rsyncopts (cipher, enck) k d p
- retrieveshell = withTmp enck $ \tmp ->
- ifM (Ssh.rsyncHelper (Just p) =<< Ssh.rsyncParamsRemote False r Download enck tmp Nothing)
- ( liftIO $ catchBoolIO $ do
- decrypt cipher (feedFile tmp) $
- readBytes $ L.writeFile d
- return True
- , return False
- )
-
-remove :: Remote -> Remote.Rsync.RsyncOpts -> Key -> Annex Bool
+
+remove :: Remote -> Remote.Rsync.RsyncOpts -> Remover
remove r rsyncopts k
- | not $ Git.repoIsUrl (repo r) = guardUsable (repo r) False $ do
- liftIO $ removeDirectoryRecursive $ parentDir $ gCryptLocation r k
- return True
+ | not $ Git.repoIsUrl (repo r) = guardUsable (repo r) (return False) $
+ liftIO $ Remote.Directory.removeDirGeneric (Git.repoLocation (repo r)) (parentDir (gCryptLocation r k))
| Git.repoIsSsh (repo r) = shellOrRsync r removeshell removersync
| otherwise = unsupportedUrl
where
removersync = Remote.Rsync.remove rsyncopts k
removeshell = Ssh.dropKey (repo r) k
-checkPresent :: Remote -> Remote.Rsync.RsyncOpts -> Key -> Annex (Either String Bool)
-checkPresent r rsyncopts k
+checkKey :: Remote -> Remote.Rsync.RsyncOpts -> CheckPresent
+checkKey r rsyncopts k
| not $ Git.repoIsUrl (repo r) =
guardUsable (repo r) (cantCheck $ repo r) $
- liftIO $ catchDefaultIO (cantCheck $ repo r) $
- Right <$> doesFileExist (gCryptLocation r k)
+ liftIO $ doesFileExist (gCryptLocation r k)
| Git.repoIsSsh (repo r) = shellOrRsync r checkshell checkrsync
| otherwise = unsupportedUrl
where
- checkrsync = Remote.Rsync.checkPresent (repo r) rsyncopts k
+ checkrsync = Remote.Rsync.checkKey (repo r) rsyncopts k
checkshell = Ssh.inAnnex (repo r) k
{- Annexed objects are hashed using lower-case directories for max
- portability. -}
gCryptLocation :: Remote -> Key -> FilePath
-gCryptLocation r key = Git.repoLocation (repo r) </> objectDir </> keyPath key hashDirLower
+gCryptLocation r key = Git.repoLocation (repo r) </> objectDir </> keyPath key (hashDirLower def)
data AccessMethod = AccessDirect | AccessShell
@@ -365,7 +376,7 @@ toAccessMethod _ = AccessDirect
getGCryptUUID :: Bool -> Git.Repo -> Annex (Maybe UUID)
getGCryptUUID fast r = (genUUIDInNameSpace gCryptNameSpace <$>) . fst
- <$> getGCryptId fast r
+ <$> getGCryptId fast r def
coreGCryptId :: String
coreGCryptId = "core.gcrypt-id"
@@ -378,22 +389,22 @@ coreGCryptId = "core.gcrypt-id"
- tries git-annex-shell and direct rsync of the git config file.
-
- (Also returns a version of input repo with its config read.) -}
-getGCryptId :: Bool -> Git.Repo -> Annex (Maybe Git.GCrypt.GCryptId, Git.Repo)
-getGCryptId fast r
+getGCryptId :: Bool -> Git.Repo -> RemoteGitConfig -> Annex (Maybe Git.GCrypt.GCryptId, Git.Repo)
+getGCryptId fast r gc
| Git.repoIsLocal r || Git.repoIsLocalUnknown r = extract <$>
liftIO (catchMaybeIO $ Git.Config.read r)
| not fast = extract . liftM fst <$> getM (eitherToMaybe <$>)
- [ Ssh.onRemote r (Git.Config.fromPipe r, Left undefined) "configlist" [] []
- , getConfigViaRsync r
+ [ Ssh.onRemote r (Git.Config.fromPipe r, return (Left undefined)) "configlist" [] []
+ , getConfigViaRsync r gc
]
| otherwise = return (Nothing, r)
where
extract Nothing = (Nothing, r)
extract (Just r') = (Git.Config.getMaybe coreGCryptId r', r')
-getConfigViaRsync :: Git.Repo -> Annex (Either SomeException (Git.Repo, String))
-getConfigViaRsync r = do
- (rsynctransport, rsyncurl, _) <- rsyncTransport r
+getConfigViaRsync :: Git.Repo -> RemoteGitConfig -> Annex (Either SomeException (Git.Repo, String))
+getConfigViaRsync r gc = do
+ (rsynctransport, rsyncurl, _) <- rsyncTransport r gc
liftIO $ do
withTmpFile "tmpconfig" $ \tmpconfig _ -> do
void $ rsync $ rsynctransport ++
diff --git a/Remote/Git.hs b/Remote/Git.hs
index 995d66779..01fc0d663 100644
--- a/Remote/Git.hs
+++ b/Remote/Git.hs
@@ -1,6 +1,6 @@
{- Standard git remotes.
-
- - Copyright 2011-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -22,11 +22,11 @@ import qualified Git.Config
import qualified Git.Construct
import qualified Git.Command
import qualified Git.GCrypt
+import qualified Git.Types as Git
import qualified Annex
import Logs.Presence
-import Logs.Transfer
+import Annex.Transfer
import Annex.UUID
-import Annex.Exception
import qualified Annex.Content
import qualified Annex.BranchState
import qualified Annex.Branch
@@ -50,19 +50,20 @@ import Remote.Helper.Messages
import qualified Remote.Helper.Ssh as Ssh
import qualified Remote.GCrypt
import Config.Files
+import Creds
+import Annex.CatFile
import Control.Concurrent
import Control.Concurrent.MSampleVar
-import System.Process (std_in, std_err)
import qualified Data.Map as M
-import Control.Exception.Extensible
+import Network.URI
remote :: RemoteType
remote = RemoteType {
typename = "git",
enumerate = list,
generate = gen,
- setup = error "not supported"
+ setup = gitSetup
}
list :: Annex [Git.Repo]
@@ -80,6 +81,35 @@ list = do
Git.Construct.remoteNamed n $
Git.Construct.fromRemoteLocation url g
+{- Git remotes are normally set up using standard git command, not
+ - git-annex initremote and enableremote.
+ -
+ - For initremote, the git remote must already be set up, and have a uuid.
+ - Initremote simply remembers its location.
+ -
+ - enableremote simply sets up a git remote using the stored location.
+ - No attempt is made to make the remote be accessible via ssh key setup,
+ - etc.
+ -}
+gitSetup :: Maybe UUID -> Maybe CredPair -> RemoteConfig -> Annex (RemoteConfig, UUID)
+gitSetup Nothing _ c = do
+ let location = fromMaybe (error "Specify location=url") $
+ Url.parseURIRelaxed =<< M.lookup "location" c
+ g <- Annex.gitRepo
+ u <- case filter (\r -> Git.location r == Git.Url location) (Git.remotes g) of
+ [r] -> getRepoUUID r
+ [] -> error "could not find existing git remote with specified location"
+ _ -> error "found multiple git remotes with specified location"
+ return (c, u)
+gitSetup (Just u) _ c = do
+ inRepo $ Git.Command.run
+ [ Param "remote"
+ , Param "add"
+ , Param $ fromMaybe (error "no name") (M.lookup "name" c)
+ , Param $ fromMaybe (error "no location") (M.lookup "location" c)
+ ]
+ return (c, u)
+
{- It's assumed to be cheap to read the config of non-URL remotes, so this is
- done each time git-annex is run in a way that uses remotes.
-
@@ -87,10 +117,9 @@ list = do
- cached UUID value. -}
configRead :: Git.Repo -> Annex Git.Repo
configRead r = do
- g <- fromRepo id
- let c = extractRemoteGitConfig g (Git.repoDescribe r)
+ gc <- Annex.getRemoteGitConfig r
u <- getRepoUUID r
- case (repoCheap r, remoteAnnexIgnore c, u) of
+ case (repoCheap r, remoteAnnexIgnore gc, u) of
(_, True, _) -> return r
(True, _, _) -> tryGitConfigRead r
(False, _, NoUUID) -> tryGitConfigRead r
@@ -98,7 +127,7 @@ configRead r = do
gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
gen r u c gc
- | Git.GCrypt.isEncrypted r = Remote.GCrypt.gen r u c gc
+ | Git.GCrypt.isEncrypted r = Remote.GCrypt.chainGen r u c gc
| otherwise = go <$> remoteCost gc defcst
where
defcst = if repoCheap r then cheapRemoteCost else expensiveRemoteCost
@@ -112,8 +141,8 @@ gen r u c gc
, retrieveKeyFile = copyFromRemote new
, retrieveKeyFileCheap = copyFromRemoteCheap new
, removeKey = dropKey new
- , hasKey = inAnnex new
- , hasKeyCheap = repoCheap r
+ , checkPresent = inAnnex new
+ , checkPresentCheap = repoCheap r
, whereisKey = Nothing
, remoteFsck = if Git.repoIsUrl r
then Nothing
@@ -129,8 +158,25 @@ gen r u c gc
, readonly = Git.repoIsHttp r
, availability = availabilityCalc r
, remotetype = remote
+ , mkUnavailable = unavailable r u c gc
+ , getInfo = gitRepoInfo new
+ , claimUrl = Nothing
+ , checkUrl = Nothing
}
+unavailable :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
+unavailable r u c gc = gen r' u c gc
+ where
+ r' = case Git.location r of
+ Git.Local { Git.gitdir = d } ->
+ r { Git.location = Git.LocalUnknown d }
+ Git.Url url -> case uriAuthority url of
+ Just auth ->
+ let auth' = auth { uriRegName = "!dne!" }
+ in r { Git.location = Git.Url (url { uriAuthority = Just auth' })}
+ Nothing -> r { Git.location = Git.Unknown }
+ _ -> r -- already unavailable
+
{- Checks relatively inexpensively if a repository is available for use. -}
repoAvail :: Git.Repo -> Annex Bool
repoAvail r
@@ -153,7 +199,7 @@ tryGitConfigRead :: Git.Repo -> Annex Git.Repo
tryGitConfigRead r
| haveconfig r = return r -- already read
| Git.repoIsSsh r = store $ do
- v <- Ssh.onRemote r (pipedconfig, Left undefined) "configlist" [] []
+ v <- Ssh.onRemote r (pipedconfig, return (Left undefined)) "configlist" [] []
case v of
Right r'
| haveconfig r' -> return r'
@@ -162,20 +208,11 @@ tryGitConfigRead r
| Git.repoIsHttp r = store geturlconfig
| Git.GCrypt.isEncrypted r = handlegcrypt =<< getConfigMaybe (remoteConfig r "uuid")
| Git.repoIsUrl r = return r
- | otherwise = store $ safely $ do
- s <- Annex.new r
- Annex.eval s $ do
- Annex.BranchState.disableUpdate
- ensureInitialized
- Annex.getState Annex.repo
+ | otherwise = store $ liftIO $
+ readlocalannexconfig `catchNonAsync` (const $ return r)
where
haveconfig = not . M.null . Git.config
- -- Reading config can fail due to IO error or
- -- for other reasons; catch all possible exceptions.
- safely a = either (const $ return r) return
- =<< liftIO (try a :: IO (Either SomeException Git.Repo))
-
pipedconfig cmd params = do
v <- Git.Config.fromPipe r cmd params
case v of
@@ -197,7 +234,7 @@ tryGitConfigRead r
)
case v of
Left _ -> do
- set_ignore "not usable by git-annex"
+ set_ignore "not usable by git-annex" False
return r
Right r' -> do
-- Cache when http remote is not bare for
@@ -225,15 +262,18 @@ tryGitConfigRead r
configlist_failed = case Git.remoteName r of
Nothing -> return r
Just n -> do
- whenM (inRepo $ Git.Command.runBool [Param "fetch", Param "--quiet", Param n]) $
- set_ignore "does not have git-annex installed"
+ whenM (inRepo $ Git.Command.runBool [Param "fetch", Param "--quiet", Param n]) $ do
+ set_ignore "does not have git-annex installed" True
return r
- set_ignore msg = do
+ set_ignore msg longmessage = do
let k = "annex-ignore"
case Git.remoteName r of
Nothing -> noop
- Just n -> warning $ "Remote " ++ n ++ " " ++ msg ++ "; setting " ++ k
+ Just n -> do
+ warning $ "Remote " ++ n ++ " " ++ msg ++ "; setting " ++ k
+ when longmessage $
+ warning $ "This could be a problem with the git-annex installation on the remote. Please make sure that git-annex-shell is available in PATH when you ssh into the remote. Once you have fixed the git-annex installation, run: git config remote." ++ n ++ "." ++ k ++ " false"
setremote k (Git.Config.boolConfig True)
setremote k v = case Git.remoteName r of
@@ -251,31 +291,34 @@ tryGitConfigRead r
Just v -> store $ liftIO $ setUUID r $
genUUIDInNameSpace gCryptNameSpace v
-{- Checks if a given remote has the content for a key inAnnex.
- - If the remote cannot be accessed, or if it cannot determine
- - whether it has the content, returns a Left error message.
- -}
-inAnnex :: Remote -> Key -> Annex (Either String Bool)
+ {- The local repo may not yet be initialized, so try to initialize
+ - it if allowed. However, if that fails, still return the read
+ - git config. -}
+ readlocalannexconfig = do
+ s <- Annex.new r
+ Annex.eval s $ do
+ Annex.BranchState.disableUpdate
+ void $ tryNonAsync $ ensureInitialized
+ Annex.getState Annex.repo
+
+{- Checks if a given remote has the content for a key in its annex. -}
+inAnnex :: Remote -> Key -> Annex Bool
inAnnex rmt key
| Git.repoIsHttp r = checkhttp
| Git.repoIsUrl r = checkremote
| otherwise = checklocal
where
- r = repo rmt
+ r = repo rmt
checkhttp = do
showChecking r
ifM (Url.withUrlOptions $ \uo -> anyM (\u -> Url.checkBoth u (keySize key) uo) (keyUrls rmt key))
- ( return $ Right True
- , return $ Left "not found"
+ ( return True
+ , error "not found"
)
checkremote = Ssh.inAnnex r key
- checklocal = guardUsable r (cantCheck r) $ dispatch <$> check
- where
- check = either (Left . show) Right
- <$> tryAnnex (onLocal rmt $ Annex.Content.inAnnexSafe key)
- dispatch (Left e) = Left e
- dispatch (Right (Just b)) = Right b
- dispatch (Right Nothing) = cantCheck r
+ checklocal = guardUsable r (cantCheck r) $
+ maybe (cantCheck r) return
+ =<< onLocal rmt (Annex.Content.inAnnexSafe key)
keyUrls :: Remote -> Key -> [String]
keyUrls r key = map tourl locs'
@@ -284,25 +327,28 @@ keyUrls r key = map tourl locs'
-- If the remote is known to not be bare, try the hash locations
-- used for non-bare repos first, as an optimisation.
locs
- | remoteAnnexBare (gitconfig r) == Just False = reverse (annexLocations key)
- | otherwise = annexLocations key
+ | remoteAnnexBare remoteconfig == Just False = reverse (annexLocations cfg key)
+ | otherwise = annexLocations cfg key
#ifndef mingw32_HOST_OS
locs' = locs
#else
locs' = map (replace "\\" "/") locs
#endif
+ remoteconfig = gitconfig r
+ cfg = fromJust $ remoteGitConfig remoteconfig
dropKey :: Remote -> Key -> Annex Bool
dropKey r key
| not $ Git.repoIsUrl (repo r) =
- guardUsable (repo r) False $ commitOnCleanup r $ onLocal r $ do
- ensureInitialized
- whenM (Annex.Content.inAnnex key) $ do
- Annex.Content.lockContent key $
- Annex.Content.removeAnnex key
- logStatus key InfoMissing
- Annex.Content.saveState True
- return True
+ guardUsable (repo r) (return False) $
+ commitOnCleanup r $ onLocal r $ do
+ ensureInitialized
+ whenM (Annex.Content.inAnnex key) $ do
+ Annex.Content.lockContent key
+ Annex.Content.removeAnnex
+ logStatus key InfoMissing
+ Annex.Content.saveState True
+ return True
| Git.repoIsHttp (repo r) = error "dropping from http remote not supported"
| otherwise = commitOnCleanup r $ Ssh.dropKey (repo r) key
@@ -311,18 +357,32 @@ copyFromRemote :: Remote -> Key -> AssociatedFile -> FilePath -> MeterUpdate ->
copyFromRemote r key file dest _p = copyFromRemote' r key file dest
copyFromRemote' :: Remote -> Key -> AssociatedFile -> FilePath -> Annex Bool
copyFromRemote' r key file dest
- | not $ Git.repoIsUrl (repo r) = guardUsable (repo r) False $ do
- let params = Ssh.rsyncParams r Download
+ | not $ Git.repoIsUrl (repo r) = guardUsable (repo r) (return False) $ do
+ params <- Ssh.rsyncParams r Download
u <- getUUID
+#ifndef mingw32_HOST_OS
+ hardlink <- annexHardLink <$> Annex.getGitConfig
+#endif
-- run copy from perspective of remote
onLocal r $ do
ensureInitialized
v <- Annex.Content.prepSendAnnex key
case v of
Nothing -> return False
- Just (object, checksuccess) ->
- upload u key file noRetry
- (rsyncOrCopyFile params object dest)
+ Just (object, checksuccess) -> do
+ let copier = rsyncOrCopyFile params object dest
+#ifndef mingw32_HOST_OS
+ let linker = createLink object dest >> return True
+ go <- ifM (pure hardlink <&&> not <$> isDirect)
+ ( return $ \m -> liftIO (catchBoolIO linker)
+ <||> copier m
+ , return copier
+ )
+#else
+ let go = copier
+#endif
+ runTransfer (Transfer Download u key)
+ file noRetry go
<&&> checksuccess
| Git.repoIsSsh (repo r) = feedprogressback $ \feeder -> do
direct <- isDirect
@@ -357,6 +417,7 @@ copyFromRemote' r key file dest
Just (cmd, params) <- Ssh.git_annex_shell (repo r) "transferinfo"
[Param $ key2file key] fields
v <- liftIO (newEmptySV :: IO (MSampleVar Integer))
+ pidv <- liftIO $ newEmptyMVar
tid <- liftIO $ forkIO $ void $ tryIO $ do
bytes <- readSV v
p <- createProcess $
@@ -364,6 +425,7 @@ copyFromRemote' r key file dest
{ std_in = CreatePipe
, std_err = CreatePipe
}
+ putMVar pidv (processHandle p)
hClose $ stderrHandle p
let h = stdinHandle p
let send b = do
@@ -373,12 +435,17 @@ copyFromRemote' r key file dest
forever $
send =<< readSV v
let feeder = writeSV v . fromBytesProcessed
- bracketIO noop (const $ tryIO $ killThread tid) (const $ a feeder)
+ let cleanup = do
+ void $ tryIO $ killThread tid
+ tryNonAsync $
+ maybe noop (void . waitForProcess)
+ =<< tryTakeMVar pidv
+ bracketIO noop (const cleanup) (const $ a feeder)
copyFromRemoteCheap :: Remote -> Key -> FilePath -> Annex Bool
#ifndef mingw32_HOST_OS
copyFromRemoteCheap r key file
- | not $ Git.repoIsUrl (repo r) = guardUsable (repo r) False $ do
+ | not $ Git.repoIsUrl (repo r) = guardUsable (repo r) (return False) $ do
loc <- liftIO $ gitAnnexLocation key (repo r) $
fromJust $ remoteGitConfig $ gitconfig r
liftIO $ catchBoolIO $ createSymbolicLink loc file >> return True
@@ -396,7 +463,7 @@ copyFromRemoteCheap _ _ _ = return False
copyToRemote :: Remote -> Key -> AssociatedFile -> MeterUpdate -> Annex Bool
copyToRemote r key file p
| not $ Git.repoIsUrl (repo r) =
- guardUsable (repo r) False $ commitOnCleanup r $
+ guardUsable (repo r) (return False) $ commitOnCleanup r $
copylocal =<< Annex.Content.prepSendAnnex key
| Git.repoIsSsh (repo r) = commitOnCleanup r $
Annex.Content.sendAnnex key noop $ \object -> do
@@ -411,14 +478,14 @@ copyToRemote r key file p
-- the remote's Annex, but it needs access to the current
-- Annex monad's state.
checksuccessio <- Annex.withCurrentState checksuccess
- let params = Ssh.rsyncParams r Upload
+ params <- Ssh.rsyncParams r Upload
u <- getUUID
-- run copy from perspective of remote
onLocal r $ ifM (Annex.Content.inAnnex key)
( return True
, do
ensureInitialized
- download u key file noRetry $ const $
+ runTransfer (Transfer Download u key) file noRetry $ const $
Annex.Content.saveState True `after`
Annex.Content.getViaTmpChecked (liftIO checksuccessio) key
(\d -> rsyncOrCopyFile params object d p)
@@ -434,12 +501,12 @@ fsckOnRemote r params
| otherwise = return $ do
program <- readProgramFile
r' <- Git.Config.read r
- env <- getEnvironment
- let env' = addEntries
+ environ <- getEnvironment
+ let environ' = addEntries
[ ("GIT_WORK_TREE", Git.repoPath r')
, ("GIT_DIR", Git.localGitDir r')
- ] env
- batchCommandEnv program (Param "fsck" : params) $ Just env'
+ ] environ
+ batchCommandEnv program (Param "fsck" : params) (Just environ')
{- The passed repair action is run in the Annex monad of the remote. -}
repairRemote :: Git.Repo -> Annex Bool -> Annex (IO Bool)
@@ -453,6 +520,8 @@ repairRemote r a = return $ do
{- Runs an action from the perspective of a local remote.
-
- The AnnexState is cached for speed and to avoid resource leaks.
+ - However, catFileStop is called to avoid git-cat-file processes hanging
+ - around on removable media.
-
- The repository's git-annex branch is not updated, as an optimisation.
- No caller of onLocal can query data from the branch and be ensured
@@ -473,7 +542,8 @@ onLocal r a = do
cache st = Annex.changeState $ \s -> s
{ Annex.remoteannexstate = M.insert (uuid r) st (Annex.remoteannexstate s) }
go st a' = do
- (ret, st') <- liftIO $ Annex.run st a'
+ (ret, st') <- liftIO $ Annex.run st $
+ catFileStop `after` a'
cache st'
return ret
@@ -492,12 +562,10 @@ rsyncOrCopyFile rsyncparams src dest p =
docopy = liftIO $ bracket
(forkIO $ watchfilesize zeroBytesProcessed)
(void . tryIO . killThread)
- (const $ copyFileExternal src dest)
+ (const $ copyFileExternal CopyTimeStamps src dest)
watchfilesize oldsz = do
threadDelay 500000 -- 0.5 seconds
- v <- catchMaybeIO $
- toBytesProcessed . fileSize
- <$> getFileStatus dest
+ v <- catchMaybeIO $ toBytesProcessed <$> getFileSize dest
case v of
Just sz
| sz /= oldsz -> do
diff --git a/Remote/Glacier.hs b/Remote/Glacier.hs
index fe6f53a77..289008266 100644
--- a/Remote/Glacier.hs
+++ b/Remote/Glacier.hs
@@ -1,14 +1,15 @@
{- Amazon Glacier remotes.
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
-module Remote.Glacier (remote, jobList) where
+module Remote.Glacier (remote, jobList, checkSaneGlacierCommand) where
import qualified Data.Map as M
import qualified Data.Text as T
+import qualified Data.ByteString.Lazy as L
import Common.Annex
import Types.Remote
@@ -17,18 +18,13 @@ import qualified Git
import Config
import Config.Cost
import Remote.Helper.Special
-import Remote.Helper.Encryptable
import qualified Remote.Helper.AWS as AWS
-import Crypto
import Creds
import Utility.Metered
import qualified Annex
-import Annex.Content
import Annex.UUID
import Utility.Env
-import System.Process
-
type Vault = String
type Archive = FilePath
@@ -43,46 +39,57 @@ remote = RemoteType {
gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
gen r u c gc = new <$> remoteCost gc veryExpensiveRemoteCost
where
- new cst = Just $ encryptableRemote c
- (storeEncrypted this)
- (retrieveEncrypted this)
+ new cst = Just $ specialRemote' specialcfg c
+ (prepareStore this)
+ (prepareRetrieve this)
+ (simplyPrepare $ remove this)
+ (simplyPrepare $ checkKey this)
this
where
- this = Remote {
- uuid = u,
- cost = cst,
- name = Git.repoDescribe r,
- storeKey = store this,
- retrieveKeyFile = retrieve this,
- retrieveKeyFileCheap = retrieveCheap this,
- removeKey = remove this,
- hasKey = checkPresent this,
- hasKeyCheap = False,
- whereisKey = Nothing,
- remoteFsck = Nothing,
- repairRepo = Nothing,
- config = c,
- repo = r,
- gitconfig = gc,
- localpath = Nothing,
- readonly = False,
- availability = GloballyAvailable,
- remotetype = remote
+ this = Remote
+ { uuid = u
+ , cost = cst
+ , name = Git.repoDescribe r
+ , storeKey = storeKeyDummy
+ , retrieveKeyFile = retreiveKeyFileDummy
+ , retrieveKeyFileCheap = retrieveCheap this
+ , removeKey = removeKeyDummy
+ , checkPresent = checkPresentDummy
+ , checkPresentCheap = False
+ , whereisKey = Nothing
+ , remoteFsck = Nothing
+ , repairRepo = Nothing
+ , config = c
+ , repo = r
+ , gitconfig = gc
+ , localpath = Nothing
+ , readonly = False
+ , availability = GloballyAvailable
+ , remotetype = remote
+ , mkUnavailable = return Nothing
+ , getInfo = includeCredsInfo c (AWS.creds u) $
+ [ ("glacier vault", getVault c) ]
+ , claimUrl = Nothing
+ , checkUrl = Nothing
+ }
+ specialcfg = (specialRemoteCfg c)
+ -- Disabled until jobList gets support for chunks.
+ { chunkConfig = NoChunks
}
glacierSetup :: Maybe UUID -> Maybe CredPair -> RemoteConfig -> Annex (RemoteConfig, UUID)
glacierSetup mu mcreds c = do
u <- maybe (liftIO genUUID) return mu
- c' <- setRemoteCredPair c (AWS.creds u) mcreds
- glacierSetup' (isJust mu) u c'
-glacierSetup' :: Bool -> UUID -> RemoteConfig -> Annex (RemoteConfig, UUID)
-glacierSetup' enabling u c = do
- c' <- encryptionSetup c
- let fullconfig = c' `M.union` defaults
+ glacierSetup' (isJust mu) u mcreds c
+glacierSetup' :: Bool -> UUID -> Maybe CredPair -> RemoteConfig -> Annex (RemoteConfig, UUID)
+glacierSetup' enabling u mcreds c = do
+ (c', encsetup) <- encryptionSetup c
+ c'' <- setRemoteCredPair encsetup c' (AWS.creds u) mcreds
+ let fullconfig = c'' `M.union` defaults
unless enabling $
genVault fullconfig u
gitConfigSpecialRemote u fullconfig "glacier" "true"
- return (c', u)
+ return (fullconfig, u)
where
remotename = fromJust (M.lookup "name" c)
defvault = remotename ++ "-" ++ fromUUID u
@@ -91,38 +98,18 @@ glacierSetup' enabling u c = do
, ("vault", defvault)
]
-store :: Remote -> Key -> AssociatedFile -> MeterUpdate -> Annex Bool
-store r k _f p
+prepareStore :: Remote -> Preparer Storer
+prepareStore r = checkPrepare nonEmpty (byteStorer $ store r)
+
+nonEmpty :: Key -> Annex Bool
+nonEmpty k
| keySize k == Just 0 = do
warning "Cannot store empty files in Glacier."
return False
- | otherwise = sendAnnex k (void $ remove r k) $ \src ->
- metered (Just p) k $ \meterupdate ->
- storeHelper r k $ streamMeteredFile src meterupdate
-
-storeEncrypted :: Remote -> (Cipher, Key) -> Key -> MeterUpdate -> Annex Bool
-storeEncrypted r (cipher, enck) k p = sendAnnex k (void $ remove r enck) $ \src ->
- metered (Just p) k $ \meterupdate ->
- storeHelper r enck $ \h ->
- encrypt (getGpgEncParams r) cipher (feedFile src)
- (readBytes $ meteredWrite meterupdate h)
+ | otherwise = return True
-retrieve :: Remote -> Key -> AssociatedFile -> FilePath -> MeterUpdate -> Annex Bool
-retrieve r k _f d p = metered (Just p) k $ \meterupdate ->
- retrieveHelper r k $
- readBytes $ meteredWriteFile meterupdate d
-
-retrieveCheap :: Remote -> Key -> FilePath -> Annex Bool
-retrieveCheap _ _ _ = return False
-
-retrieveEncrypted :: Remote -> (Cipher, Key) -> Key -> FilePath -> MeterUpdate -> Annex Bool
-retrieveEncrypted r (cipher, enck) k d p = metered (Just p) k $ \meterupdate ->
- retrieveHelper r enck $ readBytes $ \b ->
- decrypt cipher (feedBytes b) $
- readBytes $ meteredWriteFile meterupdate d
-
-storeHelper :: Remote -> Key -> (Handle -> IO ()) -> Annex Bool
-storeHelper r k feeder = go =<< glacierEnv c u
+store :: Remote -> Key -> L.ByteString -> MeterUpdate -> Annex Bool
+store r k b p = go =<< glacierEnv c u
where
c = config r
u = uuid r
@@ -135,14 +122,17 @@ storeHelper r k feeder = go =<< glacierEnv c u
]
go Nothing = return False
go (Just e) = do
- let p = (proc "glacier" (toCommand params)) { env = Just e }
+ let cmd = (proc "glacier" (toCommand params)) { env = Just e }
liftIO $ catchBoolIO $
- withHandle StdinHandle createProcessSuccess p $ \h -> do
- feeder h
+ withHandle StdinHandle createProcessSuccess cmd $ \h -> do
+ meteredWrite p h b
return True
-retrieveHelper :: Remote -> Key -> (Handle -> IO ()) -> Annex Bool
-retrieveHelper r k reader = go =<< glacierEnv c u
+prepareRetrieve :: Remote -> Preparer Retriever
+prepareRetrieve = simplyPrepare . byteRetriever . retrieve
+
+retrieve :: Remote -> Key -> (L.ByteString -> Annex Bool) -> Annex Bool
+retrieve r k sink = go =<< glacierEnv c u
where
c = config r
u = uuid r
@@ -153,48 +143,52 @@ retrieveHelper r k reader = go =<< glacierEnv c u
, Param $ getVault $ config r
, Param $ archive r k
]
- go Nothing = return False
+ go Nothing = error "cannot retrieve from glacier"
go (Just e) = do
- let p = (proc "glacier" (toCommand params)) { env = Just e }
- ok <- liftIO $ catchBoolIO $
- withHandle StdoutHandle createProcessSuccess p $ \h ->
- ifM (hIsEOF h)
- ( return False
- , do
- reader h
- return True
- )
- unless ok later
+ let cmd = (proc "glacier" (toCommand params))
+ { env = Just e
+ , std_out = CreatePipe
+ }
+ (_, Just h, _, pid) <- liftIO $ createProcess cmd
+ -- Glacier cannot store empty files, so if the output is
+ -- empty, the content is not available yet.
+ ok <- ifM (liftIO $ hIsEOF h)
+ ( return False
+ , sink =<< liftIO (L.hGetContents h)
+ )
+ liftIO $ hClose h
+ liftIO $ forceSuccessProcess cmd pid
+ unless ok $ do
+ showLongNote "Recommend you wait up to 4 hours, and then run this command again."
return ok
- later = showLongNote "Recommend you wait up to 4 hours, and then run this command again."
-remove :: Remote -> Key -> Annex Bool
+retrieveCheap :: Remote -> Key -> FilePath -> Annex Bool
+retrieveCheap _ _ _ = return False
+
+remove :: Remote -> Remover
remove r k = glacierAction r
[ Param "archive"
+
, Param "delete"
, Param $ getVault $ config r
, Param $ archive r k
]
-checkPresent :: Remote -> Key -> Annex (Either String Bool)
-checkPresent r k = do
+checkKey :: Remote -> CheckPresent
+checkKey r k = do
showAction $ "checking " ++ name r
go =<< glacierEnv (config r) (uuid r)
where
- go Nothing = return $ Left "cannot check glacier"
+ go Nothing = error "cannot check glacier"
go (Just e) = do
{- glacier checkpresent outputs the archive name to stdout if
- it's present. -}
- v <- liftIO $ catchMsgIO $
- readProcessEnv "glacier" (toCommand params) (Just e)
- case v of
- Right s -> do
- let probablypresent = key2file k `elem` lines s
- if probablypresent
- then ifM (Annex.getFlag "trustglacier")
- ( return $ Right True, untrusted )
- else return $ Right False
- Left err -> return $ Left err
+ s <- liftIO $ readProcessEnv "glacier" (toCommand params) (Just e)
+ let probablypresent = key2file k `elem` lines s
+ if probablypresent
+ then ifM (Annex.getFlag "trustglacier")
+ ( return True, error untrusted )
+ else return False
params = glacierParams (config r)
[ Param "archive"
@@ -204,7 +198,7 @@ checkPresent r k = do
, Param $ archive r k
]
- untrusted = return $ Left $ unlines
+ untrusted = unlines
[ "Glacier's inventory says it has a copy."
, "However, the inventory could be out of date, if it was recently removed."
, "(Use --trust-glacier if you're sure it's still in Glacier.)"
@@ -225,10 +219,13 @@ glacierParams :: RemoteConfig -> [CommandParam] -> [CommandParam]
glacierParams c params = datacenter:params
where
datacenter = Param $ "--region=" ++
- fromJust (M.lookup "datacenter" c)
+ fromMaybe (error "Missing datacenter configuration")
+ (M.lookup "datacenter" c)
glacierEnv :: RemoteConfig -> UUID -> Annex (Maybe [(String, String)])
-glacierEnv c u = go =<< getRemoteCredPairFor "glacier" c creds
+glacierEnv c u = do
+ liftIO checkSaneGlacierCommand
+ go =<< getRemoteCredPairFor "glacier" c creds
where
go Nothing = return Nothing
go (Just (user, pass)) = do
@@ -239,7 +236,8 @@ glacierEnv c u = go =<< getRemoteCredPairFor "glacier" c creds
(uk, pk) = credPairEnvironment creds
getVault :: RemoteConfig -> Vault
-getVault = fromJust . M.lookup "vault"
+getVault = fromMaybe (error "Missing vault configuration")
+ . M.lookup "vault"
archive :: Remote -> Key -> Archive
archive r k = fileprefix ++ key2file k
@@ -261,6 +259,10 @@ genVault c u = unlessM (runGlacier c u params) $
-
- A complication is that `glacier job list` will display the encrypted
- keys when the remote is encrypted.
+ -
+ - Dealing with encrypted chunked keys would be tricky. However, there
+ - seems to be no benefit to using chunking with glacier, so chunking is
+ - not supported.
-}
jobList :: Remote -> [Key] -> Annex ([Key], [Key])
jobList r keys = go =<< glacierEnv (config r) (uuid r)
@@ -282,7 +284,8 @@ jobList r keys = go =<< glacierEnv (config r) (uuid r)
then return nada
else do
enckeys <- forM keys $ \k ->
- maybe k snd <$> cipherKey (config r) k
+ maybe k (\(_, enck) -> enck k)
+ <$> cipherKey (config r)
let keymap = M.fromList $ zip enckeys keys
let convert = mapMaybe (`M.lookup` keymap)
return (convert succeeded, convert failed)
@@ -300,3 +303,14 @@ jobList r keys = go =<< glacierEnv (config r) (uuid r)
| otherwise ->
parse c rest
parse c (_:rest) = parse c rest
+
+-- boto's version of glacier exits 0 when given a parameter it doesn't
+-- understand. See https://github.com/boto/boto/issues/2942
+checkSaneGlacierCommand :: IO ()
+checkSaneGlacierCommand =
+ whenM ((Nothing /=) <$> catchMaybeIO shouldfail) $
+ error wrongcmd
+ where
+ test = proc "glacier" ["--compatibility-test-git-annex"]
+ shouldfail = withQuietOutput createProcessSuccess test
+ wrongcmd = "The glacier program in PATH seems to be from boto, not glacier-cli. Cannot use this program."
diff --git a/Remote/Helper/AWS.hs b/Remote/Helper/AWS.hs
index 0687a5ee1..145c48714 100644
--- a/Remote/Helper/AWS.hs
+++ b/Remote/Helper/AWS.hs
@@ -1,11 +1,12 @@
{- Amazon Web Services common infrastructure.
-
- - Copyright 2011,2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
-{-# LANGUAGE OverloadedStrings, TupleSections #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TupleSections #-}
module Remote.Helper.AWS where
@@ -13,6 +14,9 @@ import Common.Annex
import Creds
import qualified Data.Map as M
+import qualified Data.ByteString as B
+import qualified Data.Text as T
+import Data.Text.Encoding (encodeUtf8)
import Data.Text (Text)
creds :: UUID -> CredPairStorage
@@ -33,9 +37,10 @@ regionMap = M.fromList . regionInfo
defaultRegion :: Service -> Region
defaultRegion = snd . Prelude.head . regionInfo
-{- S3 and Glacier use different names for some regions. Ie, "us-east-1"
- - cannot be used with S3, while "US" cannot be used with Glacier. Dunno why.
- - Also, Glacier is not yet available in all regions. -}
+data ServiceRegion = BothRegion Region | S3Region Region | GlacierRegion Region
+
+{- The "US" and "EU" names are used as location constraints when creating a
+ - S3 bucket. -}
regionInfo :: Service -> [(Text, Region)]
regionInfo service = map (\(t, r) -> (t, fromServiceRegion r)) $
filter (matchingService . snd) $
@@ -45,6 +50,7 @@ regionInfo service = map (\(t, r) -> (t, fromServiceRegion r)) $
[ ("US East (N. Virginia)", [S3Region "US", GlacierRegion "us-east-1"])
, ("US West (Oregon)", [BothRegion "us-west-2"])
, ("US West (N. California)", [BothRegion "us-west-1"])
+ , ("EU (Frankfurt)", [BothRegion "eu-central-1"])
, ("EU (Ireland)", [S3Region "EU", GlacierRegion "eu-west-1"])
, ("Asia Pacific (Singapore)", [S3Region "ap-southeast-1"])
, ("Asia Pacific (Tokyo)", [BothRegion "ap-northeast-1"])
@@ -60,4 +66,10 @@ regionInfo service = map (\(t, r) -> (t, fromServiceRegion r)) $
matchingService (S3Region _) = service == S3
matchingService (GlacierRegion _) = service == Glacier
-data ServiceRegion = BothRegion Region | S3Region Region | GlacierRegion Region
+s3HostName :: Region -> B.ByteString
+s3HostName "US" = "s3.amazonaws.com"
+s3HostName "EU" = "s3-eu-west-1.amazonaws.com"
+s3HostName r = encodeUtf8 $ T.concat ["s3-", r, ".amazonaws.com"]
+
+s3DefaultHost :: String
+s3DefaultHost = "s3.amazonaws.com"
diff --git a/Remote/Helper/Chunked.hs b/Remote/Helper/Chunked.hs
index ad3b04d49..2f21ba66c 100644
--- a/Remote/Helper/Chunked.hs
+++ b/Remote/Helper/Chunked.hs
@@ -1,144 +1,409 @@
{- git-annex chunked remotes
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
-module Remote.Helper.Chunked where
+module Remote.Helper.Chunked (
+ ChunkSize,
+ ChunkConfig(..),
+ describeChunkConfig,
+ getChunkConfig,
+ storeChunks,
+ removeChunks,
+ retrieveChunks,
+ checkPresentChunks,
+) where
import Common.Annex
import Utility.DataUnits
+import Types.StoreRetrieve
import Types.Remote
+import Types.Key
+import Logs.Chunk
import Utility.Metered
+import Crypto (EncKey)
+import Backend (isStableKey)
-import qualified Data.Map as M
import qualified Data.ByteString.Lazy as L
-import Data.Int
-import qualified Control.Exception as E
+import qualified Data.Map as M
+
+data ChunkConfig
+ = NoChunks
+ | UnpaddedChunks ChunkSize
+ | LegacyChunks ChunkSize
+ deriving (Show)
+
+describeChunkConfig :: ChunkConfig -> String
+describeChunkConfig NoChunks = "none"
+describeChunkConfig (UnpaddedChunks sz) = describeChunkSize sz ++ "chunks"
+describeChunkConfig (LegacyChunks sz) = describeChunkSize sz ++ " chunks (old style)"
-type ChunkSize = Maybe Int64
+describeChunkSize :: ChunkSize -> String
+describeChunkSize sz = roughSize storageUnits False (fromIntegral sz)
-{- Gets a remote's configured chunk size. -}
-chunkSize :: RemoteConfig -> ChunkSize
-chunkSize m =
+noChunks :: ChunkConfig -> Bool
+noChunks NoChunks = True
+noChunks _ = False
+
+getChunkConfig :: RemoteConfig -> ChunkConfig
+getChunkConfig m =
case M.lookup "chunksize" m of
- Nothing -> Nothing
- Just v -> case readSize dataUnits v of
- Nothing -> error "bad chunksize"
- Just size
- | size <= 0 -> error "bad chunksize"
- | otherwise -> Just $ fromInteger size
-
-{- This is an extension that's added to the usual file (or whatever)
- - where the remote stores a key. -}
-type ChunkExt = String
-
-{- A record of the number of chunks used.
+ Nothing -> case M.lookup "chunk" m of
+ Nothing -> NoChunks
+ Just v -> readsz UnpaddedChunks v "chunk"
+ Just v -> readsz LegacyChunks v "chunksize"
+ where
+ readsz c v f = case readSize dataUnits v of
+ Just size
+ | size == 0 -> NoChunks
+ | size > 0 -> c (fromInteger size)
+ _ -> error $ "bad configuration " ++ f ++ "=" ++ v
+
+-- An infinite stream of chunk keys, starting from chunk 1.
+newtype ChunkKeyStream = ChunkKeyStream [Key]
+
+chunkKeyStream :: Key -> ChunkSize -> ChunkKeyStream
+chunkKeyStream basek chunksize = ChunkKeyStream $ map mk [1..]
+ where
+ mk chunknum = sizedk { keyChunkNum = Just chunknum }
+ sizedk = basek { keyChunkSize = Just (toInteger chunksize) }
+
+nextChunkKeyStream :: ChunkKeyStream -> (Key, ChunkKeyStream)
+nextChunkKeyStream (ChunkKeyStream (k:l)) = (k, ChunkKeyStream l)
+nextChunkKeyStream (ChunkKeyStream []) = undefined -- stream is infinite!
+
+takeChunkKeyStream :: ChunkCount -> ChunkKeyStream -> [Key]
+takeChunkKeyStream n (ChunkKeyStream l) = genericTake n l
+
+-- Number of chunks already consumed from the stream.
+numChunks :: ChunkKeyStream -> Integer
+numChunks = pred . fromJust . keyChunkNum . fst . nextChunkKeyStream
+
+{- Splits up the key's content into chunks, passing each chunk to
+ - the storer action, along with a corresponding chunk key and a
+ - progress meter update callback.
+ -
+ - To support resuming, the checker is used to find the first missing
+ - chunk key. Storing starts from that chunk.
-
- - While this can be guessed at based on the size of the key, encryption
- - makes that larger. Also, using this helps deal with changes to chunksize
- - over the life of a remote.
+ - This buffers each chunk in memory, so can use a lot of memory
+ - with a large ChunkSize.
+ - More optimal versions of this can be written, that rely
+ - on L.toChunks to split the lazy bytestring into chunks (typically
+ - smaller than the ChunkSize), and eg, write those chunks to a Handle.
+ - But this is the best that can be done with the storer interface that
+ - writes a whole L.ByteString at a time.
-}
-chunkCount :: ChunkExt
-chunkCount = ".chunkcount"
+storeChunks
+ :: UUID
+ -> ChunkConfig
+ -> Key
+ -> FilePath
+ -> MeterUpdate
+ -> Storer
+ -> CheckPresent
+ -> Annex Bool
+storeChunks u chunkconfig k f p storer checker =
+ case chunkconfig of
+ (UnpaddedChunks chunksize) | isStableKey k ->
+ bracketIO open close (go chunksize)
+ _ -> storer k (FileContent f) p
+ where
+ open = tryIO $ openBinaryFile f ReadMode
-{- An infinite stream of extensions to use for chunks. -}
-chunkStream :: [ChunkExt]
-chunkStream = map (\n -> ".chunk" ++ show n) [1 :: Integer ..]
+ close (Right h) = hClose h
+ close (Left _) = noop
-{- Parses the String from the chunkCount file, and returns the files that
- - are used to store the chunks. -}
-listChunks :: FilePath -> String -> [FilePath]
-listChunks basedest chunkcount = take count $ map (basedest ++) chunkStream
- where
- count = fromMaybe 0 $ readish chunkcount
+ go _ (Left e) = do
+ warning (show e)
+ return False
+ go chunksize (Right h) = do
+ let chunkkeys = chunkKeyStream k chunksize
+ (chunkkeys', startpos) <- seekResume h chunkkeys checker
+ b <- liftIO $ L.hGetContents h
+ gochunks p startpos chunksize b chunkkeys'
-{- For use when there is no chunkCount file; uses the action to find
- - chunks, and returns them, or Nothing if none found. Relies on
- - storeChunks's finalizer atomically moving the chunks into place once all
- - are written.
+ gochunks :: MeterUpdate -> BytesProcessed -> ChunkSize -> L.ByteString -> ChunkKeyStream -> Annex Bool
+ gochunks meterupdate startpos chunksize = loop startpos . splitchunk
+ where
+ splitchunk = L.splitAt chunksize
+
+ loop bytesprocessed (chunk, bs) chunkkeys
+ | L.null chunk && numchunks > 0 = do
+ -- Once all chunks are successfully
+ -- stored, update the chunk log.
+ chunksStored u k (FixedSizeChunks chunksize) numchunks
+ return True
+ | otherwise = do
+ liftIO $ meterupdate' zeroBytesProcessed
+ let (chunkkey, chunkkeys') = nextChunkKeyStream chunkkeys
+ ifM (storer chunkkey (ByteContent chunk) meterupdate')
+ ( do
+ let bytesprocessed' = addBytesProcessed bytesprocessed (L.length chunk)
+ loop bytesprocessed' (splitchunk bs) chunkkeys'
+ , return False
+ )
+ where
+ numchunks = numChunks chunkkeys
+ {- The MeterUpdate that is passed to the action
+ - storing a chunk is offset, so that it reflects
+ - the total bytes that have already been stored
+ - in previous chunks. -}
+ meterupdate' = offsetMeterUpdate meterupdate bytesprocessed
+
+{- Check if any of the chunk keys are present. If found, seek forward
+ - in the Handle, so it will be read starting at the first missing chunk.
+ - Returns the ChunkKeyStream truncated to start at the first missing
+ - chunk, and the number of bytes skipped due to resuming.
-
- - This is only needed to work around a bug that caused the chunkCount file
- - not to be written.
+ - As an optimisation, if the file fits into a single chunk, there's no need
+ - to check if that chunk is present -- we know it's not, because otherwise
+ - the whole file would be present and there would be no reason to try to
+ - store it.
-}
-probeChunks :: FilePath -> (FilePath -> IO Bool) -> IO [FilePath]
-probeChunks basedest check = go [] $ map (basedest ++) chunkStream
+seekResume
+ :: Handle
+ -> ChunkKeyStream
+ -> CheckPresent
+ -> Annex (ChunkKeyStream, BytesProcessed)
+seekResume h chunkkeys checker = do
+ sz <- liftIO (hFileSize h)
+ if sz <= fromMaybe 0 (keyChunkSize $ fst $ nextChunkKeyStream chunkkeys)
+ then return (chunkkeys, zeroBytesProcessed)
+ else check 0 chunkkeys sz
where
- go l [] = return (reverse l)
- go l (c:cs) = ifM (check c)
- ( go (c:l) cs
- , go l []
- )
-
-{- Given the base destination to use to store a value,
- - generates a stream of temporary destinations (just one when not chunking)
- - and passes it to an action, which should chunk and store the data,
- - and return the destinations it stored to, or [] on error. Then
- - calls the recorder to write the chunk count (if chunking). Finally, the
- - finalizer is called to rename the tmp into the dest
- - (and do any other cleanup).
+ check pos cks sz
+ | pos >= sz = do
+ -- All chunks are already stored!
+ liftIO $ hSeek h AbsoluteSeek sz
+ return (cks, toBytesProcessed sz)
+ | otherwise = do
+ v <- tryNonAsync (checker k)
+ case v of
+ Right True ->
+ check pos' cks' sz
+ _ -> do
+ when (pos > 0) $
+ liftIO $ hSeek h AbsoluteSeek pos
+ return (cks, toBytesProcessed pos)
+ where
+ (k, cks') = nextChunkKeyStream cks
+ pos' = pos + fromMaybe 0 (keyChunkSize k)
+
+{- Removes all chunks of a key from a remote, by calling a remover
+ - action on each.
+ -
+ - The remover action should succeed even if asked to
+ - remove a key that is not present on the remote.
+ -
+ - This action may be called on a chunked key. It will simply remove it.
+ -}
+removeChunks :: (Key -> Annex Bool) -> UUID -> ChunkConfig -> EncKey -> Key -> Annex Bool
+removeChunks remover u chunkconfig encryptor k = do
+ ls <- chunkKeys u chunkconfig k
+ ok <- allM (remover . encryptor) (concat ls)
+ when ok $ do
+ let chunksizes = catMaybes $ map (keyChunkSize <=< headMaybe) ls
+ forM_ chunksizes $ chunksRemoved u k . FixedSizeChunks . fromIntegral
+ return ok
+
+{- Retrieves a key from a remote, using a retriever action.
+ -
+ - When the remote is chunked, tries each of the options returned by
+ - chunkKeys until it finds one where the retriever successfully
+ - gets the first chunked key. The content of that key, and any
+ - other chunks in the list is fed to the sink.
+ -
+ - If retrival of one of the subsequent chunks throws an exception,
+ - gives up and returns False. Note that partial data may have been
+ - written to the sink in this case.
+ -
+ - Resuming is supported when using chunks. When the destination file
+ - already exists, it skips to the next chunked key that would be needed
+ - to resume.
-}
-storeChunks :: Key -> FilePath -> FilePath -> ChunkSize -> ([FilePath] -> IO [FilePath]) -> (FilePath -> String -> IO ()) -> (FilePath -> FilePath -> IO ()) -> IO Bool
-storeChunks key tmp dest chunksize storer recorder finalizer = either onerr return
- =<< (E.try go :: IO (Either E.SomeException Bool))
+retrieveChunks
+ :: Retriever
+ -> UUID
+ -> ChunkConfig
+ -> EncKey
+ -> Key
+ -> FilePath
+ -> MeterUpdate
+ -> (Maybe Handle -> Maybe MeterUpdate -> ContentSource -> Annex Bool)
+ -> Annex Bool
+retrieveChunks retriever u chunkconfig encryptor basek dest basep sink
+ | noChunks chunkconfig =
+ -- Optimisation: Try the unchunked key first, to avoid
+ -- looking in the git-annex branch for chunk counts
+ -- that are likely not there.
+ getunchunked `catchNonAsync`
+ const (go =<< chunkKeysOnly u basek)
+ | otherwise = go =<< chunkKeys u chunkconfig basek
where
- go = do
- stored <- storer tmpdests
- when (isJust chunksize) $ do
- let chunkcount = basef ++ chunkCount
- recorder chunkcount (show $ length stored)
- finalizer tmp dest
- return (not $ null stored)
- onerr e = do
- print e
+ go ls = do
+ currsize <- liftIO $ catchMaybeIO $ getFileSize dest
+ let ls' = maybe ls (setupResume ls) currsize
+ if any null ls'
+ then return True -- dest is already complete
+ else firstavail currsize ls' `catchNonAsync` giveup
+
+ giveup e = do
+ warning (show e)
return False
- basef = tmp ++ keyFile key
- tmpdests
- | isNothing chunksize = [basef]
- | otherwise = map (basef ++ ) chunkStream
+ firstavail _ [] = return False
+ firstavail currsize ([]:ls) = firstavail currsize ls
+ firstavail currsize ((k:ks):ls)
+ | k == basek = getunchunked
+ `catchNonAsync` (const $ firstavail currsize ls)
+ | otherwise = do
+ let offset = resumeOffset currsize k
+ let p = maybe basep
+ (offsetMeterUpdate basep . toBytesProcessed)
+ offset
+ v <- tryNonAsync $
+ retriever (encryptor k) p $ \content ->
+ bracketIO (maybe opennew openresume offset) hClose $ \h -> do
+ void $ tosink (Just h) p content
+ let sz = toBytesProcessed $
+ fromMaybe 0 $ keyChunkSize k
+ getrest p h sz sz ks
+ `catchNonAsync` giveup
+ case v of
+ Left e
+ | null ls -> giveup e
+ | otherwise -> firstavail currsize ls
+ Right r -> return r
+
+ getrest _ _ _ _ [] = return True
+ getrest p h sz bytesprocessed (k:ks) = do
+ let p' = offsetMeterUpdate p bytesprocessed
+ liftIO $ p' zeroBytesProcessed
+ ifM (retriever (encryptor k) p' $ tosink (Just h) p')
+ ( getrest p h sz (addBytesProcessed bytesprocessed sz) ks
+ , giveup "chunk retrieval failed"
+ )
+
+ getunchunked = retriever (encryptor basek) basep $ tosink Nothing basep
-{- Given a list of destinations to use, chunks the data according to the
- - ChunkSize, and runs the storer action to store each chunk. Returns
- - the destinations where data was stored, or [] on error.
+ opennew = openBinaryFile dest WriteMode
+
+ -- Open the file and seek to the start point in order to resume.
+ openresume startpoint = do
+ -- ReadWriteMode allows seeking; AppendMode does not.
+ h <- openBinaryFile dest ReadWriteMode
+ hSeek h AbsoluteSeek startpoint
+ return h
+
+ {- Progress meter updating is a bit tricky: If the Retriever
+ - populates a file, it is responsible for updating progress
+ - as the file is being retrieved.
+ -
+ - However, if the Retriever generates a lazy ByteString,
+ - it is not responsible for updating progress (often it cannot).
+ - Instead, the sink is passed a meter to update as it consumes
+ - the ByteString.
+ -}
+ tosink h p content = sink h p' content
+ where
+ p'
+ | isByteContent content = Just p
+ | otherwise = Nothing
+
+{- Can resume when the chunk's offset is at or before the end of
+ - the dest file. -}
+resumeOffset :: Maybe Integer -> Key -> Maybe Integer
+resumeOffset Nothing _ = Nothing
+resumeOffset currsize k
+ | offset <= currsize = offset
+ | otherwise = Nothing
+ where
+ offset = chunkKeyOffset k
+
+{- Drops chunks that are already present in a file, based on its size.
+ - Keeps any non-chunk keys.
+ -}
+setupResume :: [[Key]] -> Integer -> [[Key]]
+setupResume ls currsize = map dropunneeded ls
+ where
+ dropunneeded [] = []
+ dropunneeded l@(k:_) = case keyChunkSize k of
+ Just chunksize | chunksize > 0 ->
+ genericDrop (currsize `div` chunksize) l
+ _ -> l
+
+{- Checks if a key is present in a remote. This requires any one
+ - of the lists of options returned by chunkKeys to all check out
+ - as being present using the checker action.
-
- - This buffers each chunk in memory.
- - More optimal versions of this can be written, that rely
- - on L.toChunks to split the lazy bytestring into chunks (typically
- - smaller than the ChunkSize), and eg, write those chunks to a Handle.
- - But this is the best that can be done with the storer interface that
- - writes a whole L.ByteString at a time.
+ - Throws an exception if the remote is not accessible.
-}
-storeChunked :: ChunkSize -> [FilePath] -> (FilePath -> L.ByteString -> IO ()) -> L.ByteString -> IO [FilePath]
-storeChunked chunksize dests storer content = either onerr return
- =<< (E.try (go chunksize dests) :: IO (Either E.SomeException [FilePath]))
+checkPresentChunks
+ :: CheckPresent
+ -> UUID
+ -> ChunkConfig
+ -> EncKey
+ -> Key
+ -> Annex Bool
+checkPresentChunks checker u chunkconfig encryptor basek
+ | noChunks chunkconfig = do
+ -- Optimisation: Try the unchunked key first, to avoid
+ -- looking in the git-annex branch for chunk counts
+ -- that are likely not there.
+ v <- check basek
+ case v of
+ Right True -> return True
+ Left e -> checklists (Just e) =<< chunkKeysOnly u basek
+ _ -> checklists Nothing =<< chunkKeysOnly u basek
+ | otherwise = checklists Nothing =<< chunkKeys u chunkconfig basek
where
- go _ [] = return [] -- no dests!?
- go Nothing (d:_) = do
- storer d content
- return [d]
- go (Just sz) _
- -- always write a chunk, even if the data is 0 bytes
- | L.null content = go Nothing dests
- | otherwise = storechunks sz [] dests content
-
- onerr e = do
- print e
- return []
+ checklists Nothing [] = return False
+ checklists (Just deferrederror) [] = throwM deferrederror
+ checklists d (l:ls)
+ | not (null l) = do
+ v <- checkchunks l
+ case v of
+ Left e -> checklists (Just e) ls
+ Right True -> return True
+ Right False -> checklists Nothing ls
+ | otherwise = checklists d ls
- storechunks _ _ [] _ = return [] -- ran out of dests
- storechunks sz useddests (d:ds) b
- | L.null b = return $ reverse useddests
- | otherwise = do
- let (chunk, b') = L.splitAt sz b
- storer d chunk
- storechunks sz (d:useddests) ds b'
-
-{- Writes a series of chunks to a file. The feeder is called to get
- - each chunk. -}
-meteredWriteFileChunks :: MeterUpdate -> FilePath -> [v] -> (v -> IO L.ByteString) -> IO ()
-meteredWriteFileChunks meterupdate dest chunks feeder =
- withBinaryFile dest WriteMode $ \h ->
- forM_ chunks $
- meteredWrite meterupdate h <=< feeder
+ checkchunks :: [Key] -> Annex (Either SomeException Bool)
+ checkchunks [] = return (Right True)
+ checkchunks (k:ks) = do
+ v <- check k
+ case v of
+ Right True -> checkchunks ks
+ Right False -> return $ Right False
+ Left e -> return $ Left e
+
+ check = tryNonAsync . checker . encryptor
+
+{- A key can be stored in a remote unchunked, or as a list of chunked keys.
+ - This can be the case whether or not the remote is currently configured
+ - to use chunking.
+ -
+ - It's even possible for a remote to have the same key stored multiple
+ - times with different chunk sizes!
+ -
+ - This finds all possible lists of keys that might be on the remote that
+ - can be combined to get back the requested key, in order from most to
+ - least likely to exist.
+ -}
+chunkKeys :: UUID -> ChunkConfig -> Key -> Annex [[Key]]
+chunkKeys u chunkconfig k = do
+ l <- chunkKeysOnly u k
+ return $ if noChunks chunkconfig
+ then [k] : l
+ else l ++ [[k]]
+
+chunkKeysOnly :: UUID -> Key -> Annex [[Key]]
+chunkKeysOnly u k = map (toChunkList k) <$> getCurrentChunks u k
+
+toChunkList :: Key -> (ChunkMethod, ChunkCount) -> [Key]
+toChunkList k (FixedSizeChunks chunksize, chunkcount) =
+ takeChunkKeyStream chunkcount $ chunkKeyStream k chunksize
+toChunkList _ (UnknownChunks _, _) = []
diff --git a/Remote/Helper/Chunked/Legacy.hs b/Remote/Helper/Chunked/Legacy.hs
new file mode 100644
index 000000000..ae3a29f32
--- /dev/null
+++ b/Remote/Helper/Chunked/Legacy.hs
@@ -0,0 +1,126 @@
+{- legacy git-annex chunked remotes
+ -
+ - Copyright 2012 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Remote.Helper.Chunked.Legacy where
+
+import Common.Annex
+import Remote.Helper.Chunked
+import Utility.Metered
+
+import qualified Data.ByteString.Lazy as L
+import qualified Control.Exception as E
+
+{- This is an extension that's added to the usual file (or whatever)
+ - where the remote stores a key. -}
+type ChunkExt = String
+
+{- A record of the number of chunks used.
+ -
+ - While this can be guessed at based on the size of the key, encryption
+ - makes that larger. Also, using this helps deal with changes to chunksize
+ - over the life of a remote.
+ -}
+chunkCount :: ChunkExt
+chunkCount = ".chunkcount"
+
+{- An infinite stream of extensions to use for chunks. -}
+chunkStream :: [ChunkExt]
+chunkStream = map (\n -> ".chunk" ++ show n) [1 :: Integer ..]
+
+{- Parses the String from the chunkCount file, and returns the files that
+ - are used to store the chunks. -}
+listChunks :: FilePath -> String -> [FilePath]
+listChunks basedest chunkcount = take count $ map (basedest ++) chunkStream
+ where
+ count = fromMaybe 0 $ readish chunkcount
+
+{- For use when there is no chunkCount file; uses the action to find
+ - chunks, and returns them, or Nothing if none found. Relies on
+ - storeChunks's finalizer atomically moving the chunks into place once all
+ - are written.
+ -
+ - This is only needed to work around a bug that caused the chunkCount file
+ - not to be written.
+ -}
+probeChunks :: FilePath -> (FilePath -> IO Bool) -> IO [FilePath]
+probeChunks basedest check = go [] $ map (basedest ++) chunkStream
+ where
+ go l [] = return (reverse l)
+ go l (c:cs) = ifM (check c)
+ ( go (c:l) cs
+ , go l []
+ )
+
+{- Given the base destination to use to store a value,
+ - generates a stream of temporary destinations,
+ - and passes it to an action, which should chunk and store the data,
+ - and return the destinations it stored to, or [] on error. Then
+ - calls the recorder to write the chunk count. Finally, the
+ - finalizer is called to rename the tmp into the dest
+ - (and do any other cleanup).
+ -}
+storeChunks :: Key -> FilePath -> FilePath -> ([FilePath] -> IO [FilePath]) -> (FilePath -> String -> IO ()) -> (FilePath -> FilePath -> IO ()) -> IO Bool
+storeChunks key tmp dest storer recorder finalizer = either onerr return
+ =<< (E.try go :: IO (Either E.SomeException Bool))
+ where
+ go = do
+ stored <- storer tmpdests
+ let chunkcount = basef ++ chunkCount
+ recorder chunkcount (show $ length stored)
+ finalizer tmp dest
+ return (not $ null stored)
+ onerr e = do
+ warningIO (show e)
+ return False
+
+ basef = tmp ++ keyFile key
+ tmpdests = map (basef ++ ) chunkStream
+
+{- Given a list of destinations to use, chunks the data according to the
+ - ChunkSize, and runs the storer action to store each chunk. Returns
+ - the destinations where data was stored, or [] on error.
+ -
+ - This buffers each chunk in memory.
+ - More optimal versions of this can be written, that rely
+ - on L.toChunks to split the lazy bytestring into chunks (typically
+ - smaller than the ChunkSize), and eg, write those chunks to a Handle.
+ - But this is the best that can be done with the storer interface that
+ - writes a whole L.ByteString at a time.
+ -}
+storeChunked :: ChunkSize -> [FilePath] -> (FilePath -> L.ByteString -> IO ()) -> L.ByteString -> IO [FilePath]
+storeChunked chunksize dests storer content = either onerr return
+ =<< (E.try (go (Just chunksize) dests) :: IO (Either E.SomeException [FilePath]))
+ where
+ go _ [] = return [] -- no dests!?
+ go Nothing (d:_) = do
+ storer d content
+ return [d]
+ go (Just sz) _
+ -- always write a chunk, even if the data is 0 bytes
+ | L.null content = go Nothing dests
+ | otherwise = storechunks sz [] dests content
+
+ onerr e = do
+ warningIO (show e)
+ return []
+
+ storechunks _ _ [] _ = return [] -- ran out of dests
+ storechunks sz useddests (d:ds) b
+ | L.null b = return $ reverse useddests
+ | otherwise = do
+ let (chunk, b') = L.splitAt sz b
+ storer d chunk
+ storechunks sz (d:useddests) ds b'
+
+{- Writes a series of chunks to a file. The feeder is called to get
+ - each chunk.
+ -}
+meteredWriteFileChunks :: MeterUpdate -> FilePath -> [v] -> (v -> IO L.ByteString) -> IO ()
+meteredWriteFileChunks meterupdate dest chunks feeder =
+ withBinaryFile dest WriteMode $ \h ->
+ forM_ chunks $
+ meteredWrite meterupdate h <=< feeder
diff --git a/Remote/Helper/Encryptable.hs b/Remote/Helper/Encryptable.hs
index a6e79ddc4..c1243a518 100644
--- a/Remote/Helper/Encryptable.hs
+++ b/Remote/Helper/Encryptable.hs
@@ -1,11 +1,23 @@
{- common functions for encryptable remotes
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
-module Remote.Helper.Encryptable where
+module Remote.Helper.Encryptable (
+ EncryptionIsSetup,
+ encryptionSetup,
+ noEncryptionUsed,
+ encryptionAlreadySetup,
+ remoteCipher,
+ remoteCipher',
+ embedCreds,
+ cipherKey,
+ storeCipher,
+ extractCipher,
+ describeEncryption,
+) where
import qualified Data.Map as M
@@ -14,15 +26,28 @@ import Types.Remote
import Crypto
import Types.Crypto
import qualified Annex
-import Config.Cost
import Utility.Base64
-import Utility.Metered
+
+-- Used to ensure that encryption has been set up before trying to
+-- eg, store creds in the remote config that would need to use the
+-- encryption setup.
+data EncryptionIsSetup = EncryptionIsSetup | NoEncryption
+
+-- Remotes that don't use encryption can use this instead of
+-- encryptionSetup.
+noEncryptionUsed :: EncryptionIsSetup
+noEncryptionUsed = NoEncryption
+
+-- Using this avoids the type-safe check, so you'd better be sure
+-- of what you're doing.
+encryptionAlreadySetup :: EncryptionIsSetup
+encryptionAlreadySetup = EncryptionIsSetup
{- Encryption setup for a remote. The user must specify whether to use
- an encryption key, or not encrypt. An encrypted cipher is created, or is
- updated to be accessible to an additional encryption key. Or the user
- could opt to use a shared cipher, which is stored unencrypted. -}
-encryptionSetup :: RemoteConfig -> Annex RemoteConfig
+encryptionSetup :: RemoteConfig -> Annex (RemoteConfig, EncryptionIsSetup)
encryptionSetup c = maybe genCipher updateCipher $ extractCipher c
where
-- The type of encryption
@@ -30,11 +55,11 @@ encryptionSetup c = maybe genCipher updateCipher $ extractCipher c
-- Generate a new cipher, depending on the chosen encryption scheme
genCipher = case encryption of
_ | M.member "cipher" c || M.member "cipherkeys" c -> cannotchange
- Just "none" -> return c
+ Just "none" -> return (c, NoEncryption)
Just "shared" -> use "encryption setup" . genSharedCipher
=<< highRandomQuality
-- hybrid encryption is the default when a keyid is
- -- specified but no encryption
+ -- specified but no encryption
_ | maybe (M.member "keyid" c) (== "hybrid") encryption ->
use "encryption setup" . genEncryptedCipher key Hybrid
=<< highRandomQuality
@@ -50,7 +75,7 @@ encryptionSetup c = maybe genCipher updateCipher $ extractCipher c
cannotchange = error "Cannot set encryption type of existing remotes."
-- Update an existing cipher if possible.
updateCipher v = case v of
- SharedCipher _ | maybe True (== "shared") encryption -> return c'
+ SharedCipher _ | maybe True (== "shared") encryption -> return (c', EncryptionIsSetup)
EncryptedCipher _ variant _
| maybe True (== if variant == Hybrid then "hybrid" else "pubkey") encryption ->
use "encryption update" $ updateEncryptedCipher newkeys v
@@ -59,64 +84,34 @@ encryptionSetup c = maybe genCipher updateCipher $ extractCipher c
showNote m
cipher <- liftIO a
showNote $ describeCipher cipher
- return $ storeCipher c' cipher
+ return (storeCipher c' cipher, EncryptionIsSetup)
highRandomQuality =
(&&) (maybe True ( /= "false") $ M.lookup "highRandomQuality" c)
<$> fmap not (Annex.getState Annex.fast)
c' = foldr M.delete c
- -- git-annex used to remove 'encryption' as well, since
- -- it was redundant; we now need to keep it for
- -- public-key incryption, hence we leave it on newer
- -- remotes (while being backward-compatible).
+ -- git-annex used to remove 'encryption' as well, since
+ -- it was redundant; we now need to keep it for
+ -- public-key encryption, hence we leave it on newer
+ -- remotes (while being backward-compatible).
[ "keyid", "keyid+", "keyid-", "highRandomQuality" ]
-{- Modifies a Remote to support encryption.
- -
- - Two additional functions must be provided by the remote,
- - to support storing and retrieving encrypted content. -}
-encryptableRemote
- :: RemoteConfig
- -> ((Cipher, Key) -> Key -> MeterUpdate -> Annex Bool)
- -> ((Cipher, Key) -> Key -> FilePath -> MeterUpdate -> Annex Bool)
- -> Remote
- -> Remote
-encryptableRemote c storeKeyEncrypted retrieveKeyFileEncrypted r =
- r {
- storeKey = store,
- retrieveKeyFile = retrieve,
- retrieveKeyFileCheap = retrieveCheap,
- removeKey = withkey $ removeKey r,
- hasKey = withkey $ hasKey r,
- cost = cost r + encryptedRemoteCostAdj
- }
- where
- store k f p = cip k >>= maybe
- (storeKey r k f p)
- (\enck -> storeKeyEncrypted enck k p)
- retrieve k f d p = cip k >>= maybe
- (retrieveKeyFile r k f d p)
- (\enck -> retrieveKeyFileEncrypted enck k d p)
- retrieveCheap k d = cip k >>= maybe
- (retrieveKeyFileCheap r k d)
- (\_ -> return False)
- withkey a k = cip k >>= maybe (a k) (a . snd)
- cip = cipherKey c
+remoteCipher :: RemoteConfig -> Annex (Maybe Cipher)
+remoteCipher = fmap fst <$$> remoteCipher'
{- Gets encryption Cipher. The decrypted Ciphers are cached in the Annex
- state. -}
-remoteCipher :: RemoteConfig -> Annex (Maybe Cipher)
-remoteCipher c = go $ extractCipher c
+remoteCipher' :: RemoteConfig -> Annex (Maybe (Cipher, StorableCipher))
+remoteCipher' c = go $ extractCipher c
where
go Nothing = return Nothing
go (Just encipher) = do
cache <- Annex.getState Annex.ciphers
case M.lookup encipher cache of
- Just cipher -> return $ Just cipher
+ Just cipher -> return $ Just (cipher, encipher)
Nothing -> do
- showNote "gpg"
cipher <- liftIO $ decryptCipher encipher
Annex.changeState (\s -> s { Annex.ciphers = M.insert encipher cipher cache })
- return $ Just cipher
+ return $ Just (cipher, encipher)
{- Checks if the remote's config allows storing creds in the remote's config.
-
@@ -133,11 +128,11 @@ embedCreds c
| isJust (M.lookup "cipherkeys" c) && isJust (M.lookup "cipher" c) = True
| otherwise = False
-{- Gets encryption Cipher, and encrypted version of Key. -}
-cipherKey :: RemoteConfig -> Key -> Annex (Maybe (Cipher, Key))
-cipherKey c k = fmap make <$> remoteCipher c
+{- Gets encryption Cipher, and key encryptor. -}
+cipherKey :: RemoteConfig -> Annex (Maybe (Cipher, EncKey))
+cipherKey c = fmap make <$> remoteCipher c
where
- make ciphertext = (ciphertext, encryptKey mac ciphertext k)
+ make ciphertext = (ciphertext, encryptKey mac ciphertext)
mac = fromMaybe defaultMac $ M.lookup "mac" c >>= readMac
{- Stores an StorableCipher in a remote's configuration. -}
@@ -162,3 +157,15 @@ extractCipher c = case (M.lookup "cipher" c,
_ -> Nothing
where
readkeys = KeyIds . split ","
+
+describeEncryption :: RemoteConfig -> String
+describeEncryption c = case extractCipher c of
+ Nothing -> "not encrypted"
+ (Just (SharedCipher _)) -> "encrypted (encryption key stored in git repository)"
+ (Just (EncryptedCipher _ v (KeyIds { keyIds = ks }))) -> unwords $ catMaybes
+ [ Just "encrypted (to gpg keys:"
+ , Just (unwords ks ++ ")")
+ , case v of
+ PubKey -> Nothing
+ Hybrid -> Just "(hybrid mode)"
+ ]
diff --git a/Remote/Helper/Git.hs b/Remote/Helper/Git.hs
index d76cb2ee7..3b438a0bb 100644
--- a/Remote/Helper/Git.hs
+++ b/Remote/Helper/Git.hs
@@ -1,6 +1,6 @@
{- Utilities for git remotes.
-
- - Copyright 2011-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -10,6 +10,9 @@ module Remote.Helper.Git where
import Common.Annex
import qualified Git
import Types.Availability
+import qualified Types.Remote as Remote
+
+import Data.Time.Clock.POSIX
repoCheap :: Git.Repo -> Bool
repoCheap = not . Git.repoIsUrl
@@ -26,7 +29,20 @@ availabilityCalc r
{- Avoids performing an action on a local repository that's not usable.
- Does not check that the repository is still available on disk. -}
-guardUsable :: Git.Repo -> a -> Annex a -> Annex a
-guardUsable r onerr a
- | Git.repoIsLocalUnknown r = return onerr
+guardUsable :: Git.Repo -> Annex a -> Annex a -> Annex a
+guardUsable r fallback a
+ | Git.repoIsLocalUnknown r = fallback
| otherwise = a
+
+gitRepoInfo :: Remote -> Annex [(String, String)]
+gitRepoInfo r = do
+ d <- fromRepo Git.localGitDir
+ mtimes <- liftIO $ mapM (modificationTime <$$> getFileStatus)
+ =<< dirContentsRecursive (d </> "refs" </> "remotes" </> Remote.name r)
+ let lastsynctime = case mtimes of
+ [] -> "never"
+ _ -> show $ posixSecondsToUTCTime $ realToFrac $ maximum mtimes
+ return
+ [ ("repository location", Git.repoLocation (Remote.repo r))
+ , ("last synced", lastsynctime)
+ ]
diff --git a/Remote/Helper/Hooks.hs b/Remote/Helper/Hooks.hs
index b7deae577..3765281be 100644
--- a/Remote/Helper/Hooks.hs
+++ b/Remote/Helper/Hooks.hs
@@ -1,6 +1,6 @@
{- Adds hooks to remotes.
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -15,11 +15,10 @@ import Common.Annex
import Types.Remote
import Types.CleanupActions
import qualified Annex
-import Annex.LockPool
+import Annex.LockFile
+import Utility.LockFile
#ifndef mingw32_HOST_OS
import Annex.Perms
-#else
-import Utility.WinLock
#endif
{- Modifies a remote's access functions to first run the
@@ -39,7 +38,7 @@ addHooks' r starthook stophook = r'
, retrieveKeyFile = \k f d p -> wrapper $ retrieveKeyFile r k f d p
, retrieveKeyFileCheap = \k f -> wrapper $ retrieveKeyFileCheap r k f
, removeKey = wrapper . removeKey r
- , hasKey = wrapper . hasKey r
+ , checkPresent = wrapper . checkPresent r
}
where
wrapper = runHooks r' starthook stophook
@@ -48,7 +47,7 @@ runHooks :: Remote -> Maybe String -> Maybe String -> Annex a -> Annex a
runHooks r starthook stophook a = do
dir <- fromRepo gitAnnexRemotesDir
let lck = dir </> remoteid ++ ".lck"
- whenM (notElem lck . M.keys <$> getPool) $ do
+ whenM (notElem lck . M.keys <$> getLockPool) $ do
liftIO $ createDirectoryIfMissing True dir
firstrun lck
a
@@ -63,7 +62,7 @@ runHooks r starthook stophook a = do
-- of it from running the stophook. If another
-- instance is shutting down right now, this
-- will block waiting for its exclusive lock to clear.
- lockFile lck
+ lockFileShared lck
-- The starthook is run even if some other git-annex
-- is already running, and ran it before.
@@ -84,19 +83,12 @@ runHooks r starthook stophook a = do
unlockFile lck
#ifndef mingw32_HOST_OS
mode <- annexFileMode
- fd <- liftIO $ noUmask mode $
- openFd lck ReadWrite (Just mode) defaultFileFlags
- v <- liftIO $ tryIO $
- setLock fd (WriteLock, AbsoluteSeek, 0, 0)
- case v of
- Left _ -> noop
- Right _ -> run stophook
- liftIO $ closeFd fd
+ v <- liftIO $ noUmask mode $ tryLockExclusive (Just mode) lck
#else
v <- liftIO $ lockExclusive lck
+#endif
case v of
Nothing -> noop
Just lockhandle -> do
run stophook
liftIO $ dropLock lockhandle
-#endif
diff --git a/Remote/Helper/Http.hs b/Remote/Helper/Http.hs
new file mode 100644
index 000000000..81c1654ef
--- /dev/null
+++ b/Remote/Helper/Http.hs
@@ -0,0 +1,85 @@
+{- helpers for remotes using http
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# LANGUAGE BangPatterns #-}
+
+module Remote.Helper.Http where
+
+import Common.Annex
+import Types.StoreRetrieve
+import Utility.Metered
+import Remote.Helper.Special
+import Network.HTTP.Client (RequestBody(..), Response, responseStatus, responseBody, BodyReader, NeedsPopper)
+import Network.HTTP.Types
+
+import qualified Data.ByteString.Lazy as L
+import qualified Data.ByteString as S
+import Control.Concurrent
+
+-- A storer that expects to be provided with a http RequestBody containing
+-- the content to store.
+--
+-- Implemented as a fileStorer, so that the content can be streamed
+-- from the file in constant space.
+httpStorer :: (Key -> RequestBody -> Annex Bool) -> Storer
+httpStorer a = fileStorer $ \k f m -> a k =<< liftIO (httpBodyStorer f m)
+
+-- Reads the file and generates a streaming request body, that will update
+-- the meter as it's sent.
+httpBodyStorer :: FilePath -> MeterUpdate -> IO RequestBody
+httpBodyStorer src m = do
+ size <- getFileSize src
+ let streamer sink = withMeteredFile src m $ \b -> byteStringPopper b sink
+ return $ RequestBodyStream (fromInteger size) streamer
+
+byteStringPopper :: L.ByteString -> NeedsPopper () -> IO ()
+byteStringPopper b sink = do
+ mvar <- newMVar $ L.toChunks b
+ let getnextchunk = modifyMVar mvar $ \v ->
+ case v of
+ [] -> return ([], S.empty)
+ (c:cs) -> return (cs, c)
+ sink getnextchunk
+
+{- Makes a Popper that streams a given number of chunks of a given
+ - size from the handle, updating the meter as the chunks are read. -}
+handlePopper :: Integer -> Int -> MeterUpdate -> Handle -> NeedsPopper () -> IO ()
+handlePopper numchunks chunksize meterupdate h sink = do
+ mvar <- newMVar zeroBytesProcessed
+ let getnextchunk = do
+ sent <- takeMVar mvar
+ if sent >= target
+ then do
+ putMVar mvar sent
+ return S.empty
+ else do
+ b <- S.hGet h chunksize
+ let !sent' = addBytesProcessed sent chunksize
+ putMVar mvar sent'
+ meterupdate sent'
+ return b
+ sink getnextchunk
+ where
+ target = toBytesProcessed (numchunks * fromIntegral chunksize)
+
+-- Reads the http body and stores it to the specified file, updating the
+-- meter as it goes.
+httpBodyRetriever :: FilePath -> MeterUpdate -> Response BodyReader -> IO ()
+httpBodyRetriever dest meterupdate resp
+ | responseStatus resp /= ok200 = error $ show $ responseStatus resp
+ | otherwise = bracket (openBinaryFile dest WriteMode) hClose (go zeroBytesProcessed)
+ where
+ reader = responseBody resp
+ go sofar h = do
+ b <- reader
+ if S.null b
+ then return ()
+ else do
+ let sofar' = addBytesProcessed sofar $ S.length b
+ S.hPut h b
+ meterupdate sofar'
+ go sofar' h
diff --git a/Remote/Helper/Messages.hs b/Remote/Helper/Messages.hs
index c4b1966dc..30db70fbb 100644
--- a/Remote/Helper/Messages.hs
+++ b/Remote/Helper/Messages.hs
@@ -1,6 +1,6 @@
{- git-annex remote messages
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -9,9 +9,19 @@ module Remote.Helper.Messages where
import Common.Annex
import qualified Git
+import qualified Types.Remote as Remote
showChecking :: Git.Repo -> Annex ()
showChecking r = showAction $ "checking " ++ Git.repoDescribe r
-cantCheck :: Git.Repo -> Either String Bool
-cantCheck r = Left $ "unable to check " ++ Git.repoDescribe r
+class Checkable a where
+ descCheckable :: a -> String
+
+instance Checkable Git.Repo where
+ descCheckable = Git.repoDescribe
+
+instance Checkable (Remote.RemoteA a) where
+ descCheckable = Remote.name
+
+cantCheck :: Checkable a => a -> e
+cantCheck v = error $ "unable to check " ++ descCheckable v
diff --git a/Remote/Helper/ReadOnly.hs b/Remote/Helper/ReadOnly.hs
index cd92a083c..2e327a040 100644
--- a/Remote/Helper/ReadOnly.hs
+++ b/Remote/Helper/ReadOnly.hs
@@ -1,6 +1,6 @@
{- Adds readonly support to remotes.
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Remote/Helper/Special.hs b/Remote/Helper/Special.hs
index 7fc421f46..9f219e8b1 100644
--- a/Remote/Helper/Special.hs
+++ b/Remote/Helper/Special.hs
@@ -1,20 +1,54 @@
-{- common functions for special remotes
+{- helpers for special remotes
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
-module Remote.Helper.Special where
-
-import qualified Data.Map as M
+module Remote.Helper.Special (
+ findSpecialRemotes,
+ gitConfigSpecialRemote,
+ Preparer,
+ Storer,
+ Retriever,
+ Remover,
+ CheckPresent,
+ simplyPrepare,
+ ContentSource,
+ checkPrepare,
+ resourcePrepare,
+ fileStorer,
+ byteStorer,
+ fileRetriever,
+ byteRetriever,
+ storeKeyDummy,
+ retreiveKeyFileDummy,
+ removeKeyDummy,
+ checkPresentDummy,
+ SpecialRemoteCfg(..),
+ specialRemoteCfg,
+ specialRemote,
+ specialRemote',
+ module X
+) where
import Common.Annex
+import Types.StoreRetrieve
import Types.Remote
+import Crypto
+import Config.Cost
+import Utility.Metered
+import Remote.Helper.Chunked as X
+import Remote.Helper.Encryptable as X
+import Remote.Helper.Messages
+import Annex.Content
import qualified Git
import qualified Git.Command
import qualified Git.Construct
+import qualified Data.ByteString.Lazy as L
+import qualified Data.Map as M
+
{- Special remotes don't have a configured url, so Git.Repo does not
- automatically generate remotes for them. This looks for a different
- configuration key instead.
@@ -25,7 +59,7 @@ findSpecialRemotes s = do
liftIO $ mapM construct $ remotepairs m
where
remotepairs = M.toList . M.filterWithKey match
- construct (k,_) = Git.Construct.remoteNamedFromKey k Git.Construct.fromUnknown
+ construct (k,_) = Git.Construct.remoteNamedFromKey k (pure Git.Construct.fromUnknown)
match k _ = startswith "remote." k && endswith (".annex-"++s) k
{- Sets up configuration for a special remote in .git/config. -}
@@ -38,3 +72,204 @@ gitConfigSpecialRemote u c k v = do
[Param "config", Param (configsetting a), Param b]
remotename = fromJust (M.lookup "name" c)
configsetting s = "remote." ++ remotename ++ "." ++ s
+
+-- Use when nothing needs to be done to prepare a helper.
+simplyPrepare :: helper -> Preparer helper
+simplyPrepare helper _ a = a $ Just helper
+
+-- Use to run a check when preparing a helper.
+checkPrepare :: (Key -> Annex Bool) -> helper -> Preparer helper
+checkPrepare checker helper k a = ifM (checker k)
+ ( a (Just helper)
+ , a Nothing
+ )
+
+-- Use to acquire a resource when preparing a helper.
+resourcePrepare :: (Key -> (r -> Annex Bool) -> Annex Bool) -> (r -> helper) -> Preparer helper
+resourcePrepare withr helper k a = withr k $ \r ->
+ a (Just (helper r))
+
+-- A Storer that expects to be provided with a file containing
+-- the content of the key to store.
+fileStorer :: (Key -> FilePath -> MeterUpdate -> Annex Bool) -> Storer
+fileStorer a k (FileContent f) m = a k f m
+fileStorer a k (ByteContent b) m = withTmp k $ \f -> do
+ liftIO $ L.writeFile f b
+ a k f m
+
+-- A Storer that expects to be provided with a L.ByteString of
+-- the content to store.
+byteStorer :: (Key -> L.ByteString -> MeterUpdate -> Annex Bool) -> Storer
+byteStorer a k c m = withBytes c $ \b -> a k b m
+
+-- A Retriever that writes the content of a Key to a provided file.
+-- It is responsible for updating the progress meter as it retrieves data.
+fileRetriever :: (FilePath -> Key -> MeterUpdate -> Annex ()) -> Retriever
+fileRetriever a k m callback = do
+ f <- prepTmp k
+ a f k m
+ callback (FileContent f)
+
+-- A Retriever that generates a lazy ByteString containing the Key's
+-- content, and passes it to a callback action which will fully consume it
+-- before returning.
+byteRetriever :: (Key -> (L.ByteString -> Annex Bool) -> Annex Bool) -> Retriever
+byteRetriever a k _m callback = a k (callback . ByteContent)
+
+{- The base Remote that is provided to specialRemote needs to have
+ - storeKey, retrieveKeyFile, removeKey, and checkPresent methods,
+ - but they are never actually used (since specialRemote replaces them).
+ - Here are some dummy ones.
+ -}
+storeKeyDummy :: Key -> AssociatedFile -> MeterUpdate -> Annex Bool
+storeKeyDummy _ _ _ = return False
+retreiveKeyFileDummy :: Key -> AssociatedFile -> FilePath -> MeterUpdate -> Annex Bool
+retreiveKeyFileDummy _ _ _ _ = return False
+removeKeyDummy :: Key -> Annex Bool
+removeKeyDummy _ = return False
+checkPresentDummy :: Key -> Annex Bool
+checkPresentDummy _ = error "missing checkPresent implementation"
+
+type RemoteModifier
+ = RemoteConfig
+ -> Preparer Storer
+ -> Preparer Retriever
+ -> Preparer Remover
+ -> Preparer CheckPresent
+ -> Remote
+ -> Remote
+
+data SpecialRemoteCfg = SpecialRemoteCfg
+ { chunkConfig :: ChunkConfig
+ , displayProgress :: Bool
+ }
+
+specialRemoteCfg :: RemoteConfig -> SpecialRemoteCfg
+specialRemoteCfg c = SpecialRemoteCfg (getChunkConfig c) True
+
+-- Modifies a base Remote to support both chunking and encryption,
+-- which special remotes typically should support.
+specialRemote :: RemoteModifier
+specialRemote c = specialRemote' (specialRemoteCfg c) c
+
+specialRemote' :: SpecialRemoteCfg -> RemoteModifier
+specialRemote' cfg c preparestorer prepareretriever prepareremover preparecheckpresent baser = encr
+ where
+ encr = baser
+ { storeKey = \k _f p -> cip >>= storeKeyGen k p
+ , retrieveKeyFile = \k _f d p -> cip >>= retrieveKeyFileGen k d p
+ , retrieveKeyFileCheap = \k d -> cip >>= maybe
+ (retrieveKeyFileCheap baser k d)
+ -- retrieval of encrypted keys is never cheap
+ (\_ -> return False)
+ , removeKey = \k -> cip >>= removeKeyGen k
+ , checkPresent = \k -> cip >>= checkPresentGen k
+ , cost = maybe
+ (cost baser)
+ (const $ cost baser + encryptedRemoteCostAdj)
+ (extractCipher c)
+ , getInfo = do
+ l <- getInfo baser
+ return $ l ++
+ [ ("encryption", describeEncryption c)
+ , ("chunking", describeChunkConfig (chunkConfig cfg))
+ ]
+ }
+ cip = cipherKey c
+ gpgopts = getGpgEncParams encr
+
+ safely a = catchNonAsync a (\e -> warning (show e) >> return False)
+
+ -- chunk, then encrypt, then feed to the storer
+ storeKeyGen k p enc = safely $ preparestorer k $ safely . go
+ where
+ go (Just storer) = sendAnnex k rollback $ \src ->
+ displayprogress p k $ \p' ->
+ storeChunks (uuid baser) chunkconfig k src p'
+ (storechunk enc storer)
+ (checkPresent baser)
+ go Nothing = return False
+ rollback = void $ removeKey encr k
+
+ storechunk Nothing storer k content p = storer k content p
+ storechunk (Just (cipher, enck)) storer k content p =
+ withBytes content $ \b ->
+ encrypt gpgopts cipher (feedBytes b) $
+ readBytes $ \encb ->
+ storer (enck k) (ByteContent encb) p
+
+ -- call retrieve-r to get chunks; decrypt them; stream to dest file
+ retrieveKeyFileGen k dest p enc =
+ safely $ prepareretriever k $ safely . go
+ where
+ go (Just retriever) = displayprogress p k $ \p' ->
+ retrieveChunks retriever (uuid baser) chunkconfig
+ enck k dest p' (sink dest enc)
+ go Nothing = return False
+ enck = maybe id snd enc
+
+ removeKeyGen k enc = safely $ prepareremover k $ safely . go
+ where
+ go (Just remover) = removeChunks remover (uuid baser) chunkconfig enck k
+ go Nothing = return False
+ enck = maybe id snd enc
+
+ checkPresentGen k enc = preparecheckpresent k go
+ where
+ go (Just checker) = checkPresentChunks checker (uuid baser) chunkconfig enck k
+ go Nothing = cantCheck baser
+ enck = maybe id snd enc
+
+ chunkconfig = chunkConfig cfg
+
+ displayprogress p k a
+ | displayProgress cfg = metered (Just p) k a
+ | otherwise = a p
+
+{- Sink callback for retrieveChunks. Stores the file content into the
+ - provided Handle, decrypting it first if necessary.
+ -
+ - If the remote did not store the content using chunks, no Handle
+ - will be provided, and it's up to us to open the destination file.
+ -
+ - Note that when neither chunking nor encryption is used, and the remote
+ - provides FileContent, that file only needs to be renamed
+ - into place. (And it may even already be in the right place..)
+ -}
+sink
+ :: FilePath
+ -> Maybe (Cipher, EncKey)
+ -> Maybe Handle
+ -> Maybe MeterUpdate
+ -> ContentSource
+ -> Annex Bool
+sink dest enc mh mp content = do
+ case (enc, mh, content) of
+ (Nothing, Nothing, FileContent f)
+ | f == dest -> noop
+ | otherwise -> liftIO $ moveFile f dest
+ (Just (cipher, _), _, ByteContent b) ->
+ decrypt cipher (feedBytes b) $
+ readBytes write
+ (Just (cipher, _), _, FileContent f) -> do
+ withBytes content $ \b ->
+ decrypt cipher (feedBytes b) $
+ readBytes write
+ liftIO $ nukeFile f
+ (Nothing, _, FileContent f) -> do
+ withBytes content write
+ liftIO $ nukeFile f
+ (Nothing, _, ByteContent b) -> write b
+ return True
+ where
+ write b = case mh of
+ Just h -> liftIO $ b `streamto` h
+ Nothing -> liftIO $ bracket opendest hClose (b `streamto`)
+ streamto b h = case mp of
+ Just p -> meteredWrite p h b
+ Nothing -> L.hPut h b
+ opendest = openBinaryFile dest WriteMode
+
+withBytes :: ContentSource -> (L.ByteString -> Annex a) -> Annex a
+withBytes (ByteContent b) a = a b
+withBytes (FileContent f) a = a =<< liftIO (L.readFile f)
diff --git a/Remote/Helper/Ssh.hs b/Remote/Helper/Ssh.hs
index 8de88953f..3addf2384 100644
--- a/Remote/Helper/Ssh.hs
+++ b/Remote/Helper/Ssh.hs
@@ -1,6 +1,6 @@
{- git-annex remote access with ssh and git-annex-shell
-
- - Copyright 2011-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -8,30 +8,29 @@
module Remote.Helper.Ssh where
import Common.Annex
+import qualified Annex
import qualified Git
import qualified Git.Url
import Annex.UUID
import Annex.Ssh
import CmdLine.GitAnnexShell.Fields (Field, fieldName)
import qualified CmdLine.GitAnnexShell.Fields as Fields
-import Types.GitConfig
import Types.Key
import Remote.Helper.Messages
import Utility.Metered
import Utility.Rsync
import Types.Remote
import Logs.Transfer
+import Config
{- Generates parameters to ssh to a repository's host and run a command.
- Caller is responsible for doing any neccessary shellEscaping of the
- passed command. -}
-toRepo :: Git.Repo -> [CommandParam] -> Annex [CommandParam]
-toRepo r sshcmd = do
- g <- fromRepo id
- let c = extractRemoteGitConfig g (Git.repoDescribe r)
- let opts = map Param $ remoteAnnexSshOptions c
+toRepo :: Git.Repo -> RemoteGitConfig -> [CommandParam] -> Annex [CommandParam]
+toRepo r gc sshcmd = do
+ let opts = map Param $ remoteAnnexSshOptions gc
let host = fromMaybe (error "bad ssh url") $ Git.Url.hostuser r
- params <- sshCachingOptions (host, Git.Url.port r) opts
+ params <- sshOptions (host, Git.Url.port r) gc opts
return $ params ++ Param host : sshcmd
{- Generates parameters to run a git-annex-shell command on a remote
@@ -40,16 +39,18 @@ git_annex_shell :: Git.Repo -> String -> [CommandParam] -> [(Field, String)] ->
git_annex_shell r command params fields
| not $ Git.repoIsUrl r = return $ Just (shellcmd, shellopts ++ fieldopts)
| Git.repoIsSsh r = do
+ gc <- Annex.getRemoteGitConfig r
u <- getRepoUUID r
- sshparams <- toRepo r [Param $ sshcmd u ]
+ sshparams <- toRepo r gc [Param $ sshcmd u gc]
return $ Just ("ssh", sshparams)
| otherwise = return Nothing
where
dir = Git.repoPath r
shellcmd = "git-annex-shell"
shellopts = Param command : File dir : params
- sshcmd u = unwords $
- shellcmd : map shellEscape (toCommand shellopts) ++
+ sshcmd u gc = unwords $
+ fromMaybe shellcmd (remoteAnnexShell gc)
+ : map shellEscape (toCommand shellopts) ++
uuidcheck u ++
map shellEscape (toCommand fieldopts)
uuidcheck NoUUID = []
@@ -68,7 +69,7 @@ git_annex_shell r command params fields
- a specified error value. -}
onRemote
:: Git.Repo
- -> (FilePath -> [CommandParam] -> IO a, a)
+ -> (FilePath -> [CommandParam] -> IO a, Annex a)
-> String
-> [CommandParam]
-> [(Field, String)]
@@ -77,22 +78,22 @@ onRemote r (with, errorval) command params fields = do
s <- git_annex_shell r command params fields
case s of
Just (c, ps) -> liftIO $ with c ps
- Nothing -> return errorval
+ Nothing -> errorval
{- Checks if a remote contains a key. -}
-inAnnex :: Git.Repo -> Key -> Annex (Either String Bool)
+inAnnex :: Git.Repo -> Key -> Annex Bool
inAnnex r k = do
showChecking r
onRemote r (check, cantCheck r) "inannex" [Param $ key2file k] []
where
- check c p = dispatch <$> safeSystem c p
- dispatch ExitSuccess = Right True
- dispatch (ExitFailure 1) = Right False
+ check c p = dispatch =<< safeSystem c p
+ dispatch ExitSuccess = return True
+ dispatch (ExitFailure 1) = return False
dispatch _ = cantCheck r
{- Removes a key from a remote. -}
dropKey :: Git.Repo -> Key -> Annex Bool
-dropKey r key = onRemote r (boolSystem, False) "dropkey"
+dropKey r key = onRemote r (boolSystem, return False) "dropkey"
[ Params "--quiet --force"
, Param $ key2file key
]
@@ -122,7 +123,7 @@ rsyncParamsRemote direct r direction key file afile = do
fields
-- Convert the ssh command into rsync command line.
let eparam = rsyncShell (Param shellcmd:shellparams)
- let o = rsyncParams r direction
+ o <- rsyncParams r direction
return $ if direction == Download
then o ++ rsyncopts eparam dummy (File file)
else o ++ rsyncopts eparam (File file) dummy
@@ -140,9 +141,19 @@ rsyncParamsRemote direct r direction key file afile = do
dummy = Param "dummy:"
-- --inplace to resume partial files
-rsyncParams :: Remote -> Direction -> [CommandParam]
-rsyncParams r direction = Params "--progress --inplace" :
- map Param (remoteAnnexRsyncOptions gc ++ dps)
+--
+-- Only use --perms when not on a crippled file system, as rsync
+-- will fail trying to restore file perms onto a filesystem that does not
+-- support them.
+rsyncParams :: Remote -> Direction -> Annex [CommandParam]
+rsyncParams r direction = do
+ crippled <- crippledFileSystem
+ return $ map Param $ catMaybes
+ [ Just "--progress"
+ , Just "--inplace"
+ , if crippled then Nothing else Just "--perms"
+ ]
+ ++ remoteAnnexRsyncOptions gc ++ dps
where
dps
| direction == Download = remoteAnnexRsyncDownloadOptions gc
diff --git a/Remote/Hook.hs b/Remote/Hook.hs
index 3735c228c..592564772 100644
--- a/Remote/Hook.hs
+++ b/Remote/Hook.hs
@@ -1,15 +1,12 @@
{- A remote that provides hooks to run shell commands.
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Remote.Hook (remote) where
-import qualified Data.ByteString.Lazy as L
-import qualified Data.Map as M
-
import Common.Annex
import Types.Remote
import Types.Key
@@ -17,14 +14,12 @@ import Types.Creds
import qualified Git
import Config
import Config.Cost
-import Annex.Content
import Annex.UUID
import Remote.Helper.Special
-import Remote.Helper.Encryptable
-import Crypto
-import Utility.Metered
import Utility.Env
+import qualified Data.Map as M
+
type Action = String
type HookName = String
@@ -39,30 +34,37 @@ remote = RemoteType {
gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
gen r u c gc = do
cst <- remoteCost gc expensiveRemoteCost
- return $ Just $ encryptableRemote c
- (storeEncrypted hooktype $ getGpgEncParams (c,gc))
- (retrieveEncrypted hooktype)
- Remote {
- uuid = u,
- cost = cst,
- name = Git.repoDescribe r,
- storeKey = store hooktype,
- retrieveKeyFile = retrieve hooktype,
- retrieveKeyFileCheap = retrieveCheap hooktype,
- removeKey = remove hooktype,
- hasKey = checkPresent r hooktype,
- hasKeyCheap = False,
- whereisKey = Nothing,
- remoteFsck = Nothing,
- repairRepo = Nothing,
- config = c,
- localpath = Nothing,
- repo = r,
- gitconfig = gc,
- readonly = False,
- availability = GloballyAvailable,
- remotetype = remote
- }
+ return $ Just $ specialRemote c
+ (simplyPrepare $ store hooktype)
+ (simplyPrepare $ retrieve hooktype)
+ (simplyPrepare $ remove hooktype)
+ (simplyPrepare $ checkKey r hooktype)
+ Remote
+ { uuid = u
+ , cost = cst
+ , name = Git.repoDescribe r
+ , storeKey = storeKeyDummy
+ , retrieveKeyFile = retreiveKeyFileDummy
+ , retrieveKeyFileCheap = retrieveCheap hooktype
+ , removeKey = removeKeyDummy
+ , checkPresent = checkPresentDummy
+ , checkPresentCheap = False
+ , whereisKey = Nothing
+ , remoteFsck = Nothing
+ , repairRepo = Nothing
+ , config = c
+ , localpath = Nothing
+ , repo = r
+ , gitconfig = gc
+ , readonly = False
+ , availability = GloballyAvailable
+ , remotetype = remote
+ , mkUnavailable = gen r u c $
+ gc { remoteAnnexHookType = Just "!dne!" }
+ , getInfo = return [("hooktype", hooktype)]
+ , claimUrl = Nothing
+ , checkUrl = Nothing
+ }
where
hooktype = fromMaybe (error "missing hooktype") $ remoteAnnexHookType gc
@@ -71,7 +73,7 @@ hookSetup mu _ c = do
u <- maybe (liftIO genUUID) return mu
let hooktype = fromMaybe (error "Specify hooktype=") $
M.lookup "hooktype" c
- c' <- encryptionSetup c
+ (c', _encsetup) <- encryptionSetup c
gitConfigSpecialRemote u c' "hooktype" hooktype
return (c', u)
@@ -79,16 +81,16 @@ hookEnv :: Action -> Key -> Maybe FilePath -> IO (Maybe [(String, String)])
hookEnv action k f = Just <$> mergeenv (fileenv f ++ keyenv)
where
mergeenv l = addEntries l <$> getEnvironment
- env s v = ("ANNEX_" ++ s, v)
+ envvar s v = ("ANNEX_" ++ s, v)
keyenv = catMaybes
- [ Just $ env "KEY" (key2file k)
- , Just $ env "ACTION" action
- , env "HASH_1" <$> headMaybe hashbits
- , env "HASH_2" <$> headMaybe (drop 1 hashbits)
+ [ Just $ envvar "KEY" (key2file k)
+ , Just $ envvar "ACTION" action
+ , envvar "HASH_1" <$> headMaybe hashbits
+ , envvar "HASH_2" <$> headMaybe (drop 1 hashbits)
]
fileenv Nothing = []
- fileenv (Just file) = [env "FILE" file]
- hashbits = map takeDirectory $ splitPath $ hashDirMixed k
+ fileenv (Just file) = [envvar "FILE" file]
+ hashbits = map takeDirectory $ splitPath $ hashDirMixed def k
lookupHook :: HookName -> Action -> Annex (Maybe String)
lookupHook hookname action = do
@@ -118,42 +120,30 @@ runHook hook action k f a = maybe (return False) run =<< lookupHook hook action
return False
)
-store :: HookName -> Key -> AssociatedFile -> MeterUpdate -> Annex Bool
-store h k _f _p = sendAnnex k (void $ remove h k) $ \src ->
+store :: HookName -> Storer
+store h = fileStorer $ \k src _p ->
runHook h "store" k (Just src) $ return True
-storeEncrypted :: HookName -> [CommandParam] -> (Cipher, Key) -> Key -> MeterUpdate -> Annex Bool
-storeEncrypted h gpgOpts (cipher, enck) k _p = withTmp enck $ \tmp ->
- sendAnnex k (void $ remove h enck) $ \src -> do
- liftIO $ encrypt gpgOpts cipher (feedFile src) $
- readBytes $ L.writeFile tmp
- runHook h "store" enck (Just tmp) $ return True
-
-retrieve :: HookName -> Key -> AssociatedFile -> FilePath -> MeterUpdate -> Annex Bool
-retrieve h k _f d _p = runHook h "retrieve" k (Just d) $ return True
+retrieve :: HookName -> Retriever
+retrieve h = fileRetriever $ \d k _p ->
+ unlessM (runHook h "retrieve" k (Just d) $ return True) $
+ error "failed to retrieve content"
retrieveCheap :: HookName -> Key -> FilePath -> Annex Bool
retrieveCheap _ _ _ = return False
-retrieveEncrypted :: HookName -> (Cipher, Key) -> Key -> FilePath -> MeterUpdate -> Annex Bool
-retrieveEncrypted h (cipher, enck) _ f _p = withTmp enck $ \tmp ->
- runHook h "retrieve" enck (Just tmp) $ liftIO $ catchBoolIO $ do
- decrypt cipher (feedFile tmp) $
- readBytes $ L.writeFile f
- return True
-
-remove :: HookName -> Key -> Annex Bool
+remove :: HookName -> Remover
remove h k = runHook h "remove" k Nothing $ return True
-checkPresent :: Git.Repo -> HookName -> Key -> Annex (Either String Bool)
-checkPresent r h k = do
+checkKey :: Git.Repo -> HookName -> CheckPresent
+checkKey r h k = do
showAction $ "checking " ++ Git.repoDescribe r
v <- lookupHook h action
- liftIO $ catchMsgIO $ check v
+ liftIO $ check v
where
- action = "checkpresent"
+ action = "checkpresent"
findkey s = key2file k `elem` lines s
check Nothing = error $ action ++ " hook misconfigured"
check (Just hook) = do
- env <- hookEnv action k Nothing
- findkey <$> readProcessEnv "sh" ["-c", hook] env
+ environ <- hookEnv action k Nothing
+ findkey <$> readProcessEnv "sh" ["-c", hook] environ
diff --git a/Remote/List.hs b/Remote/List.hs
index e3afc939c..49b0a35f2 100644
--- a/Remote/List.hs
+++ b/Remote/List.hs
@@ -2,7 +2,7 @@
{- git-annex remote list
-
- - Copyright 2011,2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2011,2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -15,7 +15,6 @@ import Common.Annex
import qualified Annex
import Logs.Remote
import Types.Remote
-import Types.GitConfig
import Annex.UUID
import Remote.Helper.Hooks
import Remote.Helper.ReadOnly
@@ -31,6 +30,7 @@ import qualified Remote.Bup
import qualified Remote.Directory
import qualified Remote.Rsync
import qualified Remote.Web
+import qualified Remote.BitTorrent
#ifdef WITH_WEBDAV
import qualified Remote.WebDAV
#endif
@@ -38,6 +38,7 @@ import qualified Remote.WebDAV
import qualified Remote.Tahoe
#endif
import qualified Remote.Glacier
+import qualified Remote.Ddar
import qualified Remote.Hook
import qualified Remote.External
@@ -52,6 +53,7 @@ remoteTypes =
, Remote.Directory.remote
, Remote.Rsync.remote
, Remote.Web.remote
+ , Remote.BitTorrent.remote
#ifdef WITH_WEBDAV
, Remote.WebDAV.remote
#endif
@@ -59,6 +61,7 @@ remoteTypes =
, Remote.Tahoe.remote
#endif
, Remote.Glacier.remote
+ , Remote.Ddar.remote
, Remote.Hook.remote
, Remote.External.remote
]
@@ -92,8 +95,7 @@ remoteListRefresh = do
remoteGen :: M.Map UUID RemoteConfig -> RemoteType -> Git.Repo -> Annex (Maybe Remote)
remoteGen m t r = do
u <- getRepoUUID r
- g <- fromRepo id
- let gc = extractRemoteGitConfig g (Git.repoDescribe r)
+ gc <- Annex.getRemoteGitConfig r
let c = fromMaybe M.empty $ M.lookup u m
mrmt <- generate t r u c gc
return $ adjustReadOnly . addHooks <$> mrmt
diff --git a/Remote/Rsync.hs b/Remote/Rsync.hs
index 7d051d6cd..f39081299 100644
--- a/Remote/Rsync.hs
+++ b/Remote/Rsync.hs
@@ -1,6 +1,6 @@
{- A remote that is only accessible by rsync.
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -9,10 +9,10 @@
module Remote.Rsync (
remote,
- storeEncrypted,
- retrieveEncrypted,
+ store,
+ retrieve,
remove,
- checkPresent,
+ checkKey,
withRsyncScratchDir,
genRsyncOpts,
RsyncOpts
@@ -27,7 +27,6 @@ import Annex.Content
import Annex.UUID
import Annex.Ssh
import Remote.Helper.Special
-import Remote.Helper.Encryptable
import Remote.Rsync.RsyncUrl
import Crypto
import Utility.Rsync
@@ -37,8 +36,9 @@ import Utility.PID
import Annex.Perms
import Logs.Transfer
import Types.Creds
+import Types.Key (isChunkKey)
+import Annex.DirHashes
-import qualified Data.ByteString.Lazy as L
import qualified Data.Map as M
remote :: RemoteType
@@ -56,19 +56,21 @@ gen r u c gc = do
fromMaybe (error "missing rsyncurl") $ remoteAnnexRsyncUrl gc
let o = genRsyncOpts c gc transport url
let islocal = rsyncUrlIsPath $ rsyncUrl o
- return $ Just $ encryptableRemote c
- (storeEncrypted o $ getGpgEncParams (c,gc))
- (retrieveEncrypted o)
+ return $ Just $ specialRemote' specialcfg c
+ (simplyPrepare $ fileStorer $ store o)
+ (simplyPrepare $ fileRetriever $ retrieve o)
+ (simplyPrepare $ remove o)
+ (simplyPrepare $ checkKey r o)
Remote
{ uuid = u
, cost = cst
, name = Git.repoDescribe r
- , storeKey = store o
- , retrieveKeyFile = retrieve o
+ , storeKey = storeKeyDummy
+ , retrieveKeyFile = retreiveKeyFileDummy
, retrieveKeyFileCheap = retrieveCheap o
- , removeKey = remove o
- , hasKey = checkPresent r o
- , hasKeyCheap = False
+ , removeKey = removeKeyDummy
+ , checkPresent = checkPresentDummy
+ , checkPresentCheap = False
, whereisKey = Nothing
, remoteFsck = Nothing
, repairRepo = Nothing
@@ -81,12 +83,20 @@ gen r u c gc = do
, readonly = False
, availability = if islocal then LocallyAvailable else GloballyAvailable
, remotetype = remote
+ , mkUnavailable = return Nothing
+ , getInfo = return [("url", url)]
+ , claimUrl = Nothing
+ , checkUrl = Nothing
}
+ where
+ specialcfg = (specialRemoteCfg c)
+ -- Rsync displays its own progress.
+ { displayProgress = False }
genRsyncOpts :: RemoteConfig -> RemoteGitConfig -> [CommandParam] -> RsyncUrl -> RsyncOpts
genRsyncOpts c gc transport url = RsyncOpts
{ rsyncUrl = url
- , rsyncOptions = opts []
+ , rsyncOptions = transport ++ opts []
, rsyncUploadOptions = transport ++ opts (remoteAnnexRsyncUploadOptions gc)
, rsyncDownloadOptions = transport ++ opts (remoteAnnexRsyncDownloadOptions gc)
, rsyncShellEscape = M.lookup "shellescape" c /= Just "no"
@@ -111,8 +121,8 @@ rsyncTransport gc url
let (port, sshopts') = sshReadPort sshopts
userhost = takeWhile (/=':') url
-- Connection caching
- (Param "ssh":) <$> sshCachingOptions
- (userhost, port)
+ (Param "ssh":) <$> sshOptions
+ (userhost, port) gc
(map Param $ loginopt ++ sshopts')
"rsh":rshopts -> return $ map Param $ "rsh" :
loginopt ++ rshopts
@@ -132,40 +142,58 @@ rsyncSetup mu _ c = do
-- verify configuration is sane
let url = fromMaybe (error "Specify rsyncurl=") $
M.lookup "rsyncurl" c
- c' <- encryptionSetup c
+ (c', _encsetup) <- encryptionSetup c
-- The rsyncurl is stored in git config, not only in this remote's
-- persistant state, so it can vary between hosts.
gitConfigSpecialRemote u c' "rsyncurl" url
return (c', u)
-store :: RsyncOpts -> Key -> AssociatedFile -> MeterUpdate -> Annex Bool
-store o k _f p = sendAnnex k (void $ remove o k) $ rsyncSend o p k False
-
-storeEncrypted :: RsyncOpts -> [CommandParam] -> (Cipher, Key) -> Key -> MeterUpdate -> Annex Bool
-storeEncrypted o gpgOpts (cipher, enck) k p = withTmp enck $ \tmp ->
- sendAnnex k (void $ remove o enck) $ \src -> do
- liftIO $ encrypt gpgOpts cipher (feedFile src) $
- readBytes $ L.writeFile tmp
- rsyncSend o p enck True tmp
+{- To send a single key is slightly tricky; need to build up a temporary
+ - directory structure to pass to rsync so it can create the hash
+ - directories.
+ -
+ - This would not be necessary if the hash directory structure used locally
+ - was always the same as that used on the rsync remote. So if that's ever
+ - unified, this gets nicer.
+ - (When we have the right hash directory structure, we can just
+ - pass --include=X --include=X/Y --include=X/Y/file --exclude=*)
+ -}
+store :: RsyncOpts -> Key -> FilePath -> MeterUpdate -> Annex Bool
+store o k src meterupdate = withRsyncScratchDir $ \tmp -> do
+ let dest = tmp </> Prelude.head (keyPaths k)
+ liftIO $ createDirectoryIfMissing True $ parentDir dest
+ ok <- liftIO $ if canrename
+ then do
+ rename src dest
+ return True
+ else createLinkOrCopy src dest
+ ps <- sendParams
+ if ok
+ then showResumable $ rsyncRemote Upload o (Just meterupdate) $ ps ++
+ [ Param "--recursive"
+ , partialParams
+ -- tmp/ to send contents of tmp dir
+ , File $ addTrailingPathSeparator tmp
+ , Param $ rsyncUrl o
+ ]
+ else return False
+ where
+ {- If the key being sent is encrypted or chunked, the file
+ - containing its content is a temp file, and so can be
+ - renamed into place. Otherwise, the file is the annexed
+ - object file, and has to be copied or hard linked into place. -}
+ canrename = isEncKey k || isChunkKey k
-retrieve :: RsyncOpts -> Key -> AssociatedFile -> FilePath -> MeterUpdate -> Annex Bool
-retrieve o k _ f p = rsyncRetrieve o k f (Just p)
+retrieve :: RsyncOpts -> FilePath -> Key -> MeterUpdate -> Annex ()
+retrieve o f k p =
+ unlessM (rsyncRetrieve o k f (Just p)) $
+ error "rsync failed"
retrieveCheap :: RsyncOpts -> Key -> FilePath -> Annex Bool
retrieveCheap o k f = ifM (preseedTmp k f) ( rsyncRetrieve o k f Nothing , return False )
-retrieveEncrypted :: RsyncOpts -> (Cipher, Key) -> Key -> FilePath -> MeterUpdate -> Annex Bool
-retrieveEncrypted o (cipher, enck) _ f p = withTmp enck $ \tmp ->
- ifM (rsyncRetrieve o enck tmp (Just p))
- ( liftIO $ catchBoolIO $ do
- decrypt cipher (feedFile tmp) $
- readBytes $ L.writeFile f
- return True
- , return False
- )
-
-remove :: RsyncOpts -> Key -> Annex Bool
+remove :: RsyncOpts -> Remover
remove o k = do
ps <- sendParams
withRsyncScratchDir $ \tmp -> liftIO $ do
@@ -185,22 +213,20 @@ remove o k = do
- content could be. Note that the parent directories have
- to also be explicitly included, due to how rsync
- traverses directories. -}
- includes = concatMap use annexHashes
- use h = let dir = h k in
+ includes = concatMap use dirHashes
+ use h = let dir = h def k in
[ parentDir dir
, dir
-- match content directory and anything in it
, dir </> keyFile k </> "***"
]
-checkPresent :: Git.Repo -> RsyncOpts -> Key -> Annex (Either String Bool)
-checkPresent r o k = do
+checkKey :: Git.Repo -> RsyncOpts -> CheckPresent
+checkKey r o k = do
showAction $ "checking " ++ Git.repoDescribe r
-- note: Does not currently differentiate between rsync failing
-- to connect, and the file not being present.
- Right <$> check
- where
- check = untilTrue (rsyncUrls o k) $ \u ->
+ untilTrue (rsyncUrls o k) $ \u ->
liftIO $ catchBoolIO $ do
withQuietOutput createProcessSuccess $
proc "rsync" $ toCommand $
@@ -238,8 +264,8 @@ withRsyncScratchDir a = do
removeDirectoryRecursive d
rsyncRetrieve :: RsyncOpts -> Key -> FilePath -> Maybe MeterUpdate -> Annex Bool
-rsyncRetrieve o k dest callback =
- showResumable $ untilTrue (rsyncUrls o k) $ \u -> rsyncRemote Download o callback
+rsyncRetrieve o k dest meterupdate =
+ showResumable $ untilTrue (rsyncUrls o k) $ \u -> rsyncRemote Download o meterupdate
-- use inplace when retrieving to support resuming
[ Param "--inplace"
, Param u
@@ -263,33 +289,3 @@ rsyncRemote direction o callback params = do
opts
| direction == Download = rsyncDownloadOptions o
| otherwise = rsyncUploadOptions o
-
-{- To send a single key is slightly tricky; need to build up a temporary
- - directory structure to pass to rsync so it can create the hash
- - directories.
- -
- - This would not be necessary if the hash directory structure used locally
- - was always the same as that used on the rsync remote. So if that's ever
- - unified, this gets nicer.
- - (When we have the right hash directory structure, we can just
- - pass --include=X --include=X/Y --include=X/Y/file --exclude=*)
- -}
-rsyncSend :: RsyncOpts -> MeterUpdate -> Key -> Bool -> FilePath -> Annex Bool
-rsyncSend o callback k canrename src = withRsyncScratchDir $ \tmp -> do
- let dest = tmp </> Prelude.head (keyPaths k)
- liftIO $ createDirectoryIfMissing True $ parentDir dest
- ok <- liftIO $ if canrename
- then do
- rename src dest
- return True
- else createLinkOrCopy src dest
- ps <- sendParams
- if ok
- then showResumable $ rsyncRemote Upload o (Just callback) $ ps ++
- [ Param "--recursive"
- , partialParams
- -- tmp/ to send contents of tmp dir
- , File $ addTrailingPathSeparator tmp
- , Param $ rsyncUrl o
- ]
- else return False
diff --git a/Remote/Rsync/RsyncUrl.hs b/Remote/Rsync/RsyncUrl.hs
index 61bbe2f3f..a7a2ac8f6 100644
--- a/Remote/Rsync/RsyncUrl.hs
+++ b/Remote/Rsync/RsyncUrl.hs
@@ -1,6 +1,6 @@
{- Rsync urls.
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -14,10 +14,12 @@ import Locations
import Utility.Rsync
import Utility.SafeCommand
+import Data.Default
import System.FilePath.Posix
#ifdef mingw32_HOST_OS
import Data.String.Utils
#endif
+import Annex.DirHashes
type RsyncUrl = String
@@ -35,12 +37,12 @@ rsyncEscape o u
| otherwise = u
rsyncUrls :: RsyncOpts -> Key -> [RsyncUrl]
-rsyncUrls o k = map use annexHashes
+rsyncUrls o k = map use dirHashes
where
use h = rsyncUrl o </> hash h </> rsyncEscape o (f </> f)
f = keyFile k
#ifndef mingw32_HOST_OS
- hash h = h k
+ hash h = h def k
#else
- hash h = replace "\\" "/" (h k)
+ hash h = replace "\\" "/" (h def k)
#endif
diff --git a/Remote/S3.hs b/Remote/S3.hs
index c1a99abcd..b0c1de114 100644
--- a/Remote/S3.hs
+++ b/Remote/S3.hs
@@ -1,21 +1,33 @@
{- S3 remotes
-
- - Copyright 2011-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
-module Remote.S3 (remote, iaHost, isIA, isIAHost, iaItemUrl) where
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE CPP #-}
-import Network.AWS.AWSConnection
-import Network.AWS.S3Object hiding (getStorageClass)
-import Network.AWS.S3Bucket hiding (size)
-import Network.AWS.AWSResult
+module Remote.S3 (remote, iaHost, configIA, iaItemUrl) where
+
+import qualified Aws as AWS
+import qualified Aws.Core as AWS
+import qualified Aws.S3 as S3
import qualified Data.Text as T
-import qualified Data.ByteString.Lazy.Char8 as L
+import qualified Data.Text.Encoding as T
+import qualified Data.ByteString.Lazy as L
+import qualified Data.ByteString as S
import qualified Data.Map as M
import Data.Char
import Network.Socket (HostName)
+import Network.HTTP.Conduit (Manager, newManager, closeManager)
+import Network.HTTP.Client (defaultManagerSettings, managerResponseTimeout, responseStatus, responseBody, RequestBody(..))
+import Network.HTTP.Types
+import Control.Monad.Trans.Resource
+import Control.Monad.Catch
+import Data.Conduit
+import Data.IORef
import Common.Annex
import Types.Remote
@@ -24,16 +36,15 @@ import qualified Git
import Config
import Config.Cost
import Remote.Helper.Special
-import Remote.Helper.Encryptable
+import Remote.Helper.Http
import qualified Remote.Helper.AWS as AWS
-import Crypto
import Creds
-import Utility.Metered
-import Annex.Content
import Annex.UUID
import Logs.Web
+import Utility.Metered
+import Utility.DataUnits
-type Bucket = String
+type BucketName = String
remote :: RemoteType
remote = RemoteType {
@@ -44,50 +55,64 @@ remote = RemoteType {
}
gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
-gen r u c gc = new <$> remoteCost gc expensiveRemoteCost
+gen r u c gc = do
+ cst <- remoteCost gc expensiveRemoteCost
+ info <- extractS3Info c
+ return $ new cst info
where
- new cst = Just $ encryptableRemote c
- (storeEncrypted this)
- (retrieveEncrypted this)
+ new cst info = Just $ specialRemote c
+ (prepareS3 this info $ store this)
+ (prepareS3 this info retrieve)
+ (prepareS3 this info remove)
+ (prepareS3 this info $ checkKey this)
this
where
- this = Remote {
- uuid = u,
- cost = cst,
- name = Git.repoDescribe r,
- storeKey = store this,
- retrieveKeyFile = retrieve this,
- retrieveKeyFileCheap = retrieveCheap this,
- removeKey = remove this c,
- hasKey = checkPresent this,
- hasKeyCheap = False,
- whereisKey = Nothing,
- remoteFsck = Nothing,
- repairRepo = Nothing,
- config = c,
- repo = r,
- gitconfig = gc,
- localpath = Nothing,
- readonly = False,
- availability = GloballyAvailable,
- remotetype = remote
- }
+ this = Remote
+ { uuid = u
+ , cost = cst
+ , name = Git.repoDescribe r
+ , storeKey = storeKeyDummy
+ , retrieveKeyFile = retreiveKeyFileDummy
+ , retrieveKeyFileCheap = retrieveCheap
+ , removeKey = removeKeyDummy
+ , checkPresent = checkPresentDummy
+ , checkPresentCheap = False
+ , whereisKey = Nothing
+ , remoteFsck = Nothing
+ , repairRepo = Nothing
+ , config = c
+ , repo = r
+ , gitconfig = gc
+ , localpath = Nothing
+ , readonly = False
+ , availability = GloballyAvailable
+ , remotetype = remote
+ , mkUnavailable = gen r u (M.insert "host" "!dne!" c) gc
+ , getInfo = includeCredsInfo c (AWS.creds u) $ catMaybes
+ [ Just ("bucket", fromMaybe "unknown" (getBucketName c))
+ , if configIA c
+ then Just ("internet archive item", iaItemUrl $ fromMaybe "unknown" $ getBucketName c)
+ else Nothing
+ , Just ("partsize", maybe "unlimited" (roughSize storageUnits False) (getPartSize c))
+ ]
+ , claimUrl = Nothing
+ , checkUrl = Nothing
+ }
s3Setup :: Maybe UUID -> Maybe CredPair -> RemoteConfig -> Annex (RemoteConfig, UUID)
s3Setup mu mcreds c = do
u <- maybe (liftIO genUUID) return mu
- c' <- setRemoteCredPair c (AWS.creds u) mcreds
- s3Setup' u c'
-s3Setup' :: UUID -> RemoteConfig -> Annex (RemoteConfig, UUID)
-s3Setup' u c = if isIA c then archiveorg else defaulthost
+ s3Setup' u mcreds c
+s3Setup' :: UUID -> Maybe CredPair -> RemoteConfig -> Annex (RemoteConfig, UUID)
+s3Setup' u mcreds c = if configIA c then archiveorg else defaulthost
where
remotename = fromJust (M.lookup "name" c)
defbucket = remotename ++ "-" ++ fromUUID u
defaults = M.fromList
[ ("datacenter", T.unpack $ AWS.defaultRegion AWS.S3)
, ("storageclass", "STANDARD")
- , ("host", defaultAmazonS3Host)
- , ("port", show defaultAmazonS3Port)
+ , ("host", AWS.s3DefaultHost)
+ , ("port", "80")
, ("bucket", defbucket)
]
@@ -96,250 +121,400 @@ s3Setup' u c = if isIA c then archiveorg else defaulthost
return (fullconfig, u)
defaulthost = do
- c' <- encryptionSetup c
- let fullconfig = c' `M.union` defaults
+ (c', encsetup) <- encryptionSetup c
+ c'' <- setRemoteCredPair encsetup c' (AWS.creds u) mcreds
+ let fullconfig = c'' `M.union` defaults
genBucket fullconfig u
use fullconfig
archiveorg = do
showNote "Internet Archive mode"
+ c' <- setRemoteCredPair noEncryptionUsed c (AWS.creds u) mcreds
-- Ensure user enters a valid bucket name, since
-- this determines the name of the archive.org item.
- let bucket = replace " " "-" $ map toLower $
+ let validbucket = replace " " "-" $ map toLower $
fromMaybe (error "specify bucket=") $
- getBucket c
+ getBucketName c'
let archiveconfig =
- -- hS3 does not pass through x-archive-* headers
+ -- IA acdepts x-amz-* as an alias for x-archive-*
M.mapKeys (replace "x-archive-" "x-amz-") $
-- encryption does not make sense here
M.insert "encryption" "none" $
- M.insert "bucket" bucket $
- M.union c $
+ M.insert "bucket" validbucket $
+ M.union c' $
-- special constraints on key names
- M.insert "mungekeys" "ia" $
- -- bucket created only when files are uploaded
- M.insert "x-amz-auto-make-bucket" "1" defaults
- writeUUIDFile archiveconfig u
+ M.insert "mungekeys" "ia" defaults
+ info <- extractS3Info archiveconfig
+ withS3Handle archiveconfig u info $
+ writeUUIDFile archiveconfig u
use archiveconfig
-store :: Remote -> Key -> AssociatedFile -> MeterUpdate -> Annex Bool
-store r k _f p = s3Action r False $ \(conn, bucket) ->
- sendAnnex k (void $ remove' r k) $ \src -> do
- ok <- s3Bool =<< storeHelper (conn, bucket) r k p src
-
- -- Store public URL to item in Internet Archive.
- when (ok && isIA (config r)) $
- setUrlPresent k (iaKeyUrl r k)
-
- return ok
-
-storeEncrypted :: Remote -> (Cipher, Key) -> Key -> MeterUpdate -> Annex Bool
-storeEncrypted r (cipher, enck) k p = s3Action r False $ \(conn, bucket) ->
- -- To get file size of the encrypted content, have to use a temp file.
- -- (An alternative would be chunking to to a constant size.)
- withTmp enck $ \tmp -> sendAnnex k (void $ remove' r enck) $ \src -> do
- liftIO $ encrypt (getGpgEncParams r) cipher (feedFile src) $
- readBytes $ L.writeFile tmp
- s3Bool =<< storeHelper (conn, bucket) r enck p tmp
-
-storeHelper :: (AWSConnection, Bucket) -> Remote -> Key -> MeterUpdate -> FilePath -> Annex (AWSResult ())
-storeHelper (conn, bucket) r k p file = do
- size <- maybe getsize (return . fromIntegral) $ keySize k
- meteredBytes (Just p) size $ \meterupdate ->
- liftIO $ withMeteredFile file meterupdate $ \content -> do
- -- size is provided to S3 so the whole content
- -- does not need to be buffered to calculate it
- let object = S3Object
- bucket (bucketFile r k) ""
- (("Content-Length", show size) : getXheaders (config r))
- content
- sendObject conn $
- setStorageClass (getStorageClass $ config r) object
+-- Sets up a http connection manager for S3 encdpoint, which allows
+-- http connections to be reused across calls to the helper.
+prepareS3 :: Remote -> S3Info -> (S3Handle -> helper) -> Preparer helper
+prepareS3 r info = resourcePrepare $ const $
+ withS3Handle (config r) (uuid r) info
+
+store :: Remote -> S3Handle -> Storer
+store r h = fileStorer $ \k f p -> do
+ case partSize (hinfo h) of
+ Just partsz | partsz > 0 -> do
+ fsz <- liftIO $ getFileSize f
+ if fsz > partsz
+ then multipartupload fsz partsz k f p
+ else singlepartupload k f p
+ _ -> singlepartupload k f p
+ -- Store public URL to item in Internet Archive.
+ when (isIA (hinfo h) && not (isChunkKey k)) $
+ setUrlPresent webUUID k (iaKeyUrl r k)
+ return True
where
- getsize = liftIO $ fromIntegral . fileSize <$> getFileStatus file
-
-retrieve :: Remote -> Key -> AssociatedFile -> FilePath -> MeterUpdate -> Annex Bool
-retrieve r k _f d p = s3Action r False $ \(conn, bucket) ->
- metered (Just p) k $ \meterupdate -> do
- res <- liftIO $ getObject conn $ bucketKey r bucket k
- case res of
- Right o -> do
- liftIO $ meteredWriteFile meterupdate d $
- obj_data o
- return True
- Left e -> s3Warning e
-
-retrieveCheap :: Remote -> Key -> FilePath -> Annex Bool
-retrieveCheap _ _ _ = return False
-
-retrieveEncrypted :: Remote -> (Cipher, Key) -> Key -> FilePath -> MeterUpdate -> Annex Bool
-retrieveEncrypted r (cipher, enck) k d p = s3Action r False $ \(conn, bucket) ->
- metered (Just p) k $ \meterupdate -> do
- res <- liftIO $ getObject conn $ bucketKey r bucket enck
- case res of
- Right o -> liftIO $ decrypt cipher (\h -> meteredWrite meterupdate h $ obj_data o) $
- readBytes $ \content -> do
- L.writeFile d content
- return True
- Left e -> s3Warning e
+ singlepartupload k f p = do
+ rbody <- liftIO $ httpBodyStorer f p
+ void $ sendS3Handle h $ putObject h (bucketObject (hinfo h) k) rbody
+ multipartupload fsz partsz k f p = do
+#if MIN_VERSION_aws(0,10,6)
+ let info = hinfo h
+ let object = bucketObject info k
+
+ let startreq = (S3.postInitiateMultipartUpload (bucket info) object)
+ { S3.imuStorageClass = Just (storageClass info)
+ , S3.imuMetadata = metaHeaders info
+ , S3.imuAutoMakeBucket = isIA info
+ , S3.imuExpires = Nothing -- TODO set some reasonable expiry
+ }
+ uploadid <- S3.imurUploadId <$> sendS3Handle h startreq
+
+ -- The actual part size will be a even multiple of the
+ -- 32k chunk size that hGetUntilMetered uses.
+ let partsz' = (partsz `div` toInteger defaultChunkSize) * toInteger defaultChunkSize
+
+ -- Send parts of the file, taking care to stream each part
+ -- w/o buffering in memory, since the parts can be large.
+ etags <- bracketIO (openBinaryFile f ReadMode) hClose $ \fh -> do
+ let sendparts meter etags partnum = do
+ pos <- liftIO $ hTell fh
+ if pos >= fsz
+ then return (reverse etags)
+ else do
+ -- Calculate size of part that will
+ -- be read.
+ let sz = if fsz - pos < partsz'
+ then fsz - pos
+ else partsz'
+ let p' = offsetMeterUpdate p (toBytesProcessed pos)
+ let numchunks = ceiling (fromIntegral sz / fromIntegral defaultChunkSize :: Double)
+ let popper = handlePopper numchunks defaultChunkSize p' fh
+ let req = S3.uploadPart (bucket info) object partnum uploadid $
+ RequestBodyStream (fromIntegral sz) popper
+ S3.UploadPartResponse _ etag <- sendS3Handle h req
+ sendparts (offsetMeterUpdate meter (toBytesProcessed sz)) (etag:etags) (partnum + 1)
+ sendparts p [] 1
+
+ void $ sendS3Handle h $ S3.postCompleteMultipartUpload
+ (bucket info) object uploadid (zip [1..] etags)
+#else
+ warning $ "Cannot do multipart upload (partsize " ++ show partsz ++ ") of large file (" ++ show fsz ++ "); built with too old a version of the aws library."
+ singlepartupload k f p
+#endif
+
+{- Implemented as a fileRetriever, that uses conduit to stream the chunks
+ - out to the file. Would be better to implement a byteRetriever, but
+ - that is difficult. -}
+retrieve :: S3Handle -> Retriever
+retrieve h = fileRetriever $ \f k p -> liftIO $ runResourceT $ do
+ (fr, fh) <- allocate (openFile f WriteMode) hClose
+ let req = S3.getObject (bucket info) (bucketObject info k)
+ S3.GetObjectResponse { S3.gorResponse = rsp } <- sendS3Handle' h req
+ responseBody rsp $$+- sinkprogressfile fh p zeroBytesProcessed
+ release fr
+ where
+ info = hinfo h
+ sinkprogressfile fh meterupdate sofar = do
+ mbs <- await
+ case mbs of
+ Nothing -> return ()
+ Just bs -> do
+ let sofar' = addBytesProcessed sofar (S.length bs)
+ liftIO $ do
+ void $ meterupdate sofar'
+ S.hPut fh bs
+ sinkprogressfile fh meterupdate sofar'
+
+retrieveCheap :: Key -> FilePath -> Annex Bool
+retrieveCheap _ _ = return False
{- Internet Archive doesn't easily allow removing content.
- While it may remove the file, there are generally other files
- derived from it that it does not remove. -}
-remove :: Remote -> RemoteConfig -> Key -> Annex Bool
-remove r c k
- | isIA c = do
+remove :: S3Handle -> Remover
+remove h k
+ | isIA info = do
warning "Cannot remove content from the Internet Archive"
return False
- | otherwise = remove' r k
-
-remove' :: Remote -> Key -> Annex Bool
-remove' r k = s3Action r False $ \(conn, bucket) ->
- s3Bool =<< liftIO (deleteObject conn $ bucketKey r bucket k)
-
-checkPresent :: Remote -> Key -> Annex (Either String Bool)
-checkPresent r k = s3Action r noconn $ \(conn, bucket) -> do
- showAction $ "checking " ++ name r
- res <- liftIO $ getObjectInfo conn $ bucketKey r bucket k
- case res of
- Right _ -> return $ Right True
- Left (AWSError _ _) -> return $ Right False
- Left e -> return $ Left (s3Error e)
+ | otherwise = do
+ res <- tryNonAsync $ sendS3Handle h $
+ S3.DeleteObject (bucketObject info k) (bucket info)
+ return $ either (const False) (const True) res
where
- noconn = Left $ error "S3 not configured"
-
-s3Warning :: ReqError -> Annex Bool
-s3Warning e = do
- warning $ prettyReqError e
- return False
-
-s3Error :: ReqError -> a
-s3Error e = error $ prettyReqError e
-
-s3Bool :: AWSResult () -> Annex Bool
-s3Bool (Right _) = return True
-s3Bool (Left e) = s3Warning e
-
-s3Action :: Remote -> a -> ((AWSConnection, Bucket) -> Annex a) -> Annex a
-s3Action r noconn action = do
- let bucket = M.lookup "bucket" $ config r
- conn <- s3Connection (config r) (uuid r)
- case (bucket, conn) of
- (Just b, Just c) -> action (c, b)
- _ -> return noconn
-
-bucketFile :: Remote -> Key -> FilePath
-bucketFile r = munge . key2file
- where
- munge s = case M.lookup "mungekeys" c of
- Just "ia" -> iaMunge $ filePrefix c ++ s
- _ -> filePrefix c ++ s
- c = config r
-
-filePrefix :: RemoteConfig -> String
-filePrefix = M.findWithDefault "" "fileprefix"
-
-bucketKey :: Remote -> Bucket -> Key -> S3Object
-bucketKey r bucket k = S3Object bucket (bucketFile r k) "" [] L.empty
+ info = hinfo h
-{- Internet Archive limits filenames to a subset of ascii,
- - with no whitespace. Other characters are xml entity
- - encoded. -}
-iaMunge :: String -> String
-iaMunge = (>>= munge)
+checkKey :: Remote -> S3Handle -> CheckPresent
+checkKey r h k = do
+ showAction $ "checking " ++ name r
+#if MIN_VERSION_aws(0,10,0)
+ rsp <- go
+ return (isJust $ S3.horMetadata rsp)
+#else
+ catchMissingException $ do
+ void go
+ return True
+#endif
where
- munge c
- | isAsciiUpper c || isAsciiLower c || isNumber c = [c]
- | c `elem` "_-.\"" = [c]
- | isSpace c = []
- | otherwise = "&" ++ show (ord c) ++ ";"
-
+ go = sendS3Handle h $
+ S3.headObject (bucket (hinfo h)) (bucketObject (hinfo h) k)
+
+#if ! MIN_VERSION_aws(0,10,0)
+ {- Catch exception headObject returns when an object is not present
+ - in the bucket, and returns False. All other exceptions indicate a
+ - check error and are let through. -}
+ catchMissingException :: Annex Bool -> Annex Bool
+ catchMissingException a = catchJust missing a (const $ return False)
+ where
+ missing :: AWS.HeaderException -> Maybe ()
+ missing e
+ | AWS.headerErrorMessage e == "ETag missing" = Just ()
+ | otherwise = Nothing
+#endif
+
+{- Generate the bucket if it does not already exist, including creating the
+ - UUID file within the bucket.
+ -
+ - Some ACLs can allow read/write to buckets, but not querying them,
+ - so first check if the UUID file already exists and we can skip doing
+ - anything.
+ -}
genBucket :: RemoteConfig -> UUID -> Annex ()
genBucket c u = do
- conn <- s3ConnectionRequired c u
showAction "checking bucket"
- loc <- liftIO $ getBucketLocation conn bucket
- case loc of
- Right _ -> writeUUIDFile c u
- Left err@(NetworkError _) -> s3Error err
- Left (AWSError _ _) -> do
- showAction $ "creating bucket in " ++ datacenter
- res <- liftIO $ createBucketIn conn bucket datacenter
- case res of
- Right _ -> writeUUIDFile c u
- Left err -> s3Error err
+ info <- extractS3Info c
+ withS3Handle c u info $ \h ->
+ go h =<< checkUUIDFile c u h
where
- bucket = fromJust $ getBucket c
+ go _ (Right True) = noop
+ go h _ = do
+ v <- tryNonAsync $ sendS3Handle h (S3.getBucket $ bucket $ hinfo h)
+ case v of
+ Right _ -> noop
+ Left _ -> do
+ showAction $ "creating bucket in " ++ datacenter
+ void $ sendS3Handle h $
+ S3.PutBucket (bucket $ hinfo h) Nothing $
+ mkLocationConstraint $
+ T.pack datacenter
+ writeUUIDFile c u h
+
datacenter = fromJust $ M.lookup "datacenter" c
{- Writes the UUID to an annex-uuid file within the bucket.
-
- If the file already exists in the bucket, it must match.
-
- - Note that IA items do not get created by createBucketIn.
- - Rather, they are created the first time a file is stored in them.
- - So this also takes care of that.
+ - Note that IA buckets can only created by having a file
+ - stored in them. So this also takes care of that.
-}
-writeUUIDFile :: RemoteConfig -> UUID -> Annex ()
-writeUUIDFile c u = do
- conn <- s3ConnectionRequired c u
- go conn =<< liftIO (tryNonAsync $ getObject conn $ mkobject L.empty)
+writeUUIDFile :: RemoteConfig -> UUID -> S3Handle -> Annex ()
+writeUUIDFile c u h = do
+ v <- checkUUIDFile c u h
+ case v of
+ Right True -> noop
+ _ -> void $ sendS3Handle h mkobject
where
- go _conn (Right (Right o)) = unless (obj_data o == uuidb) $
- error $ "This bucket is already in use by a different S3 special remote, with UUID: " ++ L.unpack (obj_data o)
- go conn _ = do
- let object = setStorageClass (getStorageClass c) (mkobject uuidb)
- either s3Error return =<< liftIO (sendObject conn object)
-
- file = filePrefix c ++ "annex-uuid"
- uuidb = L.pack $ fromUUID u
- bucket = fromJust $ getBucket c
+ file = T.pack $ uuidFile c
+ uuidb = L.fromChunks [T.encodeUtf8 $ T.pack $ fromUUID u]
- mkobject = S3Object bucket file "" (getXheaders c)
+ mkobject = putObject h file (RequestBodyLBS uuidb)
-s3ConnectionRequired :: RemoteConfig -> UUID -> Annex AWSConnection
-s3ConnectionRequired c u =
- maybe (error "Cannot connect to S3") return =<< s3Connection c u
-
-s3Connection :: RemoteConfig -> UUID -> Annex (Maybe AWSConnection)
-s3Connection c u = go =<< getRemoteCredPairFor "S3" c (AWS.creds u)
+{- Checks if the UUID file exists in the bucket
+ - and has the specified UUID already. -}
+checkUUIDFile :: RemoteConfig -> UUID -> S3Handle -> Annex (Either SomeException Bool)
+checkUUIDFile c u h = tryNonAsync $ check <$> get
+ where
+ get = liftIO
+ . runResourceT
+ . either (pure . Left) (Right <$$> AWS.loadToMemory)
+ =<< tryS3 (sendS3Handle h (S3.getObject (bucket (hinfo h)) file))
+ check (Right (S3.GetObjectMemoryResponse _meta rsp)) =
+ responseStatus rsp == ok200 && responseBody rsp == uuidb
+ check (Left _S3Error) = False
+
+ file = T.pack $ uuidFile c
+ uuidb = L.fromChunks [T.encodeUtf8 $ T.pack $ fromUUID u]
+
+uuidFile :: RemoteConfig -> FilePath
+uuidFile c = getFilePrefix c ++ "annex-uuid"
+
+putObject :: S3Handle -> T.Text -> RequestBody -> S3.PutObject
+putObject h file rbody = (S3.putObject (bucket info) file rbody)
+ { S3.poStorageClass = Just (storageClass info)
+ , S3.poMetadata = metaHeaders info
+ , S3.poAutoMakeBucket = isIA info
+ }
+ where
+ info = hinfo h
+
+data S3Handle = S3Handle
+ { hmanager :: Manager
+ , hawscfg :: AWS.Configuration
+ , hs3cfg :: S3.S3Configuration AWS.NormalQuery
+ , hinfo :: S3Info
+ }
+
+{- Sends a request to S3 and gets back the response.
+ -
+ - Note that pureAws's use of ResourceT is bypassed here;
+ - the response should be fully processed while the S3Handle
+ - is still open, eg within a call to withS3Handle.
+ -}
+sendS3Handle
+ :: (AWS.Transaction req res, AWS.ServiceConfiguration req ~ S3.S3Configuration)
+ => S3Handle
+ -> req
+ -> Annex res
+sendS3Handle h r = liftIO $ runResourceT $ sendS3Handle' h r
+
+sendS3Handle'
+ :: (AWS.Transaction r a, AWS.ServiceConfiguration r ~ S3.S3Configuration)
+ => S3Handle
+ -> r
+ -> ResourceT IO a
+sendS3Handle' h = AWS.pureAws (hawscfg h) (hs3cfg h) (hmanager h)
+
+withS3Handle :: RemoteConfig -> UUID -> S3Info -> (S3Handle -> Annex a) -> Annex a
+withS3Handle c u info a = do
+ creds <- getRemoteCredPairFor "S3" c (AWS.creds u)
+ awscreds <- liftIO $ genCredentials $ fromMaybe nocreds creds
+ let awscfg = AWS.Configuration AWS.Timestamp awscreds (AWS.defaultLog AWS.Error)
+ bracketIO (newManager httpcfg) closeManager $ \mgr ->
+ a $ S3Handle mgr awscfg s3cfg info
where
- go Nothing = return Nothing
- go (Just (ak, sk)) = return $ Just $ AWSConnection host port ak sk
+ s3cfg = s3Configuration c
+ httpcfg = defaultManagerSettings
+ { managerResponseTimeout = Nothing }
+ nocreds = error "Cannot use S3 without credentials configured"
+s3Configuration :: RemoteConfig -> S3.S3Configuration AWS.NormalQuery
+s3Configuration c = (S3.s3 proto endpoint False) { S3.s3Port = port }
+ where
+ proto
+ | port == 443 = AWS.HTTPS
+ | otherwise = AWS.HTTP
host = fromJust $ M.lookup "host" c
+ datacenter = fromJust $ M.lookup "datacenter" c
+ -- When the default S3 host is configured, connect directly to
+ -- the S3 endpoint for the configured datacenter.
+ -- When another host is configured, it's used as-is.
+ endpoint
+ | host == AWS.s3DefaultHost = AWS.s3HostName $ T.pack datacenter
+ | otherwise = T.encodeUtf8 $ T.pack host
port = let s = fromJust $ M.lookup "port" c in
case reads s of
[(p, _)] -> p
_ -> error $ "bad S3 port value: " ++ s
-getBucket :: RemoteConfig -> Maybe Bucket
-getBucket = M.lookup "bucket"
+tryS3 :: Annex a -> Annex (Either S3.S3Error a)
+tryS3 a = (Right <$> a) `catch` (pure . Left)
+
+data S3Info = S3Info
+ { bucket :: S3.Bucket
+ , storageClass :: S3.StorageClass
+ , bucketObject :: Key -> T.Text
+ , metaHeaders :: [(T.Text, T.Text)]
+ , partSize :: Maybe Integer
+ , isIA :: Bool
+ }
+
+extractS3Info :: RemoteConfig -> Annex S3Info
+extractS3Info c = do
+ b <- maybe
+ (error "S3 bucket not configured")
+ (return . T.pack)
+ (getBucketName c)
+ return $ S3Info
+ { bucket = b
+ , storageClass = getStorageClass c
+ , bucketObject = T.pack . getBucketObject c
+ , metaHeaders = getMetaHeaders c
+ , partSize = getPartSize c
+ , isIA = configIA c
+ }
-getStorageClass :: RemoteConfig -> StorageClass
-getStorageClass c = case fromJust $ M.lookup "storageclass" c of
- "REDUCED_REDUNDANCY" -> REDUCED_REDUNDANCY
- _ -> STANDARD
-
-getXheaders :: RemoteConfig -> [(String, String)]
-getXheaders = filter isxheader . M.assocs
+getBucketName :: RemoteConfig -> Maybe BucketName
+getBucketName = M.lookup "bucket"
+
+getStorageClass :: RemoteConfig -> S3.StorageClass
+getStorageClass c = case M.lookup "storageclass" c of
+ Just "REDUCED_REDUNDANCY" -> S3.ReducedRedundancy
+ _ -> S3.Standard
+
+getPartSize :: RemoteConfig -> Maybe Integer
+getPartSize c = readSize dataUnits =<< M.lookup "partsize" c
+
+getMetaHeaders :: RemoteConfig -> [(T.Text, T.Text)]
+getMetaHeaders = map munge . filter ismetaheader . M.assocs
where
- isxheader (h, _) = "x-amz-" `isPrefixOf` h
+ ismetaheader (h, _) = metaprefix `isPrefixOf` h
+ metaprefix = "x-amz-meta-"
+ metaprefixlen = length metaprefix
+ munge (k, v) = (T.pack $ drop metaprefixlen k, T.pack v)
+
+getFilePrefix :: RemoteConfig -> String
+getFilePrefix = M.findWithDefault "" "fileprefix"
+
+getBucketObject :: RemoteConfig -> Key -> FilePath
+getBucketObject c = munge . key2file
+ where
+ munge s = case M.lookup "mungekeys" c of
+ Just "ia" -> iaMunge $ getFilePrefix c ++ s
+ _ -> getFilePrefix c ++ s
+
+{- Internet Archive limits filenames to a subset of ascii,
+ - with no whitespace. Other characters are xml entity
+ - encoded. -}
+iaMunge :: String -> String
+iaMunge = (>>= munge)
+ where
+ munge c
+ | isAsciiUpper c || isAsciiLower c || isNumber c = [c]
+ | c `elem` "_-.\"" = [c]
+ | isSpace c = []
+ | otherwise = "&" ++ show (ord c) ++ ";"
+
+configIA :: RemoteConfig -> Bool
+configIA = maybe False isIAHost . M.lookup "host"
{- Hostname to use for archive.org S3. -}
iaHost :: HostName
iaHost = "s3.us.archive.org"
-isIA :: RemoteConfig -> Bool
-isIA c = maybe False isIAHost (M.lookup "host" c)
-
isIAHost :: HostName -> Bool
isIAHost h = ".archive.org" `isSuffixOf` map toLower h
-iaItemUrl :: Bucket -> URLString
-iaItemUrl bucket = "http://archive.org/details/" ++ bucket
+iaItemUrl :: BucketName -> URLString
+iaItemUrl b = "http://archive.org/details/" ++ b
iaKeyUrl :: Remote -> Key -> URLString
-iaKeyUrl r k = "http://archive.org/download/" ++ bucket ++ "/" ++ bucketFile r k
+iaKeyUrl r k = "http://archive.org/download/" ++ b ++ "/" ++ getBucketObject (config r) k
where
- bucket = fromMaybe "" $ getBucket $ config r
+ b = fromMaybe "" $ getBucketName $ config r
+
+genCredentials :: CredPair -> IO AWS.Credentials
+genCredentials (keyid, secret) = AWS.Credentials
+ <$> pure (T.encodeUtf8 (T.pack keyid))
+ <*> pure (T.encodeUtf8 (T.pack secret))
+ <*> newIORef []
+ <*> pure Nothing
+
+mkLocationConstraint :: AWS.Region -> S3.LocationConstraint
+mkLocationConstraint "US" = S3.locationUsClassic
+mkLocationConstraint r = r
diff --git a/Remote/Tahoe.hs b/Remote/Tahoe.hs
index 56a17eb62..56bf66427 100644
--- a/Remote/Tahoe.hs
+++ b/Remote/Tahoe.hs
@@ -13,7 +13,7 @@
-
- Tahoe has its own encryption, so git-annex's encryption is not used.
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -64,27 +64,31 @@ gen r u c gc = do
hdl <- liftIO $ TahoeHandle
<$> maybe (defaultTahoeConfigDir u) return (remoteAnnexTahoe gc)
<*> newEmptyTMVarIO
- return $ Just $ Remote {
- uuid = u,
- cost = cst,
- name = Git.repoDescribe r,
- storeKey = store u hdl,
- retrieveKeyFile = retrieve u hdl,
- retrieveKeyFileCheap = \_ _ -> return False,
- removeKey = remove,
- hasKey = checkPresent u hdl,
- hasKeyCheap = False,
- whereisKey = Nothing,
- remoteFsck = Nothing,
- repairRepo = Nothing,
- config = c,
- repo = r,
- gitconfig = gc,
- localpath = Nothing,
- readonly = False,
- availability = GloballyAvailable,
- remotetype = remote
- }
+ return $ Just $ Remote
+ { uuid = u
+ , cost = cst
+ , name = Git.repoDescribe r
+ , storeKey = store u hdl
+ , retrieveKeyFile = retrieve u hdl
+ , retrieveKeyFileCheap = \_ _ -> return False
+ , removeKey = remove
+ , checkPresent = checkKey u hdl
+ , checkPresentCheap = False
+ , whereisKey = Nothing
+ , remoteFsck = Nothing
+ , repairRepo = Nothing
+ , config = c
+ , repo = r
+ , gitconfig = gc
+ , localpath = Nothing
+ , readonly = False
+ , availability = GloballyAvailable
+ , remotetype = remote
+ , mkUnavailable = return Nothing
+ , getInfo = return []
+ , claimUrl = Nothing
+ , checkUrl = Nothing
+ }
tahoeSetup :: Maybe UUID -> Maybe CredPair -> RemoteConfig -> Annex (RemoteConfig, UUID)
tahoeSetup mu _ c = do
@@ -123,14 +127,16 @@ remove _k = do
warning "content cannot be removed from tahoe remote"
return False
-checkPresent :: UUID -> TahoeHandle -> Key -> Annex (Either String Bool)
-checkPresent u hdl k = go =<< getCapability u k
+checkKey :: UUID -> TahoeHandle -> Key -> Annex Bool
+checkKey u hdl k = go =<< getCapability u k
where
- go Nothing = return (Right False)
- go (Just cap) = liftIO $ parseCheck <$> readTahoe hdl "check"
- [ Param "--raw"
- , Param cap
- ]
+ go Nothing = return False
+ go (Just cap) = liftIO $ do
+ v <- parseCheck <$> readTahoe hdl "check"
+ [ Param "--raw"
+ , Param cap
+ ]
+ either error return v
defaultTahoeConfigDir :: UUID -> IO TahoeConfigDir
defaultTahoeConfigDir u = do
@@ -164,7 +170,7 @@ writeSharedConvergenceSecret configdir scs =
getSharedConvergenceSecret :: TahoeConfigDir -> IO SharedConvergenceSecret
getSharedConvergenceSecret configdir = go (60 :: Int)
where
- f = convergenceFile configdir
+ f = convergenceFile configdir
go n
| n == 0 = error $ "tahoe did not write " ++ f ++ " after 1 minute. Perhaps the daemon failed to start?"
| otherwise = do
@@ -187,7 +193,7 @@ startTahoeDaemon configdir = void $ boolTahoe configdir "start" []
withTahoeConfigDir :: TahoeHandle -> (TahoeConfigDir -> IO a) -> IO a
withTahoeConfigDir (TahoeHandle configdir v) a = go =<< atomically needsstart
where
- go True = do
+ go True = do
startTahoeDaemon configdir
a configdir
go False = a configdir
@@ -216,7 +222,7 @@ readTahoe hdl command params = withTahoeConfigDir hdl $ \configdir ->
tahoeParams :: TahoeConfigDir -> String -> [CommandParam] -> [CommandParam]
tahoeParams configdir command params =
- Param command : Param "-d" : File configdir : params
+ Param "-d" : File configdir : Param command : params
storeCapability :: UUID -> Key -> Capability -> Annex ()
storeCapability u k cap = setRemoteState u k cap
diff --git a/Remote/Web.hs b/Remote/Web.hs
index ddd1fc1cc..a4a484ca3 100644
--- a/Remote/Web.hs
+++ b/Remote/Web.hs
@@ -1,6 +1,6 @@
-{- Web remotes.
+{- Web remote.
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -16,6 +16,7 @@ import qualified Git.Construct
import Annex.Content
import Config.Cost
import Logs.Web
+import Annex.UUID
import Types.Key
import Utility.Metered
import qualified Annex.Url as Url
@@ -37,35 +38,39 @@ remote = RemoteType {
-- a new release to the survivors by carrier pigeon.)
list :: Annex [Git.Repo]
list = do
- r <- liftIO $ Git.Construct.remoteNamed "web" Git.Construct.fromUnknown
+ r <- liftIO $ Git.Construct.remoteNamed "web" (pure Git.Construct.fromUnknown)
return [r]
gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
gen r _ c gc =
- return $ Just Remote {
- uuid = webUUID,
- cost = expensiveRemoteCost,
- name = Git.repoDescribe r,
- storeKey = uploadKey,
- retrieveKeyFile = downloadKey,
- retrieveKeyFileCheap = downloadKeyCheap,
- removeKey = dropKey,
- hasKey = checkKey,
- hasKeyCheap = False,
- whereisKey = Just getUrls,
- remoteFsck = Nothing,
- repairRepo = Nothing,
- config = c,
- gitconfig = gc,
- localpath = Nothing,
- repo = r,
- readonly = True,
- availability = GloballyAvailable,
- remotetype = remote
- }
+ return $ Just Remote
+ { uuid = webUUID
+ , cost = expensiveRemoteCost
+ , name = Git.repoDescribe r
+ , storeKey = uploadKey
+ , retrieveKeyFile = downloadKey
+ , retrieveKeyFileCheap = downloadKeyCheap
+ , removeKey = dropKey
+ , checkPresent = checkKey
+ , checkPresentCheap = False
+ , whereisKey = Just getWebUrls
+ , remoteFsck = Nothing
+ , repairRepo = Nothing
+ , config = c
+ , gitconfig = gc
+ , localpath = Nothing
+ , repo = r
+ , readonly = True
+ , availability = GloballyAvailable
+ , remotetype = remote
+ , mkUnavailable = return Nothing
+ , getInfo = return []
+ , claimUrl = Nothing -- implicitly claims all urls
+ , checkUrl = Nothing
+ }
downloadKey :: Key -> AssociatedFile -> FilePath -> MeterUpdate -> Annex Bool
-downloadKey key _file dest _p = get =<< getUrls key
+downloadKey key _file dest _p = get =<< getWebUrls key
where
get [] = do
warning "no known url"
@@ -83,7 +88,7 @@ downloadKey key _file dest _p = get =<< getUrls key
warning "quvi support needed for this url"
return False
#endif
- DefaultDownloader -> downloadUrl [u'] dest
+ _ -> downloadUrl [u'] dest
downloadKeyCheap :: Key -> FilePath -> Annex Bool
downloadKeyCheap _ _ = return False
@@ -95,15 +100,15 @@ uploadKey _ _ _ = do
dropKey :: Key -> Annex Bool
dropKey k = do
- mapM_ (setUrlMissing k) =<< getUrls k
+ mapM_ (setUrlMissing webUUID k) =<< getWebUrls k
return True
-checkKey :: Key -> Annex (Either String Bool)
+checkKey :: Key -> Annex Bool
checkKey key = do
- us <- getUrls key
+ us <- getWebUrls key
if null us
- then return $ Right False
- else return =<< checkKey' key us
+ then return False
+ else either error return =<< checkKey' key us
checkKey' :: Key -> [URLString] -> Annex (Either String Bool)
checkKey' key us = firsthit us (Right False) $ \u -> do
let (u', downloader) = getDownloader u
@@ -115,13 +120,19 @@ checkKey' key us = firsthit us (Right False) $ \u -> do
#else
return $ Left "quvi support needed for this url"
#endif
- DefaultDownloader -> do
+ _ -> do
Url.withUrlOptions $ catchMsgIO .
Url.checkBoth u' (keySize key)
where
- firsthit [] miss _ = return miss
+ firsthit [] miss _ = return miss
firsthit (u:rest) _ a = do
r <- a u
case r of
Right _ -> return r
Left _ -> firsthit rest r a
+
+getWebUrls :: Key -> Annex [URLString]
+getWebUrls key = filter supported <$> getUrls key
+ where
+ supported u = snd (getDownloader u)
+ `elem` [WebDownloader, QuviDownloader]
diff --git a/Remote/WebDAV.hs b/Remote/WebDAV.hs
index 91b83053c..aaebecf41 100644
--- a/Remote/WebDAV.hs
+++ b/Remote/WebDAV.hs
@@ -1,29 +1,23 @@
{- WebDAV remotes.
-
- - Copyright 2012-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
-{-# LANGUAGE ScopedTypeVariables, CPP #-}
+{-# LANGUAGE ScopedTypeVariables #-}
module Remote.WebDAV (remote, davCreds, configUrl) where
import Network.Protocol.HTTP.DAV
import qualified Data.Map as M
+import qualified Data.ByteString.Lazy as L
import qualified Data.ByteString.UTF8 as B8
import qualified Data.ByteString.Lazy.UTF8 as L8
-import qualified Data.ByteString.Lazy as L
-import qualified Control.Exception as E
-import qualified Control.Exception.Lifted as EL
-#if MIN_VERSION_DAV(0,6,0)
import Network.HTTP.Client (HttpException(..))
-#else
-import Network.HTTP.Conduit (HttpException(..))
-#endif
import Network.HTTP.Types
-import System.Log.Logger (debugM)
import System.IO.Error
+import Control.Monad.Catch
import Common.Annex
import Types.Remote
@@ -31,17 +25,13 @@ import qualified Git
import Config
import Config.Cost
import Remote.Helper.Special
-import Remote.Helper.Encryptable
-import Remote.Helper.Chunked
-import Crypto
+import Remote.Helper.Http
+import qualified Remote.Helper.Chunked.Legacy as Legacy
import Creds
import Utility.Metered
-import Annex.Content
+import Utility.Url (URLString)
import Annex.UUID
-import Remote.WebDAV.DavUrl
-
-type DavUser = B8.ByteString
-type DavPass = B8.ByteString
+import Remote.WebDAV.DavLocation
remote :: RemoteType
remote = RemoteType {
@@ -54,228 +44,194 @@ remote = RemoteType {
gen :: Git.Repo -> UUID -> RemoteConfig -> RemoteGitConfig -> Annex (Maybe Remote)
gen r u c gc = new <$> remoteCost gc expensiveRemoteCost
where
- new cst = Just $ encryptableRemote c
- (storeEncrypted this)
- (retrieveEncrypted this)
+ new cst = Just $ specialRemote c
+ (prepareDAV this $ store chunkconfig)
+ (prepareDAV this $ retrieve chunkconfig)
+ (prepareDAV this $ remove)
+ (prepareDAV this $ checkKey this chunkconfig)
this
where
- this = Remote {
- uuid = u,
- cost = cst,
- name = Git.repoDescribe r,
- storeKey = store this,
- retrieveKeyFile = retrieve this,
- retrieveKeyFileCheap = retrieveCheap this,
- removeKey = remove this,
- hasKey = checkPresent this,
- hasKeyCheap = False,
- whereisKey = Nothing,
- remoteFsck = Nothing,
- repairRepo = Nothing,
- config = c,
- repo = r,
- gitconfig = gc,
- localpath = Nothing,
- readonly = False,
- availability = GloballyAvailable,
- remotetype = remote
- }
+ this = Remote
+ { uuid = u
+ , cost = cst
+ , name = Git.repoDescribe r
+ , storeKey = storeKeyDummy
+ , retrieveKeyFile = retreiveKeyFileDummy
+ , retrieveKeyFileCheap = retrieveCheap
+ , removeKey = removeKeyDummy
+ , checkPresent = checkPresentDummy
+ , checkPresentCheap = False
+ , whereisKey = Nothing
+ , remoteFsck = Nothing
+ , repairRepo = Nothing
+ , config = c
+ , repo = r
+ , gitconfig = gc
+ , localpath = Nothing
+ , readonly = False
+ , availability = GloballyAvailable
+ , remotetype = remote
+ , mkUnavailable = gen r u (M.insert "url" "http://!dne!/" c) gc
+ , getInfo = includeCredsInfo c (davCreds u) $
+ [("url", fromMaybe "unknown" (M.lookup "url" c))]
+ , claimUrl = Nothing
+ , checkUrl = Nothing
+ }
+ chunkconfig = getChunkConfig c
webdavSetup :: Maybe UUID -> Maybe CredPair -> RemoteConfig -> Annex (RemoteConfig, UUID)
webdavSetup mu mcreds c = do
u <- maybe (liftIO genUUID) return mu
- let url = fromMaybe (error "Specify url=") $
- M.lookup "url" c
- c' <- encryptionSetup c
+ url <- case M.lookup "url" c of
+ Nothing -> error "Specify url="
+ Just url -> return url
+ (c', encsetup) <- encryptionSetup c
creds <- maybe (getCreds c' u) (return . Just) mcreds
testDav url creds
gitConfigSpecialRemote u c' "webdav" "true"
- c'' <- setRemoteCredPair c' (davCreds u) creds
+ c'' <- setRemoteCredPair encsetup c' (davCreds u) creds
return (c'', u)
-store :: Remote -> Key -> AssociatedFile -> MeterUpdate -> Annex Bool
-store r k _f p = metered (Just p) k $ \meterupdate ->
- davAction r False $ \(baseurl, user, pass) ->
- sendAnnex k (void $ remove r k) $ \src ->
- liftIO $ withMeteredFile src meterupdate $
- storeHelper r k baseurl user pass
-
-storeEncrypted :: Remote -> (Cipher, Key) -> Key -> MeterUpdate -> Annex Bool
-storeEncrypted r (cipher, enck) k p = metered (Just p) k $ \meterupdate ->
- davAction r False $ \(baseurl, user, pass) ->
- sendAnnex k (void $ remove r enck) $ \src ->
- liftIO $ encrypt (getGpgEncParams r) cipher
- (streamMeteredFile src meterupdate) $
- readBytes $ storeHelper r enck baseurl user pass
-
-storeHelper :: Remote -> Key -> DavUrl -> DavUser -> DavPass -> L.ByteString -> IO Bool
-storeHelper r k baseurl user pass b = catchBoolIO $ do
- mkdirRecursiveDAV tmpurl user pass
- storeChunks k tmpurl keyurl chunksize storer recorder finalizer
- where
- tmpurl = tmpLocation baseurl k
- keyurl = davLocation baseurl k
- chunksize = chunkSize $ config r
- storer urls = storeChunked chunksize urls storehttp b
- recorder url s = storehttp url (L8.fromString s)
- finalizer srcurl desturl = do
- void $ tryNonAsync (deleteDAV desturl user pass)
- mkdirRecursiveDAV (urlParent desturl) user pass
- moveDAV srcurl desturl user pass
- storehttp url = putDAV url user pass
-
-retrieveCheap :: Remote -> Key -> FilePath -> Annex Bool
-retrieveCheap _ _ _ = return False
-
-retrieve :: Remote -> Key -> AssociatedFile -> FilePath -> MeterUpdate -> Annex Bool
-retrieve r k _f d p = metered (Just p) k $ \meterupdate ->
- davAction r False $ \(baseurl, user, pass) -> liftIO $ catchBoolIO $
- withStoredFiles r k baseurl user pass onerr $ \urls -> do
- meteredWriteFileChunks meterupdate d urls $ \url -> do
- mb <- getDAV url user pass
- case mb of
- Nothing -> throwIO "download failed"
- Just b -> return b
- return True
- where
- onerr _ = return False
-
-retrieveEncrypted :: Remote -> (Cipher, Key) -> Key -> FilePath -> MeterUpdate -> Annex Bool
-retrieveEncrypted r (cipher, enck) k d p = metered (Just p) k $ \meterupdate ->
- davAction r False $ \(baseurl, user, pass) -> liftIO $ catchBoolIO $
- withStoredFiles r enck baseurl user pass onerr $ \urls -> do
- decrypt cipher (feeder user pass urls) $
- readBytes $ meteredWriteFile meterupdate d
- return True
- where
- onerr _ = return False
-
- feeder _ _ [] _ = noop
- feeder user pass (url:urls) h = do
- mb <- getDAV url user pass
- case mb of
- Nothing -> throwIO "download failed"
- Just b -> do
- L.hPut h b
- feeder user pass urls h
-
-remove :: Remote -> Key -> Annex Bool
-remove r k = davAction r False $ \(baseurl, user, pass) -> liftIO $ do
- -- Delete the key's whole directory, including any chunked
- -- files, etc, in a single action.
- let url = davLocation baseurl k
- isJust . eitherToMaybe <$> tryNonAsync (deleteDAV url user pass)
-
-checkPresent :: Remote -> Key -> Annex (Either String Bool)
-checkPresent r k = davAction r noconn go
- where
- noconn = Left $ error $ name r ++ " not configured"
-
- go (baseurl, user, pass) = do
- showAction $ "checking " ++ name r
- liftIO $ withStoredFiles r k baseurl user pass onerr check
- where
- check [] = return $ Right True
- check (url:urls) = do
- v <- existsDAV url user pass
- if v == Right True
- then check urls
- else return v
-
- {- Failed to read the chunkcount file; see if it's missing,
- - or if there's a problem accessing it,
- - or perhaps this was an intermittent error. -}
- onerr url = do
- v <- existsDAV url user pass
- return $ if v == Right True
- then Left $ "failed to read " ++ url
- else v
-
-withStoredFiles
- :: Remote
- -> Key
- -> DavUrl
- -> DavUser
- -> DavPass
- -> (DavUrl -> IO a)
- -> ([DavUrl] -> IO a)
- -> IO a
-withStoredFiles r k baseurl user pass onerr a
- | isJust $ chunkSize $ config r = do
- let chunkcount = keyurl ++ chunkCount
- v <- getDAV chunkcount user pass
+-- Opens a http connection to the DAV server, which will be reused
+-- each time the helper is called.
+prepareDAV :: Remote -> (Maybe DavHandle -> helper) -> Preparer helper
+prepareDAV = resourcePrepare . const . withDAVHandle
+
+store :: ChunkConfig -> Maybe DavHandle -> Storer
+store _ Nothing = byteStorer $ \_k _b _p -> return False
+store (LegacyChunks chunksize) (Just dav) = fileStorer $ \k f p -> liftIO $
+ withMeteredFile f p $ storeLegacyChunked chunksize k dav
+store _ (Just dav) = httpStorer $ \k reqbody -> liftIO $ goDAV dav $ do
+ let tmp = keyTmpLocation k
+ let dest = keyLocation k
+ void $ mkColRecursive tmpDir
+ inLocation tmp $
+ putContentM' (contentType, reqbody)
+ finalizeStore (baseURL dav) tmp dest
+ return True
+
+finalizeStore :: URLString -> DavLocation -> DavLocation -> DAVT IO ()
+finalizeStore baseurl tmp dest = do
+ inLocation dest $ void $ safely $ delContentM
+ maybe noop (void . mkColRecursive) (locationParent dest)
+ moveDAV baseurl tmp dest
+
+retrieveCheap :: Key -> FilePath -> Annex Bool
+retrieveCheap _ _ = return False
+
+retrieve :: ChunkConfig -> Maybe DavHandle -> Retriever
+retrieve _ Nothing = error "unable to connect"
+retrieve (LegacyChunks _) (Just dav) = retrieveLegacyChunked dav
+retrieve _ (Just dav) = fileRetriever $ \d k p -> liftIO $
+ goDAV dav $
+ inLocation (keyLocation k) $
+ withContentM $
+ httpBodyRetriever d p
+
+remove :: Maybe DavHandle -> Remover
+remove Nothing _ = return False
+remove (Just dav) k = liftIO $ do
+ -- Delete the key's whole directory, including any
+ -- legacy chunked files, etc, in a single action.
+ let d = keyDir k
+ goDAV dav $ do
+ v <- safely $ inLocation d delContentM
case v of
- Just s -> a $ listChunks keyurl $ L8.toString s
+ Just _ -> return True
Nothing -> do
- chunks <- probeChunks keyurl $ \u -> (== Right True) <$> existsDAV u user pass
- if null chunks
- then onerr chunkcount
- else a chunks
- | otherwise = a [keyurl]
- where
- keyurl = davLocation baseurl k ++ keyFile k
-
-davAction :: Remote -> a -> ((DavUrl, DavUser, DavPass) -> Annex a) -> Annex a
-davAction r unconfigured action = do
- mcreds <- getCreds (config r) (uuid r)
- case (mcreds, configUrl r) of
- (Just (user, pass), Just url) ->
- action (url, toDavUser user, toDavPass pass)
- _ -> return unconfigured
-
-configUrl :: Remote -> Maybe DavUrl
+ v' <- existsDAV d
+ case v' of
+ Right False -> return True
+ _ -> return False
+
+checkKey :: Remote -> ChunkConfig -> Maybe DavHandle -> CheckPresent
+checkKey r _ Nothing _ = error $ name r ++ " not configured"
+checkKey r chunkconfig (Just dav) k = do
+ showAction $ "checking " ++ name r
+ case chunkconfig of
+ LegacyChunks _ -> checkKeyLegacyChunked dav k
+ _ -> do
+ v <- liftIO $ goDAV dav $
+ existsDAV (keyLocation k)
+ either error return v
+
+configUrl :: Remote -> Maybe URLString
configUrl r = fixup <$> M.lookup "url" (config r)
where
-- box.com DAV url changed
fixup = replace "https://www.box.com/dav/" "https://dav.box.com/dav/"
+type DavUser = B8.ByteString
+type DavPass = B8.ByteString
+
+baseURL :: DavHandle -> URLString
+baseURL (DavHandle _ _ _ u) = u
+
+
toDavUser :: String -> DavUser
toDavUser = B8.fromString
toDavPass :: String -> DavPass
toDavPass = B8.fromString
-{- Creates a directory in WebDAV, if not already present; also creating
- - any missing parent directories. -}
-mkdirRecursiveDAV :: DavUrl -> DavUser -> DavPass -> IO ()
-mkdirRecursiveDAV url user pass = go url
- where
- make u = mkdirDAV u user pass
-
- go u = do
- r <- E.try (make u) :: IO (Either E.SomeException Bool)
- case r of
- {- Parent directory is missing. Recurse to create
- - it, and try once more to create the directory. -}
- Right False -> do
- go (urlParent u)
- void $ make u
- {- Directory created successfully -}
- Right True -> return ()
- {- Directory already exists, or some other error
- - occurred. In the latter case, whatever wanted
- - to use this directory will fail. -}
- Left _ -> return ()
-
{- Test if a WebDAV store is usable, by writing to a test file, and then
- - deleting the file. Exits with an IO error if not. -}
-testDav :: String -> Maybe CredPair -> Annex ()
-testDav baseurl (Just (u, p)) = do
+ - deleting the file.
+ -
+ - Also ensures that the path of the url exists, trying to create it if not.
+ -
+ - Throws an error if store is not usable.
+ -}
+testDav :: URLString -> Maybe CredPair -> Annex ()
+testDav url (Just (u, p)) = do
showSideAction "testing WebDAV server"
- test "make directory" $ mkdirRecursiveDAV baseurl user pass
- test "write file" $ putDAV testurl user pass L.empty
- test "delete file" $ deleteDAV testurl user pass
+ test $ liftIO $ evalDAVT url $ do
+ prepDAV user pass
+ makeParentDirs
+ void $ mkColRecursive tmpDir
+ inLocation (tmpLocation "git-annex-test") $ do
+ putContentM (Nothing, L.empty)
+ delContentM
where
- test desc a = liftIO $
- either (\e -> throwIO $ "WebDAV failed to " ++ desc ++ ": " ++ show e)
+ test a = liftIO $
+ either (\e -> throwIO $ "WebDAV test failed: " ++ show e)
(const noop)
=<< tryNonAsync a
user = toDavUser u
pass = toDavPass p
- testurl = davUrl baseurl "git-annex-test"
testDav _ Nothing = error "Need to configure webdav username and password."
+{- Tries to make all the parent directories in the WebDAV urls's path,
+ - right down to the root.
+ -
+ - Ignores any failures, which can occur for reasons including the WebDAV
+ - server only serving up WebDAV in a subdirectory. -}
+makeParentDirs :: DAVT IO ()
+makeParentDirs = go
+ where
+ go = do
+ l <- getDAVLocation
+ case locationParent l of
+ Nothing -> noop
+ Just p -> void $ safely $ inDAVLocation (const p) go
+ void $ safely mkCol
+
+{- Checks if the directory exists. If not, tries to create its
+ - parent directories, all the way down to the root, and finally creates
+ - it. -}
+mkColRecursive :: DavLocation -> DAVT IO Bool
+mkColRecursive d = go =<< existsDAV d
+ where
+ go (Right True) = return True
+ go _ = ifM (inLocation d mkCol)
+ ( return True
+ , do
+ case locationParent d of
+ Nothing -> makeParentDirs
+ Just parent -> void (mkColRecursive parent)
+ inLocation d mkCol
+ )
+
getCreds :: RemoteConfig -> UUID -> Annex (Maybe CredPair)
getCreds c u = getRemoteCredPairFor "webdav" c (davCreds u)
@@ -293,107 +249,142 @@ contentType = Just $ B8.fromString "application/octet-stream"
throwIO :: String -> IO a
throwIO msg = ioError $ mkIOError userErrorType msg Nothing Nothing
-debugDAV :: DavUrl -> String -> IO ()
-debugDAV msg url = debugM "DAV" $ msg ++ " " ++ url
-
-{---------------------------------------------------------------------
- - Low-level DAV operations, using the new DAV monad when available.
- ---------------------------------------------------------------------}
-
-putDAV :: DavUrl -> DavUser -> DavPass -> L.ByteString -> IO ()
-putDAV url user pass b = do
- debugDAV "PUT" url
-#if MIN_VERSION_DAV(0,6,0)
- goDAV url user pass $ putContentM (contentType, b)
-#else
- putContent url user pass (contentType, b)
-#endif
-
-getDAV :: DavUrl -> DavUser -> DavPass -> IO (Maybe L.ByteString)
-getDAV url user pass = do
- debugDAV "GET" url
- eitherToMaybe <$> tryNonAsync go
+moveDAV :: URLString -> DavLocation -> DavLocation -> DAVT IO ()
+moveDAV baseurl src dest = inLocation src $ moveContentM newurl
where
-#if MIN_VERSION_DAV(0,6,0)
- go = goDAV url user pass $ snd <$> getContentM
-#else
- go = snd . snd <$> getPropsAndContent url user pass
-#endif
-
-deleteDAV :: DavUrl -> DavUser -> DavPass -> IO ()
-deleteDAV url user pass = do
- debugDAV "DELETE" url
-#if MIN_VERSION_DAV(0,6,0)
- goDAV url user pass delContentM
-#else
- deleteContent url user pass
-#endif
-
-moveDAV :: DavUrl -> DavUrl -> DavUser -> DavPass -> IO ()
-moveDAV url newurl user pass = do
- debugDAV ("MOVE to " ++ newurl ++ " from ") url
-#if MIN_VERSION_DAV(0,6,0)
- goDAV url user pass $ moveContentM newurl'
-#else
- moveContent url newurl' user pass
-#endif
- where
- newurl' = B8.fromString newurl
-
-mkdirDAV :: DavUrl -> DavUser -> DavPass -> IO Bool
-mkdirDAV url user pass = do
- debugDAV "MKDIR" url
-#if MIN_VERSION_DAV(0,6,0)
- goDAV url user pass mkCol
-#else
- makeCollection url user pass
-#endif
-
-existsDAV :: DavUrl -> DavUser -> DavPass -> IO (Either String Bool)
-existsDAV url user pass = do
- debugDAV "EXISTS" url
- either (Left . show) id <$> tryNonAsync check
+ newurl = B8.fromString (locationUrl baseurl dest)
+
+existsDAV :: DavLocation -> DAVT IO (Either String Bool)
+existsDAV l = inLocation l check `catchNonAsync` (\e -> return (Left $ show e))
where
- ispresent = return . Right
-#if MIN_VERSION_DAV(0,6,0)
- check = goDAV url user pass $ do
+ check = do
setDepth Nothing
- EL.catchJust
- (matchStatusCodeException notFound404)
+ catchJust
+ (matchStatusCodeException (== notFound404))
(getPropsM >> ispresent True)
(const $ ispresent False)
-#else
- check = E.catchJust
- (matchStatusCodeException notFound404)
-#if ! MIN_VERSION_DAV(0,4,0)
- (getProps url user pass >> ispresent True)
-#else
- (getProps url user pass Nothing >> ispresent True)
-#endif
- (const $ ispresent False)
-#endif
-
-matchStatusCodeException :: Status -> HttpException -> Maybe ()
-#if MIN_VERSION_DAV(0,6,0)
-matchStatusCodeException want (StatusCodeException s _ _)
-#else
-matchStatusCodeException want (StatusCodeException s _)
-#endif
- | s == want = Just ()
+ ispresent = return . Right
+
+matchStatusCodeException :: (Status -> Bool) -> HttpException -> Maybe HttpException
+matchStatusCodeException want e@(StatusCodeException s _ _)
+ | want s = Just e
| otherwise = Nothing
matchStatusCodeException _ _ = Nothing
-#if MIN_VERSION_DAV(0,6,0)
-goDAV :: DavUrl -> DavUser -> DavPass -> DAVT IO a -> IO a
-goDAV url user pass a = choke $ evalDAVT url $ do
+-- Ignores any exceptions when performing a DAV action.
+safely :: DAVT IO a -> DAVT IO (Maybe a)
+safely = eitherToMaybe <$$> tryNonAsync
+
+choke :: IO (Either String a) -> IO a
+choke f = do
+ x <- f
+ case x of
+ Left e -> error e
+ Right r -> return r
+
+data DavHandle = DavHandle DAVContext DavUser DavPass URLString
+
+withDAVHandle :: Remote -> (Maybe DavHandle -> Annex a) -> Annex a
+withDAVHandle r a = do
+ mcreds <- getCreds (config r) (uuid r)
+ case (mcreds, configUrl r) of
+ (Just (user, pass), Just baseurl) ->
+ withDAVContext baseurl $ \ctx ->
+ a (Just (DavHandle ctx (toDavUser user) (toDavPass pass) baseurl))
+ _ -> a Nothing
+
+goDAV :: DavHandle -> DAVT IO a -> IO a
+goDAV (DavHandle ctx user pass _) a = choke $ run $ prettifyExceptions $ do
+ prepDAV user pass
+ a
+ where
+ run = fst <$$> runDAVContext ctx
+
+{- Catch StatusCodeException and trim it to only the statusMessage part,
+ - eliminating a lot of noise, which can include the whole request that
+ - failed. The rethrown exception is no longer a StatusCodeException. -}
+prettifyExceptions :: DAVT IO a -> DAVT IO a
+prettifyExceptions a = catchJust (matchStatusCodeException (const True)) a go
+ where
+ go (StatusCodeException status _ _) = error $ unwords
+ [ "DAV failure:"
+ , show (statusCode status)
+ , show (statusMessage status)
+ ]
+ go e = throwM e
+
+prepDAV :: DavUser -> DavPass -> DAVT IO ()
+prepDAV user pass = do
setResponseTimeout Nothing -- disable default (5 second!) timeout
setCreds user pass
- a
+
+--
+-- Legacy chunking code, to be removed eventually.
+--
+
+storeLegacyChunked :: ChunkSize -> Key -> DavHandle -> L.ByteString -> IO Bool
+storeLegacyChunked chunksize k dav b =
+ Legacy.storeChunks k tmp dest storer recorder finalizer
+ where
+ storehttp l b' = void $ goDAV dav $ do
+ maybe noop (void . mkColRecursive) (locationParent l)
+ inLocation l $ putContentM (contentType, b')
+ storer locs = Legacy.storeChunked chunksize locs storehttp b
+ recorder l s = storehttp l (L8.fromString s)
+ finalizer tmp' dest' = goDAV dav $
+ finalizeStore (baseURL dav) tmp' (fromJust $ locationParent dest')
+
+ tmp = keyTmpLocation k
+ dest = keyLocation k
+
+retrieveLegacyChunked :: DavHandle -> Retriever
+retrieveLegacyChunked dav = fileRetriever $ \d k p -> liftIO $
+ withStoredFilesLegacyChunked k dav onerr $ \locs ->
+ Legacy.meteredWriteFileChunks p d locs $ \l ->
+ goDAV dav $
+ inLocation l $
+ snd <$> getContentM
+ where
+ onerr = error "download failed"
+
+checkKeyLegacyChunked :: DavHandle -> CheckPresent
+checkKeyLegacyChunked dav k = liftIO $
+ either error id <$> withStoredFilesLegacyChunked k dav onerr check
+ where
+ check [] = return $ Right True
+ check (l:ls) = do
+ v <- goDAV dav $ existsDAV l
+ if v == Right True
+ then check ls
+ else return v
+
+ {- Failed to read the chunkcount file; see if it's missing,
+ - or if there's a problem accessing it,
+ - or perhaps this was an intermittent error. -}
+ onerr f = do
+ v <- goDAV dav $ existsDAV f
+ return $ if v == Right True
+ then Left $ "failed to read " ++ f
+ else v
+
+withStoredFilesLegacyChunked
+ :: Key
+ -> DavHandle
+ -> (DavLocation -> IO a)
+ -> ([DavLocation] -> IO a)
+ -> IO a
+withStoredFilesLegacyChunked k dav onerr a = do
+ let chunkcount = keyloc ++ Legacy.chunkCount
+ v <- goDAV dav $ safely $
+ inLocation chunkcount $
+ snd <$> getContentM
+ case v of
+ Just s -> a $ Legacy.listChunks keyloc $ L8.toString s
+ Nothing -> do
+ chunks <- Legacy.probeChunks keyloc $ \f ->
+ (== Right True) <$> goDAV dav (existsDAV f)
+ if null chunks
+ then onerr chunkcount
+ else a chunks
where
- choke :: IO (Either String a) -> IO a
- choke f = do
- x <- f
- case x of
- Left e -> error e
- Right r -> return r
-#endif
+ keyloc = keyLocation k
diff --git a/Remote/WebDAV/DavLocation.hs b/Remote/WebDAV/DavLocation.hs
new file mode 100644
index 000000000..157e7151a
--- /dev/null
+++ b/Remote/WebDAV/DavLocation.hs
@@ -0,0 +1,63 @@
+{- WebDAV locations.
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE FlexibleContexts #-}
+
+module Remote.WebDAV.DavLocation where
+
+import Types
+import Locations
+import Utility.Url (URLString)
+
+import System.FilePath.Posix -- for manipulating url paths
+import Network.Protocol.HTTP.DAV (inDAVLocation, DAVT)
+import Control.Monad.IO.Class (MonadIO)
+import Data.Default
+#ifdef mingw32_HOST_OS
+import Data.String.Utils
+#endif
+
+-- Relative to the top of the DAV url.
+type DavLocation = String
+
+{- Runs action in subdirectory, relative to the current location. -}
+inLocation :: (MonadIO m) => DavLocation -> DAVT m a -> DAVT m a
+inLocation d = inDAVLocation (</> d)
+
+{- The directory where files(s) for a key are stored. -}
+keyDir :: Key -> DavLocation
+keyDir k = addTrailingPathSeparator $ hashdir </> keyFile k
+ where
+#ifndef mingw32_HOST_OS
+ hashdir = hashDirLower def k
+#else
+ hashdir = replace "\\" "/" (hashDirLower def k)
+#endif
+
+keyLocation :: Key -> DavLocation
+keyLocation k = keyDir k ++ keyFile k
+
+{- Where we store temporary data for a key as it's being uploaded. -}
+keyTmpLocation :: Key -> DavLocation
+keyTmpLocation = addTrailingPathSeparator . tmpLocation . keyFile
+
+tmpLocation :: FilePath -> DavLocation
+tmpLocation f = tmpDir </> f
+
+tmpDir :: DavLocation
+tmpDir = "tmp"
+
+locationParent :: String -> Maybe String
+locationParent loc
+ | loc `elem` tops = Nothing
+ | otherwise = Just (takeDirectory loc)
+ where
+ tops = ["/", "", "."]
+
+locationUrl :: URLString -> DavLocation -> URLString
+locationUrl baseurl loc = baseurl </> loc
diff --git a/Remote/WebDAV/DavUrl.hs b/Remote/WebDAV/DavUrl.hs
deleted file mode 100644
index 4862c4f37..000000000
--- a/Remote/WebDAV/DavUrl.hs
+++ /dev/null
@@ -1,44 +0,0 @@
-{- WebDAV urls.
- -
- - Copyright 2014 Joey Hess <joey@kitenet.net>
- -
- - Licensed under the GNU GPL version 3 or higher.
- -}
-
-{-# LANGUAGE CPP #-}
-
-module Remote.WebDAV.DavUrl where
-
-import Types
-import Locations
-
-import Network.URI (normalizePathSegments)
-import System.FilePath.Posix
-#ifdef mingw32_HOST_OS
-import Data.String.Utils
-#endif
-
-type DavUrl = String
-
-{- The directory where files(s) for a key are stored. -}
-davLocation :: DavUrl -> Key -> DavUrl
-davLocation baseurl k = addTrailingPathSeparator $
- davUrl baseurl $ hashdir </> keyFile k
- where
-#ifndef mingw32_HOST_OS
- hashdir = hashDirLower k
-#else
- hashdir = replace "\\" "/" (hashDirLower k)
-#endif
-
-{- Where we store temporary data for a key as it's being uploaded. -}
-tmpLocation :: DavUrl -> Key -> DavUrl
-tmpLocation baseurl k = addTrailingPathSeparator $
- davUrl baseurl $ "tmp" </> keyFile k
-
-davUrl :: DavUrl -> FilePath -> DavUrl
-davUrl baseurl file = baseurl </> file
-
-urlParent :: DavUrl -> DavUrl
-urlParent url = dropTrailingPathSeparator $
- normalizePathSegments (dropTrailingPathSeparator url ++ "/..")
diff --git a/RemoteDaemon/Common.hs b/RemoteDaemon/Common.hs
new file mode 100644
index 000000000..50524b44c
--- /dev/null
+++ b/RemoteDaemon/Common.hs
@@ -0,0 +1,42 @@
+{- git-remote-daemon utilities
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module RemoteDaemon.Common
+ ( liftAnnex
+ , inLocalRepo
+ , checkNewShas
+ ) where
+
+import qualified Annex
+import Common.Annex
+import RemoteDaemon.Types
+import qualified Git
+import Annex.CatFile
+
+import Control.Concurrent
+
+-- Runs an Annex action. Long-running actions should be avoided,
+-- since only one liftAnnex can be running at a time, across all
+-- transports.
+liftAnnex :: TransportHandle -> Annex a -> IO a
+liftAnnex (TransportHandle _ annexstate) a = do
+ st <- takeMVar annexstate
+ (r, st') <- Annex.run st a
+ putMVar annexstate st'
+ return r
+
+inLocalRepo :: TransportHandle -> (Git.Repo -> IO a) -> IO a
+inLocalRepo (TransportHandle g _) a = a g
+
+-- Check if any of the shas are actally new in the local git repo,
+-- to avoid unnecessary fetching.
+checkNewShas :: TransportHandle -> [Git.Sha] -> IO Bool
+checkNewShas transporthandle = check
+ where
+ check [] = return True
+ check (r:rs) = maybe (check rs) (const $ return False)
+ =<< liftAnnex transporthandle (catObjectDetails r)
diff --git a/RemoteDaemon/Core.hs b/RemoteDaemon/Core.hs
new file mode 100644
index 000000000..405a1fd88
--- /dev/null
+++ b/RemoteDaemon/Core.hs
@@ -0,0 +1,142 @@
+{- git-remote-daemon core
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module RemoteDaemon.Core (runForeground) where
+
+import qualified Annex
+import Common
+import Types.GitConfig
+import RemoteDaemon.Common
+import RemoteDaemon.Types
+import RemoteDaemon.Transport
+import qualified Git
+import qualified Git.Types as Git
+import qualified Git.CurrentRepo
+import Utility.SimpleProtocol
+import Config
+import Annex.Ssh
+
+import Control.Concurrent
+import Control.Concurrent.Async
+import Control.Concurrent.STM
+import Network.URI
+import qualified Data.Map as M
+
+runForeground :: IO ()
+runForeground = do
+ (readh, writeh) <- ioHandles
+ ichan <- newTChanIO :: IO (TChan Consumed)
+ ochan <- newTChanIO :: IO (TChan Emitted)
+
+ let reader = forever $ do
+ l <- hGetLine readh
+ case parseMessage l of
+ Nothing -> error $ "protocol error: " ++ l
+ Just cmd -> atomically $ writeTChan ichan cmd
+ let writer = forever $ do
+ msg <- atomically $ readTChan ochan
+ hPutStrLn writeh $ unwords $ formatMessage msg
+ hFlush writeh
+ let controller = runController ichan ochan
+
+ -- If any thread fails, the rest will be killed.
+ void $ tryIO $
+ reader `concurrently` writer `concurrently` controller
+
+type RemoteMap = M.Map Git.Repo (IO (), TChan Consumed)
+
+-- Runs the transports, dispatching messages to them, and handling
+-- the main control messages.
+runController :: TChan Consumed -> TChan Emitted -> IO ()
+runController ichan ochan = do
+ h <- genTransportHandle
+ m <- genRemoteMap h ochan
+ startrunning m
+ go h False m
+ where
+ go h paused m = do
+ cmd <- atomically $ readTChan ichan
+ case cmd of
+ RELOAD -> do
+ h' <- updateTransportHandle h
+ m' <- genRemoteMap h' ochan
+ let common = M.intersection m m'
+ let new = M.difference m' m
+ let old = M.difference m m'
+ broadcast STOP old
+ unless paused $
+ startrunning new
+ go h' paused (M.union common new)
+ LOSTNET -> do
+ -- force close all cached ssh connections
+ -- (done here so that if there are multiple
+ -- ssh remotes, it's only done once)
+ liftAnnex h forceSshCleanup
+ broadcast LOSTNET m
+ go h True m
+ PAUSE -> do
+ broadcast STOP m
+ go h True m
+ RESUME -> do
+ when paused $
+ startrunning m
+ go h False m
+ STOP -> exitSuccess
+ -- All remaining messages are sent to
+ -- all Transports.
+ msg -> do
+ unless paused $ atomically $
+ forM_ chans (`writeTChan` msg)
+ go h paused m
+ where
+ chans = map snd (M.elems m)
+
+ startrunning m = forM_ (M.elems m) startrunning'
+ startrunning' (transport, c) = do
+ -- drain any old control messages from the channel
+ -- to avoid confusing the transport with them
+ atomically $ drain c
+ void $ async transport
+
+ drain c = maybe noop (const $ drain c) =<< tryReadTChan c
+
+ broadcast msg m = atomically $ forM_ (M.elems m) send
+ where
+ send (_, c) = writeTChan c msg
+
+-- Generates a map with a transport for each supported remote in the git repo,
+-- except those that have annex.sync = false
+genRemoteMap :: TransportHandle -> TChan Emitted -> IO RemoteMap
+genRemoteMap h@(TransportHandle g _) ochan =
+ M.fromList . catMaybes <$> mapM gen (Git.remotes g)
+ where
+ gen r = case Git.location r of
+ Git.Url u -> case M.lookup (uriScheme u) remoteTransports of
+ Just transport
+ | remoteAnnexSync gc -> do
+ ichan <- newTChanIO :: IO (TChan Consumed)
+ return $ Just
+ ( r
+ , (transport (RemoteRepo r gc) (RemoteURI u) h ichan ochan, ichan)
+ )
+ _ -> return Nothing
+ _ -> return Nothing
+ where
+ gc = extractRemoteGitConfig r (Git.repoDescribe r)
+
+genTransportHandle :: IO TransportHandle
+genTransportHandle = do
+ annexstate <- newMVar =<< Annex.new =<< Git.CurrentRepo.get
+ g <- Annex.repo <$> readMVar annexstate
+ return $ TransportHandle g annexstate
+
+updateTransportHandle :: TransportHandle -> IO TransportHandle
+updateTransportHandle h@(TransportHandle _g annexstate) = do
+ g' <- liftAnnex h $ do
+ reloadConfig
+ Annex.fromRepo id
+ return (TransportHandle g' annexstate)
diff --git a/RemoteDaemon/Transport.hs b/RemoteDaemon/Transport.hs
new file mode 100644
index 000000000..8297bb3b0
--- /dev/null
+++ b/RemoteDaemon/Transport.hs
@@ -0,0 +1,23 @@
+{- git-remote-daemon transports
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module RemoteDaemon.Transport where
+
+import RemoteDaemon.Types
+import qualified RemoteDaemon.Transport.Ssh
+import qualified Git.GCrypt
+
+import qualified Data.Map as M
+
+-- Corresponds to uriScheme
+type TransportScheme = String
+
+remoteTransports :: M.Map TransportScheme Transport
+remoteTransports = M.fromList
+ [ ("ssh:", RemoteDaemon.Transport.Ssh.transport)
+ , (Git.GCrypt.urlScheme, RemoteDaemon.Transport.Ssh.transport)
+ ]
diff --git a/RemoteDaemon/Transport/Ssh.hs b/RemoteDaemon/Transport/Ssh.hs
new file mode 100644
index 000000000..bdf4f54f0
--- /dev/null
+++ b/RemoteDaemon/Transport/Ssh.hs
@@ -0,0 +1,123 @@
+{- git-remote-daemon, git-annex-shell over ssh transport
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module RemoteDaemon.Transport.Ssh (transport) where
+
+import Common.Annex
+import Annex.Ssh
+import RemoteDaemon.Types
+import RemoteDaemon.Common
+import Remote.Helper.Ssh
+import qualified RemoteDaemon.Transport.Ssh.Types as SshRemote
+import Utility.SimpleProtocol
+import qualified Git
+import Git.Command
+import Utility.ThreadScheduler
+
+import Control.Concurrent.STM
+import Control.Concurrent.Async
+
+transport :: Transport
+transport rr@(RemoteRepo r gc) url h@(TransportHandle g s) ichan ochan = do
+ -- enable ssh connection caching wherever inLocalRepo is called
+ g' <- liftAnnex h $ sshOptionsTo r gc g
+ transport' rr url (TransportHandle g' s) ichan ochan
+
+transport' :: Transport
+transport' (RemoteRepo r _) url transporthandle ichan ochan = do
+
+ v <- liftAnnex transporthandle $ git_annex_shell r "notifychanges" [] []
+ case v of
+ Nothing -> noop
+ Just (cmd, params) -> robustly 1 $
+ connect cmd (toCommand params)
+ where
+ connect cmd params = do
+ (Just toh, Just fromh, Just errh, pid) <-
+ createProcess (proc cmd params)
+ { std_in = CreatePipe
+ , std_out = CreatePipe
+ , std_err = CreatePipe
+ }
+
+ -- Run all threads until one finishes and get the status
+ -- of the first to finish. Cancel the rest.
+ status <- catchDefaultIO (Right ConnectionClosed) $
+ handlestderr errh
+ `race` handlestdout fromh
+ `race` handlecontrol
+
+ send (DISCONNECTED url)
+ hClose toh
+ hClose fromh
+ void $ waitForProcess pid
+
+ return $ either (either id id) id status
+
+ send msg = atomically $ writeTChan ochan msg
+
+ fetch = do
+ send (SYNCING url)
+ ok <- inLocalRepo transporthandle $
+ runBool [Param "fetch", Param $ Git.repoDescribe r]
+ send (DONESYNCING url ok)
+
+ handlestdout fromh = do
+ l <- hGetLine fromh
+ case parseMessage l of
+ Just SshRemote.READY -> do
+ send (CONNECTED url)
+ handlestdout fromh
+ Just (SshRemote.CHANGED shas) -> do
+ whenM (checkNewShas transporthandle shas) $
+ fetch
+ handlestdout fromh
+ -- avoid reconnect on protocol error
+ Nothing -> return Stopping
+
+ handlecontrol = do
+ msg <- atomically $ readTChan ichan
+ case msg of
+ STOP -> return Stopping
+ LOSTNET -> return Stopping
+ _ -> handlecontrol
+
+ -- Old versions of git-annex-shell that do not support
+ -- the notifychanges command will exit with a not very useful
+ -- error message. Detect that error, and avoid reconnecting.
+ -- Propigate all stderr.
+ handlestderr errh = do
+ s <- hGetSomeString errh 1024
+ hPutStr stderr s
+ hFlush stderr
+ if "git-annex-shell: git-shell failed" `isInfixOf` s
+ then do
+ send $ WARNING url $ unwords
+ [ "Remote", Git.repoDescribe r
+ , "needs its git-annex upgraded"
+ , "to 5.20140405 or newer"
+ ]
+ return Stopping
+ else handlestderr errh
+
+data Status = Stopping | ConnectionClosed
+
+{- Make connection robustly, with exponentioal backoff on failure. -}
+robustly :: Int -> IO Status -> IO ()
+robustly backoff a = caught =<< catchDefaultIO ConnectionClosed a
+ where
+ caught Stopping = return ()
+ caught ConnectionClosed = do
+ threadDelaySeconds (Seconds backoff)
+ robustly increasedbackoff a
+
+ increasedbackoff
+ | b2 > maxbackoff = maxbackoff
+ | otherwise = b2
+ where
+ b2 = backoff * 2
+ maxbackoff = 3600 -- one hour
diff --git a/RemoteDaemon/Transport/Ssh/Types.hs b/RemoteDaemon/Transport/Ssh/Types.hs
new file mode 100644
index 000000000..fa6a55d3d
--- /dev/null
+++ b/RemoteDaemon/Transport/Ssh/Types.hs
@@ -0,0 +1,32 @@
+{- git-remote-daemon, git-annex-shell notifychanges protocol types
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+
+module RemoteDaemon.Transport.Ssh.Types (
+ Notification(..),
+ Proto.serialize,
+ Proto.deserialize,
+ Proto.formatMessage,
+) where
+
+import qualified Utility.SimpleProtocol as Proto
+import RemoteDaemon.Types (RefList)
+
+data Notification
+ = READY
+ | CHANGED RefList
+
+instance Proto.Sendable Notification where
+ formatMessage READY = ["READY"]
+ formatMessage (CHANGED shas) = ["CHANGED", Proto.serialize shas]
+
+instance Proto.Receivable Notification where
+ parseCommand "READY" = Proto.parse0 READY
+ parseCommand "CHANGED" = Proto.parse1 CHANGED
+ parseCommand _ = Proto.parseFail
diff --git a/RemoteDaemon/Types.hs b/RemoteDaemon/Types.hs
new file mode 100644
index 000000000..5fd074a1e
--- /dev/null
+++ b/RemoteDaemon/Types.hs
@@ -0,0 +1,117 @@
+{- git-remote-daemon data types.
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+
+module RemoteDaemon.Types where
+
+import Common
+import qualified Annex
+import qualified Git.Types as Git
+import qualified Utility.SimpleProtocol as Proto
+import Types.GitConfig
+
+import Network.URI
+import Control.Concurrent
+import Control.Concurrent.STM
+
+-- The URI of a remote is used to uniquely identify it (names change..)
+newtype RemoteURI = RemoteURI URI
+ deriving (Show)
+
+-- A Transport for a particular git remote consumes some messages
+-- from a Chan, and emits others to another Chan.
+type Transport = RemoteRepo -> RemoteURI -> TransportHandle -> TChan Consumed -> TChan Emitted -> IO ()
+
+data RemoteRepo = RemoteRepo Git.Repo RemoteGitConfig
+type LocalRepo = Git.Repo
+
+-- All Transports share a single AnnexState MVar
+--
+-- Different TransportHandles may have different versions of the LocalRepo.
+-- (For example, the ssh transport modifies it to enable ssh connection
+-- caching.)
+data TransportHandle = TransportHandle LocalRepo (MVar Annex.AnnexState)
+
+-- Messages that the daemon emits.
+data Emitted
+ = CONNECTED RemoteURI
+ | DISCONNECTED RemoteURI
+ | SYNCING RemoteURI
+ | DONESYNCING RemoteURI Bool
+ | WARNING RemoteURI String
+ deriving (Show)
+
+-- Messages that the deamon consumes.
+data Consumed
+ = PAUSE
+ | LOSTNET
+ | RESUME
+ | CHANGED RefList
+ | RELOAD
+ | STOP
+ deriving (Show)
+
+type RefList = [Git.Ref]
+
+instance Proto.Sendable Emitted where
+ formatMessage (CONNECTED remote) =
+ ["CONNECTED", Proto.serialize remote]
+ formatMessage (DISCONNECTED remote) =
+ ["DISCONNECTED", Proto.serialize remote]
+ formatMessage (SYNCING remote) =
+ ["SYNCING", Proto.serialize remote]
+ formatMessage (DONESYNCING remote status) =
+ ["DONESYNCING", Proto.serialize remote, Proto.serialize status]
+ formatMessage (WARNING remote message) =
+ ["WARNING", Proto.serialize remote, Proto.serialize message]
+
+instance Proto.Sendable Consumed where
+ formatMessage PAUSE = ["PAUSE"]
+ formatMessage LOSTNET = ["LOSTNET"]
+ formatMessage RESUME = ["RESUME"]
+ formatMessage (CHANGED refs) =["CHANGED", Proto.serialize refs]
+ formatMessage RELOAD = ["RELOAD"]
+ formatMessage STOP = ["STOP"]
+
+instance Proto.Receivable Emitted where
+ parseCommand "CONNECTED" = Proto.parse1 CONNECTED
+ parseCommand "DISCONNECTED" = Proto.parse1 DISCONNECTED
+ parseCommand "SYNCING" = Proto.parse1 SYNCING
+ parseCommand "DONESYNCING" = Proto.parse2 DONESYNCING
+ parseCommand "WARNING" = Proto.parse2 WARNING
+ parseCommand _ = Proto.parseFail
+
+instance Proto.Receivable Consumed where
+ parseCommand "PAUSE" = Proto.parse0 PAUSE
+ parseCommand "LOSTNET" = Proto.parse0 LOSTNET
+ parseCommand "RESUME" = Proto.parse0 RESUME
+ parseCommand "CHANGED" = Proto.parse1 CHANGED
+ parseCommand "RELOAD" = Proto.parse0 RELOAD
+ parseCommand "STOP" = Proto.parse0 STOP
+ parseCommand _ = Proto.parseFail
+
+instance Proto.Serializable RemoteURI where
+ serialize (RemoteURI u) = show u
+ deserialize = RemoteURI <$$> parseURI
+
+instance Proto.Serializable [Char] where
+ serialize = id
+ deserialize = Just
+
+instance Proto.Serializable RefList where
+ serialize = unwords . map Git.fromRef
+ deserialize = Just . map Git.Ref . words
+
+instance Proto.Serializable Bool where
+ serialize False = "0"
+ serialize True = "1"
+
+ deserialize "0" = Just False
+ deserialize "1" = Just True
+ deserialize _ = Nothing
diff --git a/Test.hs b/Test.hs
index 8fbaf1d94..290ff0b69 100644
--- a/Test.hs
+++ b/Test.hs
@@ -1,6 +1,6 @@
{- git-annex test suite
-
- - Copyright 2010-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -17,14 +17,8 @@ import Test.Tasty.Ingredients.Rerun
import Data.Monoid
import Options.Applicative hiding (command)
-#if MIN_VERSION_optparse_applicative(0,8,0)
-import qualified Options.Applicative.Types as Opt
-#endif
-import Control.Exception.Extensible
import qualified Data.Map as M
-import System.IO.HVFS (SystemFS(..))
import qualified Text.JSON
-import System.Path
import Common
@@ -44,7 +38,6 @@ import qualified Types.KeySource
import qualified Types.Backend
import qualified Types.TrustLevel
import qualified Types
-import qualified Logs
import qualified Logs.MapLog
import qualified Logs.Trust
import qualified Logs.Remote
@@ -78,17 +71,18 @@ import qualified Utility.Hash
import qualified Utility.Scheduled
import qualified Utility.HumanTime
import qualified Utility.ThreadScheduler
-#ifndef mingw32_HOST_OS
+import qualified Command.Uninit
import qualified CmdLine.GitAnnex as GitAnnex
+#ifndef mingw32_HOST_OS
import qualified Remote.Helper.Encryptable
import qualified Types.Crypto
import qualified Utility.Gpg
#endif
-
-type TestEnv = M.Map String String
+import qualified Messages
main :: [String] -> IO ()
main ps = do
+ Messages.enableDebugOutput
let tests = testGroup "Tests"
-- Test both direct and indirect mode.
-- Windows is only going to use direct mode,
@@ -117,16 +111,15 @@ main ps = do
exitFailure
)
where
- progdesc = "git-annex test"
parseOpts pprefs pinfo args =
-#if MIN_VERSION_optparse_applicative(0,8,0)
- pure $ case execParserPure pprefs pinfo args of
- Opt.Success v -> v
- Opt.Failure f -> error $ fst $ Opt.execFailure f progdesc
- Opt.CompletionInvoked _ -> error "completion not supported"
+#if MIN_VERSION_optparse_applicative(0,10,0)
+ case execParserPure pprefs pinfo args of
+ (Options.Applicative.Failure failure) -> do
+ let (msg, _exit) = renderFailure failure "git-annex test"
+ error msg
+ v -> handleParseResult v
#else
- either (error <=< flip errMessage progdesc) return $
- execParserPure pprefs pinfo args
+ handleParseResult $ execParserPure pprefs pinfo args
#endif
ingredients :: [Ingredient]
@@ -144,10 +137,9 @@ properties = localOption (QuickCheckTests 1000) $ testGroup "QuickCheck"
, testProperty "prop_idempotent_key_decode" Types.Key.prop_idempotent_key_decode
, testProperty "prop_idempotent_shellEscape" Utility.SafeCommand.prop_idempotent_shellEscape
, testProperty "prop_idempotent_shellEscape_multiword" Utility.SafeCommand.prop_idempotent_shellEscape_multiword
- , testProperty "prop_logs_sane" Logs.prop_logs_sane
, testProperty "prop_idempotent_configEscape" Logs.Remote.prop_idempotent_configEscape
, testProperty "prop_parse_show_Config" Logs.Remote.prop_parse_show_Config
- , testProperty "prop_parentDir_basics" Utility.Path.prop_parentDir_basics
+ , testProperty "prop_upFrom_basics" Utility.Path.prop_upFrom_basics
, testProperty "prop_relPathDirToFile_basics" Utility.Path.prop_relPathDirToFile_basics
, testProperty "prop_relPathDirToFile_regressionTest" Utility.Path.prop_relPathDirToFile_regressionTest
, testProperty "prop_cost_sane" Config.Cost.prop_cost_sane
@@ -164,6 +156,7 @@ properties = localOption (QuickCheckTests 1000) $ testGroup "QuickCheck"
, testProperty "prop_parse_show_TrustLog" Logs.Trust.prop_parse_show_TrustLog
, testProperty "prop_hashes_stable" Utility.Hash.prop_hashes_stable
, testProperty "prop_schedule_roundtrips" Utility.Scheduled.prop_schedule_roundtrips
+ , testProperty "prop_past_sane" Utility.Scheduled.prop_past_sane
, testProperty "prop_duration_roundtrips" Utility.HumanTime.prop_duration_roundtrips
, testProperty "prop_metadata_sane" Types.MetaData.prop_metadata_sane
, testProperty "prop_metadata_serialize" Types.MetaData.prop_metadata_serialize
@@ -174,86 +167,86 @@ properties = localOption (QuickCheckTests 1000) $ testGroup "QuickCheck"
{- These tests set up the test environment, but also test some basic parts
- of git-annex. They are always run before the unitTests. -}
-initTests :: TestEnv -> TestTree
-initTests env = testGroup "Init Tests"
- [ check "init" test_init
- , check "add" test_add
+initTests :: TestTree
+initTests = testGroup "Init Tests"
+ [ testCase "init" test_init
+ , testCase "add" test_add
]
- where
- check desc t = testCase desc (t env)
-
-unitTests :: String -> IO TestEnv -> TestTree
-unitTests note getenv = testGroup ("Unit Tests " ++ note)
- [ check "add sha1dup" test_add_sha1dup
- , check "add extras" test_add_extras
- , check "reinject" test_reinject
- , check "unannex (no copy)" test_unannex_nocopy
- , check "unannex (with copy)" test_unannex_withcopy
- , check "drop (no remote)" test_drop_noremote
- , check "drop (with remote)" test_drop_withremote
- , check "drop (untrusted remote)" test_drop_untrustedremote
- , check "get" test_get
- , check "move" test_move
- , check "copy" test_copy
- , check "lock" test_lock
- , check "edit (no pre-commit)" test_edit
- , check "edit (pre-commit)" test_edit_precommit
- , check "fix" test_fix
- , check "trust" test_trust
- , check "fsck (basics)" test_fsck_basic
- , check "fsck (bare)" test_fsck_bare
- , check "fsck (local untrusted)" test_fsck_localuntrusted
- , check "fsck (remote untrusted)" test_fsck_remoteuntrusted
- , check "migrate" test_migrate
- , check "migrate (via gitattributes)" test_migrate_via_gitattributes
- , check" unused" test_unused
- , check "describe" test_describe
- , check "find" test_find
- , check "merge" test_merge
- , check "info" test_info
- , check "version" test_version
- , check "sync" test_sync
- , check "union merge regression" test_union_merge_regression
- , check "conflict resolution" test_conflict_resolution
- , check "conflict resolution movein regression" test_conflict_resolution_movein_regression
- , check "conflict resolution (mixed directory and file)" test_mixed_conflict_resolution
- , check "conflict resolution symlinks" test_conflict_resolution_symlinks
- , check "conflict resolution (uncommitted local file)" test_uncommitted_conflict_resolution
- , check "conflict resolution (removed file)" test_remove_conflict_resolution
- , check "conflict resolution (nonannexed)" test_nonannexed_conflict_resolution
- , check "map" test_map
- , check "uninit" test_uninit
- , check "uninit (in git-annex branch)" test_uninit_inbranch
- , check "upgrade" test_upgrade
- , check "whereis" test_whereis
- , check "hook remote" test_hook_remote
- , check "directory remote" test_directory_remote
- , check "rsync remote" test_rsync_remote
- , check "bup remote" test_bup_remote
- , check "crypto" test_crypto
- , check "preferred content" test_preferred_content
- , check "add subdirs" test_add_subdirs
+
+unitTests :: String -> TestTree
+unitTests note = testGroup ("Unit Tests " ++ note)
+ [ testCase "add sha1dup" test_add_sha1dup
+ , testCase "add extras" test_add_extras
+ , testCase "reinject" test_reinject
+ , testCase "unannex (no copy)" test_unannex_nocopy
+ , testCase "unannex (with copy)" test_unannex_withcopy
+ , testCase "drop (no remote)" test_drop_noremote
+ , testCase "drop (with remote)" test_drop_withremote
+ , testCase "drop (untrusted remote)" test_drop_untrustedremote
+ , testCase "get" test_get
+ , testCase "move" test_move
+ , testCase "copy" test_copy
+ , testCase "lock" test_lock
+ , testCase "edit (no pre-commit)" test_edit
+ , testCase "edit (pre-commit)" test_edit_precommit
+ , testCase "partial commit" test_partial_commit
+ , testCase "fix" test_fix
+ , testCase "direct" test_direct
+ , testCase "trust" test_trust
+ , testCase "fsck (basics)" test_fsck_basic
+ , testCase "fsck (bare)" test_fsck_bare
+ , testCase "fsck (local untrusted)" test_fsck_localuntrusted
+ , testCase "fsck (remote untrusted)" test_fsck_remoteuntrusted
+ , testCase "migrate" test_migrate
+ , testCase "migrate (via gitattributes)" test_migrate_via_gitattributes
+ , testCase "unused" test_unused
+ , testCase "describe" test_describe
+ , testCase "find" test_find
+ , testCase "merge" test_merge
+ , testCase "info" test_info
+ , testCase "version" test_version
+ , testCase "sync" test_sync
+ , testCase "union merge regression" test_union_merge_regression
+ , testCase "conflict resolution" test_conflict_resolution
+ , testCase "conflict resolution movein regression" test_conflict_resolution_movein_regression
+ , testCase "conflict resolution (mixed directory and file)" test_mixed_conflict_resolution
+ , testCase "conflict resolution symlink bit" test_conflict_resolution_symlink_bit
+ , testCase "conflict resolution (uncommitted local file)" test_uncommitted_conflict_resolution
+ , testCase "conflict resolution (removed file)" test_remove_conflict_resolution
+ , testCase "conflict resolution (nonannexed file)" test_nonannexed_file_conflict_resolution
+ , testCase "conflict resolution (nonannexed symlink)" test_nonannexed_symlink_conflict_resolution
+ , testCase "map" test_map
+ , testCase "uninit" test_uninit
+ , testCase "uninit (in git-annex branch)" test_uninit_inbranch
+ , testCase "upgrade" test_upgrade
+ , testCase "whereis" test_whereis
+ , testCase "hook remote" test_hook_remote
+ , testCase "directory remote" test_directory_remote
+ , testCase "rsync remote" test_rsync_remote
+ , testCase "bup remote" test_bup_remote
+ , testCase "crypto" test_crypto
+ , testCase "preferred content" test_preferred_content
+ , testCase "add subdirs" test_add_subdirs
+ , testCase "addurl" test_addurl
]
- where
- check desc t = testCase desc (getenv >>= t)
-- this test case create the main repo
-test_init :: TestEnv -> Assertion
-test_init env = innewrepo env $ do
- git_annex env "init" [reponame] @? "init failed"
- handleforcedirect env
+test_init :: Assertion
+test_init = innewrepo $ do
+ git_annex "init" [reponame] @? "init failed"
+ handleforcedirect
where
reponame = "test repo"
-- this test case runs in the main repo, to set up a basic
-- annexed file that later tests will use
-test_add :: TestEnv -> Assertion
-test_add env = inmainrepo env $ do
+test_add :: Assertion
+test_add = inmainrepo $ do
writeFile annexedfile $ content annexedfile
- git_annex env "add" [annexedfile] @? "add failed"
+ git_annex "add" [annexedfile] @? "add failed"
annexed_present annexedfile
writeFile sha1annexedfile $ content sha1annexedfile
- git_annex env "add" [sha1annexedfile, "--backend=SHA1"] @? "add with SHA1 failed"
+ git_annex "add" [sha1annexedfile, "--backend=SHA1"] @? "add with SHA1 failed"
annexed_present sha1annexedfile
checkbackend sha1annexedfile backendSHA1
ifM (annexeval Config.isDirect)
@@ -261,263 +254,280 @@ test_add env = inmainrepo env $ do
writeFile ingitfile $ content ingitfile
not <$> boolSystem "git" [Param "add", File ingitfile] @? "git add failed to fail in direct mode"
nukeFile ingitfile
- git_annex env "sync" [] @? "sync failed"
+ git_annex "sync" [] @? "sync failed"
, do
writeFile ingitfile $ content ingitfile
boolSystem "git" [Param "add", File ingitfile] @? "git add failed"
boolSystem "git" [Params "commit -q -m commit"] @? "git commit failed"
- git_annex env "add" [ingitfile] @? "add ingitfile should be no-op"
+ git_annex "add" [ingitfile] @? "add ingitfile should be no-op"
unannexed ingitfile
)
-test_add_sha1dup :: TestEnv -> Assertion
-test_add_sha1dup env = intmpclonerepo env $ do
+test_add_sha1dup :: Assertion
+test_add_sha1dup = intmpclonerepo $ do
writeFile sha1annexedfiledup $ content sha1annexedfiledup
- git_annex env "add" [sha1annexedfiledup, "--backend=SHA1"] @? "add of second file with same SHA1 failed"
+ git_annex "add" [sha1annexedfiledup, "--backend=SHA1"] @? "add of second file with same SHA1 failed"
annexed_present sha1annexedfiledup
annexed_present sha1annexedfile
-test_add_extras :: TestEnv -> Assertion
-test_add_extras env = intmpclonerepo env $ do
+test_add_extras :: Assertion
+test_add_extras = intmpclonerepo $ do
writeFile wormannexedfile $ content wormannexedfile
- git_annex env "add" [wormannexedfile, "--backend=WORM"] @? "add with WORM failed"
+ git_annex "add" [wormannexedfile, "--backend=WORM"] @? "add with WORM failed"
annexed_present wormannexedfile
checkbackend wormannexedfile backendWORM
-test_reinject :: TestEnv -> Assertion
-test_reinject env = intmpclonerepoInDirect env $ do
- git_annex env "drop" ["--force", sha1annexedfile] @? "drop failed"
+test_reinject :: Assertion
+test_reinject = intmpclonerepoInDirect $ do
+ git_annex "drop" ["--force", sha1annexedfile] @? "drop failed"
writeFile tmp $ content sha1annexedfile
r <- annexeval $ Types.Backend.getKey backendSHA1
Types.KeySource.KeySource { Types.KeySource.keyFilename = tmp, Types.KeySource.contentLocation = tmp, Types.KeySource.inodeCache = Nothing }
let key = Types.Key.key2file $ fromJust r
- git_annex env "reinject" [tmp, sha1annexedfile] @? "reinject failed"
- git_annex env "fromkey" [key, sha1annexedfiledup] @? "fromkey failed for dup"
+ git_annex "reinject" [tmp, sha1annexedfile] @? "reinject failed"
+ git_annex "fromkey" [key, sha1annexedfiledup] @? "fromkey failed for dup"
annexed_present sha1annexedfiledup
where
tmp = "tmpfile"
-test_unannex_nocopy :: TestEnv -> Assertion
-test_unannex_nocopy env = intmpclonerepo env $ do
+test_unannex_nocopy :: Assertion
+test_unannex_nocopy = intmpclonerepo $ do
annexed_notpresent annexedfile
- git_annex env "unannex" [annexedfile] @? "unannex failed with no copy"
+ git_annex "unannex" [annexedfile] @? "unannex failed with no copy"
annexed_notpresent annexedfile
-test_unannex_withcopy :: TestEnv -> Assertion
-test_unannex_withcopy env = intmpclonerepo env $ do
- git_annex env "get" [annexedfile] @? "get failed"
+test_unannex_withcopy :: Assertion
+test_unannex_withcopy = intmpclonerepo $ do
+ git_annex "get" [annexedfile] @? "get failed"
annexed_present annexedfile
- git_annex env "unannex" [annexedfile, sha1annexedfile] @? "unannex failed"
+ git_annex "unannex" [annexedfile, sha1annexedfile] @? "unannex failed"
unannexed annexedfile
- git_annex env "unannex" [annexedfile] @? "unannex failed on non-annexed file"
+ git_annex "unannex" [annexedfile] @? "unannex failed on non-annexed file"
unannexed annexedfile
unlessM (annexeval Config.isDirect) $ do
- git_annex env "unannex" [ingitfile] @? "unannex ingitfile should be no-op"
+ git_annex "unannex" [ingitfile] @? "unannex ingitfile should be no-op"
unannexed ingitfile
-test_drop_noremote :: TestEnv -> Assertion
-test_drop_noremote env = intmpclonerepo env $ do
- git_annex env "get" [annexedfile] @? "get failed"
+test_drop_noremote :: Assertion
+test_drop_noremote = intmpclonerepo $ do
+ git_annex "get" [annexedfile] @? "get failed"
boolSystem "git" [Params "remote rm origin"]
@? "git remote rm origin failed"
- not <$> git_annex env "drop" [annexedfile] @? "drop wrongly succeeded with no known copy of file"
+ not <$> git_annex "drop" [annexedfile] @? "drop wrongly succeeded with no known copy of file"
annexed_present annexedfile
- git_annex env "drop" ["--force", annexedfile] @? "drop --force failed"
+ git_annex "drop" ["--force", annexedfile] @? "drop --force failed"
annexed_notpresent annexedfile
- git_annex env "drop" [annexedfile] @? "drop of dropped file failed"
+ git_annex "drop" [annexedfile] @? "drop of dropped file failed"
unlessM (annexeval Config.isDirect) $ do
- git_annex env "drop" [ingitfile] @? "drop ingitfile should be no-op"
+ git_annex "drop" [ingitfile] @? "drop ingitfile should be no-op"
unannexed ingitfile
-test_drop_withremote :: TestEnv -> Assertion
-test_drop_withremote env = intmpclonerepo env $ do
- git_annex env "get" [annexedfile] @? "get failed"
+test_drop_withremote :: Assertion
+test_drop_withremote = intmpclonerepo $ do
+ git_annex "get" [annexedfile] @? "get failed"
annexed_present annexedfile
- git_annex env "numcopies" ["2"] @? "numcopies config failed"
- not <$> git_annex env "drop" [annexedfile] @? "drop succeeded although numcopies is not satisfied"
- git_annex env "numcopies" ["1"] @? "numcopies config failed"
- git_annex env "drop" [annexedfile] @? "drop failed though origin has copy"
+ git_annex "numcopies" ["2"] @? "numcopies config failed"
+ not <$> git_annex "drop" [annexedfile] @? "drop succeeded although numcopies is not satisfied"
+ git_annex "numcopies" ["1"] @? "numcopies config failed"
+ git_annex "drop" [annexedfile] @? "drop failed though origin has copy"
annexed_notpresent annexedfile
- inmainrepo env $ annexed_present annexedfile
-
-test_drop_untrustedremote :: TestEnv -> Assertion
-test_drop_untrustedremote env = intmpclonerepo env $ do
- git_annex env "untrust" ["origin"] @? "untrust of origin failed"
- git_annex env "get" [annexedfile] @? "get failed"
+ -- make sure that the correct symlink is staged for the file
+ -- after drop
+ git_annex_expectoutput "status" [] []
+ inmainrepo $ annexed_present annexedfile
+
+test_drop_untrustedremote :: Assertion
+test_drop_untrustedremote = intmpclonerepo $ do
+ git_annex "untrust" ["origin"] @? "untrust of origin failed"
+ git_annex "get" [annexedfile] @? "get failed"
annexed_present annexedfile
- not <$> git_annex env "drop" [annexedfile] @? "drop wrongly suceeded with only an untrusted copy of the file"
+ not <$> git_annex "drop" [annexedfile] @? "drop wrongly suceeded with only an untrusted copy of the file"
annexed_present annexedfile
- inmainrepo env $ annexed_present annexedfile
+ inmainrepo $ annexed_present annexedfile
-test_get :: TestEnv -> Assertion
-test_get env = intmpclonerepo env $ do
- inmainrepo env $ annexed_present annexedfile
+test_get :: Assertion
+test_get = intmpclonerepo $ do
+ inmainrepo $ annexed_present annexedfile
annexed_notpresent annexedfile
- git_annex env "get" [annexedfile] @? "get of file failed"
- inmainrepo env $ annexed_present annexedfile
+ git_annex "get" [annexedfile] @? "get of file failed"
+ inmainrepo $ annexed_present annexedfile
annexed_present annexedfile
- git_annex env "get" [annexedfile] @? "get of file already here failed"
- inmainrepo env $ annexed_present annexedfile
+ git_annex "get" [annexedfile] @? "get of file already here failed"
+ inmainrepo $ annexed_present annexedfile
annexed_present annexedfile
unlessM (annexeval Config.isDirect) $ do
- inmainrepo env $ unannexed ingitfile
+ inmainrepo $ unannexed ingitfile
unannexed ingitfile
- git_annex env "get" [ingitfile] @? "get ingitfile should be no-op"
- inmainrepo env $ unannexed ingitfile
+ git_annex "get" [ingitfile] @? "get ingitfile should be no-op"
+ inmainrepo $ unannexed ingitfile
unannexed ingitfile
-test_move :: TestEnv -> Assertion
-test_move env = intmpclonerepo env $ do
+test_move :: Assertion
+test_move = intmpclonerepo $ do
annexed_notpresent annexedfile
- inmainrepo env $ annexed_present annexedfile
- git_annex env "move" ["--from", "origin", annexedfile] @? "move --from of file failed"
+ inmainrepo $ annexed_present annexedfile
+ git_annex "move" ["--from", "origin", annexedfile] @? "move --from of file failed"
annexed_present annexedfile
- inmainrepo env $ annexed_notpresent annexedfile
- git_annex env "move" ["--from", "origin", annexedfile] @? "move --from of file already here failed"
+ inmainrepo $ annexed_notpresent annexedfile
+ git_annex "move" ["--from", "origin", annexedfile] @? "move --from of file already here failed"
annexed_present annexedfile
- inmainrepo env $ annexed_notpresent annexedfile
- git_annex env "move" ["--to", "origin", annexedfile] @? "move --to of file failed"
- inmainrepo env $ annexed_present annexedfile
+ inmainrepo $ annexed_notpresent annexedfile
+ git_annex "move" ["--to", "origin", annexedfile] @? "move --to of file failed"
+ inmainrepo $ annexed_present annexedfile
annexed_notpresent annexedfile
- git_annex env "move" ["--to", "origin", annexedfile] @? "move --to of file already there failed"
- inmainrepo env $ annexed_present annexedfile
+ git_annex "move" ["--to", "origin", annexedfile] @? "move --to of file already there failed"
+ inmainrepo $ annexed_present annexedfile
annexed_notpresent annexedfile
unlessM (annexeval Config.isDirect) $ do
unannexed ingitfile
- inmainrepo env $ unannexed ingitfile
- git_annex env "move" ["--to", "origin", ingitfile] @? "move of ingitfile should be no-op"
+ inmainrepo $ unannexed ingitfile
+ git_annex "move" ["--to", "origin", ingitfile] @? "move of ingitfile should be no-op"
unannexed ingitfile
- inmainrepo env $ unannexed ingitfile
- git_annex env "move" ["--from", "origin", ingitfile] @? "move of ingitfile should be no-op"
+ inmainrepo $ unannexed ingitfile
+ git_annex "move" ["--from", "origin", ingitfile] @? "move of ingitfile should be no-op"
unannexed ingitfile
- inmainrepo env $ unannexed ingitfile
+ inmainrepo $ unannexed ingitfile
-test_copy :: TestEnv -> Assertion
-test_copy env = intmpclonerepo env $ do
+test_copy :: Assertion
+test_copy = intmpclonerepo $ do
annexed_notpresent annexedfile
- inmainrepo env $ annexed_present annexedfile
- git_annex env "copy" ["--from", "origin", annexedfile] @? "copy --from of file failed"
+ inmainrepo $ annexed_present annexedfile
+ git_annex "copy" ["--from", "origin", annexedfile] @? "copy --from of file failed"
annexed_present annexedfile
- inmainrepo env $ annexed_present annexedfile
- git_annex env "copy" ["--from", "origin", annexedfile] @? "copy --from of file already here failed"
+ inmainrepo $ annexed_present annexedfile
+ git_annex "copy" ["--from", "origin", annexedfile] @? "copy --from of file already here failed"
annexed_present annexedfile
- inmainrepo env $ annexed_present annexedfile
- git_annex env "copy" ["--to", "origin", annexedfile] @? "copy --to of file already there failed"
+ inmainrepo $ annexed_present annexedfile
+ git_annex "copy" ["--to", "origin", annexedfile] @? "copy --to of file already there failed"
annexed_present annexedfile
- inmainrepo env $ annexed_present annexedfile
- git_annex env "move" ["--to", "origin", annexedfile] @? "move --to of file already there failed"
+ inmainrepo $ annexed_present annexedfile
+ git_annex "move" ["--to", "origin", annexedfile] @? "move --to of file already there failed"
annexed_notpresent annexedfile
- inmainrepo env $ annexed_present annexedfile
+ inmainrepo $ annexed_present annexedfile
unlessM (annexeval Config.isDirect) $ do
unannexed ingitfile
- inmainrepo env $ unannexed ingitfile
- git_annex env "copy" ["--to", "origin", ingitfile] @? "copy of ingitfile should be no-op"
+ inmainrepo $ unannexed ingitfile
+ git_annex "copy" ["--to", "origin", ingitfile] @? "copy of ingitfile should be no-op"
unannexed ingitfile
- inmainrepo env $ unannexed ingitfile
- git_annex env "copy" ["--from", "origin", ingitfile] @? "copy of ingitfile should be no-op"
+ inmainrepo $ unannexed ingitfile
+ git_annex "copy" ["--from", "origin", ingitfile] @? "copy of ingitfile should be no-op"
checkregularfile ingitfile
checkcontent ingitfile
-test_preferred_content :: TestEnv -> Assertion
-test_preferred_content env = intmpclonerepo env $ do
+test_preferred_content :: Assertion
+test_preferred_content = intmpclonerepo $ do
annexed_notpresent annexedfile
-- get --auto only looks at numcopies when preferred content is not
-- set, and with 1 copy existing, does not get the file.
- git_annex env "get" ["--auto", annexedfile] @? "get --auto of file failed with default preferred content"
+ git_annex "get" ["--auto", annexedfile] @? "get --auto of file failed with default preferred content"
annexed_notpresent annexedfile
- git_annex env "wanted" [".", "standard"] @? "set expression to standard failed"
- git_annex env "group" [".", "client"] @? "set group to standard failed"
- git_annex env "get" ["--auto", annexedfile] @? "get --auto of file failed for client"
+ git_annex "wanted" [".", "standard"] @? "set expression to standard failed"
+ git_annex "group" [".", "client"] @? "set group to standard failed"
+ git_annex "get" ["--auto", annexedfile] @? "get --auto of file failed for client"
annexed_present annexedfile
- git_annex env "ungroup" [".", "client"] @? "ungroup failed"
+ git_annex "ungroup" [".", "client"] @? "ungroup failed"
- git_annex env "wanted" [".", "standard"] @? "set expression to standard failed"
- git_annex env "group" [".", "manual"] @? "set group to manual failed"
+ git_annex "wanted" [".", "standard"] @? "set expression to standard failed"
+ git_annex "group" [".", "manual"] @? "set group to manual failed"
-- drop --auto with manual leaves the file where it is
- git_annex env "drop" ["--auto", annexedfile] @? "drop --auto of file failed with manual preferred content"
+ git_annex "drop" ["--auto", annexedfile] @? "drop --auto of file failed with manual preferred content"
annexed_present annexedfile
- git_annex env "drop" [annexedfile] @? "drop of file failed"
+ git_annex "drop" [annexedfile] @? "drop of file failed"
annexed_notpresent annexedfile
-- get --auto with manual does not get the file
- git_annex env "get" ["--auto", annexedfile] @? "get --auto of file failed with manual preferred content"
+ git_annex "get" ["--auto", annexedfile] @? "get --auto of file failed with manual preferred content"
annexed_notpresent annexedfile
- git_annex env "ungroup" [".", "client"] @? "ungroup failed"
+ git_annex "ungroup" [".", "client"] @? "ungroup failed"
- git_annex env "wanted" [".", "exclude=*"] @? "set expression to exclude=* failed"
- git_annex env "get" [annexedfile] @? "get of file failed"
+ git_annex "wanted" [".", "exclude=*"] @? "set expression to exclude=* failed"
+ git_annex "get" [annexedfile] @? "get of file failed"
annexed_present annexedfile
- git_annex env "drop" ["--auto", annexedfile] @? "drop --auto of file failed with exclude=*"
+ git_annex "drop" ["--auto", annexedfile] @? "drop --auto of file failed with exclude=*"
annexed_notpresent annexedfile
- git_annex env "get" ["--auto", annexedfile] @? "get --auto of file failed with exclude=*"
+ git_annex "get" ["--auto", annexedfile] @? "get --auto of file failed with exclude=*"
annexed_notpresent annexedfile
-test_lock :: TestEnv -> Assertion
-test_lock env = intmpclonerepoInDirect env $ do
+test_lock :: Assertion
+test_lock = intmpclonerepoInDirect $ do
-- regression test: unlock of not present file should skip it
annexed_notpresent annexedfile
- not <$> git_annex env "unlock" [annexedfile] @? "unlock failed to fail with not present file"
+ not <$> git_annex "unlock" [annexedfile] @? "unlock failed to fail with not present file"
annexed_notpresent annexedfile
- git_annex env "get" [annexedfile] @? "get of file failed"
+ -- regression test: unlock of newly added, not committed file
+ -- should fail
+ writeFile "newfile" "foo"
+ git_annex "add" ["newfile"] @? "add new file failed"
+ not <$> git_annex "unlock" ["newfile"] @? "unlock failed to fail on newly added, never committed file"
+
+ git_annex "get" [annexedfile] @? "get of file failed"
annexed_present annexedfile
- git_annex env "unlock" [annexedfile] @? "unlock failed"
+ git_annex "unlock" [annexedfile] @? "unlock failed"
unannexed annexedfile
-- write different content, to verify that lock
-- throws it away
changecontent annexedfile
writeFile annexedfile $ content annexedfile ++ "foo"
- not <$> git_annex env "lock" [annexedfile] @? "lock failed to fail without --force"
- git_annex env "lock" ["--force", annexedfile] @? "lock --force failed"
+ not <$> git_annex "lock" [annexedfile] @? "lock failed to fail without --force"
+ git_annex "lock" ["--force", annexedfile] @? "lock --force failed"
annexed_present annexedfile
- git_annex env "unlock" [annexedfile] @? "unlock failed"
+ git_annex "unlock" [annexedfile] @? "unlock failed"
unannexed annexedfile
changecontent annexedfile
- git_annex env "add" [annexedfile] @? "add of modified file failed"
+ git_annex "add" [annexedfile] @? "add of modified file failed"
runchecks [checklink, checkunwritable] annexedfile
c <- readFile annexedfile
assertEqual "content of modified file" c (changedcontent annexedfile)
- r' <- git_annex env "drop" [annexedfile]
+ r' <- git_annex "drop" [annexedfile]
not r' @? "drop wrongly succeeded with no known copy of modified file"
-test_edit :: TestEnv -> Assertion
+test_edit :: Assertion
test_edit = test_edit' False
-test_edit_precommit :: TestEnv -> Assertion
+test_edit_precommit :: Assertion
test_edit_precommit = test_edit' True
-test_edit' :: Bool -> TestEnv -> Assertion
-test_edit' precommit env = intmpclonerepoInDirect env $ do
- git_annex env "get" [annexedfile] @? "get of file failed"
+test_edit' :: Bool -> Assertion
+test_edit' precommit = intmpclonerepoInDirect $ do
+ git_annex "get" [annexedfile] @? "get of file failed"
annexed_present annexedfile
- git_annex env "edit" [annexedfile] @? "edit failed"
+ git_annex "edit" [annexedfile] @? "edit failed"
unannexed annexedfile
changecontent annexedfile
boolSystem "git" [Param "add", File annexedfile]
@? "git add of edited file failed"
if precommit
- then git_annex env "pre-commit" []
+ then git_annex "pre-commit" []
@? "pre-commit failed"
else boolSystem "git" [Params "commit -q -m contentchanged"]
@? "git commit of edited file failed"
runchecks [checklink, checkunwritable] annexedfile
c <- readFile annexedfile
assertEqual "content of modified file" c (changedcontent annexedfile)
- not <$> git_annex env "drop" [annexedfile] @? "drop wrongly succeeded with no known copy of modified file"
+ not <$> git_annex "drop" [annexedfile] @? "drop wrongly succeeded with no known copy of modified file"
+
+test_partial_commit :: Assertion
+test_partial_commit = intmpclonerepoInDirect $ do
+ git_annex "get" [annexedfile] @? "get of file failed"
+ annexed_present annexedfile
+ git_annex "unlock" [annexedfile] @? "unlock failed"
+ not <$> boolSystem "git" [Params "commit -q -m test", File annexedfile]
+ @? "partial commit of unlocked file not blocked by pre-commit hook"
-test_fix :: TestEnv -> Assertion
-test_fix env = intmpclonerepoInDirect env $ do
+test_fix :: Assertion
+test_fix = intmpclonerepoInDirect $ do
annexed_notpresent annexedfile
- git_annex env "fix" [annexedfile] @? "fix of not present failed"
+ git_annex "fix" [annexedfile] @? "fix of not present failed"
annexed_notpresent annexedfile
- git_annex env "get" [annexedfile] @? "get of file failed"
+ git_annex "get" [annexedfile] @? "get of file failed"
annexed_present annexedfile
- git_annex env "fix" [annexedfile] @? "fix of present file failed"
+ git_annex "fix" [annexedfile] @? "fix of present file failed"
annexed_present annexedfile
createDirectory subdir
boolSystem "git" [Param "mv", File annexedfile, File subdir]
@? "git mv failed"
- git_annex env "fix" [newfile] @? "fix of moved file failed"
+ git_annex "fix" [newfile] @? "fix of moved file failed"
runchecks [checklink, checkunwritable] newfile
c <- readFile newfile
assertEqual "content of moved file" c (content annexedfile)
@@ -525,23 +535,31 @@ test_fix env = intmpclonerepoInDirect env $ do
subdir = "s"
newfile = subdir ++ "/" ++ annexedfile
-test_trust :: TestEnv -> Assertion
-test_trust env = intmpclonerepo env $ do
- git_annex env "trust" [repo] @? "trust failed"
+test_direct :: Assertion
+test_direct = intmpclonerepoInDirect $ do
+ git_annex "get" [annexedfile] @? "get of file failed"
+ annexed_present annexedfile
+ git_annex "direct" [] @? "switch to direct mode failed"
+ annexed_present annexedfile
+ git_annex "indirect" [] @? "switch to indirect mode failed"
+
+test_trust :: Assertion
+test_trust = intmpclonerepo $ do
+ git_annex "trust" [repo] @? "trust failed"
trustcheck Logs.Trust.Trusted "trusted 1"
- git_annex env "trust" [repo] @? "trust of trusted failed"
+ git_annex "trust" [repo] @? "trust of trusted failed"
trustcheck Logs.Trust.Trusted "trusted 2"
- git_annex env "untrust" [repo] @? "untrust failed"
+ git_annex "untrust" [repo] @? "untrust failed"
trustcheck Logs.Trust.UnTrusted "untrusted 1"
- git_annex env "untrust" [repo] @? "untrust of untrusted failed"
+ git_annex "untrust" [repo] @? "untrust of untrusted failed"
trustcheck Logs.Trust.UnTrusted "untrusted 2"
- git_annex env "dead" [repo] @? "dead failed"
+ git_annex "dead" [repo] @? "dead failed"
trustcheck Logs.Trust.DeadTrusted "deadtrusted 1"
- git_annex env "dead" [repo] @? "dead of dead failed"
+ git_annex "dead" [repo] @? "dead of dead failed"
trustcheck Logs.Trust.DeadTrusted "deadtrusted 2"
- git_annex env "semitrust" [repo] @? "semitrust failed"
+ git_annex "semitrust" [repo] @? "semitrust failed"
trustcheck Logs.Trust.SemiTrusted "semitrusted 1"
- git_annex env "semitrust" [repo] @? "semitrust of semitrusted failed"
+ git_annex "semitrust" [repo] @? "semitrust of semitrusted failed"
trustcheck Logs.Trust.SemiTrusted "semitrusted 2"
where
repo = "origin"
@@ -552,78 +570,78 @@ test_trust env = intmpclonerepo env $ do
return $ u `elem` l
assertBool msg present
-test_fsck_basic :: TestEnv -> Assertion
-test_fsck_basic env = intmpclonerepo env $ do
- git_annex env "fsck" [] @? "fsck failed"
- git_annex env "numcopies" ["2"] @? "numcopies config failed"
- fsck_should_fail env "numcopies unsatisfied"
- git_annex env "numcopies" ["1"] @? "numcopies config failed"
+test_fsck_basic :: Assertion
+test_fsck_basic = intmpclonerepo $ do
+ git_annex "fsck" [] @? "fsck failed"
+ git_annex "numcopies" ["2"] @? "numcopies config failed"
+ fsck_should_fail "numcopies unsatisfied"
+ git_annex "numcopies" ["1"] @? "numcopies config failed"
corrupt annexedfile
corrupt sha1annexedfile
where
corrupt f = do
- git_annex env "get" [f] @? "get of file failed"
+ git_annex "get" [f] @? "get of file failed"
Utility.FileMode.allowWrite f
writeFile f (changedcontent f)
ifM (annexeval Config.isDirect)
- ( git_annex env "fsck" [] @? "fsck failed in direct mode with changed file content"
- , not <$> git_annex env "fsck" [] @? "fsck failed to fail with corrupted file content"
+ ( git_annex "fsck" [] @? "fsck failed in direct mode with changed file content"
+ , not <$> git_annex "fsck" [] @? "fsck failed to fail with corrupted file content"
)
- git_annex env "fsck" [] @? "fsck unexpectedly failed again; previous one did not fix problem with " ++ f
-
-test_fsck_bare :: TestEnv -> Assertion
-test_fsck_bare env = intmpbareclonerepo env $
- git_annex env "fsck" [] @? "fsck failed"
-
-test_fsck_localuntrusted :: TestEnv -> Assertion
-test_fsck_localuntrusted env = intmpclonerepo env $ do
- git_annex env "get" [annexedfile] @? "get failed"
- git_annex env "untrust" ["origin"] @? "untrust of origin repo failed"
- git_annex env "untrust" ["."] @? "untrust of current repo failed"
- fsck_should_fail env "content only available in untrusted (current) repository"
- git_annex env "trust" ["."] @? "trust of current repo failed"
- git_annex env "fsck" [annexedfile] @? "fsck failed on file present in trusted repo"
-
-test_fsck_remoteuntrusted :: TestEnv -> Assertion
-test_fsck_remoteuntrusted env = intmpclonerepo env $ do
- git_annex env "numcopies" ["2"] @? "numcopies config failed"
- git_annex env "get" [annexedfile] @? "get failed"
- git_annex env "get" [sha1annexedfile] @? "get failed"
- git_annex env "fsck" [] @? "fsck failed with numcopies=2 and 2 copies"
- git_annex env "untrust" ["origin"] @? "untrust of origin failed"
- fsck_should_fail env "content not replicated to enough non-untrusted repositories"
-
-fsck_should_fail :: TestEnv -> String -> Assertion
-fsck_should_fail env m = not <$> git_annex env "fsck" []
+ git_annex "fsck" [] @? "fsck unexpectedly failed again; previous one did not fix problem with " ++ f
+
+test_fsck_bare :: Assertion
+test_fsck_bare = intmpbareclonerepo $
+ git_annex "fsck" [] @? "fsck failed"
+
+test_fsck_localuntrusted :: Assertion
+test_fsck_localuntrusted = intmpclonerepo $ do
+ git_annex "get" [annexedfile] @? "get failed"
+ git_annex "untrust" ["origin"] @? "untrust of origin repo failed"
+ git_annex "untrust" ["."] @? "untrust of current repo failed"
+ fsck_should_fail "content only available in untrusted (current) repository"
+ git_annex "trust" ["."] @? "trust of current repo failed"
+ git_annex "fsck" [annexedfile] @? "fsck failed on file present in trusted repo"
+
+test_fsck_remoteuntrusted :: Assertion
+test_fsck_remoteuntrusted = intmpclonerepo $ do
+ git_annex "numcopies" ["2"] @? "numcopies config failed"
+ git_annex "get" [annexedfile] @? "get failed"
+ git_annex "get" [sha1annexedfile] @? "get failed"
+ git_annex "fsck" [] @? "fsck failed with numcopies=2 and 2 copies"
+ git_annex "untrust" ["origin"] @? "untrust of origin failed"
+ fsck_should_fail "content not replicated to enough non-untrusted repositories"
+
+fsck_should_fail :: String -> Assertion
+fsck_should_fail m = not <$> git_annex "fsck" []
@? "fsck failed to fail with " ++ m
-test_migrate :: TestEnv -> Assertion
+test_migrate :: Assertion
test_migrate = test_migrate' False
-test_migrate_via_gitattributes :: TestEnv -> Assertion
+test_migrate_via_gitattributes :: Assertion
test_migrate_via_gitattributes = test_migrate' True
-test_migrate' :: Bool -> TestEnv -> Assertion
-test_migrate' usegitattributes env = intmpclonerepoInDirect env $ do
+test_migrate' :: Bool -> Assertion
+test_migrate' usegitattributes = intmpclonerepoInDirect $ do
annexed_notpresent annexedfile
annexed_notpresent sha1annexedfile
- git_annex env "migrate" [annexedfile] @? "migrate of not present failed"
- git_annex env "migrate" [sha1annexedfile] @? "migrate of not present failed"
- git_annex env "get" [annexedfile] @? "get of file failed"
- git_annex env "get" [sha1annexedfile] @? "get of file failed"
+ git_annex "migrate" [annexedfile] @? "migrate of not present failed"
+ git_annex "migrate" [sha1annexedfile] @? "migrate of not present failed"
+ git_annex "get" [annexedfile] @? "get of file failed"
+ git_annex "get" [sha1annexedfile] @? "get of file failed"
annexed_present annexedfile
annexed_present sha1annexedfile
if usegitattributes
then do
writeFile ".gitattributes" "* annex.backend=SHA1"
- git_annex env "migrate" [sha1annexedfile]
+ git_annex "migrate" [sha1annexedfile]
@? "migrate sha1annexedfile failed"
- git_annex env "migrate" [annexedfile]
+ git_annex "migrate" [annexedfile]
@? "migrate annexedfile failed"
else do
- git_annex env "migrate" [sha1annexedfile, "--backend", "SHA1"]
+ git_annex "migrate" [sha1annexedfile, "--backend", "SHA1"]
@? "migrate sha1annexedfile failed"
- git_annex env "migrate" [annexedfile, "--backend", "SHA1"]
+ git_annex "migrate" [annexedfile, "--backend", "SHA1"]
@? "migrate annexedfile failed"
annexed_present annexedfile
annexed_present sha1annexedfile
@@ -632,23 +650,23 @@ test_migrate' usegitattributes env = intmpclonerepoInDirect env $ do
-- check that reversing a migration works
writeFile ".gitattributes" "* annex.backend=SHA256"
- git_annex env "migrate" [sha1annexedfile]
+ git_annex "migrate" [sha1annexedfile]
@? "migrate sha1annexedfile failed"
- git_annex env "migrate" [annexedfile]
+ git_annex "migrate" [annexedfile]
@? "migrate annexedfile failed"
annexed_present annexedfile
annexed_present sha1annexedfile
checkbackend annexedfile backendSHA256
checkbackend sha1annexedfile backendSHA256
-test_unused :: TestEnv -> Assertion
+test_unused :: Assertion
-- This test is broken in direct mode
-test_unused env = intmpclonerepoInDirect env $ do
+test_unused = intmpclonerepoInDirect $ do
-- keys have to be looked up before files are removed
annexedfilekey <- annexeval $ findkey annexedfile
sha1annexedfilekey <- annexeval $ findkey sha1annexedfile
- git_annex env "get" [annexedfile] @? "get of file failed"
- git_annex env "get" [sha1annexedfile] @? "get of file failed"
+ git_annex "get" [annexedfile] @? "get of file failed"
+ git_annex "get" [sha1annexedfile] @? "get of file failed"
checkunused [] "after get"
boolSystem "git" [Params "rm -fq", File annexedfile] @? "git rm failed"
checkunused [] "after rm"
@@ -662,19 +680,19 @@ test_unused env = intmpclonerepoInDirect env $ do
checkunused [annexedfilekey, sha1annexedfilekey] "after rm sha1annexedfile"
-- good opportunity to test dropkey also
- git_annex env "dropkey" ["--force", Types.Key.key2file annexedfilekey]
+ git_annex "dropkey" ["--force", Types.Key.key2file annexedfilekey]
@? "dropkey failed"
checkunused [sha1annexedfilekey] ("after dropkey --force " ++ Types.Key.key2file annexedfilekey)
- not <$> git_annex env "dropunused" ["1"] @? "dropunused failed to fail without --force"
- git_annex env "dropunused" ["--force", "1"] @? "dropunused failed"
+ not <$> git_annex "dropunused" ["1"] @? "dropunused failed to fail without --force"
+ git_annex "dropunused" ["--force", "1"] @? "dropunused failed"
checkunused [] "after dropunused"
- not <$> git_annex env "dropunused" ["--force", "10", "501"] @? "dropunused failed to fail on bogus numbers"
+ not <$> git_annex "dropunused" ["--force", "10", "501"] @? "dropunused failed to fail on bogus numbers"
-- unused used to miss symlinks that were not staged and pointed
-- at annexed content, and think that content was unused
writeFile "unusedfile" "unusedcontent"
- git_annex env "add" ["unusedfile"] @? "add of unusedfile failed"
+ git_annex "add" ["unusedfile"] @? "add of unusedfile failed"
unusedfilekey <- annexeval $ findkey "unusedfile"
renameFile "unusedfile" "unusedunstagedfile"
boolSystem "git" [Params "rm -qf", File "unusedfile"] @? "git rm failed"
@@ -685,7 +703,7 @@ test_unused env = intmpclonerepoInDirect env $ do
-- unused used to miss symlinks that were deleted or modified
-- manually, but commited as such.
writeFile "unusedfile" "unusedcontent"
- git_annex env "add" ["unusedfile"] @? "add of unusedfile failed"
+ git_annex "add" ["unusedfile"] @? "add of unusedfile failed"
boolSystem "git" [Param "add", File "unusedfile"] @? "git add failed"
unusedfilekey' <- annexeval $ findkey "unusedfile"
checkunused [] "with staged deleted link"
@@ -695,7 +713,7 @@ test_unused env = intmpclonerepoInDirect env $ do
-- unused used to miss symlinks that were deleted or modified
-- manually, but not staged as such.
writeFile "unusedfile" "unusedcontent"
- git_annex env "add" ["unusedfile"] @? "add of unusedfile failed"
+ git_annex "add" ["unusedfile"] @? "add of unusedfile failed"
boolSystem "git" [Param "add", File "unusedfile"] @? "git add failed"
unusedfilekey'' <- annexeval $ findkey "unusedfile"
checkunused [] "with unstaged deleted link"
@@ -704,119 +722,119 @@ test_unused env = intmpclonerepoInDirect env $ do
where
checkunused expectedkeys desc = do
- git_annex env "unused" [] @? "unused failed"
+ git_annex "unused" [] @? "unused failed"
unusedmap <- annexeval $ Logs.Unused.readUnusedMap ""
let unusedkeys = M.elems unusedmap
assertEqual ("unused keys differ " ++ desc)
(sort expectedkeys) (sort unusedkeys)
findkey f = do
r <- Backend.lookupFile f
- return $ fst $ fromJust r
+ return $ fromJust r
-test_describe :: TestEnv -> Assertion
-test_describe env = intmpclonerepo env $ do
- git_annex env "describe" [".", "this repo"] @? "describe 1 failed"
- git_annex env "describe" ["origin", "origin repo"] @? "describe 2 failed"
+test_describe :: Assertion
+test_describe = intmpclonerepo $ do
+ git_annex "describe" [".", "this repo"] @? "describe 1 failed"
+ git_annex "describe" ["origin", "origin repo"] @? "describe 2 failed"
-test_find :: TestEnv -> Assertion
-test_find env = intmpclonerepo env $ do
+test_find :: Assertion
+test_find = intmpclonerepo $ do
annexed_notpresent annexedfile
- git_annex_expectoutput env "find" [] []
- git_annex env "get" [annexedfile] @? "get failed"
+ git_annex_expectoutput "find" [] []
+ git_annex "get" [annexedfile] @? "get failed"
annexed_present annexedfile
annexed_notpresent sha1annexedfile
- git_annex_expectoutput env "find" [] [annexedfile]
- git_annex_expectoutput env "find" ["--exclude", annexedfile, "--and", "--exclude", sha1annexedfile] []
- git_annex_expectoutput env "find" ["--include", annexedfile] [annexedfile]
- git_annex_expectoutput env "find" ["--not", "--in", "origin"] []
- git_annex_expectoutput env "find" ["--copies", "1", "--and", "--not", "--copies", "2"] [sha1annexedfile]
- git_annex_expectoutput env "find" ["--inbackend", "SHA1"] [sha1annexedfile]
- git_annex_expectoutput env "find" ["--inbackend", "WORM"] []
+ git_annex_expectoutput "find" [] [annexedfile]
+ git_annex_expectoutput "find" ["--exclude", annexedfile, "--and", "--exclude", sha1annexedfile] []
+ git_annex_expectoutput "find" ["--include", annexedfile] [annexedfile]
+ git_annex_expectoutput "find" ["--not", "--in", "origin"] []
+ git_annex_expectoutput "find" ["--copies", "1", "--and", "--not", "--copies", "2"] [sha1annexedfile]
+ git_annex_expectoutput "find" ["--inbackend", "SHA1"] [sha1annexedfile]
+ git_annex_expectoutput "find" ["--inbackend", "WORM"] []
{- --include=* should match files in subdirectories too,
- and --exclude=* should exclude them. -}
createDirectory "dir"
writeFile "dir/subfile" "subfile"
- git_annex env "add" ["dir"] @? "add of subdir failed"
- git_annex_expectoutput env "find" ["--include", "*", "--exclude", annexedfile, "--exclude", sha1annexedfile] ["dir/subfile"]
- git_annex_expectoutput env "find" ["--exclude", "*"] []
+ git_annex "add" ["dir"] @? "add of subdir failed"
+ git_annex_expectoutput "find" ["--include", "*", "--exclude", annexedfile, "--exclude", sha1annexedfile] ["dir/subfile"]
+ git_annex_expectoutput "find" ["--exclude", "*"] []
-test_merge :: TestEnv -> Assertion
-test_merge env = intmpclonerepo env $
- git_annex env "merge" [] @? "merge failed"
+test_merge :: Assertion
+test_merge = intmpclonerepo $
+ git_annex "merge" [] @? "merge failed"
-test_info :: TestEnv -> Assertion
-test_info env = intmpclonerepo env $ do
- json <- git_annex_output env "info" ["--json"]
+test_info :: Assertion
+test_info = intmpclonerepo $ do
+ json <- git_annex_output "info" ["--json"]
case Text.JSON.decodeStrict json :: Text.JSON.Result (Text.JSON.JSObject Text.JSON.JSValue) of
Text.JSON.Ok _ -> return ()
Text.JSON.Error e -> assertFailure e
-test_version :: TestEnv -> Assertion
-test_version env = intmpclonerepo env $
- git_annex env "version" [] @? "version failed"
+test_version :: Assertion
+test_version = intmpclonerepo $
+ git_annex "version" [] @? "version failed"
-test_sync :: TestEnv -> Assertion
-test_sync env = intmpclonerepo env $ do
- git_annex env "sync" [] @? "sync failed"
+test_sync :: Assertion
+test_sync = intmpclonerepo $ do
+ git_annex "sync" [] @? "sync failed"
{- Regression test for bug fixed in
- 7b0970b340d7faeb745c666146c7f701ec71808f, where in direct mode
- sync committed the symlink standin file to the annex. -}
- git_annex_expectoutput env "find" ["--in", "."] []
+ git_annex_expectoutput "find" ["--in", "."] []
{- Regression test for union merge bug fixed in
- 0214e0fb175a608a49b812d81b4632c081f63027 -}
-test_union_merge_regression :: TestEnv -> Assertion
-test_union_merge_regression env =
+test_union_merge_regression :: Assertion
+test_union_merge_regression =
{- We need 3 repos to see this bug. -}
- withtmpclonerepo env False $ \r1 ->
- withtmpclonerepo env False $ \r2 ->
- withtmpclonerepo env False $ \r3 -> do
- forM_ [r1, r2, r3] $ \r -> indir env r $ do
+ withtmpclonerepo False $ \r1 ->
+ withtmpclonerepo False $ \r2 ->
+ withtmpclonerepo False $ \r3 -> do
+ forM_ [r1, r2, r3] $ \r -> indir r $ do
when (r /= r1) $
boolSystem "git" [Params "remote add r1", File ("../../" ++ r1)] @? "remote add"
when (r /= r2) $
boolSystem "git" [Params "remote add r2", File ("../../" ++ r2)] @? "remote add"
when (r /= r3) $
boolSystem "git" [Params "remote add r3", File ("../../" ++ r3)] @? "remote add"
- git_annex env "get" [annexedfile] @? "get failed"
+ git_annex "get" [annexedfile] @? "get failed"
boolSystem "git" [Params "remote rm origin"] @? "remote rm"
- forM_ [r3, r2, r1] $ \r -> indir env r $
- git_annex env "sync" [] @? "sync failed"
- forM_ [r3, r2] $ \r -> indir env r $
- git_annex env "drop" ["--force", annexedfile] @? "drop failed"
- indir env r1 $ do
- git_annex env "sync" [] @? "sync failed in r1"
- git_annex_expectoutput env "find" ["--in", "r3"] []
+ forM_ [r3, r2, r1] $ \r -> indir r $
+ git_annex "sync" [] @? "sync failed"
+ forM_ [r3, r2] $ \r -> indir r $
+ git_annex "drop" ["--force", annexedfile] @? "drop failed"
+ indir r1 $ do
+ git_annex "sync" [] @? "sync failed in r1"
+ git_annex_expectoutput "find" ["--in", "r3"] []
{- This was the bug. The sync
- mangled location log data and it
- thought the file was still in r2 -}
- git_annex_expectoutput env "find" ["--in", "r2"] []
+ git_annex_expectoutput "find" ["--in", "r2"] []
{- Regression test for the automatic conflict resolution bug fixed
- in f4ba19f2b8a76a1676da7bb5850baa40d9c388e2. -}
-test_conflict_resolution_movein_regression :: TestEnv -> Assertion
-test_conflict_resolution_movein_regression env = withtmpclonerepo env False $ \r1 ->
- withtmpclonerepo env False $ \r2 -> do
+test_conflict_resolution_movein_regression :: Assertion
+test_conflict_resolution_movein_regression = withtmpclonerepo False $ \r1 ->
+ withtmpclonerepo False $ \r2 -> do
let rname r = if r == r1 then "r1" else "r2"
- forM_ [r1, r2] $ \r -> indir env r $ do
+ forM_ [r1, r2] $ \r -> indir r $ do
{- Get all files, see check below. -}
- git_annex env "get" [] @? "get failed"
+ git_annex "get" [] @? "get failed"
disconnectOrigin
- pair env r1 r2
- forM_ [r1, r2] $ \r -> indir env r $ do
+ pair r1 r2
+ forM_ [r1, r2] $ \r -> indir r $ do
{- Set up a conflict. -}
let newcontent = content annexedfile ++ rname r
ifM (annexeval Config.isDirect)
( writeFile annexedfile newcontent
, do
- git_annex env "unlock" [annexedfile] @? "unlock failed"
+ git_annex "unlock" [annexedfile] @? "unlock failed"
writeFile annexedfile newcontent
)
{- Sync twice in r1 so it gets the conflict resolution
- update from r2 -}
- forM_ [r1, r2, r1] $ \r -> indir env r $
- git_annex env "sync" ["--force"] @? "sync failed in " ++ rname r
+ forM_ [r1, r2, r1] $ \r -> indir r $
+ git_annex "sync" ["--force"] @? "sync failed in " ++ rname r
{- After the sync, it should be possible to get all
- files. This includes both sides of the conflict,
- although the filenames are not easily predictable.
@@ -824,28 +842,28 @@ test_conflict_resolution_movein_regression env = withtmpclonerepo env False $ \r
- The bug caused, in direct mode, one repo to
- be missing the content of the file that had
- been put in it. -}
- forM_ [r1, r2] $ \r -> indir env r $ do
- git_annex env "get" [] @? "unable to get all files after merge conflict resolution in " ++ rname r
+ forM_ [r1, r2] $ \r -> indir r $ do
+ git_annex "get" [] @? "unable to get all files after merge conflict resolution in " ++ rname r
{- Simple case of conflict resolution; 2 different versions of annexed
- file. -}
-test_conflict_resolution :: TestEnv -> Assertion
-test_conflict_resolution env =
- withtmpclonerepo env False $ \r1 ->
- withtmpclonerepo env False $ \r2 -> do
- indir env r1 $ do
+test_conflict_resolution :: Assertion
+test_conflict_resolution =
+ withtmpclonerepo False $ \r1 ->
+ withtmpclonerepo False $ \r2 -> do
+ indir r1 $ do
disconnectOrigin
writeFile conflictor "conflictor1"
- git_annex env "add" [conflictor] @? "add conflicter failed"
- git_annex env "sync" [] @? "sync failed in r1"
- indir env r2 $ do
+ git_annex "add" [conflictor] @? "add conflicter failed"
+ git_annex "sync" [] @? "sync failed in r1"
+ indir r2 $ do
disconnectOrigin
writeFile conflictor "conflictor2"
- git_annex env "add" [conflictor] @? "add conflicter failed"
- git_annex env "sync" [] @? "sync failed in r2"
- pair env r1 r2
- forM_ [r1,r2,r1] $ \r -> indir env r $
- git_annex env "sync" [] @? "sync failed"
+ git_annex "add" [conflictor] @? "add conflicter failed"
+ git_annex "sync" [] @? "sync failed in r2"
+ pair r1 r2
+ forM_ [r1,r2,r1] $ \r -> indir r $
+ git_annex "sync" [] @? "sync failed"
checkmerge "r1" r1
checkmerge "r2" r2
where
@@ -856,35 +874,36 @@ test_conflict_resolution env =
let v = filter (variantprefix `isPrefixOf`) l
length v == 2
@? (what ++ " not exactly 2 variant files in: " ++ show l)
- indir env d $ do
- git_annex env "get" v @? "get failed"
- git_annex_expectoutput env "find" v v
+ conflictor `notElem` l @? ("conflictor still present after conflict resolution")
+ indir d $ do
+ git_annex "get" v @? "get failed"
+ git_annex_expectoutput "find" v v
{- Check merge conflict resolution when one side is an annexed
- file, and the other is a directory. -}
-test_mixed_conflict_resolution :: TestEnv -> Assertion
-test_mixed_conflict_resolution env = do
+test_mixed_conflict_resolution :: Assertion
+test_mixed_conflict_resolution = do
check True
check False
where
- check inr1 = withtmpclonerepo env False $ \r1 ->
- withtmpclonerepo env False $ \r2 -> do
- indir env r1 $ do
+ check inr1 = withtmpclonerepo False $ \r1 ->
+ withtmpclonerepo False $ \r2 -> do
+ indir r1 $ do
disconnectOrigin
writeFile conflictor "conflictor"
- git_annex env "add" [conflictor] @? "add conflicter failed"
- git_annex env "sync" [] @? "sync failed in r1"
- indir env r2 $ do
+ git_annex "add" [conflictor] @? "add conflicter failed"
+ git_annex "sync" [] @? "sync failed in r1"
+ indir r2 $ do
disconnectOrigin
createDirectory conflictor
writeFile subfile "subfile"
- git_annex env "add" [conflictor] @? "add conflicter failed"
- git_annex env "sync" [] @? "sync failed in r2"
- pair env r1 r2
+ git_annex "add" [conflictor] @? "add conflicter failed"
+ git_annex "sync" [] @? "sync failed in r2"
+ pair r1 r2
let l = if inr1 then [r1, r2] else [r2, r1]
- forM_ l $ \r -> indir env r $
- git_annex env "sync" [] @? "sync failed in mixed conflict"
+ forM_ l $ \r -> indir r $
+ git_annex "sync" [] @? "sync failed in mixed conflict"
checkmerge "r1" r1
checkmerge "r2" r2
conflictor = "conflictor"
@@ -898,41 +917,41 @@ test_mixed_conflict_resolution env = do
@? (what ++ " conflictor variant file missing in: " ++ show l )
length v == 1
@? (what ++ " too many variant files in: " ++ show v)
- indir env d $ do
- git_annex env "get" (conflictor:v) @? ("get failed in " ++ what)
- git_annex_expectoutput env "find" [conflictor] [Git.FilePath.toInternalGitPath subfile]
- git_annex_expectoutput env "find" v v
+ indir d $ do
+ git_annex "get" (conflictor:v) @? ("get failed in " ++ what)
+ git_annex_expectoutput "find" [conflictor] [Git.FilePath.toInternalGitPath subfile]
+ git_annex_expectoutput "find" v v
{- Check merge conflict resolution when both repos start with an annexed
- file; one modifies it, and the other deletes it. -}
-test_remove_conflict_resolution :: TestEnv -> Assertion
-test_remove_conflict_resolution env = do
+test_remove_conflict_resolution :: Assertion
+test_remove_conflict_resolution = do
check True
check False
where
- check inr1 = withtmpclonerepo env False $ \r1 ->
- withtmpclonerepo env False $ \r2 -> do
- indir env r1 $ do
+ check inr1 = withtmpclonerepo False $ \r1 ->
+ withtmpclonerepo False $ \r2 -> do
+ indir r1 $ do
disconnectOrigin
writeFile conflictor "conflictor"
- git_annex env "add" [conflictor] @? "add conflicter failed"
- git_annex env "sync" [] @? "sync failed in r1"
- indir env r2 $
+ git_annex "add" [conflictor] @? "add conflicter failed"
+ git_annex "sync" [] @? "sync failed in r1"
+ indir r2 $
disconnectOrigin
- pair env r1 r2
- indir env r2 $ do
- git_annex env "sync" [] @? "sync failed in r2"
- git_annex env "get" [conflictor]
+ pair r1 r2
+ indir r2 $ do
+ git_annex "sync" [] @? "sync failed in r2"
+ git_annex "get" [conflictor]
@? "get conflictor failed"
unlessM (annexeval Config.isDirect) $ do
- git_annex env "unlock" [conflictor]
+ git_annex "unlock" [conflictor]
@? "unlock conflictor failed"
writeFile conflictor "newconflictor"
- indir env r1 $
+ indir r1 $
nukeFile conflictor
let l = if inr1 then [r1, r2, r1] else [r2, r1, r2]
- forM_ l $ \r -> indir env r $
- git_annex env "sync" [] @? "sync failed"
+ forM_ l $ \r -> indir r $
+ git_annex "sync" [] @? "sync failed"
checkmerge "r1" r1
checkmerge "r2" r2
conflictor = "conflictor"
@@ -951,32 +970,32 @@ test_remove_conflict_resolution env = do
- This test requires indirect mode to set it up, but tests both direct and
- indirect mode.
-}
-test_nonannexed_conflict_resolution :: TestEnv -> Assertion
-test_nonannexed_conflict_resolution env = do
+test_nonannexed_file_conflict_resolution :: Assertion
+test_nonannexed_file_conflict_resolution = do
check True False
check False False
check True True
check False True
where
- check inr1 switchdirect = withtmpclonerepo env False $ \r1 ->
- withtmpclonerepo env False $ \r2 -> do
+ check inr1 switchdirect = withtmpclonerepo False $ \r1 ->
+ withtmpclonerepo False $ \r2 ->
whenM (isInDirect r1 <&&> isInDirect r2) $ do
- indir env r1 $ do
+ indir r1 $ do
disconnectOrigin
writeFile conflictor "conflictor"
- git_annex env "add" [conflictor] @? "add conflicter failed"
- git_annex env "sync" [] @? "sync failed in r1"
- indir env r2 $ do
+ git_annex "add" [conflictor] @? "add conflicter failed"
+ git_annex "sync" [] @? "sync failed in r1"
+ indir r2 $ do
disconnectOrigin
writeFile conflictor nonannexed_content
boolSystem "git" [Params "add", File conflictor] @? "git add conflictor failed"
- git_annex env "sync" [] @? "sync failed in r2"
- pair env r1 r2
+ git_annex "sync" [] @? "sync failed in r2"
+ pair r1 r2
let l = if inr1 then [r1, r2] else [r2, r1]
- forM_ l $ \r -> indir env r $ do
+ forM_ l $ \r -> indir r $ do
when switchdirect $
- git_annex env "direct" [] @? "failed switching to direct mode"
- git_annex env "sync" [] @? "sync failed"
+ git_annex "direct" [] @? "failed switching to direct mode"
+ git_annex "sync" [] @? "sync failed"
checkmerge ("r1" ++ show switchdirect) r1
checkmerge ("r2" ++ show switchdirect) r2
conflictor = "conflictor"
@@ -994,6 +1013,57 @@ test_nonannexed_conflict_resolution env = do
s == Just nonannexed_content
@? (what ++ " wrong content for nonannexed file: " ++ show s)
+
+{- Check merge confalict resolution when a file is annexed in one repo,
+ - and is a non-git-annex symlink in the other repo.
+ -
+ - Test can only run when coreSymlinks is supported, because git needs to
+ - be able to check out the non-git-annex symlink.
+ -}
+test_nonannexed_symlink_conflict_resolution :: Assertion
+test_nonannexed_symlink_conflict_resolution = do
+ check True False
+ check False False
+ check True True
+ check False True
+ where
+ check inr1 switchdirect = withtmpclonerepo False $ \r1 ->
+ withtmpclonerepo False $ \r2 ->
+ whenM (checkRepo (Types.coreSymlinks <$> Annex.getGitConfig) r1
+ <&&> isInDirect r1 <&&> isInDirect r2) $ do
+ indir r1 $ do
+ disconnectOrigin
+ writeFile conflictor "conflictor"
+ git_annex "add" [conflictor] @? "add conflicter failed"
+ git_annex "sync" [] @? "sync failed in r1"
+ indir r2 $ do
+ disconnectOrigin
+ createSymbolicLink symlinktarget "conflictor"
+ boolSystem "git" [Params "add", File conflictor] @? "git add conflictor failed"
+ git_annex "sync" [] @? "sync failed in r2"
+ pair r1 r2
+ let l = if inr1 then [r1, r2] else [r2, r1]
+ forM_ l $ \r -> indir r $ do
+ when switchdirect $
+ git_annex "direct" [] @? "failed switching to direct mode"
+ git_annex "sync" [] @? "sync failed"
+ checkmerge ("r1" ++ show switchdirect) r1
+ checkmerge ("r2" ++ show switchdirect) r2
+ conflictor = "conflictor"
+ symlinktarget = "dummy-target"
+ variantprefix = conflictor ++ ".variant"
+ checkmerge what d = do
+ l <- getDirectoryContents d
+ let v = filter (variantprefix `isPrefixOf`) l
+ not (null v)
+ @? (what ++ " conflictor variant file missing in: " ++ show l )
+ length v == 1
+ @? (what ++ " too many variant files in: " ++ show v)
+ conflictor `elem` l @? (what ++ " conflictor file missing in: " ++ show l)
+ s <- catchMaybeIO (readSymbolicLink (d </> conflictor))
+ s == Just symlinktarget
+ @? (what ++ " wrong target for nonannexed symlink: " ++ show s)
+
{- Check merge conflict resolution when there is a local file,
- that is not staged or committed, that conflicts with what's being added
- from the remmote.
@@ -1003,38 +1073,38 @@ test_nonannexed_conflict_resolution env = do
-
- Case 2: Remote adds conflictor/file; local has a file named conflictor.
-}
-test_uncommitted_conflict_resolution :: TestEnv -> Assertion
-test_uncommitted_conflict_resolution env = do
+test_uncommitted_conflict_resolution :: Assertion
+test_uncommitted_conflict_resolution = do
check conflictor
check (conflictor </> "file")
where
- check remoteconflictor = withtmpclonerepo env False $ \r1 ->
- withtmpclonerepo env False $ \r2 -> do
- indir env r1 $ do
+ check remoteconflictor = withtmpclonerepo False $ \r1 ->
+ withtmpclonerepo False $ \r2 -> do
+ indir r1 $ do
disconnectOrigin
createDirectoryIfMissing True (parentDir remoteconflictor)
writeFile remoteconflictor annexedcontent
- git_annex env "add" [conflictor] @? "add remoteconflicter failed"
- git_annex env "sync" [] @? "sync failed in r1"
- indir env r2 $ do
+ git_annex "add" [conflictor] @? "add remoteconflicter failed"
+ git_annex "sync" [] @? "sync failed in r1"
+ indir r2 $ do
disconnectOrigin
writeFile conflictor localcontent
- pair env r1 r2
- indir env r2 $ ifM (annexeval Config.isDirect)
+ pair r1 r2
+ indir r2 $ ifM (annexeval Config.isDirect)
( do
- git_annex env "sync" [] @? "sync failed"
+ git_annex "sync" [] @? "sync failed"
let local = conflictor ++ localprefix
doesFileExist local @? (local ++ " missing after merge")
s <- readFile local
s == localcontent @? (local ++ " has wrong content: " ++ s)
- git_annex env "get" [conflictor] @? "get failed"
+ git_annex "get" [conflictor] @? "get failed"
doesFileExist remoteconflictor @? (remoteconflictor ++ " missing after merge")
s' <- readFile remoteconflictor
s' == annexedcontent @? (remoteconflictor ++ " has wrong content: " ++ s)
-- this case is intentionally not handled
-- in indirect mode, since the user
-- can recover on their own easily
- , not <$> git_annex env "sync" [] @? "sync failed to fail"
+ , not <$> git_annex "sync" [] @? "sync failed to fail"
)
conflictor = "conflictor"
localprefix = ".variant-local"
@@ -1044,82 +1114,82 @@ test_uncommitted_conflict_resolution env = do
{- On Windows/FAT, repeated conflict resolution sometimes
- lost track of whether a file was a symlink.
-}
-test_conflict_resolution_symlinks :: TestEnv -> Assertion
-test_conflict_resolution_symlinks env = do
- withtmpclonerepo env False $ \r1 ->
- withtmpclonerepo env False $ \r2 -> do
- withtmpclonerepo env False $ \r3 -> do
- indir env r1 $ do
+test_conflict_resolution_symlink_bit :: Assertion
+test_conflict_resolution_symlink_bit =
+ withtmpclonerepo False $ \r1 ->
+ withtmpclonerepo False $ \r2 ->
+ withtmpclonerepo False $ \r3 -> do
+ indir r1 $ do
writeFile conflictor "conflictor"
- git_annex env "add" [conflictor] @? "add conflicter failed"
- git_annex env "sync" [] @? "sync failed in r1"
+ git_annex "add" [conflictor] @? "add conflicter failed"
+ git_annex "sync" [] @? "sync failed in r1"
check_is_link conflictor "r1"
- indir env r2 $ do
+ indir r2 $ do
createDirectory conflictor
writeFile (conflictor </> "subfile") "subfile"
- git_annex env "add" [conflictor] @? "add conflicter failed"
- git_annex env "sync" [] @? "sync failed in r2"
+ git_annex "add" [conflictor] @? "add conflicter failed"
+ git_annex "sync" [] @? "sync failed in r2"
check_is_link (conflictor </> "subfile") "r2"
- indir env r3 $ do
+ indir r3 $ do
writeFile conflictor "conflictor"
- git_annex env "add" [conflictor] @? "add conflicter failed"
- git_annex env "sync" [] @? "sync failed in r1"
+ git_annex "add" [conflictor] @? "add conflicter failed"
+ git_annex "sync" [] @? "sync failed in r1"
check_is_link (conflictor </> "subfile") "r3"
where
conflictor = "conflictor"
check_is_link f what = do
- git_annex_expectoutput env "find" ["--include=*", f] [Git.FilePath.toInternalGitPath f]
+ git_annex_expectoutput "find" ["--include=*", f] [Git.FilePath.toInternalGitPath f]
l <- annexeval $ Annex.inRepo $ Git.LsTree.lsTreeFiles Git.Ref.headRef [f]
all (\i -> Git.Types.toBlobType (Git.LsTree.mode i) == Just Git.Types.SymlinkBlob) l
@? (what ++ " " ++ f ++ " lost symlink bit after merge: " ++ show l)
{- Set up repos as remotes of each other. -}
-pair :: TestEnv -> FilePath -> FilePath -> Assertion
-pair env r1 r2 = forM_ [r1, r2] $ \r -> indir env r $ do
+pair :: FilePath -> FilePath -> Assertion
+pair r1 r2 = forM_ [r1, r2] $ \r -> indir r $ do
when (r /= r1) $
boolSystem "git" [Params "remote add r1", File ("../../" ++ r1)] @? "remote add"
when (r /= r2) $
boolSystem "git" [Params "remote add r2", File ("../../" ++ r2)] @? "remote add"
-test_map :: TestEnv -> Assertion
-test_map env = intmpclonerepo env $ do
+test_map :: Assertion
+test_map = intmpclonerepo $ do
-- set descriptions, that will be looked for in the map
- git_annex env "describe" [".", "this repo"] @? "describe 1 failed"
- git_annex env "describe" ["origin", "origin repo"] @? "describe 2 failed"
+ git_annex "describe" [".", "this repo"] @? "describe 1 failed"
+ git_annex "describe" ["origin", "origin repo"] @? "describe 2 failed"
-- --fast avoids it running graphviz, not a build dependency
- git_annex env "map" ["--fast"] @? "map failed"
+ git_annex "map" ["--fast"] @? "map failed"
-test_uninit :: TestEnv -> Assertion
-test_uninit env = intmpclonerepo env $ do
- git_annex env "get" [] @? "get failed"
+test_uninit :: Assertion
+test_uninit = intmpclonerepo $ do
+ git_annex "get" [] @? "get failed"
annexed_present annexedfile
- _ <- git_annex env "uninit" [] -- exit status not checked; does abnormal exit
+ _ <- git_annex "uninit" [] -- exit status not checked; does abnormal exit
checkregularfile annexedfile
doesDirectoryExist ".git" @? ".git vanished in uninit"
-test_uninit_inbranch :: TestEnv -> Assertion
-test_uninit_inbranch env = intmpclonerepoInDirect env $ do
+test_uninit_inbranch :: Assertion
+test_uninit_inbranch = intmpclonerepoInDirect $ do
boolSystem "git" [Params "checkout git-annex"] @? "git checkout git-annex"
- not <$> git_annex env "uninit" [] @? "uninit failed to fail when git-annex branch was checked out"
+ not <$> git_annex "uninit" [] @? "uninit failed to fail when git-annex branch was checked out"
-test_upgrade :: TestEnv -> Assertion
-test_upgrade env = intmpclonerepo env $ do
- git_annex env "upgrade" [] @? "upgrade from same version failed"
+test_upgrade :: Assertion
+test_upgrade = intmpclonerepo $
+ git_annex "upgrade" [] @? "upgrade from same version failed"
-test_whereis :: TestEnv -> Assertion
-test_whereis env = intmpclonerepo env $ do
+test_whereis :: Assertion
+test_whereis = intmpclonerepo $ do
annexed_notpresent annexedfile
- git_annex env "whereis" [annexedfile] @? "whereis on non-present file failed"
- git_annex env "untrust" ["origin"] @? "untrust failed"
- not <$> git_annex env "whereis" [annexedfile] @? "whereis on non-present file only present in untrusted repo failed to fail"
- git_annex env "get" [annexedfile] @? "get failed"
+ git_annex "whereis" [annexedfile] @? "whereis on non-present file failed"
+ git_annex "untrust" ["origin"] @? "untrust failed"
+ not <$> git_annex "whereis" [annexedfile] @? "whereis on non-present file only present in untrusted repo failed to fail"
+ git_annex "get" [annexedfile] @? "get failed"
annexed_present annexedfile
- git_annex env "whereis" [annexedfile] @? "whereis on present file failed"
+ git_annex "whereis" [annexedfile] @? "whereis on present file failed"
-test_hook_remote :: TestEnv -> Assertion
-test_hook_remote env = intmpclonerepo env $ do
+test_hook_remote :: Assertion
+test_hook_remote = intmpclonerepo $ do
#ifndef mingw32_HOST_OS
- git_annex env "initremote" (words "foo type=hook encryption=none hooktype=foo") @? "initremote failed"
+ git_annex "initremote" (words "foo type=hook encryption=none hooktype=foo") @? "initremote failed"
createDirectory dir
git_config "annex.foo-store-hook" $
"cp $ANNEX_FILE " ++ loc
@@ -1129,15 +1199,15 @@ test_hook_remote env = intmpclonerepo env $ do
"rm -f " ++ loc
git_config "annex.foo-checkpresent-hook" $
"if [ -e " ++ loc ++ " ]; then echo $ANNEX_KEY; fi"
- git_annex env "get" [annexedfile] @? "get of file failed"
+ git_annex "get" [annexedfile] @? "get of file failed"
annexed_present annexedfile
- git_annex env "copy" [annexedfile, "--to", "foo"] @? "copy --to hook remote failed"
+ git_annex "copy" [annexedfile, "--to", "foo"] @? "copy --to hook remote failed"
annexed_present annexedfile
- git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
+ git_annex "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
annexed_notpresent annexedfile
- git_annex env "move" [annexedfile, "--from", "foo"] @? "move --from hook remote failed"
+ git_annex "move" [annexedfile, "--from", "foo"] @? "move --from hook remote failed"
annexed_present annexedfile
- not <$> git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed to fail"
+ not <$> git_annex "drop" [annexedfile, "--numcopies=2"] @? "drop failed to fail"
annexed_present annexedfile
where
dir = "dir"
@@ -1149,71 +1219,65 @@ test_hook_remote env = intmpclonerepo env $ do
noop
#endif
-test_directory_remote :: TestEnv -> Assertion
-test_directory_remote env = intmpclonerepo env $ do
+test_directory_remote :: Assertion
+test_directory_remote = intmpclonerepo $ do
createDirectory "dir"
- git_annex env "initremote" (words "foo type=directory encryption=none directory=dir") @? "initremote failed"
- git_annex env "get" [annexedfile] @? "get of file failed"
+ git_annex "initremote" (words "foo type=directory encryption=none directory=dir") @? "initremote failed"
+ git_annex "get" [annexedfile] @? "get of file failed"
annexed_present annexedfile
- git_annex env "copy" [annexedfile, "--to", "foo"] @? "copy --to directory remote failed"
+ git_annex "copy" [annexedfile, "--to", "foo"] @? "copy --to directory remote failed"
annexed_present annexedfile
- git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
+ git_annex "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
annexed_notpresent annexedfile
- git_annex env "move" [annexedfile, "--from", "foo"] @? "move --from directory remote failed"
+ git_annex "move" [annexedfile, "--from", "foo"] @? "move --from directory remote failed"
annexed_present annexedfile
- not <$> git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed to fail"
+ not <$> git_annex "drop" [annexedfile, "--numcopies=2"] @? "drop failed to fail"
annexed_present annexedfile
-test_rsync_remote :: TestEnv -> Assertion
-test_rsync_remote env = intmpclonerepo env $ do
-#ifndef mingw32_HOST_OS
+test_rsync_remote :: Assertion
+test_rsync_remote = intmpclonerepo $ do
createDirectory "dir"
- git_annex env "initremote" (words "foo type=rsync encryption=none rsyncurl=dir") @? "initremote failed"
- git_annex env "get" [annexedfile] @? "get of file failed"
+ git_annex "initremote" (words "foo type=rsync encryption=none rsyncurl=dir") @? "initremote failed"
+ git_annex "get" [annexedfile] @? "get of file failed"
annexed_present annexedfile
- git_annex env "copy" [annexedfile, "--to", "foo"] @? "copy --to rsync remote failed"
+ git_annex "copy" [annexedfile, "--to", "foo"] @? "copy --to rsync remote failed"
annexed_present annexedfile
- git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
+ git_annex "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
annexed_notpresent annexedfile
- git_annex env "move" [annexedfile, "--from", "foo"] @? "move --from rsync remote failed"
+ git_annex "move" [annexedfile, "--from", "foo"] @? "move --from rsync remote failed"
annexed_present annexedfile
- not <$> git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed to fail"
+ not <$> git_annex "drop" [annexedfile, "--numcopies=2"] @? "drop failed to fail"
annexed_present annexedfile
-#else
- -- Rsync remotes with a rsyncurl of a directory do not currently
- -- work on Windows.
- noop
-#endif
-test_bup_remote :: TestEnv -> Assertion
-test_bup_remote env = intmpclonerepo env $ when Build.SysConfig.bup $ do
+test_bup_remote :: Assertion
+test_bup_remote = intmpclonerepo $ when Build.SysConfig.bup $ do
dir <- absPath "dir" -- bup special remote needs an absolute path
createDirectory dir
- git_annex env "initremote" (words $ "foo type=bup encryption=none buprepo="++dir) @? "initremote failed"
- git_annex env "get" [annexedfile] @? "get of file failed"
+ git_annex "initremote" (words $ "foo type=bup encryption=none buprepo="++dir) @? "initremote failed"
+ git_annex "get" [annexedfile] @? "get of file failed"
annexed_present annexedfile
- git_annex env "copy" [annexedfile, "--to", "foo"] @? "copy --to bup remote failed"
+ git_annex "copy" [annexedfile, "--to", "foo"] @? "copy --to bup remote failed"
annexed_present annexedfile
- git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
+ git_annex "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
annexed_notpresent annexedfile
- git_annex env "copy" [annexedfile, "--from", "foo"] @? "copy --from bup remote failed"
+ git_annex "copy" [annexedfile, "--from", "foo"] @? "copy --from bup remote failed"
annexed_present annexedfile
- not <$> git_annex env "move" [annexedfile, "--from", "foo"] @? "move --from bup remote failed to fail"
+ git_annex "move" [annexedfile, "--from", "foo"] @? "move --from bup remote failed"
annexed_present annexedfile
-- gpg is not a build dependency, so only test when it's available
-test_crypto :: TestEnv -> Assertion
+test_crypto :: Assertion
#ifndef mingw32_HOST_OS
-test_crypto env = do
+test_crypto = do
testscheme "shared"
testscheme "hybrid"
testscheme "pubkey"
where
- testscheme scheme = intmpclonerepo env $ whenM (Utility.Path.inPath Utility.Gpg.gpgcmd) $ do
+ testscheme scheme = intmpclonerepo $ whenM (Utility.Path.inPath Utility.Gpg.gpgcmd) $ do
Utility.Gpg.testTestHarness @? "test harness self-test failed"
Utility.Gpg.testHarness $ do
createDirectory "dir"
- let a cmd = git_annex env cmd $
+ let a cmd = git_annex cmd $
[ "foo"
, "type=directory"
, "encryption=" ++ scheme
@@ -1226,13 +1290,13 @@ test_crypto env = do
not <$> a "initremote" @? "initremote failed to fail when run twice in a row"
a "enableremote" @? "enableremote failed"
a "enableremote" @? "enableremote failed when run twice in a row"
- git_annex env "get" [annexedfile] @? "get of file failed"
+ git_annex "get" [annexedfile] @? "get of file failed"
annexed_present annexedfile
- git_annex env "copy" [annexedfile, "--to", "foo"] @? "copy --to encrypted remote failed"
+ git_annex "copy" [annexedfile, "--to", "foo"] @? "copy --to encrypted remote failed"
(c,k) <- annexeval $ do
uuid <- Remote.nameToUUID "foo"
rs <- Logs.Remote.readRemoteLog
- Just (k,_) <- Backend.lookupFile annexedfile
+ Just k <- Backend.lookupFile annexedfile
return (fromJust $ M.lookup uuid rs, k)
let key = if scheme `elem` ["hybrid","pubkey"]
then Just $ Utility.Gpg.KeyIds [Utility.Gpg.testKeyId]
@@ -1240,11 +1304,11 @@ test_crypto env = do
testEncryptedRemote scheme key c [k] @? "invalid crypto setup"
annexed_present annexedfile
- git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
+ git_annex "drop" [annexedfile, "--numcopies=2"] @? "drop failed"
annexed_notpresent annexedfile
- git_annex env "move" [annexedfile, "--from", "foo"] @? "move --from encrypted remote failed"
+ git_annex "move" [annexedfile, "--from", "foo"] @? "move --from encrypted remote failed"
annexed_present annexedfile
- not <$> git_annex env "drop" [annexedfile, "--numcopies=2"] @? "drop failed to fail"
+ not <$> git_annex "drop" [annexedfile, "--numcopies=2"] @? "drop failed to fail"
annexed_present annexedfile
{- Ensure the configuration complies with the encryption scheme, and
- that all keys are encrypted properly for the given directory remote. -}
@@ -1273,34 +1337,41 @@ test_crypto env = do
key2files cipher = Locations.keyPaths .
Crypto.encryptKey Types.Crypto.HmacSha1 cipher
#else
-test_crypto _env = putStrLn "gpg testing not implemented on Windows"
+test_crypto = putStrLn "gpg testing not implemented on Windows"
#endif
-test_add_subdirs :: TestEnv -> Assertion
-test_add_subdirs env = intmpclonerepo env $ do
+test_add_subdirs :: Assertion
+test_add_subdirs = intmpclonerepo $ do
createDirectory "dir"
writeFile ("dir" </> "foo") $ "dir/" ++ content annexedfile
- git_annex env "add" ["dir"] @? "add of subdir failed"
+ git_annex "add" ["dir"] @? "add of subdir failed"
{- Regression test for Windows bug where symlinks were not
- calculated correctly for files in subdirs. -}
- git_annex env "sync" [] @? "sync failed"
+ git_annex "sync" [] @? "sync failed"
l <- annexeval $ decodeBS <$> Annex.CatFile.catObject (Git.Types.Ref "HEAD:dir/foo")
"../.git/annex/" `isPrefixOf` l @? ("symlink from subdir to .git/annex is wrong: " ++ l)
createDirectory "dir2"
writeFile ("dir2" </> "foo") $ content annexedfile
setCurrentDirectory "dir"
- git_annex env "add" [".." </> "dir2"] @? "add of ../subdir failed"
+ git_annex "add" [".." </> "dir2"] @? "add of ../subdir failed"
+
+test_addurl :: Assertion
+test_addurl = intmpclonerepo $ do
+ -- file:// only; this test suite should not hit the network
+ f <- absPath "myurl"
+ let url = replace "\\" "/" ("file:///" ++ dropDrive f)
+ writeFile f "foo"
+ git_annex "addurl" [url] @? ("addurl failed on " ++ url)
+ let dest = "addurlurldest"
+ git_annex "addurl" ["--file", dest, url] @? ("addurl failed on " ++ url ++ " with --file")
+ doesFileExist dest @? (dest ++ " missing after addurl --file")
-- This is equivilant to running git-annex, but it's all run in-process
--- (when the OS allows) so test coverage collection works.
-git_annex :: TestEnv -> String -> [String] -> IO Bool
-git_annex env command params = do
-#ifndef mingw32_HOST_OS
- forM_ (M.toList env) $ \(var, val) ->
- Utility.Env.setEnv var val True
-
+-- so test coverage collection works.
+git_annex :: String -> [String] -> IO Bool
+git_annex command params = do
-- catch all errors, including normally fatal errors
r <- try run::IO (Either SomeException ())
case r of
@@ -1308,26 +1379,20 @@ git_annex env command params = do
Left _ -> return False
where
run = GitAnnex.run (command:"-q":params)
-#else
- Utility.SafeCommand.boolSystemEnv "git-annex"
- (map Param $ command : params)
- (Just $ M.toList env)
-#endif
{- Runs git-annex and returns its output. -}
-git_annex_output :: TestEnv -> String -> [String] -> IO String
-git_annex_output env command params = do
- got <- Utility.Process.readProcessEnv "git-annex" (command:params)
- (Just $ M.toList env)
- -- XXX since the above is a separate process, code coverage stats are
+git_annex_output :: String -> [String] -> IO String
+git_annex_output command params = do
+ got <- Utility.Process.readProcess "git-annex" (command:params)
+ -- Since the above is a separate process, code coverage stats are
-- not gathered for things run in it.
-- Run same command again, to get code coverage.
- _ <- git_annex env command params
+ _ <- git_annex command params
return got
-git_annex_expectoutput :: TestEnv -> String -> [String] -> [String] -> IO ()
-git_annex_expectoutput env command params expected = do
- got <- lines <$> git_annex_output env command params
+git_annex_expectoutput :: String -> [String] -> [String] -> IO ()
+git_annex_expectoutput command params expected = do
+ got <- lines <$> git_annex_output command params
got == expected @? ("unexpected value running " ++ command ++ " " ++ show params ++ " -- got: " ++ show got ++ " expected: " ++ show expected)
-- Runs an action in the current annex. Note that shutdown actions
@@ -1339,88 +1404,94 @@ annexeval a = do
Annex.setOutput Types.Messages.QuietOutput
a
-innewrepo :: TestEnv -> Assertion -> Assertion
-innewrepo env a = withgitrepo env $ \r -> indir env r a
+innewrepo :: Assertion -> Assertion
+innewrepo a = withgitrepo $ \r -> indir r a
-inmainrepo :: TestEnv -> Assertion -> Assertion
-inmainrepo env = indir env mainrepodir
+inmainrepo :: Assertion -> Assertion
+inmainrepo = indir mainrepodir
-intmpclonerepo :: TestEnv -> Assertion -> Assertion
-intmpclonerepo env a = withtmpclonerepo env False $ \r -> indir env r a
+intmpclonerepo :: Assertion -> Assertion
+intmpclonerepo a = withtmpclonerepo False $ \r -> indir r a
-intmpclonerepoInDirect :: TestEnv -> Assertion -> Assertion
-intmpclonerepoInDirect env a = intmpclonerepo env $
+intmpclonerepoInDirect :: Assertion -> Assertion
+intmpclonerepoInDirect a = intmpclonerepo $
ifM isdirect
( putStrLn "not supported in direct mode; skipping"
, a
)
where
- isdirect = annexeval $ do
+ isdirect = annexeval $ do
Annex.Init.initialize Nothing
Config.isDirect
-isInDirect :: FilePath -> IO Bool
-isInDirect d = do
+checkRepo :: Types.Annex a -> FilePath -> IO a
+checkRepo getval d = do
s <- Annex.new =<< Git.Construct.fromPath d
- not <$> Annex.eval s Config.isDirect
+ Annex.eval s getval
+
+isInDirect :: FilePath -> IO Bool
+isInDirect = checkRepo (not <$> Config.isDirect)
-intmpbareclonerepo :: TestEnv -> Assertion -> Assertion
-intmpbareclonerepo env a = withtmpclonerepo env True $ \r -> indir env r a
+intmpbareclonerepo :: Assertion -> Assertion
+intmpbareclonerepo a = withtmpclonerepo True $ \r -> indir r a
-withtmpclonerepo :: TestEnv -> Bool -> (FilePath -> Assertion) -> Assertion
-withtmpclonerepo env bare a = do
+withtmpclonerepo :: Bool -> (FilePath -> Assertion) -> Assertion
+withtmpclonerepo bare a = do
dir <- tmprepodir
- bracket (clonerepo env mainrepodir dir bare) cleanup a
+ bracket (clonerepo mainrepodir dir bare) cleanup a
disconnectOrigin :: Assertion
disconnectOrigin = boolSystem "git" [Params "remote rm origin"] @? "remote rm"
-withgitrepo :: TestEnv -> (FilePath -> Assertion) -> Assertion
-withgitrepo env = bracket (setuprepo env mainrepodir) return
+withgitrepo :: (FilePath -> Assertion) -> Assertion
+withgitrepo = bracket (setuprepo mainrepodir) return
-indir :: TestEnv -> FilePath -> Assertion -> Assertion
-indir env dir a = do
- cwd <- getCurrentDirectory
+indir :: FilePath -> Assertion -> Assertion
+indir dir a = do
+ currdir <- getCurrentDirectory
-- Assertion failures throw non-IO errors; catch
- -- any type of error and change back to cwd before
+ -- any type of error and change back to currdir before
-- rethrowing.
- r <- bracket_ (changeToTmpDir env dir) (setCurrentDirectory cwd)
+ r <- bracket_ (changeToTmpDir dir) (setCurrentDirectory currdir)
(try a::IO (Either SomeException ()))
case r of
Right () -> return ()
- Left e -> throw e
+ Left e -> throwM e
-setuprepo :: TestEnv -> FilePath -> IO FilePath
-setuprepo env dir = do
+setuprepo :: FilePath -> IO FilePath
+setuprepo dir = do
cleanup dir
ensuretmpdir
boolSystem "git" [Params "init -q", File dir] @? "git init failed"
- configrepo env dir
+ configrepo dir
return dir
-- clones are always done as local clones; we cannot test ssh clones
-clonerepo :: TestEnv -> FilePath -> FilePath -> Bool -> IO FilePath
-clonerepo env old new bare = do
+clonerepo :: FilePath -> FilePath -> Bool -> IO FilePath
+clonerepo old new bare = do
cleanup new
ensuretmpdir
let b = if bare then " --bare" else ""
boolSystem "git" [Params ("clone -q" ++ b), File old, File new] @? "git clone failed"
- indir env new $
- git_annex env "init" ["-q", new] @? "git annex init failed"
- configrepo env new
+ configrepo new
+ indir new $
+ git_annex "init" ["-q", new] @? "git annex init failed"
unless bare $
- indir env new $
- handleforcedirect env
+ indir new $
+ handleforcedirect
return new
-configrepo :: TestEnv -> FilePath -> IO ()
-configrepo env dir = indir env dir $ do
+configrepo :: FilePath -> IO ()
+configrepo dir = indir dir $ do
+ -- ensure git is set up to let commits happen
boolSystem "git" [Params "config user.name", Param "Test User"] @? "git config failed"
boolSystem "git" [Params "config user.email test@example.com"] @? "git config failed"
+ -- avoid signed commits by test suite
+ boolSystem "git" [Params "config commit.gpgsign false"] @? "git config failed"
-handleforcedirect :: TestEnv -> IO ()
-handleforcedirect env = when (M.lookup "FORCEDIRECT" env == Just "1") $
- git_annex env "direct" ["-q"] @? "git annex direct failed"
+handleforcedirect :: IO ()
+handleforcedirect = whenM ((==) "1" <$> Utility.Env.getEnvDefault "FORCEDIRECT" "") $
+ git_annex "direct" ["-q"] @? "git annex direct failed"
ensuretmpdir :: IO ()
ensuretmpdir = do
@@ -1433,11 +1504,7 @@ cleanup = cleanup' False
cleanup' :: Bool -> FilePath -> IO ()
cleanup' final dir = whenM (doesDirectoryExist dir) $ do
- -- Allow all files and directories to be written to, so
- -- they can be deleted. Both git and git-annex use file
- -- permissions to prevent deletion.
- recurseDir SystemFS dir >>=
- mapM_ (void . tryIO . Utility.FileMode.allowWrite)
+ Command.Uninit.prepareRemoveAnnexDir dir
-- This sometimes fails on Windows, due to some files
-- being still opened by a subprocess.
catchIO (removeDirectoryRecursive dir) $ \e ->
@@ -1499,7 +1566,7 @@ checklocationlog f expected = do
thisuuid <- annexeval Annex.UUID.getUUID
r <- annexeval $ Backend.lookupFile f
case r of
- Just (k, _) -> do
+ Just k -> do
uuids <- annexeval $ Remote.keyLocations k
assertEqual ("bad content in location log for " ++ f ++ " key " ++ Types.Key.key2file k ++ " uuid " ++ show thisuuid)
expected (thisuuid `elem` uuids)
@@ -1507,9 +1574,9 @@ checklocationlog f expected = do
checkbackend :: FilePath -> Types.Backend -> Assertion
checkbackend file expected = do
- r <- annexeval $ Backend.lookupFile file
- let b = snd $ fromJust r
- assertEqual ("backend for " ++ file) expected b
+ b <- annexeval $ maybe (return Nothing) (Backend.getBackend file)
+ =<< Backend.lookupFile file
+ assertEqual ("backend for " ++ file) (Just expected) b
inlocationlog :: FilePath -> Assertion
inlocationlog f = checklocationlog f True
@@ -1534,34 +1601,30 @@ annexed_present = runchecks
unannexed :: FilePath -> Assertion
unannexed = runchecks [checkregularfile, checkcontent, checkwritable]
-withTestEnv :: Bool -> (IO TestEnv -> TestTree) -> TestTree
-withTestEnv forcedirect = withResource prepare release
+withTestEnv :: Bool -> TestTree -> TestTree
+withTestEnv forcedirect = withResource prepare release . const
where
prepare = do
- env <- prepareTestEnv forcedirect
- case tryIngredients [consoleTestReporter] mempty (initTests env) of
+ setTestEnv forcedirect
+ case tryIngredients [consoleTestReporter] mempty initTests of
Nothing -> error "No tests found!?"
Just act -> unlessM act $
error "init tests failed! cannot continue"
- return env
- release = releaseTestEnv
-
-releaseTestEnv :: TestEnv -> IO ()
-releaseTestEnv _env = cleanup' True tmpdir
+ return ()
+ release _ = cleanup' True tmpdir
-prepareTestEnv :: Bool -> IO TestEnv
-prepareTestEnv forcedirect = do
+setTestEnv :: Bool -> IO ()
+setTestEnv forcedirect = do
whenM (doesDirectoryExist tmpdir) $
error $ "The temporary directory " ++ tmpdir ++ " already exists; cannot run test suite."
- cwd <- getCurrentDirectory
+ currdir <- getCurrentDirectory
p <- Utility.Env.getEnvDefault "PATH" ""
- env <- Utility.Env.getEnvironment
- let newenv =
+ mapM_ (\(var, val) -> Utility.Env.setEnv var val True)
-- Ensure that the just-built git annex is used.
- [ ("PATH", cwd ++ [searchPathSeparator] ++ p)
- , ("TOPDIR", cwd)
+ [ ("PATH", currdir ++ [searchPathSeparator] ++ p)
+ , ("TOPDIR", currdir)
-- Avoid git complaining if it cannot determine the user's
-- email address, or exploding if it doesn't know the user's
-- name.
@@ -1574,11 +1637,9 @@ prepareTestEnv forcedirect = do
, ("FORCEDIRECT", if forcedirect then "1" else "")
]
- return $ M.fromList newenv `M.union` M.fromList env
-
-changeToTmpDir :: TestEnv -> FilePath -> IO ()
-changeToTmpDir env t = do
- let topdir = fromMaybe "" $ M.lookup "TOPDIR" env
+changeToTmpDir :: FilePath -> IO ()
+changeToTmpDir t = do
+ topdir <- Utility.Env.getEnvDefault "TOPDIR" (error "TOPDIR not set")
setCurrentDirectory $ topdir ++ "/" ++ t
tmpdir :: String
diff --git a/Types.hs b/Types.hs
index 8768ed1fe..4d1cde61b 100644
--- a/Types.hs
+++ b/Types.hs
@@ -1,6 +1,6 @@
{- git-annex abstract data types
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Types/Availability.hs b/Types/Availability.hs
index f8c8ea3f3..6956537d2 100644
--- a/Types/Availability.hs
+++ b/Types/Availability.hs
@@ -1,6 +1,6 @@
{- git-annex remote availability
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Types/Backend.hs b/Types/Backend.hs
index c7d962db0..8967f3153 100644
--- a/Types/Backend.hs
+++ b/Types/Backend.hs
@@ -2,7 +2,7 @@
-
- Most things should not need this, using Types instead
-
- - Copyright 2010,2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2010,2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -15,8 +15,16 @@ import Types.KeySource
data BackendA a = Backend
{ name :: String
, getKey :: KeySource -> a (Maybe Key)
+ -- Checks the content of a key.
, fsckKey :: Maybe (Key -> FilePath -> a Bool)
+ -- Checks if a key can be upgraded to a better form.
, canUpgradeKey :: Maybe (Key -> Bool)
+ -- Checks if there is a fast way to migrate a key to a different
+ -- backend (ie, without re-hashing).
+ , fastMigrate :: Maybe (Key -> BackendA a -> AssociatedFile -> Maybe Key)
+ -- Checks if a key is known (or assumed) to always refer to the
+ -- same data.
+ , isStableKey :: Key -> Bool
}
instance Show (BackendA a) where
diff --git a/Types/BranchState.hs b/Types/BranchState.hs
index 2f7948ebb..8c57a223a 100644
--- a/Types/BranchState.hs
+++ b/Types/BranchState.hs
@@ -1,6 +1,6 @@
{- git-annex BranchState data type
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Types/CleanupActions.hs b/Types/CleanupActions.hs
index 498d5b4d7..508579643 100644
--- a/Types/CleanupActions.hs
+++ b/Types/CleanupActions.hs
@@ -1,6 +1,6 @@
{- Enumeration of cleanup actions
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -9,9 +9,12 @@ module Types.CleanupActions where
import Types.UUID
+import Utility.Url
+
data CleanupAction
= RemoteCleanup UUID
| StopHook UUID
| FsckCleanup
| SshCachingCleanup
+ | TorrentCleanup URLString
deriving (Eq, Ord)
diff --git a/Types/Command.hs b/Types/Command.hs
index 0df7c82e6..de6e78038 100644
--- a/Types/Command.hs
+++ b/Types/Command.hs
@@ -1,6 +1,6 @@
{- git-annex command data types
-
- - Copyright 2010-2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -69,6 +69,7 @@ data CommandSection
| SectionMetaData
| SectionUtility
| SectionPlumbing
+ | SectionTesting
deriving (Eq, Ord, Enum, Bounded)
descSection :: CommandSection -> String
@@ -79,3 +80,4 @@ descSection SectionQuery = "Query commands"
descSection SectionMetaData = "Metadata commands"
descSection SectionUtility = "Utility commands"
descSection SectionPlumbing = "Plumbing commands"
+descSection SectionTesting = "Testing commands"
diff --git a/Types/Creds.hs b/Types/Creds.hs
index cb312f66d..ad1827bc9 100644
--- a/Types/Creds.hs
+++ b/Types/Creds.hs
@@ -1,6 +1,6 @@
{- credentials
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -9,4 +9,6 @@ module Types.Creds where
type Creds = String -- can be any data that contains credentials
-type CredPair = (String, String) -- login, password
+type CredPair = (Login, Password)
+type Login = String
+type Password = String -- todo: use securemem
diff --git a/Types/Crypto.hs b/Types/Crypto.hs
index 1a9a7774a..682629d6a 100644
--- a/Types/Crypto.hs
+++ b/Types/Crypto.hs
@@ -1,6 +1,6 @@
{- git-annex crypto types
-
- - Copyright 2011-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -59,10 +59,10 @@ readMac "HMACSHA512" = Just HmacSha512
readMac _ = Nothing
calcMac
- :: Mac -- ^ MAC
- -> L.ByteString -- ^ secret key
- -> L.ByteString -- ^ message
- -> String -- ^ MAC'ed message, in hexadecimals
+ :: Mac -- ^ MAC
+ -> L.ByteString -- ^ secret key
+ -> L.ByteString -- ^ message
+ -> String -- ^ MAC'ed message, in hexadecimal
calcMac mac = case mac of
HmacSha1 -> showDigest $* hmacSha1
HmacSha224 -> showDigest $* hmacSha224
diff --git a/Types/DesktopNotify.hs b/Types/DesktopNotify.hs
new file mode 100644
index 000000000..9ea51401f
--- /dev/null
+++ b/Types/DesktopNotify.hs
@@ -0,0 +1,27 @@
+{- git-annex DesktopNotify type
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Types.DesktopNotify where
+
+import Data.Monoid
+
+data DesktopNotify = DesktopNotify
+ { notifyStart :: Bool
+ , notifyFinish :: Bool
+ }
+ deriving (Show)
+
+instance Monoid DesktopNotify where
+ mempty = DesktopNotify False False
+ mappend (DesktopNotify s1 f1) (DesktopNotify s2 f2) =
+ DesktopNotify (s1 || s2) (f1 || f2)
+
+mkNotifyStart :: DesktopNotify
+mkNotifyStart = DesktopNotify True False
+
+mkNotifyFinish :: DesktopNotify
+mkNotifyFinish = DesktopNotify False True
diff --git a/Types/Difference.hs b/Types/Difference.hs
new file mode 100644
index 000000000..74bac0aca
--- /dev/null
+++ b/Types/Difference.hs
@@ -0,0 +1,89 @@
+{- git-annex repository differences
+ -
+ - Copyright 2015 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Types.Difference (
+ Difference(..),
+ Differences(..),
+ readDifferences,
+ getDifferences,
+ differenceConfigKey,
+ differenceConfigVal,
+ hasDifference,
+ listDifferences,
+) where
+
+import Utility.PartialPrelude
+import qualified Git
+import qualified Git.Config
+
+import Data.Maybe
+import Data.Monoid
+import qualified Data.Set as S
+
+-- Describes differences from the v5 repository format.
+--
+-- The serialization is stored in difference.log, so avoid changes that
+-- would break compatability.
+--
+-- Not breaking compatability is why a list of Differences is used, rather
+-- than a sum type. With a sum type, adding a new field for some future
+-- difference would serialize to a value that an older version could not
+-- parse, even if that new field was not used. With the Differences list,
+-- old versions can still parse it, unless the new Difference constructor
+-- is used.
+--
+-- The constructors intentionally do not have parameters; this is to
+-- ensure that any Difference that can be expressed is supported.
+-- So, a new repository version would be Version6, rather than Version Int.
+data Difference
+ = ObjectHashLower
+ | OneLevelObjectHash
+ | OneLevelBranchHash
+ deriving (Show, Read, Ord, Eq, Enum, Bounded)
+
+data Differences
+ = Differences (S.Set Difference)
+ | UnknownDifferences
+
+instance Eq Differences where
+ Differences a == Differences b = a == b
+ _ == _ = False -- UnknownDifferences cannot be equal
+
+instance Monoid Differences where
+ mempty = Differences S.empty
+ mappend (Differences a) (Differences b) = Differences (S.union a b)
+ mappend _ _ = UnknownDifferences
+
+readDifferences :: String -> Differences
+readDifferences = maybe UnknownDifferences Differences . readish
+
+getDifferences :: Git.Repo -> Differences
+getDifferences r = Differences $ S.fromList $ catMaybes $
+ map getmaybe [minBound .. maxBound]
+ where
+ getmaybe d = case Git.Config.isTrue =<< Git.Config.getMaybe (differenceConfigKey d) r of
+ Just True -> Just d
+ _ -> Nothing
+
+differenceConfigKey :: Difference -> String
+differenceConfigKey ObjectHashLower = tunable "objecthashlower"
+differenceConfigKey OneLevelObjectHash = tunable "objecthash1"
+differenceConfigKey OneLevelBranchHash = tunable "branchhash1"
+
+differenceConfigVal :: Difference -> String
+differenceConfigVal _ = Git.Config.boolConfig True
+
+tunable :: String -> String
+tunable k = "annex.tune." ++ k
+
+hasDifference :: Difference -> Differences -> Bool
+hasDifference d (Differences s) = S.member d s
+hasDifference _ UnknownDifferences = False
+
+listDifferences :: Differences -> [Difference]
+listDifferences (Differences s) = S.toList s
+listDifferences UnknownDifferences = []
diff --git a/Types/Distribution.hs b/Types/Distribution.hs
index 4201f49ad..2a44a1575 100644
--- a/Types/Distribution.hs
+++ b/Types/Distribution.hs
@@ -1,6 +1,6 @@
{- Data type for a distribution of git-annex
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Types/FileMatcher.hs b/Types/FileMatcher.hs
index e2d4eadc1..377bba72a 100644
--- a/Types/FileMatcher.hs
+++ b/Types/FileMatcher.hs
@@ -1,19 +1,42 @@
{- git-annex file matcher types
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Types.FileMatcher where
+import Types.UUID (UUID)
import Types.Key (Key)
+import Utility.Matcher (Matcher, Token)
+
+import qualified Data.Map as M
+import qualified Data.Set as S
data MatchInfo
= MatchingFile FileInfo
| MatchingKey Key
data FileInfo = FileInfo
- { relFile :: FilePath -- may be relative to cwd
- , matchFile :: FilePath -- filepath to match on; may be relative to top
+ { currFile :: FilePath
+ -- ^ current path to the file, for operations that examine it
+ , matchFile :: FilePath
+ -- ^ filepath to match on; may be relative to top of repo or cwd
}
+
+type FileMatcherMap a = M.Map UUID (Utility.Matcher.Matcher (S.Set UUID -> MatchInfo -> a Bool))
+
+type MkLimit a = String -> Either String (MatchFiles a)
+
+type AssumeNotPresent = S.Set UUID
+
+type MatchFiles a = AssumeNotPresent -> MatchInfo -> a Bool
+
+type FileMatcher a = Matcher (MatchFiles a)
+
+-- This is a matcher that can have tokens added to it while it's being
+-- built, and once complete is compiled to an unchangable matcher.
+data ExpandableMatcher a
+ = BuildingMatcher [Token (MatchInfo -> a Bool)]
+ | CompleteMatcher (Matcher (MatchInfo -> a Bool))
diff --git a/Types/GitConfig.hs b/Types/GitConfig.hs
index b49f3d762..c0043ec04 100644
--- a/Types/GitConfig.hs
+++ b/Types/GitConfig.hs
@@ -1,6 +1,6 @@
{- git-annex configuration
-
- - Copyright 2012-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -15,11 +15,13 @@ module Types.GitConfig (
import Common
import qualified Git
import qualified Git.Config
+import qualified Git.Construct
import Utility.DataUnits
import Config.Cost
import Types.Distribution
import Types.Availability
import Types.NumCopies
+import Types.Difference
import Utility.HumanTime
{- Main git-annex settings. Each setting corresponds to a git-config key
@@ -42,6 +44,7 @@ data GitConfig = GitConfig
, annexDebug :: Bool
, annexWebOptions :: [String]
, annexQuviOptions :: [String]
+ , annexAriaTorrentOptions :: [String]
, annexWebDownloadCommand :: Maybe String
, annexCrippledFileSystem :: Bool
, annexLargeFiles :: Maybe String
@@ -52,8 +55,10 @@ data GitConfig = GitConfig
, annexGenMetaData :: Bool
, annexListen :: Maybe String
, annexStartupScan :: Bool
+ , annexHardLink :: Bool
, coreSymlinks :: Bool
, gcryptId :: Maybe String
+ , annexDifferences :: Differences
}
extractGitConfig :: Git.Repo -> GitConfig
@@ -76,6 +81,7 @@ extractGitConfig r = GitConfig
, annexDebug = getbool (annex "debug") False
, annexWebOptions = getwords (annex "web-options")
, annexQuviOptions = getwords (annex "quvi-options")
+ , annexAriaTorrentOptions = getwords (annex "aria-torrent-options")
, annexWebDownloadCommand = getmaybe (annex "web-download-command")
, annexCrippledFileSystem = getbool (annex "crippledfilesystem") False
, annexLargeFiles = getmaybe (annex "largefiles")
@@ -87,11 +93,13 @@ extractGitConfig r = GitConfig
, annexGenMetaData = getbool (annex "genmetadata") False
, annexListen = getmaybe (annex "listen")
, annexStartupScan = getbool (annex "startupscan") True
+ , annexHardLink = getbool (annex "hardlink") False
, coreSymlinks = getbool "core.symlinks" True
, gcryptId = getmaybe "core.gcrypt-id"
+ , annexDifferences = getDifferences r
}
where
- getbool k def = fromMaybe def $ getmaybebool k
+ getbool k d = fromMaybe d $ getmaybebool k
getmaybebool k = Git.Config.isTrue =<< getmaybe k
getmayberead k = readish =<< getmaybe k
getmaybe k = Git.Config.getMaybe k r
@@ -119,6 +127,7 @@ data RemoteGitConfig = RemoteGitConfig
{- These settings are specific to particular types of remotes
- including special remotes. -}
+ , remoteAnnexShell :: Maybe String
, remoteAnnexSshOptions :: [String]
, remoteAnnexRsyncOptions :: [String]
, remoteAnnexRsyncUploadOptions :: [String]
@@ -131,6 +140,7 @@ data RemoteGitConfig = RemoteGitConfig
, remoteAnnexBupSplitOptions :: [String]
, remoteAnnexDirectory :: Maybe FilePath
, remoteAnnexGCrypt :: Maybe String
+ , remoteAnnexDdarRepo :: Maybe String
, remoteAnnexHookType :: Maybe String
, remoteAnnexExternalType :: Maybe String
{- A regular git remote's git repository config. -}
@@ -150,6 +160,7 @@ extractRemoteGitConfig r remotename = RemoteGitConfig
, remoteAnnexAvailability = getmayberead "availability"
, remoteAnnexBare = getmaybebool "bare"
+ , remoteAnnexShell = getmaybe "shell"
, remoteAnnexSshOptions = getoptions "ssh-options"
, remoteAnnexRsyncOptions = getoptions "rsync-options"
, remoteAnnexRsyncDownloadOptions = getoptions "rsync-download-options"
@@ -162,12 +173,13 @@ extractRemoteGitConfig r remotename = RemoteGitConfig
, remoteAnnexBupSplitOptions = getoptions "bup-split-options"
, remoteAnnexDirectory = notempty $ getmaybe "directory"
, remoteAnnexGCrypt = notempty $ getmaybe "gcrypt"
+ , remoteAnnexDdarRepo = getmaybe "ddarrepo"
, remoteAnnexHookType = notempty $ getmaybe "hooktype"
, remoteAnnexExternalType = notempty $ getmaybe "externaltype"
, remoteGitConfig = Nothing
}
where
- getbool k def = fromMaybe def $ getmaybebool k
+ getbool k d = fromMaybe d $ getmaybebool k
getmaybebool k = Git.Config.isTrue =<< getmaybe k
getmayberead k = readish =<< getmaybe k
getmaybe k = mplus (Git.Config.getMaybe (key k) r)
@@ -182,3 +194,5 @@ notempty Nothing = Nothing
notempty (Just "") = Nothing
notempty (Just s) = Just s
+instance Default RemoteGitConfig where
+ def = extractRemoteGitConfig Git.Construct.fromUnknown "dummy"
diff --git a/Types/Group.hs b/Types/Group.hs
index 88bc35207..2695670ab 100644
--- a/Types/Group.hs
+++ b/Types/Group.hs
@@ -1,6 +1,6 @@
{- git-annex repo groups
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Types/Key.hs b/Types/Key.hs
index 26af6220f..037437303 100644
--- a/Types/Key.hs
+++ b/Types/Key.hs
@@ -2,7 +2,7 @@
-
- Most things should not need this, using Types instead
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -13,6 +13,9 @@ module Types.Key (
stubKey,
key2file,
file2key,
+ nonChunkKey,
+ chunkKeyOffset,
+ isChunkKey,
prop_idempotent_key_encode,
prop_idempotent_key_decode
@@ -30,6 +33,8 @@ data Key = Key
, keyBackendName :: String
, keySize :: Maybe Integer
, keyMtime :: Maybe EpochTime
+ , keyChunkSize :: Maybe Integer
+ , keyChunkNum :: Maybe Integer
} deriving (Eq, Ord, Read, Show)
{- A filename may be associated with a Key. -}
@@ -41,8 +46,26 @@ stubKey = Key
, keyBackendName = ""
, keySize = Nothing
, keyMtime = Nothing
+ , keyChunkSize = Nothing
+ , keyChunkNum = Nothing
}
+-- Gets the parent of a chunk key.
+nonChunkKey :: Key -> Key
+nonChunkKey k = k
+ { keyChunkSize = Nothing
+ , keyChunkNum = Nothing
+ }
+
+-- Where a chunk key is offset within its parent.
+chunkKeyOffset :: Key -> Maybe Integer
+chunkKeyOffset k = (*)
+ <$> keyChunkSize k
+ <*> (pred <$> keyChunkNum k)
+
+isChunkKey :: Key -> Bool
+isChunkKey k = isJust (keyChunkSize k) && isJust (keyChunkNum k)
+
fieldSep :: Char
fieldSep = '-'
@@ -50,13 +73,13 @@ fieldSep = '-'
- The name field is always shown last, separated by doubled fieldSeps,
- and is the only field allowed to contain the fieldSep. -}
key2file :: Key -> FilePath
-key2file Key { keyBackendName = b, keySize = s, keyMtime = m, keyName = n } =
- b +++ ('s' ?: s) +++ ('m' ?: m) +++ (fieldSep : n)
+key2file Key { keyBackendName = b, keySize = s, keyMtime = m, keyChunkSize = cs, keyChunkNum = cn, keyName = n } =
+ b +++ ('s' ?: s) +++ ('m' ?: m) +++ ('S' ?: cs) +++ ('C' ?: cn) +++ (fieldSep : n)
where
"" +++ y = y
x +++ "" = x
x +++ y = x ++ fieldSep:y
- c ?: (Just v) = c : show v
+ f ?: (Just v) = f : show v
_ ?: _ = ""
file2key :: FilePath -> Maybe Key
@@ -84,6 +107,13 @@ file2key s
addfield 'm' k v = do
mtime <- readish v
return $ k { keyMtime = Just mtime }
+ addfield 'S' k v = do
+ chunksize <- readish v
+ return $ k { keyChunkSize = Just chunksize }
+ addfield 'C' k v = case readish v of
+ Just chunknum | chunknum > 0 ->
+ return $ k { keyChunkNum = Just chunknum }
+ _ -> return k
addfield _ _ _ = Nothing
instance Arbitrary Key where
@@ -92,6 +122,8 @@ instance Arbitrary Key where
<*> (listOf1 $ elements ['A'..'Z']) -- BACKEND
<*> ((abs <$>) <$> arbitrary) -- size cannot be negative
<*> arbitrary
+ <*> ((abs <$>) <$> arbitrary) -- chunksize cannot be negative
+ <*> ((succ . abs <$>) <$> arbitrary) -- chunknum cannot be 0 or negative
prop_idempotent_key_encode :: Key -> Bool
prop_idempotent_key_encode k = Just k == (file2key . key2file) k
@@ -101,8 +133,8 @@ prop_idempotent_key_decode f
| normalfieldorder = maybe True (\k -> key2file k == f) (file2key f)
| otherwise = True
where
- -- file2key will accept the fields in any order, so don't
+ -- file2key will accept the fields in any order, so don't
-- try the test unless the fields are in the normal order
- normalfieldorder = fields `isPrefixOf` "sm"
+ normalfieldorder = fields `isPrefixOf` "smSC"
fields = map (f !!) $ filter (< length f) $ map succ $
elemIndices fieldSep f
diff --git a/Types/KeySource.hs b/Types/KeySource.hs
index fd4af07a6..7c2fd13d5 100644
--- a/Types/KeySource.hs
+++ b/Types/KeySource.hs
@@ -1,6 +1,6 @@
{- KeySource data type
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Types/Limit.hs b/Types/Limit.hs
deleted file mode 100644
index 2b009a758..000000000
--- a/Types/Limit.hs
+++ /dev/null
@@ -1,20 +0,0 @@
-{- types for limits
- -
- - Copyright 2013 Joey Hess <joey@kitenet.net>
- -
- - Licensed under the GNU GPL version 3 or higher.
- -}
-
-{-# LANGUAGE CPP #-}
-
-module Types.Limit where
-
-import Common.Annex
-import Types.FileMatcher
-
-import qualified Data.Set as S
-
-type MkLimit = String -> Either String MatchFiles
-
-type AssumeNotPresent = S.Set UUID
-type MatchFiles = AssumeNotPresent -> MatchInfo -> Annex Bool
diff --git a/Types/LockPool.hs b/Types/LockPool.hs
index dd392f28b..803822042 100644
--- a/Types/LockPool.hs
+++ b/Types/LockPool.hs
@@ -1,24 +1,16 @@
{- git-annex lock pool data types
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
-{-# LANGUAGE CPP #-}
-
module Types.LockPool (
LockPool,
LockHandle
) where
import qualified Data.Map as M
-
-#ifndef mingw32_HOST_OS
-import System.Posix.Types (Fd)
-type LockHandle = Fd
-#else
-import Utility.WinLock -- defines LockHandle
-#endif
+import Utility.LockFile
type LockPool = M.Map FilePath LockHandle
diff --git a/Types/Messages.hs b/Types/Messages.hs
index 4fcce79f8..224c2fe87 100644
--- a/Types/Messages.hs
+++ b/Types/Messages.hs
@@ -1,14 +1,12 @@
{- git-annex Messages data types
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Types.Messages where
-import qualified Data.Set as S
-
data OutputType = NormalOutput | QuietOutput | JSONOutput
data SideActionBlock = NoBlock | StartBlock | InBlock
@@ -17,8 +15,7 @@ data SideActionBlock = NoBlock | StartBlock | InBlock
data MessageState = MessageState
{ outputType :: OutputType
, sideActionBlock :: SideActionBlock
- , fileNotFoundShown :: S.Set FilePath
}
defaultMessageState :: MessageState
-defaultMessageState = MessageState NormalOutput NoBlock S.empty
+defaultMessageState = MessageState NormalOutput NoBlock
diff --git a/Types/MetaData.hs b/Types/MetaData.hs
index 706d037bc..2a6b3b864 100644
--- a/Types/MetaData.hs
+++ b/Types/MetaData.hs
@@ -1,6 +1,6 @@
{- git-annex general metadata
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -264,7 +264,9 @@ parseMetaData p = (,)
instance Arbitrary MetaData where
arbitrary = do
size <- arbitrarySizedBoundedIntegral `suchThat` (< 500)
- MetaData . M.fromList <$> vector size
+ MetaData . M.filterWithKey legal . M.fromList <$> vector size
+ where
+ legal k _v = legalField $ fromMetaField k
instance Arbitrary MetaValue where
arbitrary = MetaValue <$> arbitrary <*> arbitrary
@@ -288,4 +290,4 @@ prop_metadata_serialize f v m = and
, deserialize (serialize m') == Just m'
]
where
- m' = removeEmptyFields m
+ m' = removeEmptyFields m
diff --git a/Types/NumCopies.hs b/Types/NumCopies.hs
index b93fcf968..d8ea31e69 100644
--- a/Types/NumCopies.hs
+++ b/Types/NumCopies.hs
@@ -1,6 +1,6 @@
{- git-annex numcopies type
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Types/Option.hs b/Types/Option.hs
index 036257838..f3b5ca9e1 100644
--- a/Types/Option.hs
+++ b/Types/Option.hs
@@ -1,6 +1,6 @@
{- git-annex command options
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Types/Remote.hs b/Types/Remote.hs
index 2ddb68dfb..5df08c775 100644
--- a/Types/Remote.hs
+++ b/Types/Remote.hs
@@ -2,7 +2,7 @@
-
- Most things should not need this, using Types instead
-
- - Copyright 2011-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -25,10 +25,12 @@ import Types.UUID
import Types.GitConfig
import Types.Availability
import Types.Creds
+import Types.UrlContents
import Config.Cost
import Utility.Metered
import Git.Types
import Utility.SafeCommand
+import Utility.Url
type RemoteConfigKey = String
type RemoteConfig = M.Map RemoteConfigKey String
@@ -56,7 +58,9 @@ data RemoteA a = Remote {
name :: RemoteName,
-- Remotes have a use cost; higher is more expensive
cost :: Cost,
- -- Transfers a key to the remote.
+ -- Transfers a key's contents from disk to the remote.
+ -- The key should not appear to be present on the remote until
+ -- all of its contents have been transferred.
storeKey :: Key -> AssociatedFile -> MeterUpdate -> a Bool,
-- Retrieves a key's contents to a file.
-- (The MeterUpdate does not need to be used if it retrieves
@@ -64,14 +68,14 @@ data RemoteA a = Remote {
retrieveKeyFile :: Key -> AssociatedFile -> FilePath -> MeterUpdate -> a Bool,
-- retrieves a key's contents to a tmp file, if it can be done cheaply
retrieveKeyFileCheap :: Key -> FilePath -> a Bool,
- -- removes a key's contents
+ -- removes a key's contents (succeeds if the contents are not present)
removeKey :: Key -> a Bool,
- -- Checks if a key is present in the remote; if the remote
- -- cannot be accessed returns a Left error message.
- hasKey :: Key -> a (Either String Bool),
- -- Some remotes can check hasKey without an expensive network
+ -- Checks if a key is present in the remote.
+ -- Throws an exception if the remote cannot be accessed.
+ checkPresent :: Key -> a Bool,
+ -- Some remotes can checkPresent without an expensive network
-- operation.
- hasKeyCheap :: Bool,
+ checkPresentCheap :: Bool,
-- Some remotes can provide additional details for whereis.
whereisKey :: Maybe (Key -> a [String]),
-- Some remotes can run a fsck operation on the remote,
@@ -93,7 +97,18 @@ data RemoteA a = Remote {
-- a Remote can be globally available. (Ie, "in the cloud".)
availability :: Availability,
-- the type of the remote
- remotetype :: RemoteTypeA a
+ remotetype :: RemoteTypeA a,
+ -- For testing, makes a version of this remote that is not
+ -- available for use. All its actions should fail.
+ mkUnavailable :: a (Maybe (RemoteA a)),
+ -- Information about the remote, for git annex info to display.
+ getInfo :: a [(String, String)],
+ -- Some remotes can download from an url (or uri).
+ claimUrl :: Maybe (URLString -> a Bool),
+ -- Checks that the url is accessible, and gets information about
+ -- its contents, without downloading the full content.
+ -- Throws an exception if the url is inaccessible.
+ checkUrl :: Maybe (URLString -> a UrlContents)
}
instance Show (RemoteA a) where
diff --git a/Types/ScheduledActivity.hs b/Types/ScheduledActivity.hs
index b683409ce..f4f80635b 100644
--- a/Types/ScheduledActivity.hs
+++ b/Types/ScheduledActivity.hs
@@ -1,6 +1,6 @@
{- git-annex scheduled activities
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -17,7 +17,7 @@ import Data.Either
data ScheduledActivity
= ScheduledSelfFsck Schedule Duration
| ScheduledRemoteFsck UUID Schedule Duration
- deriving (Eq, Read, Show, Ord)
+ deriving (Eq, Read, Show, Ord)
{- Activities that run on a remote, within a time window, so
- should be run when the remote gets connected. -}
diff --git a/Types/StandardGroups.hs b/Types/StandardGroups.hs
index 37ba6e9c6..83e612917 100644
--- a/Types/StandardGroups.hs
+++ b/Types/StandardGroups.hs
@@ -1,6 +1,6 @@
{- git-annex standard repository groups
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -96,7 +96,7 @@ standardPreferredContent UnwantedGroup = "exclude=*"
notArchived :: String
notArchived = "not (copies=archive:1 or copies=smallarchive:1)"
-
+
{- Most repositories want any content that is only on untrusted
- or dead repositories, or that otherwise does not have enough copies.
- Does not look at .gitattributes since that is quite a lot slower.
diff --git a/Types/StoreRetrieve.hs b/Types/StoreRetrieve.hs
new file mode 100644
index 000000000..13710fba2
--- /dev/null
+++ b/Types/StoreRetrieve.hs
@@ -0,0 +1,43 @@
+{- Types for Storer and Retriever actions for remotes.
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Types.StoreRetrieve where
+
+import Common.Annex
+import Utility.Metered
+
+import qualified Data.ByteString.Lazy as L
+
+-- Prepares for and then runs an action that will act on a Key's
+-- content, passing it a helper when the preparation is successful.
+type Preparer helper = Key -> (Maybe helper -> Annex Bool) -> Annex Bool
+
+-- A source of a Key's content.
+data ContentSource
+ = FileContent FilePath
+ | ByteContent L.ByteString
+
+isByteContent :: ContentSource -> Bool
+isByteContent (ByteContent _) = True
+isByteContent (FileContent _) = False
+
+-- Action that stores a Key's content on a remote.
+-- Can throw exceptions.
+type Storer = Key -> ContentSource -> MeterUpdate -> Annex Bool
+
+-- Action that retrieves a Key's content from a remote, passing it to a
+-- callback, which will fully consume the content before returning.
+-- Throws exception if key is not present, or remote is not accessible.
+type Retriever = Key -> MeterUpdate -> (ContentSource -> Annex Bool) -> Annex Bool
+
+-- Action that removes a Key's content from a remote.
+-- Succeeds if key is already not present; never throws exceptions.
+type Remover = Key -> Annex Bool
+
+-- Checks if a Key's content is present on a remote.
+-- Throws an exception if the remote is not accessible.
+type CheckPresent = Key -> Annex Bool
diff --git a/Types/TrustLevel.hs b/Types/TrustLevel.hs
index a72dbb8c6..1cc4c662e 100644
--- a/Types/TrustLevel.hs
+++ b/Types/TrustLevel.hs
@@ -1,6 +1,6 @@
{- git-annex trust levels
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -14,6 +14,7 @@ module Types.TrustLevel (
) where
import qualified Data.Map as M
+import Data.Default
import Types.UUID
@@ -22,6 +23,9 @@ import Types.UUID
data TrustLevel = Trusted | SemiTrusted | UnTrusted | DeadTrusted
deriving (Eq, Enum, Ord, Bounded)
+instance Default TrustLevel where
+ def = SemiTrusted
+
type TrustMap = M.Map UUID TrustLevel
readTrustLevel :: String -> Maybe TrustLevel
diff --git a/Types/UUID.hs b/Types/UUID.hs
index 8a304dffa..de7ddd65d 100644
--- a/Types/UUID.hs
+++ b/Types/UUID.hs
@@ -1,6 +1,6 @@
{- git-annex UUID type
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -8,6 +8,8 @@
module Types.UUID where
import qualified Data.Map as M
+import qualified Data.UUID as U
+import Data.Maybe
-- A UUID is either an arbitrary opaque string, or UUID info may be missing.
data UUID = NoUUID | UUID String
@@ -21,4 +23,7 @@ toUUID :: String -> UUID
toUUID [] = NoUUID
toUUID s = UUID s
+isUUID :: String -> Bool
+isUUID = isJust . U.fromString
+
type UUIDMap = M.Map UUID String
diff --git a/Types/UrlContents.hs b/Types/UrlContents.hs
new file mode 100644
index 000000000..411c3ae42
--- /dev/null
+++ b/Types/UrlContents.hs
@@ -0,0 +1,47 @@
+{- git-annex URL contents
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Types.UrlContents (
+ UrlContents(..),
+ SafeFilePath,
+ mkSafeFilePath,
+ fromSafeFilePath
+) where
+
+import Utility.Url
+import Utility.Path
+
+import System.FilePath
+
+data UrlContents
+ -- An URL contains a file, whose size may be known.
+ -- There might be a nicer filename to use.
+ = UrlContents (Maybe Integer) (Maybe SafeFilePath)
+ -- Sometimes an URL points to multiple files, each accessible
+ -- by their own URL.
+ | UrlMulti [(URLString, Maybe Integer, SafeFilePath)]
+
+-- This is a FilePath, from an untrusted source,
+-- sanitized so it doesn't contain any directory traversal tricks
+-- and is always relative. It can still contain subdirectories.
+-- Any unusual characters are also filtered out.
+newtype SafeFilePath = SafeFilePath FilePath
+ deriving (Show)
+
+mkSafeFilePath :: FilePath -> SafeFilePath
+mkSafeFilePath p = SafeFilePath $ if null p' then "file" else p'
+ where
+ p' = joinPath $ filter safe $ map sanitizeFilePath $ splitDirectories p
+ safe s
+ | isDrive s = False
+ | s == ".." = False
+ | s == ".git" = False
+ | null s = False
+ | otherwise = True
+
+fromSafeFilePath :: SafeFilePath -> FilePath
+fromSafeFilePath (SafeFilePath p) = p
diff --git a/Types/View.hs b/Types/View.hs
index 43afdb8c8..0426ba977 100644
--- a/Types/View.hs
+++ b/Types/View.hs
@@ -1,6 +1,6 @@
{- types for metadata based branch views
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Upgrade.hs b/Upgrade.hs
index 8566f0d5d..8d205a874 100644
--- a/Upgrade.hs
+++ b/Upgrade.hs
@@ -1,6 +1,6 @@
{- git-annex upgrade support
-
- - Copyright 2010, 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010, 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Upgrade/V0.hs b/Upgrade/V0.hs
index 00a08cb45..b3486f864 100644
--- a/Upgrade/V0.hs
+++ b/Upgrade/V0.hs
@@ -1,6 +1,6 @@
{- git-annex v0 -> v1 upgrade support
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Upgrade/V1.hs b/Upgrade/V1.hs
index 8af4848a1..801cdafa0 100644
--- a/Upgrade/V1.hs
+++ b/Upgrade/V1.hs
@@ -1,6 +1,6 @@
{- git-annex v1 -> v2 upgrade support
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -9,6 +9,7 @@ module Upgrade.V1 where
import System.Posix.Types
import Data.Char
+import Data.Default
import Common.Annex
import Types.Key
@@ -92,7 +93,7 @@ updateSymlinks = do
case r of
Nothing -> noop
Just (k, _) -> do
- link <- inRepo $ gitAnnexLink f k
+ link <- calcRepo $ gitAnnexLink f k
liftIO $ removeFile f
liftIO $ createSymbolicLink link f
Annex.Queue.addCommand "add" [Param "--"] [f]
@@ -144,7 +145,7 @@ oldlog2key l
readKey1 :: String -> Key
readKey1 v
| mixup = fromJust $ file2key $ intercalate ":" $ Prelude.tail bits
- | otherwise = Key
+ | otherwise = stubKey
{ keyName = n
, keyBackendName = b
, keySize = s
@@ -228,7 +229,7 @@ logFile1 :: Git.Repo -> Key -> String
logFile1 repo key = Upgrade.V2.gitStateDir repo ++ keyFile1 key ++ ".log"
logFile2 :: Key -> Git.Repo -> String
-logFile2 = logFile' hashDirLower
+logFile2 = logFile' (hashDirLower def)
logFile' :: (Key -> FilePath) -> Key -> Git.Repo -> String
logFile' hasher key repo =
diff --git a/Upgrade/V2.hs b/Upgrade/V2.hs
index 0672de8b6..0f09205ff 100644
--- a/Upgrade/V2.hs
+++ b/Upgrade/V2.hs
@@ -1,6 +1,6 @@
{- git-annex v2 -> v3 upgrade support
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -12,6 +12,7 @@ import qualified Git
import qualified Git.Command
import qualified Git.Ref
import qualified Annex.Branch
+import qualified Annex
import Annex.Content
import Utility.Tmp
import Logs
@@ -47,7 +48,8 @@ upgrade = do
e <- liftIO $ doesDirectoryExist old
when e $ do
- mapM_ (\(k, f) -> inject f $ locationLogFile k) =<< locationLogs
+ config <- Annex.getGitConfig
+ mapM_ (\(k, f) -> inject f $ locationLogFile config k) =<< locationLogs
mapM_ (\f -> inject f f) =<< logFiles old
saveState False
diff --git a/Upgrade/V3.hs b/Upgrade/V3.hs
index 38f700cf8..8d873a6ce 100644
--- a/Upgrade/V3.hs
+++ b/Upgrade/V3.hs
@@ -2,7 +2,7 @@
-
- There was no explicit v3 to v4 upgrade, so run v5 upgrade code.
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Upgrade/V4.hs b/Upgrade/V4.hs
index dad073d0b..cb1643ffd 100644
--- a/Upgrade/V4.hs
+++ b/Upgrade/V4.hs
@@ -1,6 +1,6 @@
{- git-annex v4 -> v5 uppgrade support
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/Utility/Applicative.hs b/Utility/Applicative.hs
index 64400c801..fce3c0485 100644
--- a/Utility/Applicative.hs
+++ b/Utility/Applicative.hs
@@ -1,8 +1,8 @@
{- applicative stuff
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.Applicative where
diff --git a/Utility/Base64.hs b/Utility/Base64.hs
index 0c6c8677a..56637a117 100644
--- a/Utility/Base64.hs
+++ b/Utility/Base64.hs
@@ -1,8 +1,8 @@
{- Simple Base64 access
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.Base64 (toB64, fromB64Maybe, fromB64) where
diff --git a/Utility/Batch.hs b/Utility/Batch.hs
index 3f21478cf..d96f9d3f3 100644
--- a/Utility/Batch.hs
+++ b/Utility/Batch.hs
@@ -1,8 +1,8 @@
{- Running a long or expensive batch operation niced.
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
@@ -16,7 +16,6 @@ import Control.Concurrent.Async
import System.Posix.Process
#endif
import qualified Control.Exception as E
-import System.Process (env)
{- Runs an operation, at batch priority.
-
@@ -33,7 +32,7 @@ batch :: IO a -> IO a
#if defined(linux_HOST_OS) || defined(__ANDROID__)
batch a = wait =<< batchthread
where
- batchthread = asyncBound $ do
+ batchthread = asyncBound $ do
setProcessPriority 0 maxNice
a
#else
diff --git a/Utility/Bloom.hs b/Utility/Bloom.hs
new file mode 100644
index 000000000..aee760a1d
--- /dev/null
+++ b/Utility/Bloom.hs
@@ -0,0 +1,60 @@
+{- bloomfilter compatability wrapper
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - License: BSD-2-clause
+ -}
+
+{-# LANGUAGE CPP #-}
+
+module Utility.Bloom (
+ Bloom,
+ safeSuggestSizing,
+ Hashable,
+ cheapHashes,
+ notElemB,
+
+ newMB,
+ insertMB,
+ unsafeFreezeMB,
+) where
+
+#if MIN_VERSION_bloomfilter(2,0,0)
+import qualified Data.BloomFilter.Mutable as MBloom
+import qualified Data.BloomFilter as Bloom
+#else
+import qualified Data.BloomFilter as Bloom
+#endif
+import Data.BloomFilter.Easy (safeSuggestSizing, Bloom)
+import Data.BloomFilter.Hash (Hashable, cheapHashes)
+import Control.Monad.ST.Safe (ST)
+
+#if MIN_VERSION_bloomfilter(2,0,0)
+
+notElemB :: a -> Bloom a -> Bool
+notElemB = Bloom.notElem
+
+newMB :: (a -> [Bloom.Hash]) -> Int -> ST s (MBloom.MBloom s a)
+newMB = MBloom.new
+
+insertMB :: MBloom.MBloom s a -> a -> ST s ()
+insertMB = MBloom.insert
+
+unsafeFreezeMB :: MBloom.MBloom s a -> ST s (Bloom a)
+unsafeFreezeMB = Bloom.unsafeFreeze
+
+#else
+
+notElemB :: a -> Bloom a -> Bool
+notElemB = Bloom.notElemB
+
+newMB :: (a -> [Bloom.Hash]) -> Int -> ST s (Bloom.MBloom s a)
+newMB = Bloom.newMB
+
+insertMB :: Bloom.MBloom s a -> a -> ST s ()
+insertMB = Bloom.insertMB
+
+unsafeFreezeMB :: Bloom.MBloom s a -> ST s (Bloom a)
+unsafeFreezeMB = Bloom.unsafeFreezeMB
+
+#endif
diff --git a/Utility/CoProcess.hs b/Utility/CoProcess.hs
index c1134011b..9854b47fc 100644
--- a/Utility/CoProcess.hs
+++ b/Utility/CoProcess.hs
@@ -1,9 +1,9 @@
{- Interface for running a shell command as a coprocess,
- sending it queries and getting back results.
-
- - Copyright 2012-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2013 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
@@ -37,8 +37,8 @@ data CoProcessSpec = CoProcessSpec
}
start :: Int -> FilePath -> [String] -> Maybe [(String, String)] -> IO CoProcessHandle
-start numrestarts cmd params env = do
- s <- start' $ CoProcessSpec numrestarts cmd params env
+start numrestarts cmd params environ = do
+ s <- start' $ CoProcessSpec numrestarts cmd params environ
newMVar s
start' :: CoProcessSpec -> IO CoProcessState
@@ -62,10 +62,10 @@ query ch send receive = do
s <- readMVar ch
restartable s (send $ coProcessTo s) $ const $
restartable s (hFlush $ coProcessTo s) $ const $
- restartable s (receive $ coProcessFrom s) $
+ restartable s (receive $ coProcessFrom s)
return
where
- restartable s a cont
+ restartable s a cont
| coProcessNumRestarts (coProcessSpec s) > 0 =
maybe restart cont =<< catchMaybeIO a
| otherwise = cont =<< a
@@ -87,7 +87,7 @@ rawMode ch = do
raw $ coProcessTo s
return ch
where
- raw h = do
+ raw h = do
fileEncoding h
#ifdef mingw32_HOST_OS
hSetNewlineMode h noNewlineTranslation
diff --git a/Utility/CopyFile.hs b/Utility/CopyFile.hs
index 4a609fd16..b123d006d 100644
--- a/Utility/CopyFile.hs
+++ b/Utility/CopyFile.hs
@@ -1,24 +1,28 @@
{- file copying
-
- - Copyright 2010-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2014 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
module Utility.CopyFile (
copyFileExternal,
- createLinkOrCopy
+ createLinkOrCopy,
+ CopyMetaData(..)
) where
import Common
import qualified Build.SysConfig as SysConfig
+data CopyMetaData = CopyTimeStamps | CopyAllMetaData
+ deriving (Eq)
+
{- The cp command is used, because I hate reinventing the wheel,
- and because this allows easy access to features like cp --reflink. -}
-copyFileExternal :: FilePath -> FilePath -> IO Bool
-copyFileExternal src dest = do
+copyFileExternal :: CopyMetaData -> FilePath -> FilePath -> IO Bool
+copyFileExternal meta src dest = do
whenM (doesFileExist dest) $
removeFile dest
boolSystem "cp" $ params ++ [File src, File dest]
@@ -26,12 +30,16 @@ copyFileExternal src dest = do
#ifndef __ANDROID__
params = map snd $ filter fst
[ (SysConfig.cp_reflink_auto, Param "--reflink=auto")
- , (SysConfig.cp_a, Param "-a")
- , (SysConfig.cp_p && not SysConfig.cp_a, Param "-p")
+ , (allmeta && SysConfig.cp_a, Param "-a")
+ , (allmeta && SysConfig.cp_p && not SysConfig.cp_a
+ , Param "-p")
+ , (not allmeta && SysConfig.cp_preserve_timestamps
+ , Param "--preserve=timestamps")
]
#else
params = []
#endif
+ allmeta = meta == CopyAllMetaData
{- Create a hard link if the filesystem allows it, and fall back to copying
- the file. -}
@@ -39,10 +47,10 @@ createLinkOrCopy :: FilePath -> FilePath -> IO Bool
#ifndef mingw32_HOST_OS
createLinkOrCopy src dest = go `catchIO` const fallback
where
- go = do
+ go = do
createLink src dest
return True
- fallback = copyFileExternal src dest
+ fallback = copyFileExternal CopyAllMetaData src dest
#else
-createLinkOrCopy = copyFileExternal
+createLinkOrCopy = copyFileExternal CopyAllMetaData
#endif
diff --git a/Utility/DBus.hs b/Utility/DBus.hs
index 3523a3aa3..5b0470301 100644
--- a/Utility/DBus.hs
+++ b/Utility/DBus.hs
@@ -1,14 +1,15 @@
{- DBus utilities
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE OverloadedStrings, ScopedTypeVariables #-}
module Utility.DBus where
+import Utility.PartialPrelude
import Utility.Exception
import DBus.Client
@@ -22,7 +23,7 @@ type ServiceName = String
listServiceNames :: Client -> IO [ServiceName]
listServiceNames client = do
reply <- callDBus client "ListNames" []
- return $ fromMaybe [] $ fromVariant (methodReturnBody reply !! 0)
+ return $ fromMaybe [] $ fromVariant =<< headMaybe (methodReturnBody reply)
callDBus :: Client -> MemberName -> [Variant] -> IO MethodReturn
callDBus client name params = call_ client $
diff --git a/Utility/Daemon.hs b/Utility/Daemon.hs
index 11aa57686..d7f0407be 100644
--- a/Utility/Daemon.hs
+++ b/Utility/Daemon.hs
@@ -1,8 +1,8 @@
{- daemon support
-
- - Copyright 2012-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
@@ -15,7 +15,7 @@ import Utility.PID
import Utility.LogFile
#else
import Utility.WinProcess
-import Utility.WinLock
+import Utility.LockFile
#endif
#ifndef mingw32_HOST_OS
@@ -36,10 +36,10 @@ daemonize logfd pidfile changedirectory a = do
_ <- forkProcess child1
out
where
- checkalreadyrunning f = maybe noop (const $ alreadyRunning)
+ checkalreadyrunning f = maybe noop (const alreadyRunning)
=<< checkDaemon f
child1 = do
- _ <- createSession
+ _ <- tryIO createSession
_ <- forkProcess child2
out
child2 = do
@@ -49,13 +49,33 @@ daemonize logfd pidfile changedirectory a = do
nullfd <- openFd "/dev/null" ReadOnly Nothing defaultFileFlags
redir nullfd stdInput
redirLog logfd
- {- forkProcess masks async exceptions; unmask them inside
- - the action. -}
+ {- In old versions of ghc, forkProcess masks async exceptions;
+ - unmask them inside the action. -}
wait =<< asyncWithUnmask (\unmask -> unmask a)
out
out = exitImmediately ExitSuccess
#endif
+{- To run an action that is normally daemonized in the forground. -}
+#ifndef mingw32_HOST_OS
+foreground :: Fd -> Maybe FilePath -> IO () -> IO ()
+foreground logfd pidfile a = do
+#else
+foreground :: Maybe FilePath -> IO () -> IO ()
+foreground pidfile a = do
+#endif
+ maybe noop lockPidFile pidfile
+#ifndef mingw32_HOST_OS
+ _ <- tryIO createSession
+ redirLog logfd
+#endif
+ a
+#ifndef mingw32_HOST_OS
+ exitImmediately ExitSuccess
+#else
+ exitWith ExitSuccess
+#endif
+
{- Locks the pid file, with an exclusive, non-blocking lock,
- and leaves it locked on return.
-
@@ -153,7 +173,7 @@ winLockFile pid pidfile = do
cleanstale
return $ prefix ++ show pid ++ suffix
where
- prefix = pidfile ++ "."
+ prefix = pidfile ++ "."
suffix = ".lck"
cleanstale = mapM_ (void . tryIO . removeFile) =<<
(filter iswinlockfile <$> dirContents (parentDir pidfile))
diff --git a/Utility/Data.hs b/Utility/Data.hs
index 359258296..5ecd218fb 100644
--- a/Utility/Data.hs
+++ b/Utility/Data.hs
@@ -1,8 +1,8 @@
{- utilities for simple data types
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.Data where
diff --git a/Utility/DataUnits.hs b/Utility/DataUnits.hs
index 2a936f1fd..2ece14305 100644
--- a/Utility/DataUnits.hs
+++ b/Utility/DataUnits.hs
@@ -1,8 +1,8 @@
{- data size display and parsing
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-
-
- And now a rant:
@@ -41,6 +41,7 @@ module Utility.DataUnits (
memoryUnits,
bandwidthUnits,
oldSchoolUnits,
+ Unit(..),
roughSize,
compareSizes,
@@ -111,7 +112,7 @@ roughSize units short i
| i < 0 = '-' : findUnit units' (negate i)
| otherwise = findUnit units' i
where
- units' = reverse $ sort units -- largest first
+ units' = sortBy (flip compare) units -- largest first
findUnit (u@(Unit s _ _):us) i'
| i' >= s = showUnit i' u
@@ -120,7 +121,7 @@ roughSize units short i
showUnit x (Unit size abbrev name) = s ++ " " ++ unit
where
- v = (fromInteger x :: Double) / fromInteger size
+ v = (fromInteger x :: Double) / fromInteger size
s = showImprecise 2 v
unit
| short = abbrev
diff --git a/Utility/DirWatcher.hs b/Utility/DirWatcher.hs
index 077410575..3d3c14619 100644
--- a/Utility/DirWatcher.hs
+++ b/Utility/DirWatcher.hs
@@ -4,9 +4,9 @@
- (and subdirectories) for changes, and runs hooks for different
- sorts of events as they occur.
-
- - Copyright 2012-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2013 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
diff --git a/Utility/DirWatcher/FSEvents.hs b/Utility/DirWatcher/FSEvents.hs
index 26e1f7671..a07139c44 100644
--- a/Utility/DirWatcher/FSEvents.hs
+++ b/Utility/DirWatcher/FSEvents.hs
@@ -1,8 +1,8 @@
{- FSEvents interface
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.DirWatcher.FSEvents where
@@ -19,9 +19,9 @@ watchDir dir ignored scanevents hooks = do
unlessM fileLevelEventsSupported $
error "Need at least OSX 10.7.0 for file-level FSEvents"
scan dir
- eventStreamCreate [dir] 1.0 True True True handle
+ eventStreamCreate [dir] 1.0 True True True dispatch
where
- handle evt
+ dispatch evt
| ignoredPath ignored (eventPath evt) = noop
| otherwise = do
{- More than one flag may be set, if events occurred
diff --git a/Utility/DirWatcher/INotify.hs b/Utility/DirWatcher/INotify.hs
index 016858b1b..4d11b95a8 100644
--- a/Utility/DirWatcher/INotify.hs
+++ b/Utility/DirWatcher/INotify.hs
@@ -1,8 +1,8 @@
{- higher-level inotify interface
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.DirWatcher.INotify where
diff --git a/Utility/DirWatcher/Kqueue.hs b/Utility/DirWatcher/Kqueue.hs
index 3ddef603f..b0a6ed84f 100644
--- a/Utility/DirWatcher/Kqueue.hs
+++ b/Utility/DirWatcher/Kqueue.hs
@@ -1,8 +1,8 @@
{- BSD kqueue file modification notification interface
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE ForeignFunctionInterface #-}
diff --git a/Utility/DirWatcher/Types.hs b/Utility/DirWatcher/Types.hs
index 8cfa69d34..75ef69f83 100644
--- a/Utility/DirWatcher/Types.hs
+++ b/Utility/DirWatcher/Types.hs
@@ -1,8 +1,8 @@
{- generic directory watching types
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.DirWatcher.Types where
diff --git a/Utility/DirWatcher/Win32Notify.hs b/Utility/DirWatcher/Win32Notify.hs
index f095e5d0e..3428f3db3 100644
--- a/Utility/DirWatcher/Win32Notify.hs
+++ b/Utility/DirWatcher/Win32Notify.hs
@@ -1,8 +1,8 @@
{- Win32-notify interface
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.DirWatcher.Win32Notify where
@@ -17,10 +17,10 @@ watchDir :: FilePath -> (FilePath -> Bool) -> Bool -> WatchHooks -> IO WatchMana
watchDir dir ignored scanevents hooks = do
scan dir
wm <- initWatchManager
- void $ watchDirectory wm dir True [Create, Delete, Modify, Move] handle
+ void $ watchDirectory wm dir True [Create, Delete, Modify, Move] dispatch
return wm
where
- handle evt
+ dispatch evt
| ignoredPath ignored (filePath evt) = noop
| otherwise = case evt of
(Deleted _ _)
diff --git a/Utility/Directory.hs b/Utility/Directory.hs
index f1bcfada3..85ec8bf45 100644
--- a/Utility/Directory.hs
+++ b/Utility/Directory.hs
@@ -1,8 +1,8 @@
-{- directory manipulation
+{- directory traversal and manipulation
-
- - Copyright 2011-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
@@ -11,12 +11,19 @@ module Utility.Directory where
import System.IO.Error
import System.Directory
-import Control.Exception (throw)
import Control.Monad
import Control.Monad.IfElse
import System.FilePath
import Control.Applicative
+import Control.Concurrent
import System.IO.Unsafe (unsafeInterleaveIO)
+import Data.Maybe
+
+#ifdef mingw32_HOST_OS
+import qualified System.Win32 as Win32
+#else
+import qualified System.Posix as Posix
+#endif
import Utility.PosixFiles
import Utility.SafeCommand
@@ -43,13 +50,13 @@ dirContents d = map (d </>) . filter (not . dirCruft) <$> getDirectoryContents d
- When the directory does not exist, no exception is thrown,
- instead, [] is returned. -}
dirContentsRecursive :: FilePath -> IO [FilePath]
-dirContentsRecursive topdir = dirContentsRecursiveSkipping (const False) True topdir
+dirContentsRecursive = dirContentsRecursiveSkipping (const False) True
{- Skips directories whose basenames match the skipdir. -}
dirContentsRecursiveSkipping :: (FilePath -> Bool) -> Bool -> FilePath -> IO [FilePath]
dirContentsRecursiveSkipping skipdir followsubdirsymlinks topdir = go [topdir]
where
- go [] = return []
+ go [] = return []
go (dir:dirs)
| skipdir (takeFileName dir) = go dirs
| otherwise = unsafeInterleaveIO $ do
@@ -80,7 +87,7 @@ dirContentsRecursiveSkipping skipdir followsubdirsymlinks topdir = go [topdir]
dirTreeRecursiveSkipping :: (FilePath -> Bool) -> FilePath -> IO [FilePath]
dirTreeRecursiveSkipping skipdir topdir = go [] [topdir]
where
- go c [] = return c
+ go c [] = return c
go c (dir:dirs)
| skipdir (takeFileName dir) = go c dirs
| otherwise = unsafeInterleaveIO $ do
@@ -106,7 +113,7 @@ moveFile src dest = tryIO (rename src dest) >>= onrename
whenM (isdir dest) rethrow
viaTmp mv dest undefined
where
- rethrow = throw e
+ rethrow = throwM e
mv tmp _ = do
ok <- boolSystem "mv" [Param "-f", Param src, Param tmp]
unless ok $ do
@@ -133,3 +140,90 @@ nukeFile file = void $ tryWhenExists go
#else
go = removeFile file
#endif
+
+#ifndef mingw32_HOST_OS
+data DirectoryHandle = DirectoryHandle IsOpen Posix.DirStream
+#else
+data DirectoryHandle = DirectoryHandle IsOpen Win32.HANDLE Win32.FindData (MVar ())
+#endif
+
+type IsOpen = MVar () -- full when the handle is open
+
+openDirectory :: FilePath -> IO DirectoryHandle
+openDirectory path = do
+#ifndef mingw32_HOST_OS
+ dirp <- Posix.openDirStream path
+ isopen <- newMVar ()
+ return (DirectoryHandle isopen dirp)
+#else
+ (h, fdat) <- Win32.findFirstFile (path </> "*")
+ -- Indicate that the fdat contains a filename that readDirectory
+ -- has not yet returned, by making the MVar be full.
+ -- (There's always at least a "." entry.)
+ alreadyhave <- newMVar ()
+ isopen <- newMVar ()
+ return (DirectoryHandle isopen h fdat alreadyhave)
+#endif
+
+closeDirectory :: DirectoryHandle -> IO ()
+#ifndef mingw32_HOST_OS
+closeDirectory (DirectoryHandle isopen dirp) =
+ whenOpen isopen $
+ Posix.closeDirStream dirp
+#else
+closeDirectory (DirectoryHandle isopen h _ alreadyhave) =
+ whenOpen isopen $ do
+ _ <- tryTakeMVar alreadyhave
+ Win32.findClose h
+#endif
+ where
+ whenOpen :: IsOpen -> IO () -> IO ()
+ whenOpen mv f = do
+ v <- tryTakeMVar mv
+ when (isJust v) f
+
+{- |Reads the next entry from the handle. Once the end of the directory
+is reached, returns Nothing and automatically closes the handle.
+-}
+readDirectory :: DirectoryHandle -> IO (Maybe FilePath)
+#ifndef mingw32_HOST_OS
+readDirectory hdl@(DirectoryHandle _ dirp) = do
+ e <- Posix.readDirStream dirp
+ if null e
+ then do
+ closeDirectory hdl
+ return Nothing
+ else return (Just e)
+#else
+readDirectory hdl@(DirectoryHandle _ h fdat mv) = do
+ -- If the MVar is full, then the filename in fdat has
+ -- not yet been returned. Otherwise, need to find the next
+ -- file.
+ r <- tryTakeMVar mv
+ case r of
+ Just () -> getfn
+ Nothing -> do
+ more <- Win32.findNextFile h fdat
+ if more
+ then getfn
+ else do
+ closeDirectory hdl
+ return Nothing
+ where
+ getfn = do
+ filename <- Win32.getFindDataFileName fdat
+ return (Just filename)
+#endif
+
+-- True only when directory exists and contains nothing.
+-- Throws exception if directory does not exist.
+isDirectoryEmpty :: FilePath -> IO Bool
+isDirectoryEmpty d = bracket (openDirectory d) closeDirectory check
+ where
+ check h = do
+ v <- readDirectory h
+ case v of
+ Nothing -> return True
+ Just f
+ | not (dirCruft f) -> return False
+ | otherwise -> check h
diff --git a/Utility/DiskFree.hs b/Utility/DiskFree.hs
index 2f296e2cb..c4125d4f0 100644
--- a/Utility/DiskFree.hs
+++ b/Utility/DiskFree.hs
@@ -1,8 +1,8 @@
{- disk free space checking
-
- - Copyright 2012, 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2012, 2014 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE ForeignFunctionInterface, CPP #-}
diff --git a/Utility/Dot.hs b/Utility/Dot.hs
index e57bf009f..e21915d32 100644
--- a/Utility/Dot.hs
+++ b/Utility/Dot.hs
@@ -1,8 +1,8 @@
{- a simple graphviz / dot(1) digraph description generator library
-
- - Copyright 2010 Joey Hess <joey@kitenet.net>
+ - Copyright 2010 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.Dot where -- import qualified
diff --git a/Utility/DottedVersion.hs b/Utility/DottedVersion.hs
new file mode 100644
index 000000000..67e40ff3c
--- /dev/null
+++ b/Utility/DottedVersion.hs
@@ -0,0 +1,36 @@
+{- dotted versions, such as 1.0.1
+ -
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
+ -
+ - License: BSD-2-clause
+ -}
+
+module Utility.DottedVersion where
+
+import Common
+
+data DottedVersion = DottedVersion String Integer
+ deriving (Eq)
+
+instance Ord DottedVersion where
+ compare (DottedVersion _ x) (DottedVersion _ y) = compare x y
+
+instance Show DottedVersion where
+ show (DottedVersion s _) = s
+
+{- To compare dotted versions like 1.7.7 and 1.8, they are normalized to
+ - a somewhat arbitrary integer representation. -}
+normalize :: String -> DottedVersion
+normalize v = DottedVersion v $
+ sum $ mult 1 $ reverse $ extend precision $ take precision $
+ map readi $ split "." v
+ where
+ extend n l = l ++ replicate (n - length l) 0
+ mult _ [] = []
+ mult n (x:xs) = (n*x) : mult (n*10^width) xs
+ readi :: String -> Integer
+ readi s = case reads s of
+ ((x,_):_) -> x
+ _ -> 0
+ precision = 10 -- number of segments of the version to compare
+ width = length "yyyymmddhhmmss" -- maximum width of a segment
diff --git a/Utility/Env.hs b/Utility/Env.hs
index 90ed58f6b..fdf06d807 100644
--- a/Utility/Env.hs
+++ b/Utility/Env.hs
@@ -1,8 +1,8 @@
{- portable environment variables
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
@@ -14,6 +14,7 @@ import Utility.Exception
import Control.Applicative
import Data.Maybe
import qualified System.Environment as E
+import qualified System.SetEnv
#else
import qualified System.Posix.Env as PE
#endif
@@ -39,27 +40,27 @@ getEnvironment = PE.getEnvironment
getEnvironment = E.getEnvironment
#endif
-{- Returns True if it could successfully set the environment variable.
+{- Sets an environment variable. To overwrite an existing variable,
+ - overwrite must be True.
-
- - There is, apparently, no way to do this in Windows. Instead,
- - environment varuables must be provided when running a new process. -}
-setEnv :: String -> String -> Bool -> IO Bool
+ - On Windows, setting a variable to "" unsets it. -}
+setEnv :: String -> String -> Bool -> IO ()
#ifndef mingw32_HOST_OS
-setEnv var val overwrite = do
- PE.setEnv var val overwrite
- return True
+setEnv var val overwrite = PE.setEnv var val overwrite
#else
-setEnv _ _ _ = return False
+setEnv var val True = System.SetEnv.setEnv var val
+setEnv var val False = do
+ r <- getEnv var
+ case r of
+ Nothing -> setEnv var val True
+ Just _ -> return ()
#endif
-{- Returns True if it could successfully unset the environment variable. -}
-unsetEnv :: String -> IO Bool
+unsetEnv :: String -> IO ()
#ifndef mingw32_HOST_OS
-unsetEnv var = do
- PE.unsetEnv var
- return True
+unsetEnv = PE.unsetEnv
#else
-unsetEnv _ = return False
+unsetEnv = System.SetEnv.unsetEnv
#endif
{- Adds the environment variable to the input environment. If already
diff --git a/Utility/Exception.hs b/Utility/Exception.hs
index cf2c615c7..ab47ae95f 100644
--- a/Utility/Exception.hs
+++ b/Utility/Exception.hs
@@ -1,59 +1,88 @@
{- Simple IO exception handling (and some more)
-
- - Copyright 2011-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE ScopedTypeVariables #-}
-module Utility.Exception where
+module Utility.Exception (
+ module X,
+ catchBoolIO,
+ catchMaybeIO,
+ catchDefaultIO,
+ catchMsgIO,
+ catchIO,
+ tryIO,
+ bracketIO,
+ catchNonAsync,
+ tryNonAsync,
+ tryWhenExists,
+) where
-import Control.Exception
-import qualified Control.Exception as E
-import Control.Applicative
+import Control.Monad.Catch as X hiding (Handler)
+import qualified Control.Monad.Catch as M
+import Control.Exception (IOException, AsyncException)
import Control.Monad
+import Control.Monad.IO.Class (liftIO, MonadIO)
import System.IO.Error (isDoesNotExistError)
import Utility.Data
{- Catches IO errors and returns a Bool -}
-catchBoolIO :: IO Bool -> IO Bool
-catchBoolIO a = catchDefaultIO False a
+catchBoolIO :: MonadCatch m => m Bool -> m Bool
+catchBoolIO = catchDefaultIO False
{- Catches IO errors and returns a Maybe -}
-catchMaybeIO :: IO a -> IO (Maybe a)
-catchMaybeIO a = catchDefaultIO Nothing $ Just <$> a
+catchMaybeIO :: MonadCatch m => m a -> m (Maybe a)
+catchMaybeIO a = do
+ catchDefaultIO Nothing $ do
+ v <- a
+ return (Just v)
{- Catches IO errors and returns a default value. -}
-catchDefaultIO :: a -> IO a -> IO a
+catchDefaultIO :: MonadCatch m => a -> m a -> m a
catchDefaultIO def a = catchIO a (const $ return def)
{- Catches IO errors and returns the error message. -}
-catchMsgIO :: IO a -> IO (Either String a)
-catchMsgIO a = either (Left . show) Right <$> tryIO a
+catchMsgIO :: MonadCatch m => m a -> m (Either String a)
+catchMsgIO a = do
+ v <- tryIO a
+ return $ either (Left . show) Right v
{- catch specialized for IO errors only -}
-catchIO :: IO a -> (IOException -> IO a) -> IO a
-catchIO = E.catch
+catchIO :: MonadCatch m => m a -> (IOException -> m a) -> m a
+catchIO = M.catch
{- try specialized for IO errors only -}
-tryIO :: IO a -> IO (Either IOException a)
-tryIO = try
+tryIO :: MonadCatch m => m a -> m (Either IOException a)
+tryIO = M.try
+
+{- bracket with setup and cleanup actions lifted to IO.
+ -
+ - Note that unlike catchIO and tryIO, this catches all exceptions. -}
+bracketIO :: (MonadMask m, MonadIO m) => IO v -> (v -> IO b) -> (v -> m a) -> m a
+bracketIO setup cleanup = bracket (liftIO setup) (liftIO . cleanup)
{- Catches all exceptions except for async exceptions.
- This is often better to use than catching them all, so that
- ThreadKilled and UserInterrupt get through.
-}
-catchNonAsync :: IO a -> (SomeException -> IO a) -> IO a
+catchNonAsync :: MonadCatch m => m a -> (SomeException -> m a) -> m a
catchNonAsync a onerr = a `catches`
- [ Handler (\ (e :: AsyncException) -> throw e)
- , Handler (\ (e :: SomeException) -> onerr e)
+ [ M.Handler (\ (e :: AsyncException) -> throwM e)
+ , M.Handler (\ (e :: SomeException) -> onerr e)
]
-tryNonAsync :: IO a -> IO (Either SomeException a)
-tryNonAsync a = (Right <$> a) `catchNonAsync` (return . Left)
+tryNonAsync :: MonadCatch m => m a -> m (Either SomeException a)
+tryNonAsync a = go `catchNonAsync` (return . Left)
+ where
+ go = do
+ v <- a
+ return (Right v)
{- Catches only DoesNotExist exceptions, and lets all others through. -}
-tryWhenExists :: IO a -> IO (Maybe a)
-tryWhenExists a = eitherToMaybe <$>
- tryJust (guard . isDoesNotExistError) a
+tryWhenExists :: MonadCatch m => m a -> m (Maybe a)
+tryWhenExists a = do
+ v <- tryJust (guard . isDoesNotExistError) a
+ return (eitherToMaybe v)
diff --git a/Utility/ExternalSHA.hs b/Utility/ExternalSHA.hs
index adbde795a..6cef2830d 100644
--- a/Utility/ExternalSHA.hs
+++ b/Utility/ExternalSHA.hs
@@ -3,9 +3,9 @@
- This is typically a bit faster than using Haskell libraries,
- by around 1% to 10%. Worth it for really big files.
-
- - Copyright 2011-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2013 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.ExternalSHA (externalSHA) where
@@ -14,8 +14,8 @@ import Utility.SafeCommand
import Utility.Process
import Utility.FileSystemEncoding
import Utility.Misc
+import Utility.Exception
-import System.Process
import Data.List
import Data.Char
import Control.Applicative
@@ -23,7 +23,7 @@ import System.IO
externalSHA :: String -> Int -> FilePath -> IO (Either String String)
externalSHA command shasize file = do
- ls <- lines <$> readsha (toCommand [File file])
+ ls <- lines <$> catchDefaultIO "" (readsha (toCommand [File file]))
return $ sanitycheck =<< parse ls
where
{- sha commands output the filename, so need to set fileEncoding -}
@@ -57,7 +57,7 @@ externalSHA command shasize file = do
Left $ "Unexpected character in output of " ++ command ++ "\"" ++ sha ++ "\""
| otherwise = Right sha'
where
- sha' = map toLower sha
+ sha' = map toLower sha
expectedSHALength :: Int -> Int
expectedSHALength 1 = 40
diff --git a/Utility/FileMode.hs b/Utility/FileMode.hs
index d8fb866ae..5c4001ed8 100644
--- a/Utility/FileMode.hs
+++ b/Utility/FileMode.hs
@@ -1,23 +1,25 @@
{- File mode utilities.
-
- - Copyright 2010-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
module Utility.FileMode where
-import Common
-
-import Control.Exception (bracket)
+import System.IO
+import Control.Monad
import System.PosixCompat.Types
+import Utility.PosixFiles
#ifndef mingw32_HOST_OS
import System.Posix.Files
#endif
import Foreign (complement)
+import Utility.Exception
+
{- Applies a conversion function to a file's mode. -}
modifyFileMode :: FilePath -> (FileMode -> FileMode) -> IO ()
modifyFileMode f convert = void $ modifyFileMode' f convert
@@ -56,6 +58,12 @@ readModes = [ownerReadMode, groupReadMode, otherReadMode]
executeModes :: [FileMode]
executeModes = [ownerExecuteMode, groupExecuteMode, otherExecuteMode]
+otherGroupModes :: [FileMode]
+otherGroupModes =
+ [ groupReadMode, otherReadMode
+ , groupWriteMode, otherWriteMode
+ ]
+
{- Removes the write bits from a file. -}
preventWrite :: FilePath -> IO ()
preventWrite f = modifyFileMode f $ removeModes writeModes
@@ -145,9 +153,5 @@ setSticky f = modifyFileMode f $ addModes [stickyMode]
writeFileProtected :: FilePath -> String -> IO ()
writeFileProtected file content = withUmask 0o0077 $
withFile file WriteMode $ \h -> do
- void $ tryIO $ modifyFileMode file $
- removeModes
- [ groupReadMode, otherReadMode
- , groupWriteMode, otherWriteMode
- ]
+ void $ tryIO $ modifyFileMode file $ removeModes otherGroupModes
hPutStr h content
diff --git a/Utility/FileSize.hs b/Utility/FileSize.hs
new file mode 100644
index 000000000..1055754cb
--- /dev/null
+++ b/Utility/FileSize.hs
@@ -0,0 +1,35 @@
+{- File size.
+ -
+ - License: BSD-2-clause
+ -}
+
+{-# LANGUAGE CPP #-}
+
+module Utility.FileSize where
+
+import System.PosixCompat.Files
+#ifdef mingw32_HOST_OS
+import Control.Exception (bracket)
+import System.IO
+#endif
+
+{- Gets the size of a file.
+ -
+ - This is better than using fileSize, because on Windows that returns a
+ - FileOffset which maxes out at 2 gb.
+ - See https://github.com/jystic/unix-compat/issues/16
+ -}
+getFileSize :: FilePath -> IO Integer
+#ifndef mingw32_HOST_OS
+getFileSize f = fmap (fromIntegral . fileSize) (getFileStatus f)
+#else
+getFileSize f = bracket (openFile f ReadMode) hClose hFileSize
+#endif
+
+{- Gets the size of the file, when its FileStatus is already known. -}
+getFileSize' :: FilePath -> FileStatus -> IO Integer
+#ifndef mingw32_HOST_OS
+getFileSize' _ s = return $ fromIntegral $ fileSize s
+#else
+getFileSize' f _ = getFileSize f
+#endif
diff --git a/Utility/FileSystemEncoding.hs b/Utility/FileSystemEncoding.hs
index 690942cba..844e81e59 100644
--- a/Utility/FileSystemEncoding.hs
+++ b/Utility/FileSystemEncoding.hs
@@ -1,8 +1,8 @@
{- GHC File system encoding handling.
-
- - Copyright 2012-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
@@ -111,7 +111,7 @@ truncateFilePath :: Int -> FilePath -> FilePath
#ifndef mingw32_HOST_OS
truncateFilePath n = go . reverse
where
- go f =
+ go f =
let bytes = decodeW8 f
in if length bytes <= n
then reverse f
diff --git a/Utility/Format.hs b/Utility/Format.hs
index e7a27515e..0a6f6ce7d 100644
--- a/Utility/Format.hs
+++ b/Utility/Format.hs
@@ -1,8 +1,8 @@
{- Formatted string handling.
-
- - Copyright 2010, 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2010, 2011 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.Format (
@@ -117,7 +117,7 @@ decode_c s = unescape ("", s)
handle (x:'x':n1:n2:rest)
| isescape x && allhex = (fromhex, rest)
where
- allhex = isHexDigit n1 && isHexDigit n2
+ allhex = isHexDigit n1 && isHexDigit n2
fromhex = [chr $ readhex [n1, n2]]
readhex h = Prelude.read $ "0x" ++ h :: Int
handle (x:n1:n2:n3:rest)
diff --git a/Utility/FreeDesktop.hs b/Utility/FreeDesktop.hs
index da9d7b618..ee1c2f302 100644
--- a/Utility/FreeDesktop.hs
+++ b/Utility/FreeDesktop.hs
@@ -5,9 +5,9 @@
- http://standards.freedesktop.org/menu-spec/latest/
- http://standards.freedesktop.org/icon-theme-spec/latest/
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.FreeDesktop (
diff --git a/Utility/Glob.hs b/Utility/Glob.hs
index 1a77da7d3..d35a96849 100644
--- a/Utility/Glob.hs
+++ b/Utility/Glob.hs
@@ -3,9 +3,9 @@
- This uses TDFA when available, with a fallback to regex-compat.
- TDFA is less buggy in its support for non-unicode characters.
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
diff --git a/Utility/Gpg.hs b/Utility/Gpg.hs
index 05c03d6ef..37508a495 100644
--- a/Utility/Gpg.hs
+++ b/Utility/Gpg.hs
@@ -1,6 +1,6 @@
{- gpg interface
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -11,6 +11,7 @@ module Utility.Gpg where
import Control.Applicative
import Control.Concurrent
+import Control.Monad.IO.Class
import qualified Data.Map as M
import Common
@@ -18,7 +19,7 @@ import qualified Build.SysConfig as SysConfig
#ifndef mingw32_HOST_OS
import System.Posix.Types
-import Control.Exception (bracket)
+import qualified System.Posix.IO
import System.Path
import Utility.Env
#else
@@ -104,23 +105,23 @@ pipeStrict params input = do
-
- Note that to avoid deadlock with the cleanup stage,
- the reader must fully consume gpg's input before returning. -}
-feedRead :: [CommandParam] -> String -> (Handle -> IO ()) -> (Handle -> IO a) -> IO a
+feedRead :: (MonadIO m, MonadMask m) => [CommandParam] -> String -> (Handle -> IO ()) -> (Handle -> m a) -> m a
feedRead params passphrase feeder reader = do
#ifndef mingw32_HOST_OS
-- pipe the passphrase into gpg on a fd
- (frompipe, topipe) <- createPipe
- void $ forkIO $ do
+ (frompipe, topipe) <- liftIO System.Posix.IO.createPipe
+ liftIO $ void $ forkIO $ do
toh <- fdToHandle topipe
hPutStrLn toh passphrase
hClose toh
let Fd pfd = frompipe
let passphrasefd = [Param "--passphrase-fd", Param $ show pfd]
- closeFd frompipe `after` go (passphrasefd ++ params)
+ liftIO (closeFd frompipe) `after` go (passphrasefd ++ params)
#else
-- store the passphrase in a temp file for gpg
withTmpFile "gpg" $ \tmpfile h -> do
- hPutStr h passphrase
- hClose h
+ liftIO $ hPutStr h passphrase
+ liftIO $ hClose h
let passphrasefile = [Param "--passphrase-file", File tmpfile]
go $ passphrasefile ++ params
#endif
@@ -128,15 +129,24 @@ feedRead params passphrase feeder reader = do
go params' = pipeLazy params' feeder reader
{- Like feedRead, but without passphrase. -}
-pipeLazy :: [CommandParam] -> (Handle -> IO ()) -> (Handle -> IO a) -> IO a
+pipeLazy :: (MonadIO m, MonadMask m) => [CommandParam] -> (Handle -> IO ()) -> (Handle -> m a) -> m a
pipeLazy params feeder reader = do
- params' <- stdParams $ Param "--batch" : params
- withBothHandles createProcessSuccess (proc gpgcmd params')
- $ \(to, from) -> do
- void $ forkIO $ do
- feeder to
- hClose to
- reader from
+ params' <- liftIO $ stdParams $ Param "--batch" : params
+ let p = (proc gpgcmd params')
+ { std_in = CreatePipe
+ , std_out = CreatePipe
+ , std_err = Inherit
+ }
+ bracket (setup p) (cleanup p) go
+ where
+ setup = liftIO . createProcess
+ cleanup p (_, _, _, pid) = liftIO $ forceSuccessProcess p pid
+ go p = do
+ let (to, from) = bothHandles p
+ liftIO $ void $ forkIO $ do
+ feeder to
+ hClose to
+ reader from
{- Finds gpg public keys matching some string. (Could be an email address,
- a key id, or a name; See the section 'HOW TO SPECIFY A USER ID' of
@@ -145,7 +155,7 @@ findPubKeys :: String -> IO KeyIds
findPubKeys for = KeyIds . parse . lines <$> readStrict params
where
params = [Params "--with-colons --list-public-keys", Param for]
- parse = catMaybes . map (keyIdField . split ":")
+ parse = mapMaybe (keyIdField . split ":")
keyIdField ("pub":_:_:_:f:_) = Just f
keyIdField _ = Nothing
@@ -154,9 +164,10 @@ type UserId = String
{- All of the user's secret keys, with their UserIds.
- Note that the UserId may be empty. -}
secretKeys :: IO (M.Map KeyId UserId)
-secretKeys = M.fromList . parse . lines <$> readStrict params
+secretKeys = catchDefaultIO M.empty makemap
where
- params = [Params "--with-colons --list-secret-keys --fixed-list-mode"]
+ makemap = M.fromList . parse . lines <$> readStrict params
+ params = [Params "--with-colons --list-secret-keys --fixed-list-mode"]
parse = extract [] Nothing . map (split ":")
extract c (Just keyid) (("uid":_:_:_:_:_:_:_:_:userid:_):rest) =
extract ((keyid, decode_c userid):c) Nothing rest
@@ -186,7 +197,7 @@ genSecretKey keytype passphrase userid keysize =
withHandle StdinHandle createProcessSuccess (proc gpgcmd params) feeder
where
params = ["--batch", "--gen-key"]
- feeder h = do
+ feeder h = do
hPutStr h $ unlines $ catMaybes
[ Just $ "Key-Type: " ++
case keytype of
@@ -195,7 +206,7 @@ genSecretKey keytype passphrase userid keysize =
Algo n -> show n
, Just $ "Key-Length: " ++ show keysize
, Just $ "Name-Real: " ++ userid
- , Just $ "Expire-Date: 0"
+ , Just "Expire-Date: 0"
, if null passphrase
then Nothing
else Just $ "Passphrase: " ++ passphrase
@@ -222,7 +233,7 @@ genRandom highQuality size = checksize <$> readStrict
randomquality :: Int
randomquality = if highQuality then 2 else 1
- {- The size is the number of bytes of entropy desired; the data is
+ {- The size is the number of bytes of entropy desired; the data is
- base64 encoded, so needs 8 bits to represent every 6 bytes of
- entropy. -}
expectedlength = size * 8 `div` 6
@@ -324,7 +335,7 @@ testHarness a = do
setup = do
base <- getTemporaryDirectory
dir <- mktmpdir $ base </> "gpgtmpXXXXXX"
- void $ setEnv var dir True
+ setEnv var dir True
-- For some reason, recent gpg needs a trustdb to be set up.
_ <- pipeStrict [Params "--trust-model auto --update-trustdb"] []
_ <- pipeStrict [Params "--import -q"] $ unlines
diff --git a/Utility/Hash.hs b/Utility/Hash.hs
index cecc6af3e..9881815bd 100644
--- a/Utility/Hash.hs
+++ b/Utility/Hash.hs
@@ -1,8 +1,4 @@
-{- Convenience wrapper around cryptohash.
- - Falls back to SHA if it's not available.
- -}
-
-{-# LANGUAGE CPP #-}
+{- Convenience wrapper around cryptohash. -}
module Utility.Hash (
sha1,
@@ -10,19 +6,16 @@ module Utility.Hash (
sha256,
sha384,
sha512,
-#ifdef WITH_CRYPTOHASH
skein256,
skein512,
-#endif
+ md5,
prop_hashes_stable
) where
import qualified Data.ByteString.Lazy as L
-import qualified Data.ByteString.Char8 as C8
+import qualified Data.Text as T
+import qualified Data.Text.Encoding as T
-#ifndef WITH_CRYPTOHASH
-import Data.Digest.Pure.SHA
-#else
import Crypto.Hash
sha1 :: L.ByteString -> Digest SHA1
@@ -50,7 +43,8 @@ skein256 = hashlazy
skein512 :: L.ByteString -> Digest Skein512_512
skein512 = hashlazy
-#endif
+md5 :: L.ByteString -> Digest MD5
+md5 = hashlazy
{- Check that all the hashes continue to hash the same. -}
prop_hashes_stable :: Bool
@@ -60,10 +54,9 @@ prop_hashes_stable = all (\(hasher, result) -> hasher foo == result)
, (show . sha256, "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae")
, (show . sha384, "98c11ffdfdd540676b1a137cb1a22b2a70350c9a44171d6b1180c6be5cbb2ee3f79d532c8a1dd9ef2e8e08e752a3babb")
, (show . sha512, "f7fbba6e0636f890e56fbbf3283e524c6fa3204ae298382d624741d0dc6638326e282c41be5e4254d8820772c5518a2c5a8c0c7f7eda19594a7eb539453e1ed7")
-#ifdef WITH_CRYPTOHASH
, (show . skein256, "a04efd9a0aeed6ede40fe5ce0d9361ae7b7d88b524aa19917b9315f1ecf00d33")
, (show . skein512, "fd8956898113510180aa4658e6c0ac85bd74fb47f4a4ba264a6b705d7a8e8526756e75aecda12cff4f1aca1a4c2830fbf57f458012a66b2b15a3dd7d251690a7")
-#endif
+ , (show . md5, "acbd18db4cc2f85cedef654fccc4a4d8")
]
where
- foo = L.fromChunks [C8.pack "foo"]
+ foo = L.fromChunks [T.encodeUtf8 $ T.pack "foo"]
diff --git a/Utility/HumanNumber.hs b/Utility/HumanNumber.hs
index 904135987..c3fede95f 100644
--- a/Utility/HumanNumber.hs
+++ b/Utility/HumanNumber.hs
@@ -1,8 +1,8 @@
{- numbers for humans
-
- - Copyright 2012-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2013 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.HumanNumber where
@@ -17,5 +17,5 @@ showImprecise precision n
int :: Integer
(int, frac) = properFraction n
remainder = round (frac * 10 ^ precision) :: Integer
- pad0s s = (take (precision - length s) (repeat '0')) ++ s
+ pad0s s = replicate (precision - length s) '0' ++ s
striptrailing0s = reverse . dropWhile (== '0') . reverse
diff --git a/Utility/HumanTime.hs b/Utility/HumanTime.hs
index 297b2bd97..85a9e15b6 100644
--- a/Utility/HumanTime.hs
+++ b/Utility/HumanTime.hs
@@ -1,8 +1,8 @@
{- Time for humans.
-
- - Copyright 2012-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2013 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.HumanTime (
@@ -27,7 +27,7 @@ import Control.Applicative
import qualified Data.Map as M
newtype Duration = Duration { durationSeconds :: Integer }
- deriving (Eq, Ord, Read, Show)
+ deriving (Eq, Ord, Read, Show)
durationSince :: UTCTime -> IO Duration
durationSince pasttime = do
@@ -47,8 +47,8 @@ daysToDuration i = Duration $ i * dsecs
parseDuration :: String -> Maybe Duration
parseDuration = Duration <$$> go 0
where
- go n [] = return n
- go n s = do
+ go n [] = return n
+ go n s = do
num <- readish s :: Maybe Integer
case dropWhile isDigit s of
(c:rest) -> do
@@ -59,7 +59,7 @@ parseDuration = Duration <$$> go 0
fromDuration :: Duration -> String
fromDuration Duration { durationSeconds = d }
| d == 0 = "0s"
- | otherwise = concat $ map showunit $ go [] units d
+ | otherwise = concatMap showunit $ go [] units d
where
showunit (u, n)
| n > 0 = show n ++ [u]
diff --git a/Utility/InodeCache.hs b/Utility/InodeCache.hs
index 46ca87bd9..b5fe9034e 100644
--- a/Utility/InodeCache.hs
+++ b/Utility/InodeCache.hs
@@ -1,17 +1,51 @@
-{- Caching a file's inode, size, and modification time to see when it's changed.
+{- Caching a file's inode, size, and modification time
+ - to see when it's changed.
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013, 2014 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
-module Utility.InodeCache where
+{-# LANGUAGE CPP #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+
+module Utility.InodeCache (
+ InodeCache,
+ InodeComparisonType(..),
+
+ compareStrong,
+ compareWeak,
+ compareBy,
+
+ readInodeCache,
+ showInodeCache,
+ genInodeCache,
+ toInodeCache,
+
+ InodeCacheKey,
+ inodeCacheToKey,
+ inodeCacheToMtime,
+
+ SentinalFile(..),
+ SentinalStatus(..),
+ TSDelta,
+ noTSDelta,
+ writeSentinalFile,
+ checkSentinalFile,
+ sentinalFileExists,
+
+ prop_read_show_inodecache
+) where
import Common
import System.PosixCompat.Types
import Utility.QuickCheck
-data InodeCachePrim = InodeCachePrim FileID FileOffset EpochTime
+#ifdef mingw32_HOST_OS
+import Data.Word (Word64)
+#endif
+
+data InodeCachePrim = InodeCachePrim FileID Integer EpochTime
deriving (Show, Eq, Ord)
newtype InodeCache = InodeCache InodeCachePrim
@@ -28,10 +62,17 @@ compareStrong (InodeCache x) (InodeCache y) = x == y
{- Weak comparison of the inode caches, comparing the size and mtime,
- but not the actual inode. Useful when inodes have changed, perhaps
- - due to some filesystems being remounted. -}
+ - due to some filesystems being remounted.
+ -
+ - The weak mtime comparison treats any mtimes that are within 2 seconds
+ - of one-anther as the same. This is because FAT has only a 2 second
+ - resolution. When a FAT filesystem is used on Linux, higher resolution
+ - timestamps are cached and used by Linux, but this is lost on unmount,
+ - so after a remount, the timestamp can appear to have changed.
+ -}
compareWeak :: InodeCache -> InodeCache -> Bool
compareWeak (InodeCache (InodeCachePrim _ size1 mtime1)) (InodeCache (InodeCachePrim _ size2 mtime2)) =
- size1 == size2 && mtime1 == mtime2
+ size1 == size2 && (abs (mtime1 - mtime2) < 2)
compareBy :: InodeComparisonType -> InodeCache -> InodeCache -> Bool
compareBy Strongly = compareStrong
@@ -69,16 +110,100 @@ readInodeCache s = case words s of
in InodeCache <$> prim
_ -> Nothing
-genInodeCache :: FilePath -> IO (Maybe InodeCache)
-genInodeCache f = catchDefaultIO Nothing $ toInodeCache <$> getFileStatus f
+genInodeCache :: FilePath -> TSDelta -> IO (Maybe InodeCache)
+genInodeCache f delta = catchDefaultIO Nothing $
+ toInodeCache delta f =<< getFileStatus f
+
+toInodeCache :: TSDelta -> FilePath -> FileStatus -> IO (Maybe InodeCache)
+toInodeCache (TSDelta getdelta) f s
+ | isRegularFile s = do
+ delta <- getdelta
+ sz <- getFileSize' f s
+ return $ Just $ InodeCache $ InodeCachePrim
+ (fileID s)
+ sz
+ (modificationTime s + delta)
+ | otherwise = pure Nothing
+
+{- Some filesystem get new random inodes each time they are mounted.
+ - To detect this and other problems, a sentinal file can be created.
+ - Its InodeCache at the time of its creation is written to the cache file,
+ - so changes can later be detected. -}
+data SentinalFile = SentinalFile
+ { sentinalFile :: FilePath
+ , sentinalCacheFile :: FilePath
+ }
+ deriving (Show)
-toInodeCache :: FileStatus -> Maybe InodeCache
-toInodeCache s
- | isRegularFile s = Just $ InodeCache $ InodeCachePrim
- (fileID s)
- (fileSize s)
- (modificationTime s)
- | otherwise = Nothing
+{- On Windows, the mtime of a file appears to change when the time zone is
+ - changed. To deal with this, a TSDelta can be used; the delta is added to
+ - the mtime when generating an InodeCache. The current delta can be found
+ - by looking at the SentinalFile. Effectively, this makes all InodeCaches
+ - use the same time zone that was in use when the sential file was
+ - originally written. -}
+newtype TSDelta = TSDelta (IO EpochTime)
+
+noTSDelta :: TSDelta
+noTSDelta = TSDelta (pure 0)
+
+writeSentinalFile :: SentinalFile -> IO ()
+writeSentinalFile s = do
+ writeFile (sentinalFile s) ""
+ maybe noop (writeFile (sentinalCacheFile s) . showInodeCache)
+ =<< genInodeCache (sentinalFile s) noTSDelta
+
+data SentinalStatus = SentinalStatus
+ { sentinalInodesChanged :: Bool
+ , sentinalTSDelta :: TSDelta
+ }
+
+{- Checks if the InodeCache of the sentinal file is the same
+ - as it was when it was originally created.
+ -
+ - On Windows, time stamp differences are ignored, since they change
+ - with the timezone.
+ -
+ - When the sential file does not exist, InodeCaches canot reliably be
+ - compared, so the assumption is that there is has been a change.
+ -}
+checkSentinalFile :: SentinalFile -> IO SentinalStatus
+checkSentinalFile s = do
+ mold <- loadoldcache
+ case mold of
+ Nothing -> return dummy
+ (Just old) -> do
+ mnew <- gennewcache
+ case mnew of
+ Nothing -> return dummy
+ Just new -> return $ calc old new
+ where
+ loadoldcache = catchDefaultIO Nothing $
+ readInodeCache <$> readFile (sentinalCacheFile s)
+ gennewcache = genInodeCache (sentinalFile s) noTSDelta
+ calc (InodeCache (InodeCachePrim oldinode oldsize oldmtime)) (InodeCache (InodeCachePrim newinode newsize newmtime)) =
+ SentinalStatus (not unchanged) tsdelta
+ where
+#ifdef mingw32_HOST_OS
+ -- Since mtime can appear to change when the time zone is
+ -- changed in windows, we cannot look at the mtime for the
+ -- sentinal file.
+ unchanged = oldinode == newinode && oldsize == newsize && (newmtime == newmtime)
+ tsdelta = TSDelta $ do
+ -- Run when generating an InodeCache,
+ -- to get the current delta.
+ mnew <- gennewcache
+ return $ case mnew of
+ Just (InodeCache (InodeCachePrim _ _ currmtime)) ->
+ oldmtime - currmtime
+ Nothing -> 0
+#else
+ unchanged = oldinode == newinode && oldsize == newsize && oldmtime == newmtime
+ tsdelta = noTSDelta
+#endif
+ dummy = SentinalStatus True noTSDelta
+
+sentinalFileExists :: SentinalFile -> IO Bool
+sentinalFileExists s = allM doesFileExist [sentinalCacheFile s, sentinalFile s]
instance Arbitrary InodeCache where
arbitrary =
@@ -88,6 +213,11 @@ instance Arbitrary InodeCache where
<*> arbitrary
in InodeCache <$> prim
+#ifdef mingw32_HOST_OS
+instance Arbitrary FileID where
+ arbitrary = fromIntegral <$> (arbitrary :: Gen Word64)
+#endif
+
prop_read_show_inodecache :: InodeCache -> Bool
prop_read_show_inodecache c = case readInodeCache (showInodeCache c) of
Nothing -> False
diff --git a/Utility/JSONStream.hs b/Utility/JSONStream.hs
index f3e93c3da..2746678cc 100644
--- a/Utility/JSONStream.hs
+++ b/Utility/JSONStream.hs
@@ -1,8 +1,8 @@
{- Streaming JSON output.
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.JSONStream (
diff --git a/Utility/LinuxMkLibs.hs b/Utility/LinuxMkLibs.hs
new file mode 100644
index 000000000..db64d1236
--- /dev/null
+++ b/Utility/LinuxMkLibs.hs
@@ -0,0 +1,62 @@
+{- Linux library copier and binary shimmer
+ -
+ - Copyright 2013 Joey Hess <id@joeyh.name>
+ -
+ - License: BSD-2-clause
+ -}
+
+module Utility.LinuxMkLibs where
+
+import Control.Applicative
+import Data.Maybe
+import System.Directory
+import System.FilePath
+import Data.List.Utils
+import System.Posix.Files
+import Data.Char
+import Control.Monad.IfElse
+
+import Utility.PartialPrelude
+import Utility.Directory
+import Utility.Process
+import Utility.Monad
+import Utility.Path
+
+{- Installs a library. If the library is a symlink to another file,
+ - install the file it links to, and update the symlink to be relative. -}
+installLib :: (FilePath -> FilePath -> IO ()) -> FilePath -> FilePath -> IO (Maybe FilePath)
+installLib installfile top lib = ifM (doesFileExist lib)
+ ( do
+ installfile top lib
+ checksymlink lib
+ return $ Just $ parentDir lib
+ , return Nothing
+ )
+ where
+ checksymlink f = whenM (isSymbolicLink <$> getSymbolicLinkStatus (inTop top f)) $ do
+ l <- readSymbolicLink (inTop top f)
+ let absl = absPathFrom (parentDir f) l
+ target <- relPathDirToFile (takeDirectory f) absl
+ installfile top absl
+ nukeFile (top ++ f)
+ createSymbolicLink target (inTop top f)
+ checksymlink absl
+
+-- Note that f is not relative, so cannot use </>
+inTop :: FilePath -> FilePath -> FilePath
+inTop top f = top ++ f
+
+{- Parse ldd output, getting all the libraries that the input files
+ - link to. Note that some of the libraries may not exist
+ - (eg, linux-vdso.so) -}
+parseLdd :: String -> [FilePath]
+parseLdd = mapMaybe (getlib . dropWhile isSpace) . lines
+ where
+ getlib l = headMaybe . words =<< lastMaybe (split " => " l)
+
+{- Get all glibc libs and other support files, including gconv files
+ -
+ - XXX Debian specific. -}
+glibcLibs :: IO [FilePath]
+glibcLibs = lines <$> readProcess "sh"
+ ["-c", "dpkg -L libc6:$(dpkg --print-architecture) libgcc1:$(dpkg --print-architecture) | egrep '\\.so|gconv'"]
diff --git a/Utility/LockFile.hs b/Utility/LockFile.hs
new file mode 100644
index 000000000..f9a0e6783
--- /dev/null
+++ b/Utility/LockFile.hs
@@ -0,0 +1,20 @@
+{- Lock files
+ -
+ - Posix and Windows lock files are extremely different.
+ - This module does *not* attempt to be a portability shim, it just exposes
+ - the native locking of the OS.
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - License: BSD-2-clause
+ -}
+
+{-# LANGUAGE CPP #-}
+
+module Utility.LockFile (module X) where
+
+#ifndef mingw32_HOST_OS
+import Utility.LockFile.Posix as X
+#else
+import Utility.LockFile.Windows as X
+#endif
diff --git a/Utility/LockFile/Posix.hs b/Utility/LockFile/Posix.hs
new file mode 100644
index 000000000..a5775dba1
--- /dev/null
+++ b/Utility/LockFile/Posix.hs
@@ -0,0 +1,99 @@
+{- Posix lock files
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - License: BSD-2-clause
+ -}
+
+module Utility.LockFile.Posix (
+ LockHandle,
+ lockShared,
+ lockExclusive,
+ tryLockExclusive,
+ createLockFile,
+ openExistingLockFile,
+ isLocked,
+ checkLocked,
+ getLockStatus,
+ dropLock,
+) where
+
+import Utility.Exception
+import Utility.Applicative
+
+import System.IO
+import System.Posix
+import Data.Maybe
+
+type LockFile = FilePath
+
+newtype LockHandle = LockHandle Fd
+
+-- Takes a shared lock, blocking until the lock is available.
+lockShared :: Maybe FileMode -> LockFile -> IO LockHandle
+lockShared = lock ReadLock
+
+-- Takes an exclusive lock, blocking until the lock is available.
+lockExclusive :: Maybe FileMode -> LockFile -> IO LockHandle
+lockExclusive = lock WriteLock
+
+-- Tries to take an exclusive lock, but does not block.
+tryLockExclusive :: Maybe FileMode -> LockFile -> IO (Maybe LockHandle)
+tryLockExclusive mode lockfile = do
+ l <- openLockFile mode lockfile
+ v <- tryIO $ setLock l (WriteLock, AbsoluteSeek, 0, 0)
+ case v of
+ Left _ -> do
+ closeFd l
+ return Nothing
+ Right _ -> return $ Just $ LockHandle l
+
+-- Setting the FileMode allows creation of a new lock file.
+-- If it's Nothing then this only succeeds when the lock file already exists.
+lock :: LockRequest -> Maybe FileMode -> LockFile -> IO LockHandle
+lock lockreq mode lockfile = do
+ l <- openLockFile mode lockfile
+ waitToSetLock l (lockreq, AbsoluteSeek, 0, 0)
+ return (LockHandle l)
+
+-- Create and opens lock file; does not lock it.
+createLockFile :: FileMode -> LockFile -> IO Fd
+createLockFile filemode = openLockFile (Just filemode)
+
+-- Opens an existing lock file; does not lock it, and if it does not exist,
+-- returns Nothing.
+openExistingLockFile :: LockFile -> IO (Maybe Fd)
+openExistingLockFile = catchMaybeIO . openLockFile Nothing
+
+-- Close on exec flag is set so child processes do not inherit the lock.
+openLockFile :: Maybe FileMode -> LockFile -> IO Fd
+openLockFile filemode lockfile = do
+ l <- openFd lockfile ReadWrite filemode defaultFileFlags
+ setFdOption l CloseOnExec True
+ return l
+
+-- Check if a file is locked, either exclusively, or with shared lock.
+-- When the file doesn't exist, it's considered not locked.
+isLocked :: LockFile -> IO Bool
+isLocked = fromMaybe False <$$> checkLocked
+
+-- Returns Nothing when the file doesn't exist, for cases where
+-- that is different from it not being locked.
+checkLocked :: LockFile -> IO (Maybe Bool)
+checkLocked = maybe Nothing (Just . isJust) <$$> getLockStatus'
+
+getLockStatus :: LockFile -> IO (Maybe (ProcessID, FileLock))
+getLockStatus = fromMaybe Nothing <$$> getLockStatus'
+
+getLockStatus' :: LockFile -> IO (Maybe (Maybe (ProcessID, FileLock)))
+getLockStatus' lockfile = go =<< catchMaybeIO open
+ where
+ open = openFd lockfile ReadOnly Nothing defaultFileFlags
+ go Nothing = return Nothing
+ go (Just h) = do
+ ret <- getLock h (ReadLock, AbsoluteSeek, 0, 0)
+ closeFd h
+ return (Just ret)
+
+dropLock :: LockHandle -> IO ()
+dropLock (LockHandle fd) = closeFd fd
diff --git a/Utility/LockFile/Windows.hs b/Utility/LockFile/Windows.hs
new file mode 100644
index 000000000..eff129cee
--- /dev/null
+++ b/Utility/LockFile/Windows.hs
@@ -0,0 +1,75 @@
+{- Windows lock files
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - License: BSD-2-clause
+ -}
+
+module Utility.LockFile.Windows (
+ lockShared,
+ lockExclusive,
+ dropLock,
+ waitToLock,
+ LockHandle
+) where
+
+import System.Win32.Types
+import System.Win32.File
+import Control.Concurrent
+
+type LockFile = FilePath
+
+type LockHandle = HANDLE
+
+{- Tries to lock a file with a shared lock, which allows other processes to
+ - also lock it shared. Fails is the file is exclusively locked. -}
+lockShared :: LockFile -> IO (Maybe LockHandle)
+lockShared = openLock fILE_SHARE_READ
+
+{- Tries to take an exclusive lock on a file. Fails if another process has
+ - a shared or exclusive lock.
+ -
+ - Note that exclusive locking also prevents the file from being opened for
+ - read or write by any other progess. So for advisory locking of a file's
+ - content, a different LockFile should be used. -}
+lockExclusive :: LockFile -> IO (Maybe LockHandle)
+lockExclusive = openLock fILE_SHARE_NONE
+
+{- Windows considers just opening a file enough to lock it. This will
+ - create the LockFile if it does not already exist.
+ -
+ - Will fail if the file is already open with an incompatable ShareMode.
+ - Note that this may happen if an unrelated process, such as a virus
+ - scanner, even looks at the file. See http://support.microsoft.com/kb/316609
+ -
+ - Note that createFile busy-waits to try to avoid failing when some other
+ - process briefly has a file open. But that would make checking locks
+ - much more expensive, so is not done here. Thus, the use of c_CreateFile.
+ -
+ - Also, passing Nothing for SECURITY_ATTRIBUTES ensures that the lock file
+ - is not inheerited by any child process.
+ -}
+openLock :: ShareMode -> LockFile -> IO (Maybe LockHandle)
+openLock sharemode f = do
+ h <- withTString f $ \c_f ->
+ c_CreateFile c_f gENERIC_READ sharemode security_attributes
+ oPEN_ALWAYS fILE_ATTRIBUTE_NORMAL (maybePtr Nothing)
+ return $ if h == iNVALID_HANDLE_VALUE
+ then Nothing
+ else Just h
+ where
+ security_attributes = maybePtr Nothing
+
+dropLock :: LockHandle -> IO ()
+dropLock = closeHandle
+
+{- If the initial lock fails, this is a BUSY wait, and does not
+ - guarentee FIFO order of waiters. In other news, Windows is a POS. -}
+waitToLock :: IO (Maybe LockHandle) -> IO LockHandle
+waitToLock locker = takelock
+ where
+ takelock = go =<< locker
+ go (Just lck) = return lck
+ go Nothing = do
+ threadDelay (500000) -- half a second
+ takelock
diff --git a/Utility/LogFile.hs b/Utility/LogFile.hs
index 73fbf820e..bc6d92ca9 100644
--- a/Utility/LogFile.hs
+++ b/Utility/LogFile.hs
@@ -1,8 +1,8 @@
{- log files
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
@@ -15,13 +15,10 @@ import Common
import System.Posix.Types
#endif
-#ifndef mingw32_HOST_OS
-openLog :: FilePath -> IO Fd
+openLog :: FilePath -> IO Handle
openLog logfile = do
rotateLog logfile
- openFd logfile WriteOnly (Just stdFileMode)
- defaultFileFlags { append = True }
-#endif
+ openFile logfile AppendMode
rotateLog :: FilePath -> IO ()
rotateLog logfile = go 0
diff --git a/Utility/Lsof.hs b/Utility/Lsof.hs
index 63009f723..433b7c679 100644
--- a/Utility/Lsof.hs
+++ b/Utility/Lsof.hs
@@ -1,11 +1,11 @@
{- lsof interface
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
-{-# LANGUAGE BangPatterns, CPP #-}
+{-# LANGUAGE CPP #-}
module Utility.Lsof where
@@ -32,7 +32,7 @@ setup = do
when (isAbsolute cmd) $ do
path <- getSearchPath
let path' = takeDirectory cmd : path
- void $ setEnv "PATH" (intercalate [searchPathSeparator] path') True
+ setEnv "PATH" (intercalate [searchPathSeparator] path') True
{- Checks each of the files in a directory to find open files.
- Note that this will find hard links to files elsewhere that are open. -}
@@ -93,11 +93,15 @@ parseFormatted s = bundle $ go [] $ lines s
_ -> parsefail
parsefiles c [] = (c, [])
- parsefiles c (l:ls) = case splitnull l of
- ['a':mode, 'n':file, ""] ->
- parsefiles ((file, parsemode mode):c) ls
- (('p':_):_) -> (c, l:ls)
- _ -> parsefail
+ parsefiles c (l:ls) = parsefiles' c (splitnull l) l ls
+
+ parsefiles' c ['a':mode, 'n':file, ""] _ ls =
+ parsefiles ((file, parsemode mode):c) ls
+ parsefiles' c (('p':_):_) l ls = (c, l:ls)
+ -- Some buggy versions of lsof emit a f field
+ -- that was not requested, so ignore it.
+ parsefiles' c (('f':_):rest) l ls = parsefiles' c rest l ls
+ parsefiles' _ _ _ _ = parsefail
parsemode ('r':_) = OpenReadOnly
parsemode ('w':_) = OpenWriteOnly
@@ -110,7 +114,7 @@ parseFormatted s = bundle $ go [] $ lines s
{- Parses lsof's default output format. -}
parseDefault :: LsofParser
-parseDefault = catMaybes . map parseline . drop 1 . lines
+parseDefault = mapMaybe parseline . drop 1 . lines
where
parseline l = case words l of
(command : spid : _user : _fd : _type : _device : _size : _node : rest) ->
diff --git a/Utility/Matcher.hs b/Utility/Matcher.hs
index e0a51ff6a..19a77201c 100644
--- a/Utility/Matcher.hs
+++ b/Utility/Matcher.hs
@@ -10,16 +10,16 @@
- Is forgiving about misplaced closing parens, so "foo and (bar or baz"
- will be handled, as will "foo and ( bar or baz ) )"
-
- - Copyright 2011-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2013 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE Rank2Types, KindSignatures #-}
module Utility.Matcher (
Token(..),
- Matcher,
+ Matcher(..),
token,
tokens,
generate,
@@ -64,10 +64,10 @@ generate = simplify . process MAny . tokenGroups
process m [] = m
process m ts = uncurry process $ consume m ts
- consume m ((One And):rest) = term (m `MAnd`) rest
- consume m ((One Or):rest) = term (m `MOr`) rest
- consume m ((One Not):rest) = term (\p -> m `MAnd` (MNot p)) rest
- consume m ((One (Operation o)):rest) = (m `MAnd` MOp o, rest)
+ consume m (One And:rest) = term (m `MAnd`) rest
+ consume m (One Or:rest) = term (m `MOr`) rest
+ consume m (One Not:rest) = term (\p -> m `MAnd` (MNot p)) rest
+ consume m (One (Operation o):rest) = (m `MAnd` MOp o, rest)
consume m (Group g:rest) = (process m g, rest)
consume m (_:rest) = consume m rest
consume m [] = (m, [])
@@ -90,7 +90,7 @@ tokenGroups :: [Token op] -> [TokenGroup op]
tokenGroups [] = []
tokenGroups (t:ts) = go t
where
- go Open =
+ go Open =
let (gr, rest) = findClose ts
in gr : tokenGroups rest
go Close = tokenGroups ts -- not picky about missing Close
@@ -101,14 +101,14 @@ findClose l =
let (g, rest) = go [] l
in (Group (reverse g), rest)
where
- go c [] = (c, []) -- not picky about extra Close
- go c (t:ts) = handle t
+ go c [] = (c, []) -- not picky about extra Close
+ go c (t:ts) = dispatch t
where
- handle Close = (c, ts)
- handle Open =
+ dispatch Close = (c, ts)
+ dispatch Open =
let (c', ts') = go [] ts
in go (Group (reverse c') : c) ts'
- handle _ = go (One t:c) ts
+ dispatch _ = go (One t:c) ts
{- Checks if a Matcher matches, using a supplied function to check
- the value of Operations. -}
diff --git a/Utility/Metered.hs b/Utility/Metered.hs
index 7ad9b1215..7d6e71cdd 100644
--- a/Utility/Metered.hs
+++ b/Utility/Metered.hs
@@ -1,8 +1,8 @@
{- Metered IO
-
- - Copyright 2012, 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2105 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE TypeSynonymInstances #-}
@@ -16,6 +16,8 @@ import qualified Data.ByteString as S
import System.IO.Unsafe
import Foreign.Storable (Storable(sizeOf))
import System.Posix.Types
+import Data.Int
+import Data.Bits.Utils
{- An action that can be run repeatedly, updating it on the bytes processed.
-
@@ -23,6 +25,9 @@ import System.Posix.Types
- far, *not* an incremental amount since the last call. -}
type MeterUpdate = (BytesProcessed -> IO ())
+nullMeterUpdate :: MeterUpdate
+nullMeterUpdate _ = return ()
+
{- Total number of bytes processed so far. -}
newtype BytesProcessed = BytesProcessed Integer
deriving (Eq, Ord, Show)
@@ -31,6 +36,10 @@ class AsBytesProcessed a where
toBytesProcessed :: a -> BytesProcessed
fromBytesProcessed :: BytesProcessed -> a
+instance AsBytesProcessed BytesProcessed where
+ toBytesProcessed = id
+ fromBytesProcessed = id
+
instance AsBytesProcessed Integer where
toBytesProcessed i = BytesProcessed i
fromBytesProcessed (BytesProcessed i) = i
@@ -39,6 +48,10 @@ instance AsBytesProcessed Int where
toBytesProcessed i = BytesProcessed $ toInteger i
fromBytesProcessed (BytesProcessed i) = fromInteger i
+instance AsBytesProcessed Int64 where
+ toBytesProcessed i = BytesProcessed $ toInteger i
+ fromBytesProcessed (BytesProcessed i) = fromInteger i
+
instance AsBytesProcessed FileOffset where
toBytesProcessed sz = BytesProcessed $ toInteger sz
fromBytesProcessed (BytesProcessed sz) = fromInteger sz
@@ -77,36 +90,53 @@ meteredWriteFile :: MeterUpdate -> FilePath -> L.ByteString -> IO ()
meteredWriteFile meterupdate f b = withBinaryFile f WriteMode $ \h ->
meteredWrite meterupdate h b
+{- Applies an offset to a MeterUpdate. This can be useful when
+ - performing a sequence of actions, such as multiple meteredWriteFiles,
+ - that all update a common meter progressively. Or when resuming.
+ -}
+offsetMeterUpdate :: MeterUpdate -> BytesProcessed -> MeterUpdate
+offsetMeterUpdate base offset = \n -> base (offset `addBytesProcessed` n)
+
{- This is like L.hGetContents, but after each chunk is read, a meter
- is updated based on the size of the chunk.
-
+ - All the usual caveats about using unsafeInterleaveIO apply to the
+ - meter updates, so use caution.
+ -}
+hGetContentsMetered :: Handle -> MeterUpdate -> IO L.ByteString
+hGetContentsMetered h = hGetUntilMetered h (const True)
+
+{- Reads from the Handle, updating the meter after each chunk.
+ -
- Note that the meter update is run in unsafeInterleaveIO, which means that
- it can be run at any time. It's even possible for updates to run out
- of order, as different parts of the ByteString are consumed.
-
- - All the usual caveats about using unsafeInterleaveIO apply to the
- - meter updates, so use caution.
+ - Stops at EOF, or when keepgoing evaluates to False.
+ - Closes the Handle at EOF, but otherwise leaves it open.
-}
-hGetContentsMetered :: Handle -> MeterUpdate -> IO L.ByteString
-hGetContentsMetered h meterupdate = lazyRead zeroBytesProcessed
+hGetUntilMetered :: Handle -> (Integer -> Bool) -> MeterUpdate -> IO L.ByteString
+hGetUntilMetered h keepgoing meterupdate = lazyRead zeroBytesProcessed
where
lazyRead sofar = unsafeInterleaveIO $ loop sofar
loop sofar = do
- c <- S.hGetSome h defaultChunkSize
+ c <- S.hGet h defaultChunkSize
if S.null c
then do
hClose h
return $ L.empty
else do
- let sofar' = addBytesProcessed sofar $
- S.length c
+ let sofar' = addBytesProcessed sofar (S.length c)
meterupdate sofar'
- {- unsafeInterleaveIO causes this to be
- - deferred until the data is read from the
- - ByteString. -}
- cs <- lazyRead sofar'
- return $ L.append (L.fromChunks [c]) cs
+ if keepgoing (fromBytesProcessed sofar')
+ then do
+ {- unsafeInterleaveIO causes this to be
+ - deferred until the data is read from the
+ - ByteString. -}
+ cs <- lazyRead sofar'
+ return $ L.append (L.fromChunks [c]) cs
+ else return $ L.fromChunks [c]
{- Same default chunk size Lazy ByteStrings use. -}
defaultChunkSize :: Int
@@ -114,3 +144,37 @@ defaultChunkSize = 32 * k - chunkOverhead
where
k = 1024
chunkOverhead = 2 * sizeOf (undefined :: Int) -- GHC specific
+
+{- Parses the String looking for a command's progress output, and returns
+ - Maybe the number of bytes rsynced so far, and any any remainder of the
+ - string that could be an incomplete progress output. That remainder
+ - should be prepended to future output, and fed back in. This interface
+ - allows the command's output to be read in any desired size chunk, or
+ - even one character at a time.
+ -}
+type ProgressParser = String -> (Maybe BytesProcessed, String)
+
+{- Runs a command and runs a ProgressParser on its output, in order
+ - to update the meter. The command's output is also sent to stdout. -}
+commandMeter :: ProgressParser -> MeterUpdate -> FilePath -> [CommandParam] -> IO Bool
+commandMeter progressparser meterupdate cmd params = liftIO $ catchBoolIO $
+ withHandle StdoutHandle createProcessSuccess p $
+ feedprogress zeroBytesProcessed []
+ where
+ p = proc cmd (toCommand params)
+
+ feedprogress prev buf h = do
+ b <- S.hGetSome h 80
+ if S.null b
+ then return True
+ else do
+ S.hPut stdout b
+ hFlush stdout
+ let s = w82s (S.unpack b)
+ let (mbytes, buf') = progressparser (buf++s)
+ case mbytes of
+ Nothing -> feedprogress prev buf' h
+ (Just bytes) -> do
+ when (bytes /= prev) $
+ meterupdate bytes
+ feedprogress bytes buf' h
diff --git a/Utility/Misc.hs b/Utility/Misc.hs
index 9c19df833..e4eccac43 100644
--- a/Utility/Misc.hs
+++ b/Utility/Misc.hs
@@ -1,8 +1,8 @@
{- misc utility functions
-
- - Copyright 2010-2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2011 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
diff --git a/Utility/Monad.hs b/Utility/Monad.hs
index 1ba43c5f8..878e0da67 100644
--- a/Utility/Monad.hs
+++ b/Utility/Monad.hs
@@ -1,8 +1,8 @@
{- monadic stuff
-
- - Copyright 2010-2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.Monad where
diff --git a/Utility/Mounts.hsc b/Utility/Mounts.hsc
index b6defda43..1fb2362df 100644
--- a/Utility/Mounts.hsc
+++ b/Utility/Mounts.hsc
@@ -4,7 +4,7 @@
- Volker Wysk <hsss@volker-wysk.de>
-
- Modified to support BSD, Mac OS X, and Android by
- - Joey Hess <joey@kitenet.net>
+ - Joey Hess <id@joeyh.name>
-
- Licensed under the GNU LGPL version 2.1 or higher.
-}
diff --git a/Utility/Network.hs b/Utility/Network.hs
index 62523c9e9..7f228e155 100644
--- a/Utility/Network.hs
+++ b/Utility/Network.hs
@@ -1,8 +1,8 @@
{- network functions
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.Network where
diff --git a/Utility/NotificationBroadcaster.hs b/Utility/NotificationBroadcaster.hs
index 60353116c..6f7cabf10 100644
--- a/Utility/NotificationBroadcaster.hs
+++ b/Utility/NotificationBroadcaster.hs
@@ -6,9 +6,9 @@
-
- Multiple clients are supported. Each has a unique id.
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.NotificationBroadcaster (
diff --git a/Utility/OSX.hs b/Utility/OSX.hs
index f9d992575..22028e210 100644
--- a/Utility/OSX.hs
+++ b/Utility/OSX.hs
@@ -1,8 +1,8 @@
{- OSX stuff
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.OSX where
diff --git a/Utility/PID.hs b/Utility/PID.hs
index 4867bd6de..ac63045a7 100644
--- a/Utility/PID.hs
+++ b/Utility/PID.hs
@@ -1,8 +1,8 @@
{- process ids
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
diff --git a/Utility/Parallel.hs b/Utility/Parallel.hs
index b39880355..2352ba706 100644
--- a/Utility/Parallel.hs
+++ b/Utility/Parallel.hs
@@ -1,8 +1,8 @@
{- parallel processing via threads
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.Parallel where
@@ -10,7 +10,6 @@ module Utility.Parallel where
import Common
import Control.Concurrent
-import Control.Exception
{- Runs an action in parallel with a set of values, in a set of threads.
- In order for the actions to truely run in parallel, requires GHC's
diff --git a/Utility/Path.hs b/Utility/Path.hs
index 570350d61..6ecec2c5f 100644
--- a/Utility/Path.hs
+++ b/Utility/Path.hs
@@ -1,8 +1,8 @@
{- path manipulation
-
- - Copyright 2010-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2014 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE PackageImports, CPP #-}
@@ -21,6 +21,7 @@ import Control.Applicative
import qualified System.FilePath.Posix as Posix
#else
import System.Posix.Files
+import Utility.Exception
#endif
import qualified "MissingH" System.Path as MissingH
@@ -65,7 +66,7 @@ absPathFrom :: FilePath -> FilePath -> FilePath
absPathFrom dir path = simplifyPath (combine dir path)
{- On Windows, this converts the paths to unix-style, in order to run
- - MissingH's absNormPath on them. Resulting path will use / separators. -}
+ - MissingH's absNormPath on them. -}
absNormPathUnix :: FilePath -> FilePath -> Maybe FilePath
#ifndef mingw32_HOST_OS
absNormPathUnix dir path = MissingH.absNormPath dir path
@@ -76,27 +77,29 @@ absNormPathUnix dir path = todos <$> MissingH.absNormPath (fromdos dir) (fromdos
todos = replace "/" "\\"
#endif
-{- Returns the parent directory of a path.
- -
- - To allow this to be easily used in loops, which terminate upon reaching the
- - top, the parent of / is "" -}
+{- takeDirectory "foo/bar/" is "foo/bar". This instead yields "foo" -}
parentDir :: FilePath -> FilePath
-parentDir dir
- | null dirs = ""
- | otherwise = joinDrive drive (join s $ init dirs)
+parentDir = takeDirectory . dropTrailingPathSeparator
+
+{- Just the parent directory of a path, or Nothing if the path has no
+- parent (ie for "/" or ".") -}
+upFrom :: FilePath -> Maybe FilePath
+upFrom dir
+ | length dirs < 2 = Nothing
+ | otherwise = Just $ joinDrive drive (join s $ init dirs)
where
-- on Unix, the drive will be "/" when the dir is absolute, otherwise ""
(drive, path) = splitDrive dir
dirs = filter (not . null) $ split s path
s = [pathSeparator]
-prop_parentDir_basics :: FilePath -> Bool
-prop_parentDir_basics dir
+prop_upFrom_basics :: FilePath -> Bool
+prop_upFrom_basics dir
| null dir = True
- | dir == "/" = parentDir dir == ""
- | otherwise = p /= dir
+ | dir == "/" = p == Nothing
+ | otherwise = p /= Just dir
where
- p = parentDir dir
+ p = upFrom dir
{- Checks if the first FilePath is, or could be said to contain the second.
- For example, "foo/" contains "foo/bar". Also, "foo", "./foo", "foo/" etc
@@ -125,14 +128,19 @@ absPath file = do
- relPathCwdToFile "/tmp/foo/bar" == ""
-}
relPathCwdToFile :: FilePath -> IO FilePath
-relPathCwdToFile f = relPathDirToFile <$> getCurrentDirectory <*> absPath f
+relPathCwdToFile f = do
+ c <- getCurrentDirectory
+ relPathDirToFile c f
-{- Constructs a relative path from a directory to a file.
- -
- - Both must be absolute, and cannot contain .. etc. (eg use absPath first).
+{- Constructs a relative path from a directory to a file. -}
+relPathDirToFile :: FilePath -> FilePath -> IO FilePath
+relPathDirToFile from to = relPathDirToFileAbs <$> absPath from <*> absPath to
+
+{- This requires the first path to be absolute, and the
+ - second path cannot contain ../ or ./
-}
-relPathDirToFile :: FilePath -> FilePath -> FilePath
-relPathDirToFile from to = join s $ dotdots ++ uncommon
+relPathDirToFileAbs :: FilePath -> FilePath -> FilePath
+relPathDirToFileAbs from to = join s $ dotdots ++ uncommon
where
s = [pathSeparator]
pfrom = split s from
@@ -148,7 +156,7 @@ prop_relPathDirToFile_basics from to
| from == to = null r
| otherwise = not (null r)
where
- r = relPathDirToFile from to
+ r = relPathDirToFileAbs from to
prop_relPathDirToFile_regressionTest :: Bool
prop_relPathDirToFile_regressionTest = same_dir_shortcurcuits_at_difference
@@ -157,7 +165,7 @@ prop_relPathDirToFile_regressionTest = same_dir_shortcurcuits_at_difference
- location, but it's not really the same directory.
- Code used to get this wrong. -}
same_dir_shortcurcuits_at_difference =
- relPathDirToFile (joinPath [pathSeparator : "tmp", "r", "lll", "xxx", "yyy", "18"])
+ relPathDirToFileAbs (joinPath [pathSeparator : "tmp", "r", "lll", "xxx", "yyy", "18"])
(joinPath [pathSeparator : "tmp", "r", ".git", "annex", "objects", "18", "gk", "SHA256-foo", "SHA256-foo"])
== joinPath ["..", "..", "..", "..", ".git", "annex", "objects", "18", "gk", "SHA256-foo", "SHA256-foo"]
@@ -186,7 +194,7 @@ relHome :: FilePath -> IO String
relHome path = do
home <- myHomeDir
return $ if dirContains home path
- then "~/" ++ relPathDirToFile home path
+ then "~/" ++ relPathDirToFileAbs home path
else path
{- Checks if a command is available in PATH.
@@ -235,11 +243,11 @@ toCygPath p
| null drive = recombine parts
| otherwise = recombine $ "/cygdrive" : driveletter drive : parts
where
- (drive, p') = splitDrive p
+ (drive, p') = splitDrive p
parts = splitDirectories p'
- driveletter = map toLower . takeWhile (/= ':')
+ driveletter = map toLower . takeWhile (/= ':')
recombine = fixtrailing . Posix.joinPath
- fixtrailing s
+ fixtrailing s
| hasTrailingPathSeparator p = Posix.addTrailingPathSeparator s
| otherwise = s
#endif
@@ -255,7 +263,9 @@ fileNameLengthLimit :: FilePath -> IO Int
fileNameLengthLimit _ = return 255
#else
fileNameLengthLimit dir = do
- l <- fromIntegral <$> getPathVar dir FileNameLimit
+ -- getPathVar can fail due to statfs(2) overflow
+ l <- catchDefaultIO 0 $
+ fromIntegral <$> getPathVar dir FileNameLimit
if l <= 0
then return 255
else return $ minimum [l, 255]
@@ -267,12 +277,13 @@ fileNameLengthLimit dir = do
- sane FilePath.
-
- All spaces and punctuation and other wacky stuff are replaced
- - with '_', except for '.' "../" will thus turn into ".._", which is safe.
+ - with '_', except for '.'
+ - "../" will thus turn into ".._", which is safe.
-}
sanitizeFilePath :: String -> FilePath
sanitizeFilePath = map sanitize
where
- sanitize c
+ sanitize c
| c == '.' = c
| isSpace c || isPunctuation c || isSymbol c || isControl c || c == '/' = '_'
| otherwise = c
diff --git a/Utility/Percentage.hs b/Utility/Percentage.hs
index d4b2da429..a30c26037 100644
--- a/Utility/Percentage.hs
+++ b/Utility/Percentage.hs
@@ -1,8 +1,8 @@
{- percentages
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.Percentage (
diff --git a/Utility/PosixFiles.hs b/Utility/PosixFiles.hs
index 23edc25c9..5a94ead01 100644
--- a/Utility/PosixFiles.hs
+++ b/Utility/PosixFiles.hs
@@ -2,9 +2,9 @@
-
- This is like System.PosixCompat.Files, except with a fixed rename.
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
diff --git a/Utility/Process.hs b/Utility/Process.hs
index 1945e4b9d..8fefaa54c 100644
--- a/Utility/Process.hs
+++ b/Utility/Process.hs
@@ -1,18 +1,19 @@
{- System.Process enhancements, including additional ways of running
- processes, and logging.
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP, Rank2Types #-}
module Utility.Process (
module X,
- CreateProcess,
+ CreateProcess(..),
StdHandle(..),
readProcess,
+ readProcess',
readProcessEnv,
writeReadProcessEnv,
forceSuccessProcess,
@@ -31,11 +32,13 @@ module Utility.Process (
stdinHandle,
stdoutHandle,
stderrHandle,
+ bothHandles,
+ processHandle,
devNull,
) where
import qualified System.Process
-import System.Process as X hiding (CreateProcess(..), createProcess, runInteractiveProcess, readProcess, readProcessWithExitCode, system, rawSystem, runInteractiveCommand, runProcess)
+import qualified System.Process as X hiding (CreateProcess(..), createProcess, runInteractiveProcess, readProcess, readProcessWithExitCode, system, rawSystem, runInteractiveCommand, runProcess)
import System.Process hiding (createProcess, readProcess)
import System.Exit
import System.IO
@@ -44,7 +47,7 @@ import Control.Concurrent
import qualified Control.Exception as E
import Control.Monad
#ifndef mingw32_HOST_OS
-import System.Posix.IO
+import qualified System.Posix.IO
#else
import Control.Applicative
#endif
@@ -64,17 +67,19 @@ readProcess :: FilePath -> [String] -> IO String
readProcess cmd args = readProcessEnv cmd args Nothing
readProcessEnv :: FilePath -> [String] -> Maybe [(String, String)] -> IO String
-readProcessEnv cmd args environ =
- withHandle StdoutHandle createProcessSuccess p $ \h -> do
- output <- hGetContentsStrict h
- hClose h
- return output
+readProcessEnv cmd args environ = readProcess' p
where
p = (proc cmd args)
{ std_out = CreatePipe
, env = environ
}
+readProcess' :: CreateProcess -> IO String
+readProcess' p = withHandle StdoutHandle createProcessSuccess p $ \h -> do
+ output <- hGetContentsStrict h
+ hClose h
+ return output
+
{- Runs an action to write to a process on its stdin,
- returns its output, and also allows specifying the environment.
-}
@@ -166,13 +171,13 @@ processTranscript :: String -> [String] -> (Maybe String) -> IO (String, Bool)
processTranscript cmd opts input = processTranscript' cmd opts Nothing input
processTranscript' :: String -> [String] -> Maybe [(String, String)] -> (Maybe String) -> IO (String, Bool)
+processTranscript' cmd opts environ input = do
#ifndef mingw32_HOST_OS
{- This implementation interleves stdout and stderr in exactly the order
- the process writes them. -}
-processTranscript' cmd opts environ input = do
- (readf, writef) <- createPipe
- readh <- fdToHandle readf
- writeh <- fdToHandle writef
+ (readf, writef) <- System.Posix.IO.createPipe
+ readh <- System.Posix.IO.fdToHandle readf
+ writeh <- System.Posix.IO.fdToHandle writef
p@(_, _, _, pid) <- createProcess $
(proc cmd opts)
{ std_in = if isJust input then CreatePipe else Inherit
@@ -183,24 +188,13 @@ processTranscript' cmd opts environ input = do
hClose writeh
get <- mkreader readh
-
- -- now write and flush any input
- case input of
- Just s -> do
- let inh = stdinHandle p
- unless (null s) $ do
- hPutStr inh s
- hFlush inh
- hClose inh
- Nothing -> return ()
-
+ writeinput input p
transcript <- get
ok <- checkSuccessProcess pid
return (transcript, ok)
#else
{- This implementation for Windows puts stderr after stdout. -}
-processTranscript' cmd opts environ input = do
p@(_, _, _, pid) <- createProcess $
(proc cmd opts)
{ std_in = if isJust input then CreatePipe else Inherit
@@ -211,17 +205,9 @@ processTranscript' cmd opts environ input = do
getout <- mkreader (stdoutHandle p)
geterr <- mkreader (stderrHandle p)
-
- case input of
- Just s -> do
- let inh = stdinHandle p
- unless (null s) $ do
- hPutStr inh s
- hFlush inh
- hClose inh
- Nothing -> return ()
-
+ writeinput input p
transcript <- (++) <$> getout <*> geterr
+
ok <- checkSuccessProcess pid
return (transcript, ok)
#endif
@@ -236,6 +222,14 @@ processTranscript' cmd opts environ input = do
takeMVar v
return s
+ writeinput (Just s) p = do
+ let inh = stdinHandle p
+ unless (null s) $ do
+ hPutStr inh s
+ hFlush inh
+ hClose inh
+ writeinput Nothing _ = return ()
+
{- Runs a CreateProcessRunner, on a CreateProcess structure, that
- is adjusted to pipe only from/to a single StdHandle, and passes
- the resulting Handle to an action. -}
@@ -313,6 +307,9 @@ bothHandles :: (Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle) -> (Han
bothHandles (Just hin, Just hout, _, _) = (hin, hout)
bothHandles _ = error "expected bothHandles"
+processHandle :: (Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle) -> ProcessHandle
+processHandle (_, _, _, pid) = pid
+
{- Debugging trace for a CreateProcess. -}
debugProcess :: CreateProcess -> IO ()
debugProcess p = do
diff --git a/Utility/QuickCheck.hs b/Utility/QuickCheck.hs
index 7f7234c7c..54200d3f7 100644
--- a/Utility/QuickCheck.hs
+++ b/Utility/QuickCheck.hs
@@ -1,8 +1,8 @@
{- QuickCheck with additional instances
-
- - Copyright 2012-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
diff --git a/Utility/Quvi.hs b/Utility/Quvi.hs
index bb4975cbe..33653b07b 100644
--- a/Utility/Quvi.hs
+++ b/Utility/Quvi.hs
@@ -1,8 +1,8 @@
{- querying quvi (import qualified)
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE OverloadedStrings #-}
@@ -22,6 +22,7 @@ data QuviVersion
= Quvi04
| Quvi09
| NoQuvi
+ deriving (Show)
data Page = Page
{ pageTitle :: String
@@ -61,7 +62,8 @@ parseEnum s = Page
m = M.fromList $ map (separate (== '=')) $ lines s
probeVersion :: IO QuviVersion
-probeVersion = examine <$> processTranscript "quvi" ["--version"] Nothing
+probeVersion = catchDefaultIO NoQuvi $
+ examine <$> processTranscript "quviaaa" ["--version"] Nothing
where
examine (s, True)
| "quvi v0.4" `isInfixOf` s = Quvi04
@@ -113,7 +115,7 @@ supported Quvi04 url = boolSystem "quvi"
supported Quvi09 url = (firstlevel <&&> secondlevel)
`catchNonAsync` (\_ -> return False)
where
- firstlevel = case uriAuthority =<< parseURIRelaxed url of
+ firstlevel = case uriAuthority =<< parseURIRelaxed url of
Nothing -> return False
Just auth -> do
let domain = map toLower $ uriRegName auth
diff --git a/Utility/Rsync.hs b/Utility/Rsync.hs
index 2c5e39b6e..241202813 100644
--- a/Utility/Rsync.hs
+++ b/Utility/Rsync.hs
@@ -1,10 +1,12 @@
{- various rsync stuff
-
- - Copyright 2010-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2013 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
+{-# LANGUAGE CPP #-}
+
module Utility.Rsync where
import Common
@@ -53,43 +55,18 @@ rsync = boolSystem "rsync" . rsyncParamsFixup
{- On Windows, rsync is from Cygwin, and expects to get Cygwin formatted
- paths to files. (It thinks that C:foo refers to a host named "C").
- - Fix up all Files in the Params appropriately. -}
+ - Fix up the Params appropriately. -}
rsyncParamsFixup :: [CommandParam] -> [CommandParam]
+#ifdef mingw32_HOST_OS
rsyncParamsFixup = map fixup
where
- fixup (File f) = File (toCygPath f)
+ fixup (File f) = File (toCygPath f)
+ fixup (Param s)
+ | rsyncUrlIsPath s = Param (toCygPath s)
fixup p = p
-
-{- Runs rsync, but intercepts its progress output and updates a meter.
- - The progress output is also output to stdout.
- -
- - The params must enable rsync's --progress mode for this to work.
- -}
-rsyncProgress :: MeterUpdate -> [CommandParam] -> IO Bool
-rsyncProgress meterupdate params = do
- r <- catchBoolIO $
- withHandle StdoutHandle createProcessSuccess p (feedprogress 0 [])
- {- For an unknown reason, piping rsync's output like this does
- - causes it to run a second ssh process, which it neglects to wait
- - on. Reap the resulting zombie. -}
- reapZombies
- return r
- where
- p = proc "rsync" (toCommand $ rsyncParamsFixup params)
- feedprogress prev buf h = do
- s <- hGetSomeString h 80
- if null s
- then return True
- else do
- putStr s
- hFlush stdout
- let (mbytes, buf') = parseRsyncProgress (buf++s)
- case mbytes of
- Nothing -> feedprogress prev buf' h
- (Just bytes) -> do
- when (bytes /= prev) $
- meterupdate $ toBytesProcessed bytes
- feedprogress bytes buf' h
+#else
+rsyncParamsFixup = id
+#endif
{- Checks if an rsync url involves the remote shell (ssh or rsh).
- Use of such urls with rsync requires additional shell
@@ -109,40 +86,50 @@ rsyncUrlIsShell s
{- Checks if a rsync url is really just a local path. -}
rsyncUrlIsPath :: String -> Bool
rsyncUrlIsPath s
+#ifdef mingw32_HOST_OS
+ | not (null (takeDrive s)) = True
+#endif
| rsyncUrlIsShell s = False
| otherwise = ':' `notElem` s
-{- Parses the String looking for rsync progress output, and returns
- - Maybe the number of bytes rsynced so far, and any any remainder of the
- - string that could be an incomplete progress output. That remainder
- - should be prepended to future output, and fed back in. This interface
- - allows the output to be read in any desired size chunk, or even one
- - character at a time.
+{- Runs rsync, but intercepts its progress output and updates a meter.
+ - The progress output is also output to stdout.
-
- - Strategy: Look for chunks prefixed with \r (rsync writes a \r before
+ - The params must enable rsync's --progress mode for this to work.
+ -}
+rsyncProgress :: MeterUpdate -> [CommandParam] -> IO Bool
+rsyncProgress meterupdate = commandMeter parseRsyncProgress meterupdate "rsync" . rsyncParamsFixup
+
+{- Strategy: Look for chunks prefixed with \r (rsync writes a \r before
- the first progress output, and each thereafter). The first number
- after the \r is the number of bytes processed. After the number,
- there must appear some whitespace, or we didn't get the whole number,
- and return the \r and part we did get, for later processing.
+ -
+ - In some locales, the number will have one or more commas in the middle
+ - of it.
-}
-parseRsyncProgress :: String -> (Maybe Integer, String)
+parseRsyncProgress :: ProgressParser
parseRsyncProgress = go [] . reverse . progresschunks
where
go remainder [] = (Nothing, remainder)
go remainder (x:xs) = case parsebytes (findbytesstart x) of
Nothing -> go (delim:x++remainder) xs
- Just b -> (Just b, remainder)
+ Just b -> (Just (toBytesProcessed b), remainder)
delim = '\r'
+
{- Find chunks that each start with delim.
- The first chunk doesn't start with it
- (it's empty when delim is at the start of the string). -}
progresschunks = drop 1 . split [delim]
findbytesstart s = dropWhile isSpace s
+
+ parsebytes :: String -> Maybe Integer
parsebytes s = case break isSpace s of
([], _) -> Nothing
(_, []) -> Nothing
- (b, _) -> readish b
+ (b, _) -> readish $ filter (/= ',') b
{- Filters options to those that are safe to pass to rsync in server mode,
- without causing it to eg, expose files. -}
diff --git a/Utility/SRV.hs b/Utility/SRV.hs
index a2ee704f7..203585a7e 100644
--- a/Utility/SRV.hs
+++ b/Utility/SRV.hs
@@ -3,9 +3,9 @@
- Uses either the ADNS Haskell library, or the standalone Haskell DNS
- package, or the host command.
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
@@ -74,7 +74,7 @@ lookupSRV (SRV srv) = do
maybe [] use r
#endif
where
- use = orderHosts . map tohosts
+ use = orderHosts . map tohosts
tohosts (priority, weight, port, hostname) =
( (priority, weight)
, (B8.toString hostname, PortNumber $ fromIntegral port)
diff --git a/Utility/SafeCommand.hs b/Utility/SafeCommand.hs
index c8318ec2e..a5556200a 100644
--- a/Utility/SafeCommand.hs
+++ b/Utility/SafeCommand.hs
@@ -1,15 +1,14 @@
{- safely running shell commands
-
- - Copyright 2010-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2013 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.SafeCommand where
import System.Exit
import Utility.Process
-import System.Process (env)
import Data.String.Utils
import Control.Applicative
import System.FilePath
diff --git a/Utility/Scheduled.hs b/Utility/Scheduled.hs
index acbee70ff..e077a1fea 100644
--- a/Utility/Scheduled.hs
+++ b/Utility/Scheduled.hs
@@ -1,8 +1,8 @@
{- scheduled activities
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013-2014 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.Scheduled (
@@ -10,7 +10,12 @@ module Utility.Scheduled (
Recurrance(..),
ScheduledTime(..),
NextTime(..),
+ WeekDay,
+ MonthDay,
+ YearDay,
nextTime,
+ calcNextTime,
+ startTime,
fromSchedule,
fromScheduledTime,
toScheduledTime,
@@ -18,12 +23,17 @@ module Utility.Scheduled (
toRecurrance,
toSchedule,
parseSchedule,
- prop_schedule_roundtrips
+ prop_schedule_roundtrips,
+ prop_past_sane,
) where
-import Common
+import Utility.Data
import Utility.QuickCheck
+import Utility.PartialPrelude
+import Utility.Misc
+import Control.Applicative
+import Data.List
import Data.Time.Clock
import Data.Time.LocalTime
import Data.Time.Calendar
@@ -34,17 +44,17 @@ import Data.Char
{- Some sort of scheduled event. -}
data Schedule = Schedule Recurrance ScheduledTime
- deriving (Eq, Read, Show, Ord)
+ deriving (Eq, Read, Show, Ord)
data Recurrance
= Daily
| Weekly (Maybe WeekDay)
| Monthly (Maybe MonthDay)
| Yearly (Maybe YearDay)
- -- Days, Weeks, or Months of the year evenly divisible by a number.
- -- (Divisible Year is years evenly divisible by a number.)
| Divisible Int Recurrance
- deriving (Eq, Read, Show, Ord)
+ -- ^ Days, Weeks, or Months of the year evenly divisible by a number.
+ -- (Divisible Year is years evenly divisible by a number.)
+ deriving (Eq, Read, Show, Ord)
type WeekDay = Int
type MonthDay = Int
@@ -53,17 +63,17 @@ type YearDay = Int
data ScheduledTime
= AnyTime
| SpecificTime Hour Minute
- deriving (Eq, Read, Show, Ord)
+ deriving (Eq, Read, Show, Ord)
type Hour = Int
type Minute = Int
-{- Next time a Schedule should take effect. The NextTimeWindow is used
- - when a Schedule is allowed to start at some point within the window. -}
+-- | Next time a Schedule should take effect. The NextTimeWindow is used
+-- when a Schedule is allowed to start at some point within the window.
data NextTime
= NextTimeExactly LocalTime
| NextTimeWindow LocalTime LocalTime
- deriving (Eq, Read, Show)
+ deriving (Eq, Read, Show)
startTime :: NextTime -> LocalTime
startTime (NextTimeExactly t) = t
@@ -75,10 +85,10 @@ nextTime schedule lasttime = do
tz <- getTimeZone now
return $ calcNextTime schedule lasttime $ utcToLocalTime tz now
-{- Calculate the next time that fits a Schedule, based on the
- - last time it occurred, and the current time. -}
+-- | Calculate the next time that fits a Schedule, based on the
+-- last time it occurred, and the current time.
calcNextTime :: Schedule -> Maybe LocalTime -> LocalTime -> Maybe NextTime
-calcNextTime (Schedule recurrance scheduledtime) lasttime currenttime
+calcNextTime schedule@(Schedule recurrance scheduledtime) lasttime currenttime
| scheduledtime == AnyTime = do
next <- findfromtoday True
return $ case next of
@@ -86,13 +96,13 @@ calcNextTime (Schedule recurrance scheduledtime) lasttime currenttime
NextTimeExactly t -> window (localDay t) (localDay t)
| otherwise = NextTimeExactly . startTime <$> findfromtoday False
where
- findfromtoday anytime = findfrom recurrance afterday today
+ findfromtoday anytime = findfrom recurrance afterday today
where
- today = localDay currenttime
- afterday = sameaslastday || toolatetoday
+ today = localDay currenttime
+ afterday = sameaslastrun || toolatetoday
toolatetoday = not anytime && localTimeOfDay currenttime >= nexttime
- sameaslastday = lastday == Just today
- lastday = localDay <$> lasttime
+ sameaslastrun = lastrun == Just today
+ lastrun = localDay <$> lasttime
nexttime = case scheduledtime of
AnyTime -> TimeOfDay 0 0 0
SpecificTime h m -> TimeOfDay h m 0
@@ -100,68 +110,84 @@ calcNextTime (Schedule recurrance scheduledtime) lasttime currenttime
window startd endd = NextTimeWindow
(LocalTime startd nexttime)
(LocalTime endd (TimeOfDay 23 59 0))
- findfrom r afterday day = case r of
+ findfrom r afterday candidate
+ | ynum candidate > (ynum (localDay currenttime)) + 100 =
+ -- avoid possible infinite recusion
+ error $ "bug: calcNextTime did not find a time within 100 years to run " ++
+ show (schedule, lasttime, currenttime)
+ | otherwise = findfromChecked r afterday candidate
+ findfromChecked r afterday candidate = case r of
Daily
- | afterday -> Just $ exactly $ addDays 1 day
- | otherwise -> Just $ exactly day
+ | afterday -> Just $ exactly $ addDays 1 candidate
+ | otherwise -> Just $ exactly candidate
Weekly Nothing
| afterday -> skip 1
- | otherwise -> case (wday <$> lastday, wday day) of
- (Nothing, _) -> Just $ window day (addDays 6 day)
+ | otherwise -> case (wday <$> lastrun, wday candidate) of
+ (Nothing, _) -> Just $ window candidate (addDays 6 candidate)
(Just old, curr)
- | old == curr -> Just $ window day (addDays 6 day)
+ | old == curr -> Just $ window candidate (addDays 6 candidate)
| otherwise -> skip 1
Monthly Nothing
| afterday -> skip 1
- | maybe True (\old -> mnum day > mday old && mday day >= (mday old `mod` minmday)) lastday ->
- -- Window only covers current month,
- -- in case there is a Divisible requirement.
- Just $ window day (endOfMonth day)
+ | maybe True (candidate `oneMonthPast`) lastrun ->
+ Just $ window candidate (endOfMonth candidate)
| otherwise -> skip 1
Yearly Nothing
| afterday -> skip 1
- | maybe True (\old -> ynum day > ynum old && yday day >= (yday old `mod` minyday)) lastday ->
- Just $ window day (endOfYear day)
+ | maybe True (candidate `oneYearPast`) lastrun ->
+ Just $ window candidate (endOfYear candidate)
| otherwise -> skip 1
Weekly (Just w)
| w < 0 || w > maxwday -> Nothing
- | w == wday day -> if afterday
- then Just $ exactly $ addDays 7 day
- else Just $ exactly day
+ | w == wday candidate -> if afterday
+ then Just $ exactly $ addDays 7 candidate
+ else Just $ exactly candidate
| otherwise -> Just $ exactly $
- addDays (fromIntegral $ (w - wday day) `mod` 7) day
+ addDays (fromIntegral $ (w - wday candidate) `mod` 7) candidate
Monthly (Just m)
| m < 0 || m > maxmday -> Nothing
-- TODO can be done more efficiently than recursing
- | m == mday day -> if afterday
+ | m == mday candidate -> if afterday
then skip 1
- else Just $ exactly day
+ else Just $ exactly candidate
| otherwise -> skip 1
Yearly (Just y)
| y < 0 || y > maxyday -> Nothing
- | y == yday day -> if afterday
+ | y == yday candidate -> if afterday
then skip 365
- else Just $ exactly day
+ else Just $ exactly candidate
| otherwise -> skip 1
Divisible n r'@Daily -> handlediv n r' yday (Just maxyday)
Divisible n r'@(Weekly _) -> handlediv n r' wnum (Just maxwnum)
Divisible n r'@(Monthly _) -> handlediv n r' mnum (Just maxmnum)
Divisible n r'@(Yearly _) -> handlediv n r' ynum Nothing
- Divisible _ r'@(Divisible _ _) -> findfrom r' afterday day
+ Divisible _ r'@(Divisible _ _) -> findfrom r' afterday candidate
where
- skip n = findfrom r False (addDays n day)
- handlediv n r' getval mmax
+ skip n = findfrom r False (addDays n candidate)
+ handlediv n r' getval mmax
| n > 0 && maybe True (n <=) mmax =
- findfromwhere r' (divisible n . getval) afterday day
+ findfromwhere r' (divisible n . getval) afterday candidate
| otherwise = Nothing
- findfromwhere r p afterday day
+ findfromwhere r p afterday candidate
| maybe True (p . getday) next = next
| otherwise = maybe Nothing (findfromwhere r p True . getday) next
where
- next = findfrom r afterday day
+ next = findfrom r afterday candidate
getday = localDay . startTime
divisible n v = v `rem` n == 0
+-- Check if the new Day occurs one month or more past the old Day.
+oneMonthPast :: Day -> Day -> Bool
+new `oneMonthPast` old = fromGregorian y (m+1) d <= new
+ where
+ (y,m,d) = toGregorian old
+
+-- Check if the new Day occurs one year or more past the old Day.
+oneYearPast :: Day -> Day -> Bool
+new `oneYearPast` old = fromGregorian (y+1) m d <= new
+ where
+ (y,m,d) = toGregorian old
+
endOfMonth :: Day -> Day
endOfMonth day =
let (y,m,_d) = toGregorian day
@@ -186,17 +212,13 @@ yday = snd . toOrdinalDate
ynum :: Day -> Int
ynum = fromIntegral . fst . toOrdinalDate
-{- Calendar max and mins. -}
+-- Calendar max values.
maxyday :: Int
maxyday = 366 -- with leap days
-minyday :: Int
-minyday = 365
maxwnum :: Int
maxwnum = 53 -- some years have more than 52
maxmday :: Int
maxmday = 31
-minmday :: Int
-minmday = 28
maxmnum :: Int
maxmnum = 12
maxwday :: Int
@@ -245,7 +267,7 @@ toRecurrance s = case words s of
constructor u
| "s" `isSuffixOf` u = constructor $ reverse $ drop 1 $ reverse u
| otherwise = Nothing
- withday sd u = do
+ withday sd u = do
c <- constructor u
d <- readish sd
Just $ c (Just d)
@@ -263,7 +285,7 @@ fromScheduledTime AnyTime = "any time"
fromScheduledTime (SpecificTime h m) =
show h' ++ (if m > 0 then ":" ++ pad 2 (show m) else "") ++ " " ++ ampm
where
- pad n s = take (n - length s) (repeat '0') ++ s
+ pad n s = take (n - length s) (repeat '0') ++ s
(h', ampm)
| h == 0 = (12, "AM")
| h < 12 = (h, "AM")
@@ -282,10 +304,10 @@ toScheduledTime v = case words v of
(s:[]) -> go s id
_ -> Nothing
where
- h0 h
+ h0 h
| h == 12 = 0
| otherwise = h
- go :: String -> (Int -> Int) -> Maybe ScheduledTime
+ go :: String -> (Int -> Int) -> Maybe ScheduledTime
go s adjust =
let (h, m) = separate (== ':') s
in SpecificTime
@@ -341,10 +363,34 @@ instance Arbitrary Recurrance where
]
]
where
- arbday = oneof
+ arbday = oneof
[ Just <$> nonNegative arbitrary
, pure Nothing
]
prop_schedule_roundtrips :: Schedule -> Bool
prop_schedule_roundtrips s = toSchedule (fromSchedule s) == Just s
+
+prop_past_sane :: Bool
+prop_past_sane = and
+ [ all (checksout oneMonthPast) (mplus1 ++ yplus1)
+ , all (not . (checksout oneMonthPast)) (map swap (mplus1 ++ yplus1))
+ , all (checksout oneYearPast) yplus1
+ , all (not . (checksout oneYearPast)) (map swap yplus1)
+ ]
+ where
+ mplus1 = -- new date old date, 1+ months before it
+ [ (fromGregorian 2014 01 15, fromGregorian 2013 12 15)
+ , (fromGregorian 2014 01 15, fromGregorian 2013 02 15)
+ , (fromGregorian 2014 02 15, fromGregorian 2013 01 15)
+ , (fromGregorian 2014 03 01, fromGregorian 2013 01 15)
+ , (fromGregorian 2014 03 01, fromGregorian 2013 12 15)
+ , (fromGregorian 2015 01 01, fromGregorian 2010 01 01)
+ ]
+ yplus1 = -- new date old date, 1+ years before it
+ [ (fromGregorian 2014 01 15, fromGregorian 2012 01 16)
+ , (fromGregorian 2014 01 15, fromGregorian 2013 01 14)
+ , (fromGregorian 2022 12 31, fromGregorian 2000 01 01)
+ ]
+ checksout cmp (new, old) = new `cmp` old
+ swap (a,b) = (b,a)
diff --git a/Utility/Shell.hs b/Utility/Shell.hs
index 2227dc767..e71ca53aa 100644
--- a/Utility/Shell.hs
+++ b/Utility/Shell.hs
@@ -1,8 +1,8 @@
{- /bin/sh handling
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
diff --git a/Utility/SimpleProtocol.hs b/Utility/SimpleProtocol.hs
new file mode 100644
index 000000000..4a2d8635e
--- /dev/null
+++ b/Utility/SimpleProtocol.hs
@@ -0,0 +1,90 @@
+{- Simple line-based protocols.
+ -
+ - Copyright 2013-2014 Joey Hess <id@joeyh.name>
+ -
+ - License: BSD-2-clause
+ -}
+
+module Utility.SimpleProtocol (
+ Sendable(..),
+ Receivable(..),
+ parseMessage,
+ Serializable(..),
+ Parser,
+ parseFail,
+ parse0,
+ parse1,
+ parse2,
+ parse3,
+ ioHandles,
+) where
+
+import Data.Char
+import GHC.IO.Handle
+
+import Common
+
+-- Messages that can be sent.
+class Sendable m where
+ formatMessage :: m -> [String]
+
+-- Messages that can be received.
+class Receivable m where
+ -- Passed the first word of the message, returns
+ -- a Parser that can be be fed the rest of the message to generate
+ -- the value.
+ parseCommand :: String -> Parser m
+
+parseMessage :: (Receivable m) => String -> Maybe m
+parseMessage s = parseCommand command rest
+ where
+ (command, rest) = splitWord s
+
+class Serializable a where
+ serialize :: a -> String
+ deserialize :: String -> Maybe a
+
+{- Parsing the parameters of messages. Using the right parseN ensures
+ - that the string is split into exactly the requested number of words,
+ - which allows the last parameter of a message to contain arbitrary
+ - whitespace, etc, without needing any special quoting.
+ -}
+type Parser a = String -> Maybe a
+
+parseFail :: Parser a
+parseFail _ = Nothing
+
+parse0 :: a -> Parser a
+parse0 mk "" = Just mk
+parse0 _ _ = Nothing
+
+parse1 :: Serializable p1 => (p1 -> a) -> Parser a
+parse1 mk p1 = mk <$> deserialize p1
+
+parse2 :: (Serializable p1, Serializable p2) => (p1 -> p2 -> a) -> Parser a
+parse2 mk s = mk <$> deserialize p1 <*> deserialize p2
+ where
+ (p1, p2) = splitWord s
+
+parse3 :: (Serializable p1, Serializable p2, Serializable p3) => (p1 -> p2 -> p3 -> a) -> Parser a
+parse3 mk s = mk <$> deserialize p1 <*> deserialize p2 <*> deserialize p3
+ where
+ (p1, rest) = splitWord s
+ (p2, p3) = splitWord rest
+
+splitWord :: String -> (String, String)
+splitWord = separate isSpace
+
+{- When a program speaks a simple protocol over stdio, any other output
+ - to stdout (or anything that attempts to read from stdin)
+ - will mess up the protocol. To avoid that, close stdin, and
+ - and duplicate stderr to stdout. Return two new handles
+ - that are duplicates of the original (stdin, stdout). -}
+ioHandles :: IO (Handle, Handle)
+ioHandles = do
+ readh <- hDuplicate stdin
+ writeh <- hDuplicate stdout
+ nullh <- openFile devNull ReadMode
+ nullh `hDuplicateTo` stdin
+ stderr `hDuplicateTo` stdout
+ return (readh, writeh)
diff --git a/Utility/SshConfig.hs b/Utility/SshConfig.hs
index 080f6479f..ca336a4b8 100644
--- a/Utility/SshConfig.hs
+++ b/Utility/SshConfig.hs
@@ -1,8 +1,8 @@
{- ssh config file parsing and modification
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.SshConfig where
@@ -56,7 +56,7 @@ parseSshConfig = go [] . lines
| iscomment l = hoststanza host c ((Left $ mkcomment l):hc) ls
| otherwise = case splitline l of
(indent, k, v)
- | isHost k -> hoststanza v
+ | isHost k -> hoststanza v
(HostConfig host (reverse hc):c) [] ls
| otherwise -> hoststanza host c
((Right $ SshSetting indent k v):hc) ls
@@ -87,7 +87,7 @@ genSshConfig = unlines . concatMap gen
findHostConfigKey :: SshConfig -> Key -> Maybe Value
findHostConfigKey (HostConfig _ cs) wantk = go (rights cs) (map toLower wantk)
where
- go [] _ = Nothing
+ go [] _ = Nothing
go ((SshSetting _ k v):rest) wantk'
| map toLower k == wantk' = Just v
| otherwise = go rest wantk'
@@ -98,7 +98,7 @@ addToHostConfig :: SshConfig -> Key -> Value -> SshConfig
addToHostConfig (HostConfig host cs) k v =
HostConfig host $ Right (SshSetting indent k v) : cs
where
- {- The indent is taken from any existing SshSetting
+ {- The indent is taken from any existing SshSetting
- in the HostConfig (largest indent wins). -}
indent = fromMaybe "\t" $ headMaybe $ reverse $
sortBy (comparing length) $ map getindent cs
diff --git a/Utility/TList.hs b/Utility/TList.hs
index 4b91b767f..033c8ca02 100644
--- a/Utility/TList.hs
+++ b/Utility/TList.hs
@@ -6,7 +6,7 @@
- Unlike a TQueue, the entire contents of a TList can be efficiently
- read without modifying it.
-
- - Copyright 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2013 Joey Hess <id@joeyh.name>
-}
{-# LANGUAGE BangPatterns #-}
@@ -57,7 +57,7 @@ modifyTList tlist a = do
unless (emptyDList dl') $
putTMVar tlist dl'
where
- emptyDList = D.list True (\_ _ -> False)
+ emptyDList = D.list True (\_ _ -> False)
consTList :: TList a -> a -> STM ()
consTList tlist v = modifyTList tlist $ \dl -> D.cons v dl
diff --git a/Utility/Tense.hs b/Utility/Tense.hs
index 60b3fa513..ef2454bdc 100644
--- a/Utility/Tense.hs
+++ b/Utility/Tense.hs
@@ -1,8 +1,8 @@
{- Past and present tense text.
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE OverloadedStrings #-}
diff --git a/Utility/ThreadLock.hs b/Utility/ThreadLock.hs
index c029a2b0c..e212fc11f 100644
--- a/Utility/ThreadLock.hs
+++ b/Utility/ThreadLock.hs
@@ -1,8 +1,8 @@
{- locking between threads
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.ThreadLock where
diff --git a/Utility/ThreadScheduler.hs b/Utility/ThreadScheduler.hs
index dbb6cb317..da05e9966 100644
--- a/Utility/ThreadScheduler.hs
+++ b/Utility/ThreadScheduler.hs
@@ -1,19 +1,22 @@
{- thread scheduling
-
- - Copyright 2012, 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012, 2013 Joey Hess <id@joeyh.name>
- Copyright 2011 Bas van Dijk & Roel van Dijk
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
module Utility.ThreadScheduler where
-import Common
-
+import Control.Monad
import Control.Concurrent
#ifndef mingw32_HOST_OS
+import Control.Monad.IfElse
+import System.Posix.IO
+#endif
+#ifndef mingw32_HOST_OS
import System.Posix.Signals
#ifndef __ANDROID__
import System.Posix.Terminal
@@ -54,8 +57,7 @@ unboundDelay time = do
waitForTermination :: IO ()
waitForTermination = do
#ifdef mingw32_HOST_OS
- runEvery (Seconds 600) $
- void getLine
+ forever $ threadDelaySeconds (Seconds 6000)
#else
lock <- newEmptyMVar
let check sig = void $
diff --git a/Utility/Tmp.hs b/Utility/Tmp.hs
index f46e1a5ee..dc5598137 100644
--- a/Utility/Tmp.hs
+++ b/Utility/Tmp.hs
@@ -1,19 +1,19 @@
{- Temporary files and directories.
-
- - Copyright 2010-2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2013 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
module Utility.Tmp where
-import Control.Exception (bracket)
import System.IO
import System.Directory
import Control.Monad.IfElse
import System.FilePath
+import Control.Monad.IO.Class
import Utility.Exception
import Utility.FileSystemEncoding
@@ -24,45 +24,52 @@ type Template = String
{- Runs an action like writeFile, writing to a temp file first and
- then moving it into place. The temp file is stored in the same
- directory as the final file to avoid cross-device renames. -}
-viaTmp :: (FilePath -> String -> IO ()) -> FilePath -> String -> IO ()
-viaTmp a file content = do
- let (dir, base) = splitFileName file
- createDirectoryIfMissing True dir
- (tmpfile, handle) <- openTempFile dir (base ++ ".tmp")
- hClose handle
- a tmpfile content
- rename tmpfile file
+viaTmp :: (MonadMask m, MonadIO m) => (FilePath -> String -> m ()) -> FilePath -> String -> m ()
+viaTmp a file content = bracketIO setup cleanup use
+ where
+ (dir, base) = splitFileName file
+ template = base ++ ".tmp"
+ setup = do
+ createDirectoryIfMissing True dir
+ openTempFile dir template
+ cleanup (tmpfile, h) = do
+ _ <- tryIO $ hClose h
+ tryIO $ removeFile tmpfile
+ use (tmpfile, h) = do
+ liftIO $ hClose h
+ a tmpfile content
+ liftIO $ rename tmpfile file
{- Runs an action with a tmp file located in the system's tmp directory
- (or in "." if there is none) then removes the file. -}
-withTmpFile :: Template -> (FilePath -> Handle -> IO a) -> IO a
+withTmpFile :: (MonadIO m, MonadMask m) => Template -> (FilePath -> Handle -> m a) -> m a
withTmpFile template a = do
- tmpdir <- catchDefaultIO "." getTemporaryDirectory
+ tmpdir <- liftIO $ catchDefaultIO "." getTemporaryDirectory
withTmpFileIn tmpdir template a
{- Runs an action with a tmp file located in the specified directory,
- then removes the file. -}
-withTmpFileIn :: FilePath -> Template -> (FilePath -> Handle -> IO a) -> IO a
+withTmpFileIn :: (MonadIO m, MonadMask m) => FilePath -> Template -> (FilePath -> Handle -> m a) -> m a
withTmpFileIn tmpdir template a = bracket create remove use
where
- create = openTempFile tmpdir template
- remove (name, handle) = do
- hClose handle
+ create = liftIO $ openTempFile tmpdir template
+ remove (name, h) = liftIO $ do
+ hClose h
catchBoolIO (removeFile name >> return True)
- use (name, handle) = a name handle
+ use (name, h) = a name h
{- Runs an action with a tmp directory located within the system's tmp
- directory (or within "." if there is none), then removes the tmp
- directory and all its contents. -}
-withTmpDir :: Template -> (FilePath -> IO a) -> IO a
+withTmpDir :: (MonadMask m, MonadIO m) => Template -> (FilePath -> m a) -> m a
withTmpDir template a = do
- tmpdir <- catchDefaultIO "." getTemporaryDirectory
+ tmpdir <- liftIO $ catchDefaultIO "." getTemporaryDirectory
withTmpDirIn tmpdir template a
{- Runs an action with a tmp directory located within a specified directory,
- then removes the tmp directory and all its contents. -}
-withTmpDirIn :: FilePath -> Template -> (FilePath -> IO a) -> IO a
-withTmpDirIn tmpdir template = bracket create remove
+withTmpDirIn :: (MonadMask m, MonadIO m) => FilePath -> Template -> (FilePath -> m a) -> m a
+withTmpDirIn tmpdir template = bracketIO create remove
where
remove d = whenM (doesDirectoryExist d) $ do
#if mingw32_HOST_OS
diff --git a/Utility/Touch.hsc b/Utility/Touch.hsc
index 53dd719fb..f87bb62d6 100644
--- a/Utility/Touch.hsc
+++ b/Utility/Touch.hsc
@@ -1,8 +1,8 @@
{- More control over touching a file.
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE ForeignFunctionInterface #-}
@@ -13,11 +13,25 @@ module Utility.Touch (
touch
) where
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <sys/time.h>
+
+#ifndef _BSD_SOURCE
+#define _BSD_SOURCE
+#endif
+
+#if (defined UTIME_OMIT && defined UTIME_NOW && defined AT_FDCWD && defined AT_SYMLINK_NOFOLLOW)
+#define use_utimensat 1
+
import Utility.FileSystemEncoding
+import Control.Monad (when)
import Foreign
+#endif
+
import Foreign.C
-import Control.Monad (when)
newtype TimeSpec = TimeSpec CTime
@@ -28,16 +42,7 @@ touchBoth :: FilePath -> TimeSpec -> TimeSpec -> Bool -> IO ()
touch :: FilePath -> TimeSpec -> Bool -> IO ()
touch file mtime = touchBoth file mtime mtime
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/time.h>
-
-#ifndef _BSD_SOURCE
-#define _BSD_SOURCE
-#endif
-
-#if (defined UTIME_OMIT && defined UTIME_NOW && defined AT_FDCWD && defined AT_SYMLINK_NOFOLLOW)
+#ifdef use_utimensat
at_fdcwd :: CInt
at_fdcwd = #const AT_FDCWD
diff --git a/Utility/URI.hs b/Utility/URI.hs
new file mode 100644
index 000000000..e68fda58d
--- /dev/null
+++ b/Utility/URI.hs
@@ -0,0 +1,18 @@
+{- Network.URI
+ -
+ - Copyright 2014 Joey Hess <id@joeyh.name>
+ -
+ - License: BSD-2-clause
+ -}
+
+{-# LANGUAGE CPP #-}
+
+module Utility.URI where
+
+-- Old versions of network lacked an Ord for URI
+#if ! MIN_VERSION_network(2,4,0)
+import Network.URI
+
+instance Ord URI where
+ a `compare` b = show a `compare` show b
+#endif
diff --git a/Utility/Url.hs b/Utility/Url.hs
index 3ab14ebe4..ddf5eea40 100644
--- a/Utility/Url.hs
+++ b/Utility/Url.hs
@@ -1,19 +1,24 @@
{- Url downloading.
-
- - Copyright 2011,2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RankNTypes #-}
module Utility.Url (
URLString,
UserAgent,
- UrlOptions(..),
+ UrlOptions,
+ mkUrlOptions,
check,
checkBoth,
exists,
+ UrlInfo(..),
+ getUrlInfo,
download,
downloadQuiet,
parseURIRelaxed
@@ -21,10 +26,11 @@ module Utility.Url (
import Common
import Network.URI
-import qualified Network.Browser as Browser
-import Network.HTTP
-import Data.Either
-import Data.Default
+import Network.HTTP.Conduit
+import Network.HTTP.Types
+import qualified Data.CaseInsensitive as CI
+import qualified Data.ByteString as B
+import qualified Data.ByteString.UTF8 as B8
import qualified Build.SysConfig
@@ -38,11 +44,39 @@ data UrlOptions = UrlOptions
{ userAgent :: Maybe UserAgent
, reqHeaders :: Headers
, reqParams :: [CommandParam]
+#if MIN_VERSION_http_conduit(2,0,0)
+ , applyRequest :: Request -> Request
+#else
+ , applyRequest :: forall m. Request m -> Request m
+#endif
}
instance Default UrlOptions
where
- def = UrlOptions Nothing [] []
+ def = UrlOptions Nothing [] [] id
+
+mkUrlOptions :: Maybe UserAgent -> Headers -> [CommandParam] -> UrlOptions
+mkUrlOptions useragent reqheaders reqparams =
+ UrlOptions useragent reqheaders reqparams applyrequest
+ where
+ applyrequest = \r -> r { requestHeaders = requestHeaders r ++ addedheaders }
+ addedheaders = uaheader ++ otherheaders
+ uaheader = case useragent of
+ Nothing -> []
+ Just ua -> [(hUserAgent, B8.fromString ua)]
+ otherheaders = map toheader reqheaders
+ toheader s =
+ let (h, v) = separate (== ':') s
+ h' = CI.mk (B8.fromString h)
+ in case v of
+ (' ':v') -> (h', B8.fromString v')
+ _ -> (h', B8.fromString v)
+
+addUserAgent :: UrlOptions -> [CommandParam] -> [CommandParam]
+addUserAgent uo ps = case userAgent uo of
+ Nothing -> ps
+ -- --user-agent works for both wget and curl commands
+ Just ua -> ps ++ [Param "--user-agent", Param ua]
{- Checks that an url exists and could be successfully downloaded,
- also checking that its size, if available, matches a specified size. -}
@@ -51,44 +85,53 @@ checkBoth url expected_size uo = do
v <- check url expected_size uo
return (fst v && snd v)
check :: URLString -> Maybe Integer -> UrlOptions -> IO (Bool, Bool)
-check url expected_size = handle <$$> exists url
+check url expected_size = go <$$> getUrlInfo url
where
- handle (False, _) = (False, False)
- handle (True, Nothing) = (True, True)
- handle (True, s) = case expected_size of
+ go (UrlInfo False _ _) = (False, False)
+ go (UrlInfo True Nothing _) = (True, True)
+ go (UrlInfo True s _) = case expected_size of
Just _ -> (True, expected_size == s)
Nothing -> (True, True)
+exists :: URLString -> UrlOptions -> IO Bool
+exists url uo = urlExists <$> getUrlInfo url uo
+
+data UrlInfo = UrlInfo
+ { urlExists :: Bool
+ , urlSize :: Maybe Integer
+ , urlSuggestedFile :: Maybe FilePath
+ }
+
{- Checks that an url exists and could be successfully downloaded,
- - also returning its size if available.
- -
- - For a file: url, check it directly.
- -
- - Uses curl otherwise, when available, since curl handles https better
- - than does Haskell's Network.Browser.
- -}
-exists :: URLString -> UrlOptions -> IO (Bool, Maybe Integer)
-exists url uo = case parseURIRelaxed url of
- Just u
- | uriScheme u == "file:" -> do
- s <- catchMaybeIO $ getFileStatus (unEscapeString $ uriPath u)
- case s of
- Just stat -> return (True, Just $ fromIntegral $ fileSize stat)
- Nothing -> dne
- | otherwise -> if Build.SysConfig.curl
- then do
- output <- readProcess "curl" $ toCommand curlparams
+ - also returning its size and suggested filename if available. -}
+getUrlInfo :: URLString -> UrlOptions -> IO UrlInfo
+getUrlInfo url uo = case parseURIRelaxed url of
+ Just u -> case parseUrl (show u) of
+ Just req -> existsconduit req `catchNonAsync` const dne
+ -- http-conduit does not support file:, ftp:, etc urls,
+ -- so fall back to reading files and using curl.
+ Nothing
+ | uriScheme u == "file:" -> do
+ let f = unEscapeString (uriPath u)
+ s <- catchMaybeIO $ getFileStatus f
+ case s of
+ Just stat -> do
+ sz <- getFileSize' f stat
+ found (Just sz) Nothing
+ Nothing -> dne
+ | Build.SysConfig.curl -> do
+ output <- catchDefaultIO "" $
+ readProcess "curl" $ toCommand curlparams
case lastMaybe (lines output) of
- Just ('2':_:_) -> return (True, extractsize output)
+ Just ('2':_:_) -> found
+ (extractlencurl output)
+ Nothing
_ -> dne
- else do
- r <- request u HEAD uo
- case rspCode r of
- (2,_,_) -> return (True, size r)
- _ -> return (False, Nothing)
+ | otherwise -> dne
Nothing -> dne
where
- dne = return (False, Nothing)
+ dne = return $ UrlInfo False Nothing Nothing
+ found sz f = return $ UrlInfo True sz f
curlparams = addUserAgent uo $
[ Param "-s"
@@ -97,19 +140,55 @@ exists url uo = case parseURIRelaxed url of
, Param "-w", Param "%{http_code}"
] ++ concatMap (\h -> [Param "-H", Param h]) (reqHeaders uo) ++ (reqParams uo)
- extractsize s = case lastMaybe $ filter ("Content-Length:" `isPrefixOf`) (lines s) of
+ extractlencurl s = case lastMaybe $ filter ("Content-Length:" `isPrefixOf`) (lines s) of
Just l -> case lastMaybe $ words l of
Just sz -> readish sz
_ -> Nothing
_ -> Nothing
+
+ extractlen = readish . B8.toString <=< firstheader hContentLength
- size = liftM Prelude.read . lookupHeader HdrContentLength . rspHeaders
+ extractfilename = contentDispositionFilename . B8.toString
+ <=< firstheader hContentDisposition
--- works for both wget and curl commands
-addUserAgent :: UrlOptions -> [CommandParam] -> [CommandParam]
-addUserAgent uo ps = case userAgent uo of
- Nothing -> ps
- Just ua -> ps ++ [Param "--user-agent", Param ua]
+ firstheader h = headMaybe . map snd .
+ filter (\p -> fst p == h) . responseHeaders
+
+ existsconduit req = withManager $ \mgr -> do
+ let req' = headRequest (applyRequest uo req)
+ resp <- http req' mgr
+ -- forces processing the response before the
+ -- manager is closed
+ ret <- liftIO $ if responseStatus resp == ok200
+ then found
+ (extractlen resp)
+ (extractfilename resp)
+ else dne
+ liftIO $ closeManager mgr
+ return ret
+
+-- Parse eg: attachment; filename="fname.ext"
+-- per RFC 2616
+contentDispositionFilename :: String -> Maybe FilePath
+contentDispositionFilename s
+ | "attachment; filename=\"" `isPrefixOf` s && "\"" `isSuffixOf` s =
+ Just $ reverse $ drop 1 $ reverse $
+ drop 1 $ dropWhile (/= '"') s
+ | otherwise = Nothing
+
+#if MIN_VERSION_http_conduit(2,0,0)
+headRequest :: Request -> Request
+#else
+headRequest :: Request m -> Request m
+#endif
+headRequest r = r
+ { method = methodHead
+ -- remove defaut Accept-Encoding header, to get actual,
+ -- not gzip compressed size.
+ , requestHeaders = (hAcceptEncoding, B.empty) :
+ filter (\(h, _) -> h /= hAcceptEncoding)
+ (requestHeaders r)
+ }
{- Used to download large files, such as the contents of keys.
-
@@ -141,9 +220,18 @@ download' quiet url file uo =
wget = go "wget" $ headerparams ++ quietopt "-q" ++ wgetparams
{- Regular wget needs --clobber to continue downloading an existing
- file. On Android, busybox wget is used, which does not
- - support, or need that option. -}
+ - support, or need that option.
+ -
+ - When the wget version is new enough, pass options for
+ - a less cluttered download display.
+ -}
#ifndef __ANDROID__
- wgetparams = [Params "--clobber -c -O"]
+ wgetparams = catMaybes
+ [ if Build.SysConfig.wgetquietprogress
+ then Just $ Params "-q --show-progress"
+ else Nothing
+ , Just $ Params "--clobber -c -O"
+ ]
#else
wgetparams = [Params "-c -O"]
#endif
@@ -160,52 +248,20 @@ download' quiet url file uo =
| quiet = [Param s]
| otherwise = []
-{- Uses Network.Browser to make a http request of an url.
- - For example, HEAD can be used to check if the url exists,
- - or GET used to get the url content (best for small urls).
- -
- - This does its own redirect following because Browser's is buggy for HEAD
- - requests.
- -
- - Unfortunately, does not handle https, so should only be used
- - when curl is not available.
- -}
-request :: URI -> RequestMethod -> UrlOptions -> IO (Response String)
-request url requesttype uo = go 5 url
- where
- go :: Int -> URI -> IO (Response String)
- go 0 _ = error "Too many redirects "
- go n u = do
- rsp <- Browser.browse $ do
- maybe noop Browser.setUserAgent (userAgent uo)
- Browser.setErrHandler ignore
- Browser.setOutHandler ignore
- Browser.setAllowRedirects False
- let req = mkRequest requesttype u :: Request_String
- snd <$> Browser.request (addheaders req)
- case rspCode rsp of
- (3,0,x) | x /= 5 -> redir (n - 1) u rsp
- _ -> return rsp
- addheaders req = setHeaders req (rqHeaders req ++ userheaders)
- userheaders = rights $ map parseHeader (reqHeaders uo)
- ignore = const noop
- redir n u rsp = case retrieveHeaders HdrLocation rsp of
- [] -> return rsp
- (Header _ newu:_) ->
- case parseURIReference newu of
- Nothing -> return rsp
- Just newURI -> go n $
-#if defined VERSION_network
-#if ! MIN_VERSION_network(2,4,0)
-#define WITH_OLD_URI
-#endif
-#endif
-#ifdef WITH_OLD_URI
- fromMaybe newURI (newURI `relativeTo` u)
-#else
- newURI `relativeTo` u
-#endif
-
{- Allows for spaces and other stuff in urls, properly escaping them. -}
parseURIRelaxed :: URLString -> Maybe URI
parseURIRelaxed = parseURI . escapeURIString isAllowedInURI
+
+hAcceptEncoding :: CI.CI B.ByteString
+hAcceptEncoding = "Accept-Encoding"
+
+hContentDisposition :: CI.CI B.ByteString
+hContentDisposition = "Content-Disposition"
+
+#if ! MIN_VERSION_http_types(0,7,0)
+hContentLength :: CI.CI B.ByteString
+hContentLength = "Content-Length"
+
+hUserAgent :: CI.CI B.ByteString
+hUserAgent = "User-Agent"
+#endif
diff --git a/Utility/UserInfo.hs b/Utility/UserInfo.hs
index 9c3bfd42f..5bf8d5c09 100644
--- a/Utility/UserInfo.hs
+++ b/Utility/UserInfo.hs
@@ -1,8 +1,8 @@
{- user info
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE CPP #-}
@@ -13,8 +13,10 @@ module Utility.UserInfo (
myUserGecos,
) where
-import Control.Applicative
import System.PosixCompat
+#ifndef mingw32_HOST_OS
+import Control.Applicative
+#endif
import Utility.Env
@@ -40,16 +42,20 @@ myUserName = myVal env userName
env = ["USERNAME", "USER", "LOGNAME"]
#endif
-myUserGecos :: IO String
-#ifdef __ANDROID__
-myUserGecos = return "" -- userGecos crashes on Android
+myUserGecos :: IO (Maybe String)
+-- userGecos crashes on Android and is not available on Windows.
+#if defined(__ANDROID__) || defined(mingw32_HOST_OS)
+myUserGecos = return Nothing
#else
-myUserGecos = myVal [] userGecos
+myUserGecos = Just <$> myVal [] userGecos
#endif
myVal :: [String] -> (UserEntry -> String) -> IO String
-myVal envvars extract = maybe (extract <$> getpwent) return =<< check envvars
+myVal envvars extract = go envvars
where
- check [] = return Nothing
- check (v:vs) = maybe (check vs) (return . Just) =<< getEnv v
- getpwent = getUserEntryForID =<< getEffectiveUserID
+#ifndef mingw32_HOST_OS
+ go [] = extract <$> (getUserEntryForID =<< getEffectiveUserID)
+#else
+ go [] = error $ "environment not set: " ++ show envvars
+#endif
+ go (v:vs) = maybe (go vs) return =<< getEnv v
diff --git a/Utility/Verifiable.hs b/Utility/Verifiable.hs
index 4f88cb9f2..a861416e2 100644
--- a/Utility/Verifiable.hs
+++ b/Utility/Verifiable.hs
@@ -1,8 +1,8 @@
{- values verified using a shared secret
-
- - Copyright 2012 Joey Hess <joey@kitenet.net>
+ - Copyright 2012 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
module Utility.Verifiable where
diff --git a/Utility/WebApp.hs b/Utility/WebApp.hs
index 8e08ab9e0..54f2d6f2b 100644
--- a/Utility/WebApp.hs
+++ b/Utility/WebApp.hs
@@ -1,8 +1,8 @@
{- Yesod webapp
-
- - Copyright 2012-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE OverloadedStrings, CPP, RankNTypes #-}
@@ -18,22 +18,17 @@ import qualified Yesod
import qualified Network.Wai as Wai
import Network.Wai.Handler.Warp
import Network.Wai.Handler.WarpTLS
-import Network.Wai.Logger
-import Control.Monad.IO.Class
import Network.HTTP.Types
-import System.Log.Logger
import qualified Data.CaseInsensitive as CI
import Network.Socket
import "crypto-api" Crypto.Random
import qualified Web.ClientSession as CS
import qualified Data.ByteString.Lazy as L
-import qualified Data.ByteString.Lazy.UTF8 as L8
import qualified Data.ByteString as B
import qualified Data.Text as T
import qualified Data.Text.Encoding as TE
import Blaze.ByteString.Builder.Char.Utf8 (fromText)
import Blaze.ByteString.Builder (Builder)
-import Data.Monoid
import Control.Arrow ((***))
import Control.Concurrent
#ifdef WITH_WEBAPP_SECURE
@@ -43,10 +38,6 @@ import Data.Byteable
#ifdef __ANDROID__
import Data.Endian
#endif
-#if defined(__ANDROID__) || defined (mingw32_HOST_OS)
-#else
-import Control.Exception (bracketOnError)
-#endif
localhost :: HostName
localhost = "localhost"
@@ -62,6 +53,10 @@ browserProc url = proc "am"
["start", "-a", "android.intent.action.VIEW", "-d", url]
#else
#ifdef mingw32_HOST_OS
+-- Warning: On Windows, no quoting or escaping of the url seems possible,
+-- so spaces in it will cause problems. One approach is to make the url
+-- be a relative filename, and adjust the returned CreateProcess to change
+-- to the directory it's in.
browserProc url = proc "cmd" ["/c start " ++ url]
#else
browserProc url = proc "xdg-open" [url]
@@ -96,11 +91,16 @@ fixSockAddr (SockAddrInet (PortNum port) addr) = SockAddrInet (PortNum $ swapEnd
#endif
fixSockAddr addr = addr
+-- disable buggy sloworis attack prevention code
webAppSettings :: Settings
-webAppSettings = defaultSettings
- -- disable buggy sloworis attack prevention code
- { settingsTimeout = 30 * 60
- }
+
+#if MIN_VERSION_warp(2,1,0)
+webAppSettings = setTimeout halfhour defaultSettings
+#else
+webAppSettings = defaultSettings { settingsTimeout = halfhour }
+#endif
+ where
+ halfhour = 30 * 60
{- Binds to a local socket, or if specified, to a socket on the specified
- hostname or address. Selects any free port, unless the hostname ends with
@@ -117,7 +117,7 @@ getSocket h = do
when (isJust h) $
error "getSocket with HostName not supported on this OS"
addr <- inet_addr "127.0.0.1"
- sock <- socket AF_INET Stream defaultProtocol
+ sock <- socket AF_INET Stream defaultProtocol
preparesocket sock
bindSocket sock (SockAddrInet aNY_PORT addr)
use sock
@@ -150,35 +150,6 @@ getSocket h = do
listen sock maxListenQueue
return sock
-{- Checks if debugging is actually enabled. -}
-debugEnabled :: IO Bool
-debugEnabled = do
- l <- getRootLogger
- return $ getLevel l <= Just DEBUG
-
-{- WAI middleware that logs using System.Log.Logger at debug level.
- -
- - Recommend only inserting this middleware when debugging is actually
- - enabled, as it's not optimised at all.
- -}
-httpDebugLogger :: Wai.Middleware
-httpDebugLogger waiApp req = do
- logRequest req
- waiApp req
-
-logRequest :: MonadIO m => Wai.Request -> m ()
-logRequest req = do
- liftIO $ debugM "WebApp" $ unwords
- [ showSockAddr $ Wai.remoteHost req
- , frombs $ Wai.requestMethod req
- , frombs $ Wai.rawPathInfo req
- --, show $ Wai.httpVersion req
- --, frombs $ lookupRequestField "referer" req
- , frombs $ lookupRequestField "user-agent" req
- ]
- where
- frombs v = L8.toString $ L.fromChunks [v]
-
lookupRequestField :: CI.CI B.ByteString -> Wai.Request -> B.ByteString
lookupRequestField k req = fromMaybe "" . lookup k $ Wai.requestHeaders req
diff --git a/Utility/WinLock.hs b/Utility/WinLock.hs
deleted file mode 100644
index 7b7cf7132..000000000
--- a/Utility/WinLock.hs
+++ /dev/null
@@ -1,69 +0,0 @@
-{- Windows lock files
- -
- - Copyright 2014 Joey Hess <joey@kitenet.net>
- -
- - Licensed under the GNU GPL version 3 or higher.
- -}
-
-module Utility.WinLock (
- lockShared,
- lockExclusive,
- dropLock,
- waitToLock,
- LockHandle
-) where
-
-import System.Win32.Types
-import System.Win32.File
-import Control.Concurrent
-
-{- Locking is exclusive, and prevents the file from being opened for read
- - or write by any other process. So for advisory locking of a file, a
- - different LockFile should be used. -}
-type LockFile = FilePath
-
-type LockHandle = HANDLE
-
-{- Tries to lock a file with a shared lock, which allows other processes to
- - also lock it shared. Fails is the file is exclusively locked. -}
-lockShared :: LockFile -> IO (Maybe LockHandle)
-lockShared = openLock fILE_SHARE_READ
-
-{- Tries to take an exclusive lock on a file. Fails if another process has
- - a shared or exclusive lock. -}
-lockExclusive :: LockFile -> IO (Maybe LockHandle)
-lockExclusive = openLock fILE_SHARE_NONE
-
-{- Windows considers just opening a file enough to lock it. This will
- - create the LockFile if it does not already exist.
- -
- - Will fail if the file is already open with an incompatable ShareMode.
- - Note that this may happen if an unrelated process, such as a virus
- - scanner, even looks at the file. See http://support.microsoft.com/kb/316609
- -
- - Note that createFile busy-waits to try to avoid failing when some other
- - process briefly has a file open. But that would make checking locks
- - much more expensive, so is not done here. Thus, the use of c_CreateFile.
- -}
-openLock :: ShareMode -> LockFile -> IO (Maybe LockHandle)
-openLock sharemode f = do
- h <- withTString f $ \c_f ->
- c_CreateFile c_f gENERIC_READ sharemode (maybePtr Nothing)
- oPEN_ALWAYS fILE_ATTRIBUTE_NORMAL (maybePtr Nothing)
- return $ if h == iNVALID_HANDLE_VALUE
- then Nothing
- else Just h
-
-dropLock :: LockHandle -> IO ()
-dropLock = closeHandle
-
-{- If the initial lock fails, this is a BUSY wait, and does not
- - guarentee FIFO order of waiters. In other news, Windows is a POS. -}
-waitToLock :: IO (Maybe LockHandle) -> IO LockHandle
-waitToLock locker = takelock
- where
- takelock = go =<< locker
- go (Just lck) = return lck
- go Nothing = do
- threadDelay (500000) -- half a second
- takelock
diff --git a/Utility/WinProcess.hs b/Utility/WinProcess.hs
index 7a566dcba..36f079d04 100644
--- a/Utility/WinProcess.hs
+++ b/Utility/WinProcess.hs
@@ -1,8 +1,8 @@
{- Windows processes
-
- - Copyright 2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2014 Joey Hess <id@joeyh.name>
-
- - Licensed under the GNU GPL version 3 or higher.
+ - License: BSD-2-clause
-}
{-# LANGUAGE ForeignFunctionInterface #-}
diff --git a/Utility/Yesod.hs b/Utility/Yesod.hs
index 2853b3369..231bb291e 100644
--- a/Utility/Yesod.hs
+++ b/Utility/Yesod.hs
@@ -1,9 +1,9 @@
{- Yesod stuff, that's typically found in the scaffolded site.
-
- Also a bit of a compatability layer to make it easier to support yesod
- - 1.1 and 1.2 in the same code base.
+ - 1.1-1.4 in the same code base.
-
- - Copyright 2012, 2013 Joey Hess <joey@kitenet.net>
+ - Copyright 2012-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -17,8 +17,10 @@ module Utility.Yesod
, widgetFile
, hamletTemplate
#endif
+#if ! MIN_VERSION_yesod(1,4,0)
+ , withUrlRenderer
+#endif
#if ! MIN_VERSION_yesod(1,2,0)
- , giveUrlRenderer
, Html
#endif
) where
@@ -28,6 +30,11 @@ import Yesod as Y
#else
import Yesod as Y hiding (Html)
#endif
+#if MIN_VERSION_yesod_form(1,3,8)
+import Yesod.Form.Bootstrap3 as Y hiding (bfs)
+#else
+import Assistant.WebApp.Bootstrap3 as Y hiding (bfs)
+#endif
#ifndef __NO_TH__
import Yesod.Default.Util
import Language.Haskell.TH.Syntax (Q, Exp)
@@ -36,6 +43,11 @@ import Data.Default (def)
import Text.Hamlet hiding (Html)
#endif
#endif
+#if ! MIN_VERSION_yesod(1,4,0)
+#if MIN_VERSION_yesod(1,2,0)
+import Data.Text (Text)
+#endif
+#endif
#ifndef __NO_TH__
widgetFile :: String -> Q Exp
@@ -64,8 +76,13 @@ liftH = lift
{- Misc new names for stuff. -}
#if ! MIN_VERSION_yesod(1,2,0)
-giveUrlRenderer :: forall master sub. HtmlUrl (Route master) -> GHandler sub master RepHtml
-giveUrlRenderer = hamletToRepHtml
+withUrlRenderer :: forall master sub. HtmlUrl (Route master) -> GHandler sub master RepHtml
+withUrlRenderer = hamletToRepHtml
type Html = RepHtml
+#else
+#if ! MIN_VERSION_yesod_core(1,2,20)
+withUrlRenderer :: MonadHandler m => ((Route (HandlerSite m) -> [(Text, Text)] -> Text) -> output) -> m output
+withUrlRenderer = giveUrlRenderer
+#endif
#endif
diff --git a/Utility/libdiskfree.c b/Utility/libdiskfree.c
index 8c9ab6145..c2f8368f0 100644
--- a/Utility/libdiskfree.c
+++ b/Utility/libdiskfree.c
@@ -1,19 +1,17 @@
/* disk free space checking, C mini-library
*
- * Copyright 2012, 2014 Joey Hess <joey@kitenet.net>
+ * Copyright 2012, 2014 Joey Hess <id@joeyh.name>
*
- * Licensed under the GNU GPL version 3 or higher.
+ * License: BSD-2-clause
*/
/* Include appropriate headers for the OS, and define what will be used to
* check the free space. */
#if defined(__APPLE__)
+# define _DARWIN_FEATURE_64_BIT_INODE 1
# include <sys/param.h>
# include <sys/mount.h>
-/* In newer OSX versions, statfs64 is deprecated, in favor of statfs,
- * which is 64 bit only with a build option -- but statfs64 still works,
- * and this keeps older OSX also supported. */
-# define STATCALL statfs64
+# define STATCALL statfs
# define STATSTRUCT statfs64
#else
#if defined (__FreeBSD__)
diff --git a/Utility/libkqueue.c b/Utility/libkqueue.c
index a87f65102..3f40465e3 100644
--- a/Utility/libkqueue.c
+++ b/Utility/libkqueue.c
@@ -1,8 +1,8 @@
/* kqueue interface, C mini-library
*
- * Copyright 2012 Joey Hess <joey@kitenet.net>
+ * Copyright 2012 Joey Hess <id@joeyh.name>
*
- * Licensed under the GNU GPL version 3 or higher.
+ * License: BSD-2-clause
*/
#include <stdio.h>
diff --git a/Utility/libmounts.c b/Utility/libmounts.c
index 8669f33ea..c469d7710 100644
--- a/Utility/libmounts.c
+++ b/Utility/libmounts.c
@@ -5,7 +5,7 @@
* Copyright (c) 2001
* David Rufino <daverufino@btinternet.com>
* Copyright 2012
- * Joey Hess <joey@kitenet.net>
+ * Joey Hess <id@joeyh.name>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -63,7 +63,7 @@ static struct mntent *statfs_to_mntent (struct statfs *mntbuf) {
_mntent.mnt_dir = mntbuf->f_mntonname;
_mntent.mnt_type = mntbuf->f_fstypename;
- _mntent.mnt_opts = '\0';
+ _mntent.mnt_opts = NULL;
_mntent.mnt_freq = 0;
_mntent.mnt_passno = 0;
diff --git a/debian/cabal-wrapper b/debian/cabal-wrapper
new file mode 100755
index 000000000..1326aead7
--- /dev/null
+++ b/debian/cabal-wrapper
@@ -0,0 +1,20 @@
+#!/bin/sh
+# It would be more usual to use:
+# export CABAL=./Setup
+# But Setup currently has a very bad dependency resolver, and very bad
+# debugging output, and tends to eat all memory and die on small buildds.
+#
+# This should be revisited once Debian has a newer ghc than 7.6.3,
+# and hopefully gets the improved dependency resolver from cabal.
+set -e
+
+# Avoid cabal writing to HOME, and avoid local cabal settings
+# influencing the build.
+HOME=$(mktemp -d)
+export HOME
+
+# Temporary workaround for #763078
+PATH=/usr/lib/llvm-3.4/bin:$PATH
+export PATH
+
+cabal "$@"
diff --git a/debian/changelog b/debian/changelog
index d8f63f8d0..870e0909b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,12 +1,624 @@
-git-annex (5.20140307) UNRELEASED; urgency=medium
+git-annex (5.20150206) UNRELEASED; urgency=medium
+
+ * glacier: Detect when the glacier command in PATH is the wrong one,
+ from boto, rather than from glacier-cli, and refuse to use it,
+ since the boto program fails to fail when passed
+ parameters it does not understand.
+ * groupwanted: New command to set the groupwanted preferred content
+ expression.
+ * import: Support file matching options such as --exclude, --include,
+ --smallerthan, --largerthan
+ * The file matching options are now only accepted by commands that
+ can actually use them, instead of by all commands.
+ * import: Avoid checksumming file twice when run in the default
+ or --duplicate mode.
+ * Windows: Fix bug in dropping an annexed file, which
+ caused a symlink to be staged that contained backslashes.
+ * webapp: Fix reversion in opening webapp when starting it manually
+ inside a repository.
+ * assistant: Improve sanity check for control characters when pairing.
+ * Improve race recovery code when committing to git-annex branch.
+ * addurl: Avoid crash if quvi is not installed, when git-annex was
+ built with process-1.2
+ * bittorrent: Fix mojibake introduced in parsing arai2c progress output.
+ * fsck --from: If a download from a remote fails, propigate the failure.
+ * metadata: When setting metadata, do not recurse into directories by
+ default, since that can be surprising behavior and difficult to recover
+ from. The old behavior is available by using --force.
+ * sync, assistant: Include repository name in head branch commit message.
+ * The ssh-options git config is now used by gcrypt, rsync, and ddar
+ special remotes that use ssh as a transport.
+ * sync, assistant: Use the ssh-options git config when doing git pull
+ and push.
+ * remotedaemon: Use the ssh-options git config.
+
+ -- Joey Hess <id@joeyh.name> Fri, 06 Feb 2015 13:57:08 -0400
+
+git-annex (5.20150205) unstable; urgency=medium
+
+ * info: Can now display info about a given uuid.
+ * Added to remote/uuid info: Count of the number of keys present
+ on the remote, and their size. This is rather expensive to calculate,
+ so comes last and --fast will disable it.
+ * info remote: Include the date of the last sync with the remote.
+ * sync: Added --message/-m option like git commit.
+ * remotedaemon: Fix problem that could prevent ssh connections being
+ made after two LOSTNET messages were received in a row (perhaps due to
+ two different network interfaces being brought down).
+ * Fix build failure when wget is not installed.
+ * Fix wording of message displayed when unable to get a file that
+ is available in untrusted repositories.
+ * addurl: When a Content-Disposition header suggests a filename to use,
+ addurl will consider using it, if it's reasonable and doesn't conflict
+ with an existing file. (--file overrides this)
+ * Fix default repository description created by git annex init,
+ which got broken by the relative path changes in the last release.
+ * init: Repository tuning parameters can now be passed when initializing a
+ repository for the first time. For details, see
+ http://git-annex.branchable.com/tuning/
+ * merge: Refuse to merge changes from a git-annex branch of a repo
+ that has been tuned in incompatible ways.
+ * Support annex.tune.objecthash1, annex.tune.objecthashlower, and
+ annex.tune.branchhash1.
+ * Remove support for building without cryptohash.
+ * Added MD5 and MD5E backends.
+ * assistant: Fix local pairing when ssh pubkey comment contains spaces.
+ * Avoid using fileSize which maxes out at just 2 gb on Windows.
+ Instead, use hFileSize, which doesn't have a bounded size.
+ Fixes support for files > 2 gb on Windows.
+ * Windows: Fix running of the pre-commit-annex hook.
+ * Windows: Fix S3 special remote; need to call withSocketsDo. Thanks, Trent.
+
+ -- Joey Hess <id@joeyh.name> Thu, 05 Feb 2015 14:08:33 -0400
+
+git-annex (5.20150113) unstable; urgency=medium
+
+ * unlock: Don't allow unlocking files that have never been committed to git
+ before, to avoid an intractable problem that prevents the pre-commit
+ hook from telling if such a file is intended to be an annexed file or not.
+ * Avoid re-checksumming when migrating from hash to hashE backend.
+ Closes: #774494
+ * Fix build with process 1.2.1.0.
+ * Android: Provide a version built with -fPIE -pie to support Android 5.0.
+ * sync: Fix an edge case where syncing in a bare repository would try to
+ merge and so fail.
+ * Check git version at runtime, rather than assuming it will be the same
+ as the git version used at build time when running git-checkattr and
+ git-branch remove.
+ * Switch to using relative paths to the git repository.
+ - This allows the git repository to be moved while git-annex is running in
+ it, with fewer problems.
+ - On Windows, this avoids some of the problems with the absurdly small
+ MAX_PATH of 260 bytes. In particular, git-annex repositories should
+ work in deeper/longer directory structures than before.
+ * Generate shorter keys for WORM and URL, avoiding keys that are longer
+ than used for SHA256, so as to not break on systems like Windows that
+ have very small maximum path length limits.
+ * Bugfix: A file named HEAD in the work tree could confuse some git commands
+ run by git-annex.
+
+ -- Joey Hess <id@joeyh.name> Tue, 13 Jan 2015 12:10:08 -0400
+
+git-annex (5.20141231) unstable; urgency=medium
+
+ * vicfg: Avoid crashing on badly encoded config data.
+ * Work around statfs() overflow on some XFS systems.
+ * sync: Now supports remote groups, the same way git remote update does.
+ * setpresentkey: A new plumbing-level command.
+ * Run shutdown cleanup actions even if there were failures processing
+ the command. Among other fixes, this means that addurl will stage
+ added files even if adding one of the urls fails.
+ * bittorrent: Fix locking problem when using addurl file://
+ * Windows: Fix local rsync filepath munging (fixes 26 test suite failures).
+ * Windows: Got the rsync special remote working.
+ * Windows: Fix handling of views of filenames containing '%'
+ * OSX: Switched away from deprecated statfs64 interface.
+
+ -- Joey Hess <id@joeyh.name> Wed, 31 Dec 2014 15:15:46 -0400
+
+git-annex (5.20141219) unstable; urgency=medium
+
+ * Webapp: When adding a new box.com remote, use the new style chunking.
+ Thanks, Jon Ander Peñalba.
+ * External special remote protocol now includes commands for setting
+ and getting the urls associated with a key.
+ * Urls can now be claimed by remotes. This will allow creating,
+ for example, a external special remote that handles magnet: and
+ *.torrent urls.
+ * Use wget -q --show-progress for less verbose wget output,
+ when built with wget 1.16.
+ * Added bittorrent special remote.
+ * addurl behavior change: When downloading an url ending in .torrent,
+ it will download files from bittorrent, instead of the old behavior
+ of adding the torrent file to the repository.
+ * Added Recommends on aria2.
+ * When possible, build with the haskell torrent library for parsing
+ torrent files. As a fallback, can instead use btshowmetainfo from
+ bittornado | bittorrent.
+ * Fix build with -f-S3.
+
+ -- Joey Hess <id@joeyh.name> Fri, 19 Dec 2014 16:53:26 -0400
+
+git-annex (5.20141203) unstable; urgency=medium
+
+ * proxy: New command for direct mode repositories, allows bypassing
+ the direct mode guard in a safe way to do all sorts of things
+ including git revert, git mv, git checkout ...
+ * undo: New command to undo the most recent change to a file
+ or to the contents of a directory.
+ * Add undo action to nautilus and konqueror integration.
+ * diffdriver: New git-annex command, to make git external diff drivers
+ work with annexed files.
+ * pre-commit: Block partial commit of unlocked annexed file, since
+ that left a typechange staged in index due to some infelicity of git's
+ handling of partial commits.
+ * Work around behavior change in lsof 4.88's -F output format.
+ * S3: Switched to using the haskell aws library.
+ * S3: No longer buffers entire files in memory when uploading without
+ chunking.
+ * S3: When built with a new enough version of the haskell aws library,
+ supports doing multipart uploads, in order to store extremely large
+ files in S3 when not using chunking.
+ * Don't show "(gpg)" when decrypting the remote encryption cipher,
+ since this could be taken to read that's the only time git-annex
+ runs gpg, which is not the case.
+ * Debian package is now maintained by Gergely Nagy.
+ * Windows: Remove Alt+A keyboard shortcut, which turns out to have scope
+ outside the menus.
+ * Windows: Install ssh and other bundled programs to Git/cmd,
+ instead of Git/bin, since the latter is not in the default msysgit PATH.
+
+ -- Joey Hess <id@joeyh.name> Wed, 03 Dec 2014 15:16:52 -0400
+
+git-annex (5.20141125) unstable; urgency=medium
+
+ * Remove fixup code for bad bare repositories created by
+ versions 5.20131118 through 5.20131127. That fixup code would
+ accidentially fire when --git-dir was incorrectly
+ pointed at the working tree of a git-annex repository,
+ possibly resulting in data loss. Closes: #768093
+ * Windows: Fix crash when user.name is not set in git config.
+
+ -- Joey Hess <joeyh@debian.org> Wed, 05 Nov 2014 11:41:51 -0400
+
+git-annex (5.20141024) unstable; urgency=medium
+
+ * vicfg: Deleting configurations now resets to the default, where
+ before it has no effect.
+ * Remove hurd stuff from cabal file, since hackage currently rejects
+ it, and the test suite fails on hurd.
+ * initremote: Don't allow creating a special remote that has the same
+ name as an existing git remote.
+ * Windows: Use haskell setenv library to clean up several ugly workarounds
+ for inability to manipulate the environment on windows. This includes
+ making git-annex not re-exec itself on start on windows, and making the
+ test suite on Windows run tests without forking.
+ * glacier: Fix pipe setup when calling glacier-cli to retrieve an object.
+ * info: When run on a single annexed file, displays some info about the
+ file, including its key and size.
+ * info: When passed the name or uuid of a remote, displays info about that
+ remote. Remotes that support encryption, chunking, or embedded
+ creds will include that in their info.
+ * enableremote: When the remote has creds, update the local creds cache
+ file. Before, the old version of the creds could be left there, and
+ would continue to be used.
+
+ -- Joey Hess <joeyh@debian.org> Fri, 24 Oct 2014 13:03:29 -0400
+
+git-annex (5.20141013) unstable; urgency=medium
+
+ * Adjust cabal file to support building w/o assistant on the hurd.
+ * Support building with yesod 1.4.
+ * S3: Fix embedcreds=yes handling for the Internet Archive.
+ * map: Handle .git prefixed remote repos. Closes: #614759
+ * repair: Prevent auto gc from happening when fetching from a remote.
+
+ -- Joey Hess <joeyh@debian.org> Mon, 13 Oct 2014 10:13:06 -0400
+
+git-annex (5.20140927) unstable; urgency=medium
+
+ * Really depend (not just build-depend) on new enough git for --no-gpg-sign
+ to work. Closes: #763057
+ * Add temporary workaround for bug #763078 which broke building on armel
+ and armhf.
+
+ -- Joey Hess <joeyh@debian.org> Sat, 27 Sep 2014 14:25:09 -0400
+
+git-annex (5.20140926) unstable; urgency=high
+
+ * Depend on new enough git for --no-gpg-sign to work. Closes: #762446
+ * Work around failure to build on mips by using cabal, not Setup,
+ to build in debian/rules.
+
+ -- Joey Hess <joeyh@debian.org> Fri, 26 Sep 2014 15:09:02 -0400
+
+git-annex (5.20140919) unstable; urgency=high
+
+ * Security fix for S3 and glacier when using embedcreds=yes with
+ encryption=pubkey or encryption=hybrid. CVE-2014-6274
+ The creds embedded in the git repo were *not* encrypted.
+ git-annex enableremote will warn when used on a remote that has
+ this problem. For details, see:
+ https://git-annex.branchable.com/upgrades/insecure_embedded_creds/
+ * assistant: Detect when repository has been deleted or moved, and
+ automatically shut down the assistant. Closes: #761261
+ * Windows: Avoid crashing trying to list gpg secret keys, for gcrypt
+ which is not yet supported on Windows.
+ * WebDav: Fix enableremote crash when the remote already exists.
+ (Bug introduced in version 5.20140817.)
+ * add: In direct mode, adding an annex symlink will check it into git,
+ as was already done in indirect mode.
+
+ -- Joey Hess <joeyh@debian.org> Fri, 19 Sep 2014 12:53:42 -0400
+
+git-annex (5.20140915) unstable; urgency=medium
+
+ * New annex.hardlink setting. Closes: #758593
+ * init: Automatically detect when a repository was cloned with --shared,
+ and set annex.hardlink=true, as well as marking the repository as
+ untrusted.
+ * Fix parsing of ipv6 address in git remote address when it was not
+ formatted as an url.
+ * The annex-rsync-transport configuration is now also used when checking
+ if a key is present on a rsync remote, and when dropping a key from
+ the remote.
+ * Promote file not found warning message to an error.
+ * Fix transfer lock file FD leak that could occur when two separate
+ git-annex processes were both working to perform the same set of
+ transfers.
+ * sync: Ensure that pending changes to git-annex branch are committed
+ before push when in direct mode. (Fixing a very minor reversion.)
+ * WORM backend: Switched to include the relative path to the file inside
+ the repository, rather than just the file's base name. Note that if you're
+ relying on such things to keep files separate with WORM, you should really
+ be using a better backend.
+ * Rather than crashing when there's a problem with the requested bloomfilter
+ capacity/accuracy, fall back to a reasonable default bloom filter size.
+ * Fix build with optparse-applicative 0.10. Closes: #761484
+ * webapp: Fixed visual glitch in xmpp pairing that was reported live by a
+ user who tracked me down in front of a coffee cart in Portland.
+ (New bug reporting method of choice?)
+
+ -- Joey Hess <joeyh@debian.org> Mon, 15 Sep 2014 10:45:00 -0400
+
+git-annex (5.20140831) unstable; urgency=medium
+
+ * Make --help work when not in a git repository. Closes: #758592
+ * Ensure that all lock fds are close-on-exec, fixing various problems with
+ them being inherited by child processes such as git commands.
+ * When accessing a local remote, shut down git-cat-file processes
+ afterwards, to ensure that remotes on removable media can be unmounted.
+ Closes: #758630
+ * Fix handing of autocorrection when running outside a git repository.
+ * Fix stub git-annex test support when built without tasty.
+ * Do not preserve permissions and acls when copying files from
+ one local git repository to another. Timestamps are still preserved
+ as long as cp --preserve=timestamps is supported. Closes: #729757
+
+ -- Joey Hess <joeyh@debian.org> Sun, 31 Aug 2014 12:30:08 -0700
+
+git-annex (5.20140817) unstable; urgency=medium
+
+ * New chunk= option to chunk files stored in special remotes.
+ Supported by: directory, S3, webdav, gcrypt, rsync, and all external
+ and hook special remotes.
+ * Partially transferred files are automatically resumed when using
+ chunked remotes!
+ * The old chunksize= option is deprecated. Do not use for new remotes.
+ * Legacy code for directory remotes using the old chunksize= option
+ will keep them working, but more slowly than before.
+ * webapp: Automatically install Konqueror integration scripts
+ to get and drop files.
+ * repair: Removing bad objects could leave fsck finding no more
+ unreachable objects, but some branches no longer accessible.
+ Fix this, including support for fixing up repositories that
+ were incompletely repaired before.
+ * Fix cost calculation for non-encrypted remotes.
+ * Display exception message when a transfer fails due to an exception.
+ * WebDAV: Sped up by avoiding making multiple http connections
+ when storing a file.
+ * WebDAV: Avoid buffering whole file in memory when uploading and
+ downloading.
+ * WebDAV: Dropped support for DAV before 1.0.
+ * testremote: New command to test uploads/downloads to a remote.
+ * Dropping an object from a bup special remote now deletes the git branch
+ for the object, although of course the object's content cannot be deleted
+ due to the nature of bup.
+ * unlock: Better error handling; continue past files that are not available
+ or cannot be unlocked due to disk space, and try all specified files.
+ * Windows: Now uses actual inode equivilants in new direct mode
+ repositories, for safer detection of eg, renaming of files with the same
+ size and mtime.
+ * direct: Fix ugly warning messages.
+ * WORM backend: When adding a file in a subdirectory, avoid including the
+ subdirectory in the key name.
+ * S3, Glacier, WebDAV: Fix bug that prevented accessing the creds
+ when the repository was configured with encryption=shared embedcreds=yes.
+ * direct: Avoid leaving file content in misctemp if interrupted.
+ * git-annex-shell sendkey: Don't fail if a remote asks for a key to be sent
+ that already has a transfer lock file indicating it's being sent to that
+ remote. The remote may have moved between networks, or reconnected.
+ * Switched from the old haskell HTTP library to http-conduit.
+
+ -- Joey Hess <joeyh@debian.org> Sun, 17 Aug 2014 10:30:58 -0400
+
+git-annex (5.20140717) unstable; urgency=high
+
+ * Fix minor FD leak in journal code. Closes: #754608
+ * direct: Fix handling of case where a work tree subdirectory cannot
+ be written to due to permissions.
+ * migrate: Avoid re-checksumming when migrating from hashE to hash backend.
+ * uninit: Avoid failing final removal in some direct mode repositories
+ due to file modes.
+ * S3: Deal with AWS ACL configurations that do not allow creating or
+ checking the location of a bucket, but only reading and writing content to
+ it.
+ * resolvemerge: New plumbing command that runs the automatic merge conflict
+ resolver.
+ * Deal with change in git 2.0 that made indirect mode merge conflict
+ resolution leave behind old files.
+ * sync: Fix git sync with local git remotes even when they don't have an
+ annex.uuid set. (The assistant already did so.)
+ * Set gcrypt-publish-participants when setting up a gcrypt repository,
+ to avoid unncessary passphrase prompts.
+ This is a security/usability tradeoff. To avoid exposing the gpg key
+ ids who can decrypt the repository, users can unset
+ gcrypt-publish-participants.
+ * Install nautilus hooks even when ~/.local/share/nautilus/ does not yet
+ exist, since it is not automatically created for Gnome 3 users.
+ * Windows: Move .vbs files out of git\bin, to avoid that being in the
+ PATH, which caused some weird breakage. (Thanks, divB)
+ * Windows: Fix locking issue that prevented the webapp starting
+ (since 5.20140707).
+
+ -- Joey Hess <joeyh@debian.org> Thu, 17 Jul 2014 11:27:25 -0400
+
+git-annex (5.20140709) unstable; urgency=medium
+
+ * Fix race in direct mode merge code that could cause all files in the
+ repository to be removed. It should be able to recover repositories
+ experiencing this bug without data loss. See:
+ http://git-annex.branchable.com/bugs/bad_merge_commit_deleting_all_files/
+ * Fix git version that supported --no-gpg-sign.
+ * Fix bug in automatic merge conflict resolution, when one side is an
+ annexed symlink, and the other side is a non-annexed symlink.
+ * Really fix bug that caused the assistant to make many unncessary
+ empty merge commits.
+
+ -- Joey Hess <joeyh@debian.org> Wed, 09 Jul 2014 15:28:03 -0400
+
+git-annex (5.20140707) unstable; urgency=medium
+
+ * assistant: Fix bug, introduced in last release, that caused the assistant
+ to make many unncessary empty merge commits.
+ * assistant: Fix one-way assistant->assistant sync in direct mode.
+ * Fix bug in annex.queuesize calculation that caused much more
+ queue flushing than necessary.
+ * importfeed: When annex.genmetadata is set, metadata from the feed
+ is added to files that are imported from it.
+ * Support users who have set commit.gpgsign, by disabling gpg signatures
+ for git-annex branch commits and commits made by the assistant.
+ * Fix memory leak when committing millions of changes to the git-annex
+ branch, eg after git-annex add has run on 2 million files in one go.
+ * Support building with bloomfilter 2.0.0.
+ * Run standalone install process when the assistant is started
+ (was only being run when the webapp was opened).
+ * Android: patch git to avoid fchmod, which fails on /sdcard.
+ * Windows: Got rid of that pesky DOS box when starting the webapp.
+ * Windows: Added Startup menu item so assistant starts automatically
+ on login.
+ * Windows: Fix opening file browser from webapp when repo is in a
+ directory with spaces.
+ * Windows: Assistant now logs to daemon.log.
+
+ -- Joey Hess <joeyh@debian.org> Mon, 07 Jul 2014 12:24:13 -0400
+
+git-annex (5.20140613) unstable; urgency=medium
+
+ * Ignore setsid failures.
+ * Avoid leaving behind .tmp files when failing in some cases, including
+ importing files to a disk that is full.
+ * Avoid bad commits after interrupted direct mode sync (or merge).
+ * Fix build with wai 0.3.0.
+ * Deal with FAT's low resolution timestamps, which in combination with
+ Linux's caching of higher res timestamps while a FAT is mounted, caused
+ direct mode repositories on FAT to seem to have modified files after
+ they were unmounted and remounted.
+ * Windows: Fix opening webapp when repository is in a directory with
+ spaces in the path.
+ * Detect when Windows has lost its mind in a timezone change, and
+ automatically apply a delta to the timestamps it returns, to get back to
+ sane values.
+
+ -- Joey Hess <joeyh@debian.org> Fri, 13 Jun 2014 09:58:07 -0400
+
+git-annex (5.20140606) unstable; urgency=medium
+
+ * webapp: When adding a new local repository, fix bug that caused its
+ group and preferred content to be set in the current repository,
+ even when not combining.
+ * webapp: Avoid stomping on existing description, group and
+ preferred content settings when enabling or combining with
+ an already existing remote.
+ * assistant: Make sanity checker tmp dir cleanup code more robust.
+ * unused: Avoid checking view branches for unused files.
+ * webapp: Include ssh port in mangled hostname.
+ * Windows: Fix bug introduced in last release that caused files
+ in the git-annex branch to have lines teminated with \r.
+ * Windows: Fix retrieving of files from local bare git repositories.
+
+ -- Joey Hess <joeyh@debian.org> Fri, 06 Jun 2014 12:54:06 -0400
+
+git-annex (5.20140529) unstable; urgency=medium
+
+ * Fix encoding of data written to git-annex branch. Avoid truncating
+ unicode characters to 8 bits. Allow any encoding to be used, as with
+ filenames (but utf8 is the sane choice). Affects metadata and repository
+ descriptions, and preferred content expressions.
+ * assistant: When there are multiple remotes giving different ways
+ to access the same repository, honor remote cost settings and use
+ the cheapest available.
+ * webapp: More robust startup when annex directory is not a git repo.
+ * initremote/enableremote: Basic support for using with regular git remotes;
+ initremote stores the location of an already existing git remote,
+ and enableremote setups up a remote using its stored location.
+ * webapp: Support for enabling known git repositories on ssh servers.
+ The repository must have been added using initremote.
+ * webapp: When setting up a ssh remote, record it using initremote,
+ so that it can be easily enabled elsewhere.
+ * webapp: When setting up a ssh remote, if the user inputs ~/foo,
+ normalize that to foo, since it's in the home directory by default.
+ * Use exceptions in place of deprecated MonadCatchIO-transformers
+ Thanks, Ben Gamari.
+ * android: Run busybox install with -s, since some versions of Android
+ prohibit making hard links.
+ * Android webapp: Fix EvilSplicer bugs that mangled the css files,
+ preventing icons from displaying, and also slightly broke the js files.
+
+ -- Joey Hess <joeyh@debian.org> Thu, 29 May 2014 14:41:56 -0400
+
+git-annex (5.20140517) unstable; urgency=medium
+
+ * webapp: Switched to bootstrap 3.
+ Thanks, Sören Brunk.
+ * Standalone builds now check gpg signatures before upgrading.
+ * Simplified repository description line format. The remote name,
+ if any, is always in square brackets after the description.
+ * assistant: Clean up stale tmp files on startup.
+ * webapp: Better ssh password prompting.
+ * Depend on git-remote-gcrypt 0.20130908-6. Older versions
+ fail when the assistant is run with no controlling tty.
+ * Added ddar special remote.
+ Thanks, Robie Basak.
+ * webapp: Fixed drag and drop to reorder the list of remotes.
+ * group: When no groups are specified to set, lists the current groups
+ of a repository.
+ * Add remote.$name.annex-shell configuration.
+ Thanks, Fraser Tweedale
+ * Support symlinking git-annex and git-annex-shell
+ from the Linux standalone bundle into PATH.
+ Thanks, jlebar.
+
+ -- Joey Hess <joeyh@debian.org> Sat, 17 May 2014 13:30:39 -0400
+
+git-annex (5.20140421) unstable; urgency=medium
+
+ * assistant: Now detects immediately when other repositories push
+ changes to a ssh remote, and pulls.
+ ** XMPP is no longer needed in this configuration! **
+ This requires the remote server have git-annex-shell with
+ notifychanges support (>= 5.20140405)
+ * webapp: Show a network signal icon next to ssh and xmpp remotes that
+ it's currently connected with.
+ * webapp: Rework xmpp nudge to prompt for either xmpp or a ssh remote
+ to be set up.
+ * sync, assistant, remotedaemon: Use ssh connection caching for git pushes
+ and pulls.
+ * remotedaemon: When network connection is lost, close all cached ssh
+ connections.
+ * Improve handling of monthly/yearly scheduling.
+ * Avoid depending on shakespeare except for when building the webapp.
+ * uninit: Avoid making unncessary copies of files.
+ * info: Allow use in a repository where annex.uuid is not set.
+ * reinit: New command that can initialize a new repository using
+ the configuration of a previously known repository.
+ Useful if a repository got deleted and you want
+ to clone it back the way it was.
+ * drop --from: When local repository is untrusted, its copy of a file does
+ not count.
+ * Bring back rsync -p, but only when git-annex is running on a non-crippled
+ file system. This is a better approach to fix #700282 while not
+ unncessarily losing file permissions on non-crippled systems.
+ * webapp: Start even if the current directory is listed in
+ ~/.config/git-annex/autostart but no longer has a git repository in it.
+ * findref: New command, like find but shows files in a specified git ref.
+ * webapp: Fix UI for removing XMPP connection.
+ * When init detects that git is not configured to commit, and sets
+ user.email to work around the problem, also make it set user.name.
+ * webapp: Support using git-annex on a remote server, which was installed
+ from the standalone tarball or OSX app, and so does not have
+ git-annex in PATH (and may also not have git or rsync in PATH).
+ * standalone tarball, OSX app: Install a ~/.ssh/git-annex-wrapper, which
+ can be used to run git-annex, git, rsync, etc.
+
+ -- Joey Hess <joeyh@debian.org> Sun, 20 Apr 2014 19:43:14 -0400
+
+git-annex (5.20140412) unstable; urgency=high
+
+ * Last release didn't quite fix the high cpu issue in all cases, this should.
+
+ -- Joey Hess <joeyh@debian.org> Fri, 11 Apr 2014 17:14:38 -0400
+
+git-annex (5.20140411) unstable; urgency=high
+
+ * importfeed: Filename template can now contain an itempubdate variable.
+ Needs feed 0.3.9.2.
+ * Fix rsync progress parsing in locales that use comma in number display.
+ Closes: #744148
+ * assistant: Fix high CPU usage triggered when a monthly fsck is scheduled,
+ and the last time the job ran was a day of the month > 12. This caused a
+ runaway loop. Thanks to Anarcat for his assistance, and to Maximiliano
+ Curia for identifying the cause of this bug.
+ * Remove wget from OSX dmg, due to issues with cert paths that broke
+ git-annex automatic upgrading. Instead, curl is used, unless the
+ OSX system has wget installed, which will then be used.
+
+ -- Joey Hess <joeyh@debian.org> Fri, 11 Apr 2014 14:59:49 -0400
+
+git-annex (5.20140405) unstable; urgency=medium
+
+ * git-annex-shell: Added notifychanges command.
+ * Improve display of dbus notifications. Thanks, Johan Kiviniemi.
+ * Fix nautilus script installation to not crash when the nautilus script dir
+ does not exist. Instead, only install scripts when the directory already
+ exists.
+
+ -- Joey Hess <joeyh@debian.org> Sat, 05 Apr 2014 16:54:33 -0400
+
+git-annex (5.20140402) unstable; urgency=medium
+
+ * unannex, uninit: Avoid committing after every file is unannexed,
+ for massive speedup.
+ * --notify-finish switch will cause desktop notifications after each
+ file upload/download/drop completes
+ (using the dbus Desktop Notifications Specification)
+ * --notify-start switch will show desktop notifications when each
+ file upload/download starts.
+ * webapp: Automatically install Nautilus integration scripts
+ to get and drop files.
+ * tahoe: Pass -d parameter before subcommand; putting it after
+ the subcommand no longer works with tahoe-lafs version 1.10.
+ (Thanks, Alberto Berti)
+ * forget --drop-dead: Avoid removing the dead remote from the trust.log,
+ so that if git remotes for it still exist anywhere, git annex info
+ will still know it's dead and not show it.
+ * git-annex-shell: Make configlist automatically initialize
+ a remote git repository, as long as a git-annex branch has
+ been pushed to it, to simplify setup of remote git repositories,
+ including via gitolite.
+ * add --include-dotfiles: New option, perhaps useful for backups.
+ * Version 5.20140227 broke creation of glacier repositories,
+ not including the datacenter and vault in their configuration.
+ This bug is fixed, but glacier repositories set up with the broken
+ version of git-annex need to have the datacenter and vault set
+ in order to be usable. This can be done using git annex enableremote
+ to add the missing settings. For details, see
+ http://git-annex.branchable.com/bugs/problems_with_glacier/
+ * Added required content configuration.
+ * assistant: Improve ssh authorized keys line generated in local pairing
+ or for a remote ssh server to set environment variables in an
+ alternative way that works with the non-POSIX fish shell, as well
+ as POSIX shells.
+
+ -- Joey Hess <joeyh@debian.org> Wed, 02 Apr 2014 16:42:53 -0400
+
+git-annex (5.20140320) unstable; urgency=medium
* Fix zombie leak and general inneficiency when copying files to a
local git repo.
+ * Fix ssh connection caching stop method to work with openssh 6.5p1,
+ which broke the old method.
* webapp: Added a "Sync now" item to each repository's menu.
- * unused: In direct mode, files that are deleted from the work tree
- are no longer incorrectly detected as unused.
- * repair: Improve memory usage when git fsck finds a great many broken
- objects.
* webapp: Use securemem for constant time auth token comparisons.
* copy --fast --to remote: Avoid printing anything for files that
are already believed to be present on the remote.
@@ -14,28 +626,31 @@ git-annex (5.20140307) UNRELEASED; urgency=medium
the repository's description will now fail when multiple repositories
match, rather than picking a repository at random.
(So will --in=)
- * Fix ssh connection caching stop method to work with openssh 6.5p1,
- which broke the old method.
* Better workaround for problem umasks when eg, setting up ssh keys.
* "standard" can now be used as a first-class keyword in preferred content
expressions. For example "standard or (include=otherdir/*)"
- * Avoid encoding errors when using the unused log file.
- * vicfg: Allows editing preferred content expressions for groups.
* groupwanted can be used in preferred content expressions.
+ * vicfg: Allows editing preferred content expressions for groups.
+ * Improve behavior when unable to parse a preferred content expression
+ (thanks, ion).
* metadata: Add --get
* metadata: Support --key option (and some other ones like --all)
- * map: Fix crash when one of the remotes of a repo is a local directory
- that does not exist, or is not a git repo.
- * rsync special remote: Fix slashes when used on Windows.
* For each metadata field, there's now an automatically maintained
"$field-lastchanged" that gives the date of the last change to that
field. Also the "lastchanged" field for the date of the last change
to any of a file's metadata.
+ * unused: In direct mode, files that are deleted from the work tree
+ and so have no content present are no longer incorrectly detected as
+ unused.
+ * Avoid encoding errors when using the unused log file.
+ * map: Fix crash when one of the remotes of a repo is a local directory
+ that does not exist, or is not a git repo.
+ * repair: Improve memory usage when git fsck finds a great many broken
+ objects.
* Windows: Fix some filename encoding bugs.
- * Improve behavior when unable to parse a preferred content expression
- (thanks, ion).
+ * rsync special remote: Fix slashes when used on Windows.
- -- Joey Hess <joeyh@debian.org> Thu, 06 Mar 2014 16:17:01 -0400
+ -- Joey Hess <joeyh@debian.org> Thu, 20 Mar 2014 13:21:12 -0400
git-annex (5.20140306) unstable; urgency=high
diff --git a/debian/control b/debian/control
index 9b6e812b8..e01d3a190 100644
--- a/debian/control
+++ b/debian/control
@@ -4,6 +4,7 @@ Priority: optional
Build-Depends:
debhelper (>= 9),
ghc (>= 7.4),
+ cabal-install,
libghc-mtl-dev (>= 2.1.1),
libghc-missingh-dev,
libghc-data-default-dev,
@@ -13,11 +14,14 @@ Build-Depends:
libghc-cryptohash-dev,
libghc-dataenc-dev,
libghc-utf8-string-dev,
- libghc-hs3-dev (>= 0.5.6),
- libghc-dav-dev (>= 0.6.1) [amd64 i386 kfreebsd-amd64 kfreebsd-i386 powerpc],
+ libghc-aws-dev (>= 0.9.2-2~),
+ libghc-conduit-dev,
+ libghc-resourcet-dev,
+ libghc-dav-dev (>= 1.0) [amd64 i386 kfreebsd-amd64 kfreebsd-i386 powerpc],
libghc-quickcheck2-dev,
libghc-monad-control-dev (>= 0.3),
- libghc-monadcatchio-transformers-dev,
+ libghc-exceptions-dev (>= 0.6),
+ libghc-transformers-dev,
libghc-unix-compat-dev,
libghc-dlist-dev,
libghc-uuid-dev,
@@ -26,24 +30,26 @@ Build-Depends:
libghc-ifelse-dev,
libghc-bloomfilter-dev,
libghc-edit-distance-dev,
- libghc-extensible-exceptions-dev,
libghc-hinotify-dev [linux-any],
libghc-stm-dev (>= 2.3),
libghc-dbus-dev (>= 0.10.3) [linux-any],
- libghc-yesod-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc sparc],
- libghc-yesod-static-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc sparc],
- libghc-yesod-default-dev [i386 amd64 kfreebsd-amd64 powerpc sparc],
- libghc-hamlet-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc sparc],
- libghc-clientsession-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc sparc],
- libghc-warp-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc sparc],
- libghc-warp-tls-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc sparc],
- libghc-wai-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc sparc],
- libghc-wai-logger-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc sparc],
+ libghc-fdo-notify-dev (>= 0.3) [linux-any],
+ libghc-yesod-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc],
+ libghc-yesod-static-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc],
+ libghc-yesod-default-dev [i386 amd64 kfreebsd-amd64 powerpc],
+ libghc-hamlet-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc],
+ libghc-shakespeare-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc],
+ libghc-clientsession-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc],
+ libghc-warp-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc],
+ libghc-warp-tls-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc],
+ libghc-wai-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc],
+ libghc-wai-extra-dev [i386 amd64 kfreebsd-i386 kfreebsd-amd64 powerpc],
libghc-securemem-dev,
libghc-byteable-dev,
libghc-dns-dev,
libghc-case-insensitive-dev,
libghc-http-types-dev,
+ libghc-http-conduit-dev,
libghc-blaze-builder-dev,
libghc-crypto-api-dev,
libghc-network-multicast-dev,
@@ -53,25 +59,26 @@ Build-Depends:
libghc-gnutls-dev (>= 0.1.4),
libghc-xml-types-dev,
libghc-async-dev,
- libghc-http-dev,
- libghc-feed-dev,
+ libghc-feed-dev (>= 0.3.9.2),
libghc-regex-tdfa-dev [!mipsel !s390],
libghc-regex-compat-dev [mipsel s390],
- libghc-tasty-dev (>= 0.7) [!mipsel !sparc],
- libghc-tasty-hunit-dev [!mipsel !sparc],
- libghc-tasty-quickcheck-dev [!mipsel !sparc],
- libghc-tasty-rerun-dev [!mipsel !sparc],
+ libghc-tasty-dev (>= 0.7) [!sparc],
+ libghc-tasty-hunit-dev [!sparc],
+ libghc-tasty-quickcheck-dev [!sparc],
+ libghc-tasty-rerun-dev [!sparc],
libghc-optparse-applicative-dev [!sparc],
- lsof [!kfreebsd-i386 !kfreebsd-amd64],
+ lsof [!kfreebsd-i386 !kfreebsd-amd64 !hurd-any],
ikiwiki,
perlmagick,
- git (>= 1:1.8.4),
+ git (>= 1:2.0),
rsync,
wget,
curl,
openssh-client,
-Maintainer: Joey Hess <joeyh@debian.org>
-Standards-Version: 3.9.5
+ git-remote-gcrypt (>= 0.20130908-6),
+ llvm-3.4 [armel armhf],
+Maintainer: Gergely Nagy <algernon@madhouse-project.org>
+Standards-Version: 3.9.6
Vcs-Git: git://git.kitenet.net/git-annex
Homepage: http://git-annex.branchable.com/
XS-Testsuite: autopkgtest
@@ -80,7 +87,7 @@ Package: git-annex
Architecture: any
Section: utils
Depends: ${misc:Depends}, ${shlibs:Depends},
- git (>= 1:1.8.4),
+ git (>= 1:2.0),
rsync,
wget,
curl,
@@ -89,10 +96,11 @@ Recommends:
lsof,
gnupg,
bind9-host,
- ssh-askpass,
quvi,
- git-remote-gcrypt (>= 0.20130908-4),
+ git-remote-gcrypt (>= 0.20130908-6),
nocache,
+ aria2,
+ bittornado | bittorrent,
Suggests:
graphviz,
bup,
@@ -104,10 +112,15 @@ Description: manage files with git, without checking their contents into git
dealing with files larger than git can currently easily handle, whether due
to limitations in memory, time, or disk space.
.
- Even without file content tracking, being able to manage files with git,
- move files around and delete files with versioned directory trees, and use
- branches and distributed clones, are all very handy reasons to use git. And
- annexed files can co-exist in the same git repository with regularly
- versioned files, which is convenient for maintaining documents, Makefiles,
- etc that are associated with annexed files but that benefit from full
- revision control.
+ It can store large files in many places, from local hard drives, to a
+ large number of cloud storage services, including S3, WebDAV,
+ and rsync, with a dozen cloud storage providers usable via plugins.
+ Files can be stored encrypted with gpg, so that the cloud storage
+ provider cannot see your data. git-annex keeps track of where each file
+ is stored, so it knows how many copies are available, and has many
+ facilities to ensure your data is preserved.
+ .
+ git-annex can also be used to keep a folder in sync between computers,
+ noticing when files are changed, and automatically committing them
+ to git and transferring them to other computers. The git-annex webapp
+ makes it easy to set up and use git-annex this way.
diff --git a/debian/copyright b/debian/copyright
index 22bb1193f..7b9807680 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -2,21 +2,39 @@ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Source: native package
Files: *
-Copyright: © 2010-2014 Joey Hess <joey@kitenet.net>
+Copyright: © 2010-2015 Joey Hess <id@joeyh.name>
License: GPL-3+
Files: Assistant/WebApp.hs Assistant/WebApp/* templates/* static/*
-Copyright: © 2012-2014 Joey Hess <joey@kitenet.net>
+Copyright: © 2012-2014 Joey Hess <id@joeyh.name>
+ © 2014 Sören Brunk
License: AGPL-3+
+Files: Remote/Ddar.hs
+Copyright: © 2011 Joey Hess <id@joeyh.name>
+ © 2014 Robie Basak <robie@justgohome.co.uk>
+License: GPL-3+
+
Files: Utility/ThreadScheduler.hs
Copyright: 2011 Bas van Dijk & Roel van Dijk
- 2012 Joey Hess <joey@kitenet.net>
+ 2012, 2013 Joey Hess <id@joeyh.name>
+License: BSD-2-clause
+
+Files: Utility/*
+Copyright: 2012-2015 Joey Hess <id@joeyh.name>
+License: BSD-2-clause
+
+Files: Utility/Gpg.hs Utility/DirWatcher*
+Copyright: © 2010-2014 Joey Hess <id@joeyh.name>
License: GPL-3+
+Files: Assistant/WebApp/Bootstrap3.hs
+Copyright: 2010 Michael Snoyman
+License: BSD-2-clause
+
Files: doc/logo* */favicon.ico standalone/osx/git-annex.app/Contents/Resources/git-annex.icns standalone/android/icons/*
Copyright: 2007 Henrik Nyh <http://henrik.nyh.se/>
- 2010 Joey Hess <joey@kitenet.net>
+ 2010 Joey Hess <id@joeyh.name>
2013 John Lawrence
License: other
Free to modify and redistribute with due credit, and obviously free to use.
@@ -28,14 +46,14 @@ License: LGPL-2.1+
Files: Utility/libmounts.c
Copyright: 1980, 1989, 1993, 1994 The Regents of the University of California
2001 David Rufino <daverufino@btinternet.com>
- 2012 Joey Hess <joey@kitenet.net>
+ 2012 Joey Hess <id@joeyh.name>
License: BSD-3-clause
* Copyright (c) 1980, 1989, 1993, 1994
* The Regents of the University of California. All rights reserved.
* Copyright (c) 2001
* David Rufino <daverufino@btinternet.com>
* Copyright 2012
- * Joey Hess <joey@kitenet.net>
+ * Joey Hess <id@joeyh.name>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -88,23 +106,28 @@ License: MIT or GPL-2
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-Files: static/bootstrap* static/glyphicons-halflings*
-Copyright: 2012 Twitter, Inc.
-License: Apache-2.0
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- .
- http://www.apache.org/licenses/LICENSE-2.0
- .
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- .
- The complete text of the Apache License is distributed in
- /usr/share/common-licenses/Apache-2.0 on Debian systems.
+Files: static/*/bootstrap* static/*/glyphicons-halflings*
+Copyright: 2012-2014 Twitter, Inc.
+License: MIT
+ Copyright (c) 2011-2014 Twitter, Inc
+ .
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+ .
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
License: GPL-3+
The full text of version 3 of the GPL is distributed as doc/license/GPL in
@@ -116,6 +139,28 @@ License: LGPL-2.1+
in this package's source, or in /usr/share/common-licenses/LGPL-2.1
on Debian systems.
+License: BSD-2-clause
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ .
+ THIS SOFTWARE IS PROVIDED BY AUTHORS AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
License: AGPL-3+
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
diff --git a/debian/rules b/debian/rules
index 3a0511fa6..7c8f8a560 100755
--- a/debian/rules
+++ b/debian/rules
@@ -1,7 +1,6 @@
#!/usr/bin/make -f
-# Avoid using cabal, as it writes to $HOME
-export CABAL=./Setup
+export CABAL=debian/cabal-wrapper
# Do use the changelog's version number, rather than making one up.
export RELEASE_BUILD=1
diff --git a/doc/Android/comment_20_81940ea56ace3dcd5fa84dfccd88ad96._comment b/doc/Android/comment_20_81940ea56ace3dcd5fa84dfccd88ad96._comment
index ed4d6e0b0..56a4bb632 100644
--- a/doc/Android/comment_20_81940ea56ace3dcd5fa84dfccd88ad96._comment
+++ b/doc/Android/comment_20_81940ea56ace3dcd5fa84dfccd88ad96._comment
@@ -4,7 +4,7 @@
subject="comment 20"
date="2013-07-17T19:06:31Z"
content="""
-@frioux the webapp has a \"ssh server\" option that will set up a ssh key and use it for passwordless data transfer to a ssh server. You have to enter your password twice in the git-annex terminal app, and then it's set up.
+@frioux the webapp has a \"ssh server\" option that will set up a ssh key and use it for passwordless data transfer to a ssh server.
The openssh included in the git-annex app fully supports everything you can usually do with ssh keys, so you can also set this up by hand.
"""]]
diff --git a/doc/Android/comment_15_77bafc01b47d4cf8f96bde2b6704ed71._comment b/doc/Android/oldcomments/comment_15_77bafc01b47d4cf8f96bde2b6704ed71._comment
index 0ecd59fe6..0ecd59fe6 100644
--- a/doc/Android/comment_15_77bafc01b47d4cf8f96bde2b6704ed71._comment
+++ b/doc/Android/oldcomments/comment_15_77bafc01b47d4cf8f96bde2b6704ed71._comment
diff --git a/doc/assistant.mdwn b/doc/assistant.mdwn
index ad21e272c..2ed35d6df 100644
--- a/doc/assistant.mdwn
+++ b/doc/assistant.mdwn
@@ -13,7 +13,7 @@ instructions.
## intro screencast
-[[!inline feeds=no template=bare pages=videos/git-annex_assistant_introduction]]
+[[!inline feeds=no template=bare pages=videos/git-annex_assistant_lan]]
## documentation
diff --git a/doc/assistant/comment_3_9bd3b532a5c026a1d664c898f8e335e6._comment b/doc/assistant/comment_3_9bd3b532a5c026a1d664c898f8e335e6._comment
new file mode 100644
index 000000000..996c6e606
--- /dev/null
+++ b/doc/assistant/comment_3_9bd3b532a5c026a1d664c898f8e335e6._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnov5q9_Cl4Ps5NoYE08yE01NLSvBANnY8"
+ nickname="Eric"
+ subject="Does it not work in Direct Mode?"
+ date="2014-04-26T09:41:20Z"
+ content="""
+Looks great, but I got the impression that Assistant would mirror the files from my computer to my external hard drive, and I can't seem to get it to do that.
+"""]]
diff --git a/doc/assistant/comment_4_c546a24459ca29025f00e424353c40d2._comment b/doc/assistant/comment_4_c546a24459ca29025f00e424353c40d2._comment
new file mode 100644
index 000000000..82be4c193
--- /dev/null
+++ b/doc/assistant/comment_4_c546a24459ca29025f00e424353c40d2._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlr2Bj0Mzqwzl28cbrotcQUbOFoaPB3B_Y"
+ nickname="Tomasz"
+ subject="how to disable assistant"
+ date="2014-04-28T10:21:59Z"
+ content="""
+assistant daemon now starts at boot and pushes all annexed files to other repos... I'd like to do it on my own. I can stop daemon from webapp, but it starts again on boot - how Do I disable it from autostarting ?
+"""]]
diff --git a/doc/assistant/comment_5_d17de359cdd46659170d373cd09c0979._comment b/doc/assistant/comment_5_d17de359cdd46659170d373cd09c0979._comment
new file mode 100644
index 000000000..27d343021
--- /dev/null
+++ b/doc/assistant/comment_5_d17de359cdd46659170d373cd09c0979._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 5"
+ date="2014-05-16T18:55:22Z"
+ content="""
+If you have a question about using the assistant, please ask it in the [[forum]], not here.
+"""]]
diff --git a/doc/assistant/connection.png b/doc/assistant/connection.png
new file mode 100644
index 000000000..3cd6bef86
--- /dev/null
+++ b/doc/assistant/connection.png
Binary files differ
diff --git a/doc/assistant/downloadnotification.png b/doc/assistant/downloadnotification.png
new file mode 100644
index 000000000..32b04f122
--- /dev/null
+++ b/doc/assistant/downloadnotification.png
Binary files differ
diff --git a/doc/assistant/konquerormenu.png b/doc/assistant/konquerormenu.png
new file mode 100644
index 000000000..747bcdd0d
--- /dev/null
+++ b/doc/assistant/konquerormenu.png
Binary files differ
diff --git a/doc/assistant/nautilusmenu.png b/doc/assistant/nautilusmenu.png
new file mode 100644
index 000000000..d7926e34f
--- /dev/null
+++ b/doc/assistant/nautilusmenu.png
Binary files differ
diff --git a/doc/assistant/release_notes.mdwn b/doc/assistant/release_notes.mdwn
index 13b7c62ab..52749dda7 100644
--- a/doc/assistant/release_notes.mdwn
+++ b/doc/assistant/release_notes.mdwn
@@ -1,3 +1,19 @@
+## version 5.20140421
+
+This release begins to deprecate XMPP support. In particular, if you use
+the assistant with a ssh remote that has this version of git-annex
+installed, you don't need XMPP any longer to get immediate syncing of
+changes.
+
+## version 5.20140411
+
+This release fixes a bug that could cause the assistant to use a *lot* of
+CPU, when monthly fscking was set up.
+
+Automatic upgrading was broken on OSX for previous versions. This has been
+fixed, but you'll need to manually upgrade to this version to get it going
+again. Workaround: Remove the wget bundled inside the git-annex dmg.
+
## version 5.20140221
The Windows port of the assistant and webapp is now considered to be beta
diff --git a/doc/assistant/share_with_a_friend_walkthrough/comment_1_c87889721e3a7e52ac1ed3752fa7db46._comment b/doc/assistant/share_with_a_friend_walkthrough/comment_1_c87889721e3a7e52ac1ed3752fa7db46._comment
new file mode 100644
index 000000000..527ac9ce8
--- /dev/null
+++ b/doc/assistant/share_with_a_friend_walkthrough/comment_1_c87889721e3a7e52ac1ed3752fa7db46._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawl6RDLuI2b2fHkTRseVQGUNjcQ2qUrOaE0"
+ nickname="Фёдор"
+ subject="comment 1"
+ date="2014-05-25T15:10:34Z"
+ content="""
+Do we need a cloud repository just to bypass NAT? I understand it can't share files within Jabber, but it just looks unpolished. Maybe some punching techniques might be handy, pwnat for example.
+"""]]
diff --git a/doc/automatic_conflict_resolution/comment_4_80539e11e36a0b64cee83b6b373bd843._comment b/doc/automatic_conflict_resolution/comment_4_80539e11e36a0b64cee83b6b373bd843._comment
new file mode 100644
index 000000000..d67514452
--- /dev/null
+++ b/doc/automatic_conflict_resolution/comment_4_80539e11e36a0b64cee83b6b373bd843._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn3p4i4lk_zMilvjnJ9sS6g2nerpgz0Fjc"
+ nickname="Matthias"
+ subject="merge for master branch?"
+ date="2014-03-23T23:02:23Z"
+ content="""
+As far as I observed, \"git annex merge\" only merges the \"git-annex\" branch. My wish is to have the conflict resolution from \"git annex sync\" in the \"master\" branch, but no automatic commit, such that the user can verify and possibly correct the merge. The proposed merge could go to the index. Consider the following scenario:
+
+1. We have repo A, B, and CENTRAL
+2. All three start with a root commit in \"master\" branch
+3. Then A commits a file \"test.txt\" with content \"a\" and syncs with CENTRAL
+4. Meanwhile, B commits \"test.txt\" with content \"b\"
+5. When B tries to sync with CENTRAL, the proposed conflict resolution having two files \"test.txt-variantXXXX\" and \"test.txt-variantYYYY\" should be staged in the index, but not committed yet.
+6. B can now commit a custom merge, e.g. with file content \"ab\".
+
+The point is that I really like the conflict resolution, but still want to force the user to check the result.
+"""]]
diff --git a/doc/automatic_conflict_resolution/comment_5_00ac9e4a47ce9a886dbf573480f151bd._comment b/doc/automatic_conflict_resolution/comment_5_00ac9e4a47ce9a886dbf573480f151bd._comment
new file mode 100644
index 000000000..4d1e7c4bc
--- /dev/null
+++ b/doc/automatic_conflict_resolution/comment_5_00ac9e4a47ce9a886dbf573480f151bd._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.41"
+ subject="comment 5"
+ date="2014-03-26T18:56:30Z"
+ content="""
+@Matthias you need to install git-annex 4.20130709 or newer. Then `git-annex merge` will do what you want. As I said before.
+
+As for committing the merge, you can always adjust the result after the fact and use `git commit --amend`.
+"""]]
diff --git a/doc/automatic_conflict_resolution/comment_6_8a0860fee88f5954918305f055a39d8d._comment b/doc/automatic_conflict_resolution/comment_6_8a0860fee88f5954918305f055a39d8d._comment
new file mode 100644
index 000000000..4e9493d12
--- /dev/null
+++ b/doc/automatic_conflict_resolution/comment_6_8a0860fee88f5954918305f055a39d8d._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn3p4i4lk_zMilvjnJ9sS6g2nerpgz0Fjc"
+ nickname="Matthias"
+ subject="auto conflict resolution master branch"
+ date="2014-04-13T17:48:19Z"
+ content="""
+@joeyh: This must be a misunderstanding of what I want. I use version 5.20140320. I can't find a workflow where \"git annex merge\" changes my master branch, it only updates the git-annex branch.
+
+Thinking again of it after some time, I am basically fine with \"git annex sync\". The only thing I am uncomfortable with is that the automatic merge is pushed without review.
+"""]]
diff --git a/doc/automatic_conflict_resolution/comment_7_3d2250cc26036b8532faa980065e20d0._comment b/doc/automatic_conflict_resolution/comment_7_3d2250cc26036b8532faa980065e20d0._comment
new file mode 100644
index 000000000..9f49021da
--- /dev/null
+++ b/doc/automatic_conflict_resolution/comment_7_3d2250cc26036b8532faa980065e20d0._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 7"
+ date="2014-04-17T20:00:22Z"
+ content="""
+@Matthias, here is an example of git-annex merge updating the master branch from the synced/master branch that was pushed to it earlier:
+
+<pre>
+joey@darkstar:~/tmp/test/2>git annex merge
+merge git-annex (merging synced/git-annex into git-annex...)
+ok
+merge synced/master
+Updating 7942eee..1f3422e
+Fast-forward
+ new_file | 1 +
+ 1 file changed, 1 insertion(+)
+ create mode 120000 new_file
+ok
+</pre>
+
+If you are having trouble with it somehow, I'd suggest filing a bug report.
+"""]]
diff --git a/doc/automatic_conflict_resolution/comment_8_ef474c258ce8e0ebc6485c1366ae6315._comment b/doc/automatic_conflict_resolution/comment_8_ef474c258ce8e0ebc6485c1366ae6315._comment
new file mode 100644
index 000000000..81f089b11
--- /dev/null
+++ b/doc/automatic_conflict_resolution/comment_8_ef474c258ce8e0ebc6485c1366ae6315._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn3p4i4lk_zMilvjnJ9sS6g2nerpgz0Fjc"
+ nickname="Matthias"
+ subject="auto conflict resolution"
+ date="2014-04-19T17:26:11Z"
+ content="""
+Thanks Joey, I could construct a scenario where the auto-conflict-resolution was applied in the master branch.
+"""]]
diff --git a/doc/backends.mdwn b/doc/backends.mdwn
index 79bacd68e..5da053dc1 100644
--- a/doc/backends.mdwn
+++ b/doc/backends.mdwn
@@ -5,25 +5,30 @@ to retrieve the file's content (its value).
Multiple pluggable key-value backends are supported, and a single repository
can use different ones for different files.
-* `SHA256E` -- The default backend for new files, combines a SHA256 hash of
- the file's content with the file's extension. This allows
+* `SHA256E` -- The default backend for new files, combines a 256 bit SHA-2
+ hash of the file's content with the file's extension. This allows
verifying that the file content is right, and can avoid duplicates of
files with the same content. Its need to generate checksums
can make it slower for large files.
* `SHA256` -- Does not include the file extension in the key, which can
lead to better deduplication but can confuse some programs.
* `WORM` ("Write Once, Read Many") This assumes that any file with
- the same basename, size, and modification time has the same content.
+ the same filename, size, and modification time has the same content.
This is the least expensive backend, recommended for really large
files or slow systems.
-* `SHA512`, `SHA512E` -- Best currently available hash, for the very paranoid.
-* `SHA1`, `SHA1E` -- Smaller hash than `SHA256` for those who want a checksum
- but are not concerned about security.
+* `SHA512`, `SHA512E` -- Best SHA-2 hash, for the very paranoid.
+* `SHA1`, `SHA1E`, `MD5`, `MD5E` -- Smaller hashes than `SHA256`
+ for those who want a checksum but are not concerned about security.
* `SHA384`, `SHA384E`, `SHA224`, `SHA224E` -- Hashes for people who like
unusual sizes.
-* `SKEIN512`, `SKEIN256` -- [Skein hash](http://en.wikipedia.org/wiki/Skein_hash),
+* `SKEIN512`, `SKEIN512E`, `SKEIN256`, `SKEIN256E`
+ -- [Skein hash](http://en.wikipedia.org/wiki/Skein_hash),
a well-regarded SHA3 hash competition finalist.
+Note that the SHA512, SKEIN512 and SHA384 generate long paths,
+which are known to not work on Windows. If interoperability on Windows is a
+concern, avoid those backends.
+
The `annex.backends` git-config setting can be used to list the backends
git-annex should use. The first one listed will be used by default when
new files are added.
diff --git a/doc/backends/comment_10_920cd139dfec8adb1089f5acf26de4d2._comment b/doc/backends/comment_10_920cd139dfec8adb1089f5acf26de4d2._comment
new file mode 100644
index 000000000..a756f191a
--- /dev/null
+++ b/doc/backends/comment_10_920cd139dfec8adb1089f5acf26de4d2._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 10"""
+ date="2015-01-06T17:58:28Z"
+ content="""
+@Matthias, that directory structure is not controlled by the backend.
+It is explained in [[internals]]
+"""]]
diff --git a/doc/backends/comment_11_f0f6316bbdc971a9ab157de9bbb9f74c._comment b/doc/backends/comment_11_f0f6316bbdc971a9ab157de9bbb9f74c._comment
new file mode 100644
index 000000000..fc1996495
--- /dev/null
+++ b/doc/backends/comment_11_f0f6316bbdc971a9ab157de9bbb9f74c._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnx8kHW66N3BqmkVpgtXDlYMvr8TJ5VvfY"
+ nickname="Yaroslav"
+ subject="add MD5SUM (with E) backend?"
+ date="2015-01-29T22:07:40Z"
+ content="""
+probably in many cases MD5SUM might be sufficient to cover the space of the available load and
+
+- its size would be even smaller than SHA1 (thus smaller git-annex footprint)
+- immediate matching to often distributed MD5SUMs
+- matching to ETags (whenever wasn't a multipart upload) in S3 buckets
+
+or use of MD5SUM hash is really not recommended for non-encryption-critical cases too?
+"""]]
diff --git a/doc/backends/comment_12_da76dff5fe712318d7d4313f1d827883._comment b/doc/backends/comment_12_da76dff5fe712318d7d4313f1d827883._comment
new file mode 100644
index 000000000..e4b3b277b
--- /dev/null
+++ b/doc/backends/comment_12_da76dff5fe712318d7d4313f1d827883._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""MD5"""
+ date="2015-02-04T17:25:45Z"
+ content="""
+I've added MD5 and MD5E. Of course, if you choose to use these, or the WORM
+backend, you give up the cryptographic verification that the content
+currently in your repository is the same content that was in it before.
+Whether that matters in your application is up to you.
+"""]]
diff --git a/doc/backends/comment_13_578423935bc71cdbdc23c3db06d1e870._comment b/doc/backends/comment_13_578423935bc71cdbdc23c3db06d1e870._comment
new file mode 100644
index 000000000..3d8f2a5a2
--- /dev/null
+++ b/doc/backends/comment_13_578423935bc71cdbdc23c3db06d1e870._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnx8kHW66N3BqmkVpgtXDlYMvr8TJ5VvfY"
+ nickname="Yaroslav"
+ subject="THANK YOU JOEY"
+ date="2015-02-09T14:04:27Z"
+ content="""
+for the MD5/MD5E (and now I have found \"email replies to me\" - I will become a power user of branchable ;) )
+"""]]
diff --git a/doc/backends/comment_7_4aa8cfaec1090f79fed530720e4ddad4._comment b/doc/backends/comment_7_4aa8cfaec1090f79fed530720e4ddad4._comment
new file mode 100644
index 000000000..3028547fe
--- /dev/null
+++ b/doc/backends/comment_7_4aa8cfaec1090f79fed530720e4ddad4._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmraN_ldJplGunVGmnjjLN6jL9s9TrVMGE"
+ nickname="Ævar Arnfjörð"
+ subject="Can annex use existing backends when amending existing files?"
+ date="2014-08-05T21:35:34Z"
+ content="""
+Related to the question posed in http://git-annex.branchable.com/forum/switching_backends/ can git annex be told to use the existing backend for a given file?
+
+The use case for this is that you have an existing repo that started out e.g. with SHA256, but new files are being added with SHA256E since that's the default now.
+
+But I was doing:
+
+ git annex edit .
+ rsync /some/old/copy/ .
+ git annex add .
+
+And was expecting it to show no changes for existing files, but it did, it would be nice if that was not the case.
+"""]]
diff --git a/doc/backends/comment_8_c40d2c2c929ad3239ee5d529e307c746._comment b/doc/backends/comment_8_c40d2c2c929ad3239ee5d529e307c746._comment
new file mode 100644
index 000000000..17ac4c275
--- /dev/null
+++ b/doc/backends/comment_8_c40d2c2c929ad3239ee5d529e307c746._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 8"
+ date="2014-08-12T18:00:46Z"
+ content="""
+Ævar, you can use `git annex add --backend=SHA256` to temporarily override the backend.
+"""]]
diff --git a/doc/backends/comment_9_5bef7f76f5e5b73a8e404fe6172b4368._comment b/doc/backends/comment_9_5bef7f76f5e5b73a8e404fe6172b4368._comment
new file mode 100644
index 000000000..bf8f7f8d2
--- /dev/null
+++ b/doc/backends/comment_9_5bef7f76f5e5b73a8e404fe6172b4368._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm_YXzEdPHzbSGVwtmTR7g1BqDtTnIBB5s"
+ nickname="Matthias"
+ subject="Over-long pathnames?"
+ date="2015-01-06T09:41:03Z"
+ content="""
+the SHA* backends generate too-complicated paths:
+
+lrwxrwxrwx 1 root root 193 Apr 22 2009 test.ogg -> ../../../.git/annex/objects/fX/pz/SHA256-s71983--4a55ff578b4c592c06a1f4d9e0f8a6949ea9961d9717fc22e7b3c412620ac890/SHA256-s71983--4a55ff578b4c592c06a1f4d9e0f8a6949ea9961d9717fc22e7b3c412620ac890
+
+I don't want the additional directory. What is it for?? It contains exactly one file and adds a couple of disk seeks to file lookup.
+"""]]
diff --git a/doc/bugs.mdwn b/doc/bugs.mdwn
index 1fdb1f49b..d1a0b07e9 100644
--- a/doc/bugs.mdwn
+++ b/doc/bugs.mdwn
@@ -1,18 +1,7 @@
-This is git-annex's bug list.
-
-[[!sidebar content="""
-[[!inline feeds=no template=bare pages=sidebar]]
-
-Categories:
-
-* [[Bugs_affecting_the_assistant|design/assistant/todo]]
-* [[Bugs_needing_more_info|moreinfo]]
-* [[Closed_bugs|bugs/done]]
-"""
-]]
+This is git-annex's bug list. Closed bugs are moved to [[done]].
[[!inline pages="./bugs/* and !./bugs/*/* and !./bugs/done and !link(done)
-and !./bugs/moreinfo and !link(moreinfo)
-and !*/Discussion" actions=yes postform=yes show=0 archive=yes]]
+and !./bugs/moreinfo and !./bugs/confirmed and !./bugs/forwarded and !*/Discussion"
+actions=yes postform=yes show=0 archive=yes template=buglist]]
[[!edittemplate template=templates/bugtemplate match="bugs/*" silent=yes]]
diff --git a/doc/bugs/127.0.0.1_references_on_remote_assistant_access.mdwn b/doc/bugs/127.0.0.1_references_on_remote_assistant_access.mdwn
deleted file mode 100644
index bf62df8d5..000000000
--- a/doc/bugs/127.0.0.1_references_on_remote_assistant_access.mdwn
+++ /dev/null
@@ -1,20 +0,0 @@
-### Please describe the problem.
-When I use git-annex webapp with a remote IP of a headless computer, I am sometimes redirected to a 127.0.0.1 address (with a different port as well)
-
-### What steps will reproduce the problem?
-1. Install git-annex as usual.
-2. Open git-annex assistant from a headless machine and access the webapp with the --listen option. (e.g. git annex webapp --listen=xxx.yyy.zzz.www)
-3. Create your first local repository. Then create a second local repository.
-4. When assistant asks you if you want to merge these 2 repositories, try to select the second option (to keep them separated).
-5. You are redirected from your remote IP to 127.0.0.1 to a new port number.
-
-(I also encountered the same error at another menu or function, but I don't remember where. Sorry.)
-
-### What version of git-annex are you using? On what operating system?
-4.20130815
-Ubuntu 13.10 64-bit (kernel 3.11.0-13-generic x86_64)
-
-### Please provide any additional information below.
-Please ask me for any additional information that may be useful.
-
-> [[dup]] of [[Hangs_on_creating_repository_when_using_--listen]]; [[done]] --[[Joey]]
diff --git a/doc/bugs/3.20121112:_build_error_in_assistant.mdwn b/doc/bugs/3.20121112:_build_error_in_assistant.mdwn
deleted file mode 100644
index de11dfbf7..000000000
--- a/doc/bugs/3.20121112:_build_error_in_assistant.mdwn
+++ /dev/null
@@ -1,432 +0,0 @@
-Git-annex stopped compiling with GHC 7.4.2 after updating Yesod and friends to the respective latest version. The complete build log is attached below. I hope this helps. Further build logs are available at <http://hydra.nixos.org/job/nixpkgs/trunk/gitAndTools.gitAnnex>, too.
-
- building
- make flags: PREFIX=/nix/store/9az61h33v1j6fkdmwdfy7gi0rhspsb9k-git-annex-3.20121112
- building Build/SysConfig.hs
- ghc -O2 -Wall -outputdir tmp -IUtility -DWITH_ASSISTANT -DWITH_S3 -DWITH_WEBAPP -DWITH_PAIRING -DWITH_XMPP -DWITH_DNS -DWITH_INOTIFY -DWITH_DBUS -threaded --make configure
- [1 of 7] Compiling Utility.Exception ( Utility/Exception.hs, tmp/Utility/Exception.o )
- [2 of 7] Compiling Utility.Misc ( Utility/Misc.hs, tmp/Utility/Misc.o )
- [3 of 7] Compiling Utility.Process ( Utility/Process.hs, tmp/Utility/Process.o )
- [4 of 7] Compiling Utility.SafeCommand ( Utility/SafeCommand.hs, tmp/Utility/SafeCommand.o )
- [5 of 7] Compiling Build.TestConfig ( Build/TestConfig.hs, tmp/Build/TestConfig.o )
- [6 of 7] Compiling Build.Configure ( Build/Configure.hs, tmp/Build/Configure.o )
- [7 of 7] Compiling Main ( configure.hs, tmp/Main.o )
- Linking configure ...
- ./configure
- checking version... 3.20121112
- checking git... yes
- checking git version... 1.8.0
- checking cp -a... yes
- checking cp -p... yes
- checking cp --reflink=auto... yes
- checking uuid generator... uuidgen
- checking xargs -0... yes
- checking rsync... yes
- checking curl... yes
- checking wget... no
- checking bup... no
- checking gpg... no
- checking lsof... no
- checking ssh connection caching... yes
- checking sha1... sha1sum
- checking sha256... sha256sum
- checking sha512... sha512sum
- checking sha224... sha224sum
- checking sha384... sha384sum
- building Utility/Touch.hs
- hsc2hs Utility/Touch.hsc
- building Utility/Mounts.hs
- hsc2hs Utility/Mounts.hsc
- building Utility/libdiskfree.o
- cc -Wall -c -o Utility/libdiskfree.o Utility/libdiskfree.c
- building Utility/libmounts.o
- cc -Wall -c -o Utility/libmounts.o Utility/libmounts.c
- building git-annex
- install -d tmp
- ghc -O2 -Wall -outputdir tmp -IUtility -DWITH_ASSISTANT -DWITH_S3 -DWITH_WEBAPP -DWITH_PAIRING -DWITH_XMPP -DWITH_DNS -DWITH_INOTIFY -DWITH_DBUS -threaded --make git-annex -o tmp/git-annex Utility/libdiskfree.o Utility/libmounts.o
- [ 1 of 279] Compiling Utility.Dot ( Utility/Dot.hs, tmp/Utility/Dot.o )
- [ 2 of 279] Compiling Utility.ThreadLock ( Utility/ThreadLock.hs, tmp/Utility/ThreadLock.o )
- [ 3 of 279] Compiling Utility.Mounts ( Utility/Mounts.hs, tmp/Utility/Mounts.o )
- [ 4 of 279] Compiling Utility.Yesod ( Utility/Yesod.hs, tmp/Utility/Yesod.o )
- [ 5 of 279] Compiling Utility.Tense ( Utility/Tense.hs, tmp/Utility/Tense.o )
- [ 6 of 279] Compiling Utility.Verifiable ( Utility/Verifiable.hs, tmp/Utility/Verifiable.o )
- [ 7 of 279] Compiling Assistant.Types.TransferSlots ( Assistant/Types/TransferSlots.hs, tmp/Assistant/Types/TransferSlots.o )
- [ 8 of 279] Compiling Types.StandardGroups ( Types/StandardGroups.hs, tmp/Types/StandardGroups.o )
- [ 9 of 279] Compiling Utility.Percentage ( Utility/Percentage.hs, tmp/Utility/Percentage.o )
- [ 10 of 279] Compiling Utility.Base64 ( Utility/Base64.hs, tmp/Utility/Base64.o )
- [ 11 of 279] Compiling Utility.DataUnits ( Utility/DataUnits.hs, tmp/Utility/DataUnits.o )
- [ 12 of 279] Compiling Utility.JSONStream ( Utility/JSONStream.hs, tmp/Utility/JSONStream.o )
- [ 13 of 279] Compiling Messages.JSON ( Messages/JSON.hs, tmp/Messages/JSON.o )
- [ 14 of 279] Compiling Build.SysConfig ( Build/SysConfig.hs, tmp/Build/SysConfig.o )
- [ 15 of 279] Compiling Types.KeySource ( Types/KeySource.hs, tmp/Types/KeySource.o )
- [ 16 of 279] Compiling Utility.State ( Utility/State.hs, tmp/Utility/State.o )
- [ 17 of 279] Compiling Types.UUID ( Types/UUID.hs, tmp/Types/UUID.o )
- [ 18 of 279] Compiling Types.Messages ( Types/Messages.hs, tmp/Types/Messages.o )
- [ 19 of 279] Compiling Types.Group ( Types/Group.hs, tmp/Types/Group.o )
- [ 20 of 279] Compiling Types.TrustLevel ( Types/TrustLevel.hs, tmp/Types/TrustLevel.o )
- [ 21 of 279] Compiling Types.BranchState ( Types/BranchState.hs, tmp/Types/BranchState.o )
- [ 22 of 279] Compiling Utility.PartialPrelude ( Utility/PartialPrelude.hs, tmp/Utility/PartialPrelude.o )
- [ 23 of 279] Compiling Utility.HumanTime ( Utility/HumanTime.hs, tmp/Utility/HumanTime.o )
- [ 24 of 279] Compiling Utility.Format ( Utility/Format.hs, tmp/Utility/Format.o )
- [ 25 of 279] Compiling Utility.FileSystemEncoding ( Utility/FileSystemEncoding.hs, tmp/Utility/FileSystemEncoding.o )
- [ 26 of 279] Compiling Utility.Touch ( Utility/Touch.hs, tmp/Utility/Touch.o )
- [ 27 of 279] Compiling Utility.Applicative ( Utility/Applicative.hs, tmp/Utility/Applicative.o )
- [ 28 of 279] Compiling Utility.Monad ( Utility/Monad.hs, tmp/Utility/Monad.o )
- [ 29 of 279] Compiling Utility.Exception ( Utility/Exception.hs, tmp/Utility/Exception.o )
- [ 30 of 279] Compiling Utility.DBus ( Utility/DBus.hs, tmp/Utility/DBus.o )
- [ 31 of 279] Compiling Utility.Misc ( Utility/Misc.hs, tmp/Utility/Misc.o )
- [ 32 of 279] Compiling Utility.Process ( Utility/Process.hs, tmp/Utility/Process.o )
- [ 33 of 279] Compiling Utility.SafeCommand ( Utility/SafeCommand.hs, tmp/Utility/SafeCommand.o )
- [ 34 of 279] Compiling Utility.Network ( Utility/Network.hs, tmp/Utility/Network.o )
- [ 35 of 279] Compiling Utility.SRV ( Utility/SRV.hs, tmp/Utility/SRV.o )
-
- Utility/SRV.hs:88:1: Warning: Defined but not used: `lookupSRVHost'
-
- Utility/SRV.hs:94:1: Warning: Defined but not used: `parseSrvHost'
- [ 36 of 279] Compiling Git.Types ( Git/Types.hs, tmp/Git/Types.o )
- [ 37 of 279] Compiling Utility.UserInfo ( Utility/UserInfo.hs, tmp/Utility/UserInfo.o )
- [ 38 of 279] Compiling Utility.Path ( Utility/Path.hs, tmp/Utility/Path.o )
- [ 39 of 279] Compiling Utility.TempFile ( Utility/TempFile.hs, tmp/Utility/TempFile.o )
- [ 40 of 279] Compiling Utility.Directory ( Utility/Directory.hs, tmp/Utility/Directory.o )
- [ 41 of 279] Compiling Utility.FreeDesktop ( Utility/FreeDesktop.hs, tmp/Utility/FreeDesktop.o )
- [ 42 of 279] Compiling Assistant.Install.AutoStart ( Assistant/Install/AutoStart.hs, tmp/Assistant/Install/AutoStart.o )
- [ 43 of 279] Compiling Common ( Common.hs, tmp/Common.o )
- [ 44 of 279] Compiling Utility.FileMode ( Utility/FileMode.hs, tmp/Utility/FileMode.o )
- [ 45 of 279] Compiling Git ( Git.hs, tmp/Git.o )
- [ 46 of 279] Compiling Git.FilePath ( Git/FilePath.hs, tmp/Git/FilePath.o )
- [ 47 of 279] Compiling Utility.Matcher ( Utility/Matcher.hs, tmp/Utility/Matcher.o )
- [ 48 of 279] Compiling Utility.Gpg ( Utility/Gpg.hs, tmp/Utility/Gpg.o )
- [ 49 of 279] Compiling Types.Crypto ( Types/Crypto.hs, tmp/Types/Crypto.o )
- [ 50 of 279] Compiling Types.Key ( Types/Key.hs, tmp/Types/Key.o )
- [ 51 of 279] Compiling Types.Backend ( Types/Backend.hs, tmp/Types/Backend.o )
- [ 52 of 279] Compiling Types.Remote ( Types/Remote.hs, tmp/Types/Remote.o )
- [ 53 of 279] Compiling Git.Sha ( Git/Sha.hs, tmp/Git/Sha.o )
- [ 54 of 279] Compiling Utility.CoProcess ( Utility/CoProcess.hs, tmp/Utility/CoProcess.o )
- [ 55 of 279] Compiling Git.Command ( Git/Command.hs, tmp/Git/Command.o )
- [ 56 of 279] Compiling Git.Ref ( Git/Ref.hs, tmp/Git/Ref.o )
- [ 57 of 279] Compiling Git.Branch ( Git/Branch.hs, tmp/Git/Branch.o )
- [ 58 of 279] Compiling Git.UpdateIndex ( Git/UpdateIndex.hs, tmp/Git/UpdateIndex.o )
- [ 59 of 279] Compiling Git.Queue ( Git/Queue.hs, tmp/Git/Queue.o )
- [ 60 of 279] Compiling Git.HashObject ( Git/HashObject.hs, tmp/Git/HashObject.o )
- [ 61 of 279] Compiling Git.CatFile ( Git/CatFile.hs, tmp/Git/CatFile.o )
- [ 62 of 279] Compiling Git.UnionMerge ( Git/UnionMerge.hs, tmp/Git/UnionMerge.o )
- [ 63 of 279] Compiling Git.Url ( Git/Url.hs, tmp/Git/Url.o )
- [ 64 of 279] Compiling Git.Construct ( Git/Construct.hs, tmp/Git/Construct.o )
- [ 65 of 279] Compiling Git.Config ( Git/Config.hs, tmp/Git/Config.o )
- [ 66 of 279] Compiling Git.SharedRepository ( Git/SharedRepository.hs, tmp/Git/SharedRepository.o )
- [ 67 of 279] Compiling Git.Version ( Git/Version.hs, tmp/Git/Version.o )
- [ 68 of 279] Compiling Git.CheckAttr ( Git/CheckAttr.hs, tmp/Git/CheckAttr.o )
- [ 69 of 279] Compiling Annex ( Annex.hs, tmp/Annex.o )
- [ 70 of 279] Compiling Types.Option ( Types/Option.hs, tmp/Types/Option.o )
- [ 71 of 279] Compiling Types ( Types.hs, tmp/Types.o )
- [ 72 of 279] Compiling Messages ( Messages.hs, tmp/Messages.o )
- [ 73 of 279] Compiling Types.Command ( Types/Command.hs, tmp/Types/Command.o )
- [ 74 of 279] Compiling Locations ( Locations.hs, tmp/Locations.o )
- [ 75 of 279] Compiling Common.Annex ( Common/Annex.hs, tmp/Common/Annex.o )
- [ 76 of 279] Compiling Fields ( Fields.hs, tmp/Fields.o )
- [ 77 of 279] Compiling Annex.BranchState ( Annex/BranchState.hs, tmp/Annex/BranchState.o )
- [ 78 of 279] Compiling Annex.CatFile ( Annex/CatFile.hs, tmp/Annex/CatFile.o )
- [ 79 of 279] Compiling Annex.Perms ( Annex/Perms.hs, tmp/Annex/Perms.o )
- [ 80 of 279] Compiling Crypto ( Crypto.hs, tmp/Crypto.o )
- [ 81 of 279] Compiling Annex.Exception ( Annex/Exception.hs, tmp/Annex/Exception.o )
- [ 82 of 279] Compiling Annex.Journal ( Annex/Journal.hs, tmp/Annex/Journal.o )
- [ 83 of 279] Compiling Annex.Branch ( Annex/Branch.hs, tmp/Annex/Branch.o )
- [ 84 of 279] Compiling Usage ( Usage.hs, tmp/Usage.o )
- [ 85 of 279] Compiling Annex.CheckAttr ( Annex/CheckAttr.hs, tmp/Annex/CheckAttr.o )
- [ 86 of 279] Compiling Remote.Helper.Special ( Remote/Helper/Special.hs, tmp/Remote/Helper/Special.o )
- [ 87 of 279] Compiling Logs.Presence ( Logs/Presence.hs, tmp/Logs/Presence.o )
- [ 88 of 279] Compiling Logs.Location ( Logs/Location.hs, tmp/Logs/Location.o )
- [ 89 of 279] Compiling Logs.Web ( Logs/Web.hs, tmp/Logs/Web.o )
- [ 90 of 279] Compiling Annex.LockPool ( Annex/LockPool.hs, tmp/Annex/LockPool.o )
- [ 91 of 279] Compiling Logs.Transfer ( Logs/Transfer.hs, tmp/Logs/Transfer.o )
- [ 92 of 279] Compiling Backend.SHA ( Backend/SHA.hs, tmp/Backend/SHA.o )
- [ 93 of 279] Compiling Backend.WORM ( Backend/WORM.hs, tmp/Backend/WORM.o )
- [ 94 of 279] Compiling Backend.URL ( Backend/URL.hs, tmp/Backend/URL.o )
- [ 95 of 279] Compiling Assistant.Types.ScanRemotes ( Assistant/Types/ScanRemotes.hs, tmp/Assistant/Types/ScanRemotes.o )
- [ 96 of 279] Compiling Assistant.Types.ThreadedMonad ( Assistant/Types/ThreadedMonad.hs, tmp/Assistant/Types/ThreadedMonad.o )
- [ 97 of 279] Compiling Assistant.Types.TransferQueue ( Assistant/Types/TransferQueue.hs, tmp/Assistant/Types/TransferQueue.o )
- [ 98 of 279] Compiling Assistant.Types.Pushes ( Assistant/Types/Pushes.hs, tmp/Assistant/Types/Pushes.o )
- [ 99 of 279] Compiling Assistant.Types.BranchChange ( Assistant/Types/BranchChange.hs, tmp/Assistant/Types/BranchChange.o )
- [100 of 279] Compiling Logs.UUIDBased ( Logs/UUIDBased.hs, tmp/Logs/UUIDBased.o )
- [101 of 279] Compiling Logs.Remote ( Logs/Remote.hs, tmp/Logs/Remote.o )
- [102 of 279] Compiling Logs.Group ( Logs/Group.hs, tmp/Logs/Group.o )
- [103 of 279] Compiling Utility.DiskFree ( Utility/DiskFree.hs, tmp/Utility/DiskFree.o )
- [104 of 279] Compiling Utility.Url ( Utility/Url.hs, tmp/Utility/Url.o )
- [105 of 279] Compiling Utility.CopyFile ( Utility/CopyFile.hs, tmp/Utility/CopyFile.o )
- [106 of 279] Compiling Utility.Rsync ( Utility/Rsync.hs, tmp/Utility/Rsync.o )
- [107 of 279] Compiling Git.LsFiles ( Git/LsFiles.hs, tmp/Git/LsFiles.o )
- [108 of 279] Compiling Git.AutoCorrect ( Git/AutoCorrect.hs, tmp/Git/AutoCorrect.o )
- [109 of 279] Compiling Git.CurrentRepo ( Git/CurrentRepo.hs, tmp/Git/CurrentRepo.o )
- [110 of 279] Compiling Locations.UserConfig ( Locations/UserConfig.hs, tmp/Locations/UserConfig.o )
- [111 of 279] Compiling Utility.ThreadScheduler ( Utility/ThreadScheduler.hs, tmp/Utility/ThreadScheduler.o )
- [112 of 279] Compiling Git.Merge ( Git/Merge.hs, tmp/Git/Merge.o )
- [113 of 279] Compiling Utility.Parallel ( Utility/Parallel.hs, tmp/Utility/Parallel.o )
- [114 of 279] Compiling Git.Remote ( Git/Remote.hs, tmp/Git/Remote.o )
- [115 of 279] Compiling Assistant.Ssh ( Assistant/Ssh.hs, tmp/Assistant/Ssh.o )
- [116 of 279] Compiling Assistant.Pairing ( Assistant/Pairing.hs, tmp/Assistant/Pairing.o )
- [117 of 279] Compiling Assistant.Types.NetMessager ( Assistant/Types/NetMessager.hs, tmp/Assistant/Types/NetMessager.o )
- [118 of 279] Compiling Utility.NotificationBroadcaster ( Utility/NotificationBroadcaster.hs, tmp/Utility/NotificationBroadcaster.o )
- [119 of 279] Compiling Assistant.Types.Buddies ( Assistant/Types/Buddies.hs, tmp/Assistant/Types/Buddies.o )
- [120 of 279] Compiling Utility.TSet ( Utility/TSet.hs, tmp/Utility/TSet.o )
- [121 of 279] Compiling Assistant.Types.Commits ( Assistant/Types/Commits.hs, tmp/Assistant/Types/Commits.o )
- [122 of 279] Compiling Assistant.Types.Changes ( Assistant/Types/Changes.hs, tmp/Assistant/Types/Changes.o )
- [123 of 279] Compiling Utility.WebApp ( Utility/WebApp.hs, tmp/Utility/WebApp.o )
- [124 of 279] Compiling Utility.Daemon ( Utility/Daemon.hs, tmp/Utility/Daemon.o )
- [125 of 279] Compiling Utility.LogFile ( Utility/LogFile.hs, tmp/Utility/LogFile.o )
- [126 of 279] Compiling Git.Filename ( Git/Filename.hs, tmp/Git/Filename.o )
- [127 of 279] Compiling Git.LsTree ( Git/LsTree.hs, tmp/Git/LsTree.o )
- [128 of 279] Compiling Utility.Types.DirWatcher ( Utility/Types/DirWatcher.hs, tmp/Utility/Types/DirWatcher.o )
- [129 of 279] Compiling Utility.INotify ( Utility/INotify.hs, tmp/Utility/INotify.o )
- [130 of 279] Compiling Utility.DirWatcher ( Utility/DirWatcher.hs, tmp/Utility/DirWatcher.o )
- [131 of 279] Compiling Utility.Lsof ( Utility/Lsof.hs, tmp/Utility/Lsof.o )
- [132 of 279] Compiling Config ( Config.hs, tmp/Config.o )
- [133 of 279] Compiling Annex.UUID ( Annex/UUID.hs, tmp/Annex/UUID.o )
- [134 of 279] Compiling Logs.UUID ( Logs/UUID.hs, tmp/Logs/UUID.o )
- [135 of 279] Compiling Backend ( Backend.hs, tmp/Backend.o )
- [136 of 279] Compiling Remote.Helper.Hooks ( Remote/Helper/Hooks.hs, tmp/Remote/Helper/Hooks.o )
- [137 of 279] Compiling Remote.Helper.Encryptable ( Remote/Helper/Encryptable.hs, tmp/Remote/Helper/Encryptable.o )
- [138 of 279] Compiling Annex.Queue ( Annex/Queue.hs, tmp/Annex/Queue.o )
- [139 of 279] Compiling Annex.Content ( Annex/Content.hs, tmp/Annex/Content.o )
- [140 of 279] Compiling Remote.S3 ( Remote/S3.hs, tmp/Remote/S3.o )
- [141 of 279] Compiling Remote.Directory ( Remote/Directory.hs, tmp/Remote/Directory.o )
- [142 of 279] Compiling Remote.Rsync ( Remote/Rsync.hs, tmp/Remote/Rsync.o )
- [143 of 279] Compiling Remote.Web ( Remote/Web.hs, tmp/Remote/Web.o )
- [144 of 279] Compiling Remote.Hook ( Remote/Hook.hs, tmp/Remote/Hook.o )
- [145 of 279] Compiling Upgrade.V2 ( Upgrade/V2.hs, tmp/Upgrade/V2.o )
- [146 of 279] Compiling Annex.Ssh ( Annex/Ssh.hs, tmp/Annex/Ssh.o )
- [147 of 279] Compiling Remote.Helper.Ssh ( Remote/Helper/Ssh.hs, tmp/Remote/Helper/Ssh.o )
- [148 of 279] Compiling Remote.Bup ( Remote/Bup.hs, tmp/Remote/Bup.o )
- [149 of 279] Compiling Annex.Version ( Annex/Version.hs, tmp/Annex/Version.o )
- [150 of 279] Compiling Init ( Init.hs, tmp/Init.o )
- [151 of 279] Compiling Checks ( Checks.hs, tmp/Checks.o )
- [152 of 279] Compiling Remote.Git ( Remote/Git.hs, tmp/Remote/Git.o )
- [153 of 279] Compiling Remote.List ( Remote/List.hs, tmp/Remote/List.o )
- [154 of 279] Compiling Logs.Trust ( Logs/Trust.hs, tmp/Logs/Trust.o )
- [155 of 279] Compiling Remote ( Remote.hs, tmp/Remote.o )
- [156 of 279] Compiling Assistant.Alert ( Assistant/Alert.hs, tmp/Assistant/Alert.o )
- Loading package ghc-prim ... linking ... done.
- Loading package integer-gmp ... linking ... done.
- Loading package base ... linking ... done.
- Loading object (static) Utility/libdiskfree.o ... done
- Loading object (static) Utility/libmounts.o ... done
- final link ... done
- Loading package pretty-1.1.1.0 ... linking ... done.
- Loading package filepath-1.3.0.0 ... linking ... done.
- Loading package old-locale-1.0.0.4 ... linking ... done.
- Loading package old-time-1.1.0.0 ... linking ... done.
- Loading package bytestring-0.9.2.1 ... linking ... done.
- Loading package unix-2.5.1.0 ... linking ... done.
- Loading package directory-1.1.0.2 ... linking ... done.
- Loading package process-1.1.0.1 ... linking ... done.
- Loading package array-0.4.0.0 ... linking ... done.
- Loading package deepseq-1.3.0.0 ... linking ... done.
- Loading package time-1.4 ... linking ... done.
- Loading package containers-0.4.2.1 ... linking ... done.
- Loading package text-0.11.2.0 ... linking ... done.
- Loading package blaze-builder-0.3.1.0 ... linking ... done.
- Loading package blaze-markup-0.5.1.1 ... linking ... done.
- Loading package blaze-html-0.5.1.0 ... linking ... done.
- Loading package hashable-1.1.2.5 ... linking ... done.
- Loading package case-insensitive-0.4.0.3 ... linking ... done.
- Loading package primitive-0.5.0.1 ... linking ... done.
- Loading package vector-0.10.0.1 ... linking ... done.
- Loading package random-1.0.1.1 ... linking ... done.
- Loading package dlist-0.5 ... linking ... done.
- Loading package data-default-0.5.0 ... linking ... done.
- Loading package transformers-0.3.0.0 ... linking ... done.
- Loading package mtl-2.1.1 ... linking ... done.
- Loading package parsec-3.1.2 ... linking ... done.
- Loading package network-2.3.0.13 ... linking ... done.
- Loading package failure-0.2.0.1 ... linking ... done.
- Loading package template-haskell ... linking ... done.
- Loading package shakespeare-1.0.2 ... linking ... done.
- Loading package hamlet-1.1.1.1 ... linking ... done.
- Loading package http-types-0.7.3.0.1 ... linking ... done.
- Loading package base-unicode-symbols-0.2.2.4 ... linking ... done.
- Loading package transformers-base-0.4.1 ... linking ... done.
- Loading package monad-control-0.3.1.4 ... linking ... done.
- Loading package lifted-base-0.2 ... linking ... done.
- Loading package resourcet-0.4.3 ... linking ... done.
- Loading package semigroups-0.8.4.1 ... linking ... done.
- Loading package void-0.5.8 ... linking ... done.
- Loading package conduit-0.5.4.1 ... linking ... done.
- Loading package unordered-containers-0.2.2.1 ... linking ... done.
- Loading package vault-0.2.0.1 ... linking ... done.
- Loading package wai-1.3.0.1 ... linking ... done.
- Loading package date-cache-0.3.0 ... linking ... done.
- Loading package unix-time-0.1.2 ... linking ... done.
- Loading package fast-logger-0.3.1 ... linking ... done.
- Loading package attoparsec-0.10.2.0 ... linking ... done.
- Loading package cookie-0.4.0.1 ... linking ... done.
- Loading package shakespeare-css-1.0.2 ... linking ... done.
- Loading package syb-0.3.6.1 ... linking ... done.
- Loading package aeson-0.6.0.2 ... linking ... done.
- Loading package shakespeare-js-1.1.0 ... linking ... done.
- Loading package ansi-terminal-0.5.5 ... linking ... done.
- Loading package blaze-builder-conduit-0.5.0.2 ... linking ... done.
- Loading package stringsearch-0.3.6.4 ... linking ... done.
- Loading package byteorder-1.0.3 ... linking ... done.
- Loading package wai-logger-0.3.0 ... linking ... done.
- Loading package zlib-0.5.3.3 ... linking ... done.
- Loading package zlib-bindings-0.1.1.1 ... linking ... done.
- Loading package zlib-conduit-0.5.0.2 ... linking ... done.
- Loading package wai-extra-1.3.0.4 ... linking ... done.
- Loading package monad-logger-0.2.1 ... linking ... done.
- Loading package cereal-0.3.5.2 ... linking ... done.
- Loading package base64-bytestring-1.0.0.0 ... linking ... done.
- Loading package cipher-aes-0.1.2 ... linking ... done.
- Loading package entropy-0.2.1 ... linking ... done.
- Loading package largeword-1.0.3 ... linking ... done.
- Loading package tagged-0.4.4 ... linking ... done.
- Loading package crypto-api-0.10.2 ... linking ... done.
- Loading package cpu-0.1.1 ... linking ... done.
- Loading package crypto-pubkey-types-0.1.1 ... linking ... done.
- Loading package cryptocipher-0.3.5 ... linking ... done.
- Loading package cprng-aes-0.2.4 ... linking ... done.
- Loading package skein-0.1.0.9 ... linking ... done.
- Loading package clientsession-0.8.0.1 ... linking ... done.
- Loading package path-pieces-0.1.2 ... linking ... done.
- Loading package shakespeare-i18n-1.0.0.2 ... linking ... done.
- Loading package yesod-routes-1.1.1.1 ... linking ... done.
- Loading package yesod-core-1.1.5 ... linking ... done.
- [157 of 279] Compiling Assistant.Types.DaemonStatus ( Assistant/Types/DaemonStatus.hs, tmp/Assistant/Types/DaemonStatus.o )
- [158 of 279] Compiling Assistant.Monad ( Assistant/Monad.hs, tmp/Assistant/Monad.o )
- [159 of 279] Compiling Assistant.Types.NamedThread ( Assistant/Types/NamedThread.hs, tmp/Assistant/Types/NamedThread.o )
- [160 of 279] Compiling Assistant.Common ( Assistant/Common.hs, tmp/Assistant/Common.o )
- [161 of 279] Compiling Assistant.XMPP ( Assistant/XMPP.hs, tmp/Assistant/XMPP.o )
- [162 of 279] Compiling Assistant.XMPP.Buddies ( Assistant/XMPP/Buddies.hs, tmp/Assistant/XMPP/Buddies.o )
- [163 of 279] Compiling Assistant.NetMessager ( Assistant/NetMessager.hs, tmp/Assistant/NetMessager.o )
-
- Assistant/NetMessager.hs:12:1:
- Warning: The import of `Types.Remote' is redundant
- except perhaps to import instances from `Types.Remote'
- To import instances alone, use: import Types.Remote()
-
- Assistant/NetMessager.hs:13:1:
- Warning: The import of `Git' is redundant
- except perhaps to import instances from `Git'
- To import instances alone, use: import Git()
-
- Assistant/NetMessager.hs:20:1:
- Warning: The import of `Data.Text' is redundant
- except perhaps to import instances from `Data.Text'
- To import instances alone, use: import Data.Text()
- [164 of 279] Compiling Assistant.Pushes ( Assistant/Pushes.hs, tmp/Assistant/Pushes.o )
- [165 of 279] Compiling Assistant.ScanRemotes ( Assistant/ScanRemotes.hs, tmp/Assistant/ScanRemotes.o )
- [166 of 279] Compiling Assistant.Install ( Assistant/Install.hs, tmp/Assistant/Install.o )
- [167 of 279] Compiling Assistant.XMPP.Client ( Assistant/XMPP/Client.hs, tmp/Assistant/XMPP/Client.o )
- [168 of 279] Compiling Assistant.Commits ( Assistant/Commits.hs, tmp/Assistant/Commits.o )
- [169 of 279] Compiling Assistant.BranchChange ( Assistant/BranchChange.hs, tmp/Assistant/BranchChange.o )
- [170 of 279] Compiling Assistant.Changes ( Assistant/Changes.hs, tmp/Assistant/Changes.o )
- [171 of 279] Compiling Assistant.WebApp.Types ( Assistant/WebApp/Types.hs, tmp/Assistant/WebApp/Types.o )
- Loading package unix-compat-0.4.0.0 ... linking ... done.
- Loading package file-embed-0.0.4.6 ... linking ... done.
- Loading package system-filepath-0.4.7 ... linking ... done.
- Loading package system-fileio-0.3.10 ... linking ... done.
- Loading package cryptohash-0.7.8 ... linking ... done.
- Loading package crypto-conduit-0.4.0.1 ... linking ... done.
- Loading package http-date-0.0.2 ... linking ... done.
- Loading package mime-types-0.1.0.0 ... linking ... done.
- Loading package wai-app-static-1.3.0.4 ... linking ... done.
- Loading package yesod-static-1.1.1.1 ... linking ... done.
- [172 of 279] Compiling Assistant.WebApp ( Assistant/WebApp.hs, tmp/Assistant/WebApp.o )
- Loading package network-conduit-0.6.1.1 ... linking ... done.
- Loading package safe-0.3.3 ... linking ... done.
- Loading package simple-sendfile-0.2.8 ... linking ... done.
- Loading package warp-1.3.4.4 ... linking ... done.
- Loading package yaml-0.8.1 ... linking ... done.
- Loading package yesod-default-1.1.2 ... linking ... done.
- [173 of 279] Compiling Assistant.WebApp.OtherRepos ( Assistant/WebApp/OtherRepos.hs, tmp/Assistant/WebApp/OtherRepos.o )
- [174 of 279] Compiling Limit ( Limit.hs, tmp/Limit.o )
- [175 of 279] Compiling Option ( Option.hs, tmp/Option.o )
- [176 of 279] Compiling Seek ( Seek.hs, tmp/Seek.o )
- [177 of 279] Compiling Command ( Command.hs, tmp/Command.o )
- [178 of 279] Compiling CmdLine ( CmdLine.hs, tmp/CmdLine.o )
- [179 of 279] Compiling Command.ConfigList ( Command/ConfigList.hs, tmp/Command/ConfigList.o )
- [180 of 279] Compiling Command.InAnnex ( Command/InAnnex.hs, tmp/Command/InAnnex.o )
- [181 of 279] Compiling Command.DropKey ( Command/DropKey.hs, tmp/Command/DropKey.o )
- [182 of 279] Compiling Command.SendKey ( Command/SendKey.hs, tmp/Command/SendKey.o )
- [183 of 279] Compiling Command.RecvKey ( Command/RecvKey.hs, tmp/Command/RecvKey.o )
- [184 of 279] Compiling Command.TransferInfo ( Command/TransferInfo.hs, tmp/Command/TransferInfo.o )
- [185 of 279] Compiling Command.Commit ( Command/Commit.hs, tmp/Command/Commit.o )
- [186 of 279] Compiling Command.Add ( Command/Add.hs, tmp/Command/Add.o )
- [187 of 279] Compiling Command.Unannex ( Command/Unannex.hs, tmp/Command/Unannex.o )
- [188 of 279] Compiling Command.FromKey ( Command/FromKey.hs, tmp/Command/FromKey.o )
- [189 of 279] Compiling Command.ReKey ( Command/ReKey.hs, tmp/Command/ReKey.o )
- [190 of 279] Compiling Command.Fix ( Command/Fix.hs, tmp/Command/Fix.o )
- [191 of 279] Compiling Command.Describe ( Command/Describe.hs, tmp/Command/Describe.o )
- [192 of 279] Compiling Command.InitRemote ( Command/InitRemote.hs, tmp/Command/InitRemote.o )
- [193 of 279] Compiling Command.Unlock ( Command/Unlock.hs, tmp/Command/Unlock.o )
- [194 of 279] Compiling Command.Lock ( Command/Lock.hs, tmp/Command/Lock.o )
- [195 of 279] Compiling Command.PreCommit ( Command/PreCommit.hs, tmp/Command/PreCommit.o )
- [196 of 279] Compiling Command.Log ( Command/Log.hs, tmp/Command/Log.o )
- [197 of 279] Compiling Command.Merge ( Command/Merge.hs, tmp/Command/Merge.o )
- [198 of 279] Compiling Command.Group ( Command/Group.hs, tmp/Command/Group.o )
- [199 of 279] Compiling Command.Ungroup ( Command/Ungroup.hs, tmp/Command/Ungroup.o )
- [200 of 279] Compiling Command.Import ( Command/Import.hs, tmp/Command/Import.o )
- [201 of 279] Compiling Logs.Unused ( Logs/Unused.hs, tmp/Logs/Unused.o )
- [202 of 279] Compiling Command.AddUnused ( Command/AddUnused.hs, tmp/Command/AddUnused.o )
- [203 of 279] Compiling Command.Find ( Command/Find.hs, tmp/Command/Find.o )
- [204 of 279] Compiling Logs.PreferredContent ( Logs/PreferredContent.hs, tmp/Logs/PreferredContent.o )
- [205 of 279] Compiling Annex.Wanted ( Annex/Wanted.hs, tmp/Annex/Wanted.o )
- [206 of 279] Compiling Command.Whereis ( Command/Whereis.hs, tmp/Command/Whereis.o )
- [207 of 279] Compiling Command.Trust ( Command/Trust.hs, tmp/Command/Trust.o )
- [208 of 279] Compiling Command.Untrust ( Command/Untrust.hs, tmp/Command/Untrust.o )
- [209 of 279] Compiling Command.Semitrust ( Command/Semitrust.hs, tmp/Command/Semitrust.o )
- [210 of 279] Compiling Command.Dead ( Command/Dead.hs, tmp/Command/Dead.o )
- [211 of 279] Compiling Command.Vicfg ( Command/Vicfg.hs, tmp/Command/Vicfg.o )
- [212 of 279] Compiling Command.Map ( Command/Map.hs, tmp/Command/Map.o )
- [213 of 279] Compiling Command.Init ( Command/Init.hs, tmp/Command/Init.o )
- [214 of 279] Compiling Command.Uninit ( Command/Uninit.hs, tmp/Command/Uninit.o )
- [215 of 279] Compiling Command.Version ( Command/Version.hs, tmp/Command/Version.o )
- [216 of 279] Compiling Upgrade.V1 ( Upgrade/V1.hs, tmp/Upgrade/V1.o )
- [217 of 279] Compiling Upgrade.V0 ( Upgrade/V0.hs, tmp/Upgrade/V0.o )
- [218 of 279] Compiling Upgrade ( Upgrade.hs, tmp/Upgrade.o )
- [219 of 279] Compiling Command.Upgrade ( Command/Upgrade.hs, tmp/Command/Upgrade.o )
- [220 of 279] Compiling Command.Drop ( Command/Drop.hs, tmp/Command/Drop.o )
- [221 of 279] Compiling Command.Move ( Command/Move.hs, tmp/Command/Move.o )
- [222 of 279] Compiling Command.Copy ( Command/Copy.hs, tmp/Command/Copy.o )
- [223 of 279] Compiling Command.Get ( Command/Get.hs, tmp/Command/Get.o )
- [224 of 279] Compiling Command.TransferKey ( Command/TransferKey.hs, tmp/Command/TransferKey.o )
- [225 of 279] Compiling Command.DropUnused ( Command/DropUnused.hs, tmp/Command/DropUnused.o )
- [226 of 279] Compiling Command.Fsck ( Command/Fsck.hs, tmp/Command/Fsck.o )
- [227 of 279] Compiling Command.Reinject ( Command/Reinject.hs, tmp/Command/Reinject.o )
- [228 of 279] Compiling Command.Migrate ( Command/Migrate.hs, tmp/Command/Migrate.o )
- [229 of 279] Compiling Command.Unused ( Command/Unused.hs, tmp/Command/Unused.o )
- [230 of 279] Compiling Command.Status ( Command/Status.hs, tmp/Command/Status.o )
- [231 of 279] Compiling Command.Sync ( Command/Sync.hs, tmp/Command/Sync.o )
- [232 of 279] Compiling Command.Help ( Command/Help.hs, tmp/Command/Help.o )
- [233 of 279] Compiling Command.AddUrl ( Command/AddUrl.hs, tmp/Command/AddUrl.o )
- [234 of 279] Compiling Assistant.DaemonStatus ( Assistant/DaemonStatus.hs, tmp/Assistant/DaemonStatus.o )
- [235 of 279] Compiling Assistant.Sync ( Assistant/Sync.hs, tmp/Assistant/Sync.o )
- [236 of 279] Compiling Assistant.MakeRemote ( Assistant/MakeRemote.hs, tmp/Assistant/MakeRemote.o )
- [237 of 279] Compiling Assistant.XMPP.Git ( Assistant/XMPP/Git.hs, tmp/Assistant/XMPP/Git.o )
- [238 of 279] Compiling Command.XMPPGit ( Command/XMPPGit.hs, tmp/Command/XMPPGit.o )
- [239 of 279] Compiling Assistant.Threads.NetWatcher ( Assistant/Threads/NetWatcher.hs, tmp/Assistant/Threads/NetWatcher.o )
- [240 of 279] Compiling Assistant.NamedThread ( Assistant/NamedThread.hs, tmp/Assistant/NamedThread.o )
- [241 of 279] Compiling Assistant.WebApp.Notifications ( Assistant/WebApp/Notifications.hs, tmp/Assistant/WebApp/Notifications.o )
-
- Assistant/WebApp/Notifications.hs:39:11:
- No instances for (Text.Julius.ToJavascript String,
- Text.Julius.ToJavascript Text)
- arising from a use of `Text.Julius.toJavascript'
- Possible fix:
- add instance declarations for
- (Text.Julius.ToJavascript String, Text.Julius.ToJavascript Text)
- In the first argument of `Text.Julius.Javascript', namely
- `Text.Julius.toJavascript delay'
- In the expression:
- Text.Julius.Javascript (Text.Julius.toJavascript delay)
- In the first argument of `Data.Monoid.mconcat', namely
- `[Text.Julius.Javascript
- ((Data.Text.Lazy.Builder.fromText . Text.Shakespeare.pack')
- "function longpoll_"),
- Text.Julius.Javascript (Text.Julius.toJavascript ident),
- Text.Julius.Javascript
- ((Data.Text.Lazy.Builder.fromText . Text.Shakespeare.pack')
- "() {\
- \\tlongpoll(longpoll_"),
- Text.Julius.Javascript (Text.Julius.toJavascript ident), ....]'
- make: *** [git-annex] Error 1
-
-> Reproduced this and confirmed it's fixed in git. --[[Joey]] [[done]]
diff --git a/doc/bugs/3.20121112:_build_error_in_assistant/comment_1_b42f40ffd83321ab5cc0ef24ced15e98._comment b/doc/bugs/3.20121112:_build_error_in_assistant/comment_1_b42f40ffd83321ab5cc0ef24ced15e98._comment
deleted file mode 100644
index 9690885f0..000000000
--- a/doc/bugs/3.20121112:_build_error_in_assistant/comment_1_b42f40ffd83321ab5cc0ef24ced15e98._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.252.11.120"
- subject="comment 1"
- date="2012-11-17T20:21:12Z"
- content="""
-This looks rather like a bug in Yesod. I've made a change in git (b0a76592c313b4c8f51918d6469c40d1fd16a2b1) that *may* avoid the problem.
-"""]]
diff --git a/doc/bugs/3.20121112:_build_error_in_assistant/comment_2_b1d2aa10ea84c5c370b3e76507fc8761._comment b/doc/bugs/3.20121112:_build_error_in_assistant/comment_2_b1d2aa10ea84c5c370b3e76507fc8761._comment
deleted file mode 100644
index 0d4f3666c..000000000
--- a/doc/bugs/3.20121112:_build_error_in_assistant/comment_2_b1d2aa10ea84c5c370b3e76507fc8761._comment
+++ /dev/null
@@ -1,476 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkHZw2Vx0VPtb9XM8vum7nEnh6gHGSCQvM"
- nickname="Andrew"
- subject="comment 2"
- date="2012-11-24T18:48:23Z"
- content="""
-Not quite. Though this might just be an artifact of me disabling WITH_WEBDAV on account of that not compiling on OS X (can't find module Network.Protocol.HTTP.DAV).
-OS: OS X 10.8.0
-
- % git branch -v
- * master d1ba407 Added a comment: git annex fix
- % grep \"FEATURES?=\" Makefile
- FEATURES?=$(GIT_ANNEX_LOCAL_FEATURES) -DWITH_ASSISTANT -DWITH_S3 -DWITH_WEBAPP -DWITH_PAIRING -DWITH_XMPP -DWITH_DNS
- $ make
- ghc -O2 -Wall -outputdir tmp -IUtility -DWITH_ASSISTANT -DWITH_S3 -DWITH_WEBAPP -DWITH_PAIRING -DWITH_XMPP -DWITH_DNS -DWITH_KQUEUE -threaded --make configure
- [1 of 7] Compiling Utility.Exception ( Utility/Exception.hs, tmp/Utility/Exception.o )
- [2 of 7] Compiling Utility.Misc ( Utility/Misc.hs, tmp/Utility/Misc.o )
- [3 of 7] Compiling Utility.Process ( Utility/Process.hs, tmp/Utility/Process.o )
- [4 of 7] Compiling Utility.SafeCommand ( Utility/SafeCommand.hs, tmp/Utility/SafeCommand.o )
- [5 of 7] Compiling Build.TestConfig ( Build/TestConfig.hs, tmp/Build/TestConfig.o )
- [6 of 7] Compiling Build.Configure ( Build/Configure.hs, tmp/Build/Configure.o )
- [7 of 7] Compiling Main ( configure.hs, tmp/Main.o )
- Linking configure ...
- ./configure
- checking version... 3.20121113
- checking git... yes
- checking git version... 1.7.10.2 (Apple Git-33)
- checking cp -a... yes
- checking cp -p... yes
- checking cp --reflink=auto... no
- checking uuid generator... uuidgen
- checking xargs -0... yes
- checking rsync... yes
- checking curl... yes
- checking wget... no
- checking bup... no
- checking gpg... no
- checking lsof... yes
- checking ssh connection caching... yes
- checking sha1... sha1sum
- checking sha256.../bin/sh: sha256sum: command not found
- gsha256sum
- checking sha512.../bin/sh: sha512sum: command not found
- gsha512sum
- checking sha224.../bin/sh: sha224sum: command not found
- gsha224sum
- checking sha384.../bin/sh: sha384sum: command not found
- gsha384sum
- hsc2hs Utility/Touch.hsc
- Touch.hsc:117:2: warning: #warning \"utimensat and lutimes not available; building without symlink timestamp preservation support\"
- Touch.hsc:117:2: warning: #warning \"utimensat and lutimes not available; building without symlink timestamp preservation support\"
- Touch.hsc:117:2: warning: #warning \"utimensat and lutimes not available; building without symlink timestamp preservation support\"
- hsc2hs Utility/Mounts.hsc
- cc -Wall -c -o Utility/libdiskfree.o Utility/libdiskfree.c
- Utility/libdiskfree.c:53:6: warning: 'statfs64' is deprecated: first deprecated in Mac OS X 10.6 [-Wdeprecated-declarations]
- if (STATCALL(path, &buf) != 0)
- ^
- Utility/libdiskfree.c:16:19: note: expanded from macro 'STATCALL'
- # define STATCALL statfs64
- ^
- /usr/include/sys/mount.h:381:5: note: 'statfs64' declared here
- int statfs64(const char *, struct statfs64 *) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_5,__MAC_10_6,__IPHONE_NA,__IPHONE_NA);
- ^
- 1 warning generated.
- cc -Wall -c -o Utility/libmounts.o Utility/libmounts.c
- cc -Wall -c -o Utility/libkqueue.o Utility/libkqueue.c
- install -d tmp
- ghc -O2 -Wall -outputdir tmp -IUtility -DWITH_ASSISTANT -DWITH_S3 -DWITH_WEBAPP -DWITH_PAIRING -DWITH_XMPP -DWITH_DNS -DWITH_KQUEUE -threaded --make git-annex -o tmp/git-annex Utility/libdiskfree.o Utility/libmounts.o Utility/libkqueue.o
-
- Assistant/Threads/NetWatcher.hs:26:0:
- warning: #warning Building without dbus support; will poll for network connection changes
-
- Assistant/Threads/MountWatcher.hs:33:0:
- warning: #warning Building without dbus support; will use mtab polling
- [ 1 of 285] Compiling Utility.Dot ( Utility/Dot.hs, tmp/Utility/Dot.o )
- [ 2 of 285] Compiling Utility.Mounts ( Utility/Mounts.hs, tmp/Utility/Mounts.o )
- [ 3 of 285] Compiling Utility.Yesod ( Utility/Yesod.hs, tmp/Utility/Yesod.o )
- [ 4 of 285] Compiling Utility.Tense ( Utility/Tense.hs, tmp/Utility/Tense.o )
- [ 5 of 285] Compiling Utility.Verifiable ( Utility/Verifiable.hs, tmp/Utility/Verifiable.o )
- [ 6 of 285] Compiling Assistant.Types.TransferSlots ( Assistant/Types/TransferSlots.hs, tmp/Assistant/Types/TransferSlots.o )
- [ 7 of 285] Compiling Types.StandardGroups ( Types/StandardGroups.hs, tmp/Types/StandardGroups.o )
- [ 8 of 285] Compiling Utility.Percentage ( Utility/Percentage.hs, tmp/Utility/Percentage.o )
- [ 9 of 285] Compiling Utility.Observed ( Utility/Observed.hs, tmp/Utility/Observed.o )
- [ 10 of 285] Compiling Utility.Base64 ( Utility/Base64.hs, tmp/Utility/Base64.o )
- [ 11 of 285] Compiling Utility.DataUnits ( Utility/DataUnits.hs, tmp/Utility/DataUnits.o )
- [ 12 of 285] Compiling Utility.JSONStream ( Utility/JSONStream.hs, tmp/Utility/JSONStream.o )
- [ 13 of 285] Compiling Messages.JSON ( Messages/JSON.hs, tmp/Messages/JSON.o )
- [ 14 of 285] Compiling Build.SysConfig ( Build/SysConfig.hs, tmp/Build/SysConfig.o )
- [ 15 of 285] Compiling Types.KeySource ( Types/KeySource.hs, tmp/Types/KeySource.o )
- [ 16 of 285] Compiling Types.Meters ( Types/Meters.hs, tmp/Types/Meters.o )
- [ 17 of 285] Compiling Utility.State ( Utility/State.hs, tmp/Utility/State.o )
- [ 18 of 285] Compiling Types.UUID ( Types/UUID.hs, tmp/Types/UUID.o )
- [ 19 of 285] Compiling Types.Messages ( Types/Messages.hs, tmp/Types/Messages.o )
- [ 20 of 285] Compiling Types.Group ( Types/Group.hs, tmp/Types/Group.o )
- [ 21 of 285] Compiling Types.TrustLevel ( Types/TrustLevel.hs, tmp/Types/TrustLevel.o )
- [ 22 of 285] Compiling Types.BranchState ( Types/BranchState.hs, tmp/Types/BranchState.o )
- [ 23 of 285] Compiling Utility.PartialPrelude ( Utility/PartialPrelude.hs, tmp/Utility/PartialPrelude.o )
- [ 24 of 285] Compiling Utility.HumanTime ( Utility/HumanTime.hs, tmp/Utility/HumanTime.o )
- [ 25 of 285] Compiling Utility.Format ( Utility/Format.hs, tmp/Utility/Format.o )
- [ 26 of 285] Compiling Utility.FileSystemEncoding ( Utility/FileSystemEncoding.hs, tmp/Utility/FileSystemEncoding.o )
- [ 27 of 285] Compiling Utility.Touch ( Utility/Touch.hs, tmp/Utility/Touch.o )
-
- Utility/Touch.hsc:17:1:
- Warning: The import of `Utility.FileSystemEncoding' is redundant
- except perhaps to import instances from `Utility.FileSystemEncoding'
- To import instances alone, use: import Utility.FileSystemEncoding()
-
- Utility/Touch.hsc:19:1:
- Warning: The import of `Foreign' is redundant
- except perhaps to import instances from `Foreign'
- To import instances alone, use: import Foreign()
-
- Utility/Touch.hsc:21:1:
- Warning: The import of `Control.Monad' is redundant
- except perhaps to import instances from `Control.Monad'
- To import instances alone, use: import Control.Monad()
- [ 28 of 285] Compiling Utility.Applicative ( Utility/Applicative.hs, tmp/Utility/Applicative.o )
- [ 29 of 285] Compiling Utility.Monad ( Utility/Monad.hs, tmp/Utility/Monad.o )
- [ 30 of 285] Compiling Utility.Exception ( Utility/Exception.hs, tmp/Utility/Exception.o )
- [ 31 of 285] Compiling Utility.Misc ( Utility/Misc.hs, tmp/Utility/Misc.o )
- [ 32 of 285] Compiling Utility.Process ( Utility/Process.hs, tmp/Utility/Process.o )
- [ 33 of 285] Compiling Utility.SafeCommand ( Utility/SafeCommand.hs, tmp/Utility/SafeCommand.o )
- [ 34 of 285] Compiling Utility.Network ( Utility/Network.hs, tmp/Utility/Network.o )
- [ 35 of 285] Compiling Utility.SRV ( Utility/SRV.hs, tmp/Utility/SRV.o )
-
- Utility/SRV.hs:88:1: Warning: Defined but not used: `lookupSRVHost'
-
- Utility/SRV.hs:94:1: Warning: Defined but not used: `parseSrvHost'
- [ 36 of 285] Compiling Git.Types ( Git/Types.hs, tmp/Git/Types.o )
- [ 37 of 285] Compiling Utility.UserInfo ( Utility/UserInfo.hs, tmp/Utility/UserInfo.o )
- [ 38 of 285] Compiling Utility.Path ( Utility/Path.hs, tmp/Utility/Path.o )
- [ 39 of 285] Compiling Utility.TempFile ( Utility/TempFile.hs, tmp/Utility/TempFile.o )
- [ 40 of 285] Compiling Utility.Directory ( Utility/Directory.hs, tmp/Utility/Directory.o )
- [ 41 of 285] Compiling Utility.FreeDesktop ( Utility/FreeDesktop.hs, tmp/Utility/FreeDesktop.o )
- [ 42 of 285] Compiling Utility.OSX ( Utility/OSX.hs, tmp/Utility/OSX.o )
-
- Utility/OSX.hs:10:1:
- Warning: The import of `Utility.Path' is redundant
- except perhaps to import instances from `Utility.Path'
- To import instances alone, use: import Utility.Path()
- [ 43 of 285] Compiling Assistant.Install.AutoStart ( Assistant/Install/AutoStart.hs, tmp/Assistant/Install/AutoStart.o )
- [ 44 of 285] Compiling Common ( Common.hs, tmp/Common.o )
- [ 45 of 285] Compiling Utility.FileMode ( Utility/FileMode.hs, tmp/Utility/FileMode.o )
- [ 46 of 285] Compiling Git ( Git.hs, tmp/Git.o )
- [ 47 of 285] Compiling Git.FilePath ( Git/FilePath.hs, tmp/Git/FilePath.o )
- [ 48 of 285] Compiling Utility.Matcher ( Utility/Matcher.hs, tmp/Utility/Matcher.o )
- [ 49 of 285] Compiling Utility.Gpg ( Utility/Gpg.hs, tmp/Utility/Gpg.o )
- [ 50 of 285] Compiling Types.Crypto ( Types/Crypto.hs, tmp/Types/Crypto.o )
- [ 51 of 285] Compiling Types.Key ( Types/Key.hs, tmp/Types/Key.o )
- [ 52 of 285] Compiling Types.Backend ( Types/Backend.hs, tmp/Types/Backend.o )
- [ 53 of 285] Compiling Types.Remote ( Types/Remote.hs, tmp/Types/Remote.o )
- [ 54 of 285] Compiling Meters ( Meters.hs, tmp/Meters.o )
- [ 55 of 285] Compiling Git.Sha ( Git/Sha.hs, tmp/Git/Sha.o )
- [ 56 of 285] Compiling Utility.CoProcess ( Utility/CoProcess.hs, tmp/Utility/CoProcess.o )
- [ 57 of 285] Compiling Git.Command ( Git/Command.hs, tmp/Git/Command.o )
- [ 58 of 285] Compiling Git.Ref ( Git/Ref.hs, tmp/Git/Ref.o )
- [ 59 of 285] Compiling Git.Branch ( Git/Branch.hs, tmp/Git/Branch.o )
- [ 60 of 285] Compiling Git.UpdateIndex ( Git/UpdateIndex.hs, tmp/Git/UpdateIndex.o )
- [ 61 of 285] Compiling Git.Queue ( Git/Queue.hs, tmp/Git/Queue.o )
- [ 62 of 285] Compiling Git.HashObject ( Git/HashObject.hs, tmp/Git/HashObject.o )
- [ 63 of 285] Compiling Git.CatFile ( Git/CatFile.hs, tmp/Git/CatFile.o )
- [ 64 of 285] Compiling Git.UnionMerge ( Git/UnionMerge.hs, tmp/Git/UnionMerge.o )
- [ 65 of 285] Compiling Git.Url ( Git/Url.hs, tmp/Git/Url.o )
- [ 66 of 285] Compiling Git.Construct ( Git/Construct.hs, tmp/Git/Construct.o )
- [ 67 of 285] Compiling Git.Config ( Git/Config.hs, tmp/Git/Config.o )
- [ 68 of 285] Compiling Git.SharedRepository ( Git/SharedRepository.hs, tmp/Git/SharedRepository.o )
- [ 69 of 285] Compiling Git.Version ( Git/Version.hs, tmp/Git/Version.o )
- [ 70 of 285] Compiling Git.CheckAttr ( Git/CheckAttr.hs, tmp/Git/CheckAttr.o )
- [ 71 of 285] Compiling Annex ( Annex.hs, tmp/Annex.o )
- [ 72 of 285] Compiling Types.Option ( Types/Option.hs, tmp/Types/Option.o )
- [ 73 of 285] Compiling Types ( Types.hs, tmp/Types.o )
- [ 74 of 285] Compiling Messages ( Messages.hs, tmp/Messages.o )
- [ 75 of 285] Compiling Types.Command ( Types/Command.hs, tmp/Types/Command.o )
- [ 76 of 285] Compiling Locations ( Locations.hs, tmp/Locations.o )
- [ 77 of 285] Compiling Common.Annex ( Common/Annex.hs, tmp/Common/Annex.o )
- [ 78 of 285] Compiling Fields ( Fields.hs, tmp/Fields.o )
- [ 79 of 285] Compiling Annex.BranchState ( Annex/BranchState.hs, tmp/Annex/BranchState.o )
- [ 80 of 285] Compiling Annex.CatFile ( Annex/CatFile.hs, tmp/Annex/CatFile.o )
- [ 81 of 285] Compiling Annex.Perms ( Annex/Perms.hs, tmp/Annex/Perms.o )
- [ 82 of 285] Compiling Crypto ( Crypto.hs, tmp/Crypto.o )
- [ 83 of 285] Compiling Annex.Exception ( Annex/Exception.hs, tmp/Annex/Exception.o )
- [ 84 of 285] Compiling Annex.Journal ( Annex/Journal.hs, tmp/Annex/Journal.o )
- [ 85 of 285] Compiling Annex.Branch ( Annex/Branch.hs, tmp/Annex/Branch.o )
- [ 86 of 285] Compiling Usage ( Usage.hs, tmp/Usage.o )
- [ 87 of 285] Compiling Annex.CheckAttr ( Annex/CheckAttr.hs, tmp/Annex/CheckAttr.o )
- [ 88 of 285] Compiling Remote.Helper.Special ( Remote/Helper/Special.hs, tmp/Remote/Helper/Special.o )
- [ 89 of 285] Compiling Logs.Presence ( Logs/Presence.hs, tmp/Logs/Presence.o )
- [ 90 of 285] Compiling Logs.Location ( Logs/Location.hs, tmp/Logs/Location.o )
- [ 91 of 285] Compiling Logs.Web ( Logs/Web.hs, tmp/Logs/Web.o )
- [ 92 of 285] Compiling Remote.Helper.Chunked ( Remote/Helper/Chunked.hs, tmp/Remote/Helper/Chunked.o )
- [ 93 of 285] Compiling Annex.LockPool ( Annex/LockPool.hs, tmp/Annex/LockPool.o )
- [ 94 of 285] Compiling Logs.Transfer ( Logs/Transfer.hs, tmp/Logs/Transfer.o )
- [ 95 of 285] Compiling Backend.SHA ( Backend/SHA.hs, tmp/Backend/SHA.o )
- [ 96 of 285] Compiling Backend.WORM ( Backend/WORM.hs, tmp/Backend/WORM.o )
- [ 97 of 285] Compiling Backend.URL ( Backend/URL.hs, tmp/Backend/URL.o )
- [ 98 of 285] Compiling Assistant.Types.ScanRemotes ( Assistant/Types/ScanRemotes.hs, tmp/Assistant/Types/ScanRemotes.o )
- [ 99 of 285] Compiling Assistant.Types.ThreadedMonad ( Assistant/Types/ThreadedMonad.hs, tmp/Assistant/Types/ThreadedMonad.o )
- [100 of 285] Compiling Assistant.Types.TransferQueue ( Assistant/Types/TransferQueue.hs, tmp/Assistant/Types/TransferQueue.o )
- [101 of 285] Compiling Assistant.Types.Pushes ( Assistant/Types/Pushes.hs, tmp/Assistant/Types/Pushes.o )
- [102 of 285] Compiling Assistant.Types.BranchChange ( Assistant/Types/BranchChange.hs, tmp/Assistant/Types/BranchChange.o )
- [103 of 285] Compiling Logs.UUIDBased ( Logs/UUIDBased.hs, tmp/Logs/UUIDBased.o )
- [104 of 285] Compiling Logs.Remote ( Logs/Remote.hs, tmp/Logs/Remote.o )
- [105 of 285] Compiling Logs.Group ( Logs/Group.hs, tmp/Logs/Group.o )
- [106 of 285] Compiling Utility.DiskFree ( Utility/DiskFree.hs, tmp/Utility/DiskFree.o )
- [107 of 285] Compiling Utility.Url ( Utility/Url.hs, tmp/Utility/Url.o )
- [108 of 285] Compiling Utility.CopyFile ( Utility/CopyFile.hs, tmp/Utility/CopyFile.o )
- [109 of 285] Compiling Utility.Rsync ( Utility/Rsync.hs, tmp/Utility/Rsync.o )
- [110 of 285] Compiling Git.LsFiles ( Git/LsFiles.hs, tmp/Git/LsFiles.o )
- [111 of 285] Compiling Git.AutoCorrect ( Git/AutoCorrect.hs, tmp/Git/AutoCorrect.o )
- [112 of 285] Compiling Git.CurrentRepo ( Git/CurrentRepo.hs, tmp/Git/CurrentRepo.o )
- [113 of 285] Compiling Locations.UserConfig ( Locations/UserConfig.hs, tmp/Locations/UserConfig.o )
- [114 of 285] Compiling Git.Merge ( Git/Merge.hs, tmp/Git/Merge.o )
- [115 of 285] Compiling Utility.Parallel ( Utility/Parallel.hs, tmp/Utility/Parallel.o )
- [116 of 285] Compiling Git.Remote ( Git/Remote.hs, tmp/Git/Remote.o )
- [117 of 285] Compiling Assistant.Ssh ( Assistant/Ssh.hs, tmp/Assistant/Ssh.o )
- [118 of 285] Compiling Assistant.Pairing ( Assistant/Pairing.hs, tmp/Assistant/Pairing.o )
- [119 of 285] Compiling Assistant.Types.NetMessager ( Assistant/Types/NetMessager.hs, tmp/Assistant/Types/NetMessager.o )
- [120 of 285] Compiling Utility.NotificationBroadcaster ( Utility/NotificationBroadcaster.hs, tmp/Utility/NotificationBroadcaster.o )
- [121 of 285] Compiling Assistant.Types.Buddies ( Assistant/Types/Buddies.hs, tmp/Assistant/Types/Buddies.o )
- [122 of 285] Compiling Utility.TSet ( Utility/TSet.hs, tmp/Utility/TSet.o )
- [123 of 285] Compiling Assistant.Types.Commits ( Assistant/Types/Commits.hs, tmp/Assistant/Types/Commits.o )
- [124 of 285] Compiling Assistant.Types.Changes ( Assistant/Types/Changes.hs, tmp/Assistant/Types/Changes.o )
- [125 of 285] Compiling Utility.WebApp ( Utility/WebApp.hs, tmp/Utility/WebApp.o )
- [126 of 285] Compiling Utility.Daemon ( Utility/Daemon.hs, tmp/Utility/Daemon.o )
- [127 of 285] Compiling Utility.ThreadScheduler ( Utility/ThreadScheduler.hs, tmp/Utility/ThreadScheduler.o )
- [128 of 285] Compiling Utility.LogFile ( Utility/LogFile.hs, tmp/Utility/LogFile.o )
- [129 of 285] Compiling Git.Filename ( Git/Filename.hs, tmp/Git/Filename.o )
- [130 of 285] Compiling Git.LsTree ( Git/LsTree.hs, tmp/Git/LsTree.o )
- [131 of 285] Compiling Utility.Types.DirWatcher ( Utility/Types/DirWatcher.hs, tmp/Utility/Types/DirWatcher.o )
- [132 of 285] Compiling Utility.Kqueue ( Utility/Kqueue.hs, tmp/Utility/Kqueue.o )
- [133 of 285] Compiling Utility.DirWatcher ( Utility/DirWatcher.hs, tmp/Utility/DirWatcher.o )
- [134 of 285] Compiling Utility.Lsof ( Utility/Lsof.hs, tmp/Utility/Lsof.o )
- [135 of 285] Compiling Config ( Config.hs, tmp/Config.o )
- [136 of 285] Compiling Annex.UUID ( Annex/UUID.hs, tmp/Annex/UUID.o )
- [137 of 285] Compiling Logs.UUID ( Logs/UUID.hs, tmp/Logs/UUID.o )
- [138 of 285] Compiling Backend ( Backend.hs, tmp/Backend.o )
- [139 of 285] Compiling Remote.Helper.Hooks ( Remote/Helper/Hooks.hs, tmp/Remote/Helper/Hooks.o )
- [140 of 285] Compiling Remote.Helper.Encryptable ( Remote/Helper/Encryptable.hs, tmp/Remote/Helper/Encryptable.o )
- [141 of 285] Compiling Creds ( Creds.hs, tmp/Creds.o )
- [142 of 285] Compiling Remote.Helper.AWS ( Remote/Helper/AWS.hs, tmp/Remote/Helper/AWS.o )
- [143 of 285] Compiling Annex.Queue ( Annex/Queue.hs, tmp/Annex/Queue.o )
- [144 of 285] Compiling Annex.Content ( Annex/Content.hs, tmp/Annex/Content.o )
- [145 of 285] Compiling Remote.S3 ( Remote/S3.hs, tmp/Remote/S3.o )
- [146 of 285] Compiling Remote.Directory ( Remote/Directory.hs, tmp/Remote/Directory.o )
- [147 of 285] Compiling Remote.Rsync ( Remote/Rsync.hs, tmp/Remote/Rsync.o )
- [148 of 285] Compiling Remote.Web ( Remote/Web.hs, tmp/Remote/Web.o )
- [149 of 285] Compiling Remote.Glacier ( Remote/Glacier.hs, tmp/Remote/Glacier.o )
- [150 of 285] Compiling Remote.Hook ( Remote/Hook.hs, tmp/Remote/Hook.o )
- [151 of 285] Compiling Upgrade.V2 ( Upgrade/V2.hs, tmp/Upgrade/V2.o )
- [152 of 285] Compiling Annex.Ssh ( Annex/Ssh.hs, tmp/Annex/Ssh.o )
- [153 of 285] Compiling Remote.Helper.Ssh ( Remote/Helper/Ssh.hs, tmp/Remote/Helper/Ssh.o )
- [154 of 285] Compiling Remote.Bup ( Remote/Bup.hs, tmp/Remote/Bup.o )
- [155 of 285] Compiling Annex.Version ( Annex/Version.hs, tmp/Annex/Version.o )
- [156 of 285] Compiling Init ( Init.hs, tmp/Init.o )
- [157 of 285] Compiling Checks ( Checks.hs, tmp/Checks.o )
- [158 of 285] Compiling Remote.Git ( Remote/Git.hs, tmp/Remote/Git.o )
- [159 of 285] Compiling Remote.List ( Remote/List.hs, tmp/Remote/List.o )
- [160 of 285] Compiling Logs.Trust ( Logs/Trust.hs, tmp/Logs/Trust.o )
- [161 of 285] Compiling Remote ( Remote.hs, tmp/Remote.o )
- [162 of 285] Compiling Assistant.Alert ( Assistant/Alert.hs, tmp/Assistant/Alert.o )
- [163 of 285] Compiling Assistant.Types.DaemonStatus ( Assistant/Types/DaemonStatus.hs, tmp/Assistant/Types/DaemonStatus.o )
- [164 of 285] Compiling Assistant.Monad ( Assistant/Monad.hs, tmp/Assistant/Monad.o )
- [165 of 285] Compiling Assistant.Types.NamedThread ( Assistant/Types/NamedThread.hs, tmp/Assistant/Types/NamedThread.o )
- [166 of 285] Compiling Assistant.Common ( Assistant/Common.hs, tmp/Assistant/Common.o )
- [167 of 285] Compiling Assistant.XMPP ( Assistant/XMPP.hs, tmp/Assistant/XMPP.o )
- [168 of 285] Compiling Assistant.XMPP.Buddies ( Assistant/XMPP/Buddies.hs, tmp/Assistant/XMPP/Buddies.o )
- [169 of 285] Compiling Assistant.NetMessager ( Assistant/NetMessager.hs, tmp/Assistant/NetMessager.o )
- [170 of 285] Compiling Assistant.Pushes ( Assistant/Pushes.hs, tmp/Assistant/Pushes.o )
- [171 of 285] Compiling Assistant.ScanRemotes ( Assistant/ScanRemotes.hs, tmp/Assistant/ScanRemotes.o )
- [172 of 285] Compiling Assistant.Install ( Assistant/Install.hs, tmp/Assistant/Install.o )
- [173 of 285] Compiling Assistant.XMPP.Client ( Assistant/XMPP/Client.hs, tmp/Assistant/XMPP/Client.o )
- [174 of 285] Compiling Assistant.Commits ( Assistant/Commits.hs, tmp/Assistant/Commits.o )
- [175 of 285] Compiling Assistant.BranchChange ( Assistant/BranchChange.hs, tmp/Assistant/BranchChange.o )
- [176 of 285] Compiling Assistant.Changes ( Assistant/Changes.hs, tmp/Assistant/Changes.o )
- [177 of 285] Compiling Assistant.WebApp.Types ( Assistant/WebApp/Types.hs, tmp/Assistant/WebApp/Types.o )
- Loading package ghc-prim ... linking ... done.
- Loading package integer-gmp ... linking ... done.
- Loading package base ... linking ... done.
- Loading object (static) Utility/libdiskfree.o ... done
- Loading object (static) Utility/libmounts.o ... done
- Loading object (static) Utility/libkqueue.o ... done
- final link ... done
- Loading package bytestring-0.9.2.1 ... linking ... done.
- Loading package zlib-0.5.4.0 ... linking ... done.
- Loading package array-0.4.0.0 ... linking ... done.
- Loading package deepseq-1.3.0.0 ... linking ... done.
- Loading package primitive-0.5.0.1 ... linking ... done.
- Loading package vector-0.10.0.1 ... linking ... done.
- Loading package transformers-0.3.0.0 ... linking ... done.
- Loading package text-0.11.2.3 ... linking ... done.
- Loading package old-locale-1.0.0.4 ... linking ... done.
- Loading package time-1.4 ... linking ... done.
- Loading package random-1.0.1.1 ... linking ... done.
- Loading package mtl-2.1.2 ... linking ... done.
- Loading package parsec-3.1.3 ... linking ... done.
- Loading package pretty-1.1.1.0 ... linking ... done.
- Loading package filepath-1.3.0.0 ... linking ... done.
- Loading package old-time-1.1.0.0 ... linking ... done.
- Loading package unix-2.5.1.1 ... linking ... done.
- Loading package directory-1.1.0.2 ... linking ... done.
- Loading package process-1.1.0.1 ... linking ... done.
- Loading package containers-0.4.2.1 ... linking ... done.
- Loading package base64-bytestring-1.0.0.0 ... linking ... done.
- Loading package cereal-0.3.5.2 ... linking ... done.
- Loading package base-unicode-symbols-0.2.2.4 ... linking ... done.
- Loading package transformers-base-0.4.1 ... linking ... done.
- Loading package monad-control-0.3.1.4 ... linking ... done.
- Loading package lifted-base-0.2 ... linking ... done.
- Loading package resourcet-0.4.4 ... linking ... done.
- Loading package semigroups-0.8.4.1 ... linking ... done.
- Loading package void-0.5.8 ... linking ... done.
- Loading package conduit-0.5.4.1 ... linking ... done.
- Loading package entropy-0.2.1 ... linking ... done.
- Loading package largeword-1.0.3 ... linking ... done.
- Loading package tagged-0.4.4 ... linking ... done.
- Loading package crypto-api-0.10.2 ... linking ... done.
- Loading package crypto-conduit-0.4.1 ... linking ... done.
- Loading package cryptohash-0.7.8 ... linking ... done.
- Loading package template-haskell ... linking ... done.
- Loading package file-embed-0.0.4.6 ... linking ... done.
- Loading package blaze-builder-0.3.1.0 ... linking ... done.
- Loading package hashable-1.1.2.5 ... linking ... done.
- Loading package case-insensitive-0.4.0.3 ... linking ... done.
- Loading package http-types-0.7.3.0.1 ... linking ... done.
- Loading package system-filepath-0.4.7 ... linking ... done.
- Loading package unix-compat-0.4.0.0 ... linking ... done.
- Loading package network-2.4.0.1 ... linking ... done.
- Loading package unordered-containers-0.2.2.1 ... linking ... done.
- Loading package vault-0.2.0.1 ... linking ... done.
- Loading package wai-1.3.0.1 ... linking ... done.
- Loading package blaze-markup-0.5.1.1 ... linking ... done.
- Loading package blaze-html-0.5.1.0 ... linking ... done.
- Loading package attoparsec-0.10.2.0 ... linking ... done.
- Loading package http-date-0.0.3 ... linking ... done.
- Loading package mime-types-0.1.0.0 ... linking ... done.
- Loading package system-fileio-0.3.10 ... linking ... done.
- Loading package wai-app-static-1.3.0.4 ... linking ... done.
- Loading package dlist-0.5 ... linking ... done.
- Loading package syb-0.3.7 ... linking ... done.
- Loading package aeson-0.6.0.2 ... linking ... done.
- Loading package cpu-0.1.1 ... linking ... done.
- Loading package crypto-pubkey-types-0.2.0 ... linking ... done.
- Loading package cryptocipher-0.3.6 ... linking ... done.
- Loading package cprng-aes-0.2.4 ... linking ... done.
- Loading package skein-0.1.0.10 ... linking ... done.
- Loading package clientsession-0.8.0.1 ... linking ... done.
- Loading package data-default-0.5.0 ... linking ... done.
- Loading package cookie-0.4.0.1 ... linking ... done.
- Loading package failure-0.2.0.1 ... linking ... done.
- Loading package date-cache-0.3.0 ... linking ... done.
- Loading package unix-time-0.1.2 ... linking ... done.
- Loading package fast-logger-0.3.1 ... linking ... done.
- Loading package shakespeare-1.0.2 ... linking ... done.
- Loading package hamlet-1.1.1.1 ... linking ... done.
- Loading package monad-logger-0.2.1 ... linking ... done.
- Loading package path-pieces-0.1.2 ... linking ... done.
- Loading package shakespeare-css-1.0.2 ... linking ... done.
- Loading package shakespeare-i18n-1.0.0.2 ... linking ... done.
- Loading package shakespeare-js-1.1.0 ... linking ... done.
- Loading package ansi-terminal-0.5.5 ... linking ... done.
- Loading package blaze-builder-conduit-0.5.0.3 ... linking ... done.
- Loading package stringsearch-0.3.6.4 ... linking ... done.
- Loading package byteorder-1.0.3 ... linking ... done.
- Loading package wai-logger-0.3.0 ... linking ... done.
- Loading package zlib-bindings-0.1.1.2 ... linking ... done.
- Loading package zlib-conduit-0.5.0.3 ... linking ... done.
- Loading package wai-extra-1.3.0.4 ... linking ... done.
- Loading package yesod-routes-1.1.1.1 ... linking ... done.
- Loading package yesod-core-1.1.6 ... linking ... done.
- Loading package yesod-static-1.1.1.1 ... linking ... done.
- [178 of 285] Compiling Assistant.WebApp ( Assistant/WebApp.hs, tmp/Assistant/WebApp.o )
- Loading package network-conduit-0.6.1.1 ... linking ... done.
- Loading package safe-0.3.3 ... linking ... done.
- Loading package simple-sendfile-0.2.8 ... linking ... done.
- Loading package warp-1.3.5 ... linking ... done.
- Loading package yaml-0.8.1.1 ... linking ... done.
- Loading package yesod-default-1.1.2 ... linking ... done.
- [179 of 285] Compiling Assistant.WebApp.OtherRepos ( Assistant/WebApp/OtherRepos.hs, tmp/Assistant/WebApp/OtherRepos.o )
- [180 of 285] Compiling Limit ( Limit.hs, tmp/Limit.o )
- [181 of 285] Compiling Option ( Option.hs, tmp/Option.o )
- [182 of 285] Compiling Seek ( Seek.hs, tmp/Seek.o )
- [183 of 285] Compiling Command ( Command.hs, tmp/Command.o )
- [184 of 285] Compiling CmdLine ( CmdLine.hs, tmp/CmdLine.o )
- [185 of 285] Compiling Command.ConfigList ( Command/ConfigList.hs, tmp/Command/ConfigList.o )
- [186 of 285] Compiling Command.InAnnex ( Command/InAnnex.hs, tmp/Command/InAnnex.o )
- [187 of 285] Compiling Command.DropKey ( Command/DropKey.hs, tmp/Command/DropKey.o )
- [188 of 285] Compiling Command.SendKey ( Command/SendKey.hs, tmp/Command/SendKey.o )
- [189 of 285] Compiling Command.RecvKey ( Command/RecvKey.hs, tmp/Command/RecvKey.o )
- [190 of 285] Compiling Command.TransferInfo ( Command/TransferInfo.hs, tmp/Command/TransferInfo.o )
- [191 of 285] Compiling Command.Commit ( Command/Commit.hs, tmp/Command/Commit.o )
- [192 of 285] Compiling Command.Add ( Command/Add.hs, tmp/Command/Add.o )
- [193 of 285] Compiling Command.Unannex ( Command/Unannex.hs, tmp/Command/Unannex.o )
- [194 of 285] Compiling Command.FromKey ( Command/FromKey.hs, tmp/Command/FromKey.o )
- [195 of 285] Compiling Command.ReKey ( Command/ReKey.hs, tmp/Command/ReKey.o )
- [196 of 285] Compiling Command.Fix ( Command/Fix.hs, tmp/Command/Fix.o )
- [197 of 285] Compiling Command.Describe ( Command/Describe.hs, tmp/Command/Describe.o )
- [198 of 285] Compiling Command.InitRemote ( Command/InitRemote.hs, tmp/Command/InitRemote.o )
- [199 of 285] Compiling Command.Unlock ( Command/Unlock.hs, tmp/Command/Unlock.o )
- [200 of 285] Compiling Command.Lock ( Command/Lock.hs, tmp/Command/Lock.o )
- [201 of 285] Compiling Command.PreCommit ( Command/PreCommit.hs, tmp/Command/PreCommit.o )
- [202 of 285] Compiling Command.Log ( Command/Log.hs, tmp/Command/Log.o )
- [203 of 285] Compiling Command.Merge ( Command/Merge.hs, tmp/Command/Merge.o )
- [204 of 285] Compiling Command.Group ( Command/Group.hs, tmp/Command/Group.o )
- [205 of 285] Compiling Command.Ungroup ( Command/Ungroup.hs, tmp/Command/Ungroup.o )
- [206 of 285] Compiling Command.Import ( Command/Import.hs, tmp/Command/Import.o )
- [207 of 285] Compiling Logs.Unused ( Logs/Unused.hs, tmp/Logs/Unused.o )
- [208 of 285] Compiling Command.AddUnused ( Command/AddUnused.hs, tmp/Command/AddUnused.o )
- [209 of 285] Compiling Command.Find ( Command/Find.hs, tmp/Command/Find.o )
- [210 of 285] Compiling Logs.PreferredContent ( Logs/PreferredContent.hs, tmp/Logs/PreferredContent.o )
- [211 of 285] Compiling Annex.Wanted ( Annex/Wanted.hs, tmp/Annex/Wanted.o )
- [212 of 285] Compiling Command.Whereis ( Command/Whereis.hs, tmp/Command/Whereis.o )
- [213 of 285] Compiling Command.Trust ( Command/Trust.hs, tmp/Command/Trust.o )
- [214 of 285] Compiling Command.Untrust ( Command/Untrust.hs, tmp/Command/Untrust.o )
- [215 of 285] Compiling Command.Semitrust ( Command/Semitrust.hs, tmp/Command/Semitrust.o )
- [216 of 285] Compiling Command.Dead ( Command/Dead.hs, tmp/Command/Dead.o )
- [217 of 285] Compiling Command.Vicfg ( Command/Vicfg.hs, tmp/Command/Vicfg.o )
- [218 of 285] Compiling Command.Map ( Command/Map.hs, tmp/Command/Map.o )
- [219 of 285] Compiling Command.Init ( Command/Init.hs, tmp/Command/Init.o )
- [220 of 285] Compiling Command.Uninit ( Command/Uninit.hs, tmp/Command/Uninit.o )
- [221 of 285] Compiling Command.Version ( Command/Version.hs, tmp/Command/Version.o )
- [222 of 285] Compiling Upgrade.V1 ( Upgrade/V1.hs, tmp/Upgrade/V1.o )
- [223 of 285] Compiling Upgrade.V0 ( Upgrade/V0.hs, tmp/Upgrade/V0.o )
- [224 of 285] Compiling Upgrade ( Upgrade.hs, tmp/Upgrade.o )
- [225 of 285] Compiling Command.Upgrade ( Command/Upgrade.hs, tmp/Command/Upgrade.o )
- [226 of 285] Compiling Command.Drop ( Command/Drop.hs, tmp/Command/Drop.o )
- [227 of 285] Compiling Command.Move ( Command/Move.hs, tmp/Command/Move.o )
- [228 of 285] Compiling Command.Copy ( Command/Copy.hs, tmp/Command/Copy.o )
- [229 of 285] Compiling Command.Get ( Command/Get.hs, tmp/Command/Get.o )
- [230 of 285] Compiling Command.TransferKey ( Command/TransferKey.hs, tmp/Command/TransferKey.o )
- [231 of 285] Compiling Command.DropUnused ( Command/DropUnused.hs, tmp/Command/DropUnused.o )
- [232 of 285] Compiling Command.Fsck ( Command/Fsck.hs, tmp/Command/Fsck.o )
- [233 of 285] Compiling Command.Reinject ( Command/Reinject.hs, tmp/Command/Reinject.o )
- [234 of 285] Compiling Command.Migrate ( Command/Migrate.hs, tmp/Command/Migrate.o )
- [235 of 285] Compiling Command.Unused ( Command/Unused.hs, tmp/Command/Unused.o )
- [236 of 285] Compiling Command.Status ( Command/Status.hs, tmp/Command/Status.o )
- [237 of 285] Compiling Command.Sync ( Command/Sync.hs, tmp/Command/Sync.o )
- [238 of 285] Compiling Command.Help ( Command/Help.hs, tmp/Command/Help.o )
- [239 of 285] Compiling Command.AddUrl ( Command/AddUrl.hs, tmp/Command/AddUrl.o )
- [240 of 285] Compiling Assistant.DaemonStatus ( Assistant/DaemonStatus.hs, tmp/Assistant/DaemonStatus.o )
- [241 of 285] Compiling Assistant.Sync ( Assistant/Sync.hs, tmp/Assistant/Sync.o )
- [242 of 285] Compiling Assistant.MakeRemote ( Assistant/MakeRemote.hs, tmp/Assistant/MakeRemote.o )
- [243 of 285] Compiling Assistant.XMPP.Git ( Assistant/XMPP/Git.hs, tmp/Assistant/XMPP/Git.o )
- [244 of 285] Compiling Command.XMPPGit ( Command/XMPPGit.hs, tmp/Command/XMPPGit.o )
- [245 of 285] Compiling Assistant.Threads.NetWatcher ( Assistant/Threads/NetWatcher.hs, tmp/Assistant/Threads/NetWatcher.o )
- [246 of 285] Compiling Assistant.NamedThread ( Assistant/NamedThread.hs, tmp/Assistant/NamedThread.o )
- [247 of 285] Compiling Assistant.WebApp.Notifications ( Assistant/WebApp/Notifications.hs, tmp/Assistant/WebApp/Notifications.o )
- [248 of 285] Compiling Assistant.WebApp.SideBar ( Assistant/WebApp/SideBar.hs, tmp/Assistant/WebApp/SideBar.o )
- [249 of 285] Compiling Assistant.WebApp.Configurators.Ssh ( Assistant/WebApp/Configurators/Ssh.hs, tmp/Assistant/WebApp/Configurators/Ssh.o )
- [250 of 285] Compiling Assistant.WebApp.Configurators.S3 ( Assistant/WebApp/Configurators/S3.hs, tmp/Assistant/WebApp/Configurators/S3.o )
- [251 of 285] Compiling Assistant.WebApp.Documentation ( Assistant/WebApp/Documentation.hs, tmp/Assistant/WebApp/Documentation.o )
- [252 of 285] Compiling Assistant.WebApp.Configurators.XMPP ( Assistant/WebApp/Configurators/XMPP.hs, tmp/Assistant/WebApp/Configurators/XMPP.o )
- [253 of 285] Compiling Assistant.Pairing.Network ( Assistant/Pairing/Network.hs, tmp/Assistant/Pairing/Network.o )
- [254 of 285] Compiling Assistant.Pairing.MakeRemote ( Assistant/Pairing/MakeRemote.hs, tmp/Assistant/Pairing/MakeRemote.o )
- [255 of 285] Compiling Assistant.TransferQueue ( Assistant/TransferQueue.hs, tmp/Assistant/TransferQueue.o )
- [256 of 285] Compiling Assistant.Threads.Merger ( Assistant/Threads/Merger.hs, tmp/Assistant/Threads/Merger.o )
- [257 of 285] Compiling Assistant.TransferSlots ( Assistant/TransferSlots.hs, tmp/Assistant/TransferSlots.o )
- [258 of 285] Compiling Assistant.Threads.Transferrer ( Assistant/Threads/Transferrer.hs, tmp/Assistant/Threads/Transferrer.o )
- [259 of 285] Compiling Assistant.Threads.DaemonStatus ( Assistant/Threads/DaemonStatus.hs, tmp/Assistant/Threads/DaemonStatus.o )
- [260 of 285] Compiling Assistant.Threads.Pusher ( Assistant/Threads/Pusher.hs, tmp/Assistant/Threads/Pusher.o )
- [261 of 285] Compiling Assistant.Threads.MountWatcher ( Assistant/Threads/MountWatcher.hs, tmp/Assistant/Threads/MountWatcher.o )
- [262 of 285] Compiling Assistant.Threads.ConfigMonitor ( Assistant/Threads/ConfigMonitor.hs, tmp/Assistant/Threads/ConfigMonitor.o )
- [263 of 285] Compiling Assistant.Threads.PairListener ( Assistant/Threads/PairListener.hs, tmp/Assistant/Threads/PairListener.o )
- [264 of 285] Compiling Assistant.Threads.XMPPClient ( Assistant/Threads/XMPPClient.hs, tmp/Assistant/Threads/XMPPClient.o )
- [265 of 285] Compiling Assistant.WebApp.Utility ( Assistant/WebApp/Utility.hs, tmp/Assistant/WebApp/Utility.o )
- [266 of 285] Compiling Assistant.WebApp.Configurators.Edit ( Assistant/WebApp/Configurators/Edit.hs, tmp/Assistant/WebApp/Configurators/Edit.o )
- [267 of 285] Compiling Assistant.WebApp.Configurators.Local ( Assistant/WebApp/Configurators/Local.hs, tmp/Assistant/WebApp/Configurators/Local.o )
- [268 of 285] Compiling Assistant.WebApp.Configurators ( Assistant/WebApp/Configurators.hs, tmp/Assistant/WebApp/Configurators.o )
- [269 of 285] Compiling Assistant.WebApp.DashBoard ( Assistant/WebApp/DashBoard.hs, tmp/Assistant/WebApp/DashBoard.o )
- [270 of 285] Compiling Assistant.WebApp.Configurators.Pairing ( Assistant/WebApp/Configurators/Pairing.hs, tmp/Assistant/WebApp/Configurators/Pairing.o )
- [271 of 285] Compiling Assistant.Threads.WebApp ( Assistant/Threads/WebApp.hs, tmp/Assistant/Threads/WebApp.o )
-
- Assistant/Threads/WebApp.hs:47:1: Not in scope: `getAddBoxComR'
-
- Assistant/Threads/WebApp.hs:47:1: Not in scope: `getEnableWebDAVR'
- make: *** [git-annex] Error 1
-"""]]
diff --git a/doc/bugs/3.20121112:_build_error_in_assistant/comment_3_b38e40d36bba95b16afbce68e7f25a80._comment b/doc/bugs/3.20121112:_build_error_in_assistant/comment_3_b38e40d36bba95b16afbce68e7f25a80._comment
deleted file mode 100644
index 26bd0194b..000000000
--- a/doc/bugs/3.20121112:_build_error_in_assistant/comment_3_b38e40d36bba95b16afbce68e7f25a80._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.6.49"
- subject="comment 3"
- date="2012-11-25T18:36:49Z"
- content="""
-The webdav library should not be hard to install, but I've gotten the webapp to build without it.
-"""]]
diff --git a/doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04.mdwn b/doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04.mdwn
deleted file mode 100644
index cd0897649..000000000
--- a/doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04.mdwn
+++ /dev/null
@@ -1,97 +0,0 @@
-What steps will reproduce the problem?
-
-* Start with Ubuntu 12.04
-* sudo apt-get install haskell-platform libgsasl7-dev gsasl g2hs
-* cabal install git-annex --bindir=$HOME/bin
-
-What is the expected output? What do you see instead?
-
-Expected omething like "installation successful"
-
-Actual output, after build notices:
-
-
-Loading package IfElse-0.85 ... linking ... done.
-Loading object (static) dist/build/git-annex/git-annex-tmp/Utility/libdiskfree.o ... done
-Loading object (static) dist/build/git-annex/git-annex-tmp/Utility/libmounts.o ... done
-final link ... done
-[157 of 279] Compiling Assistant.Types.DaemonStatus ( Assistant/Types/DaemonStatus.hs, dist/build/git-annex/git-annex-tmp/Assistant/Types/DaemonStatus.o )
-[158 of 279] Compiling Assistant.Monad ( Assistant/Monad.hs, dist/build/git-annex/git-annex-tmp/Assistant/Monad.o )
-
-Assistant/Monad.hs:86:16:
- Couldn't match expected type `Assistant a'
- with actual type `Reader AssistantData a'
- Expected type: (AssistantData -> a) -> Assistant a
- Actual type: (AssistantData -> a) -> Reader AssistantData a
- In the expression: reader
- In an equation for `getAssistant': getAssistant = reader
-
-Assistant/Monad.hs:93:15:
- Couldn't match expected type `Assistant t0'
- with actual type `Reader r0 a0'
- In the return type of a call of `reader'
- In a stmt of a 'do' block: st <- reader threadState
- In the expression:
- do { st <- reader threadState;
- liftIO $ runThreadState st a }
-
-Assistant/Monad.hs:99:14:
- Couldn't match expected type `Assistant t0'
- with actual type `Reader r0 a0'
- In the return type of a call of `reader'
- In a stmt of a 'do' block: d <- reader id
- In the expression:
- do { d <- reader id;
- liftIO $ io $ runAssistant d a }
-
-Assistant/Monad.hs:105:14:
- Couldn't match expected type `Assistant t0'
- with actual type `Reader r0 a0'
- In the return type of a call of `reader'
- In a stmt of a 'do' block: d <- reader id
- In the expression:
- do { d <- reader id;
- return $ runAssistant d a }
-
-Assistant/Monad.hs:110:14:
- Couldn't match expected type `Assistant t0'
- with actual type `Reader r0 a0'
- In the return type of a call of `reader'
- In a stmt of a 'do' block: d <- reader id
- In the expression:
- do { d <- reader id;
- return $ \ v -> runAssistant d $ a v }
-
-Assistant/Monad.hs:115:14:
- Couldn't match expected type `Assistant t0'
- with actual type `Reader r0 a0'
- In the return type of a call of `reader'
- In a stmt of a 'do' block: d <- reader id
- In the expression:
- do { d <- reader id;
- return $ \ v1 v2 -> runAssistant d (a v1 v2) }
-
-Assistant/Monad.hs:120:12:
- Couldn't match expected type `Assistant a0'
- with actual type `Reader r0 a1'
- In the return type of a call of `reader'
- In the first argument of `(>>=)', namely `reader v'
- In the expression: reader v >>= liftIO . io
-cabal: Error: some packages failed to install:
-git-annex-3.20121112 failed during the building phase. The exception was:
-ExitFailure 1
-
-
-What version of git-annex are you using? On what operating system?
-
-git annex 3.20121112
-Ubuntu 12.04 (current "long term support", all packages up to date)
-
-Please provide any additional information below.
-
-No idea how important this is for git-annex in general but reporting in case it is. Thank you for working on git annex!
-
-> I was able to reproduce this build error when I force installed
-> an old version of the haskell mtl library. So git-annex needs version
-> 2.1.1 to build, and I have adjusted the build dependencies appropriately.
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_1_ce2efd2196e7682f4cdbabdb0616d449._comment b/doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_1_ce2efd2196e7682f4cdbabdb0616d449._comment
deleted file mode 100644
index 49f43149c..000000000
--- a/doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_1_ce2efd2196e7682f4cdbabdb0616d449._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.252.11.120"
- subject="comment 1"
- date="2012-11-15T17:53:25Z"
- content="""
-I'm not quite sure what's going on here, but my guess is it's an out of date version of the haskell mtl library. Try installing a newer one with 'cabal install mtl'
-"""]]
diff --git a/doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_2_2a6faf662ebb85a8f1c89adcdfb9adb6._comment b/doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_2_2a6faf662ebb85a8f1c89adcdfb9adb6._comment
deleted file mode 100644
index 09e7688fe..000000000
--- a/doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_2_2a6faf662ebb85a8f1c89adcdfb9adb6._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnZEanlyzay_QlEAL0CWpyZcRTyN7vay8U"
- nickname="Carlo"
- subject="Not resolved"
- date="2012-11-15T21:44:11Z"
- content="""
-I did as instructed, same behavior though.
-
-I'll wait or keep trying things, whatever works better for you.
-"""]]
diff --git a/doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_3_37f34baa34068def1adf794d0942e462._comment b/doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_3_37f34baa34068def1adf794d0942e462._comment
deleted file mode 100644
index 88cd12df9..000000000
--- a/doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_3_37f34baa34068def1adf794d0942e462._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.252.11.120"
- subject="comment 3"
- date="2012-11-18T18:13:31Z"
- content="""
-My other guess would be a too old version of ghc.
-"""]]
diff --git a/doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_4_2f8a859fef9edc8eb93bf1cc74296702._comment b/doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_4_2f8a859fef9edc8eb93bf1cc74296702._comment
deleted file mode 100644
index 781259e79..000000000
--- a/doc/bugs/3.20121112_build_fails_on_Ubuntu_12.04/comment_4_2f8a859fef9edc8eb93bf1cc74296702._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlXlJDAF_lXaxbqeBdH4EGj6jsBjjrDODM"
- nickname="Antoine"
- subject="comment 4"
- date="2012-11-21T07:33:43Z"
- content="""
-I have the same problem (sorry, duplicate bug entry) on the same platform. The ghc version is 7.4.1 and is the one distributed by apt repos.
-"""]]
diff --git a/doc/bugs/3.20121113_build_error___39__not_in_scope_getAddBoxComR__39__.mdwn b/doc/bugs/3.20121113_build_error___39__not_in_scope_getAddBoxComR__39__.mdwn
deleted file mode 100644
index 59ca6b51f..000000000
--- a/doc/bugs/3.20121113_build_error___39__not_in_scope_getAddBoxComR__39__.mdwn
+++ /dev/null
@@ -1,33 +0,0 @@
-What steps will reproduce the problem?
-
-Building from latest source, Cabal update, cabal install --only dependencies, cabal configure, Cabal build
-
-What is the expected output? What do you see instead?
-
-Error message from build
-
-...
-
-Loading package DAV-0.2 ... linking ... done.
-
-Loading object (static) dist/build/git-annex/git-annex-tmp/Utility/libdiskfree.o ... done
-
-Loading object (static) dist/build/git-annex/git-annex-tmp/Utility/libmounts.o ... done
-
-final link ... done
-
-
-Assistant/Threads/WebApp.hs:47:1: Not in scope: `getAddBoxComR'
-
-Assistant/Threads/WebApp.hs:47:1: Not in scope: `getEnableWebDAVR'
-
-
-What version of git-annex are you using? On what operating system?
-
-Latest version via git from git-annex.branchable.com
-
-Debian Squeeze (6.0.6)
-
-Please provide any additional information below.
-
-> I noticed this earlier and fixed it. [[done]] --[[Joey]]
diff --git a/doc/bugs/4.20130227_won__39__t_build_on_OS_X_Lion__44___because_testpack_won__39__t_build.mdwn b/doc/bugs/4.20130227_won__39__t_build_on_OS_X_Lion__44___because_testpack_won__39__t_build.mdwn
deleted file mode 100644
index 5acc4d569..000000000
--- a/doc/bugs/4.20130227_won__39__t_build_on_OS_X_Lion__44___because_testpack_won__39__t_build.mdwn
+++ /dev/null
@@ -1,57 +0,0 @@
-What steps will reproduce the problem?
-
-install from a git checkout of tag 4.20130227; error comes up at the "cabal install" stage.
-
-
-What is the expected output? What do you see instead?
-
-Expected successful install; got:
-
-
- git-annex.branchable.com$ cabal install --bindir=$HOME/bin
- Resolving dependencies...
- Configuring testpack-2.1.2...
- Building testpack-2.1.2...
- Preprocessing library testpack-2.1.2...
- [1 of 3] Compiling Test.QuickCheck.Instances ( src/Test/QuickCheck/Instances.hs, dist/build/Test/QuickCheck/Instances.o )
- [2 of 3] Compiling Test.QuickCheck.Tools ( src/Test/QuickCheck/Tools.hs, dist/build/Test/QuickCheck/Tools.o )
-
- src/Test/QuickCheck/Tools.hs:33:9:
- Warning: Fields of `MkResult' not initialised: abort
- In the expression:
- MkResult
- {ok = Just (expected == actual), expect = True,
- interrupted = False,
- reason = "Result: expected "
- ++ show expected ++ ", got " ++ show actual,
- stamp = [], callbacks = []}
- In an equation for `@=?':
- expected @=? actual
- = MkResult
- {ok = Just (expected == actual), expect = True,
- interrupted = False,
- reason = "Result: expected "
- ++ show expected ++ ", got " ++ show actual,
- stamp = [], callbacks = []}
- [3 of 3] Compiling Test.HUnit.Tools ( src/Test/HUnit/Tools.hs, dist/build/Test/HUnit/Tools.o )
-
- src/Test/HUnit/Tools.hs:131:57:
- `maxDiscard' is not a (visible) constructor field name
-
- src/Test/HUnit/Tools.hs:177:40: Not in scope: `maxDiscard'
- Failed to install testpack-2.1.2
- cabal: Error: some packages failed to install:
- git-annex-4.20130227 depends on testpack-2.1.2 which failed to install.
- testpack-2.1.2 failed during the building phase. The exception was:
- ExitFailure 1
- git-annex.branchable.com$
-
-
-What version of git-annex are you using? On what operating system?
-
-trying to compile git checkout of 4.20130227 on OS X Lion.
-
-Please provide any additional information below.
-
-
-> removed dependency on testpack [[done]] --[[Joey]]
diff --git a/doc/bugs/4.20130227_won__39__t_build_on_OS_X_Lion__44___because_testpack_won__39__t_build/comment_1_b7140e2bf1ea9c73ecc9e214095968e7._comment b/doc/bugs/4.20130227_won__39__t_build_on_OS_X_Lion__44___because_testpack_won__39__t_build/comment_1_b7140e2bf1ea9c73ecc9e214095968e7._comment
deleted file mode 100644
index b4e0c69f7..000000000
--- a/doc/bugs/4.20130227_won__39__t_build_on_OS_X_Lion__44___because_testpack_won__39__t_build/comment_1_b7140e2bf1ea9c73ecc9e214095968e7._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-02-28T02:12:50Z"
- content="""
-Pass -f-TestSuite to cabal to disable building the test suite.
-"""]]
diff --git a/doc/bugs/4.20130227_won__39__t_build_on_OS_X_Lion__44___because_testpack_won__39__t_build/comment_2_6be87b2fb2ed828e7b4bf785729e910e._comment b/doc/bugs/4.20130227_won__39__t_build_on_OS_X_Lion__44___because_testpack_won__39__t_build/comment_2_6be87b2fb2ed828e7b4bf785729e910e._comment
deleted file mode 100644
index d2d1d6bac..000000000
--- a/doc/bugs/4.20130227_won__39__t_build_on_OS_X_Lion__44___because_testpack_won__39__t_build/comment_2_6be87b2fb2ed828e7b4bf785729e910e._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="173.162.44.162"
- subject="comment 2"
- date="2013-02-28T03:31:32Z"
- content="""
-that fixed it, thank you!
-
-"""]]
diff --git a/doc/bugs/4.20130601_xmpp_sync_error.mdwn b/doc/bugs/4.20130601_xmpp_sync_error.mdwn
deleted file mode 100644
index 0e1f512d3..000000000
--- a/doc/bugs/4.20130601_xmpp_sync_error.mdwn
+++ /dev/null
@@ -1,125 +0,0 @@
-4.20130601 xmpp sync error.
-
-setup: A debian machine, with indirect fresh annex, android galaxy s3 with a
-fresh direct annex, both running ga-20130601.
-
-steps:
-- Start assistant on both, add jabber account to both.
-- Add box.com account on desktop with no encryption, (now correctly shows up on android, wasn't the case with 20130521).
-- Add hello.txt on desktop repo, filename is now visible on android, but content is not.
-- Add greeting.txt on desktop, nothing shows up on android, content still missing for hello.txt
-- Webapp shows uploading messages, but no errors.
-- Manually checking box.com confirms that files have been uploaded.
-
-debian desktop daemon.log:
-
- [2013-06-02 17:57:03 CEST] main: starting assistant version 4.20130601
- (scanning...) [2013-06-02 17:57:03 CEST] Watcher: Performing startup scan
- (started...) [2013-06-02 17:57:52 CEST] XMPPClient: Pairing with myJabberAccount in progress
- [2013-06-02 17:57:53 CEST] XMPPReceivePack: Syncing with myJabberAccount
- [2013-06-02 17:58:03 CEST] XMPPClient: Pairing with myJabberAccount in progress
- [2013-06-02 17:58:52 CEST] main: Syncing with box.com
- warning: Not updating non-default fetch respec
-
- Please update the configuration manually if necessary.
- fatal: The remote end hung up unexpectedly
- [2013-06-02 17:59:53 CEST] XMPPReceivePack: Syncing with myJabberAccount
- [2013-06-02 18:00:02 CEST] Committer: Adding hello.txt
-
- (testing WebDAV server...)
- add hello.txt (checksum...) [2013-06-02 18:00:02 CEST] Committer: Committing changes to git
- [2013-06-02 18:00:02 CEST] XMPPSendPack: Syncing with myJabberAccount
- Already up-to-date.
- [2013-06-02 18:00:03 CEST] Committer: Committing changes to git
- fatal: The remote end hung up unexpectedly
- fatal: The remote end hung up unexpectedly
- [2013-06-02 18:00:03 CEST] XMPPSendPack: Syncing with myJabberAccount
-
-
-100% 1.0 B/s 0s
-
-[2013-06-02 18:00:19 CEST] Transferrer: Uploaded hello.txt
- fatal: The remote end hung up unexpectedly
- [2013-06-02 18:01:53 CEST] XMPPReceivePack: Syncing with myJabberAccount
- fatal: The remote end hung up unexpectedly
- [2013-06-02 18:02:04 CEST] XMPPSendPack: Syncing with myJabberAccount
- fatal: The remote end hung up unexpectedly
- [2013-06-02 18:03:53 CEST] XMPPReceivePack: Syncing with myJabberAccount
- fatal: The remote end hung up unexpectedly
- [2013-06-02 18:05:10 CEST] Committer: Adding greeting.txt
- ok
- (Recording state in git...)
- (Recording state in git...)
-
- (Recording state in git...)
- add greeting.txt (checksum...) [2013-06-02 18:05:10 CEST] Committer: Committing changes to git
- [2013-06-02 18:05:10 CEST] XMPPSendPack: Syncing with myJabberAccount
- Already up-to-date.
- [2013-06-02 18:05:11 CEST] Committer: Committing changes to git
-
-
-100% 9.0 B/s 0s
-
-[2013-06-02 18:05:24 CEST] Transferrer: Uploaded greeting.txt
- fatal: The remote end hung up unexpectedly
- [2013-06-02 18:06:13 CEST] XMPPReceivePack: Syncing with myJabberAccount
- ok
- (Recording state in git...)
- (Recording state in git...)
-
- (Recording state in git...)
- fatal: The remote end hung up unexpectedly
-
-Thanks as always.
-
-
-Android daemon.log:
- [2013-06-02 17:53:07 CEST] main: starting assistant version 4.20130601-g7483ca4
- (scanning...) [2013-06-02 17:53:07 CEST] Watcher: Performing startup scan
- (started...) [2013-06-02 17:57:51 CEST] XMPPClient: Pairing with myJabberAccount in progress
- [2013-06-02 17:57:52 CEST] XMPPSendPack: Syncing with myJabberAccount
- Already up-to-date.
- [2013-06-02 17:58:00 CEST] XMPPSendPack: Unable to download files from your other devices.
- [2013-06-02 17:58:00 CEST] XMPPSendPack: Syncing with myJabberAccount
- [2013-06-02 17:58:02 CEST] XMPPClient: Pairing with myJabberAccount in progress
- [2013-06-02 17:58:07 CEST] XMPPSendPack: Unable to download files from your other devices.
- [2013-06-02 17:58:07 CEST] XMPPSendPack: Syncing with myJabberAccount
- [2013-06-02 17:58:15 CEST] XMPPSendPack: Unable to download files from your other devices.
- [2013-06-02 18:00:02 CEST] XMPPReceivePack: Syncing with myJabberAccount
- [2013-06-02 18:00:03 CEST] XMPPReceivePack: Unable to download files from your other devices.
- [2013-06-02 18:00:04 CEST] XMPPReceivePack: Syncing with myJabberAccount
- Merge made by the 'recursive' strategy.
- hello.txt | 1 +
- 1 file changed, 1 insertion(+)
- create mode 120000 hello.txt
- [2013-06-02 18:00:05 CEST] Committer: Committing changes to git
- [2013-06-02 18:00:06 CEST] XMPPSendPack: Syncing with myJabberAccount
- Already up-to-date.
- [2013-06-02 18:00:14 CEST] XMPPSendPack: Unable to download files from your other devices.
- [2013-06-02 18:00:14 CEST] XMPPSendPack: Syncing with myJabberAccount
- [2013-06-02 18:00:25 CEST] XMPPSendPack: Unable to download files from your other devices.
- [2013-06-02 18:02:03 CEST] Committer: Committing changes to git
- fatal: The remote end hung up unexpectedly
- [2013-06-02 18:02:04 CEST] XMPPReceivePack: Unable to download files from your other devices.
- [2013-06-02 18:02:04 CEST] XMPPSendPack: Syncing with myJabberAccount
- [2013-06-02 18:02:04 CEST] XMPPReceivePack: Syncing with myJabberAccount
- [2013-06-02 18:02:13 CEST] XMPPSendPack: Unable to download files from your other devices.
- [2013-06-02 18:02:15 CEST] XMPPSendPack: Syncing with myJabberAccount
- [2013-06-02 18:02:24 CEST] XMPPSendPack: Unable to download files from your other devices.
- fatal: The remote end hung up unexpectedly
- [2013-06-02 18:04:04 CEST] XMPPReceivePack: Unable to download files from your other devices.
- [2013-06-02 18:05:10 CEST] XMPPReceivePack: Syncing with myJabberAccount
- [2013-06-02 18:06:12 CEST] Committer: Committing changes to git
- [2013-06-02 18:06:13 CEST] XMPPSendPack: Syncing with myJabberAccount
- [2013-06-02 18:06:21 CEST] XMPPSendPack: Unable to download files from your other devices.
- [2013-06-02 18:06:21 CEST] XMPPSendPack: Syncing with myJabberAccount
- [2013-06-02 18:06:29 CEST] XMPPSendPack: Unable to download files from your other devices.
- fatal: The remote end hung up unexpectedly
- [2013-06-02 18:07:10 CEST] XMPPReceivePack: Unable to download files from your other devices.
-
-
-thanks
-
-> Since this seems clearly a lack of box.com being configured
-> to be used on the Android, I'm closing the bug: [[done]].
-> If I'm wrong, write back, and I'll reopen ;) --[[Joey]]
diff --git a/doc/bugs/4.20130601_xmpp_sync_error/comment_1_5b50d97e44cbd5b31ff24537ec3f8603._comment b/doc/bugs/4.20130601_xmpp_sync_error/comment_1_5b50d97e44cbd5b31ff24537ec3f8603._comment
deleted file mode 100644
index 9c5062780..000000000
--- a/doc/bugs/4.20130601_xmpp_sync_error/comment_1_5b50d97e44cbd5b31ff24537ec3f8603._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-06-11T14:54:56Z"
- content="""
-When you add the box.com repo on the desktop, it will show up on Android pretty quickly thanks to XMPP syncing. But this does not cause the repository to be enabled to be used on Android. You need to select it and enable it there.
-
-I can see this is the case thanks to the log you posted. The Android is constantly complaining:
-
-> XMPPSendPack: Unable to download files from your other devices.
-
-This message should also be appearing in an alert message in the sidebar of the webapp.
-"""]]
diff --git a/doc/bugs/400_mode_leakage.mdwn b/doc/bugs/400_mode_leakage.mdwn
deleted file mode 100644
index 63f0fb11d..000000000
--- a/doc/bugs/400_mode_leakage.mdwn
+++ /dev/null
@@ -1,25 +0,0 @@
-git-annex tends to preserve files that are added to an annex with
-a mode such as 400. (Happens to me sometimes with email attachments.)
-As these files are rsynced around, and end up on eg, a
-publically visible repo with a webserver frontend, or a repo that is
-acessible to a whole group of users, they will not be readable.
-
-I think it would make sense for git-annex to normalize file permissions
-when adding them. Of course, there's some tension here with generally
-storing file metadata when possible. Perhaps the normalization should only
-ensure that group and other have read access?
-
-(Security: We can assume that a repo that is not intended to be public is
-in a 700 directory. And since git-annex cannot preserve file modes when
-files transit through a special remote, using modes to limit access to
-individual files is not wise.)
-
---[[Joey]]
-
-> Revisiting this, git-annex already honors core.sharedrepository settings,
-> so I just needed to set it to `world` to allow everyone to read.
->
-> There was a code path in direct mode where that didn't work; fixed that.
->
-> [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes.mdwn b/doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes.mdwn
new file mode 100644
index 000000000..177cc66e1
--- /dev/null
+++ b/doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes.mdwn
@@ -0,0 +1,37 @@
+### Please describe the problem.
+
+Some time in may 2014, git-annex stopped working with previous versions of git-annex.
+
+### What steps will reproduce the problem?
+
+Trying to sync with the server fails with:
+
+ git-annex-shell: Not a git-annex or gcrypt repository.
+
+With older versions (e.g. 5.20140412), it's even worse:
+
+ Remote marcos does not have git-annex installed; setting annex-ignore
+ This could be a problem with the git-annex installation on the remote. Please make sure that git-annex-shell is available in PATH when you ssh into the remote. Once you have fixed the git-annex installation, run: git config remote.marcos.annex-ignore false
+
+Basically, if git-annex-shell is missing, newer versions of git-annex just crash and burn instead of going the more gentle, backward-compatible way...
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex from debian sid (5.20140517) on the "client" side and from jessie (5.20140421) on the "server".
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+ssh server
+git init books
+exit
+git remote add server server:books
+git annex sync server
+# End of transcript or log.
+"""]]
+
+If this is intended behavior, it seems to me the major version of git annex should be bumped, at the very least... -- [[anarcat]]
+
+> [[done]], seems operator error --[[Joey]]
diff --git a/doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes/comment_1_323262a080daed9cebd4caee4c887210._comment b/doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes/comment_1_323262a080daed9cebd4caee4c887210._comment
new file mode 100644
index 000000000..f54eb1769
--- /dev/null
+++ b/doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes/comment_1_323262a080daed9cebd4caee4c887210._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="24.159.78.125"
+ subject="comment 1"
+ date="2014-05-23T14:25:04Z"
+ content="""
+git-annex has always required the remote have git-annex-shell installed in order to store files on it. Nothing has changed in this area.
+
+So, you seem to be very confused about something, but I cannot tell what from this bug report, and I certianly see no evidence of any bug in the information provided so far. You need to install git-annex on your server and then it should work, assuming the server actually has a git-annex repository set up on it.
+"""]]
diff --git a/doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes/comment_2_6172dcd7db2322084483a18d4f3cc2d6._comment b/doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes/comment_2_6172dcd7db2322084483a18d4f3cc2d6._comment
new file mode 100644
index 000000000..98b297868
--- /dev/null
+++ b/doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes/comment_2_6172dcd7db2322084483a18d4f3cc2d6._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="72.0.72.144"
+ subject="comment 2"
+ date="2014-05-27T03:00:48Z"
+ content="""
+marcos has had git-annex installed ever since i started using git-annex, which is around version 4.x. furthermore, i have assumed that the procedure i detailed in the last part were enough to reproduce the bug, but i may be mistaken.
+"""]]
diff --git a/doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes/comment_3_5ae2178863709230ddb995905c629c4e._comment b/doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes/comment_3_5ae2178863709230ddb995905c629c4e._comment
new file mode 100644
index 000000000..3234ff75b
--- /dev/null
+++ b/doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes/comment_3_5ae2178863709230ddb995905c629c4e._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 3"
+ date="2014-05-27T17:54:06Z"
+ content="""
+Well, your transcript shows you init a git repository. But you have not run `git annex init` in it, so git-annex-shell won't use it.
+
+
+"""]]
diff --git a/doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes/comment_4_19d32634789a09c1b04e9d3fcde364f7._comment b/doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes/comment_4_19d32634789a09c1b04e9d3fcde364f7._comment
new file mode 100644
index 000000000..66d3c07f8
--- /dev/null
+++ b/doc/bugs/5.20140517_fails_to_talk_to_other_5.x_git-annex_remotes/comment_4_19d32634789a09c1b04e9d3fcde364f7._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="72.0.72.144"
+ subject="comment 4"
+ date="2014-06-04T04:53:36Z"
+ content="""
+ah. i see. certainly an operator error then. feels like a usability issue now, or i just feel stupid, not sure which. :)
+"""]]
diff --git a/doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop.mdwn b/doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop.mdwn
deleted file mode 100644
index c5bff196e..000000000
--- a/doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop.mdwn
+++ /dev/null
@@ -1,22 +0,0 @@
-What steps will reproduce the problem?
-
-Mount USB drive formatted as FAT
-Make directory for repository in it.
-Set up another repository and choose to sync it with the existing one.
-
-What is the expected output? What do you see instead?
-The files should transfer from the main repository to the directory on the USB drive.
-This happens, but afterwards a new sync happens from the USB drive repository back to the other existing repositories, because the file date of all the files on the USB drive has been set to today.
-Further, git seemed to keep the USB key locked so umount was impossible until after killing it.
-
-What version of git-annex are you using? On what operating system?
-4.20130405
-Linux
-
-Please provide any additional information below.
-
-
-> Reproduced the core bug, which is that the assistant saw symlink standin
-> files as new files, and annexed them. Now it doesn't, and I have
-> it running on FAT with no trouble; can even rename symlink standin files
-> and it commits symlink changes. Calling this [[done]]. --[[Joey]]
diff --git a/doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_1_81839a6de7450734ee75b51e47a0898e._comment b/doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_1_81839a6de7450734ee75b51e47a0898e._comment
deleted file mode 100644
index c90d67cc1..000000000
--- a/doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_1_81839a6de7450734ee75b51e47a0898e._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-04-09T17:33:06Z"
- content="""
-You seem to have told the assistant you want it to directly manage a git repository on the USB drive. So it keeps a git-annex assistant daemon running on that drive. Which yes, makes it impossible to unmount it.
-
-So, don't do that. Make the repository on the drive by selecting Add Repository -> Removable drive, which creates a bare repository and never runs the assistant in it.
-"""]]
diff --git a/doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_2_907ce31a31df94984c2bd7aaafe5b10b._comment b/doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_2_907ce31a31df94984c2bd7aaafe5b10b._comment
deleted file mode 100644
index 20de13ade..000000000
--- a/doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_2_907ce31a31df94984c2bd7aaafe5b10b._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/bBy7WkgQicYHIiiyj.Vm0TcMbxi2quzbPFef#6f9f7"
- nickname="Frederik Vanrenterghem"
- subject="comment 2"
- date="2013-04-10T03:25:40Z"
- content="""
-Thanks Joey, I will give that a try later today. How about the file last modified dates all having changed to the current date though - is that something that could have been avoided?
-"""]]
diff --git a/doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_3_d8a86ae0ae5fa1f91e0b40b8b2ba0406._comment b/doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_3_d8a86ae0ae5fa1f91e0b40b8b2ba0406._comment
deleted file mode 100644
index 76f2b12a1..000000000
--- a/doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_3_d8a86ae0ae5fa1f91e0b40b8b2ba0406._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/bBy7WkgQicYHIiiyj.Vm0TcMbxi2quzbPFef#6f9f7"
- nickname="Frederik Vanrenterghem"
- subject="comment 3"
- date="2013-04-10T13:37:38Z"
- content="""
-The drawback of addding the extra repository as suggested is that the files can't be accessed on the USB drive when plugged into a Windows PC as far as I can tell,since they are stored in git. Isn't this a use case in scope of the assistant?
-
-Note that the setup I created yesterday effectively has resulted in all files being lost, also in the main repository. This because the files on the USB drive became links to their equivalent in the git directory on the usb drive, but they got transferred back to the laptop as 1kb files.
-"""]]
diff --git a/doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_4_1f08fd5dd4f5d8723c2b5391cc3b60f9._comment b/doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_4_1f08fd5dd4f5d8723c2b5391cc3b60f9._comment
deleted file mode 100644
index 6c5d259f2..000000000
--- a/doc/bugs/Add_another_repository_on_USB_drive_causes_sync_loop/comment_4_1f08fd5dd4f5d8723c2b5391cc3b60f9._comment
+++ /dev/null
@@ -1,22 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 4"
- date="2013-04-10T22:58:07Z"
- content="""
-Accessing files from USB on Windows is in scope, but it needs a windows port. Then you could just run git-annex on windows and it would pull the files from USB into your main repository, like the assistant does now on Mac and Linux.
-
------
-
-I suspect you don't have actual irreparable data loss. Or, perhaps not. If you really need to get that data back I can try to help.
-
-As I understand what happened, files were sent over the the USB drive, and you had another assistant running in that repository. It seems to have done something wrong, and taken the 1-line standin files that git uses to represent symbolic links when on a FAT filesystem, and committed those to the annex. These new files were then sent back to your original repository.
-
-So, if you look at `git log --status`, you'll find a commit that touched every file, and if you `git revert` that commit, the tree would be returned to how it was before that rogue assistant chomped on it. The actual contents of the files, which is stored in the annex, will probably then have not been lost. Although if you're using direct mode for your repository it is possible to lose annexed content if a file is overrwitten by a newer version, so I can't guarantee that 100%, like I could for indirect mode.
-
-Anyway, I need to fix this misbehavior of the assistant when run on a FAT filesystem, it seems.
-
-------
-
-I have reproduced the bug that the assistant, in a FAT filesystem, commits symlink standin files. It seems to do this at least at startup, to all such standin files. Oddly, I did not see this behavior before when using the assistant on FAT filesystems on Android.
-"""]]
diff --git a/doc/bugs/Adding_a_repository_as_a___34__remote_server__34___creates_a_bare_repository_next_to_the_existing_one.mdwn b/doc/bugs/Adding_a_repository_as_a___34__remote_server__34___creates_a_bare_repository_next_to_the_existing_one.mdwn
deleted file mode 100644
index c2e05dee0..000000000
--- a/doc/bugs/Adding_a_repository_as_a___34__remote_server__34___creates_a_bare_repository_next_to_the_existing_one.mdwn
+++ /dev/null
@@ -1,21 +0,0 @@
-**What steps will reproduce the problem?**
-
-I generated repositories on two machines an then tried to sync them via ssh (by adding a "Remote server") but I ended up with a third (bare) repository next to my data on the remote server.
-
-**What is the expected output? What do you see instead?**
-
-The assistant should recognize the existing repository (especially the .git directory) and then start syncing only the needed files.
-
-**What version of git-annex are you using? On what operating system?**
-
-git-annex version: 4.20130324, Ubuntu 11.04
-
-**Please provide any additional information below.**
-
-[[!tag /design/assistant]]
-
-> I have made it check for the .git directory and reuse the existing
-> repository if it's there. [[done]] --[[Joey]]
->
-> (The comment about `git-annex-shell` is incorrect; it has nothing
-> to do with this.)
diff --git a/doc/bugs/Adding_a_repository_as_a___34__remote_server__34___creates_a_bare_repository_next_to_the_existing_one/comment_1_cb781d34889d583663e855c4074f8e0e._comment b/doc/bugs/Adding_a_repository_as_a___34__remote_server__34___creates_a_bare_repository_next_to_the_existing_one/comment_1_cb781d34889d583663e855c4074f8e0e._comment
deleted file mode 100644
index 1e36e21ba..000000000
--- a/doc/bugs/Adding_a_repository_as_a___34__remote_server__34___creates_a_bare_repository_next_to_the_existing_one/comment_1_cb781d34889d583663e855c4074f8e0e._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="Xyem"
- ip="87.194.19.134"
- subject="comment 1"
- date="2013-04-11T13:55:29Z"
- content="""
-From what I understand, this happens when the assistant can't use git-annex-shell on the remote SSH server, as I have the same problem. The workaround I used was adding the remote SSH manually:
-
- git remote add ssh://server/path/to/repo
-
-which the assistant recognises and uses properly.
-
-The actual fix is, obviously, get git-annex-shell working. A likely reason it is missing is that because the SSH connection the assistant uses is not interactive, git-annex-shell is not in $PATH.
-
-I think Joey's recommendation ([per our discussion here](http://git-annex.branchable.com/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/#comment-8234271642283b51e173e20e217de3fc)) was to use local or XMPP pairing instead.
-"""]]
diff --git a/doc/bugs/Adding_a_repository_as_a___34__remote_server__34___creates_a_bare_repository_next_to_the_existing_one/comment_2_c0c87957d7c7a09664e60571a2ca0e8c._comment b/doc/bugs/Adding_a_repository_as_a___34__remote_server__34___creates_a_bare_repository_next_to_the_existing_one/comment_2_c0c87957d7c7a09664e60571a2ca0e8c._comment
deleted file mode 100644
index 881980240..000000000
--- a/doc/bugs/Adding_a_repository_as_a___34__remote_server__34___creates_a_bare_repository_next_to_the_existing_one/comment_2_c0c87957d7c7a09664e60571a2ca0e8c._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl99Gxq3NPNvwZHp3PDufaknQH4rZb_KKY"
- nickname="Florian"
- subject="comment 2"
- date="2013-04-12T15:21:11Z"
- content="""
-I found a different workaround. I added the remote repo via the \"remote server\" option. After that I shut down the local assistant and deleted all the new bare repository stuff on the remote machine. After restarting the local assistant syncing worked as expected and no new bare repository was initialized.
-
-On an other machine I was able to transform the bare repository into a non-bare one and check out the files. After that syncing also still worked.
-
-The remote git-annex-shell is working well. I already described this in an other bug report, where I always ended up in it while trying to log into the machine manually.
-"""]]
diff --git a/doc/bugs/Adding_box.com_remote_on_Android_fails_for_me.mdwn b/doc/bugs/Adding_box.com_remote_on_Android_fails_for_me.mdwn
deleted file mode 100644
index 62c6a3796..000000000
--- a/doc/bugs/Adding_box.com_remote_on_Android_fails_for_me.mdwn
+++ /dev/null
@@ -1,20 +0,0 @@
-### Please describe the problem.
-
-After submitting the form in the webapp for adding a box.com remote, I get:
-
- Internal Server Error - WEBDAV failed to write file: "Unauthorized": user error
-
-### What steps will reproduce the problem?
-
-Fill in the box.com add remote form. Username=username, password=password, "share..."=checked, directory=annex, Encryption="Encrypt all data" and hit the "Add repository" button.
-
-### What version of git-annex are you using? On what operating system?
-
- git-annex version 4.20130513-g5185533 on Android 4.2.2
-
-### Please provide any additional information below.
-
-Didn't find a .git/annex/debug.log
-
-> This error seems entirely consistent with you entering the wrong password.
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Adding_box.com_remote_on_Android_fails_for_me/comment_1_0303ce880415d7e043533551c2b24694._comment b/doc/bugs/Adding_box.com_remote_on_Android_fails_for_me/comment_1_0303ce880415d7e043533551c2b24694._comment
deleted file mode 100644
index a55f4eeb2..000000000
--- a/doc/bugs/Adding_box.com_remote_on_Android_fails_for_me/comment_1_0303ce880415d7e043533551c2b24694._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmmLfBDEDFfEOba8Ra46nsnTmoNHFsLObo"
- nickname="Brian"
- subject="It worked my second try"
- date="2013-05-14T00:39:08Z"
- content="""
-I enabled debug logging and tried again and this time the remote was successfully added! Maybe the first time I mistyped my password?
-
-Either way, it is working now and I created a file in my annex directory and the assistant successfully synced it to my box.com repo.
-"""]]
diff --git a/doc/bugs/Adding_git_ssh_remote_fails.mdwn b/doc/bugs/Adding_git_ssh_remote_fails.mdwn
deleted file mode 100644
index 392dc127b..000000000
--- a/doc/bugs/Adding_git_ssh_remote_fails.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-### Please describe the problem.
-
-While trying to add a ssh remote, the webapp promts the error:
-
- Reinitialized existing shared Git repository in /home/chris/annex-test/
- git-annex: please specify a description of this repository
-
-resp.
-
- Initialized empty shared Git repository in /home/chris/annex-test-2/
- git-annex: please specify a description of this repository
-
-### What steps will reproduce the problem?
-
-Adding a ssh git remote.
-
-### What version of git-annex are you using? On what operating system?
-
-4.20130704-gaf18656 linux-amd64 and android
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-only successful ssh key generation in daemon.log
-
-# End of transcript or log.
-"""]]
-
-> [[done]]; bad installation. --[[Joey]]
diff --git a/doc/bugs/Adding_git_ssh_remote_fails/comment_1_05c0bd9ac7c6f0045217fd72fc1f0a1b._comment b/doc/bugs/Adding_git_ssh_remote_fails/comment_1_05c0bd9ac7c6f0045217fd72fc1f0a1b._comment
deleted file mode 100644
index d976fcbb1..000000000
--- a/doc/bugs/Adding_git_ssh_remote_fails/comment_1_05c0bd9ac7c6f0045217fd72fc1f0a1b._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.193"
- subject="comment 1"
- date="2013-07-05T16:04:04Z"
- content="""
-Are you doing this on Android?
-
-Can you please enable debug logging, and post a debug log when this happens?
-"""]]
diff --git a/doc/bugs/Adding_git_ssh_remote_fails/comment_2_df05456cafdd89e8ceea830199f42d45._comment b/doc/bugs/Adding_git_ssh_remote_fails/comment_2_df05456cafdd89e8ceea830199f42d45._comment
deleted file mode 100644
index 89e9523b3..000000000
--- a/doc/bugs/Adding_git_ssh_remote_fails/comment_2_df05456cafdd89e8ceea830199f42d45._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="Chris"
- ip="89.14.216.1"
- subject="Reason found"
- date="2013-07-07T21:21:49Z"
- content="""
-I found the reason for the behavior. On the server, for non-interactive login shells, the right path to git-annex was not set and an old version that was installed by the OS was used instead. I've put the \"export $PATH\" at the right position in .bashrc and now it works. Sorry for the noise.
-
-Best regards, Chris
-"""]]
diff --git a/doc/bugs/Adding_second_remote_repository_over_ssh_fails.mdwn b/doc/bugs/Adding_second_remote_repository_over_ssh_fails.mdwn
deleted file mode 100644
index abb5226be..000000000
--- a/doc/bugs/Adding_second_remote_repository_over_ssh_fails.mdwn
+++ /dev/null
@@ -1,41 +0,0 @@
-What steps will reproduce the problem?
-
-Create a local and "remote server" repository
-
-Create another local repositorty and keep it seperate from the first one. Fails while creating second repository on the remote.
-
-What is the expected output? What do you see instead?
-
-Expected to get two seperate repositories on the client and server. Only first one works.
-
-Got an error:
-
- Failed to make repository
-
- Something went wrong setting up the repository on the remote server.
-
- Transcript: fatal: unrecognized command 'sh -c 'mkdir -p '"'"'second'"'"'&&cd '"'"'second'"'"'&&git init --bare --shared&&git annex init&&mkdir -p ~/.ssh&&if [ ! -e ~/.ssh/git-annex-shell ]; then (echo '"'"'#!/bin/sh'"'"';echo '"'"'set -e'"'"';echo '"'"'if [ "x$SSH_ORIGINAL_COMMAND" != "x" ]; then'"'"';echo '"'"'exec git-annex-shell -c "$SSH_ORIGINAL_COMMAND"'"'"';echo '"'"'else'"'"';echo '"'"'exec git-annex-shell -c "$@"'"'"';echo '"'"'fi'"'"') > ~/.ssh/git-annex-shell; fi&&chmod 700 ~/.ssh/git-annex-shell&&touch ~/.ssh/authorized_keys&&chmod 600 ~/.ssh/authorized_keys&&echo '"'"'command="GIT_ANNEX_SHELL_DIRECTORY='"'"'"'"'"'"'"'"'second'"'"'"'"'"'"'"'"' ~/.ssh/git-annex-shell",no-agent-forwarding,no-port-forwarding,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvoTn+XBdlw/mQlu+NScAeuddUJqJaVXH6KUsO09OddnUvzv4W185ezbAjXfWDgN7ou0Q0xQzwiCzdoSl7T3USJQ1ywTG5Xt2sBV3RIqxyReNA7Nz0yhwWhZBJcFzof34ezNIsi9NVgEJcK2JEs2XqhO5wK5nxEDeays7ti2bqY6V21iOWSy9hlzjD4VTWTEFxQkDp4BCzDpPN934ztOtInwI8ayiTRJZlNQ+ej/AaA+/zOBWNvIFc/96iuMLKY6lLFThw1jNj5r5N7yPaysLdnwTJ3irtCzDygCpD4mau4frrOPvG90ZdcdrQSfIjRtM9nPZ5jIpohfvz0dIfgNFz marvin@marvin-U-100 '"'"' >>~/.ssh/authorized_keys'' git-annex-shell: git-shell failed
-
-
-What version of git-annex are you using? On what operating system?
-
-4.20130413-g5747bf4 ubuntu 12.10 local
-
-3.20120629 debian wheezy remote (also tried 4.20130413-g5747bf4)
-
-Please provide any additional information below.
-
-> This bug would appear to be the same as a bug I fixed today.
->
-> Except this last bit:
-
-**Also noticed if a user has no full name set in unix account, creating
-remote repository always fails**
-
-> So, I'm going to repurpose this bug to track that problem. --[[Joey]]
-
-[[!meta title="assistant can fail to make git repository if remote server is lacking GECOS"]]
-
->> [[done]]; git-annex always checks for missing gecos and enables
->> a workaround. This does mean the server needs to be upgraded in order
->> for the fix to work. --[[Joey]]
diff --git a/doc/bugs/Adding_second_remote_repository_over_ssh_fails/comment_1_308d5f517bf00c8edc53db438de52355._comment b/doc/bugs/Adding_second_remote_repository_over_ssh_fails/comment_1_308d5f517bf00c8edc53db438de52355._comment
deleted file mode 100644
index 6fcf8de7b..000000000
--- a/doc/bugs/Adding_second_remote_repository_over_ssh_fails/comment_1_308d5f517bf00c8edc53db438de52355._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="marvin"
- ip="91.152.75.65"
- subject="comment 1"
- date="2013-04-17T09:11:08Z"
- content="""
-Here is the message from the nameless error:
-
- Failed to make repository
-
- Something went wrong setting up the repository on the remote server.
-
- Transcript: Initialized empty shared Git repository in /home/marvin/first/ init *** Please tell me who you are. Run git config --global user.email \"you@example.com\" git config --global user.name \"Your Name\" to set your account's default identity. Omit --global to set the identity only in this repository. fatal: empty ident <marvin@testy.mydomain.fi > not allowed git-annex: user error (git [\"--git-dir=/home/marvin/first\",\"commit-tree\",\"4b825dc642cb6eb9a060e54bf8d69288fbee4904\"] exited 128) failed git-annex: init: 1 failed
-"""]]
diff --git a/doc/bugs/Adding_unencrypted_repo_on_drive_in_webapp_gives_internal_server_error__.mdwn b/doc/bugs/Adding_unencrypted_repo_on_drive_in_webapp_gives_internal_server_error__.mdwn
deleted file mode 100644
index ab98c631e..000000000
--- a/doc/bugs/Adding_unencrypted_repo_on_drive_in_webapp_gives_internal_server_error__.mdwn
+++ /dev/null
@@ -1,69 +0,0 @@
-### Please describe the problem.
-
-"Internal Server Error This git repository is encrypted with a GnuPG key that you do not have" after having asked *not* to use encryption.
-
-### What steps will reproduce the problem?
-
-Here's what I did:
-
-On Ubuntu 10.4, install git-annex according to http://git-annex.branchable.com/install/Ubuntu/ then:
-
-$ git-annex webapp
-
-Create repo at suggested path Desktop/annex/.
-Add a file to that dir. Create subdir, move file there.
-Select "Add another repository" in webapp, "Removable drive", select external usb drive, leave suggested path "annex", "Use this drive", "Do not encrypt repository".
-
--> shows "Internal Server Error
-This git repository is encrypted with a GnuPG key that you do not have.
-git-annex version 4.20131002"
-
-
-### What version of git-annex are you using? On what operating system?
-
-git-annex version 4.20131002, Ubuntu 12.04.3 LTS
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is wit[2013-10-19 00:33:55 BST] main: starting assistant version 4.20131002
-(Recording state in git...)
-(scanning...) [2013-10-19 00:33:55 BST] Watcher: Performing startup scan
-(started...)
-
- The installed version of git is too old for .gitignores to be honored by git-annex.
-[2013-10-19 00:35:56 BST] Committer: Adding Git Annex..ation.odt
-add Git Annex installation.odt (checksum...) [2013-10-19 00:35:57 BST] Committer: Committing changes to git
-[2013-10-19 00:37:38 BST] Committer: Adding Git Annex..ation.odt
-[2013-10-19 00:37:38 BST] Committer: Committing changes to git
-git: 'remote-gcrypt' is not a git command. See 'git --help'.
-ok
-(Recording state in git...)
-(Recording state in git...)
-ok
-(Recording state in git...)
-(Recording state in git...)
-19/Oct/2013:00:38:54 +0100 [Error#yesod-core] This git repository is encrypted with a GnuPG key that you do not have. @(yesod-core-1.1.8.3:Yesod.Internal.Core ./Yesod/Internal/Core.hs:550:5)
-git: 'remote-gcrypt' is not a git command. See 'git --help'.
-19/Oct/2013:00:39:09 +0100 [Error#yesod-core] This git repository is encrypted with a GnuPG key that you do not have. @(yesod-core-1.1.8.3:Yesod.Internal.Core ./Yesod/Internal/Core.hs:550:5)
-.........+++++
-
-Not enough random bytes available. Please do some other work to give
-the OS a chance to collect more entropy! (Need 66 more bytes)
-.............+++++
-gpg: key E0424680 marked as ultimately trusted
-git: 'remote-gcrypt' is not a git command. See 'git --help'.
-19/Oct/2013:00:41:19 +0100 [Error#yesod-core] This git repository is encrypted with a GnuPG key that you do not have. @(yesod-core-1.1.8.3:Yesod.Internal.Core ./Yesod/Internal/Core.hs:550:5)
-git: 'remote-gcrypt' is not a git command. See 'git --help'.
-19/Oct/2013:00:54:33 +0100 [Error#yesod-core] This git repository is encrypted with a GnuPG key that you do not have. @(yesod-core-1.1.8.3:Yesod.Internal.Core ./Yesod/Internal/Core.hs:550:5)
-h the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-I'm not at my computer, will check upstream Git later. Sorry if this has been reported before.
-
-> This only occurred when git-remote-gcrypt was not installed.
-> I've fixed the bug. [[done]] --[[Joey]]
diff --git a/doc/bugs/Addurl_with_quvi_not_working.mdwn b/doc/bugs/Addurl_with_quvi_not_working.mdwn
deleted file mode 100644
index 279176bbd..000000000
--- a/doc/bugs/Addurl_with_quvi_not_working.mdwn
+++ /dev/null
@@ -1,74 +0,0 @@
-### Please describe the problem.
-
-When adding a video with "addurl", git-annex claims that quvi does not know how to download the url. When using "quvi get" on the same url the video gets downloaded.
-
-This seems to be independent of the video hosting site and occured on all I tested.
-
-### What steps will reproduce the problem?
-
-Download a video with
-
- git annex addurl "[URL]"
-
-and do the same with
-
- quvi get "[URL]"
-
-.
-
-
-### What version of git-annex are you using? On what operating system?
-
-OS: Archlinux, fully updated
-
- git-annex version: 5.20131118-gc7e5cde
- build flags: Assistant Webapp Pairing S3 WebDAV Inotify DBus XMPP Feeds Quvi TDFA
- key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
- remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
- local repository version: 3
- default repository version: 3
- supported repository versions: 3 5
- upgrade supported from repository versions: 0 1 2 4
-
-
-### Please provide any additional information below.
-
-# Git-annex:
-
- user@asus aaa [master] % git annex addurl "https://www.youtube.com/watch?v=TUrQsK5ouSg"
- quvi v0.9.5
- built on 2013-11-12 17:02:06 +0000 for x86_64-unknown-linux-gnu
- with gcc, -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4
- configuration: --prefix=/usr
- libquvi v0.9.4
- built on 2013-11-12 16:58:23 +0000 for x86_64-unknown-linux-gnu
- with gcc, -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4
- configuration: --prefix=/usr
- libquvi-scripts v0.9.20131104
- configuration: --prefix=/usr --with-nsfw --with-geoblocked
-
- Copyright (C) 2012,2013 Toni Gundogdu <legatvs@gmail.com>
- quvi comes with ABSOLUTELY NO WARRANTY. You may redistribute copies of
- quvi under the terms of the GNU Affero General Public License version 3
- or later. For more information, see <http://www.gnu.org/licenses/agpl.html>.
-
- To contact the developers, please mail to <quvi-devel@lists.sourceforge.net>
-
- Copyright (C) 2012,2013 Toni Gundogdu <legatvs@gmail.com>
- quvi comes with ABSOLUTELY NO WARRANTY. You may redistribute copies of
- quvi under the terms of the GNU Affero General Public License version 3
- or later. For more information, see <http://www.gnu.org/licenses/agpl.html>.
-
- To contact the developers, please mail to <quvi-devel@lists.sourceforge.net>
- git-annex: quvi does not know how to download url https://www.youtube.com/watch?v=TUrQsK5ouSg
-
-# Quvi:
-
- user@asus aaa [master] % quvi get "https://www.youtube.com/watch?v=TUrQsK5ouSg"
- file: GitAnnex Assistant Hak5 14223.mp4 [media]
- content length: 162.2Mi content type: video/mp4 mode: resume
- copy: --=- 100% 488.9Ki/s 00:05:37
-
-> git annex 5.20131127 is the first to support quvi 0.9.
-> (And only if built on a system with that version of quvi installed).
-> Upgrade. [[done]] --[[Joey]]
diff --git a/doc/bugs/Allow_syncing_to_a_specific_directory_on_a_USB_remote.mdwn b/doc/bugs/Allow_syncing_to_a_specific_directory_on_a_USB_remote.mdwn
deleted file mode 100644
index 9c6a0c9fc..000000000
--- a/doc/bugs/Allow_syncing_to_a_specific_directory_on_a_USB_remote.mdwn
+++ /dev/null
@@ -1,30 +0,0 @@
-This follows up to the [comment made by
-Laszlo](http://git-annex.branchable.com/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/#comment-f26d3b6b45bb66601ecfaa883ace161c)
-on the [recent
-poll](http://git-annex.branchable.com/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/).
-
-I too need to be able to select the directory on the remote drive that the
-annex will be synced to.
-
-If I just add a remote drive via the web app, it syncs the repository to
-`/mnt/usb/annex`, and it looks like it just creates a bare repository in
-that folder. I need the repository to be synced to something like
-`/mnt/usb/subfolder/myspecifiedfoldername` and I need that remote to be a
-full repository.
-
-My use case is that I use the USB drive to keep annexes in sync between two
-computers. I have multiple annexes that need to be synced between the two
-computers, and none of them are in a directory called `annex`. I also need
-to be able to plug the drive into other computers and access the files
-directly, without doing a `git clone` or anything like that. I have all of
-this setup and working fine with just plain old git annex, but the web app
-does not seem to support creating new repositories with this workflow.
-
-I think it makes a lot of sense to allow the web application to add a new
-remote that is simply a directory. People like me could specify the path of
-the directory to be on the mounted USB drive. Others may want to add a
-remote that is a mounted network share or something like that.
-
-> [[done]], the webapp now has a "Add another repository" option,
-> and you can just enter the path to whatever place you like inside a USB
-> drive. --[[Joey]]
diff --git a/doc/bugs/Allow_syncing_to_a_specific_directory_on_a_USB_remote/comment_1_13ecedfbb34c3564af3a790b8bf0f591._comment b/doc/bugs/Allow_syncing_to_a_specific_directory_on_a_USB_remote/comment_1_13ecedfbb34c3564af3a790b8bf0f591._comment
deleted file mode 100644
index cf13d97c1..000000000
--- a/doc/bugs/Allow_syncing_to_a_specific_directory_on_a_USB_remote/comment_1_13ecedfbb34c3564af3a790b8bf0f591._comment
+++ /dev/null
@@ -1,25 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmYiJgOvC4IDYkr2KIjMlfVD9r_1Sij_jY"
- nickname="Douglas"
- subject="Not limited to usb drives"
- date="2013-01-23T02:08:38Z"
- content="""
-I have a machine with multiple hard drives. One of these drives is strictly used for backups, ie /dev/sdc holds /home and /dev/sdd is a giant drive that i keep a backup of important items that I would like to have readily available in case of a drive failure. Somewhere in \"add more repositories\" the assistant should be able to create a copy of the repository on the same computer. When I saw the add a removable drive feature i thought it might work but it will not let me select a specific directory.
-
-Current setup, I have the assistant managing a group of repos:
-
- /home/me/Videos.Annex
- /home/me/Photos.Annex
- /home/me/Documents.Annex
-
-
-I access these files via /home/me/DIRECTORY. However in case my /home drive breaks I would like to know that git-annex was faithfully keeping a copy in /mnt/bigdrive as well as on me@someothermachine. I would like to use the assistant to manage:
-
- /mnt/bigdrive/Annex.Backups/Videos.Annex
- /mnt/bigdrive/Annex.Backups/Photos.Annex
- /mnt/bigdrive/Annex.Backups/Documents.Annex
-
-
-
-
-"""]]
diff --git a/doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__.mdwn b/doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__.mdwn
deleted file mode 100644
index d7035432a..000000000
--- a/doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__.mdwn
+++ /dev/null
@@ -1,22 +0,0 @@
-### Please describe the problem.
-On Andorid adding a respository on box.net account to an exisiting repository does not work. The following error message is displayed:
-
-
-Internal Server Error
-WebDAV failed to write file: /etc/ssl/certs/: getDirectoryContents: does not exist (No such file or directory): user error
-
-The directory does not exist, indeed.
-
-### What steps will reproduce the problem?
-Add a repository on a Box.net server to an existing repository from the webapp (encrypted and shared with other devices and friends). The error appears after clicking on "Add repository"
-
-
-### What version of git-annex are you using? On what operating system?
-
-git annex 5.20140128-g32f1f68 on Android 4.1.2 (Samsung GTN8010)
-Build flags: Assistant Webapp S3 WebDAV Inotify XMPP DNS Feeds Quvi TDFA CryptoHash
-
-> Cooincidentially I noticed I'd dropped the patch that fixes that on
-> Android, and have been in the process of rebuilding the Android
-> autobuilder with it today. That build has finished now. [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__/comment_1_91787407727f7ed833d5970d3226d0cb._comment b/doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__/comment_1_91787407727f7ed833d5970d3226d0cb._comment
deleted file mode 100644
index 45d5da95e..000000000
--- a/doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__/comment_1_91787407727f7ed833d5970d3226d0cb._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkI9pq1WH6MWeExXHVQVEsniT3DdFv4AB8"
- nickname="Roberto"
- subject="problem still persists"
- date="2014-02-10T22:55:33Z"
- content="""
-I'm trying right now the latest build (5.20140210-gd99db49) but the problem persists. Am I missing something?
-"""]]
diff --git a/doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__/comment_2_f4c52fe33e9c4c107c2469fabb0c6826._comment b/doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__/comment_2_f4c52fe33e9c4c107c2469fabb0c6826._comment
deleted file mode 100644
index d566170c9..000000000
--- a/doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__/comment_2_f4c52fe33e9c4c107c2469fabb0c6826._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.172"
- subject="comment 2"
- date="2014-02-10T23:25:42Z"
- content="""
-Hmm, I've verified that the certificate library I built for android uses the right path. But for some reason that path is not showing up in the android executable.
-
-I think perhaps things have changed and a different library is now being used! Probably <http://hackage.haskell.org/package/x509-system>
-"""]]
diff --git a/doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__/comment_3_20c1f9399321dd85cb584b8845140b1d._comment b/doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__/comment_3_20c1f9399321dd85cb584b8845140b1d._comment
deleted file mode 100644
index d728e35a8..000000000
--- a/doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__/comment_3_20c1f9399321dd85cb584b8845140b1d._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.172"
- subject="finished rebuilding everything"
- date="2014-02-11T17:48:07Z"
- content="""
-All android builds are updated. Verified the path this time in the binary.
-"""]]
diff --git a/doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__/comment_4_d92c30061e087878a2462b5a2e495346._comment b/doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__/comment_4_d92c30061e087878a2462b5a2e495346._comment
deleted file mode 100644
index 299364913..000000000
--- a/doc/bugs/Android:_Adding_Repository_on_Box.net_fails_with___34__Internal_Server_Error__34__/comment_4_d92c30061e087878a2462b5a2e495346._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkI9pq1WH6MWeExXHVQVEsniT3DdFv4AB8"
- nickname="Roberto"
- subject="fix confirmed"
- date="2014-02-12T12:05:42Z"
- content="""
-I can confirm the problem is now fixed.
-
-Unfortunately a new problem has emerged with gpg that might be related to other open issues. I will try to investigate it further before opening a new ticket.
-
-By the way thank you very much for your great work. I'm eager to see the new metadata framework in place. It sounds extremely interesting!
-"""]]
diff --git a/doc/bugs/Android:_Clocking_on___34__Files__34___in_the_Dashboard_seems_to_do_nothing.mdwn b/doc/bugs/Android:_Clocking_on___34__Files__34___in_the_Dashboard_seems_to_do_nothing.mdwn
deleted file mode 100644
index 147804d92..000000000
--- a/doc/bugs/Android:_Clocking_on___34__Files__34___in_the_Dashboard_seems_to_do_nothing.mdwn
+++ /dev/null
@@ -1,24 +0,0 @@
-### Please describe the problem.
-
-I expected at least a listing of files... ideally with basic navigation and options to select/deselect to be fetched/dropped
-
-### What steps will reproduce the problem?
-
-Click on "Files" link near "Repository: " on top right of the Dashboard
-
-### What version of git-annex are you using? On what operating system?
-
-last Android build from Nov 18 2013
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> Removed the UI element unless and until a file browser is available on
-> Android. [[done]] --[[Joey]]
diff --git a/doc/bugs/Android:_Clocking_on___34__Files__34___in_the_Dashboard_seems_to_do_nothing/comment_1_a9b03d4f4760fea2754a4dc93547f0a3._comment b/doc/bugs/Android:_Clocking_on___34__Files__34___in_the_Dashboard_seems_to_do_nothing/comment_1_a9b03d4f4760fea2754a4dc93547f0a3._comment
deleted file mode 100644
index 69cfaefd2..000000000
--- a/doc/bugs/Android:_Clocking_on___34__Files__34___in_the_Dashboard_seems_to_do_nothing/comment_1_a9b03d4f4760fea2754a4dc93547f0a3._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.64"
- subject="comment 1"
- date="2013-11-26T16:12:42Z"
- content="""
-git-annex does not have a built-in file manager. I don't know how to get android to display a file manager; if there's a command that can be run, or an intent that can be used to get one, git-annex could do that. But I don't think android typically includes a file manager, I have only seen them as OEM addons on some of the more laptop form factor android devices.
-
-I think that the android web browser also does not support browsing file:// uri, which is what git-annex falls back to when it cannot file a file manager to top.
-"""]]
diff --git a/doc/bugs/Android:_Clocking_on___34__Files__34___in_the_Dashboard_seems_to_do_nothing/comment_2_015e859a16b1ce4c0c7601df0594d555._comment b/doc/bugs/Android:_Clocking_on___34__Files__34___in_the_Dashboard_seems_to_do_nothing/comment_2_015e859a16b1ce4c0c7601df0594d555._comment
deleted file mode 100644
index 039acd440..000000000
--- a/doc/bugs/Android:_Clocking_on___34__Files__34___in_the_Dashboard_seems_to_do_nothing/comment_2_015e859a16b1ce4c0c7601df0594d555._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://yarikoptic.myopenid.com/"
- nickname="site-myopenid"
- subject="comment 2"
- date="2013-11-27T04:36:14Z"
- content="""
-Thanks for the explanation! Might be better then to remove Files in Android build to prevent confusion?
-
-OI filemanager http://www.openintents.org/en/filemanager I believe is open source. according to app info it is only 1.53MB (thus negligible in comparison) and probably could be 'collaborated with' so they could ship basic support for annex (git annex get/drop)... I just don't know if it would be possible to start existing OI manager under annex user (that would be needed right?).
-"""]]
diff --git a/doc/bugs/Android:_no___34____47__etc__47__resolv.conf__34___when_submitting_jabber_user_and_password..mdwn b/doc/bugs/Android:_no___34____47__etc__47__resolv.conf__34___when_submitting_jabber_user_and_password..mdwn
deleted file mode 100644
index 1721fca79..000000000
--- a/doc/bugs/Android:_no___34____47__etc__47__resolv.conf__34___when_submitting_jabber_user_and_password..mdwn
+++ /dev/null
@@ -1,20 +0,0 @@
-### Please describe the problem.
-
-I get this error when configuring jabber:
-
-/etc/resolv.conf: openFile: does not exist (No such file or directory)
-
-### What steps will reproduce the problem?
-
-Just submit the jabber username and password.
-
-### What version of git-annex are you using? On what operating system?
-
-$ git annex version
-git-annex version: 5.20131130-gc25be33
-build flags: Assistant Webapp Testsuite S3 WebDAV Inotify XMPP DNS Feeds Quvi TDFA CryptoHash
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
-remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
-
-> This was already fixed in [[!commit > b2e9339b57ae5a4677dc4197d135d33f18e18f9c]]
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Android_4.4_install_fails_with_permission_denied_errors.mdwn b/doc/bugs/Android_4.4_install_fails_with_permission_denied_errors.mdwn
new file mode 100644
index 000000000..f8baa3b5c
--- /dev/null
+++ b/doc/bugs/Android_4.4_install_fails_with_permission_denied_errors.mdwn
@@ -0,0 +1,295 @@
+### Please describe the problem.
+
+Installing git-annex on a new Nexus 5 with Android 4.4.4 using [Android 4.4 and 4.3 git-annex.apk](http://downloads.kitenet.net/git-annex/android/current/4.3/git-annex.apk) does not give me a working git-annex environment. It seems permission is denied to install many of the app files.
+
+
+### What steps will reproduce the problem?
+
+1. Install git-annex
+2. From within `adb shell`, run: `/data/data/ga.androidterm/runshell`
+3. Try one of the included programs, e.g., `git`
+
+
+### What version of git-annex are you using? On what operating system?
+
+The current (as of 2014-08-30) git-annex for Android 4.3 and up on Android 4.4.4.
+
+
+### Please provide any additional information below.
+
+Running `/data/data/ga.androidterm/runshell` from `adb shell` gives me:
+
+[[!format txt """
+shell@hammerhead:/ $ /data/data/ga.androidterm/runshell
+Falling back to hardcoded app location; cannot find expected files in /data/app-lib
+shell@hammerhead:/sdcard/git-annex.home $ ls
+git-annex-install.log
+shell@hammerhead:/sdcard/git-annex.home $ cat git-annex-install.log
+Installation starting to /data/data/ga.androidterm
+71c22504d777380dd59d2128b97715fde9ef6bec
+mv: can't rename '/data/data/ga.androidterm/bin': Permission denied
+installing busybox
+ln: /data/data/ga.androidterm/bin/busybox: Permission denied
+installing git-annex
+ln: /data/data/ga.androidterm/bin/git-annex: Permission denied
+installing git-shell
+ln: /data/data/ga.androidterm/bin/git-shell: Permission denied
+installing git-upload-pack
+ln: /data/data/ga.androidterm/bin/git-upload-pack: Permission denied
+installing git
+ln: /data/data/ga.androidterm/bin/git: Permission denied
+installing gpg
+ln: /data/data/ga.androidterm/bin/gpg: Permission denied
+installing rsync
+ln: /data/data/ga.androidterm/bin/rsync: Permission denied
+installing ssh
+ln: /data/data/ga.androidterm/bin/ssh: Permission denied
+installing ssh-keygen
+ln: /data/data/ga.androidterm/bin/ssh-keygen: Permission denied
+busybox: /data/data/ga.androidterm/bin/[: Permission denied
+busybox: /data/data/ga.androidterm/bin/[[: Permission denied
+busybox: /data/data/ga.androidterm/bin/ar: Permission denied
+busybox: /data/data/ga.androidterm/bin/arp: Permission denied
+busybox: /data/data/ga.androidterm/bin/ash: Permission denied
+busybox: /data/data/ga.androidterm/bin/base64: Permission denied
+busybox: /data/data/ga.androidterm/bin/basename: Permission denied
+busybox: /data/data/ga.androidterm/bin/beep: Permission denied
+busybox: /data/data/ga.androidterm/bin/blkid: Permission denied
+busybox: /data/data/ga.androidterm/bin/blockdev: Permission denied
+busybox: /data/data/ga.androidterm/bin/bunzip2: Permission denied
+busybox: /data/data/ga.androidterm/bin/bzcat: Permission denied
+busybox: /data/data/ga.androidterm/bin/bzip2: Permission denied
+busybox: /data/data/ga.androidterm/bin/cal: Permission denied
+busybox: /data/data/ga.androidterm/bin/cat: Permission denied
+busybox: /data/data/ga.androidterm/bin/catv: Permission denied
+busybox: /data/data/ga.androidterm/bin/chat: Permission denied
+busybox: /data/data/ga.androidterm/bin/chattr: Permission denied
+busybox: /data/data/ga.androidterm/bin/chgrp: Permission denied
+busybox: /data/data/ga.androidterm/bin/chmod: Permission denied
+busybox: /data/data/ga.androidterm/bin/chown: Permission denied
+busybox: /data/data/ga.androidterm/bin/chpst: Permission denied
+busybox: /data/data/ga.androidterm/bin/chroot: Permission denied
+busybox: /data/data/ga.androidterm/bin/chrt: Permission denied
+busybox: /data/data/ga.androidterm/bin/chvt: Permission denied
+busybox: /data/data/ga.androidterm/bin/cksum: Permission denied
+busybox: /data/data/ga.androidterm/bin/clear: Permission denied
+busybox: /data/data/ga.androidterm/bin/cmp: Permission denied
+busybox: /data/data/ga.androidterm/bin/comm: Permission denied
+busybox: /data/data/ga.androidterm/bin/cp: Permission denied
+busybox: /data/data/ga.androidterm/bin/cpio: Permission denied
+busybox: /data/data/ga.androidterm/bin/cttyhack: Permission denied
+busybox: /data/data/ga.androidterm/bin/cut: Permission denied
+busybox: /data/data/ga.androidterm/bin/dc: Permission denied
+busybox: /data/data/ga.androidterm/bin/dd: Permission denied
+busybox: /data/data/ga.androidterm/bin/deallocvt: Permission denied
+busybox: /data/data/ga.androidterm/bin/devmem: Permission denied
+busybox: /data/data/ga.androidterm/bin/diff: Permission denied
+busybox: /data/data/ga.androidterm/bin/dirname: Permission denied
+busybox: /data/data/ga.androidterm/bin/dmesg: Permission denied
+busybox: /data/data/ga.androidterm/bin/dnsd: Permission denied
+busybox: /data/data/ga.androidterm/bin/dos2unix: Permission denied
+busybox: /data/data/ga.androidterm/bin/dpkg: Permission denied
+busybox: /data/data/ga.androidterm/bin/dpkg-deb: Permission denied
+busybox: /data/data/ga.androidterm/bin/du: Permission denied
+busybox: /data/data/ga.androidterm/bin/dumpkmap: Permission denied
+busybox: /data/data/ga.androidterm/bin/echo: Permission denied
+busybox: /data/data/ga.androidterm/bin/envdir: Permission denied
+busybox: /data/data/ga.androidterm/bin/envuidgid: Permission denied
+busybox: /data/data/ga.androidterm/bin/expand: Permission denied
+busybox: /data/data/ga.androidterm/bin/fakeidentd: Permission denied
+busybox: /data/data/ga.androidterm/bin/false: Permission denied
+busybox: /data/data/ga.androidterm/bin/fbset: Permission denied
+busybox: /data/data/ga.androidterm/bin/fbsplash: Permission denied
+busybox: /data/data/ga.androidterm/bin/fdflush: Permission denied
+busybox: /data/data/ga.androidterm/bin/fdformat: Permission denied
+busybox: /data/data/ga.androidterm/bin/fdisk: Permission denied
+busybox: /data/data/ga.androidterm/bin/fgconsole: Permission denied
+busybox: /data/data/ga.androidterm/bin/find: Permission denied
+busybox: /data/data/ga.androidterm/bin/findfs: Permission denied
+busybox: /data/data/ga.androidterm/bin/flash_lock: Permission denied
+busybox: /data/data/ga.androidterm/bin/flash_unlock: Permission denied
+busybox: /data/data/ga.androidterm/bin/flashcp: Permission denied
+busybox: /data/data/ga.androidterm/bin/flock: Permission denied
+busybox: /data/data/ga.androidterm/bin/fold: Permission denied
+busybox: /data/data/ga.androidterm/bin/freeramdisk: Permission denied
+busybox: /data/data/ga.androidterm/bin/ftpd: Permission denied
+busybox: /data/data/ga.androidterm/bin/ftpget: Permission denied
+busybox: /data/data/ga.androidterm/bin/ftpput: Permission denied
+busybox: /data/data/ga.androidterm/bin/fuser: Permission denied
+busybox: /data/data/ga.androidterm/bin/getopt: Permission denied
+busybox: /data/data/ga.androidterm/bin/grep: Permission denied
+busybox: /data/data/ga.androidterm/bin/gunzip: Permission denied
+busybox: /data/data/ga.androidterm/bin/gzip: Permission denied
+busybox: /data/data/ga.androidterm/bin/hd: Permission denied
+busybox: /data/data/ga.androidterm/bin/hdparm: Permission denied
+busybox: /data/data/ga.androidterm/bin/head: Permission denied
+busybox: /data/data/ga.androidterm/bin/hexdump: Permission denied
+busybox: /data/data/ga.androidterm/bin/httpd: Permission denied
+busybox: /data/data/ga.androidterm/bin/ifconfig: Permission denied
+busybox: /data/data/ga.androidterm/bin/ifdown: Permission denied
+busybox: /data/data/ga.androidterm/bin/ifup: Permission denied
+busybox: /data/data/ga.androidterm/bin/inotifyd: Permission denied
+busybox: /data/data/ga.androidterm/bin/install: Permission denied
+busybox: /data/data/ga.androidterm/bin/iostat: Permission denied
+busybox: /data/data/ga.androidterm/bin/ip: Permission denied
+busybox: /data/data/ga.androidterm/bin/ipaddr: Permission denied
+busybox: /data/data/ga.androidterm/bin/ipcalc: Permission denied
+busybox: /data/data/ga.androidterm/bin/iplink: Permission denied
+busybox: /data/data/ga.androidterm/bin/iproute: Permission denied
+busybox: /data/data/ga.androidterm/bin/iprule: Permission denied
+busybox: /data/data/ga.androidterm/bin/iptunnel: Permission denied
+busybox: /data/data/ga.androidterm/bin/klogd: Permission denied
+busybox: /data/data/ga.androidterm/bin/ln: Permission denied
+busybox: /data/data/ga.androidterm/bin/loadkmap: Permission denied
+busybox: /data/data/ga.androidterm/bin/losetup: Permission denied
+busybox: /data/data/ga.androidterm/bin/lpd: Permission denied
+busybox: /data/data/ga.androidterm/bin/lpq: Permission denied
+busybox: /data/data/ga.androidterm/bin/lpr: Permission denied
+busybox: /data/data/ga.androidterm/bin/ls: Permission denied
+busybox: /data/data/ga.androidterm/bin/lsattr: Permission denied
+busybox: /data/data/ga.androidterm/bin/lsof: Permission denied
+busybox: /data/data/ga.androidterm/bin/lspci: Permission denied
+busybox: /data/data/ga.androidterm/bin/lsusb: Permission denied
+busybox: /data/data/ga.androidterm/bin/lzcat: Permission denied
+busybox: /data/data/ga.androidterm/bin/lzma: Permission denied
+busybox: /data/data/ga.androidterm/bin/lzop: Permission denied
+busybox: /data/data/ga.androidterm/bin/lzopcat: Permission denied
+busybox: /data/data/ga.androidterm/bin/makedevs: Permission denied
+busybox: /data/data/ga.androidterm/bin/makemime: Permission denied
+busybox: /data/data/ga.androidterm/bin/man: Permission denied
+busybox: /data/data/ga.androidterm/bin/md5sum: Permission denied
+busybox: /data/data/ga.androidterm/bin/mkdir: Permission denied
+busybox: /data/data/ga.androidterm/bin/mkfifo: Permission denied
+busybox: /data/data/ga.androidterm/bin/mknod: Permission denied
+busybox: /data/data/ga.androidterm/bin/mkswap: Permission denied
+busybox: /data/data/ga.androidterm/bin/mktemp: Permission denied
+busybox: /data/data/ga.androidterm/bin/more: Permission denied
+busybox: /data/data/ga.androidterm/bin/mpstat: Permission denied
+busybox: /data/data/ga.androidterm/bin/mv: Permission denied
+busybox: /data/data/ga.androidterm/bin/nbd-client: Permission denied
+busybox: /data/data/ga.androidterm/bin/nc: Permission denied
+busybox: /data/data/ga.androidterm/bin/netstat: Permission denied
+busybox: /data/data/ga.androidterm/bin/nice: Permission denied
+busybox: /data/data/ga.androidterm/bin/nmeter: Permission denied
+busybox: /data/data/ga.androidterm/bin/nohup: Permission denied
+busybox: /data/data/ga.androidterm/bin/od: Permission denied
+busybox: /data/data/ga.androidterm/bin/openvt: Permission denied
+busybox: /data/data/ga.androidterm/bin/patch: Permission denied
+busybox: /data/data/ga.androidterm/bin/pidof: Permission denied
+busybox: /data/data/ga.androidterm/bin/pipe_progress: Permission denied
+busybox: /data/data/ga.androidterm/bin/pmap: Permission denied
+busybox: /data/data/ga.androidterm/bin/popmaildir: Permission denied
+busybox: /data/data/ga.androidterm/bin/printenv: Permission denied
+busybox: /data/data/ga.androidterm/bin/printf: Permission denied
+busybox: /data/data/ga.androidterm/bin/pscan: Permission denied
+busybox: /data/data/ga.androidterm/bin/pstree: Permission denied
+busybox: /data/data/ga.androidterm/bin/pwd: Permission denied
+busybox: /data/data/ga.androidterm/bin/pwdx: Permission denied
+busybox: /data/data/ga.androidterm/bin/raidautorun: Permission denied
+busybox: /data/data/ga.androidterm/bin/rdev: Permission denied
+busybox: /data/data/ga.androidterm/bin/readlink: Permission denied
+busybox: /data/data/ga.androidterm/bin/readprofile: Permission denied
+busybox: /data/data/ga.androidterm/bin/realpath: Permission denied
+busybox: /data/data/ga.androidterm/bin/reformime: Permission denied
+busybox: /data/data/ga.androidterm/bin/renice: Permission denied
+busybox: /data/data/ga.androidterm/bin/reset: Permission denied
+busybox: /data/data/ga.androidterm/bin/resize: Permission denied
+busybox: /data/data/ga.androidterm/bin/rev: Permission denied
+busybox: /data/data/ga.androidterm/bin/rm: Permission denied
+busybox: /data/data/ga.androidterm/bin/rmdir: Permission denied
+busybox: /data/data/ga.androidterm/bin/route: Permission denied
+busybox: /data/data/ga.androidterm/bin/rpm: Permission denied
+busybox: /data/data/ga.androidterm/bin/rpm2cpio: Permission denied
+busybox: /data/data/ga.androidterm/bin/rtcwake: Permission denied
+busybox: /data/data/ga.androidterm/bin/run-parts: Permission denied
+busybox: /data/data/ga.androidterm/bin/runsv: Permission denied
+busybox: /data/data/ga.androidterm/bin/runsvdir: Permission denied
+busybox: /data/data/ga.androidterm/bin/rx: Permission denied
+busybox: /data/data/ga.androidterm/bin/script: Permission denied
+busybox: /data/data/ga.androidterm/bin/scriptreplay: Permission denied
+busybox: /data/data/ga.androidterm/bin/sed: Permission denied
+busybox: /data/data/ga.androidterm/bin/sendmail: Permission denied
+busybox: /data/data/ga.androidterm/bin/seq: Permission denied
+busybox: /data/data/ga.androidterm/bin/setconsole: Permission denied
+busybox: /data/data/ga.androidterm/bin/setkeycodes: Permission denied
+busybox: /data/data/ga.androidterm/bin/setlogcons: Permission denied
+busybox: /data/data/ga.androidterm/bin/setserial: Permission denied
+busybox: /data/data/ga.androidterm/bin/setsid: Permission denied
+busybox: /data/data/ga.androidterm/bin/setuidgid: Permission denied
+busybox: /data/data/ga.androidterm/bin/sh: Permission denied
+busybox: /data/data/ga.androidterm/bin/sha1sum: Permission denied
+busybox: /data/data/ga.androidterm/bin/sha256sum: Permission denied
+busybox: /data/data/ga.androidterm/bin/sha512sum: Permission denied
+busybox: /data/data/ga.androidterm/bin/showkey: Permission denied
+busybox: /data/data/ga.androidterm/bin/sleep: Permission denied
+busybox: /data/data/ga.androidterm/bin/smemcap: Permission denied
+busybox: /data/data/ga.androidterm/bin/softlimit: Permission denied
+busybox: /data/data/ga.androidterm/bin/sort: Permission denied
+busybox: /data/data/ga.androidterm/bin/split: Permission denied
+busybox: /data/data/ga.androidterm/bin/start-stop-daemon: Permission denied
+busybox: /data/data/ga.androidterm/bin/strings: Permission denied
+busybox: /data/data/ga.androidterm/bin/stty: Permission denied
+busybox: /data/data/ga.androidterm/bin/sum: Permission denied
+busybox: /data/data/ga.androidterm/bin/sv: Permission denied
+busybox: /data/data/ga.androidterm/bin/svlogd: Permission denied
+busybox: /data/data/ga.androidterm/bin/sync: Permission denied
+busybox: /data/data/ga.androidterm/bin/sysctl: Permission denied
+busybox: /data/data/ga.androidterm/bin/tac: Permission denied
+busybox: /data/data/ga.androidterm/bin/tail: Permission denied
+busybox: /data/data/ga.androidterm/bin/tar: Permission denied
+busybox: /data/data/ga.androidterm/bin/tcpsvd: Permission denied
+busybox: /data/data/ga.androidterm/bin/tee: Permission denied
+busybox: /data/data/ga.androidterm/bin/test: Permission denied
+busybox: /data/data/ga.androidterm/bin/time: Permission denied
+busybox: /data/data/ga.androidterm/bin/timeout: Permission denied
+busybox: /data/data/ga.androidterm/bin/top: Permission denied
+busybox: /data/data/ga.androidterm/bin/touch: Permission denied
+busybox: /data/data/ga.androidterm/bin/tr: Permission denied
+busybox: /data/data/ga.androidterm/bin/true: Permission denied
+busybox: /data/data/ga.androidterm/bin/ttysize: Permission denied
+busybox: /data/data/ga.androidterm/bin/tunctl: Permission denied
+busybox: /data/data/ga.androidterm/bin/tune2fs: Permission denied
+busybox: /data/data/ga.androidterm/bin/udhcpc: Permission denied
+busybox: /data/data/ga.androidterm/bin/uname: Permission denied
+busybox: /data/data/ga.androidterm/bin/uncompress: Permission denied
+busybox: /data/data/ga.androidterm/bin/unexpand: Permission denied
+busybox: /data/data/ga.androidterm/bin/uniq: Permission denied
+busybox: /data/data/ga.androidterm/bin/unix2dos: Permission denied
+busybox: /data/data/ga.androidterm/bin/unlzma: Permission denied
+busybox: /data/data/ga.androidterm/bin/unlzop: Permission denied
+busybox: /data/data/ga.androidterm/bin/unxz: Permission denied
+busybox: /data/data/ga.androidterm/bin/unzip: Permission denied
+busybox: /data/data/ga.androidterm/bin/uudecode: Permission denied
+busybox: /data/data/ga.androidterm/bin/uuencode: Permission denied
+busybox: /data/data/ga.androidterm/bin/vi: Permission denied
+busybox: /data/data/ga.androidterm/bin/volname: Permission denied
+busybox: /data/data/ga.androidterm/bin/watch: Permission denied
+busybox: /data/data/ga.androidterm/bin/wc: Permission denied
+busybox: /data/data/ga.androidterm/bin/wget: Permission denied
+busybox: /data/data/ga.androidterm/bin/which: Permission denied
+busybox: /data/data/ga.androidterm/bin/whoami: Permission denied
+busybox: /data/data/ga.androidterm/bin/whois: Permission denied
+busybox: /data/data/ga.androidterm/bin/xargs: Permission denied
+busybox: /data/data/ga.androidterm/bin/xz: Permission denied
+busybox: /data/data/ga.androidterm/bin/xzcat: Permission denied
+busybox: /data/data/ga.androidterm/bin/yes: Permission denied
+busybox: /data/data/ga.androidterm/bin/zcat: Permission denied
+tar: can't remove old file ./links/git-shell: Permission denied
+cat: can't open '/data/data/ga.androidterm/links/git': Permission denied
+rm: can't stat '/data/data/ga.androidterm/links/git': Permission denied
+cat: can't open '/data/data/ga.androidterm/links/git-shell': Permission denied
+rm: can't stat '/data/data/ga.androidterm/links/git-shell': Permission denied
+cat: can't open '/data/data/ga.androidterm/links/git-upload-pack': Permission denied
+rm: can't stat '/data/data/ga.androidterm/links/git-upload-pack': Permission denied
+lib/lib.runshell.so: line 133: can't create /data/data/ga.androidterm/runshell: Permission denied
+lib/lib.runshell.so: line 133: can't create /data/data/ga.androidterm/runshell: Permission denied
+chmod: runshell: Operation not permitted
+lib/lib.runshell.so: line 133: can't create /data/data/ga.androidterm/bin/trustedkeys.gpg: Permission denied
+lib/lib.runshell.so: line 133: can't create /data/data/ga.androidterm/installed-version: Permission denied
+Installation complete
+tar: write: Broken pipe
+shell@hammerhead:/sdcard/git-annex.home $ ^D
+shell@hammerhead:/ $
+"""]]
+
+Android is new to me, so it's possible I'm doing something utterly wrong.
diff --git a/doc/bugs/Android___34__This_build_of_git-annex_does_not_support_XMPP_pairing__34__.mdwn b/doc/bugs/Android___34__This_build_of_git-annex_does_not_support_XMPP_pairing__34__.mdwn
deleted file mode 100644
index 16b1b4c6f..000000000
--- a/doc/bugs/Android___34__This_build_of_git-annex_does_not_support_XMPP_pairing__34__.mdwn
+++ /dev/null
@@ -1,26 +0,0 @@
-### Please describe the problem.
-
-Upon a new (re-)installation of Android ("proper" build as from http://downloads.kitenet.net/git-annex/android/current/4.0/git-annex.apk Last-Modified: Mon, 18 Nov 2013 11:57:25 GMT), as well as whatever was day before a daily build, I am getting a message in web ui "not supported This build of git-annex does not support XMPP pairing. Sorry!" whenever I am entering "Share with your other devices" among "Add more repositories".
-
-### What steps will reproduce the problem?
-
-I had some older and then freshier (yesterday daily build) installed. Then uninstalled and current "proper" build installed.
-it picked up initialized repository I did yesterday but when I went into "Share ..." link I saw the message without any option to add such another device
-
-### What version of git-annex are you using? On what operating system?
-
-Android
-
-About says 5.20131118-gc7e5cde.
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Android___34__This_build_of_git-annex_does_not_support_XMPP_pairing__34__/comment_1_c034bb84e58b2dda1038ba205ec78c56._comment b/doc/bugs/Android___34__This_build_of_git-annex_does_not_support_XMPP_pairing__34__/comment_1_c034bb84e58b2dda1038ba205ec78c56._comment
deleted file mode 100644
index ef0661cb8..000000000
--- a/doc/bugs/Android___34__This_build_of_git-annex_does_not_support_XMPP_pairing__34__/comment_1_c034bb84e58b2dda1038ba205ec78c56._comment
+++ /dev/null
@@ -1,273 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.64"
- subject="comment 1"
- date="2013-11-26T17:23:52Z"
- content="""
-I think that older Android builds did support this (IIRC). However, I recently rebootstrapped my android dev environment, and when I enable the XMPP flag now:
-
-<pre>
-system.c:222:0: error: undefined reference to 'pthread_atfork'
-
-cipher.c:213:0: error: undefined reference to 'nettle_cbc_encrypt'
-
-cipher.c:213:0: error: undefined reference to 'nettle_cbc_decrypt'
-
-cipher.c:213:0: error: undefined reference to 'nettle_des_encrypt'
-
-cipher.c:213:0: error: undefined reference to 'nettle_des_decrypt'
-
-cipher.c:213:0:
- error: undefined reference to 'nettle_arcfour_crypt'
-
-cipher.c:213:0:
- error: undefined reference to 'nettle_des3_encrypt'
-
-cipher.c:213:0:
- error: undefined reference to 'nettle_des3_decrypt'
-
-cipher.c:213:0:
- error: undefined reference to 'nettle_arctwo_encrypt'
-
-cipher.c:213:0:
- error: undefined reference to 'nettle_arctwo_decrypt'
-
-cipher.c:265:0:
- error: undefined reference to 'nettle_arcfour_set_key'
-
-cipher.c:68:0:
- error: undefined reference to 'nettle_aes_set_encrypt_key'
-
-cipher.c:69:0:
- error: undefined reference to 'nettle_aes_invert_key'
-
-cipher.c:96:0:
- error: undefined reference to 'nettle_camellia_set_encrypt_key'
-
-cipher.c:97:0:
- error: undefined reference to 'nettle_camellia_invert_key'
-
-cipher.c:268:0:
- error: undefined reference to 'nettle_arctwo_set_key'
-
-cipher.c:239:0:
- error: undefined reference to 'nettle_des_fix_parity'
-
-cipher.c:242:0:
- error: undefined reference to 'nettle_des3_set_key'
-
-cipher.c:255:0:
- error: undefined reference to 'nettle_des_fix_parity'
-
-cipher.c:257:0: error: undefined reference to 'nettle_des_set_key'
-
-cipher.c:83:0: error: undefined reference to 'nettle_aes_decrypt'
-
-cipher.c:76:0: error: undefined reference to 'nettle_aes_encrypt'
-
-cipher.c:111:0:
- error: undefined reference to 'nettle_camellia_crypt'
-
-cipher.c:104:0:
- error: undefined reference to 'nettle_camellia_crypt'
-
-mac.c:146:0:
- error: undefined reference to 'nettle_hmac_sha256_update'
-
-mac.c:146:0:
- error: undefined reference to 'nettle_hmac_sha224_digest'
-
-mac.c:146:0:
- error: undefined reference to 'nettle_hmac_sha224_set_key'
-
-mac.c:146:0:
- error: undefined reference to 'nettle_hmac_md5_update'
-
-mac.c:146:0:
- error: undefined reference to 'nettle_hmac_md5_digest'
-
-mac.c:146:0:
- error: undefined reference to 'nettle_hmac_md5_set_key'
-
-mac.c:146:0:
- error: undefined reference to 'nettle_hmac_sha1_update'
-
-mac.c:146:0:
- error: undefined reference to 'nettle_hmac_sha1_digest'
-
-mac.c:146:0:
- error: undefined reference to 'nettle_hmac_sha1_set_key'
-
-mac.c:146:0:
- error: undefined reference to 'nettle_hmac_sha256_digest'
-
-mac.c:146:0:
- error: undefined reference to 'nettle_hmac_sha256_set_key'
-
-mac.c:146:0:
- error: undefined reference to 'nettle_hmac_sha512_update'
-
-mac.c:146:0:
- error: undefined reference to 'nettle_hmac_sha384_digest'
-
-mac.c:146:0:
- error: undefined reference to 'nettle_hmac_sha384_set_key'
-
-mac.c:146:0:
- error: undefined reference to 'nettle_hmac_sha512_digest'
-
-mac.c:146:0:
- error: undefined reference to 'nettle_hmac_sha512_set_key'
-
-mac.c:243:0: error: undefined reference to 'nettle_sha224_init'
-
-mac.c:222:0: error: undefined reference to 'nettle_md5_init'
-
-mac.c:229:0: error: undefined reference to 'nettle_sha1_init'
-
-mac.c:236:0: error: undefined reference to 'nettle_md2_init'
-
-mac.c:250:0: error: undefined reference to 'nettle_sha256_init'
-
-mac.c:257:0: error: undefined reference to 'nettle_sha384_init'
-
-mac.c:264:0: error: undefined reference to 'nettle_sha512_init'
-
-mac.c:278:0: error: undefined reference to 'nettle_sha256_update'
-
-mac.c:278:0: error: undefined reference to 'nettle_sha224_digest'
-
-mac.c:278:0: error: undefined reference to 'nettle_md5_update'
-
-mac.c:278:0: error: undefined reference to 'nettle_md5_digest'
-
-mac.c:278:0: error: undefined reference to 'nettle_sha1_update'
-
-mac.c:278:0: error: undefined reference to 'nettle_sha1_digest'
-
-mac.c:278:0: error: undefined reference to 'nettle_md2_update'
-
-mac.c:278:0: error: undefined reference to 'nettle_md2_digest'
-
-mac.c:278:0: error: undefined reference to 'nettle_sha256_digest'
-
-mac.c:278:0: error: undefined reference to 'nettle_sha512_update'
-
-mac.c:278:0: error: undefined reference to 'nettle_sha384_digest'
-
-mac.c:278:0: error: undefined reference to 'nettle_sha512_digest'
-
-mpi.c:48:0:
- error: undefined reference to 'nettle_mpz_sizeinbase_256_u'
-
-mpi.c:80:0: error: undefined reference to 'nettle_mpz_get_str_256'
-
-mpi.c:76:0: error: undefined reference to 'nettle_mpz_get_str_256'
-
-mpi.c:52:0:
- error: undefined reference to 'nettle_mpz_sizeinbase_256_s'
-
-mpi.c:56:0:
- error: undefined reference to 'nettle_mpz_sizeinbase_256_u'
-
-mpi.c:142:0:
- error: undefined reference to 'nettle_mpz_set_str_256_u'
-
-mpi.c:117:0:
- error: undefined reference to 'nettle_mpz_set_str_256_u'
-
-mpi.c:121:0:
- error: undefined reference to 'nettle_mpz_set_str_256_s'
-
-mpi.c:470:0:
- error: undefined reference to 'nettle_mpz_set_str_256_u'
-
-mpi.c:496:0:
- error: undefined reference to 'nettle_mpz_set_str_256_u'
-
-pk.c:505:0:
- error: undefined reference to 'nettle_dsa_public_key_init'
-
-pk.c:506:0:
- error: undefined reference to 'nettle_dsa_private_key_init'
-
-pk.c:515:0:
- error: undefined reference to 'nettle_dsa_generate_keypair'
-
-pk.c:545:0:
- error: undefined reference to 'nettle_dsa_private_key_clear'
-
-pk.c:546:0:
- error: undefined reference to 'nettle_dsa_public_key_clear'
-
-pk.c:558:0:
- error: undefined reference to 'nettle_rsa_public_key_init'
-
-pk.c:559:0:
- error: undefined reference to 'nettle_rsa_private_key_init'
-
-pk.c:563:0:
- error: undefined reference to 'nettle_rsa_generate_keypair'
-
-pk.c:598:0:
- error: undefined reference to 'nettle_rsa_private_key_clear'
-
-pk.c:599:0:
- error: undefined reference to 'nettle_rsa_public_key_clear'
-
-pk.c:598:0:
- error: undefined reference to 'nettle_rsa_private_key_clear'
-
-pk.c:599:0:
- error: undefined reference to 'nettle_rsa_public_key_clear'
-
-pk.c:545:0:
- error: undefined reference to 'nettle_dsa_private_key_clear'
-
-pk.c:546:0:
- error: undefined reference to 'nettle_dsa_public_key_clear'
-
-pk.c:286:0:
- error: undefined reference to 'nettle_dsa_signature_init'
-
-pk.c:296:0: error: undefined reference to '_nettle_dsa_sign'
-
-pk.c:309:0:
- error: undefined reference to 'nettle_dsa_signature_clear'
-
-pk.c:344:0:
- error: undefined reference to 'nettle_rsa_compute_root'
-
-pk.c:309:0:
- error: undefined reference to 'nettle_dsa_signature_clear'
-
-pk.c:231:0:
- error: undefined reference to 'nettle_rsa_compute_root'
-
-pk.c:441:0: error: undefined reference to '_nettle_dsa_verify'
-
-rnd.c:222:0:
- error: undefined reference to 'nettle_yarrow256_update'
-
-rnd.c:340:0:
- error: undefined reference to 'nettle_yarrow256_update'
-
-rnd.c:284:0:
- error: undefined reference to 'nettle_yarrow256_update'
-
-rnd.c:388:0:
- error: undefined reference to 'nettle_yarrow256_slow_reseed'
-
-rnd.c:465:0:
- error: undefined reference to 'nettle_yarrow256_random'
-
-rnd.c:421:0: error: undefined reference to 'nettle_yarrow256_init'
-
-rnd.c:437:0:
- error: undefined reference to 'nettle_yarrow256_slow_reseed'
-collect2: error: ld returned 1 exit status
-make: *** [android] Error 1
-</pre>
-
-
-"""]]
diff --git a/doc/bugs/Android___34__This_build_of_git-annex_does_not_support_XMPP_pairing__34__/comment_2_99a754f41d59fdd401ba6d169945e7c9._comment b/doc/bugs/Android___34__This_build_of_git-annex_does_not_support_XMPP_pairing__34__/comment_2_99a754f41d59fdd401ba6d169945e7c9._comment
deleted file mode 100644
index 6c5f48d5c..000000000
--- a/doc/bugs/Android___34__This_build_of_git-annex_does_not_support_XMPP_pairing__34__/comment_2_99a754f41d59fdd401ba6d169945e7c9._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.64"
- subject="comment 2"
- date="2013-11-26T19:40:55Z"
- content="""
-Managed to get it to build with XMPP, but it was quite a hack job getting the C libraries to behave, and I have not been able to test it yet. The daily build has it if you want to give it a try.
-"""]]
diff --git a/doc/bugs/Android___91__Terminal_session_finished__93__.mdwn b/doc/bugs/Android___91__Terminal_session_finished__93__.mdwn
new file mode 100644
index 000000000..17ed66381
--- /dev/null
+++ b/doc/bugs/Android___91__Terminal_session_finished__93__.mdwn
@@ -0,0 +1,33 @@
+### Please describe the problem.
+
+Launching the Git Annex app on Android, the shell just reads:
+[[!format sh """
+[Terminal session finished]
+"""]]
+
+Attempting to launch /data/data/ga.androidterm/runshell via the adb shell does also not work:
+[[!format sh """
+/system/bin/sh: /data/data/ga.androidterm/runshell: not found
+"""]]
+
+Listing the contents of that directory from the git annex terminal appears to confirm this:
+[[!format sh """
+u0_a172@android:/data/data/ga.androidterm $ ls
+cache
+lib
+shared_prefs
+"""]]
+
+Following the instructions for the similar issue here [[http://git-annex.branchable.com/Android/oldcomments/#comment-4c5a944c1288ddd46108969a4c664584]]:
+[[!format sh """
+u0_a172@android:/ $ ls -ld /data/data/ga.androidterm
+drwxr-x--x u0_a172 u0_a172 2014-04-20 11:12 ga.androidterm
+"""]]
+
+### What version of git-annex are you using? On what operating system?
+
+version 5.20140413 of the Git Annex app (tested using the daily build and regular build).
+
+Samsung Galaxy Tab 3 (GT-P5210) running Android 4.2.2 (without root access).
+
+> [[dup|done]] --[[Joey]]
diff --git a/doc/bugs/Android___91__Terminal_session_finished__93__/comment_1_31af3e5226430a4e94de58c0e33bd22b._comment b/doc/bugs/Android___91__Terminal_session_finished__93__/comment_1_31af3e5226430a4e94de58c0e33bd22b._comment
new file mode 100644
index 000000000..73f7b05ca
--- /dev/null
+++ b/doc/bugs/Android___91__Terminal_session_finished__93__/comment_1_31af3e5226430a4e94de58c0e33bd22b._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 1"
+ date="2014-04-20T17:16:50Z"
+ content="""
+From the git-annex terminal, try to run:
+
+/data/data/ga.androidterm/lib/lib.start.so
+
+Paste me any output..
+"""]]
diff --git a/doc/bugs/Android___91__Terminal_session_finished__93__/comment_2_a5bcbd2f85283e29e237e9850cd8109a._comment b/doc/bugs/Android___91__Terminal_session_finished__93__/comment_2_a5bcbd2f85283e29e237e9850cd8109a._comment
new file mode 100644
index 000000000..01cc33730
--- /dev/null
+++ b/doc/bugs/Android___91__Terminal_session_finished__93__/comment_2_a5bcbd2f85283e29e237e9850cd8109a._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="cbaines"
+ ip="86.166.14.171"
+ subject="comment 2"
+ date="2014-04-20T19:40:11Z"
+ content="""
+When I run that, I get:
+[[!format sh \"\"\"
+/system/bin/sh: /data/data/ga.androidterm/lib/lib.start.so: not found
+\"\"\"]]
+
+Which makes some sense, as the file is not there. The following files can be found under /data/data/ga.androidterm:
+[[!format sh \"\"\"
+/data/data/ga.androidterm/cache/com.android.renderscript.cache/ <- empty directory
+/data/data/ga.androidterm/lib/libga-androidterm4.so
+/data/data/ga.androidterm/shared_prefs/ga.androidterm_preferences.xml
+\"\"\"]]
+
+I tried running libga-androidterm4.so, but I just got Segmentation fault back.
+
+I also tried using logcat to see if I could see anything obvious going wrong when running the app for the first time after installation, but I could not see anything obvious in the logs (there was a lot of noise, so I might of missed something), will anything useful appear with the use of a filter?
+"""]]
diff --git a/doc/bugs/Android___91__Terminal_session_finished__93__/comment_3_965efa6736dcff4d7010ea5533f31a59._comment b/doc/bugs/Android___91__Terminal_session_finished__93__/comment_3_965efa6736dcff4d7010ea5533f31a59._comment
new file mode 100644
index 000000000..ed3d36908
--- /dev/null
+++ b/doc/bugs/Android___91__Terminal_session_finished__93__/comment_3_965efa6736dcff4d7010ea5533f31a59._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="cbaines"
+ ip="86.166.14.171"
+ subject="comment 3"
+ date="2014-04-20T19:50:12Z"
+ content="""
+Looking at the contents of the apk for the x86 architecture (which this tablet is), would you expect that file to be there? That file only appears in the /lib/armeabi and not /lib/x86 ?
+"""]]
diff --git a/doc/bugs/Android___91__Terminal_session_finished__93__/comment_4_90a0be2296b4a1d8c1708423666c9619._comment b/doc/bugs/Android___91__Terminal_session_finished__93__/comment_4_90a0be2296b4a1d8c1708423666c9619._comment
new file mode 100644
index 000000000..12fd901bc
--- /dev/null
+++ b/doc/bugs/Android___91__Terminal_session_finished__93__/comment_4_90a0be2296b4a1d8c1708423666c9619._comment
@@ -0,0 +1,31 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 4"
+ date="2014-04-20T19:55:59Z"
+ content="""
+Ok, so the git-annex.apk ships several libraries (and pseudo-libraries), and it seems your version of Android only installed the one that is really an Android java application. I don't know why.
+
+Here's the full list of files that are supposed to be installed in the lib dir. If you can find something about them in the logs, that might help.
+
+I suppose it's possible they were installed to some other location in the android file system (which might be hard to find w/o root.. You could check if git-annex in the app list has a larger installed size than the size of libga-androidterm4.so, that might give a hint.
+
+<pre>
+lib.busybox.so
+lib.git-annex.so
+lib.git-shell.so
+lib.git-upload-pack.so
+lib.git.so
+lib.git.tar.gz.so
+lib.gpg.so
+lib.rsync.so
+lib.runshell.so
+lib.ssh-keygen.so
+lib.ssh.so
+lib.start.so
+lib.version.so
+libga-androidterm4.so
+</pre>
+
+(I just installed the 5.20140414-gb70cd37 autobuild on an android device and it worked ok.)
+"""]]
diff --git a/doc/bugs/Android___91__Terminal_session_finished__93__/comment_5_be4b720293992f75b9cc3e8f6687fb87._comment b/doc/bugs/Android___91__Terminal_session_finished__93__/comment_5_be4b720293992f75b9cc3e8f6687fb87._comment
new file mode 100644
index 000000000..2d82bb7b5
--- /dev/null
+++ b/doc/bugs/Android___91__Terminal_session_finished__93__/comment_5_be4b720293992f75b9cc3e8f6687fb87._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="cbaines"
+ ip="86.166.14.171"
+ subject="comment 5"
+ date="2014-04-20T20:20:55Z"
+ content="""
+I'm guessing you missed my last comment regarding the architecture. Sorry I did not pick this up earlier, but it only came to mind when I had a poke around in the apk?
+"""]]
diff --git a/doc/bugs/Android___91__Terminal_session_finished__93__/comment_6_8e439138c97b8853ab2b6f96f6111568._comment b/doc/bugs/Android___91__Terminal_session_finished__93__/comment_6_8e439138c97b8853ab2b6f96f6111568._comment
new file mode 100644
index 000000000..40404029e
--- /dev/null
+++ b/doc/bugs/Android___91__Terminal_session_finished__93__/comment_6_8e439138c97b8853ab2b6f96f6111568._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 6"
+ date="2014-04-20T20:58:22Z"
+ content="""
+Yes, that fully explains it. git-annex is a native program and for android it's only built for arm.
+"""]]
diff --git a/doc/bugs/Android___91__Terminal_session_finished__93__/comment_7_6142516d816f78c724e22737aa3bca53._comment b/doc/bugs/Android___91__Terminal_session_finished__93__/comment_7_6142516d816f78c724e22737aa3bca53._comment
new file mode 100644
index 000000000..d6ce0fe3a
--- /dev/null
+++ b/doc/bugs/Android___91__Terminal_session_finished__93__/comment_7_6142516d816f78c724e22737aa3bca53._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 7"
+ date="2014-04-20T20:59:35Z"
+ content="""
+So, this is a dup of [[todo/Not_working_on_Android-x86]]
+"""]]
diff --git a/doc/bugs/Android_app_permission_denial_on_startup.mdwn b/doc/bugs/Android_app_permission_denial_on_startup.mdwn
deleted file mode 100644
index 689d7a748..000000000
--- a/doc/bugs/Android_app_permission_denial_on_startup.mdwn
+++ /dev/null
@@ -1,18 +0,0 @@
-### Please describe the problem.
-
-Android app barfs on startup.
-
-### What steps will reproduce the problem?
-
-Download/install/start Android app :)
-
-### What version of git-annex are you using? On what operating system?
-
-Just downloaded the .apk (Friday May 3rd). Android 4.2.2 on Google/LG Nexus 4
-
-### Please provide any additional information below.
-
-See this [screenshot](https://docs.google.com/file/d/0B8tqeaAn45VORU1ET1ZpTWxLTjQ/edit?usp=sharing).
-Feel free to ping me on IRC if you need additional info or want to test a fix.
-
-> [[done]]; now comprehensively fixed. --[[Joey]]
diff --git a/doc/bugs/Android_app_permission_denial_on_startup/comment_10_dc06737997c8883ef0a12dbecd9ac30f._comment b/doc/bugs/Android_app_permission_denial_on_startup/comment_10_dc06737997c8883ef0a12dbecd9ac30f._comment
deleted file mode 100644
index 417d23e84..000000000
--- a/doc/bugs/Android_app_permission_denial_on_startup/comment_10_dc06737997c8883ef0a12dbecd9ac30f._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlcxKZHglATIiJXD7jcxfYhkhgeFmcVFqE"
- nickname="James"
- subject="21-May-2013 still broken"
- date="2013-05-24T12:00:37Z"
- content="""
-I downloaded the android app dated 21-May-2013. I get the same permission error as before on startup.
-"""]]
diff --git a/doc/bugs/Android_app_permission_denial_on_startup/comment_11_b444cd6717658116533745c51481dd3d._comment b/doc/bugs/Android_app_permission_denial_on_startup/comment_11_b444cd6717658116533745c51481dd3d._comment
deleted file mode 100644
index b776c2e7d..000000000
--- a/doc/bugs/Android_app_permission_denial_on_startup/comment_11_b444cd6717658116533745c51481dd3d._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 11"
- date="2013-05-29T17:01:55Z"
- content="""
-Today's autobuild of git-annex for Android has a workaround for this problem. You can select \"Open WebApp\" from the menu in the terminal emulator app, and it should work. Would appreciate confirmation from someone who has seen this problem. If that menu item works, I may later be able to make it open automatically.
-"""]]
diff --git a/doc/bugs/Android_app_permission_denial_on_startup/comment_12_66181f34ed7496d1f6601b39e5ae3c65._comment b/doc/bugs/Android_app_permission_denial_on_startup/comment_12_66181f34ed7496d1f6601b39e5ae3c65._comment
deleted file mode 100644
index 5a099121c..000000000
--- a/doc/bugs/Android_app_permission_denial_on_startup/comment_12_66181f34ed7496d1f6601b39e5ae3c65._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkGCmVc5qIJaQQgG82Hc5zzBdAVdhe2JEM"
- nickname="Bruno"
- subject="comment 12"
- date="2013-05-29T17:20:40Z"
- content="""
-It works!
-
-Note that the \"open webapp\" menu item is not available if my phone is set to French.
-
-French: http://i.imgur.com/cik0sIL.png
-English: http://i.imgur.com/8Oh6FEw.png
-"""]]
diff --git a/doc/bugs/Android_app_permission_denial_on_startup/comment_1_ddf5761bf14de30ac97030ad338601ae._comment b/doc/bugs/Android_app_permission_denial_on_startup/comment_1_ddf5761bf14de30ac97030ad338601ae._comment
deleted file mode 100644
index 0f72b661e..000000000
--- a/doc/bugs/Android_app_permission_denial_on_startup/comment_1_ddf5761bf14de30ac97030ad338601ae._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-05-03T22:44:36Z"
- content="""
-> startActivity asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL
-
-The webapp continues running despite this, so you can certainly work around this by copying and pasting the displayed url into the web browser.
-
-<http://stackoverflow.com/questions/14744578/how-could-a-root-app-call-apis-with-signature-level-protected-permission>
-
-Based on this post, I cannot simply modify the app to request this permission. I don't know why your Android is requiring this permission, which AFAICS is supposed to be used to switch which user is logged in, when I'm merely trying to open a web browser. You might try closing any web browser you have open and see if that avoids the problem.
-"""]]
diff --git a/doc/bugs/Android_app_permission_denial_on_startup/comment_2_8b9fafa73ebf5f803c7da9531cfb5b34._comment b/doc/bugs/Android_app_permission_denial_on_startup/comment_2_8b9fafa73ebf5f803c7da9531cfb5b34._comment
deleted file mode 100644
index ca6a8b9ff..000000000
--- a/doc/bugs/Android_app_permission_denial_on_startup/comment_2_8b9fafa73ebf5f803c7da9531cfb5b34._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkGCmVc5qIJaQQgG82Hc5zzBdAVdhe2JEM"
- nickname="Bruno"
- subject="comment 2"
- date="2013-05-04T05:02:45Z"
- content="""
-I have the same problem. Also with a Nexus 4 (4.2.2).
-
-The problem still happens if I start git annex before any browser is open. I tested after a reboot.
-"""]]
diff --git a/doc/bugs/Android_app_permission_denial_on_startup/comment_3_58501bb043b4c5836d7472ffd6baa72c._comment b/doc/bugs/Android_app_permission_denial_on_startup/comment_3_58501bb043b4c5836d7472ffd6baa72c._comment
deleted file mode 100644
index 419e6bceb..000000000
--- a/doc/bugs/Android_app_permission_denial_on_startup/comment_3_58501bb043b4c5836d7472ffd6baa72c._comment
+++ /dev/null
@@ -1,23 +0,0 @@
-[[!comment format=mdwn
- username="https://launchpad.net/~subito"
- nickname="subito"
- subject="Galaxy Nexus: same here"
- date="2013-05-05T10:46:12Z"
- content="""
- Falling back to hardcoded app location; cannot find expected files in /data/app-lib
- git annex webapp
- u0_a65@android:/sdcard/git-annex.home $ git annex webapp
- Launching web browser on http://127.0.0.1:38549 /?auth=38bf9df739a9f1671fd99153e2ef1e81a54dece8b18469152692277c056208cda039e1d9486e3115144a3e3da14a51056b260400ee563cde30b28b10b25ca2d0
- Starting: Intent { act=android.intent.action.VIEW dat=http://127.0.0.1:38549/?auth=38bf9df739a9f1671fd99153e2ef1e81a54dece8b18469152692277c056208cda039e1d9486e3115144a3e3da14a51056b260400ee563cde30b28b10b25ca2d0 }
- java.lang.SecurityException: Permission Denial: startActivity asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL
- at android.os.Parcel.readException(Parcel.java:1425)
- at android.os.Parcel.readException(Parcel.java:1379)
- at android.app.ActivityManagerProxy.startActivityAsUser(ActivityManagerNative.java:1921)
- at com.android.commands.am.Am.runStart(Am.java:494)
- at com.android.commands.am.Am.run(Am.java:109)
- at com.android.commands.am.Am.main(Am.java:82)
- at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
- at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:235)
- at dalvik.system.NativeStart.main(Native Method)
- failed to start web browser
-"""]]
diff --git a/doc/bugs/Android_app_permission_denial_on_startup/comment_4_d3a04dc7bbc1816cccc8d85c73ffb689._comment b/doc/bugs/Android_app_permission_denial_on_startup/comment_4_d3a04dc7bbc1816cccc8d85c73ffb689._comment
deleted file mode 100644
index 5f6ce0b66..000000000
--- a/doc/bugs/Android_app_permission_denial_on_startup/comment_4_d3a04dc7bbc1816cccc8d85c73ffb689._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawn26WQjIP5fnMgQF_L_k3Q3UrR5v8mjRTY"
- nickname="Ellis"
- subject="comment 4"
- date="2013-05-05T12:18:41Z"
- content="""
-I'm also using a Samsung Galaxy Nexus with the latest Android and git-annex, and I'm getting the same error as above (with different port, auth id, and uid). Opening the url manually does work, as Joey said.
-"""]]
diff --git a/doc/bugs/Android_app_permission_denial_on_startup/comment_5_eeabbc0cc434ed84c36a3f4e03fcef36._comment b/doc/bugs/Android_app_permission_denial_on_startup/comment_5_eeabbc0cc434ed84c36a3f4e03fcef36._comment
deleted file mode 100644
index cfd0e8663..000000000
--- a/doc/bugs/Android_app_permission_denial_on_startup/comment_5_eeabbc0cc434ed84c36a3f4e03fcef36._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 5"
- date="2013-05-06T14:13:51Z"
- content="""
-I have also had a report that this happens on a galaxy nexus 4.2.1.
-
-So far, every reporter has had a galaxy nexus. Hmm...
-"""]]
diff --git a/doc/bugs/Android_app_permission_denial_on_startup/comment_6_4203b496bee1bdd424466ed63b5d31cf._comment b/doc/bugs/Android_app_permission_denial_on_startup/comment_6_4203b496bee1bdd424466ed63b5d31cf._comment
deleted file mode 100644
index 1f2179271..000000000
--- a/doc/bugs/Android_app_permission_denial_on_startup/comment_6_4203b496bee1bdd424466ed63b5d31cf._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkGCmVc5qIJaQQgG82Hc5zzBdAVdhe2JEM"
- nickname="Bruno"
- subject="comment 6"
- date="2013-05-06T14:29:59Z"
- content="""
-The Galaxy Nexus (Samsung) is not the same as the Nexus 4 (LG).
-
-See: https://en.wikipedia.org/wiki/Google_Nexus#Comparison_of_phones
-"""]]
diff --git a/doc/bugs/Android_app_permission_denial_on_startup/comment_7_74373eb2cc46b76659e3c463d6682d15._comment b/doc/bugs/Android_app_permission_denial_on_startup/comment_7_74373eb2cc46b76659e3c463d6682d15._comment
deleted file mode 100644
index 12c1e3eed..000000000
--- a/doc/bugs/Android_app_permission_denial_on_startup/comment_7_74373eb2cc46b76659e3c463d6682d15._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawn26WQjIP5fnMgQF_L_k3Q3UrR5v8mjRTY"
- nickname="Ellis"
- subject="addendum to comment 4"
- date="2013-05-06T15:32:51Z"
- content="""
-As a side node, my device is rooted. The web browser starts properly when I start it as follows: adb shell; su; /data/data/ga.androidterm/runshell; git annex webapp
-
-However, with previous versions of git-annex for android, I had problems with git-annex when starting it this way; if I recall correctly, ``git annex get`` didn't work. Will test again when I have time.
-"""]]
diff --git a/doc/bugs/Android_app_permission_denial_on_startup/comment_8_0923d2a09df01d152ec4784c92689c96._comment b/doc/bugs/Android_app_permission_denial_on_startup/comment_8_0923d2a09df01d152ec4784c92689c96._comment
deleted file mode 100644
index 98e1e19ed..000000000
--- a/doc/bugs/Android_app_permission_denial_on_startup/comment_8_0923d2a09df01d152ec4784c92689c96._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://adamspiers.myopenid.com/"
- nickname="Adam"
- subject="more info on original report"
- date="2013-05-08T11:16:30Z"
- content="""
-I should have said that I am running a recent-ish nightly of CyanogenMod 10.1. This means that my Nexus 4 is rooted. Bruno is quite correct to point out that the Nexus 4 (made by LG) is a very different beast to the Galaxy Nexus (made by Samsung).
-"""]]
diff --git a/doc/bugs/Android_app_permission_denial_on_startup/comment_9_b60928e54a5b620899cf29820b9b8e70._comment b/doc/bugs/Android_app_permission_denial_on_startup/comment_9_b60928e54a5b620899cf29820b9b8e70._comment
deleted file mode 100644
index 68ab46be1..000000000
--- a/doc/bugs/Android_app_permission_denial_on_startup/comment_9_b60928e54a5b620899cf29820b9b8e70._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmSbJHbvlxbCjtPXk_Io3qP3MFqJr3pUgQ"
- nickname="Christopher"
- subject="New permission type"
- date="2013-05-09T22:01:38Z"
- content="""
-I observe that I am encountering the same on my Galaxy Nexus running CM10.1; I see indication that the \"INTERACT_ACROSS_USERS_FULL\" is a new permission in Android 4.2 that relates to the use of multiple users, which is one of the new features of 4.2.
-
-It's possible that there are bugs here... See: https://code.google.com/p/android/issues/detail?id=39801
-"""]]
diff --git a/doc/bugs/Android_can__39__t_sync_files_with_utf-8_characters_in_names.mdwn b/doc/bugs/Android_can__39__t_sync_files_with_utf-8_characters_in_names.mdwn
new file mode 100644
index 000000000..b8f45e4d1
--- /dev/null
+++ b/doc/bugs/Android_can__39__t_sync_files_with_utf-8_characters_in_names.mdwn
@@ -0,0 +1,36 @@
+### Please describe the problem.
+I have a repo where some files have utf-8 characters in their names. They are copied without problems between linux-running pcs, but on Android I only get a small, 206 bytes files with the hash data.
+
+### What steps will reproduce the problem?
+Add some files with utf-8 characters in names, try to sync to Android
+
+### What version of git-annex are you using? On what operating system?
+PC side: tried 5.20140412ubuntu1 from ubuntu repo and standalone tarball 5.20140517-gee56d21, both on Ubuntu Trusy
+Android side: Android 4.4.2 on Nexus 7
+
+### Please provide any additional information below.
+Part of daemon.log I believe is related to this. Lines starting with Number followed by dot are the filenames, but truncated at first non-ascii character.
+I suspect empty lines before the "rsync failed" represent files with names that start with non-ascii character.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+ rsync failed -- run git annex again to resume file transfer
+
+
+ rsync failed -- run git annex again to resume file transfer
+
+
+ rsync failed -- run git annex again to resume file transfer
+
+02. Wyspa W
+ rsync failed -- run git annex again to resume file transfer
+
+05. Ponad Krain
+ rsync failed -- run git annex again to resume file transfer
+
+
+# End of transcript or log.
+"""]]
diff --git a/doc/bugs/Android_can__39__t_sync_files_with_utf-8_characters_in_names/comment_1_bcc3ce19cf26731057a7f3189fcbae19._comment b/doc/bugs/Android_can__39__t_sync_files_with_utf-8_characters_in_names/comment_1_bcc3ce19cf26731057a7f3189fcbae19._comment
new file mode 100644
index 000000000..130e4a420
--- /dev/null
+++ b/doc/bugs/Android_can__39__t_sync_files_with_utf-8_characters_in_names/comment_1_bcc3ce19cf26731057a7f3189fcbae19._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawniXLhO9mLn-7EDfawdENZ2fQwlGy5w_oc"
+ nickname="Michał"
+ subject="Update - 20140529"
+ date="2014-06-01T01:36:16Z"
+ content="""
+Tried with the new 20140529 on Android, same behavior.
+
+One more note: I managed to spot the attempted update in the webapp. The filename that shows up there has all the non-ascii characters replaced by ��� (not truncated as in logs), ex: old/������������.pdf
+"""]]
diff --git a/doc/bugs/Android_daily_build_missing_webapp.mdwn b/doc/bugs/Android_daily_build_missing_webapp.mdwn
deleted file mode 100644
index 682186b73..000000000
--- a/doc/bugs/Android_daily_build_missing_webapp.mdwn
+++ /dev/null
@@ -1,23 +0,0 @@
-### Please describe the problem.
-
-The daily Android build is missing the webapp, raising a bug in case this is unexpected.
-
-### What steps will reproduce the problem?
-
-Down the daily APK, it is 9MB.
-
-### What version of git-annex are you using? On what operating system?
-
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> Probably several of them were. I've fixed the cabal file, re-running
-> android build now. [[done]] --[[Joey]]
diff --git a/doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean.mdwn b/doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean.mdwn
new file mode 100644
index 000000000..c7f5e582c
--- /dev/null
+++ b/doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean.mdwn
@@ -0,0 +1,166 @@
+### Please describe the problem.
+
+Install seems to die because /data/app-lib not found. Sorry, I did not copy. Git-annex log is below.
+
+I tried To run git-annex second time, here's what terminal says.
+
+
+Falling back to hardcoded app location; cannot find expected files in /data/app-lib
+git annex webapp
+u0_a36@manta:/sdcard/git-annex.home $ git annex webapp
+WARNING: linker: git-annex has text relocations. This is wasting memory and is a security risk. Please fix.
+error: fchmod on /sdcard/mediashare/.git/config.lock failed: Operation not permitted
+error: fchmod on /sdcard/mediashare/.git/config.lock failed: Operation not permitted
+
+From git terminal, can start web viewer, it offers to make repo. I chose /sdcard/mediashare, result is browser fail:
+
+git [Param "config",Param "annex.uuid",Param "380f6ec2-a7b0-43db-9447-f0de1b5a1b5b"] failed
+
+The install did create /sdcard/mediashare. I did have the sdcard directory all along.
+
+I can't say for sure what else is in file system. ES File manager shows /data exists, but it is empty. But tablet not easy to diagnose
+
+### What steps will reproduce the problem?
+
+Install git-annex.apk from website. I downloaded 20140620.
+
+### What version of git-annex are you using? On what operating system?
+
+Android 4.4.2 on Nexus tablet.
+
+### Please provide any additional information below.
+
+Git-anex-install.log. it is only file in /sdcard/git-annex.home. note it says it is installing to /data/data/. I may manually create that structure and see if a reinstall ends differently.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+Installation starting to /data/data/ga.androidterm
+1bebb0d66f3f7c5ac4889b86669cab04ebee9bba
+installing busybox
+installing git-annex
+installing git-shell
+installing git-upload-pack
+installing git
+installing gpg
+installing rsync
+installing ssh
+installing ssh-keygen
+linking ./bin/git-upload-archive to git
+linking ./bin/git-receive-pack to git
+linking ./libexec/git-core/git-help to git
+linking ./libexec/git-core/git-fsck to git
+linking ./libexec/git-core/git-cat-file to git
+linking ./libexec/git-core/git-init to git
+linking ./libexec/git-core/git-checkout-index to git
+linking ./libexec/git-core/git-notes to git
+linking ./libexec/git-core/git-grep to git
+linking ./libexec/git-core/git-blame to git
+linking ./libexec/git-core/git-verify-tag to git
+linking ./libexec/git-core/git-write-tree to git
+linking ./libexec/git-core/git-log to git
+linking ./libexec/git-core/git-stage to git
+linking ./libexec/git-core/git-update-ref to git
+linking ./libexec/git-core/git-status to git
+linking ./libexec/git-core/git-show-branch to git
+linking ./libexec/git-core/git-merge-file to git
+linking ./libexec/git-core/git-for-each-ref to git
+linking ./libexec/git-core/git to git
+linking ./libexec/git-core/git-replace to git
+linking ./libexec/git-core/git-update-index to git
+linking ./libexec/git-core/git-annotate to git
+linking ./libexec/git-core/git-patch-id to git
+linking ./libexec/git-core/git-merge-recursive to git
+linking ./libexec/git-core/git-rm to git
+linking ./libexec/git-core/git-ls-tree to git
+linking ./libexec/git-core/git-update-server-info to git
+linking ./libexec/git-core/git-diff-tree to git
+linking ./libexec/git-core/git-merge-tree to git
+linking ./libexec/git-core/git-mktag to git
+linking ./libexec/git-core/git-rev-list to git
+linking ./libexec/git-core/git-column to git
+linking ./libexec/git-core/git-apply to git
+linking ./libexec/git-core/git-var to git
+linking ./libexec/git-core/git-rev-parse to git
+linking ./libexec/git-core/git-archive to git
+linking ./libexec/git-core/git-verify-pack to git
+linking ./libexec/git-core/git-push to git
+linking ./libexec/git-core/git-commit to git
+linking ./libexec/git-core/git-tag to git
+linking ./libexec/git-core/git-pack-refs to git
+linking ./libexec/git-core/git-fmt-merge-msg to git
+linking ./libexec/git-core/git-fast-export to git
+linking ./libexec/git-core/git-remote-ext to git
+linking ./libexec/git-core/git-mailsplit to git
+linking ./libexec/git-core/git-send-pack to git
+linking ./libexec/git-core/git-diff-index to git
+linking ./libexec/git-core/git-mailinfo to git
+linking ./libexec/git-core/git-revert to git
+linking ./libexec/git-core/git-diff-files to git
+linking ./libexec/git-core/git-merge-ours to git
+linking ./libexec/git-core/git-show-ref to git
+linking ./libexec/git-core/git-diff to git
+linking ./libexec/git-core/git-clean to git
+linking ./libexec/git-core/git-bundle to git
+linking ./libexec/git-core/git-check-mailmap to git
+linking ./libexec/git-core/git-describe to git
+linking ./libexec/git-core/git-branch to git
+linking ./libexec/git-core/git-checkout to git
+linking ./libexec/git-core/git-name-rev to git
+linking ./libexec/git-core/git-gc to git
+linking ./libexec/git-core/git-fetch to git
+linking ./libexec/git-core/git-whatchanged to git
+linking ./libexec/git-core/git-cherry to git
+linking ./libexec/git-core/git-reflog to git
+linking ./libexec/git-core/git-hash-object to git
+linking ./libexec/git-core/git-init-db to git
+linking ./libexec/git-core/git-rerere to git
+linking ./libexec/git-core/git-reset to git
+linking ./libexec/git-core/git-stripspace to git
+linking ./libexec/git-core/git-prune to git
+linking ./libexec/git-core/git-mktree to git
+linking ./libexec/git-core/git-unpack-file to git
+linking ./libexec/git-core/git-remote to git
+linking ./libexec/git-core/git-commit-tree to git
+linking ./libexec/git-core/git-symbolic-ref to git
+linking ./libexec/git-core/git-credential to git
+linking ./libexec/git-core/git-check-ignore to git
+linking ./libexec/git-core/git-shortlog to git
+linking ./libexec/git-core/git-fetch-pack to git
+linking ./libexec/git-core/git-clone to git
+linking ./libexec/git-core/git-mv to git
+linking ./libexec/git-core/git-read-tree to git
+linking ./libexec/git-core/git-merge-subtree to git
+linking ./libexec/git-core/git-ls-remote to git
+linking ./libexec/git-core/git-config to git
+linking ./libexec/git-core/git-cherry-pick to git
+linking ./libexec/git-core/git-merge to git
+linking ./libexec/git-core/git-prune-packed to git
+linking ./libexec/git-core/git-count-objects to git
+linking ./libexec/git-core/git-merge-base to git
+linking ./libexec/git-core/git-index-pack to git
+linking ./libexec/git-core/git-repack to git
+linking ./libexec/git-core/git-show to git
+linking ./libexec/git-core/git-fsck-objects to git
+linking ./libexec/git-core/git-format-patch to git
+linking ./libexec/git-core/git-bisect--helper to git
+linking ./libexec/git-core/git-upload-archive to git
+linking ./libexec/git-core/git-ls-files to git
+linking ./libexec/git-core/git-check-attr to git
+linking ./libexec/git-core/git-get-tar-commit-id to git
+linking ./libexec/git-core/git-remote-fd to git
+linking ./libexec/git-core/git-unpack-objects to git
+linking ./libexec/git-core/git-add to git
+linking ./libexec/git-core/git-check-ref-format to git
+linking ./libexec/git-core/git-merge-index to git
+linking ./libexec/git-core/git-pack-objects to git
+linking ./libexec/git-core/git-receive-pack to git
+linking ./libexec/git-core/git-pack-redundant to git
+linking ./libexec/git-core/git-shell to git-shell
+linking ./libexec/git-core/git-upload-pack to git-upload-pack
+Installation complete
+
+# End of transcript or log.
+"""]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean/comment_1_b41666c032aeb2d0de35023328391edb._comment b/doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean/comment_1_b41666c032aeb2d0de35023328391edb._comment
new file mode 100644
index 000000000..cc0fcf30e
--- /dev/null
+++ b/doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean/comment_1_b41666c032aeb2d0de35023328391edb._comment
@@ -0,0 +1,25 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 1"
+ date="2014-07-03T20:10:41Z"
+ content="""
+This is not an installation problem; the /data/app-lib message is a red herring.
+
+Is /sdcard/mediashare a directory that already existed? If so, perhaps it's some \"mediashare\" thing that has a even more crippled filesystem than usual. Seems possible, but I don't know. Want to rule it out..
+
+The actual failure seems to be when git tries to write to its config.lock file, and changes its permissions. This is a recent change in git, commit daa22c6f8da466bd7a438f1bc27375fd737ffcf3, \"config: preserve config file permissions on edits\".
+
+[[!language C \"\"\"
++ if (fchmod(fd, st.st_mode & 07777) < 0) {
++ error(\"fchmod on %s failed: %s\",
++ lock->filename, strerror(errno));
++ ret = CONFIG_NO_WRITE;
++ goto out_free;
++ }
+\"\"\"]]
+
+This seems utterly innocuous; the config file has some mode, and this just sets that same mode back (excluding some high bit flags). But Android goes out of its way to make /sdcard the most craptacular filesystem in use on any Linux system, so I'm not really surprised that it might just refuse all fchmod even when it's a no-op. (This is the only fchmod call currently in git.)
+
+I've patched the bundled git to work around this. Will be a while until there is an updated autobuild..
+"""]]
diff --git a/doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean/comment_2_95ebed938df3db2b6d4ebe4c666c08f8._comment b/doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean/comment_2_95ebed938df3db2b6d4ebe4c666c08f8._comment
new file mode 100644
index 000000000..392f7007f
--- /dev/null
+++ b/doc/bugs/Android_fails_on_Google_Nexus_10_Jellybean/comment_2_95ebed938df3db2b6d4ebe4c666c08f8._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 2"
+ date="2014-07-04T17:52:35Z"
+ content="""
+This problem should be fixed in the most recent daily build of git-annex for android. Testing appreciated.
+"""]]
diff --git a/doc/bugs/Annex_thinks_file_exists_afer_being_dropped.mdwn b/doc/bugs/Annex_thinks_file_exists_afer_being_dropped.mdwn
deleted file mode 100644
index 48be21cee..000000000
--- a/doc/bugs/Annex_thinks_file_exists_afer_being_dropped.mdwn
+++ /dev/null
@@ -1,27 +0,0 @@
-#### What steps will reproduce the problem?
-
-I've posted some code here:
- https://gist.github.com/4552036
-
-
-#### What is the expected output? What do you see instead?
-
-I think I've found three bugs. If they aren't bugs then there is a usage issue that could do with some documentation improvements.
-
-Problem 1 - With 3 local annexes git-annex doesn't seem to search properly for them (See code)
-
-Problem 2 - Even after a sync an annex thinks another (local) annex has a file, even after it has been dropped (See code)
-
-SCARY bug - `whereis` seems to think that a locally dropped file still exists (See code)
-
-
-#### What version of git-annex are you using? On what operating system?
-
-git-annex version: 3.20130114
-
-OS: OSX 10.6.8
-
-
-#### Please provide any additional information below.
-
-> [[done]]; see comments --[[Joey]]
diff --git a/doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_1_1d100441fd1ef529eb854b350fece9ee._comment b/doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_1_1d100441fd1ef529eb854b350fece9ee._comment
deleted file mode 100644
index 7ddc9d2dd..000000000
--- a/doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_1_1d100441fd1ef529eb854b350fece9ee._comment
+++ /dev/null
@@ -1,29 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="comment 1"
- date="2013-01-17T00:46:27Z"
- content="""
-* Problem 1 - With 3 local annexes git-annex doesn't seem to search properly for them (See code)
-
-While test1 thinks test2 and test3 have the file, they don't; it was just dropped from them. So the check that the other repos have the file is done correctly here, and it correctly refuses to drop it. The message is confusing in that it suggests the repositories are not available.
-
-* Problem 2 - Even after a sync an annex thinks another (local) annex has a file, even after it has been dropped (See code)
-
-I have not fully analized this, but it does not have anything to do with direct mode, it's a location log bookeeping problem.
-
-The merge where this happens looks like this:
-
-<pre>
- - 1358382328.617882s 0 620af8a6-603c-11e2-b332-f3ecf1856be4 (test2)
- + 1358382324.420048s 1 620af8a6-603c-11e2-b332-f3ecf1856be4 (test2)
- +1358382324.572356s 1 622cf3b6-603c-11e2-bb55-4fe0f1a02dee (test3)
-++ 1358382328.472266s 0 622cf3b6-603c-11e2-bb55-4fe0f1a02dee (test3)
-</pre>
-
-The first 2 lines are the problem, and in this merge, a newer line is deleted leaving behind an older, now incorrect line. Union merge should not be deleting lines at all, so this appears to be a bug in the union merge code.
-
-* SCARY bug - whereis seems to think that a locally dropped file still exists (See code)
-
-This is a consequence of problem 2; the bad location data gets synced back to test2. Of course fsck will fix this, and the location log's is not relied on when dropping files, so this cannot result in data loss at least.
-"""]]
diff --git a/doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_2_166c459c2b27859cf457e17da685fe75._comment b/doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_2_166c459c2b27859cf457e17da685fe75._comment
deleted file mode 100644
index 661386d8e..000000000
--- a/doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_2_166c459c2b27859cf457e17da685fe75._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="comment 2"
- date="2013-01-17T01:35:44Z"
- content="""
-All right, the bug here involves differing changes to location log info for the same file being synced from two repositories and merged. Which probably explains why this bug was not noticed before.
-
-The union merge code generates a stream of data to feed into a single call to update-index. For each ref being merged, it calculates a union merge between that ref and the index. However, this means that the merge data for test2 is fed into update-index, and this is followed by the merge data for test3, which overwrites the previous merge data, causing the unique line from it to be lost.
-
-A fix, although perhaps not the most efficient way, is to run update-index once for each ref to merge, so that each merge builds on the one before. I've put this in place and can confirm problems #2 and #3 are fixed. Leaving open for the minor wording problem #1.
-
-Thanks for an excellent test case for this most unusual bug! (Which I should haskell-ize and add to the regression test suite, when I have time..)
-"""]]
diff --git a/doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_3_9d985b6e7973bfaaf8b4f5349d8c13ee._comment b/doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_3_9d985b6e7973bfaaf8b4f5349d8c13ee._comment
deleted file mode 100644
index 7301dda92..000000000
--- a/doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_3_9d985b6e7973bfaaf8b4f5349d8c13ee._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="comment 3"
- date="2013-01-17T01:45:59Z"
- content="""
-Fixed problem #1; it now no longer says to make available repositories where it has confirmed the file is not present.
-"""]]
diff --git a/doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_4_3e084cff454b95c7170c0225a53f0c30._comment b/doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_4_3e084cff454b95c7170c0225a53f0c30._comment
deleted file mode 100644
index a4fc5813a..000000000
--- a/doc/bugs/Annex_thinks_file_exists_afer_being_dropped/comment_4_3e084cff454b95c7170c0225a53f0c30._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://a-or-b.myopenid.com/"
- ip="203.45.2.230"
- subject="comment 4"
- date="2013-01-17T01:57:06Z"
- content="""
-No problem. Glad to be of assistance.
-
-This was actually a bug that I ran into whilst testing direct mode. Quantifying the commands needed to reproduce was a bit of a challenge. :-)
-
-"""]]
diff --git a/doc/bugs/Assistant_breaks_when_broken_symlinks_are_in_.git__47__annex__47__tmp.mdwn b/doc/bugs/Assistant_breaks_when_broken_symlinks_are_in_.git__47__annex__47__tmp.mdwn
new file mode 100644
index 000000000..256bc1e7f
--- /dev/null
+++ b/doc/bugs/Assistant_breaks_when_broken_symlinks_are_in_.git__47__annex__47__tmp.mdwn
@@ -0,0 +1,9 @@
+The assistant web UI says: `SanityCheckerStartup crashed: /home/zerodogg/Delt/.git/annex/tmp/Sak_7.pdf: getFileStatus: does not exist (No such file or directory)` with a «Restart thread»-button. Clicking said button merely makes the error re-appear. The file in question is a broken symlink. Deleting the symlink and then restarting the thread fixes the problem.
+
+I'm not sure what causes said symlink to appear (which has the name of a file that does exist in the annex), but it has done so on several systems accross different distributions here (Fedora 20, Ubuntu 14.04, Archlinux). Perhaps an rsync copies over a symlink instead of a file?
+
+git-annex version: 5.20140517-gee56d21
+
+[[!tag confirmed]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/Assistant_breaks_when_broken_symlinks_are_in_.git__47__annex__47__tmp/comment_1_659e0c5127c92b1c7643823d0c240543._comment b/doc/bugs/Assistant_breaks_when_broken_symlinks_are_in_.git__47__annex__47__tmp/comment_1_659e0c5127c92b1c7643823d0c240543._comment
new file mode 100644
index 000000000..22e7b66f4
--- /dev/null
+++ b/doc/bugs/Assistant_breaks_when_broken_symlinks_are_in_.git__47__annex__47__tmp/comment_1_659e0c5127c92b1c7643823d0c240543._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 1"
+ date="2014-05-30T18:58:56Z"
+ content="""
+Well, Sak7.pdf is not a git-annex object filename. And .git/annex/tmp used to be used as a general-purpose temp directory, but in recent versions we're moving away from that; it's only supposed to contain git-annex objects.
+
+So, this must be a leftover file from an old version of git-annex. I don't know offhand what would create a symlink in the temp directory. However, the crash is from the code that was added to the assistant to clean up such left behind files. So, I'll fix that code.
+"""]]
diff --git a/doc/bugs/Assistant_does_not_actually_check_newly_annex-added_files_into_git_until_daily_sanity_check.mdwn b/doc/bugs/Assistant_does_not_actually_check_newly_annex-added_files_into_git_until_daily_sanity_check.mdwn
deleted file mode 100644
index d4f58b44d..000000000
--- a/doc/bugs/Assistant_does_not_actually_check_newly_annex-added_files_into_git_until_daily_sanity_check.mdwn
+++ /dev/null
@@ -1,106 +0,0 @@
-What steps will reproduce the problem?
-
-Move any file into a git annex repository using "mv". The symlink is created, content is stored in .git/annex, content may even be moved to other repos, but the symlink is not checked into git. A day later, the daily sanity check will add and check-in the link.
-
-What is the expected output? What do you see instead?
-
-After adding content to git-annex, "git status" should show a clean repo with everything checked in.
-
-Instead it looks like this:
-
- ~$ touch foobar
- ~$ rm foobar
- ~$ echo "foo" > bar
- ~$ mv bar annex/Incoming/
- ~$ cd annex
- annex$ git status
- # On branch master
- # Untracked files:
- # (use "git add <file>..." to include in what will be committed)
- #
- # Incoming/bar
- nothing added to commit but untracked files present (use "git add" to track)
- annex$
-
-
-
-I ran the assistant with the --debug option and this is what was in the daemon.log when this happened:
-
- [2013-03-13 09:23:36 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","ls-files","--others","--exclude-standard","-z","--","/Users/ed/annex/Incoming/bar"]
- [2013-03-13 09:23:37 EDT] read: lsof ["-F0can","+d","/Users/ed/annex/.git/annex/tmp/"]
- [2013-03-13 09:23:39 EDT] Committer: Adding bar
-
-
- (Recording state in git...)
- (Recording state in git...)
- (Recording state in git...)
- (Recording state in git...)
- add Incoming/bar (checksum...) recv: resource vanished (Connection reset by peer)
- [2013-03-13 09:23:39 EDT] 127.0.0.1 GET /sidebar/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:19.0) Gecko/20100101 Firefox/19.0
- [2013-03-13 09:23:40 EDT] 127.0.0.1 GET /sidebar/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:19.0) Gecko/20100101 Firefox/19.0
-
-
-What version of git-annex are you using? On what operating system?
-
-A fresh compile from last night (git hash fe2df85f0db08227556897db3b076ef321e4303a). OS X Lion.
-
-
-Please provide any additional information below.
-
-I get the same effect when doing this with a newly created "testannex" repo with nothing in it but a newly created file -- I just haven't left the assistant running in a test repo all day to confirm that the file doesn't get checked in till the next daily sanity check.
-
-Here it is on a newly-created, empty repo:
-
- testannex$ git init
- Initialized empty Git repository in /Users/ed/testannex/.git/
- testannex$ git annex init
- init ok
- (Recording state in git...)
- testannex$ git annex assistant --debug
- [2013-03-13 09:31:10 EDT] read: git ["--git-dir=/Users/ed/testannex/.git","--work-tree=/Users/ed/testannex","show-ref","git-annex"]
- [2013-03-13 09:31:10 EDT] read: git ["--git-dir=/Users/ed/testannex/.git","--work-tree=/Users/ed/testannex","show-ref","--hash","refs/heads/git-annex"]
- [2013-03-13 09:31:10 EDT] read: git ["--git-dir=/Users/ed/testannex/.git","--work-tree=/Users/ed/testannex","log","refs/heads/git-annex..4aeceaff629c83c35c1244da9eeeac4b7c228fef","--oneline","-n1"]
- [2013-03-13 09:31:10 EDT] chat: git ["--git-dir=/Users/ed/testannex/.git","--work-tree=/Users/ed/testannex","cat-file","--batch"]
- testannex$ cd
- ~$ echo "foo" > bar
- ~$ mv bar testannex/
- ~$ cd testannex/
- testannex$ git status
- # On branch master
- #
- # Initial commit
- #
- # Untracked files:
- # (use "git add <file>..." to include in what will be committed)
- #
- # bar
- nothing added to commit but untracked files present (use "git add" to track)
-
-
- (meanwhile.....)
-
- ~$ cd testannex/.git/annex/
- annex$ tail -f daemon.log
- [2013-03-13 09:31:10 EDT] TransferWatcher: watching for transfers
- [2013-03-13 09:31:10 EDT] read: git ["--git-dir=/Users/ed/testannex/.git","--work-tree=/Users/ed/testannex","show-ref","git-annex"]
- [2013-03-13 09:31:10 EDT] read: git ["--git-dir=/Users/ed/testannex/.git","--work-tree=/Users/ed/testannex","show-ref","--hash","refs/heads/git-annex"]
- [2013-03-13 09:31:10 EDT] read: git ["--git-dir=/Users/ed/testannex/.git","--work-tree=/Users/ed/testannex","log","refs/heads/git-annex..4aeceaff629c83c35c1244da9eeeac4b7c228fef","--oneline","-n1"]
- [2013-03-13 09:31:10 EDT] Merger: watching /Users/ed/testannex/.git/refs
- [2013-03-13 09:31:10 EDT] read: git ["--git-dir=/Users/ed/testannex/.git","--work-tree=/Users/ed/testannex","ls-tree","-z","--","refs/heads/git-annex","uuid.log","remote.log","trust.log","group.log","preferred-content.log"]
- [2013-03-13 09:31:10 EDT] read: git ["--git-dir=/Users/ed/testannex/.git","--work-tree=/Users/ed/testannex","ls-tree","-z","--","refs/heads/git-annex","uuid.log","remote.log","trust.log","group.log","preferred-content.log"]
- (scanning...) [2013-03-13 09:31:10 EDT] Watcher: Performing startup scan
- [2013-03-13 09:31:10 EDT] read: git ["--git-dir=/Users/ed/testannex/.git","--work-tree=/Users/ed/testannex","ls-files","--deleted","-z","--","/Users/ed/testannex"]
- (started...) [2013-03-13 09:31:10 EDT] Watcher: watching .
- [2013-03-13 09:31:48 EDT] read: git ["--git-dir=/Users/ed/testannex/.git","--work-tree=/Users/ed/testannex","ls-files","--others","--exclude-standard","-z","--","/Users/ed/testannex/bar"]
- [2013-03-13 09:31:49 EDT] read: lsof ["-F0can","+d","/Users/ed/testannex/.git/annex/tmp/"]
- [2013-03-13 09:31:51 EDT] Committer: Adding bar
-
- add bar [2013-03-13 09:31:51 EDT] chat: git ["--git-dir=/Users/ed/testannex/.git","--work-tree=/Users/ed/testannex","check-attr","-z","--stdin","annex.backend","annex.numcopies","--"]
- (checksum...) [2013-03-13 09:31:51 EDT] chat: git ["--git-dir=/Users/ed/testannex/.git","--work-tree=/Users/ed/testannex","cat-file","--batch"]
-
-> This bug affected OSX when indirect mode repositories were used.
-> Direct mode repositories were ok.
-> I expected to get an event from fsevents when I made the symlink,
-> and this event is not arriving (or at least not always). Switched
-> the code to use the same method for fsevents as for kqueue and that fixed
-> it. [[done]] --[[Joey]]
diff --git a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default.mdwn b/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default.mdwn
deleted file mode 100644
index c3810350b..000000000
--- a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default.mdwn
+++ /dev/null
@@ -1,16 +0,0 @@
-### Please describe the problem.
-
-I'm trying to use the assistant to replicate the basic dropbox functionality of having a synced folder between two machines. Instead of actually syncing file contents by default the assistant just creates broken symlinks.
-
-### What steps will reproduce the problem?
-
-I've setup two repositories with each other as ssh remotes and ran the assistant on each after setting them in direct mode. I can create files on each of the repositories and have them show up on the other but all that shows up is a broken link. Actual contents don't get transferred. If I do a "git annex get" I can get the contents just fine. I tried setting annex.numcopies to 2 and that didn't work either.
-
-What I'm missing here is some setting to tell the assistant "sync the contents of every new file". What it's doing instead is unacceptable. If I have the file in both repositories and change it in one, the other repository gets it's previous version of the file replaced by a broken symlink. From my point of view for the assistant to be a dropbox replacement it should never, under any circumstances, create a broken symlink in the sync folder. I had understood that that's what direct mode was, but it's not behaving that way right now at least.
-
-### What version of git-annex are you using? On what operating system?
-
-My basic setup for testing is two Ubuntu 12.04 LTS machines running git-annex 4.20130501
-
-> [[done]], broken ~/.config/git-annex/program file, which is now detected
-> and worked around. --[[Joey]]
diff --git a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_1_8577fdaa4d49e6241c4372b159694c9c._comment b/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_1_8577fdaa4d49e6241c4372b159694c9c._comment
deleted file mode 100644
index 5e300d557..000000000
--- a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_1_8577fdaa4d49e6241c4372b159694c9c._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="173.162.44.162"
- subject="comment 1"
- date="2013-05-20T13:57:59Z"
- content="""
-just fyi -- *broken* symlinks represent content which git-annex knows about, but is not present on that machine. They are there even in direct mode. In indirect mode, content which is present is represented by non-broken symlinks. In direct mode, content which is present is actual files.
-
-I'm not sure why your setup doesn't work. It seems as if it would, from your description of it.
-
-Your machines are successfully syncing their knowledge about what files exist (which is stored in git), but not actually transferring the content of those files. That's why symlinks are showing up (to show that those files exist) but not the content. I would think numcopies=2 would force that to happen.
-"""]]
diff --git a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_2_027521e48283c68b39315bb8213f6e45._comment b/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_2_027521e48283c68b39315bb8213f6e45._comment
deleted file mode 100644
index 9d5e07eb7..000000000
--- a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_2_027521e48283c68b39315bb8213f6e45._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkx5V3MTbzCXS3J7Mn9FEq8M9bPPYMkAHY"
- nickname="Pedro"
- subject="comment 2"
- date="2013-05-20T14:37:37Z"
- content="""
-I know what the broken symlinks are I just don't think they should ever happen in a direct mode repository. They're an artifact of the traditional way git-annex was run but the assistant in direct mode should never use them. Right now if one of the repositories changes a file and another finds out that has happened but hasn't synced the content yet you lose access to your file. That's not acceptable in a file sync utility. Dropbox certainly doesn't do that. What git-annex should do in this case is use the knowledge of the updated file to run a sync but before it can complete it maintain the file at its previous version. By definition direct mode should not be deleting my files and replacing them with symlinks, it should only replace existing files with newer versions of those same files.
-
-I also don't know why numcopies didn't work but it shouldn't be needed at all. What I want to do is to tell the assistant \"sync the contents of every file into this repository as soon as you can from whatever remote you happen to be able to copy it from\". I couldn't find a setting that would do that though.
-"""]]
diff --git a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_3_fd8f6938596aace60b04fb35c4069e37._comment b/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_3_fd8f6938596aace60b04fb35c4069e37._comment
deleted file mode 100644
index 65bccfb76..000000000
--- a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_3_fd8f6938596aace60b04fb35c4069e37._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-05-20T16:06:50Z"
- content="""
-If git-annex did not update its working tree until all files referenced in it had been downloaded, then it would be possible, if you have a lot of files, for changes to take a long time, or forever, to show up. I prefer the current behavior.
-
-In any case, is this bug report about the mechanics of how the assistant choses to update its working tree, or is it about your configuration of two repositories that are not syncing with one-another? Conflating two entirely separate issues in one bug report is a good way to add so much noise to it that nothing gets done.
-"""]]
diff --git a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_4_ca908021ab5a2a50fd0d4a7e8d12498f._comment b/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_4_ca908021ab5a2a50fd0d4a7e8d12498f._comment
deleted file mode 100644
index 035606957..000000000
--- a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_4_ca908021ab5a2a50fd0d4a7e8d12498f._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="173.162.44.162"
- subject="comment 4"
- date="2013-05-20T16:08:14Z"
- content="""
-The broken symlinks are important to me, because they represent content in archive directories which is intentionally not present, and they allow me to prompt git annex to retrieve that content by dragging and dropping them out of the archive subdirectory. I'm not sure what the issue is with transferring content for you though.
-
-"""]]
diff --git a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_5_73532556cfc354ad5f37a3f3a048fb32._comment b/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_5_73532556cfc354ad5f37a3f3a048fb32._comment
deleted file mode 100644
index 008ed98cb..000000000
--- a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_5_73532556cfc354ad5f37a3f3a048fb32._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 5"
- date="2013-05-20T16:09:47Z"
- content="""
-\"What I want to do is to tell the assistant \"sync the contents of every file into this repository as soon as you can from whatever remote you happen to be able to copy it from\". I couldn't find a setting that would do that though.\"
-
-The reason you cannot find a setting that does this, is because that is the default behavior of the assistent, when correctly configured.
-
-Since it syncs files for everyone else, I conclude there must be an error in your configuration. You need to descibe it in detail and/or enable debugging and paste a debug log.
-"""]]
diff --git a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_6_ced397b9e6119a0798a282ee07e885df._comment b/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_6_ced397b9e6119a0798a282ee07e885df._comment
deleted file mode 100644
index 61d5f9bd2..000000000
--- a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_6_ced397b9e6119a0798a282ee07e885df._comment
+++ /dev/null
@@ -1,61 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 6"
- date="2013-05-20T16:22:18Z"
- content="""
-Here is a simple example of setting up 2 repositories in the way the bug reporter describes here and on IRC. As you can see, the assistant syncs file content without any configuration:
-
-[[!format sh \"\"\"
-joey@gnu:~/tmp/test>mkdir 1 2
-joey@gnu:~/tmp/test>cd 1; git init; git-annex init; git annex direct; echo \"file added to 1\" > file_from_1; cd ..
-Initialized empty Git repository in /home/joey/tmp/test/1/.git/
-init ok
-(Recording state in git...)
-commit
-# On branch master
-#
-# Initial commit
-#
-nothing to commit (create/copy files and use \"git add\" to track)
-ok
-direct ok
-joey@gnu:~/tmp/test>cd 2; git init; git-annex init; git annex direct; echo \"file added to 2\" > file_from_2; cd ..
-Initialized empty Git repository in /home/joey/tmp/test/2/.git/
-init ok
-(Recording state in git...)
-commit
-# On branch master
-#
-# Initial commit
-#
-nothing to commit (create/copy files and use \"git add\" to track)
-ok
-direct ok
-joey@gnu:~/tmp/test>cd 1; git remote add 2 ssh://localhost/~joey/tmp/test/2; git annex assistant; cd ..
-joey@gnu:~/tmp/test>cd 2; git remote add 1 ssh://localhost/~joey/tmp/test/1; git annex assistant; cd ..
-(merging synced/git-annex into git-annex...)
-(Recording state in git...)
-joey@gnu:~/tmp/test>cd 1
-joey@gnu:~/tmp/test/1>ls
-file_from_1
-joey@gnu:~/tmp/test/1>ls
-file_from_1 file_from_2
-joey@gnu:~/tmp/test/1>cat file_from_2
-file added to 2
-joey@gnu:~/tmp/test/1>cd ..
-joey@gnu:~/tmp/test>cd 2
-joey@gnu:~/tmp/test/2>cat file_from_1
-file added to 1
-joey@gnu:~/tmp/test/2>rm file_from_2
-joey@gnu:~/tmp/test/2>cd ..
-joey@gnu:~/tmp/test>cd 1
-joey@gnu:~/tmp/test/1>ls
-file_from_1
-joey@gnu:~/tmp/test/1>date > newfile
-joey@gnu:~/tmp/test/1>cd ..
-joey@gnu:~/tmp/test>cd 2
-joey@gnu:~/tmp/test/2>cat newfile
-Mon May 20 12:20:24 JEST 2013
-\"\"\"]]
-"""]]
diff --git a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_7_8acb66850e5db8337cf3f2b2dd236ccc._comment b/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_7_8acb66850e5db8337cf3f2b2dd236ccc._comment
deleted file mode 100644
index 8bd901688..000000000
--- a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_7_8acb66850e5db8337cf3f2b2dd236ccc._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkx5V3MTbzCXS3J7Mn9FEq8M9bPPYMkAHY"
- nickname="Pedro"
- subject="comment 7"
- date="2013-05-20T19:52:30Z"
- content="""
-Your example is pretty much what I've done. I'll enable a debug log as soon as possible. By the away \"git annex assistant --foreground\" still logs to .git/annex/daemon.log instead of stdout/stderr, which I assume was not the intended behavior.
-
-This bug was indeed about the assistant not syncing, the comments about the broken symlinks were just in response to edheil's comment. I can post a separate bug report about this but the reason I don't think this should be default behavior is that it breaks several simple uses of git-annex. One simple example is using it to store your configs across machines (things like .bashrc). If at any point the git-annex can't sync a file (a network problem or ssh breakage or whatever) but becomes aware of a file change (for example through xmpp) you now have a broken login shell. In general it breaks the user expectations of having a \"folder that just happens to also sync\" for something where his files randomly get replaced with strange broken things for odd technical reasons.
-"""]]
diff --git a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_8_7eb530851ae6fa1a69813725c4e8fcec._comment b/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_8_7eb530851ae6fa1a69813725c4e8fcec._comment
deleted file mode 100644
index 157923a1e..000000000
--- a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_8_7eb530851ae6fa1a69813725c4e8fcec._comment
+++ /dev/null
@@ -1,59 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkx5V3MTbzCXS3J7Mn9FEq8M9bPPYMkAHY"
- nickname="Pedro"
- subject="comment 8"
- date="2013-05-20T19:59:22Z"
- content="""
-Here's the same example you posted being followed by me and showing the problem
-
-[[!format sh \"\"\"
-$mkdir 1 2
-$cd 1; git init; git-annex init; git annex direct; echo \"file added to 1\" > file_from_1; cd ..
-Initialized empty Git repository in /home/pedrocr/Hacks/test-git-annex/1/.git/
-init ok
-(Recording state in git...)
-commit
-# On branch master
-#
-# Initial commit
-#
-nothing to commit (create/copy files and use \"git add\" to track)
-ok
-direct ok
-$cd 2; git init; git-annex init; git annex direct; echo \"file added to 2\" > file_from_2; cd ..
-Initialized empty Git repository in /home/pedrocr/Hacks/test-git-annex/2/.git/
-init ok
-(Recording state in git...)
-commit
-# On branch master
-#
-# Initial commit
-#
-nothing to commit (create/copy files and use \"git add\" to track)
-ok
-direct ok
-$cd 1; git remote add 2 ssh://localhost/~pedrocr/Hacks/test-git-annex/2; git annex assistant; cd ..
-$cd 2; git remote add 1 ssh://localhost/~pedrocr/Hacks/test-git-annex/1; git annex assistant; cd ..
-(merging synced/git-annex into git-annex...)
-$cd 1
-$ls
-file_from_1 file_from_2
-$ls -la
-total 20
-drwxrwxr-x 3 pedrocr pedrocr 4096 May 20 20:57 .
-drwxrwxr-x 4 pedrocr pedrocr 4096 May 20 20:55 ..
--rw-r--r-- 1 pedrocr pedrocr 16 May 20 20:56 file_from_1
-lrwxrwxrwx 1 pedrocr pedrocr 180 May 20 20:57 file_from_2 -> .git/annex/objects/1P/8w/SHA256E-s16--b651aaa274225b617cb4d3033047ac6aee29dd6f2465f94ec38dc6630b7d48c8/SHA256E-s16--b651aaa274225b617cb4d3033047ac6aee29dd6f2465f94ec38dc6630b7d48c8
-drwxrwxr-x 9 pedrocr pedrocr 4096 May 20 20:57 .git
-$cd ..
-$cd 2
-$ls -la
-total 20
-drwxrwxr-x 3 pedrocr pedrocr 4096 May 20 20:57 .
-drwxrwxr-x 4 pedrocr pedrocr 4096 May 20 20:55 ..
-lrwxrwxrwx 1 pedrocr pedrocr 180 May 20 20:57 file_from_1 -> .git/annex/objects/qQ/x9/SHA256E-s16--cca8b6c2db480aa680e12c48f471a351de69978c7665fac5b63d9a765f4c16f4/SHA256E-s16--cca8b6c2db480aa680e12c48f471a351de69978c7665fac5b63d9a765f4c16f4
--rw-r--r-- 1 pedrocr pedrocr 16 May 20 20:56 file_from_2
-drwxrwxr-x 9 pedrocr pedrocr 4096 May 20 20:57 .git
-$
-\"\"\"]]
-"""]]
diff --git a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_9_c7d51a26e1febc3894d02546940d64e5._comment b/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_9_c7d51a26e1febc3894d02546940d64e5._comment
deleted file mode 100644
index 2f5e2d43d..000000000
--- a/doc/bugs/Assistant_doesn__39__t_actually_sync_file_contents_by_default/comment_9_c7d51a26e1febc3894d02546940d64e5._comment
+++ /dev/null
@@ -1,19 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 9"
- date="2013-05-20T21:43:04Z"
- content="""
-Based on the log, it appears that you have a `~/.config/git-annex/program` file that contains \"/home/pedrocr/software/git-annex/git-annex.linux/git-annex\", but that is either not where git-annex is actually installed, or running that program
-(which git-annex does when it needs to transfer a file contents) fails.
-
-I am able to exactly replicate the failure to transfer file content, and the log output, when I set things up in that way.
-
-This would be consistent with you, for example, having previously installed git-annex from the standalone tarball, used it at least once, and then deleted that installation, and installed it from, say, a Ubuntu repository.
-
-I've put in a fix so if the programfile is wrong, git-annex just tries PATH.
-
-(BTW, I do not advocate storing config files in the git annex. Small files that you want to have fully versioned are best stored in git. The git-annex assistant can still be used for syncing files that are checked into git in the regular way. See [[tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant]].)
-
-(git annex assistant --foreground intentionally logs to the log file, because otherwise the \"view logs\" page in the webapp can't show any logs.)
-"""]]
diff --git a/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files.mdwn b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files.mdwn
new file mode 100644
index 000000000..ebf238072
--- /dev/null
+++ b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files.mdwn
@@ -0,0 +1,64 @@
+### Please describe the problem.
+
+The assistant/webapp doesn't drop files from the local (source) repository after transferring it to the 2 backup repositories (numcopies 2), but they are listed with:
+
+ git annex find --want-drop
+
+### What steps will reproduce the problem?
+
+#### mintcream ####
+
+ git init annex
+ cd ~/annex
+ git commit -m "create" --allow-empty
+ git annex init mintcream
+ git annex numcopies 2
+ git annex group here source
+ git config annex.autocommit false
+ git annex webapp
+
+#### liquorice ####
+
+ git init annex
+ cd ~/annex
+ git annex init liquorice
+ git annex group here backup
+
+#### candyfloss ####
+
+ git init annex
+ cd ~/annex
+ git annex init candyfloss
+ git annex group here backup
+
+#### mintcream ####
+
+ (add both backup repositories in webapp as "remote repositories")
+ (copy files into ~/annex directory)
+ git annex add
+ git commit -m "add some files"
+ (use "sync now" to prod assistant into noticing the commit)
+
+### What was I expecting to happen? ###
+
+The assistant to transfer the files to liquorice and candyfloss, then for the assistant to drop the files from mintcream.
+
+### What actually happened? ###
+
+The assistant transfers the files to liquorice and candyfloss. No files are dropped from mintcream.
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex version: 5.20140707-g923b436
+
+Arch Linux (git-annex-bin from AUR)
+
+### Please provide any additional information below.
+
+I wish to retain control of the commits on "master" (annex.autocommit false) but want the assistant to handle moving/dropping the files as required in the background.
+
+ git annex drop --auto
+
+works as expected.
+
+> [[done]]; user misconfiguration. --[[Joey]]
diff --git a/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_1_f32fbae29e4db039804c0853256c238c._comment b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_1_f32fbae29e4db039804c0853256c238c._comment
new file mode 100644
index 000000000..61c62703c
--- /dev/null
+++ b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_1_f32fbae29e4db039804c0853256c238c._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-10T18:48:17Z"
+ content="""
+Reproduced. `git annex sync --content` has the same problem.
+
+Of course, both it and the assistant *do* check if files can be dropped. For some reason, it is deciding it is not safe to drop the file.
+"""]]
diff --git a/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_2_405bfa00dfd433352c263afe75e94b2c._comment b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_2_405bfa00dfd433352c263afe75e94b2c._comment
new file mode 100644
index 000000000..d7d288b39
--- /dev/null
+++ b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_2_405bfa00dfd433352c263afe75e94b2c._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="user misconfiguration"
+ date="2014-07-10T19:02:00Z"
+ content="""
+Reason is simple: You manually put the repository into the source group, but its preferred content is not set to \"standard\". No matter what group a repository is in, you have to set its preferred content to something, or git-annex will default to assuming you want the repo to retain all files.
+
+So, `git annex wanted mintcream standard` and away you go. You'll also want to set that for the other 2 repos probably..
+"""]]
diff --git a/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_3_c8cac8d800199ca4d8a65ba72abf678e._comment b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_3_c8cac8d800199ca4d8a65ba72abf678e._comment
new file mode 100644
index 000000000..81b25c8f0
--- /dev/null
+++ b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_3_c8cac8d800199ca4d8a65ba72abf678e._comment
@@ -0,0 +1,40 @@
+[[!comment format=mdwn
+ username="CandyAngel"
+ ip="81.111.193.130"
+ subject="comment 3"
+ date="2014-07-11T10:41:23Z"
+ content="""
+Ohhh I see!
+
+I was expecting \"standard\" to be the default because of what vicfg shows..
+
+ # Repository preferred contents
+ # (for web)
+ #wanted 00000000-0000-0000-0000-000000000001 = standard
+ # (for test)
+ #wanted 025d4d21-7648-426c-a406-bb7f27688afe = standard
+
+ # Group preferred contents
+ # (Used by repositories with \"groupwanted\" in their preferred contents)
+ #groupwanted archive = standard
+ #groupwanted backup = standard
+ #groupwanted client = standard
+ #groupwanted incrementalbackup = standard
+ #groupwanted manual = standard
+ #groupwanted public = standard
+ #groupwanted smallarchive = standard
+ #groupwanted source = standard
+ #groupwanted transfer = standard
+
+In my experience with configuration files, a commented out line like this:
+
+ #wanted 025d4d21-7648-426c-a406-bb7f27688afe = standard
+
+without any \"this is an example\" text above it means \"this is the default setting\". Everything in vicfg looks like it is the current settings, rather than just placeholders..
+
+I understand why you need to set the wanted explicitly (at least from the command line), but the way information is shown in vicfg led me to interact with it incorrectly. Would it be worth adding a disclaimer that commented lines are examples, not defaults? As far as I am aware, the logic I explained above (commented line == default) is the \"norm\" in *nix configuration files, which would make vicfg non-intuitive.
+
+All I need to do now is not be so bothered by how messy the git-annex branch looks when the assistant is running things! :D
+
+Thankies
+"""]]
diff --git a/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_4_ee5fa8a22d1571b0040aa97c4979ef92._comment b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_4_ee5fa8a22d1571b0040aa97c4979ef92._comment
new file mode 100644
index 000000000..237182879
--- /dev/null
+++ b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_4_ee5fa8a22d1571b0040aa97c4979ef92._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="CandyAngel"
+ ip="81.111.193.130"
+ subject="comment 4"
+ date="2014-07-11T10:57:58Z"
+ content="""
+Actually, I'm still a little confused.
+
+If git-annex was presuming I wanted to keep all the files as you say, why were they listed in `git annex find --want-drop` and dropped by `git annex drop --auto`?
+
+Shouldn't they have been empty and a no-op respectively?
+
+There seems to be a difference in the behaviour between the command line (wanting to and actually dropping the files) and the assistant (wanting to keep them) for the same settings.
+"""]]
diff --git a/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_5_eef448b9e3dd1a717430a60d1001a7ee._comment b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_5_eef448b9e3dd1a717430a60d1001a7ee._comment
new file mode 100644
index 000000000..11c690cb7
--- /dev/null
+++ b/doc/bugs/Assistant_doesn__39__t_check_if_it_can_drop_files/comment_5_eef448b9e3dd1a717430a60d1001a7ee._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 5"
+ date="2014-07-11T18:27:44Z"
+ content="""
+The assistant defaults to assuming all files are wanted if there's no preferred content settings, while command-line dropping stuff defaults to assuming no files are wanted (or more accurately, that you'll drop anything you don't want and get anything you do) when there's no preferred content settings. So the default differs, but this only matters when not setting preferred contents.
+
+I agree that the vicfg could be misread, so have changed it.
+"""]]
diff --git a/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate.mdwn b/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate.mdwn
new file mode 100644
index 000000000..0ad0f1eb3
--- /dev/null
+++ b/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate.mdwn
@@ -0,0 +1,435 @@
+### Please describe the problem.
+
+On two hosts, I've configured two separate local repositories (~/foo and ~/bar) with the assistant and added a transfer repository to ~/foo.
+
+While files are kept separate, the configuration seems to get mixed up. This results in all files beeing uploaded to the configured transfer repository.
+
+The reason might be, that informations about ~/bar are included in the configuration of ~/foo (see below).
+
+### What steps will reproduce the problem?
+
+* Create local repository ~/foo on both hosts
+* Add transfer repository to ~/foo on both hosts
+* Add some files to ~/foo and let it sync
+* Create local repository ~/bar and select keep the repositories separate on both hosts
+* All files of ~/foo will now be uploaded again to the transfer repository
+
+### What version of git-annex are you using? On what operating system?
+
+5.20140421~bpo70+1 on Debian 7.5 amd64
+
+### Please provide any additional information below.
+
+*trh@czc4142wfz:~/foo$ git-annex info*
+<pre><code>repository mode: direct
+trusted repositories: 0
+semitrusted repositories: 4
+ 00000000-0000-0000-0000-000000000001 -- web
+ bd23a5ed-af6e-466d-ac8c-9ea38a220c62 -- trh@r9-y3pll:~/foo
+ cc888105-b6c3-4926-8396-e3870f6bfc05 -- transfer_foo
+ f3b332fd-4b7a-4a5b-b077-8f13d3d9a407 -- here (trh@czc4142wfz:~/foo)
+untrusted repositories: 0
+transfers in progress: none
+available local disk space: 356.11 gigabytes (+1 megabyte reserved)
+local annex keys: 2
+local annex size: 2.99 gigabytes
+annexed files in working tree: 2
+size of annexed files in working tree: 2.99 gigabytes
+bloom filter size: 16 mebibytes (0% full)
+backend usage:
+ SHA256E: 4
+</code></pre>
+
+*trh@czc4142wfz:~/bar$ git-annex info*
+<pre><code>repository mode: direct
+trusted repositories: 0
+semitrusted repositories: 2
+ 00000000-0000-0000-0000-000000000001 -- web
+ f1478436-cf7b-4a05-91a6-91157ae5e9c4 -- here (trh@czc4142wfz:~/bar)
+untrusted repositories: 0
+transfers in progress: none
+available local disk space: 356.11 gigabytes (+1 megabyte reserved)
+local annex keys: 0
+local annex size: 0 bytes
+annexed files in working tree: 0
+size of annexed files in working tree: 0 bytes
+bloom filter size: 16 mebibytes (0% full)
+backend usage:
+</code></pre>
+
+*trh@czc4142wfz:~/foo$ git-annex vicfg*
+<pre><code># git-annex configuration
+#
+# Changes saved to this file will be recorded in the git-annex branch.
+#
+# Lines in this file have the format:
+# setting field = value
+
+# Repository trust configuration
+# (Valid trust levels: trusted semitrusted untrusted dead)
+# (for web)
+#trust 00000000-0000-0000-0000-000000000001 = semitrusted
+# (for trh@r9-y3pll:~/foo)
+#trust bd23a5ed-af6e-466d-ac8c-9ea38a220c62 = semitrusted
+# (for transfer_foo)
+#trust cc888105-b6c3-4926-8396-e3870f6bfc05 = semitrusted
+# (for trh@czc4142wfz:~/foo)
+#trust f3b332fd-4b7a-4a5b-b077-8f13d3d9a407 = semitrusted
+
+# Repository groups
+# (Standard groups: client transfer backup incrementalbackup smallarchive archive source manual public unwanted)
+# (Separate group names with spaces)
+# (for )
+group 357eaef4-af1b-491a-a003-01c2d583056e = client
+# (for trh@r9-y3pll:~/foo)
+group bd23a5ed-af6e-466d-ac8c-9ea38a220c62 = client
+# (for )
+group f1478436-cf7b-4a05-91a6-91157ae5e9c4 = client
+# (for trh@czc4142wfz:~/foo)
+group f3b332fd-4b7a-4a5b-b077-8f13d3d9a407 = client
+# (for transfer_foo)
+group cc888105-b6c3-4926-8396-e3870f6bfc05 = transfer
+# (for web)
+#group 00000000-0000-0000-0000-000000000001 =
+
+# Repository preferred contents
+# (for )
+wanted 357eaef4-af1b-491a-a003-01c2d583056e = standard
+# (for trh@r9-y3pll:~/foo)
+wanted bd23a5ed-af6e-466d-ac8c-9ea38a220c62 = standard
+# (for transfer_foo)
+wanted cc888105-b6c3-4926-8396-e3870f6bfc05 = standard
+# (for )
+wanted f1478436-cf7b-4a05-91a6-91157ae5e9c4 = standard
+# (for trh@czc4142wfz:~/foo)
+wanted f3b332fd-4b7a-4a5b-b077-8f13d3d9a407 = standard
+# (for web)
+#wanted 00000000-0000-0000-0000-000000000001 = standard
+
+# Group preferred contents
+# (Used by repositories with "groupwanted" in their preferred contents)
+#groupwanted archive = standard
+#groupwanted backup = standard
+#groupwanted client = standard
+#groupwanted incrementalbackup = standard
+#groupwanted manual = standard
+#groupwanted public = standard
+#groupwanted smallarchive = standard
+#groupwanted source = standard
+#groupwanted transfer = standard
+#groupwanted unwanted = standard
+
+# Standard preferred contents
+# (Used by wanted or groupwanted expressions containing "standard")
+# (For reference only; built-in and cannot be changed!)
+# standard client = (((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1
+# standard transfer = (not (inallgroup=client and copies=client:2) and ((((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1)) or approxlackingcopies=1
+# standard backup = include=* or unused
+# standard incrementalbackup = ((include=* or unused) and (not copies=incrementalbackup:1)) or approxlackingcopies=1
+# standard smallarchive = ((include=*/archive/* or include=archive/*) and ((not (copies=archive:1 or copies=smallarchive:1)) or approxlackingcopies=1)) or approxlackingcopies=1
+# standard archive = (not (copies=archive:1 or copies=smallarchive:1)) or approxlackingcopies=1
+# standard source = not (copies=1)
+# standard manual = present and ((((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1)
+# standard public = inpreferreddir
+# standard unwanted = exclude=*
+
+# Repository required contents
+# (for web)
+#required 00000000-0000-0000-0000-000000000001 =
+# (for trh@r9-y3pll:~/foo)
+#required bd23a5ed-af6e-466d-ac8c-9ea38a220c62 =
+# (for transfer_foo)
+#required cc888105-b6c3-4926-8396-e3870f6bfc05 =
+# (for trh@czc4142wfz:~/foo)
+#required f3b332fd-4b7a-4a5b-b077-8f13d3d9a407 =
+
+# Scheduled activities
+# (Separate multiple activities with "; ")
+# (for web)
+#schedule 00000000-0000-0000-0000-000000000001 =
+# (for trh@r9-y3pll:~/foo)
+#schedule bd23a5ed-af6e-466d-ac8c-9ea38a220c62 =
+# (for transfer_foo)
+#schedule cc888105-b6c3-4926-8396-e3870f6bfc05 =
+# (for trh@czc4142wfz:~/foo)
+#schedule f3b332fd-4b7a-4a5b-b077-8f13d3d9a407 =
+</code></pre>
+
+**Note: f1478436-cf7b-4a05-91a6-91157ae5e9c4 is id of ~/bar on local host (see below) / 357eaef4-af1b-491a-a003-01c2d583056e is id of ~/bar on r9-y3pll**
+
+*trh@czc4142wfz:~/bar$ git-annex vicfg*
+<pre><code># git-annex configuration
+#
+# Changes saved to this file will be recorded in the git-annex branch.
+#
+# Lines in this file have the format:
+# setting field = value
+
+# Repository trust configuration
+# (Valid trust levels: trusted semitrusted untrusted dead)
+# (for web)
+#trust 00000000-0000-0000-0000-000000000001 = semitrusted
+# (for trh@czc4142wfz:~/bar)
+#trust f1478436-cf7b-4a05-91a6-91157ae5e9c4 = semitrusted
+
+# Repository groups
+# (Standard groups: client transfer backup incrementalbackup smallarchive archive source manual public unwanted)
+# (Separate group names with spaces)
+# (for web)
+#group 00000000-0000-0000-0000-000000000001 =
+# (for trh@czc4142wfz:~/bar)
+#group f1478436-cf7b-4a05-91a6-91157ae5e9c4 =
+
+# Repository preferred contents
+# (for web)
+#wanted 00000000-0000-0000-0000-000000000001 = standard
+# (for trh@czc4142wfz:~/bar)
+#wanted f1478436-cf7b-4a05-91a6-91157ae5e9c4 = standard
+
+# Group preferred contents
+# (Used by repositories with "groupwanted" in their preferred contents)
+#groupwanted archive = standard
+#groupwanted backup = standard
+#groupwanted client = standard
+#groupwanted incrementalbackup = standard
+#groupwanted manual = standard
+#groupwanted public = standard
+#groupwanted smallarchive = standard
+#groupwanted source = standard
+#groupwanted transfer = standard
+#groupwanted unwanted = standard
+
+# Standard preferred contents
+# (Used by wanted or groupwanted expressions containing "standard")
+# (For reference only; built-in and cannot be changed!)
+# standard client = (((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1
+# standard transfer = (not (inallgroup=client and copies=client:2) and ((((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1)) or approxlackingcopies=1
+# standard backup = include=* or unused
+# standard incrementalbackup = ((include=* or unused) and (not copies=incrementalbackup:1)) or approxlackingcopies=1
+# standard smallarchive = ((include=*/archive/* or include=archive/*) and ((not (copies=archive:1 or copies=smallarchive:1)) or approxlackingcopies=1)) or approxlackingcopies=1
+# standard archive = (not (copies=archive:1 or copies=smallarchive:1)) or approxlackingcopies=1
+# standard source = not (copies=1)
+# standard manual = present and ((((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1)
+# standard public = inpreferreddir
+# standard unwanted = exclude=*
+
+# Repository required contents
+# (for web)
+#required 00000000-0000-0000-0000-000000000001 =
+# (for trh@czc4142wfz:~/bar)
+#required f1478436-cf7b-4a05-91a6-91157ae5e9c4 =
+
+# Scheduled activities
+# (Separate multiple activities with "; ")
+# (for web)
+#schedule 00000000-0000-0000-0000-000000000001 =
+# (for trh@czc4142wfz:~/bar)
+#schedule f1478436-cf7b-4a05-91a6-91157ae5e9c4 =
+</code></pre>
+
+*trh@r9-y3pll:~/foo$ git-annex info*
+<pre><code>repository mode: direct
+trusted repositories: 0
+semitrusted repositories: 4
+ 00000000-0000-0000-0000-000000000001 -- web
+ bd23a5ed-af6e-466d-ac8c-9ea38a220c62 -- here (trh@r9-y3pll:~/foo)
+ cc888105-b6c3-4926-8396-e3870f6bfc05 -- transfer_foo
+ f3b332fd-4b7a-4a5b-b077-8f13d3d9a407 -- trh@czc4142wfz:~/foo
+untrusted repositories: 0
+transfers in progress: none
+available local disk space: 280.24 gigabytes (+1 megabyte reserved)
+local annex keys: 2
+local annex size: 2.99 gigabytes
+annexed files in working tree: 2
+size of annexed files in working tree: 2.99 gigabytes
+bloom filter size: 16 mebibytes (0% full)
+backend usage:
+ SHA256E: 4
+</code></pre>
+
+*trh@r9-y3pll:~/bar$ git-annex info*
+<pre><code>repository mode: direct
+trusted repositories: 0
+semitrusted repositories: 2
+ 00000000-0000-0000-0000-000000000001 -- web
+ 357eaef4-af1b-491a-a003-01c2d583056e -- here (trh@r9-y3pll:~/bar)
+untrusted repositories: 0
+transfers in progress: none
+available local disk space: 280.24 gigabytes (+1 megabyte reserved)
+local annex keys: 0
+local annex size: 0 bytes
+annexed files in working tree: 0
+size of annexed files in working tree: 0 bytes
+bloom filter size: 16 mebibytes (0% full)
+backend usage:
+</code></pre>
+
+*trh@r9-y3pll:~/foo$ git-annex vicfg*
+<pre><code># git-annex configuration
+#
+# Changes saved to this file will be recorded in the git-annex branch.
+#
+# Lines in this file have the format:
+# setting field = value
+
+# Repository trust configuration
+# (Valid trust levels: trusted semitrusted untrusted dead)
+# (for web)
+#trust 00000000-0000-0000-0000-000000000001 = semitrusted
+# (for trh@r9-y3pll:~/foo)
+#trust bd23a5ed-af6e-466d-ac8c-9ea38a220c62 = semitrusted
+# (for transfer_foo)
+#trust cc888105-b6c3-4926-8396-e3870f6bfc05 = semitrusted
+# (for trh@czc4142wfz:~/foo)
+#trust f3b332fd-4b7a-4a5b-b077-8f13d3d9a407 = semitrusted
+
+# Repository groups
+# (Standard groups: client transfer backup incrementalbackup smallarchive archive source manual public unwanted)
+# (Separate group names with spaces)
+# (for )
+group 357eaef4-af1b-491a-a003-01c2d583056e = client
+# (for trh@r9-y3pll:~/foo)
+group bd23a5ed-af6e-466d-ac8c-9ea38a220c62 = client
+# (for )
+group f1478436-cf7b-4a05-91a6-91157ae5e9c4 = client
+# (for trh@czc4142wfz:~/foo)
+group f3b332fd-4b7a-4a5b-b077-8f13d3d9a407 = client
+# (for transfer_foo)
+group cc888105-b6c3-4926-8396-e3870f6bfc05 = transfer
+# (for web)
+#group 00000000-0000-0000-0000-000000000001 =
+
+# Repository preferred contents
+# (for )
+wanted 357eaef4-af1b-491a-a003-01c2d583056e = standard
+# (for trh@r9-y3pll:~/foo)
+wanted bd23a5ed-af6e-466d-ac8c-9ea38a220c62 = standard
+# (for transfer_foo)
+wanted cc888105-b6c3-4926-8396-e3870f6bfc05 = standard
+# (for )
+wanted f1478436-cf7b-4a05-91a6-91157ae5e9c4 = standard
+# (for trh@czc4142wfz:~/foo)
+wanted f3b332fd-4b7a-4a5b-b077-8f13d3d9a407 = standard
+# (for web)
+#wanted 00000000-0000-0000-0000-000000000001 = standard
+
+# Group preferred contents
+# (Used by repositories with "groupwanted" in their preferred contents)
+#groupwanted archive = standard
+#groupwanted backup = standard
+#groupwanted client = standard
+#groupwanted incrementalbackup = standard
+#groupwanted manual = standard
+#groupwanted public = standard
+#groupwanted smallarchive = standard
+#groupwanted source = standard
+#groupwanted transfer = standard
+#groupwanted unwanted = standard
+
+# Standard preferred contents
+# (Used by wanted or groupwanted expressions containing "standard")
+# (For reference only; built-in and cannot be changed!)
+# standard client = (((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1
+# standard transfer = (not (inallgroup=client and copies=client:2) and ((((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1)) or approxlackingcopies=1
+# standard backup = include=* or unused
+# standard incrementalbackup = ((include=* or unused) and (not copies=incrementalbackup:1)) or approxlackingcopies=1
+# standard smallarchive = ((include=*/archive/* or include=archive/*) and ((not (copies=archive:1 or copies=smallarchive:1)) or approxlackingcopies=1)) or approxlackingcopies=1
+# standard archive = (not (copies=archive:1 or copies=smallarchive:1)) or approxlackingcopies=1
+# standard source = not (copies=1)
+# standard manual = present and ((((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1)
+# standard public = inpreferreddir
+# standard unwanted = exclude=*
+
+# Repository required contents
+# (for web)
+#required 00000000-0000-0000-0000-000000000001 =
+# (for trh@r9-y3pll:~/foo)
+#required bd23a5ed-af6e-466d-ac8c-9ea38a220c62 =
+# (for transfer_foo)
+#required cc888105-b6c3-4926-8396-e3870f6bfc05 =
+# (for trh@czc4142wfz:~/foo)
+#required f3b332fd-4b7a-4a5b-b077-8f13d3d9a407 =
+
+# Scheduled activities
+# (Separate multiple activities with "; ")
+# (for web)
+#schedule 00000000-0000-0000-0000-000000000001 =
+# (for trh@r9-y3pll:~/foo)
+#schedule bd23a5ed-af6e-466d-ac8c-9ea38a220c62 =
+# (for transfer_foo)
+#schedule cc888105-b6c3-4926-8396-e3870f6bfc05 =
+# (for trh@czc4142wfz:~/foo)
+#schedule f3b332fd-4b7a-4a5b-b077-8f13d3d9a407 =
+</code></pre>
+
+*trh@r9-y3pll:~/bar$ git-annex vicfg*
+<pre><code># git-annex configuration
+#
+# Changes saved to this file will be recorded in the git-annex branch.
+#
+# Lines in this file have the format:
+# setting field = value
+
+# Repository trust configuration
+# (Valid trust levels: trusted semitrusted untrusted dead)
+# (for web)
+#trust 00000000-0000-0000-0000-000000000001 = semitrusted
+# (for trh@r9-y3pll:~/bar)
+#trust 357eaef4-af1b-491a-a003-01c2d583056e = semitrusted
+
+# Repository groups
+# (Standard groups: client transfer backup incrementalbackup smallarchive archive source manual public unwanted)
+# (Separate group names with spaces)
+# (for web)
+#group 00000000-0000-0000-0000-000000000001 =
+# (for trh@r9-y3pll:~/bar)
+#group 357eaef4-af1b-491a-a003-01c2d583056e =
+
+# Repository preferred contents
+# (for web)
+#wanted 00000000-0000-0000-0000-000000000001 = standard
+# (for trh@r9-y3pll:~/bar)
+#wanted 357eaef4-af1b-491a-a003-01c2d583056e = standard
+
+# Group preferred contents
+# (Used by repositories with "groupwanted" in their preferred contents)
+#groupwanted archive = standard
+#groupwanted backup = standard
+#groupwanted client = standard
+#groupwanted incrementalbackup = standard
+#groupwanted manual = standard
+#groupwanted public = standard
+#groupwanted smallarchive = standard
+#groupwanted source = standard
+#groupwanted transfer = standard
+#groupwanted unwanted = standard
+
+# Standard preferred contents
+# (Used by wanted or groupwanted expressions containing "standard")
+# (For reference only; built-in and cannot be changed!)
+# standard client = (((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1
+# standard transfer = (not (inallgroup=client and copies=client:2) and ((((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1)) or approxlackingcopies=1
+# standard backup = include=* or unused
+# standard incrementalbackup = ((include=* or unused) and (not copies=incrementalbackup:1)) or approxlackingcopies=1
+# standard smallarchive = ((include=*/archive/* or include=archive/*) and ((not (copies=archive:1 or copies=smallarchive:1)) or approxlackingcopies=1)) or approxlackingcopies=1
+# standard archive = (not (copies=archive:1 or copies=smallarchive:1)) or approxlackingcopies=1
+# standard source = not (copies=1)
+# standard manual = present and ((((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1)
+# standard public = inpreferreddir
+# standard unwanted = exclude=*
+
+# Repository required contents
+# (for web)
+#required 00000000-0000-0000-0000-000000000001 =
+# (for trh@r9-y3pll:~/bar)
+#required 357eaef4-af1b-491a-a003-01c2d583056e =
+
+# Scheduled activities
+# (Separate multiple activities with "; ")
+# (for web)
+#schedule 00000000-0000-0000-0000-000000000001 =
+# (for trh@r9-y3pll:~/bar)
+#schedule 357eaef4-af1b-491a-a003-01c2d583056e =
+</code></pre>
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_1_418103046e296a43cfe0f0cf69e729d5._comment b/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_1_418103046e296a43cfe0f0cf69e729d5._comment
new file mode 100644
index 000000000..7a21b52ce
--- /dev/null
+++ b/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_1_418103046e296a43cfe0f0cf69e729d5._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 1"
+ date="2014-05-29T18:21:30Z"
+ content="""
+As far as I can understand the description (which has an lot of different \"foo\"'s in it that seem to refer to different things?) -- This is the assistant behaving as designed: Any time two repositories are pointed at the same transfer repository, or removable drive repository, etc, they will unify and share all their files.
+"""]]
diff --git a/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_2_9405804842bb23e8040ec85b271b18af._comment b/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_2_9405804842bb23e8040ec85b271b18af._comment
new file mode 100644
index 000000000..f6a37583a
--- /dev/null
+++ b/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_2_9405804842bb23e8040ec85b271b18af._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmi0jblSiI4c5-EswqKw4PXkx5M4fuVvdk"
+ nickname="Henry"
+ subject="comment 2"
+ date="2014-05-29T19:10:08Z"
+ content="""
+I'm using the same folder name on different hosts. So yes, ~/foo exists 3 times. Let me try to clarify it:
+
+<pre>
+Client Transfer Client
+r9-y3pll edhp-transfer czc4142wfz
+~/foo <-> ~/foo <-> ~/foo
+~/bar ~/bar
+</pre>
+
+So, I have two clients and one transfer server. Both clients have two local repositories ~/foo and ~/bar.
+
+The transfer repository has only be configured to the ~/foo client repositories, but not to the ~/bar repositories.
+
+But for some reason, the ~/foo repositories know about the ~/bar repositories (see the id's of the git-annex vicfg output for ~/foo repositories above) and keep uploading files to the transfer repository, even I did select keep the repositories separate on both hosts.
+
+
+"""]]
diff --git a/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_3_01fc26e443ea3a8a351174b45f25dc2a._comment b/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_3_01fc26e443ea3a8a351174b45f25dc2a._comment
new file mode 100644
index 000000000..acbc51c8e
--- /dev/null
+++ b/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_3_01fc26e443ea3a8a351174b45f25dc2a._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 3"
+ date="2014-05-29T19:14:51Z"
+ content="""
+Are you using XMPP?
+
+There's no way for the foo repositories to learn about the bar repositories unless one of the foo repositories has a remote that is either one of the bar repositories, or that one of the bar repositories points to.
+"""]]
diff --git a/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_4_6e8f0889359bb2f3e3438658c9776f76._comment b/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_4_6e8f0889359bb2f3e3438658c9776f76._comment
new file mode 100644
index 000000000..58804fccf
--- /dev/null
+++ b/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_4_6e8f0889359bb2f3e3438658c9776f76._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmi0jblSiI4c5-EswqKw4PXkx5M4fuVvdk"
+ nickname="Henry"
+ subject="comment 4"
+ date="2014-05-29T20:10:15Z"
+ content="""
+No, I haven't configured XMPP yet.
+
+I just tried something else:
+
+Within assistant I've switched to repository ~bar and then added another repository ~/foobar and again selected keep the repositories separate.
+
+The result is, ~/bar knows (vicfg) about ~/foobar, but ~/foo doesn't. It seems to me, that when adding another local repository, the new repository gets known to the currently selected repository.
+"""]]
diff --git a/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_5_902fe9ff295453461b66d84463205fc3._comment b/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_5_902fe9ff295453461b66d84463205fc3._comment
new file mode 100644
index 000000000..9954f7b01
--- /dev/null
+++ b/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_5_902fe9ff295453461b66d84463205fc3._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 5"
+ date="2014-05-29T20:46:47Z"
+ content="""
+Ok, reproduced that.
+
+Webapp seems to be setting up the newly created repository's group and preferred content settings inside the current repository. The 2 repositories are not otherwise linked or sharing data in any way, so this the impact is limited to 2 lines that won't affect anything being committed to the git-annex branch, and to the newly created repository not defaulting to being in the client group or having the standard preferred content setting (which can easily be fixed with the webapp).
+"""]]
diff --git a/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_6_ce01656b191d2bb13a3ddc29794e1e7a._comment b/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_6_ce01656b191d2bb13a3ddc29794e1e7a._comment
new file mode 100644
index 000000000..fd589eb18
--- /dev/null
+++ b/doc/bugs/Assistant_doesn__39__t_keep_separate_local_repositories_100__37___separate/comment_6_ce01656b191d2bb13a3ddc29794e1e7a._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmi0jblSiI4c5-EswqKw4PXkx5M4fuVvdk"
+ nickname="Henry"
+ subject="comment 6"
+ date="2014-06-11T16:31:09Z"
+ content="""
+I've just installed 5.20140606 from sid and the problem is gone :-)
+
+Now hoping that this or one of the next release will make it into wheezy backports ;-)
+
+Thank you for your great work and support and sorry for my late feedback.
+"""]]
diff --git a/doc/bugs/Assistant_dropping_files_it_has_just_transferred_elsewhere_again.mdwn b/doc/bugs/Assistant_dropping_files_it_has_just_transferred_elsewhere_again.mdwn
deleted file mode 100644
index cb463ba07..000000000
--- a/doc/bugs/Assistant_dropping_files_it_has_just_transferred_elsewhere_again.mdwn
+++ /dev/null
@@ -1,26 +0,0 @@
-Setup:
-
-* fresh install of Debian Wheezy on machines A & B, git-annex 4.20130227 pulled in from unstable
-* clone repository onto A & B and pair them (manual SSH key setup), and plug USB backup drive, U, into A
-* U has repository group `backup` and preferred content string `standard`
-* A & B have repository group `client` and preferred content string `present or include=subdir1/* or ...`
-
-Steps:
-
-* Add a new file to B
-* On B, `git annex copy -t A newfile`
-
-Expected:
-
-* File arrives at B and is copied to U by B's assistant
-* File remains on B
-
-Actual:
-
-* File arrives on B and is copied to U
-* File is dropped from B
-
-Seems like a resurfacing of [[forum/assistant_overzealously_moving_stuff_to_other_repos]]? Thanks.
-
-> 4.20130227 used a regex library that was broken, at least for certian
-> filenames. I suspect that's what'd going on here. [[done]] --[[Joey]]
diff --git a/doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t.mdwn b/doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t.mdwn
new file mode 100644
index 000000000..9ae870b6c
--- /dev/null
+++ b/doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t.mdwn
@@ -0,0 +1,37 @@
+### Please describe the problem.
+
+git-annex assistant starts to drop files in remote repos, even when they are set to manual.
+
+### What steps will reproduce the problem?
+
+
+Create 3 repos:
+
+* A -- standard, archive
+* m1 -- standard, manual
+* m2 -- standard, manual
+
+System has 3 files annexed: file1, file2, file3. Repo "A" has all three files, m1 has none, m2 has file3.
+
+So, while in m1:
+
+ m1 $ git annex find --want-drop --in m2
+ file3
+
+file3 shouln't be dropped from m2. There is no reason to do this. m2 is set as manual, and it shouldn't be touched in any case.
+
+Now, let's get this file in m1:
+
+ m1 $ git annex get file3
+ get file3 (from m2...) ok
+ (Recording state in git...)
+ m1 $ git annex find --want-drop --in m2
+
+So when 'file3' is present in local repo, it's not going to be dropped from m2.
+
+I guess that rule 'present' works in local repo context while 'drop' acts on remote files.
+
+
+### What version of git-annex are you using? On what operating system?
+
+I'm using latest version in Debian Jessie (5.20141024) on amd64 and armhf. I've also reproduced the bug with manually compiled 5.20141105-g8d8b248 on amd64.
diff --git a/doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_1_5e7d5b0b996a171c641fa560a613d319._comment b/doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_1_5e7d5b0b996a171c641fa560a613d319._comment
new file mode 100644
index 000000000..412dbcaeb
--- /dev/null
+++ b/doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_1_5e7d5b0b996a171c641fa560a613d319._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-11-06T19:33:18Z"
+ content="""
+The command `git annex find --want-drop --in m2`
+finds files that meet 2 criteria:
+
+1. Present in the m2 remote. In this case, that is file3.
+2. Are not wanted to be present in the repository in which you run
+ git-annex. In this case, that's all files, since you're running it
+ in m1, which has no files, and is set to manual mode.
+
+Combining criterion 1 and criterion 2, the command finds file3.
+Not that you expected, but only I think because you misunderstood
+what --in does.
+
+So, I don't see a bug here?
+"""]]
diff --git a/doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_2_2015dfc648d26d6dfabe6ad4f4754034._comment b/doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_2_2015dfc648d26d6dfabe6ad4f4754034._comment
new file mode 100644
index 000000000..48125db22
--- /dev/null
+++ b/doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_2_2015dfc648d26d6dfabe6ad4f4754034._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnDx6KWBl4PpP7qikNB7rp0hK_UvwQq_L0"
+ nickname="Александр"
+ subject="comment 2"
+ date="2014-11-06T21:15:14Z"
+ content="""
+Joey, thank you very much for the explanation. I completely agree that what I described in \"how to reproduce\" works as it should.
+
+Actually I was trying to isolate an issue I had where assistant drops files in a remote manual repo. I don't quite get what circumstances are, but sometimes assistant running in m1 starts to drop files in m2 (while still leaving a copy in A). In this test setting the issue doesn't appear... In my actual setup there is an archive and 3 manual live repos, everything connected via ssh, sometimes on slow links, one manual repo is on a linux phone. Assistants were running on several repos.
+
+I'll try to find a convinient way to reproduce this situation, or maybe discover that bug is in my head again ) Anyway I'll return with an update soon.
+
+"""]]
diff --git a/doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_3_8f394437982cebeaf878f5b3871afaf3._comment b/doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_3_8f394437982cebeaf878f5b3871afaf3._comment
new file mode 100644
index 000000000..6b281b60f
--- /dev/null
+++ b/doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_3_8f394437982cebeaf878f5b3871afaf3._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnSenxKyE_2Z6Wb-EBMO8FciyRywjx1ZiQ"
+ nickname="Walter"
+ subject="comment 3"
+ date="2014-11-06T22:59:38Z"
+ content="""
+This might not be a very helpful comment, but a while ago I also had a situation where files would be dropped from a remote manual repo.
+
+Unfortunately, I was not able to get this to happen reliably, but from memory
+
+(on repo 1)
+
+ git annex get file --from repo2
+
+would result in ``file`` being gotten, and then dropped, from repo2, even though both repos were set to manual.
+
+But, the unhelpful part, is I can't even remember exactly when this happened (maybe a year ago), so this might not help narrow it down.
+"""]]
diff --git a/doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_4_ccd108a53a9fb747539e269becfb3e05._comment b/doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_4_ccd108a53a9fb747539e269becfb3e05._comment
new file mode 100644
index 000000000..a9ca8c8cd
--- /dev/null
+++ b/doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_4_ccd108a53a9fb747539e269becfb3e05._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://renaud.casenave.fr/"
+ subject="comment 4"
+ date="2014-11-07T04:43:44Z"
+ content="""
+This is the same problem I try to report here: http://git-annex.branchable.com/bugs/file_in_manual_mode_repository_is_dropped_when_it_is_copied_to_another_manual_mode_repository/
+
+It is as Walter said, `git annex get file --from repo2` will add the file to the current repo but will drop it in repo2
+"""]]
diff --git a/doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_5_7ee571496c6d7cd57a206e6356dc2be3._comment b/doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_5_7ee571496c6d7cd57a206e6356dc2be3._comment
new file mode 100644
index 000000000..962f98e35
--- /dev/null
+++ b/doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_5_7ee571496c6d7cd57a206e6356dc2be3._comment
@@ -0,0 +1,166 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnDx6KWBl4PpP7qikNB7rp0hK_UvwQq_L0"
+ nickname="Александр"
+ subject="comment 5"
+ date="2014-11-16T12:32:28Z"
+ content="""
+Thanks Walter, renaud.
+
+I was finally able to consitently reproduce the bug and record clean debug logs.
+
+There are 3 repos, \"arch\", \"man1\", \"man2\". They are on different machines connected via ssh. \"arch\" is archive, \"man1\" and \"man2\" are in manual mode. Assistant is started only at \"man1\" with args -v -d, after that some files are added. Assistant detects them, adds and then transfers to \"arch\", this works as expected.
+
+After that in \"man2\" I run command:
+
+ git annex get --from man1 random_1_24
+
+File is successfully transferred, and then assistant removes it from \"man1\". Here is corresponding part of logs at \"man1\":
+
+ [2014-11-16 15:10:12 MSK] TransferWatcher: transfer starting: Upload UUID \"d865391b-cf21-42d6-a04c-e1b32897c1af\" random_1_24 Nothing
+ [2014-11-16 15:10:12 MSK] TransferWatcher: transfer starting: Upload UUID \"d865391b-cf21-42d6-a04c-e1b32897c1af\" random_1_24 Nothing
+ [2014-11-16 15:10:13 MSK] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID \"d865391b-cf21-42d6-a04c-e1b32897c1af\", transferKey = Key {keyName = \"f91971893f882086488ca244c7c9e60a5ca23e088a95c171c21e40327de3278b\", keyBackendName = \"SHA256E\", keySize = Just 3145728, keyMtime = Nothing, keyChunkSize = Nothing, keyChunkNum = Nothing}}
+ [2014-11-16 15:10:13 MSK] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID \"d865391b-cf21-42d6-a04c-e1b32897c1af\", transferKey = Key {keyName = \"f91971893f882086488ca244c7c9e60a5ca23e088a95c171c21e40327de3278b\", keyBackendName = \"SHA256E\", keySize = Just 3145728, keyMtime = Nothing, keyChunkSize = Nothing, keyChunkNum = Nothing}}
+ [2014-11-16 15:10:14 MSK] RemoteControl: SYNCING ssh://jolla:2222//home/nemo/annex_test
+ [2014-11-16 15:10:14 MSK] RemoteControl: Syncing with man2
+ From ssh://jolla:2222//home/nemo/annex_test
+ d20436c..f7aff95 git-annex -> man1/git-annex
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"show-ref\",\"git-annex\"]
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"log\",\"refs/heads/git-annex..ea323207549cd5853213f1aeaf5f3c1f32e79fe9\",\"-n1\",\"--pretty=%H\"]
+ [2014-11-16 15:10:14 MSK] RemoteControl: DONESYNCING ssh://jolla:2222//home/nemo/annex_test 1
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"log\",\"refs/heads/git-annex..5701db750b10ae4d579bbccee828c808c8031e7e\",\"-n1\",\"--pretty=%H\"]
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"log\",\"refs/heads/git-annex..08e7fcc374ee7e233f5f26c0bb7ff825a673818e\",\"-n1\",\"--pretty=%H\"]
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"log\",\"refs/heads/git-annex..959215d3a9eae6a65ec5e6c68f345f9f623a0d1e\",\"-n1\",\"--pretty=%H\"]
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"log\",\"refs/heads/git-annex..f7aff95774a095ccf3a5b11bf2e27108d6aadf58\",\"-n1\",\"--pretty=%H\"]
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"log\",\"refs/heads/git-annex..4aae0d044273fd8716c4cf4946126b0ebf2e0db3\",\"-n1\",\"--pretty=%H\"]
+ (merging man1/git-annex into git-annex...)
+ [2014-11-16 15:10:14 MSK] feed: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"update-index\",\"-z\",\"--index-info\"]
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"f7aff95774a095ccf3a5b11bf2e27108d6aadf58\"]
+ [2014-11-16 15:10:14 MSK] chat: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"hash-object\",\"-t\",\"blob\",\"-w\",\"--stdin\",\"--no-filters\"]
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"log\",\"f7aff95774a095ccf3a5b11bf2e27108d6aadf58..refs/heads/git-annex\",\"-n1\",\"--pretty=%H\"]
+ (Recording state in git...)
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"write-tree\"]
+ [2014-11-16 15:10:14 MSK] chat: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"commit-tree\",\"dd91fafe3d6acfe88b41c677e66507c0f1905175\",\"--no-gpg-sign\",\"-p\",\"refs/heads/git-annex\",\"-p\",\"f7aff95774a095ccf3a5b11bf2e27108d6aadf58\"]
+ [2014-11-16 15:10:14 MSK] call: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"update-ref\",\"refs/heads/git-annex\",\"2ad4a45d95a29db1ecc84a49d5c68bf709f2b3db\"]
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"ls-tree\",\"--full-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"numcopies.log\",\"schedule.log\",\"preferred-content.log\",\"required-content.log\",\"group-preferred-content.log\"]
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"show-ref\",\"git-annex\"]
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"log\",\"refs/heads/git-annex..2ad4a45d95a29db1ecc84a49d5c68bf709f2b3db\",\"-n1\",\"--pretty=%H\"]
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"log\",\"refs/heads/git-annex..5701db750b10ae4d579bbccee828c808c8031e7e\",\"-n1\",\"--pretty=%H\"]
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"log\",\"refs/heads/git-annex..08e7fcc374ee7e233f5f26c0bb7ff825a673818e\",\"-n1\",\"--pretty=%H\"]
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"log\",\"refs/heads/git-annex..959215d3a9eae6a65ec5e6c68f345f9f623a0d1e\",\"-n1\",\"--pretty=%H\"]
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"log\",\"refs/heads/git-annex..f7aff95774a095ccf3a5b11bf2e27108d6aadf58\",\"-n1\",\"--pretty=%H\"]
+ [2014-11-16 15:10:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"log\",\"refs/heads/git-annex..4aae0d044273fd8716c4cf4946126b0ebf2e0db3\",\"-n1\",\"--pretty=%H\"]
+ drop random_1_24 (checking arch...) [2014-11-16 15:10:23 MSK] call: ssh [\"-S\",\".git/annex/ssh/axe\",\"-o\",\"ControlMaster=auto\",\"-o\",\"ControlPersist=yes\",\"-T\",\"axe\",\"git-annex-shell 'inannex' '//home/butler/annex_test' 'SHA256E-s3145728--f91971893f882086488ca244c7c9e60a5ca23e088a95c171c21e40327de3278b' --uuid 5aaf3dc8-f94c-4949-8491-26d5d0de5127\"]
+ ok
+ [2014-11-16 15:10:23 MSK] dropped random_1_24 (from here) (copies now 2) : drop wanted after Upload UUID \"d865391b-cf21-42d6-a04c-e1b32897c1af\" random_1_24 Nothing
+ drop man2 random_1_24 (checking arch...) [2014-11-16 15:10:23 MSK] call: ssh [\"-S\",\".git/annex/ssh/axe\",\"-o\",\"ControlMaster=auto\",\"-o\",\"ControlPersist=yes\",\"-T\",\"axe\",\"git-annex-shell 'inannex' '//home/butler/annex_test' 'SHA256E-s3145728--f91971893f882086488ca244c7c9e60a5ca23e088a95c171c21e40327de3278b' --uuid 5aaf3dc8-f94c-4949-8491-26d5d0de5127\"]
+ [2014-11-16 15:10:23 MSK] call: ssh [\"-S\",\".git/annex/ssh/jolla!2222\",\"-o\",\"ControlMaster=auto\",\"-o\",\"ControlPersist=yes\",\"-p\",\"2222\",\"-T\",\"jolla\",\"git-annex-shell 'dropkey' '//home/nemo/annex_test' '--quiet' '--force' 'SHA256E-s3145728--f91971893f882086488ca244c7c9e60a5ca23e088a95c171c21e40327de3278b' --uuid d865391b-cf21-42d6-a04c-e1b32897c1af\"]
+ ok
+ [2014-11-16 15:10:23 MSK] dropped random_1_24 (from UUID \"d865391b-cf21-42d6-a04c-e1b32897c1af\") (copies now 1) : drop wanted after Upload UUID \"d865391b-cf21-42d6-a04c-e1b32897c1af\" random_1_24 Nothing
+ [2014-11-16 15:11:14 MSK] read: git [\"--git-dir=/home/butler/annex_test/.git\",\"--work-tree=/home/butler/annex_test\",\"ls-tree\",\"--full-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"numcopies.log\",\"schedule.log\",\"preferred-content.log\",\"required-content.log\",\"group-preferred-content.log\"]
+
+Here is git annex vicfg at \"man1\":
+
+ # git-annex configuration
+ #
+ # Changes saved to this file will be recorded in the git-annex branch.
+ #
+ # Lines in this file have the format:
+ # setting field = value
+
+ # Repository trust configuration
+ # (Valid trust levels: trusted semitrusted untrusted dead)
+ # (for web)
+ #trust 00000000-0000-0000-0000-000000000001 = semitrusted
+ # (for man2)
+ #trust 2104670a-6a96-11e4-a3ca-0f84dcf32d24 = semitrusted
+ # (for [arch])
+ #trust 5aaf3dc8-f94c-4949-8491-26d5d0de5127 = semitrusted
+ # (for [man2])
+ #trust d865391b-cf21-42d6-a04c-e1b32897c1af = semitrusted
+ # (for man1)
+ #trust f15688ce-14e0-43ba-a3a2-69ee9d5bdf45 = semitrusted
+
+ # Repository groups
+ # (Standard groups: client transfer backup incrementalbackup smallarchive archive source manual public unwanted)
+ # (Separate group names with spaces)
+ # (for [arch])
+ group 5aaf3dc8-f94c-4949-8491-26d5d0de5127 = archive
+ # (for [man2])
+ group d865391b-cf21-42d6-a04c-e1b32897c1af = manual
+ # (for man1)
+ group f15688ce-14e0-43ba-a3a2-69ee9d5bdf45 = manual
+ # (for web)
+ #group 00000000-0000-0000-0000-000000000001 =
+ # (for man2)
+ #group 2104670a-6a96-11e4-a3ca-0f84dcf32d24 =
+
+ # Repository preferred contents
+ # (Set to \"standard\" to use a repository's group's preferred contents)
+ # (for [arch])
+ wanted 5aaf3dc8-f94c-4949-8491-26d5d0de5127 = standard
+ # (for [man2])
+ wanted d865391b-cf21-42d6-a04c-e1b32897c1af = standard
+ # (for man1)
+ wanted f15688ce-14e0-43ba-a3a2-69ee9d5bdf45 = standard
+ # (for web)
+ #wanted 00000000-0000-0000-0000-000000000001 =
+ # (for man2)
+ #wanted 2104670a-6a96-11e4-a3ca-0f84dcf32d24 =
+
+ # Group preferred contents
+ # (Used by repositories with \"groupwanted\" in their preferred contents)
+ #groupwanted archive =
+ #groupwanted backup =
+ #groupwanted client =
+ #groupwanted incrementalbackup =
+ #groupwanted manual =
+ #groupwanted public =
+ #groupwanted smallarchive =
+ #groupwanted source =
+ #groupwanted transfer =
+ #groupwanted unwanted =
+
+ # Standard preferred contents
+ # (Used by wanted or groupwanted expressions containing \"standard\")
+ # (For reference only; built-in and cannot be changed!)
+ # standard client = (((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1
+ # standard transfer = (not (inallgroup=client and copies=client:2) and ((((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1)) or approxlackingcopies=1
+ # standard backup = include=* or unused
+ # standard incrementalbackup = ((include=* or unused) and (not copies=incrementalbackup:1)) or approxlackingcopies=1
+ # standard smallarchive = ((include=*/archive/* or include=archive/*) and ((not (copies=archive:1 or copies=smallarchive:1)) or approxlackingcopies=1)) or approxlackingcopies=1
+ # standard archive = (not (copies=archive:1 or copies=smallarchive:1)) or approxlackingcopies=1
+ # standard source = not (copies=1)
+ # standard manual = present and ((((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1)
+ # standard public = inpreferreddir
+ # standard unwanted = exclude=*
+
+ # Repository required contents
+ # (for web)
+ #required 00000000-0000-0000-0000-000000000001 =
+ # (for man2)
+ #required 2104670a-6a96-11e4-a3ca-0f84dcf32d24 =
+ # (for [arch])
+ #required 5aaf3dc8-f94c-4949-8491-26d5d0de5127 =
+ # (for [man2])
+ #required d865391b-cf21-42d6-a04c-e1b32897c1af =
+ # (for man1)
+ #required f15688ce-14e0-43ba-a3a2-69ee9d5bdf45 =
+
+ # Scheduled activities
+ # (Separate multiple activities with \"; \")
+ # (for web)
+ #schedule 00000000-0000-0000-0000-000000000001 =
+ # (for man2)
+ #schedule 2104670a-6a96-11e4-a3ca-0f84dcf32d24 =
+ # (for [arch])
+ #schedule 5aaf3dc8-f94c-4949-8491-26d5d0de5127 =
+ # (for [man2])
+ #schedule d865391b-cf21-42d6-a04c-e1b32897c1af =
+ # (for man1)
+ #schedule f15688ce-14e0-43ba-a3a2-69ee9d5bdf45 =
+
+Please let me know if I can provide more information, some extra logs, traces, recompile git-annex, etc.
+
+"""]]
diff --git a/doc/bugs/Assistant_enters_eternal_loop_and_eats_up_all_of_RAM_after_X_restart.mdwn b/doc/bugs/Assistant_enters_eternal_loop_and_eats_up_all_of_RAM_after_X_restart.mdwn
deleted file mode 100644
index d3f539431..000000000
--- a/doc/bugs/Assistant_enters_eternal_loop_and_eats_up_all_of_RAM_after_X_restart.mdwn
+++ /dev/null
@@ -1,24 +0,0 @@
-*What steps will reproduce the problem?*
-
-Log in to X, have the DE start the assistant with --autostart. Then kill X with ctrl+alt+backspace and log back in once X comes back up.
-
-*What is the expected output? What do you see instead?*
-
-It enters an eternal loop, quickly using up all of the available RAM as well as 100% of CPU. Initially noticed because the computer became extremely sluggish, at which point the assistant was using up over 7G (of the available 8G) of RAM, and all of the available power on one of the CPU cores.
-
-Killing the assistant and then starting it again results in it working normally again.
-
-*What version of git-annex are you using? On what operating system?*
-
-git-annex version: 3.20121010 on Debian Sid (under GNOME3/Gnome-Shell in case that's relevant).
-I've also seen it happen on another computer in similar circumstances. That one on Debian Testing, with git-annex from sid (so same git-annex version). In this case X was restarted while running with /etc/init.d/gdm3 restart, and again the issue appeared after logging out and then back in.
-
-*Please provide any additional information below.*
-
-Given that the assistant isn't really using X directly, I suppose this could be due to losing its connection to the gpg and ssh agents as a side-effect of X being shut down. I'm not sure if it happens immediately after X being killed, or once I log back in again.
-
-> Reproduced. Root caused to a bug in the haskell dbus library, which I can
-> reproduce with 2 line test case; basically anything using connectSession
-> will do this when the dbus session goes away. Sent test case and
-> profiling data to library author to get it fixed, and have disabled
-> dbus in git-annex in the meantime. [[done]] --[[Joey]]
diff --git a/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory.mdwn b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory.mdwn
new file mode 100644
index 000000000..954d26ec2
--- /dev/null
+++ b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory.mdwn
@@ -0,0 +1,520 @@
+I have a git annex assistant process using 1.2 gigabytes of RAM and a git cat-file --batch child consuming CPU time constantly. I am running 5.20140320 on Ubuntu 12.04.
+
+[[!format sh """
+ PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
+11775 ion 20 0 1350m 1.2g 12m S 48 62.4 425:56.85 git-annex
+11787 ion 20 0 9856 1484 1232 R 54 0.1 366:16.14 git
+"""]]
+
+The assistant UI looks perfectly normal and does not indicate it is doing anything. daemon.log is empty and the assistant process seems to be logging into a rotated and deleted log file.
+
+[[!format sh """
+COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
+git-annex 11775 ion 1w REG 9,127 80841 55181369 /storage/ion/media/video/.git/annex/daemon.log.10 (deleted)
+git-annex 11775 ion 2w REG 9,127 80841 55181369 /storage/ion/media/video/.git/annex/daemon.log.10 (deleted)
+"""]]
+
+strace -s10000 -e trace=read,write -p 11787 indicates that the assistant is having the cat-file process cat same objects over and over again.
+
+[[!format sh """
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:a84/f1f/SHA256E-s47051987--dcfd0413db883506ccb8c45e3b2d60cb3ff5c83cc55c9c7e44818d7556dbc07f.mp4.log\n", 4096) = 121
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "6c0ff555a1a34337c9379d8856c8283429bef973 blob 231\n", 50) = 50
+write(1, "1396057829.505426s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057839.859236s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057839.875213s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.77741s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:50a/5fc/SHA256E-s275654757--52823cd2061375910ccbd8de38865eca91511d9b4621243d2ef96a974d7546aa.flv.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "cdbc7ce6b426dfcce9d718387b6c412e870a2d12 blob 232\n", 50) = 50
+write(1, "1396057828.887576s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.117938s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.197196s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.687354s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:9b5/545/SHA256E-s32710--6005b5faf1a6d42d499053f8cca87d080536abfa8442b33c87f7966e86726e4f.fin.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "82a98cbfe8f24d336a537cecea2182922c4681e1 blob 231\n", 50) = 50
+write(1, "1396057825.390306s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.37922s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.386029s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.588219s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:d28/166/SHA256E-s59188--9c04581bd67ea7c78b537a164d104bea5ac91a4a69f06b477cf07892a2d9b852.fih.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "d95950acebb5c4318329d7b989d36d01b76b7801 blob 232\n", 50) = 50
+write(1, "1396057825.366657s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.538068s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.560144s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.538542s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:a84/f1f/SHA256E-s47051987--dcfd0413db883506ccb8c45e3b2d60cb3ff5c83cc55c9c7e44818d7556dbc07f.mp4.log\n", 4096) = 121
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "6c0ff555a1a34337c9379d8856c8283429bef973 blob 231\n", 50) = 50
+write(1, "1396057829.505426s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057839.859236s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057839.875213s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.77741s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:50a/5fc/SHA256E-s275654757--52823cd2061375910ccbd8de38865eca91511d9b4621243d2ef96a974d7546aa.flv.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "cdbc7ce6b426dfcce9d718387b6c412e870a2d12 blob 232\n", 50) = 50
+write(1, "1396057828.887576s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.117938s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.197196s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.687354s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:9b5/545/SHA256E-s32710--6005b5faf1a6d42d499053f8cca87d080536abfa8442b33c87f7966e86726e4f.fin.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "82a98cbfe8f24d336a537cecea2182922c4681e1 blob 231\n", 50) = 50
+write(1, "1396057825.390306s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.37922s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.386029s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.588219s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:d28/166/SHA256E-s59188--9c04581bd67ea7c78b537a164d104bea5ac91a4a69f06b477cf07892a2d9b852.fih.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "d95950acebb5c4318329d7b989d36d01b76b7801 blob 232\n", 50) = 50
+write(1, "1396057825.366657s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.538068s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.560144s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.538542s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:a84/f1f/SHA256E-s47051987--dcfd0413db883506ccb8c45e3b2d60cb3ff5c83cc55c9c7e44818d7556dbc07f.mp4.log\n", 4096) = 121
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "6c0ff555a1a34337c9379d8856c8283429bef973 blob 231\n", 50) = 50
+write(1, "1396057829.505426s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057839.859236s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057839.875213s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.77741s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:50a/5fc/SHA256E-s275654757--52823cd2061375910ccbd8de38865eca91511d9b4621243d2ef96a974d7546aa.flv.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "cdbc7ce6b426dfcce9d718387b6c412e870a2d12 blob 232\n", 50) = 50
+write(1, "1396057828.887576s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.117938s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.197196s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.687354s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:9b5/545/SHA256E-s32710--6005b5faf1a6d42d499053f8cca87d080536abfa8442b33c87f7966e86726e4f.fin.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "82a98cbfe8f24d336a537cecea2182922c4681e1 blob 231\n", 50) = 50
+write(1, "1396057825.390306s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.37922s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.386029s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.588219s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:d28/166/SHA256E-s59188--9c04581bd67ea7c78b537a164d104bea5ac91a4a69f06b477cf07892a2d9b852.fih.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "d95950acebb5c4318329d7b989d36d01b76b7801 blob 232\n", 50) = 50
+write(1, "1396057825.366657s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.538068s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.560144s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.538542s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:a84/f1f/SHA256E-s47051987--dcfd0413db883506ccb8c45e3b2d60cb3ff5c83cc55c9c7e44818d7556dbc07f.mp4.log\n", 4096) = 121
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "6c0ff555a1a34337c9379d8856c8283429bef973 blob 231\n", 50) = 50
+write(1, "1396057829.505426s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057839.859236s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057839.875213s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.77741s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:50a/5fc/SHA256E-s275654757--52823cd2061375910ccbd8de38865eca91511d9b4621243d2ef96a974d7546aa.flv.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "cdbc7ce6b426dfcce9d718387b6c412e870a2d12 blob 232\n", 50) = 50
+write(1, "1396057828.887576s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.117938s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.197196s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.687354s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:9b5/545/SHA256E-s32710--6005b5faf1a6d42d499053f8cca87d080536abfa8442b33c87f7966e86726e4f.fin.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "82a98cbfe8f24d336a537cecea2182922c4681e1 blob 231\n", 50) = 50
+write(1, "1396057825.390306s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.37922s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.386029s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.588219s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:d28/166/SHA256E-s59188--9c04581bd67ea7c78b537a164d104bea5ac91a4a69f06b477cf07892a2d9b852.fih.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "d95950acebb5c4318329d7b989d36d01b76b7801 blob 232\n", 50) = 50
+write(1, "1396057825.366657s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.538068s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.560144s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.538542s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:a84/f1f/SHA256E-s47051987--dcfd0413db883506ccb8c45e3b2d60cb3ff5c83cc55c9c7e44818d7556dbc07f.mp4.log\n", 4096) = 121
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "6c0ff555a1a34337c9379d8856c8283429bef973 blob 231\n", 50) = 50
+write(1, "1396057829.505426s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057839.859236s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057839.875213s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.77741s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:50a/5fc/SHA256E-s275654757--52823cd2061375910ccbd8de38865eca91511d9b4621243d2ef96a974d7546aa.flv.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "cdbc7ce6b426dfcce9d718387b6c412e870a2d12 blob 232\n", 50) = 50
+write(1, "1396057828.887576s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.117938s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.197196s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.687354s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:9b5/545/SHA256E-s32710--6005b5faf1a6d42d499053f8cca87d080536abfa8442b33c87f7966e86726e4f.fin.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "82a98cbfe8f24d336a537cecea2182922c4681e1 blob 231\n", 50) = 50
+write(1, "1396057825.390306s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.37922s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.386029s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.588219s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:d28/166/SHA256E-s59188--9c04581bd67ea7c78b537a164d104bea5ac91a4a69f06b477cf07892a2d9b852.fih.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "d95950acebb5c4318329d7b989d36d01b76b7801 blob 232\n", 50) = 50
+write(1, "1396057825.366657s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.538068s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.560144s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.538542s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:a84/f1f/SHA256E-s47051987--dcfd0413db883506ccb8c45e3b2d60cb3ff5c83cc55c9c7e44818d7556dbc07f.mp4.log\n", 4096) = 121
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "6c0ff555a1a34337c9379d8856c8283429bef973 blob 231\n", 50) = 50
+write(1, "1396057829.505426s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057839.859236s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057839.875213s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.77741s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:50a/5fc/SHA256E-s275654757--52823cd2061375910ccbd8de38865eca91511d9b4621243d2ef96a974d7546aa.flv.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "cdbc7ce6b426dfcce9d718387b6c412e870a2d12 blob 232\n", 50) = 50
+write(1, "1396057828.887576s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.117938s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.197196s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.687354s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:9b5/545/SHA256E-s32710--6005b5faf1a6d42d499053f8cca87d080536abfa8442b33c87f7966e86726e4f.fin.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "82a98cbfe8f24d336a537cecea2182922c4681e1 blob 231\n", 50) = 50
+write(1, "1396057825.390306s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.37922s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.386029s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.588219s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:d28/166/SHA256E-s59188--9c04581bd67ea7c78b537a164d104bea5ac91a4a69f06b477cf07892a2d9b852.fih.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "d95950acebb5c4318329d7b989d36d01b76b7801 blob 232\n", 50) = 50
+write(1, "1396057825.366657s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.538068s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.560144s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.538542s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:a84/f1f/SHA256E-s47051987--dcfd0413db883506ccb8c45e3b2d60cb3ff5c83cc55c9c7e44818d7556dbc07f.mp4.log\n", 4096) = 121
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "6c0ff555a1a34337c9379d8856c8283429bef973 blob 231\n", 50) = 50
+write(1, "1396057829.505426s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057839.859236s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057839.875213s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.77741s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:50a/5fc/SHA256E-s275654757--52823cd2061375910ccbd8de38865eca91511d9b4621243d2ef96a974d7546aa.flv.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "cdbc7ce6b426dfcce9d718387b6c412e870a2d12 blob 232\n", 50) = 50
+write(1, "1396057828.887576s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.117938s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.197196s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.687354s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:9b5/545/SHA256E-s32710--6005b5faf1a6d42d499053f8cca87d080536abfa8442b33c87f7966e86726e4f.fin.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "82a98cbfe8f24d336a537cecea2182922c4681e1 blob 231\n", 50) = 50
+write(1, "1396057825.390306s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.37922s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.386029s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.588219s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:d28/166/SHA256E-s59188--9c04581bd67ea7c78b537a164d104bea5ac91a4a69f06b477cf07892a2d9b852.fih.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "d95950acebb5c4318329d7b989d36d01b76b7801 blob 232\n", 50) = 50
+write(1, "1396057825.366657s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.538068s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.560144s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.538542s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:a84/f1f/SHA256E-s47051987--dcfd0413db883506ccb8c45e3b2d60cb3ff5c83cc55c9c7e44818d7556dbc07f.mp4.log\n", 4096) = 121
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "6c0ff555a1a34337c9379d8856c8283429bef973 blob 231\n", 50) = 50
+write(1, "1396057829.505426s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057839.859236s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057839.875213s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.77741s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:50a/5fc/SHA256E-s275654757--52823cd2061375910ccbd8de38865eca91511d9b4621243d2ef96a974d7546aa.flv.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "cdbc7ce6b426dfcce9d718387b6c412e870a2d12 blob 232\n", 50) = 50
+write(1, "1396057828.887576s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.117938s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.197196s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.687354s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:9b5/545/SHA256E-s32710--6005b5faf1a6d42d499053f8cca87d080536abfa8442b33c87f7966e86726e4f.fin.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "82a98cbfe8f24d336a537cecea2182922c4681e1 blob 231\n", 50) = 50
+write(1, "1396057825.390306s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.37922s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.386029s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.588219s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:d28/166/SHA256E-s59188--9c04581bd67ea7c78b537a164d104bea5ac91a4a69f06b477cf07892a2d9b852.fih.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "d95950acebb5c4318329d7b989d36d01b76b7801 blob 232\n", 50) = 50
+write(1, "1396057825.366657s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.538068s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.560144s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.538542s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:a84/f1f/SHA256E-s47051987--dcfd0413db883506ccb8c45e3b2d60cb3ff5c83cc55c9c7e44818d7556dbc07f.mp4.log\n", 4096) = 121
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "6c0ff555a1a34337c9379d8856c8283429bef973 blob 231\n", 50) = 50
+write(1, "1396057829.505426s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057839.859236s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057839.875213s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.77741s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:50a/5fc/SHA256E-s275654757--52823cd2061375910ccbd8de38865eca91511d9b4621243d2ef96a974d7546aa.flv.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "cdbc7ce6b426dfcce9d718387b6c412e870a2d12 blob 232\n", 50) = 50
+write(1, "1396057828.887576s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.117938s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.197196s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.687354s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:9b5/545/SHA256E-s32710--6005b5faf1a6d42d499053f8cca87d080536abfa8442b33c87f7966e86726e4f.fin.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "82a98cbfe8f24d336a537cecea2182922c4681e1 blob 231\n", 50) = 50
+write(1, "1396057825.390306s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.37922s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.386029s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.588219s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:d28/166/SHA256E-s59188--9c04581bd67ea7c78b537a164d104bea5ac91a4a69f06b477cf07892a2d9b852.fih.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "d95950acebb5c4318329d7b989d36d01b76b7801 blob 232\n", 50) = 50
+write(1, "1396057825.366657s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.538068s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.560144s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.538542s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:a84/f1f/SHA256E-s47051987--dcfd0413db883506ccb8c45e3b2d60cb3ff5c83cc55c9c7e44818d7556dbc07f.mp4.log\n", 4096) = 121
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "6c0ff555a1a34337c9379d8856c8283429bef973 blob 231\n", 50) = 50
+write(1, "1396057829.505426s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057839.859236s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057839.875213s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.77741s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:50a/5fc/SHA256E-s275654757--52823cd2061375910ccbd8de38865eca91511d9b4621243d2ef96a974d7546aa.flv.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "cdbc7ce6b426dfcce9d718387b6c412e870a2d12 blob 232\n", 50) = 50
+write(1, "1396057828.887576s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.117938s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.197196s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.687354s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:9b5/545/SHA256E-s32710--6005b5faf1a6d42d499053f8cca87d080536abfa8442b33c87f7966e86726e4f.fin.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "82a98cbfe8f24d336a537cecea2182922c4681e1 blob 231\n", 50) = 50
+write(1, "1396057825.390306s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.37922s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.386029s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.588219s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:d28/166/SHA256E-s59188--9c04581bd67ea7c78b537a164d104bea5ac91a4a69f06b477cf07892a2d9b852.fih.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "d95950acebb5c4318329d7b989d36d01b76b7801 blob 232\n", 50) = 50
+write(1, "1396057825.366657s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.538068s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.560144s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.538542s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:a84/f1f/SHA256E-s47051987--dcfd0413db883506ccb8c45e3b2d60cb3ff5c83cc55c9c7e44818d7556dbc07f.mp4.log\n", 4096) = 121
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "6c0ff555a1a34337c9379d8856c8283429bef973 blob 231\n", 50) = 50
+write(1, "1396057829.505426s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057839.859236s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057839.875213s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.77741s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:50a/5fc/SHA256E-s275654757--52823cd2061375910ccbd8de38865eca91511d9b4621243d2ef96a974d7546aa.flv.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "cdbc7ce6b426dfcce9d718387b6c412e870a2d12 blob 232\n", 50) = 50
+write(1, "1396057828.887576s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.117938s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.197196s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.687354s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:9b5/545/SHA256E-s32710--6005b5faf1a6d42d499053f8cca87d080536abfa8442b33c87f7966e86726e4f.fin.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "82a98cbfe8f24d336a537cecea2182922c4681e1 blob 231\n", 50) = 50
+write(1, "1396057825.390306s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.37922s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.386029s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.588219s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:d28/166/SHA256E-s59188--9c04581bd67ea7c78b537a164d104bea5ac91a4a69f06b477cf07892a2d9b852.fih.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "d95950acebb5c4318329d7b989d36d01b76b7801 blob 232\n", 50) = 50
+write(1, "1396057825.366657s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.538068s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.560144s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.538542s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:a84/f1f/SHA256E-s47051987--dcfd0413db883506ccb8c45e3b2d60cb3ff5c83cc55c9c7e44818d7556dbc07f.mp4.log\n", 4096) = 121
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "6c0ff555a1a34337c9379d8856c8283429bef973 blob 231\n", 50) = 50
+write(1, "1396057829.505426s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057839.859236s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057839.875213s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.77741s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:50a/5fc/SHA256E-s275654757--52823cd2061375910ccbd8de38865eca91511d9b4621243d2ef96a974d7546aa.flv.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "cdbc7ce6b426dfcce9d718387b6c412e870a2d12 blob 232\n", 50) = 50
+write(1, "1396057828.887576s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.117938s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.197196s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.687354s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:9b5/545/SHA256E-s32710--6005b5faf1a6d42d499053f8cca87d080536abfa8442b33c87f7966e86726e4f.fin.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "82a98cbfe8f24d336a537cecea2182922c4681e1 blob 231\n", 50) = 50
+write(1, "1396057825.390306s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.37922s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.386029s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.588219s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:d28/166/SHA256E-s59188--9c04581bd67ea7c78b537a164d104bea5ac91a4a69f06b477cf07892a2d9b852.fih.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "d95950acebb5c4318329d7b989d36d01b76b7801 blob 232\n", 50) = 50
+write(1, "1396057825.366657s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.538068s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.560144s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.538542s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:a84/f1f/SHA256E-s47051987--dcfd0413db883506ccb8c45e3b2d60cb3ff5c83cc55c9c7e44818d7556dbc07f.mp4.log\n", 4096) = 121
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "6c0ff555a1a34337c9379d8856c8283429bef973 blob 231\n", 50) = 50
+write(1, "1396057829.505426s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057839.859236s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057839.875213s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.77741s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:50a/5fc/SHA256E-s275654757--52823cd2061375910ccbd8de38865eca91511d9b4621243d2ef96a974d7546aa.flv.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "cdbc7ce6b426dfcce9d718387b6c412e870a2d12 blob 232\n", 50) = 50
+write(1, "1396057828.887576s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.117938s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.197196s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.687354s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:9b5/545/SHA256E-s32710--6005b5faf1a6d42d499053f8cca87d080536abfa8442b33c87f7966e86726e4f.fin.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "82a98cbfe8f24d336a537cecea2182922c4681e1 blob 231\n", 50) = 50
+write(1, "1396057825.390306s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.37922s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.386029s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.588219s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:d28/166/SHA256E-s59188--9c04581bd67ea7c78b537a164d104bea5ac91a4a69f06b477cf07892a2d9b852.fih.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "d95950acebb5c4318329d7b989d36d01b76b7801 blob 232\n", 50) = 50
+write(1, "1396057825.366657s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.538068s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.560144s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.538542s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:ee2/2ee/SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "977039ea431522e6e27a78bdec2c1299f883eb85 blob 232\n", 50) = 50
+write(1, "1396057823.999737s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057835.133409s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057835.215084s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.468307s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:a84/f1f/SHA256E-s47051987--dcfd0413db883506ccb8c45e3b2d60cb3ff5c83cc55c9c7e44818d7556dbc07f.mp4.log\n", 4096) = 121
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "6c0ff555a1a34337c9379d8856c8283429bef973 blob 231\n", 50) = 50
+write(1, "1396057829.505426s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057839.859236s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057839.875213s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.77741s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:50a/5fc/SHA256E-s275654757--52823cd2061375910ccbd8de38865eca91511d9b4621243d2ef96a974d7546aa.flv.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "cdbc7ce6b426dfcce9d718387b6c412e870a2d12 blob 232\n", 50) = 50
+write(1, "1396057828.887576s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.117938s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.197196s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.687354s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 232) = 232
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:9b5/545/SHA256E-s32710--6005b5faf1a6d42d499053f8cca87d080536abfa8442b33c87f7966e86726e4f.fin.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+read(3, "", 214) = 0
+write(1, "82a98cbfe8f24d336a537cecea2182922c4681e1 blob 231\n", 50) = 50
+write(1, "1396057825.390306s 1 3f89d0d8-6162-4362-852a-cb688d6c0696\n1396057866.37922s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396057866.386029s 1 161c3d7f-eb60-4294-84d2-eb611786c91e\n1396058160.588219s 0 3f89d0d8-6162-4362-852a-cb688d6c0696\n", 231) = 231
+write(1, "\n", 1) = 1
+read(0, "refs/heads/git-annex:d28/166/SHA256E-s59188--9c04581bd67ea7c78b537a164d104bea5ac91a4a69f06b477cf07892a2d9b852.fih.srt.log\n", 4096) = 122
+read(3, "0936a1fdd849b8b46abb879d7cf82cc758b367e3\n", 255) = 41
+"""]]
diff --git a/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_10_edb2428552cf98bfb1735c2d6daf2b20._comment b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_10_edb2428552cf98bfb1735c2d6daf2b20._comment
new file mode 100644
index 000000000..d5f7ce363
--- /dev/null
+++ b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_10_edb2428552cf98bfb1735c2d6daf2b20._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://johan.kiviniemi.name/"
+ nickname="Johan"
+ subject="comment 10"
+ date="2014-05-01T01:33:10Z"
+ content="""
+Note to self: I experienced this bug with the standalone tarball release (5.20140421) as well, so it’s not caused by something that is different on my system wrt. git-annex’s dependencies etc.
+"""]]
diff --git a/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_1_ac8c39e362e6c806b9d68befc0199ccd._comment b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_1_ac8c39e362e6c806b9d68befc0199ccd._comment
new file mode 100644
index 000000000..e9c5d3fff
--- /dev/null
+++ b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_1_ac8c39e362e6c806b9d68befc0199ccd._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 1"
+ date="2014-04-02T18:48:51Z"
+ content="""
+All I can tell from the strace is that it's looking at location logs, and it's looking at the same few keys, but not a single on in a tight loop.
+
+It would probably help a lot to run the assistant with --debug and get a debug log while this is going on. We need to pinpoint the part of the assistant that is affected, and there may be other activity too.
+"""]]
diff --git a/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_2_b2941bf7901a1b2237b7210c8f0af2a5._comment b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_2_b2941bf7901a1b2237b7210c8f0af2a5._comment
new file mode 100644
index 000000000..c9e798c28
--- /dev/null
+++ b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_2_b2941bf7901a1b2237b7210c8f0af2a5._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 2"
+ date="2014-04-07T21:07:35Z"
+ content="""
+Except of log when this apparently happened. Note the 6 minute time discontinuity when it was apparently looping:
+
+<pre>
+[2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"write-tree\"]
+[2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"rev-parse\",\"84068090af4bcd3d24f16d865ac07b0478f20ada:\"]
+[2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"symbolic-ref\",\"HEAD\"]
+[2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"show-ref\",\"refs/heads/master\"]
+[2014-04-07 23:30:13 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"show-ref\",\"git-annex\"]
+[2014-04-07 23:30:13 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+[2014-04-07 23:30:13 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..214ed317536695b91c8dd5bed059c46c11ad00be\",\"--oneline\",\"-n1\"]
+</pre>
+
+Also probably relevant, the network topology AIUI was: `client --> server` where both nodes ran the assistant. This happened on the server shortly after the client dropped off a refs/heads/synced/master.
+
+(Also, the \"logging to a deleted file\" appears to have been a local misconfiguration; a cron job that repeatedly tried to start the assistant. Only one will start, but later ones will rotate the logs before noticing it's running and giving up.)
+"""]]
diff --git a/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_3_1429ca784a03bc424b3537cbe0449421._comment b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_3_1429ca784a03bc424b3537cbe0449421._comment
new file mode 100644
index 000000000..fd9fa8971
--- /dev/null
+++ b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_3_1429ca784a03bc424b3537cbe0449421._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 3"
+ date="2014-04-07T21:55:19Z"
+ content="""
+Unfortunately all I have been able to tell for sure from this log is that it seems that the expensive transfer scan is not running, and this is unlikely to be a repository auto-repair.
+
+My best guess as to what might be going on is an update of the git-annex branch.
+
+[2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"write-tree\"]
+
+This is prep for an index file commit, probably to the git-annex branch.
+
+[2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"rev-parse\",\"84068090af4bcd3d24f16d865ac07b0478f20ada:\"]
+
+This is a getting the parent commit's tree.
+
+The git-cat-file churn could then be a union merge reading the contents of the git-annex branch to union-merge it into the `.git/annex/index` (in `mergeIndex`). This would reuse the main git cat-file process.
+
+That does not explain why it would need to read eg, SHA256E-s106800355--c70e31d511e7eec4881a15dfba521ea3d1fe14694968f81ae1819f1a2a93f9be.mp4.log 28 times.
+Normally, during a union merge only files listed by `diff-index` need to be read, and it lists each file only once.
+"""]]
diff --git a/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_4_f9e65cf5598b4b14eeee1f41f46d4084._comment b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_4_f9e65cf5598b4b14eeee1f41f46d4084._comment
new file mode 100644
index 000000000..148920c23
--- /dev/null
+++ b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_4_f9e65cf5598b4b14eeee1f41f46d4084._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 4"
+ date="2014-04-07T21:57:32Z"
+ content="""
+Does `git log git-annex` show a commit that was made at 23:30?
+
+Does it show a commit 84068090af4bcd3d24f16d865ac07b0478f20ada?
+
+Is 84068090af4bcd3d24f16d865ac07b0478f20ada the parent of the 23:30 commit?
+"""]]
diff --git a/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_5_044ecac2d2e670e1ef69809c944093d1._comment b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_5_044ecac2d2e670e1ef69809c944093d1._comment
new file mode 100644
index 000000000..601365004
--- /dev/null
+++ b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_5_044ecac2d2e670e1ef69809c944093d1._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 5"
+ date="2014-04-07T22:12:14Z"
+ content="""
+Is the repository using direct mode?
+
+Another theory is that:
+
+* test/hello appears
+* watcher sees new symlink, tries to make a commit with it
+* master branch already has that symlink
+* this is why the write-tree is not followed by a commit-tree. The commit would have been empty.
+
+If this is the case, then 84068090af4bcd3d24f16d865ac07b0478f20ada will be a ref on the master branch.
+
+And all of the above is normal operation. But it does suggest, that if this repo is in direct mode, it might be running a direct mode work tree update around then. Which requires a lot of cat-file queries of the git-annex branch. And would certainly make repeated queries at least if the repository has duplicate copies of some files..
+"""]]
diff --git a/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_6_6f4f51e1583bed5e7e601e4f30f4207b._comment b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_6_6f4f51e1583bed5e7e601e4f30f4207b._comment
new file mode 100644
index 000000000..0b5f90489
--- /dev/null
+++ b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_6_6f4f51e1583bed5e7e601e4f30f4207b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 6"
+ date="2014-04-07T22:17:16Z"
+ content="""
+Does the git log have any recent commits that were \"git-annex automatic merge conflict fix\" ?
+"""]]
diff --git a/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_7_683a0a3d4caea0ee625e41ae8a6c7c06._comment b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_7_683a0a3d4caea0ee625e41ae8a6c7c06._comment
new file mode 100644
index 000000000..1705e738c
--- /dev/null
+++ b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_7_683a0a3d4caea0ee625e41ae8a6c7c06._comment
@@ -0,0 +1,81 @@
+[[!comment format=mdwn
+ username="http://johan.kiviniemi.name/"
+ nickname="Johan"
+ subject="comment 7"
+ date="2014-04-07T22:44:33Z"
+ content="""
+In the git-annex branch, there is
+
+* [[!toggle id=\"4deec8203e0baf7bb5b7d5d868d82439261ab3bc\" text=\"a commit at 23:21:51\"]] from my desktop box where I added `test/hello`
+
+[[!toggleable id=\"4deec8203e0baf7bb5b7d5d868d82439261ab3bc\" text=\"\"\"
+ commit 4deec8203e0baf7bb5b7d5d868d82439261ab3bc
+ Author: Johan Kiviniemi <devel@johan.kiviniemi.name>
+ Date: Mon Apr 7 23:21:51 2014 +0300
+
+ update
+
+ diff --git a/992/280/SHA256E-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03.log b/992/280/SHA256E-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03.log
+ new file mode 100644
+ index 0000000..1cf060c
+ --- /dev/null
+ +++ b/992/280/SHA256E-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03.log
+ @@ -0,0 +1 @@
+ +1396902111.893785s 1 86e07a59-8bba-4878-8d0b-5dfe8c6366c4
+\"\"\"]]
+
+* [[!toggle id=\"2e0884d9c8859339855ceee396b9ea9ae05865b4\" text=\"a commit at 23:21:54\"]] when the desktop box synced to the server (from which the log excerpt came)
+
+[[!toggleable id=\"2e0884d9c8859339855ceee396b9ea9ae05865b4\" text=\"\"\"
+ commit 2e0884d9c8859339855ceee396b9ea9ae05865b4
+ Author: Johan Kiviniemi <devel@johan.kiviniemi.name>
+ Date: Mon Apr 7 23:21:54 2014 +0300
+
+ update
+
+ diff --git a/992/280/SHA256E-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e84
+ 6f6be03.log b/992/280/SHA256E-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e8
+ 46f6be03.log
+ index 1cf060c..cd0bccc 100644
+ --- a/992/280/SHA256E-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03
+ .log
+ +++ b/992/280/SHA256E-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03
+ .log
+ @@ -1 +1,2 @@
+ +1396902112.657779s 1 09ada430-8802-47da-bbfa-f5256a3c55d2
+ 1396902111.893785s 1 86e07a59-8bba-4878-8d0b-5dfe8c6366c4
+\"\"\"]]
+
+* [[!toggle id=\"214ed317536695b91c8dd5bed059c46c11ad00be\" text=\"a commit at 23:24:24\"]] (2.5 minutes later!) when the assistant on the server finally merged `synced/git-annex` into `git-annex` (`test/hello` became visible in the working tree at that time).
+
+[[!toggleable id=\"214ed317536695b91c8dd5bed059c46c11ad00be\" text=\"\"\"
+ commit 214ed317536695b91c8dd5bed059c46c11ad00be
+ Merge: 4deec82 2e0884d
+ Author: sarjat <sarjat@alku.heh.fi>
+ Date: Mon Apr 7 23:24:24 2014 +0300
+
+ merging synced/git-annex into git-annex
+\"\"\"]]
+
+There is no commit in the `git-annex` branch at 23:30. The next commit is from unrelated changes at 00:06.
+
+[[!toggle id=\"84068090af4bcd3d24f16d865ac07b0478f20ada\" text=\"84068090af4bcd3d24f16d865ac07b0478f20ada\"]] is the commit in `master` which added `test/hello` at 23:21:51.
+
+[[!toggleable id=\"84068090af4bcd3d24f16d865ac07b0478f20ada\" text=\"\"\"
+ commit 84068090af4bcd3d24f16d865ac07b0478f20ada
+ Author: Johan Kiviniemi <devel@johan.kiviniemi.name>
+ Date: Mon Apr 7 23:21:51 2014 +0300
+
+ diff --git a/test/hello b/test/hello
+ new file mode 120000
+ index 0000000..8c2678f
+ --- /dev/null
+ +++ b/test/hello
+ @@ -0,0 +1 @@
+ +../.git/annex/objects/zK/02/SHA256E-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08
+ \ No newline at end of file
+\"\"\"]]
+
+The repository on the server is in indirect mode.
+
+"""]]
diff --git a/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_8_03dd76b01f46a7cc66eddac3e054c8ad._comment b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_8_03dd76b01f46a7cc66eddac3e054c8ad._comment
new file mode 100644
index 000000000..d6aa43da0
--- /dev/null
+++ b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_8_03dd76b01f46a7cc66eddac3e054c8ad._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://johan.kiviniemi.name/"
+ nickname="Johan"
+ subject="comment 8"
+ date="2014-04-07T22:48:18Z"
+ content="""
+There are no commits in `master` or `git-annex` that have the word conflict in the description.
+"""]]
diff --git a/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_9_5f4444f03cbebaa44628288095383679._comment b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_9_5f4444f03cbebaa44628288095383679._comment
new file mode 100644
index 000000000..09383141e
--- /dev/null
+++ b/doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_9_5f4444f03cbebaa44628288095383679._comment
@@ -0,0 +1,89 @@
+[[!comment format=mdwn
+ username="http://johan.kiviniemi.name/"
+ nickname="Johan"
+ subject="comment 9"
+ date="2014-04-07T22:55:12Z"
+ content="""
+[[!toggle id=\"excerpt\" text=\"The full log excerpt\"]] which includes the sync from the client and the final messages after the cat-file loop ended and things stabilized (but a memory leak of 30 MB in the git-annex assistant process remained).
+
+[[!toggleable id=\"excerpt\" text=\"\"\"
+ [2014-04-04 10:55:00 EEST] main: starting assistant version 5.20140402
+
+
+
+ [2014-04-07 23:21:08 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"show-ref\",\"git-annex\"]
+ [2014-04-07 23:21:08 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+ [2014-04-07 23:21:08 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..20d1f5538f6aa430f29ef938f6db045f5a69425d\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:21:08 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..b402a6e7b9268e25dbd9c6a027f4a5258993980d\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:21:08 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..7b18a191d58d779aab5789b923adb09863938ffe\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:21:08 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"ls-tree\",\"--full-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"numcopies.log\",\"schedule.log\",\"preferred-content.log\",\"required-content.log\",\"group-preferred-content.log\"]
+ [2014-04-07 23:21:52 EEST] TransferWatcher: transfer starting: Download UUID \"86e07a59-8bba-4878-8d0b-5dfe8c6366c4\" SHA256E-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 Nothing
+ [2014-04-07 23:21:52 EEST] read: git [\"config\",\"--null\",\"--list\"]
+ [2014-04-07 23:21:52 EEST] TransferWatcher: transfer starting: Download UUID \"86e07a59-8bba-4878-8d0b-5dfe8c6366c4\" test/hello Nothing
+ [2014-04-07 23:21:52 EEST] read: git [\"config\",\"--null\",\"--list\"]
+ [2014-04-07 23:21:52 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"show-ref\",\"git-annex\"]
+ [2014-04-07 23:21:52 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+ [2014-04-07 23:21:52 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..20d1f5538f6aa430f29ef938f6db045f5a69425d\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:21:52 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..4deec8203e0baf7bb5b7d5d868d82439261ab3bc\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:21:52 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..b402a6e7b9268e25dbd9c6a027f4a5258993980d\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:21:52 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..7b18a191d58d779aab5789b923adb09863938ffe\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:21:52 EEST] feed: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"update-index\",\"-z\",\"--index-info\"]
+ [2014-04-07 23:21:52 EEST] TransferWatcher: transfer finishing: Transfer {transferDirection = Download, transferUUID = UUID \"86e07a59-8bba-4878-8d0b-5dfe8c6366c4\", transferKey = Key {keyName = \"5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03\", keyBackendName = \"SHA256E\", keySize = Just 6, keyMtime = Nothing}}
+ [2014-04-07 23:21:52 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"4deec8203e0baf7bb5b7d5d868d82439261ab3bc\"]
+ [2014-04-07 23:21:52 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"4deec8203e0baf7bb5b7d5d868d82439261ab3bc..refs/heads/git-annex\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:21:52 EEST] call: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"update-ref\",\"refs/heads/git-annex\",\"4deec8203e0baf7bb5b7d5d868d82439261ab3bc\"]
+ [2014-04-07 23:22:08 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"ls-tree\",\"--full-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"numcopies.log\",\"schedule.log\",\"preferred-content.log\",\"required-content.log\",\"group-preferred-content.log\"]
+ [2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"symbolic-ref\",\"HEAD\"]
+ [2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"show-ref\",\"refs/heads/master\"]
+ [2014-04-07 23:24:24 EEST] Merger: merging refs/heads/synced/master into refs/heads/master
+ [2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"show-ref\",\"--hash\",\"refs/heads/master\"]
+ [2014-04-07 23:24:24 EEST] call: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"merge\",\"--no-edit\",\"refs/heads/synced/master\"]
+ Updating 645e474..8406809
+ Fast-forward
+ test/hello | 1 +
+ 1 file changed, 1 insertion(+)
+ create mode 120000 test/hello
+ [2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"show-ref\",\"git-annex\"]
+ [2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+ [2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..4deec8203e0baf7bb5b7d5d868d82439261ab3bc\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..2e0884d9c8859339855ceee396b9ea9ae05865b4\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..b402a6e7b9268e25dbd9c6a027f4a5258993980d\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..7b18a191d58d779aab5789b923adb09863938ffe\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:24:24 EEST] chat: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"hash-object\",\"-w\",\"--stdin-paths\",\"--no-filters\"]
+ [2014-04-07 23:24:24 EEST] feed: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"update-index\",\"-z\",\"--index-info\"]
+ [2014-04-07 23:24:24 EEST] feed: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"update-index\",\"-z\",\"--index-info\"]
+ [2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"2e0884d9c8859339855ceee396b9ea9ae05865b4\"]
+ [2014-04-07 23:24:24 EEST] chat: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"hash-object\",\"-t\",\"blob\",\"-w\",\"--stdin\",\"--no-filters\"]
+ [2014-04-07 23:24:24 EEST] feed: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"update-index\",\"-z\",\"--index-info\"]
+ [2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"refs/heads/git-annex\"]
+ [2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"write-tree\"]
+ [2014-04-07 23:24:24 EEST] chat: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"commit-tree\",\"0bd4352b4008165d356bc9b1250bdb456c675175\",\"-p\",\"refs/heads/git-annex\",\"-p\",\"2e0884d9c8859339855ceee396b9ea9ae05865b4\"]
+ [2014-04-07 23:24:24 EEST] call: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"update-ref\",\"refs/heads/git-annex\",\"214ed317536695b91c8dd5bed059c46c11ad00be\"]
+ [2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"ls-tree\",\"--full-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"numcopies.log\",\"schedule.log\",\"preferred-content.log\",\"required-content.log\",\"group-preferred-content.log\"]
+ [2014-04-07 23:24:24 EEST] Watcher: add symlink test/hello
+ [2014-04-07 23:24:24 EEST] chat: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"hash-object\",\"-t\",\"blob\",\"-w\",\"--stdin\",\"--no-filters\"]
+ [2014-04-07 23:24:24 EEST] Committer: committing 1 changes
+ [2014-04-07 23:24:24 EEST] Committer: Committing changes to git
+ [2014-04-07 23:24:24 EEST] feed: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"update-index\",\"-z\",\"--index-info\"]
+ [2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"symbolic-ref\",\"HEAD\"]
+ [2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"show-ref\",\"--hash\",\"refs/heads/master\"]
+ [2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"write-tree\"]
+ [2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"rev-parse\",\"84068090af4bcd3d24f16d865ac07b0478f20ada:\"]
+ [2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"symbolic-ref\",\"HEAD\"]
+ [2014-04-07 23:24:24 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"show-ref\",\"refs/heads/master\"]
+ [2014-04-07 23:30:13 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"show-ref\",\"git-annex\"]
+ [2014-04-07 23:30:13 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+ [2014-04-07 23:30:13 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..214ed317536695b91c8dd5bed059c46c11ad00be\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:30:13 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..2e0884d9c8859339855ceee396b9ea9ae05865b4\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:30:13 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..b402a6e7b9268e25dbd9c6a027f4a5258993980d\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:30:13 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..7b18a191d58d779aab5789b923adb09863938ffe\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:30:13 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"ls-tree\",\"--full-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"numcopies.log\",\"schedule.log\",\"preferred-content.log\",\"required-content.log\",\"group-preferred-content.log\"]
+ [2014-04-07 23:30:13 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"show-ref\",\"git-annex\"]
+ [2014-04-07 23:30:13 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+ [2014-04-07 23:30:13 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..214ed317536695b91c8dd5bed059c46c11ad00be\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:30:13 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..2e0884d9c8859339855ceee396b9ea9ae05865b4\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:30:13 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..b402a6e7b9268e25dbd9c6a027f4a5258993980d\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:30:13 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"log\",\"refs/heads/git-annex..7b18a191d58d779aab5789b923adb09863938ffe\",\"--oneline\",\"-n1\"]
+ [2014-04-07 23:31:13 EEST] read: git [\"--git-dir=/storage/sarjat/annex-sarjat/.git\",\"--work-tree=/storage/sarjat/annex-sarjat\",\"ls-tree\",\"--full-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"numcopies.log\",\"schedule.log\",\"preferred-content.log\",\"required-content.log\",\"group-preferred-content.log\"]
+\"\"\"]]
+"""]]
diff --git a/doc/bugs/Assistant_lost_dbus_connection_spamming_log.mdwn b/doc/bugs/Assistant_lost_dbus_connection_spamming_log.mdwn
deleted file mode 100644
index 3b50742fd..000000000
--- a/doc/bugs/Assistant_lost_dbus_connection_spamming_log.mdwn
+++ /dev/null
@@ -1,78 +0,0 @@
-## what
-After starting the assistant, daemon.log is being spammed with "accept: unsupported operation (Function not implemented)" due to dbus failing.
-
-## version
-[[!format sh """
-$ git-annex version
-git-annex version: 5.20131224-g6ca5271
-"""]]
-(The armel standalone)
-
-## question
-Is this detrimental to the assistant?
-
-## partial daemon.log
-[[!format sh """
-[2014-01-04 23:03:34 PST] main: starting assistant version 5.20131224-g6ca5271
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-[
-2f0a 1i 4ld-eb0du1 s-t 0of4 a ai2dl3de: d0w;3a :tf3ca5hl lPoiSnnT g]d ibTrarecacknt sotfroey r mS/tcva
-olnifeingt/Egrirto-raMnensesxa g(e/ v=a r\"/rsuenrCvliiceenst/:h oumneasb/lger etgo/ .dceotnefrimgi/ngei
-
-xi s tl o(sNto dsbuucsh cfoinlnee cotri odni;r efcatlolriyn)g)
-back to polling (SocketError {socketErrorMessage = "connect: does not exist (No such file or directory)"
-
-Already up-to-date.
-accept: unsupported operation (Function not implemented)
-(scanning...) [2014-01-04 23:03:36 PST] Watcher: Performing startup scan
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-Everything up-to-date
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-accept: unsupported operation (Function not implemented)
-
- lost dbus connection; falling back to polling (SocketError {socketErrorMessage = "connect: does not exist (No such file or directory)", socketErrorFatal = True, socketErrorAddress = Just (Address "unix:path=/var/run/dbus/system_bus_socket")})
-"""]]
diff --git a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_10_b47d543e06a1a243211a2fa0cb5d09a3._comment b/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_10_b47d543e06a1a243211a2fa0cb5d09a3._comment
deleted file mode 100644
index 6d0abe8c6..000000000
--- a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_10_b47d543e06a1a243211a2fa0cb5d09a3._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="108.236.230.124"
- subject="comment 10"
- date="2014-03-10T17:34:56Z"
- content="""
-I've found the 1 second delay on failure to accept in the warp source code.
-
-It's using Network.Socket.accept, which uses accept4 with NONBLOCK by default, but can be built without `HAVE_ACCEPT4` and in that case uses `accept` with blocking.
-
-I've put in a patch to build network without accept4 support, and am rebuilding the arm autobuilder. This will take a while..
-
-"""]]
diff --git a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_11_399c1e4455dce105df95414fe3ff939d._comment b/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_11_399c1e4455dce105df95414fe3ff939d._comment
deleted file mode 100644
index 665b9d8db..000000000
--- a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_11_399c1e4455dce105df95414fe3ff939d._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.154"
- subject="comment 11"
- date="2014-03-11T03:02:21Z"
- content="""
-Autobuild is now updated with the accept fix.
-"""]]
diff --git a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_12_1cfdd76e751ee3726bd80359cfc85c47._comment b/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_12_1cfdd76e751ee3726bd80359cfc85c47._comment
deleted file mode 100644
index fe19bf87e..000000000
--- a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_12_1cfdd76e751ee3726bd80359cfc85c47._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.102"
- subject="ping?"
- date="2014-03-19T20:29:12Z"
- content="""
-Could either greg or Schnouki please test with the current arm autobuild and see if you can connect to the webapp?
-"""]]
diff --git a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_1_27fc71cadcbe6d5f146ffdb72b64689a._comment b/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_1_27fc71cadcbe6d5f146ffdb72b64689a._comment
deleted file mode 100644
index 8e87e86db..000000000
--- a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_1_27fc71cadcbe6d5f146ffdb72b64689a._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.35"
- subject="comment 1"
- date="2014-01-05T18:26:10Z"
- content="""
-It's not clear to me that the accept message has anything to do with dbus.
-
-Does the accept message continue being logged past this point? Does the log contain \"unable to bind to local socket\"?
-
-Are you able to open the webapp? That's the part of git-annex that would use `accept()`..
-"""]]
diff --git a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_2_0fb01ff463e7da6df2864186dc28f8e4._comment b/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_2_0fb01ff463e7da6df2864186dc28f8e4._comment
deleted file mode 100644
index dd46672a0..000000000
--- a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_2_0fb01ff463e7da6df2864186dc28f8e4._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://grossmeier.net/"
- nickname="greg"
- subject="comment 2"
- date="2014-01-05T22:50:32Z"
- content="""
-The accept lines just keep coming and coming and coming and coming. About 58 of them between \"lost dbus connection...\" logs. There's interspersed \"Everything up-to-date\" and such.
-
-grep'ing for \"unable\" across all daemon log files gives me nothing.
-
-I haven't futzed with opening the webapp on the NAS yet. Correction: I just did try futzing and I fear there's something in the NAS software I need to figure out before I can do it successfully.
-"""]]
diff --git a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_3_10fa5082909f5e568623cf6d901d5161._comment b/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_3_10fa5082909f5e568623cf6d901d5161._comment
deleted file mode 100644
index 249eb9c79..000000000
--- a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_3_10fa5082909f5e568623cf6d901d5161._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.35"
- subject="comment 3"
- date="2014-01-06T16:22:49Z"
- content="""
-Is dbus running at all?
-
-What is the frequency of the messages?
-
-"""]]
diff --git a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_4_f4e0fa25b7f466228622a6da02b157e7._comment b/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_4_f4e0fa25b7f466228622a6da02b157e7._comment
deleted file mode 100644
index 65e2f43f8..000000000
--- a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_4_f4e0fa25b7f466228622a6da02b157e7._comment
+++ /dev/null
@@ -1,24 +0,0 @@
-[[!comment format=mdwn
- username="http://schnouki.net/"
- nickname="Schnouki"
- subject="comment 4"
- date="2014-03-06T00:10:09Z"
- content="""
-Same issue here: Arch chroot on a Synology DS413j NAS. Kernel 2.6.32.12 (by Synology), glibc 2.18-12.1, git-annex 5.20140227 (standalone armel). DBus is running as root, but not for the git-annex user.
-
-Ran it through strace, here is a hopefully relevant trace:
-
- socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 11
- fcntl64(11, F_GETFL) = 0x2 (flags O_RDWR)
- fcntl64(11, F_SETFL, O_RDWR|O_NONBLOCK) = 0
- setsockopt(11, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
- bind(11, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr(\"127.0.0.1\")}, 16) = 0
- listen(11, 128) = 0
- getsockname(11, {sa_family=AF_INET, sin_port=htons(50664), sin_addr=inet_addr(\"127.0.0.1\")}, [16]) = 0
- ...
- accept4(11, 0x40b7d3e0, [16], SOCK_NONBLOCK) = -1 ENOSYS (Function not implemented)
-
-According to `man accept`, `accept4()` is available since Linux 2.6.28 and glibc 2.10.
-
-And I can't connect to the webapp (neither to localhost using a SSH tunnel, nor to the LAN IP when using --listen=...).
-"""]]
diff --git a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_5_6b9b87bfb8b94171b3dba51919fd1ceb._comment b/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_5_6b9b87bfb8b94171b3dba51919fd1ceb._comment
deleted file mode 100644
index d612cf35f..000000000
--- a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_5_6b9b87bfb8b94171b3dba51919fd1ceb._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.146"
- subject="comment 5"
- date="2014-03-06T18:12:57Z"
- content="""
-Again the accept message does not seem to be related to dbus. A dbus client has no reason to do that; a web server does. The use of `O_NONBLOCK` with accept4 seems likely to be the culprit to me.
-
-How frequently is dbus mentioned in the log?
-"""]]
diff --git a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_6_51f35f069c95a5ea7bd4dbab47b5702b._comment b/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_6_51f35f069c95a5ea7bd4dbab47b5702b._comment
deleted file mode 100644
index 478cb5a37..000000000
--- a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_6_51f35f069c95a5ea7bd4dbab47b5702b._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://schnouki.net/"
- nickname="Schnouki"
- subject="comment 6"
- date="2014-03-07T08:52:12Z"
- content="""
-Agreed, the dbus and accept messages are probably unrelated. I just commented here because it's the same bug I'm encountering.
-
-The dbus message only appears once in the log (shortly after startup). The accept messages appears every second.
-"""]]
diff --git a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_7_691661d902acbf9c11d713541d5d39e4._comment b/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_7_691661d902acbf9c11d713541d5d39e4._comment
deleted file mode 100644
index 46f147c7d..000000000
--- a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_7_691661d902acbf9c11d713541d5d39e4._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.146"
- subject="comment 7"
- date="2014-03-07T17:03:30Z"
- content="""
-Are you sure that the accept message happens every second? I don't see why the webapp would continue to try to bind a socket it it failed with a 1 second delay. (It does try 100 times if it fails, per [[!commit fe3009d83b08563875856152034e7c59a0c6ecca]], before ending with \"unable to bind to local socket\".)
-"""]]
diff --git a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_8_ef559feb7b350f2014055680d087c2bc._comment b/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_8_ef559feb7b350f2014055680d087c2bc._comment
deleted file mode 100644
index 81af6d431..000000000
--- a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_8_ef559feb7b350f2014055680d087c2bc._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.146"
- subject="comment 8"
- date="2014-03-07T17:16:41Z"
- content="""
-greg has confirmed that he can connect to the webapp, but it never replies to http requests. So, this could be the port being bound, but the accept failing.
-
-I don't know why it would retry the accept once per second, but this could be something in warp or the network library.
-"""]]
diff --git a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_9_278b41aaa73a214b2b38881242a29b17._comment b/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_9_278b41aaa73a214b2b38881242a29b17._comment
deleted file mode 100644
index e43f03f03..000000000
--- a/doc/bugs/Assistant_lost_dbus_connection_spamming_log/comment_9_278b41aaa73a214b2b38881242a29b17._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://schnouki.net/"
- nickname="Schnouki"
- subject="comment 9"
- date="2014-03-09T16:29:26Z"
- content="""
-I did some more testing today.
-
-I have this message when using either git-annex assistant or git-annex webapp. When running the webapp, I can connect to its port, but there's no response from git-annex (either from a browser or when using telnet to send a simple \"GET / HTTP/1.0\").
-
-The accept message comes every second, the dbus one very minute (didn't test long enough last time, sorry about that).
-"""]]
diff --git a/doc/bugs/Assistant_merge_loop.mdwn b/doc/bugs/Assistant_merge_loop.mdwn
new file mode 100644
index 000000000..edff5e4b3
--- /dev/null
+++ b/doc/bugs/Assistant_merge_loop.mdwn
@@ -0,0 +1,19 @@
+The assistant appears to be in a merge loop with at least two of my repos. It's creating thousands of merge commits without any changes. One repository that contains around 600 files that change very very rarely now has 63528 commits.
+
+Here's a screenshot from tig: [[https://ssl.zerodogg.org/~zerodogg/private/tmp/Skjermdump_fra_2014-07-05_07:09:22-2014-07-05.png]]
+
+I can privately provide a copy of the git repo itself if needed.
+
+Using the standalone build, 64bit, on ArchLinux, Fedora 20 and Ubuntu 14.04.
+
+ $ git annex version
+ git-annex version: 5.20140610-g5ec8bcf
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 0 1 2 4
+
+> [[fixed|done]]. Note that 5.20140708 contained an incomplete fix for this
+> bug. --[[Joey]]
diff --git a/doc/bugs/Assistant_merge_loop/comment_10_8fe176691f0f61c15085d3c38f0ea50f._comment b/doc/bugs/Assistant_merge_loop/comment_10_8fe176691f0f61c15085d3c38f0ea50f._comment
new file mode 100644
index 000000000..1826e313a
--- /dev/null
+++ b/doc/bugs/Assistant_merge_loop/comment_10_8fe176691f0f61c15085d3c38f0ea50f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk9nck8WX8-ADF3Fdh5vFo4Qrw1I_bJcR8"
+ nickname="Jon Ander"
+ subject="comment 10"
+ date="2014-07-16T20:32:57Z"
+ content="""
+I have two computers with Debian testing (5.20140529) that aren't having the issue, and one with Debian Sid (5.20140709) that is still creating the empty merge commits
+"""]]
diff --git a/doc/bugs/Assistant_merge_loop/comment_11_6e3a78327c0b813415ebf85e298813d4._comment b/doc/bugs/Assistant_merge_loop/comment_11_6e3a78327c0b813415ebf85e298813d4._comment
new file mode 100644
index 000000000..7823176ef
--- /dev/null
+++ b/doc/bugs/Assistant_merge_loop/comment_11_6e3a78327c0b813415ebf85e298813d4._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 11"
+ date="2014-07-16T20:36:32Z"
+ content="""
+Has the assistant been restarted since git-annex was upgraded to the fixed version?
+
+Can you post a debug.log?
+"""]]
diff --git a/doc/bugs/Assistant_merge_loop/comment_12_fc5ceb09cc358521b32877fe4b0fb821._comment b/doc/bugs/Assistant_merge_loop/comment_12_fc5ceb09cc358521b32877fe4b0fb821._comment
new file mode 100644
index 000000000..7e0a534da
--- /dev/null
+++ b/doc/bugs/Assistant_merge_loop/comment_12_fc5ceb09cc358521b32877fe4b0fb821._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="EskildHustvedt"
+ ip="80.202.103.55"
+ subject="comment 12"
+ date="2014-07-19T06:22:57Z"
+ content="""
+This issue has been resolved for me. No new empty merges since 2014-07-12.
+"""]]
diff --git a/doc/bugs/Assistant_merge_loop/comment_14_46bddc2451da3bf5029248198cf02dcd._comment b/doc/bugs/Assistant_merge_loop/comment_14_46bddc2451da3bf5029248198cf02dcd._comment
new file mode 100644
index 000000000..6ee3fb79e
--- /dev/null
+++ b/doc/bugs/Assistant_merge_loop/comment_14_46bddc2451da3bf5029248198cf02dcd._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk9nck8WX8-ADF3Fdh5vFo4Qrw1I_bJcR8"
+ nickname="Jon Ander"
+ subject="comment 14"
+ date="2014-09-08T07:27:46Z"
+ content="""
+Still experiencing this bug in Debian testing (5.20140717) and Debian sid (5.20140831)
+"""]]
diff --git a/doc/bugs/Assistant_merge_loop/comment_14_89947f4af19ceae36fbe0a69aa10df25._comment b/doc/bugs/Assistant_merge_loop/comment_14_89947f4af19ceae36fbe0a69aa10df25._comment
new file mode 100644
index 000000000..fb95257ec
--- /dev/null
+++ b/doc/bugs/Assistant_merge_loop/comment_14_89947f4af19ceae36fbe0a69aa10df25._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk9nck8WX8-ADF3Fdh5vFo4Qrw1I_bJcR8"
+ nickname="Jon Ander"
+ subject="comment 14"
+ date="2014-11-09T22:56:31Z"
+ content="""
+I have 3 computers syncing through a private github repo (with annex-ignore = true) and a box account for transferring files. The computers are up to date debian:testing:amd64, debian:testing:i386 and debian:sid:amd64.
+
+I'm getting lots of empty commits with the text \"merge refs/remotes/github/synced/master\". I would really like to help in debugging this issue if possible.
+"""]]
diff --git a/doc/bugs/Assistant_merge_loop/comment_1_ccf46511b924f86b488dba25060baa06._comment b/doc/bugs/Assistant_merge_loop/comment_1_ccf46511b924f86b488dba25060baa06._comment
new file mode 100644
index 000000000..c5f9c2187
--- /dev/null
+++ b/doc/bugs/Assistant_merge_loop/comment_1_ccf46511b924f86b488dba25060baa06._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 1"
+ date="2014-07-05T20:34:39Z"
+ content="""
+I am seeing some evidence of this in my own family's repo, where one node updated to 5.20140613 and started making series of empty commits with message \"merge refs/heads/synced/master\" and only 1 parent (so not really a merge).
+
+Quite likely [[!commit d6711800ad261fb4c37fc361bc84918d1e296bc4]] is at fault. Probably the fastForwardable check isn't quite right.
+
+This should only affect direct mode repositories. When only one node has the problem, it won't be bad, but if multiple nodes are doing this, their repos never converge and keep growing.
+
+Hmm, I think I have partially reproduced it with 2 direct mode repos, each having the other as a remote. `git annex sync` repeatedly in each does not add unncessary commits, but running the assistant in each does. In this particular case, it manages to converge eventually after several commits.
+"""]]
diff --git a/doc/bugs/Assistant_merge_loop/comment_2_afcbf3f8575e1a967c79693b94ef055c._comment b/doc/bugs/Assistant_merge_loop/comment_2_afcbf3f8575e1a967c79693b94ef055c._comment
new file mode 100644
index 000000000..eb3deb2ee
--- /dev/null
+++ b/doc/bugs/Assistant_merge_loop/comment_2_afcbf3f8575e1a967c79693b94ef055c._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 2"
+ date="2014-07-05T21:17:17Z"
+ content="""
+Well, it looks like this is as simple as the assistant trying to merge refs/remotes/$foo/synced/master into the current branch, when that ref is behind or the same as the current branch. Nothing to merge, so it does some pointless work and then the fastForwardable check runs -- and that check looks for refs between the \"old\" and \"new\" refs. Since the \"new\" is behind the \"old\", there are no such commits, and the unnecessary empty commit results.
+
+The reason only the assistant is affected is because `git-annex sync` already checked Git.Branch.changed before trying to do any merging, which avoids the problem.
+
+Fix committed.
+"""]]
diff --git a/doc/bugs/Assistant_merge_loop/comment_3_07341221b2839fdc1c43634e011451d2._comment b/doc/bugs/Assistant_merge_loop/comment_3_07341221b2839fdc1c43634e011451d2._comment
new file mode 100644
index 000000000..1b6956483
--- /dev/null
+++ b/doc/bugs/Assistant_merge_loop/comment_3_07341221b2839fdc1c43634e011451d2._comment
@@ -0,0 +1,62 @@
+[[!comment format=mdwn
+ username="EskildHustvedt"
+ ip="80.202.103.55"
+ subject="comment 3"
+ date="2014-07-08T08:13:40Z"
+ content="""
+I'm still seeing this problem in 5.20140707-g923b436
+
+ [0 zerodogg@firefly annexed]$ git annex version
+ git-annex version: 5.20140707-g923b436
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 0 1 2 4
+ [0 zerodogg@firefly annexed]$ git graph | head -n20
+ * d4bf68f - (HEAD, annex/direct/master) merge refs/remotes/serenity/synced/master (3 minutes ago) <Eskild Hustvedt>
+ |\
+ * | d03f280 - merge refs/remotes/browncoats/synced/master (3 minutes ago) <Eskild Hustvedt>
+ |/
+ * e6863b8 - (serenity/synced/master, browncoats/synced/master) merge refs/remotes/serenity/synced/master (3 minutes ago) <Eskild Hustvedt>
+ |\
+ * \ 616d985 - merge refs/remotes/browncoats/synced/master (3 minutes ago) <Eskild Hustvedt>
+ |\ \
+ | |/
+ * | 3b39706 - merge refs/remotes/serenity/synced/master (3 minutes ago) <Eskild Hustvedt>
+ |\ \
+ | |/
+ * | 6d354cc - merge refs/remotes/browncoats/synced/master (4 minutes ago) <Eskild Hustvedt>
+ |\ \
+ | |/
+ * | 710c3c1 - merge refs/remotes/serenity/synced/master (4 minutes ago) <Eskild Hustvedt>
+ |\ \
+ | |/
+ * | 763930f - merge refs/remotes/browncoats/synced/master (4 minutes ago) <Eskild Hustvedt>
+ |/
+ [0 zerodogg@firefly annexed]$ git annex assistant --stop
+ [0 zerodogg@firefly annexed]$ git annex assistant
+ [0 zerodogg@firefly annexed]$ git graph | head -n20
+ * 947f1a2 - (HEAD, annex/direct/master) merge refs/remotes/serenity/synced/master (15 seconds ago) <Eskild Hustvedt>
+ |\
+ * | 19c6043 - merge refs/remotes/browncoats/synced/master (18 seconds ago) <Eskild Hustvedt>
+ |/
+ * b453741 - (serenity/synced/master, browncoats/synced/master) merge refs/remotes/serenity/synced/master (18 seconds ago) <Eskild Hustvedt>
+ |\
+ * \ 6baaebd - merge refs/remotes/browncoats/synced/master (18 seconds ago) <Eskild Hustvedt>
+ |\ \
+ | |/
+ * | 03e4fa2 - merge refs/remotes/serenity/synced/master (24 seconds ago) <Eskild Hustvedt>
+ |\ \
+ | |/
+ * | 33302d8 - merge refs/remotes/browncoats/synced/master (24 seconds ago) <Eskild Hustvedt>
+ |\ \
+ | |/
+ * | d4bf68f - merge refs/remotes/serenity/synced/master (4 minutes ago) <Eskild Hustvedt>
+ |\ \
+ | |/
+ * | d03f280 - merge refs/remotes/browncoats/synced/master (4 minutes ago) <Eskild Hustvedt>
+ |/
+ [0 zerodogg@firefly annexed]$
+"""]]
diff --git a/doc/bugs/Assistant_merge_loop/comment_4_7ae215b478843d2a8c705cac385fcf22._comment b/doc/bugs/Assistant_merge_loop/comment_4_7ae215b478843d2a8c705cac385fcf22._comment
new file mode 100644
index 000000000..32468557b
--- /dev/null
+++ b/doc/bugs/Assistant_merge_loop/comment_4_7ae215b478843d2a8c705cac385fcf22._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="EskildHustvedt"
+ ip="80.202.103.55"
+ subject="comment 4"
+ date="2014-07-09T00:24:36Z"
+ content="""
+As far as I can see in my repo, the empty merges started on 2014-05-27, but then appear to resolve themselves after 40-50 commits on that day. They reappear again on 2014-06-03, and appears to have kept going daily ever since.
+"""]]
diff --git a/doc/bugs/Assistant_merge_loop/comment_5_11873461f093a266f0bb7e129bc21cde._comment b/doc/bugs/Assistant_merge_loop/comment_5_11873461f093a266f0bb7e129bc21cde._comment
new file mode 100644
index 000000000..188317bb8
--- /dev/null
+++ b/doc/bugs/Assistant_merge_loop/comment_5_11873461f093a266f0bb7e129bc21cde._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 5"
+ date="2014-07-09T19:00:35Z"
+ content="""
+I have confirmed this is still happening, though I had certianly thought I had reproduced and fixed it.
+"""]]
diff --git a/doc/bugs/Assistant_merge_loop/comment_6_e7b6ecdd7e2b0222ea0baa0ed770e66d._comment b/doc/bugs/Assistant_merge_loop/comment_6_e7b6ecdd7e2b0222ea0baa0ed770e66d._comment
new file mode 100644
index 000000000..e408643ca
--- /dev/null
+++ b/doc/bugs/Assistant_merge_loop/comment_6_e7b6ecdd7e2b0222ea0baa0ed770e66d._comment
@@ -0,0 +1,80 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmN5jDf53oRJZsTo8Ahj2uXzCzq6HcvEro"
+ nickname="Gregory"
+ subject="confirmed?"
+ date="2014-07-15T01:29:00Z"
+ content="""
+I seem to be getting this behavior, in tandem with the [bad merge commit deleting all files](http://git-annex.branchable.com/bugs/bad_merge_commit_deleting_all_files/) on
+
+ git-annex version: 5.20140709-gf15d2aa
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+ local repository version: unknown
+ supported repository version: 5
+ upgrade supported from repository versions: 0 1 2 4
+
+Here is my log over the past couple weeks when I basically made no changes to the filesystem.
+
+git log --oneline --decorate --color --graph
+
+<pre>
+* b304ad7 (HEAD, origin/synced/master, origin/master, origin/HEAD, master)
+* 568cf6c merge refs/remotes/diskb/synced/master
+* 5e426d0 merge refs/remotes/diskb/synced/master
+* b2fa076 merge refs/remotes/diskb/synced/master
+* b66a37d merge refs/remotes/diskb/synced/master
+|\
+* | 910cba5 merge refs/remotes/diskb/synced/master
+|/
+* 60736c3 merge refs/remotes/diskb/synced/master
+* a957439 merge refs/remotes/diskb/synced/master
+|\
+* \ 5c135c0 merge refs/remotes/diskb/synced/master
+|\ \
+| |/
+* | 52d8b66 merge refs/heads/synced/master
+|\ \
+* | | d77f3a2 merge refs/remotes/diskb/synced/master
+| |/
+|/|
+* | 03bb56a merge refs/remotes/diskb/synced/master
+|\ \
+* \ \ bb000db merge refs/heads/synced/master
+|\ \ \
+| |/ /
+|/| /
+| |/
+* | 3bc8520 merge refs/heads/synced/master
+|/
+* 1c3ee7e
+* d3b096a merge refs/remotes/diskb/synced/master
+|\
+* \ 0fa0f6d merge refs/heads/synced/master
+|\ \
+| |/
+* | 173592c merge refs/remotes/diskb/synced/master
+|\ \
+| |/
+* | 3dd8086 merge refs/remotes/diskb/synced/master
+|\ \
+| |/
+* | 68be2a1 merge refs/heads/synced/master
+|\ \
+| |/
+* | bb304f4 merge refs/remotes/diskb/synced/master
+|\ \
+| |/
+|/|
+* | 1c9a2cd
+* | 298b362 merge refs/heads/synced/master
+|/
+* 4c23257 merge refs/remotes/diskb/synced/master
+|\
+* | b709997 merge refs/remotes/diskb/synced/master
+|/
+* 215f061 merge refs/remotes/diskb/synced/master
+|\
+* \ e0f75b4 merge refs/heads/synced/master
+</pre>
+"""]]
diff --git a/doc/bugs/Assistant_merge_loop/comment_7_7717d074611943b831f00ad10918b515._comment b/doc/bugs/Assistant_merge_loop/comment_7_7717d074611943b831f00ad10918b515._comment
new file mode 100644
index 000000000..9c70f2646
--- /dev/null
+++ b/doc/bugs/Assistant_merge_loop/comment_7_7717d074611943b831f00ad10918b515._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 7"
+ date="2014-07-15T19:15:13Z"
+ content="""
+This bug and the other one are fixed in 5.20140709. I assume that your `git log` dates from an earlier version.
+"""]]
diff --git a/doc/bugs/Assistant_merge_loop/comment_8_5ce91ac76498539ada344d1639984302._comment b/doc/bugs/Assistant_merge_loop/comment_8_5ce91ac76498539ada344d1639984302._comment
new file mode 100644
index 000000000..c12c84264
--- /dev/null
+++ b/doc/bugs/Assistant_merge_loop/comment_8_5ce91ac76498539ada344d1639984302._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk9nck8WX8-ADF3Fdh5vFo4Qrw1I_bJcR8"
+ nickname="Jon Ander"
+ subject="comment 8"
+ date="2014-07-16T13:42:16Z"
+ content="""
+I'm still having this issue in 5.20140709
+"""]]
diff --git a/doc/bugs/Assistant_merge_loop/comment_9_b09a5eaa2588559e19b3549bd3c8b496._comment b/doc/bugs/Assistant_merge_loop/comment_9_b09a5eaa2588559e19b3549bd3c8b496._comment
new file mode 100644
index 000000000..b6bfc68eb
--- /dev/null
+++ b/doc/bugs/Assistant_merge_loop/comment_9_b09a5eaa2588559e19b3549bd3c8b496._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 9"
+ date="2014-07-16T18:08:26Z"
+ content="""
+Are you sure that you have upgraded git-annex on every machine that uses that repository? You could have one old un-upgraded one still causing commits that would of course be visible on the rest.
+
+Also, what version exactly does `git-annex version` show?
+"""]]
diff --git a/doc/bugs/Assistant_redirects_to_127.0.0.1_in_some_cases__44___although_used_remotely.mdwn b/doc/bugs/Assistant_redirects_to_127.0.0.1_in_some_cases__44___although_used_remotely.mdwn
deleted file mode 100644
index 1b1738aec..000000000
--- a/doc/bugs/Assistant_redirects_to_127.0.0.1_in_some_cases__44___although_used_remotely.mdwn
+++ /dev/null
@@ -1,29 +0,0 @@
-### Please describe the problem.
-When I use git-annex webapp with a remote IP of a headless computer,
-I am sometimes redirected to a 127.0.0.1 address (with a different
-port as well)
-
-### What steps will reproduce the problem?
-1. Install git-annex as usual.
-2. Open git-annex assistant from a headless machine and access the
-webapp with the --listen option. (e.g. git annex webapp
---listen=xxx.yyy.zzz.www)
-3. Create your first local repository. Then create a second local
-repository.
-4. When assistant asks you if you want to merge these 2
-repositories, try to select the second option (to keep them
-separated).
-5. You are redirected from your remote IP to 127.0.0.1 to a new port number.
-
-(I also encountered the same error at another menu or function, but
-I don't remember where. Sorry.)
-
-### What version of git-annex are you using? On what operating system?
-4.20130815
-Ubuntu 13.10 64-bit (kernel 3.11.0-13-generic x86_64)
-
-### Please provide any additional information below.
-Please ask me for any additional information that may be useful.
-
-> This is a duplicate of [[Switching_repositories_in_webapp_on_a_remote_server_is_not_honoring_--listen_parameter]]
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Assistant_removed_all_references_to_files.mdwn b/doc/bugs/Assistant_removed_all_references_to_files.mdwn
new file mode 100644
index 000000000..4014bc729
--- /dev/null
+++ b/doc/bugs/Assistant_removed_all_references_to_files.mdwn
@@ -0,0 +1,1305 @@
+### Please describe the problem.
+
+Over the last few days, the assistant has recorded commits which have removed all the files from four (which is to say: all) of my local repositories. Two were direct mode, two indirect. All still had the actual file data saved still, so switching to indirect mode and reverting the relevant commits restored all my files. The two indirect repositories are synced with each other.
+
+One of the direct repositories also got all of its refs scrambled, pointing to objects that don't exist. I reset that one to indirect mode, found a valid commit from a clone and reset master to that commit. The other I've yet to work on.
+
+The iffy commits appear to have arrived just after the assistant auto-updated to 20140708.
+
+### What steps will reproduce the problem?
+
+I've not tried reproducing it.
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex version: 5.20140708-g42df533
+Fedora 20
+I'm letting the assistant auto-update itself.
+
+### Please provide any additional information below.
+
+Here's a log for the indirect mode repo that's synced. I have two commits at 18:56:43, each removing half of the files.
+
+[[!format text """
+[2014-08-30 18:56:40 BST] main: starting assistant version 5.20140708-g42df533
+[2014-08-30 18:56:40 BST] TransferScanner: Syncing with apollo
+[2014-08-30 18:56:40 BST] UpgradeWatcher: Finished upgrading git-annex to version 5.20140708-g42df533
+
+(scanning...) [2014-08-30 18:56:40 BST] Watcher: Performing startup scan
+error: Ref refs/remotes/apollo/master is at cca3ca9633a98af7af4e029199b31768925298ed but expected efb22a8c5ff1c116ce43d99156112d4cafbdf967
+From apollo.aylett.co.uk:Annex/Family
+ ! efb22a8..cca3ca9 master -> apollo/master (unable to update local ref)
+TransferScanner crashed: /home/axa/Annex/Family/.git/annex/merge/: getDirectoryContents: does not exist (No such file or directory)
+[2014-08-30 18:56:41 BST] TransferScanner: warning TransferScanner crashed: /home/axa/Annex/Family/.git/annex/merge/: getDirectoryContents: does not exist (No such file or directory)
+
+
+
+(started...) [2014-08-30 18:56:43 BST] Committer: Committing changes to git
+[2014-08-30 18:56:43 BST] Pusher: Syncing with apollo
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 6924eb5..a13c0cd git-annex -> synced/git-annex
+ 5f56a47..972c8da annex/direct/master -> synced/master
+fatal: Run with no arguments or with -c cmd
+git-annex-shell: git-shell failed
+[2014-08-30 18:56:50 BST] RemoteControl: warning Remote apollo needs its git-annex upgraded to 5.20140405 or newer
+[2014-08-30 19:56:40 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 6924eb5..a13c0cd git-annex -> apollo/git-annex
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 04e7150..9095d13 annex/direct/master -> synced/master
+error: duplicate parent 9095d132bb1bd6f03ba4494bcccec6973a322f1c ignored
+[2014-08-30 20:56:42 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 5f56a47..9095d13 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 9095d13..1a1d324 annex/direct/master -> synced/master
+error: duplicate parent 1a1d32492a093c00c7386de55be3fc25a9a56187 ignored
+[2014-08-30 21:56:43 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 9095d13..1a1d324 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 1a1d324..225e820 annex/direct/master -> synced/master
+error: duplicate parent 225e820c9e27db3d278101519932dc5c8b62b64e ignored
+[2014-08-30 22:56:58 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 1a1d324..225e820 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 225e820..205376f annex/direct/master -> synced/master
+error: duplicate parent 205376fa7f5027653ae3a0bd177562b033b2c06a ignored
+[2014-08-30 23:57:05 BST] NetWatcherFallback: Syncing with apollo
+ControlSocket /run/user/1000/ssh-apollo.aylett.co.uk-22-lizzie already exists, disabling multiplexing
+From apollo.aylett.co.uk:Annex/Family
+ 225e820..205376f master -> apollo/master
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+[2014-08-30 23:59:59 BST] Cronner: Consistency check in progress
+[2014-08-30 23:59:59 BST] Cronner: Consistency check in progress
+[2014-08-30 23:59:59 BST] Cronner: Consistency check in progress
+[2014-08-30 23:59:59 BST] Cronner: Consistency check in progress
+[2014-08-30 23:59:59 BST] Cronner: Consistency check in progress
+[2014-08-31 00:00:00 BST] Cronner: Consistency check in progress
+[2014-08-31 00:27:29 BST] PushRetrier: Syncing with apollo
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 205376f..b74eb7b annex/direct/master -> synced/master
+error: duplicate parent b74eb7b1ecc520850efdb304ba995b14b124692c ignored
+[2014-08-31 00:57:29 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 205376f..b74eb7b master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ b74eb7b..cb1254d annex/direct/master -> synced/master
+error: duplicate parent cb1254d5ab344a250675fbdaf5dec942636f6026 ignored
+[2014-08-31 01:57:31 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ b74eb7b..cb1254d master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ cb1254d..8ad18dc annex/direct/master -> synced/master
+error: duplicate parent 8ad18dcdf634a6c2aae224575b232c99c5b92a7c ignored
+[2014-08-31 02:57:33 BST] NetWatcherFallback: Syncing with apollo
+ControlSocket /run/user/1000/ssh-apollo.aylett.co.uk-22-lizzie already exists, disabling multiplexing
+From apollo.aylett.co.uk:Annex/Family
+ cb1254d..8ad18dc master -> apollo/master
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+[2014-08-31 03:27:55 BST] PushRetrier: Syncing with apollo
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 8ad18dc..868ab0f annex/direct/master -> synced/master
+error: duplicate parent 868ab0f36977fb70ac2c8ddda86391289b6b0a3c ignored
+[2014-08-31 03:57:55 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 8ad18dc..868ab0f master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 868ab0f..1eea08e annex/direct/master -> synced/master
+error: duplicate parent 1eea08ee2340ccceb7554f8dd8fbae28edd0ee49 ignored
+[2014-08-31 04:57:56 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 868ab0f..1eea08e master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 1eea08e..b542ca6 annex/direct/master -> synced/master
+error: duplicate parent b542ca6756ba13377efa8884453c82eba71e27e6 ignored
+[2014-08-31 05:57:59 BST] NetWatcherFallback: Syncing with apollo
+ControlSocket /run/user/1000/ssh-apollo.aylett.co.uk-22-lizzie already exists, disabling multiplexing
+From apollo.aylett.co.uk:Annex/Family
+ 1eea08e..b542ca6 master -> apollo/master
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+[2014-08-31 06:28:01 BST] PushRetrier: Syncing with apollo
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ b542ca6..0de348c annex/direct/master -> synced/master
+error: duplicate parent 0de348caffaa453ce30e72ba2e240d8bbba34337 ignored
+[2014-08-31 06:58:01 BST] NetWatcherFallback: Syncing with apollo
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: cannot open shared object file: No such file or directory
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: cannot open shared object file: No such file or directory
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: cannot open shared object file: No such file or directory
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: cannot open shared object file: No such file or directory
+gpg: Signature made Mon 18 Aug 2014 20:14:04 BST using DSA key ID 89C809CB
+gpg: /tmp/git-annex-gpg.tmp.0/trustdb.gpg: trustdb created
+gpg: Good signature from "git-annex distribution signing key (for Joey Hess) <id@joeyh.name>"
+gpg: WARNING: This key is not certified with a trusted signature!
+gpg: There is no indication that the signature belongs to the owner.
+Primary key fingerprint: 4005 5C6A FD2D 526B 2961 E78F 5EE1 DBA7 89C8 09CB
+From apollo.aylett.co.uk:Annex/Family
+ b542ca6..0de348c master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 0de348c..8467b09 annex/direct/master -> synced/master
+error: duplicate parent 8467b0948d5e6e3dfb8375c4e84e7770ff9798e2 ignored
+[2014-08-31 07:58:04 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 0de348c..8467b09 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 8467b09..3a56258 annex/direct/master -> synced/master
+error: duplicate parent 3a56258c6b5b9551a61756c97c563720c87bf692 ignored
+[2014-08-31 08:58:07 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 8467b09..3a56258 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 3a56258..122eb0d annex/direct/master -> synced/master
+error: duplicate parent 122eb0dbc0e863d4f044a5e0c6eccd4f39dc6599 ignored
+[2014-08-31 09:58:10 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 3a56258..122eb0d master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 122eb0d..46fbb4e annex/direct/master -> synced/master
+error: duplicate parent 46fbb4e5a9d330cbf2fe68c329cb9f10bbba38d6 ignored
+[2014-08-31 10:58:12 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 122eb0d..46fbb4e master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 46fbb4e..cca5e72 annex/direct/master -> synced/master
+error: duplicate parent cca5e72784496181ade94e702533aa5c8e741309 ignored
+[2014-08-31 11:58:14 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 46fbb4e..cca5e72 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ cca5e72..20f0c9d annex/direct/master -> synced/master
+error: duplicate parent 20f0c9da173562c13c4bf109333c9f9787f3a23b ignored
+[2014-08-31 12:58:17 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ cca5e72..20f0c9d master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 20f0c9d..3c9eb47 annex/direct/master -> synced/master
+error: duplicate parent 3c9eb47d6ff77f1f7949b64e10d0378220ea95b7 ignored
+[2014-08-31 13:58:19 BST] NetWatcherFallback: Syncing with apollo
+ControlSocket /run/user/1000/ssh-apollo.aylett.co.uk-22-lizzie already exists, disabling multiplexing
+From apollo.aylett.co.uk:Annex/Family
+ 20f0c9d..3c9eb47 master -> apollo/master
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+[2014-08-31 14:28:21 BST] PushRetrier: Syncing with apollo
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 3c9eb47..87cbe02 annex/direct/master -> synced/master
+error: duplicate parent 87cbe029cf1b65809cadf6067e9cdbd4ba695118 ignored
+[2014-08-31 14:58:21 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 3c9eb47..87cbe02 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 87cbe02..71238f0 annex/direct/master -> synced/master
+error: duplicate parent 71238f04ff0429c64d3f3bb24116860e0cc80129 ignored
+[2014-08-31 15:58:23 BST] NetWatcherFallback: Syncing with apollo
+ControlSocket /run/user/1000/ssh-apollo.aylett.co.uk-22-lizzie already exists, disabling multiplexing
+From apollo.aylett.co.uk:Annex/Family
+ 87cbe02..71238f0 master -> apollo/master
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+[2014-08-31 16:28:31 BST] PushRetrier: Syncing with apollo
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 71238f0..600343d annex/direct/master -> synced/master
+error: duplicate parent 600343d16d98bb7dd84ffbb1e2c8f27a49bd0bfe ignored
+[2014-08-31 16:58:31 BST] NetWatcherFallback: Syncing with apollo
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+[2014-08-31 17:28:38 BST] PushRetrier: Syncing with apollo
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 600343d..50a6288 annex/direct/master -> synced/master
+error: duplicate parent 50a6288026156f5956291ad1100bd420fdde564c ignored
+[2014-08-31 17:58:38 BST] NetWatcherFallback: Syncing with apollo
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+[2014-08-31 18:28:40 BST] PushRetrier: Syncing with apollo
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 50a6288..5b1813a annex/direct/master -> synced/master
+error: duplicate parent 5b1813a8dbbd7ea4b17e230e927419f1d3230534 ignored
+[2014-08-31 18:56:40 BST] SanityCheckerDaily: Running daily sanity check to make sure everything is ok.
+unused . (checking for unused data...) (checking HEAD...) (checking master...) (checking apollo/master...) (checking apollo/synced/master...)
+ Some annexed data is no longer used by any files:
+ NUMBER KEY
+ 1 SHA256E-s1103321--51418dc7fc654ebbeb9173bff598b4031d07d3c5cf651bd18a18ca6af9f7f1f7.jpg
+ 2 SHA256E-s3754--39631a60a771a00e88ef5ab011ab3f56fa8e539619b06aa68e66f2c71f252f9f.png
+ 3 SHA256E-s628641--2eeef2179787270c6307e1070678b6b27cbf0fe12cce71c136e0a89e1df78565.jpg
+ 4 SHA256E-s848--66e696444c6e570fc00d79f6651018d7e6549585e587394b933dcb0d74d8c214.js
+ 5 SHA256E-s21214--f26fa07b51fe0f4c5bc0d746f8b23e50115116bbcd80db057740bccb9841e4b6.png
+ 6 SHA256E-s852198--9fcc545c030c268d660381fd33d66b06605f7c5df16dca0b3fbe4eddfbf6b339.jpg
+ 7 SHA256E-s1334033--d6e722f76229c10ea6a1ff8dce2814ee42c92b643a19ec3f4d72222e1891c210.jpg
+ 8 SHA256E-s664656--85aaeced38501abfec6d23591edb07d7ab98bbe303b98eb07cfa0577ec8309b2.jpg
+ 9 SHA256E-s3213396--90e4ec9054de04c2b2c60a49b812582ba15c8da00208c9fc74acbc69b83182dc.JPG
+ 10 SHA256E-s820026--c1fc64d12cc74f60f8d17302a95217978782ea99758bce99ea2233709be60a6d.jpg
+ 11 SHA256E-s622679--5e8412b3955db206c6836fbd5731b0ab835aa325fc75bc7d75d4511ddbf67644.jpg
+ 12 SHA256E-s917793--7f2ecba64196449b9d7f1ea79e07f496d90d59c59d12472d058566a0881a5c6c.jpg
+ 13 SHA256E-s3493204--7ce9ad40b32b5cd1237e5efbb8f6885f7d734f8af65da8d0e92dc2de13162e07.JPG
+ 14 SHA256E-s910114--be8d66d9261108572efe0266ae386fefa653cea4ef43be9fbd10f7e2fe8d1c4c.jpg
+ 15 SHA256E-s636389--07b609b0cbf827a45cff2ca92367f3c5bf9a9527d4b3cb43961487bca8068ffd.jpg
+ 16 SHA256E-s823401--4cf12d87a9034d34a3019b5002000c92512f901a82f1081705c12e73b5870bad.jpg
+ 17 SHA256E-s1880--add7e1d7d7d98ff96afaec27bb066d6747551358e025176265a31b2b0f74bec0.log
+ 18 SHA256E-s8784--e28377207d41b4fef538b2fcbbd25c05275103a299e74966a88dce53ad5f50c0
+ 19 SHA256E-s8694--490b9f2f9c4c826b68bad68a50cf672ec36c58acb9e24fd46e84abaddec19b9b
+ 20 SHA256E-s2656--96dd5f3d5f8e87ce1552798dd5fe4c8dedab6268c0df9e391a202ffdc4b8fa71.log
+ 21 SHA256E-s459593--b68a62596f7524b6f877d8bd3dbbe49f4de02310e9dd6d5134bbdabfcd5d957a.jpg
+ 22 SHA256E-s11931--5ce30bd4424d544ed954e4722d7ed590a5be46a267c5045953e034309d942a8f.odp
+ 23 SHA256E-s1249581--d834f2dc34ded72086e26c32784e693597be011f28398635286394c7e8b5ded7.jpg
+ 24 SHA256E-s335736--9638a3225f1adbdb736a2cacc476f8eb5201c8124b83dab887a26c6d3a0e5899.jpg
+ 25 SHA256E-s6339776--f42083be1dba62acf81ad5ee8bccad47f267e2ce34c9e73e9aaafe3c69b462bd.pdf
+ 26 SHA256E-s582899--858ad02a9e5f58a6f5ea509865831acd540c290837beb87b37cb36bb62a7b982.jpg
+ 27 SHA256E-s2475657--d3fa5e460a2b164e849213d0417790704d1b4a2df9af5f6b281ac17dbacad30b.jpg
+ 28 SHA256E-s637475--68315445dd9477f07a695cb9fd12bb2c95f3117d949665ec2690184ded6b1ee6.jpg
+ 29 SHA256E-s77771--484ed3d8cc44de2db74c5680659c5c23ccb29ed5e99d0fb4b470a2c130c64c79.pdf
+ 30 SHA256E-s2343639--a7fccfe9a2c8de20ce8df10048b075758c445e5f4c9d9b78368db179e74e9a47.jpg
+ 31 SHA256E-s2282836--66e945f3a37651e1c88c58ff42b4dba9c6c5d822dc59f3e59895c336a0428c3d.jpg
+ 32 SHA256E-s5902--da66d622f9ed0987a0466c2c05c2aea56572e2f991c542b1120d564fb7459e7b.log
+ 33 SHA256E-s61410--4d3f0160bc92d0095a824baa17a08499dc748d06648029051802d24a772ba75d.css
+ 34 SHA256E-s1958077--1717f3036e7ca6b61fe8eeb3ce319de728b9bea10fd814108b9e13397a336db5.jpg
+ 35 SHA256E-s80930--f9b79963053221a10e32c4061b9da3622e89ce56aeed26c58f23bb70a2a57496.jpg
+ 36 SHA256E-s4956--a05854e0d26affdbb3e171c8e9ca3f663c8bc930f6402d9a370104e239bc2601.log
+ 37 SHA256E-s202851--3689503ce6f780d04e659fc85e4e7978c3c445afbd103f3ac118e1c6f3a4b738.jpg
+ 38 SHA256E-s5258--a243d289f629eb2e321c7232aa59c65d10ec79e70d07f25758ac04c0b9ff3f79.log
+ 39 SHA256E-s5406--dc07212d5aaaf5a320b3f9d710a72b68f7112140c76b43b7c0b4bb71f91e823f.log
+ 40 SHA256E-s8427--439c4f2144c9ea726b739494565b05dc47b59a8835e24e9a083171efc0834fc1
+ 41 SHA256E-s46--ca4a766fadecf16bbc25afbd805e2befbfb4cb270f122b0de813fbcfc933c1a2
+ 42 SHA256E-s839129--921ddf15c906a0353cb18bdd0b321bd5a37dfe653edbffc8e3b6b47996d54d8f.jpg
+ 43 SHA256E-s2922183--3aa5d5b22a980a11cee928ba701ffd389542db84fe96219442de1b33a64f840c.JPG
+ 44 SHA256E-s1305363--0b14938c28492e288d35a62334d6436ba8edfb7f65a066dbd9587478f157ab99.jpg
+ 45 SHA256E-s8602--819b18ca30f477f66e558ba1488a06e438a5f0b9c8f6987f68daad039d8020ca.png
+ 46 SHA256E-s6205--14691e198b05dd68b5fe3ed39eb8739182f4f5e75dc43dd7ecb252f01978c7ed.png
+ 47 SHA256E-s5070994--d0c5367647750b1f0b54c9fea7c7c9e1a0f7a0a7f61c92a688887538df3abf7f.m4v
+ 48 SHA256E-s134807--7100078e84c39a2123c0ea7d713e3361c7174f21fb72d39dac2a99a4844f89b7.jpg
+ 49 SHA256E-s535905--f317f11e4e0536ea8172e7827369bd9a3c887fcef2586b8eeda28b2dd36a791c.jpg
+ 50 SHA256E-s6420--72622a4453f4ea48acc0337bb1b288e0fb034d1ee1aa74f98eb9062066c025b5
+ 51 SHA256E-s51483--c9fba5eb0b29216afd9b6f13dd2f351367b7bcd0c8eb93fa0a1b6a0ce4535d57.sla
+ 52 SHA256E-s1957447--c3eddff4df50e1b0c5dc93f85e39acd24723013dd9b27b7b8a407eb5e55f1903.jpg
+ 53 SHA256E-s5345--ee879c6bc3c3ac59f449a9d9f92ec9cc2d15dced1f166805a179b6874d190c25.png
+ 54 SHA256E-s153751--c3fd0000f94ff9c44fef856ee440837fa4c228918ae70d0813d1635d50e6d4a0.odt
+ 55 SHA256E-s682324--33a6a1b34570f9abe0516d9abceefe14aae4cdacc41dc3f30ca92222d545631f.jpg
+ 56 SHA256E-s370109--a00b1c78753de6ae1d64a01d457b53a3572a9324a0facda4ec39a149d9adb37b.jpg
+ 57 SHA256E-s310217--aa0c575a44cac4957e06cd8ed0b058a16454a7be7f32ec8e79c815be6057bfbd.jpg
+ 58 SHA256E-s5798--61852a3ad168d4f27fe0f0e924e7418e838ae4363d85a64ebea80c9154e0c9a0.gif
+ 59 SHA256E-s47071--f1a74e5f9a20776adbe88ac3092e5a20a69d254905c0f93aa0b95a1ad0a5ed00.sla
+ 60 SHA256E-s988--b1f5fb3d38001b8bcf214158c6c7571f5aadb03093d2c307970a728edcb8012b
+ 61 SHA256E-s1397011--b67c04c6c99ccc208734dd39e18d4304a4963ef36600d4adc5827df21bfcc260.jpg
+ 62 SHA256E-s2124--1c64d2a60a40242432550ab3292e1ee38072481c36b8f028f75e3b4ea52fec29.log
+ 63 SHA256E-s1640512--ccb4940713e190a9242b34e18896156733f36df909c7e399bfdfe36299bfa748.jpg
+ 64 SHA256E-s484856--55f146177198dcd03069703c7b8bdf5c10cd7750aaf4b6f9af1946d72a9f9d23.jpg
+ 65 SHA256E-s7031--88bedea3e75aff77858c63a6c30bb06180bd9167fd380d94f132486d6ffeddf4
+ 66 SHA256E-s10100--1df9143f4c02f877ec891262bcbc407a9d4b960dd80c6826d5c1078012dc2614.js
+ 67 SHA256E-s2454--778574fe7cae3bfc2a49cbe3be18ed313b049b6e0bc333cea80723ae2136f9c3.log
+ 68 SHA256E-s63103--474c29d016927bd7dc42d992fc07c353148d393cfbd7c3e8193df91c3bb2d805.jpg
+ 69 SHA256E-s245481--ba0e9ed8876970e0aad7e22aeaf4f7403e1ef6fca474e0b4e90837381c0b810f.js
+ 70 SHA256E-s708--ab8f3c450c5c8944d6d91c35258b9da5ff4564b9b05b1e09ebbaa9b740d14aa4.log
+ 71 SHA256E-s582241--fb565e6fa923f3265a9406abf566d5de7a8e062b1d9ccb8ba7ec61a902ea277e.jpg
+ 72 SHA256E-s601517--fd4a4effd6c6b064be34910b36f1de8011bb3949d0f883a57ed4ca60eff6a642.jpg
+ 73 SHA256E-s613354--0d78d51b5047055d9bd2727e01a7c73ec25bcb99925be26550f3b921054e336b.jpg
+ 74 SHA256E-s20794--0ba2f6756001669bdf934f9d79e8fd1ccf2028130c33a0510279581ec9dfd73a.js
+ 75 SHA256E-s654750--be05edd69e61fb5ebecbddc8c39ae9ebdbca5e94ee395f604bbd73910a7e40f9.jpg
+ 76 SHA256E-s440--4e8500857e2b6a08a6922ca852ff4c9702e2397843011a14dee43d6e20c4f787.log
+ 77 SHA256E-s72381--a170eff1ba771b3e4e769ab2974b8fb1f66cff07bf8b19561a97f9d7767b565a.jpg
+ 78 SHA256E-s344661--21564a2da0f6b1ea6c4a39f4a96ba02680facb9d8a084d4fffa28b0e527c9fc8.jpg
+ 79 SHA256E-s51248--f940d364ad2583a9ae3c0f777fd61406914daa1837ed8dd78f3461760c4ca747.sla
+ 80 SHA256E-s502234--251053730579880833dc12058a6c689ba074f0a981331ec7eb685b69f08e292c.pdf
+ 81 SHA256E-s3682--f75a95ae16e2f8a8e0a607782cf332dc34c1e317d473023cbd7f9915fa400d62
+ 82 SHA256E-s3544--9b40beb44b624520a74057a82ae5e6adb18601e6c1fc7d8496bdd59e3b248945
+ 83 SHA256E-s355156--7056bee290696e681cd3538e2ff2e740842bce032effe509f0919e888cc03ee4.jpg
+ 84 SHA256E-s879539--12cc34616b2dda153890db0a724290fa01bd9dd664061a05c8d2c1039cd4cc3c.odg
+ 85 SHA256E-s2051310--69387e84897ed700b6dd7c418fc3a7884a1e6e16a4267297b3effb95b02a7bc7.jpg
+ 86 SHA256E-s620--eb69406700a3a6122cb532614f4ae6899d97409d76259820176f7ae77158684b.png
+ 87 SHA256E-s693427--e20c50c86937800b14e2773d79eb63d13c0300781f8e71ee3947fb5a2fe98fe5.jpg
+ 88 SHA256E-s87985--b89b279ca5dede3643e8a48402e9b112b1e1fdc14b3326c98cbdb32f9f7fa2cc.jpg
+ 89 SHA256E-s35739--378d1bcb19c2742b8d344459a74f9b4ea44287c4e5cf046b80a46b209ea1ebbb.sla
+ 90 SHA256E-s51515--d4805b60c6e0ea396dc157ca0e399ba355482f2a9696f31fdcf819aa176ea3e7.sla
+ 91 SHA256E-s396738--5e18be640581ced943a676323c80dc283b15d3caf37b2bc2d0b05ceee1d178e5.jpg
+ 92 SHA256E-s334295--7f97df9f93e42a2db9e9efb0aa34a2a9a6b9af49846e6a73f320ee151d535eed.jpg
+ 93 SHA256E-s425513--0f6228a7466c12d1d0e4beda9825f17442b15286a5639e3a894a36d33497c77a.jpg
+ 94 SHA256E-s114076--6a1822942964efa5531de2cae48d3fd69e71baca7ade38b7cbe23964637d4478.jpg
+ 95 SHA256E-s118034--a8b1e6f81534106e9f4563dfe3f288e9425284fbaa74247065cf80448cdb216f.jpg
+ 96 SHA256E-s639--4b491df2b47c2fd4dcfbb99b50ec1367e138c61216704490ada08cddd0d32fda.css
+ 97 SHA256E-s734079--0602d1c85bca8508010ed03c2b1c26c88a8c759783f49d7f7b282b30837c6b32.jpg
+ 98 SHA256E-s130889--751d2fa73ac74e17d2e82fc9a89b3d393028197790657aa075effc7c16b8f528.js
+ 99 SHA256E-s485283--63716cdb8953a9318eb28953af25db2afa02251e6f152d487f5ab05f1d27930e.jpg
+ 100 SHA256E-s59518--6a80f10665ad39dc27ee3a5727ebeee321a289dbc958916f9e6eda01f2703d25.jpg
+ 101 SHA256E-s194--4c0fc707f629bcb314433fc700c6090c970d343adbb921f46084bdb08f99cf6e
+ 102 SHA256E-s303--07ae4fec1962f2f83808ec861e477d5669dd71ff1089cb25a0e1da7b3ec9a5a6.css
+ 103 SHA256E-s24519--3f3cba473c1818b2ce46a034fc323d528df85dd88d3f2ed411ad644a08ff9132
+ 104 SHA256E-s316292--691e653f57643e579c261a827441e63ee3d8cf1f9ed5cdc43d861cf340510d34.pdf
+ 105 SHA256E-s11916--88e5b1e2f5bd0f5c458abb41589028ef35dc75872abd7e04eee4a12ae7bfef38
+ 106 SHA256E-s733240--fe7b7c77712b866c932d391f8305560d488d0e5515f3d9c890ddd11c96ff6069.odt
+ 107 SHA256E-s4323950--c71e34a9fa2d1f54934d3caf829e4b5330811c2937d523f856d43cf5d92b7275.m4v
+ 108 SHA256E-s475740--e2d4880b8561167dd91b57a666f3eba68931ae3546231d102469c76d341f560a.jpg
+ 109 SHA256E-s574--5d1bd8763457376e0ff677895456f9aad26b6d85e15648696e9f4c77af104fee.png
+ 110 SHA256E-s11608--f815f1bad38a05f27b1f7cd416236148fa79554ed2546a014afe148c0e427839.log
+ 111 SHA256E-s3300--7164c4d91218528eedb0310af14927d4ce483889b53da24fdcc01fadae107fbd
+ 112 SHA256E-s962958--9a81dba98b0b910641d035bf662b847fb4785ef2378bef7b2ae6713b1fbd903c.jpg
+ 113 SHA256E-s845627--09f3e811c372a7ee936064d4c48c8b4f36db519a49a0b274f69e3da12a0e2ffe.jpg
+ 114 SHA256E-s2380622--05725288b66460ff1befda38280dea4d05c5dff42818de7d64e619e12aebeaa0.jpg
+ 115 SHA256E-s62795--a32762ee80e176ca1d7869cd5f68e7442327e1a861ed70290f2256179ebd844c.js
+ 116 SHA256E-s3486--f148d21e252ab05ff7039fa276ee309e6d16d2ba7444043acc148b9986164162.log
+ 117 SHA256E-s2393747--1ba6fc7f4d47ced145ceab80128e3ceaf8cfe8f2155b5e33e9273c736a81b910.jpg
+ 118 SHA256E-s4611--bbc334899e27d8fe781f61e06be1c28852e618d1e2bd8b98de0aed7fb6106ad8.js
+ 119 SHA256E-s826134--426211e056784356538d3ac80838e197e2cdf29742cd31db6a386ce7c05aa052.jpg
+ 120 SHA256E-s1072403--87da8298b8c3c76bdfb8c96ac7dcb11349763067056eb0e1fadf5241fc134141.jpg
+ 121 SHA256E-s51028--d6d044282ee1d1d8fc02130ac42ab1d7ee3a6a7e2987b78bb1062529019cf3e5.sla
+ 122 SHA256E-s45783--35b9963b4a8bc3dbee5bbe827c2e18c795b8fce86bb1eb87c6b3b09327380f1f.js
+ 123 SHA256E-s999195--c0fa3d678c9ebe118ea3fb1b664a2f63ccc792a7578fe921d0c299adf40d97f3.jpg
+ 124 SHA256E-s96828--c5ebf871d1c98e5f49d15dc22131e483b514754ad86c6293c69b6d5aa3d44cf9.jpg
+ 125 SHA256E-s159835--47a9ba3de62d6a4b11dd59a60b0047d3d377c224ceac85bfb6a81a972f25fff9.css
+ 126 SHA256E-s9629--588e723593992acb553dd4f2c76a6993135b4f49e674358fae63ff06e145f07a
+ 127 SHA256E-s39867--6e96f4658811bba2f27f930f764111501e438135d793e28fe7eacb6b10866e0d.js
+ 128 SHA256E-s62332730--a2c804ddc66d8175fb5e187d17c904954f1e2cae634c4604ac363eb97d78f7e1.odt
+ 129 SHA256E-s1711933--dd49df68da23021d3e9cc775e86bd5341dda6ba71714c8287872deb9416e051a.jpg
+ 130 SHA256E-s290639--0803de7a02e9a4a1caca69b2a7b2c948e7faf2e4ef2bf3bcdaec148c0f26b842.pdf
+ 131 SHA256E-s5799--fa90e9a478760bc12c2707962f2ea6b9ab213bc7d4b158f28f6739727ffe05e7.log
+ 132 SHA256E-s11156--17ca703a57e9f02ebd71251ca8bdb6d82b71fa586deb034cd384b21a3818035a
+ 133 SHA256E-s16171--47a7946e6364fa5ad3dc595105c79a4946f18cbef0818e72682d9304625ceab9.odt
+ 134 SHA256E-s1962015--2eae4dfa79e014bf4468141bfac8c0065d1b05f2532758c6e68deedd297f22ee.jpg
+ 135 SHA256E-s31268--560829df213299f5db9aeb0b31b40044300c34e92818680f422d0ddfe7602f2c.axd
+ 136 SHA256E-s145407--c34c44643d9d0f7114cce8b31f3442a7b6392c4687af9ab97995bd30ddd3167c.pdf
+ 137 SHA256E-s1773--8417f863ffa4a076dd2d8b5a63170bb0c5b83cf275d72245a79c31d94358fd20.log
+ 138 SHA256E-s701838--3d7abfd8b091e4da1bb61881155c299b78ed693f128f1c693c7970bcbce4e8e0.jpg
+ 139 SHA256E-s2089502--f4c9ec5dce63924cba6f77efd5e20b17cfc0f3c9ae45dce7bb0ecc5a10986205.jpg
+ 140 SHA256E-s1085890--0346c7a329e7b80c7f93b8aa7de039bf322070ebac33cee6ade6fcc4a4f296be.jpg
+ 141 SHA256E-s3998--e38f3a315b698a0e8ccfa395431393af757f882413cea8b4879b5b5993543f86.js
+ 142 SHA256E-s7372--181699a3ca4be8bb0e9913fd96dc5c44ed8a790ea6ef2bb0fb285e741f2c46ab
+ 143 SHA256E-s864279--364b4a4d0a30ddbf1164d5d3ded0702a4b016ffc27d26eb6005d96e68aa4f77f.jpg
+ 144 SHA256E-s2941--7ca4f001618fda61146802286daf472c5daaaded2471e356a752b6a69834e7f7.log
+ 145 SHA256E-s153049--5805df5cecdaa15a549bf7751b1d66f7455e71e2243709d9799f839e42d082f2.jpg
+ 146 SHA256E-s542959--5823d605d7258bd813d09712fd124fd7c63f2cbdf46a9b52c3eb67eb7bb538bc.jpg
+ 147 SHA256E-s45282--b20a77431de35f8e70867cfe520503528fb948d63f724ed90fc249994875b77a.jpg
+ 148 SHA256E-s19556--e5bdba04d2a9d805c491778a742744d3007d38a23c9dc11cf8f6eab7b2dd0a1d.log
+ 149 SHA256E-s392108--c9c76c131588fc29d588afed12d98b6b3a6aa0a9971ad368112bc0c2a603e70c.pdf
+ 150 SHA256E-s8275--ff63b5b012ea62b178310424d817a8a77fb31151dd697659f85f23a6298cf28d
+ 151 SHA256E-s1769251--7d0a2ec1652f1287884f6bd4e0df14106af271e81fc38cae5aac1357966ea672.pdf
+ 152 SHA256E-s464748--aa63c72a4b064f91083228395e1391d970873ad1370900a468db154ed266d475.jpg
+ 153 SHA256E-s6130263--3521b18281dba779713e600fde1a4d15568328baad6baf43cba1530df7165c5d.JPG
+ 154 SHA256E-s494260--aeb91b314f3dee3580093e9610dacd5917265794b49acea9d80dfca83d56b88d.odt
+ 155 SHA256E-s3362329--05fde815df42455fdc1b563ce41bf13d585135da628d01c5ffc9ca627c008225.jpg
+ 156 SHA256E-s489239--d2ab01a94808613489205b7aa5d666cccfeac0a28b5a76ab18fc9fd9435dcabc.jpg
+ 157 SHA256E-s482249--e4979b950d4633515316102d934115b1981c8adf5a14ea80bfda87e623af7989.jpg
+ 158 SHA256E-s93506--3f44779fc3ce611f607c9cde2c114f6f038775485a677e17bcb6bb034e6ac888.jpg
+ 159 SHA256E-s818--66d21ef5da07cc00768b23bb711ccc8e18b91c99ccad2084ec309f51e6c52db6.log
+ 160 SHA256E-s171892--33f34e7d16851c2291d7495754505d391be4668883b43e4b9e587126c693b1d2.png
+ 161 SHA256E-s278132--fca8b8bbcc0f9fe8addb57994c69a9c511b206c27424491809ab31aef86f21b4.jpg
+ 162 SHA256E-s2418631--deb0aadf97aa49010ac3cab5f5299e2d68eeb5ecb4dd5de93316f23a714734f6.jpg
+ 163 SHA256E-s125121--2b2cc905b8c05d4c7253a9c2b45a961df545842e4ce9d17e5248aa6240e77557.pdf
+ 164 SHA256E-s199793--615ac75e6766d637d17159ebe3d48eedf27096e93b83efc159431da4d032e21b.axd
+ 165 SHA256E-s223221--ca5f5160688546f422cf7d041e58f07d5d90e8359666e523a5af515baf0b2980.jpg
+ 166 SHA256E-s1959724--2e44ed4b10ab3c1655b16335b901547713ac8d5c38d4ed3735bcbabb272242b5.jpg
+ 167 SHA256E-s11609--df8dcf81585eccae95b7c4f0a0ba8c6fc4cfe90ebbf9657bd6a10320f7195e61
+ 168 SHA256E-s483419--96cfd3b43e5b7bb1d6a5bc3f78d33e873fa36ee6e53c9f1de083f279c19c5f70.jpg
+ 169 SHA256E-s560766--96f47b698f6502bc758e6d8b9b538368f8085d040306388bfd42d3026c465ff5.jpg
+ 170 SHA256E-s3848--4d18299f8d8ef1bfbd7b206d419ef6f65cbd09a3ae999f3c7cc8496051b34080
+ 171 SHA256E-s1141493--80b7a82ee4edc420c538c4a2a37fc9d80cce4c321f5a9a7fa7e66df0c9e3693c.jpg
+ 172 SHA256E-s9726--14b5e76da3417f5f25f48c2a793aa50da9c920451495af7612b76d3c052d3f13.odt
+ 173 SHA256E-s939529--43d05562e75f2477aa6d412d8a672ce7b6cf2890d4e1578bf88692aabfd0e70d.jpg
+ 174 SHA256E-s888147--948ca59b827f77f75ea981b149a72df976aea360cd263d0f7c03275375a47232.jpg
+ 175 SHA256E-s740710--f1e98c032815161aff44c8ccbb882af5cb234f91c4430cf91d01115649bc9aa5.jpg
+ 176 SHA256E-s961257--e6b21901e268f6d0f3a38b43e5a06d8ad9ec0901f4c9639954da7ecf2ee4a666.jpg
+ 177 SHA256E-s616645--bd10a26926e6cd0fd0ee6cf72692c92134b183927280a00a74e869bbeae8bde6.jpg
+ 178 SHA256E-s47996--f862cbc7bea6fe4b5fe3a3af2b393973220a34975dd36a9d5f92b30d1db80acc.sla
+ 179 SHA256E-s2396909--2e6d435cf96f81a3f3247f2d35b01701f8a46977e813745324ca5b40717fdea9.jpg
+ 180 SHA256E-s180605--66c6df69bba4602100148ffd0f0a0ba0a14b74eaefb3b27708c6792d2b5cd09c.jpg
+ 181 SHA256E-s721289--159f9398adde99e23b05c8c8c99aadd98b6a3a80afe5e3745ff37b0668fe4a24.jpg
+ 182 SHA256E-s95559--0d932a11d465d523f85b17803d44fb0748459771b2cd843dbcfd677248abb0f5.jpg
+ 183 SHA256E-s368166--98be96450123c166cf11f1763aa25040ffb1674f7267a4041cc1a4fbe8e433a1.jpg
+ 184 SHA256E-s846--b3c9f5697bee76715237040d6ba5ff9f657dee2d882e36d818ed2ff50e8e0835.log
+ 185 SHA256E-s581051--217882c3f655c62dd323afe0689c9485d0d09430d5356a63105632cce08ea88e.jpg
+ 186 SHA256E-s586436--006bfd4f9697d8b64be920876bd8c0a40967b253806072ec09d2a630909826e4.jpg
+ 187 SHA256E-s398620--1ab7d488bafe19941f33155959c1bbec199a86ef2334c08b75b450bc9f36a16b.jpg
+ 188 SHA256E-s10457--0be429c323998556486e8f9977ccc980be3ba3920d5cc3bf16a6c7bb57b0fe3c
+ 189 SHA256E-s83789--c286b21f977391efd38b5a5a341f9dbec4da611a16bc1d17d8ca71d49ad64d30.jpg
+ 190 SHA256E-s321943--5e3983f4b43ae782b6f41c4f899027f1d55f78347e2106bc4c96e7f65c652918.jpg
+ 191 SHA256E-s7518--be582d1ce8295d8c47e261eb7bd78a0e720e78dd58805808e9bf64ddfc3c4fe4
+ 192 SHA256E-s6118--3ca5d8ca6cda3acc6c07c604f6880c017e6faa7dad4ba61e9aa956a9fa8b4b0d
+ 193 SHA256E-s1086965--e170514a3651dda3313f4dcfdb9490f039a825b8349f74957a17313bdbcd7e8d.jpg
+ 194 SHA256E-s10504--a57d3172d4a009a1a0d38993ea6dbe03fab6aa1ec429aa4aab563465b0dc43bd.js
+ 195 SHA256E-s530445--7c8e603a03e17bb0c6440df6b695e557357527bc081871b51d0b5a61222dd674.jpg
+ 196 SHA256E-s37480--ba3a0b04e4325bf0853c6201ecf7bb0fc08a0a13f5fdf0a4477c6a1f0cc82559.js
+ 197 SHA256E-s394333--77f7debb969fd22698b60339ed0a0e98d9c43b8c74203528a02f6a185784e808.jpg
+ 198 SHA256E-s568976--43c009e20c1b4b28d651c64ac1faa9ebd5e704bb975e2fb65ece83f4cb8867d2.jpg
+ 199 SHA256E-s13813--4b4db06a82938c002539bc21d9285d63387e1a6241932c111c4f3992fa093092.axd
+ 200 SHA256E-s2735--f73ac06c4be021a97a8c40f5371f0e62fd7094d863d9679407784c09c13ddd5b.log
+ 201 SHA256E-s25176948--4493a4fd3160627db1fdd24c2a6bd402b544c495565815007c2d0d5093478d2a.odt
+ 202 SHA256E-s596273--de2ec9fe99774ea6ce0a746a66888b71cfd744d3d97084439d054e58adebe709.jpg
+ 203 SHA256E-s947995--956f7ec6d1c0c931c40e055fe21c2cfde8ef135f816052147406cb0c3ed0f948.jpg
+ 204 SHA256E-s5283--5fbb8a58b8bf48ea0511c26b1b319f737df54e8e35f13b5d851dc7c0ce662458.png
+ 205 SHA256E-s777575--c9fea606bc2e419967c550c43b5345bf7b08b43a81d0cdc561e048b94d536e10.jpg
+ 206 SHA256E-s51496--36143df60284eae68573cb266a34a25f3c042bfd8314bdf0730c03a4fb81bb38.sla
+ 207 SHA256E-s3013379--4f47c51193c043d2e81aa0bf46927a5f5c305625a09ac9034f9cb6e25ea2c6bc.jpg
+ 208 SHA256E-s592379--4cea82764a163f6da9c6e63f553f82f119d5188d187c0747ee467a337f81446e.jpg
+ 209 SHA256E-s8402--5b400d459743a01405d2d1ffc4d07651c36712caf9030e2a091e48f97c58a2bb.png
+ 210 SHA256E-s662301--f0cf51849e330e861513bee59063450d14759055c67986e8a31dbbde0907a254.jpg
+ 211 SHA256E-s1371822--0c85f348595f845e0076e52157fbb772a9d72a4821310c187b183370d7bb1b4c.jpg
+ 212 SHA256E-s13445--460f9e3ea4f8a260af278d81c59faa45f16b2069b10030a8a253cd852f2e8e34.log
+ 213 SHA256E-s19780--3f513b835cc3299a15178dae45cc523f1b06a1c13bd0e1c29f958027d3f5dc8a.axd
+ 214 SHA256E-s311438--00b3cbd6de31a75e3a017c452099991f1ec09327efe9c6450012f6015eb6e1a4.jpg
+ 215 SHA256E-s8942--e267fde4da4719de2c454d82f907796167f425510ea84098a39b425b69d2df5e
+ 216 SHA256E-s845884--58974bcab0e36d65d606c1acf57e34e2e6f89872fbab65b9abf5250c632967a5.jpg
+ 217 SHA256E-s331598--de52b228ad93c774d4dd1d41556ff27f7f03802378747807f324a9604e32ed66.jpg
+ 218 SHA256E-s201837--d3f750f64687f347f0254d3c602a010ef71636a85f37954690d20bb6548437b1.jpg
+ 219 SHA256E-s537652--aeaa479c57d39b3618006162c80e1c0eaa2cfa0b2a9a2c069a3d601bfe5b0706.jpg
+ 220 SHA256E-s1174974--1d506c737c2dbde4aa286a2a25b22412c83edc5e55c3cc94fa38fb224677cf01.jpg
+ 221 SHA256E-s7068886--945cfae8e22db1c96ec4cfa7b7de021c6bfe4d9e4961eeb2860716d6c8a57354.m4v
+ 222 SHA256E-s684839--02293539aa97de6ab57e9caaec6998f4e64a08967d9f5f2c44581fb1df0acdd0.jpg
+ 223 SHA256E-s371333--36110b44ea216b0166b023d09b52d0d32c3bdd01dafa857ed62e7c806be93193.jpg
+ 224 SHA256E-s195249--21a08a5510bc88e85db2b5da660c61320ccd101a4b86cf3558618bbf37d659f0.jpg
+ 225 SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.xcf
+ 226 SHA256E-s26368--302de7e36ca407cf1441ab2d3fa855192c9d8b2e6a7ec04638d19db7056b7f2a.png
+ 227 SHA256E-s965404--fd61bc28b2adfd4d2f175e02c662b7a71dc4b09880c8198795994e70f156c46d.jpg
+ 228 SHA256E-s7254--2fcb58c8f60caadcb3e2d9e38921a49e470a9d854a55c89cb9c80f6ed0334669.csv
+ 229 SHA256E-s482912--24330dbfb1d90882bf3f42e96c236f818913c343fd828992cd03ca84a3b9b2f5.jpg
+ 230 SHA256E-s641334--bb06cea748a2feefa1a608635b83ed4311da1990275e32a9fd4549048c91a453.jpg
+ 231 SHA256E-s1239159--2d15a6bf658d588697c5b3c2b1d1382450a40517779c32d435ff672e45539a5c.jpg
+ 232 SHA256E-s2125768--a04f47c1fa5136fa397897bc907b6754a9598b37d34920250b8f70a87aaaa0b8.jpg
+ 233 SHA256E-s3968--f4147a07111527be5bc7e9a5c83e3fd7ed871937167fc6d20fb7ee4d7059aa69.js
+ 234 SHA256E-s462918--aa97a7f50f004dffdf444bb7f69e09c650c8987f52b5f4a0164c6acdeb4a8b28.jpg
+ 235 SHA256E-s29501--67fa8330853830c4b29e05f96e6e3b6369ab908238e425e8faff4ac57e12bdb0.log
+ 236 SHA256E-s158417--4058a56c1350032d640519f3aeb94ba27cd8e8b5afceb6d65e746af4f94777e0.pdf
+ 237 SHA256E-s3437070--12a5bafa210aa79e9abb86c21032003c30c3a1eb5fce45a31488b6ff08db084d.jpg
+ 238 SHA256E-s4373--12f64c274107733ae44f8ea9dc92e3ecf15400d98b3d76f9cc7e11527e4ed81a
+ 239 SHA256E-s51497--218e86c2eb9ded51b764b5296cfff76bae4dca82e07a1602c9c597a1c34e98d7.sla
+ 240 SHA256E-s4372--20e4d3e47c5fd381ffc31e6effbeb29eda97d6def773a3e42596501c6beb6317
+ 241 SHA256E-s317548--cb605575ca9fab16501f2819b000d11bb06fbb2ad1f300cfba3d011e3e8e2ffc.pdf
+ 242 SHA256E-s4960--c10e8c25e9b66e3ef77723373beae89e2fab1010c8b36ca329a3e9da20cbdc7e.log
+ 243 SHA256E-s517805--9c14fd5e5da48efd9951b086c25c04a7c5427111ef2829543497e707f93fce99.jpg
+ 244 SHA256E-s1857451--616661a96876b89472a69d32bd567aeeb95fa7da19ba4c3aa6a0ab237e2dcec3.jpg
+ 245 SHA256E-s2760813--63d375f82234356889c6222a0162bdba3b7f5a1a0cb31e24c2c209f43fc2f37e.jpg
+ 246 SHA256E-s832772--530816bf7c52c72e9b951289b5a35da753c66726d4e7bb2c2267faec6c8c263c.jpg
+ 247 SHA256E-s4660164--2832a896d7af11fc35e1dd7ab527b0fdfeedf7ffe93bcce147381a8739c81298.JPG
+ 248 SHA256E-s688782--71733ec7ffd2077ecf2973a739e4928be5824ad92034f64446a216cf513a1f29.jpg
+ 249 SHA256E-s2876462--92eb9385b333bf9eb8ad56de86e46d1ba9b21c1166814e6f16e50e4a769936fc.odt
+ 250 SHA256E-s496541--80d2e40f680dbd998b487e0ee8d479cb92741ec9c3e1f9d1d1d6d2f21a8cd795.jpg
+ 251 SHA256E-s69339--97fe05a5b2c230c5b1fde5d18555aca13d12a35940d7d8c15249e7e80629aed6.jpg
+ 252 SHA256E-s169446--5e1e9e262a58c5692f0d3c428fb71c0980311a88b474ffee95a5ea8cb5d5bf15.jpg
+ 253 SHA256E-s2678100--a347450551a9055011016920280dd0a63dfc541f4f52f8ee78ef2b7a09afd46a.jpg
+ 254 SHA256E-s87--5c2582459e3550daa4889fae41e3c8f6f4ad26dfa670502e4f516749aeac4113.png
+ 255 SHA256E-s5798--c7167ef62bc21326b00d78b47d672bc25026eb6c7f3919fa47db2e7db8855ba9.gif
+ 256 SHA256E-s53033--80840b2105a7a316a010ec3c3775031bef7fbdabbb7d3f6b7ece1a6253ef1b59.jpg
+ 257 SHA256E-s7407--8ec4462ca6a05614378729bb20bb33c3b892bc943fd698389e44d959c4506843.log
+ 258 SHA256E-s1189946--d23ba452e6e267d93f6233e885bd6f9e15b8ad1aea4c3d2368d901428df78970.jpg
+ 259 SHA256E-s3447000--61a3bd3f7dda48544b67040012d6cd5999499d25e75dc34b82d11955d0fc9b6a.jpg
+ 260 SHA256E-s3263208--69ad68aaad7058af8d14f7e4c03e5b52c9a78dbac7ffd33bd7bc5220c847d6bb.JPG
+ 261 SHA256E-s1226280--d372b699459664c382f607ff56294df49e6d8d0fcab90b509337c347943357cf.jpg
+ 262 SHA256E-s16890--12861c187e68e3591ccd5f708b935cc43bf25f5672daf50913e152c1c55e510c.png
+ 263 SHA256E-s1092669--8e7f7431c487c6cff11ee9f7c8a87aa0d057b518e60bd2b92fd677e5c9a88313.jpg
+ 264 SHA256E-s307511--5fad92167d8f9a7ed4076909a1540388cdae89df956e6011065526bfb10564a4.jpg
+ 265 SHA256E-s8334--212df98aca1ee3d4f10539a786ad746f3856c2715e23d5cb816a2374b5e6c43c.png
+ 266 SHA256E-s3375--2b403c31d4934895cccbe05556b0134bd4b78d4b873193d2b12a8893ab170681.txt
+ 267 SHA256E-s691014--470d607465715a4c0735d74da75a5aafb5f6707b9d10a9a6a8c002f095f447e2.jpg
+ 268 SHA256E-s680701--133c1dc67e394103d9f900cbf80ef508c7d7818edb23406c5f67f027a38093a4.jpg
+ 269 SHA256E-s4024--b5d3e2bb6d51ff8ceb54f501035a5feebe7d5178d35b98abe9e41531bd2abd22
+ 270 SHA256E-s1117--b7c94c25be8e78468071e78481641927450d754fd1bbd8d0d751f116d02b9ab3
+ 271 SHA256E-s476926--ea981873de3e0ca8156ff710429894abbd8a51384b210cc142b074ec9b2c9ba0.jpg
+ 272 SHA256E-s56655--7df6526b49b7aa986070db456b6a3a378c8aaaee8cb7c8892c154eecf401002a.com.htm
+ 273 SHA256E-s2963--4fc53b3029a595b3b7f1f201eb4b7c2df78afc7e083abccd070c8e6fae79a661.txt
+ 274 SHA256E-s761655--486ef18d41898ba80505d7630170305c4b58fa647786bd5447f20045bd6f3b2e.jpg
+ 275 SHA256E-s1389414--3599c1a4da6a3b61cbc4dc431c436af9bf201b634fde2f99ddf54eae8c3590d5.jpg
+ 276 SHA256E-s39678--bea819324e10bc288c75650e2196bebd5339952ce33574625ae5091ad749b63c.jpg
+ 277 SHA256E-s47531--a91ecea2694b4b5c8daab84aa25c675f2f73dbfaa8ccfd581d6868b1e2568b7a.jpg
+ 278 SHA256E-s4923--2f1b9afef156e9c7f4994106eda088868a992d92e66a5d601f77980fea80f777
+ 279 SHA256E-s84101--bca6a8a9640b1ebfa8a2ba01b3a0f7ed20ad77fa5cbb5588d46ce75949fc38db.jpg
+ 280 SHA256E-s1245742--d547d4a18279ec671be7869896c0b3e763cf8499c4dc28a62a49cd657fdf4200.jpg
+ 281 SHA256E-s655461--f9b43d2794fe757d7cb61a704a01c85bc09eb20d70a1550d6934dec12f46f0bf.jpg
+ 282 SHA256E-s137484--51fbe9bc815e41dfe22b9f9d4ed8f3ca98a8cb5cc7b81522b296d45b0279a413.jpg
+ 283 SHA256E-s607392--ead4548b66ac3ab5c930cd89bd60de480184a4f23ffce9b5da24f9269b796283.jpg
+ 284 SHA256E-s6888--405748982bbb3340eea34acbe45085ea62c80767866f0c76c355e4f94b969c7c.png
+ 285 SHA256E-s4327767--eef5840e2f4294a125aaa3ed33f8ccc96c5c2c3e31cbee356013de354e628df9.pdf
+ 286 SHA256E-s411064--4e5e5d477ccc542f78649e4b4ee6aa132bf79ae9aeb64a46cb45a7ee133eb2f7.pdf
+ 287 SHA256E-s224149--204dbb62c5d5352c9b5baead124ecf52c6fffd49120343cc21bb10343353934e.jpg
+ 288 SHA256E-s1333719--9d9ac54db47723755ee0d19731c0b2f4b40074d946da4a1e283a4904feea4534.jpg
+ 289 SHA256E-s1889687--07b79ce21bf5ffe2d80f9878d338fcd63ddc92c5381eb3c290639c3e73a7b927.jpg
+ 290 SHA256E-s686131--93ba1a21ff8cc7d9baa61a2af8407ccc8c1b22705a191e9f0a393d14ec95e232.jpg
+ 291 SHA256E-s619954--3d900d39d16eca00287a0c4bbe20b46767867b5065260a4a1fa8444081998e25.jpg
+ 292 SHA256E-s828309--f1d702dcb350cff7a3229fe62c4f0f4beb5f95ad2f00a6fd1bfb82549cd08129.jpg
+ 293 SHA256E-s516404--0ca06e98fd119847c99bee56264a31ac99b36ae71136624018d308ff8c6a2e3d.jpg
+ 294 SHA256E-s783842--0618e7c3ebc7ff8fcdff82b9fd227e8b83f491e8e1b96c2d0e566fc7fbea27ea.jpg
+ 295 SHA256E-s20748--df0711c99c30b5fdcbfdd109c093f02f6a7f5196e7ffbc8e291bb2780c5735c0.css
+ 296 SHA256E-s61739--387a27967c79b09e21d93f8a8b969dda930e8d26e9ce379c1d71718d4cc5a1df.jpg
+ 297 SHA256E-s1461106--37222c3cd7a3af846c8aaed3a174a0a7e6f775ea4c08c4e2f792c6da724812b9.jpg
+ (To see where data was previously used, try: git log --stat -S'KEY')
+
+ To remove unwanted data: git-annex dropunused NUMBER
+
+ok
+[2014-08-31 18:58:39 BST] NetWatcherFallback: Syncing with apollo
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: cannot open shared object file: No such file or directory
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: cannot open shared object file: No such file or directory
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: cannot open shared object file: No such file or directory
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: cannot open shared object file: No such file or directory
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+gpg: Signature made Mon 18 Aug 2014 20:14:04 BST using DSA key ID 89C809CB
+gpg: /tmp/git-annex-gpg.tmp.0/trustdb.gpg: trustdb created
+gpg: Good signature from "git-annex distribution signing key (for Joey Hess) <id@joeyh.name>"
+gpg: WARNING: This key is not certified with a trusted signature!
+gpg: There is no indication that the signature belongs to the owner.
+Primary key fingerprint: 4005 5C6A FD2D 526B 2961 E78F 5EE1 DBA7 89C8 09CB
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+[2014-08-31 19:28:42 BST] PushRetrier: Syncing with apollo
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 5b1813a..68b2827 annex/direct/master -> synced/master
+error: duplicate parent 68b28274ba1f0451a2e93ef4c2757ab795b920e6 ignored
+[2014-08-31 19:58:41 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 71238f0..68b2827 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 68b2827..16f040e annex/direct/master -> synced/master
+error: duplicate parent 16f040e9cd0bd085dd42e8869cc99d6982f8ea9c ignored
+[2014-08-31 20:58:43 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 68b2827..16f040e master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 16f040e..e8ecdba annex/direct/master -> synced/master
+error: duplicate parent e8ecdbace26ba300e7bf3f4b8237f8cf4d825955 ignored
+[2014-08-31 21:58:46 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 16f040e..e8ecdba master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ e8ecdba..82f1c3d annex/direct/master -> synced/master
+error: duplicate parent 82f1c3da446ea356933e764e4ab0f6533d8688f7 ignored
+[2014-08-31 22:58:47 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ e8ecdba..82f1c3d master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 82f1c3d..1d82f6d annex/direct/master -> synced/master
+error: duplicate parent 1d82f6dc915ff33c86f9001c50b7c60f212b80a4 ignored
+[2014-08-31 23:58:50 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 82f1c3d..1d82f6d master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 1d82f6d..e6f51b1 annex/direct/master -> synced/master
+error: duplicate parent e6f51b190fc3412b8c10988c2dd9f281014802f0 ignored
+[2014-08-31 23:59:59 BST] Cronner: Consistency check in progress
+[2014-08-31 23:59:59 BST] Cronner: Consistency check in progress
+[2014-08-31 23:59:59 BST] Cronner: Consistency check in progress
+[2014-08-31 23:59:59 BST] Cronner: Consistency check in progress
+[2014-08-31 23:59:59 BST] Cronner: Consistency check in progress
+[2014-08-31 23:59:59 BST] Cronner: Consistency check in progress
+[2014-08-31 23:59:59 BST] Cronner: Consistency check in progress
+[2014-09-01 00:00:00 BST] Cronner: Consistency check in progress
+[2014-09-01 00:58:52 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 1d82f6d..e6f51b1 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ e6f51b1..e6d090c annex/direct/master -> synced/master
+error: duplicate parent e6d090c41e0226cfb58bec304c1205b2fb2a738d ignored
+[2014-09-01 01:58:54 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ e6f51b1..e6d090c master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ e6d090c..e21ddb1 annex/direct/master -> synced/master
+error: duplicate parent e21ddb1bf0530ae415419ae15edeb1287ef6d9af ignored
+[2014-09-01 02:58:57 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ e6d090c..e21ddb1 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ e21ddb1..03a2d0f annex/direct/master -> synced/master
+error: duplicate parent 03a2d0fea214ae4a6acad0837587f5539f06efd8 ignored
+[2014-09-01 03:58:59 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ e21ddb1..03a2d0f master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 03a2d0f..f062d0b annex/direct/master -> synced/master
+error: duplicate parent f062d0ba684347871b780a4f0d5ff3e203329cdd ignored
+[2014-09-01 04:59:01 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 03a2d0f..f062d0b master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ f062d0b..a695f4d annex/direct/master -> synced/master
+error: duplicate parent a695f4dc83028907d2c9272f8cf8ec88d38049d6 ignored
+[2014-09-01 05:59:03 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ f062d0b..a695f4d master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ a695f4d..7706c3b annex/direct/master -> synced/master
+error: duplicate parent 7706c3bf24b8529bd248c7a4bfe817573bfa0368 ignored
+[2014-09-01 06:59:05 BST] NetWatcherFallback: Syncing with apollo
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: cannot open shared object file: No such file or directory
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: cannot open shared object file: No such file or directory
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: cannot open shared object file: No such file or directory
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: cannot open shared object file: No such file or directory
+gpg: Signature made Sun 31 Aug 2014 21:52:56 BST using DSA key ID 89C809CB
+gpg: /tmp/git-annex-gpg.tmp.0/trustdb.gpg: trustdb created
+gpg: Good signature from "git-annex distribution signing key (for Joey Hess) <id@joeyh.name>"
+gpg: WARNING: This key is not certified with a trusted signature!
+gpg: There is no indication that the signature belongs to the owner.
+Primary key fingerprint: 4005 5C6A FD2D 526B 2961 E78F 5EE1 DBA7 89C8 09CB
+ControlSocket /run/user/1000/ssh-apollo.aylett.co.uk-22-lizzie already exists, disabling multiplexing
+From apollo.aylett.co.uk:Annex/Family
+ a695f4d..7706c3b master -> apollo/master
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+[2014-09-01 07:29:09 BST] PushRetrier: Syncing with apollo
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 7706c3b..6936dd7 annex/direct/master -> synced/master
+error: duplicate parent 6936dd71b925b08dac26890cec58186fe0f5da89 ignored
+[2014-09-01 07:59:09 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 7706c3b..6936dd7 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 6936dd7..dc51bb1 annex/direct/master -> synced/master
+error: duplicate parent dc51bb1571c950330650a2881d443449bae64db1 ignored
+[2014-09-01 18:38:55 BST] NetWatcher: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 6936dd7..dc51bb1 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ dc51bb1..8f55d1c annex/direct/master -> synced/master
+error: duplicate parent 8f55d1ccbb0ee6d44e3176006abf71d76f80376d ignored
+[2014-09-01 19:15:05 BST] NetWatcherFallback: Syncing with apollo
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: cannot open shared object file: No such file or directory
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: cannot open shared object file: No such file or directory
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: cannot open shared object file: No such file or directory
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: cannot open shared object file: No such file or directory
+gpg: Signature made Sun 31 Aug 2014 21:52:56 BST using DSA key ID 89C809CB
+gpg: /tmp/git-annex-gpg.tmp.0/trustdb.gpg: trustdb created
+gpg: Good signature from "git-annex distribution signing key (for Joey Hess) <id@joeyh.name>"
+gpg: WARNING: This key is not certified with a trusted signature!
+gpg: There is no indication that the signature belongs to the owner.
+Primary key fingerprint: 4005 5C6A FD2D 526B 2961 E78F 5EE1 DBA7 89C8 09CB
+From apollo.aylett.co.uk:Annex/Family
+ dc51bb1..8f55d1c master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 8f55d1c..6cfcfe7 annex/direct/master -> synced/master
+error: duplicate parent 6cfcfe7d46e622dd1e28d7c0d182e8c5082d88df ignored
+[2014-09-01 20:15:07 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 8f55d1c..6cfcfe7 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 6cfcfe7..0048860 annex/direct/master -> synced/master
+error: duplicate parent 0048860fa55502c1c58d3e4d55d3a687a5fee1cb ignored
+[2014-09-01 21:15:09 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 6cfcfe7..0048860 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 0048860..3092f0e annex/direct/master -> synced/master
+error: duplicate parent 3092f0e9d36cfb780bf0eb4a667bfe6a8a7b3ba4 ignored
+[2014-09-01 22:15:11 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 0048860..3092f0e master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 3092f0e..c2d3665 annex/direct/master -> synced/master
+error: duplicate parent c2d3665970d928b3eb4b93c0a69f4f1533a01c84 ignored
+[2014-09-01 23:15:13 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 3092f0e..c2d3665 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ c2d3665..0966032 annex/direct/master -> synced/master
+error: duplicate parent 09660328b05c3eb55e78e5ec38d9d043cd6aa78a ignored
+[2014-09-02 00:15:15 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ c2d3665..0966032 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 0966032..b4bd0aa annex/direct/master -> synced/master
+error: duplicate parent b4bd0aae9a45c024247c5ea120970ede21d52b34 ignored
+[2014-09-02 01:15:17 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 0966032..b4bd0aa master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ b4bd0aa..dff7898 annex/direct/master -> synced/master
+error: duplicate parent dff789833ff9f83324c35d1892fb271e7f59b6f4 ignored
+[2014-09-02 02:15:18 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ b4bd0aa..dff7898 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ dff7898..628cc98 annex/direct/master -> synced/master
+error: duplicate parent 628cc98b8f571d27b1b7f671992d884be9bb776a ignored
+[2014-09-02 03:15:20 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ dff7898..628cc98 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 628cc98..11f0e77 annex/direct/master -> synced/master
+error: duplicate parent 11f0e7756811654bee5ab1ae57068ad4cfebe698 ignored
+[2014-09-02 04:15:22 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 628cc98..11f0e77 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 11f0e77..fb4d2b8 annex/direct/master -> synced/master
+error: duplicate parent fb4d2b8eda7b2a194d98cf841c63374bf46cc2e0 ignored
+[2014-09-02 05:12:34 BST] SanityCheckerDaily: Running daily sanity check to make sure everything is ok.
+unused . (checking for unused data...) (checking HEAD...) (checking master...) (checking apollo/master...) (checking apollo/synced/master...)
+ Some annexed data is no longer used by any files:
+ NUMBER KEY
+ 1 SHA256E-s1103321--51418dc7fc654ebbeb9173bff598b4031d07d3c5cf651bd18a18ca6af9f7f1f7.jpg
+ 2 SHA256E-s3754--39631a60a771a00e88ef5ab011ab3f56fa8e539619b06aa68e66f2c71f252f9f.png
+ 3 SHA256E-s628641--2eeef2179787270c6307e1070678b6b27cbf0fe12cce71c136e0a89e1df78565.jpg
+ 4 SHA256E-s848--66e696444c6e570fc00d79f6651018d7e6549585e587394b933dcb0d74d8c214.js
+ 5 SHA256E-s21214--f26fa07b51fe0f4c5bc0d746f8b23e50115116bbcd80db057740bccb9841e4b6.png
+ 6 SHA256E-s852198--9fcc545c030c268d660381fd33d66b06605f7c5df16dca0b3fbe4eddfbf6b339.jpg
+ 7 SHA256E-s1334033--d6e722f76229c10ea6a1ff8dce2814ee42c92b643a19ec3f4d72222e1891c210.jpg
+ 8 SHA256E-s664656--85aaeced38501abfec6d23591edb07d7ab98bbe303b98eb07cfa0577ec8309b2.jpg
+ 9 SHA256E-s3213396--90e4ec9054de04c2b2c60a49b812582ba15c8da00208c9fc74acbc69b83182dc.JPG
+ 10 SHA256E-s820026--c1fc64d12cc74f60f8d17302a95217978782ea99758bce99ea2233709be60a6d.jpg
+ 11 SHA256E-s622679--5e8412b3955db206c6836fbd5731b0ab835aa325fc75bc7d75d4511ddbf67644.jpg
+ 12 SHA256E-s917793--7f2ecba64196449b9d7f1ea79e07f496d90d59c59d12472d058566a0881a5c6c.jpg
+ 13 SHA256E-s3493204--7ce9ad40b32b5cd1237e5efbb8f6885f7d734f8af65da8d0e92dc2de13162e07.JPG
+ 14 SHA256E-s910114--be8d66d9261108572efe0266ae386fefa653cea4ef43be9fbd10f7e2fe8d1c4c.jpg
+ 15 SHA256E-s636389--07b609b0cbf827a45cff2ca92367f3c5bf9a9527d4b3cb43961487bca8068ffd.jpg
+ 16 SHA256E-s823401--4cf12d87a9034d34a3019b5002000c92512f901a82f1081705c12e73b5870bad.jpg
+ 17 SHA256E-s1880--add7e1d7d7d98ff96afaec27bb066d6747551358e025176265a31b2b0f74bec0.log
+ 18 SHA256E-s8784--e28377207d41b4fef538b2fcbbd25c05275103a299e74966a88dce53ad5f50c0
+ 19 SHA256E-s8694--490b9f2f9c4c826b68bad68a50cf672ec36c58acb9e24fd46e84abaddec19b9b
+ 20 SHA256E-s2656--96dd5f3d5f8e87ce1552798dd5fe4c8dedab6268c0df9e391a202ffdc4b8fa71.log
+ 21 SHA256E-s459593--b68a62596f7524b6f877d8bd3dbbe49f4de02310e9dd6d5134bbdabfcd5d957a.jpg
+ 22 SHA256E-s11931--5ce30bd4424d544ed954e4722d7ed590a5be46a267c5045953e034309d942a8f.odp
+ 23 SHA256E-s1249581--d834f2dc34ded72086e26c32784e693597be011f28398635286394c7e8b5ded7.jpg
+ 24 SHA256E-s335736--9638a3225f1adbdb736a2cacc476f8eb5201c8124b83dab887a26c6d3a0e5899.jpg
+ 25 SHA256E-s6339776--f42083be1dba62acf81ad5ee8bccad47f267e2ce34c9e73e9aaafe3c69b462bd.pdf
+ 26 SHA256E-s582899--858ad02a9e5f58a6f5ea509865831acd540c290837beb87b37cb36bb62a7b982.jpg
+ 27 SHA256E-s2475657--d3fa5e460a2b164e849213d0417790704d1b4a2df9af5f6b281ac17dbacad30b.jpg
+ 28 SHA256E-s637475--68315445dd9477f07a695cb9fd12bb2c95f3117d949665ec2690184ded6b1ee6.jpg
+ 29 SHA256E-s77771--484ed3d8cc44de2db74c5680659c5c23ccb29ed5e99d0fb4b470a2c130c64c79.pdf
+ 30 SHA256E-s2343639--a7fccfe9a2c8de20ce8df10048b075758c445e5f4c9d9b78368db179e74e9a47.jpg
+ 31 SHA256E-s2282836--66e945f3a37651e1c88c58ff42b4dba9c6c5d822dc59f3e59895c336a0428c3d.jpg
+ 32 SHA256E-s5902--da66d622f9ed0987a0466c2c05c2aea56572e2f991c542b1120d564fb7459e7b.log
+ 33 SHA256E-s61410--4d3f0160bc92d0095a824baa17a08499dc748d06648029051802d24a772ba75d.css
+ 34 SHA256E-s1958077--1717f3036e7ca6b61fe8eeb3ce319de728b9bea10fd814108b9e13397a336db5.jpg
+ 35 SHA256E-s80930--f9b79963053221a10e32c4061b9da3622e89ce56aeed26c58f23bb70a2a57496.jpg
+ 36 SHA256E-s4956--a05854e0d26affdbb3e171c8e9ca3f663c8bc930f6402d9a370104e239bc2601.log
+ 37 SHA256E-s202851--3689503ce6f780d04e659fc85e4e7978c3c445afbd103f3ac118e1c6f3a4b738.jpg
+ 38 SHA256E-s5258--a243d289f629eb2e321c7232aa59c65d10ec79e70d07f25758ac04c0b9ff3f79.log
+ 39 SHA256E-s5406--dc07212d5aaaf5a320b3f9d710a72b68f7112140c76b43b7c0b4bb71f91e823f.log
+ 40 SHA256E-s8427--439c4f2144c9ea726b739494565b05dc47b59a8835e24e9a083171efc0834fc1
+ 41 SHA256E-s46--ca4a766fadecf16bbc25afbd805e2befbfb4cb270f122b0de813fbcfc933c1a2
+ 42 SHA256E-s839129--921ddf15c906a0353cb18bdd0b321bd5a37dfe653edbffc8e3b6b47996d54d8f.jpg
+ 43 SHA256E-s2922183--3aa5d5b22a980a11cee928ba701ffd389542db84fe96219442de1b33a64f840c.JPG
+ 44 SHA256E-s1305363--0b14938c28492e288d35a62334d6436ba8edfb7f65a066dbd9587478f157ab99.jpg
+ 45 SHA256E-s8602--819b18ca30f477f66e558ba1488a06e438a5f0b9c8f6987f68daad039d8020ca.png
+ 46 SHA256E-s6205--14691e198b05dd68b5fe3ed39eb8739182f4f5e75dc43dd7ecb252f01978c7ed.png
+ 47 SHA256E-s5070994--d0c5367647750b1f0b54c9fea7c7c9e1a0f7a0a7f61c92a688887538df3abf7f.m4v
+ 48 SHA256E-s134807--7100078e84c39a2123c0ea7d713e3361c7174f21fb72d39dac2a99a4844f89b7.jpg
+ 49 SHA256E-s535905--f317f11e4e0536ea8172e7827369bd9a3c887fcef2586b8eeda28b2dd36a791c.jpg
+ 50 SHA256E-s6420--72622a4453f4ea48acc0337bb1b288e0fb034d1ee1aa74f98eb9062066c025b5
+ 51 SHA256E-s51483--c9fba5eb0b29216afd9b6f13dd2f351367b7bcd0c8eb93fa0a1b6a0ce4535d57.sla
+ 52 SHA256E-s1957447--c3eddff4df50e1b0c5dc93f85e39acd24723013dd9b27b7b8a407eb5e55f1903.jpg
+ 53 SHA256E-s5345--ee879c6bc3c3ac59f449a9d9f92ec9cc2d15dced1f166805a179b6874d190c25.png
+ 54 SHA256E-s153751--c3fd0000f94ff9c44fef856ee440837fa4c228918ae70d0813d1635d50e6d4a0.odt
+ 55 SHA256E-s682324--33a6a1b34570f9abe0516d9abceefe14aae4cdacc41dc3f30ca92222d545631f.jpg
+ 56 SHA256E-s370109--a00b1c78753de6ae1d64a01d457b53a3572a9324a0facda4ec39a149d9adb37b.jpg
+ 57 SHA256E-s310217--aa0c575a44cac4957e06cd8ed0b058a16454a7be7f32ec8e79c815be6057bfbd.jpg
+ 58 SHA256E-s5798--61852a3ad168d4f27fe0f0e924e7418e838ae4363d85a64ebea80c9154e0c9a0.gif
+ 59 SHA256E-s47071--f1a74e5f9a20776adbe88ac3092e5a20a69d254905c0f93aa0b95a1ad0a5ed00.sla
+ 60 SHA256E-s988--b1f5fb3d38001b8bcf214158c6c7571f5aadb03093d2c307970a728edcb8012b
+ 61 SHA256E-s1397011--b67c04c6c99ccc208734dd39e18d4304a4963ef36600d4adc5827df21bfcc260.jpg
+ 62 SHA256E-s2124--1c64d2a60a40242432550ab3292e1ee38072481c36b8f028f75e3b4ea52fec29.log
+ 63 SHA256E-s1640512--ccb4940713e190a9242b34e18896156733f36df909c7e399bfdfe36299bfa748.jpg
+ 64 SHA256E-s484856--55f146177198dcd03069703c7b8bdf5c10cd7750aaf4b6f9af1946d72a9f9d23.jpg
+ 65 SHA256E-s7031--88bedea3e75aff77858c63a6c30bb06180bd9167fd380d94f132486d6ffeddf4
+ 66 SHA256E-s10100--1df9143f4c02f877ec891262bcbc407a9d4b960dd80c6826d5c1078012dc2614.js
+ 67 SHA256E-s2454--778574fe7cae3bfc2a49cbe3be18ed313b049b6e0bc333cea80723ae2136f9c3.log
+ 68 SHA256E-s63103--474c29d016927bd7dc42d992fc07c353148d393cfbd7c3e8193df91c3bb2d805.jpg
+ 69 SHA256E-s245481--ba0e9ed8876970e0aad7e22aeaf4f7403e1ef6fca474e0b4e90837381c0b810f.js
+ 70 SHA256E-s708--ab8f3c450c5c8944d6d91c35258b9da5ff4564b9b05b1e09ebbaa9b740d14aa4.log
+ 71 SHA256E-s582241--fb565e6fa923f3265a9406abf566d5de7a8e062b1d9ccb8ba7ec61a902ea277e.jpg
+ 72 SHA256E-s601517--fd4a4effd6c6b064be34910b36f1de8011bb3949d0f883a57ed4ca60eff6a642.jpg
+ 73 SHA256E-s613354--0d78d51b5047055d9bd2727e01a7c73ec25bcb99925be26550f3b921054e336b.jpg
+ 74 SHA256E-s20794--0ba2f6756001669bdf934f9d79e8fd1ccf2028130c33a0510279581ec9dfd73a.js
+ 75 SHA256E-s654750--be05edd69e61fb5ebecbddc8c39ae9ebdbca5e94ee395f604bbd73910a7e40f9.jpg
+ 76 SHA256E-s440--4e8500857e2b6a08a6922ca852ff4c9702e2397843011a14dee43d6e20c4f787.log
+ 77 SHA256E-s72381--a170eff1ba771b3e4e769ab2974b8fb1f66cff07bf8b19561a97f9d7767b565a.jpg
+ 78 SHA256E-s344661--21564a2da0f6b1ea6c4a39f4a96ba02680facb9d8a084d4fffa28b0e527c9fc8.jpg
+ 79 SHA256E-s51248--f940d364ad2583a9ae3c0f777fd61406914daa1837ed8dd78f3461760c4ca747.sla
+ 80 SHA256E-s502234--251053730579880833dc12058a6c689ba074f0a981331ec7eb685b69f08e292c.pdf
+ 81 SHA256E-s3682--f75a95ae16e2f8a8e0a607782cf332dc34c1e317d473023cbd7f9915fa400d62
+ 82 SHA256E-s3544--9b40beb44b624520a74057a82ae5e6adb18601e6c1fc7d8496bdd59e3b248945
+ 83 SHA256E-s355156--7056bee290696e681cd3538e2ff2e740842bce032effe509f0919e888cc03ee4.jpg
+ 84 SHA256E-s879539--12cc34616b2dda153890db0a724290fa01bd9dd664061a05c8d2c1039cd4cc3c.odg
+ 85 SHA256E-s2051310--69387e84897ed700b6dd7c418fc3a7884a1e6e16a4267297b3effb95b02a7bc7.jpg
+ 86 SHA256E-s620--eb69406700a3a6122cb532614f4ae6899d97409d76259820176f7ae77158684b.png
+ 87 SHA256E-s693427--e20c50c86937800b14e2773d79eb63d13c0300781f8e71ee3947fb5a2fe98fe5.jpg
+ 88 SHA256E-s87985--b89b279ca5dede3643e8a48402e9b112b1e1fdc14b3326c98cbdb32f9f7fa2cc.jpg
+ 89 SHA256E-s35739--378d1bcb19c2742b8d344459a74f9b4ea44287c4e5cf046b80a46b209ea1ebbb.sla
+ 90 SHA256E-s51515--d4805b60c6e0ea396dc157ca0e399ba355482f2a9696f31fdcf819aa176ea3e7.sla
+ 91 SHA256E-s396738--5e18be640581ced943a676323c80dc283b15d3caf37b2bc2d0b05ceee1d178e5.jpg
+ 92 SHA256E-s334295--7f97df9f93e42a2db9e9efb0aa34a2a9a6b9af49846e6a73f320ee151d535eed.jpg
+ 93 SHA256E-s425513--0f6228a7466c12d1d0e4beda9825f17442b15286a5639e3a894a36d33497c77a.jpg
+ 94 SHA256E-s114076--6a1822942964efa5531de2cae48d3fd69e71baca7ade38b7cbe23964637d4478.jpg
+ 95 SHA256E-s118034--a8b1e6f81534106e9f4563dfe3f288e9425284fbaa74247065cf80448cdb216f.jpg
+ 96 SHA256E-s639--4b491df2b47c2fd4dcfbb99b50ec1367e138c61216704490ada08cddd0d32fda.css
+ 97 SHA256E-s734079--0602d1c85bca8508010ed03c2b1c26c88a8c759783f49d7f7b282b30837c6b32.jpg
+ 98 SHA256E-s130889--751d2fa73ac74e17d2e82fc9a89b3d393028197790657aa075effc7c16b8f528.js
+ 99 SHA256E-s485283--63716cdb8953a9318eb28953af25db2afa02251e6f152d487f5ab05f1d27930e.jpg
+ 100 SHA256E-s59518--6a80f10665ad39dc27ee3a5727ebeee321a289dbc958916f9e6eda01f2703d25.jpg
+ 101 SHA256E-s194--4c0fc707f629bcb314433fc700c6090c970d343adbb921f46084bdb08f99cf6e
+ 102 SHA256E-s303--07ae4fec1962f2f83808ec861e477d5669dd71ff1089cb25a0e1da7b3ec9a5a6.css
+ 103 SHA256E-s24519--3f3cba473c1818b2ce46a034fc323d528df85dd88d3f2ed411ad644a08ff9132
+ 104 SHA256E-s316292--691e653f57643e579c261a827441e63ee3d8cf1f9ed5cdc43d861cf340510d34.pdf
+ 105 SHA256E-s11916--88e5b1e2f5bd0f5c458abb41589028ef35dc75872abd7e04eee4a12ae7bfef38
+ 106 SHA256E-s733240--fe7b7c77712b866c932d391f8305560d488d0e5515f3d9c890ddd11c96ff6069.odt
+ 107 SHA256E-s4323950--c71e34a9fa2d1f54934d3caf829e4b5330811c2937d523f856d43cf5d92b7275.m4v
+ 108 SHA256E-s475740--e2d4880b8561167dd91b57a666f3eba68931ae3546231d102469c76d341f560a.jpg
+ 109 SHA256E-s574--5d1bd8763457376e0ff677895456f9aad26b6d85e15648696e9f4c77af104fee.png
+ 110 SHA256E-s11608--f815f1bad38a05f27b1f7cd416236148fa79554ed2546a014afe148c0e427839.log
+ 111 SHA256E-s3300--7164c4d91218528eedb0310af14927d4ce483889b53da24fdcc01fadae107fbd
+ 112 SHA256E-s962958--9a81dba98b0b910641d035bf662b847fb4785ef2378bef7b2ae6713b1fbd903c.jpg
+ 113 SHA256E-s845627--09f3e811c372a7ee936064d4c48c8b4f36db519a49a0b274f69e3da12a0e2ffe.jpg
+ 114 SHA256E-s2380622--05725288b66460ff1befda38280dea4d05c5dff42818de7d64e619e12aebeaa0.jpg
+ 115 SHA256E-s62795--a32762ee80e176ca1d7869cd5f68e7442327e1a861ed70290f2256179ebd844c.js
+ 116 SHA256E-s3486--f148d21e252ab05ff7039fa276ee309e6d16d2ba7444043acc148b9986164162.log
+ 117 SHA256E-s2393747--1ba6fc7f4d47ced145ceab80128e3ceaf8cfe8f2155b5e33e9273c736a81b910.jpg
+ 118 SHA256E-s4611--bbc334899e27d8fe781f61e06be1c28852e618d1e2bd8b98de0aed7fb6106ad8.js
+ 119 SHA256E-s826134--426211e056784356538d3ac80838e197e2cdf29742cd31db6a386ce7c05aa052.jpg
+ 120 SHA256E-s1072403--87da8298b8c3c76bdfb8c96ac7dcb11349763067056eb0e1fadf5241fc134141.jpg
+ 121 SHA256E-s51028--d6d044282ee1d1d8fc02130ac42ab1d7ee3a6a7e2987b78bb1062529019cf3e5.sla
+ 122 SHA256E-s45783--35b9963b4a8bc3dbee5bbe827c2e18c795b8fce86bb1eb87c6b3b09327380f1f.js
+ 123 SHA256E-s999195--c0fa3d678c9ebe118ea3fb1b664a2f63ccc792a7578fe921d0c299adf40d97f3.jpg
+ 124 SHA256E-s96828--c5ebf871d1c98e5f49d15dc22131e483b514754ad86c6293c69b6d5aa3d44cf9.jpg
+ 125 SHA256E-s159835--47a9ba3de62d6a4b11dd59a60b0047d3d377c224ceac85bfb6a81a972f25fff9.css
+ 126 SHA256E-s9629--588e723593992acb553dd4f2c76a6993135b4f49e674358fae63ff06e145f07a
+ 127 SHA256E-s39867--6e96f4658811bba2f27f930f764111501e438135d793e28fe7eacb6b10866e0d.js
+ 128 SHA256E-s62332730--a2c804ddc66d8175fb5e187d17c904954f1e2cae634c4604ac363eb97d78f7e1.odt
+ 129 SHA256E-s1711933--dd49df68da23021d3e9cc775e86bd5341dda6ba71714c8287872deb9416e051a.jpg
+ 130 SHA256E-s290639--0803de7a02e9a4a1caca69b2a7b2c948e7faf2e4ef2bf3bcdaec148c0f26b842.pdf
+ 131 SHA256E-s5799--fa90e9a478760bc12c2707962f2ea6b9ab213bc7d4b158f28f6739727ffe05e7.log
+ 132 SHA256E-s11156--17ca703a57e9f02ebd71251ca8bdb6d82b71fa586deb034cd384b21a3818035a
+ 133 SHA256E-s16171--47a7946e6364fa5ad3dc595105c79a4946f18cbef0818e72682d9304625ceab9.odt
+ 134 SHA256E-s1962015--2eae4dfa79e014bf4468141bfac8c0065d1b05f2532758c6e68deedd297f22ee.jpg
+ 135 SHA256E-s31268--560829df213299f5db9aeb0b31b40044300c34e92818680f422d0ddfe7602f2c.axd
+ 136 SHA256E-s145407--c34c44643d9d0f7114cce8b31f3442a7b6392c4687af9ab97995bd30ddd3167c.pdf
+ 137 SHA256E-s1773--8417f863ffa4a076dd2d8b5a63170bb0c5b83cf275d72245a79c31d94358fd20.log
+ 138 SHA256E-s701838--3d7abfd8b091e4da1bb61881155c299b78ed693f128f1c693c7970bcbce4e8e0.jpg
+ 139 SHA256E-s2089502--f4c9ec5dce63924cba6f77efd5e20b17cfc0f3c9ae45dce7bb0ecc5a10986205.jpg
+ 140 SHA256E-s1085890--0346c7a329e7b80c7f93b8aa7de039bf322070ebac33cee6ade6fcc4a4f296be.jpg
+ 141 SHA256E-s3998--e38f3a315b698a0e8ccfa395431393af757f882413cea8b4879b5b5993543f86.js
+ 142 SHA256E-s7372--181699a3ca4be8bb0e9913fd96dc5c44ed8a790ea6ef2bb0fb285e741f2c46ab
+ 143 SHA256E-s864279--364b4a4d0a30ddbf1164d5d3ded0702a4b016ffc27d26eb6005d96e68aa4f77f.jpg
+ 144 SHA256E-s2941--7ca4f001618fda61146802286daf472c5daaaded2471e356a752b6a69834e7f7.log
+ 145 SHA256E-s153049--5805df5cecdaa15a549bf7751b1d66f7455e71e2243709d9799f839e42d082f2.jpg
+ 146 SHA256E-s542959--5823d605d7258bd813d09712fd124fd7c63f2cbdf46a9b52c3eb67eb7bb538bc.jpg
+ 147 SHA256E-s45282--b20a77431de35f8e70867cfe520503528fb948d63f724ed90fc249994875b77a.jpg
+ 148 SHA256E-s19556--e5bdba04d2a9d805c491778a742744d3007d38a23c9dc11cf8f6eab7b2dd0a1d.log
+ 149 SHA256E-s392108--c9c76c131588fc29d588afed12d98b6b3a6aa0a9971ad368112bc0c2a603e70c.pdf
+ 150 SHA256E-s8275--ff63b5b012ea62b178310424d817a8a77fb31151dd697659f85f23a6298cf28d
+ 151 SHA256E-s1769251--7d0a2ec1652f1287884f6bd4e0df14106af271e81fc38cae5aac1357966ea672.pdf
+ 152 SHA256E-s464748--aa63c72a4b064f91083228395e1391d970873ad1370900a468db154ed266d475.jpg
+ 153 SHA256E-s6130263--3521b18281dba779713e600fde1a4d15568328baad6baf43cba1530df7165c5d.JPG
+ 154 SHA256E-s494260--aeb91b314f3dee3580093e9610dacd5917265794b49acea9d80dfca83d56b88d.odt
+ 155 SHA256E-s3362329--05fde815df42455fdc1b563ce41bf13d585135da628d01c5ffc9ca627c008225.jpg
+ 156 SHA256E-s489239--d2ab01a94808613489205b7aa5d666cccfeac0a28b5a76ab18fc9fd9435dcabc.jpg
+ 157 SHA256E-s482249--e4979b950d4633515316102d934115b1981c8adf5a14ea80bfda87e623af7989.jpg
+ 158 SHA256E-s93506--3f44779fc3ce611f607c9cde2c114f6f038775485a677e17bcb6bb034e6ac888.jpg
+ 159 SHA256E-s818--66d21ef5da07cc00768b23bb711ccc8e18b91c99ccad2084ec309f51e6c52db6.log
+ 160 SHA256E-s171892--33f34e7d16851c2291d7495754505d391be4668883b43e4b9e587126c693b1d2.png
+ 161 SHA256E-s278132--fca8b8bbcc0f9fe8addb57994c69a9c511b206c27424491809ab31aef86f21b4.jpg
+ 162 SHA256E-s2418631--deb0aadf97aa49010ac3cab5f5299e2d68eeb5ecb4dd5de93316f23a714734f6.jpg
+ 163 SHA256E-s125121--2b2cc905b8c05d4c7253a9c2b45a961df545842e4ce9d17e5248aa6240e77557.pdf
+ 164 SHA256E-s199793--615ac75e6766d637d17159ebe3d48eedf27096e93b83efc159431da4d032e21b.axd
+ 165 SHA256E-s223221--ca5f5160688546f422cf7d041e58f07d5d90e8359666e523a5af515baf0b2980.jpg
+ 166 SHA256E-s1959724--2e44ed4b10ab3c1655b16335b901547713ac8d5c38d4ed3735bcbabb272242b5.jpg
+ 167 SHA256E-s11609--df8dcf81585eccae95b7c4f0a0ba8c6fc4cfe90ebbf9657bd6a10320f7195e61
+ 168 SHA256E-s483419--96cfd3b43e5b7bb1d6a5bc3f78d33e873fa36ee6e53c9f1de083f279c19c5f70.jpg
+ 169 SHA256E-s560766--96f47b698f6502bc758e6d8b9b538368f8085d040306388bfd42d3026c465ff5.jpg
+ 170 SHA256E-s3848--4d18299f8d8ef1bfbd7b206d419ef6f65cbd09a3ae999f3c7cc8496051b34080
+ 171 SHA256E-s1141493--80b7a82ee4edc420c538c4a2a37fc9d80cce4c321f5a9a7fa7e66df0c9e3693c.jpg
+ 172 SHA256E-s9726--14b5e76da3417f5f25f48c2a793aa50da9c920451495af7612b76d3c052d3f13.odt
+ 173 SHA256E-s939529--43d05562e75f2477aa6d412d8a672ce7b6cf2890d4e1578bf88692aabfd0e70d.jpg
+ 174 SHA256E-s888147--948ca59b827f77f75ea981b149a72df976aea360cd263d0f7c03275375a47232.jpg
+ 175 SHA256E-s740710--f1e98c032815161aff44c8ccbb882af5cb234f91c4430cf91d01115649bc9aa5.jpg
+ 176 SHA256E-s961257--e6b21901e268f6d0f3a38b43e5a06d8ad9ec0901f4c9639954da7ecf2ee4a666.jpg
+ 177 SHA256E-s616645--bd10a26926e6cd0fd0ee6cf72692c92134b183927280a00a74e869bbeae8bde6.jpg
+ 178 SHA256E-s47996--f862cbc7bea6fe4b5fe3a3af2b393973220a34975dd36a9d5f92b30d1db80acc.sla
+ 179 SHA256E-s2396909--2e6d435cf96f81a3f3247f2d35b01701f8a46977e813745324ca5b40717fdea9.jpg
+ 180 SHA256E-s180605--66c6df69bba4602100148ffd0f0a0ba0a14b74eaefb3b27708c6792d2b5cd09c.jpg
+ 181 SHA256E-s721289--159f9398adde99e23b05c8c8c99aadd98b6a3a80afe5e3745ff37b0668fe4a24.jpg
+ 182 SHA256E-s95559--0d932a11d465d523f85b17803d44fb0748459771b2cd843dbcfd677248abb0f5.jpg
+ 183 SHA256E-s368166--98be96450123c166cf11f1763aa25040ffb1674f7267a4041cc1a4fbe8e433a1.jpg
+ 184 SHA256E-s846--b3c9f5697bee76715237040d6ba5ff9f657dee2d882e36d818ed2ff50e8e0835.log
+ 185 SHA256E-s581051--217882c3f655c62dd323afe0689c9485d0d09430d5356a63105632cce08ea88e.jpg
+ 186 SHA256E-s586436--006bfd4f9697d8b64be920876bd8c0a40967b253806072ec09d2a630909826e4.jpg
+ 187 SHA256E-s398620--1ab7d488bafe19941f33155959c1bbec199a86ef2334c08b75b450bc9f36a16b.jpg
+ 188 SHA256E-s10457--0be429c323998556486e8f9977ccc980be3ba3920d5cc3bf16a6c7bb57b0fe3c
+ 189 SHA256E-s83789--c286b21f977391efd38b5a5a341f9dbec4da611a16bc1d17d8ca71d49ad64d30.jpg
+ 190 SHA256E-s321943--5e3983f4b43ae782b6f41c4f899027f1d55f78347e2106bc4c96e7f65c652918.jpg
+ 191 SHA256E-s7518--be582d1ce8295d8c47e261eb7bd78a0e720e78dd58805808e9bf64ddfc3c4fe4
+ 192 SHA256E-s6118--3ca5d8ca6cda3acc6c07c604f6880c017e6faa7dad4ba61e9aa956a9fa8b4b0d
+ 193 SHA256E-s1086965--e170514a3651dda3313f4dcfdb9490f039a825b8349f74957a17313bdbcd7e8d.jpg
+ 194 SHA256E-s10504--a57d3172d4a009a1a0d38993ea6dbe03fab6aa1ec429aa4aab563465b0dc43bd.js
+ 195 SHA256E-s530445--7c8e603a03e17bb0c6440df6b695e557357527bc081871b51d0b5a61222dd674.jpg
+ 196 SHA256E-s37480--ba3a0b04e4325bf0853c6201ecf7bb0fc08a0a13f5fdf0a4477c6a1f0cc82559.js
+ 197 SHA256E-s394333--77f7debb969fd22698b60339ed0a0e98d9c43b8c74203528a02f6a185784e808.jpg
+ 198 SHA256E-s568976--43c009e20c1b4b28d651c64ac1faa9ebd5e704bb975e2fb65ece83f4cb8867d2.jpg
+ 199 SHA256E-s13813--4b4db06a82938c002539bc21d9285d63387e1a6241932c111c4f3992fa093092.axd
+ 200 SHA256E-s2735--f73ac06c4be021a97a8c40f5371f0e62fd7094d863d9679407784c09c13ddd5b.log
+ 201 SHA256E-s25176948--4493a4fd3160627db1fdd24c2a6bd402b544c495565815007c2d0d5093478d2a.odt
+ 202 SHA256E-s596273--de2ec9fe99774ea6ce0a746a66888b71cfd744d3d97084439d054e58adebe709.jpg
+ 203 SHA256E-s947995--956f7ec6d1c0c931c40e055fe21c2cfde8ef135f816052147406cb0c3ed0f948.jpg
+ 204 SHA256E-s5283--5fbb8a58b8bf48ea0511c26b1b319f737df54e8e35f13b5d851dc7c0ce662458.png
+ 205 SHA256E-s777575--c9fea606bc2e419967c550c43b5345bf7b08b43a81d0cdc561e048b94d536e10.jpg
+ 206 SHA256E-s51496--36143df60284eae68573cb266a34a25f3c042bfd8314bdf0730c03a4fb81bb38.sla
+ 207 SHA256E-s3013379--4f47c51193c043d2e81aa0bf46927a5f5c305625a09ac9034f9cb6e25ea2c6bc.jpg
+ 208 SHA256E-s592379--4cea82764a163f6da9c6e63f553f82f119d5188d187c0747ee467a337f81446e.jpg
+ 209 SHA256E-s8402--5b400d459743a01405d2d1ffc4d07651c36712caf9030e2a091e48f97c58a2bb.png
+ 210 SHA256E-s662301--f0cf51849e330e861513bee59063450d14759055c67986e8a31dbbde0907a254.jpg
+ 211 SHA256E-s1371822--0c85f348595f845e0076e52157fbb772a9d72a4821310c187b183370d7bb1b4c.jpg
+ 212 SHA256E-s13445--460f9e3ea4f8a260af278d81c59faa45f16b2069b10030a8a253cd852f2e8e34.log
+ 213 SHA256E-s19780--3f513b835cc3299a15178dae45cc523f1b06a1c13bd0e1c29f958027d3f5dc8a.axd
+ 214 SHA256E-s311438--00b3cbd6de31a75e3a017c452099991f1ec09327efe9c6450012f6015eb6e1a4.jpg
+ 215 SHA256E-s8942--e267fde4da4719de2c454d82f907796167f425510ea84098a39b425b69d2df5e
+ 216 SHA256E-s845884--58974bcab0e36d65d606c1acf57e34e2e6f89872fbab65b9abf5250c632967a5.jpg
+ 217 SHA256E-s331598--de52b228ad93c774d4dd1d41556ff27f7f03802378747807f324a9604e32ed66.jpg
+ 218 SHA256E-s201837--d3f750f64687f347f0254d3c602a010ef71636a85f37954690d20bb6548437b1.jpg
+ 219 SHA256E-s537652--aeaa479c57d39b3618006162c80e1c0eaa2cfa0b2a9a2c069a3d601bfe5b0706.jpg
+ 220 SHA256E-s1174974--1d506c737c2dbde4aa286a2a25b22412c83edc5e55c3cc94fa38fb224677cf01.jpg
+ 221 SHA256E-s7068886--945cfae8e22db1c96ec4cfa7b7de021c6bfe4d9e4961eeb2860716d6c8a57354.m4v
+ 222 SHA256E-s684839--02293539aa97de6ab57e9caaec6998f4e64a08967d9f5f2c44581fb1df0acdd0.jpg
+ 223 SHA256E-s371333--36110b44ea216b0166b023d09b52d0d32c3bdd01dafa857ed62e7c806be93193.jpg
+ 224 SHA256E-s195249--21a08a5510bc88e85db2b5da660c61320ccd101a4b86cf3558618bbf37d659f0.jpg
+ 225 SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.xcf
+ 226 SHA256E-s26368--302de7e36ca407cf1441ab2d3fa855192c9d8b2e6a7ec04638d19db7056b7f2a.png
+ 227 SHA256E-s965404--fd61bc28b2adfd4d2f175e02c662b7a71dc4b09880c8198795994e70f156c46d.jpg
+ 228 SHA256E-s7254--2fcb58c8f60caadcb3e2d9e38921a49e470a9d854a55c89cb9c80f6ed0334669.csv
+ 229 SHA256E-s482912--24330dbfb1d90882bf3f42e96c236f818913c343fd828992cd03ca84a3b9b2f5.jpg
+ 230 SHA256E-s641334--bb06cea748a2feefa1a608635b83ed4311da1990275e32a9fd4549048c91a453.jpg
+ 231 SHA256E-s1239159--2d15a6bf658d588697c5b3c2b1d1382450a40517779c32d435ff672e45539a5c.jpg
+ 232 SHA256E-s2125768--a04f47c1fa5136fa397897bc907b6754a9598b37d34920250b8f70a87aaaa0b8.jpg
+ 233 SHA256E-s3968--f4147a07111527be5bc7e9a5c83e3fd7ed871937167fc6d20fb7ee4d7059aa69.js
+ 234 SHA256E-s462918--aa97a7f50f004dffdf444bb7f69e09c650c8987f52b5f4a0164c6acdeb4a8b28.jpg
+ 235 SHA256E-s29501--67fa8330853830c4b29e05f96e6e3b6369ab908238e425e8faff4ac57e12bdb0.log
+ 236 SHA256E-s158417--4058a56c1350032d640519f3aeb94ba27cd8e8b5afceb6d65e746af4f94777e0.pdf
+ 237 SHA256E-s3437070--12a5bafa210aa79e9abb86c21032003c30c3a1eb5fce45a31488b6ff08db084d.jpg
+ 238 SHA256E-s4373--12f64c274107733ae44f8ea9dc92e3ecf15400d98b3d76f9cc7e11527e4ed81a
+ 239 SHA256E-s51497--218e86c2eb9ded51b764b5296cfff76bae4dca82e07a1602c9c597a1c34e98d7.sla
+ 240 SHA256E-s4372--20e4d3e47c5fd381ffc31e6effbeb29eda97d6def773a3e42596501c6beb6317
+ 241 SHA256E-s317548--cb605575ca9fab16501f2819b000d11bb06fbb2ad1f300cfba3d011e3e8e2ffc.pdf
+ 242 SHA256E-s4960--c10e8c25e9b66e3ef77723373beae89e2fab1010c8b36ca329a3e9da20cbdc7e.log
+ 243 SHA256E-s517805--9c14fd5e5da48efd9951b086c25c04a7c5427111ef2829543497e707f93fce99.jpg
+ 244 SHA256E-s1857451--616661a96876b89472a69d32bd567aeeb95fa7da19ba4c3aa6a0ab237e2dcec3.jpg
+ 245 SHA256E-s2760813--63d375f82234356889c6222a0162bdba3b7f5a1a0cb31e24c2c209f43fc2f37e.jpg
+ 246 SHA256E-s832772--530816bf7c52c72e9b951289b5a35da753c66726d4e7bb2c2267faec6c8c263c.jpg
+ 247 SHA256E-s4660164--2832a896d7af11fc35e1dd7ab527b0fdfeedf7ffe93bcce147381a8739c81298.JPG
+ 248 SHA256E-s688782--71733ec7ffd2077ecf2973a739e4928be5824ad92034f64446a216cf513a1f29.jpg
+ 249 SHA256E-s2876462--92eb9385b333bf9eb8ad56de86e46d1ba9b21c1166814e6f16e50e4a769936fc.odt
+ 250 SHA256E-s496541--80d2e40f680dbd998b487e0ee8d479cb92741ec9c3e1f9d1d1d6d2f21a8cd795.jpg
+ 251 SHA256E-s69339--97fe05a5b2c230c5b1fde5d18555aca13d12a35940d7d8c15249e7e80629aed6.jpg
+ 252 SHA256E-s169446--5e1e9e262a58c5692f0d3c428fb71c0980311a88b474ffee95a5ea8cb5d5bf15.jpg
+ 253 SHA256E-s2678100--a347450551a9055011016920280dd0a63dfc541f4f52f8ee78ef2b7a09afd46a.jpg
+ 254 SHA256E-s87--5c2582459e3550daa4889fae41e3c8f6f4ad26dfa670502e4f516749aeac4113.png
+ 255 SHA256E-s5798--c7167ef62bc21326b00d78b47d672bc25026eb6c7f3919fa47db2e7db8855ba9.gif
+ 256 SHA256E-s53033--80840b2105a7a316a010ec3c3775031bef7fbdabbb7d3f6b7ece1a6253ef1b59.jpg
+ 257 SHA256E-s7407--8ec4462ca6a05614378729bb20bb33c3b892bc943fd698389e44d959c4506843.log
+ 258 SHA256E-s1189946--d23ba452e6e267d93f6233e885bd6f9e15b8ad1aea4c3d2368d901428df78970.jpg
+ 259 SHA256E-s3447000--61a3bd3f7dda48544b67040012d6cd5999499d25e75dc34b82d11955d0fc9b6a.jpg
+ 260 SHA256E-s3263208--69ad68aaad7058af8d14f7e4c03e5b52c9a78dbac7ffd33bd7bc5220c847d6bb.JPG
+ 261 SHA256E-s1226280--d372b699459664c382f607ff56294df49e6d8d0fcab90b509337c347943357cf.jpg
+ 262 SHA256E-s16890--12861c187e68e3591ccd5f708b935cc43bf25f5672daf50913e152c1c55e510c.png
+ 263 SHA256E-s1092669--8e7f7431c487c6cff11ee9f7c8a87aa0d057b518e60bd2b92fd677e5c9a88313.jpg
+ 264 SHA256E-s307511--5fad92167d8f9a7ed4076909a1540388cdae89df956e6011065526bfb10564a4.jpg
+ 265 SHA256E-s8334--212df98aca1ee3d4f10539a786ad746f3856c2715e23d5cb816a2374b5e6c43c.png
+ 266 SHA256E-s3375--2b403c31d4934895cccbe05556b0134bd4b78d4b873193d2b12a8893ab170681.txt
+ 267 SHA256E-s691014--470d607465715a4c0735d74da75a5aafb5f6707b9d10a9a6a8c002f095f447e2.jpg
+ 268 SHA256E-s680701--133c1dc67e394103d9f900cbf80ef508c7d7818edb23406c5f67f027a38093a4.jpg
+ 269 SHA256E-s4024--b5d3e2bb6d51ff8ceb54f501035a5feebe7d5178d35b98abe9e41531bd2abd22
+ 270 SHA256E-s1117--b7c94c25be8e78468071e78481641927450d754fd1bbd8d0d751f116d02b9ab3
+ 271 SHA256E-s476926--ea981873de3e0ca8156ff710429894abbd8a51384b210cc142b074ec9b2c9ba0.jpg
+ 272 SHA256E-s56655--7df6526b49b7aa986070db456b6a3a378c8aaaee8cb7c8892c154eecf401002a.com.htm
+ 273 SHA256E-s2963--4fc53b3029a595b3b7f1f201eb4b7c2df78afc7e083abccd070c8e6fae79a661.txt
+ 274 SHA256E-s761655--486ef18d41898ba80505d7630170305c4b58fa647786bd5447f20045bd6f3b2e.jpg
+ 275 SHA256E-s1389414--3599c1a4da6a3b61cbc4dc431c436af9bf201b634fde2f99ddf54eae8c3590d5.jpg
+ 276 SHA256E-s39678--bea819324e10bc288c75650e2196bebd5339952ce33574625ae5091ad749b63c.jpg
+ 277 SHA256E-s47531--a91ecea2694b4b5c8daab84aa25c675f2f73dbfaa8ccfd581d6868b1e2568b7a.jpg
+ 278 SHA256E-s4923--2f1b9afef156e9c7f4994106eda088868a992d92e66a5d601f77980fea80f777
+ 279 SHA256E-s84101--bca6a8a9640b1ebfa8a2ba01b3a0f7ed20ad77fa5cbb5588d46ce75949fc38db.jpg
+ 280 SHA256E-s1245742--d547d4a18279ec671be7869896c0b3e763cf8499c4dc28a62a49cd657fdf4200.jpg
+ 281 SHA256E-s655461--f9b43d2794fe757d7cb61a704a01c85bc09eb20d70a1550d6934dec12f46f0bf.jpg
+ 282 SHA256E-s137484--51fbe9bc815e41dfe22b9f9d4ed8f3ca98a8cb5cc7b81522b296d45b0279a413.jpg
+ 283 SHA256E-s607392--ead4548b66ac3ab5c930cd89bd60de480184a4f23ffce9b5da24f9269b796283.jpg
+ 284 SHA256E-s6888--405748982bbb3340eea34acbe45085ea62c80767866f0c76c355e4f94b969c7c.png
+ 285 SHA256E-s4327767--eef5840e2f4294a125aaa3ed33f8ccc96c5c2c3e31cbee356013de354e628df9.pdf
+ 286 SHA256E-s411064--4e5e5d477ccc542f78649e4b4ee6aa132bf79ae9aeb64a46cb45a7ee133eb2f7.pdf
+ 287 SHA256E-s224149--204dbb62c5d5352c9b5baead124ecf52c6fffd49120343cc21bb10343353934e.jpg
+ 288 SHA256E-s1333719--9d9ac54db47723755ee0d19731c0b2f4b40074d946da4a1e283a4904feea4534.jpg
+ 289 SHA256E-s1889687--07b79ce21bf5ffe2d80f9878d338fcd63ddc92c5381eb3c290639c3e73a7b927.jpg
+ 290 SHA256E-s686131--93ba1a21ff8cc7d9baa61a2af8407ccc8c1b22705a191e9f0a393d14ec95e232.jpg
+ 291 SHA256E-s619954--3d900d39d16eca00287a0c4bbe20b46767867b5065260a4a1fa8444081998e25.jpg
+ 292 SHA256E-s828309--f1d702dcb350cff7a3229fe62c4f0f4beb5f95ad2f00a6fd1bfb82549cd08129.jpg
+ 293 SHA256E-s516404--0ca06e98fd119847c99bee56264a31ac99b36ae71136624018d308ff8c6a2e3d.jpg
+ 294 SHA256E-s783842--0618e7c3ebc7ff8fcdff82b9fd227e8b83f491e8e1b96c2d0e566fc7fbea27ea.jpg
+ 295 SHA256E-s20748--df0711c99c30b5fdcbfdd109c093f02f6a7f5196e7ffbc8e291bb2780c5735c0.css
+ 296 SHA256E-s61739--387a27967c79b09e21d93f8a8b969dda930e8d26e9ce379c1d71718d4cc5a1df.jpg
+ 297 SHA256E-s1461106--37222c3cd7a3af846c8aaed3a174a0a7e6f775ea4c08c4e2f792c6da724812b9.jpg
+ (To see where data was previously used, try: git log --stat -S'KEY')
+
+ To remove unwanted data: git-annex dropunused NUMBER
+
+ok
+[2014-09-02 05:15:23 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ 11f0e77..fb4d2b8 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ fb4d2b8..490e8d4 annex/direct/master -> synced/master
+error: duplicate parent 490e8d462bf7572cf44bf4fb6a820ed38d471a54 ignored
+[2014-09-02 06:15:25 BST] NetWatcherFallback: Syncing with apollo
+From apollo.aylett.co.uk:Annex/Family
+ fb4d2b8..490e8d4 master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 490e8d4..08b6a0a annex/direct/master -> synced/master
+error: duplicate parent 08b6a0ab11b225b34261a4cd5962a6630eed4495 ignored
+[2014-09-02 07:15:27 BST] NetWatcherFallback: Syncing with apollo
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: cannot open shared object file: No such file or directory
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: cannot open shared object file: No such file or directory
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: cannot open shared object file: No such file or directory
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: cannot open shared object file: No such file or directory
+gpg: Signature made Sun 31 Aug 2014 21:52:56 BST using DSA key ID 89C809CB
+gpg: /tmp/git-annex-gpg.tmp.0/trustdb.gpg: trustdb created
+gpg: Good signature from "git-annex distribution signing key (for Joey Hess) <id@joeyh.name>"
+gpg: WARNING: This key is not certified with a trusted signature!
+gpg: There is no indication that the signature belongs to the owner.
+Primary key fingerprint: 4005 5C6A FD2D 526B 2961 E78F 5EE1 DBA7 89C8 09CB
+From apollo.aylett.co.uk:Annex/Family
+ 490e8d4..08b6a0a master -> apollo/master
+To lizzie@apollo.aylett.co.uk:Annex/Family
+ 08b6a0a..69244bb annex/direct/master -> synced/master
+error: duplicate parent 69244bbcf029c21782995b78cdfbff789c0d198e ignored
+[2014-09-02 12:19:20 BST] NetWatcher: Syncing with apollo
+ControlSocket /run/user/1000/ssh-apollo.aylett.co.uk-22-lizzie already exists, disabling multiplexing
+From apollo.aylett.co.uk:Annex/Family
+ 08b6a0a..69244bb master -> apollo/master
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+[2014-09-02 12:20:01 BST] UpgradeWatcher: Upgrading git-annex
+error: refs/heads/synced/git-annex does not point to a valid object!
+error: refs/synced/5879379e-5514-11e3-b428-a79c7bfa61c8/git-annex does not point to a valid object!
+error: refs/synced/5879379e-5514-11e3-b428-a79c7bfa61c8/master does not point to a valid object!
+error: refs/heads/synced/git-annex does not point to a valid object!
+error: refs/synced/5879379e-5514-11e3-b428-a79c7bfa61c8/git-annex does not point to a valid object!
+error: refs/synced/5879379e-5514-11e3-b428-a79c7bfa61c8/master does not point to a valid object!
+error: refs/heads/synced/git-annex does not point to a valid object!
+error: refs/synced/5879379e-5514-11e3-b428-a79c7bfa61c8/git-annex does not point to a valid object!
+error: refs/synced/5879379e-5514-11e3-b428-a79c7bfa61c8/master does not point to a valid object!
+error: refs/heads/synced/git-annex does not point to a valid object!
+error: refs/synced/5879379e-5514-11e3-b428-a79c7bfa61c8/git-annex does not point to a valid object!
+error: refs/synced/5879379e-5514-11e3-b428-a79c7bfa61c8/master does not point to a valid object!
+error: refs/synced/5879379e-5514-11e3-b428-a79c7bfa61c8/git-annex does not point to a valid object!
+error: refs/synced/5879379e-5514-11e3-b428-a79c7bfa61c8/master does not point to a valid object!
+error: refs/synced/5879379e-5514-11e3-b428-a79c7bfa61c8/git-annex does not point to a valid object!
+error: refs/synced/5879379e-5514-11e3-b428-a79c7bfa61c8/master does not point to a valid object!
+error: refs/synced/5879379e-5514-11e3-b428-a79c7bfa61c8/git-annex does not point to a valid object!
+error: refs/synced/5879379e-5514-11e3-b428-a79c7bfa61c8/master does not point to a valid object!
+error: refs/synced/5879379e-5514-11e3-b428-a79c7bfa61c8/git-annex does not point to a valid object!
+error: refs/synced/5879379e-5514-11e3-b428-a79c7bfa61c8/master does not point to a valid object!
+[2014-09-02 12:21:36 BST] NetWatcherFallback: Syncing with apollo
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+git-annex-shell: Only allowed to access ~/Music not ~/Annex/Family
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+"""]]
+
+> This is due to using an old and buggy version of git-annex. This bug was
+> fixed 3 full months ago, in version 5.20140709. [[done]] --[[Joey]]
diff --git a/doc/bugs/Assistant_removed_all_references_to_files/comment_1_1f7da19ea99c263d56db6331d4b1e346._comment b/doc/bugs/Assistant_removed_all_references_to_files/comment_1_1f7da19ea99c263d56db6331d4b1e346._comment
new file mode 100644
index 000000000..f3cfbaabe
--- /dev/null
+++ b/doc/bugs/Assistant_removed_all_references_to_files/comment_1_1f7da19ea99c263d56db6331d4b1e346._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.132"
+ subject="comment 1"
+ date="2014-09-11T17:45:31Z"
+ content="""
+Unfortunately, the old version of git-annex you have been using is exactly the wrong version, so you ran into this horrible bug, which is fixed in newer versions.
+
+<http://git-annex.branchable.com/bugs/bad_merge_commit_deleting_all_files/>
+
+That page has details, including instructions on how to recover your data.
+
+I hope that you were not using that old version because it's included in some distribution somewhere still?
+"""]]
diff --git a/doc/bugs/Assistant_removed_all_references_to_files/comment_2_0dbb8df1ad267d1c502646a7131a99f1._comment b/doc/bugs/Assistant_removed_all_references_to_files/comment_2_0dbb8df1ad267d1c502646a7131a99f1._comment
new file mode 100644
index 000000000..932a88471
--- /dev/null
+++ b/doc/bugs/Assistant_removed_all_references_to_files/comment_2_0dbb8df1ad267d1c502646a7131a99f1._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://andrew.aylett.co.uk/"
+ nickname="andrew"
+ subject="comment 2"
+ date="2014-09-11T19:03:07Z"
+ content="""
+Unfortunately, that bug involves merges while I'm seeing regular commits so I don't think it's identical.
+
+As to why I'm on that version, it appears that the updater and something in my environment conspired against me, leaving an old version in my path. I'll fix that now and let you know if I see the issue again.
+"""]]
diff --git a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux.mdwn b/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux.mdwn
deleted file mode 100644
index a2f79aa6c..000000000
--- a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux.mdwn
+++ /dev/null
@@ -1,75 +0,0 @@
-### Please describe the problem.
-
-I am experiencing a weird issue with any install I've had on this one (and only) ArchLinux machine: all of aur/git-annex 4.20130516-1, aur/git-annex-bin-4.20130909-1, aur/git-annex-standalone-4.20130909-1 and a Cabal install just stall when trying to create the initial Git annex repo in the webapp.
-
-When started, it offers me to create the annex in ~/annex/ or ~/Desktop/annex/, where ~ gets turned into /home/USER when I press “Make repository”, but nothing else happens. This is regardless of if that repo exists when I try to create it or start the webapp.
-
-If I start the webapp from an existing annex (now in ~/annex), it seems to work a bit better, but any other remote (SSH) server that I try to add fails. I just get a fleeting Bootstrap message box when I click “Check this server”, and nothing in the logs of eithr git annex webapp or the ssh logs of the server.
-
-If an annex exists, but I start the webapp from another directory, it just behaves as if none were found.
-
-Calls to git annex assistant --autostart complain that "Nothing listed in /home/omehani/.config/git-annex/autostart". I have checked the permissions on that directory, and tried deleting it to let git-annex recreate it, which it did, to no avail.
-
-
-### What steps will reproduce the problem?
-
-Install any of the git-annex packages available from AUR
-
-### What version of git-annex are you using? On what operating system?
-
-* up-to-date ArchLinux, Linux cancey 3.10.10-1-ARCH #1 SMP PREEMPT Fri Aug 30 11:30:06 CEST 2013 x86_64 GNU/Linux
-* aur/git-annex 4.20130516-1, aur/git-annex-bin-4.20130909-1, aur/git-annex-standalone-4.20130909-1 or through Cabal (on 2013-09-12)
-
-### Please provide any additional information below.
-
-The following is the output of webapp --debug. Nothing actually appears when trying to add/edit a repo.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-~/annex (master)$ git annex webapp --debug
-[2013-09-16 10:26:55 EST] read: git ["--git-dir=/home/omehani/annex/.git","--work-tree=/home/omehani/annex","show-ref","git-annex"]
-[2013-09-16 10:26:55 EST] read: git ["--git-dir=/home/omehani/annex/.git","--work-tree=/home/omehani/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-09-16 10:26:55 EST] read: git ["--git-dir=/home/omehani/annex/.git","--work-tree=/home/omehani/annex","log","refs/heads/git-annex..27c891f84f6ea7a10c68c0dd696ab84d88ef0cec","--oneline","-n1"]
-[2013-09-16 10:26:55 EST] read: git ["--git-dir=/home/omehani/annex/.git","--work-tree=/home/omehani/annex","log","refs/heads/git-annex..d0a1cb518045af01b443694aa2cd9af6386de38a","--oneline","-n1"]
-[2013-09-16 10:26:55 EST] read: git ["--git-dir=/home/omehani/annex/.git","--work-tree=/home/omehani/annex","log","refs/heads/git-annex..3ff23e23d74ace008b03143120e84f07e52ed8ee","--oneline","-n1"]
-[2013-09-16 10:26:55 EST] chat: git ["--git-dir=/home/omehani/annex/.git","--work-tree=/home/omehani/annex","cat-file","--batch"]
-[2013-09-16 10:26:55 EST] logging to /home/omehani/annex/.git/annex/daemon.log
-[2013-09-16 10:26:55 EST] logging to /home/omehani/annex/.git/annex/daemon.log
-Launching web browser on file:///home/omehani/annex/.git/annex/webapp.html
-START /usr/lib/firefox/firefox "/home/omehani/annex/.git/annex/webapp.html"
-
-(process:2699): GLib-CRITICAL **: g_slice_set_config: assertion `sys_page_size == 0' failed
-
-
-# End of transcript or log.
-"""]]
-
-Running git annex from a different directory.
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-~$ git annex webapp --debug
-Launching web browser on file:///tmp/webapp3934.html
-START /usr/lib/firefox/firefox "/tmp/webapp3934.html"
-
-(process:4008): GLib-CRITICAL **: g_slice_set_config: assertion `sys_page_size == 0' failed
-
-# End of transcript or log.
-"""]]
-
-Trying the autostart:
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-~$ git annex assistant --autostart --debug
-git-annex: Nothing listed in /home/omehani/.config/git-annex/autostart
-
-
-# End of transcript or log.
-"""]]
-
-> workaround is in place [[done]] --[[Joey]]
diff --git a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_10_ec4a7388ea7106a953f599b664b37f1d._comment b/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_10_ec4a7388ea7106a953f599b664b37f1d._comment
deleted file mode 100644
index b0d0bdd55..000000000
--- a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_10_ec4a7388ea7106a953f599b664b37f1d._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://olivier.mehani.name/"
- nickname="olivier-mehani"
- subject="comment 10"
- date="2013-10-23T03:30:17Z"
- content="""
-Right, I actually have 4.20131023-g9898139. This makes more sense.
-"""]]
diff --git a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_1_6a60c23850a5e2a7bba355e1317abc69._comment b/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_1_6a60c23850a5e2a7bba355e1317abc69._comment
deleted file mode 100644
index ed9ace976..000000000
--- a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_1_6a60c23850a5e2a7bba355e1317abc69._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://olivier.mehani.name/"
- nickname="olivier-mehani"
- subject="comment 1"
- date="2013-09-16T01:27:14Z"
- content="""
-The version with which the following tests were run (installed with Cabal)
-
-[[!format sh \"\"\"
-git-annex version: 4.20130827
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus DNS
-\"\"\"]]
-"""]]
diff --git a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_2_90b6ed232b2917b9fe041532284e1212._comment b/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_2_90b6ed232b2917b9fe041532284e1212._comment
deleted file mode 100644
index 703be9a84..000000000
--- a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_2_90b6ed232b2917b9fe041532284e1212._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.14.105"
- subject="comment 2"
- date="2013-09-19T17:12:39Z"
- content="""
-Please send the content of the file /home/omehani/annex/.git/annex/daemon.log
-
-It would also help if you could better describe what happens. Perhaps make a screenshot?
-"""]]
diff --git a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_3_5a89d79395d96c43d7d8a6fd9dc275f1._comment b/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_3_5a89d79395d96c43d7d8a6fd9dc275f1._comment
deleted file mode 100644
index 39f0f39b8..000000000
--- a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_3_5a89d79395d96c43d7d8a6fd9dc275f1._comment
+++ /dev/null
@@ -1,248 +0,0 @@
-[[!comment format=mdwn
- username="http://olivier.mehani.name/"
- nickname="olivier-mehani"
- subject="comment 3"
- date="2013-09-30T01:29:50Z"
- content="""
-This is when having manually created the local annex, and trying to add a remote one. Surprisingly, I cannot find any reference to the remote server's address or username...
-
- [2013-09-30 11:14:38 EST] main: starting assistant version 4.20130827
- [2013-09-30 11:14:38 EST] read: git [\"--git-dir=/home/USERNAME/annex/.git\",\"--work-tree=/home/USERNAME/annex\",\"show-ref\",\"git-annex\"]
- [2013-09-30 11:14:38 EST] read: xdg-open [\"file:///home/USERNAME/annex/.git/annex/webapp.html\"]
- [2013-09-30 11:14:38 EST] read: git [\"--git-dir=/home/USERNAME/annex/.git\",\"--work-tree=/home/USERNAME/annex\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- [2013-09-30 11:14:38 EST] read: git [\"--git-dir=/home/USERNAME/annex/.git\",\"--work-tree=/home/USERNAME/annex\",\"log\",\"refs/heads/git-annex..9d87789505628a2da8347574cc600e358ff76107\",\"--oneline\",\"-n1\"]
- [2013-09-30 11:14:38 EST] Merger: watching /home/USERNAME/annex/.git/refs
- [2013-09-30 11:14:38 EST] TransferWatcher: watching for transfers
- [2013-09-30 11:14:38 EST] read: git [\"--git-dir=/home/USERNAME/annex/.git\",\"--work-tree=/home/USERNAME/annex\",\"ls-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"preferred-content.log\"]
-
- No known network monitor available through dbus; falling back to polling
- [2013-09-30 11:14:38 EST] read: git [\"--git-dir=/home/USERNAME/annex/.git\",\"--work-tree=/home/USERNAME/annex\",\"ls-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"preferred-content.log\"]
- (scanning...) [2013-09-30 11:14:38 EST] Watcher: Performing startup scan
- [2013-09-30 11:14:38 EST] read: git [\"--git-dir=/home/USERNAME/annex/.git\",\"--work-tree=/home/USERNAME/annex\",\"ls-files\",\"--deleted\",\"-z\",\"--\",\"/home/USERNAME/annex\"]
- (started...) [2013-09-30 11:14:38 EST] Watcher: watching .
- [2013-09-30 11:14:38 EST] MountWatcher: Started DBUS service org.gtk.Private.UDisks2VolumeMonitor to monitor mount events.
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET / Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] read: git [\"--git-dir=/home/USERNAME/annex/.git\",\"--work-tree=/home/USERNAME/annex\",\"show-ref\",\"git-annex\"]
- [2013-09-30 11:14:39 EST] read: git [\"--git-dir=/home/USERNAME/annex/.git\",\"--work-tree=/home/USERNAME/annex\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- [2013-09-30 11:14:39 EST] read: git [\"--git-dir=/home/USERNAME/annex/.git\",\"--work-tree=/home/USERNAME/annex\",\"log\",\"refs/heads/git-annex..9d87789505628a2da8347574cc600e358ff76107\",\"--oneline\",\"-n1\"]
- [2013-09-30 11:14:39 EST] chat: git [\"--git-dir=/home/USERNAME/annex/.git\",\"--work-tree=/home/USERNAME/annex\",\"cat-file\",\"--batch\"]
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /static/css/bootstrap.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /static/css/bootstrap-responsive.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /static/jquery.full.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /static/js/bootstrap-dropdown.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /static/js/bootstrap-modal.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /static/js/bootstrap-collapse.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /static/longpolling.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /static/jquery.ui.core.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /static/jquery.ui.widget.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /static/jquery.ui.mouse.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /static/jquery.ui.sortable.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /static/img/glyphicons-halflings-white.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /static/img/glyphicons-halflings.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /notifier/sidebar Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /notifier/repolist/RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True,%20nudgeAddMore%20=%20True%7D Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /notifier/transfers Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /static/favicon.ico Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /sidebar/NotificationId%200 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /repolist/RepoListNotificationId%20(NotificationId%200)%20(RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True,%20nudgeAddMore%20=%20True%7D) Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:39 EST] 127.0.0.1 GET /repolist/RepoListNotificationId%20(NotificationId%200)%20(RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True,%20nudgeAddMore%20=%20True%7D) Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:40 EST] 127.0.0.1 GET /sidebar/NotificationId%200 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:40 EST] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:40 EST] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:40 EST] 127.0.0.1 GET /static/favicon.ico Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:14:40 EST] 127.0.0.1 GET /static/favicon.ico Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:16 EST] 127.0.0.1 GET /config Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:16 EST] 127.0.0.1 GET /sidebar/NotificationId%200 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:16 EST] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:16 EST] 127.0.0.1 GET /repolist/RepoListNotificationId%20(NotificationId%200)%20(RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True,%20nudgeAddMore%20=%20True%7D) Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:16 EST] 127.0.0.1 GET /static/css/bootstrap.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:16 EST] 127.0.0.1 GET /static/css/bootstrap-responsive.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:16 EST] 127.0.0.1 GET /static/jquery.full.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:16 EST] 127.0.0.1 GET /static/js/bootstrap-dropdown.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:16 EST] 127.0.0.1 GET /static/js/bootstrap-modal.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:16 EST] 127.0.0.1 GET /static/js/bootstrap-collapse.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:16 EST] 127.0.0.1 GET /static/longpolling.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:16 EST] 127.0.0.1 GET /static/img/glyphicons-halflings-white.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:16 EST] 127.0.0.1 GET /static/img/glyphicons-halflings.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:16 EST] 127.0.0.1 GET /notifier/sidebar Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:17 EST] 127.0.0.1 GET /sidebar/NotificationId%201 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:17 EST] 127.0.0.1 GET /static/favicon.ico Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:17 EST] 127.0.0.1 GET /sidebar/NotificationId%201 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:19 EST] 127.0.0.1 GET /config/addrepository Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:19 EST] 127.0.0.1 GET /static/css/bootstrap.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:19 EST] 127.0.0.1 GET /static/css/bootstrap-responsive.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:19 EST] 127.0.0.1 GET /static/jquery.full.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:19 EST] 127.0.0.1 GET /static/js/bootstrap-dropdown.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:19 EST] 127.0.0.1 GET /static/js/bootstrap-modal.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:19 EST] 127.0.0.1 GET /static/js/bootstrap-collapse.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:19 EST] 127.0.0.1 GET /static/longpolling.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:19 EST] 127.0.0.1 GET /static/jquery.ui.core.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:19 EST] 127.0.0.1 GET /static/jquery.ui.widget.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:19 EST] 127.0.0.1 GET /static/jquery.ui.mouse.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:19 EST] 127.0.0.1 GET /static/jquery.ui.sortable.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:19 EST] 127.0.0.1 GET /static/img/glyphicons-halflings.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:19 EST] 127.0.0.1 GET /static/img/glyphicons-halflings-white.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:19 EST] 127.0.0.1 GET /notifier/sidebar Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:19 EST] 127.0.0.1 GET /notifier/repolist/RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True,%20nudgeAddMore%20=%20False%7D Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:20 EST] 127.0.0.1 GET /sidebar/NotificationId%202 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:20 EST] 127.0.0.1 GET /repolist/RepoListNotificationId%20(NotificationId%201)%20(RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True,%20nudgeAddMore%20=%20False%7D) Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:20 EST] 127.0.0.1 GET /repolist/RepoListNotificationId%20(NotificationId%201)%20(RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True,%20nudgeAddMore%20=%20False%7D) Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:20 EST] 127.0.0.1 GET /static/favicon.ico Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:20 EST] 127.0.0.1 GET /sidebar/NotificationId%202 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:31 EST] 127.0.0.1 GET /config/repository/add/ssh Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:31 EST] 127.0.0.1 GET /repolist/RepoListNotificationId%20(NotificationId%201)%20(RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True,%20nudgeAddMore%20=%20False%7D) Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:31 EST] 127.0.0.1 GET /sidebar/NotificationId%202 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:31 EST] 127.0.0.1 GET /static/css/bootstrap.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:31 EST] 127.0.0.1 GET /static/css/bootstrap-responsive.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:31 EST] 127.0.0.1 GET /static/js/bootstrap-dropdown.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:31 EST] 127.0.0.1 GET /static/jquery.full.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:31 EST] 127.0.0.1 GET /static/js/bootstrap-modal.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:31 EST] 127.0.0.1 GET /static/js/bootstrap-collapse.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:31 EST] 127.0.0.1 GET /static/longpolling.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:32 EST] 127.0.0.1 GET /static/img/glyphicons-halflings-white.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:32 EST] 127.0.0.1 GET /static/img/glyphicons-halflings.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:32 EST] 127.0.0.1 GET /notifier/sidebar Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:32 EST] 127.0.0.1 GET /sidebar/NotificationId%203 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:32 EST] 127.0.0.1 GET /static/favicon.ico Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:32 EST] 127.0.0.1 GET /sidebar/NotificationId%203 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET / Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /static/css/bootstrap.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /static/css/bootstrap-responsive.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /static/jquery.full.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /static/js/bootstrap-dropdown.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /static/js/bootstrap-modal.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /static/js/bootstrap-collapse.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /static/longpolling.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /static/jquery.ui.core.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /static/jquery.ui.widget.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /static/jquery.ui.mouse.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /static/jquery.ui.sortable.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /static/img/glyphicons-halflings-white.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /static/img/glyphicons-halflings.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /notifier/sidebar Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /notifier/repolist/RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True,%20nudgeAddMore%20=%20True%7D Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /notifier/transfers Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /static/favicon.ico Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /sidebar/NotificationId%204 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /repolist/RepoListNotificationId%20(NotificationId%202)%20(RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True,%20nudgeAddMore%20=%20True%7D) Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /transfers/NotificationId%202 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /repolist/RepoListNotificationId%20(NotificationId%202)%20(RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True,%20nudgeAddMore%20=%20True%7D) Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /transfers/NotificationId%202 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:37 EST] 127.0.0.1 GET /sidebar/NotificationId%204 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:47 EST] 127.0.0.1 GET /about Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:47 EST] 127.0.0.1 GET /sidebar/NotificationId%204 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:47 EST] 127.0.0.1 GET /transfers/NotificationId%202 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:47 EST] 127.0.0.1 GET /repolist/RepoListNotificationId%20(NotificationId%202)%20(RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True,%20nudgeAddMore%20=%20True%7D) Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:47 EST] 127.0.0.1 GET /static/css/bootstrap.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:47 EST] 127.0.0.1 GET /static/css/bootstrap-responsive.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:47 EST] 127.0.0.1 GET /static/jquery.full.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:47 EST] 127.0.0.1 GET /static/js/bootstrap-dropdown.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:47 EST] 127.0.0.1 GET /static/js/bootstrap-modal.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:47 EST] 127.0.0.1 GET /static/js/bootstrap-collapse.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:47 EST] 127.0.0.1 GET /static/longpolling.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:47 EST] 127.0.0.1 GET /static/img/glyphicons-halflings-white.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:47 EST] 127.0.0.1 GET /static/img/glyphicons-halflings.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:47 EST] 127.0.0.1 GET /notifier/sidebar Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:47 EST] 127.0.0.1 GET /sidebar/NotificationId%205 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:47 EST] 127.0.0.1 GET /static/favicon.ico Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:47 EST] 127.0.0.1 GET /sidebar/NotificationId%205 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:50 EST] 127.0.0.1 GET /config Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:50 EST] 127.0.0.1 GET /static/css/bootstrap.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:50 EST] 127.0.0.1 GET /static/css/bootstrap-responsive.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:50 EST] 127.0.0.1 GET /static/jquery.full.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:50 EST] 127.0.0.1 GET /static/js/bootstrap-dropdown.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:50 EST] 127.0.0.1 GET /static/js/bootstrap-modal.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:50 EST] 127.0.0.1 GET /static/js/bootstrap-collapse.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:50 EST] 127.0.0.1 GET /static/longpolling.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:50 EST] 127.0.0.1 GET /static/img/glyphicons-halflings-white.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:50 EST] 127.0.0.1 GET /static/img/glyphicons-halflings.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:50 EST] 127.0.0.1 GET /notifier/sidebar Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:50 EST] 127.0.0.1 GET /sidebar/NotificationId%206 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:50 EST] 127.0.0.1 GET /static/favicon.ico Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:50 EST] 127.0.0.1 GET /sidebar/NotificationId%206 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /config/addrepository Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /static/css/bootstrap.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /static/css/bootstrap-responsive.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /static/jquery.full.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /static/js/bootstrap-dropdown.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /static/js/bootstrap-modal.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /static/js/bootstrap-collapse.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /static/longpolling.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /static/jquery.ui.widget.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /static/jquery.ui.mouse.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /static/jquery.ui.core.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /static/jquery.ui.sortable.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /static/favicon.ico Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /static/img/glyphicons-halflings.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /static/img/glyphicons-halflings-white.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /notifier/sidebar Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /notifier/repolist/RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True,%20nudgeAddMore%20=%20False%7D Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /repolist/RepoListNotificationId%20(NotificationId%203)%20(RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True,%20nudgeAddMore%20=%20False%7D) Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /sidebar/NotificationId%207 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:51 EST] 127.0.0.1 GET /repolist/RepoListNotificationId%20(NotificationId%203)%20(RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True,%20nudgeAddMore%20=%20False%7D) Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:52 EST] 127.0.0.1 GET /sidebar/NotificationId%207 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:56 EST] 127.0.0.1 GET /config/repository/add/ssh Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:56 EST] 127.0.0.1 GET /repolist/RepoListNotificationId%20(NotificationId%203)%20(RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True,%20nudgeAddMore%20=%20False%7D) Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:56 EST] 127.0.0.1 GET /sidebar/NotificationId%207 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:56 EST] 127.0.0.1 GET /static/css/bootstrap-responsive.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:56 EST] 127.0.0.1 GET /static/css/bootstrap.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:56 EST] 127.0.0.1 GET /static/jquery.full.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:56 EST] 127.0.0.1 GET /static/js/bootstrap-dropdown.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:56 EST] 127.0.0.1 GET /static/js/bootstrap-modal.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:56 EST] 127.0.0.1 GET /static/js/bootstrap-collapse.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:56 EST] 127.0.0.1 GET /static/longpolling.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:56 EST] 127.0.0.1 GET /static/favicon.ico Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:56 EST] 127.0.0.1 GET /static/img/glyphicons-halflings-white.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:56 EST] 127.0.0.1 GET /static/img/glyphicons-halflings.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:56 EST] 127.0.0.1 GET /notifier/sidebar Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:56 EST] 127.0.0.1 GET /sidebar/NotificationId%208 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:15:56 EST] 127.0.0.1 GET /sidebar/NotificationId%208 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:23 EST] 127.0.0.1 POST /config/repository/add/ssh Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:23 EST] 127.0.0.1 GET /sidebar/NotificationId%208 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:23 EST] 127.0.0.1 GET /static/css/bootstrap.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:23 EST] 127.0.0.1 GET /static/css/bootstrap-responsive.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:23 EST] 127.0.0.1 GET /static/js/bootstrap-collapse.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:23 EST] 127.0.0.1 GET /static/jquery.full.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:23 EST] 127.0.0.1 GET /static/js/bootstrap-dropdown.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:23 EST] 127.0.0.1 GET /static/js/bootstrap-modal.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:23 EST] 127.0.0.1 GET /static/longpolling.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:23 EST] 127.0.0.1 GET /static/favicon.ico Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:23 EST] 127.0.0.1 GET /static/img/glyphicons-halflings-white.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:23 EST] 127.0.0.1 GET /static/img/glyphicons-halflings.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:23 EST] 127.0.0.1 GET /notifier/sidebar Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:23 EST] 127.0.0.1 GET /sidebar/NotificationId%209 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:23 EST] 127.0.0.1 GET /sidebar/NotificationId%209 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:44 EST] 127.0.0.1 POST /config/repository/add/ssh Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:44 EST] 127.0.0.1 GET /sidebar/NotificationId%209 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:44 EST] 127.0.0.1 GET /static/css/bootstrap-responsive.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:44 EST] 127.0.0.1 GET /static/css/bootstrap.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:44 EST] 127.0.0.1 GET /static/jquery.full.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:44 EST] 127.0.0.1 GET /static/js/bootstrap-dropdown.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:44 EST] 127.0.0.1 GET /static/js/bootstrap-modal.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:44 EST] 127.0.0.1 GET /static/js/bootstrap-collapse.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:44 EST] 127.0.0.1 GET /static/longpolling.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:44 EST] 127.0.0.1 GET /static/favicon.ico Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:44 EST] 127.0.0.1 GET /static/img/glyphicons-halflings.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:44 EST] 127.0.0.1 GET /static/img/glyphicons-halflings-white.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:44 EST] 127.0.0.1 GET /notifier/sidebar Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:45 EST] 127.0.0.1 GET /sidebar/NotificationId%2010 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:16:45 EST] 127.0.0.1 GET /sidebar/NotificationId%2010 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:17:01 EST] 127.0.0.1 GET /shutdown Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:17:01 EST] 127.0.0.1 GET /static/css/bootstrap.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:17:01 EST] 127.0.0.1 GET /static/css/bootstrap-responsive.css Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:17:01 EST] 127.0.0.1 GET /static/jquery.full.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:17:01 EST] 127.0.0.1 GET /static/js/bootstrap-dropdown.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:17:01 EST] 127.0.0.1 GET /static/js/bootstrap-modal.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:17:01 EST] 127.0.0.1 GET /static/js/bootstrap-collapse.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:17:01 EST] 127.0.0.1 GET /static/longpolling.js Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:17:01 EST] 127.0.0.1 GET /static/img/glyphicons-halflings.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:17:01 EST] 127.0.0.1 GET /static/img/glyphicons-halflings-white.png Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:17:01 EST] 127.0.0.1 GET /notifier/sidebar Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:17:01 EST] 127.0.0.1 GET /sidebar/NotificationId%2011 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:17:01 EST] 127.0.0.1 GET /sidebar/NotificationId%2011 Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
- [2013-09-30 11:17:02 EST] 127.0.0.1 GET /static/favicon.ico Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
-
-
-"""]]
diff --git a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_4_cdd26c71875428dbe3c100944a443d3f._comment b/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_4_cdd26c71875428dbe3c100944a443d3f._comment
deleted file mode 100644
index 4ee062a80..000000000
--- a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_4_cdd26c71875428dbe3c100944a443d3f._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://olivier.mehani.name/"
- nickname="olivier-mehani"
- subject="comment 4"
- date="2013-09-30T01:31:26Z"
- content="""
-Hum, I'm not allowed to upload images:
- git-annex-webapp1.png prohibited by allowed_attachments (user is not an admin)
-"""]]
diff --git a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_5_76242f5d6c815acd5bd58213bd8bb0fe._comment b/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_5_76242f5d6c815acd5bd58213bd8bb0fe._comment
deleted file mode 100644
index 28a0f7cc4..000000000
--- a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_5_76242f5d6c815acd5bd58213bd8bb0fe._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.8.80"
- subject="comment 5"
- date="2013-09-30T16:13:20Z"
- content="""
-I see a lot of activity, which looks like you started up the webapp and it ran displaying stuff for some minutes. I see that you clicked on pages to eg, add a ssh repository.
-
-So, what then do you mean by saying it stalls? You have still not described whatever problem you are having.
-"""]]
diff --git a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_6_10852171c0207ca61ea6df1082107353._comment b/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_6_10852171c0207ca61ea6df1082107353._comment
deleted file mode 100644
index 452a898f6..000000000
--- a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_6_10852171c0207ca61ea6df1082107353._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://olivier.mehani.name/"
- nickname="olivier-mehani"
- subject="comment 6"
- date="2013-10-04T05:14:16Z"
- content="""
-Right. By “it stalls”, I mean I get redirected to the same dialog page (either the one asking for the path to the repo to create, or the one asking for the details of the remote to add) that I just validated, rather than going further in the process.
-"""]]
diff --git a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_7_73e8a5696709f8154e63693ba5e569c3._comment b/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_7_73e8a5696709f8154e63693ba5e569c3._comment
deleted file mode 100644
index b6df85923..000000000
--- a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_7_73e8a5696709f8154e63693ba5e569c3._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="64.134.31.139"
- subject="comment 7"
- date="2013-10-14T16:18:01Z"
- content="""
-I just ran into this problem myself. Some investigating shows it is a problem with Yesod's XSRF token. Apparently yesod is not seeing the _token, or is seeing one it does not like. However, I verified in chromium inspector that the form post was including the token with the same value used on the page. Also, it would intermittently accept the form, if I kept posting it over and over again.
-
-It seems this must be a bug in yesod, or on something with how I'm using yesod, or possibly in deeper layers like WAI not seeing the form post include the token, but I have not been able to figure out what. As a workaround, since git-annex webapp does its own authentication and only listens to localhost, and so does not actually need XSRF protection, I am going to change it to bypass that.
-"""]]
diff --git a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_8_392fc344e5833b0eb665fcd38f956b7a._comment b/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_8_392fc344e5833b0eb665fcd38f956b7a._comment
deleted file mode 100644
index 37acd5e9a..000000000
--- a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_8_392fc344e5833b0eb665fcd38f956b7a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://olivier.mehani.name/"
- nickname="olivier-mehani"
- subject="comment 8"
- date="2013-10-23T03:00:58Z"
- content="""
-I just tried installing git-annex using Cabal today, but only got git-annex-4.20131002, even from source, which seems to predate your last comment, and no other branch seem to provide the yesod fix. Should I get the source from somewhere else than kitenet to try this out (if you think it is in shape to be tested)?
-"""]]
diff --git a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_9_9f0fc19a7fcaf7a5827e59e1495cf8c9._comment b/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_9_9f0fc19a7fcaf7a5827e59e1495cf8c9._comment
deleted file mode 100644
index 1e7aa897b..000000000
--- a/doc/bugs/Assistant_stalls_when_adding__47__creating_repo_on_ArchLinux/comment_9_9f0fc19a7fcaf7a5827e59e1495cf8c9._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://olivier.mehani.name/"
- nickname="olivier-mehani"
- subject="comment 9"
- date="2013-10-23T03:03:30Z"
- content="""
-Strike that. It actually works. I could create the ~/annex store, and adding a remote also seems to work (I'm on a hotel Wi-Fi at the moment, so I fear the ssh connection will fail, but nothing to do with git-annex).
-"""]]
diff --git a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor.mdwn b/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor.mdwn
deleted file mode 100644
index c8110eaa0..000000000
--- a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor.mdwn
+++ /dev/null
@@ -1,28 +0,0 @@
-### What steps will reproduce the problem?
-
-Run `git annex assistant`.
-
-
-### What is the expected output? What do you see instead?
-
-git-annex complains:
-
- dbus failed; falling back to mtab polling (ClientError {clientErrorMessage =
- "Call failed: The name org.gtk.Private.GduVolumeMonitor was not provided
- by any .service files", clientErrorFatal = False})
-
-This is because the `gvfs-gdu-volume-monitor` daemon has been obsoleted and removed from GNOME 3.6 (maybe even earlier).
-
-git-annex should start using `gvfs-udisks2-volume-monitor` at bus name `org.gtk.Private.UDisks2VolumeMonitor`.
-
-Alternatively, git-annex should stop relying on any per-user services, and use kernel interfaces directly when available. (This way, monitoring could work even if the user wasn't logged in and/or didn't have a DBus session bus.)
-
- * On all Linux kernels since 2.6.15, the `/proc/self/mounts` file is pollable – you can use **select(), poll() or epoll** to detect new mounted filesystems, without having to rely on periodic checks. (Run `findmnt -p` to see it in action.)
-
- * On BSD systems, kqueue on `/etc/mtab`.
-
-### What version of git-annex are you using? On what operating system?
-
-git-annex 3.20130102 on Linux 3.7.1, GNOME 3.7
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_10_0e1db417a5815ea903c1f7ccd07308c4._comment b/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_10_0e1db417a5815ea903c1f7ccd07308c4._comment
deleted file mode 100644
index 37e2613a2..000000000
--- a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_10_0e1db417a5815ea903c1f7ccd07308c4._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://nullroute.eu.org/~grawity/"
- nickname="Mantas"
- subject="comment 10"
- date="2013-01-10T21:51:29Z"
- content="""
-Works now.
-"""]]
diff --git a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_1_28b0cfcba8902c9c16dbe6c4b07984c4._comment b/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_1_28b0cfcba8902c9c16dbe6c4b07984c4._comment
deleted file mode 100644
index fa71012d2..000000000
--- a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_1_28b0cfcba8902c9c16dbe6c4b07984c4._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="comment 1"
- date="2013-01-10T17:28:30Z"
- content="""
-Thanks, excellent info.
-
-Any chance you could provide dbus-monitor output for the events generated by org.gtk.Private.UDisks2VolumeMonitor when a volume is mounted, and unmounted?
-"""]]
diff --git a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_2_952b3f78da756ff5f89235db94bec67f._comment b/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_2_952b3f78da756ff5f89235db94bec67f._comment
deleted file mode 100644
index 2db95f8af..000000000
--- a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_2_952b3f78da756ff5f89235db94bec67f._comment
+++ /dev/null
@@ -1,53 +0,0 @@
-[[!comment format=mdwn
- username="http://nullroute.eu.org/~grawity/"
- nickname="Mantas"
- subject="comment 2"
- date="2013-01-10T17:38:47Z"
- content="""
-When mounted:
-
-<pre>
-signal path=/org/gtk/Private/RemoteVolumeMonitor; interface=org.gtk.Private.RemoteVolumeMonitor; member=MountAdded
- string \"org.gtk.Private.UDisks2VolumeMonitor\"
- string \"0x1971ab0\"
- struct {
- string \"0x1971ab0\"
- string \"grawpqi\"
- string \". GThemedIcon media-removable media\"
- string \". GThemedIcon media-removable-symbolic media-removable media\"
- string \"\"
- string \"file:///run/media/grawity/grawpqi\"
- boolean true
- string \"0x18f4e50\"
- array [
- ]
- string \"gvfs.time_detected_usec.1357838999510252\"
- array [
- ]
- }
-</pre>
-
-When unmounted:
-
-<pre>
-signal path=/org/gtk/Private/RemoteVolumeMonitor; interface=org.gtk.Private.RemoteVolumeMonitor; member=MountRemoved
- string \"org.gtk.Private.UDisks2VolumeMonitor\"
- string \"0x1971910\"
- struct {
- string \"0x1971910\"
- string \"grawpqi\"
- string \". GThemedIcon media-removable media\"
- string \". GThemedIcon media-removable-symbolic media-removable media\"
- string \"\"
- string \"file:///run/media/grawity/grawpqi\"
- boolean true
- string \"\"
- array [
- ]
- string \"gvfs.time_detected_usec.1357839107487969\"
- array [
- ]
- }
-</pre>
-
-"""]]
diff --git a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_3_d86aba42d014c4b4f708dcb5fe86e055._comment b/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_3_d86aba42d014c4b4f708dcb5fe86e055._comment
deleted file mode 100644
index 6256086c7..000000000
--- a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_3_d86aba42d014c4b4f708dcb5fe86e055._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="comment 3"
- date="2013-01-10T19:08:50Z"
- content="""
-I've just committed support for using the new name. I've not been able to test it yet, as I don't have a new enough gnome here. Any testing you can do much appreciated.
-
-Leaving this bug open until it gets tested, and also because it's certainly appealing to just use poll rather than this fragile dbus stuff. And in any case, should add OSX support.
-"""]]
diff --git a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_4_9aaf296ef53da317d6dc6728705d5c56._comment b/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_4_9aaf296ef53da317d6dc6728705d5c56._comment
deleted file mode 100644
index 6df6f40f2..000000000
--- a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_4_9aaf296ef53da317d6dc6728705d5c56._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://nullroute.eu.org/~grawity/"
- nickname="Mantas"
- subject="comment 4"
- date="2013-01-10T19:41:22Z"
- content="""
-I'm getting:
-
- dbus failed; falling back to mtab polling (ClientError {clientErrorMessage =
- \"Call failed: The name org.gtk.Private.RemoteVolumeMonitor was not provided
- by any .service files\", clientErrorFatal = False})
-
-The volume monitor's bus name should be `org.gtk.Private.UDisks2VolumeMonitor`.
-
-`org.gtk.Private.RemoteVolumeMonitor` is the interface name, which all Gvfs monitors implement.
-"""]]
diff --git a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_5_0d5f8a05a1505660f7ff1bc4ac6ff271._comment b/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_5_0d5f8a05a1505660f7ff1bc4ac6ff271._comment
deleted file mode 100644
index 22b1d923c..000000000
--- a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_5_0d5f8a05a1505660f7ff1bc4ac6ff271._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="oops.."
- date="2013-01-10T20:09:56Z"
- content="""
-Think I have the right name in there now.
-"""]]
diff --git a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_6_3dfdfd49597c85575cb689adb70d2de6._comment b/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_6_3dfdfd49597c85575cb689adb70d2de6._comment
deleted file mode 100644
index 3320b77da..000000000
--- a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_6_3dfdfd49597c85575cb689adb70d2de6._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://nullroute.eu.org/~grawity/"
- nickname="Mantas"
- subject="comment 6"
- date="2013-01-10T20:13:42Z"
- content="""
-It doesn't look completely right – the *service* name (in `checkMountMonitor`) is `org.gtk.Private.UDisks2VolumeMonitor`, but the *interface* name (in `mountChanged`) is `org.gtk.Private.RemoteVolumeMonitor`, so the fix changed too much.
-"""]]
diff --git a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_7_943a446c60ed9d7d4f240ba7f00fe925._comment b/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_7_943a446c60ed9d7d4f240ba7f00fe925._comment
deleted file mode 100644
index 8f0cd64cc..000000000
--- a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_7_943a446c60ed9d7d4f240ba7f00fe925._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="been a while.."
- date="2013-01-10T20:19:33Z"
- content="""
-Think I have it now.
-"""]]
diff --git a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_8_9563859850fb40b1cc2c20c516c12960._comment b/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_8_9563859850fb40b1cc2c20c516c12960._comment
deleted file mode 100644
index 0a3ae95a7..000000000
--- a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_8_9563859850fb40b1cc2c20c516c12960._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://nullroute.eu.org/~grawity/"
- nickname="Mantas"
- subject="build failure"
- date="2013-01-10T20:24:09Z"
- content="""
-<pre>
-$ cabal build
-Building git-annex-3.20130108...
-Preprocessing executable 'git-annex' for git-annex-3.20130108...
-[269 of 299] Compiling Assistant.Threads.MountWatcher ( Assistant/Threads/MountWatcher.hs,
- dist/build/git-annex/git-annex-tmp/Assistant/Threads/MountWatcher.o )
-
-Assistant/Threads/MountWatcher.hs:122:17: Not in scope: `gvfs'
-</pre>
-"""]]
diff --git a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_9_cf6221c585ee3dbf039bdaea71842d9b._comment b/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_9_cf6221c585ee3dbf039bdaea71842d9b._comment
deleted file mode 100644
index b5b66b8ea..000000000
--- a/doc/bugs/Assistant_uses_obsolete_GDU_volume_monitor/comment_9_cf6221c585ee3dbf039bdaea71842d9b._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="comment 9"
- date="2013-01-10T20:44:37Z"
- content="""
-Realized that'd happen while away on a walk.. fixed now.
-
-"""]]
diff --git a/doc/bugs/Attempting_to_repair_repository_almost_every_day.mdwn b/doc/bugs/Attempting_to_repair_repository_almost_every_day.mdwn
new file mode 100644
index 000000000..6925606f0
--- /dev/null
+++ b/doc/bugs/Attempting_to_repair_repository_almost_every_day.mdwn
@@ -0,0 +1,5 @@
+I'm using the webapp on my two main computers with up-to-date Debian (one has testing and the other one sid) and I have consistency checks scheduled every day.
+
+The problem is that almost every time the check runs I'm getting the "Attempting to repair" message and git-annex starts using 100% CPU for quite a while, but after it it seams to have done no change to the git tree or the files.
+
+The two computers are never on at the same time, but they are constantly syncing files (through box.com), I don't now if downloading files while the check is in progress might have something to do.
diff --git a/doc/bugs/Auto-repair_greatly_slows_down_the_machine.mdwn b/doc/bugs/Auto-repair_greatly_slows_down_the_machine.mdwn
index 58d436898..6c1420e54 100644
--- a/doc/bugs/Auto-repair_greatly_slows_down_the_machine.mdwn
+++ b/doc/bugs/Auto-repair_greatly_slows_down_the_machine.mdwn
@@ -17,3 +17,5 @@ This is on an up-to-date Arch Linux. It also happened on Fedora 20.
The daemon.log is fairly long, but not particulary interesting: [[https://ssl.zerodogg.org/~zerodogg/private/tmp/daemon.log-2014-02-25.1]]
The «resource vanished (Broken pipe)» at the end is the result of me killing the prune-packed in order to be able to use the machine again.
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_10_d46c6314bff75a0ae679bc2358b28c2b._comment b/doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_10_d46c6314bff75a0ae679bc2358b28c2b._comment
new file mode 100644
index 000000000..5fb031e25
--- /dev/null
+++ b/doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_10_d46c6314bff75a0ae679bc2358b28c2b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="EskildHustvedt"
+ ip="80.202.103.55"
+ subject="comment 10"
+ date="2014-06-07T05:47:25Z"
+ content="""
+Given that it's ususally the same repo, I'm going to try to create a completely fresh repository instead and see if the frequent auto-repairs are stopped by that.
+"""]]
diff --git a/doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_11_1c2c3adfbccd2b14a7d1c4618800e735._comment b/doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_11_1c2c3adfbccd2b14a7d1c4618800e735._comment
new file mode 100644
index 000000000..904ec92f5
--- /dev/null
+++ b/doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_11_1c2c3adfbccd2b14a7d1c4618800e735._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 11"
+ date="2014-06-10T19:31:38Z"
+ content="""
+Disable consistency checks for the repo in the webapp UI, wait until long enough that you're sure the assistant would be wanting to repair it again if you hadn't disabled that, and run `git annex repair` at the console so I can see what's going on.
+"""]]
diff --git a/doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_7_4649fa11745ff668e43833209811d005._comment b/doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_7_4649fa11745ff668e43833209811d005._comment
new file mode 100644
index 000000000..58499da8b
--- /dev/null
+++ b/doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_7_4649fa11745ff668e43833209811d005._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.3"
+ subject="comment 7"
+ date="2014-05-21T18:31:54Z"
+ content="""
+It seems to me that if you don't want to repair your repository, you can just go into the webapp and disable all scheduled consistency check jobs.
+
+If someone with this problem would like to run \"git annex repair\" at the console, and paste the output, perhaps I could then see why it thinks it needs to repair the repository. So far, I have nothing to go on, and no proof that this is a bug at all, and not just people with actually corrupted repositories that really do need to be repaired.
+"""]]
diff --git a/doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_8_6138a48f0b7e8be2bb66430397afdf5a._comment b/doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_8_6138a48f0b7e8be2bb66430397afdf5a._comment
new file mode 100644
index 000000000..33944ac27
--- /dev/null
+++ b/doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_8_6138a48f0b7e8be2bb66430397afdf5a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="EskildHustvedt"
+ ip="80.202.103.55"
+ subject="comment 8"
+ date="2014-05-21T19:19:30Z"
+ content="""
+The trouble with providing more information (outside of the logfile above) is that by the time I realize that there is a problem it is because git-annex has started to repair. Perhaps an option that makes git-annex write a ~/.git/annex/repair-reason.log file with the reason (ie. git fsck output etc.) for starting the repair could help?
+"""]]
diff --git a/doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_9_3da5940bb2e9689b00239eec9a073f1c._comment b/doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_9_3da5940bb2e9689b00239eec9a073f1c._comment
new file mode 100644
index 000000000..8bea236ed
--- /dev/null
+++ b/doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_9_3da5940bb2e9689b00239eec9a073f1c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="EskildHustvedt"
+ ip="80.202.103.55"
+ subject="comment 9"
+ date="2014-06-06T16:13:55Z"
+ content="""
+Any chance of any progress on this? Either a way to disable it, or some additional logging to track down the problem? git-annex is currently repairing one particular repository several times a month accross different machines, rendering git-annex practically unusable.
+"""]]
diff --git a/doc/bugs/Auto_update_not_updating_to_newest_version.mdwn b/doc/bugs/Auto_update_not_updating_to_newest_version.mdwn
deleted file mode 100644
index c47f91de9..000000000
--- a/doc/bugs/Auto_update_not_updating_to_newest_version.mdwn
+++ /dev/null
@@ -1,70 +0,0 @@
-### Please describe the problem.
-
-I assume this is an assistant problem.
-
-My git-annex version on Mac OS seems to lag significantly behind current releases. I was today informed that it was updated to 5.20131221-g00d1673. Given that there are at least two newer versions I expected it to be updated to the newest one.
-
-There also seems no way to trigger a check for a new version.
-
-### What steps will reproduce the problem?
-
-Install on Mac. Observe over some days and see it not update.
-
-
-### What version of git-annex are you using? On what operating system?
-
-5.20131221-g00d1673,
-Mac OS
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-[2014-01-10 14:46:44 CET] main: starting assistant version 5.20131221-g00d1673
-[2014-01-10 14:46:44 CET] UpgradeWatcher: Finished upgrading git-annex to version 5.20131221-g00d1673
-(scanning...) [2014-01-10 14:46:44 CET] Watcher: Performing startup scan
-(started...) [2014-01-10 14:47:02 CET] main: starting assistant version 5.20131221-g00d1673
-(scanning...) [2014-01-10 14:47:02 CET] Watcher: Performing startup scan
-(started...)
-[2014-01-10 14:48:44 CET] main: starting assistant version 5.20131221-g00d1673
-(scanning...) [2014-01-10 14:48:44 CET] Watcher: Performing startup scan
-(started...)
-[2014-01-10 14:49:35 CET] main: starting assistant version 5.20131221-g00d1673
-(scanning...) [2014-01-10 14:49:35 CET] Watcher: Performing startup scan
-(started...) [2014-01-10 14:52:44 CET] UpgradeWatcher: Upgrading git-annex
-
-[2014-01-10 14:52:44 CET] main: starting assistant version 5.20131221-g00d1673
-[2014-01-10 14:52:44 CET] UpgradeWatcher: Finished upgrading git-annex to version 5.20131221-g00d1673
-(scanning...) [2014-01-10 14:52:45 CET] Watcher: Performing startup scan
-(started...) [2014-01-10 14:53:13 CET] main: starting assistant version 5.20131221-g00d1673
-(scanning...) [2014-01-10 14:53:13 CET] Watcher: Performing startup scan
-(started...)
-[2014-01-15 15:22:29 CET] main: starting assistant version 5.20131221-g00d1673
-[2014-01-15 15:22:30 CET] Cronner: Consistency check in progress
-(scanning...) [2014-01-15 15:22:30 CET] Watcher: Performing startup scan
-(started...)
-(scanning...) [2014-01-15 15:23:05 CET] Watcher: Performing startup scan
-[2014-01-15 15:23:05 CET] Committer: Committing changes to git
-(Recording state in git...)
-(started...) [2014-01-15 15:23:06 CET] main: Syncing with box.com
-
-[2014-01-15 15:23:28 CET] main: starting assistant version 5.20131221-g00d1673
-(scanning...) [2014-01-15 15:23:28 CET] Watcher: Performing startup scan
-(started...) [2014-01-15 16:23:30 CET] NetWatcherFallback: Syncing with box.com
-[2014-01-15 17:23:31 CET] NetWatcherFallback: Syncing with box.com
-[2014-01-15 18:23:32 CET] NetWatcherFallback: Syncing with box.com
-[2014-01-16 16:42:15 CET] NetWatcherFallback: Syncing with box.com
-[2014-01-16 16:56:33 CET] UpgradeWatcher: Upgrading git-annex
-
-[2014-01-16 16:56:33 CET] main: starting assistant version 5.20131221-g00d1673
-[2014-01-16 16:56:33 CET] Cronner: Consistency check in progress
-[2014-01-16 16:56:33 CET] UpgradeWatcher: Finished upgrading git-annex to version 5.20131221-g00d1673
-(scanning...) [2014-01-16 16:56:33 CET] Watcher: Performing startup scan
-(started...) fsck dvi2bitmap ok
-[2014-01-16 16:58:14 CET] main: starting assistant version 5.20131221-g00d1673
-(scanning...) [2014-01-16 16:58:14 CET] Watcher: Performing startup scan
-(started...)
-
-# End of transcript or log.
-"""]]
diff --git a/doc/bugs/Auto_update_not_updating_to_newest_version/comment_1_6f75569dc960ea5bc4d334b2b321ebf8._comment b/doc/bugs/Auto_update_not_updating_to_newest_version/comment_1_6f75569dc960ea5bc4d334b2b321ebf8._comment
deleted file mode 100644
index 7dd540eae..000000000
--- a/doc/bugs/Auto_update_not_updating_to_newest_version/comment_1_6f75569dc960ea5bc4d334b2b321ebf8._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.43"
- subject="comment 1"
- date="2014-01-16T16:29:01Z"
- content="""
-What version of OSX?
-
-We can see it upgrading in the log, and 5.20131221 is consistent with this being OSX Lion, which no longer has an autobuilder, so won't be upgrading from that version unless someone steps up and makes a new autobuilder.
-
-It seems that the wrong version got into the .info file for Lion, which probably explains the repeated upgrade attempts since it thinks a newer version is available. I've fixed that.
-"""]]
diff --git a/doc/bugs/Auto_update_not_updating_to_newest_version/comment_2_4f26cce07a9f37c79b166111db499ce1._comment b/doc/bugs/Auto_update_not_updating_to_newest_version/comment_2_4f26cce07a9f37c79b166111db499ce1._comment
deleted file mode 100644
index 73fc9dcb4..000000000
--- a/doc/bugs/Auto_update_not_updating_to_newest_version/comment_2_4f26cce07a9f37c79b166111db499ce1._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawk7iPiqWr3BVPLWEDvJhSSvcOqheLEbLNo"
- nickname="Dirk"
- subject="comment 2"
- date="2014-01-16T18:53:36Z"
- content="""
-Uup, sorry for forgetting this.
-
-This is happening on Mavericks for me.
-
-"""]]
diff --git a/doc/bugs/Auto_update_not_updating_to_newest_version/comment_3_585bfcaa655b0e838f9b66a241d5ffc2._comment b/doc/bugs/Auto_update_not_updating_to_newest_version/comment_3_585bfcaa655b0e838f9b66a241d5ffc2._comment
deleted file mode 100644
index a0029b4e1..000000000
--- a/doc/bugs/Auto_update_not_updating_to_newest_version/comment_3_585bfcaa655b0e838f9b66a241d5ffc2._comment
+++ /dev/null
@@ -1,2163 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawk7iPiqWr3BVPLWEDvJhSSvcOqheLEbLNo"
- nickname="Dirk"
- subject="comment 3"
- date="2014-01-16T19:11:29Z"
- content="""
-Checking again after my last message it actually did upgrade now.
-
-For that I killed the running git-annex processes and then restarted git-annex via the dock icon. (I did this twice to see if something would happen the second time round.)
-
-Maybe this could be connected to your server side change? (Even so I am on 10.9.1.)
-
-The log now looks like follows (in case this is relevant):
-
-[[!format sh \"\"\"
-[2014-01-10 14:52:44 CET] main: starting assistant version 5.20131221-g00d1673
-[2014-01-10 14:52:44 CET] UpgradeWatcher: Finished upgrading git-annex to version 5.20131221-g00d1673
-(scanning...) [2014-01-10 14:52:45 CET] Watcher: Performing startup scan
-(started...) [2014-01-10 14:53:13 CET] main: starting assistant version 5.20131221-g00d1673
-(scanning...) [2014-01-10 14:53:13 CET] Watcher: Performing startup scan
-(started...)
-[2014-01-15 15:22:29 CET] main: starting assistant version 5.20131221-g00d1673
-[2014-01-15 15:22:30 CET] Cronner: Consistency check in progress
-(scanning...) [2014-01-15 15:22:30 CET] Watcher: Performing startup scan
-(started...)
-(scanning...) [2014-01-15 15:23:05 CET] Watcher: Performing startup scan
-[2014-01-15 15:23:05 CET] Committer: Committing changes to git
-(Recording state in git...)
-(started...) [2014-01-15 15:23:06 CET] main: Syncing with box.com
-
-[2014-01-15 15:23:28 CET] main: starting assistant version 5.20131221-g00d1673
-(scanning...) [2014-01-15 15:23:28 CET] Watcher: Performing startup scan
-(started...) [2014-01-15 16:23:30 CET] NetWatcherFallback: Syncing with box.com
-[2014-01-15 17:23:31 CET] NetWatcherFallback: Syncing with box.com
-[2014-01-15 18:23:32 CET] NetWatcherFallback: Syncing with box.com
-[2014-01-16 16:42:15 CET] NetWatcherFallback: Syncing with box.com
-[2014-01-16 16:56:33 CET] UpgradeWatcher: Upgrading git-annex
-
-[2014-01-16 16:56:33 CET] main: starting assistant version 5.20131221-g00d1673
-[2014-01-16 16:56:33 CET] Cronner: Consistency check in progress
-[2014-01-16 16:56:33 CET] UpgradeWatcher: Finished upgrading git-annex to version 5.20131221-g00d1673
-(scanning...) [2014-01-16 16:56:33 CET] Watcher: Performing startup scan
-(started...) fsck dvi2bitmap ok
-[2014-01-16 16:58:14 CET] main: starting assistant version 5.20131221-g00d1673
-(scanning...) [2014-01-16 16:58:14 CET] Watcher: Performing startup scan
-(started...) [2014-01-16 17:58:14 CET] NetWatcherFallback: Syncing with box.com
-[2014-01-16 19:26:14 CET] NetWatcherFallback: Syncing with box.com
-
-[2014-01-16 19:58:39 CET] main: starting assistant version 5.20131221-g00d1673
-(scanning...) [2014-01-16 19:58:39 CET] Watcher: Performing startup scan
-(started...) --2014-01-16 19:58:40-- https://downloads.kitenet.net/git-annex/OSX/current/10.9_Mavericks/git-annex.dmg
-Resolving downloads.kitenet.net... 80.68.85.49, 2001:41c8:125:49::10
-Connecting to downloads.kitenet.net|80.68.85.49|:443... connected.
-HTTP request sent, awaiting response... 200 OK
-Length: 28756861 (27M) [application/x-apple-diskimage]
-Saving to: ‘/Users/kraft/annex/.git/annex/tmp/SHA256E-s28756861--4bea2d816a701dbfc88eada2288019c92c2774ee605e4ddfa62c4dd7655e53a1.dmg’
-
- 0K .......... .......... .......... .......... .......... 0% 3.04M 9s
- 50K .......... .......... .......... .......... .......... 0% 1.65M 13s
- 100K .......... .......... .......... .......... .......... 0% 10.7M 9s
- 150K .......... .......... .......... .......... .......... 0% 1.85M 11s
- 200K .......... .......... .......... .......... .......... 0% 11.1M 9s
- 250K .......... .......... .......... .......... .......... 1% 2.05M 10s
- 300K .......... .......... .......... .......... .......... 1% 10.4M 9s
- 350K .......... .......... .......... .......... .......... 1% 11.5M 8s
- 400K .......... .......... .......... .......... .......... 1% 1.07M 10s
- 450K .......... .......... .......... .......... .......... 1% 29.1M 9s
- 500K .......... .......... .......... .......... .......... 1% 36.0M 8s
- 550K .......... .......... .......... .......... .......... 2% 1.83M 9s
- 600K .......... .......... .......... .......... .......... 2% 10.4M 8s
- 650K .......... .......... .......... .......... .......... 2% 15.1M 8s
- 700K .......... .......... .......... .......... .......... 2% 10.6M 7s
- 750K .......... .......... .......... .......... .......... 2% 2.53M 8s
- 800K .......... .......... .......... .......... .......... 3% 7.05M 7s
- 850K .......... .......... .......... .......... .......... 3% 10.5M 7s
- 900K .......... .......... .......... .......... .......... 3% 2.72M 7s
- 950K .......... .......... .......... .......... .......... 3% 9.06M 7s
- 1000K .......... .......... .......... .......... .......... 3% 10.7M 7s
- 1050K .......... .......... .......... .......... .......... 3% 2.76M 7s
- 1100K .......... .......... .......... .......... .......... 4% 14.5M 7s
- 1150K .......... .......... .......... .......... .......... 4% 8.24M 6s
- 1200K .......... .......... .......... .......... .......... 4% 8.30M 6s
- 1250K .......... .......... .......... .......... .......... 4% 3.06M 6s
- 1300K .......... .......... .......... .......... .......... 4% 10.7M 6s
- 1350K .......... .......... .......... .......... .......... 4% 10.4M 6s
- 1400K .......... .......... .......... .......... .......... 5% 10.2M 6s
- 1450K .......... .......... .......... .......... .......... 5% 3.17M 6s
- 1500K .......... .......... .......... .......... .......... 5% 11.5M 6s
- 1550K .......... .......... .......... .......... .......... 5% 10.5M 6s
- 1600K .......... .......... .......... .......... .......... 5% 8.30M 6s
- 1650K .......... .......... .......... .......... .......... 6% 3.13M 6s
- 1700K .......... .......... .......... .......... .......... 6% 10.6M 6s
- 1750K .......... .......... .......... .......... .......... 6% 13.3M 6s
- 1800K .......... .......... .......... .......... .......... 6% 10.8M 5s
- 1850K .......... .......... .......... .......... .......... 6% 3.27M 5s
- 1900K .......... .......... .......... .......... .......... 6% 10.9M 5s
- 1950K .......... .......... .......... .......... .......... 7% 10.5M 5s
- 2000K .......... .......... .......... .......... .......... 7% 8.27M 5s
- 2050K .......... .......... .......... .......... .......... 7% 14.3M 5s
- 2100K .......... .......... .......... .......... .......... 7% 1.19M 6s
- 2150K .......... .......... .......... .......... .......... 7% 34.9M 5s
- 2200K .......... .......... .......... .......... .......... 8% 37.0M 5s
- 2250K .......... .......... .......... .......... .......... 8% 49.4M 5s
- 2300K .......... .......... .......... .......... .......... 8% 39.9M 5s
- 2350K .......... .......... .......... .......... .......... 8% 32.8M 5s
- 2400K .......... .......... .......... .......... .......... 8% 1.82M 5s
- 2450K .......... .......... .......... .......... .......... 8% 11.3M 5s
- 2500K .......... .......... .......... .......... .......... 9% 13.8M 5s
- 2550K .......... .......... .......... .......... .......... 9% 10.4M 5s
- 2600K .......... .......... .......... .......... .......... 9% 10.6M 5s
- 2650K .......... .......... .......... .......... .......... 9% 3.97M 5s
- 2700K .......... .......... .......... .......... .......... 9% 10.3M 5s
- 2750K .......... .......... .......... .......... .......... 9% 14.0M 5s
- 2800K .......... .......... .......... .......... .......... 10% 8.23M 5s
- 2850K .......... .......... .......... .......... .......... 10% 10.6M 5s
- 2900K .......... .......... .......... .......... .......... 10% 3.91M 5s
- 2950K .......... .......... .......... .......... .......... 10% 13.6M 5s
- 3000K .......... .......... .......... .......... .......... 10% 10.1M 5s
- 3050K .......... .......... .......... .......... .......... 11% 10.8M 5s
- 3100K .......... .......... .......... .......... .......... 11% 13.5M 4s
- 3150K .......... .......... .......... .......... .......... 11% 4.19M 4s
- 3200K .......... .......... .......... .......... .......... 11% 8.83M 4s
- 3250K .......... .......... .......... .......... .......... 11% 13.7M 4s
- 3300K .......... .......... .......... .......... .......... 11% 10.5M 4s
- 3350K .......... .......... .......... .......... .......... 12% 10.8M 4s
- 3400K .......... .......... .......... .......... .......... 12% 5.08M 4s
- 3450K .......... .......... .......... .......... .......... 12% 11.6M 4s
- 3500K .......... .......... .......... .......... .......... 12% 10.6M 4s
- 3550K .......... .......... .......... .......... .......... 12% 13.5M 4s
- 3600K .......... .......... .......... .......... .......... 12% 8.27M 4s
- 3650K .......... .......... .......... .......... .......... 13% 10.7M 4s
- 3700K .......... .......... .......... .......... .......... 13% 6.02M 4s
- 3750K .......... .......... .......... .......... .......... 13% 10.7M 4s
- 3800K .......... .......... .......... .......... .......... 13% 10.4M 4s
- 3850K .......... .......... .......... .......... .......... 13% 13.7M 4s
- 3900K .......... .......... .......... .......... .......... 14% 10.5M 4s
- 3950K .......... .......... .......... .......... .......... 14% 14.0M 4s
- 4000K .......... .......... .......... .......... .......... 14% 6.05M 4s
- 4050K .......... .......... .......... .......... .......... 14% 10.5M 4s
- 4100K .......... .......... .......... .......... .......... 14% 7.38M 4s
- 4150K .......... .......... .......... .......... .......... 14% 13.9M 4s
- 4200K .......... .......... .......... .......... .......... 15% 11.5M 4s
- 4250K .......... .......... .......... .......... .......... 15% 14.2M 4s
- 4300K .......... .......... .......... .......... .......... 15% 10.7M 4s
- 4350K .......... .......... .......... .......... .......... 15% 10.7M 4s
- 4400K .......... .......... .......... .......... .......... 15% 4.59M 4s
- 4450K .......... .......... .......... .......... .......... 16% 11.6M 4s
- 4500K .......... .......... .......... .......... .......... 16% 14.0M 4s
- 4550K .......... .......... .......... .......... .......... 16% 10.6M 4s
- 4600K .......... .......... .......... .......... .......... 16% 9.94M 4s
- 4650K .......... .......... .......... .......... .......... 16% 15.3M 4s
- 4700K .......... .......... .......... .......... .......... 16% 10.4M 4s
- 4750K .......... .......... .......... .......... .......... 17% 8.48M 4s
- 4800K .......... .......... .......... .......... .......... 17% 10.1M 4s
- 4850K .......... .......... .......... .......... .......... 17% 10.5M 4s
- 4900K .......... .......... .......... .......... .......... 17% 10.7M 4s
- 4950K .......... .......... .......... .......... .......... 17% 13.3M 3s
- 5000K .......... .......... .......... .......... .......... 17% 10.6M 3s
- 5050K .......... .......... .......... .......... .......... 18% 10.3M 3s
- 5100K .......... .......... .......... .......... .......... 18% 13.7M 3s
- 5150K .......... .......... .......... .......... .......... 18% 10.6M 3s
- 5200K .......... .......... .......... .......... .......... 18% 8.59M 3s
- 5250K .......... .......... .......... .......... .......... 18% 14.2M 3s
- 5300K .......... .......... .......... .......... .......... 19% 11.0M 3s
- 5350K .......... .......... .......... .......... .......... 19% 10.3M 3s
- 5400K .......... .......... .......... .......... .......... 19% 11.4M 3s
- 5450K .......... .......... .......... .......... .......... 19% 12.0M 3s
- 5500K .......... .......... .......... .......... .......... 19% 13.8M 3s
- 5550K .......... .......... .......... .......... .......... 19% 10.7M 3s
- 5600K .......... .......... .......... .......... .......... 20% 8.55M 3s
- 5650K .......... .......... .......... .......... .......... 20% 10.7M 3s
- 5700K .......... .......... .......... .......... .......... 20% 15.1M 3s
- 5750K .......... .......... .......... .......... .......... 20% 10.7M 3s
- 5800K .......... .......... .......... .......... .......... 20% 11.2M 3s
- 5850K .......... .......... .......... .......... .......... 21% 10.9M 3s
- 5900K .......... .......... .......... .......... .......... 21% 10.7M 3s
- 5950K .......... .......... .......... .......... .......... 21% 14.8M 3s
- 6000K .......... .......... .......... .......... .......... 21% 8.90M 3s
- 6050K .......... .......... .......... .......... .......... 21% 11.0M 3s
- 6100K .......... .......... .......... .......... .......... 21% 11.2M 3s
- 6150K .......... .......... .......... .......... .......... 22% 10.4M 3s
- 6200K .......... .......... .......... .......... .......... 22% 11.4M 3s
- 6250K .......... .......... .......... .......... .......... 22% 14.2M 3s
- 6300K .......... .......... .......... .......... .......... 22% 10.6M 3s
- 6350K .......... .......... .......... .......... .......... 22% 11.7M 3s
- 6400K .......... .......... .......... .......... .......... 22% 9.11M 3s
- 6450K .......... .......... .......... .......... .......... 23% 10.8M 3s
- 6500K .......... .......... .......... .......... .......... 23% 11.1M 3s
- 6550K .......... .......... .......... .......... .......... 23% 14.5M 3s
- 6600K .......... .......... .......... .......... .......... 23% 11.0M 3s
- 6650K .......... .......... .......... .......... .......... 23% 10.5M 3s
- 6700K .......... .......... .......... .......... .......... 24% 11.0M 3s
- 6750K .......... .......... .......... .......... .......... 24% 14.4M 3s
- 6800K .......... .......... .......... .......... .......... 24% 8.71M 3s
- 6850K .......... .......... .......... .......... .......... 24% 11.0M 3s
- 6900K .......... .......... .......... .......... .......... 24% 10.6M 3s
- 6950K .......... .......... .......... .......... .......... 24% 14.0M 3s
- 7000K .......... .......... .......... .......... .......... 25% 10.9M 3s
- 7050K .......... .......... .......... .......... .......... 25% 10.6M 3s
- 7100K .......... .......... .......... .......... .......... 25% 10.7M 3s
- 7150K .......... .......... .......... .......... .......... 25% 14.4M 3s
- 7200K .......... .......... .......... .......... .......... 25% 8.82M 3s
- 7250K .......... .......... .......... .......... .......... 25% 10.7M 3s
- 7300K .......... .......... .......... .......... .......... 26% 10.8M 3s
- 7350K .......... .......... .......... .......... .......... 26% 13.5M 3s
- 7400K .......... .......... .......... .......... .......... 26% 10.7M 3s
- 7450K .......... .......... .......... .......... .......... 26% 11.0M 3s
- 7500K .......... .......... .......... .......... .......... 26% 11.2M 3s
- 7550K .......... .......... .......... .......... .......... 27% 13.5M 3s
- 7600K .......... .......... .......... .......... .......... 27% 8.93M 3s
- 7650K .......... .......... .......... .......... .......... 27% 11.3M 3s
- 7700K .......... .......... .......... .......... .......... 27% 10.8M 3s
- 7750K .......... .......... .......... .......... .......... 27% 10.7M 3s
- 7800K .......... .......... .......... .......... .......... 27% 14.3M 3s
- 7850K .......... .......... .......... .......... .......... 28% 10.9M 3s
- 7900K .......... .......... .......... .......... .......... 28% 10.9M 3s
- 7950K .......... .......... .......... .......... .......... 28% 11.3M 3s
- 8000K .......... .......... .......... .......... .......... 28% 8.17M 3s
- 8050K .......... .......... .......... .......... .......... 28% 14.2M 3s
- 8100K .......... .......... .......... .......... .......... 29% 10.9M 3s
- 8150K .......... .......... .......... .......... .......... 29% 11.0M 3s
- 8200K .......... .......... .......... .......... .......... 29% 13.7M 3s
- 8250K .......... .......... .......... .......... .......... 29% 10.6M 2s
- 8300K .......... .......... .......... .......... .......... 29% 10.8M 2s
- 8350K .......... .......... .......... .......... .......... 29% 13.9M 2s
- 8400K .......... .......... .......... .......... .......... 30% 8.64M 2s
- 8450K .......... .......... .......... .......... .......... 30% 10.6M 2s
- 8500K .......... .......... .......... .......... .......... 30% 13.9M 2s
- 8550K .......... .......... .......... .......... .......... 30% 10.7M 2s
- 8600K .......... .......... .......... .......... .......... 30% 10.6M 2s
- 8650K .......... .......... .......... .......... .......... 30% 10.5M 2s
- 8700K .......... .......... .......... .......... .......... 31% 14.4M 2s
- 8750K .......... .......... .......... .......... .......... 31% 10.7M 2s
- 8800K .......... .......... .......... .......... .......... 31% 8.40M 2s
- 8850K .......... .......... .......... .......... .......... 31% 11.4M 2s
- 8900K .......... .......... .......... .......... .......... 31% 11.0M 2s
- 8950K .......... .......... .......... .......... .......... 32% 13.3M 2s
- 9000K .......... .......... .......... .......... .......... 32% 10.7M 2s
- 9050K .......... .......... .......... .......... .......... 32% 11.5M 2s
- 9100K .......... .......... .......... .......... .......... 32% 11.0M 2s
- 9150K .......... .......... .......... .......... .......... 32% 14.0M 2s
- 9200K .......... .......... .......... .......... .......... 32% 8.24M 2s
- 9250K .......... .......... .......... .......... .......... 33% 11.3M 2s
- 9300K .......... .......... .......... .......... .......... 33% 10.5M 2s
- 9350K .......... .......... .......... .......... .......... 33% 15.1M 2s
- 9400K .......... .......... .......... .......... .......... 33% 10.1M 2s
- 9450K .......... .......... .......... .......... .......... 33% 11.5M 2s
- 9500K .......... .......... .......... .......... .......... 34% 13.5M 2s
- 9550K .......... .......... .......... .......... .......... 34% 10.5M 2s
- 9600K .......... .......... .......... .......... .......... 34% 8.45M 2s
- 9650K .......... .......... .......... .......... .......... 34% 13.5M 2s
- 9700K .......... .......... .......... .......... .......... 34% 6.13M 2s
- 9750K .......... .......... .......... .......... .......... 34% 16.1M 2s
- 9800K .......... .......... .......... .......... .......... 35% 33.7M 2s
- 9850K .......... .......... .......... .......... .......... 35% 10.9M 2s
- 9900K .......... .......... .......... .......... .......... 35% 10.7M 2s
- 9950K .......... .......... .......... .......... .......... 35% 13.1M 2s
- 10000K .......... .......... .......... .......... .......... 35% 8.98M 2s
- 10050K .......... .......... .......... .......... .......... 35% 10.9M 2s
- 10100K .......... .......... .......... .......... .......... 36% 10.2M 2s
- 10150K .......... .......... .......... .......... .......... 36% 13.6M 2s
- 10200K .......... .......... .......... .......... .......... 36% 10.4M 2s
- 10250K .......... .......... .......... .......... .......... 36% 10.9M 2s
- 10300K .......... .......... .......... .......... .......... 36% 10.8M 2s
- 10350K .......... .......... .......... .......... .......... 37% 13.6M 2s
- 10400K .......... .......... .......... .......... .......... 37% 8.40M 2s
- 10450K .......... .......... .......... .......... .......... 37% 10.5M 2s
- 10500K .......... .......... .......... .......... .......... 37% 14.0M 2s
- 10550K .......... .......... .......... .......... .......... 37% 10.6M 2s
- 10600K .......... .......... .......... .......... .......... 37% 10.6M 2s
- 10650K .......... .......... .......... .......... .......... 38% 13.5M 2s
- 10700K .......... .......... .......... .......... .......... 38% 10.2M 2s
- 10750K .......... .......... .......... .......... .......... 38% 13.9M 2s
- 10800K .......... .......... .......... .......... .......... 38% 8.34M 2s
- 10850K .......... .......... .......... .......... .......... 38% 13.6M 2s
- 10900K .......... .......... .......... .......... .......... 38% 10.6M 2s
- 10950K .......... .......... .......... .......... .......... 39% 10.3M 2s
- 11000K .......... .......... .......... .......... .......... 39% 13.4M 2s
- 11050K .......... .......... .......... .......... .......... 39% 10.8M 2s
- 11100K .......... .......... .......... .......... .......... 39% 13.4M 2s
- 11150K .......... .......... .......... .......... .......... 39% 10.9M 2s
- 11200K .......... .......... .......... .......... .......... 40% 8.49M 2s
- 11250K .......... .......... .......... .......... .......... 40% 10.8M 2s
- 11300K .......... .......... .......... .......... .......... 40% 14.6M 2s
- 11350K .......... .......... .......... .......... .......... 40% 10.5M 2s
- 11400K .......... .......... .......... .......... .......... 40% 10.0M 2s
- 11450K .......... .......... .......... .......... .......... 40% 12.3M 2s
- 11500K .......... .......... .......... .......... .......... 41% 12.4M 2s
- 11550K .......... .......... .......... .......... .......... 41% 13.6M 2s
- 11600K .......... .......... .......... .......... .......... 41% 8.51M 2s
- 11650K .......... .......... .......... .......... .......... 41% 10.7M 2s
- 11700K .......... .......... .......... .......... .......... 41% 10.8M 2s
- 11750K .......... .......... .......... .......... .......... 42% 13.6M 2s
- 11800K .......... .......... .......... .......... .......... 42% 10.3M 2s
- 11850K .......... .......... .......... .......... .......... 42% 14.7M 2s
- 11900K .......... .......... .......... .......... .......... 42% 10.1M 2s
- 11950K .......... .......... .......... .......... .......... 42% 10.3M 2s
- 12000K .......... .......... .......... .......... .......... 42% 10.5M 2s
- 12050K .......... .......... .......... .......... .......... 43% 11.1M 2s
- 12100K .......... .......... .......... .......... .......... 43% 10.4M 2s
- 12150K .......... .......... .......... .......... .......... 43% 13.7M 2s
- 12200K .......... .......... .......... .......... .......... 43% 10.3M 2s
- 12250K .......... .......... .......... .......... .......... 43% 12.6M 2s
- 12300K .......... .......... .......... .......... .......... 43% 11.4M 2s
- 12350K .......... .......... .......... .......... .......... 44% 10.3M 2s
- 12400K .......... .......... .......... .......... .......... 44% 10.8M 2s
- 12450K .......... .......... .......... .......... .......... 44% 10.9M 2s
- 12500K .......... .......... .......... .......... .......... 44% 10.4M 2s
- 12550K .......... .......... .......... .......... .......... 44% 13.5M 2s
- 12600K .......... .......... .......... .......... .......... 45% 10.5M 2s
- 12650K .......... .......... .......... .......... .......... 45% 10.5M 2s
- 12700K .......... .......... .......... .......... .......... 45% 13.6M 2s
- 12750K .......... .......... .......... .......... .......... 45% 10.6M 2s
- 12800K .......... .......... .......... .......... .......... 45% 8.74M 2s
- 12850K .......... .......... .......... .......... .......... 45% 14.0M 2s
- 12900K .......... .......... .......... .......... .......... 46% 10.8M 2s
- 12950K .......... .......... .......... .......... .......... 46% 9.36M 2s
- 13000K .......... .......... .......... .......... .......... 46% 11.8M 2s
- 13050K .......... .......... .......... .......... .......... 46% 14.1M 2s
- 13100K .......... .......... .......... .......... .......... 46% 10.6M 2s
- 13150K .......... .......... .......... .......... .......... 47% 13.2M 2s
- 13200K .......... .......... .......... .......... .......... 47% 8.66M 2s
- 13250K .......... .......... .......... .......... .......... 47% 10.4M 2s
- 13300K .......... .......... .......... .......... .......... 47% 13.8M 2s
- 13350K .......... .......... .......... .......... .......... 47% 10.5M 2s
- 13400K .......... .......... .......... .......... .......... 47% 10.7M 2s
- 13450K .......... .......... .......... .......... .......... 48% 13.7M 2s
- 13500K .......... .......... .......... .......... .......... 48% 5.94M 2s
- 13550K .......... .......... .......... .......... .......... 48% 14.3M 2s
- 13600K .......... .......... .......... .......... .......... 48% 8.65M 2s
- 13650K .......... .......... .......... .......... .......... 48% 11.0M 2s
- 13700K .......... .......... .......... .......... .......... 48% 13.5M 2s
- 13750K .......... .......... .......... .......... .......... 49% 10.3M 2s
- 13800K .......... .......... .......... .......... .......... 49% 10.4M 2s
- 13850K .......... .......... .......... .......... .......... 49% 10.8M 2s
- 13900K .......... .......... .......... .......... .......... 49% 13.4M 2s
- 13950K .......... .......... .......... .......... .......... 49% 11.2M 2s
- 14000K .......... .......... .......... .......... .......... 50% 8.61M 2s
- 14050K .......... .......... .......... .......... .......... 50% 10.5M 2s
- 14100K .......... .......... .......... .......... .......... 50% 10.1M 2s
- 14150K .......... .......... .......... .......... .......... 50% 10.5M 2s
- 14200K .......... .......... .......... .......... .......... 50% 13.6M 2s
- 14250K .......... .......... .......... .......... .......... 50% 10.1M 2s
- 14300K .......... .......... .......... .......... .......... 51% 13.6M 2s
- 14350K .......... .......... .......... .......... .......... 51% 10.9M 2s
- 14400K .......... .......... .......... .......... .......... 51% 8.60M 2s
- 14450K .......... .......... .......... .......... .......... 51% 10.1M 1s
- 14500K .......... .......... .......... .......... .......... 51% 10.6M 1s
- 14550K .......... .......... .......... .......... .......... 51% 13.7M 1s
- 14600K .......... .......... .......... .......... .......... 52% 10.2M 1s
- 14650K .......... .......... .......... .......... .......... 52% 10.2M 1s
- 14700K .......... .......... .......... .......... .......... 52% 13.7M 1s
- 14750K .......... .......... .......... .......... .......... 52% 11.6M 1s
- 14800K .......... .......... .......... .......... .......... 52% 7.61M 1s
- 14850K .......... .......... .......... .......... .......... 53% 11.0M 1s
- 14900K .......... .......... .......... .......... .......... 53% 10.6M 1s
- 14950K .......... .......... .......... .......... .......... 53% 13.8M 1s
- 15000K .......... .......... .......... .......... .......... 53% 10.6M 1s
- 15050K .......... .......... .......... .......... .......... 53% 13.3M 1s
- 15100K .......... .......... .......... .......... .......... 53% 10.3M 1s
- 15150K .......... .......... .......... .......... .......... 54% 10.3M 1s
- 15200K .......... .......... .......... .......... .......... 54% 8.45M 1s
- 15250K .......... .......... .......... .......... .......... 54% 11.1M 1s
- 15300K .......... .......... .......... .......... .......... 54% 5.95M 1s
- 15350K .......... .......... .......... .......... .......... 54% 14.8M 1s
- 15400K .......... .......... .......... .......... .......... 55% 26.8M 1s
- 15450K .......... .......... .......... .......... .......... 55% 14.3M 1s
- 15500K .......... .......... .......... .......... .......... 55% 8.46M 1s
- 15550K .......... .......... .......... .......... .......... 55% 10.3M 1s
- 15600K .......... .......... .......... .......... .......... 55% 9.05M 1s
- 15650K .......... .......... .......... .......... .......... 55% 14.0M 1s
- 15700K .......... .......... .......... .......... .......... 56% 10.5M 1s
- 15750K .......... .......... .......... .......... .......... 56% 13.2M 1s
- 15800K .......... .......... .......... .......... .......... 56% 10.9M 1s
- 15850K .......... .......... .......... .......... .......... 56% 5.26M 1s
- 15900K .......... .......... .......... .......... .......... 56% 41.9M 1s
- 15950K .......... .......... .......... .......... .......... 56% 11.0M 1s
- 16000K .......... .......... .......... .......... .......... 57% 8.61M 1s
- 16050K .......... .......... .......... .......... .......... 57% 9.85M 1s
- 16100K .......... .......... .......... .......... .......... 57% 15.8M 1s
- 16150K .......... .......... .......... .......... .......... 57% 10.5M 1s
- 16200K .......... .......... .......... .......... .......... 57% 10.3M 1s
- 16250K .......... .......... .......... .......... .......... 58% 8.54M 1s
- 16300K .......... .......... .......... .......... .......... 58% 10.6M 1s
- 16350K .......... .......... .......... .......... .......... 58% 13.8M 1s
- 16400K .......... .......... .......... .......... .......... 58% 8.67M 1s
- 16450K .......... .......... .......... .......... .......... 58% 11.1M 1s
- 16500K .......... .......... .......... .......... .......... 58% 10.4M 1s
- 16550K .......... .......... .......... .......... .......... 59% 14.0M 1s
- 16600K .......... .......... .......... .......... .......... 59% 10.7M 1s
- 16650K .......... .......... .......... .......... .......... 59% 8.50M 1s
- 16700K .......... .......... .......... .......... .......... 59% 8.64M 1s
- 16750K .......... .......... .......... .......... .......... 59% 13.7M 1s
- 16800K .......... .......... .......... .......... .......... 60% 8.33M 1s
- 16850K .......... .......... .......... .......... .......... 60% 10.3M 1s
- 16900K .......... .......... .......... .......... .......... 60% 13.8M 1s
- 16950K .......... .......... .......... .......... .......... 60% 10.6M 1s
- 17000K .......... .......... .......... .......... .......... 60% 13.8M 1s
- 17050K .......... .......... .......... .......... .......... 60% 10.4M 1s
- 17100K .......... .......... .......... .......... .......... 61% 8.28M 1s
- 17150K .......... .......... .......... .......... .......... 61% 10.6M 1s
- 17200K .......... .......... .......... .......... .......... 61% 8.70M 1s
- 17250K .......... .......... .......... .......... .......... 61% 10.6M 1s
- 17300K .......... .......... .......... .......... .......... 61% 13.6M 1s
- 17350K .......... .......... .......... .......... .......... 61% 10.9M 1s
- 17400K .......... .......... .......... .......... .......... 62% 13.5M 1s
- 17450K .......... .......... .......... .......... .......... 62% 10.4M 1s
- 17500K .......... .......... .......... .......... .......... 62% 11.2M 1s
- 17550K .......... .......... .......... .......... .......... 62% 8.36M 1s
- 17600K .......... .......... .......... .......... .......... 62% 8.49M 1s
- 17650K .......... .......... .......... .......... .......... 63% 10.5M 1s
- 17700K .......... .......... .......... .......... .......... 63% 11.0M 1s
- 17750K .......... .......... .......... .......... .......... 63% 13.6M 1s
- 17800K .......... .......... .......... .......... .......... 63% 10.3M 1s
- 17850K .......... .......... .......... .......... .......... 63% 13.4M 1s
- 17900K .......... .......... .......... .......... .......... 63% 10.6M 1s
- 17950K .......... .......... .......... .......... .......... 64% 10.1M 1s
- 18000K .......... .......... .......... .......... .......... 64% 8.55M 1s
- 18050K .......... .......... .......... .......... .......... 64% 10.6M 1s
- 18100K .......... .......... .......... .......... .......... 64% 13.9M 1s
- 18150K .......... .......... .......... .......... .......... 64% 10.4M 1s
- 18200K .......... .......... .......... .......... .......... 64% 10.4M 1s
- 18250K .......... .......... .......... .......... .......... 65% 13.7M 1s
- 18300K .......... .......... .......... .......... .......... 65% 10.6M 1s
- 18350K .......... .......... .......... .......... .......... 65% 13.3M 1s
- 18400K .......... .......... .......... .......... .......... 65% 8.53M 1s
- 18450K .......... .......... .......... .......... .......... 65% 10.5M 1s
- 18500K .......... .......... .......... .......... .......... 66% 13.8M 1s
- 18550K .......... .......... .......... .......... .......... 66% 10.2M 1s
- 18600K .......... .......... .......... .......... .......... 66% 10.7M 1s
- 18650K .......... .......... .......... .......... .......... 66% 13.9M 1s
- 18700K .......... .......... .......... .......... .......... 66% 10.7M 1s
- 18750K .......... .......... .......... .......... .......... 66% 13.8M 1s
- 18800K .......... .......... .......... .......... .......... 67% 8.35M 1s
- 18850K .......... .......... .......... .......... .......... 67% 10.6M 1s
- 18900K .......... .......... .......... .......... .......... 67% 13.9M 1s
- 18950K .......... .......... .......... .......... .......... 67% 10.4M 1s
- 19000K .......... .......... .......... .......... .......... 67% 10.4M 1s
- 19050K .......... .......... .......... .......... .......... 68% 13.3M 1s
- 19100K .......... .......... .......... .......... .......... 68% 11.1M 1s
- 19150K .......... .......... .......... .......... .......... 68% 13.9M 1s
- 19200K .......... .......... .......... .......... .......... 68% 8.32M 1s
- 19250K .......... .......... .......... .......... .......... 68% 10.7M 1s
- 19300K .......... .......... .......... .......... .......... 68% 13.2M 1s
- 19350K .......... .......... .......... .......... .......... 69% 9.38M 1s
- 19400K .......... .......... .......... .......... .......... 69% 12.0M 1s
- 19450K .......... .......... .......... .......... .......... 69% 14.1M 1s
- 19500K .......... .......... .......... .......... .......... 69% 10.4M 1s
- 19550K .......... .......... .......... .......... .......... 69% 13.3M 1s
- 19600K .......... .......... .......... .......... .......... 69% 8.49M 1s
- 19650K .......... .......... .......... .......... .......... 70% 10.3M 1s
- 19700K .......... .......... .......... .......... .......... 70% 13.9M 1s
- 19750K .......... .......... .......... .......... .......... 70% 10.7M 1s
- 19800K .......... .......... .......... .......... .......... 70% 13.4M 1s
- 19850K .......... .......... .......... .......... .......... 70% 10.2M 1s
- 19900K .......... .......... .......... .......... .......... 71% 10.5M 1s
- 19950K .......... .......... .......... .......... .......... 71% 14.1M 1s
- 20000K .......... .......... .......... .......... .......... 71% 8.41M 1s
- 20050K .......... .......... .......... .......... .......... 71% 13.6M 1s
- 20100K .......... .......... .......... .......... .......... 71% 10.6M 1s
- 20150K .......... .......... .......... .......... .......... 71% 10.3M 1s
- 20200K .......... .......... .......... .......... .......... 72% 13.8M 1s
- 20250K .......... .......... .......... .......... .......... 72% 10.7M 1s
- 20300K .......... .......... .......... .......... .......... 72% 13.4M 1s
- 20350K .......... .......... .......... .......... .......... 72% 10.6M 1s
- 20400K .......... .......... .......... .......... .......... 72% 8.59M 1s
- 20450K .......... .......... .......... .......... .......... 72% 10.1M 1s
- 20500K .......... .......... .......... .......... .......... 73% 14.3M 1s
- 20550K .......... .......... .......... .......... .......... 73% 10.4M 1s
- 20600K .......... .......... .......... .......... .......... 73% 14.0M 1s
- 20650K .......... .......... .......... .......... .......... 73% 10.8M 1s
- 20700K .......... .......... .......... .......... .......... 73% 10.3M 1s
- 20750K .......... .......... .......... .......... .......... 74% 14.1M 1s
- 20800K .......... .......... .......... .......... .......... 74% 8.67M 1s
- 20850K .......... .......... .......... .......... .......... 74% 10.5M 1s
- 20900K .......... .......... .......... .......... .......... 74% 7.89M 1s
- 20950K .......... .......... .......... .......... .......... 74% 14.8M 1s
- 21000K .......... .......... .......... .......... .......... 74% 17.6M 1s
- 21050K .......... .......... .......... .......... .......... 75% 11.0M 1s
- 21100K .......... .......... .......... .......... .......... 75% 13.4M 1s
- 21150K .......... .......... .......... .......... .......... 75% 10.8M 1s
- 21200K .......... .......... .......... .......... .......... 75% 8.33M 1s
- 21250K .......... .......... .......... .......... .......... 75% 11.5M 1s
- 21300K .......... .......... .......... .......... .......... 76% 13.6M 1s
- 21350K .......... .......... .......... .......... .......... 76% 10.8M 1s
- 21400K .......... .......... .......... .......... .......... 76% 10.6M 1s
- 21450K .......... .......... .......... .......... .......... 76% 13.9M 1s
- 21500K .......... .......... .......... .......... .......... 76% 10.3M 1s
- 21550K .......... .......... .......... .......... .......... 76% 13.8M 1s
- 21600K .......... .......... .......... .......... .......... 77% 8.36M 1s
- 21650K .......... .......... .......... .......... .......... 77% 10.2M 1s
- 21700K .......... .......... .......... .......... .......... 77% 14.2M 1s
- 21750K .......... .......... .......... .......... .......... 77% 10.9M 1s
- 21800K .......... .......... .......... .......... .......... 77% 13.6M 1s
- 21850K .......... .......... .......... .......... .......... 77% 10.7M 1s
- 21900K .......... .......... .......... .......... .......... 78% 10.5M 1s
- 21950K .......... .......... .......... .......... .......... 78% 11.2M 1s
- 22000K .......... .......... .......... .......... .......... 78% 10.1M 1s
- 22050K .......... .......... .......... .......... .......... 78% 11.3M 1s
- 22100K .......... .......... .......... .......... .......... 78% 10.2M 1s
- 22150K .......... .......... .......... .......... .......... 79% 13.5M 1s
- 22200K .......... .......... .......... .......... .......... 79% 10.6M 1s
- 22250K .......... .......... .......... .......... .......... 79% 9.67M 1s
- 22300K .......... .......... .......... .......... .......... 79% 15.1M 1s
- 22350K .......... .......... .......... .......... .......... 79% 10.4M 1s
- 22400K .......... .......... .......... .......... .......... 79% 10.4M 1s
- 22450K .......... .......... .......... .......... .......... 80% 10.3M 1s
- 22500K .......... .......... .......... .......... .......... 80% 10.6M 1s
- 22550K .......... .......... .......... .......... .......... 80% 14.0M 1s
- 22600K .......... .......... .......... .......... .......... 80% 10.4M 1s
- 22650K .......... .......... .......... .......... .......... 80% 13.7M 1s
- 22700K .......... .......... .......... .......... .......... 81% 10.4M 1s
- 22750K .......... .......... .......... .......... .......... 81% 13.5M 1s
- 22800K .......... .......... .......... .......... .......... 81% 8.29M 1s
- 22850K .......... .......... .......... .......... .......... 81% 10.5M 1s
- 22900K .......... .......... .......... .......... .......... 81% 13.6M 1s
- 22950K .......... .......... .......... .......... .......... 81% 10.6M 1s
- 23000K .......... .......... .......... .......... .......... 82% 13.6M 1s
- 23050K .......... .......... .......... .......... .......... 82% 10.9M 1s
- 23100K .......... .......... .......... .......... .......... 82% 10.6M 1s
- 23150K .......... .......... .......... .......... .......... 82% 11.5M 0s
- 23200K .......... .......... .......... .......... .......... 82% 9.57M 0s
- 23250K .......... .......... .......... .......... .......... 82% 10.9M 0s
- 23300K .......... .......... .......... .......... .......... 83% 10.2M 0s
- 23350K .......... .......... .......... .......... .......... 83% 13.7M 0s
- 23400K .......... .......... .......... .......... .......... 83% 10.4M 0s
- 23450K .......... .......... .......... .......... .......... 83% 13.8M 0s
- 23500K .......... .......... .......... .......... .......... 83% 10.2M 0s
- 23550K .......... .......... .......... .......... .......... 84% 14.2M 0s
- 23600K .......... .......... .......... .......... .......... 84% 8.47M 0s
- 23650K .......... .......... .......... .......... .......... 84% 10.5M 0s
- 23700K .......... .......... .......... .......... .......... 84% 13.7M 0s
- 23750K .......... .......... .......... .......... .......... 84% 10.5M 0s
- 23800K .......... .......... .......... .......... .......... 84% 10.3M 0s
- 23850K .......... .......... .......... .......... .......... 85% 14.0M 0s
- 23900K .......... .......... .......... .......... .......... 85% 10.5M 0s
- 23950K .......... .......... .......... .......... .......... 85% 10.9M 0s
- 24000K .......... .......... .......... .......... .......... 85% 11.0M 0s
- 24050K .......... .......... .......... .......... .......... 85% 10.8M 0s
- 24100K .......... .......... .......... .......... .......... 85% 10.5M 0s
- 24150K .......... .......... .......... .......... .......... 86% 13.9M 0s
- 24200K .......... .......... .......... .......... .......... 86% 10.3M 0s
- 24250K .......... .......... .......... .......... .......... 86% 10.5M 0s
- 24300K .......... .......... .......... .......... .......... 86% 13.7M 0s
- 24350K .......... .......... .......... .......... .......... 86% 10.8M 0s
- 24400K .......... .......... .......... .......... .......... 87% 8.24M 0s
- 24450K .......... .......... .......... .......... .......... 87% 14.0M 0s
- 24500K .......... .......... .......... .......... .......... 87% 10.4M 0s
- 24550K .......... .......... .......... .......... .......... 87% 13.0M 0s
- 24600K .......... .......... .......... .......... .......... 87% 10.8M 0s
- 24650K .......... .......... .......... .......... .......... 87% 10.9M 0s
- 24700K .......... .......... .......... .......... .......... 88% 15.3M 0s
- 24750K .......... .......... .......... .......... .......... 88% 10.5M 0s
- 24800K .......... .......... .......... .......... .......... 88% 8.69M 0s
- 24850K .......... .......... .......... .......... .......... 88% 10.5M 0s
- 24900K .......... .......... .......... .......... .......... 88% 13.9M 0s
- 24950K .......... .......... .......... .......... .......... 89% 11.0M 0s
- 25000K .......... .......... .......... .......... .......... 89% 10.4M 0s
- 25050K .......... .......... .......... .......... .......... 89% 13.7M 0s
- 25100K .......... .......... .......... .......... .......... 89% 10.5M 0s
- 25150K .......... .......... .......... .......... .......... 89% 11.2M 0s
- 25200K .......... .......... .......... .......... .......... 89% 10.2M 0s
- 25250K .......... .......... .......... .......... .......... 90% 10.5M 0s
- 25300K .......... .......... .......... .......... .......... 90% 10.4M 0s
- 25350K .......... .......... .......... .......... .......... 90% 13.8M 0s
- 25400K .......... .......... .......... .......... .......... 90% 11.0M 0s
- 25450K .......... .......... .......... .......... .......... 90% 11.1M 0s
- 25500K .......... .......... .......... .......... .......... 90% 12.6M 0s
- 25550K .......... .......... .......... .......... .......... 91% 11.8M 0s
- 25600K .......... .......... .......... .......... .......... 91% 8.78M 0s
- 25650K .......... .......... .......... .......... .......... 91% 10.8M 0s
- 25700K .......... .......... .......... .......... .......... 91% 14.3M 0s
- 25750K .......... .......... .......... .......... .......... 91% 10.8M 0s
- 25800K .......... .......... .......... .......... .......... 92% 10.5M 0s
- 25850K .......... .......... .......... .......... .......... 92% 10.7M 0s
- 25900K .......... .......... .......... .......... .......... 92% 14.0M 0s
- 25950K .......... .......... .......... .......... .......... 92% 10.4M 0s
- 26000K .......... .......... .......... .......... .......... 92% 8.47M 0s
- 26050K .......... .......... .......... .......... .......... 92% 13.1M 0s
- 26100K .......... .......... .......... .......... .......... 93% 10.8M 0s
- 26150K .......... .......... .......... .......... .......... 93% 14.2M 0s
- 26200K .......... .......... .......... .......... .......... 93% 10.2M 0s
- 26250K .......... .......... .......... .......... .......... 93% 13.8M 0s
- 26300K .......... .......... .......... .......... .......... 93% 10.8M 0s
- 26350K .......... .......... .......... .......... .......... 94% 10.4M 0s
- 26400K .......... .......... .......... .......... .......... 94% 10.1M 0s
- 26450K .......... .......... .......... .......... .......... 94% 10.4M 0s
- 26500K .......... .......... .......... .......... .......... 94% 10.7M 0s
- 26550K .......... .......... .......... .......... .......... 94% 13.8M 0s
- 26600K .......... .......... .......... .......... .......... 94% 6.41M 0s
- 26650K .......... .......... .......... .......... .......... 95% 18.6M 0s
- 26700K .......... .......... .......... .......... .......... 95% 21.4M 0s
- 26750K .......... .......... .......... .......... .......... 95% 10.7M 0s
- 26800K .......... .......... .......... .......... .......... 95% 8.32M 0s
- 26850K .......... .......... .......... .......... .......... 95% 13.5M 0s
- 26900K .......... .......... .......... .......... .......... 95% 11.1M 0s
- 26950K .......... .......... .......... .......... .......... 96% 10.2M 0s
- 27000K .......... .......... .......... .......... .......... 96% 13.5M 0s
- 27050K .......... .......... .......... .......... .......... 96% 10.8M 0s
- 27100K .......... .......... .......... .......... .......... 96% 10.7M 0s
- 27150K .......... .......... .......... .......... .......... 96% 14.3M 0s
- 27200K .......... .......... .......... .......... .......... 97% 8.82M 0s
- 27250K .......... .......... .......... .......... .......... 97% 10.6M 0s
- 27300K .......... .......... .......... .......... .......... 97% 10.7M 0s
- 27350K .......... .......... .......... .......... .......... 97% 14.4M 0s
- 27400K .......... .......... .......... .......... .......... 97% 10.6M 0s
- 27450K .......... .......... .......... .......... .......... 97% 11.0M 0s
- 27500K .......... .......... .......... .......... .......... 98% 13.6M 0s
- 27550K .......... .......... .......... .......... .......... 98% 11.1M 0s
- 27600K .......... .......... .......... .......... .......... 98% 8.50M 0s
- 27650K .......... .......... .......... .......... .......... 98% 9.98M 0s
- 27700K .......... .......... .......... .......... .......... 98% 13.8M 0s
- 27750K .......... .......... .......... .......... .......... 98% 10.6M 0s
- 27800K .......... .......... .......... .......... .......... 99% 13.1M 0s
- 27850K .......... .......... .......... .......... .......... 99% 10.8M 0s
- 27900K .......... .......... .......... .......... .......... 99% 13.7M 0s
- 27950K .......... .......... .......... .......... .......... 99% 10.3M 0s
- 28000K .......... .......... .......... .......... .......... 99% 8.80M 0s
- 28050K .......... .......... .......... .. 100% 24.9M=2.8s
-
-2014-01-16 19:58:45 (9.79 MB/s) - ‘/Users/kraft/annex/.git/annex/tmp/SHA256E-s28756861--4bea2d816a701dbfc88eada2288019c92c2774ee605e4ddfa62c4dd7655e53a1.dmg’ saved [28756861/28756861]
-
-[2014-01-16 19:58:45 CET] Transferrer: Downloaded git-annex.. upgrade)
-Checksumming Protective Master Boot Record (MBR : 0)…
-Protective Master Boot Record (MBR :: verified CRC32 $BFC39E6D
-Checksumming GPT Header (Primary GPT Header : 1)…
- GPT Header (Primary GPT Header : 1): verified CRC32 $1B4A1450
-Checksumming GPT Partition Data (Primary GPT Table : 2)…
-GPT Partition Data (Primary GPT Tabl: verified CRC32 $78D54639
-Checksumming (Apple_Free : 3)…
- (Apple_Free : 3): verified CRC32 $00000000
-Checksumming disk image (Apple_HFS : 4)…
- disk image (Apple_HFS : 4): verified CRC32 $1E0144DA
-Checksumming (Apple_Free : 5)…
- (Apple_Free : 5): verified CRC32 $00000000
-Checksumming GPT Partition Data (Backup GPT Table : 6)…
-GPT Partition Data (Backup GPT Table: verified CRC32 $78D54639
-Checksumming GPT Header (Backup GPT Header : 7)…
- GPT Header (Backup GPT Header : 7): verified CRC32 $61044DA0
-verified CRC32 $E2335ED3
-/dev/disk4 GUID_partition_scheme
-/dev/disk4s1 Apple_HFS /Applications/git-annex.upgrade.0
-
-(gpg)
-
-0% 0.0 B/s 0s
-0% 0.0 B/s 0s
-0% 0.0 B/s 0s
-0% 0.0 B/s 0s
-0% 0.0 B/s 0s
-0% 191.9KB/s 2m25s
-0% 74.6KB/s 6m13s
-0% 85.3KB/s 5m26s
-1% 96.0KB/s 4m50s
-1% 106.6KB/s 4m20s
-1% 117.3KB/s 3m56s
-1% 127.9KB/s 3m37s
-1% 138.6KB/s 3m20s
-1% 149.3KB/s 3m5s
-1% 159.9KB/s 2m53s
-1% 170.6KB/s 2m42s
-1% 181.2KB/s 2m32s
-2% 191.9KB/s 2m23s
-2% 202.6KB/s 2m16s
-2% 213.2KB/s 2m9s
-2% 223.9KB/s 2m2s
-2% 234.6KB/s 1m57s
-2% 245.2KB/s 1m52s
-2% 255.9KB/s 1m47s
-2% 266.5KB/s 1m42s
-2% 277.2KB/s 1m38s
-3% 287.9KB/s 1m35s
-3% 298.5KB/s 1m31s
-3% 309.2KB/s 1m28s
-3% 319.8KB/s 1m25s
-3% 330.5KB/s 1m22s
-3% 341.2KB/s 1m19s
-3% 351.8KB/s 1m17s
-3% 362.5KB/s 1m14s
-3% 373.2KB/s 1m12s
-4% 383.8KB/s 1m10s
-4% 394.5KB/s 1m8s
-4% 405.1KB/s 1m6s
-4% 415.8KB/s 1m5s
-4% 426.5KB/s 1m3s
-4% 437.1KB/s 1m1s
-4% 447.8KB/s 1m0s
-4% 458.4KB/s 58s
-5% 469.1KB/s 57s
-5% 479.8KB/s 56s
-5% 490.4KB/s 54s
-5% 501.1KB/s 53s
-5% 511.8KB/s 52s
-5% 522.4KB/s 51s
-5% 533.1KB/s 50s
-5% 543.7KB/s 49s
-5% 554.4KB/s 48s
-6% 565.1KB/s 47s
-6% 575.7KB/s 46s
-6% 586.4KB/s 45s
-6% 597.0KB/s 44s
-6% 607.7KB/s 43s
-6% 618.4KB/s 42s
-6% 629.0KB/s 42s
-6% 639.7KB/s 41s
-6% 650.3KB/s 40s
-7% 661.0KB/s 39s
-7% 671.7KB/s 39s
-7% 682.3KB/s 38s
-7% 693.0KB/s 38s\"disk4\" unmounted.
-\"disk4\" ejected.
-
-7% 703.7KB/s 37s
-7% 714.3KB/s 36s
-7% 725.0KB/s 36s
-7% 735.6KB/s 35s
-7% 746.3KB/s 35s
-8% 757.0KB/s 34s
-8% 767.6KB/s 34s
-8% 778.3KB/s 33s
-8% 788.9KB/s 33s
-8% 799.6KB/s 32s
-8% 810.3KB/s 32s
-8% 820.9KB/s 31s
-8% 831.6KB/s 31s
-8% 842.3KB/s 30s
-9% 852.9KB/s 30s
-9% 863.6KB/s 30s
-9% 874.2KB/s 29s
-9% 884.9KB/s 29s
-9% 895.6KB/s 28s
-9% 906.2KB/s 28s
-9% 916.9KB/s 28s
-9% 927.5KB/s 27s
-10% 938.2KB/s 27s
-10% 948.9KB/s 27s
-10% 959.5KB/s 26s
-10% 970.2KB/s 26s
-10% 980.9KB/s 26s
-10% 991.5KB/s 25s
-10% 1002.2KB/s 25s
-10% 1012.8KB/s 25s
-10% 1023.5KB/s 24s
-11% 1.0MB/s 24s
-11% 1.0MB/s 24s
-11% 1.0MB/s 24s
-11% 1.0MB/s 23s
-11% 1.1MB/s 23s
-11% 1.1MB/s 23s
-11% 1.1MB/s 23s
-11% 1.1MB/s 22s
-11% 1.1MB/s 22s
-12% 1.1MB/s 22s
-12% 1.1MB/s 22s
-12% 1.1MB/s 21s
-12% 1.1MB/s 21s
-12% 1.1MB/s 21s
-12% 1.2MB/s 21s
-12% 1.2MB/s 21s
-12% 1.2MB/s 20s
-12% 1.2MB/s 20s
-13% 1.2MB/s 20s
-13% 1.2MB/s 20s
-13% 1.2MB/s 20s
-13% 1.2MB/s 19s
-13% 1.2MB/s 19s
-13% 1.2MB/s 19s
-13% 1.3MB/s 19s
-13% 1.3MB/s 19s
-14% 1.3MB/s 18s
-14% 1.3MB/s 18s
-14% 1.3MB/s 18s
-14% 1.3MB/s 18s
-14% 1.3MB/s 18s
-14% 1.3MB/s 18s
-14% 1.3MB/s 17s
-14% 1.4MB/s 17s
-14% 1.4MB/s 17s
-15% 1.4MB/s 17s
-15% 1.4MB/s 17s
-15% 1.4MB/s 17s
-15% 1.4MB/s 17s
-15% 1.4MB/s 16s
-15% 1.4MB/s 16s
-15% 1.4MB/s 16s
-15% 1.4MB/s 16s
-15% 1.5MB/s 16s
-16% 1.5MB/s 16s
-16% 1.5MB/s 16s
-16% 1.5MB/s 15s
-16% 1.5MB/s 15s
-16% 1.5MB/s 15s
-16% 1.5MB/s 15s
-16% 1.5MB/s 15s
-16% 1.5MB/s 15s
-16% 1.6MB/s 15s
-17% 1.6MB/s 15s
-17% 1.6MB/s 14s
-17% 1.6MB/s 14s
-17% 1.6MB/s 14s
-17% 1.6MB/s 14s
-17% 1.6MB/s 14s
-17% 1.6MB/s 14s
-17% 1.6MB/s 14s
-17% 1.6MB/s 14s
-18% 1.7MB/s 14s
-18% 1.7MB/s 13s
-18% 1.7MB/s 13s
-18% 1.7MB/s 13s
-18% 1.7MB/s 13s
-18% 1.7MB/s 13s
-18% 1.7MB/s 13s
-18% 1.7MB/s 13s
-19% 1.7MB/s 13s
-19% 1.7MB/s 13s
-19% 1.8MB/s 13s
-19% 1.8MB/s 12s
-19% 1.8MB/s 12s
-19% 1.8MB/s 12s
-19% 1.4MB/s 16s
-19% 1.4MB/s 16s
-19% 1.4MB/s 16s
-20% 1.4MB/s 16s
-20% 1.4MB/s 16s
-20% 1.4MB/s 16s
-20% 1.4MB/s 16s
-20% 1.4MB/s 16s
-20% 1.4MB/s 15s
-20% 1.4MB/s 15s
-20% 1.4MB/s 15s
-20% 1.4MB/s 15s
-21% 1.4MB/s 15s
-21% 1.5MB/s 15s
-21% 1.5MB/s 15s
-21% 1.5MB/s 15s
-21% 1.5MB/s 15s
-21% 1.5MB/s 14s
-21% 1.5MB/s 14s
-21% 1.5MB/s 14s
-21% 1.5MB/s 14s
-22% 1.5MB/s 14s
-22% 1.5MB/s 14s
-22% 1.5MB/s 14s
-22% 1.5MB/s 14s
-22% 1.5MB/s 14s
-22% 1.6MB/s 14s
-22% 1.6MB/s 14s
-22% 1.6MB/s 13s
-23% 1.6MB/s 13s
-23% 1.6MB/s 13s
-23% 1.6MB/s 13s
-23% 1.6MB/s 13s
-23% 1.6MB/s 13s
-23% 1.6MB/s 13s
-23% 1.6MB/s 13s
-23% 1.6MB/s 13s
-23% 1.6MB/s 13s
-24% 1.6MB/s 13s
-24% 1.7MB/s 13s
-24% 1.7MB/s 12s
-24% 1.7MB/s 12s
-24% 1.7MB/s 12s
-24% 1.7MB/s 12s
-24% 1.7MB/s 12s
-24% 1.7MB/s 12s
-24% 1.7MB/s 12s
-25% 1.7MB/s 12s
-25% 1.7MB/s 12s
-25% 1.7MB/s 12s
-25% 1.7MB/s 12s
-25% 1.7MB/s 12s
-25% 1.8MB/s 12s
-25% 1.8MB/s 12s
-25% 1.8MB/s 11s
-25% 1.8MB/s 11s
-26% 1.8MB/s 11s
-26% 1.8MB/s 11s
-26% 1.8MB/s 11s
-26% 1.8MB/s 11s
-26% 1.8MB/s 11s
-26% 1.8MB/s 11s
-26% 1.8MB/s 11s
-26% 1.8MB/s 11s
-26% 1.9MB/s 11s
-27% 1.9MB/s 11s
-27% 1.9MB/s 11s
-27% 1.9MB/s 11s
-27% 1.9MB/s 11s
-27% 1.9MB/s 11s
-27% 1.9MB/s 10s
-27% 1.9MB/s 10s
-27% 1.9MB/s 10s
-28% 1.9MB/s 10s
-28% 1.9MB/s 10s
-28% 1.9MB/s 10s
-28% 1.9MB/s 10s
-28% 2.0MB/s 10s
-28% 2.0MB/s 10s
-28% 2.0MB/s 10s
-28% 2.0MB/s 10s
-28% 2.0MB/s 10s
-29% 2.0MB/s 10s
-29% 2.0MB/s 10s
-29% 2.0MB/s 10s
-29% 2.0MB/s 10s
-29% 2.0MB/s 10s
-29% 2.0MB/s 10s
-29% 2.0MB/s 9s
-29% 2.0MB/s 9s
-29% 2.1MB/s 9s
-30% 2.1MB/s 9s
-30% 2.1MB/s 9s
-30% 2.1MB/s 9s
-30% 2.1MB/s 9s
-30% 2.1MB/s 9s
-30% 2.1MB/s 9s
-30% 2.1MB/s 9s
-30% 2.1MB/s 9s
-30% 2.1MB/s 9s
-31% 2.1MB/s 9s
-31% 2.1MB/s 9s
-31% 2.1MB/s 9s
-31% 2.2MB/s 9s
-31% 2.2MB/s 9s
-31% 2.2MB/s 9s
-31% 2.2MB/s 9s
-31% 2.2MB/s 9s
-32% 2.2MB/s 8s
-32% 2.2MB/s 8s
-32% 2.2MB/s 8s
-32% 2.2MB/s 8s
-32% 2.2MB/s 8s
-32% 2.2MB/s 8s
-32% 2.2MB/s 8s
-32% 2.2MB/s 8s
-32% 2.3MB/s 8s
-33% 2.3MB/s 8s
-33% 2.3MB/s 8s
-33% 2.3MB/s 8s
-33% 2.3MB/s 8s
-33% 2.3MB/s 8s
-33% 2.3MB/s 8s
-33% 2.3MB/s 8s
-33% 2.3MB/s 8s
-33% 2.3MB/s 8s
-34% 2.3MB/s 8s
-34% 2.3MB/s 8s
-34% 2.4MB/s 8s
-34% 2.4MB/s 8s
-34% 2.4MB/s 8s
-34% 2.4MB/s 8s
-34% 2.4MB/s 8s
-34% 2.4MB/s 7s
-34% 2.4MB/s 7s
-35% 2.4MB/s 7s
-35% 2.4MB/s 7s
-35% 2.4MB/s 7s
-35% 2.4MB/s 7sgit-annex version: 5.20140116-gd2fce02
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
-remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook external
-local repository version: 5
-supported repository version: 5
-upgrade supported from repository versions: 0 1 2 4
-[2014-01-16 19:58:59 CET] Upgrader: Upgrading git-annex
-
-35% 665.3KB/s 27s
-35% 667.4KB/s 27s
-35% 669.5KB/s 27s
-35% 671.7KB/s 27s
-35% 673.8KB/s 27s
-36% 675.9KB/s 27s
-36% 678.1KB/s 26s
-36% 680.2KB/s 26s
-36% 682.3KB/s 26s
-36% 684.5KB/s 26s
-36% 686.6KB/s 26s
-36% 688.7KB/s 26s
-36% 690.9KB/s 26s
-37% 693.0KB/s 26s
-37% 695.1KB/s 25s
-37% 697.3KB/s 25s
-37% 699.4KB/s 25s
-37% 701.5KB/s 25s
-37% 703.7KB/s 25s
-37% 705.8KB/s 25s
-37% 707.9KB/s 25s
-37% 710.1KB/s 25s
-38% 712.2KB/s 24s
-38% 714.3KB/s 24s
-38% 716.4KB/s 24s
-38% 718.6KB/s 24s
-38% 720.7KB/s 24s
-38% 722.8KB/s 24s
-38% 725.0KB/s 24s
-38% 727.1KB/s 24s
-38% 729.2KB/s 24s
-39% 731.4KB/s 23s
-39% 733.5KB/s 23s
-39% 735.6KB/s 23s
-39% 737.8KB/s 23s
-39% 739.9KB/s 23s
-39% 742.0KB/s 23s
-39% 744.2KB/s 23s
-39% 746.3KB/s 23s
-39% 748.4KB/s 23s
-40% 750.6KB/s 22s
-40% 752.7KB/s 22s
-40% 754.8KB/s 22s
-40% 757.0KB/s 22s
-40% 759.1KB/s 22s
-40% 761.2KB/s 22s
-40% 763.4KB/s 22s
-40% 765.5KB/s 22s
-41% 767.6KB/s 22s
-41% 769.8KB/s 21s
-41% 771.9KB/s 21s
-41% 774.0KB/s 21s
-41% 776.2KB/s 21s
-41% 778.3KB/s 21s
-41% 780.4KB/s 21s
-41% 782.6KB/s 21s
-41% 784.7KB/s 21s
-42% 786.8KB/s 21s
-42% 788.9KB/s 21s
-42% 791.1KB/s 20s
-42% 793.2KB/s 20s
-42% 795.3KB/s 20s
-42% 797.5KB/s 20s
-42% 799.6KB/s 20s
-42% 801.7KB/s 20s
-42% 803.9KB/s 20s
-43% 806.0KB/s 20s
-43% 808.1KB/s 20s
-43% 810.3KB/s 20s
-43% 812.4KB/s 20s
-43% 814.5KB/s 19s
-43% 816.7KB/s 19s
-43% 818.8KB/s 19s
-43% 820.9KB/s 19s
-43% 823.1KB/s 19s
-44% 825.2KB/s 19s
-44% 827.3KB/s 19s
-44% 829.5KB/s 19s
-44% 831.6KB/s 19s
-44% 833.7KB/s 19s
-44% 835.9KB/s 19s
-44% 838.0KB/s 19s
-44% 840.1KB/s 18s
-44% 842.3KB/s 18s
-45% 844.4KB/s 18s
-45% 846.5KB/s 18s
-45% 848.7KB/s 18s
-45% 850.8KB/s 18s
-45% 852.9KB/s 18s
-45% 855.0KB/s 18s
-45% 857.2KB/s 18s
-45% 859.3KB/s 18s
-46% 861.4KB/s 18s
-46% 863.6KB/s 18s
-46% 865.7KB/s 17s
-46% 867.8KB/s 17s
-46% 870.0KB/s 17s
-46% 872.1KB/s 17s
-46% 874.2KB/s 17s
-46% 876.4KB/s 17s
-46% 878.5KB/s 17s
-47% 880.6KB/s 17s
-47% 882.8KB/s 17s
-47% 884.9KB/s 17s
-47% 887.0KB/s 17s
-47% 889.2KB/s 17s
-47% 891.3KB/s 17s
-47% 893.4KB/s 16s
-47% 895.6KB/s 16s
-47% 897.7KB/s 16s
-48% 899.8KB/s 16s
-48% 902.0KB/s 16s
-48% 904.1KB/s 16s
-48% 906.2KB/s 16s
-48% 908.4KB/s 16s
-48% 910.5KB/s 16s
-48% 912.6KB/s 16s
-48% 914.8KB/s 16s
-48% 916.9KB/s 16s
-49% 919.0KB/s 16s
-49% 921.1KB/s 15s
-49% 923.3KB/s 15s
-49% 925.4KB/s 15s
-49% 927.5KB/s 15s
-49% 929.7KB/s 15s
-49% 931.8KB/s 15s
-49% 933.9KB/s 15s
-49% 936.1KB/s 15s
-50% 938.2KB/s 15s
-50% 940.3KB/s 15s
-50% 942.5KB/s 15s
-50% 944.6KB/s 15s
-50% 946.7KB/s 15s
-50% 948.9KB/s 15s
-50% 951.0KB/s 15s
-50% 953.1KB/s 14s
-51% 955.3KB/s 14s
-51% 957.4KB/s 14s
-51% 959.5KB/s 14s
-51% 961.7KB/s 14s
-51% 963.8KB/s 14s
-51% 965.9KB/s 14s
-51% 968.1KB/s 14s
-51% 970.2KB/s 14s
-51% 972.3KB/s 14s
-52% 974.5KB/s 14s
-52% 976.6KB/s 14s
-52% 978.7KB/s 14s
-52% 980.9KB/s 14s
-52% 983.0KB/s 14s
-52% 985.1KB/s 14s
-52% 987.3KB/s 13s
-52% 989.4KB/s 13s
-52% 991.5KB/s 13s
-53% 993.6KB/s 13s
-53% 995.8KB/s 13s
-53% 997.9KB/s 13s
-53% 1000.0KB/s 13s
-53% 1002.2KB/s 13s
-53% 1004.3KB/s 13s
-53% 1006.4KB/s 13s
-53% 1008.6KB/s 13s
-53% 1010.7KB/s 13s
-54% 1012.8KB/s 13s
-54% 1015.0KB/s 13s
-54% 1017.1KB/s 13s
-54% 1019.2KB/s 13s
-54% 1021.4KB/s 12s
-54% 1023.5KB/s 12s
-54% 1.0MB/s 12s
-54% 1.0MB/s 12s
-55% 1.0MB/s 12s
-55% 1.0MB/s 12s
-55% 1.0MB/s 12s
-55% 1.0MB/s 12s
-55% 1.0MB/s 12s
-55% 1.0MB/s 12s
-55% 1.0MB/s 12s
-55% 1.0MB/s 12s
-55% 1.0MB/s 12s
-56% 1.0MB/s 12s
-56% 1.0MB/s 12s
-56% 1.0MB/s 12s
-56% 1.0MB/s 12s
-56% 1.0MB/s 12s
-56% 1.0MB/s 11s
-56% 1.0MB/s 11s
-56% 1.0MB/s 11s
-56% 1.0MB/s 11s
-57% 1.0MB/s 11s
-57% 1.0MB/s 11s
-57% 1.0MB/s 11s
-57% 1.0MB/s 11s
-57% 1.1MB/s 11s
-57% 1.1MB/s 11s
-57% 1.1MB/s 11s
-57% 1.1MB/s 11s
-57% 1.1MB/s 11s
-58% 1.1MB/s 11s
-58% 1.1MB/s 11s
-58% 1.1MB/s 11s
-58% 1.1MB/s 11s
-58% 1.1MB/s 11s
-58% 1.1MB/s 11s
-58% 1.1MB/s 11s
-58% 1.1MB/s 10s
-58% 1.1MB/s 10s
-59% 1.1MB/s 10s
-59% 1.1MB/s 10s
-59% 1.1MB/s 10s
-59% 1.1MB/s 10s
-59% 1.1MB/s 10s
-59% 1.1MB/s 10s
-59% 1.1MB/s 10s
-59% 1.1MB/s 10s
-60% 1.1MB/s 10s
-60% 1.1MB/s 10s
-60% 1.1MB/s 10s
-60% 1.1MB/s 10s
-60% 1.1MB/s 10s
-60% 1.1MB/s 10s
-60% 1.1MB/s 10s
-60% 1.1MB/s 10s
-60% 1.1MB/s 10s
-61% 1.1MB/s 10s
-61% 1.1MB/s 10s
-61% 1.1MB/s 9s
-61% 1.1MB/s 9s
-61% 1.1MB/s 9s
-61% 1.1MB/s 9s
-61% 1.1MB/s 9s
-61% 1.1MB/s 9s
-61% 1.1MB/s 9s
-62% 1.1MB/s 9s
-62% 1.1MB/s 9s
-62% 1.1MB/s 9s
-62% 1.1MB/s 9s
-62% 1.1MB/s 9s
-62% 1.1MB/s 9s
-62% 1.1MB/s 9s
-62% 1.1MB/s 9s
-62% 1.2MB/s 9s
-63% 1.2MB/s 9s
-63% 1.2MB/s 9s
-63% 1.2MB/s 9s
-63% 1.2MB/s 9s
-63% 1.2MB/s 9s
-63% 1.2MB/s 9s
-63% 1.2MB/s 9s
-63% 1.2MB/s 8s
-64% 1.2MB/s 8s
-64% 1.2MB/s 8s
-64% 1.2MB/s 8s
-64% 1.2MB/s 8s
-64% 1.2MB/s 8s
-64% 1.2MB/s 8s
-64% 1.2MB/s 8s
-64% 1.2MB/s 8s
-64% 1.2MB/s 8s
-65% 1.2MB/s 8s
-65% 1.2MB/s 8s
-65% 1.2MB/s 8s
-65% 1.2MB/s 8s
-65% 1.2MB/s 8s
-65% 1.2MB/s 8s
-65% 1.2MB/s 8s
-65% 1.2MB/s 8s
-65% 1.2MB/s 8s
-66% 1.2MB/s 8s
-66% 1.2MB/s 8s
-66% 1.2MB/s 8s
-66% 1.2MB/s 8s
-66% 1.2MB/s 8s
-66% 1.2MB/s 8s
-66% 1.2MB/s 7s
-66% 1.2MB/s 7s
-66% 1.2MB/s 7s
-67% 1.2MB/s 7s
-67% 1.2MB/s 7s
-67% 1.2MB/s 7s
-67% 1.2MB/s 7s
-67% 1.2MB/s 7s
-67% 1.2MB/s 7s
-67% 1.2MB/s 7s
-67% 1.2MB/s 7s
-67% 1.2MB/s 7s
-68% 1.2MB/s 7s
-68% 1.2MB/s 7s
-68% 1.2MB/s 7s
-68% 1.3MB/s 7s
-68% 1.3MB/s 7s
-68% 1.3MB/s 7s
-68% 1.3MB/s 7s
-68% 1.3MB/s 7s
-69% 1.3MB/s 7s
-69% 1.3MB/s 7s
-69% 1.3MB/s 7s
-69% 1.3MB/s 7s
-69% 1.3MB/s 7s
-69% 1.3MB/s 7s
-69% 1.3MB/s 7s
-69% 1.3MB/s 6s
-69% 1.3MB/s 6s
-70% 1.3MB/s 6s
-70% 1.2MB/s 7s
-70% 1.2MB/s 7s
-70% 1.2MB/s 7s
-70% 1.2MB/s 7s
-70% 1.2MB/s 7s
-70% 1.2MB/s 7s
-70% 1.2MB/s 7s
-70% 1.2MB/s 7s
-71% 767.6KB/s 11s
-71% 768.9KB/s 11s
-71% 770.1KB/s 10s
-71% 771.3KB/s 10s
-71% 772.5KB/s 10s
-71% 773.8KB/s 10s
-71% 775.0KB/s 10s
-71% 776.2KB/s 10s
-71% 777.5KB/s 10s
-72% 778.7KB/s 10s
-72% 779.9KB/s 10s
-72% 781.2KB/s 10s
-72% 782.4KB/s 10s
-72% 783.6KB/s 10s
-72% 784.8KB/s 10s
-72% 786.1KB/s 10s
-72% 787.3KB/s 10s
-73% 788.5KB/s 10s
-73% 789.8KB/s 10s
-73% 791.0KB/s 10s
-73% 792.2KB/s 9s
-73% 793.5KB/s 9s
-73% 794.7KB/s 9s
-73% 795.9KB/s 9s
-73% 797.1KB/s 9s
-73% 798.4KB/s 9s
-74% 799.6KB/s 9s
-74% 800.8KB/s 9s
-74% 802.1KB/s 9s
-74% 803.3KB/s 9s
-74% 804.5KB/s 9s
-74% 805.8KB/s 9s
-74% 807.0KB/s 9s
-74% 808.2KB/s 9s
-74% 809.5KB/s 9s
-75% 810.7KB/s 9s
-75% 811.9KB/s 9s
-75% 813.1KB/s 9s
-75% 814.4KB/s 8s
-75% 815.6KB/s 8s
-75% 816.8KB/s 8s
-75% 818.1KB/s 8s
-75% 819.3KB/s 8s
-75% 820.5KB/s 8s
-76% 821.8KB/s 8s
-76% 823.0KB/s 8s
-76% 824.2KB/s 8s
-76% 825.4KB/s 8s
-76% 826.7KB/s 8s
-76% 827.9KB/s 8s
-76% 829.1KB/s 8s
-76% 830.4KB/s 8s
-76% 831.6KB/s 8s
-77% 832.8KB/s 8s
-77% 834.1KB/s 8s
-77% 835.3KB/s 8s
-77% 836.5KB/s 8s
-77% 837.7KB/s 8s
-77% 839.0KB/s 7s
-77% 840.2KB/s 7s
-77% 841.4KB/s 7s
-78% 842.7KB/s 7s
-78% 843.9KB/s 7s
-78% 845.1KB/s 7s
-78% 846.4KB/s 7s
-78% 847.6KB/s 7s
-78% 848.8KB/s 7s
-78% 850.0KB/s 7s
-78% 851.3KB/s 7s
-78% 852.5KB/s 7s
-79% 853.7KB/s 7s
-79% 855.0KB/s 7s
-79% 856.2KB/s 7s
-79% 857.4KB/s 7s
-79% 858.7KB/s 7s
-79% 859.9KB/s 7s
-79% 861.1KB/s 7s
-79% 862.3KB/s 7s
-79% 863.6KB/s 7s
-80% 864.8KB/s 6s
-80% 866.0KB/s 6s
-80% 867.3KB/s 6s
-80% 868.5KB/s 6s
-80% 869.7KB/s 6s
-80% 871.0KB/s 6s
-80% 872.2KB/s 6s
-80% 873.4KB/s 6s
-80% 874.6KB/s 6s
-81% 875.9KB/s 6s
-81% 877.1KB/s 6s
-81% 878.3KB/s 6s
-81% 879.6KB/s 6s
-81% 880.8KB/s 6s
-81% 882.0KB/s 6s
-81% 883.3KB/s 6s
-81% 884.5KB/s 6s
-82% 885.7KB/s 6s
-82% 887.0KB/s 6s
-82% 888.2KB/s 6s
-82% 889.4KB/s 6s
-82% 890.6KB/s 6s
-82% 891.9KB/s 5s
-82% 893.1KB/s 5s
-82% 894.3KB/s 5s
-82% 895.6KB/s 5s
-83% 896.8KB/s 5s
-83% 898.0KB/s 5s
-83% 899.3KB/s 5s
-83% 900.5KB/s 5s
-83% 901.7KB/s 5s
-83% 902.9KB/s 5s
-83% 904.2KB/s 5s
-83% 905.4KB/s 5s
-83% 906.6KB/s 5s
-84% 907.9KB/s 5s
-84% 909.1KB/s 5s
-84% 910.3KB/s 5s
-84% 911.6KB/s 5s
-84% 912.8KB/s 5s
-84% 914.0KB/s 5s
-84% 915.2KB/s 5s
-84% 916.5KB/s 5s
-84% 917.7KB/s 5s
-85% 918.9KB/s 5s
-85% 920.2KB/s 5s
-85% 921.4KB/s 4s
-85% 922.6KB/s 4s
-85% 923.9KB/s 4s
-85% 925.1KB/s 4s
-85% 926.3KB/s 4s
-85% 927.5KB/s 4s
-85% 928.8KB/s 4s
-86% 930.0KB/s 4s
-86% 931.2KB/s 4s
-86% 932.5KB/s 4s
-86% 933.7KB/s 4s
-86% 934.9KB/s 4s
-86% 936.2KB/s 4s
-86% 937.4KB/s 4s
-86% 938.6KB/s 4s
-87% 939.8KB/s 4s
-87% 941.1KB/s 4s
-87% 942.3KB/s 4s
-87% 943.5KB/s 4s
-87% 944.8KB/s 4s
-87% 946.0KB/s 4s
-87% 947.2KB/s 4s
-87% 948.5KB/s 4s
-87% 949.7KB/s 4s
-88% 950.9KB/s 4s
-88% 952.1KB/s 3s
-88% 953.4KB/s 3s
-88% 954.6KB/s 3s
-88% 955.8KB/s 3s
-88% 957.1KB/s 3s
-88% 958.3KB/s 3s
-88% 959.5KB/s 3s
-88% 960.8KB/s 3s
-89% 962.0KB/s 3s
-89% 963.2KB/s 3s
-89% 964.5KB/s 3s
-89% 965.7KB/s 3s
-89% 966.9KB/s 3s
-89% 968.1KB/s 3s
-89% 969.4KB/s 3s
-89% 970.6KB/s 3s
-89% 971.8KB/s 3s
-90% 973.1KB/s 3s
-90% 974.3KB/s 3s
-90% 975.5KB/s 3s
-90% 976.8KB/s 3s
-90% 941.8KB/s 3s
-90% 942.9KB/s 3s
-90% 944.1KB/s 3s
-90% 945.3KB/s 3s
-91% 946.5KB/s 3s
-91% 947.7KB/s 3s
-91% 948.9KB/s 3s
-91% 950.1KB/s 3s
-91% 951.2KB/s 3s
-91% 952.4KB/s 2s
-91% 953.6KB/s 2s
-91% 954.8KB/s 2s
-91% 956.0KB/s 2s
-92% 957.2KB/s 2s
-92% 958.3KB/s 2s
-92% 959.5KB/s 2s
-92% 960.7KB/s 2s
-92% 961.9KB/s 2s
-92% 963.1KB/s 2s
-92% 964.3KB/s 2s
-92% 965.5KB/s 2s
-92% 966.6KB/s 2s
-93% 967.8KB/s 2s
-93% 969.0KB/s 2s
-93% 970.2KB/s 2s
-93% 971.4KB/s 2s
-93% 972.6KB/s 2s
-93% 973.7KB/s 2s
-93% 974.9KB/s 2s
-93% 976.1KB/s 2s
-93% 977.3KB/s 2s
-94% 978.5KB/s 2s
-94% 979.7KB/s 2s
-94% 980.9KB/s 2s
-94% 982.0KB/s 2s
-94% 983.2KB/s 2s
-94% 984.4KB/s 2s
-94% 985.6KB/s 1s
-94% 986.8KB/s 1s
-94% 988.0KB/s 1s
-95% 989.1KB/s 1s
-95% 990.3KB/s 1s
-95% 991.5KB/s 1s
-95% 992.7KB/s 1s
-95% 993.9KB/s 1s
-95% 995.1KB/s 1s
-95% 996.3KB/s 1s
-95% 997.4KB/s 1s
-96% 998.6KB/s 1s
-96% 999.8KB/s 1s
-96% 1001.0KB/s 1s
-96% 1002.2KB/s 1s
-96% 1003.4KB/s 1s
-96% 1004.5KB/s 1s
-96% 1005.7KB/s 1s
-96% 1006.9KB/s 1s
-96% 1008.1KB/s 1s
-97% 1009.3KB/s 1s
-97% 1010.5KB/s 1s
-97% 1011.7KB/s 1s
-97% 1012.8KB/s 1s
-97% 1014.0KB/s 1s
-97% 1015.2KB/s 1s
-97% 1016.4KB/s 1s
-97% 1017.6KB/s 1s
-97% 1018.8KB/s 1s
-98% 1019.9KB/s 1s
-98% 1021.1KB/s 1s
-98% 1022.3KB/s 0s
-98% 1023.5KB/s 0s
-98% 1.0MB/s 0s
-98% 1.0MB/s 0s
-98% 1.0MB/s 0s
-98% 1.0MB/s 0s
-98% 1.0MB/s 0s
-99% 1.0MB/s 0s
-99% 1.0MB/s 0s
-99% 1.0MB/s 0s
-99% 1.0MB/s 0s
-99% 1.0MB/s 0s
-99% 1.0MB/s 0s
-99% 1.0MB/s 0s
-99% 1.0MB/s 0s
-99% 1.0MB/s 0s
-100% 1.0MB/s 0s
-
-[2014-01-16 19:59:44 CET] Transferrer: Uploaded git-annex.. upgrade)
-
-(Recording state in git...)
-(\"remove\",\"/Applications/git-annex.app/Contents/MacOS\")
-(\"remove\",\"/Applications/git-annex.app/Contents/MacOS/bundle\")
-(\"remove\",\"/Applications/git-annex.app/Contents/MacOS/bundle/A\")
-(Recording state in git...)
-(Recording state in git...)
-[2014-01-16 19:58:59 CET] main: starting assistant version 5.20140116-gd2fce02
-[2014-01-16 19:58:59 CET] UpgradeWatcher: Finished upgrading git-annex to version 5.20140116-gd2fce02
-(scanning...) [2014-01-16 19:58:59 CET] Watcher: Performing startup scan
-(started...) [2014-01-16 20:02:54 CET] main: starting assistant version 5.20131221-g00d1673
-(scanning...) [2014-01-16 20:02:54 CET] Watcher: Performing startup scan
-(started...) --2014-01-16 20:02:54-- https://downloads.kitenet.net/git-annex/OSX/current/10.9_Mavericks/git-annex.dmg
-Resolving downloads.kitenet.net... 80.68.85.49, 2001:41c8:125:49::10
-Connecting to downloads.kitenet.net|80.68.85.49|:443... connected.
-HTTP request sent, awaiting response... 200 OK
-Length: 28756861 (27M) [application/x-apple-diskimage]
-Saving to: ‘/Users/kraft/annex/.git/annex/tmp/SHA256E-s28756861--4bea2d816a701dbfc88eada2288019c92c2774ee605e4ddfa62c4dd7655e53a1.dmg’
-
- 0K .......... .......... .......... .......... .......... 0% 678K 41s
- 50K .......... .......... .......... .......... .......... 0% 2.61M 26s
- 100K .......... .......... .......... .......... .......... 0% 2.14M 21s
- 150K .......... .......... .......... .......... .......... 0% 2.16M 19s
- 200K .......... .......... .......... .......... .......... 0% 9.99M 16s
- 250K .......... .......... .......... .......... .......... 1% 1.15M 17s
- 300K .......... .......... .......... .......... .......... 1% 26.1M 15s
- 350K .......... .......... .......... .......... .......... 1% 37.0M 13s
- 400K .......... .......... .......... .......... .......... 1% 6.50M 12s
- 450K .......... .......... .......... .......... .......... 1% 917K 14s
- 500K .......... .......... .......... .......... .......... 1% 29.0M 13s
- 550K .......... .......... .......... .......... .......... 2% 41.5M 12s
- 600K .......... .......... .......... .......... .......... 2% 40.6M 11s
- 650K .......... .......... .......... .......... .......... 2% 3.43M 11s
- 700K .......... .......... .......... .......... .......... 2% 3.18M 10s
- 750K .......... .......... .......... .......... .......... 2% 10.8M 10s
- 800K .......... .......... .......... .......... .......... 3% 5.03M 10s
- 850K .......... .......... .......... .......... .......... 3% 3.04M 9s
- 900K .......... .......... .......... .......... .......... 3% 13.2M 9s
- 950K .......... .......... .......... .......... .......... 3% 6.36M 9s
- 1000K .......... .......... .......... .......... .......... 3% 2.83M 9s
- 1050K .......... .......... .......... .......... .......... 3% 17.0M 8s
- 1100K .......... .......... .......... .......... .......... 4% 10.8M 8s
- 1150K .......... .......... .......... .......... .......... 4% 7.25M 8s
- 1200K .......... .......... .......... .......... .......... 4% 2.73M 8s
- 1250K .......... .......... .......... .......... .......... 4% 11.7M 8s
- 1300K .......... .......... .......... .......... .......... 4% 10.7M 8s
- 1350K .......... .......... .......... .......... .......... 4% 10.3M 7s
- 1400K .......... .......... .......... .......... .......... 5% 3.03M 7s
- 1450K .......... .......... .......... .......... .......... 5% 10.4M 7s
- 1500K .......... .......... .......... .......... .......... 5% 13.9M 7s
- 1550K .......... .......... .......... .......... .......... 5% 10.4M 7s
- 1600K .......... .......... .......... .......... .......... 5% 2.54M 7s
- 1650K .......... .......... .......... .......... .......... 6% 17.4M 7s
- 1700K .......... .......... .......... .......... .......... 6% 12.4M 7s
- 1750K .......... .......... .......... .......... .......... 6% 13.7M 7s
- 1800K .......... .......... .......... .......... .......... 6% 3.06M 7s
- 1850K .......... .......... .......... .......... .......... 6% 10.6M 6s
- 1900K .......... .......... .......... .......... .......... 6% 10.6M 6s
- 1950K .......... .......... .......... .......... .......... 7% 10.9M 6s
- 2000K .......... .......... .......... .......... .......... 7% 3.54M 6s
- 2050K .......... .......... .......... .......... .......... 7% 8.47M 6s
- 2100K .......... .......... .......... .......... .......... 7% 13.6M 6s
- 2150K .......... .......... .......... .......... .......... 7% 10.5M 6s
- 2200K .......... .......... .......... .......... .......... 8% 10.1M 6s
- 2250K .......... .......... .......... .......... .......... 8% 3.53M 6s
- 2300K .......... .......... .......... .......... .......... 8% 13.7M 6s
- 2350K .......... .......... .......... .......... .......... 8% 11.1M 6s
- 2400K .......... .......... .......... .......... .......... 8% 8.59M 6s
- 2450K .......... .......... .......... .......... .......... 8% 4.69M 6s
- 2500K .......... .......... .......... .......... .......... 9% 8.56M 6s
- 2550K .......... .......... .......... .......... .......... 9% 10.6M 5s
- 2600K .......... .......... .......... .......... .......... 9% 10.9M 5s
- 2650K .......... .......... .......... .......... .......... 9% 10.4M 5s
- 2700K .......... .......... .......... .......... .......... 9% 13.6M 5s
- 2750K .......... .......... .......... .......... .......... 9% 4.73M 5s
- 2800K .......... .......... .......... .......... .......... 10% 6.21M 5s
- 2850K .......... .......... .......... .......... .......... 10% 10.4M 5s
- 2900K .......... .......... .......... .......... .......... 10% 14.2M 5s
- 2950K .......... .......... .......... .......... .......... 10% 8.62M 5s
- 3000K .......... .......... .......... .......... .......... 10% 5.97M 5s
- 3050K .......... .......... .......... .......... .......... 11% 11.0M 5s
- 3100K .......... .......... .......... .......... .......... 11% 10.6M 5s
- 3150K .......... .......... .......... .......... .......... 11% 10.1M 5s
- 3200K .......... .......... .......... .......... .......... 11% 8.09M 5s
- 3250K .......... .......... .......... .......... .......... 11% 8.28M 5s
- 3300K .......... .......... .......... .......... .......... 11% 7.31M 5s
- 3350K .......... .......... .......... .......... .......... 12% 11.1M 5s
- 3400K .......... .......... .......... .......... .......... 12% 13.2M 5s
- 3450K .......... .......... .......... .......... .......... 12% 8.47M 5s
- 3500K .......... .......... .......... .......... .......... 12% 13.7M 5s
- 3550K .......... .......... .......... .......... .......... 12% 10.3M 5s
- 3600K .......... .......... .......... .......... .......... 12% 5.25M 5s
- 3650K .......... .......... .......... .......... .......... 13% 6.90M 4s
- 3700K .......... .......... .......... .......... .......... 13% 12.2M 4s
- 3750K .......... .......... .......... .......... .......... 13% 32.1M 4s
- 3800K .......... .......... .......... .......... .......... 13% 9.01M 4s
- 3850K .......... .......... .......... .......... .......... 13% 7.23M 4s
- 3900K .......... .......... .......... .......... .......... 14% 6.05M 4s
- 3950K .......... .......... .......... .......... .......... 14% 11.7M 4s
- 4000K .......... .......... .......... .......... .......... 14% 8.74M 4s
- 4050K .......... .......... .......... .......... .......... 14% 10.8M 4s
- 4100K .......... .......... .......... .......... .......... 14% 10.6M 4s
- 4150K .......... .......... .......... .......... .......... 14% 10.9M 4s
- 4200K .......... .......... .......... .......... .......... 15% 8.60M 4s
- 4250K .......... .......... .......... .......... .......... 15% 8.74M 4s
- 4300K .......... .......... .......... .......... .......... 15% 13.0M 4s
- 4350K .......... .......... .......... .......... .......... 15% 11.0M 4s
- 4400K .......... .......... .......... .......... .......... 15% 9.44M 4s
- 4450K .......... .......... .......... .......... .......... 16% 10.8M 4s
- 4500K .......... .......... .......... .......... .......... 16% 10.3M 4s
- 4550K .......... .......... .......... .......... .......... 16% 10.7M 4s
- 4600K .......... .......... .......... .......... .......... 16% 10.7M 4s
- 4650K .......... .......... .......... .......... .......... 16% 10.5M 4s
- 4700K .......... .......... .......... .......... .......... 16% 11.2M 4s
- 4750K .......... .......... .......... .......... .......... 17% 11.1M 4s
- 4800K .......... .......... .......... .......... .......... 17% 8.86M 4s
- 4850K .......... .......... .......... .......... .......... 17% 10.4M 4s
- 4900K .......... .......... .......... .......... .......... 17% 9.17M 4s
- 4950K .......... .......... .......... .......... .......... 17% 17.9M 4s
- 5000K .......... .......... .......... .......... .......... 17% 10.7M 4s
- 5050K .......... .......... .......... .......... .......... 18% 10.6M 4s
- 5100K .......... .......... .......... .......... .......... 18% 13.5M 4s
- 5150K .......... .......... .......... .......... .......... 18% 9.65M 4s
- 5200K .......... .......... .......... .......... .......... 18% 9.31M 4s
- 5250K .......... .......... .......... .......... .......... 18% 10.7M 4s
- 5300K .......... .......... .......... .......... .......... 19% 13.8M 4s
- 5350K .......... .......... .......... .......... .......... 19% 8.37M 4s
- 5400K .......... .......... .......... .......... .......... 19% 8.20M 4s
- 5450K .......... .......... .......... .......... .......... 19% 14.5M 3s
- 5500K .......... .......... .......... .......... .......... 19% 10.2M 3s
- 5550K .......... .......... .......... .......... .......... 19% 14.4M 3s
- 5600K .......... .......... .......... .......... .......... 20% 7.02M 3s
- 5650K .......... .......... .......... .......... .......... 20% 8.57M 3s
- 5700K .......... .......... .......... .......... .......... 20% 10.1M 3s
- 5750K .......... .......... .......... .......... .......... 20% 14.4M 3s
- 5800K .......... .......... .......... .......... .......... 20% 10.2M 3s
- 5850K .......... .......... .......... .......... .......... 21% 10.6M 3s
- 5900K .......... .......... .......... .......... .......... 21% 13.6M 3s
- 5950K .......... .......... .......... .......... .......... 21% 10.8M 3s
- 6000K .......... .......... .......... .......... .......... 21% 8.41M 3s
- 6050K .......... .......... .......... .......... .......... 21% 14.0M 3s
- 6100K .......... .......... .......... .......... .......... 21% 10.3M 3s
- 6150K .......... .......... .......... .......... .......... 22% 13.9M 3s
- 6200K .......... .......... .......... .......... .......... 22% 10.5M 3s
- 6250K .......... .......... .......... .......... .......... 22% 10.6M 3s
- 6300K .......... .......... .......... .......... .......... 22% 13.9M 3s
- 6350K .......... .......... .......... .......... .......... 22% 10.9M 3s
- 6400K .......... .......... .......... .......... .......... 22% 8.47M 3s
- 6450K .......... .......... .......... .......... .......... 23% 13.9M 3s
- 6500K .......... .......... .......... .......... .......... 23% 11.0M 3s
- 6550K .......... .......... .......... .......... .......... 23% 10.6M 3s
- 6600K .......... .......... .......... .......... .......... 23% 10.3M 3s
- 6650K .......... .......... .......... .......... .......... 23% 13.3M 3s
- 6700K .......... .......... .......... .......... .......... 24% 10.7M 3s
- 6750K .......... .......... .......... .......... .......... 24% 13.9M 3s
- 6800K .......... .......... .......... .......... .......... 24% 6.09M 3s
- 6850K .......... .......... .......... .......... .......... 24% 11.0M 3s
- 6900K .......... .......... .......... .......... .......... 24% 10.6M 3s
- 6950K .......... .......... .......... .......... .......... 24% 10.6M 3s
- 7000K .......... .......... .......... .......... .......... 25% 10.2M 3s
- 7050K .......... .......... .......... .......... .......... 25% 13.6M 3s
- 7100K .......... .......... .......... .......... .......... 25% 7.14M 3s
- 7150K .......... .......... .......... .......... .......... 25% 13.7M 3s
- 7200K .......... .......... .......... .......... .......... 25% 8.64M 3s
- 7250K .......... .......... .......... .......... .......... 25% 10.5M 3s
- 7300K .......... .......... .......... .......... .......... 26% 13.8M 3s
- 7350K .......... .......... .......... .......... .......... 26% 10.3M 3s
- 7400K .......... .......... .......... .......... .......... 26% 10.7M 3s
- 7450K .......... .......... .......... .......... .......... 26% 13.9M 3s
- 7500K .......... .......... .......... .......... .......... 26% 10.6M 3s
- 7550K .......... .......... .......... .......... .......... 27% 10.4M 3s
- 7600K .......... .......... .......... .......... .......... 27% 10.6M 3s
- 7650K .......... .......... .......... .......... .......... 27% 10.6M 3s
- 7700K .......... .......... .......... .......... .......... 27% 10.4M 3s
- 7750K .......... .......... .......... .......... .......... 27% 13.3M 3s
- 7800K .......... .......... .......... .......... .......... 27% 10.9M 3s
- 7850K .......... .......... .......... .......... .......... 28% 10.7M 3s
- 7900K .......... .......... .......... .......... .......... 28% 13.4M 3s
- 7950K .......... .......... .......... .......... .......... 28% 10.6M 3s
- 8000K .......... .......... .......... .......... .......... 28% 8.99M 3s
- 8050K .......... .......... .......... .......... .......... 28% 10.4M 3s
- 8100K .......... .......... .......... .......... .......... 29% 13.4M 3s
- 8150K .......... .......... .......... .......... .......... 29% 11.1M 3s
- 8200K .......... .......... .......... .......... .......... 29% 10.3M 3s
- 8250K .......... .......... .......... .......... .......... 29% 8.12M 3s
- 8300K .......... .......... .......... .......... .......... 29% 10.9M 3s
- 8350K .......... .......... .......... .......... .......... 29% 10.9M 3s
- 8400K .......... .......... .......... .......... .......... 30% 8.68M 3s
- 8450K .......... .......... .......... .......... .......... 30% 10.2M 3s
- 8500K .......... .......... .......... .......... .......... 30% 11.0M 3s
- 8550K .......... .......... .......... .......... .......... 30% 8.39M 3s
- 8600K .......... .......... .......... .......... .......... 30% 13.2M 3s
- 8650K .......... .......... .......... .......... .......... 30% 10.4M 3s
- 8700K .......... .......... .......... .......... .......... 31% 10.9M 3s
- 8750K .......... .......... .......... .......... .......... 31% 13.6M 3s
- 8800K .......... .......... .......... .......... .......... 31% 8.53M 3s
- 8850K .......... .......... .......... .......... .......... 31% 13.5M 3s
- 8900K .......... .......... .......... .......... .......... 31% 10.8M 2s
- 8950K .......... .......... .......... .......... .......... 32% 10.3M 2s
- 9000K .......... .......... .......... .......... .......... 32% 4.73M 2s
- 9050K .......... .......... .......... .......... .......... 32% 10.7M 2s
- 9100K .......... .......... .......... .......... .......... 32% 22.9M 2s
- 9150K .......... .......... .......... .......... .......... 32% 21.4M 2s
- 9200K .......... .......... .......... .......... .......... 32% 16.9M 2s
- 9250K .......... .......... .......... .......... .......... 33% 10.8M 2s
- 9300K .......... .......... .......... .......... .......... 33% 11.3M 2s
- 9350K .......... .......... .......... .......... .......... 33% 10.5M 2s
- 9400K .......... .......... .......... .......... .......... 33% 14.1M 2s
- 9450K .......... .......... .......... .......... .......... 33% 11.4M 2s
- 9500K .......... .......... .......... .......... .......... 34% 10.4M 2s
- 9550K .......... .......... .......... .......... .......... 34% 10.7M 2s
- 9600K .......... .......... .......... .......... .......... 34% 8.70M 2s
- 9650K .......... .......... .......... .......... .......... 34% 14.2M 2s
- 9700K .......... .......... .......... .......... .......... 34% 10.6M 2s
- 9750K .......... .......... .......... .......... .......... 34% 8.24M 2s
- 9800K .......... .......... .......... .......... .......... 35% 10.6M 2s
- 9850K .......... .......... .......... .......... .......... 35% 10.3M 2s
- 9900K .......... .......... .......... .......... .......... 35% 10.5M 2s
- 9950K .......... .......... .......... .......... .......... 35% 10.8M 2s
- 10000K .......... .......... .......... .......... .......... 35% 8.75M 2s
- 10050K .......... .......... .......... .......... .......... 35% 14.2M 2s
- 10100K .......... .......... .......... .......... .......... 36% 10.9M 2s
- 10150K .......... .......... .......... .......... .......... 36% 11.3M 2s
- 10200K .......... .......... .......... .......... .......... 36% 10.2M 2s
- 10250K .......... .......... .......... .......... .......... 36% 15.1M 2s
- 10300K .......... .......... .......... .......... .......... 36% 10.7M 2s
- 10350K .......... .......... .......... .......... .......... 37% 11.1M 2s
- 10400K .......... .......... .......... .......... .......... 37% 8.88M 2s
- 10450K .......... .......... .......... .......... .......... 37% 11.1M 2s
- 10500K .......... .......... .......... .......... .......... 37% 10.9M 2s
- 10550K .......... .......... .......... .......... .......... 37% 10.8M 2s
- 10600K .......... .......... .......... .......... .......... 37% 13.8M 2s
- 10650K .......... .......... .......... .......... .......... 38% 11.0M 2s
- 10700K .......... .......... .......... .......... .......... 38% 10.4M 2s
- 10750K .......... .......... .......... .......... .......... 38% 10.7M 2s
- 10800K .......... .......... .......... .......... .......... 38% 10.7M 2s
- 10850K .......... .......... .......... .......... .......... 38% 10.5M 2s
- 10900K .......... .......... .......... .......... .......... 38% 11.0M 2s
- 10950K .......... .......... .......... .......... .......... 39% 13.2M 2s
- 11000K .......... .......... .......... .......... .......... 39% 10.4M 2s
- 11050K .......... .......... .......... .......... .......... 39% 14.1M 2s
- 11100K .......... .......... .......... .......... .......... 39% 10.1M 2s
- 11150K .......... .......... .......... .......... .......... 39% 10.6M 2s
- 11200K .......... .......... .......... .......... .......... 40% 10.3M 2s
- 11250K .......... .......... .......... .......... .......... 40% 10.7M 2s
- 11300K .......... .......... .......... .......... .......... 40% 10.6M 2s
- 11350K .......... .......... .......... .......... .......... 40% 14.0M 2s
- 11400K .......... .......... .......... .......... .......... 40% 10.2M 2s
- 11450K .......... .......... .......... .......... .......... 40% 11.1M 2s
- 11500K .......... .......... .......... .......... .......... 41% 13.6M 2s
- 11550K .......... .......... .......... .......... .......... 41% 10.6M 2s
- 11600K .......... .......... .......... .......... .......... 41% 8.08M 2s
- 11650K .......... .......... .......... .......... .......... 41% 15.4M 2s
- 11700K .......... .......... .......... .......... .......... 41% 10.4M 2s
- 11750K .......... .......... .......... .......... .......... 42% 13.9M 2s
- 11800K .......... .......... .......... .......... .......... 42% 10.6M 2s
- 11850K .......... .......... .......... .......... .......... 42% 10.5M 2s
- 11900K .......... .......... .......... .......... .......... 42% 13.5M 2s
- 11950K .......... .......... .......... .......... .......... 42% 10.5M 2s
- 12000K .......... .......... .......... .......... .......... 42% 8.47M 2s
- 12050K .......... .......... .......... .......... .......... 43% 13.8M 2s
- 12100K .......... .......... .......... .......... .......... 43% 10.5M 2s
- 12150K .......... .......... .......... .......... .......... 43% 10.5M 2s
- 12200K .......... .......... .......... .......... .......... 43% 13.3M 2s
- 12250K .......... .......... .......... .......... .......... 43% 10.5M 2s
- 12300K .......... .......... .......... .......... .......... 43% 14.2M 2s
- 12350K .......... .......... .......... .......... .......... 44% 10.6M 2s
- 12400K .......... .......... .......... .......... .......... 44% 8.62M 2s
- 12450K .......... .......... .......... .......... .......... 44% 10.6M 2s
- 12500K .......... .......... .......... .......... .......... 44% 13.9M 2s
- 12550K .......... .......... .......... .......... .......... 44% 10.1M 2s
- 12600K .......... .......... .......... .......... .......... 45% 14.0M 2s
- 12650K .......... .......... .......... .......... .......... 45% 10.8M 2s
- 12700K .......... .......... .......... .......... .......... 45% 10.5M 2s
- 12750K .......... .......... .......... .......... .......... 45% 13.5M 2s
- 12800K .......... .......... .......... .......... .......... 45% 8.55M 2s
- 12850K .......... .......... .......... .......... .......... 45% 10.2M 2s
- 12900K .......... .......... .......... .......... .......... 46% 15.4M 2s
- 12950K .......... .......... .......... .......... .......... 46% 10.6M 2s
- 13000K .......... .......... .......... .......... .......... 46% 10.2M 2s
- 13050K .......... .......... .......... .......... .......... 46% 14.0M 2s
- 13100K .......... .......... .......... .......... .......... 46% 10.5M 2s
- 13150K .......... .......... .......... .......... .......... 47% 13.8M 2s
- 13200K .......... .......... .......... .......... .......... 47% 7.17M 2s
- 13250K .......... .......... .......... .......... .......... 47% 15.1M 2s
- 13300K .......... .......... .......... .......... .......... 47% 10.4M 2s
- 13350K .......... .......... .......... .......... .......... 47% 14.4M 2s
- 13400K .......... .......... .......... .......... .......... 47% 10.2M 2s
- 13450K .......... .......... .......... .......... .......... 48% 10.7M 2s
- 13500K .......... .......... .......... .......... .......... 48% 13.8M 2s
- 13550K .......... .......... .......... .......... .......... 48% 10.8M 2s
- 13600K .......... .......... .......... .......... .......... 48% 8.70M 2s
- 13650K .......... .......... .......... .......... .......... 48% 10.3M 2s
- 13700K .......... .......... .......... .......... .......... 48% 13.6M 2s
- 13750K .......... .......... .......... .......... .......... 49% 10.9M 2s
- 13800K .......... .......... .......... .......... .......... 49% 13.2M 2s
- 13850K .......... .......... .......... .......... .......... 49% 10.6M 2s
- 13900K .......... .......... .......... .......... .......... 49% 13.6M 2s
- 13950K .......... .......... .......... .......... .......... 49% 10.9M 2s
- 14000K .......... .......... .......... .......... .......... 50% 8.44M 2s
- 14050K .......... .......... .......... .......... .......... 50% 10.9M 2s
- 14100K .......... .......... .......... .......... .......... 50% 10.5M 2s
- 14150K .......... .......... .......... .......... .......... 50% 13.8M 2s
- 14200K .......... .......... .......... .......... .......... 50% 10.4M 2s
- 14250K .......... .......... .......... .......... .......... 50% 13.9M 2s
- 14300K .......... .......... .......... .......... .......... 51% 10.3M 2s
- 14350K .......... .......... .......... .......... .......... 51% 11.1M 2s
- 14400K .......... .......... .......... .......... .......... 51% 10.3M 2s
- 14450K .......... .......... .......... .......... .......... 51% 10.1M 2s
- 14500K .......... .......... .......... .......... .......... 51% 10.9M 2s
- 14550K .......... .......... .......... .......... .......... 51% 14.1M 2s
- 14600K .......... .......... .......... .......... .......... 52% 10.4M 2s
- 14650K .......... .......... .......... .......... .......... 52% 13.1M 2s
- 14700K .......... .......... .......... .......... .......... 52% 6.99M 2s
- 14750K .......... .......... .......... .......... .......... 52% 18.7M 2s
- 14800K .......... .......... .......... .......... .......... 52% 10.0M 2s
- 14850K .......... .......... .......... .......... .......... 53% 13.6M 1s
- 14900K .......... .......... .......... .......... .......... 53% 10.8M 1s
- 14950K .......... .......... .......... .......... .......... 53% 10.9M 1s
- 15000K .......... .......... .......... .......... .......... 53% 13.7M 1s
- 15050K .......... .......... .......... .......... .......... 53% 10.6M 1s
- 15100K .......... .......... .......... .......... .......... 53% 10.3M 1s
- 15150K .......... .......... .......... .......... .......... 54% 14.2M 1s
- 15200K .......... .......... .......... .......... .......... 54% 8.33M 1s
- 15250K .......... .......... .......... .......... .......... 54% 11.4M 1s
- 15300K .......... .......... .......... .......... .......... 54% 13.7M 1s
- 15350K .......... .......... .......... .......... .......... 54% 10.3M 1s
- 15400K .......... .......... .......... .......... .......... 55% 11.0M 1s
- 15450K .......... .......... .......... .......... .......... 55% 10.8M 1s
- 15500K .......... .......... .......... .......... .......... 55% 13.6M 1s
- 15550K .......... .......... .......... .......... .......... 55% 11.0M 1s
- 15600K .......... .......... .......... .......... .......... 55% 8.67M 1s
- 15650K .......... .......... .......... .......... .......... 55% 13.5M 1s
- 15700K .......... .......... .......... .......... .......... 56% 10.7M 1s
- 15750K .......... .......... .......... .......... .......... 56% 10.4M 1s
- 15800K .......... .......... .......... .......... .......... 56% 13.6M 1s
- 15850K .......... .......... .......... .......... .......... 56% 10.5M 1s
- 15900K .......... .......... .......... .......... .......... 56% 13.6M 1s
- 15950K .......... .......... .......... .......... .......... 56% 10.4M 1s
- 16000K .......... .......... .......... .......... .......... 57% 8.40M 1s
- 16050K .......... .......... .......... .......... .......... 57% 13.9M 1s
- 16100K .......... .......... .......... .......... .......... 57% 10.3M 1s
- 16150K .......... .......... .......... .......... .......... 57% 13.7M 1s
- 16200K .......... .......... .......... .......... .......... 57% 10.7M 1s
- 16250K .......... .......... .......... .......... .......... 58% 10.9M 1s
- 16300K .......... .......... .......... .......... .......... 58% 13.7M 1s
- 16350K .......... .......... .......... .......... .......... 58% 10.1M 1s
- 16400K .......... .......... .......... .......... .......... 58% 8.63M 1s
- 16450K .......... .......... .......... .......... .......... 58% 14.2M 1s
- 16500K .......... .......... .......... .......... .......... 58% 10.3M 1s
- 16550K .......... .......... .......... .......... .......... 59% 10.7M 1s
- 16600K .......... .......... .......... .......... .......... 59% 13.7M 1s
- 16650K .......... .......... .......... .......... .......... 59% 10.4M 1s
- 16700K .......... .......... .......... .......... .......... 59% 13.7M 1s
- 16750K .......... .......... .......... .......... .......... 59% 10.9M 1s
- 16800K .......... .......... .......... .......... .......... 60% 8.52M 1s
- 16850K .......... .......... .......... .......... .......... 60% 10.7M 1s
- 16900K .......... .......... .......... .......... .......... 60% 13.7M 1s
- 16950K .......... .......... .......... .......... .......... 60% 10.5M 1s
- 17000K .......... .......... .......... .......... .......... 60% 13.5M 1s
- 17050K .......... .......... .......... .......... .......... 60% 10.3M 1s
- 17100K .......... .......... .......... .......... .......... 61% 10.0M 1s
- 17150K .......... .......... .......... .......... .......... 61% 14.5M 1s
- 17200K .......... .......... .......... .......... .......... 61% 8.33M 1s
- 17250K .......... .......... .......... .......... .......... 61% 11.0M 1s
- 17300K .......... .......... .......... .......... .......... 61% 13.5M 1s
- 17350K .......... .......... .......... .......... .......... 61% 10.6M 1s
- 17400K .......... .......... .......... .......... .......... 62% 10.3M 1s
- 17450K .......... .......... .......... .......... .......... 62% 13.5M 1s
- 17500K .......... .......... .......... .......... .......... 62% 10.3M 1s
- 17550K .......... .......... .......... .......... .......... 62% 14.2M 1s
- 17600K .......... .......... .......... .......... .......... 62% 8.63M 1s
- 17650K .......... .......... .......... .......... .......... 63% 10.5M 1s
- 17700K .......... .......... .......... .......... .......... 63% 6.89M 1s
- 17750K .......... .......... .......... .......... .......... 63% 13.9M 1s
- 17800K .......... .......... .......... .......... .......... 63% 10.3M 1s
- 17850K .......... .......... .......... .......... .......... 63% 10.4M 1s
- 17900K .......... .......... .......... .......... .......... 63% 13.5M 1s
- 17950K .......... .......... .......... .......... .......... 64% 10.6M 1s
- 18000K .......... .......... .......... .......... .......... 64% 8.49M 1s
- 18050K .......... .......... .......... .......... .......... 64% 14.3M 1s
- 18100K .......... .......... .......... .......... .......... 64% 10.6M 1s
- 18150K .......... .......... .......... .......... .......... 64% 11.5M 1s
- 18200K .......... .......... .......... .......... .......... 64% 10.2M 1s
- 18250K .......... .......... .......... .......... .......... 65% 13.7M 1s
- 18300K .......... .......... .......... .......... .......... 65% 10.4M 1s
- 18350K .......... .......... .......... .......... .......... 65% 13.7M 1s
- 18400K .......... .......... .......... .......... .......... 65% 8.40M 1s
- 18450K .......... .......... .......... .......... .......... 65% 10.7M 1s
- 18500K .......... .......... .......... .......... .......... 66% 13.6M 1s
- 18550K .......... .......... .......... .......... .......... 66% 10.8M 1s
- 18600K .......... .......... .......... .......... .......... 66% 13.2M 1s
- 18650K .......... .......... .......... .......... .......... 66% 10.4M 1s
- 18700K .......... .......... .......... .......... .......... 66% 10.8M 1s
- 18750K .......... .......... .......... .......... .......... 66% 10.6M 1s
- 18800K .......... .......... .......... .......... .......... 67% 10.3M 1s
- 18850K .......... .......... .......... .......... .......... 67% 10.5M 1s
- 18900K .......... .......... .......... .......... .......... 67% 13.6M 1s
- 18950K .......... .......... .......... .......... .......... 67% 10.4M 1s
- 19000K .......... .......... .......... .......... .......... 67% 10.4M 1s
- 19050K .......... .......... .......... .......... .......... 68% 14.3M 1s
- 19100K .......... .......... .......... .......... .......... 68% 10.8M 1s
- 19150K .......... .......... .......... .......... .......... 68% 10.5M 1s
- 19200K .......... .......... .......... .......... .......... 68% 10.1M 1s
- 19250K .......... .......... .......... .......... .......... 68% 7.01M 1s
- 19300K .......... .......... .......... .......... .......... 68% 13.8M 1s
- 19350K .......... .......... .......... .......... .......... 69% 10.6M 1s
- 19400K .......... .......... .......... .......... .......... 69% 10.3M 1s
- 19450K .......... .......... .......... .......... .......... 69% 13.7M 1s
- 19500K .......... .......... .......... .......... .......... 69% 10.6M 1s
- 19550K .......... .......... .......... .......... .......... 69% 13.7M 1s
- 19600K .......... .......... .......... .......... .......... 69% 8.42M 1s
- 19650K .......... .......... .......... .......... .......... 70% 10.6M 1s
- 19700K .......... .......... .......... .......... .......... 70% 13.6M 1s
- 19750K .......... .......... .......... .......... .......... 70% 10.5M 1s
- 19800K .......... .......... .......... .......... .......... 70% 13.3M 1s
- 19850K .......... .......... .......... .......... .......... 70% 10.6M 1s
- 19900K .......... .......... .......... .......... .......... 71% 10.2M 1s
- 19950K .......... .......... .......... .......... .......... 71% 15.0M 1s
- 20000K .......... .......... .......... .......... .......... 71% 8.37M 1s
- 20050K .......... .......... .......... .......... .......... 71% 10.4M 1s
- 20100K .......... .......... .......... .......... .......... 71% 13.7M 1s
- 20150K .......... .......... .......... .......... .......... 71% 10.3M 1s
- 20200K .......... .......... .......... .......... .......... 72% 13.4M 1s
- 20250K .......... .......... .......... .......... .......... 72% 10.7M 1s
- 20300K .......... .......... .......... .......... .......... 72% 5.78M 1s
- 20350K .......... .......... .......... .......... .......... 72% 23.6M 1s
- 20400K .......... .......... .......... .......... .......... 72% 16.9M 1s
- 20450K .......... .......... .......... .......... .......... 72% 10.5M 1s
- 20500K .......... .......... .......... .......... .......... 73% 10.6M 1s
- 20550K .......... .......... .......... .......... .......... 73% 10.9M 1s
- 20600K .......... .......... .......... .......... .......... 73% 13.9M 1s
- 20650K .......... .......... .......... .......... .......... 73% 10.5M 1s
- 20700K .......... .......... .......... .......... .......... 73% 13.2M 1s
- 20750K .......... .......... .......... .......... .......... 74% 11.6M 1s
- 20800K .......... .......... .......... .......... .......... 74% 8.34M 1s
- 20850K .......... .......... .......... .......... .......... 74% 10.5M 1s
- 20900K .......... .......... .......... .......... .......... 74% 14.8M 1s
- 20950K .......... .......... .......... .......... .......... 74% 10.7M 1s
- 21000K .......... .......... .......... .......... .......... 74% 10.3M 1s
- 21050K .......... .......... .......... .......... .......... 75% 13.7M 1s
- 21100K .......... .......... .......... .......... .......... 75% 10.3M 1s
- 21150K .......... .......... .......... .......... .......... 75% 10.5M 1s
- 21200K .......... .......... .......... .......... .......... 75% 8.52M 1s
- 21250K .......... .......... .......... .......... .......... 75% 13.9M 1s
- 21300K .......... .......... .......... .......... .......... 76% 9.85M 1s
- 21350K .......... .......... .......... .......... .......... 76% 13.6M 1s
- 21400K .......... .......... .......... .......... .......... 76% 10.3M 1s
- 21450K .......... .......... .......... .......... .......... 76% 13.6M 1s
- 21500K .......... .......... .......... .......... .......... 76% 10.9M 1s
- 21550K .......... .......... .......... .......... .......... 76% 10.9M 1s
- 21600K .......... .......... .......... .......... .......... 77% 10.1M 1s
- 21650K .......... .......... .......... .......... .......... 77% 10.4M 1s
- 21700K .......... .......... .......... .......... .......... 77% 10.6M 1s
- 21750K .......... .......... .......... .......... .......... 77% 14.1M 1s
- 21800K .......... .......... .......... .......... .......... 77% 9.90M 1s
- 21850K .......... .......... .......... .......... .......... 77% 11.5M 1s
- 21900K .......... .......... .......... .......... .......... 78% 13.6M 1s
- 21950K .......... .......... .......... .......... .......... 78% 10.9M 1s
- 22000K .......... .......... .......... .......... .......... 78% 8.19M 1s
- 22050K .......... .......... .......... .......... .......... 78% 14.9M 1s
- 22100K .......... .......... .......... .......... .......... 78% 10.6M 1s
- 22150K .......... .......... .......... .......... .......... 79% 10.3M 1s
- 22200K .......... .......... .......... .......... .......... 79% 13.2M 1s
- 22250K .......... .......... .......... .......... .......... 79% 11.2M 1s
- 22300K .......... .......... .......... .......... .......... 79% 14.1M 1s
- 22350K .......... .......... .......... .......... .......... 79% 10.3M 1s
- 22400K .......... .......... .......... .......... .......... 79% 8.35M 1s
- 22450K .......... .......... .......... .......... .......... 80% 13.6M 1s
- 22500K .......... .......... .......... .......... .......... 80% 10.6M 1s
- 22550K .......... .......... .......... .......... .......... 80% 10.4M 1s
- 22600K .......... .......... .......... .......... .......... 80% 13.6M 1s
- 22650K .......... .......... .......... .......... .......... 80% 10.7M 1s
- 22700K .......... .......... .......... .......... .......... 81% 13.6M 1s
- 22750K .......... .......... .......... .......... .......... 81% 11.1M 1s
- 22800K .......... .......... .......... .......... .......... 81% 8.39M 1s
- 22850K .......... .......... .......... .......... .......... 81% 13.9M 1s
- 22900K .......... .......... .......... .......... .......... 81% 10.6M 1s
- 22950K .......... .......... .......... .......... .......... 81% 11.0M 1s
- 23000K .......... .......... .......... .......... .......... 82% 13.7M 1s
- 23050K .......... .......... .......... .......... .......... 82% 10.8M 1s
- 23100K .......... .......... .......... .......... .......... 82% 10.6M 1s
- 23150K .......... .......... .......... .......... .......... 82% 13.4M 1s
- 23200K .......... .......... .......... .......... .......... 82% 8.85M 1s
- 23250K .......... .......... .......... .......... .......... 82% 10.4M 1s
- 23300K .......... .......... .......... .......... .......... 83% 10.3M 0s
- 23350K .......... .......... .......... .......... .......... 83% 13.5M 0s
- 23400K .......... .......... .......... .......... .......... 83% 10.4M 0s
- 23450K .......... .......... .......... .......... .......... 83% 14.6M 0s
- 23500K .......... .......... .......... .......... .......... 83% 10.5M 0s
- 23550K .......... .......... .......... .......... .......... 84% 10.5M 0s
- 23600K .......... .......... .......... .......... .......... 84% 10.1M 0s
- 23650K .......... .......... .......... .......... .......... 84% 10.5M 0s
- 23700K .......... .......... .......... .......... .......... 84% 10.3M 0s
- 23750K .......... .......... .......... .......... .......... 84% 14.3M 0s
- 23800K .......... .......... .......... .......... .......... 84% 10.3M 0s
- 23850K .......... .......... .......... .......... .......... 85% 13.5M 0s
- 23900K .......... .......... .......... .......... .......... 85% 10.5M 0s
- 23950K .......... .......... .......... .......... .......... 85% 14.3M 0s
- 24000K .......... .......... .......... .......... .......... 85% 8.25M 0s
- 24050K .......... .......... .......... .......... .......... 85% 10.4M 0s
- 24100K .......... .......... .......... .......... .......... 85% 11.5M 0s
- 24150K .......... .......... .......... .......... .......... 86% 14.0M 0s
- 24200K .......... .......... .......... .......... .......... 86% 10.6M 0s
- 24250K .......... .......... .......... .......... .......... 86% 10.7M 0s
- 24300K .......... .......... .......... .......... .......... 86% 13.2M 0s
- 24350K .......... .......... .......... .......... .......... 86% 10.8M 0s
- 24400K .......... .......... .......... .......... .......... 87% 8.49M 0s
- 24450K .......... .......... .......... .......... .......... 87% 13.9M 0s
- 24500K .......... .......... .......... .......... .......... 87% 10.7M 0s
- 24550K .......... .......... .......... .......... .......... 87% 10.4M 0s
- 24600K .......... .......... .......... .......... .......... 87% 14.0M 0s
- 24650K .......... .......... .......... .......... .......... 87% 10.0M 0s
- 24700K .......... .......... .......... .......... .......... 88% 13.9M 0s
- 24750K .......... .......... .......... .......... .......... 88% 10.9M 0s
- 24800K .......... .......... .......... .......... .......... 88% 8.49M 0s
- 24850K .......... .......... .......... .......... .......... 88% 10.6M 0s
- 24900K .......... .......... .......... .......... .......... 88% 13.8M 0s
- 24950K .......... .......... .......... .......... .......... 89% 10.7M 0s
- 25000K .......... .......... .......... .......... .......... 89% 13.6M 0s
- 25050K .......... .......... .......... .......... .......... 89% 10.6M 0s
- 25100K .......... .......... .......... .......... .......... 89% 10.7M 0s
- 25150K .......... .......... .......... .......... .......... 89% 13.7M 0s
- 25200K .......... .......... .......... .......... .......... 89% 8.53M 0s
- 25250K .......... .......... .......... .......... .......... 90% 10.5M 0s
- 25300K .......... .......... .......... .......... .......... 90% 13.6M 0s
- 25350K .......... .......... .......... .......... .......... 90% 10.7M 0s
- 25400K .......... .......... .......... .......... .......... 90% 10.6M 0s
- 25450K .......... .......... .......... .......... .......... 90% 13.5M 0s
- 25500K .......... .......... .......... .......... .......... 90% 10.3M 0s
- 25550K .......... .......... .......... .......... .......... 91% 10.6M 0s
- 25600K .......... .......... .......... .......... .......... 91% 10.0M 0s
- 25650K .......... .......... .......... .......... .......... 91% 11.5M 0s
- 25700K .......... .......... .......... .......... .......... 91% 10.9M 0s
- 25750K .......... .......... .......... .......... .......... 91% 13.5M 0s
- 25800K .......... .......... .......... .......... .......... 92% 10.3M 0s
- 25850K .......... .......... .......... .......... .......... 92% 10.3M 0s
- 25900K .......... .......... .......... .......... .......... 92% 14.4M 0s
- 25950K .......... .......... .......... .......... .......... 92% 10.6M 0s
- 26000K .......... .......... .......... .......... .......... 92% 5.04M 0s
- 26050K .......... .......... .......... .......... .......... 92% 14.1M 0s
- 26100K .......... .......... .......... .......... .......... 93% 37.3M 0s
- 26150K .......... .......... .......... .......... .......... 93% 12.2M 0s
- 26200K .......... .......... .......... .......... .......... 93% 13.6M 0s
- 26250K .......... .......... .......... .......... .......... 93% 10.4M 0s
- 26300K .......... .......... .......... .......... .......... 93% 11.4M 0s
- 26350K .......... .......... .......... .......... .......... 94% 13.5M 0s
- 26400K .......... .......... .......... .......... .......... 94% 8.37M 0s
- 26450K .......... .......... .......... .......... .......... 94% 10.9M 0s
- 26500K .......... .......... .......... .......... .......... 94% 13.4M 0s
- 26550K .......... .......... .......... .......... .......... 94% 10.3M 0s
- 26600K .......... .......... .......... .......... .......... 94% 10.7M 0s
- 26650K .......... .......... .......... .......... .......... 95% 14.0M 0s
- 26700K .......... .......... .......... .......... .......... 95% 10.2M 0s
- 26750K .......... .......... .......... .......... .......... 95% 13.9M 0s
- 26800K .......... .......... .......... .......... .......... 95% 8.44M 0s
- 26850K .......... .......... .......... .......... .......... 95% 10.5M 0s
- 26900K .......... .......... .......... .......... .......... 95% 13.5M 0s
- 26950K .......... .......... .......... .......... .......... 96% 10.9M 0s
- 27000K .......... .......... .......... .......... .......... 96% 10.6M 0s
- 27050K .......... .......... .......... .......... .......... 96% 13.5M 0s
- 27100K .......... .......... .......... .......... .......... 96% 10.5M 0s
- 27150K .......... .......... .......... .......... .......... 96% 10.8M 0s
- 27200K .......... .......... .......... .......... .......... 97% 10.6M 0s
- 27250K .......... .......... .......... .......... .......... 97% 10.7M 0s
- 27300K .......... .......... .......... .......... .......... 97% 10.4M 0s
- 27350K .......... .......... .......... .......... .......... 97% 13.4M 0s
- 27400K .......... .......... .......... .......... .......... 97% 10.7M 0s
- 27450K .......... .......... .......... .......... .......... 97% 10.1M 0s
- 27500K .......... .......... .......... .......... .......... 98% 13.7M 0s
- 27550K .......... .......... .......... .......... .......... 98% 10.8M 0s
- 27600K .......... .......... .......... .......... .......... 98% 10.5M 0s
- 27650K .......... .......... .......... .......... .......... 98% 10.7M 0s
- 27700K .......... .......... .......... .......... .......... 98% 10.4M 0s
- 27750K .......... .......... .......... .......... .......... 98% 13.9M 0s
- 27800K .......... .......... .......... .......... .......... 99% 10.7M 0s
- 27850K .......... .......... .......... .......... .......... 99% 10.4M 0s
- 27900K .......... .......... .......... .......... .......... 99% 13.3M 0s
- 27950K .......... .......... .......... .......... .......... 99% 11.4M 0s
- 28000K .......... .......... .......... .......... .......... 99% 8.42M 0s
- 28050K .......... .......... .......... .. 100% 18.9M=2.9s
-
-2014-01-16 20:02:58 (9.61 MB/s) - ‘/Users/kraft/annex/.git/annex/tmp/SHA256E-s28756861--4bea2d816a701dbfc88eada2288019c92c2774ee605e4ddfa62c4dd7655e53a1.dmg’ saved [28756861/28756861]
-
-[2014-01-16 20:02:58 CET] Upgrader: Downloaded git-annex.. upgrade)
-Checksumming Protective Master Boot Record (MBR : 0)…
-Protective Master Boot Record (MBR :: verified CRC32 $BFC39E6D
-Checksumming GPT Header (Primary GPT Header : 1)…
- GPT Header (Primary GPT Header : 1): verified CRC32 $1B4A1450
-Checksumming GPT Partition Data (Primary GPT Table : 2)…
-GPT Partition Data (Primary GPT Tabl: verified CRC32 $78D54639
-Checksumming (Apple_Free : 3)…
- (Apple_Free : 3): verified CRC32 $00000000
-Checksumming disk image (Apple_HFS : 4)…
- disk image (Apple_HFS : 4): verified CRC32 $1E0144DA
-Checksumming (Apple_Free : 5)…
- (Apple_Free : 5): verified CRC32 $00000000
-Checksumming GPT Partition Data (Backup GPT Table : 6)…
-GPT Partition Data (Backup GPT Table: verified CRC32 $78D54639
-Checksumming GPT Header (Backup GPT Header : 7)…
- GPT Header (Backup GPT Header : 7): verified CRC32 $61044DA0
-verified CRC32 $E2335ED3
-/dev/disk4 GUID_partition_scheme
-/dev/disk4s1 Apple_HFS /Users/kraft/git-annex.upgrade.0
-\"disk4\" unmounted.
-\"disk4\" ejected.
-git-annex version: 5.20140116-gd2fce02
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
-remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook external
-local repository version: 5
-supported repository version: 5
-upgrade supported from repository versions: 0 1 2 4
-[2014-01-16 20:03:15 CET] Upgrader: Upgrading git-annex
-
-(Recording state in git...)
-(\"remove\",\"/Applications/git-annex.app/Contents/MacOS\")
-(\"remove\",\"/Applications/git-annex.app/Contents/MacOS/bundle\")
-(\"remove\",\"/Applications/git-annex.app/Contents/MacOS/bundle/A\")
-
-(Recording state in git...)
-[2014-01-16 20:03:15 CET] main: starting assistant version 5.20140116-gd2fce02
-[2014-01-16 20:03:15 CET] UpgradeWatcher: Finished upgrading git-annex to version 5.20140116-gd2fce02
-(scanning...) [2014-01-16 20:03:15 CET] Watcher: Performing startup scan
-(started...)
-\"\"\"]]
-"""]]
diff --git a/doc/bugs/Auto_update_not_updating_to_newest_version/comment_4_2705fbfd74652ab097ac48ec687517c7._comment b/doc/bugs/Auto_update_not_updating_to_newest_version/comment_4_2705fbfd74652ab097ac48ec687517c7._comment
deleted file mode 100644
index f0e326846..000000000
--- a/doc/bugs/Auto_update_not_updating_to_newest_version/comment_4_2705fbfd74652ab097ac48ec687517c7._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.43"
- subject="comment 4"
- date="2014-01-17T19:36:39Z"
- content="""
-Well that upgrade did seem to succeed. The log almost looks like 2 git-annex assistant processes were running (which should not happen), it seems to have downloaded the upgrade twice somehow.
-"""]]
diff --git a/doc/bugs/Auto_update_not_updating_to_newest_version/comment_5_ab1ee005dbd54e560ea6e3c716cc8f1b._comment b/doc/bugs/Auto_update_not_updating_to_newest_version/comment_5_ab1ee005dbd54e560ea6e3c716cc8f1b._comment
deleted file mode 100644
index b05a0b1e2..000000000
--- a/doc/bugs/Auto_update_not_updating_to_newest_version/comment_5_ab1ee005dbd54e560ea6e3c716cc8f1b._comment
+++ /dev/null
@@ -1,70 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawk7iPiqWr3BVPLWEDvJhSSvcOqheLEbLNo"
- nickname="Dirk"
- subject="Still problems"
- date="2014-02-14T11:30:10Z"
- content="""
-There seem to be still problems here.
-
-I removed all my old configurations and repositories and reinstalled the newest version from the site. After starting I get a message about an update being available. I update and end up with the same version.
-
-[[!format sh \"\"\"
-[2014-02-14 12:22:10 CET] main: starting assistant version 5.20140209-g3a61dbe
-(scanning...) [2014-02-14 12:22:10 CET] Watcher: Performing startup scan
-(started...) [2014-02-14 12:22:10 CET] Upgrader: An upgrade of git-annex is available. (version 5.20140210)
---2014-02-14 12:23:24-- https://downloads.kitenet.net/git-annex/OSX/current/10.9_Mavericks/git-annex.dmg
-Resolving downloads.kitenet.net... 80.68.85.49, 2001:41c8:125:49::10
-Connecting to downloads.kitenet.net|80.68.85.49|:443... connected.
-HTTP request sent, awaiting response... 200 OK
-Length: 29053083 (28M) [application/x-apple-diskimage]
-Saving to: ‘/Users/kraft/Desktop/annex/.git/annex/tmp/SHA256E-s29053083--ee629137b511da8b874cdac78ece54b344b2b2a1763e4bf806949c9868117b13.dmg’
-
- 0K .......... .......... .......... .......... .......... 0% 2.46M 11s
- 50K .......... .......... .......... .......... .......... 0% 1.69M 14s
- 100K .......... .......... .......... .......... .......... 0% 4.39M 11s
- 150K .......... .......... .......... .......... .......... 0% 2.28M 11s
- 200K .......... .......... .......... .......... .......... 0% 7.15M 10s
- 250K .......... .......... .......... .......... .......... 1% 2.30M 10s
- 300K .......... .......... .......... .......... .......... 1% 15.5M 9s
-
- 28300K .......... .......... .......... .......... .......... 99% 11.0M 0s
- 28350K .......... .......... .. 100% 16.8M=2.8s
-
-2014-02-14 12:23:28 (9.96 MB/s) - ‘/Users/kraft/Desktop/annex/.git/annex/tmp/SHA256E-s29053083--ee629137b511da8b874cdac78ece54b344b2b2a1763e4bf806949c9868117b13.dmg’ saved [29053083/29053083]
-
-[2014-02-14 12:23:28 CET] main: Downloaded git-annex.. upgrade)
-Checksumming Protective Master Boot Record (MBR : 0)…
-Protective Master Boot Record (MBR :: verified CRC32 $BFC39E6D
-Checksumming GPT Header (Primary GPT Header : 1)…
- GPT Header (Primary GPT Header : 1): verified CRC32 $3488C834
-Checksumming GPT Partition Data (Primary GPT Table : 2)…
-GPT Partition Data (Primary GPT Tabl: verified CRC32 $CABDFFA1
-Checksumming (Apple_Free : 3)…
- (Apple_Free : 3): verified CRC32 $00000000
-Checksumming disk image (Apple_HFS : 4)…
- disk image (Apple_HFS : 4): verified CRC32 $0CFF6F1A
-Checksumming (Apple_Free : 5)…
- (Apple_Free : 5): verified CRC32 $00000000
-Checksumming GPT Partition Data (Backup GPT Table : 6)…
-GPT Partition Data (Backup GPT Table: verified CRC32 $CABDFFA1
-Checksumming GPT Header (Backup GPT Header : 7)…
- GPT Header (Backup GPT Header : 7): verified CRC32 $4EC691C4
-verified CRC32 $A78EB9FA
-/dev/disk4 GUID_partition_scheme
-/dev/disk4s1 Apple_HFS /Applications/git-annex.upgrade.0
-\"disk4\" unmounted.
-\"disk4\" ejected.
-git-annex version: 5.20140209-g3a61dbe
-build flags: Assistant Webapp Pairing S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
-remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook external
-local repository version: 5
-supported repository version: 5
-upgrade supported from repository versions: 0 1 2 4
-[2014-02-14 12:23:45 CET] main: Upgrading git-annex
-[2014-02-14 12:23:45 CET] main: starting assistant version 5.20140209-g3a61dbe
-[2014-02-14 12:23:45 CET] UpgradeWatcher: Finished upgrading git-annex to version 5.20140209-g3a61dbe
-(scanning...) [2014-02-14 12:23:45 CET] Watcher: Performing startup scan
-(started...)
-\"\"\"]]
-"""]]
diff --git a/doc/bugs/Automatic_upgrades_should_be_cryptographically_signed.mdwn b/doc/bugs/Automatic_upgrades_should_be_cryptographically_signed.mdwn
deleted file mode 100644
index 7874ea696..000000000
--- a/doc/bugs/Automatic_upgrades_should_be_cryptographically_signed.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-All builds of git-annex should be cryptographically signed. Especially the automatic upgrades.
-
-Signing doesn't minimise the likelihood of unwanted software being installed, but it helps reduce it.
-
-*Please* Joey...
diff --git a/doc/bugs/Automatic_upgrades_should_be_cryptographically_signed/comment_1_37ed871c82879a31c2d8cfc7d9736548._comment b/doc/bugs/Automatic_upgrades_should_be_cryptographically_signed/comment_1_37ed871c82879a31c2d8cfc7d9736548._comment
deleted file mode 100644
index 8deae448c..000000000
--- a/doc/bugs/Automatic_upgrades_should_be_cryptographically_signed/comment_1_37ed871c82879a31c2d8cfc7d9736548._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.87"
- subject="comment 1"
- date="2013-12-11T06:20:57Z"
- content="""
-The links to the builds use https. The automatic upgrades use https (and wget or curl, which will reject an invalid SSL certificate).
-
-So, it is cryptographically signed. Of course SSL certificates are only as secure as the CAs. But using a gpg key that most users have no particular reason to trust would not add a lot of security.
-"""]]
diff --git a/doc/bugs/Backup_repository_doesn__39__t_get_all_files.mdwn b/doc/bugs/Backup_repository_doesn__39__t_get_all_files.mdwn
deleted file mode 100644
index 62a0524ee..000000000
--- a/doc/bugs/Backup_repository_doesn__39__t_get_all_files.mdwn
+++ /dev/null
@@ -1,40 +0,0 @@
-[[!meta title="assistant should try sending old/deleted versions of files to backup repositories"]]
-
-### Please describe the problem.
-Backup group repositories don't download all "unused" files when running the webapp.
-
-
-### What steps will reproduce the problem?
-Run the webapp, set up two local repositories:
-
-1 - Use this for testing, set to manual type
-
-2 - Use for backups, set to full backup type
-
-Create some files, change them, etc. See that files and history get transferred from #1 --> #2
-
-Change #2 to being "don't sync". For example, you are running out of disk space, or are off the network.
-
-Edit a file in #1 a couple of times. Now change #2 to synchronise.
-
-Now, #2 will reflect #1 in the current state.
-
-Stop the annex assistant.
-
-Change #2 to being indirect mode. Try to checkout a previous revision. There will be broken symlinks. git annex get will fail with "no copies of this file" type errors.
-
-
-My expectation (incorrectly?) was that all the "history" of my files would be automatically transferred to the backup group repos. It seems only the git commits are transferred, but the "unused" file content isn't.
-
----
-
-What this tells me is that any changes that occur whilst I am not networked are entirely localised to my machine. If this is the design expectation, can we squash commits before sending them? There seems to be no point in having commits pointing to file content that has no chance of being accessed.
-
-
-### What version of git-annex are you using? On what operating system?
-git-annex version: 5.20131130-gc25be33
-
-
-> This was fixed in 5.20140127; the assistant now does a daily sweep of
-> unused files to move them to backup repositories when possible. [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/Backup_repository_doesn__39__t_get_all_files/comment_1_a486dc0f741e08d5bcf2fd1a6ecbdf05._comment b/doc/bugs/Backup_repository_doesn__39__t_get_all_files/comment_1_a486dc0f741e08d5bcf2fd1a6ecbdf05._comment
deleted file mode 100644
index 54c579509..000000000
--- a/doc/bugs/Backup_repository_doesn__39__t_get_all_files/comment_1_a486dc0f741e08d5bcf2fd1a6ecbdf05._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.87"
- subject="comment 1"
- date="2013-12-12T17:20:27Z"
- content="""
-The assistant currently only considers transferring files to other remotes that are currently in the tree, not old versions of files, or files no longer in the tree. You can send everything, manually, by running `git annex copy --all --to backupremote`
-
-When you're using direct mode, git-annex does not try ensure that every historical version of a file is preserved. Because in direct mode there is only one copy of a file, and you can edit or delete it at any time. If preserving every version is important to you, don't use direct mode; indirect mode will handle this nicely. (Of course you can still force it to remove files in indirect mode.)
-
-I think it would make sense for the assistant to sometimes try to send everything to some remotes. The tricky part is probably working out which remotes it makes sense to send that to. Currenty, [[preferred_content]] expressions only indicate whether files currently in the tree are wanted. They would need to be expanded somehow, so that full backup repositories could indicate they also want every available past version of a file.
-"""]]
diff --git a/doc/bugs/Bloom_filter_capacity_too_large_to_represent.mdwn b/doc/bugs/Bloom_filter_capacity_too_large_to_represent.mdwn
new file mode 100644
index 000000000..56d3d8f8c
--- /dev/null
+++ b/doc/bugs/Bloom_filter_capacity_too_large_to_represent.mdwn
@@ -0,0 +1,44 @@
+### Please describe the problem.
+When running git-annex info I get an error when it tries to show the bloom filter size
+
+### What steps will reproduce the problem?
+git-annex info in my Photos repo
+
+
+### What version of git-annex are you using? On what operating system?
+[[!format sh """
+$ git-annex version
+git-annex version: 5.20140814-g9b89b5c
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+"""]]
+
+### Please provide any additional information below.
+
+[[!format sh """
+$ git-annex info
+repository mode: direct
+trusted repositories: 2
+ c0e4106e-2631-11e2-9749-1bfa37a61069 -- [rose]
+ ca735977-973c-44bc-9257-915b2c875e39 -- synology [here]
+semitrusted repositories: 3
+ 00000000-0000-0000-0000-000000000001 -- web
+ 7e5c0010-2634-4a5e-bc7b-6fea84b8b947 -- [glacier]
+ d7e01abc-d74b-40e2-8607-3d41ce8bc4bd -- seagate3
+untrusted repositories: 1
+ c1fe5922-43f1-11e2-b146-33530f7fa6cc -- x200s
+transfers in progress: none
+available local disk space: 928.4 gigabytes (+1 megabyte reserved)
+local annex keys: 34758
+local annex size: 186.78 gigabytes
+annexed files in working tree: 35300
+size of annexed files in working tree: 193.76 gigabytes
+bloom filter size: git-annex: Data.BloomFilter.Util.suggestSizing: capacity too large to represent
+"""]]
+
+> I've worked around this problem in the arm autobuilder (only build
+> affected), so [[done]] --[[Joey]]
diff --git a/doc/bugs/Bloom_filter_capacity_too_large_to_represent/comment_1_43c824a3b843faa2377bfd78158c72fe._comment b/doc/bugs/Bloom_filter_capacity_too_large_to_represent/comment_1_43c824a3b843faa2377bfd78158c72fe._comment
new file mode 100644
index 000000000..0bf00d7d5
--- /dev/null
+++ b/doc/bugs/Bloom_filter_capacity_too_large_to_represent/comment_1_43c824a3b843faa2377bfd78158c72fe._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.132"
+ subject="comment 1"
+ date="2014-09-12T16:03:09Z"
+ content="""
+It seems you must have tweaked the annex.bloomcapacity and/or annex.bloomaccuracy settings, probably to some quite large values.
+
+For example capacity of 50000000 and accuracy of 10000000000 will fail this way.
+
+This happens when it runs out of Double floating point precision to calculate the requested bloom filter size. I think that a bloom filter can be built that has this capacity/accuracy, it's just that Data.BloomFilter.Easy.safeSuggestSizing falls over trying to find the bloom filter size. Also, such a bloom filter may use rather a lot of memory..
+
+
+"""]]
diff --git a/doc/bugs/Bloom_filter_capacity_too_large_to_represent/comment_2_9b74457549e2739ae45dccd128de946f._comment b/doc/bugs/Bloom_filter_capacity_too_large_to_represent/comment_2_9b74457549e2739ae45dccd128de946f._comment
new file mode 100644
index 000000000..803465e01
--- /dev/null
+++ b/doc/bugs/Bloom_filter_capacity_too_large_to_represent/comment_2_9b74457549e2739ae45dccd128de946f._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.132"
+ subject="comment 2"
+ date="2014-09-12T16:34:56Z"
+ content="""
+However, in Greg's case he had no such configuration. Instead, I think something is broken with the use of floating point or bit math that bloomfilter uses, on the NAS where he's using git-annex.
+
+I have made git-annex not crash when this happens, just show a warning and fall back to a reasonable default bloom filter size. If the problem is with the bit math, then the bloom filter may not work either, which would probably show up as false negatives, so `git annex unused` not finding things that are unused.
+
+I need to update the armel build with this so Greg can test it..
+"""]]
diff --git a/doc/bugs/Bloom_filter_capacity_too_large_to_represent/comment_3_5790bbbe347e1806062ccb60fcad046a._comment b/doc/bugs/Bloom_filter_capacity_too_large_to_represent/comment_3_5790bbbe347e1806062ccb60fcad046a._comment
new file mode 100644
index 000000000..a11d0efc7
--- /dev/null
+++ b/doc/bugs/Bloom_filter_capacity_too_large_to_represent/comment_3_5790bbbe347e1806062ccb60fcad046a._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.132"
+ subject="comment 3"
+ date="2014-09-12T16:38:47Z"
+ content="""
+I have reproduced the bug, using the standalone build on an arm box (turtle).
+
+On the same box, the debian git-annex build works ok.
+
+Suggests to me the problem is related to the cross-compiling method used for the standalone arm build.
+"""]]
diff --git a/doc/bugs/Bloom_filter_capacity_too_large_to_represent/comment_4_9fb9fdbc6218d6b86b0921f411f78891._comment b/doc/bugs/Bloom_filter_capacity_too_large_to_represent/comment_4_9fb9fdbc6218d6b86b0921f411f78891._comment
new file mode 100644
index 000000000..77097e07c
--- /dev/null
+++ b/doc/bugs/Bloom_filter_capacity_too_large_to_represent/comment_4_9fb9fdbc6218d6b86b0921f411f78891._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.132"
+ subject="turns out to be an upstream bug already filed"
+ date="2014-09-12T17:46:23Z"
+ content="""
+It seems that this is a bug on bloomfilter 2.0.0.0 on armel generally. It's also preventing this newer version from building on armel currently:
+
+<http://bugs.debian.org/756801>
+
+The git-annex standalone arm autobuilder installed it with cabal, so ended up with the newer, broken version.
+"""]]
diff --git a/doc/bugs/Bootstrap3_icons_missing_on_Android.mdwn b/doc/bugs/Bootstrap3_icons_missing_on_Android.mdwn
new file mode 100644
index 000000000..480825bc9
--- /dev/null
+++ b/doc/bugs/Bootstrap3_icons_missing_on_Android.mdwn
@@ -0,0 +1,7 @@
+I’m running git-annex 5.20140517-gee56d21 on Android 4.3.
+
+A number of icons seem to be missing since the bootstrap3 update:
+
+<img src="http://heh.fi/tmp/git-annex-missing-icons.png" alt="git-annex missing icons" width="540">
+
+[[!tag confirmed done]]
diff --git a/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_10_da4e26c77376a8171493a815bdb51ff1._comment b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_10_da4e26c77376a8171493a815bdb51ff1._comment
new file mode 100644
index 000000000..78732490f
--- /dev/null
+++ b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_10_da4e26c77376a8171493a815bdb51ff1._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmqz6wCn-Q1vzrsHGvEJHOt_T5ZESilxhc"
+ nickname="Sören"
+ subject="comment 10"
+ date="2014-05-28T15:03:26Z"
+ content="""
+Seems to work! The icons show up on android now.
+
+But JavaScript seems to be broken instead, dropdown menus don't work. Maybe more unwanted evil splicing in other files?
+"""]]
diff --git a/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_11_506e26de284a6429366def33b007bc0c._comment b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_11_506e26de284a6429366def33b007bc0c._comment
new file mode 100644
index 000000000..ba3fff801
--- /dev/null
+++ b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_11_506e26de284a6429366def33b007bc0c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmqz6wCn-Q1vzrsHGvEJHOt_T5ZESilxhc"
+ nickname="Sören"
+ subject="comment 11"
+ date="2014-05-28T17:30:43Z"
+ content="""
+Ok it seems like the linebreak at the end of each javascript file (0x0a) is replaced by a null byte on android. This probably causes the browser not to accept it as javascript so it's not executed.
+"""]]
diff --git a/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_12_a77477951576fc657d693811f11f9975._comment b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_12_a77477951576fc657d693811f11f9975._comment
new file mode 100644
index 000000000..23b523bbe
--- /dev/null
+++ b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_12_a77477951576fc657d693811f11f9975._comment
@@ -0,0 +1,24 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 12"
+ date="2014-05-28T22:31:21Z"
+ content="""
+The evilspliced data for eg, bootstrap.js omits that last byte. So presumably we overflow one byte and find a null (if we're lucky..).
+
+I checked the -ddump-splices output, and it omits that last newline!
+
+<pre>
+ \});\
+ \\
+ \})( jQuery );\"#),
+</pre>
+
+Indeed, ghc omits any number of trailing newlines in this display.
+
+This is probably only recently a problem because of the wacky use of a unsafe bytestring + length that file-embed has started to do. Before, the newline was not included, but that's still valid JS.
+
+So, one fix would be to have the EvilSplicer rewrite the unsafePackAddressLen back to a regular bytestring construction. But this would need some tricky parsing (need to find the end of the string to remove the # from it). Alternatively, could remove trailing newlines from all the static js and css files. (Luckily none of the other static files end in a newline, and ghc is careful to preserve ending NULs etc).
+
+For now, I've removed the trailing newlines from the files.
+"""]]
diff --git a/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_13_c3ef67bded8ed3c511a8ea85b8bd81a5._comment b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_13_c3ef67bded8ed3c511a8ea85b8bd81a5._comment
new file mode 100644
index 000000000..dc8b24ba1
--- /dev/null
+++ b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_13_c3ef67bded8ed3c511a8ea85b8bd81a5._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmqz6wCn-Q1vzrsHGvEJHOt_T5ZESilxhc"
+ nickname="Sören"
+ subject="comment 13"
+ date="2014-05-29T16:48:18Z"
+ content="""
+Works fine now (tested on android 4.4).
+"""]]
diff --git a/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_1_97cf233d8401d642337d5fe9dd525e2b._comment b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_1_97cf233d8401d642337d5fe9dd525e2b._comment
new file mode 100644
index 000000000..15b6018b5
--- /dev/null
+++ b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_1_97cf233d8401d642337d5fe9dd525e2b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.3"
+ subject="comment 1"
+ date="2014-05-21T17:10:24Z"
+ content="""
+reproduced this with android 4.0
+"""]]
diff --git a/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_2_4981a0a894b77e94a3bffec82b0f6e51._comment b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_2_4981a0a894b77e94a3bffec82b0f6e51._comment
new file mode 100644
index 000000000..5404fbe49
--- /dev/null
+++ b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_2_4981a0a894b77e94a3bffec82b0f6e51._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.3"
+ subject="comment 2"
+ date="2014-05-21T18:06:09Z"
+ content="""
+I've verified that the assistant is serving up the files, such as http://127.0.0.1:$port/static/fonts/glyphicons-halflings-regular.svg
+
+I've verified that the files it's serving have the right content.
+
+This seems to only leave the likely explanation that the android web browser doesn't support the technology bootstrap 3 is using for its icons. This is svg, plus ttf, plus Embedded OpenType and Web Open Font Format. (I suppose it uses different ones on different browsers.)
+
+I'm surprised that bootstrap would be using web fonts technology if it's not supported on Android, or wouldn't have a fallback to the plain old image method old versions of bootstrap used.
+
+I have found some bootstrap bugs about icons not showing up on Android, like this one <https://github.com/twbs/bootstrap/issues/10106> ... but those are about specific icons not showing up due to unicode issues. Not about all icons failing to show up.
+"""]]
diff --git a/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_3_dbe960392aaa0839886381820754814a._comment b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_3_dbe960392aaa0839886381820754814a._comment
new file mode 100644
index 000000000..f6f4e4879
--- /dev/null
+++ b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_3_dbe960392aaa0839886381820754814a._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmqz6wCn-Q1vzrsHGvEJHOt_T5ZESilxhc"
+ nickname="Sören"
+ subject="comment 3"
+ date="2014-05-21T18:47:42Z"
+ content="""
+I don't think it's an issue with the Android browser. It happens with Chrome and Firefox on Android as well. Moreover, the icons still don't show up if open the Webapp running on Android over network from a desktop browser. Firebug doesn't even show the request that should load the font file (compare to the desktop version where it loads the woff file in Firefox). So I suspect the Web server behaves different somehow. Some weird blocking issue maybe?
+
+Not sure if this is related but I noticed a strange behavior: If I try to download the font file in a new tab, it blocks until I refresh the tab running the webapp. Only seen on desktop Firefox. Doesn't happen in Chromium.
+"""]]
diff --git a/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_4_cdf9621fe3e9f8eb8b7af88f779a7116._comment b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_4_cdf9621fe3e9f8eb8b7af88f779a7116._comment
new file mode 100644
index 000000000..dabc21cce
--- /dev/null
+++ b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_4_cdf9621fe3e9f8eb8b7af88f779a7116._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmqz6wCn-Q1vzrsHGvEJHOt_T5ZESilxhc"
+ nickname="Sören"
+ subject="comment 4"
+ date="2014-05-21T19:19:45Z"
+ content="""
+I forgot to mention that the --listen argument doesn't seem to work on Android so I used ssh -R in order to access the webapp from my desktop.
+"""]]
diff --git a/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_5_a2318f094b30f58fefc072807896c099._comment b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_5_a2318f094b30f58fefc072807896c099._comment
new file mode 100644
index 000000000..9f18e604e
--- /dev/null
+++ b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_5_a2318f094b30f58fefc072807896c099._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmqz6wCn-Q1vzrsHGvEJHOt_T5ZESilxhc"
+ nickname="Sören"
+ subject="comment 5"
+ date="2014-05-27T19:58:37Z"
+ content="""
+On Android, the webserver returns a broken bootstrap.css. It seems like some binary garbage is appended to the end of the css file that looks suspiciously like the content or some fragment of the font file \"glyphicons-halflings-regular.eot\". Reason unknown.
+"""]]
diff --git a/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_6_7c2f1d914793798708ca13b6ac3dd474._comment b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_6_7c2f1d914793798708ca13b6ac3dd474._comment
new file mode 100644
index 000000000..8806de16f
--- /dev/null
+++ b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_6_7c2f1d914793798708ca13b6ac3dd474._comment
@@ -0,0 +1,29 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 6"
+ date="2014-05-27T20:23:03Z"
+ content="""
+I checked the evilspliced tmp/androidtree/Assistant/WebApp/Types.hs, and the bootstrap.css there ends correctly, nothing weird appended.
+
+The TH generated for this:
+
+<pre>
+ (\"css/bootstrap.css\",
+ GHC.IO.unsafePerformIO
+ (Data.ByteString.Unsafe.unsafePackAddressLen
+ 121220
+ file_content_omitted)
+</pre>
+
+That looks right, in particular the size is the same as the number of bytes in the file.
+
+Hmm.. To double-check, I edited the file so that the string containing the content of this file was defined in foo.
+
+<pre>
+*Main> length foo
+113023
+</pre>
+
+This might be innocuous; there are some unicode characters in the string that encode to multiple bytes. OTOH, if you see exactly 8197 bytes of extra garbage appended, I think we have our culprit.
+"""]]
diff --git a/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_7_a24b5165590b5d58919da1003cd20c54._comment b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_7_a24b5165590b5d58919da1003cd20c54._comment
new file mode 100644
index 000000000..194d1c831
--- /dev/null
+++ b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_7_a24b5165590b5d58919da1003cd20c54._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 7"
+ date="2014-05-28T00:02:42Z"
+ content="""
+The string is indeed truncated; it seems that something, probably the EvilSplicer is doing effectively a s/\w+:// on the string.
+"""]]
diff --git a/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_8_71ed14b8e5a898b1643d5e37591c2476._comment b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_8_71ed14b8e5a898b1643d5e37591c2476._comment
new file mode 100644
index 000000000..f5bc22ec7
--- /dev/null
+++ b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_8_71ed14b8e5a898b1643d5e37591c2476._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 8"
+ date="2014-05-28T00:04:58Z"
+ content="""
+Almost certinaly the EvilSplicer; it contains a hack to remove package-version qualifications from symbols. (s/package-version:symbol/symbol/)
+"""]]
diff --git a/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_9_15357e33c2431080d45f7cef5f4f1209._comment b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_9_15357e33c2431080d45f7cef5f4f1209._comment
new file mode 100644
index 000000000..65db84556
--- /dev/null
+++ b/doc/bugs/Bootstrap3_icons_missing_on_Android/comment_9_15357e33c2431080d45f7cef5f4f1209._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 9"
+ date="2014-05-28T00:37:30Z"
+ content="""
+[[!commit 37da3d7b5dcfd328aee6a7a91508b02edf720bca]] should fix this problem. I've verified the truncation is not present in the spliced source; lack bandwidh to test the binary right now.
+"""]]
diff --git a/doc/bugs/Browser_fails_to_launch_on_Android___39__git_annex_webapp__39__.mdwn b/doc/bugs/Browser_fails_to_launch_on_Android___39__git_annex_webapp__39__.mdwn
deleted file mode 100644
index 8178e6dbc..000000000
--- a/doc/bugs/Browser_fails_to_launch_on_Android___39__git_annex_webapp__39__.mdwn
+++ /dev/null
@@ -1,35 +0,0 @@
-### Please describe the problem.
-
-When I launch git annex Android application, it fails to open the web browser. Workaround is to copy the url and manually paste it into web browser url line.
-
-### What steps will reproduce the problem?
-
-See above
-
-### What version of git-annex are you using? On what operating system?
-
-git-annex version 4.20130513-g5185533 on Android 4.2.2
-
-### Please provide any additional information below.
-
-[[!format sh """
-u0_a126@android:/sdcard/git-annex.home $ git annex webapp
-Launching web browser on http://127.0.0.1:47557/?auth=[...snip...]
-Starting: Intent { act=android.intent.action.VIEW dat=http://127.0.0.1:47557/?auth=[...snip...] }
-java.lang.SecurityException: Permission Denial: startActivity asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL
- at android.os.Parcel.readException(Parcel.java:1425)
- at android.os.Parcel.readException(Parcel.java:1379)
- at android.app.ActivityManagerProxy.startActivityAsUser(ActivityManagerNative.java:1921)
- at com.android.commands.am.Am.runStart(Am.java:494)
- at com.android.commands.am.Am.run(Am.java:109)
- at com.android.commands.am.Am.main(Am.java:82)
- at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
- at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:235)
- at dalvik.system.NativeStart.main(Native Method)
-failed to start web browser
-u0_a126@android:/sdcard/git-annex.home $
-
-# End of transcript or log.
-"""]]
-
-[[done]], duplicate bug
diff --git a/doc/bugs/Browser_fails_to_launch_on_Android___39__git_annex_webapp__39__/comment_1_173393b0b3d2d8c622c0d8a2eaace421._comment b/doc/bugs/Browser_fails_to_launch_on_Android___39__git_annex_webapp__39__/comment_1_173393b0b3d2d8c622c0d8a2eaace421._comment
deleted file mode 100644
index 6104e6e75..000000000
--- a/doc/bugs/Browser_fails_to_launch_on_Android___39__git_annex_webapp__39__/comment_1_173393b0b3d2d8c622c0d8a2eaace421._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmmLfBDEDFfEOba8Ra46nsnTmoNHFsLObo"
- nickname="Brian"
- subject="Duplicate bug report"
- date="2013-05-15T02:35:34Z"
- content="""
-This report is a duplicate of [[Android app permission denial on startup]]
-"""]]
diff --git a/doc/bugs/Build-depends_needs___39__hxt__39___added_-_3.20121127.mdwn b/doc/bugs/Build-depends_needs___39__hxt__39___added_-_3.20121127.mdwn
deleted file mode 100644
index 83720cca2..000000000
--- a/doc/bugs/Build-depends_needs___39__hxt__39___added_-_3.20121127.mdwn
+++ /dev/null
@@ -1,36 +0,0 @@
-What steps will reproduce the problem?
-
-Install git-annex via cabal - either from Hackage or as a manual install. (i.e. <http://git-annex.branchable.com/install/cabal/>)
-
-What is the expected output? What do you see instead?
-
-Expect a clean install.
-
-However, get the following error:
-
- Assistant/Install.hs:24:8:
- Could not find module `Data.AssocList'
- It is a member of the hidden package `hxt-9.3.1.1'.
- Perhaps you need to add `hxt' to the build-depends in your .cabal file.
- Use -v to see a list of the files searched for.
-
-
-What version of git-annex are you using? On what operating system?
-
-git-annex: 3.20121127
-OS: Mac OSX 10.6.8
-
-Please provide any additional information below.
-
-The fix seems to be as simple as adding 'htx' to the 'git-annex.cabal' file:
-
- Executable git-annex
- Main-Is: git-annex.hs
- Build-Depends: MissingH, hslogger, directory, filepath,
- unix, containers, utf8-string, network (>= 2.0), mtl (>= 2.1.1),
- bytestring, old-locale, time,
- -- Added htx here
- hxt,
- pcre-light, extensible-exceptions, dataenc, SHA, process, json, HTTP,
-
-> I removed the need for hxt, which was accidental. [[done]] --[[Joey]]
diff --git a/doc/bugs/Build_error:_Ambiguous_occurrence___96__callCommand__39__.mdwn b/doc/bugs/Build_error:_Ambiguous_occurrence___96__callCommand__39__.mdwn
deleted file mode 100644
index e7a849021..000000000
--- a/doc/bugs/Build_error:_Ambiguous_occurrence___96__callCommand__39__.mdwn
+++ /dev/null
@@ -1,74 +0,0 @@
-### Please describe the problem.
-
-I get the following error when building:
-
-[[!format sh """
-$ cabal install git-annex --bindir=$HOME/bin -f"-assistant -webapp -webdav -pairing -xmpp -dns"
-
-...
-
-Configuring git-annex-5.20140127...
-Building git-annex-5.20140127...
-Preprocessing executable 'git-annex' for git-annex-5.20140127...
-[ 1 of 281] Compiling Utility.Dot ( Utility/Dot.hs, dist/build/git-annex/git-annex-tmp/Utility/Dot.o )
-[ 2 of 281] Compiling BuildFlags ( BuildFlags.hs, dist/build/git-annex/git-annex-tmp/BuildFlags.o )
-[ 3 of 281] Compiling Utility.Shell ( Utility/Shell.hs, dist/build/git-annex/git-annex-tmp/Utility/Shell.o )
-
-...
-
-[111 of 281] Compiling Backend.Hash ( Backend/Hash.hs, dist/build/git-annex/git-annex-tmp/Backend/Hash.o )
-[112 of 281] Compiling Annex.Queue ( Annex/Queue.hs, dist/build/git-annex/git-annex-tmp/Annex/Queue.o )
-[113 of 281] Compiling RunCommand ( RunCommand.hs, dist/build/git-annex/git-annex-tmp/RunCommand.o )
-
-RunCommand.hs:44:17:
- Ambiguous occurrence `callCommand'
- It could refer to either `RunCommand.callCommand',
- defined at RunCommand.hs:62:1
- or `Common.Annex.callCommand',
- imported from `Common.Annex' at RunCommand.hs:12:1-19
- (and originally defined in `System.Process')
-cabal: Error: some packages failed to install:
-git-annex-5.20140127 failed during the building phase. The exception was:
-ExitFailure 1
-"""]]
-
-### What steps will reproduce the problem?
-
-Try building the same version.
-
-### What version of git-annex are you using? On what operating system?
-
-Building git-annex-5.20140127...
-
-[[!format sh """
-$ cabal --version
-cabal-install version 0.14.0
-using version 1.14.0 of the Cabal library
-
-$ ghc --version
-The Glorious Glasgow Haskell Compilation System, version 7.4.1
-
-$ lsb_release -a
-No LSB modules are available.
-Distributor ID: Ubuntu
-Description: Ubuntu 12.04.3 LTS
-Release: 12.04
-Codename: precise
-
-$ uname -a
-Linux sahnlpt0116 3.2.0-58-generic #88-Ubuntu SMP Tue Dec 3 17:37:58 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
-"""]]
-
-### Please provide any additional information below.
-
-Sorry but I don't know what else could help you.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> fixed in git and will update cabal soon [[done]] --[[Joey]]
diff --git a/doc/bugs/Build_error:_Ambiguous_occurrence___96__callCommand__39__/comment_1_3127b3c448888fdf70096f24c7cbfd3c._comment b/doc/bugs/Build_error:_Ambiguous_occurrence___96__callCommand__39__/comment_1_3127b3c448888fdf70096f24c7cbfd3c._comment
deleted file mode 100644
index ad28f9cce..000000000
--- a/doc/bugs/Build_error:_Ambiguous_occurrence___96__callCommand__39__/comment_1_3127b3c448888fdf70096f24c7cbfd3c._comment
+++ /dev/null
@@ -1,50 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnzFs0ZJvkUvEVI_OAp0aAP1CTOw2UUXl4"
- nickname="Christian"
- subject="A patch to fix the problem"
- date="2014-01-29T17:26:58Z"
- content="""
-The following patch lets me compile everything, but I am not sure it is right:
-
-[[!format sh \"\"\"
-diff --git a/Command/PreCommit.hs b/Command/PreCommit.hs
-index 6644f6f..f3ad454 100644
---- a/Command/PreCommit.hs
-+++ b/Command/PreCommit.hs
-@@ -7,7 +7,7 @@
-
- module Command.PreCommit where
-
--import Common.Annex
-+import Common.Annex hiding (callCommand)
- import Command
- import Config
- import qualified Command.Add
-diff --git a/Command/Sync.hs b/Command/Sync.hs
-index 6ef111b..fde4a9a 100644
---- a/Command/Sync.hs
-+++ b/Command/Sync.hs
-@@ -8,7 +8,7 @@
-
- module Command.Sync where
-
--import Common.Annex
-+import Common.Annex hiding (callCommand)
- import Command
- import qualified Annex
- import qualified Annex.Branch
-diff --git a/RunCommand.hs b/RunCommand.hs
-index 937686d..d76b457 100644
---- a/RunCommand.hs
-+++ b/RunCommand.hs
-@@ -9,7 +9,7 @@
-
- module RunCommand where
-
--import Common.Annex
-+import Common.Annex hiding (callCommand)
- import qualified Annex
- import Types.Command
- import qualified Annex.Queue
-\"\"\"]]
-"""]]
diff --git a/doc/bugs/Build_error_on_Linux.mdwn b/doc/bugs/Build_error_on_Linux.mdwn
deleted file mode 100644
index af560788a..000000000
--- a/doc/bugs/Build_error_on_Linux.mdwn
+++ /dev/null
@@ -1,29 +0,0 @@
-### Please describe the problem.
-Building on Linux, with a particular combination of flags, failed due to missing `async`.
-
-### What steps will reproduce the problem?
-1. Configure with the following flag combination
-
- cryptohash -quvi -feed tdfa -testsuite -android production -dns -xmpp -pairing -webapp -assistant dbus inotify -webdav s3
-
-2. Attempt to build and you'll get an error on line 16 of `Utility/Batch.hs` because `Control.Concurrent.Async` isn't available.
-
-### What version of git-annex are you using? On what operating system?
-Version 4.20131024 on Linux
-
-### Please provide any additional information below.
-
-This is the patch I applied to `git-annex.cabal`:
-
- CPP-Options: -DWITH_KQUEUE
- C-Sources: Utility/libkqueue.c
-
- + if os(linux)
- + Build-Depends: async
- +
- if os(linux) && flag(Dbus)
- Build-Depends: dbus (>= 0.10.3)
- CPP-Options: -DWITH_DBUS
-
-> Feel async is core enough it should depend on it unconditionally.
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Build_error_on_Mac_OSX_10.6.mdwn b/doc/bugs/Build_error_on_Mac_OSX_10.6.mdwn
deleted file mode 100644
index 43fb0323c..000000000
--- a/doc/bugs/Build_error_on_Mac_OSX_10.6.mdwn
+++ /dev/null
@@ -1,11 +0,0 @@
-While following the instructions given at the OSX build page , I get this error:
-
-$ make
-ghc -O2 -Wall -ignore-package monads-fd -fspec-constr-count=5 --make git-annex
-
-Utility/JSONStream.hs:14:8:
- Could not find module `Text.JSON':
- Use -v to see a list of the files searched for.
-make: *** [git-annex] Error 1
-
-> Updated the instructions. [[done]] --[[Joey]]
diff --git a/doc/bugs/Build_error_when_S3_is_disabled.mdwn b/doc/bugs/Build_error_when_S3_is_disabled.mdwn
new file mode 100644
index 000000000..2ae38659d
--- /dev/null
+++ b/doc/bugs/Build_error_when_S3_is_disabled.mdwn
@@ -0,0 +1,39 @@
+With release 5.20141203, I'm getting the following build error.
+
+ Remote/Helper/AWS.hs:15:18:
+ Could not find module ‘Aws’
+ Use -v to see a list of the files searched for.
+
+ Remote/Helper/AWS.hs:16:18:
+ Could not find module ‘Aws.S3’
+ Use -v to see a list of the files searched for.
+
+I'm installing dependencies with cabal but have disabled S3 support
+('-f-S3'). This setup has worked for previous releases (I'm on a machine running Arch Linux).
+
+ _features=(-f-Android
+ -f-Assistant
+ -fDbus
+ -fDNS
+ -fInotify
+ -fPairing
+ -fProduction
+ -f-S3
+ -fTestSuite
+ -fTDFA
+ -f-Webapp
+ -f-WebDAV
+ -fXMPP
+ -fFeed
+ -fQuvi
+ -fCryptoHash)
+
+ cabal update
+ cabal install c2hs
+
+ cabal install --user --force-reinstalls --only-dependencies "${_features[@]}"
+ cabal configure "${_features[@]}"
+
+ make
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/Build_error_with_Yesod_1.4.mdwn b/doc/bugs/Build_error_with_Yesod_1.4.mdwn
new file mode 100644
index 000000000..dbee2654e
--- /dev/null
+++ b/doc/bugs/Build_error_with_Yesod_1.4.mdwn
@@ -0,0 +1,287 @@
+### Please describe the problem.
+I have problems building with yesod 1.4
+
+### What steps will reproduce the problem?
+Building git annex in a clean sandbox.
+
+### What version of git-annex are you using? On what operating system?
+5.20140927 on OS X i.e. Trying to upgrade the homebrew recipe to the most recent version of git-annex
+
+### Please provide any additional information below.
+Error messages below are discussed in the following SO-thread:
+https://stackoverflow.com/questions/26225991/illegal-view-pattern-frompathpiece-just-dyn-abdd-when-using-parameters-on
+
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+[310 of 470] Compiling Assistant.WebApp.Types ( Assistant/WebApp/Types.hs, dist/dist-sandbox-52ca649e/build/git-annex/git-annex-tmp/Assistant/WebApp/Types.o )
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_aceZO
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_aceZW
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf02
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0c
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0e
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0f
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0h
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0j
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0l
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0n
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0p
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0r
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0u
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0w
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0y
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0z
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0C
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0D
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0F
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0H
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0J
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0L
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0M
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0O
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0R
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0T
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf0U
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf11
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf13
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf18
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1a
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1c
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1e
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1g
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1i
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1k
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1m
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1o
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1q
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1s
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1v
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1x
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1z
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1B
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1D
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1G
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1I
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1J
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1L
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1M
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1O
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1R
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1U
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1X
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf1Y
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf20
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf22
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf25
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf27
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf28
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf2b
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf2d
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf2f
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf2h
+ Use ViewPatterns to enable view patterns
+
+Assistant/WebApp/Types.hs:40:1:
+ Illegal view pattern: fromPathPiece -> Just dyn_acf2j
+ Use ViewPatterns to enable view patterns
+cabal: Error: some packages failed to install:
+git-annex-5.20140927
+
+
+# End of transcript or log.
+"""]]
+
+> You're not building the most recent version of git-annex; this was
+> already fixed in version 5.20141013. [[done]] --[[Joey]]
diff --git a/doc/bugs/Build_error_with_Yesod_1.4/comment_1_42fe9d62c9dcc55deea35d16b67177e6._comment b/doc/bugs/Build_error_with_Yesod_1.4/comment_1_42fe9d62c9dcc55deea35d16b67177e6._comment
new file mode 100644
index 000000000..145b5b1ea
--- /dev/null
+++ b/doc/bugs/Build_error_with_Yesod_1.4/comment_1_42fe9d62c9dcc55deea35d16b67177e6._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnmF_9CAtfqdZkC4e-_dCX-rK5bqh4RWkw"
+ nickname="Carl"
+ subject="Not on hackage"
+ date="2014-10-15T15:34:02Z"
+ content="""
+I stand corrected, but it seems this release is not on hackage?
+"""]]
diff --git a/doc/bugs/Build_error_with_Yesod_1.4/comment_2_05f6fb19f2527f6dd72ab0e2f87c021a._comment b/doc/bugs/Build_error_with_Yesod_1.4/comment_2_05f6fb19f2527f6dd72ab0e2f87c021a._comment
new file mode 100644
index 000000000..4f671d0b4
--- /dev/null
+++ b/doc/bugs/Build_error_with_Yesod_1.4/comment_2_05f6fb19f2527f6dd72ab0e2f87c021a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.111"
+ subject="comment 2"
+ date="2014-10-15T17:30:45Z"
+ content="""
+Hmm, yeah, it seems the upload to hackage failed, because hackage still rejects cabal files mentioning the legal os(gnu). Sigh. Fixed now.
+"""]]
diff --git a/doc/bugs/Build_fails_when_no_wget_avalible.mdwn b/doc/bugs/Build_fails_when_no_wget_avalible.mdwn
new file mode 100644
index 000000000..565060518
--- /dev/null
+++ b/doc/bugs/Build_fails_when_no_wget_avalible.mdwn
@@ -0,0 +1,46 @@
+### Please describe the problem.
+
+When trying to build git-annex 5.21050113 in a clean cabal sandbox on OSX and not having wget avalible, breaks the configure step of the build. See excerpt of build log below.
+
+I am not sure if it is a bug or not, from the debian dependencies it seems that wget is required, but from reading various pieces of the documentation it seems to only be recommended. Installing wget makes it build.
+
+### What steps will reproduce the problem?
+
+
+
+### What version of git-annex are you using? On what operating system?
+
+5.20150113 on OSX Yosemite.
+
+### Please provide any additional information below.
+
+[[!format sh """
+ checking version...fatal: Not a git repository (or any of the parent directories): .git
+ 5.20150113
+ checking UPGRADE_LOCATION... not available
+ checking git... yes
+ checking git version... 2.2.1
+ checking cp -a... yes
+ checking cp -p... yes
+ checking cp --preserve=timestamps... no
+ checking cp --reflink=auto... no
+ checking xargs -0... yes
+ checking rsync... yes
+ checking curl... yes
+ checking wget... no
+ checking wget supports -q --show-progress...setup: wget: does not exist
+cabal: Error: some packages failed to install:
+git-annex-5.20150113 failed during the configure step. The exception was:
+ExitFailure 1
+
+
+# End of transcript or log.
+"""]]
+
+-- Carl
+
+> wget is not intended to be a hard build dependency. The Debian package
+> should always be built with wget, so it's a build-dependency there.
+>
+> I've fixed the configure script to not crash in this situation.
+> [[done]]. --[[Joey]]
diff --git a/doc/bugs/Build_fails_when_no_wget_avalible/comment_1_c40db66d48d69d03847d73154faf3f59._comment b/doc/bugs/Build_fails_when_no_wget_avalible/comment_1_c40db66d48d69d03847d73154faf3f59._comment
new file mode 100644
index 000000000..02888728a
--- /dev/null
+++ b/doc/bugs/Build_fails_when_no_wget_avalible/comment_1_c40db66d48d69d03847d73154faf3f59._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnmF_9CAtfqdZkC4e-_dCX-rK5bqh4RWkw"
+ nickname="Carl"
+ subject="Thanks and question"
+ date="2015-01-16T20:14:32Z"
+ content="""
+Thanks for the quick fix.
+
+Is there any advantage in using wget over curl, for git-annex (when it comes to progress bars etc or are they just as good?
+"""]]
diff --git a/doc/bugs/Build_fails_when_no_wget_avalible/comment_2_f98ce0d40c60ea37f6174117bb7cef9f._comment b/doc/bugs/Build_fails_when_no_wget_avalible/comment_2_f98ce0d40c60ea37f6174117bb7cef9f._comment
new file mode 100644
index 000000000..a7eafe197
--- /dev/null
+++ b/doc/bugs/Build_fails_when_no_wget_avalible/comment_2_f98ce0d40c60ea37f6174117bb7cef9f._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 2"
+ date="2015-01-16T20:38:57Z"
+ content="""
+git-annex defaults to wget when both are available, but curl works equally well.
+"""]]
diff --git a/doc/bugs/Building_fails:_Could_not_find_module___96__Text.Blaze__39__.mdwn b/doc/bugs/Building_fails:_Could_not_find_module___96__Text.Blaze__39__.mdwn
deleted file mode 100644
index b75d92e18..000000000
--- a/doc/bugs/Building_fails:_Could_not_find_module___96__Text.Blaze__39__.mdwn
+++ /dev/null
@@ -1,105 +0,0 @@
-What steps will reproduce the problem?
-
-<pre>
-dominik@Atlantis:/var/tmp$ git clone git://github.com/joeyh/git-annex.git
-Cloning into 'git-annex'...
-remote: Counting objects: 40580, done.
-remote: Compressing objects: 100% (10514/10514), done.
-remote: Total 40580 (delta 29914), reused 40502 (delta 29837)
-Receiving objects: 100% (40580/40580), 9.17 MiB | 238 KiB/s, done.
-Resolving deltas: 100% (29914/29914), done.
-dominik@Atlantis:/var/tmp$ cd git-annex/
-dominik@Atlantis:/var/tmp/git-annex$ cabal update
-Downloading the latest package list from hackage.haskell.org
-dominik@Atlantis:/var/tmp/git-annex$ cabal install --only-dependencies
-Resolving dependencies...
-All the requested packages are already installed:
-Use --reinstall if you want to reinstall anyway.
-dominik@Atlantis:/var/tmp/git-annex$ cabal configure
-Resolving dependencies...
-[ 1 of 21] Compiling Utility.FileSystemEncoding ( Utility/FileSystemEncoding.hs, dist/setup/Utility/FileSystemEncoding.o )
-[ 2 of 21] Compiling Utility.Applicative ( Utility/Applicative.hs, dist/setup/Utility/Applicative.o )
-[ 3 of 21] Compiling Utility.PartialPrelude ( Utility/PartialPrelude.hs, dist/setup/Utility/PartialPrelude.o )
-[ 4 of 21] Compiling Utility.UserInfo ( Utility/UserInfo.hs, dist/setup/Utility/UserInfo.o )
-[ 5 of 21] Compiling Utility.Monad ( Utility/Monad.hs, dist/setup/Utility/Monad.o )
-[ 6 of 21] Compiling Utility.Path ( Utility/Path.hs, dist/setup/Utility/Path.o )
-[ 7 of 21] Compiling Utility.OSX ( Utility/OSX.hs, dist/setup/Utility/OSX.o )
-[ 8 of 21] Compiling Utility.Exception ( Utility/Exception.hs, dist/setup/Utility/Exception.o )
-[ 9 of 21] Compiling Utility.TempFile ( Utility/TempFile.hs, dist/setup/Utility/TempFile.o )
-[10 of 21] Compiling Utility.Misc ( Utility/Misc.hs, dist/setup/Utility/Misc.o )
-[11 of 21] Compiling Utility.Process ( Utility/Process.hs, dist/setup/Utility/Process.o )
-[12 of 21] Compiling Utility.FreeDesktop ( Utility/FreeDesktop.hs, dist/setup/Utility/FreeDesktop.o )
-[13 of 21] Compiling Assistant.Install.AutoStart ( Assistant/Install/AutoStart.hs, dist/setup/Assistant/Install/AutoStart.o )
-[14 of 21] Compiling Utility.SafeCommand ( Utility/SafeCommand.hs, dist/setup/Utility/SafeCommand.o )
-[15 of 21] Compiling Utility.Directory ( Utility/Directory.hs, dist/setup/Utility/Directory.o )
-[16 of 21] Compiling Common ( Common.hs, dist/setup/Common.o )
-[17 of 21] Compiling Locations.UserConfig ( Locations/UserConfig.hs, dist/setup/Locations/UserConfig.o )
-[18 of 21] Compiling Build.TestConfig ( Build/TestConfig.hs, dist/setup/Build/TestConfig.o )
-[19 of 21] Compiling Build.Configure ( Build/Configure.hs, dist/setup/Build/Configure.o )
-[20 of 21] Compiling Build.InstallDesktopFile ( Build/InstallDesktopFile.hs, dist/setup/Build/InstallDesktopFile.o )
-[21 of 21] Compiling Main ( Setup.hs, dist/setup/Main.o )
-Linking ./dist/setup/setup ...
- checking version... 3.20121018
- checking git... yes
- checking git version... 1.7.10.4
- checking cp -a... yes
- checking cp -p... yes
- checking cp --reflink=auto... yes
- checking uuid generator... uuidgen
- checking xargs -0... yes
- checking rsync... yes
- checking curl... yes
- checking wget... yes
- checking bup... no
- checking gpg... yes
- checking lsof... yes
- checking host... no
- checking ssh connection caching... yes
- checking sha1... sha1sum
- checking sha256... sha256sum
- checking sha512... sha512sum
- checking sha224... sha224sum
- checking sha384... sha384sum
-Configuring git-annex-3.20121018...
-dominik@Atlantis:/var/tmp/git-annex$ cabal build
-Building git-annex-3.20121018...
-Preprocessing executable 'git-annex' for git-annex-3.20121018...
-
-Assistant/Alert.hs:21:8:
- Could not find module `Text.Blaze'
- It is a member of the hidden package `blaze-markup-0.5.1.1'.
- Perhaps you need to add `blaze-markup' to the build-depends in your .cabal file.
- Use -v to see a list of the files searched for.
-</pre>
-
-What is the expected output? What do you see instead?
-
-I expect the latest git HEAD to build without an error message or provide me with a package I need to install. Instead the error above is shown. In fact the package requested is installed:
-
-<pre>
-dominik@Atlantis:/var/tmp/git-annex$ cabal install blaze-markup
-Resolving dependencies...
-All the requested packages are already installed:
-blaze-markup-0.5.1.1
-Use --reinstall if you want to reinstall anyway.
-</pre>
-
-What version of git-annex are you using? On what operating system?
-
-git HEAD, Ubuntu 12.10
-
-Please provide any additional information below.
-
-<pre>
-$ cabal --version
-cabal-install version 0.14.0
-using version 1.14.0 of the Cabal library
-
-$ ghc --version
-The Glorious Glasgow Haskell Compilation System, version 7.4.2
-
-$ uname -a
-Linux Atlantis 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
-</pre>
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Building_fails:__Could_not_find_module___96__Data.XML.Types__39__.mdwn b/doc/bugs/Building_fails:__Could_not_find_module___96__Data.XML.Types__39__.mdwn
deleted file mode 100644
index c03353436..000000000
--- a/doc/bugs/Building_fails:__Could_not_find_module___96__Data.XML.Types__39__.mdwn
+++ /dev/null
@@ -1,82 +0,0 @@
-What steps will reproduce the problem?
-
-<pre>
-dominik@Atlantis:/var/tmp$ git clone git://github.com/joeyh/git-annex.git
-Cloning into 'git-annex'...
-remote: Counting objects: 40841, done.
-remote: Compressing objects: 100% (10648/10648), done.
-remote: Total 40841 (delta 30135), reused 40669 (delta 29964)
-Receiving objects: 100% (40841/40841), 9.21 MiB | 517 KiB/s, done.
-Resolving deltas: 100% (30135/30135), done.
-dominik@Atlantis:/var/tmp/git-annex$ cabal install --only-dependencies
-Resolving dependencies...
-All the requested packages are already installed:
-Use --reinstall if you want to reinstall anyway.
-dominik@Atlantis:/var/tmp/git-annex$ cabal configure
-Resolving dependencies...
-[ 1 of 21] Compiling Utility.FileSystemEncoding ( Utility/FileSystemEncoding.hs, dist/setup/Utility/FileSystemEncoding.o )
-[ 2 of 21] Compiling Utility.Applicative ( Utility/Applicative.hs, dist/setup/Utility/Applicative.o )
-[ 3 of 21] Compiling Utility.PartialPrelude ( Utility/PartialPrelude.hs, dist/setup/Utility/PartialPrelude.o )
-[ 4 of 21] Compiling Utility.UserInfo ( Utility/UserInfo.hs, dist/setup/Utility/UserInfo.o )
-[ 5 of 21] Compiling Utility.Monad ( Utility/Monad.hs, dist/setup/Utility/Monad.o )
-[ 6 of 21] Compiling Utility.Path ( Utility/Path.hs, dist/setup/Utility/Path.o )
-[ 7 of 21] Compiling Utility.OSX ( Utility/OSX.hs, dist/setup/Utility/OSX.o )
-[ 8 of 21] Compiling Utility.Exception ( Utility/Exception.hs, dist/setup/Utility/Exception.o )
-[ 9 of 21] Compiling Utility.TempFile ( Utility/TempFile.hs, dist/setup/Utility/TempFile.o )
-[10 of 21] Compiling Utility.Misc ( Utility/Misc.hs, dist/setup/Utility/Misc.o )
-[11 of 21] Compiling Utility.Process ( Utility/Process.hs, dist/setup/Utility/Process.o )
-[12 of 21] Compiling Utility.FreeDesktop ( Utility/FreeDesktop.hs, dist/setup/Utility/FreeDesktop.o )
-[13 of 21] Compiling Assistant.Install.AutoStart ( Assistant/Install/AutoStart.hs, dist/setup/Assistant/Install/AutoStart.o )
-[14 of 21] Compiling Utility.SafeCommand ( Utility/SafeCommand.hs, dist/setup/Utility/SafeCommand.o )
-[15 of 21] Compiling Utility.Directory ( Utility/Directory.hs, dist/setup/Utility/Directory.o )
-[16 of 21] Compiling Common ( Common.hs, dist/setup/Common.o )
-[17 of 21] Compiling Locations.UserConfig ( Locations/UserConfig.hs, dist/setup/Locations/UserConfig.o )
-[18 of 21] Compiling Build.TestConfig ( Build/TestConfig.hs, dist/setup/Build/TestConfig.o )
-[19 of 21] Compiling Build.Configure ( Build/Configure.hs, dist/setup/Build/Configure.o )
-[20 of 21] Compiling Build.InstallDesktopFile ( Build/InstallDesktopFile.hs, dist/setup/Build/InstallDesktopFile.o )
-[21 of 21] Compiling Main ( Setup.hs, dist/setup/Main.o )
-Linking ./dist/setup/setup ...
- checking version... 3.20121018
- checking git... yes
- checking git version... 1.7.10.4
- checking cp -a... yes
- checking cp -p... yes
- checking cp --reflink=auto... yes
- checking uuid generator... uuidgen
- checking xargs -0... yes
- checking rsync... yes
- checking curl... yes
- checking wget... yes
- checking bup... no
- checking gpg... yes
- checking lsof... yes
- checking ssh connection caching... yes
- checking sha1... sha1sum
- checking sha256... sha256sum
- checking sha512... sha512sum
- checking sha224... sha224sum
- checking sha384... sha384sum
-Configuring git-annex-3.20121018...
-dominik@Atlantis:/var/tmp/git-annex$ cabal build
-Building git-annex-3.20121018...
-Preprocessing executable 'git-annex' for git-annex-3.20121018...
-
-Assistant/XMPP.hs:18:8:
- Could not find module `Data.XML.Types'
- It is a member of the hidden package `xml-types-0.3.3'.
- Perhaps you need to add `xml-types' to the build-depends in your .cabal file.
- Use -v to see a list of the files searched for.
-</pre>
-
-What is the expected output? What do you see instead?
-
-I exepect the current git HEAD to build without errors.
-
-What version of git-annex are you using? On what operating system?
-
-git-annex HEAD from git, Ubuntu 12.10
-
-Please provide any additional information below.
-
-> [[done]] --[[Joey]] (and tested the whole cabal build, which I usually
-> only do on releases)
diff --git a/doc/bugs/Building_fails:___Not_in_scope:_type_constructor_or_class___96__Html__39__.mdwn b/doc/bugs/Building_fails:___Not_in_scope:_type_constructor_or_class___96__Html__39__.mdwn
deleted file mode 100644
index 6459e3f2e..000000000
--- a/doc/bugs/Building_fails:___Not_in_scope:_type_constructor_or_class___96__Html__39__.mdwn
+++ /dev/null
@@ -1,189 +0,0 @@
-What steps will reproduce the problem?
-
-<pre>
-dominik@Atlantis:/var/tmp/git-annex$ cabal build
-Building git-annex-3.20121018...
-Preprocessing executable 'git-annex' for git-annex-3.20121018...
-
-Assistant/Threads/NetWatcher.hs:26:2:
- warning: #warning Building without dbus support; will poll for network connection changes [-Wcpp]
-
-Assistant/Threads/MountWatcher.hs:33:2:
- warning: #warning Building without dbus support; will use mtab polling [-Wcpp]
-[ 1 of 270] Compiling Utility.Dot ( Utility/Dot.hs, dist/build/git-annex/git-annex-tmp/Utility/Dot.o )
-[ 2 of 270] Compiling Utility.ThreadLock ( Utility/ThreadLock.hs, dist/build/git-annex/git-annex-tmp/Utility/ThreadLock.o )
-[ 3 of 270] Compiling Utility.Mounts ( dist/build/git-annex/git-annex-tmp/Utility/Mounts.hs, dist/build/git-annex/git-annex-tmp/Utility/Mounts.o )
-[ 4 of 270] Compiling Utility.Yesod ( Utility/Yesod.hs, dist/build/git-annex/git-annex-tmp/Utility/Yesod.o )
-[ 5 of 270] Compiling Utility.Tense ( Utility/Tense.hs, dist/build/git-annex/git-annex-tmp/Utility/Tense.o )
-[ 6 of 270] Compiling Utility.Verifiable ( Utility/Verifiable.hs, dist/build/git-annex/git-annex-tmp/Utility/Verifiable.o )
-[ 7 of 270] Compiling Assistant.Types.TransferSlots ( Assistant/Types/TransferSlots.hs, dist/build/git-annex/git-annex-tmp/Assistant/Types/TransferSlots.o )
-[ 8 of 270] Compiling Types.StandardGroups ( Types/StandardGroups.hs, dist/build/git-annex/git-annex-tmp/Types/StandardGroups.o )
-[ 9 of 270] Compiling Utility.Percentage ( Utility/Percentage.hs, dist/build/git-annex/git-annex-tmp/Utility/Percentage.o )
-[ 10 of 270] Compiling Utility.Base64 ( Utility/Base64.hs, dist/build/git-annex/git-annex-tmp/Utility/Base64.o )
-[ 11 of 270] Compiling Utility.DataUnits ( Utility/DataUnits.hs, dist/build/git-annex/git-annex-tmp/Utility/DataUnits.o )
-[ 12 of 270] Compiling Utility.JSONStream ( Utility/JSONStream.hs, dist/build/git-annex/git-annex-tmp/Utility/JSONStream.o )
-[ 13 of 270] Compiling Messages.JSON ( Messages/JSON.hs, dist/build/git-annex/git-annex-tmp/Messages/JSON.o )
-[ 14 of 270] Compiling Build.SysConfig ( Build/SysConfig.hs, dist/build/git-annex/git-annex-tmp/Build/SysConfig.o )
-[ 15 of 270] Compiling Types.KeySource ( Types/KeySource.hs, dist/build/git-annex/git-annex-tmp/Types/KeySource.o )
-[ 16 of 270] Compiling Utility.State ( Utility/State.hs, dist/build/git-annex/git-annex-tmp/Utility/State.o )
-[ 17 of 270] Compiling Types.UUID ( Types/UUID.hs, dist/build/git-annex/git-annex-tmp/Types/UUID.o )
-[ 18 of 270] Compiling Types.Messages ( Types/Messages.hs, dist/build/git-annex/git-annex-tmp/Types/Messages.o )
-[ 19 of 270] Compiling Types.Group ( Types/Group.hs, dist/build/git-annex/git-annex-tmp/Types/Group.o )
-[ 20 of 270] Compiling Types.TrustLevel ( Types/TrustLevel.hs, dist/build/git-annex/git-annex-tmp/Types/TrustLevel.o )
-[ 21 of 270] Compiling Types.BranchState ( Types/BranchState.hs, dist/build/git-annex/git-annex-tmp/Types/BranchState.o )
-[ 22 of 270] Compiling Utility.UserInfo ( Utility/UserInfo.hs, dist/build/git-annex/git-annex-tmp/Utility/UserInfo.o )
-[ 23 of 270] Compiling Utility.PartialPrelude ( Utility/PartialPrelude.hs, dist/build/git-annex/git-annex-tmp/Utility/PartialPrelude.o )
-[ 24 of 270] Compiling Utility.HumanTime ( Utility/HumanTime.hs, dist/build/git-annex/git-annex-tmp/Utility/HumanTime.o )
-[ 25 of 270] Compiling Utility.Format ( Utility/Format.hs, dist/build/git-annex/git-annex-tmp/Utility/Format.o )
-[ 26 of 270] Compiling Utility.FileSystemEncoding ( Utility/FileSystemEncoding.hs, dist/build/git-annex/git-annex-tmp/Utility/FileSystemEncoding.o )
-[ 27 of 270] Compiling Utility.Touch ( dist/build/git-annex/git-annex-tmp/Utility/Touch.hs, dist/build/git-annex/git-annex-tmp/Utility/Touch.o )
-[ 28 of 270] Compiling Utility.Applicative ( Utility/Applicative.hs, dist/build/git-annex/git-annex-tmp/Utility/Applicative.o )
-[ 29 of 270] Compiling Utility.Monad ( Utility/Monad.hs, dist/build/git-annex/git-annex-tmp/Utility/Monad.o )
-[ 30 of 270] Compiling Utility.Path ( Utility/Path.hs, dist/build/git-annex/git-annex-tmp/Utility/Path.o )
-[ 31 of 270] Compiling Utility.Exception ( Utility/Exception.hs, dist/build/git-annex/git-annex-tmp/Utility/Exception.o )
-[ 32 of 270] Compiling Utility.TempFile ( Utility/TempFile.hs, dist/build/git-annex/git-annex-tmp/Utility/TempFile.o )
-[ 33 of 270] Compiling Utility.Misc ( Utility/Misc.hs, dist/build/git-annex/git-annex-tmp/Utility/Misc.o )
-[ 34 of 270] Compiling Utility.Process ( Utility/Process.hs, dist/build/git-annex/git-annex-tmp/Utility/Process.o )
-[ 35 of 270] Compiling Utility.SafeCommand ( Utility/SafeCommand.hs, dist/build/git-annex/git-annex-tmp/Utility/SafeCommand.o )
-[ 36 of 270] Compiling Utility.Directory ( Utility/Directory.hs, dist/build/git-annex/git-annex-tmp/Utility/Directory.o )
-[ 37 of 270] Compiling Utility.Network ( Utility/Network.hs, dist/build/git-annex/git-annex-tmp/Utility/Network.o )
-[ 38 of 270] Compiling Utility.FreeDesktop ( Utility/FreeDesktop.hs, dist/build/git-annex/git-annex-tmp/Utility/FreeDesktop.o )
-[ 39 of 270] Compiling Assistant.Install.AutoStart ( Assistant/Install/AutoStart.hs, dist/build/git-annex/git-annex-tmp/Assistant/Install/AutoStart.o )
-[ 40 of 270] Compiling Utility.SRV ( Utility/SRV.hs, dist/build/git-annex/git-annex-tmp/Utility/SRV.o )
-[ 41 of 270] Compiling Git.Types ( Git/Types.hs, dist/build/git-annex/git-annex-tmp/Git/Types.o )
-[ 42 of 270] Compiling Common ( Common.hs, dist/build/git-annex/git-annex-tmp/Common.o )
-[ 43 of 270] Compiling Utility.FileMode ( Utility/FileMode.hs, dist/build/git-annex/git-annex-tmp/Utility/FileMode.o )
-[ 44 of 270] Compiling Git ( Git.hs, dist/build/git-annex/git-annex-tmp/Git.o )
-[ 45 of 270] Compiling Git.FilePath ( Git/FilePath.hs, dist/build/git-annex/git-annex-tmp/Git/FilePath.o )
-[ 46 of 270] Compiling Utility.Matcher ( Utility/Matcher.hs, dist/build/git-annex/git-annex-tmp/Utility/Matcher.o )
-[ 47 of 270] Compiling Utility.Gpg ( Utility/Gpg.hs, dist/build/git-annex/git-annex-tmp/Utility/Gpg.o )
-[ 48 of 270] Compiling Types.Crypto ( Types/Crypto.hs, dist/build/git-annex/git-annex-tmp/Types/Crypto.o )
-[ 49 of 270] Compiling Types.Key ( Types/Key.hs, dist/build/git-annex/git-annex-tmp/Types/Key.o )
-[ 50 of 270] Compiling Types.Backend ( Types/Backend.hs, dist/build/git-annex/git-annex-tmp/Types/Backend.o )
-[ 51 of 270] Compiling Types.Remote ( Types/Remote.hs, dist/build/git-annex/git-annex-tmp/Types/Remote.o )
-[ 52 of 270] Compiling Git.Sha ( Git/Sha.hs, dist/build/git-annex/git-annex-tmp/Git/Sha.o )
-[ 53 of 270] Compiling Utility.CoProcess ( Utility/CoProcess.hs, dist/build/git-annex/git-annex-tmp/Utility/CoProcess.o )
-[ 54 of 270] Compiling Git.Command ( Git/Command.hs, dist/build/git-annex/git-annex-tmp/Git/Command.o )
-[ 55 of 270] Compiling Git.Ref ( Git/Ref.hs, dist/build/git-annex/git-annex-tmp/Git/Ref.o )
-[ 56 of 270] Compiling Git.Branch ( Git/Branch.hs, dist/build/git-annex/git-annex-tmp/Git/Branch.o )
-[ 57 of 270] Compiling Git.UpdateIndex ( Git/UpdateIndex.hs, dist/build/git-annex/git-annex-tmp/Git/UpdateIndex.o )
-[ 58 of 270] Compiling Git.Queue ( Git/Queue.hs, dist/build/git-annex/git-annex-tmp/Git/Queue.o )
-[ 59 of 270] Compiling Git.HashObject ( Git/HashObject.hs, dist/build/git-annex/git-annex-tmp/Git/HashObject.o )
-[ 60 of 270] Compiling Git.CatFile ( Git/CatFile.hs, dist/build/git-annex/git-annex-tmp/Git/CatFile.o )
-[ 61 of 270] Compiling Git.UnionMerge ( Git/UnionMerge.hs, dist/build/git-annex/git-annex-tmp/Git/UnionMerge.o )
-[ 62 of 270] Compiling Git.Url ( Git/Url.hs, dist/build/git-annex/git-annex-tmp/Git/Url.o )
-[ 63 of 270] Compiling Git.Construct ( Git/Construct.hs, dist/build/git-annex/git-annex-tmp/Git/Construct.o )
-[ 64 of 270] Compiling Git.Config ( Git/Config.hs, dist/build/git-annex/git-annex-tmp/Git/Config.o )
-[ 65 of 270] Compiling Git.SharedRepository ( Git/SharedRepository.hs, dist/build/git-annex/git-annex-tmp/Git/SharedRepository.o )
-[ 66 of 270] Compiling Git.Version ( Git/Version.hs, dist/build/git-annex/git-annex-tmp/Git/Version.o )
-[ 67 of 270] Compiling Git.CheckAttr ( Git/CheckAttr.hs, dist/build/git-annex/git-annex-tmp/Git/CheckAttr.o )
-[ 68 of 270] Compiling Annex ( Annex.hs, dist/build/git-annex/git-annex-tmp/Annex.o )
-[ 69 of 270] Compiling Types.Option ( Types/Option.hs, dist/build/git-annex/git-annex-tmp/Types/Option.o )
-[ 70 of 270] Compiling Types ( Types.hs, dist/build/git-annex/git-annex-tmp/Types.o )
-[ 71 of 270] Compiling Messages ( Messages.hs, dist/build/git-annex/git-annex-tmp/Messages.o )
-[ 72 of 270] Compiling Types.Command ( Types/Command.hs, dist/build/git-annex/git-annex-tmp/Types/Command.o )
-[ 73 of 270] Compiling Locations ( Locations.hs, dist/build/git-annex/git-annex-tmp/Locations.o )
-[ 74 of 270] Compiling Common.Annex ( Common/Annex.hs, dist/build/git-annex/git-annex-tmp/Common/Annex.o )
-[ 75 of 270] Compiling Fields ( Fields.hs, dist/build/git-annex/git-annex-tmp/Fields.o )
-[ 76 of 270] Compiling Annex.BranchState ( Annex/BranchState.hs, dist/build/git-annex/git-annex-tmp/Annex/BranchState.o )
-[ 77 of 270] Compiling Annex.CatFile ( Annex/CatFile.hs, dist/build/git-annex/git-annex-tmp/Annex/CatFile.o )
-[ 78 of 270] Compiling Annex.Perms ( Annex/Perms.hs, dist/build/git-annex/git-annex-tmp/Annex/Perms.o )
-[ 79 of 270] Compiling Crypto ( Crypto.hs, dist/build/git-annex/git-annex-tmp/Crypto.o )
-[ 80 of 270] Compiling Annex.Exception ( Annex/Exception.hs, dist/build/git-annex/git-annex-tmp/Annex/Exception.o )
-[ 81 of 270] Compiling Annex.Journal ( Annex/Journal.hs, dist/build/git-annex/git-annex-tmp/Annex/Journal.o )
-[ 82 of 270] Compiling Annex.Branch ( Annex/Branch.hs, dist/build/git-annex/git-annex-tmp/Annex/Branch.o )
-[ 83 of 270] Compiling Usage ( Usage.hs, dist/build/git-annex/git-annex-tmp/Usage.o )
-[ 84 of 270] Compiling Annex.CheckAttr ( Annex/CheckAttr.hs, dist/build/git-annex/git-annex-tmp/Annex/CheckAttr.o )
-[ 85 of 270] Compiling Remote.Helper.Special ( Remote/Helper/Special.hs, dist/build/git-annex/git-annex-tmp/Remote/Helper/Special.o )
-[ 86 of 270] Compiling Logs.Presence ( Logs/Presence.hs, dist/build/git-annex/git-annex-tmp/Logs/Presence.o )
-[ 87 of 270] Compiling Logs.Location ( Logs/Location.hs, dist/build/git-annex/git-annex-tmp/Logs/Location.o )
-[ 88 of 270] Compiling Logs.Web ( Logs/Web.hs, dist/build/git-annex/git-annex-tmp/Logs/Web.o )
-[ 89 of 270] Compiling Annex.LockPool ( Annex/LockPool.hs, dist/build/git-annex/git-annex-tmp/Annex/LockPool.o )
-[ 90 of 270] Compiling Logs.Transfer ( Logs/Transfer.hs, dist/build/git-annex/git-annex-tmp/Logs/Transfer.o )
-[ 91 of 270] Compiling Backend.SHA ( Backend/SHA.hs, dist/build/git-annex/git-annex-tmp/Backend/SHA.o )
-[ 92 of 270] Compiling Backend.WORM ( Backend/WORM.hs, dist/build/git-annex/git-annex-tmp/Backend/WORM.o )
-[ 93 of 270] Compiling Backend.URL ( Backend/URL.hs, dist/build/git-annex/git-annex-tmp/Backend/URL.o )
-[ 94 of 270] Compiling Assistant.Ssh ( Assistant/Ssh.hs, dist/build/git-annex/git-annex-tmp/Assistant/Ssh.o )
-[ 95 of 270] Compiling Assistant.Types.ThreadedMonad ( Assistant/Types/ThreadedMonad.hs, dist/build/git-annex/git-annex-tmp/Assistant/Types/ThreadedMonad.o )
-[ 96 of 270] Compiling Assistant.Types.ScanRemotes ( Assistant/Types/ScanRemotes.hs, dist/build/git-annex/git-annex-tmp/Assistant/Types/ScanRemotes.o )
-[ 97 of 270] Compiling Assistant.Types.TransferQueue ( Assistant/Types/TransferQueue.hs, dist/build/git-annex/git-annex-tmp/Assistant/Types/TransferQueue.o )
-[ 98 of 270] Compiling Assistant.Types.BranchChange ( Assistant/Types/BranchChange.hs, dist/build/git-annex/git-annex-tmp/Assistant/Types/BranchChange.o )
-[ 99 of 270] Compiling Assistant.Pairing ( Assistant/Pairing.hs, dist/build/git-annex/git-annex-tmp/Assistant/Pairing.o )
-[100 of 270] Compiling Logs.UUIDBased ( Logs/UUIDBased.hs, dist/build/git-annex/git-annex-tmp/Logs/UUIDBased.o )
-[101 of 270] Compiling Logs.Remote ( Logs/Remote.hs, dist/build/git-annex/git-annex-tmp/Logs/Remote.o )
-[102 of 270] Compiling Logs.Group ( Logs/Group.hs, dist/build/git-annex/git-annex-tmp/Logs/Group.o )
-[103 of 270] Compiling Utility.DiskFree ( Utility/DiskFree.hs, dist/build/git-annex/git-annex-tmp/Utility/DiskFree.o )
-[104 of 270] Compiling Utility.Url ( Utility/Url.hs, dist/build/git-annex/git-annex-tmp/Utility/Url.o )
-[105 of 270] Compiling Utility.CopyFile ( Utility/CopyFile.hs, dist/build/git-annex/git-annex-tmp/Utility/CopyFile.o )
-[106 of 270] Compiling Utility.Rsync ( Utility/Rsync.hs, dist/build/git-annex/git-annex-tmp/Utility/Rsync.o )
-[107 of 270] Compiling Git.LsFiles ( Git/LsFiles.hs, dist/build/git-annex/git-annex-tmp/Git/LsFiles.o )
-[108 of 270] Compiling Git.AutoCorrect ( Git/AutoCorrect.hs, dist/build/git-annex/git-annex-tmp/Git/AutoCorrect.o )
-[109 of 270] Compiling Git.CurrentRepo ( Git/CurrentRepo.hs, dist/build/git-annex/git-annex-tmp/Git/CurrentRepo.o )
-[110 of 270] Compiling Git.Merge ( Git/Merge.hs, dist/build/git-annex/git-annex-tmp/Git/Merge.o )
-[111 of 270] Compiling Utility.WebApp ( Utility/WebApp.hs, dist/build/git-annex/git-annex-tmp/Utility/WebApp.o )
-[112 of 270] Compiling Utility.Daemon ( Utility/Daemon.hs, dist/build/git-annex/git-annex-tmp/Utility/Daemon.o )
-[113 of 270] Compiling Locations.UserConfig ( Locations/UserConfig.hs, dist/build/git-annex/git-annex-tmp/Locations/UserConfig.o )
-[114 of 270] Compiling Utility.TSet ( Utility/TSet.hs, dist/build/git-annex/git-annex-tmp/Utility/TSet.o )
-[115 of 270] Compiling Assistant.Types.Pushes ( Assistant/Types/Pushes.hs, dist/build/git-annex/git-annex-tmp/Assistant/Types/Pushes.o )
-[116 of 270] Compiling Assistant.Types.Commits ( Assistant/Types/Commits.hs, dist/build/git-annex/git-annex-tmp/Assistant/Types/Commits.o )
-[117 of 270] Compiling Assistant.Types.Changes ( Assistant/Types/Changes.hs, dist/build/git-annex/git-annex-tmp/Assistant/Types/Changes.o )
-[118 of 270] Compiling Utility.NotificationBroadcaster ( Utility/NotificationBroadcaster.hs, dist/build/git-annex/git-annex-tmp/Utility/NotificationBroadcaster.o )
-[119 of 270] Compiling Utility.Parallel ( Utility/Parallel.hs, dist/build/git-annex/git-annex-tmp/Utility/Parallel.o )
-[120 of 270] Compiling Utility.ThreadScheduler ( Utility/ThreadScheduler.hs, dist/build/git-annex/git-annex-tmp/Utility/ThreadScheduler.o )
-[121 of 270] Compiling Utility.LogFile ( Utility/LogFile.hs, dist/build/git-annex/git-annex-tmp/Utility/LogFile.o )
-[122 of 270] Compiling Git.Filename ( Git/Filename.hs, dist/build/git-annex/git-annex-tmp/Git/Filename.o )
-[123 of 270] Compiling Git.LsTree ( Git/LsTree.hs, dist/build/git-annex/git-annex-tmp/Git/LsTree.o )
-[124 of 270] Compiling Utility.Types.DirWatcher ( Utility/Types/DirWatcher.hs, dist/build/git-annex/git-annex-tmp/Utility/Types/DirWatcher.o )
-[125 of 270] Compiling Utility.INotify ( Utility/INotify.hs, dist/build/git-annex/git-annex-tmp/Utility/INotify.o )
-[126 of 270] Compiling Utility.DirWatcher ( Utility/DirWatcher.hs, dist/build/git-annex/git-annex-tmp/Utility/DirWatcher.o )
-[127 of 270] Compiling Utility.Lsof ( Utility/Lsof.hs, dist/build/git-annex/git-annex-tmp/Utility/Lsof.o )
-[128 of 270] Compiling Config ( Config.hs, dist/build/git-annex/git-annex-tmp/Config.o )
-[129 of 270] Compiling Annex.UUID ( Annex/UUID.hs, dist/build/git-annex/git-annex-tmp/Annex/UUID.o )
-[130 of 270] Compiling Logs.UUID ( Logs/UUID.hs, dist/build/git-annex/git-annex-tmp/Logs/UUID.o )
-[131 of 270] Compiling Backend ( Backend.hs, dist/build/git-annex/git-annex-tmp/Backend.o )
-[132 of 270] Compiling Remote.Helper.Hooks ( Remote/Helper/Hooks.hs, dist/build/git-annex/git-annex-tmp/Remote/Helper/Hooks.o )
-[133 of 270] Compiling Remote.Helper.Encryptable ( Remote/Helper/Encryptable.hs, dist/build/git-annex/git-annex-tmp/Remote/Helper/Encryptable.o )
-[134 of 270] Compiling Annex.Queue ( Annex/Queue.hs, dist/build/git-annex/git-annex-tmp/Annex/Queue.o )
-[135 of 270] Compiling Annex.Content ( Annex/Content.hs, dist/build/git-annex/git-annex-tmp/Annex/Content.o )
-[136 of 270] Compiling Remote.S3 ( Remote/S3.hs, dist/build/git-annex/git-annex-tmp/Remote/S3.o )
-[137 of 270] Compiling Remote.Directory ( Remote/Directory.hs, dist/build/git-annex/git-annex-tmp/Remote/Directory.o )
-[138 of 270] Compiling Remote.Rsync ( Remote/Rsync.hs, dist/build/git-annex/git-annex-tmp/Remote/Rsync.o )
-[139 of 270] Compiling Remote.Web ( Remote/Web.hs, dist/build/git-annex/git-annex-tmp/Remote/Web.o )
-[140 of 270] Compiling Remote.Hook ( Remote/Hook.hs, dist/build/git-annex/git-annex-tmp/Remote/Hook.o )
-[141 of 270] Compiling Upgrade.V2 ( Upgrade/V2.hs, dist/build/git-annex/git-annex-tmp/Upgrade/V2.o )
-[142 of 270] Compiling Annex.Ssh ( Annex/Ssh.hs, dist/build/git-annex/git-annex-tmp/Annex/Ssh.o )
-[143 of 270] Compiling Remote.Helper.Ssh ( Remote/Helper/Ssh.hs, dist/build/git-annex/git-annex-tmp/Remote/Helper/Ssh.o )
-[144 of 270] Compiling Remote.Bup ( Remote/Bup.hs, dist/build/git-annex/git-annex-tmp/Remote/Bup.o )
-[145 of 270] Compiling Annex.Version ( Annex/Version.hs, dist/build/git-annex/git-annex-tmp/Annex/Version.o )
-[146 of 270] Compiling Init ( Init.hs, dist/build/git-annex/git-annex-tmp/Init.o )
-[147 of 270] Compiling Checks ( Checks.hs, dist/build/git-annex/git-annex-tmp/Checks.o )
-[148 of 270] Compiling Remote.Git ( Remote/Git.hs, dist/build/git-annex/git-annex-tmp/Remote/Git.o )
-[149 of 270] Compiling Remote.List ( Remote/List.hs, dist/build/git-annex/git-annex-tmp/Remote/List.o )
-[150 of 270] Compiling Logs.Trust ( Logs/Trust.hs, dist/build/git-annex/git-annex-tmp/Logs/Trust.o )
-[151 of 270] Compiling Remote ( Remote.hs, dist/build/git-annex/git-annex-tmp/Remote.o )
-[152 of 270] Compiling Assistant.Alert ( Assistant/Alert.hs, dist/build/git-annex/git-annex-tmp/Assistant/Alert.o )
-
-Assistant/Alert.hs:60:26:
- Not in scope: type constructor or class `Html'
-
-Assistant/Alert.hs:66:21: Not in scope: `preEscapedText'
-
-Assistant/Alert.hs:68:26:
- Not in scope: type constructor or class `Html'
-
-Assistant/Alert.hs:69:19: Not in scope: `preEscapedText'
-</pre>
-
-What is the expected output? What do you see instead?
-
-The current git HEAD should build and not throw an error.
-
-What version of git-annex are you using? On what operating system?
-
-git-annex HEAD from git, Ubuntu 12.10.
-
-Please provide any additional information below.
-
-> Hmm, seems that Blaze's API is not stable, and I should avoid using it
-> directly. Converted this code to using Hamlet instead for its html
-> generation. [[done]] --[[Joey]]
diff --git a/doc/bugs/Building_in_cabal_using_--bindir___126____47__bin_breaks_the_desktop_link.mdwn b/doc/bugs/Building_in_cabal_using_--bindir___126____47__bin_breaks_the_desktop_link.mdwn
deleted file mode 100644
index 223568ca8..000000000
--- a/doc/bugs/Building_in_cabal_using_--bindir___126____47__bin_breaks_the_desktop_link.mdwn
+++ /dev/null
@@ -1,15 +0,0 @@
-What steps will reproduce the problem?
-
-Download the sourcecode, build using 'cabal build', then install using 'cabal install --bindir ~/bin'.
-
-What is the expected output? What do you see instead?
-
-The .desktop file contains `~/bin/git-annex webapp` as command which is of course a invalid command as ~ is not expanded when running the desktop file.
-
-What version of git-annex are you using? On what operating system?
-Latest Head from git, Ubuntu 12.04
-
-Please provide any additional information below.
-I'm not sure whether this is a bug or not. I just ran into problems because I did not expect the cabal build process to create my desktop file but instead thought that git-annex will create it by it-self taking its own path. Perhaps it would make sense to produce an error if the bindir is invalid. An automatic expansion of '~' in the build script would be even better.
-
-> [[done]], I think it was a typo. --[[Joey]]
diff --git a/doc/bugs/Building_in_cabal_using_--bindir___126____47__bin_breaks_the_desktop_link/comment_1_c0f0a2878070ed86900815c6b6a5fa5e._comment b/doc/bugs/Building_in_cabal_using_--bindir___126____47__bin_breaks_the_desktop_link/comment_1_c0f0a2878070ed86900815c6b6a5fa5e._comment
deleted file mode 100644
index 82dfa0d48..000000000
--- a/doc/bugs/Building_in_cabal_using_--bindir___126____47__bin_breaks_the_desktop_link/comment_1_c0f0a2878070ed86900815c6b6a5fa5e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.60"
- subject="comment 1"
- date="2012-09-15T16:39:19Z"
- content="""
-Something is going on that I don't understand. When I run `cabal install --bindir ~/bin`, my shell passes `/home/joey/bin` to cabal, so of course it works.
-"""]]
diff --git a/doc/bugs/Building_in_cabal_using_--bindir___126____47__bin_breaks_the_desktop_link/comment_2_53f2de3d3993821d8502fd08a0fcce12._comment b/doc/bugs/Building_in_cabal_using_--bindir___126____47__bin_breaks_the_desktop_link/comment_2_53f2de3d3993821d8502fd08a0fcce12._comment
deleted file mode 100644
index 69d795865..000000000
--- a/doc/bugs/Building_in_cabal_using_--bindir___126____47__bin_breaks_the_desktop_link/comment_2_53f2de3d3993821d8502fd08a0fcce12._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 2"
- date="2013-03-19T00:07:23Z"
- content="""
-It seems to me that --bindir ~/bin will work, but --bindir=~/bin will not; it prevents the shell's tilde expansion from working.
-"""]]
diff --git a/doc/bugs/Building_on_OpenBSD.mdwn b/doc/bugs/Building_on_OpenBSD.mdwn
deleted file mode 100644
index b500d8a4b..000000000
--- a/doc/bugs/Building_on_OpenBSD.mdwn
+++ /dev/null
@@ -1,40 +0,0 @@
-### Please describe the problem.
-Hi!
-I just tried to build git-annex through cabal on OpenBSD and encountered some issues.
-
-First I had to install a certain commit of network-info that fixes some compile-time errors (https://github.com/jystic/network-info/issues/6)
-Then I had to disable WebDAV in git-annex because DAV wouldn't build (I don't use webdav anyway)
-
-After this git-annex still failed to build, though configure works.
-### What steps will reproduce the problem?
-Compiling on openbsd through cabal
-
-### What version of git-annex are you using? On what operating system?
-git-annex-5.20131130 on OpenBSD 5.4
-
-### Please provide any additional information below.
-
-[[!format sh """
-The error in question:
-[312 of 389] Compiling Assistant.Pairing.Network ( Assistant/Pairing/Network.hs, dist/build/git-annex/git-annex-tmp/Assistant/Pairing/Network.o )
-
-Assistant/Pairing/Network.hs:101:21:
- Not in scope: type constructor or class `IPv4'
-
-Assistant/Pairing/Network.hs:102:21:
- Not in scope: data constructor `IPv4'
-
-Assistant/Pairing/Network.hs:104:21:
- Not in scope: type constructor or class `IPv6'
-
-Assistant/Pairing/Network.hs:105:21:
- Not in scope: data constructor `IPv6'
-
-Assistant/Pairing/Network.hs:108:32:
- Not in scope: data constructor `IPv4'
-
-Assistant/Pairing/Network.hs:109:47:
- Not in scope: data constructor `IPv6'
-"""]]
-
-> [[done]]; see comment --[[Joey]]
diff --git a/doc/bugs/Building_on_OpenBSD/comment_1_bec4a7253e851567cd47b96ceead5d91._comment b/doc/bugs/Building_on_OpenBSD/comment_1_bec4a7253e851567cd47b96ceead5d91._comment
deleted file mode 100644
index 01304cc8f..000000000
--- a/doc/bugs/Building_on_OpenBSD/comment_1_bec4a7253e851567cd47b96ceead5d91._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.87"
- subject="comment 1"
- date="2013-12-12T17:32:23Z"
- content="""
-network-info is where IPv4 and IPv6 are defined. You have chosen to installs it \"dev\" branch, which removes those and has a top commit of \"wip - don't pull this, not working on unix yet\".
-
-What you should really do is just disable local pairing, which avoids the need for porting network-info to openbsd. You can do so by passing -f-Pairing to cabal configure. There are lots of other features that can be similarly disabled if their necessary depedencies cannot be installed (normally this is done automatically.)
-"""]]
diff --git a/doc/bugs/Building_on_OpenBSD/comment_2_4a37935080b86643ecda717fe17f8f87._comment b/doc/bugs/Building_on_OpenBSD/comment_2_4a37935080b86643ecda717fe17f8f87._comment
deleted file mode 100644
index 3a7f85fdc..000000000
--- a/doc/bugs/Building_on_OpenBSD/comment_2_4a37935080b86643ecda717fe17f8f87._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkzwmw_zyMpZC9_J7ey--woeYPoZkAOgGw"
- nickname="dxtrish"
- subject="comment 2"
- date="2014-02-04T13:45:25Z"
- content="""
-Sorry for the long delay, but I've tried what you said:
-``% cabal install git-annex --bindir=$HOME/bin --flags=\"-pairing -webdav\" -j2``
-
-and it STILL fails with:
-``cabal: user error (Error: some packages failed to install:
-git-annex-5.20140129 depends on network-info-0.2.0.3 which failed to install.
-network-info-0.2.0.3 failed during the building phase. The exception was:
-ExitFailure 1
-uuid-1.3.3 depends on network-info-0.2.0.3 which failed to install.
-)``
-
-"""]]
diff --git a/doc/bugs/Building_on_OpenBSD/comment_3_2df229eb965189e2f7ea6dcd66cf68ca._comment b/doc/bugs/Building_on_OpenBSD/comment_3_2df229eb965189e2f7ea6dcd66cf68ca._comment
deleted file mode 100644
index 51153b671..000000000
--- a/doc/bugs/Building_on_OpenBSD/comment_3_2df229eb965189e2f7ea6dcd66cf68ca._comment
+++ /dev/null
@@ -1,24 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkzwmw_zyMpZC9_J7ey--woeYPoZkAOgGw"
- nickname="dxtrish"
- subject="comment 3"
- date="2014-02-04T14:04:33Z"
- content="""
-And the UUID package requires network-info and git-annex seems to require the UUID package.
-Also notice that the configure can't find the SHA commands:
- checking sha1... not available
- checking sha256... not available
- checking sha512... not available
- checking sha224... not available
- checking sha384... not available
- Configuring git-annex-5.20140129...
- setup: user error (At least the following dependencies are missing:
- uuid -any)
-
-Even though:
- % which sha1
- /bin/sha1
- % which sha256
- /bin/sha256
-
-"""]]
diff --git a/doc/bugs/Building_on_OpenBSD/comment_4_d141c0bac92bdfbc8b95d532d032174c._comment b/doc/bugs/Building_on_OpenBSD/comment_4_d141c0bac92bdfbc8b95d532d032174c._comment
deleted file mode 100644
index 090fed454..000000000
--- a/doc/bugs/Building_on_OpenBSD/comment_4_d141c0bac92bdfbc8b95d532d032174c._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkzwmw_zyMpZC9_J7ey--woeYPoZkAOgGw"
- nickname="dxtrish"
- subject="comment 4"
- date="2014-02-04T14:05:19Z"
- content="""
-And why isn't the formatting working? :p
-"""]]
diff --git a/doc/bugs/Building_on_OpenBSD/comment_5_8aba96ef58eb6954f1d15029e0dda9ed._comment b/doc/bugs/Building_on_OpenBSD/comment_5_8aba96ef58eb6954f1d15029e0dda9ed._comment
deleted file mode 100644
index 89bd81b60..000000000
--- a/doc/bugs/Building_on_OpenBSD/comment_5_8aba96ef58eb6954f1d15029e0dda9ed._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="206.74.132.139"
- subject="comment 5"
- date="2014-02-06T17:10:59Z"
- content="""
-Ok, I missed that uuid needs network-info. Actually, git-annex does not use that part of uuid (it does not put IP info in its uuids). There is a past version of uuid that did not depend on network-info. Perhaps you should first install it: `cabal install uuid-1.2.14`
-
-As far as it not finding or liking the sha* commands, it may be that it is not able to parse the OpenBSD output, or doesn't see the output it expects when testing them. These commands are only used as a minor optimisation, if not available it will fall back to using a haskell implementation which is a few percent slower (or faster) than the linux coreutils version of sha*. I don't know how the speeds compare on OpenBSD, but it's probably not worth worrying about.
-"""]]
diff --git a/doc/bugs/Building_on_OpenBSD/comment_6_82e6744e246fe5caa72081d4e921b168._comment b/doc/bugs/Building_on_OpenBSD/comment_6_82e6744e246fe5caa72081d4e921b168._comment
deleted file mode 100644
index ac01f1a5c..000000000
--- a/doc/bugs/Building_on_OpenBSD/comment_6_82e6744e246fe5caa72081d4e921b168._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkzwmw_zyMpZC9_J7ey--woeYPoZkAOgGw"
- nickname="dxtrish"
- subject="comment 6"
- date="2014-02-07T11:16:17Z"
- content="""
-Actually what I did was to patch network-info to build under openbsd.
-I've literally never touched Haskell but fortunately it was C code that needed fixing and so far it seems to be working.
-
-I'm intending to contact the maintainer of that package and let him know
-"""]]
diff --git a/doc/bugs/Button_to_cancel_conistency_checks.mdwn b/doc/bugs/Button_to_cancel_conistency_checks.mdwn
new file mode 100644
index 000000000..2fd63dd2a
--- /dev/null
+++ b/doc/bugs/Button_to_cancel_conistency_checks.mdwn
@@ -0,0 +1,21 @@
+### Please describe the problem.
+
+Sometimes a consistency check is undesired, e.g. when one wants to unmount the external drive. Add a button (along Configure) to the bubble that says Consistency check in progress to the assistent.
+
+### What steps will reproduce the problem?
+
+Run an automatic conistency check.
+
+### What version of git-annex are you using? On what operating system?
+
+20141024
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
diff --git a/doc/bugs/CHECKPRESENT_could_check_file_size_as_well.mdwn b/doc/bugs/CHECKPRESENT_could_check_file_size_as_well.mdwn
new file mode 100644
index 000000000..83c87c355
--- /dev/null
+++ b/doc/bugs/CHECKPRESENT_could_check_file_size_as_well.mdwn
@@ -0,0 +1,7 @@
+The [external special remote protocol](http://git-annex.branchable.com/design/external_special_remote_protocol/) CHECKPRESENT command has no support for checking the file size.
+
+In many cases a special remote is able to fetch the size of an object as it checks its availability with no additional cost (for example when you use the `stat()` function: the size is already included in the response). The remote protocol could be extended so that the backend returns the size with the CHECKPRESENT-SUCCESS command, so that git-annex can provide a primitive but probably useful additional integrity check. This is helpful, for example, to detect bugs that result in the truncation of a file in the special remote; or to detect the case of an aborted upload that resulted in the file being checked into the remote anyway.
+
+When it is not easy to get the file size without incurring in additional costs, the backend can simply return a flag value like `-1` to tell git-annex to ignore it.
+
+There is a delicate point in how git-annex computes the expected object size for an encrypted remote. I do not know if there is a way to compute the size of a file after it has been encrypted with HMAC/GPG without actually performing all the computation. In line of principle it should not be difficult, but I do not know the details.
diff --git a/doc/bugs/CHECKPRESENT_could_check_file_size_as_well/comment_1_7bbba896da745a8a6b69ec62bf71fc89._comment b/doc/bugs/CHECKPRESENT_could_check_file_size_as_well/comment_1_7bbba896da745a8a6b69ec62bf71fc89._comment
new file mode 100644
index 000000000..e917ec998
--- /dev/null
+++ b/doc/bugs/CHECKPRESENT_could_check_file_size_as_well/comment_1_7bbba896da745a8a6b69ec62bf71fc89._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 1"
+ date="2015-01-06T17:41:45Z"
+ content="""
+The encrypted content size is not constant, and not known to git-annex.
+
+The only git-annex remote that checks the size in its checkpresent implementation is the web special remote, precisely because it's never encrypted. Also because files on the web change content from time to time and so that needs to be detected.
+
+What would make sense is to extend the reply to `CHECKPRESENT-SUCCESS Key [size]` or perhaps `CHECKPRESENT-SIZE Key size`. git-annex can then compare the value with the key's known size, if any. If the key is encrypted, it would need to skip this check.
+
+Note that chunk keys currently have their keySize inherited from the parent key, and the keyChunkSize of each chunk key is set to the key size. The last chunk of a key will typically be shorter than its keyChunkSize. That would need to be cleaned up.
+"""]]
diff --git a/doc/bugs/Cabal_cannot_solve_dependencies.mdwn b/doc/bugs/Cabal_cannot_solve_dependencies.mdwn
deleted file mode 100644
index ac9738b03..000000000
--- a/doc/bugs/Cabal_cannot_solve_dependencies.mdwn
+++ /dev/null
@@ -1,36 +0,0 @@
-### Please describe the problem.
-
-This is a follow up of [[Problems building on Mac OS X]].
-As of 4.20130521.1, cabal still cannot resolve the dependencies.
-
-### What steps will reproduce the problem?
-
- cabal update
- cabal install git-annex-4.20130521.1 --user --only-dependencies
-
-### Please provide any additional information below.
-
-[[!format sh """
-Resolving dependencies...
-cabal: Could not resolve dependencies:
-trying: git-annex-4.20130521.1
-trying: git-annex-4.20130521.1:+webapp
-trying: yesod-form-1.3.0
-trying: yesod-core-1.2.1
-rejecting: yesod-default-1.2.0 (conflict: git-annex-4.20130521.1:webapp =>
-yesod-default(<1.2))
-rejecting: yesod-default-1.1.3.2, 1.1.3.1, 1.1.3, 1.1.2, 1.1.1, 1.1.0.2,
-1.1.0.1, 1.1.0 (conflict: yesod-core==1.2.1, yesod-default => yesod-core>=1.1
-&& <1.2)
-rejecting: yesod-default-1.0.1.1, 1.0.1, 1.0.0 (conflict: yesod-core==1.2.1,
-yesod-default => yesod-core>=1.0 && <1.1)
-rejecting: yesod-default-0.6.1 (conflict: yesod-core==1.2.1, yesod-default =>
-yesod-core>=0.10.1 && <0.11)
-rejecting: yesod-default-0.5.0 (conflict: yesod-core==1.2.1, yesod-default =>
-yesod-core>=0.9.4 && <0.10)
-rejecting: yesod-default-0.4.1, 0.4.0, 0.3.1 (conflict: yesod-core==1.2.1,
-yesod-default => yesod-core>=0.9 && <0.10
-"""]]
-
-> At the risk of closing early again, I have uploaded a .2 with
-> hints for the version of yesod-form and yesod-static. [[done]] --[[Joey]]
diff --git a/doc/bugs/Cabal_cannot_solve_dependencies/comment_1_1d41ac79867226dcb71f1c7b38da062d._comment b/doc/bugs/Cabal_cannot_solve_dependencies/comment_1_1d41ac79867226dcb71f1c7b38da062d._comment
deleted file mode 100644
index 91bcbe42f..000000000
--- a/doc/bugs/Cabal_cannot_solve_dependencies/comment_1_1d41ac79867226dcb71f1c7b38da062d._comment
+++ /dev/null
@@ -1,21 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-05-24T14:21:03Z"
- content="""
-Since I tested this release in a clean system, I suspect you have a ~/.ghc and ~/.cabal with something installed that is causing this dependency problem for you.
-
-<pre>
-# rm -rf .ghc .cabal
-# cabal update
-Config file path source is default config file.
-Config file /root/.cabal/config not found.
-Writing default configuration to /root/.cabal/config
-Downloading the latest package list from hackage.haskell.org
-# cabal install git-annex
-Resolving dependencies...
-Downloading HUnit-1.2.5.2...
-Configuring HUnit-1.2.5.2...
-</pre>
-"""]]
diff --git a/doc/bugs/Cabal_cannot_solve_dependencies/comment_2_50e72633a4462f6f6eb33d57b137fdcc._comment b/doc/bugs/Cabal_cannot_solve_dependencies/comment_2_50e72633a4462f6f6eb33d57b137fdcc._comment
deleted file mode 100644
index 78faa6732..000000000
--- a/doc/bugs/Cabal_cannot_solve_dependencies/comment_2_50e72633a4462f6f6eb33d57b137fdcc._comment
+++ /dev/null
@@ -1,48 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmu416zAYgYzbXVZAe30MiXoOWO4z6nGX8"
- nickname="Johannes"
- subject="comment 2"
- date="2013-05-24T14:59:54Z"
- content="""
-Thanks for the quick comment. I was already trying to build this on a clean cabal system.
-
-However, as of 4.20130521.2, I now get this:
-
-[[!format sh \"\"\"
-Resolving dependencies...
-cabal: Could not resolve dependencies:
-trying: git-annex-4.20130521.2
-trying: git-annex-4.20130521.2:+webapp
-rejecting: yesod-1.2.0.1, 1.2.0 (conflict: git-annex-4.20130521.2:webapp =>
-yesod(<1.2))
-trying: yesod-1.1.9.3
-trying: http-conduit-1.9.3
-trying: certificate-1.3.7
-rejecting: crypto-pubkey-types-0.4.0 (conflict: certificate =>
-crypto-pubkey-types>=0.3 && <0.4)
-trying: crypto-pubkey-types-0.3.2
-trying: tls-extra-0.6.3
-rejecting: crypto-pubkey-0.1.4 (conflict: crypto-pubkey-types==0.3.2,
-crypto-pubkey => crypto-pubkey-types>=0.4 && <0.5)
-rejecting: crypto-pubkey-0.1.3, 0.1.2, 0.1.1, 0.1.0 (conflict: tls-extra =>
-crypto-pubkey>=0.1.4)
-\"\"\"]]
-
-Also tried adding a --constraint='tls-extra<0.6.3' with the following result:
-[[!format sh \"\"\"
-Resolving dependencies...
-cabal: Could not resolve dependencies:
-trying: git-annex-4.20130521.2
-trying: git-annex-4.20130521.2:+webapp
-trying: git-annex-4.20130521.2:+dns
-trying: dns-0.3.6
-trying: binary-0.7.1.0/installed-caa...
-rejecting: yesod-1.2.0.1, 1.2.0 (conflict: git-annex-4.20130521.2:webapp =>
-yesod(<1.2))
-trying: yesod-1.1.9.3
-trying: ghc-7.6.3/installed-875...
-rejecting: bin-package-db-0.0.0.0/installed-608... (conflict:
-binary==0.7.1.0/installed-caa..., bin-package-db =>
-binary==0.5.1.1/installed-72e...)
-\"\"\"]]
-"""]]
diff --git a/doc/bugs/Cabal_cannot_solve_dependencies/comment_3_886f2d1f7c47a3973b8dc7d7c412289a._comment b/doc/bugs/Cabal_cannot_solve_dependencies/comment_3_886f2d1f7c47a3973b8dc7d7c412289a._comment
deleted file mode 100644
index a91a95953..000000000
--- a/doc/bugs/Cabal_cannot_solve_dependencies/comment_3_886f2d1f7c47a3973b8dc7d7c412289a._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-05-24T15:05:13Z"
- content="""
-bin-package-db is shipped with ghc, so this may be down to your version of ghc. FWIW, I have tested .2 on OSX with ghc 7.4.2 & it works.
-
-(I can only support users cabal hell problems so far. Cabal is, unfortunately, basically buggy, and this is a large part of why I provide autobuilds.)
-"""]]
diff --git a/doc/bugs/Cabal_dependency_monadIO_missing.mdwn b/doc/bugs/Cabal_dependency_monadIO_missing.mdwn
deleted file mode 100644
index 13980dd29..000000000
--- a/doc/bugs/Cabal_dependency_monadIO_missing.mdwn
+++ /dev/null
@@ -1,17 +0,0 @@
-Just issuing the command `cabal install` results in the following error message.
-
- Command/Add.hs:54:3:
- No instance for (Control.Monad.IO.Control.MonadControlIO
- (Control.Monad.State.Lazy.StateT Annex.AnnexState IO))
- arising from a use of `handle' at Command/Add.hs:54:3-24
-
-Adding the dependency for `monadIO` to `git-annex.cabal` should fix this?
--- Thomas
-
-> No, it's already satisfied by `monad-control` being listed as a
-> dependency in the cabal file. Your system might be old/new/or broken,
-> perhaps it's time to provide some details about the version of haskell
-> and of `monad-control` you have installed? --[[Joey]]
-
->> Closing as apparently user error or a broken system.
->> If you see this problem please do say. [[done]] --[[Joey]]
diff --git a/doc/bugs/Cabal_dependency_monadIO_missing/comment_1_14be660aa57fadec0d81b32a8b52c66f._comment b/doc/bugs/Cabal_dependency_monadIO_missing/comment_1_14be660aa57fadec0d81b32a8b52c66f._comment
deleted file mode 100644
index 8e38205f0..000000000
--- a/doc/bugs/Cabal_dependency_monadIO_missing/comment_1_14be660aa57fadec0d81b32a8b52c66f._comment
+++ /dev/null
@@ -1,75 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmFgsNxmnGznb5bbmcoWhoQOoxZZ-io61s"
- nickname="Thomas"
- subject="comment 1"
- date="2011-08-08T09:04:20Z"
- content="""
-I use Debian Squeeze, I have the Debian package cabal-install 0.8.0-1 installed.
-
- $ git clone git://git-annex.branchable.com/
- $ cd git-annex.branchable.com
- $ cabal update
- $ cabal install cabal-install
-
-This installed: Cabal-1.10.2.0, zlib-0.5.3.1, cabal-install 0.10.2.
-No version of monad-control or monadIO installed.
-
- $ ~/.cabal/bin/cabal install
- Registering QuickCheck-2.4.1.1...
- Registering Crypto-4.2.3...
- Registering base-unicode-symbols-0.2.2.1...
- Registering deepseq-1.1.0.2...
- Registering hxt-charproperties-9.1.0...
- Registering hxt-regex-xmlschema-9.0.0...
- Registering hxt-unicode-9.0.1...
- Registering hxt-9.1.2...
- Registering stm-2.2.0.1...
- Registering hS3-0.5.6...
- Registering transformers-0.2.2.0...
- Registering monad-control-0.2.0.1...
- [1 of 1] Compiling Main ( Setup.hs, dist/setup/Main.o )
- Linking ./dist/setup/setup ...
- ghc -O2 -Wall -ignore-package monads-fd -fspec-constr-count=5 --make configure
- [1 of 2] Compiling TestConfig ( TestConfig.hs, TestConfig.o )
- [2 of 2] Compiling Main ( configure.hs, configure.o )
- Linking configure ...
- ./configure
- checking version... 3.20110720
- checking cp -a... yes
- checking cp -p... yes
- checking cp --reflink=auto... yes
- checking uuid generator... uuid
- checking xargs -0... yes
- checking rsync... yes
- checking curl... yes
- checking bup... yes
- checking gpg... yes
- checking sha1... sha1sum
- checking sha256... sha256sum
- checking sha512... sha512sum
- checking sha224... sha224sum
- checking sha384... sha384sum
-
- ...
-
- Command/Add.hs:54:3:
- No instance for (Control.Monad.IO.Control.MonadControlIO
- (Control.Monad.State.Lazy.StateT Annex.AnnexState IO))
- arising from a use of `handle' at Command/Add.hs:54:3-24
- Possible fix:
- add an instance declaration for
- (Control.Monad.IO.Control.MonadControlIO
- (Control.Monad.State.Lazy.StateT Annex.AnnexState IO))
- In the first argument of `($)', namely `handle (undo file key)'
- In a stmt of a 'do' expression:
- handle (undo file key) $ moveAnnex key file
- In the expression:
- do { handle (undo file key) $ moveAnnex key file;
- next $ cleanup file key }
- cabal: Error: some packages failed to install:
- git-annex-3.20110719 failed during the building phase. The exception was:
- ExitFailure 1
-
-After I added a depencency for monadIO to the git-annex.cabal file, it installed correctly.
--- Thomas
-"""]]
diff --git a/doc/bugs/Cabal_dependency_monadIO_missing/comment_2_4f4d8e1e00a2a4f7e8a8ab082e16adac._comment b/doc/bugs/Cabal_dependency_monadIO_missing/comment_2_4f4d8e1e00a2a4f7e8a8ab082e16adac._comment
deleted file mode 100644
index adf7a34e6..000000000
--- a/doc/bugs/Cabal_dependency_monadIO_missing/comment_2_4f4d8e1e00a2a4f7e8a8ab082e16adac._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 2"
- date="2011-08-17T04:56:30Z"
- content="""
-Finally got a chance to try to reproduce this. I followed your recipe exactly in a clean squeeze chroot. monadIO was not installed, but git-annex built ok, using monad-control.
-"""]]
diff --git a/doc/bugs/Calls_to_rsync_don__39__t_always_use__annex-rsync-options.mdwn b/doc/bugs/Calls_to_rsync_don__39__t_always_use__annex-rsync-options.mdwn
deleted file mode 100644
index df1163b46..000000000
--- a/doc/bugs/Calls_to_rsync_don__39__t_always_use__annex-rsync-options.mdwn
+++ /dev/null
@@ -1,35 +0,0 @@
-What steps will reproduce the problem?
-
-Add a rsync special remote - one that you need a username/password to access (stored in text file $HOME/.rsync.password):
-
- $ git annex initremote myrsync type=rsync rsyncurl=rsync://username@rsync.example.com/myrsync encryption=none
- $ git annex describe myrsync "rsync server"
- $ git config remote.myrsync.annex-rsync-options "--password-file=$HOME/.rsync.password"
-
-Copy a file to the remote:
-
- $ git annex -d copy my-file --to myrsync
-
-What is the expected output? What do you see instead?
-
-Expect to see the file copied over to the rsync remote, but the check doesn't use the annex-rsync-options and asks for a password. The debug output is:
-
- copy my-file (checking myrsync...) [2012-10-28 01:01:01 EST] call: sh ["-c","rsync --quiet 'rsync://username@rsync.example.com/myrsync/[...SNIP...]' 2>/dev/null"]
-
-However the actual copy does use annex-rsync-options and the copy works:
-
- [2012-10-28 01:01:05 EST] read: rsync ["--password-file=/home/blah/.rsync.password","--progress","--recursive","--partial","--partial-dir=.rsync-partial","/home/blah/annex/.git/annex/tmp/rsynctmp/12345/","rsync://username@rsync.example.com/myrsync"]
-
-
-What version of git-annex are you using? On what operating system?
-
-git-annex: 3.20121017
-
-OS: Ubuntu 12.04
-
-Please provide any additional information below.
-
-I think this fix is as easy as including the annex-rsync-options wherever rsync is called.
-
-> I belive there was only the one place this was neglected. [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/Can__39__t___34__git-annex_get__34___with_3.20111203.mdwn b/doc/bugs/Can__39__t___34__git-annex_get__34___with_3.20111203.mdwn
deleted file mode 100644
index ea56c3732..000000000
--- a/doc/bugs/Can__39__t___34__git-annex_get__34___with_3.20111203.mdwn
+++ /dev/null
@@ -1,27 +0,0 @@
-Hi there,
-
-After updating to 3.20111203 (on Arch Linux) I noticed I was not able to use `git annex get` from a SSH remote (server running Arch Linux, same version of git-annex): "requested key is not present". Same behavior with current master (commit 6cf28585). I had no issue with the previous version (3.20111122).
-
-On this server, I was able to track down the issue using `git-annex-shell inannex` and `strace`:
-
- $ strace -f -o log git-annex-shell inannex ~/photos-annex.git WORM-s369360-m1321602916--2011-11-17.jpg
- $ echo $?
- 1
- $ tail -n20 log
- [...]
- 25623 chdir("/home/schnouki/git-annex") = 0
- 25623 stat("/home/schnouki/photos-annex.git/annex/objects/082/676/WORM-s369360-m1321602916--2011-11-17.jpg/WORM-s369360-m1321602916--2011-11-17.jpg", {st_mode=S_IFREG|0400, st_size=369360, ...}) = 0
- 25623 open("annex/objects/082/676/WORM-s369360-m1321602916--2011-11-17.jpg/WORM-s369360-m1321602916--2011-11-17.jpg", O_RDONLY) = -1 ENOENT (No such file or directory)
- [...]
-
-Note there is a call to `stat()` with the full path to the requested file, and *then* a call to `open()` with a relative path -- which calls this call to fail, and git-annex-shell to return 1. With 3.20111122, there was no call to `stat()`, just a successful call to `open()` with a full absolute path.
-
-Using `git bisect` I was able to determine that this bug appeared in commit 64672c62 ("refactor"). Reverting it makes `git-annex-shell` work as expected, but I'm sure there are better ways to fix this. However I don't know enough Haskell to do it myself.
-
-Could you please try to fix this in a future version?
-
-> Thanks for a very good bug report.
->
-> I've fixed this stupid mistake introduced in the code refactoring.
-> [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X.mdwn b/doc/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X.mdwn
index 5cb10fd49..6c7444afd 100644
--- a/doc/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X.mdwn
+++ b/doc/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X.mdwn
@@ -32,3 +32,6 @@ STR:
You can't simply do `git annex add repo` because that will ignore the .git directory. Similarly,` git annex add .git` (which I'd think really should try to add the contents of the .git directory) ignores everything.
I don't know what this error means. Is there a right way to work around this?
+
+> [[!meta title="cannot add .git/ to a git repository. even when using git-annex."]]
+> [[!taglink confirmed]] (but may be out of scope for git-annex) --[[Joey]]
diff --git a/doc/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X/comment_10_2c8e8a4f35b392b1cb4dc8104786312d._comment b/doc/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X/comment_10_2c8e8a4f35b392b1cb4dc8104786312d._comment
new file mode 100644
index 000000000..b95b3ed68
--- /dev/null
+++ b/doc/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X/comment_10_2c8e8a4f35b392b1cb4dc8104786312d._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="JerSou"
+ ip="82.228.88.32"
+ subject="comment 10"
+ date="2014-09-25T19:27:43Z"
+ content="""
+I thought a workaround (but I don't think ultimately use) :
+
+> \# for each git repo :
+
+> mv .git .gitToAnnex
+
+> ln -s .gitToAnnex .git
+
+> echo .gitToAnnex >> .gitignore
+
+"""]]
diff --git a/doc/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X/comment_11_b0bd8c98b5a4d67f66f8d64665569490._comment b/doc/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X/comment_11_b0bd8c98b5a4d67f66f8d64665569490._comment
new file mode 100644
index 000000000..d5cfd7416
--- /dev/null
+++ b/doc/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X/comment_11_b0bd8c98b5a4d67f66f8d64665569490._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="diafygi"
+ subject="comment 11"
+ date="2014-11-17T00:54:08Z"
+ content="""
+FYI, comment #10's solution doesn't work. Apparently, git-annex also ignores any `.*` directory or file (can't find documentation on this?).
+
+Unfortunately, this a dealbreaker for me. I wanted to use git-annex in my office to sync my work folder (which includes a several git repos) across three computers.
+
+"""]]
diff --git a/doc/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X/comment_12_1a0337d1df87898db3d3dadc911bdb38._comment b/doc/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X/comment_12_1a0337d1df87898db3d3dadc911bdb38._comment
new file mode 100644
index 000000000..46ab89f21
--- /dev/null
+++ b/doc/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X/comment_12_1a0337d1df87898db3d3dadc911bdb38._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlkMeBGmu0UM0O8RPxCfmlT2taReMsflWY"
+ nickname="Markus"
+ subject="comment 12"
+ date="2015-01-09T02:09:54Z"
+ content="""
+Just adding my voice to the choir: My use case is very similar to Abdó's and git-annex not handling nested git repos is what stopped me from taking it into use sometime ago when I tried it. To me submodules would seem like a good way to handle this, but others here clearly understand git better than I do so I don't have much to add.
+"""]]
diff --git a/doc/bugs/Can__39__t_rename___34__here__34___repository.mdwn b/doc/bugs/Can__39__t_rename___34__here__34___repository.mdwn
deleted file mode 100644
index af3330670..000000000
--- a/doc/bugs/Can__39__t_rename___34__here__34___repository.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-### Please describe the problem.
-Trying to rename the "here" repository fails
-
-### What steps will reproduce the problem?
-* Start git-annex webapp in the console (for the first time, or remove old annex directory + .config/git-annex)
-* In the browser window that opens click "Make repository"
-* The "here" repository should show up in the dashboard
-* Go to settings and select edit
-* Change the repository name (e.g. to here2) and click save changes
-* You should be back at the dashboard and the repository name is still "here"
-
-
-### What version of git-annex are you using? On what operating system?
-* git-annex version: 4.20130601
-* build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS
-* built using cabal
-* on Ubuntu 13.04 32bit
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-[2013-06-12 22:22:57 CEST] main: starting assistant version 4.20130601
-(scanning...) [2013-06-12 22:22:57 CEST] Watcher: Performing startup scan
-(started...)
-
-# End of transcript or log.
-"""]]
-
-> Made text field for this repository disabled. The current repository has no remote name to edit. [[done]] --[[Joey]]
diff --git a/doc/bugs/Can__39__t_set_repositories_directory.mdwn b/doc/bugs/Can__39__t_set_repositories_directory.mdwn
deleted file mode 100644
index f1ce5dea5..000000000
--- a/doc/bugs/Can__39__t_set_repositories_directory.mdwn
+++ /dev/null
@@ -1,15 +0,0 @@
-Can't set the repository directory
-
-
-At beginning during the webapp installation
-
-
-0.0.1 for OS X 10.8.2
-
-
-user error (git ["--git-dir=/Users/filippo/Desktop/annex/.git","--work-tree=/Users/filippo/Desktop/annex","commit-tree","4b825dc642cb6eb9a060e54bf8d69288fbee4904"] exited 128)
-
-[[!tag moreinfo assistant]]
-
-> [[done]]; based on the comment, this was a broken git email issue, which
-> git-annex now works around. --[[Joey]]
diff --git a/doc/bugs/Can__39__t_set_repositories_directory/comment_1_beb5d5b66a8d0fab12be44a7d877e9b0._comment b/doc/bugs/Can__39__t_set_repositories_directory/comment_1_beb5d5b66a8d0fab12be44a7d877e9b0._comment
deleted file mode 100644
index d769219cc..000000000
--- a/doc/bugs/Can__39__t_set_repositories_directory/comment_1_beb5d5b66a8d0fab12be44a7d877e9b0._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-05-19T20:12:18Z"
- content="""
-There has never been a git-annex version 0.0.1. What is the real version you have installed?
-"""]]
diff --git a/doc/bugs/Can__39__t_set_repositories_directory/comment_2_366aa798a5e55350d32b63b31c19112b._comment b/doc/bugs/Can__39__t_set_repositories_directory/comment_2_366aa798a5e55350d32b63b31c19112b._comment
deleted file mode 100644
index 2af33522b..000000000
--- a/doc/bugs/Can__39__t_set_repositories_directory/comment_2_366aa798a5e55350d32b63b31c19112b._comment
+++ /dev/null
@@ -1,19 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnGrQBFPptA2GU_Nx8KrxRGtyAS7PIlwjw"
- nickname="Nathan"
- subject="same problem here"
- date="2013-06-27T12:32:28Z"
- content="""
-Ran into this same problem just now. I can't start as I cant make a repository.
-
-Error:
-
-Internal Server Error
-user error (git [\"--git-dir=/Users/Nathan/annex/.git\",\"--work-tree=/Users/Nathan/annex\",\"commit-tree\",\"4b825dc642cb6eb9a060e54bf8d69288fbee4904\"] exited 128)
-
-git-annex version:
-
-4.20130626-g2dd6f84
-
-Could this have something to do with me first frigging around trying to get git-annex installed via homebrew? Maybe I broke something first?
-"""]]
diff --git a/doc/bugs/Can__39__t_set_repositories_directory/comment_3_812554d58ad9274a50b2a33d5f4d2ec3._comment b/doc/bugs/Can__39__t_set_repositories_directory/comment_3_812554d58ad9274a50b2a33d5f4d2ec3._comment
deleted file mode 100644
index 75145b709..000000000
--- a/doc/bugs/Can__39__t_set_repositories_directory/comment_3_812554d58ad9274a50b2a33d5f4d2ec3._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.193"
- subject="comment 3"
- date="2013-06-27T18:19:57Z"
- content="""
-Maybe git is broken somehow?
-
-What you can do is run `/Volumes/git-annex/git-annex.app/Contents/MacOS/git-annex-webapp` manually, in a console, and hopefully there will be a more informative error message displayed there.
-"""]]
diff --git a/doc/bugs/Can__39__t_set_repositories_directory/comment_4_bec5f147441ad18c97845b44c90c728b._comment b/doc/bugs/Can__39__t_set_repositories_directory/comment_4_bec5f147441ad18c97845b44c90c728b._comment
deleted file mode 100644
index cdbcce515..000000000
--- a/doc/bugs/Can__39__t_set_repositories_directory/comment_4_bec5f147441ad18c97845b44c90c728b._comment
+++ /dev/null
@@ -1,28 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnGrQBFPptA2GU_Nx8KrxRGtyAS7PIlwjw"
- nickname="Nathan"
- subject="comment 4"
- date="2013-06-28T04:01:22Z"
- content="""
-Okay I did that and got the following:
-
-
-
- Launching web browser on file:///var/folders/7x/cmkqk6jn7ql7h_2wrc7kk4bc0000gn/T/webapp897.html
-
- *** Please tell me who you are.
-
- Run
-
- git config --global user.email \"you@example.com\"
- git config --global user.name \"Your Name\"
-
- to set your account's default identity.
- Omit --global to set the identity only in this repository.
-
- fatal: unable to auto-detect email address (got 'Nathan@nathans-mac-pro.(none)')
- 28/Jun/2013:13:54:04 +1000 [Error#yesod-core] user error (git [\"--git-dir=/Users/Nathan/Annex/.git\",\"--work-tree=/Users/Nathan/Annex\",\"commit-tree\",\"4b825dc642cb6eb9a060e54bf8d69288fbee4904\"] exited 128) @(yesod-core-1.1.8.3:Yesod.Internal.Core ./Yesod/Internal/Core.hs:550:5)
-
-
-So I did what it asked and now it's working. Thanks for your help!
-"""]]
diff --git a/doc/bugs/Can__39__t_set_up_rsync.net_repo_on_OS_X_10.9.mdwn b/doc/bugs/Can__39__t_set_up_rsync.net_repo_on_OS_X_10.9.mdwn
deleted file mode 100644
index 61bed0927..000000000
--- a/doc/bugs/Can__39__t_set_up_rsync.net_repo_on_OS_X_10.9.mdwn
+++ /dev/null
@@ -1,24 +0,0 @@
-### Please describe the problem.
-
-I can't seem to add the rsync.net remote on an OS X 10.9 machine running git-annex assistant version 5.20140128-g0ac94c3. The process complains about a missing `/usr/libexec/ssh-askpass` in the logs, and after a few retries rsync.net locks me out. This program doesn't exist on my system.
-
-### What steps will reproduce the problem?
-
-1. Click "Add another repository"
-2. Pick rsync.net
-3. Enter the credentials I got in the email from rsync.net
-4. Click "Use this rsync repository"
-
-The resulting logs will state that `/usr/libexec/ssh-askpass` can't be found.
-
-### What version of git-annex are you using? On what operating system?
-
-git-annex assistant version 5.20140128-g0ac94c3 on OS X 10.9.1.
-
-### Please provide any additional information below.
-
-I think I have found a workaround in creating that program as a shell script which echoes my password to stdout, but can't test right now because rsync.net have wisely ratelimited my password login attempts. (-:
-
-I'll update this page if I can confirm the workaround works.
-
-(I fully intend to roll that password as soon as I'm in, so no worries about a stale password falling into evildoers' hands.)
diff --git a/doc/bugs/Can__39__t_set_up_rsync.net_repo_on_OS_X_10.9/comment_1_91a961cfa5dd4d6f0e4abfbbcfb81e92._comment b/doc/bugs/Can__39__t_set_up_rsync.net_repo_on_OS_X_10.9/comment_1_91a961cfa5dd4d6f0e4abfbbcfb81e92._comment
deleted file mode 100644
index 7ab46c3bb..000000000
--- a/doc/bugs/Can__39__t_set_up_rsync.net_repo_on_OS_X_10.9/comment_1_91a961cfa5dd4d6f0e4abfbbcfb81e92._comment
+++ /dev/null
@@ -1,35 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl7Tgnd2BBdIXVlNKjG4dkTj3paf7FHeHQ"
- nickname="Andreas"
- subject="ssh-askpass workaround does work"
- date="2014-02-01T06:28:41Z"
- content="""
-I've just gotten my rsync.net account unwedged, and can confirm that the ssh-askpass hack does work. After what seemed like git-annex successfully uploading an ssh keypair to the rsync.net remote, I removed the ssh-askpass stub script and rolled my rsync.net password. Now, I'm getting these log entries:
-
-```
-ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
-Received disconnect from 69.43.165.5: 2: Too many authentication failures for 40407
-rsync: connection unexpectedly closed (0 bytes received so far) [sender]
-rsync error: unexplained error (code 255) at /SourceCache/rsync/rsync-42/rsync/io.c(452) [sender=2.6.9]
-ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
-ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
-ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
-ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
-Permission denied, please try again.
-ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
-Received disconnect from 69.43.165.5: 2: Too many authentication failures for 40407
-rsync: connection unexpectedly closed (0 bytes received so far) [sender]
-rsync error: unexplained error (code 255) at /SourceCache/rsync/rsync-42/rsync/io.c(452) [sender=2.6.9]
-ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
-ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
-ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
-ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
-Permission denied, please try again.
-ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
-Received disconnect from 69.43.165.5: 2: Too many authentication failures for 40407
-rsync: connection unexpectedly closed (0 bytes received so far) [sender]
-rsync error: unexplained error (code 255) at /SourceCache/rsync/rsync-42/rsync/io.c(452) [sender=2.6.9]
-```
-
-Looks like git-annex asks for the password for some reason? I'm not sure what's going on here, please advise.
-"""]]
diff --git a/doc/bugs/Can__39__t_set_up_rsync.net_repo_on_OS_X_10.9/comment_2_0b5266e31fe7014bd11ea164f8e4744e._comment b/doc/bugs/Can__39__t_set_up_rsync.net_repo_on_OS_X_10.9/comment_2_0b5266e31fe7014bd11ea164f8e4744e._comment
deleted file mode 100644
index 7792d2396..000000000
--- a/doc/bugs/Can__39__t_set_up_rsync.net_repo_on_OS_X_10.9/comment_2_0b5266e31fe7014bd11ea164f8e4744e._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="71.80.94.56"
- subject="comment 2"
- date="2014-02-07T19:21:21Z"
- content="""
-git-annex does not run ssh-askpass. But your ssh program may try to do so, if git-annex is started without a controlling terminal. So a workaround is to start git-annex from a terminal window and then password prompts will happen there.
-
-[[design/assistant/sshpassword]] is on the roadmap to fix this so git-annex overrides ssh's password prompting, which seems to be broken on a number of systems.
-
-I don't know why it would continue prompting for a ssh password if git-annex successfully set up a ssh keypair for rsync.net. My guess is that it failed to do so.
-"""]]
diff --git a/doc/bugs/Can__39__t_start_it_on_Debian_Wheezy.mdwn b/doc/bugs/Can__39__t_start_it_on_Debian_Wheezy.mdwn
deleted file mode 100644
index a7e7613d5..000000000
--- a/doc/bugs/Can__39__t_start_it_on_Debian_Wheezy.mdwn
+++ /dev/null
@@ -1,26 +0,0 @@
-### Please describe the problem.
-After install I dont get any link to start the program even though can start it from terminal.
-
-### What steps will reproduce the problem?
-$ sudo apt-get install git-annex
---->After install...
-$ git annex assistant
-$ git annex webapp
---->Seems like syntax of the command is not correct, I get the help to write the command correctly.
-
-### What version of git-annex are you using? On what operating system?
-git-annex version: 3.20120629
-Debian Wheezy 64bits XFCE
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-I don't know where is that log
-
-# End of transcript or log.
-"""]]
-
-> Wheezy was released before git-annex had the webapp. If you want it,
-> install the backport. [[done]] --[[Joey]]
diff --git a/doc/bugs/Can__39__t_transfer_files_to_rsync_remote_with_encryption__61__shared.mdwn b/doc/bugs/Can__39__t_transfer_files_to_rsync_remote_with_encryption__61__shared.mdwn
deleted file mode 100644
index 31f37f6e5..000000000
--- a/doc/bugs/Can__39__t_transfer_files_to_rsync_remote_with_encryption__61__shared.mdwn
+++ /dev/null
@@ -1,54 +0,0 @@
-I'm trying to transfer 3 files to my rsync.net remote. It was set up a few months ago with encryption=shared.
-
-Here's what I get:
-
- % LC_ALL=C git annex copy --to rsn 2012-11-26*
- copy 2012-11-26 1.jpg (gpg) (checking rsn...) (to rsn...) gpg: no valid OpenPGP data found.
- gpg: decrypt_message failed: Unknown system error
- failed
- copy 2012-11-26 2.jpg (checking rsn...) (to rsn...) gpg: no valid OpenPGP data found.
- gpg: decrypt_message failed: Unknown system error
- failed
- copy 2012-11-26 3.jpg (checking rsn...) (to rsn...) gpg: no valid OpenPGP data found.
- gpg: decrypt_message failed: Unknown system error
- failed
- git-annex: copy: 3 failed
-
-
-Here's the output with `--debug`:
-
- % LC_ALL=C git annex --debug copy --to rsn 2012-11-26*
- [2012-11-27 18:28:22 CET] read: git ["--git-dir=/home/schnouki/Photos/.git","--work-tree=/home/schnouki/Photos","show-ref","git-annex"]
- [2012-11-27 18:28:22 CET] read: git ["--git-dir=/home/schnouki/Photos/.git","--work-tree=/home/schnouki/Photos","show-ref","--hash","refs/heads/git-annex"]
- [2012-11-27 18:28:22 CET] read: git ["--git-dir=/home/schnouki/Photos/.git","--work-tree=/home/schnouki/Photos","log","refs/heads/git-annex..0164d6150fcd56e035926c72c9a519114735d2a1","--oneline","-n1"]
- [2012-11-27 18:28:22 CET] read: git ["--git-dir=/home/schnouki/Photos/.git","--work-tree=/home/schnouki/Photos","log","refs/heads/git-annex..04bb9b87872200d5712b17463fc81d4de27b9acf","--oneline","-n1"]
- [2012-11-27 18:28:22 CET] read: git ["--git-dir=/home/schnouki/Photos/.git","--work-tree=/home/schnouki/Photos","log","refs/heads/git-annex..59c38c176971cd6323817e568f4c32305ba708b0","--oneline","-n1"]
- [2012-11-27 18:28:22 CET] chat: git ["--git-dir=/home/schnouki/Photos/.git","--work-tree=/home/schnouki/Photos","cat-file","--batch"]
- [2012-11-27 18:28:22 CET] read: git ["--git-dir=/home/schnouki/Photos/.git","--work-tree=/home/schnouki/Photos","ls-files","--cached","-z","--","2012-11-26 1.jpg","2012-11-26 2.jpg","2012-11-26 3.jpg"]
- copy 2012-11-26 1.jpg (gpg) (checking rsn...) [2012-11-27 18:28:22 CET] read: rsync ["rsn:photos/123/3a1/GPGHMACSHA1--4f4b2440da1f41aa42a590dc558fbfff39e44b5e/GPGHMACSHA1--4f4b2440da1f41aa42a590dc558fbfff39e44b5e"]
- [2012-11-27 18:28:22 CET] read: rsync ["rsn:photos/jg/8p/GPGHMACSHA1--4f4b2440da1f41aa42a590dc558fbfff39e44b5e/GPGHMACSHA1--4f4b2440da1f41aa42a590dc558fbfff39e44b5e"]
- (to rsn...) [2012-11-27 18:28:22 CET] chat: gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--passphrase-fd","11","--decrypt"]
- gpg: no valid OpenPGP data found.
- gpg: decrypt_message failed: Unknown system error
- failed
- copy 2012-11-26 2.jpg (checking rsn...) [2012-11-27 18:28:22 CET] read: rsync ["rsn:photos/61b/da7/GPGHMACSHA1--9c17b4b7414b830a0e7b86cbe08afd1e0878bdbd/GPGHMACSHA1--9c17b4b7414b830a0e7b86cbe08afd1e0878bdbd"]
- [2012-11-27 18:28:23 CET] read: rsync ["rsn:photos/Z1/9V/GPGHMACSHA1--9c17b4b7414b830a0e7b86cbe08afd1e0878bdbd/GPGHMACSHA1--9c17b4b7414b830a0e7b86cbe08afd1e0878bdbd"]
- (to rsn...) [2012-11-27 18:28:23 CET] chat: gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--passphrase-fd","10","--decrypt"]
- gpg: no valid OpenPGP data found.
- gpg: decrypt_message failed: Unknown system error
- failed
- copy 2012-11-26 3.jpg (checking rsn...) [2012-11-27 18:28:23 CET] read: rsync ["rsn:photos/340/2ec/GPGHMACSHA1--ce18f116ae33176c8387cecf9d62b0e694501a6e/GPGHMACSHA1--ce18f116ae33176c8387cecf9d62b0e694501a6e"]
- [2012-11-27 18:28:23 CET] read: rsync ["rsn:photos/8f/V0/GPGHMACSHA1--ce18f116ae33176c8387cecf9d62b0e694501a6e/GPGHMACSHA1--ce18f116ae33176c8387cecf9d62b0e694501a6e"]
- (to rsn...) [2012-11-27 18:28:23 CET] chat: gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--passphrase-fd","12","--decrypt"]
- gpg: no valid OpenPGP data found.
- gpg: decrypt_message failed: Unknown system error
- failed
- git-annex: copy: 3 failed
-
-I'm using git-annex 3.20121127. I think I was able to transfer files to that remote with the previous release.
-
-Any idea how to fix this? Am I doing something wrong?
-
-> Damn. This was a completely stupid bug, calling "decrypt" where it was
-> supposed to call "encrypt". [[done]] in git; I'll have to
-> make a new release to fix this. --[[Joey]]
diff --git a/doc/bugs/Can__39__t_transfer_files_to_rsync_remote_with_encryption__61__shared/comment_1_ca7ec2041bbec330476fb040b1e66a92._comment b/doc/bugs/Can__39__t_transfer_files_to_rsync_remote_with_encryption__61__shared/comment_1_ca7ec2041bbec330476fb040b1e66a92._comment
deleted file mode 100644
index 36061bac2..000000000
--- a/doc/bugs/Can__39__t_transfer_files_to_rsync_remote_with_encryption__61__shared/comment_1_ca7ec2041bbec330476fb040b1e66a92._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://schnouki.net/"
- nickname="Schnouki"
- subject="comment 1"
- date="2012-11-27T17:39:38Z"
- content="""
-Downgraded to 3.20121112 and the transfer went fine. In both cases I used the [prebuilt tarball](http://downloads.kitenet.net/git-annex/linux/). So it must be a regression in the current release.
-"""]]
diff --git a/doc/bugs/Can__39__t_transfer_files_to_rsync_remote_with_encryption__61__shared/comment_2_c476847665a5320214721497d8fad15b._comment b/doc/bugs/Can__39__t_transfer_files_to_rsync_remote_with_encryption__61__shared/comment_2_c476847665a5320214721497d8fad15b._comment
deleted file mode 100644
index def9d19c8..000000000
--- a/doc/bugs/Can__39__t_transfer_files_to_rsync_remote_with_encryption__61__shared/comment_2_c476847665a5320214721497d8fad15b._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://schnouki.net/"
- nickname="Schnouki"
- subject="comment 2"
- date="2012-11-27T22:33:54Z"
- content="""
-Thanks for the quick fix! :)
-"""]]
diff --git a/doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1.mdwn b/doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1.mdwn
deleted file mode 100644
index f4ae47b32..000000000
--- a/doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1.mdwn
+++ /dev/null
@@ -1,18 +0,0 @@
-What steps will reproduce the problem?
-
-cabal install git-annex
-
-What is the expected output? What do you see instead?
-
-I get this:
-
- Assistant/WebApp/Configurators/Local.hs:55:11:
- `fieldEnctype' is not a (visible) field of constructor `Field'
-
-What version of git-annex are you using? On what operating system?
-
-20121127
-
-Please provide any additional information below.
-
-> [[done]]; see comments. --[[Joey]]
diff --git a/doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_1_b25859c159d62f2e92b92f505535131b._comment b/doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_1_b25859c159d62f2e92b92f505535131b._comment
deleted file mode 100644
index f01f4382a..000000000
--- a/doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_1_b25859c159d62f2e92b92f505535131b._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmLB39PC89rfGaA8SwrsnB6tbumezj-aC0"
- nickname="Tobias"
- subject="comment 1"
- date="2012-11-27T15:48:33Z"
- content="""
-I was told to my yesod was too old.
-
-Either upgrade yesod with cabal (After a \"cabal install yesod\" it worked on one of my computers, still failing on the other...)
-
-Or use the Makefile (failed on both the computers i tested).
-
-
-"""]]
diff --git a/doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_2_4c9eab9120718457fdc1ae9051e44bca._comment b/doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_2_4c9eab9120718457fdc1ae9051e44bca._comment
deleted file mode 100644
index cca43f63e..000000000
--- a/doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_2_4c9eab9120718457fdc1ae9051e44bca._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmLB39PC89rfGaA8SwrsnB6tbumezj-aC0"
- nickname="Tobias"
- subject="comment 2"
- date="2012-11-27T16:03:06Z"
- content="""
-For reference here is a run of:
-
-cabal install yesod --force-reinstalls ; make
-
-http://pastebin.com/3Tr5BA0u
-
-Tried adding -DWITH_OLD_YESOD to the FEATURES in Makefile and got this after a \"make clean; make\":
-
-http://pastebin.com/GV84YgjZ
-"""]]
diff --git a/doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_3_61aec9801e1f76db4a286536ffacc3ed._comment b/doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_3_61aec9801e1f76db4a286536ffacc3ed._comment
deleted file mode 100644
index 32cdf6676..000000000
--- a/doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_3_61aec9801e1f76db4a286536ffacc3ed._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmLB39PC89rfGaA8SwrsnB6tbumezj-aC0"
- nickname="Tobias"
- subject="comment 3"
- date="2012-11-27T16:06:22Z"
- content="""
-For the machine that could compile and install the latest git-annex after updating yesod. \"make\" still fails.
-
-The first run here is without -DWITH_OLD_YESOD, the second is with.
-
-http://pastebin.com/T3RpPTX
-"""]]
diff --git a/doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_4_6381ff0ea419831d9bbed27511cad1e9._comment b/doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_4_6381ff0ea419831d9bbed27511cad1e9._comment
deleted file mode 100644
index fb58e28ce..000000000
--- a/doc/bugs/Cannot_build_the_latest_with_GHC_7.6.1/comment_4_6381ff0ea419831d9bbed27511cad1e9._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmLB39PC89rfGaA8SwrsnB6tbumezj-aC0"
- nickname="Tobias"
- subject="comment 4"
- date="2012-11-27T16:10:31Z"
- content="""
-cabal install yesod --force-reinstalls
-
-Then \"cabal configure, cabal build\" worked on my secondary machine...
-
-Woohooo, i have the latest git-annex running on both my machines now. Though neither can compile using the Makefile.
-
-Sorry for the spam here, just hoping it will help someone else jump through less hoops.
-
-
-"""]]
diff --git a/doc/bugs/Cannot_copy_to_a_git-annex_remote.mdwn b/doc/bugs/Cannot_copy_to_a_git-annex_remote.mdwn
deleted file mode 100644
index c9e0309b8..000000000
--- a/doc/bugs/Cannot_copy_to_a_git-annex_remote.mdwn
+++ /dev/null
@@ -1,14 +0,0 @@
-What steps will reproduce the problem?
-
-I really have no way to reproduce. I have these two annex repository, both living on CentOS 6.3 machines, using SSH to copy from one to the other. Everything has always worked fine, and I've copied hundreds of gigabytes and tens of thousands of files so far without a problem.
-
-What is the expected output? What do you see instead?
-
-I do "git copy --to storage FILE" and it says "Copying FILE... failed". That's it.
-
-How do I fix things so that I can copy again? Nothing that I tried had any effect on the problem.
-
-Thanks!
-
-> Thanks to Jim's smart correlation of this with another bug, I've fixed
-> them both. [[done]] --[[Joey]]
diff --git a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_10_258a376cff4c62bc4be919322bb1bd88._comment b/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_10_258a376cff4c62bc4be919322bb1bd88._comment
deleted file mode 100644
index 5150d9611..000000000
--- a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_10_258a376cff4c62bc4be919322bb1bd88._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 10"
- date="2013-03-19T00:14:59Z"
- content="""
-Comment 7 was misplaced. Apologies.
-
-Hint for stracing: If you strace \"git-annex\" instead of \"git annex\", you don't need to strace -f, which keeps it a lot simpler.
-"""]]
diff --git a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_10_d9b830a1fdea8760cb7da1d36b3cd34d._comment b/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_10_d9b830a1fdea8760cb7da1d36b3cd34d._comment
deleted file mode 100644
index 5fb3fe8ea..000000000
--- a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_10_d9b830a1fdea8760cb7da1d36b3cd34d._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnBJ6Dv1glxzzi4qIzGFNa6F-mfHIvv9Ck"
- nickname="Jim"
- subject="Same bug"
- date="2013-03-19T13:59:32Z"
- content="""
-Hi,
-
-This looks like the exact same issue as [get failed, but remote has the file](http://git-annex.branchable.com/bugs/get_failed__44___but_remote_has_the_file/).
-I can reproduce your problem here by doing a `git annex copy --to bucket bigfile.gz`, then stopping that transfer with `^Z`, and finally running the `copy` command
-again. It will fail with the same debug output as you show here.
-"""]]
diff --git a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_1_09d76e5f9480b9a35644a8f08790cd97._comment b/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_1_09d76e5f9480b9a35644a8f08790cd97._comment
deleted file mode 100644
index cb750097c..000000000
--- a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_1_09d76e5f9480b9a35644a8f08790cd97._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
- nickname="Justin"
- subject="enable debugging"
- date="2013-03-18T15:13:53Z"
- content="""
-try
-
- git-annex --debug copy --to storage FILE
-"""]]
diff --git a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_2_7b586c705a937d09a1b44bd6af2d4686._comment b/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_2_7b586c705a937d09a1b44bd6af2d4686._comment
deleted file mode 100644
index c50bc905c..000000000
--- a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_2_7b586c705a937d09a1b44bd6af2d4686._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 2"
- date="2013-03-18T15:15:30Z"
- content="""
-What version of git-annex are you using? Are your repositories using direct mode? What does --debug output?
-"""]]
diff --git a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_3_07dbd8f64982f1921077e23f468122cf._comment b/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_3_07dbd8f64982f1921077e23f468122cf._comment
deleted file mode 100644
index a86c68410..000000000
--- a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_3_07dbd8f64982f1921077e23f468122cf._comment
+++ /dev/null
@@ -1,25 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="comment 3"
- date="2013-03-18T15:32:31Z"
- content="""
-git-annex version on both machines is 4.20130314. Here is the debug output:
-
-
- [root@titan BoostPro]# git annex --verbose copy --to storage embt-virtual-machines.tar.xz
- copy embt-virtual-machines.tar.xz (checking storage...) (to storage...) failed
- git-annex: copy: 1 failed
- [root@titan BoostPro]# git annex --debug copy --to storage embt-virtual-machines.tar.xz
- [2013-03-18 10:31:33 CDT] read: git [\"--git-dir=/tank/Backups/BoostPro/.git\",\"--work-tree=/tank/Backups/BoostPro\",\"show-ref\",\"git-annex\"]
- [2013-03-18 10:31:33 CDT] read: git [\"--git-dir=/tank/Backups/BoostPro/.git\",\"--work-tree=/tank/Backups/BoostPro\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- [2013-03-18 10:31:33 CDT] read: git [\"--git-dir=/tank/Backups/BoostPro/.git\",\"--work-tree=/tank/Backups/BoostPro\",\"log\",\"refs/heads/git-annex..de30985dc380b49f50ae82046934457177b8d273\",\"--oneline\",\"-n1\"]
- [2013-03-18 10:31:33 CDT] read: git [\"--git-dir=/tank/Backups/BoostPro/.git\",\"--work-tree=/tank/Backups/BoostPro\",\"log\",\"refs/heads/git-annex..678538248a63e4d4da706a4b703938f6b8e58657\",\"--oneline\",\"-n1\"]
- [2013-03-18 10:31:33 CDT] read: git [\"--git-dir=/tank/Backups/BoostPro/.git\",\"--work-tree=/tank/Backups/BoostPro\",\"log\",\"refs/heads/git-annex..12346a2c23771268e2af5bfa3f813db172493354\",\"--oneline\",\"-n1\"]
- [2013-03-18 10:31:33 CDT] chat: git [\"--git-dir=/tank/Backups/BoostPro/.git\",\"--work-tree=/tank/Backups/BoostPro\",\"cat-file\",\"--batch\"]
- [2013-03-18 10:31:33 CDT] read: git [\"--git-dir=/tank/Backups/BoostPro/.git\",\"--work-tree=/tank/Backups/BoostPro\",\"ls-files\",\"--cached\",\"-z\",\"--\",\"embt-virtual-machines.tar.xz\"]
- copy embt-virtual-machines.tar.xz (checking storage...) [2013-03-18 10:31:33 CDT] call: ssh [\"-T\",\"storage\",\"git-annex-shell 'inannex' '/tank/Backups/BoostPro' 'SHA256E-s51189502084--ad50567a43f10210e7cdae49f91dbfcc449b7f0629795da1fc268993ff59319b.tar.xz' --uuid ad6ef11f-ecad-48d5-af7c-43f8197ac124\"]
- (to storage...) failed
- git-annex: copy: 1 failed
-
-"""]]
diff --git a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_4_926fd494f0b27103a99083cd5d0702d5._comment b/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_4_926fd494f0b27103a99083cd5d0702d5._comment
deleted file mode 100644
index f33feffca..000000000
--- a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_4_926fd494f0b27103a99083cd5d0702d5._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="comment 4"
- date="2013-03-18T16:44:42Z"
- content="""
-Oh, and neither repository is in direct mode.
-"""]]
diff --git a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_5_80444a509cc340f5eb3cd08b193fd389._comment b/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_5_80444a509cc340f5eb3cd08b193fd389._comment
deleted file mode 100644
index ecc4a93e1..000000000
--- a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_5_80444a509cc340f5eb3cd08b193fd389._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 5"
- date="2013-03-18T17:23:56Z"
- content="""
-Does this only happen with one file, or with all files?
-
-I think you will need to strace git-annex to determine what the problem is. I cannot see how this could happen in indirect mode.
-"""]]
diff --git a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_6_4c6b99cd67b4aa742da5101fb1b379f7._comment b/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_6_4c6b99cd67b4aa742da5101fb1b379f7._comment
deleted file mode 100644
index 977eed926..000000000
--- a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_6_4c6b99cd67b4aa742da5101fb1b379f7._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="comment 6"
- date="2013-03-18T18:42:14Z"
- content="""
-It only happens with this one file, because it's the last file to be copied to the remote repository.
-"""]]
diff --git a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_8_f45cdd2b6acc5f458b67539fced0e529._comment b/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_8_f45cdd2b6acc5f458b67539fced0e529._comment
deleted file mode 100644
index 59014a082..000000000
--- a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_8_f45cdd2b6acc5f458b67539fced0e529._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 8"
- date="2013-03-18T23:08:06Z"
- content="""
-I don't understand what you're saying about it being the last file to be copied. This can't be stopping the copy from processing files after the one it fails on, and the order of the file in the list of files it's processing cannot be significant, unless you know something I don't know.
-
-What I meant to ask you is whether there is one, particular, specific file on your system that it refuses to copy, or whether it refuses to copy all files, or what.
-
-Anyway, you are going to need to send me a strace, I'm utterly stuck on this.
-"""]]
diff --git a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_9_5a455dd14fb9d3ff408bb3f81e366c38._comment b/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_9_5a455dd14fb9d3ff408bb3f81e366c38._comment
deleted file mode 100644
index 145458120..000000000
--- a/doc/bugs/Cannot_copy_to_a_git-annex_remote/comment_9_5a455dd14fb9d3ff408bb3f81e366c38._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="comment 9"
- date="2013-03-18T23:46:39Z"
- content="""
-I don't quite follow what comment 7 is trying to say, did you intend that to go to another bug report?
-
-As for strace, I'll give it a try tomorrow.
-"""]]
diff --git a/doc/bugs/Cannot_set_direct_mode_with_non_default_worktree.mdwn b/doc/bugs/Cannot_set_direct_mode_with_non_default_worktree.mdwn
new file mode 100644
index 000000000..ce3ae58cb
--- /dev/null
+++ b/doc/bugs/Cannot_set_direct_mode_with_non_default_worktree.mdwn
@@ -0,0 +1,45 @@
+### Please describe the problem.
+I am trying to switch to direct mode with the git work tree in a different directory than default much like described in http://git-annex.branchable.com/forum/Detached_git_work_tree__63__/
+
+
+### What steps will reproduce the problem?
+- Create a new git repo with the GIT_WORK_TREE and GIT_DIR set.
+- git annex init test
+- git annex direct
+
+
+### What version of git-annex are you using? On what operating system?
+5.20141125 package in Debian unstable
+
+
+### Please provide any additional information below.
+
+[[!format sh """
++dbn@loaner:~/annex $ mkdir -p test/worktree
++dbn@loaner:~/annex $ cd test/
++dbn@loaner:~/annex/test $ git init
+Initialized empty Git repository in /home/dbn/annex/test/.git/
++dbn@loaner:~/annex/test $ git annex init test
+init test ok
+(Recording state in git...)
++dbn@loaner:~/annex/test $ git annex direct --debug
+commit
+[2014-12-08 03:05:45 PST] call: git ["--git-dir=/home/dbn/annex/test/.git","--work-tree=/home/dbn/annex/test/worktree","commit","-a","-m","commit before switching to direct mode"]
+On branch master
+
+Initial commit
+
+nothing to commit
+ok
+[2014-12-08 03:05:45 PST] read: git ["--git-dir=/home/dbn/annex/test/.git","--work-tree=/home/dbn/annex/test/worktree","ls-files","--cached","-z","--","/home/dbn/annex/test/worktree"]
+direct [2014-12-08 03:05:45 PST] read: git ["--git-dir=/home/dbn/annex/test/.git","--work-tree=/home/dbn/annex/test/worktree","symbolic-ref","HEAD"]
+[2014-12-08 03:05:45 PST] read: git ["--git-dir=/home/dbn/annex/test/.git","--work-tree=/home/dbn/annex/test/worktree","show-ref","--hash","refs/heads/master"]
+[2014-12-08 03:05:45 PST] call: git ["--git-dir=/home/dbn/annex/test/.git","--work-tree=/home/dbn/annex/test/worktree","checkout","-q","-B","annex/direct/master"]
+[2014-12-08 03:05:45 PST] call: git ["--git-dir=/home/dbn/annex/test/.git","--work-tree=/home/dbn/annex/test/worktree","config","core.bare","true"]
+[2014-12-08 03:05:45 PST] read: git ["config","--null","--list"]
+fatal: core.bare and core.worktree do not make sense
+
+git-annex: user error (git ["config","--null","--list"] exited 128)
+failed
+git-annex: direct: 1 failed
+"""]]
diff --git a/doc/bugs/Cannot_sync_repos_setup_using_webapp:___34__git-annex-shell:_Only_allowed_to_access___126____47__foo_not___126____47__bar__47____34__.mdwn b/doc/bugs/Cannot_sync_repos_setup_using_webapp:___34__git-annex-shell:_Only_allowed_to_access___126____47__foo_not___126____47__bar__47____34__.mdwn
deleted file mode 100644
index 4d1154650..000000000
--- a/doc/bugs/Cannot_sync_repos_setup_using_webapp:___34__git-annex-shell:_Only_allowed_to_access___126____47__foo_not___126____47__bar__47____34__.mdwn
+++ /dev/null
@@ -1,29 +0,0 @@
-###What steps will reproduce the problem?
-
-Suppose you have two types of folders you want to sync on two machines, e.g. Images and Documents.
-
-I already setup the Documents folders on both machines to sync using local pairing and they sync happily. Now I want to do the same and I execute the same steps again for the Images and I choose to not combine the Documents and Images repositories, but keep them separate.
-
-###What is the expected output? What do you see instead?
-
-The git repositories between both machines should be synced and all files should be transfered sucessfully between them.
-
-Instead the one machine shows a message "Failed to sync with host1_Images" and in the log it says
-
- [2013-04-15 15:57:22 CEST] PairListener: Syncing with host1_Images
- git-annex-shell: Only allowed to access ~/Documents not ~/Images/
- fatal: The remote end hung up unexpectedly
- Already up-to-date.
-
-I do not know how to debug this further cause I do not understand where this access-permission is configured.
-
-###What version of git-annex are you using? On what operating system?
-
-Machine 1: Gentoo Linux with Git-annex 4.20130405 from haskell-overlay.
-Machine 2: Ubuntu 12.04 with Git-Annex 4.20130405 installed using cabal.
-
-###Please provide any additional information below.
-
-> [[done]]; when setting up a new repo it will now use
-> a ssh key that is different for each repository on the host.
-> --[[Joey]]
diff --git a/doc/bugs/Cannot_sync_repos_setup_using_webapp:___34__git-annex-shell:_Only_allowed_to_access___126____47__foo_not___126____47__bar__47____34__/comment_1_6f7b5c164ff64f00b8814b2ee334709f._comment b/doc/bugs/Cannot_sync_repos_setup_using_webapp:___34__git-annex-shell:_Only_allowed_to_access___126____47__foo_not___126____47__bar__47____34__/comment_1_6f7b5c164ff64f00b8814b2ee334709f._comment
deleted file mode 100644
index f2a5f1b9d..000000000
--- a/doc/bugs/Cannot_sync_repos_setup_using_webapp:___34__git-annex-shell:_Only_allowed_to_access___126____47__foo_not___126____47__bar__47____34__/comment_1_6f7b5c164ff64f00b8814b2ee334709f._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-04-16T17:11:36Z"
- content="""
-Yeah, this is indeed a bug. It sets up a locked down ssh key to use for the first repository, and then the second repository sees there is a key for that server already, and does not try to set up a new one.
-
-This is configured in `~/.ssh/authorized_keys` on the server. You will see a key in there with a `GIT_ANNEX_SHELL_DIRECTORY` environment variable specified, which is what prevents it from using other directories. The simplest fix in your situation is to
-remove that variable, and then that key can be used to access any repository on the server.
-
-What I need to do is include the path to the repository in the ssh key name, for new repositories created by the webapp.
-"""]]
diff --git a/doc/bugs/Cannot_sync_repos_setup_using_webapp:___34__git-annex-shell:_Only_allowed_to_access___126____47__foo_not___126____47__bar__47____34__/comment_2_807ef1250237bf4426e3a24c1f9ba357._comment b/doc/bugs/Cannot_sync_repos_setup_using_webapp:___34__git-annex-shell:_Only_allowed_to_access___126____47__foo_not___126____47__bar__47____34__/comment_2_807ef1250237bf4426e3a24c1f9ba357._comment
deleted file mode 100644
index 625c12fbf..000000000
--- a/doc/bugs/Cannot_sync_repos_setup_using_webapp:___34__git-annex-shell:_Only_allowed_to_access___126____47__foo_not___126____47__bar__47____34__/comment_2_807ef1250237bf4426e3a24c1f9ba357._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://launchpad.net/~maestro-alubia"
- nickname="maestro-alubia"
- subject="Thanks!"
- date="2013-04-17T22:55:24Z"
- content="""
-Thank you very much for the fast fix! I will try that soon.
-
-I love git-annex, keep up the excellent work :)
-"""]]
diff --git a/doc/bugs/Check_for_minimum_Git_version.mdwn b/doc/bugs/Check_for_minimum_Git_version.mdwn
deleted file mode 100644
index f7eabb2b8..000000000
--- a/doc/bugs/Check_for_minimum_Git_version.mdwn
+++ /dev/null
@@ -1,41 +0,0 @@
-### Please describe the problem.
-
-git-annex does not check for the minimum version of Git that it requires, and therefore it sometimes uses flags which my installed Git does not recognize.
-This happens when converting some indirect repositories to direct ones on an older server.
-
-### What steps will reproduce the problem?
-
-git annex direct
-
-
-### What version of git-annex are you using? On what operating system?
-
-git-annex version: 5.20131130
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-direct iTunes/iTunes Media/iTunes U/Statistics 110_ Probability/Strategic Practice and Homework 9.pdf ok
-direct iTunes/iTunes Media/iTunes U/Statistics 110_ Probability/Syllabus.pdf ok
-direct error: unknown switch `B'
-usage: git checkout [options] <branch>
- or: git checkout [options] [<branch>] -- <file>...
-
-# End of transcript or log.
-"""]]
-
-> git-annex checks the git version at compile time and arranges to use
-> commands that will work with that version of git at run time.
->
-> Adding a runtime check for a minimum git version would slow every git-annex
-> command down and so I don't want to do it. It's up to the user to not
-> built git-annex with a new version of git and then try to use it with an
-> old version of git.
->
-> `git checkout -B` seems to have been added to git quite a long time ago
-> (2010), in version 1.7.1.1. I've made git-annex check at compile
-> time if being built with such an old version and refuse to build.
-> [[done]]. --[[Joey]]
diff --git a/doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_.mdwn b/doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_.mdwn
new file mode 100644
index 000000000..5ca73dd80
--- /dev/null
+++ b/doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_.mdwn
@@ -0,0 +1,46 @@
+### Please describe the problem.
+
+Any file containing non ascii chars either won't get commited by the webapp or when clone of that repo is made they are shown as deleted in git status but the files are there.
+
+you can not commit them neither,
+
+ git commit -m 'foo'
+
+or
+
+ git annex sync
+
+will get them to commit trying to reset the state using,
+
+ git checkout master
+
+or
+
+ git clean -f
+
+won't fix the issue. till the issue is fixed sync does not work from the command line since there are changes. Temporarily running assistant in the directory does fix the problem but every now and then it pops again.
+
+Also moving any symlinks around containing non ascii chars also causes the same issue. git annex won't add the moved symlinks git annex fix or git annex add won't add them git annex sync also skips them again the only solution is to either run the assistant or restart it if it is running.
+
+### What steps will reproduce the problem?
+
+Adding any file with a non ascii char on OS X (10.9).
+
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex version: 5.20140421-gc34a665
+
+### Please provide any additional information below.
+
+Also another thing I noticed is that same file names same repo will clone fine on Linux no errors this only happens on OS X.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_/comment_1_81a4647a9b51bed8c230a2a16990915d._comment b/doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_/comment_1_81a4647a9b51bed8c230a2a16990915d._comment
new file mode 100644
index 000000000..e60065737
--- /dev/null
+++ b/doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_/comment_1_81a4647a9b51bed8c230a2a16990915d._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.36"
+ subject="comment 1"
+ date="2014-05-24T19:23:08Z"
+ content="""
+I think you are going to need to provide more information:
+
+* Some actual file names that have the problem. \"non-ascii chars\" is a very wide description, you don't even say if you're using unicode or what.
+* Some error messages or transcripts of what happens when you see the problem.
+* What is your locale setting on OSX.
+
+I tried with some unicode filenames on OSX and they were committed without difficulty in the en_US.utf8 locale.
+"""]]
diff --git a/doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_/comment_2_f8e97dded9ba6d2305de1278025924fe._comment b/doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_/comment_2_f8e97dded9ba6d2305de1278025924fe._comment
new file mode 100644
index 000000000..b404cc381
--- /dev/null
+++ b/doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_/comment_2_f8e97dded9ba6d2305de1278025924fe._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="https://me.yahoo.com/a/FHnTlSBo1eCGJRwueeKeB6.RCaPbGMPr5jxx8A--#ce0d8"
+ nickname="Hamza"
+ subject="comment 2"
+ date="2014-05-25T15:16:33Z"
+ content="""
+I file name I remember messing is the following,
+
+ George's Café
+
+I experience this problem with any char that is not ascii. As for my locale,
+
+LANG=\"en_US.UTF-8\"
+LC_COLLATE=\"en_US.UTF-8\"
+LC_CTYPE=\"en_US.UTF-8\"
+LC_MESSAGES=\"en_US.UTF-8\"
+LC_MONETARY=\"en_US.UTF-8\"
+LC_NUMERIC=\"en_US.UTF-8\"
+LC_TIME=\"en_US.UTF-8\"
+LC_ALL=\"en_US.UTF-8\"
+
+There no errors other than the behaviour I've described.
+"""]]
diff --git a/doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_/comment_3_eb34061429cb8c7d0b155825e84b657b._comment b/doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_/comment_3_eb34061429cb8c7d0b155825e84b657b._comment
new file mode 100644
index 000000000..acd5775cd
--- /dev/null
+++ b/doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_/comment_3_eb34061429cb8c7d0b155825e84b657b._comment
@@ -0,0 +1,35 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 3"
+ date="2014-05-27T18:02:11Z"
+ content="""
+I tried with that filename, and had no difficulty committing it.
+
+<pre>
+oberon:repo joeyh$ git annex add George\'s\ Cafe\314\201
+add George's Café ok
+(Recording state in git...)
+oberon:repo joeyh$ git commit -m foo
+[master (root-commit) 8acd5d4] foo
+ Committer: Joey Hess <joeyh@oberon.local.tam-lin.net>
+Your name and email address were configured automatically based
+on your username and hostname. Please check that they are accurate.
+You can suppress this message by setting them explicitly:
+
+ git config --global user.name \"Your Name\"
+ git config --global user.email you@example.com
+
+After doing this, you may fix the identity used for this commit with:
+
+ git commit --amend --reset-author
+
+ 1 file changed, 1 insertion(+)
+ create mode 120000 \"George's Caf\303\251\"
+
+</pre>
+
+I even tried running the assistant with all locale settings set to C, and it still had no problem adding and committing that filename.
+
+So, I need help reproducing this, or I need to see the error message you see when the problem happens to you.
+"""]]
diff --git a/doc/bugs/Committer_crashed.mdwn b/doc/bugs/Committer_crashed.mdwn
deleted file mode 100644
index caa8b1c50..000000000
--- a/doc/bugs/Committer_crashed.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-# What steps will reproduce the problem?
-
-Editing a text file with vim
-
-#What is the expected output? What do you see instead?
-
- # On branch master
- # Changes not staged for commit:
-
- # (use "git add <file>..." to update what will be committed)
- # (use "git checkout -- <file>..." to discard changes in working directory)
- #
- # typechange: test
- #
- # Untracked files:
- # (use "git add <file>..." to include in what will be committed)
- #
- # .test.swp
-
- no changes added to commit (use "git add" and/or "git commit -a")
-
- /.test.swp still has writers, not adding
-
- Committer crashed: ./test~: createLink: does not exist (No such file or directory)
-
-# What version of git-annex are you using? On what operating system?
-
-3.20130107 prebuilt tar ball on Debian testing
-
-> Could also fail in `getFileStatus`. In either case it's a race
-> with the file being deleted while it's still in the process of being
-> locked down. Fixed this [[done]] --[[Joey]]
diff --git a/doc/bugs/Compilation_error_when_building_version_5.20140402_in_cabal_sandbox.mdwn b/doc/bugs/Compilation_error_when_building_version_5.20140402_in_cabal_sandbox.mdwn
new file mode 100644
index 000000000..425831a12
--- /dev/null
+++ b/doc/bugs/Compilation_error_when_building_version_5.20140402_in_cabal_sandbox.mdwn
@@ -0,0 +1,36 @@
+### Please describe the problem.
+[[!format sh """
+cabal install -O2 -j1 -f-webdav -f-s3 git-annex
+Resolving dependencies...
+Configuring dns-1.2.0...
+Building dns-1.2.0...
+Preprocessing library dns-1.2.0...
+
+Network/DNS/Decode.hs:15:8:
+ Could not find module `Data.Conduit.Network'
+ It is a member of the hidden package `conduit-extra-1.1.0'.
+ Perhaps you need to add `conduit-extra' to the build-depends in your .cabal file.
+ Use -v to see a list of the files searched for.
+Failed to install dns-1.2.0
+cabal: Error: some packages failed to install:
+dns-1.2.0 failed during the building phase. The exception was:
+ExitFailure 1
+git-annex-5.20140402 depends on dns-1.2.0 which failed to install.
+"""]]
+
+### What steps will reproduce the problem?
+
+[[!format sh """
+cabal update
+mkdir -p ~/haskell/git-annex
+cd ~/haskell/git-annex
+cabal sandbox init
+cabal install -O2 -j1 -f-webdav -f-s3 c2hs git-annex
+"""]]
+### What version of git-annex are you using? On what operating system?
+
+5.20140402, Gentoo Linux
+
+### Please provide any additional information below.
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/Compilation_error_when_building_version_5.20140402_in_cabal_sandbox/comment_1_bd830cadaeffda0366b3ae46b34c0c55._comment b/doc/bugs/Compilation_error_when_building_version_5.20140402_in_cabal_sandbox/comment_1_bd830cadaeffda0366b3ae46b34c0c55._comment
new file mode 100644
index 000000000..8ac4f017f
--- /dev/null
+++ b/doc/bugs/Compilation_error_when_building_version_5.20140402_in_cabal_sandbox/comment_1_bd830cadaeffda0366b3ae46b34c0c55._comment
@@ -0,0 +1,39 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawl1D_4vD5ueaDw8gRsIYPO3UHRKEpFfg9I"
+ nickname="Dmitry"
+ subject="comment 1"
+ date="2014-04-04T06:40:21Z"
+ content="""
+Author of \"dns\" library already fixed this issue.
+
+Next error is:
+[[!format sh \"\"\"
+Preprocessing executable 'git-annex' for git-annex-5.20140402...
+
+Utility/Yesod.hs:36:8:
+ Could not find module `Text.Hamlet'
+ It is a member of the hidden package `shakespeare-2.0.0.1'.
+ Perhaps you need to add `shakespeare' to the build-depends in your .cabal file.
+ Use -v to see a list of the files searched for.
+cabal: Error: some packages failed to install:
+\"\"\"]]
+
+Here is the fix:
+
+
+[[!format diff \"\"\"
+Index: git-annex/git-annex.cabal
+===================================================================
+--- git-annex.orig/git-annex.cabal
++++ git-annex/git-annex.cabal
+@@ -101,7 +101,7 @@ Executable git-annex
+ base (>= 4.5 && < 4.9), monad-control, MonadCatchIO-transformers,
+ IfElse, text, QuickCheck >= 2.1, bloomfilter, edit-distance, process,
+ SafeSemaphore, uuid, random, dlist, unix-compat, async, stm (>= 2.3),
+- data-default, case-insensitive
++ data-default, case-insensitive, shakespeare
+ CC-Options: -Wall
+ GHC-Options: -Wall
+ Extensions: PackageImports
+\"\"\"]]
+"""]]
diff --git a/doc/bugs/Compile_needs_more_than_1.5gb_of_memory.mdwn b/doc/bugs/Compile_needs_more_than_1.5gb_of_memory.mdwn
deleted file mode 100644
index 4fa9648c1..000000000
--- a/doc/bugs/Compile_needs_more_than_1.5gb_of_memory.mdwn
+++ /dev/null
@@ -1,16 +0,0 @@
-What steps will reproduce the problem?
-
-> cabal install git-annex
-
-What is the expected output? What do you see instead?
-
-> I would expect a working git-annex on my little linode. I have a linode 768 and trouble building the latest version. The process get's killed because of an out of memory condition.
-
-What version of git-annex are you using? On what operating system?
-
-> git-annex version: 4.20130314
-> Ubuntu 12.04
-
-Please provide any additional information below.
-
-[[done]]
diff --git a/doc/bugs/Compile_needs_more_than_1.5gb_of_memory/comment_1_0806b5132c55d7a5a17fbdad7e3f2291._comment b/doc/bugs/Compile_needs_more_than_1.5gb_of_memory/comment_1_0806b5132c55d7a5a17fbdad7e3f2291._comment
deleted file mode 100644
index bc0853763..000000000
--- a/doc/bugs/Compile_needs_more_than_1.5gb_of_memory/comment_1_0806b5132c55d7a5a17fbdad7e3f2291._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-03-15T21:49:49Z"
- content="""
-You don't need a webapp on your linode, probably, so disable it:
-
-cabal install git-annex -f-WebApp
-
-The template haskell in the webapp about doubles the amount of memory needed to compile it.
-
-----
-
-Alternatively, since git-annex compiles down to a self-contained binary, you can build it on another machine of the same architecture, and just copy the binary over. Or there are all kinds of pre-compiled binaries available for Linux distributions that you can use on your linode.
-"""]]
diff --git a/doc/bugs/Complete_failure_trying_to_unannex_a_large_annex.mdwn b/doc/bugs/Complete_failure_trying_to_unannex_a_large_annex.mdwn
deleted file mode 100644
index 5531a1939..000000000
--- a/doc/bugs/Complete_failure_trying_to_unannex_a_large_annex.mdwn
+++ /dev/null
@@ -1,56 +0,0 @@
-I really don't know what's happened here, I just did `git annex unannex .` in a very large annex:
-
- unannex Inbox/Lolcat.JPG (Recording state in git...)
- ok
- unannex Inbox/Lolcat.jpg (Recording state in git...)
- ok
- unannex Inbox/May 2012 Photo Stream/120502_0004.JPG (Recording state in git...)
- ok
- unannex Inbox/May 2012 Photo Stream/120518_0005.JPG (Recording state in git...)
- ok
- unannex Inbox/May 2012 Photo Stream/120523_0006.JPG (Recording state in git...)
- ok
- unannex Inbox/May 2012 Photo Stream/120523_0007.JPG (Recording state in git...)
- ok
- unannex Inbox/My boyfriend of 7 years and I are both physicists. Here's how he proposed to me. - Imgur.jpg (Recording state in git...)
- ok
- unannex Inbox/Nov 2012 Photo Stream/121102_0035.JPG (Recording state in git...)
- ok
- unannex Inbox/Nov 2012 Photo Stream/121102_0036.JPG (Recording state in git...)
- ok
- unannex Inbox/Nov 2012 Photo Stream/121102_0037.JPG (Recording state in git...)
- ok
- unannex Inbox/Nov 2012 Photo Stream/121102_0038.JPG (Recording state in git...)
- ok
- unannex Inbox/Nov 2012 Photo Stream/121102_0039.JPG (Recording state in git...)
- ok
- unannex Inbox/Nov 2012 Photo Stream/121103_0040.JPG (Recording state in git...)
- ok
- unannex Inbox/Nov 2012 Photo Stream/121104_0041.JPG (Recording state in git...)
- ok
- unannex Inbox/Nov 2012 Photo Stream/121105_0042.JPG (Recording state in git...)
- error: bad index file sha1 signature
- fatal: index file corrupt
- git-annex: failed to read sha from git write-tree
- git-annex: git commit [Param "-q",Params "-m",Param "content removed from git annex",Param "--",File "Inbox/Nov 2012 Photo Stream/121105_0042.JPG"] failed
- Vulcan:~/Pictures $ ga unannex .
- unannex Inbox/Nov 2012 Photo Stream/121109_0043.JPG error: bad index file sha1 signature
- fatal: index file corrupt
-
- git-annex: fd:12: hClose: resource vanished (Broken pipe)
- failed
- git-annex: pre-commit: 1 failed
- git-annex: git commit [Param "-q",Params "-m",Param "content removed from git annex",Param "--",File "Inbox/Nov 2012 Photo Stream/121109_0043.JPG"] failed
- Vulcan:~/Pictures $ ga -F unannex .
- unannex Inbox/Nov 2012 Photo Stream/121124_0044.JPG error: bad index file sha1 signature
- fatal: index file corrupt
-
- git-annex: fd:12: hClose: resource vanished (Broken pipe)
- failed
- git-annex: pre-commit: 1 failed
- git-annex: git commit [Param "-q",Params "-m",Param "content removed from git annex",Param "--",File "Inbox/Nov 2012 Photo Stream/121124_0044.JPG"] failed
-
-I guess now I'll just try to unlink the symlinks by hand, and drop the `.git` directory?
-
-> [[done]]; per my comment this seems like a corrupt git repository.
-> --[[Joey]]
diff --git a/doc/bugs/Complete_failure_trying_to_unannex_a_large_annex/comment_1_1c202695ab7fe62cdc8770e1fb428d0c._comment b/doc/bugs/Complete_failure_trying_to_unannex_a_large_annex/comment_1_1c202695ab7fe62cdc8770e1fb428d0c._comment
deleted file mode 100644
index 82acacd75..000000000
--- a/doc/bugs/Complete_failure_trying_to_unannex_a_large_annex/comment_1_1c202695ab7fe62cdc8770e1fb428d0c._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-03-08T19:02:54Z"
- content="""
-You seem to have a corrupt .git/index file, or .git/annex/index, or maybe a whole corrupt git repository. I'm not sure. I'd start by running `git fsck`, and if that's ok, remove `.git/annex/index` and `.git/annex/index.lck`. git-annex will recover from that automatically. If that still doesn't help, you might need to delete .git/index and do some reset to get it back.
-
-I don't see much evidence of an actual bug here, just bad data that is somehow on disk.
-"""]]
diff --git a/doc/bugs/Conflicting_archive_descriptions.mdwn b/doc/bugs/Conflicting_archive_descriptions.mdwn
deleted file mode 100644
index 832daa4ea..000000000
--- a/doc/bugs/Conflicting_archive_descriptions.mdwn
+++ /dev/null
@@ -1,16 +0,0 @@
-This is confusing:
-
-"Next we come to the archive repositories.The archive repositories coordinate together, so that each file is archived in only one place. **When you move files into a folder named "archive"**, they'll be moved to an archive repository, and removed from all your client repositories. This is handy if you have old files you don't need anymore, but want to keep archived for later. When you copy or move a file out of an "archive" folder, it'll be retrieved from the archive repository."
-
-"The small archive repositories are like other archive repositories, but smaller. While archive repositories normally accumulate every file they can, small archive repositories only accumulate files **once you put them in an "archive" directory.**"
-
-Based upon those descriptions, I don't know what the difference is.
-
-> Improved wording to not imply that files are only put into archive
-> repositories once the files are moved to archive directories.
-> (Which is how small archive repositories work.)
->
-> If you're still confused about it, see
-> <http://git-annex.branchable.com/assistant/archival_walkthrough/>
->
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/ControlPath_too_long_for_Unix_domain_socket.mdwn b/doc/bugs/ControlPath_too_long_for_Unix_domain_socket.mdwn
deleted file mode 100644
index 9cf453164..000000000
--- a/doc/bugs/ControlPath_too_long_for_Unix_domain_socket.mdwn
+++ /dev/null
@@ -1,53 +0,0 @@
-What steps will reproduce the problem?
-Pairing an existing git annex repository with a fresh repository on another computer in the git-annex webapp
-
-
-What is the expected output? What do you see instead?
-Expected result is that the two machines sync correctly.
-
-What i see are some "ControlPath <data> too long for unix domain socket" errors from ssh, but the computers do actually sync properly.
-
-Even though the data is synced properly, either the sender(or both of the clients) don't actually realize this. And the queue circles, all the transfers are being redone constantly(On every start of git-annex webapp on the original repository at least).
-
-
-What version of git-annex are you using? On what operating system?
-Latest git master as of this post. Debian sid and Ubuntu 12.04
-
-
-Please provide any additional information below.
-
-
-stdout snippet from git-annex webapp:
-
-
- ControlPath "/home/alansmithee/Desktop/annex/.git/annex/ssh/alansmithee@git-annex-debbook.local-alansmithee.dxpXHVCkLhsxvWaH" too long for Unix domain socket
- SHA256-s51233--0b4c59b3ab03b1ca6d95d4084fa6ff7220cf26695b6e3dd575f78af3dec6b701
- 51233 100% 5.43MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 30 bytes received 51385 bytes 102830.00 bytes/sec
- total size is 51233 speedup is 1.00
- ok
- (Recording state in git...)
-
- ControlPath "/home/alansmithee/Desktop/annex/.git/annex/ssh/alansmithee@git-annex-debbook.local-alansmithee.9ZQwEjraTxi20B6W" too long for Unix domain socket
- SHA256-s47883982--4b7cbb49506dcdd223a9db7b400cc41fc2e3ebbf5b2b17b75c9334bb949b6754
- 47883982 100% 1.34MB/s 0:00:34 (xfer#1, to-check=0/1)
-
- sent 30 bytes received 47889978 bytes 1388116.17 bytes/sec
- total size is 47883982 speedup is 1.00
- ok
- (Recording state in git...)
-
-
-This data appears on both the sending and receiving git-annex stdout. At least for the initial sync. For later syncs it only appears on the sender, though the client system is using a lot of resources.
-
-> I've made git-annex detect if the control path would be too long,
-> and disable ssh connection caching. It also tries a relative path
-> to the file, which tends to make it shorter, and I think would
-> keep ssh connection caching working in your example.
->
-> Please test and see if it works, and also if the "looping" problem
-> still happens. --[[Joey]]
-
->> Closing; I'm pretty sure the looping is just transfer retrying, to be
->> expected if they fail. [[done]] --[[Joey]]
diff --git a/doc/bugs/ControlPath_too_long_for_Unix_domain_socket/comment_1_60f58e205604eebe668b1e05dcfbf9a7._comment b/doc/bugs/ControlPath_too_long_for_Unix_domain_socket/comment_1_60f58e205604eebe668b1e05dcfbf9a7._comment
deleted file mode 100644
index 0cba1a693..000000000
--- a/doc/bugs/ControlPath_too_long_for_Unix_domain_socket/comment_1_60f58e205604eebe668b1e05dcfbf9a7._comment
+++ /dev/null
@@ -1,24 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.8.30"
- subject="comment 1"
- date="2012-09-13T22:00:53Z"
- content="""
-You can work around the ControlPath too long by running in your git repo:
-
-git config annex.sshcaching false
-
-While I could reproduce that part of your problem, I did *not* see any data actually be transferred when the ControlPath was too long. For example:
-
-<pre>
-joey@gnu:~/tmp/t/1>git annex transferkey --to foo SHA256E-s29--66ffceb8b7a1af9c2eb896f26fb8f3bdab0a606da59a7a2d71ae4f7d78ad13c4/SHA256E-s29--66ffceb8b7a1af9c2eb896f26fb8f3bdab0a606da59a7a2d71ae4f7d78ad13c4
-
-ControlPath too long
-rsync: connection unexpectedly closed (0 bytes received so far) [sender]
-rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
-
- rsync failed -- run git annex again to resume file transfer
-failed
-git-annex: transferkey: 1 failed
-</pre>
-"""]]
diff --git a/doc/bugs/ControlPath_too_long_for_Unix_domain_socket/comment_2_9c0c65389a3b4e7e81b8de96d430a3f1._comment b/doc/bugs/ControlPath_too_long_for_Unix_domain_socket/comment_2_9c0c65389a3b4e7e81b8de96d430a3f1._comment
deleted file mode 100644
index 9f62af956..000000000
--- a/doc/bugs/ControlPath_too_long_for_Unix_domain_socket/comment_2_9c0c65389a3b4e7e81b8de96d430a3f1._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmI_rfI0tsu93LcMlAvh5WTXtKFIMkHrJQ"
- nickname="Pawan"
- subject="Long Path Tool"
- date="2014-01-24T10:43:09Z"
- content="""
-Well, you can also use Long Path Tool for such problems, it really works good I will say.
-"""]]
diff --git a/doc/bugs/Corrupted_drive:_Assistant_seems_consider_files_deleted_and_deletes_them_elsewhere_too.mdwn b/doc/bugs/Corrupted_drive:_Assistant_seems_consider_files_deleted_and_deletes_them_elsewhere_too.mdwn
index b6c9691ea..595b86c29 100644
--- a/doc/bugs/Corrupted_drive:_Assistant_seems_consider_files_deleted_and_deletes_them_elsewhere_too.mdwn
+++ b/doc/bugs/Corrupted_drive:_Assistant_seems_consider_files_deleted_and_deletes_them_elsewhere_too.mdwn
@@ -32,5 +32,5 @@ I noticed the problem yesterday afternoon (Thu 24 Oct).
# End of transcript or log.
"""]]
-> [[moreinfo]]; either I don't have enough information to work on this,
+> [[!taglink moreinfo]]; either I don't have enough information to work on this,
> or it might have just been user error. --[[Joey]]
diff --git a/doc/bugs/Could_not_find_module_Data.Default.mdwn b/doc/bugs/Could_not_find_module_Data.Default.mdwn
deleted file mode 100644
index 64202de42..000000000
--- a/doc/bugs/Could_not_find_module_Data.Default.mdwn
+++ /dev/null
@@ -1,33 +0,0 @@
-**What steps will reproduce the problem?**
-
-Manually building git-annex from git.
-
-**What is the expected output? What do you see instead?**
-
- $ cabal update
- ...
- $ cabal install --only-dependencies
- ...
- $ cabal configure
- ...
- $ cabal build
- Building git-annex-3.20120826...
- Preprocessing executable 'git-annex' for git-annex-3.20120826...
-
- Utility/Yesod.hs:15:8:
- Could not find module `Data.Default'
- It is a member of the hidden package `data-default-0.5.0'.
- Perhaps you need to add `data-default' to the build-depends in your .cabal file.
- Use -v to see a list of the files searched for.
- $
-
-**What version of git-annex are you using? On what operating system?**
-
-commit e7d728672a5fc923be9ab1d6fe4b65f2058b49c7
-Arch Linux
-
-**Please provide any additional information below.**
-
-When I add data-default to git-annex.cabal's Build-Deps it works fine.
-
-> Thanks, [[done]]. --[[Joey]]
diff --git a/doc/bugs/Could_not_read_from_remote_repository.mdwn b/doc/bugs/Could_not_read_from_remote_repository.mdwn
index d54eb6782..46391e660 100644
--- a/doc/bugs/Could_not_read_from_remote_repository.mdwn
+++ b/doc/bugs/Could_not_read_from_remote_repository.mdwn
@@ -24,3 +24,5 @@ and the repository exists.
"""]]
[[!meta title="xmpp syncing sometimes fails"]]
+
+[[!tag confirmed]]
diff --git a/doc/bugs/Could_not_read_from_remote_repository/comment_3_95d16045dc238dba19a98808de2eeedf._comment b/doc/bugs/Could_not_read_from_remote_repository/comment_3_95d16045dc238dba19a98808de2eeedf._comment
new file mode 100644
index 000000000..a8d2705a6
--- /dev/null
+++ b/doc/bugs/Could_not_read_from_remote_repository/comment_3_95d16045dc238dba19a98808de2eeedf._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnvVfFLW4CTKs7UjdiLIsOn_cxj1Jnh64I"
+ nickname="Charl"
+ subject="Could it be gmail.com XMPP throttling?"
+ date="2014-03-23T19:26:08Z"
+ content="""
+I was seeing similar error messages, until I registered for a different XMPP account at jabber.de and started using that instead of my gmail.com account.
+
+My current suspicion is that it could be Google performing throttling on their XMPP service. See here: http://stackoverflow.com/questions/1843837/what-is-the-throttling-rate-that-gtalk-applies-to-xmpp-messages
+
+"""]]
diff --git a/doc/bugs/Could_not_resolve_dependencies.mdwn b/doc/bugs/Could_not_resolve_dependencies.mdwn
deleted file mode 100644
index 9eb98f31e..000000000
--- a/doc/bugs/Could_not_resolve_dependencies.mdwn
+++ /dev/null
@@ -1,40 +0,0 @@
-I'm not able to install git-annex with cabal.
-
-What steps will reproduce the problem?
-
- bbigras@bbigras-VirtualBox:~$ cabal update
- Downloading the latest package list from hackage.haskell.org
- bbigras@bbigras-VirtualBox:~$ cabal install git-annex --bindir=$HOME/bin
- Resolving dependencies...
- cabal: Could not resolve dependencies:
- trying: git-annex-3.20130207 (user goal)
- trying: git-annex-3.20130207:+webdav
- trying: git-annex-3.20130207:+webapp
- trying: git-annex-3.20130207:+assistant
- trying: yesod-1.1.8.2 (dependency of git-annex-3.20130207:+assistant)
- trying: yesod-auth-1.1.5.2 (dependency of yesod-1.1.8.2)
- trying: authenticate-1.3.2.4 (dependency of yesod-auth-1.1.5.2)
- trying: xml-conduit-1.1.0.1 (dependency of authenticate-1.3.2.4)
- next goal: DAV (dependency of git-annex-3.20130207:+webdav)
- rejecting: DAV-0.3 (conflict: xml-conduit==1.1.0.1, DAV => xml-conduit>=1.0 &&
- <=1.1)
- rejecting: DAV-0.2, 0.1, 0.0.1, 0.0 (conflict: git-annex-3.20130207:webdav =>
- DAV(>=0.3))
- bbigras@bbigras-VirtualBox:~$
-
-
-What version of git-annex are you using? On what operating system?
-
-Ubuntu 12.10 x86_64
-
-cabal-install version 0.14.0
-using version 1.14.0 of the Cabal library
-
-> The Haskell DAV library needs to be updated to build with
-> the newer version of xml-conduit. Library skew of this sort
-> is common when using cabal.
->
-> You can work around this by building git-annex without webdav:
-> `cabal configure --flags=-WebDAV`
->
-> This is not a git-annex bug. [[done]] --[[Joey]]
diff --git a/doc/bugs/Crash_trying_to_sync_with_a_repo_over_ssh.mdwn b/doc/bugs/Crash_trying_to_sync_with_a_repo_over_ssh.mdwn
deleted file mode 100644
index 38f54d2b6..000000000
--- a/doc/bugs/Crash_trying_to_sync_with_a_repo_over_ssh.mdwn
+++ /dev/null
@@ -1,43 +0,0 @@
-What steps will reproduce the problem?
-
-I create a new annex, added in a bunch of files.
-
-I cloned this annex to another machine, where I already had those files, so I copied them into a directory named "foo", did "git annex add foo", and then did "git rm -r foo", and git commit'd my clone of the annex.
-
-Then I try to "git annex sync" with the remote.
-
-What is the expected output? What do you see instead?
-
-I don't know, I've never used git-annex before. This is what I get each time:
-
- Hermes ~/Products/tmp/Movies (master) $ ga sync
- git-annex-shell: Prelude.(!!): index too large
-
-What version of git-annex are you using? On what operating system?
-
-It's the 'master' as of yesterday: c504f4025fec49e62601fbd4a3cd8f1270c7d221
-
-I'm on OS X 10.8.2, using GHC 7.6.1. The annex in question has 38G in a few hundred files.
-
-Please provide any additional information below.
-
-I'm willing to help track this down!
-
-> I've got it, October 9th's release
-> included commit bc649a35bacbecef93e378b1497f6a05b30bf452, which included a
-> change to a `segment` function. It was supposed to be a
-> rewrite in terms of a more general version, but it introduced a bug
-> in what it returned in an edge case and this in turn led git-annex-shell's
-> parameter parser to fail in a code path that was never reachable before.
->
-> It'd fail both when a new repo was running `git-annex-shell configlist`,
-> and in `git-annex-shell commit`, although this latter crash was less
-> noticible and I'm sure you saw the former.
->
-> Fixed the reversion; fixed insufficient guards around the partial code
-> (which I cannot see a way to entirely eliminate sadly; look at
-> GitAnnexShell.hs's `partitionParams` and weep or let me know if you have
-> any smart ideas..); added a regression test to check the non-obvious
-> behavior of segment with an empty segment. I'll be releasing a new
-> version with this fix as soon as I have bandwidth, ie tomorrow.
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Crash_trying_to_sync_with_a_repo_over_ssh/comment_1_9705f295ad8101f3f0ede18e590b56ef._comment b/doc/bugs/Crash_trying_to_sync_with_a_repo_over_ssh/comment_1_9705f295ad8101f3f0ede18e590b56ef._comment
deleted file mode 100644
index 660b52e7f..000000000
--- a/doc/bugs/Crash_trying_to_sync_with_a_repo_over_ssh/comment_1_9705f295ad8101f3f0ede18e590b56ef._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="I can confirm the fix"
- date="2012-10-16T05:53:15Z"
- content="""
-It's working great now, thanks Joey!
-"""]]
diff --git a/doc/bugs/Crash_trying_to_sync_with_a_repo_over_ssh/comment_2_0d751d81ac618f8d7e3f1dd20c830542._comment b/doc/bugs/Crash_trying_to_sync_with_a_repo_over_ssh/comment_2_0d751d81ac618f8d7e3f1dd20c830542._comment
deleted file mode 100644
index 5622bd6da..000000000
--- a/doc/bugs/Crash_trying_to_sync_with_a_repo_over_ssh/comment_2_0d751d81ac618f8d7e3f1dd20c830542._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.246.8"
- subject="comment 2"
- date="2012-10-16T05:56:10Z"
- content="""
-And I found a clean way to avoid that partial !! too. :) Down to 22 of the little monsters to clean up now.
-"""]]
diff --git a/doc/bugs/Crash_when_adding_jabber_account_.mdwn b/doc/bugs/Crash_when_adding_jabber_account_.mdwn
deleted file mode 100644
index 678890cad..000000000
--- a/doc/bugs/Crash_when_adding_jabber_account_.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-*What steps will reproduce the problem?*
-
-1. Start git-annex webapp
-2. Configuration
-3. Configure Jabber Account
-4. Insert user and pass
-5. Click "User this account"
-
-Tryed 4 times, all the same.
-
-
-*What is the expected output? What do you see instead?*
-
-On Chrome I get "Error 101 (net::ERR_CONNECTION_RESET): The connection was reset." or "Error 324 (net::ERR_EMPTY_RESPONSE): The server closed the connection without sending any data."
-
-On the terminal where git-annex was running I get "Segmentation fault (core dumped)"
-
-
-*What version of git-annex are you using? On what operating system?*
-
-git-annex version: I downloaded 3.20130107 (twice to be sure), but for some reason 'git-annex version' reports 3.20130102
-
-OS: Ubuntu 12.04.1 LTS 3.2.0-35-generic-pae #55-Ubuntu SMP Wed Dec 5 18:04:39 UTC 2012 i686 i686 i386 GNU/Linux
-
-
-*Please provide any additional information below.*
-
-On dmesg:
-[45773.212717] git-annex[26779]: segfault at b724e840 ip 09699150 sp b4cfd038 error 7 in git-annex[8048000+1762000]
-
-[[!tag /design/assistant]]
-> [[done]], see comments --[[Joey]]
diff --git a/doc/bugs/Crash_when_adding_jabber_account_/comment_1_2dc61ebcfa8919fb839656999c155c52._comment b/doc/bugs/Crash_when_adding_jabber_account_/comment_1_2dc61ebcfa8919fb839656999c155c52._comment
deleted file mode 100644
index c32ee75de..000000000
--- a/doc/bugs/Crash_when_adding_jabber_account_/comment_1_2dc61ebcfa8919fb839656999c155c52._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="comment 1"
- date="2013-01-14T16:39:00Z"
- content="""
-Are you using the 64 bit or the 32 bit build? Did you download the standalone tarball? How are you running git-annex exactly? (Using runshell, or by hand?)
-
-A segfault here seems likely to involve the Haskell GNUTLS binding. At least, the only other time git-annex has segfaulted, which also involved jabber, it was a bug in the GNUTLS binding.
-"""]]
diff --git a/doc/bugs/Crash_when_adding_jabber_account_/comment_2_e49af3b8a937d82eda1509b6f67b21d4._comment b/doc/bugs/Crash_when_adding_jabber_account_/comment_2_e49af3b8a937d82eda1509b6f67b21d4._comment
deleted file mode 100644
index 03f7a2069..000000000
--- a/doc/bugs/Crash_when_adding_jabber_account_/comment_2_e49af3b8a937d82eda1509b6f67b21d4._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawn-4QWOFI0QQ4n-yu-oFq3PHeuSPUv_-b4"
- nickname="Rodrigo"
- subject="comment 2"
- date="2013-01-14T22:10:44Z"
- content="""
-32 bit. Yes, the standalone tarball. From terminal, I'm simply running: git-annex webapp
-"""]]
diff --git a/doc/bugs/Crash_when_adding_jabber_account_/comment_3_e59f8813bf1a7c4e3c8c120fe82348b9._comment b/doc/bugs/Crash_when_adding_jabber_account_/comment_3_e59f8813bf1a7c4e3c8c120fe82348b9._comment
deleted file mode 100644
index 763f6fe53..000000000
--- a/doc/bugs/Crash_when_adding_jabber_account_/comment_3_e59f8813bf1a7c4e3c8c120fe82348b9._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-03-18T23:42:55Z"
- content="""
-I tried to reproduce this with the standalone i386 tarball for 4.20130314. Was able to add a jabber account using my google talk account with no crash.
-
-Given the age of this bug report, I'm just going to close it. But if you still see it with the current verison, please let me know! (And I guess you'd have to tell me which jabber server you're using then..)
-"""]]
diff --git a/doc/bugs/Crash_when_adding_jabber_account_/comment_4_716ac138cb69eecd0fb586699b4aeb2a._comment b/doc/bugs/Crash_when_adding_jabber_account_/comment_4_716ac138cb69eecd0fb586699b4aeb2a._comment
deleted file mode 100644
index 9039faca5..000000000
--- a/doc/bugs/Crash_when_adding_jabber_account_/comment_4_716ac138cb69eecd0fb586699b4aeb2a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmu416zAYgYzbXVZAe30MiXoOWO4z6nGX8"
- nickname="Johannes"
- subject="signal 11"
- date="2013-04-03T15:13:05Z"
- content="""
-I'm getting a \"error: git-annex died of signal 11\" when trying to add a self-hosted jabber account. I'm using ejabberd and a self-signed SSL certificate.
-"""]]
diff --git a/doc/bugs/Crash_when_adding_jabber_account_/comment_5_9bfd8df548d5866599dfc69fb3aaf94a._comment b/doc/bugs/Crash_when_adding_jabber_account_/comment_5_9bfd8df548d5866599dfc69fb3aaf94a._comment
deleted file mode 100644
index 40bc68dcb..000000000
--- a/doc/bugs/Crash_when_adding_jabber_account_/comment_5_9bfd8df548d5866599dfc69fb3aaf94a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlm_3m5gLhML9bHbZ8FpJ-HBZhWaRfFeO8"
- nickname="Corey"
- subject="I got this error too."
- date="2014-02-25T17:23:33Z"
- content="""
-With the armel tarbell downloaded 2014-02-21 on an Ubuntu (precise) chroot running on a Chromebook.
-"""]]
diff --git a/doc/bugs/Crash_when_disabling_syncing_in_the_webapp.mdwn b/doc/bugs/Crash_when_disabling_syncing_in_the_webapp.mdwn
new file mode 100644
index 000000000..b239c0a40
--- /dev/null
+++ b/doc/bugs/Crash_when_disabling_syncing_in_the_webapp.mdwn
@@ -0,0 +1,25 @@
+### Please describe the problem.
+The watcher crashes.
+
+I only need to restart the thread in the pop-up to get everything to work again, but I'm reporting just in case that this issue has any other implications.
+
+
+### What steps will reproduce the problem?
+I open the webapp and in the minutes before it starts syncing (syncing is enabled) I disable it (clicking in the 'syncing enabled' text).
+
+This produces a crash every time.
+
+
+### What version of git-annex are you using? On what operating system?
+5.20140320 in Debian sid and testing
+
+
+### Please provide any additional information below.
+This is all I can see in the logs
+
+[[!format sh """
+Watcher crashed: PauseWatcher
+[2014-03-26 08:54:57 CET] Watcher: warning Watcher crashed: PauseWatcher
+"""]]
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/Crash_when_disabling_syncing_in_the_webapp/comment_1_e25dd80370820782f9c6a877101d8703._comment b/doc/bugs/Crash_when_disabling_syncing_in_the_webapp/comment_1_e25dd80370820782f9c6a877101d8703._comment
new file mode 100644
index 000000000..ce4af5caa
--- /dev/null
+++ b/doc/bugs/Crash_when_disabling_syncing_in_the_webapp/comment_1_e25dd80370820782f9c6a877101d8703._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.41"
+ subject="comment 1"
+ date="2014-03-26T17:36:00Z"
+ content="""
+How did you install git-annex? Is this Debian Linux?
+
+I have not been able to reproduce a crash. It's indeed the case that a PauseWatcher exception is thrown, but the Watcher explicitly catches that exception.
+"""]]
diff --git a/doc/bugs/Crash_when_disabling_syncing_in_the_webapp/comment_2_4031c16362137747717e9595cb5c8a15._comment b/doc/bugs/Crash_when_disabling_syncing_in_the_webapp/comment_2_4031c16362137747717e9595cb5c8a15._comment
new file mode 100644
index 000000000..07efa451d
--- /dev/null
+++ b/doc/bugs/Crash_when_disabling_syncing_in_the_webapp/comment_2_4031c16362137747717e9595cb5c8a15._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk9nck8WX8-ADF3Fdh5vFo4Qrw1I_bJcR8"
+ nickname="Jon Ander"
+ subject="comment 2"
+ date="2014-04-01T08:04:51Z"
+ content="""
+Yes, this is Debian Linux and I've been able to reproduce it in i386 and amd64. git-annex is installed from the Debian repositories.
+
+I'll try to continue testing the issue and will report back if I can find any useful info.
+"""]]
diff --git a/doc/bugs/Crash_when_disabling_syncing_in_the_webapp/comment_3_0667f39f60bdaba6670f5b8304a8a77c._comment b/doc/bugs/Crash_when_disabling_syncing_in_the_webapp/comment_3_0667f39f60bdaba6670f5b8304a8a77c._comment
new file mode 100644
index 000000000..60f82a5b3
--- /dev/null
+++ b/doc/bugs/Crash_when_disabling_syncing_in_the_webapp/comment_3_0667f39f60bdaba6670f5b8304a8a77c._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 3"
+ date="2014-04-02T20:38:12Z"
+ content="""
+So we have the same version of git-annex from the same build, and only you see the problem. Hmm..
+
+You mentioned that you see the problem if you disable syncing at a particular time. Does it only crash at that time, or at any time?
+
+If you create a brand new empty repository and run the webapp in it, can you reporoduce the problem there? Ie, \"mkdir test; cd test; git init; git annex init; git annex webapp\"
+"""]]
diff --git a/doc/bugs/Creating_a_box.com_repository_fails.mdwn b/doc/bugs/Creating_a_box.com_repository_fails.mdwn
deleted file mode 100644
index ecebd7a00..000000000
--- a/doc/bugs/Creating_a_box.com_repository_fails.mdwn
+++ /dev/null
@@ -1,41 +0,0 @@
-### Please describe the problem.
-
-Adding a repository on box.com, using the assistant, fails with an error message (as seen in the log below).
-
-### What steps will reproduce the problem?
-
-Start up the assistant. Create a new empty repository. Enable consistency checking as suggested. Click add another repository, select box.com, fill in your credentials, keep shared ticked and encrypt all selected, click add repository. Error message appears.
-
-
-### What version of git-annex are you using? On what operating system?
-
-5.20140117.1 from ppa of François Marier
-
-ubuntu 13.10 (saucy), i686
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-[2014-01-26 20:40:10 CET] main: starting assistant version 5.20140117.1
-[2014-01-26 20:40:10 CET] Cronner: You should enable consistency checking to protect your data.
-(Recording state in git...)
-(scanning...) [2014-01-26 20:40:10 CET] Watcher: Performing startup scan
-(started...) [2014-01-26 20:41:10 CET] Cronner: Consistency check in progress
-
-(Recording state in git...)
-(encryption setup) (shared cipher) (testing WebDAV server...)
-26/Jan/2014:20:41:24 +0100 [Error#yesod-core] InternalIOException <socket: 32>: hPutBuf: illegal operation (handle is closed) @(yesod-core-1.2.3:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:471:5)
-
-# End of transcript or log.
-"""]]
-
-> Seems that [DAV-0.6 is badly broken](http://bugs.debian.org/737902).
-> I have adjusted the cabal file to refuse to build with that broken
-> version.
->
->> Update: Had to work around additional breakage in DAV-0.6. It's
->> fully tested and working now, although not yet uploaded to Debian
->> unstable. [[done]] --[[Joey]]
diff --git a/doc/bugs/Creating_a_box.com_repository_fails/comment_1_c0b4855b65cb7052daf6538c2ad73e99._comment b/doc/bugs/Creating_a_box.com_repository_fails/comment_1_c0b4855b65cb7052daf6538c2ad73e99._comment
deleted file mode 100644
index 0aee0102a..000000000
--- a/doc/bugs/Creating_a_box.com_repository_fails/comment_1_c0b4855b65cb7052daf6538c2ad73e99._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawk9nck8WX8-ADF3Fdh5vFo4Qrw1I_bJcR8"
- nickname="Jon Ander"
- subject="comment 1"
- date="2014-02-02T16:48:37Z"
- content="""
-I'm also experiencing a similar issue, I get this error when I try to upload a file to Box.com:
-
- git annex copy my_file --to box.com
- copy my_file (gpg) (checking box.com...) git-annex: InternalIOException <socket: 10>: hPutBuf: illegal operation (handle is closed)
-"""]]
diff --git a/doc/bugs/Creating_a_box.com_repository_fails/comment_2_b05a1e7b37989c698353cc6b3fd02d7c._comment b/doc/bugs/Creating_a_box.com_repository_fails/comment_2_b05a1e7b37989c698353cc6b3fd02d7c._comment
deleted file mode 100644
index c278ced96..000000000
--- a/doc/bugs/Creating_a_box.com_repository_fails/comment_2_b05a1e7b37989c698353cc6b3fd02d7c._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawk9nck8WX8-ADF3Fdh5vFo4Qrw1I_bJcR8"
- nickname="Jon Ander"
- subject="comment 2"
- date="2014-02-03T11:31:48Z"
- content="""
-I have more information on the issue. I have another computer synced with my main one, but with Box.com disabled. When trying to enable it now I get the following error:
-
- StatusCodeException (Status {statusCode = 404, statusMessage = \"Not Found\"}) [(\"Server\",\"nginx\"),(\"Date\",\"Mon, 03 Feb 2014 11:29:17 GMT\"),(\"Content-Type\",\"text/html; charset=UTF-8\"),(\"Content-Length\",\"0\"),(\"Connection\",\"keep-alive\"),(\"X-Robots-Tag\",\"noindex, nofollow\"),(\"Set-Cookie\",\"box_visitor_id=52ef7d8cf20e56.10269052; expires=Tue, 03-Feb-2015 11:29:16 GMT; path=/; domain=.box.com\"),(\"Set-Cookie\",\"bv=OPS-35591; expires=Mon, 10-Feb-2014 11:29:16 GMT; path=/; domain=.box.com\"),(\"Set-Cookie\",\"cn=11; expires=Mon, 10-Feb-2014 11:29:16 GMT; path=/; domain=.box.com\"),(\"Set-Cookie\",\"presentation=desktop; path=/; domain=.box.com\"),(\"Set-Cookie\",\"box_locale=es_ES; expires=Thu, 03-Apr-2014 10:29:17 GMT; path=/; domain=.box.com\"),(\"X-Response-Body-Start\",\"\")] (CJ {expose = [Cookie {cookie_name = \"box_locale\", cookie_value = \"es_ES\", cookie_expiry_time = 2014-04-03 10:29:17 UTC, cookie_domain = \"box.com\", cookie_path = \"/\", cookie_creation_time = 2014-02-03 11:29:17.202283 UTC, cookie_last_access_time = 2014-02-03 11:29:17.202283 UTC, cookie_persistent = True, cookie_host_only = False, cookie_secure_only = False, cookie_http_only = False},Cookie {cookie_name = \"presentation\", cookie_value = \"desktop\", cookie_expiry_time = 3013-06-06 00:00:00 UTC, cookie_domain = \"box.com\", cookie_path = \"/\", cookie_creation_time = 2014-02-03 11:29:17.202283 UTC, cookie_last_access_time = 2014-02-03 11:29:17.202283 UTC, cookie_persistent = False, cookie_host_only = False, cookie_secure_only = False, cookie_http_only = False},Cookie {cookie_name = \"cn\", cookie_value = \"11\", cookie_expiry_time = 2014-02-10 11:29:16 UTC, cookie_domain = \"box.com\", cookie_path = \"/\", cookie_creation_time = 2014-02-03 11:29:17.202283 UTC, cookie_last_access_time = 2014-02-03 11:29:17.202283 UTC, cookie_persistent = True, cookie_host_only = False, cookie_secure_only = False, cookie_http_only = False},Cookie {cookie_name = \"bv\", cookie_value = \"OPS-35591\", cookie_expiry_time = 2014-02-10 11:29:16 UTC, cookie_domain = \"box.com\", cookie_path = \"/\", cookie_creation_time = 2014-02-03 11:29:17.202283 UTC, cookie_last_access_time = 2014-02-03 11:29:17.202283 UTC, cookie_persistent = True, cookie_host_only = False, cookie_secure_only = False, cookie_http_only = False},Cookie {cookie_name = \"box_visitor_id\", cookie_value = \"52ef7d8cf20e56.10269052\", cookie_expiry_time = 2015-02-03 11:29:16 UTC, cookie_domain = \"box.com\", cookie_path = \"/\", cookie_creation_time = 2014-02-03 11:29:17.202283 UTC, cookie_last_access_time = 2014-02-03 11:29:17.202283 UTC, cookie_persistent = True, cookie_host_only = False, cookie_secure_only = False, cookie_http_only = False}]})
-
-This computer is running 5.20140127 in Debian testing and my main computer is running the same git-annex but in Debian sid. Both are using the webapp.
-"""]]
diff --git a/doc/bugs/Creating_a_box.com_repository_fails/comment_3_6c3610fb95676592f17f36e4e1b09bd8._comment b/doc/bugs/Creating_a_box.com_repository_fails/comment_3_6c3610fb95676592f17f36e4e1b09bd8._comment
deleted file mode 100644
index cff2e605d..000000000
--- a/doc/bugs/Creating_a_box.com_repository_fails/comment_3_6c3610fb95676592f17f36e4e1b09bd8._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawk9nck8WX8-ADF3Fdh5vFo4Qrw1I_bJcR8"
- nickname="Jon Ander"
- subject="comment 3"
- date="2014-02-11T08:01:47Z"
- content="""
-I'm getting the same error in version 5.20140210
-"""]]
diff --git a/doc/bugs/Creating_a_box.com_repository_fails/comment_4_c9895712e72854e4b5ff7a58e82ae374._comment b/doc/bugs/Creating_a_box.com_repository_fails/comment_4_c9895712e72854e4b5ff7a58e82ae374._comment
deleted file mode 100644
index 19350f3e0..000000000
--- a/doc/bugs/Creating_a_box.com_repository_fails/comment_4_c9895712e72854e4b5ff7a58e82ae374._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm78jq1Uo-ZbyOPG3diJUWVvEiM0kyAcvk"
- nickname="Dorian"
- subject="Same problem here"
- date="2014-02-12T13:17:50Z"
- content="""
-<pre>
-[2014-02-12 14:11:12 CET] main: starting assistant version 5.20140127.1
-[2014-02-12 14:11:12 CET] Cronner: You should enable consistency checking to protect your data.
-(scanning...) [2014-02-12 14:11:12 CET] Watcher: Performing startup scan
-(started...)
-(encryption setup) (shared cipher) (testing WebDAV server...)
-12/Feb/2014:14:11:49 +0100 [Error#yesod-core] InternalIOException <socket: 112>: hPutBuf: illegal operation (handle is closed) @(yesod-core-1.2.3:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:471:5)
-(encryption setup) (shared cipher) (testing WebDAV server...)
-12/Feb/2014:14:13:01 +0100 [Error#yesod-core] InternalIOException <socket: 116>: hPutBuf: illegal operation (handle is closed) @(yesod-core-1.2.3:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:471:5)
-</pre>
-"""]]
diff --git a/doc/bugs/Creating_a_box.com_repository_fails/comment_5_93981afe8162f64ebb9d8c2c6a7ef91e._comment b/doc/bugs/Creating_a_box.com_repository_fails/comment_5_93981afe8162f64ebb9d8c2c6a7ef91e._comment
deleted file mode 100644
index bcff92ac9..000000000
--- a/doc/bugs/Creating_a_box.com_repository_fails/comment_5_93981afe8162f64ebb9d8c2c6a7ef91e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawk9nck8WX8-ADF3Fdh5vFo4Qrw1I_bJcR8"
- nickname="Jon Ander"
- subject="Not fixed"
- date="2014-02-14T09:03:29Z"
- content="""
-This bug has been marked as fixed but I'm still experiencing it in 5.20140210
-"""]]
diff --git a/doc/bugs/Creating_a_box.com_repository_fails/comment_6_752b5725b4596721438098d38af8fb66._comment b/doc/bugs/Creating_a_box.com_repository_fails/comment_6_752b5725b4596721438098d38af8fb66._comment
deleted file mode 100644
index 4804e1671..000000000
--- a/doc/bugs/Creating_a_box.com_repository_fails/comment_6_752b5725b4596721438098d38af8fb66._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawk7iPiqWr3BVPLWEDvJhSSvcOqheLEbLNo"
- nickname="Dirk"
- subject="No working ubuntu package"
- date="2014-02-16T20:50:50Z"
- content="""
-The 5.20140210 package from François Marier tells me \"WebDAV not supported by this build\" when trying to add a box.com repository. So, can't really test this anymore on ubuntu.
-"""]]
diff --git a/doc/bugs/Creating_a_box.com_repository_fails/comment_7_73f71386f8eafbb65f4cc9769021710f._comment b/doc/bugs/Creating_a_box.com_repository_fails/comment_7_73f71386f8eafbb65f4cc9769021710f._comment
deleted file mode 100644
index 016371346..000000000
--- a/doc/bugs/Creating_a_box.com_repository_fails/comment_7_73f71386f8eafbb65f4cc9769021710f._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawk9nck8WX8-ADF3Fdh5vFo4Qrw1I_bJcR8"
- nickname="Jon Ander"
- subject="comment 7"
- date="2014-02-24T13:20:27Z"
- content="""
-This is what I get in the log in version 5.20140221 in Debian Sid:
-
- 100% 46.5KB/s 0sInternalIOException <socket: 28>: hPutBuf: illegal operation (handle is closed)
- InternalIOException <socket: 25>: hPutBuf: illegal operation (handle is closed)
-
-It seams that the file is being uploaded (folders are being created in box.com) but it crashes when reaching 100%
-"""]]
diff --git a/doc/bugs/Creating_a_box.com_repository_fails/comment_8_109e37051beb729834e05997c023b849._comment b/doc/bugs/Creating_a_box.com_repository_fails/comment_8_109e37051beb729834e05997c023b849._comment
deleted file mode 100644
index 24c9153a8..000000000
--- a/doc/bugs/Creating_a_box.com_repository_fails/comment_8_109e37051beb729834e05997c023b849._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="fmarier"
- ip="192.81.133.89"
- subject="Re: No working ubuntu package"
- date="2014-02-26T02:06:24Z"
- content="""
-I have just uploaded version 5.20140221.1 of the git-annex package in my PPA. It should re-enable DAV support.
-"""]]
diff --git a/doc/bugs/Creating_a_remote_located_in___34____126____47__wherever__34___works_incorrectly.mdwn b/doc/bugs/Creating_a_remote_located_in___34____126____47__wherever__34___works_incorrectly.mdwn
new file mode 100644
index 000000000..7d100929d
--- /dev/null
+++ b/doc/bugs/Creating_a_remote_located_in___34____126____47__wherever__34___works_incorrectly.mdwn
@@ -0,0 +1,37 @@
+### Please describe the problem.
+
+When creating a new remote with the webapp (on Windows) and setting the remote repository directory as "~/wherever", everything seems to be going well up until pressing the button to create an unencrypted repository. There is no output from either the terminal or error messages displayed in the browser.
+
+On the remote server, it turns out that it is creating a directory named ~ within $HOME so that there is a $HOME/~/wherever directory.
+
+Omitting the leading ~/ correctly creates $HOME/wherever and the setup proceeds as it should.
+
+### What steps will reproduce the problem?
+
+Try to create a remote repository with directory "~/wherever".
+
+### What version of git-annex are you using? On what operating system?
+
+OS: Windows 7
+
+Output of git annex version:
+
+git-annex version: 5.20140517-gee56d21
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feed
+s Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SH
+A256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar ho
+ok external
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/Creating_an_S3_repository_with_an_invalid_name_throws_an_exception.mdwn b/doc/bugs/Creating_an_S3_repository_with_an_invalid_name_throws_an_exception.mdwn
deleted file mode 100644
index 48b30eceb..000000000
--- a/doc/bugs/Creating_an_S3_repository_with_an_invalid_name_throws_an_exception.mdwn
+++ /dev/null
@@ -1,18 +0,0 @@
-What steps will reproduce the problem?
-
-Attempt to create an S3 repository called 'S3 (encrypted)' via the web app.
-
-What is the expected output? What do you see instead?
-
-Expected to either accept this input, or tell me that it's invalid. Instead, I see:
-
-Internal Server Error
-user error (openTCPConnection: host lookup failure for "S3 (encrypted)-610526e6-5ce2-11e2-997e-970cbca93f19.s3.amazonaws.com")
-
-What version of git-annex are you using? On what operating system?
-
-3.20130107 On Fedora 17 (64-bit).
-
-Please provide any additional information below.
-
-> [[done]], the name will now be sanitized. --[[Joey]]
diff --git a/doc/bugs/Creating_an_encrypted_S3_does_not_check_for_presence_of_GPG.mdwn b/doc/bugs/Creating_an_encrypted_S3_does_not_check_for_presence_of_GPG.mdwn
index a4bfdcb39..611e86d61 100644
--- a/doc/bugs/Creating_an_encrypted_S3_does_not_check_for_presence_of_GPG.mdwn
+++ b/doc/bugs/Creating_an_encrypted_S3_does_not_check_for_presence_of_GPG.mdwn
@@ -16,3 +16,4 @@ What version of git-annex are you using? On what operating system?
Please provide any additional information below.
[[!tag /design/assistant]]
+[[!tag confirmed]]
diff --git a/doc/bugs/DS__95__Store_not_gitignored.mdwn b/doc/bugs/DS__95__Store_not_gitignored.mdwn
deleted file mode 100644
index 269eb417a..000000000
--- a/doc/bugs/DS__95__Store_not_gitignored.mdwn
+++ /dev/null
@@ -1,26 +0,0 @@
-What steps will reproduce the problem?
-
-Create a new git repo on OS X. create a .gitignore file containing the line ".DS_Store". Check it into git. do "git annex init" to make the directory into a git annex repo. do "git annex direct" to put it in direct mode. do "git annex assistant" to start the assistant and watch it with "git annex webapp".
-
-Open the directory in the finder. Drag in some files and watch the assistant as it checks them in. Play with your window's viewing preferences, maybe view things as "icons" so that the finder is forced to store metadata about where you dragged the icons in the window in the .DS_Store file. As you do this, watch the webapp. .DS_Store will start to be checked into git annex, and rechecked in frequently as it is updated. Git annex assistant is not respecting the .gitignore file. Is there some other way to tell git annex assistant that certain files should be ignored than .gitignore?
-
-
-What is the expected output? What do you see instead?
-
-.DS_Store files are ignored by the assistant.
-
-
-What version of git-annex are you using? On what operating system?
-
-git-annex version: 3.20130124
-
-OS X Lion
-
-Please provide any additional information below.
-
-> Assistant does not support .gitignore yet. Requires an efficient query
-> interface for ignores, which git does not provide.
->
-> However, I've added a special case, OSX only ignore for .DS_Store files.
-> [[done]] --[[Joey]]
-
diff --git a/doc/bugs/DS__95__Store_not_gitignored/comment_1_b93ac0ea3be82c361ceb4352e742ba39._comment b/doc/bugs/DS__95__Store_not_gitignored/comment_1_b93ac0ea3be82c361ceb4352e742ba39._comment
deleted file mode 100644
index 0bc821f87..000000000
--- a/doc/bugs/DS__95__Store_not_gitignored/comment_1_b93ac0ea3be82c361ceb4352e742ba39._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="173.162.44.162"
- subject="comment 1"
- date="2013-01-28T14:31:53Z"
- content="""
-outstanding! Thank you.
-"""]]
diff --git a/doc/bugs/DS__95__Store_not_gitignored/comment_2_4136e1f4aba7aa7562dafcf6a213e10c._comment b/doc/bugs/DS__95__Store_not_gitignored/comment_2_4136e1f4aba7aa7562dafcf6a213e10c._comment
deleted file mode 100644
index 209e0545a..000000000
--- a/doc/bugs/DS__95__Store_not_gitignored/comment_2_4136e1f4aba7aa7562dafcf6a213e10c._comment
+++ /dev/null
@@ -1,58 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmRFKwny4rArBaz-36xTcsJYqKIgdDaw5Q"
- nickname="Andrew"
- subject="comment 2"
- date="2013-01-28T23:26:27Z"
- content="""
-This actually explains an interesting quirk (I wouldn't necessarily call it a bug) that results because of annex's handling of .gitignore:
-
- % › git annex import ~/Downloads/BoxcarMac.dmg
- import BoxcarMac.dmg (checksum...) ok
- (Recording state in git...)
- The following paths are ignored by one of your .gitignore files:
- BoxcarMac.dmg
- Use -f if you really want to add them.
- fatal: no files added
-
- git-annex: user error (xargs [\"-0\",\"git\",\"--git-dir=/Users/akraut/Desktop/annexes/test/.git\",\"--work-tree=/Users/akraut/Desktop/annexes/test\",\"add\",\"--\"] exited 1)
- failed
- git-annex: import: 1 failed
-
- % › ls -l
- total 8
- lrwxr-xr-x 1 akraut staff 198 Jan 28 15:01 BoxcarMac.dmg -> .git/annex/objects/K4/Q8/SHA256E-s6240024--2d3b032f29c8411f81f9379bd79abfa713b66b9783559ef48cd945ab418e97a3.dmg/SHA256E-s6240024--2d3b032f29c8411f81f9379bd79abfa713b66b9783559ef48cd945ab418e97a3.dmg
- -rw-r--r-- 1 akraut staff 0 Jan 28 14:56 README
- lrwxr-xr-x 1 akraut staff 200 Jan 28 14:58 Wireshark 1.8.4 Intel 64.dmg -> .git/annex/objects/vj/55/SHA256E-s21772874--eb01484d832a9dc5b8fdecacdccabc4ef28fb17a2e20bc2837ccc43a69df30c5.dmg/SHA256E-s21772874--eb01484d832a9dc5b8fdecacdccabc4ef28fb17a2e20bc2837ccc43a69df30c5.dmg
-
- % › cp ~/Downloads/Wireshark\ 1.8.4\ Intel\ 64.dmg .
-
- % › git annex add Wireshark\ 1.8.4\ Intel\ 64.dmg
- (Recording state in git...)
-
- % › ls -l
- total 21264
- -rw-r--r-- 1 akraut staff 0 Jan 28 14:56 README
- -rw-r--r-- 1 akraut staff 21772874 Jan 28 14:58 Wireshark 1.8.4 Intel 64.dmg
-
- % › git annex import Wireshark\ 1.8.4\ Intel\ 64.dmg
- import Wireshark 1.8.4 Intel 64.dmg git-annex: not overwriting existing Wireshark 1.8.4 Intel 64.dmg (use --force to override)
-
- % › git annex import --force Wireshark\ 1.8.4\ Intel\ 64.dmg
- import Wireshark 1.8.4 Intel 64.dmg (checksum...) ok
- (Recording state in git...)
-
- % › ls
- README Wireshark 1.8.4 Intel 64.dmg@
-
- % › git annex sync
- commit
- [master 0a17811] git-annex automatic sync
- 1 file changed, 1 insertion(+)
- create mode 120000 Wireshark 1.8.4 Intel 64.dmg
- ok
-
- % › ls -l
- total 4
- -rw-r--r-- 1 akraut staff 0 Jan 28 14:56 README
- lrwxr-xr-x 1 akraut staff 200 Jan 28 14:58 Wireshark 1.8.4 Intel 64.dmg -> .git/annex/objects/vj/55/SHA256E-s21772874--eb01484d832a9dc5b8fdecacdccabc4ef28fb17a2e20bc2837ccc43a69df30c5.dmg/SHA256E-s21772874--eb01484d832a9dc5b8fdecacdccabc4ef28fb17a2e20bc2837ccc43a69df30c5.dmg
-"""]]
diff --git a/doc/bugs/Daemon_stops_working_on_mounted_CIF_share.mdwn b/doc/bugs/Daemon_stops_working_on_mounted_CIF_share.mdwn
new file mode 100644
index 000000000..64ae859e2
--- /dev/null
+++ b/doc/bugs/Daemon_stops_working_on_mounted_CIF_share.mdwn
@@ -0,0 +1,12 @@
+### Please describe the problem.
+If have a directory - mounted CIF share (windows server with domain).
+If i run "git annex assistant" or "git annex watch" daemon starts fine and works at first, but then after some time stops doing anything: no messages in .git/annex/daemon.log, process hangs in ps aux.
+
+If i try to "cat .git/annex/daemon.pid" I get "permission denied". And permission is denied for everyone: root, from other windows machines, etc.
+
+If i then kill daemon process and start daemon again everything repeats.
+
+### What version of git-annex are you using? On what operating system?
+Standalone git-annex 5.20140421-g515d251 on CentOS 6.5
+
+> [[done]] --[[Joey]]
diff --git a/doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_1_2a5fb522cbf6e2cefbee0a5fc48287d0._comment b/doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_1_2a5fb522cbf6e2cefbee0a5fc48287d0._comment
new file mode 100644
index 000000000..d247667c4
--- /dev/null
+++ b/doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_1_2a5fb522cbf6e2cefbee0a5fc48287d0._comment
@@ -0,0 +1,45 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmaB2n9HFclAvyMyDzvTPaifh5OrlF51Co"
+ nickname="VS7"
+ subject="comment 1"
+ date="2014-05-21T07:17:44Z"
+ content="""
+[[!format sh \"\"\"
+[filesync@ServiceVM00001 manuals]$ ps aux | grep assistant
+filesync 27036 0.0 0.0 103244 864 pts/0 S+ 11:13 0:00 grep assistant
+\"\"\"]]
+[[!format sh \"\"\"
+[filesync@ServiceVM00001 manuals]$ git annex assistant
+\"\"\"]]
+[[!format sh \"\"\"
+[filesync@ServiceVM00001 manuals]$ cat .git/annex/daemon.log
+[2014-05-21 11:14:06 MSK] main: starting assistant version 5.20140421-g515d251
+[2014-05-21 11:14:07 MSK] Cronner: You should enable consistency checking to protect your data.
+failed to add watch on directory /home/filesync/.config/git-annex (/home/filesync/.config/git-annex: getDirectoryContents: does not exist (No such file or directory))
+
+ dbus failed; falling back to mtab polling (ClientError {clientErrorMessage = \"runClient: unable to determine DBUS address\", clientErrorFatal = True})
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: cannot open shared object file: No such file or directory
+
+ No known network monitor available through dbus; falling back to polling
+[2014-05-21 11:14:09 MSK] Upgrader: An upgrade of git-annex is available. (version 5.20140517)
+
+Already up-to-date.
+(scanning...) [2014-05-21 11:14:09 MSK] Watcher: Performing startup scan
+\"\"\"]]
+[[!format sh \"\"\"
+[filesync@ServiceVM00001 manuals]$ git annex assistant --stop
+
+git-annex: /home/filesync/manuals/.git/annex/daemon.pid: hGetContents: permission denied (Permission denied)
+failed
+git-annex: assistant: 1 failed
+\"\"\"]]
+[[!format sh \"\"\"
+[filesync@ServiceVM00001 manuals]$ cat .git/annex/daemon.pid
+cat: .git/annex/daemon.pid: Permission denied
+\"\"\"]]
+[[!format sh \"\"\"
+[filesync@ServiceVM00001 manuals]$ ps aux | grep assistant
+filesync 27060 6.2 0.5 566372 41808 ? Sl 11:14 0:04 /home/filesync/git-annex.linux//lib64/ld-linux-x86-64.so.2 --library-path /home/filesync/git-annex.linux//usr/lib/x86_64-linux-gnu/gconv:/home/filesync/git-annex.linux//usr/lib/x86_64-linux-gnu/audit:/home/filesync/git-annex.linux//etc/ld.so.conf.d:/home/filesync/git-annex.linux//usr/lib:/home/filesync/git-annex.linux//usr/lib/x86_64-linux-gnu:/home/filesync/git-annex.linux//lib64:/home/filesync/git-annex.linux//lib/x86_64-linux-gnu: /home/filesync/git-annex.linux/shimmed/git-annex/git-annex assistant
+filesync 27115 0.0 0.0 103244 864 pts/0 S+ 11:15 0:00 grep assistant
+\"\"\"]]
+"""]]
diff --git a/doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_2_6b8d35d464e248c29764e3adbc1c9bae._comment b/doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_2_6b8d35d464e248c29764e3adbc1c9bae._comment
new file mode 100644
index 000000000..9f0687c62
--- /dev/null
+++ b/doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_2_6b8d35d464e248c29764e3adbc1c9bae._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.3"
+ subject="comment 2"
+ date="2014-05-21T17:11:27Z"
+ content="""
+It seems to me that your filesystem is broken.
+"""]]
diff --git a/doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_3_e134ba74ec996a419d6f9903871b9b03._comment b/doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_3_e134ba74ec996a419d6f9903871b9b03._comment
new file mode 100644
index 000000000..a4b6d8740
--- /dev/null
+++ b/doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_3_e134ba74ec996a419d6f9903871b9b03._comment
@@ -0,0 +1,47 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmaB2n9HFclAvyMyDzvTPaifh5OrlF51Co"
+ nickname="VS7"
+ subject="comment 3"
+ date="2014-05-22T07:23:23Z"
+ content="""
+*1. Windows Server 2012, deduplication is on.*
+[[!format sh \"\"\"
+[filesync@ServiceVM00001 manuals]$ ps aux | grep assist
+filesync 1222 0.0 0.0 103244 860 pts/0 S+ 11:20 0:00 grep assist
+[filesync@ServiceVM00001 manuals]$ git annex assistant
+[filesync@ServiceVM00001 manuals]$ cat .git/annex/daemon.pid
+1250[filesync@ServiceVM00001 manuals]$ git annex assistant
+
+git-annex: /home/filesync/manuals/.git/annex/daemon.pid: hGetContents: permission denied (Permission denied)
+failed
+git-annex: assistant: 1 failed
+[filesync@ServiceVM00001 manuals]$ cat .git/annex/daemon.pid
+cat: .git/annex/daemon.pid: Permission denied
+\"\"\"]]
+
+*2. Windows 7 Pro, no deduplication.*
+[[!format sh \"\"\"
+[filesync@ServiceVM00001 test]$ ps aux | grep assistant
+filesync 655 0.0 0.0 103244 856 pts/0 S+ 11:18 0:00 grep assistant
+[filesync@ServiceVM00001 test]$ git annex assistant
+[filesync@ServiceVM00001 test]$ cat .git/annex/daemon.pid
+cat: .git/annex/daemon.pid: Permission denied
+[filesync@ServiceVM00001 test]$ git annex assistant
+
+git-annex: /home/filesync/test/.git/annex/daemon.pid: hGetContents: permission denied (Permission denied)
+failed
+git-annex: assistant: 1 failed
+\"\"\"]]
+
+*3. Local directory. Normal behavior*
+[[!format sh \"\"\"
+[filesync@ServiceVM00001 test1]$ ps aux | grep assist
+filesync 1315 0.0 0.0 103244 856 pts/0 R+ 11:23 0:00 grep assist
+[filesync@ServiceVM00001 test1]$ git annex assistant
+[filesync@ServiceVM00001 test1]$ cat .git/annex/daemon.pid
+1338[filesync@ServiceVM00001 test1]$ git annex assistant
+git-annex: Daemon is already running.
+[filesync@ServiceVM00001 test1]$ cat .git/annex/daemon.pid
+1338
+\"\"\"]]
+"""]]
diff --git a/doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_4_2ad592d92dda2d1e78235bad5764f5d9._comment b/doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_4_2ad592d92dda2d1e78235bad5764f5d9._comment
new file mode 100644
index 000000000..ad225a9a8
--- /dev/null
+++ b/doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_4_2ad592d92dda2d1e78235bad5764f5d9._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmaB2n9HFclAvyMyDzvTPaifh5OrlF51Co"
+ nickname="VS7"
+ subject="comment 4"
+ date="2014-05-22T09:44:33Z"
+ content="""
+Now i begin to suspect that daemon doesn't work with CIF mounted directories at all.
+
+ mkdir ~/test-container
+ mkdir ~/test-container/test
+ mount -t cifs -o user=test_user,uid=502,gid=502 //srv/test ~/test-container/test
+ cd ~/test-container
+ git init
+ git annex init
+ git annex direct
+ git annex add
+ git annex sync
+ git annex assistant
+
+Then if i place any file in ~/test-container then git-annex sees changes and processes it almost immediately. But if i do anything inside mounted ~/test-container/test daemon ignores it.
+\"git annex status\" says that yes there are changes inside \"~/test-container/test\" and i can commit them via \"git annex add\" & \"git annex sync\", but daemon ignores.
+"""]]
diff --git a/doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_5_42ad8c7944c210ac1be812e463e03d7c._comment b/doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_5_42ad8c7944c210ac1be812e463e03d7c._comment
new file mode 100644
index 000000000..6061f7d7b
--- /dev/null
+++ b/doc/bugs/Daemon_stops_working_on_mounted_CIF_share/comment_5_42ad8c7944c210ac1be812e463e03d7c._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="24.159.78.125"
+ subject="comment 5"
+ date="2014-05-23T14:34:34Z"
+ content="""
+My point is that if the filesystem is rejecting all attempts to access it with \"permission denied\", it's hardly surprising that git-annex doesn't work, since nothing works. If running the assistant somehow causes the filesystem to get into this strange broken state, then you have a nice repoducible bug to report on the filesystem, I suppose. I don't see how it could be a bug in git-annex, since it is using only standard posix filesystem system calls, plus inotify.
+
+Based on this, samba/CIFS does not support inotify: <http://stackoverflow.com/questions/8124617/getting-file-create-notifications-for-cifs-mount-in-linux>
+Thus, the assistant won't work on it.
+
+If I were you, I'd set up git-annex repositories on local filesystems, and let it take care of the syncronosation, rather than using a networked filesystem.
+"""]]
diff --git a/doc/bugs/Default_startup_command.mdwn b/doc/bugs/Default_startup_command.mdwn
new file mode 100644
index 000000000..eb21cd008
--- /dev/null
+++ b/doc/bugs/Default_startup_command.mdwn
@@ -0,0 +1,29 @@
+[[!meta title="Android Default startup command"]]
+
+### Please describe the problem.
+On a CM11 4.4.4 install, the startup will fail with the default startup command "git annex webapp".
+The error message shown is:
+```
+Falling back to hardcoded app location; cannot find expected files in /data/app-lib
+git annex webapp
+```
+
+However, using "git-annex webapp", git-annex will run fine.
+
+### What steps will reproduce the problem?
+
+Launch the beta or nightly build for 4.3 and 4.4, wait for error message
+
+### What version of git-annex are you using? On what operating system?
+
+Version "current" as of 2014-11-15 and also version "nightly build" as of 2014-11-15 on Android 4.4.4 CM11, device: Oppo Find 7a
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
diff --git a/doc/bugs/Detection_assumes_that_shell_is_bash.mdwn b/doc/bugs/Detection_assumes_that_shell_is_bash.mdwn
deleted file mode 100644
index 9bb0629d3..000000000
--- a/doc/bugs/Detection_assumes_that_shell_is_bash.mdwn
+++ /dev/null
@@ -1,24 +0,0 @@
-###What steps will reproduce the problem?###
-
-"Adding a remote server using ssh" and try to add a remote server where the account has ex. tcsh as loginshell
-
-###What is the expected output? What do you see instead?###
-
-To discover remote programs, it dumps away some born-shell code like:
-"echo git-annex-probe loggedin;if which git-annex-shell; then echo git-annex-probe git-annex-shell; fi;if which rsync; then echo git-annex-probe rsync; fi;if which ~/.ssh/git-annex-shell; then echo git-annex-probe ~/.ssh/git-annex-shell; fi"
-
-just wrap it with a bash -c '..' and you know that its interpreted by bash.
-
-###What version of git-annex are you using? On what operating system?###
-
-git-annex version: 3.20121017
-
-###Please provide any additional information below.###
-
-Not everyone has bash as there login-shell.
-
-[[!tag /design/assistant]]
-
-> [[done]]; assistant now uses sh -c "sane shell stuff here" to work
-> around csh. (There are systems without bash, but probably fewer without sh)
-> --[[Joey]]
diff --git a/doc/bugs/Difficult_to_troubleshoot_XMPP_login_failures.mdwn b/doc/bugs/Difficult_to_troubleshoot_XMPP_login_failures.mdwn
deleted file mode 100644
index 3b1b74d16..000000000
--- a/doc/bugs/Difficult_to_troubleshoot_XMPP_login_failures.mdwn
+++ /dev/null
@@ -1,11 +0,0 @@
-### Please describe the problem.
-
-I have a jabber account on `jabber.ccc.de`. When trying to log in to that account, I get "Unable to connect to the Jabber server. Maybe you entered the wrong password? (Error message: AuthenticationFailure)" I've typed the password enough times that I'm relatively certain that I've typed it correctly at least once. It's difficult to see behind this error message. This is the only thing that shows up in the debug log:
-
- [2013-05-26 21:40:16 EDT] read: host ["-t","SRV","--","_xmpp-client._tcp.jabber.ccc.de"]
- [2013-05-26 21:40:16 EDT] read: host ["-t","SRV","--","_xmpp-client._tcp.jabber.ccc.de"]
-
-It'd be great if this error were a wee bit more verbose.
-
-> The XMPP library has been updated to include the actual error message from the server.
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Difficult_to_troubleshoot_XMPP_login_failures/comment_1_4205bccf515169031e4a9ed8e905262c._comment b/doc/bugs/Difficult_to_troubleshoot_XMPP_login_failures/comment_1_4205bccf515169031e4a9ed8e905262c._comment
deleted file mode 100644
index e1b38ac5b..000000000
--- a/doc/bugs/Difficult_to_troubleshoot_XMPP_login_failures/comment_1_4205bccf515169031e4a9ed8e905262c._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-05-27T18:35:45Z"
- content="""
-That's all I get back from the underlying library. I have asked the library's author to propigate up the actual error message from the XMPP server if possible. The only other information I could provide is which host and port it tried to connect to. I've added that to the error message.
-
-We recently tracked a \"AuthenticationFailure\" error back to a bug in the ejabberd server's implementation of SCRAM. If jabber.ccc.de is using ejabberd, it needs to be upgraded. See <https://support.process-one.net/browse/EJAB-1632>
-"""]]
diff --git a/doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files.mdwn b/doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files.mdwn
deleted file mode 100644
index 123786b65..000000000
--- a/doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files.mdwn
+++ /dev/null
@@ -1,25 +0,0 @@
-##What steps will reproduce the problem?
-
- mkdir test
- git init
- git annex init "test"
- echo "test" > a
- echo "test" > b
- git annex add a b
- git annex sync
- git annex direct
- git annex sync | grep add
- git annex sync | grep add
-
-##What is the expected output? What do you see instead?
-
-The last two syncs shouldn't need to add or checksum anything.
-Firstly, the output is very confusing because the files have already been added.
-Secondly, the sync can take quite a while if you have lots of duplicates or a lot of files that are incidentally similar.
-
-##What version of git-annex are you using? On what operating system?
-
-git-annex version: 4.20130227 on Archlinux
-
-> [[done]]; fixed inode caching code to support multiple files for the
-> same content. --[[Joey]]
diff --git a/doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_1_cb10385a4f046bfe676720ded3409379._comment b/doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_1_cb10385a4f046bfe676720ded3409379._comment
deleted file mode 100644
index 6a5178bb6..000000000
--- a/doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_1_cb10385a4f046bfe676720ded3409379._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-03-11T06:31:09Z"
- content="""
-It seems that, to fully fix this, direct mode will need to be changed to store multiple inode caches for each key.
-
-Since the files have the same content, but different inodes and/or mtimes, at least one of them is going to appear changed to sync each time.
-
-What currently happens is that the first is re-added, and so its inode cache gets stored, and then that means the second's inode cache no longer matches, and it's re-added, and its inode cache gets stored. Putting the inode cache right back in position to force re-adding the first again..
-
-Storing multiple inode caches appears easy enough, but I have not yet worked out exactly how to clear out old inode caches.
-"""]]
diff --git a/doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_2_4bcf1a897181e40c9c8969d597a844f0._comment b/doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_2_4bcf1a897181e40c9c8969d597a844f0._comment
deleted file mode 100644
index 68c8847ae..000000000
--- a/doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_2_4bcf1a897181e40c9c8969d597a844f0._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnR7hb8IaKB3IKZptRukje0yahmhfLOO98"
- nickname="Adam"
- subject="comment 2"
- date="2013-04-01T19:23:12Z"
- content="""
-I think I hit this same issue when trying to work with a significant amount of files and data. It'd be good if git-annex were smarter about when a file is identical, especially if the file was copied through `rsync -a`.
-"""]]
diff --git a/doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_3_6a6d22d218f036c9977072973ed99aa8._comment b/doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_3_6a6d22d218f036c9977072973ed99aa8._comment
deleted file mode 100644
index 8f4e9bc86..000000000
--- a/doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_3_6a6d22d218f036c9977072973ed99aa8._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm5iosFbL2By7UFeViqkc6v-hoAtqILeDA"
- nickname="Laszlo"
- subject="identical filename"
- date="2013-04-06T09:09:17Z"
- content="""
-Same happens, with identical filename+content just in a different subdirectory.
-
- annex/a.txt
- annex/back/a.txt
-"""]]
diff --git a/doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_4_eaa7ffb3a1d9ffd6d89de301bd2cd5b2._comment b/doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_4_eaa7ffb3a1d9ffd6d89de301bd2cd5b2._comment
deleted file mode 100644
index 413ad8612..000000000
--- a/doc/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/comment_4_eaa7ffb3a1d9ffd6d89de301bd2cd5b2._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm5iosFbL2By7UFeViqkc6v-hoAtqILeDA"
- nickname="Laszlo"
- subject="comment 4"
- date="2013-04-18T05:56:41Z"
- content="""
-Ok, seems like it is fixed in latest (2013.04.17) release.
-
-Laszlo
-
-"""]]
diff --git a/doc/bugs/Direct_mode_repositories_end_up_with_unstaged_changes.mdwn b/doc/bugs/Direct_mode_repositories_end_up_with_unstaged_changes.mdwn
deleted file mode 100644
index 839653e34..000000000
--- a/doc/bugs/Direct_mode_repositories_end_up_with_unstaged_changes.mdwn
+++ /dev/null
@@ -1,46 +0,0 @@
-### Please describe the problem.
-
-After running two repositories syncing with one another in direct mode "git status" shows unstaged changes in both.
-
-### What steps will reproduce the problem?
-
-1. Create two direct mode repositories with each other as ssh remotes
-2. Run "git annex assistant" on each
-3. Create files on each and they get synced
-4. Run "git status"
-
-In my current repository the output is:
-
-[[!format sh """
-$ git status
-# On branch master
-# Changes not staged for commit:
-# (use "git add <file>..." to update what will be committed)
-# (use "git checkout -- <file>..." to discard changes in working directory)
-#
-# typechange: fromgolias
-# typechange: fromwintermute
-#
-no changes added to commit (use "git add" and/or "git commit -a")
-"""]]
-
-### What version of git-annex are you using? On what operating system?
-
-[[!format sh """
-$ git annex version
-git-annex version: 4.20130516.1
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP
-local repository version: 4
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-
-$ lsb_release -a
-No LSB modules are available.
-Distributor ID: Ubuntu
-Description: Ubuntu 12.04.2 LTS
-Release: 12.04
-Codename: precise
-"""]]
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Direct_mode_repositories_end_up_with_unstaged_changes/comment_1_300a2b246182be3079db20a7e3322261._comment b/doc/bugs/Direct_mode_repositories_end_up_with_unstaged_changes/comment_1_300a2b246182be3079db20a7e3322261._comment
deleted file mode 100644
index 87e90ebe7..000000000
--- a/doc/bugs/Direct_mode_repositories_end_up_with_unstaged_changes/comment_1_300a2b246182be3079db20a7e3322261._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-05-29T16:18:33Z"
- content="""
-This does not indicate a problem. Nor are there any unstaged changes. `git status` simply does not know about git-annex's direct mode. Please see [[/direct_mode]] for caveats about this and other problems with using regular git commands with git-annex repositories in direct mode.
-"""]]
diff --git a/doc/bugs/Direct_mode_repositories_still_use_symlinks_sometimes.mdwn b/doc/bugs/Direct_mode_repositories_still_use_symlinks_sometimes.mdwn
index 782b80e5e..10b25d774 100644
--- a/doc/bugs/Direct_mode_repositories_still_use_symlinks_sometimes.mdwn
+++ b/doc/bugs/Direct_mode_repositories_still_use_symlinks_sometimes.mdwn
@@ -30,3 +30,7 @@ Description: Ubuntu 12.04.2 LTS
Release: 12.04
Codename: precise
"""]]
+
+[[!meta title="git-annex does not guarantee modified files are available when merging with a new version of a repository"]]
+
+[[!tag confirmed]]
diff --git a/doc/bugs/Direct_mode_sync_fails_to_transfer_a_10GB_file.mdwn b/doc/bugs/Direct_mode_sync_fails_to_transfer_a_10GB_file.mdwn
new file mode 100644
index 000000000..21c7af19b
--- /dev/null
+++ b/doc/bugs/Direct_mode_sync_fails_to_transfer_a_10GB_file.mdwn
@@ -0,0 +1,60 @@
+### Please describe the problem.
+
+On Windows, a 10GB file of mine is successfully indexed (``git annex add``'ed), but ``git annex sync --content`` always fails with rsync, saying "recvkey: received key with wrong size". This is the largest file I've tested so far, and the only one that's failed.
+
+### What steps will reproduce the problem?
+
+1. Copy a 10GB file to a working copy (mine is ''PNG_Sequence.rar'', 10 361 629 980 bytes).
+2. Run ``git annex add``
+3. Run ``git annex sync --content``
+
+### What version of git-annex are you using? On what operating system?
+
+Windows 7 x64 with:
+
+ git-annex version: 5.20141128-g70f997e
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feed
+ s Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SH
+ A256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar ho
+ ok external
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+commit (Recording state in git...)
+ok
+pull origin
+ok
+copy Art/PlanetPioneers/PNG_Sequence.rar copy Art/PlanetPioneers/PNG_Sequence.ra
+r (checking origin...) (to origin...)
+ recvkey: received key with wrong size; discarding
+
+sent 39 bytes received 12 bytes 102.00 bytes/sec
+rsync error: syntax or usage error (code 1) at /home/lapo/package/rsync-3.0.9-1/
+src/rsync-3.0.9/main.c(1052) [sender=3.0.9]total size is 10361629980 speedup is
+ 203169215.29
+ rsync failed -- run git annex again to resume file transfer
+failed
+pull origin
+ok
+push origin
+Counting objects: 24, done.
+Delta compression using up to 8 threads.
+Compressing objects: 100% (11/11), done.
+Writing objects: 100% (13/13), 1.06 KiB | 0 bytes/s, done.
+Total 13 (delta 7), reused 0 (delta 0)
+To ssh://gitannex@serv-gitannex:/home/gitannex/git-annex-test.git
+ f8f70de..41bec92 git-annex -> synced/git-annex
+ 090ca15..e9e842b annex/direct/master -> synced/master
+ok
+git-annex: sync: 1 failed
+
+# End of transcript or log.
+"""]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/Direct_mode_sync_fails_to_transfer_a_10GB_file/comment_1_cb9e9dada7baf4e48725a9483b3b448a._comment b/doc/bugs/Direct_mode_sync_fails_to_transfer_a_10GB_file/comment_1_cb9e9dada7baf4e48725a9483b3b448a._comment
new file mode 100644
index 000000000..42acf9f64
--- /dev/null
+++ b/doc/bugs/Direct_mode_sync_fails_to_transfer_a_10GB_file/comment_1_cb9e9dada7baf4e48725a9483b3b448a._comment
@@ -0,0 +1,25 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-01-20T19:41:44Z"
+ content="""
+In my own test, I made a 10 gb file, and the key git-annex came up with had
+a size of -2147483648 which is clearly screwed up.. But that's what
+getFileStatus reports the size as. This was in an 32 bit XP VM.
+
+Hmm, unix-compat's getFileStatus calls getFileSize, which yields a
+FileOffset. The maxBound of that on linux is a nice large
+9223372036854775807, but on Windows, it appears to be 2147483647.
+
+Compare with using hFileSize, which yields an Integer. So,
+getFileSize and fileSize are unsafe on Windows due to FileOffset being so
+small on Windows.
+
+I have now corrected all places in git-annex that used the unsafe fileSize.
+It will behave correctly on Windows now.
+
+However, if you still have the repo with the big file, it's key still has
+the wrong size. To fix, you can "git annex unannex" the file, and then "git
+annex add" it back, after upgrading to the current daily build, or the next
+release of git-annex.
+"""]]
diff --git a/doc/bugs/Discrepancy_between_git_annex_add_and_git_annex_watch.mdwn b/doc/bugs/Discrepancy_between_git_annex_add_and_git_annex_watch.mdwn
deleted file mode 100644
index 8e836e345..000000000
--- a/doc/bugs/Discrepancy_between_git_annex_add_and_git_annex_watch.mdwn
+++ /dev/null
@@ -1,33 +0,0 @@
-### Please describe the problem.
-
-`git annex add` does not add dotfiles (as per the man page) while `git annex watch` does (nothing on the man page). It's not a bug, but rather a surprise (at least to me).
-
-### What steps will reproduce the problem?
-
-[[!format sh """
-git init dotfiles
-cd dotfiles
-git annex init "my dotfiles"
-echo test > test.txt
-echo dottest > .dotest.txt
-git annex add
-git commit -a -m "initial dots"
-git annex whereis .dotest.txt # no answer, as expected
-git annex watch
-git annex whereis .dotest.txt # answers that .dotest.txt is here
-"""]]
-
-### What version of git-annex are you using? On what operating system?
-git-annex version: 4.20131101, ubuntu 12.04 with all updates.
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> Improved documentation. [[done]] --[[Joey]]
diff --git a/doc/bugs/Displayed_copy_speed_is_wrong.mdwn b/doc/bugs/Displayed_copy_speed_is_wrong.mdwn
deleted file mode 100644
index cf3b31cf4..000000000
--- a/doc/bugs/Displayed_copy_speed_is_wrong.mdwn
+++ /dev/null
@@ -1,8 +0,0 @@
-When copying data to my remote, I regularly see speeds in excess of 100 MB/s on my home DSL line.
-
- 2073939 100% 176.96MB/s 0:00:00 (xfer#1, to-check=0/1)
-
-This is definitely not correct.
-
-> Closing, as rsync does this to show you when it's making your life
-> faster than it would be w/o rsync. [[done]] --[[Joey]]
diff --git a/doc/bugs/Displayed_copy_speed_is_wrong/comment_1_74de3091e8bfd7acd6795e61f39f07c6._comment b/doc/bugs/Displayed_copy_speed_is_wrong/comment_1_74de3091e8bfd7acd6795e61f39f07c6._comment
deleted file mode 100644
index 62a595be7..000000000
--- a/doc/bugs/Displayed_copy_speed_is_wrong/comment_1_74de3091e8bfd7acd6795e61f39f07c6._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 1"
- date="2011-04-03T01:37:29Z"
- content="""
-That is displayed by rsync. It's not unheard of for rsync to resume a transfer and display extremely high speeds.
-"""]]
diff --git a/doc/bugs/Displayed_copy_speed_is_wrong/comment_2_8b240de1d5ae9229fa2d77d1cc15a552._comment b/doc/bugs/Displayed_copy_speed_is_wrong/comment_2_8b240de1d5ae9229fa2d77d1cc15a552._comment
deleted file mode 100644
index 28305d3ac..000000000
--- a/doc/bugs/Displayed_copy_speed_is_wrong/comment_2_8b240de1d5ae9229fa2d77d1cc15a552._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 2"
- date="2011-04-03T08:56:48Z"
- content="""
-Pity. Mark as done/upstream (or similar) for house-keeping?
-"""]]
diff --git a/doc/bugs/Drop_--from_always_trusts_local_repository.mdwn b/doc/bugs/Drop_--from_always_trusts_local_repository.mdwn
new file mode 100644
index 000000000..53bdda332
--- /dev/null
+++ b/doc/bugs/Drop_--from_always_trusts_local_repository.mdwn
@@ -0,0 +1,46 @@
+### Please describe the problem.
+
+The command `git annex drop --from` always trusts the local repository, even if
+it is marked as untrusted.
+
+
+### What steps will reproduce the problem?
+[[!format sh """
+mkdir t u; cd t; git init; git commit --allow-empty -m "Initial commit"; git annex init "Trusted"; date > file; git annex add file; git commit -m "Add file"; cd ../u; git init; git remote add t ../t; git fetch t; git merge t/master; git annex init "Untrusted"; git annex untrust .; git annex get file; cd ../t; git remote add u ../u; git fetch u; cd ..
+"""]]
+
+Create two repositories, *t* (trusted) and *u* (untrusted). A file is in both
+repositories. When performing `git annex drop file` in repository *t*, `git
+annex` will abort because there are not enough copies. But when performing `git
+annex drop --from t file` in *u*, git annex will delete the copy.
+
+
+### What version of git-annex are you using? On what operating system?
+
+Bug was introduced with 6c31e3a8 and still exists in current master (d955cfe7).
+
+
+### Please provide any additional information below.
+
+The following change seems to solve the problem. (First time working with
+Haskell, please excuse the crude code.)
+
+[[!format diff """
+diff --git a/Command/Drop.hs b/Command/Drop.hs
+index 269c4c2..09ea99a 100644
+--- a/Command/Drop.hs
++++ b/Command/Drop.hs
+@@ -82,8 +82,9 @@ performRemote key afile numcopies remote = lockContent key $ do
+ (remotes, trusteduuids) <- Remote.keyPossibilitiesTrusted key
+ present <- inAnnex key
+ u <- getUUID
++ level <- lookupTrust u
+ let have = filter (/= uuid) $
+- if present then u:trusteduuids else trusteduuids
++ if present && level <= SemiTrusted then u:trusteduuids else trusteduuids
+ untrusteduuids <- trustGet UnTrusted
+ let tocheck = filter (/= remote) $
+ Remote.remotesWithoutUUID remotes (have++untrusteduuids)
+"""]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/Drop_files_with_the_same_checksum..mdwn b/doc/bugs/Drop_files_with_the_same_checksum..mdwn
new file mode 100644
index 000000000..0dcae20c7
--- /dev/null
+++ b/doc/bugs/Drop_files_with_the_same_checksum..mdwn
@@ -0,0 +1,33 @@
+### Please describe the problem.
+When two identical files are annexed and one of them is dropped, both files are gone (one dangling symlink is left). This may be intentional (the checksums are the same after all), but then is there a way to drop one of the files?
+
+### What steps will reproduce the problem?
+
+ mkdir annex
+ cd annex
+ git init
+ git annex init
+ mkdir a b
+ dd if=/dev/urandom of=a/data.bin count=2048
+ cp a/data.bin b
+ git annex add a/data.bin b/data.bin
+ git commit -m "Added raw data."
+ git annex drop --force a/data.bin
+ file b/data.bin
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex version: 5.20140831+b1
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+local repository version: 5
+supported repository version: 5
+
+Distributor ID: Debian
+Description: Debian GNU/Linux testing (jessie)
+Release: testing
+Codename: jessie
+
+> If you don't want git-annex to de-duplicate files you can use a backend
+> such as WORM. Here it's behaving as expected, so [[done]]. --[[Joey]]
diff --git a/doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder.mdwn b/doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder.mdwn
deleted file mode 100644
index d011e4416..000000000
--- a/doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder.mdwn
+++ /dev/null
@@ -1,3747 +0,0 @@
-### Please describe the problem.
-Two repositories A and B. B carries the full data, A only carries a subset of the data by excluding a couple of directories with a preferred content expression. Both repos in direct mode. A was modified quite heavily (thousands of files moved, deleted) with git-annex assistant running but without a possibility to synchronise with B.
-
-During synchronisation (by starting the webapp on A and git-annex assistant on B) suddenly former top-level folders, e.g.
-
- ./201207
-
-appear in
-
- ./incoming/5d/201207
-
-in both repositories.
-
-Then deleting
-
- ./incoming/5d/201207
-
-in repo A unfortunately removes the top-level directory
-
- ./201207
-
-as well and removes them in both repositories.
-
-### What steps will reproduce the problem?
-I don't know how to reproduce apart from the description above.
-
-### What version of git-annex are you using? On what operating system?
-git-annex version: 4.20131002,
-Debian jessie, A: amd64, B: armhf
-
-### Please provide any additional information below.
-
-A paste of .git/annex/daemon.log of repoA below, as I haven't realised the problem immediatly I cannot tell whether this is the relevant log or not. If more is needed, I can provide additional logs.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-[2013-10-27 18:35:52 CET] main: Syncing with repoB
-From repoB:/media/srv/img
- d1e3763..5eba12c git-annex -> repoB/git-annex
- 611e4f5..a7b9fd7 master -> repoB/master
- 714ed67..a7b9fd7 synced/master -> repoB/synced/master
-Auto packing the repository for optimum performance. You may also
-run "git gc" manually. See "git help gc" for more information.
-Updating 714ed67..a7b9fd7
-Fast-forward
- 201109/jmg_7250.cr2 | 1 -
- 201109/jmg_7250.jpg | 1 -
- 201109/jmg_7251.cr2 | 1 -
- 201109/jmg_7251.jpg | 1 -
- 201109/jmg_7253.cr2 | 1 -
- 201109/jmg_7253.jpg | 1 -
- 201109/jmg_7256_raw.jpg | 1 -
- 201109/jmg_7259.cr2 | 1 -
- 201109/jmg_7259.jpg | 1 -
- 201109/jmg_7261.cr2 | 1 -
- 201109/jmg_7261.jpg | 1 -
- 201109/jmg_7265.cr2 | 1 -
- 201109/jmg_7265.jpg | 1 -
- 201109/jmg_7272.jpg | 1 -
- 201109/jmg_7274.jpg | 1 -
- 201109/jmg_7275.jpg | 1 -
- 201109/jmg_7276.jpg | 1 -
- 201109/jmg_7280.jpg | 1 -
- 201109/jmg_7284.jpg | 1 -
- 201109/jmg_7286.jpg | 1 -
- 201109/jmg_7288.jpg | 1 -
- 201109/jmg_7289.jpg | 1 -
- 201109/jmg_7292.jpg | 1 -
- 201109/jmg_7293.jpg | 1 -
- 201109/jmg_7295.cr2 | 1 -
- 201109/jmg_7295.jpg | 1 -
- 201109/jmg_7296.cr2 | 1 -
- 201109/jmg_7296.jpg | 1 -
- 201109/jmg_7299.cr2 | 1 -
- 201109/jmg_7299.jpg | 1 -
- 201109/jmg_7300.cr2 | 1 -
- 201109/jmg_7300.jpg | 1 -
- 201109/jmg_7304.jpg | 1 -
- 201109/jmg_7305_raw.jpg | 1 -
- 201109/jmg_7307_raw.jpg | 1 -
- 201202/jmg_8528.jpg | 1 -
- 201202/jmg_8529.jpg | 1 -
- 201202/jmg_8595.jpg | 1 -
- 201202/jmg_8596.jpg | 1 -
- 201202/jmg_8597.jpg | 1 -
- 201202/jmg_8601.jpg | 1 -
- 201202/jmg_8602.cr2 | 1 -
- 201202/jmg_8602.jpg | 1 -
- 201202/jmg_8603.cr2 | 1 -
- 201202/jmg_8603.jpg | 1 -
- 201202/jmg_8604.jpg | 1 -
- 201202/jmg_8605.jpg | 1 -
- 201202/jmg_8606.jpg | 1 -
- 201202/jmg_8607.jpg | 1 -
- 201202/jmg_8608.jpg | 1 -
- 201202/jmg_8609.jpg | 1 -
- 201202/jmg_8610.jpg | 1 -
- 201202/jmg_8611.jpg | 1 -
- 201202/jmg_8612.cr2 | 1 -
- 201202/jmg_8612.jpg | 1 -
- 201202/jmg_8613.jpg | 1 -
- 201202/jmg_8614.jpg | 1 -
- 201202/jmg_8615.jpg | 1 -
- 201202/jmg_8616_raw.jpg | 1 -
- 201202/jmg_8617.jpg | 1 -
- 201202/jmg_8618.jpg | 1 -
- 201202/jmg_8619.jpg | 1 -
- 201202/jmg_8620.jpg | 1 -
- 201202/jmg_8621.jpg | 1 -
- 201202/jmg_8622.jpg | 1 -
- 201202/jmg_8624.jpg | 1 -
- 201202/jmg_8625.cr2 | 1 -
- 201202/jmg_8625.jpg | 1 -
- 201202/jmg_8626.jpg | 1 -
- 201202/jmg_8627.jpg | 1 -
- 201202/jmg_8628.jpg | 1 -
- 201202/jmg_8629.jpg | 1 -
- 201202/jmg_8630.jpg | 1 -
- 201202/jmg_8631.jpg | 1 -
- 201202/jmg_8632.jpg | 1 -
- 201202/jmg_8633.cr2 | 1 -
- 201202/jmg_8633.jpg | 1 -
- 201202/jmg_8634.jpg | 1 -
- 201202/jmg_8637.jpg | 1 -
- 201202/jmg_8639.jpg | 1 -
- 201202/jmg_8640.jpg | 1 -
- 201202/jmg_8641.jpg | 1 -
- 201202/jmg_8642_raw.jpg | 1 -
- 201202/jmg_8643.jpg | 1 -
- 201202/jmg_8644.jpg | 1 -
- 201202/jmg_8647.jpg | 1 -
- 201202/jmg_8648.jpg | 1 -
- 201202/jmg_8651.cr2 | 1 -
- 201202/jmg_8651.jpg | 1 -
- 201202/jmg_8652.jpg | 1 -
- 201202/jmg_8653.jpg | 1 -
- 201202/jmg_8654.jpg | 1 -
- 201202/jmg_8655.jpg | 1 -
- 201202/jmg_8657.jpg | 1 -
- 201202/jmg_8665.jpg | 1 -
- 201202/jmg_8670.jpg | 1 -
- 201202/jmg_8671.jpg | 1 -
- 201202/jmg_8673.cr2 | 1 -
- 201202/jmg_8673.jpg | 1 -
- 201202/jmg_8674.jpg | 1 -
- 201202/jmg_8675.jpg | 1 -
- 201202/jmg_8676.jpg | 1 -
- 201202/jmg_8677.jpg | 1 -
- 201202/jmg_8678.jpg | 1 -
- 201202/jmg_8679.jpg | 1 -
- 201202/jmg_8680.jpg | 1 -
- 201202/jmg_8681.jpg | 1 -
- 201203/jmg_8701.cr2 | 1 -
- 201203/jmg_8702.jpg | 1 -
- 201203/jmg_8705.jpg | 1 -
- 201203/jmg_8711.jpg | 1 -
- 201203/jmg_8717.jpg | 1 -
- 201203/jmg_8718.jpg | 1 -
- 201203/jmg_8719.jpg | 1 -
- 201203/jmg_8721.jpg | 1 -
- 201203/jmg_8725.jpg | 1 -
- 201203/jmg_8726.jpg | 1 -
- 201203/jmg_8731.jpg | 1 -
- 201203/jmg_8739.jpg | 1 -
- 201203/jmg_8745.jpg | 1 -
- 201203/jmg_8747_raw.jpg | 1 -
- 201203/jmg_8750.cr2 | 1 -
- 201203/jmg_8750.jpg | 1 -
- 201204/jmg_8751.jpg | 1 -
- 201204/jmg_8752.jpg | 1 -
- 201204/jmg_8755.jpg | 1 -
- 201204/jmg_8756.jpg | 1 -
- 201204/jmg_8757.jpg | 1 -
- 201204/jmg_8759.jpg | 1 -
- 201204/jmg_8760.jpg | 1 -
- 201204/jmg_8761.jpg | 1 -
- 201204/jmg_8762.jpg | 1 -
- 201204/jmg_8763.cr2 | 1 -
- 201204/jmg_8763.jpg | 1 -
- 201204/jmg_8766.jpg | 1 -
- 201204/jmg_8767.cr2 | 1 -
- 201204/jmg_8767.jpg | 1 -
- 201204/jmg_8768.jpg | 1 -
- 201204/jmg_8769.jpg | 1 -
- 201204/jmg_8770.jpg | 1 -
- 201204/jmg_8771.jpg | 1 -
- 201204/jmg_8772.jpg | 1 -
- 201204/jmg_8773.jpg | 1 -
- 201205/jmg_8822.jpg | 1 -
- 201205/jmg_8823.jpg | 1 -
- 201205/jmg_8824.jpg | 1 -
- 201205/jmg_8826.jpg | 1 -
- 201205/jmg_8831.jpg | 1 -
- 201205/jmg_8834.jpg | 1 -
- 201205/jmg_8835.jpg | 1 -
- 201205/jmg_8835_raw.jpg | 1 -
- 201205/jmg_8837.jpg | 1 -
- 201205/jmg_8839.cr2 | 1 -
- 201205/jmg_8839.jpg | 1 -
- 201205/jmg_8839_raw.jpg | 1 -
- 201205/jmg_8840.cr2 | 1 -
- 201205/jmg_8840.jpg | 1 -
- 201205/jmg_8840_raw.jpg | 1 -
- 201205/jmg_8841.jpg | 1 -
- 201205/jmg_8842.jpg | 1 -
- 201205/jmg_8844.cr2 | 1 -
- 201205/jmg_8844.jpg | 1 -
- 201205/jmg_8844_raw.jpg | 1 -
- 201205/jmg_8845.jpg | 1 -
- 201205/jmg_8846.jpg | 1 -
- 201205/jmg_8847.cr2 | 1 -
- 201205/jmg_8847.jpg | 1 -
- 201205/jmg_8847_raw.jpg | 1 -
- 201205/jmg_8848.jpg | 1 -
- 201205/jmg_8849.jpg | 1 -
- 201205/jmg_8851.cr2 | 1 -
- 201205/jmg_8851.jpg | 1 -
- 201205/jmg_8851_raw.jpg | 1 -
- 201205/jmg_8856.cr2 | 1 -
- 201205/jmg_8856.jpg | 1 -
- 201205/jmg_8856_raw.jpg | 1 -
- 201205/jmg_8857.jpg | 1 -
- 201205/jmg_8858.jpg | 1 -
- 201205/jmg_8859.jpg | 1 -
- 201205/jmg_8861.jpg | 1 -
- 201205/jmg_8862.jpg | 1 -
- 201205/jmg_8863.jpg | 1 -
- 201205/jmg_8871.cr2 | 1 -
- 201205/jmg_8871.jpg | 1 -
- 201205/jmg_8872.jpg | 1 -
- 201205/jmg_8873.jpg | 1 -
- 201205/jmg_8875.jpg | 1 -
- 201205/jmg_8876.cr2 | 1 -
- 201205/jmg_8876.jpg | 1 -
- 201205/jmg_8878.cr2 | 1 -
- 201205/jmg_8878.jpg | 1 -
- 201205/jmg_8879.cr2 | 1 -
- 201205/jmg_8879.jpg | 1 -
- 201205/jmg_8880.cr2 | 1 -
- 201205/jmg_8880.jpg | 1 -
- 201205/jmg_8881.cr2 | 1 -
- 201205/jmg_8881.jpg | 1 -
- 201205/jmg_8892.cr2 | 1 -
- 201205/jmg_8892.jpg | 1 -
- 201205/jmg_8893.cr2 | 1 -
- 201205/jmg_8893.jpg | 1 -
- 201205/jmg_8894.cr2 | 1 -
- 201205/jmg_8894.jpg | 1 -
- 201206/jmg_8989.cr2 | 1 -
- 201206/jmg_8989.jpg | 1 -
- 201206/jmg_8990.cr2 | 1 -
- 201206/jmg_8990.jpg | 1 -
- 201206/jmg_8995.jpg | 1 -
- 201206/jmg_8996.jpg | 1 -
- 201206/jmg_8998.jpg | 1 -
- 201206/jmg_9001.jpg | 1 -
- 201206/jmg_9003.jpg | 1 -
- 201206/jmg_9006.jpg | 1 -
- 201206/jmg_9007.jpg | 1 -
- 201206/jmg_9011.jpg | 1 -
- 201206/jmg_9014.jpg | 1 -
- 201206/jmg_9014_raw.jpg | 1 -
- 201206/jmg_9015.jpg | 1 -
- 201206/jmg_9016.cr2 | 1 -
- 201206/jmg_9016.jpg | 1 -
- 201206/jmg_9017.cr2 | 1 -
- 201206/jmg_9017.jpg | 1 -
- 201206/jmg_9018.cr2 | 1 -
- 201206/jmg_9018.jpg | 1 -
- 201206/jmg_9019.cr2 | 1 -
- 201206/jmg_9019.jpg | 1 -
- 201206/jmg_9023.cr2 | 1 -
- 201206/jmg_9023.jpg | 1 -
- 201206/jmg_9024.cr2 | 1 -
- 201206/jmg_9024.jpg | 1 -
- 201206/jmg_9025.cr2 | 1 -
- 201206/jmg_9025.jpg | 1 -
- 201206/jmg_9028.jpg | 1 -
- 201206/jmg_9029.jpg | 1 -
- 201206/jmg_9030.jpg | 1 -
- 201206/jmg_9031.jpg | 1 -
- 201206/jmg_9032_raw.jpg | 1 -
- 201206/jmg_9033.jpg | 1 -
- 201206/jmg_9033_raw.jpg | 1 -
- 201206/jmg_9034.jpg | 1 -
- 201206/jmg_9035.jpg | 1 -
- 201206/jmg_9035_raw.jpg | 1 -
- 201206/jmg_9036.jpg | 1 -
- 201206/jmg_9039.cr2 | 1 -
- 201206/jmg_9039.jpg | 1 -
- 201206/jmg_9040.cr2 | 1 -
- 201206/jmg_9040.jpg | 1 -
- 201206/jmg_9043.cr2 | 1 -
- 201206/jmg_9043.jpg | 1 -
- 201206/jmg_9047.cr2 | 1 -
- 201206/jmg_9047.jpg | 1 -
- 201207/jmg_9048.jpg | 1 -
- 201207/jmg_9053.jpg | 1 -
- 201207/jmg_9054.jpg | 1 -
- 201207/jmg_9069.cr2 | 1 -
- 201207/jmg_9069.jpg | 1 -
- 201207/jmg_9070.cr2 | 1 -
- 201207/jmg_9070.jpg | 1 -
- 201207/jmg_9072.cr2 | 1 -
- 201207/jmg_9072.jpg | 1 -
- 201207/jmg_9076.cr2 | 1 -
- 201207/jmg_9076.jpg | 1 -
- 201208/jmg_9077.jpg | 1 -
- 201208/jmg_9302_raw.jpg | 1 -
- 201208/jmg_9303.jpg | 1 -
- 201208/jmg_9304.cr2 | 1 -
- 201208/jmg_9304.jpg | 1 -
- 201208/jmg_9305.cr2 | 1 -
- 201208/jmg_9305.jpg | 1 -
- 201208/jmg_9306_raw.jpg | 1 -
- 201208/jmg_9307.cr2 | 1 -
- 201208/jmg_9307.jpg | 1 -
- 201208/jmg_9308_raw.jpg | 1 -
- 201208/jmg_9309_raw.jpg | 1 -
- 201208/jmg_9310.cr2 | 1 -
- 201208/jmg_9310.jpg | 1 -
- 201208/jmg_9310_bw.jpg | 1 -
- 201208/jmg_9310_raw.jpg | 1 -
- 201208/jmg_9312.jpg | 1 -
- 201208/jmg_9313.jpg | 1 -
- 201208/jmg_9314.jpg | 1 -
- 201208/jmg_9315.jpg | 1 -
- 201208/jmg_9319.jpg | 1 -
- 201208/jmg_9523.jpg | 1 -
- 201208/jmg_9524.jpg | 1 -
- 201208/jmg_9525.jpg | 1 -
- 201208/jmg_9526.jpg | 1 -
- 201208/jmg_9527.jpg | 1 -
- 201208/jmg_9527_raw.jpg | 1 -
- 201208/jmg_9528.jpg | 1 -
- 201208/jmg_9529.jpg | 1 -
- 201208/jmg_9530.jpg | 1 -
- 201208/jmg_9531.jpg | 1 -
- 201208/jmg_9532.jpg | 1 -
- 201208/jmg_9533.cr2 | 1 -
- 201208/jmg_9533.jpg | 1 -
- 201208/jmg_9534.cr2 | 1 -
- 201208/jmg_9534.jpg | 1 -
- 201208/jmg_9535.jpg | 1 -
- 201208/jmg_9536.jpg | 1 -
- 201208/jmg_9537.cr2 | 1 -
- 201208/jmg_9537.jpg | 1 -
- 201208/jmg_9538.jpg | 1 -
- 201208/jmg_9539.jpg | 1 -
- 201208/jmg_9540.jpg | 1 -
- 201208/jmg_9541.cr2 | 1 -
- 201208/jmg_9542.jpg | 1 -
- 201208/jmg_9543.cr2 | 1 -
- 201208/jmg_9543.jpg | 1 -
- 201208/jmg_9544.cr2 | 1 -
- 201208/jmg_9544.jpg | 1 -
- 201208/jmg_9545.jpg | 1 -
- 201209/jmg_9547.jpg | 1 -
- 201209/jmg_9548.jpg | 1 -
- 201209/jmg_9549.jpg | 1 -
- 201209/jmg_9550.jpg | 1 -
- 201209/jmg_9551.jpg | 1 -
- 201209/jmg_9552.jpg | 1 -
- 201209/jmg_9553.jpg | 1 -
- 201209/jmg_9555.jpg | 1 -
- 201209/jmg_9556.jpg | 1 -
- 201209/jmg_9558.jpg | 1 -
- 201209/jmg_9559.cr2 | 1 -
- 201209/jmg_9559.jpg | 1 -
- 201209/jmg_9560.cr2 | 1 -
- 201209/jmg_9560.jpg | 1 -
- 201209/jmg_9561.jpg | 1 -
- 201209/jmg_9562.jpg | 1 -
- 201209/jmg_9568.jpg | 1 -
- 201210/jmg_0001.jpg | 1 -
- 201210/jmg_0021.jpg | 1 -
- 201210/jmg_0022.cr2 | 1 -
- 201210/jmg_0022.jpg | 1 -
- 201210/jmg_0025.jpg | 1 -
- 201210/jmg_0026.jpg | 1 -
- 201210/jmg_0027.jpg | 1 -
- 201210/jmg_0028.jpg | 1 -
- 201210/jmg_0029.jpg | 1 -
- 201210/jmg_0030.jpg | 1 -
- 201210/jmg_0032.jpg | 1 -
- 201210/jmg_0034.jpg | 1 -
- 201210/jmg_0035.jpg | 1 -
- 201210/jmg_0036.jpg | 1 -
- 201210/jmg_0037.jpg | 1 -
- 201210/jmg_0039.cr2 | 1 -
- 201210/jmg_0039.jpg | 1 -
- 201210/jmg_0040.jpg | 1 -
- 201210/jmg_9572.jpg | 1 -
- 201210/jmg_9573.jpg | 1 -
- 201210/jmg_9574.jpg | 1 -
- 201210/jmg_9575.jpg | 1 -
- 201210/jmg_9576.jpg | 1 -
- 201210/jmg_9578.jpg | 1 -
- 201210/jmg_9580.jpg | 1 -
- 201210/jmg_9581.jpg | 1 -
- 201210/jmg_9582.cr2 | 1 -
- 201210/jmg_9582.jpg | 1 -
- 201210/jmg_9585.cr2 | 1 -
- 201210/jmg_9585.jpg | 1 -
- 201210/jmg_9587.cr2 | 1 -
- 201210/jmg_9587.jpg | 1 -
- 201210/jmg_9588.jpg | 1 -
- 201210/jmg_9589.jpg | 1 -
- 201210/jmg_9590.jpg | 1 -
- 201210/jmg_9591.jpg | 1 -
- 201210/jmg_9594.jpg | 1 -
- 201210/jmg_9595.jpg | 1 -
- 201210/jmg_9596.jpg | 1 -
- 201210/jmg_9597.cr2 | 1 -
- 201210/jmg_9597.jpg | 1 -
- 201210/jmg_9598.cr2 | 1 -
- 201210/jmg_9598.jpg | 1 -
- 201210/jmg_9599.cr2 | 1 -
- 201210/jmg_9599.jpg | 1 -
- 201210/jmg_9600.jpg | 1 -
- 201210/jmg_9602.jpg | 1 -
- 201210/jmg_9603.jpg | 1 -
- 201210/jmg_9604.jpg | 1 -
- 201210/jmg_9605.cr2 | 1 -
- 201210/jmg_9605.jpg | 1 -
- 201210/jmg_9606.jpg | 1 -
- 201210/jmg_9608.jpg | 1 -
- 201210/jmg_9609.jpg | 1 -
- 201210/jmg_9610.jpg | 1 -
- 201210/jmg_9611.jpg | 1 -
- 201210/jmg_9612.jpg | 1 -
- 201210/jmg_9613.jpg | 1 -
- 201210/jmg_9614.jpg | 1 -
- 201210/jmg_9616.cr2 | 1 -
- 201210/jmg_9616.jpg | 1 -
- 201210/jmg_9617.jpg | 1 -
- 201210/jmg_9619.jpg | 1 -
- 201210/jmg_9620.jpg | 1 -
- 201210/jmg_9621.jpg | 1 -
- 201210/jmg_9622.jpg | 1 -
- 201210/jmg_9623.cr2 | 1 -
- 201210/jmg_9623.jpg | 1 -
- 201210/jmg_9624.cr2 | 1 -
- 201210/jmg_9624.jpg | 1 -
- 201210/jmg_9736_raw.jpg | 1 -
- 201210/jmg_9738_raw.jpg | 1 -
- 201210/jmg_9740.cr2 | 1 -
- 201210/jmg_9740.jpg | 1 -
- 201210/jmg_9743.jpg | 1 -
- 201210/jmg_9744.jpg | 1 -
- 201210/jmg_9745.cr2 | 1 -
- 201210/jmg_9745.jpg | 1 -
- 201210/jmg_9746.cr2 | 1 -
- 201210/jmg_9746.jpg | 1 -
- 201210/jmg_9748.jpg | 1 -
- 201210/jmg_9749_raw.jpg | 1 -
- 201210/jmg_9751.jpg | 1 -
- 201210/jmg_9752.jpg | 1 -
- 201210/jmg_9754.jpg | 1 -
- 201210/jmg_9755.jpg | 1 -
- 201210/jmg_9756.jpg | 1 -
- 201210/jmg_9760.cr2 | 1 -
- 201210/jmg_9760.jpg | 1 -
- 201210/jmg_9761.cr2 | 1 -
- 201210/jmg_9761.jpg | 1 -
- 201210/jmg_9763.jpg | 1 -
- 201210/jmg_9764.jpg | 1 -
- 201210/jmg_9766.jpg | 1 -
- 201210/jmg_9767.cr2 | 1 -
- 201210/jmg_9767.jpg | 1 -
- 201210/jmg_9768.jpg | 1 -
- 201210/jmg_9771.jpg | 1 -
- 201210/jmg_9772.jpg | 1 -
- 201210/jmg_9791.jpg | 1 -
- 201210/jmg_9792.jpg | 1 -
- 201210/jmg_9793.jpg | 1 -
- 201210/jmg_9794.jpg | 1 -
- 201210/jmg_9796.jpg | 1 -
- 201210/jmg_9797.jpg | 1 -
- 201210/jmg_9799.jpg | 1 -
- 201210/jmg_9800.jpg | 1 -
- 201210/jmg_9801.jpg | 1 -
- 201210/jmg_9803.jpg | 1 -
- 201210/jmg_9807.jpg | 1 -
- 201210/jmg_9808.jpg | 1 -
- 201210/jmg_9809.jpg | 1 -
- 201210/jmg_9810.jpg | 1 -
- 201210/jmg_9811.jpg | 1 -
- 201210/jmg_9812.jpg | 1 -
- 201210/jmg_9813.jpg | 1 -
- 201210/jmg_9815.jpg | 1 -
- 201210/jmg_9818.jpg | 1 -
- 201210/jmg_9819.jpg | 1 -
- 201210/jmg_9820.jpg | 1 -
- 201210/jmg_9821.jpg | 1 -
- 201210/jmg_9822.jpg | 1 -
- 201210/jmg_9823.jpg | 1 -
- 201210/jmg_9825.jpg | 1 -
- 201210/jmg_9826.jpg | 1 -
- 201210/jmg_9827.jpg | 1 -
- 201210/jmg_9828.jpg | 1 -
- 201210/jmg_9829.jpg | 1 -
- 201210/jmg_9830.cr2 | 1 -
- 201210/jmg_9830.jpg | 1 -
- 201210/jmg_9832.cr2 | 1 -
- 201210/jmg_9832.jpg | 1 -
- 201210/jmg_9834.jpg | 1 -
- 201210/jmg_9836.jpg | 1 -
- 201210/jmg_9838.jpg | 1 -
- 201210/jmg_9839.jpg | 1 -
- 201210/jmg_9841.jpg | 1 -
- 201210/jmg_9843.jpg | 1 -
- 201210/jmg_9845.jpg | 1 -
- 201210/jmg_9846.jpg | 1 -
- 201210/jmg_9848.jpg | 1 -
- 201210/jmg_9849.jpg | 1 -
- 201210/jmg_9852.jpg | 1 -
- 201210/jmg_9853.jpg | 1 -
- 201210/jmg_9854.jpg | 1 -
- 201210/jmg_9855.jpg | 1 -
- 201210/jmg_9856.jpg | 1 -
- 201210/jmg_9857.cr2 | 1 -
- 201210/jmg_9857.jpg | 1 -
- 201210/jmg_9858.cr2 | 1 -
- 201210/jmg_9858.jpg | 1 -
- 201210/jmg_9859.jpg | 1 -
- 201210/jmg_9860.jpg | 1 -
- 201210/jmg_9915.jpg | 1 -
- 201210/jmg_9917.jpg | 1 -
- 201210/jmg_9918.jpg | 1 -
- 201210/jmg_9919.jpg | 1 -
- 201210/jmg_9922.jpg | 1 -
- 201210/jmg_9923.jpg | 1 -
- 201210/jmg_9925.jpg | 1 -
- 201210/jmg_9926.cr2 | 1 -
- 201210/jmg_9926.jpg | 1 -
- 201210/jmg_9928.jpg | 1 -
- 201210/jmg_9975.cr2 | 1 -
- 201210/jmg_9975.jpg | 1 -
- 201210/jmg_9976.cr2 | 1 -
- 201210/jmg_9976.jpg | 1 -
- 201210/jmg_9978.jpg | 1 -
- 201210/jmg_9986.jpg | 1 -
- 201210/jmg_9987.jpg | 1 -
- 201210/jmg_9988.jpg | 1 -
- 201210/jmg_9989.jpg | 1 -
- 201210/jmg_9991.jpg | 1 -
- 201210/jmg_9993.jpg | 1 -
- 201210/jmg_9994.cr2 | 1 -
- 201210/jmg_9994.jpg | 1 -
- 201210/jmg_9997.jpg | 1 -
- 201210/jmg_9998.jpg | 1 -
- 201210/jmg_9999.jpg | 1 -
- 201212/jmg_0131.jpg | 1 -
- 201212/jmg_0134.jpg | 1 -
- 201212/jmg_0135.jpg | 1 -
- 201212/jmg_0152.jpg | 1 -
- 201212/jmg_0155.jpg | 1 -
- 201212/jmg_0156.jpg | 1 -
- 201212/jmg_0162.jpg | 1 -
- 201212/jmg_0163.jpg | 1 -
- 201212/jmg_0165.jpg | 1 -
- 201212/jmg_0176.cr2 | 1 -
- 201212/jmg_0176.jpg | 1 -
- 201212/jmg_0177.cr2 | 1 -
- 201212/jmg_0177.jpg | 1 -
- 201212/jmg_0178.jpg | 1 -
- 201212/jmg_0179.jpg | 1 -
- 201212/jmg_0180.jpg | 1 -
- 201212/jmg_0184.jpg | 1 -
- 201212/jmg_0185.jpg | 1 -
- 201212/jmg_0186.jpg | 1 -
- 201212/jmg_0187.jpg | 1 -
- 201212/jmg_0306.jpg | 1 -
- 201212/jmg_0307.jpg | 1 -
- 201212/jmg_0308.jpg | 1 -
- 201212/jmg_0310.jpg | 1 -
- 201212/jmg_0311.jpg | 1 -
- 201212/jmg_0312.jpg | 1 -
- 201212/jmg_0313.jpg | 1 -
- 201212/jmg_0314.jpg | 1 -
- 201212/jmg_0315.jpg | 1 -
- 201212/jmg_0316.jpg | 1 -
- 201212/jmg_0317.jpg | 1 -
- 201212/jmg_0321.jpg | 1 -
- 201212/jmg_0326.jpg | 1 -
- 201212/jmg_0328.jpg | 1 -
- 201212/jmg_0330.jpg | 1 -
- 201212/jmg_0333.jpg | 1 -
- 201212/jmg_0336.jpg | 1 -
- 201212/jmg_0340.jpg | 1 -
- 201212/jmg_0343.jpg | 1 -
- 201212/jmg_0345.jpg | 1 -
- 201212/jmg_0360.jpg | 1 -
- 201212/jmg_0362.jpg | 1 -
- 201212/jmg_0363.jpg | 1 -
- 201212/jmg_0364.jpg | 1 -
- 201212/jmg_0366.jpg | 1 -
- 201212/jmg_0367.jpg | 1 -
- 201212/jmg_0368.jpg | 1 -
- 201212/jmg_0369.jpg | 1 -
- 201212/jmg_0370.jpg | 1 -
- 201212/jmg_0372.jpg | 1 -
- 201212/jmg_0382.jpg | 1 -
- 201212/jmg_0383.jpg | 1 -
- 201212/jmg_0384.jpg | 1 -
- 201212/jmg_0385.jpg | 1 -
- 201212/jmg_0387.jpg | 1 -
- 201212/jmg_0388.jpg | 1 -
- 201212/jmg_0389.jpg | 1 -
- 201212/jmg_0390.jpg | 1 -
- 201212/jmg_0392.jpg | 1 -
- 201212/jmg_0396.jpg | 1 -
- 201212/jmg_0397.jpg | 1 -
- 201212/jmg_0398.jpg | 1 -
- 201212/jmg_0399.jpg | 1 -
- 201212/jmg_0402.jpg | 1 -
- 201212/jmg_0404.jpg | 1 -
- 201212/jmg_0405.jpg | 1 -
- 201212/jmg_0406.jpg | 1 -
- 201212/jmg_0407.jpg | 1 -
- 201212/jmg_0408.jpg | 1 -
- 201212/jmg_0410.jpg | 1 -
- 201212/jmg_0411.jpg | 1 -
- 201212/jmg_0412.jpg | 1 -
- 201212/jmg_0415.jpg | 1 -
- 201212/jmg_0417.jpg | 1 -
- 201212/jmg_0418.jpg | 1 -
- 201302/jmg_0502.cr2 | 1 -
- 201302/jmg_0502.jpg | 1 -
- 201302/jmg_0503.jpg | 1 -
- 201302/jmg_0507.jpg | 1 -
- 201302/jmg_0510.jpg | 1 -
- 201302/jmg_0512.jpg | 1 -
- 201302/jmg_0513.jpg | 1 -
- 201302/jmg_0514.jpg | 1 -
- 201302/jmg_0516.jpg | 1 -
- 201302/jmg_0517.jpg | 1 -
- 201302/jmg_0518.jpg | 1 -
- 201302/jmg_0521.jpg | 1 -
- 201302/jmg_0522.jpg | 1 -
- 201302/jmg_0523.jpg | 1 -
- 201302/jmg_0524.jpg | 1 -
- 201302/jmg_0526.jpg | 1 -
- 201302/jmg_0527.jpg | 1 -
- 201302/jmg_0528.jpg | 1 -
- 201302/jmg_0532.cr2 | 1 -
- 201302/jmg_0532.jpg | 1 -
- 201302/jmg_0534.jpg | 1 -
- 201302/jmg_0535.jpg | 1 -
- 201302/jmg_0537.jpg | 1 -
- 201302/jmg_0539.jpg | 1 -
- 201302/jmg_0541.jpg | 1 -
- 201302/jmg_0543.jpg | 1 -
- 201304/bruecke_saeckingen.tif | 1 -
- 201304/jmg_0685.cr2 | 1 -
- 201304/jmg_0685.jpg | 1 -
- 201304/jmg_0687.cr2 | 1 -
- 201304/jmg_0687.jpg | 1 -
- 201304/jmg_0699.jpg | 1 -
- 201304/jmg_0700.jpg | 1 -
- 201304/jmg_0726.jpg | 1 -
- 201304/jmg_0727.jpg | 1 -
- 201304/jmg_0728.jpg | 1 -
- 201304/jmg_0729.cr2 | 1 -
- 201304/jmg_0729.jpg | 1 -
- 201304/jmg_0730.jpg | 1 -
- 201304/jmg_0731.jpg | 1 -
- 201304/jmg_0733.cr2 | 1 -
- 201304/jmg_0733.jpg | 1 -
- 201304/jmg_0734.cr2 | 1 -
- 201304/jmg_0734.jpg | 1 -
- 201304/jmg_0736.cr2 | 1 -
- 201304/jmg_0736.jpg | 1 -
- 201304/jmg_0737.cr2 | 1 -
- 201304/jmg_0737.jpg | 1 -
- 201304/jmg_0738.jpg | 1 -
- 201304/jmg_0739.jpg | 1 -
- 201304/jmg_0740.jpg | 1 -
- 201304/jmg_0741.jpg | 1 -
- 201304/jmg_0742.jpg | 1 -
- 201304/jmg_0744.cr2 | 1 -
- 201304/jmg_0744.jpg | 1 -
- 201304/jmg_0749.jpg | 1 -
- 201304/jmg_0750.jpg | 1 -
- 201304/jmg_0751.jpg | 1 -
- 201304/jmg_0752.jpg | 1 -
- 201304/jmg_0753.jpg | 1 -
- 201304/jmg_0755.cr2 | 1 -
- 201304/jmg_0755.jpg | 1 -
- 201304/jmg_0757.cr2 | 1 -
- 201304/jmg_0757.jpg | 1 -
- 201304/jmg_0758.jpg | 1 -
- 201304/jmg_0759.jpg | 1 -
- 201304/jmg_0760.cr2 | 1 -
- 201304/jmg_0760.jpg | 1 -
- 201304/jmg_0762.cr2 | 1 -
- 201304/jmg_0762.jpg | 1 -
- 201304/jmg_0763.jpg | 1 -
- 201304/jmg_0764.jpg | 1 -
- 201304/jmg_0765.jpg | 1 -
- 201304/jmg_0766.jpg | 1 -
- 201304/jmg_0769.jpg | 1 -
- 201304/jmg_0770.jpg | 1 -
- 201304/jmg_0771.jpg | 1 -
- 201304/jmg_0785.cr2 | 1 -
- 201304/jmg_0785.jpg | 1 -
- 201304/jmg_0786.cr2 | 1 -
- 201304/jmg_0786.jpg | 1 -
- 201304/jmg_0787.cr2 | 1 -
- 201304/jmg_0787.jpg | 1 -
- 201304/jmg_0789.jpg | 1 -
- 201304/jmg_0790.jpg | 1 -
- 201304/jmg_0791.jpg | 1 -
- 201304/jmg_0800.jpg | 1 -
- 201304/jmg_0801.jpg | 1 -
- 201304/jmg_0802.jpg | 1 -
- 201304/jmg_0803.jpg | 1 -
- 201304/jmg_0809.jpg | 1 -
- 201304/jmg_0810.jpg | 1 -
- 201304/jmg_0812.jpg | 1 -
- 201304/jmg_0813.jpg | 1 -
- 201304/jmg_0824.jpg | 1 -
- 201304/jmg_0825.jpg | 1 -
- 201304/jmg_0827.jpg | 1 -
- 201304/jmg_0831.jpg | 1 -
- 201304/jmg_0833.jpg | 1 -
- 201304/jmg_0834.jpg | 1 -
- 201304/jmg_0836.jpg | 1 -
- 201304/jmg_0837.jpg | 1 -
- 201304/jmg_0845.jpg | 1 -
- 201304/jmg_0846.jpg | 1 -
- 201304/jmg_0847.jpg | 1 -
- 201304/jmg_0848.jpg | 1 -
- 201304/jmg_0849.jpg | 1 -
- 201304/jmg_0850.jpg | 1 -
- 201304/jmg_0851.jpg | 1 -
- 201304/jmg_0857.jpg | 1 -
- 201304/jmg_0858.jpg | 1 -
- 201304/jmg_0860.jpg | 1 -
- 201304/jmg_0861.jpg | 1 -
- 201304/jmg_0862.jpg | 1 -
- 201304/jmg_0863.jpg | 1 -
- 201304/jmg_0864.jpg | 1 -
- 201304/jmg_0866.jpg | 1 -
- 201304/jmg_0867.jpg | 1 -
- 201304/jmg_0868.cr2 | 1 -
- 201304/jmg_0868.jpg | 1 -
- 201304/jmg_0869.cr2 | 1 -
- 201304/jmg_0869.jpg | 1 -
- 201304/jmg_0872.cr2 | 1 -
- 201304/jmg_0872.jpg | 1 -
- 201304/jmg_0874.cr2 | 1 -
- 201304/jmg_0874.jpg | 1 -
- 201304/jmg_0875.jpg | 1 -
- 201304/jmg_0875_raw.jpg | 1 -
- 201304/jmg_0876.jpg | 1 -
- 201304/jmg_0877.jpg | 1 -
- 201304/jmg_0878.jpg | 1 -
- 201304/jmg_0880.jpg | 1 -
- 201304/jmg_0881.jpg | 1 -
- 201304/jmg_0882.jpg | 1 -
- 201304/jmg_0884.jpg | 1 -
- 201304/jmg_0885.jpg | 1 -
- 201304/jmg_0886.jpg | 1 -
- 201304/jmg_0888.jpg | 1 -
- 201304/jmg_0889.jpg | 1 -
- 201304/jmg_0890.jpg | 1 -
- 201304/jmg_0891.jpg | 1 -
- 201304/jmg_0892.jpg | 1 -
- 201304/jmg_0893.cr2 | 1 -
- 201304/jmg_0893.jpg | 1 -
- 201304/jmg_0894.jpg | 1 -
- 201304/jmg_0896.jpg | 1 -
- 201304/jmg_0897.jpg | 1 -
- 201304/jmg_0898.jpg | 1 -
- 201304/jmg_0899.jpg | 1 -
- 201304/jmg_0900.jpg | 1 -
- 201304/jmg_0902.jpg | 1 -
- 201304/jmg_0905.jpg | 1 -
- 201304/jmg_0921.jpg | 1 -
- 201304/jmg_0922.jpg | 1 -
- 201304/jmg_0932.jpg | 1 -
- 201304/jmg_0935.jpg | 1 -
- 201304/jmg_0936.jpg | 1 -
- 201304/jmg_0937.jpg | 1 -
- 201304/jmg_0938.jpg | 1 -
- 201304/jmg_0942.jpg | 1 -
- 201304/jmg_0944.jpg | 1 -
- 201304/jmg_0946.jpg | 1 -
- 201304/jmg_0947.jpg | 1 -
- 201304/jmg_0948.jpg | 1 -
- 201304/jmg_0949.jpg | 1 -
- 201304/jmg_0950.jpg | 1 -
- 201304/jmg_0951.jpg | 1 -
- 201304/jmg_0952.jpg | 1 -
- 201304/jmg_0953.jpg | 1 -
- 201304/jmg_0954.jpg | 1 -
- 201304/jmg_0958.jpg | 1 -
- 201304/jmg_0959.jpg | 1 -
- 201304/jmg_0960.jpg | 1 -
- 201304/jmg_0961.jpg | 1 -
- 201304/jmg_0962.jpg | 1 -
- 201304/jmg_0963.jpg | 1 -
- 201304/jmg_0964.jpg | 1 -
- 201304/jmg_0965.jpg | 1 -
- 201304/jmg_0966.jpg | 1 -
- 201304/jmg_0967.jpg | 1 -
- 201304/jmg_0968.jpg | 1 -
- 201304/jmg_0969.jpg | 1 -
- 201304/jmg_0976.cr2 | 1 -
- 201304/jmg_0976.jpg | 1 -
- 201304/jmg_0978.jpg | 1 -
- 201304/jmg_0979.jpg | 1 -
- 201304/jmg_0980.jpg | 1 -
- 201304/jmg_0981.cr2 | 1 -
- 201304/jmg_0981.jpg | 1 -
- 201304/jmg_0982.jpg | 1 -
- 201304/jmg_0984.cr2 | 1 -
- 201304/jmg_0984.jpg | 1 -
- 201304/jmg_0987.jpg | 1 -
- 201304/jmg_0988.jpg | 1 -
- 201304/jmg_0989.jpg | 1 -
- 201304/jmg_0990.jpg | 1 -
- 201304/jmg_0991.jpg | 1 -
- 201304/jmg_0992.jpg | 1 -
- 201304/jmg_1206.jpg | 1 -
- 201304/jmg_1207.jpg | 1 -
- 201304/jmg_1208.jpg | 1 -
- 201304/jmg_1209.jpg | 1 -
- 201304/jmg_1210.cr2 | 1 -
- 201304/jmg_1210.jpg | 1 -
- 201304/jmg_1211.jpg | 1 -
- 201304/jmg_1212.jpg | 1 -
- 201304/jmg_1213.jpg | 1 -
- 201304/jmg_1214.cr2 | 1 -
- 201304/jmg_1214.jpg | 1 -
- 201304/jmg_1215.jpg | 1 -
- 201304/jmg_1216.cr2 | 1 -
- 201304/jmg_1216.jpg | 1 -
- 201304/jmg_1217.cr2 | 1 -
- 201304/jmg_1217.jpg | 1 -
- 201304/jmg_1220.cr2 | 1 -
- 201304/jmg_1220.jpg | 1 -
- 201304/jmg_1222.cr2 | 1 -
- 201304/jmg_1222.jpg | 1 -
- 201304/jmg_1223.jpg | 1 -
- 201306/jmg_1465.jpg | 1 -
- 201306/jmg_1466.jpg | 1 -
- 201306/jmg_1467.jpg | 1 -
- 201306/jmg_1468.jpg | 1 -
- 201306/jmg_1469.jpg | 1 -
- 201306/jmg_1470.jpg | 1 -
- 201306/jmg_1471.jpg | 1 -
- 201306/jmg_1472.jpg | 1 -
- 201306/jmg_1473.jpg | 1 -
- 201306/jmg_1475.jpg | 1 -
- 201306/jmg_1476.jpg | 1 -
- 201306/jmg_1477.jpg | 1 -
- 201306/jmg_1478.jpg | 1 -
- 201306/jmg_1479.jpg | 1 -
- 201306/jmg_1480.jpg | 1 -
- 201306/jmg_1481.jpg | 1 -
- 201306/jmg_1482.jpg | 1 -
- 201306/jmg_1483.jpg | 1 -
- 201306/jmg_1484.jpg | 1 -
- 201306/jmg_1485.jpg | 1 -
- 201306/jmg_1486.jpg | 1 -
- 201306/jmg_1487.jpg | 1 -
- 201306/jmg_1488.jpg | 1 -
- 201306/jmg_1489.jpg | 1 -
- 201306/jmg_1490.jpg | 1 -
- 201306/jmg_1491.jpg | 1 -
- 201306/jmg_1492.jpg | 1 -
- 201306/jmg_1495.jpg | 1 -
- 201306/jmg_1496.jpg | 1 -
- 201306/jmg_1498.jpg | 1 -
- 201306/jmg_1499.jpg | 1 -
- 201306/jmg_1500.jpg | 1 -
- 201306/jmg_1501.jpg | 1 -
- 201306/jmg_1502.jpg | 1 -
- 201306/jmg_1504.jpg | 1 -
- 201306/jmg_1506.jpg | 1 -
- 201306/jmg_1510.jpg | 1 -
- 201306/jmg_1512.jpg | 1 -
- 201306/jmg_1513.jpg | 1 -
- 201306/jmg_1514.jpg | 1 -
- 201306/jmg_1515.jpg | 1 -
- 201306/jmg_1517.jpg | 1 -
- 201306/jmg_1520.jpg | 1 -
- 201306/jmg_1521.jpg | 1 -
- 201306/jmg_1526.jpg | 1 -
- 201306/jmg_1533.jpg | 1 -
- 201306/jmg_1540.jpg | 1 -
- 201306/jmg_1546.jpg | 1 -
- 201306/jmg_1547.jpg | 1 -
- 201306/jmg_1549.jpg | 1 -
- 201306/jmg_1550.jpg | 1 -
- 201306/jmg_1551.jpg | 1 -
- 201306/jmg_1552.jpg | 1 -
- 201306/jmg_1553.jpg | 1 -
- 201306/jmg_1555.jpg | 1 -
- 201306/jmg_1556.jpg | 1 -
- 201306/jmg_1557.jpg | 1 -
- 201306/jmg_1558.jpg | 1 -
- 201306/jmg_1559.jpg | 1 -
- 201306/jmg_1560.jpg | 1 -
- 201306/jmg_1562.jpg | 1 -
- 201306/jmg_1566.jpg | 1 -
- 201306/jmg_1568.jpg | 1 -
- 201306/jmg_1570.jpg | 1 -
- 201306/jmg_1571.jpg | 1 -
- 201306/jmg_1572.jpg | 1 -
- 201306/jmg_1574.jpg | 1 -
- 201306/jmg_1575.jpg | 1 -
- 201306/jmg_1576.jpg | 1 -
- 201306/jmg_1577.jpg | 1 -
- 201306/jmg_1578.jpg | 1 -
- 201306/jmg_1579.jpg | 1 -
- 201306/jmg_1579_raw.jpg | 1 -
- 201306/jmg_1581.jpg | 1 -
- 201306/jmg_1583.jpg | 1 -
- 201306/jmg_1583_cut.jpg | 1 -
- 201306/jmg_1583_raw.jpg | 1 -
- 201306/jmg_1584.jpg | 1 -
- 201306/jmg_1586.jpg | 1 -
- 201306/jmg_1587.jpg | 1 -
- 201306/jmg_1588.jpg | 1 -
- 201306/jmg_1589.jpg | 1 -
- 201306/jmg_1591.jpg | 1 -
- 201306/jmg_1592.jpg | 1 -
- 201306/jmg_1593.jpg | 1 -
- 201306/jmg_1593_raw.jpg | 1 -
- 201306/jmg_1594.jpg | 1 -
- 201306/jmg_1594_raw.jpg | 1 -
- 201306/jmg_1595.jpg | 1 -
- 201306/jmg_1596.jpg | 1 -
- 201306/jmg_1597.jpg | 1 -
- 201306/jmg_1599.jpg | 1 -
- 201306/jmg_1626.jpg | 1 -
- 201306/jmg_1628.jpg | 1 -
- 201306/jmg_1629.jpg | 1 -
- 201306/jmg_1630.jpg | 1 -
- 201306/jmg_1631.jpg | 1 -
- 201306/jmg_1633.jpg | 1 -
- 201306/jmg_1635.jpg | 1 -
- 201306/jmg_1636.jpg | 1 -
- 201306/jmg_1637.jpg | 1 -
- 201306/jmg_1638.jpg | 1 -
- 201306/jmg_1640.jpg | 1 -
- 201306/jmg_1642.jpg | 1 -
- 201306/jmg_1643.jpg | 1 -
- 201306/jmg_1644.jpg | 1 -
- 201306/jmg_1647.jpg | 1 -
- 201306/jmg_1649.jpg | 1 -
- 201306/jmg_1650.jpg | 1 -
- 201306/jmg_1651.jpg | 1 -
- 201306/jmg_1652.jpg | 1 -
- 201306/jmg_1653.jpg | 1 -
- 201306/jmg_1655.jpg | 1 -
- 201306/jmg_1656.jpg | 1 -
- 201306/jmg_1660.jpg | 1 -
- 201306/jmg_1667.jpg | 1 -
- 201306/jmg_1682.jpg | 1 -
- 201306/jmg_1688.jpg | 1 -
- 201306/jmg_1689.jpg | 1 -
- 201306/jmg_1701.jpg | 1 -
- 201306/jmg_1702.jpg | 1 -
- 201306/jmg_1703.jpg | 1 -
- 201306/jmg_1710.jpg | 1 -
- 201306/jmg_1710_raw.jpg | 1 -
- 201306/jmg_1715.jpg | 1 -
- 201306/jmg_1716.jpg | 1 -
- 201306/jmg_1719.jpg | 1 -
- 201306/jmg_1722.jpg | 1 -
- 201306/jmg_1723.jpg | 1 -
- 201306/jmg_1729.cr2 | 1 -
- 201308/jmg_2038.jpg | 1 -
- 201308/jmg_2039.jpg | 1 -
- 201308/jmg_2040.jpg | 1 -
- 201308/jmg_2041.jpg | 1 -
- 201308/jmg_2042.jpg | 1 -
- 201308/jmg_2043.jpg | 1 -
- 201308/jmg_2045.jpg | 1 -
- 201308/jmg_2047.jpg | 1 -
- 201308/jmg_2048.jpg | 1 -
- 201308/jmg_2049.jpg | 1 -
- 201308/jmg_2050.jpg | 1 -
- 201308/jmg_2051.jpg | 1 -
- 201308/jmg_2052.jpg | 1 -
- 201308/jmg_2053.jpg | 1 -
- 201308/jmg_2054.jpg | 1 -
- 201308/jmg_2055.jpg | 1 -
- 201308/jmg_2056.jpg | 1 -
- 201308/jmg_2057.jpg | 1 -
- 201308/jmg_2058.jpg | 1 -
- 201308/jmg_2059.jpg | 1 -
- 201308/jmg_2060.jpg | 1 -
- 201308/jmg_2061.jpg | 1 -
- 201308/jmg_2062.jpg | 1 -
- 201308/jmg_2089.cr2 | 1 -
- 201308/jmg_2089.jpg | 1 -
- 201308/jmg_2089_raw.jpg | 1 -
- 201308/jmg_2090.jpg | 1 -
- 201308/jmg_2091.jpg | 1 -
- 201308/jmg_2092.jpg | 1 -
- 201308/jmg_2093.jpg | 1 -
- 201308/jmg_2096.jpg | 1 -
- 201308/jmg_2097.jpg | 1 -
- 201308/jmg_2098.jpg | 1 -
- 201308/jmg_2099.cr2 | 1 -
- 201308/jmg_2099.jpg | 1 -
- 201308/jmg_2099_raw.jpg | 1 -
- 201308/jmg_2100.cr2 | 1 -
- 201308/jmg_2100.jpg | 1 -
- 201308/jmg_2100_raw.jpg | 1 -
- 201308/jmg_2102.jpg | 1 -
- 201308/jmg_2103.jpg | 1 -
- 201308/jmg_2104.jpg | 1 -
- 201308/jmg_2105.jpg | 1 -
- 201308/jmg_2106.jpg | 1 -
- 201308/jmg_2107.jpg | 1 -
- 201308/jmg_2108.jpg | 1 -
- 201308/jmg_2109.jpg | 1 -
- 201308/jmg_2110.jpg | 1 -
- 201308/jmg_2111.jpg | 1 -
- 201308/jmg_2112.jpg | 1 -
- 201308/jmg_2113.jpg | 1 -
- 201308/jmg_2114.jpg | 1 -
- 201308/jmg_2115.jpg | 1 -
- 201308/jmg_2117.jpg | 1 -
- 201308/jmg_2118.jpg | 1 -
- 201308/jmg_2119.jpg | 1 -
- 201308/jmg_2120.jpg | 1 -
- 201308/jmg_2122.jpg | 1 -
- 201308/jmg_2125.jpg | 1 -
- 201308/jmg_2127.jpg | 1 -
- 201308/jmg_2129.jpg | 1 -
- 201308/jmg_2130.jpg | 1 -
- 201308/jmg_2132.jpg | 1 -
- 201308/jmg_2134.jpg | 1 -
- 201308/jmg_2135.jpg | 1 -
- 201308/jmg_2136.jpg | 1 -
- 201308/jmg_2137.jpg | 1 -
- 201308/jmg_2138.jpg | 1 -
- 201308/jmg_2148.jpg | 1 -
- 201308/jmg_2150.jpg | 1 -
- 201308/jmg_2151.jpg | 1 -
- 201308/jmg_2156.jpg | 1 -
- 201308/jmg_2158.cr2 | 1 -
- 201308/jmg_2158.jpg | 1 -
- 201308/jmg_2159.jpg | 1 -
- 201308/jmg_2160.jpg | 1 -
- 201308/jmg_2161.jpg | 1 -
- 201308/jmg_2162.jpg | 1 -
- 201308/jmg_2165.jpg | 1 -
- 201308/jmg_2166.jpg | 1 -
- 201308/jmg_2168.jpg | 1 -
- 201308/jmg_2169.jpg | 1 -
- 201308/jmg_2171.jpg | 1 -
- 201308/jmg_2173.jpg | 1 -
- 201308/jmg_2174.jpg | 1 -
- 201308/jmg_2175.jpg | 1 -
- 201308/jmg_2177.jpg | 1 -
- 201308/jmg_2178.jpg | 1 -
- 201308/jmg_2180.jpg | 1 -
- 201308/jmg_2181.jpg | 1 -
- 201308/jmg_2182.jpg | 1 -
- 201308/jmg_2183.jpg | 1 -
- 201308/jmg_2184.jpg | 1 -
- 201308/jmg_2187.jpg | 1 -
- 201308/jmg_2188.jpg | 1 -
- 201308/jmg_2189.jpg | 1 -
- 201308/jmg_2191.cr2 | 1 -
- 201308/jmg_2191.jpg | 1 -
- 201308/jmg_2193.cr2 | 1 -
- 201308/jmg_2193.jpg | 1 -
- 201308/jmg_2194.cr2 | 1 -
- 201308/jmg_2194.jpg | 1 -
- 201308/jmg_2197.cr2 | 1 -
- 201308/jmg_2197.jpg | 1 -
- 201308/jmg_2200.cr2 | 1 -
- 201308/jmg_2200.jpg | 1 -
- 201308/jmg_2201.cr2 | 1 -
- 201308/jmg_2201.jpg | 1 -
- 201308/jmg_2202.cr2 | 1 -
- 201308/jmg_2202.jpg | 1 -
- 201308/jmg_2209.jpg | 1 -
- 201308/jmg_2210.jpg | 1 -
- 201308/jmg_2215.jpg | 1 -
- 201308/jmg_2216.jpg | 1 -
- 201308/jmg_2217.cr2 | 1 -
- 201308/jmg_2217.jpg | 1 -
- 201308/jmg_2219.cr2 | 1 -
- 201308/jmg_2219.jpg | 1 -
- 201308/jmg_2223.jpg | 1 -
- 201308/jmg_2224.jpg | 1 -
- 201308/jmg_2225.cr2 | 1 -
- 201308/jmg_2225.jpg | 1 -
- 201308/jmg_2227.jpg | 1 -
- 201308/jmg_2228.jpg | 1 -
- 201308/jmg_2235.jpg | 1 -
- 201308/jmg_2237.jpg | 1 -
- 201308/jmg_2238.jpg | 1 -
- 201308/jmg_2239.cr2 | 1 -
- 201308/jmg_2239.jpg | 1 -
- 201308/jmg_2239_raw.jpg | 1 -
- 201308/jmg_2240.jpg | 1 -
- 201308/jmg_2243.jpg | 1 -
- 201308/jmg_2244.jpg | 1 -
- 201308/jmg_2245.jpg | 1 -
- 201308/jmg_2247.cr2 | 1 -
- 201308/jmg_2247.jpg | 1 -
- 201308/jmg_2249.jpg | 1 -
- 201308/jmg_2250.cr2 | 1 -
- 201308/jmg_2250.jpg | 1 -
- 201308/jmg_2252.jpg | 1 -
- 201308/jmg_2253.jpg | 1 -
- 201308/jmg_2254.jpg | 1 -
- incoming/5d/201203/jmg_8701.cr2 | 1 +
- incoming/5d/201203/jmg_8702.jpg | 1 +
- incoming/5d/201203/jmg_8705.jpg | 1 +
- incoming/5d/201203/jmg_8711.jpg | 1 +
- incoming/5d/201203/jmg_8717.jpg | 1 +
- incoming/5d/201203/jmg_8718.jpg | 1 +
- incoming/5d/201203/jmg_8719.jpg | 1 +
- incoming/5d/201203/jmg_8721.jpg | 1 +
- incoming/5d/201203/jmg_8725.jpg | 1 +
- incoming/5d/201203/jmg_8726.jpg | 1 +
- incoming/5d/201203/jmg_8731.jpg | 1 +
- incoming/5d/201203/jmg_8745.jpg | 1 +
- incoming/5d/201203/jmg_8747_raw.jpg | 1 +
- incoming/5d/201203/jmg_8750.cr2 | 1 +
- incoming/5d/201203/jmg_8750.jpg | 1 +
- incoming/5d/201207/jmg_9048.jpg | 1 +
- incoming/5d/201207/jmg_9053.jpg | 1 +
- incoming/5d/201207/jmg_9054.jpg | 1 +
- incoming/5d/201207/jmg_9069.cr2 | 1 +
- incoming/5d/201207/jmg_9069.jpg | 1 +
- incoming/5d/201207/jmg_9070.cr2 | 1 +
- incoming/5d/201207/jmg_9070.jpg | 1 +
- incoming/5d/201207/jmg_9072.cr2 | 1 +
- incoming/5d/201207/jmg_9072.jpg | 1 +
- incoming/5d/201207/jmg_9076.cr2 | 1 +
- incoming/5d/201207/jmg_9076.jpg | 1 +
- incoming/5d/201302/jmg_0502.cr2 | 1 +
- incoming/5d/201302/jmg_0502.jpg | 1 +
- incoming/5d/201302/jmg_0503.jpg | 1 +
- incoming/5d/201302/jmg_0507.jpg | 1 +
- incoming/5d/201302/jmg_0510.jpg | 1 +
- incoming/5d/201302/jmg_0512.jpg | 1 +
- incoming/5d/201302/jmg_0513.jpg | 1 +
- incoming/5d/201302/jmg_0514.jpg | 1 +
- incoming/5d/201302/jmg_0516.jpg | 1 +
- incoming/5d/201302/jmg_0517.jpg | 1 +
- incoming/5d/201302/jmg_0518.jpg | 1 +
- incoming/5d/201302/jmg_0521.jpg | 1 +
- incoming/5d/201302/jmg_0522.jpg | 1 +
- incoming/5d/201302/jmg_0523.jpg | 1 +
- incoming/5d/201302/jmg_0524.jpg | 1 +
- incoming/5d/201302/jmg_0526.jpg | 1 +
- incoming/5d/201302/jmg_0527.jpg | 1 +
- incoming/5d/201302/jmg_0528.jpg | 1 +
- incoming/5d/201302/jmg_0532.cr2 | 1 +
- incoming/5d/201302/jmg_0532.jpg | 1 +
- incoming/5d/201302/jmg_0534.jpg | 1 +
- incoming/5d/201302/jmg_0535.jpg | 1 +
- incoming/5d/201302/jmg_0537.jpg | 1 +
- incoming/5d/201302/jmg_0539.jpg | 1 +
- incoming/5d/201302/jmg_0541.jpg | 1 +
- incoming/5d/201302/jmg_0543.jpg | 1 +
- incoming/5d/jmg_0021.jpg | 1 +
- incoming/5d/jmg_0025.jpg | 1 +
- incoming/5d/jmg_0026.jpg | 1 +
- incoming/5d/jmg_0027.jpg | 1 +
- incoming/5d/jmg_0034.jpg | 1 +
- incoming/5d/jmg_0035.jpg | 1 +
- incoming/5d/jmg_0036.jpg | 1 +
- incoming/5d/jmg_0130.jpg | 1 +
- incoming/5d/jmg_0131.jpg | 1 +
- incoming/5d/jmg_0133.jpg | 1 +
- incoming/5d/jmg_0155.jpg | 1 +
- incoming/5d/jmg_0156.jpg | 1 +
- incoming/5d/jmg_0158.cr2 | 1 +
- incoming/5d/jmg_0165.cr2 | 1 +
- incoming/5d/jmg_0166.cr2 | 1 +
- incoming/5d/jmg_0178.cr2 | 1 +
- incoming/5d/jmg_0179.jpg | 1 +
- incoming/5d/jmg_0180.cr2 | 1 +
- incoming/5d/jmg_0184.jpg | 1 +
- incoming/5d/jmg_0185.cr2 | 1 +
- incoming/5d/jmg_0187.cr2 | 1 +
- incoming/5d/jmg_0310.jpg | 1 +
- incoming/5d/jmg_0312.jpg | 1 +
- incoming/5d/jmg_0315.jpg | 1 +
- incoming/5d/jmg_0340.jpg | 1 +
- incoming/5d/jmg_0357.jpg | 1 +
- incoming/5d/jmg_0364.jpg | 1 +
- incoming/5d/jmg_0365.jpg | 1 +
- incoming/5d/jmg_0368.jpg | 1 +
- incoming/5d/jmg_0374.jpg | 1 +
- incoming/5d/jmg_0375.jpg | 1 +
- incoming/5d/jmg_0386.jpg | 1 +
- incoming/5d/jmg_0399.jpg | 1 +
- incoming/5d/jmg_0411.jpg | 1 +
- incoming/5d/jmg_0418.jpg | 1 +
- incoming/5d/jmg_0476.cr2 | 1 +
- incoming/5d/jmg_0476.jpg | 1 +
- incoming/5d/jmg_0503.jpg | 1 +
- incoming/5d/jmg_0507.cr2 | 1 +
- incoming/5d/jmg_0513.cr2 | 1 +
- incoming/5d/jmg_0513.jpg | 1 +
- incoming/5d/jmg_0516.cr2 | 1 +
- incoming/5d/jmg_0517.cr2 | 1 +
- incoming/5d/jmg_0518.jpg | 1 +
- incoming/5d/jmg_0522.cr2 | 1 +
- incoming/5d/jmg_0524.cr2 | 1 +
- incoming/5d/jmg_0524.jpg | 1 +
- incoming/5d/jmg_0530.jpg | 1 +
- incoming/5d/jmg_0541.cr2 | 1 +
- incoming/5d/jmg_0550.jpg | 1 +
- incoming/5d/jmg_0554.jpg | 1 +
- incoming/5d/jmg_0555.jpg | 1 +
- incoming/5d/jmg_0558.jpg | 1 +
- incoming/5d/jmg_0563.jpg | 1 +
- incoming/5d/jmg_0573.jpg | 1 +
- incoming/5d/jmg_0575.cr2 | 1 +
- incoming/5d/jmg_0578.cr2 | 1 +
- incoming/5d/jmg_0579.cr2 | 1 +
- incoming/5d/jmg_0582.jpg | 1 +
- incoming/5d/jmg_0593.cr2 | 1 +
- incoming/5d/jmg_0594.cr2 | 1 +
- incoming/5d/jmg_0594.jpg | 1 +
- incoming/5d/jmg_0595.cr2 | 1 +
- incoming/5d/jmg_0600.jpg | 1 +
- incoming/5d/jmg_0606.cr2 | 1 +
- incoming/5d/jmg_0607.jpg | 1 +
- incoming/5d/jmg_0610.cr2 | 1 +
- incoming/5d/jmg_0610.jpg | 1 +
- incoming/5d/jmg_0612.jpg | 1 +
- incoming/5d/jmg_0613.cr2 | 1 +
- incoming/5d/jmg_0614.jpg | 1 +
- incoming/5d/jmg_0619.cr2 | 1 +
- incoming/5d/jmg_0623.jpg | 1 +
- incoming/5d/jmg_0628.cr2 | 1 +
- incoming/5d/jmg_0628.jpg | 1 +
- incoming/5d/jmg_0639.jpg | 1 +
- incoming/5d/jmg_0645.cr2 | 1 +
- incoming/5d/jmg_0646.jpg | 1 +
- incoming/5d/jmg_0647.cr2 | 1 +
- incoming/5d/jmg_0648.jpg | 1 +
- incoming/5d/jmg_0649.jpg | 1 +
- incoming/5d/jmg_0655.jpg | 1 +
- incoming/5d/jmg_0667.jpg | 1 +
- incoming/5d/jmg_0670.jpg | 1 +
- incoming/5d/jmg_0673.jpg | 1 +
- incoming/5d/jmg_0679.jpg | 1 +
- incoming/5d/jmg_0685.jpg | 1 +
- incoming/5d/jmg_0699.cr2 | 1 +
- incoming/5d/jmg_0700.cr2 | 1 +
- incoming/5d/jmg_0701.cr2 | 1 +
- incoming/5d/jmg_0708.jpg | 1 +
- incoming/5d/jmg_0718.jpg | 1 +
- incoming/5d/jmg_0726.cr2 | 1 +
- incoming/5d/jmg_0728.jpg | 1 +
- incoming/5d/jmg_0730.jpg | 1 +
- incoming/5d/jmg_0734.jpg | 1 +
- incoming/5d/jmg_0740.jpg | 1 +
- incoming/5d/jmg_0743.cr2 | 1 +
- incoming/5d/jmg_0744.cr2 | 1 +
- incoming/5d/jmg_0745.cr2 | 1 +
- incoming/5d/jmg_0747.jpg | 1 +
- incoming/5d/jmg_0750.cr2 | 1 +
- incoming/5d/jmg_0755.cr2 | 1 +
- incoming/5d/jmg_0759.cr2 | 1 +
- incoming/5d/jmg_0760.cr2 | 1 +
- incoming/5d/jmg_0761.jpg | 1 +
- incoming/5d/jmg_0765.jpg | 1 +
- incoming/5d/jmg_0768.jpg | 1 +
- incoming/5d/jmg_0771.jpg | 1 +
- incoming/5d/jmg_0778.jpg | 1 +
- incoming/5d/jmg_0780.jpg | 1 +
- incoming/5d/jmg_0782.cr2 | 1 +
- incoming/5d/jmg_0786.cr2 | 1 +
- incoming/5d/jmg_0787.cr2 | 1 +
- incoming/5d/jmg_0788.cr2 | 1 +
- incoming/5d/jmg_0794.jpg | 1 +
- incoming/5d/jmg_0796.jpg | 1 +
- incoming/5d/jmg_0801.cr2 | 1 +
- incoming/5d/jmg_0803.cr2 | 1 +
- incoming/5d/jmg_0804.cr2 | 1 +
- incoming/5d/jmg_0812.jpg | 1 +
- incoming/5d/jmg_0819.jpg | 1 +
- incoming/5d/jmg_0827.jpg | 1 +
- incoming/5d/jmg_0830.jpg | 1 +
- incoming/5d/jmg_0842.jpg | 1 +
- incoming/5d/jmg_0846.jpg | 1 +
- incoming/5d/jmg_0857.cr2 | 1 +
- incoming/5d/jmg_0863.jpg | 1 +
- incoming/5d/jmg_0866.cr2 | 1 +
- incoming/5d/jmg_0868.cr2 | 1 +
- incoming/5d/jmg_0868.jpg | 1 +
- incoming/5d/jmg_0870.jpg | 1 +
- incoming/5d/jmg_0877.jpg | 1 +
- incoming/5d/jmg_0882.cr2 | 1 +
- incoming/5d/jmg_0883.jpg | 1 +
- incoming/5d/jmg_0888.jpg | 1 +
- incoming/5d/jmg_0891.jpg | 1 +
- incoming/5d/jmg_0894.cr2 | 1 +
- incoming/5d/jmg_0896.cr2 | 1 +
- incoming/5d/jmg_0897.cr2 | 1 +
- incoming/5d/jmg_0898.jpg | 1 +
- incoming/5d/jmg_0899.cr2 | 1 +
- incoming/5d/jmg_0900.jpg | 1 +
- incoming/5d/jmg_0905.jpg | 1 +
- incoming/5d/jmg_0908.jpg | 1 +
- incoming/5d/jmg_0914.jpg | 1 +
- incoming/5d/jmg_0915.jpg | 1 +
- incoming/5d/jmg_0916.jpg | 1 +
- incoming/5d/jmg_0923.jpg | 1 +
- incoming/5d/jmg_0924.jpg | 1 +
- incoming/5d/jmg_0926.jpg | 1 +
- incoming/5d/jmg_0928.jpg | 1 +
- incoming/5d/jmg_0929.jpg | 1 +
- incoming/5d/jmg_0936.jpg | 1 +
- incoming/5d/jmg_0942.jpg | 1 +
- incoming/5d/jmg_0944.jpg | 1 +
- incoming/5d/jmg_0948.jpg | 1 +
- incoming/5d/jmg_0960.jpg | 1 +
- incoming/5d/jmg_0966.jpg | 1 +
- incoming/5d/jmg_0970.cr2 | 1 +
- incoming/5d/jmg_0970.jpg | 1 +
- incoming/5d/jmg_0972.jpg | 1 +
- incoming/5d/jmg_0976.jpg | 1 +
- incoming/5d/jmg_0983.cr2 | 1 +
- incoming/5d/jmg_0985.cr2 | 1 +
- incoming/5d/jmg_0985.jpg | 1 +
- incoming/5d/jmg_0994.jpg | 1 +
- incoming/5d/jmg_1005.jpg | 2 +-
- incoming/5d/jmg_1009.jpg | 2 +-
- incoming/5d/jmg_1012.jpg | 2 +-
- incoming/5d/jmg_1020.jpg | 2 +-
- incoming/5d/jmg_1021.jpg | 2 +-
- incoming/5d/jmg_1032.jpg | 2 +-
- incoming/5d/jmg_1033.jpg | 2 +-
- incoming/5d/jmg_1037.jpg | 2 +-
- incoming/5d/jmg_1039.jpg | 2 +-
- incoming/5d/jmg_1048.jpg | 2 +-
- incoming/5d/jmg_1051.jpg | 2 +-
- incoming/5d/jmg_1063.jpg | 2 +-
- incoming/5d/jmg_1064.jpg | 2 +-
- incoming/5d/jmg_1067.jpg | 2 +-
- incoming/5d/jmg_1116.jpg | 2 +-
- incoming/5d/jmg_1118.jpg | 2 +-
- incoming/5d/jmg_1125.jpg | 2 +-
- incoming/5d/jmg_1126.jpg | 2 +-
- incoming/5d/jmg_1129.jpg | 2 +-
- incoming/5d/jmg_1133.jpg | 2 +-
- incoming/5d/jmg_1138.jpg | 2 +-
- incoming/5d/jmg_1139.jpg | 2 +-
- incoming/5d/jmg_1143.jpg | 2 +-
- incoming/5d/jmg_1149.jpg | 2 +-
- incoming/5d/jmg_1150.jpg | 2 +-
- incoming/5d/jmg_1155.jpg | 2 +-
- incoming/5d/jmg_1160.jpg | 2 +-
- incoming/5d/jmg_1168.jpg | 2 +-
- incoming/5d/jmg_1173.jpg | 2 +-
- incoming/5d/jmg_1175.jpg | 2 +-
- incoming/5d/jmg_1177.jpg | 2 +-
- incoming/5d/jmg_1179.jpg | 2 +-
- incoming/5d/jmg_1183.jpg | 2 +-
- incoming/5d/jmg_1185.jpg | 2 +-
- incoming/5d/jmg_1189.jpg | 2 +-
- incoming/5d/jmg_1192.jpg | 2 +-
- incoming/5d/jmg_1199.jpg | 2 +-
- incoming/5d/jmg_1205.jpg | 2 +-
- incoming/5d/jmg_1209.cr2 | 1 +
- incoming/5d/jmg_1209.jpg | 1 +
- incoming/5d/jmg_1211.cr2 | 1 +
- incoming/5d/jmg_1211.jpg | 1 +
- incoming/5d/jmg_1217.cr2 | 1 +
- incoming/5d/jmg_1467.cr2 | 1 +
- incoming/5d/jmg_1469.jpg | 1 +
- incoming/5d/jmg_1470.cr2 | 1 +
- incoming/5d/jmg_1471.cr2 | 1 +
- incoming/5d/jmg_1472.cr2 | 1 +
- incoming/5d/jmg_1477.cr2 | 1 +
- incoming/5d/jmg_1477.jpg | 1 +
- incoming/5d/jmg_1481.cr2 | 1 +
- incoming/5d/jmg_1483.cr2 | 1 +
- incoming/5d/jmg_1485.jpg | 1 +
- incoming/5d/jmg_1488.jpg | 1 +
- incoming/5d/jmg_1491.jpg | 1 +
- incoming/5d/jmg_1496.cr2 | 1 +
- incoming/5d/jmg_1502.jpg | 1 +
- incoming/5d/jmg_1503.cr2 | 1 +
- incoming/5d/jmg_1504.jpg | 1 +
- incoming/5d/jmg_1507.jpg | 1 +
- incoming/5d/jmg_1515.jpg | 1 +
- incoming/5d/jmg_1520.jpg | 1 +
- incoming/5d/jmg_1523.jpg | 1 +
- incoming/5d/jmg_1525.jpg | 1 +
- incoming/5d/jmg_1539.jpg | 1 +
- incoming/5d/jmg_1542.jpg | 1 +
- incoming/5d/jmg_1546.jpg | 1 +
- incoming/5d/jmg_1547.cr2 | 1 +
- incoming/5d/jmg_1549.jpg | 1 +
- incoming/5d/jmg_1552.jpg | 1 +
- incoming/5d/jmg_1554.cr2 | 1 +
- incoming/5d/jmg_1555.cr2 | 1 +
- incoming/5d/jmg_1556.cr2 | 1 +
- incoming/5d/jmg_1559.cr2 | 1 +
- incoming/5d/jmg_1560.cr2 | 1 +
- incoming/5d/jmg_1561.cr2 | 1 +
- incoming/5d/jmg_1562.cr2 | 1 +
- incoming/5d/jmg_1565.cr2 | 1 +
- incoming/5d/jmg_1567.cr2 | 1 +
- incoming/5d/jmg_1572.cr2 | 1 +
- incoming/5d/jmg_1577.cr2 | 1 +
- incoming/5d/jmg_1578.jpg | 1 +
- incoming/5d/jmg_1583_cut.jpg | 1 +
- incoming/5d/jmg_1583_raw.jpg | 1 +
- incoming/5d/jmg_1592.cr2 | 1 +
- incoming/5d/jmg_1593.jpg | 1 +
- incoming/5d/jmg_1626.cr2 | 1 +
- incoming/5d/jmg_1627.jpg | 1 +
- incoming/5d/jmg_1628.cr2 | 1 +
- incoming/5d/jmg_1629.jpg | 1 +
- incoming/5d/jmg_1630.cr2 | 1 +
- incoming/5d/jmg_1631.cr2 | 1 +
- incoming/5d/jmg_1633.cr2 | 1 +
- incoming/5d/jmg_1638.jpg | 1 +
- incoming/5d/jmg_1639.cr2 | 1 +
- incoming/5d/jmg_1646.cr2 | 1 +
- incoming/5d/jmg_1646.jpg | 1 +
- incoming/5d/jmg_1650.jpg | 1 +
- incoming/5d/jmg_1651.cr2 | 1 +
- incoming/5d/jmg_1654.cr2 | 1 +
- incoming/5d/jmg_1656.jpg | 1 +
- incoming/5d/jmg_1677.jpg | 1 +
- incoming/5d/jmg_1689.jpg | 1 +
- incoming/5d/jmg_1701.jpg | 1 +
- incoming/5d/jmg_1703.jpg | 1 +
- incoming/5d/jmg_1723.jpg | 1 +
- incoming/5d/jmg_2039.jpg | 1 +
- incoming/5d/jmg_2041.jpg | 1 +
- incoming/5d/jmg_2048.cr2 | 1 +
- incoming/5d/jmg_2052.jpg | 1 +
- incoming/5d/jmg_2061.jpg | 1 +
- incoming/5d/jmg_2064_raw.jpg | 1 -
- incoming/5d/jmg_2065_mo.jpg | 1 -
- incoming/5d/jmg_2065_raw.jpg | 1 -
- incoming/5d/jmg_2066_mo.jpg | 1 -
- incoming/5d/jmg_2066_raw.jpg | 1 -
- incoming/5d/jmg_2090.jpg | 1 +
- incoming/5d/jmg_2093.jpg | 1 +
- incoming/5d/jmg_2100.cr2 | 1 +
- incoming/5d/jmg_2103.jpg | 1 +
- incoming/5d/jmg_2107.jpg | 1 +
- incoming/5d/jmg_2108.jpg | 1 +
- incoming/5d/jmg_2112.jpg | 1 +
- incoming/5d/jmg_2118.jpg | 1 +
- incoming/5d/jmg_2119.jpg | 1 +
- incoming/5d/jmg_2122.jpg | 1 +
- incoming/5d/jmg_2125.jpg | 1 +
- incoming/5d/jmg_2137.jpg | 1 +
- incoming/5d/jmg_2149.jpg | 1 +
- incoming/5d/jmg_2150.jpg | 1 +
- incoming/5d/jmg_2158.cr2 | 1 +
- incoming/5d/jmg_2160.jpg | 1 +
- incoming/5d/jmg_2165.jpg | 1 +
- incoming/5d/jmg_2188.jpg | 1 +
- incoming/5d/jmg_2189.jpg | 1 +
- incoming/5d/jmg_2193.jpg | 1 +
- incoming/5d/jmg_2194.cr2 | 1 +
- incoming/5d/jmg_2200.jpg | 1 +
- incoming/5d/jmg_2201.cr2 | 1 +
- incoming/5d/jmg_2201.jpg | 1 +
- incoming/5d/jmg_2210.jpg | 1 +
- incoming/5d/jmg_2215.cr2 | 1 +
- incoming/5d/jmg_2216.cr2 | 1 +
- incoming/5d/jmg_2216.jpg | 1 +
- incoming/5d/jmg_2224.jpg | 1 +
- incoming/5d/jmg_2235.jpg | 1 +
- incoming/5d/jmg_2238.jpg | 1 +
- incoming/5d/jmg_2239.cr2 | 1 +
- incoming/5d/jmg_2239.jpg | 1 +
- incoming/5d/jmg_2240.jpg | 1 +
- incoming/5d/jmg_2244.jpg | 1 +
- incoming/5d/jmg_2247.jpg | 1 +
- incoming/5d/jmg_7250.cr2 | 1 +
- incoming/5d/jmg_7250.jpg | 1 +
- incoming/5d/jmg_7256.jpg | 1 +
- incoming/5d/jmg_7257.cr2 | 1 +
- incoming/5d/jmg_7259.cr2 | 1 +
- incoming/5d/jmg_7263.jpg | 1 +
- incoming/5d/jmg_7265.cr2 | 1 +
- incoming/5d/jmg_7269.cr2 | 1 +
- incoming/5d/jmg_7270.cr2 | 1 +
- incoming/5d/jmg_7279.cr2 | 1 +
- incoming/5d/jmg_7286.cr2 | 1 +
- incoming/5d/jmg_7286.jpg | 1 +
- incoming/5d/jmg_7290.cr2 | 1 +
- incoming/5d/jmg_7290.jpg | 1 +
- incoming/5d/jmg_7293.cr2 | 1 +
- incoming/5d/jmg_7296.cr2 | 1 +
- incoming/5d/jmg_7299.jpg | 1 +
- incoming/5d/jmg_7300.cr2 | 1 +
- incoming/5d/jmg_7300.jpg | 1 +
- incoming/5d/jmg_7305_raw.jpg | 1 +
- incoming/5d/jmg_8532.cr2 | 1 +
- incoming/5d/jmg_8533.cr2 | 1 +
- incoming/5d/jmg_8534.cr2 | 1 +
- incoming/5d/jmg_8536.jpg | 1 +
- incoming/5d/jmg_8538.cr2 | 1 +
- incoming/5d/jmg_8549.cr2 | 1 +
- incoming/5d/jmg_8549.jpg | 1 +
- incoming/5d/jmg_8552.cr2 | 1 +
- incoming/5d/jmg_8557.cr2 | 1 +
- incoming/5d/jmg_8560.cr2 | 1 +
- incoming/5d/jmg_8565.cr2 | 1 +
- incoming/5d/jmg_8566.cr2 | 1 +
- incoming/5d/jmg_8569.jpg | 1 +
- incoming/5d/jmg_8575.jpg | 1 +
- incoming/5d/jmg_8576.jpg | 1 +
- incoming/5d/jmg_8578.cr2 | 1 +
- incoming/5d/jmg_8579.cr2 | 1 +
- incoming/5d/jmg_8580.jpg | 1 +
- incoming/5d/jmg_8583.cr2 | 1 +
- incoming/5d/jmg_8588.cr2 | 1 +
- incoming/5d/jmg_8589.cr2 | 1 +
- incoming/5d/jmg_8595.jpg | 1 +
- incoming/5d/jmg_8597.jpg | 1 +
- incoming/5d/jmg_8599.jpg | 1 +
- incoming/5d/jmg_8602.cr2 | 1 +
- incoming/5d/jmg_8603.cr2 | 1 +
- incoming/5d/jmg_8606.cr2 | 1 +
- incoming/5d/jmg_8606.jpg | 1 +
- incoming/5d/jmg_8609.jpg | 1 +
- incoming/5d/jmg_8613.jpg | 1 +
- incoming/5d/jmg_8615.cr2 | 1 +
- incoming/5d/jmg_8617.jpg | 1 +
- incoming/5d/jmg_8619.cr2 | 1 +
- incoming/5d/jmg_8620.jpg | 1 +
- incoming/5d/jmg_8625.jpg | 1 +
- incoming/5d/jmg_8627.jpg | 1 +
- incoming/5d/jmg_8628.jpg | 1 +
- incoming/5d/jmg_8632.cr2 | 1 +
- incoming/5d/jmg_8636.cr2 | 1 +
- incoming/5d/jmg_8636.jpg | 1 +
- incoming/5d/jmg_8637.cr2 | 1 +
- incoming/5d/jmg_8639.jpg | 1 +
- incoming/5d/jmg_8640.cr2 | 1 +
- incoming/5d/jmg_8655.jpg | 1 +
- incoming/5d/jmg_8657.jpg | 1 +
- incoming/5d/jmg_8670.cr2 | 1 +
- incoming/5d/jmg_8673.jpg | 1 +
- incoming/5d/jmg_8674.cr2 | 1 +
- incoming/5d/jmg_8676.cr2 | 1 +
- incoming/5d/jmg_8676.jpg | 1 +
- incoming/5d/jmg_8677.cr2 | 1 +
- incoming/5d/jmg_8681.jpg | 1 +
- incoming/5d/jmg_8682.cr2 | 1 +
- incoming/5d/jmg_8702.cr2 | 1 +
- incoming/5d/jmg_8702.jpg | 1 +
- incoming/5d/jmg_8707.jpg | 1 +
- incoming/5d/jmg_8714.jpg | 1 +
- incoming/5d/jmg_8716.jpg | 1 +
- incoming/5d/jmg_8717.cr2 | 1 +
- incoming/5d/jmg_8719.jpg | 1 +
- incoming/5d/jmg_8721.jpg | 1 +
- incoming/5d/jmg_8727.cr2 | 1 +
- incoming/5d/jmg_8730.jpg | 1 +
- incoming/5d/jmg_8736.cr2 | 1 +
- incoming/5d/jmg_8737.cr2 | 1 +
- incoming/5d/jmg_8742.cr2 | 1 +
- incoming/5d/jmg_8742.jpg | 1 +
- incoming/5d/jmg_8745.jpg | 1 +
- incoming/5d/jmg_8748.cr2 | 1 +
- incoming/5d/jmg_8748.jpg | 1 +
- incoming/5d/jmg_8751.cr2 | 1 +
- incoming/5d/jmg_8755.cr2 | 1 +
- incoming/5d/jmg_8757.cr2 | 1 +
- incoming/5d/jmg_8760.cr2 | 1 +
- incoming/5d/jmg_8760.jpg | 1 +
- incoming/5d/jmg_8765.cr2 | 1 +
- incoming/5d/jmg_8771.jpg | 1 +
- incoming/5d/jmg_8801.jpg | 1 +
- incoming/5d/jmg_8803.cr2 | 1 +
- incoming/5d/jmg_8803.jpg | 1 +
- incoming/5d/jmg_8804.jpg | 1 +
- incoming/5d/jmg_8805.jpg | 1 +
- incoming/5d/jmg_8813.jpg | 1 +
- incoming/5d/jmg_8816.cr2 | 1 +
- incoming/5d/jmg_8823.jpg | 1 +
- incoming/5d/jmg_8827.cr2 | 1 +
- incoming/5d/jmg_8829.cr2 | 1 +
- incoming/5d/jmg_8832.jpg | 1 +
- incoming/5d/jmg_8833.cr2 | 1 +
- incoming/5d/jmg_8837.cr2 | 1 +
- incoming/5d/jmg_8838.jpg | 1 +
- incoming/5d/jmg_8840.jpg | 1 +
- incoming/5d/jmg_8842.jpg | 1 +
- incoming/5d/jmg_8844.cr2 | 1 +
- incoming/5d/jmg_8850.cr2 | 1 +
- incoming/5d/jmg_8850.jpg | 1 +
- incoming/5d/jmg_8852.cr2 | 1 +
- incoming/5d/jmg_8853.cr2 | 1 +
- incoming/5d/jmg_8853.jpg | 1 +
- incoming/5d/jmg_8856.cr2 | 1 +
- incoming/5d/jmg_8859.jpg | 1 +
- incoming/5d/jmg_8863.jpg | 1 +
- incoming/5d/jmg_8870.jpg | 1 +
- incoming/5d/jmg_8871.cr2 | 1 +
- incoming/5d/jmg_8871.jpg | 1 +
- incoming/5d/jmg_8881.jpg | 1 +
- incoming/5d/jmg_8883.jpg | 1 +
- incoming/5d/jmg_8886.jpg | 1 +
- incoming/5d/jmg_8887.cr2 | 1 +
- incoming/5d/jmg_8889.cr2 | 1 +
- incoming/5d/jmg_8894.cr2 | 1 +
- incoming/5d/jmg_8897.cr2 | 1 +
- incoming/5d/jmg_8898.cr2 | 1 +
- incoming/5d/jmg_8900.jpg | 1 +
- incoming/5d/jmg_8901.cr2 | 1 +
- incoming/5d/jmg_8902.cr2 | 1 +
- incoming/5d/jmg_8904.cr2 | 1 +
- incoming/5d/jmg_8906.jpg | 1 +
- incoming/5d/jmg_8908.cr2 | 1 +
- incoming/5d/jmg_8920.cr2 | 1 +
- incoming/5d/jmg_8920.jpg | 1 +
- incoming/5d/jmg_8922.cr2 | 1 +
- incoming/5d/jmg_8922.jpg | 1 +
- incoming/5d/jmg_8923.cr2 | 1 +
- incoming/5d/jmg_8924.jpg | 1 +
- incoming/5d/jmg_8925.cr2 | 1 +
- incoming/5d/jmg_8929.jpg | 1 +
- incoming/5d/jmg_8930.jpg | 1 +
- incoming/5d/jmg_8937.cr2 | 1 +
- incoming/5d/jmg_8939.cr2 | 1 +
- incoming/5d/jmg_8940.jpg | 1 +
- incoming/5d/jmg_8941.jpg | 1 +
- incoming/5d/jmg_8943.cr2 | 1 +
- incoming/5d/jmg_8944.jpg | 1 +
- incoming/5d/jmg_8950.cr2 | 1 +
- incoming/5d/jmg_8951.jpg | 1 +
- incoming/5d/jmg_8955.jpg | 1 +
- incoming/5d/jmg_8959.cr2 | 1 +
- incoming/5d/jmg_8960.jpg | 1 +
- incoming/5d/jmg_8962.cr2 | 1 +
- incoming/5d/jmg_8964.cr2 | 1 +
- incoming/5d/jmg_8965.jpg | 1 +
- incoming/5d/jmg_8966.jpg | 1 +
- incoming/5d/jmg_8971.jpg | 1 +
- incoming/5d/jmg_8976.jpg | 1 +
- incoming/5d/jmg_8978.cr2 | 1 +
- incoming/5d/jmg_8981.jpg | 1 +
- incoming/5d/jmg_8982.jpg | 1 +
- incoming/5d/jmg_8985.jpg | 1 +
- incoming/5d/jmg_8988.cr2 | 1 +
- incoming/5d/jmg_8988.jpg | 1 +
- incoming/5d/jmg_8992.cr2 | 1 +
- incoming/5d/jmg_8995.jpg | 1 +
- incoming/5d/jmg_8996.cr2 | 1 +
- incoming/5d/jmg_8997.cr2 | 1 +
- incoming/5d/jmg_8999.cr2 | 1 +
- incoming/5d/jmg_9000.cr2 | 1 +
- incoming/5d/jmg_9015.cr2 | 1 +
- incoming/5d/jmg_9017.cr2 | 1 +
- incoming/5d/jmg_9019.cr2 | 1 +
- incoming/5d/jmg_9021.cr2 | 1 +
- incoming/5d/jmg_9021.jpg | 1 +
- incoming/5d/jmg_9022.cr2 | 1 +
- incoming/5d/jmg_9027.cr2 | 1 +
- incoming/5d/jmg_9028.jpg | 1 +
- incoming/5d/jmg_9031.cr2 | 1 +
- incoming/5d/jmg_9035.cr2 | 1 +
- incoming/5d/jmg_9043.jpg | 1 +
- incoming/5d/jmg_9057.cr2 | 1 +
- incoming/5d/jmg_9064.cr2 | 1 +
- incoming/5d/jmg_9077.jpg | 1 +
- incoming/5d/jmg_9078.jpg | 1 +
- incoming/5d/jmg_9081.jpg | 1 +
- incoming/5d/jmg_9082.cr2 | 1 +
- incoming/5d/jmg_9083.jpg | 1 +
- incoming/5d/jmg_9086.cr2 | 1 +
- incoming/5d/jmg_9088.jpg | 1 +
- incoming/5d/jmg_9308.jpg | 1 +
- incoming/5d/jmg_9312.cr2 | 1 +
- incoming/5d/jmg_9313.jpg | 1 +
- incoming/5d/jmg_9319.jpg | 1 +
- incoming/5d/jmg_9521.cr2 | 1 +
- incoming/5d/jmg_9522.cr2 | 1 +
- incoming/5d/jmg_9533.jpg | 1 +
- incoming/5d/jmg_9534.jpg | 1 +
- incoming/5d/jmg_9535.cr2 | 1 +
- incoming/5d/jmg_9538.cr2 | 1 +
- incoming/5d/jmg_9538.jpg | 1 +
- incoming/5d/jmg_9540.jpg | 1 +
- incoming/5d/jmg_9542.cr2 | 1 +
- incoming/5d/jmg_9545.jpg | 1 +
- incoming/5d/jmg_9554.jpg | 1 +
- incoming/5d/jmg_9555.jpg | 1 +
- incoming/5d/jmg_9558.jpg | 1 +
- incoming/5d/jmg_9561.cr2 | 1 +
- incoming/5d/jmg_9585.cr2 | 1 +
- incoming/5d/jmg_9587.jpg | 1 +
- incoming/5d/jmg_9591.jpg | 1 +
- incoming/5d/jmg_9595.jpg | 1 +
- incoming/5d/jmg_9598.cr2 | 1 +
- incoming/5d/jmg_9600.jpg | 1 +
- incoming/5d/jmg_9604.jpg | 1 +
- incoming/5d/jmg_9610.jpg | 1 +
- incoming/5d/jmg_9613.cr2 | 1 +
- incoming/5d/jmg_9613.jpg | 1 +
- incoming/5d/jmg_9614.cr2 | 1 +
- incoming/5d/jmg_9618.jpg | 1 +
- incoming/5d/jmg_9619.jpg | 1 +
- incoming/5d/jmg_9620.jpg | 1 +
- incoming/5d/jmg_9621.jpg | 1 +
- incoming/5d/jmg_9623.cr2 | 1 +
- incoming/5d/jmg_9746.jpg | 1 +
- incoming/5d/jmg_9763.cr2 | 1 +
- incoming/5d/jmg_9763.jpg | 1 +
- incoming/5d/jmg_9764.cr2 | 1 +
- incoming/5d/jmg_9772.jpg | 1 +
- incoming/5d/jmg_9773.jpg | 1 +
- incoming/5d/jmg_9781.jpg | 1 +
- incoming/5d/jmg_9790.jpg | 1 +
- incoming/5d/jmg_9800.jpg | 1 +
- incoming/5d/jmg_9808.jpg | 1 +
- incoming/5d/jmg_9830.jpg | 1 +
- incoming/5d/jmg_9834.cr2 | 1 +
- incoming/5d/jmg_9843.jpg | 1 +
- incoming/5d/jmg_9848.jpg | 1 +
- incoming/5d/jmg_9849.jpg | 1 +
- incoming/5d/jmg_9853.cr2 | 1 +
- incoming/5d/jmg_9856.jpg | 1 +
- incoming/5d/jmg_9857.cr2 | 1 +
- incoming/5d/jmg_9859.cr2 | 1 +
- incoming/5d/jmg_9860.jpg | 1 +
- incoming/5d/jmg_9917.jpg | 1 +
- incoming/5d/jmg_9923.jpg | 1 +
- incoming/5d/jmg_9926.jpg | 1 +
- incoming/5d/jmg_9975.cr2 | 1 +
- incoming/5d/jmg_9976.cr2 | 1 +
- incoming/5d/jmg_9978.jpg | 1 +
- incoming/5d/jmg_9988.jpg | 1 +
- incoming/5d/jmg_9997.cr2 | 1 +
- incoming/5d/jmg_9998.jpg | 1 +
- incoming/5d/jmg_9999.jpg | 1 +
- list_5d_repoB | 1 -
- only_on_repoB | 1 +
- dir/2012/dir2/jmg_0128.cr2 | 1 -
- dir/2012/dir2/jmg_0128.jpg | 1 -
- dir/2012/dir2/jmg_0129.cr2 | 1 -
- dir/2012/dir2/jmg_0129.jpg | 1 -
- dir/2012/dir2/jmg_0353.jpg | 1 -
- dir/2012/dir2/jmg_0354.jpg | 1 -
- dir/2012/dir2/jmg_0375.jpg | 1 -
- dir/2012/dir2/jmg_0376.jpg | 1 -
- dir/2012/dir2/jmg_0378.jpg | 1 -
- dir/2012/dir2/jmg_8707.cr2 | 1 -
- dir/2012/dir2/jmg_8707.jpg | 1 -
- dir/2012/dir2/jmg_8727.cr2 | 1 -
- dir/2012/dir2/jmg_8727.jpg | 1 -
- dir/2012/dir2/jmg_8728.cr2 | 1 -
- dir/2012/dir2/jmg_8728.jpg | 1 -
- dir/2012/dir2/jmg_8729.cr2 | 1 -
- dir/2012/dir2/jmg_8729.jpg | 1 -
- dir/2012/dir2/jmg_8740.cr2 | 1 -
- dir/2012/dir2/jmg_8740.jpg | 1 -
- dir/2012/dir2/jmg_8742.cr2 | 1 -
- dir/2012/dir2/jmg_8742.jpg | 1 -
- dir/2012/dir2/jmg_8825.cr2 | 1 -
- dir/2012/dir2/jmg_8825.jpg | 1 -
- dir/2012/dir2/jmg_8991.cr2 | 1 -
- dir/2012/dir2/jmg_8991.jpg | 1 -
- dir/2012/dir2/jmg_8992.cr2 | 1 -
- dir/2012/dir2/jmg_8992.jpg | 1 -
- dir/2012/dir2/jmg_8993.cr2 | 1 -
- dir/2012/dir2/jmg_8993.jpg | 1 -
- dir/2012/dir2/jmg_9059.cr2 | 1 -
- dir/2012/dir2/jmg_9059.jpg | 1 -
- dir/2012/dir2/jmg_9060.cr2 | 1 -
- dir/2012/dir2/jmg_9060.jpg | 1 -
- dir/2012/dir2/jmg_9064.cr2 | 1 -
- dir/2012/dir2/jmg_9064.jpg | 1 -
- dir/2012/dir2/jmg_9065.cr2 | 1 -
- dir/2012/dir2/jmg_9065.jpg | 1 -
- dir/2012/dir2/jmg_9081.cr2 | 1 -
- dir/2012/dir2/jmg_9081.jpg | 1 -
- dir/2012/dir2/jmg_9082.cr2 | 1 -
- dir/2012/dir2/jmg_9082.jpg | 1 -
- dir/2012/dir2/jmg_9083.cr2 | 1 -
- dir/2012/dir2/jmg_9083.jpg | 1 -
- dir/2012/dir1/jmg_0132.cr2 | 1 -
- dir/2012/dir1/jmg_0132.jpg | 1 -
- dir/2012/dir1/jmg_0133.cr2 | 1 -
- dir/2012/dir1/jmg_0133.jpg | 1 -
- dir/2012/dir1/jmg_0347.jpg | 1 -
- dir/2012/dir1/jmg_0351.jpg | 1 -
- dir/2012/dir1/jmg_0352.jpg | 1 -
- dir/2012/dir1/jmg_0374.jpg | 1 -
- dir/2012/dir1/jmg_8714.cr2 | 1 -
- dir/2012/dir1/jmg_8714.jpg | 1 -
- dir/2012/dir1/jmg_8716.cr2 | 1 -
- dir/2012/dir1/jmg_8716.jpg | 1 -
- dir/2012/dir1/jmg_8734.cr2 | 1 -
- dir/2012/dir1/jmg_8734.jpg | 1 -
- dir/2012/dir1/jmg_8735.cr2 | 1 -
- dir/2012/dir1/jmg_8735.jpg | 1 -
- dir/2012/dir1/jmg_8736.cr2 | 1 -
- dir/2012/dir1/jmg_8736.jpg | 1 -
- dir/2012/dir1/jmg_8743.cr2 | 1 -
- dir/2012/dir1/jmg_8743.jpg | 1 -
- dir/2012/dir1/jmg_8746.cr2 | 1 -
- dir/2012/dir1/jmg_8746.jpg | 1 -
- dir/2012/dir1/jmg_8828.cr2 | 1 -
- dir/2012/dir1/jmg_8828.jpg | 1 -
- dir/2012/dir1/jmg_8984.cr2 | 1 -
- dir/2012/dir1/jmg_8984.jpg | 1 -
- dir/2012/dir1/jmg_8985.cr2 | 1 -
- dir/2012/dir1/jmg_8985.jpg | 1 -
- dir/2012/dir1/jmg_8986.cr2 | 1 -
- dir/2012/dir1/jmg_8986.jpg | 1 -
- dir/2012/dir1/jmg_8988.cr2 | 1 -
- dir/2012/dir1/jmg_8988.jpg | 1 -
- dir/2012/dir1/jmg_9057.cr2 | 1 -
- dir/2012/dir1/jmg_9057.jpg | 1 -
- dir/2012/dir1/jmg_9058.cr2 | 1 -
- dir/2012/dir1/jmg_9058.jpg | 1 -
- dir/2012/dir1/jmg_9086.cr2 | 1 -
- dir/2012/dir1/jmg_9086.jpg | 1 -
- dir/2012/dir1/jmg_9087.cr2 | 1 -
- dir/2012/dir1/jmg_9087.jpg | 1 -
- dir/2013/dir2/jmg_0477.cr2 | 1 -
- dir/2013/dir2/jmg_0477.jpg | 1 -
- dir/2013/dir2/jmg_0478.cr2 | 1 -
- dir/2013/dir2/jmg_0478.jpg | 1 -
- dir/2013/dir2/jmg_0479.cr2 | 1 -
- dir/2013/dir2/jmg_0479.jpg | 1 -
- dir/2013/dir2/jmg_0604.cr2 | 1 -
- dir/2013/dir2/jmg_0604.jpg | 1 -
- dir/2013/dir2/jmg_0605.cr2 | 1 -
- dir/2013/dir2/jmg_0605.jpg | 1 -
- dir/2013/dir2/jmg_0606.cr2 | 1 -
- dir/2013/dir2/jmg_0606.jpg | 1 -
- dir/2013/dir2/jmg_0607.cr2 | 1 -
- dir/2013/dir2/jmg_0607.jpg | 1 -
- dir/2013/dir2/jmg_0608.cr2 | 1 -
- dir/2013/dir2/jmg_0608.jpg | 1 -
- dir/2013/dir2/jmg_0708.cr2 | 1 -
- dir/2013/dir2/jmg_0708.jpg | 1 -
- dir/2013/dir2/jmg_0709.cr2 | 1 -
- dir/2013/dir2/jmg_0709.jpg | 1 -
- dir/2013/dir2/jmg_0710.cr2 | 1 -
- dir/2013/dir2/jmg_0710.jpg | 1 -
- dir/2013/dir1/jmg_0475.cr2 | 1 -
- dir/2013/dir1/jmg_0475.jpg | 1 -
- dir/2013/dir1/jmg_0476.cr2 | 1 -
- dir/2013/dir1/jmg_0476.jpg | 1 -
- dir/2013/dir1/jmg_0718.cr2 | 1 -
- dir/2013/dir1/jmg_0718.jpg | 1 -
- dir/2013/dir1/jmg_0719.cr2 | 1 -
- dir/2013/dir1/jmg_0719.jpg | 1 -
- 1821 files changed, 628 insertions(+), 1231 deletions(-)
- delete mode 120000 201109/jmg_7250.cr2
- delete mode 120000 201109/jmg_7250.jpg
- delete mode 120000 201109/jmg_7251.cr2
- delete mode 120000 201109/jmg_7251.jpg
- delete mode 120000 201109/jmg_7253.cr2
- delete mode 120000 201109/jmg_7253.jpg
- delete mode 120000 201109/jmg_7256_raw.jpg
- delete mode 120000 201109/jmg_7259.cr2
- delete mode 120000 201109/jmg_7259.jpg
- delete mode 120000 201109/jmg_7261.cr2
- delete mode 120000 201109/jmg_7261.jpg
- delete mode 120000 201109/jmg_7265.cr2
- delete mode 120000 201109/jmg_7265.jpg
- delete mode 120000 201109/jmg_7272.jpg
- delete mode 120000 201109/jmg_7274.jpg
- delete mode 120000 201109/jmg_7275.jpg
- delete mode 120000 201109/jmg_7276.jpg
- delete mode 120000 201109/jmg_7280.jpg
- delete mode 120000 201109/jmg_7284.jpg
- delete mode 120000 201109/jmg_7286.jpg
- delete mode 120000 201109/jmg_7288.jpg
- delete mode 120000 201109/jmg_7289.jpg
- delete mode 120000 201109/jmg_7292.jpg
- delete mode 120000 201109/jmg_7293.jpg
- delete mode 120000 201109/jmg_7295.cr2
- delete mode 120000 201109/jmg_7295.jpg
- delete mode 120000 201109/jmg_7296.cr2
- delete mode 120000 201109/jmg_7296.jpg
- delete mode 120000 201109/jmg_7299.cr2
- delete mode 120000 201109/jmg_7299.jpg
- delete mode 120000 201109/jmg_7300.cr2
- delete mode 120000 201109/jmg_7300.jpg
- delete mode 120000 201109/jmg_7304.jpg
- delete mode 120000 201109/jmg_7305_raw.jpg
- delete mode 120000 201109/jmg_7307_raw.jpg
- delete mode 120000 201202/jmg_8528.jpg
- delete mode 120000 201202/jmg_8529.jpg
- delete mode 120000 201202/jmg_8595.jpg
- delete mode 120000 201202/jmg_8596.jpg
- delete mode 120000 201202/jmg_8597.jpg
- delete mode 120000 201202/jmg_8601.jpg
- delete mode 120000 201202/jmg_8602.cr2
- delete mode 120000 201202/jmg_8602.jpg
- delete mode 120000 201202/jmg_8603.cr2
- delete mode 120000 201202/jmg_8603.jpg
- delete mode 120000 201202/jmg_8604.jpg
- delete mode 120000 201202/jmg_8605.jpg
- delete mode 120000 201202/jmg_8606.jpg
- delete mode 120000 201202/jmg_8607.jpg
- delete mode 120000 201202/jmg_8608.jpg
- delete mode 120000 201202/jmg_8609.jpg
- delete mode 120000 201202/jmg_8610.jpg
- delete mode 120000 201202/jmg_8611.jpg
- delete mode 120000 201202/jmg_8612.cr2
- delete mode 120000 201202/jmg_8612.jpg
- delete mode 120000 201202/jmg_8613.jpg
- delete mode 120000 201202/jmg_8614.jpg
- delete mode 120000 201202/jmg_8615.jpg
- delete mode 120000 201202/jmg_8616_raw.jpg
- delete mode 120000 201202/jmg_8617.jpg
- delete mode 120000 201202/jmg_8618.jpg
- delete mode 120000 201202/jmg_8619.jpg
- delete mode 120000 201202/jmg_8620.jpg
- delete mode 120000 201202/jmg_8621.jpg
- delete mode 120000 201202/jmg_8622.jpg
- delete mode 120000 201202/jmg_8624.jpg
- delete mode 120000 201202/jmg_8625.cr2
- delete mode 120000 201202/jmg_8625.jpg
- delete mode 120000 201202/jmg_8626.jpg
- delete mode 120000 201202/jmg_8627.jpg
- delete mode 120000 201202/jmg_8628.jpg
- delete mode 120000 201202/jmg_8629.jpg
- delete mode 120000 201202/jmg_8630.jpg
- delete mode 120000 201202/jmg_8631.jpg
- delete mode 120000 201202/jmg_8632.jpg
- delete mode 120000 201202/jmg_8633.cr2
- delete mode 120000 201202/jmg_8633.jpg
- delete mode 120000 201202/jmg_8634.jpg
- delete mode 120000 201202/jmg_8637.jpg
- delete mode 120000 201202/jmg_8639.jpg
- delete mode 120000 201202/jmg_8640.jpg
- delete mode 120000 201202/jmg_8641.jpg
- delete mode 120000 201202/jmg_8642_raw.jpg
- delete mode 120000 201202/jmg_8643.jpg
- delete mode 120000 201202/jmg_8644.jpg
- delete mode 120000 201202/jmg_8647.jpg
- delete mode 120000 201202/jmg_8648.jpg
- delete mode 120000 201202/jmg_8651.cr2
- delete mode 120000 201202/jmg_8651.jpg
- delete mode 120000 201202/jmg_8652.jpg
- delete mode 120000 201202/jmg_8653.jpg
- delete mode 120000 201202/jmg_8654.jpg
- delete mode 120000 201202/jmg_8655.jpg
- delete mode 120000 201202/jmg_8657.jpg
- delete mode 120000 201202/jmg_8665.jpg
- delete mode 120000 201202/jmg_8670.jpg
- delete mode 120000 201202/jmg_8671.jpg
- delete mode 120000 201202/jmg_8673.cr2
- delete mode 120000 201202/jmg_8673.jpg
- delete mode 120000 201202/jmg_8674.jpg
- delete mode 120000 201202/jmg_8675.jpg
- delete mode 120000 201202/jmg_8676.jpg
- delete mode 120000 201202/jmg_8677.jpg
- delete mode 120000 201202/jmg_8678.jpg
- delete mode 120000 201202/jmg_8679.jpg
- delete mode 120000 201202/jmg_8680.jpg
- delete mode 120000 201202/jmg_8681.jpg
- delete mode 120000 201203/jmg_8701.cr2
- delete mode 120000 201203/jmg_8702.jpg
- delete mode 120000 201203/jmg_8705.jpg
- delete mode 120000 201203/jmg_8711.jpg
- delete mode 120000 201203/jmg_8717.jpg
- delete mode 120000 201203/jmg_8718.jpg
- delete mode 120000 201203/jmg_8719.jpg
- delete mode 120000 201203/jmg_8721.jpg
- delete mode 120000 201203/jmg_8725.jpg
- delete mode 120000 201203/jmg_8726.jpg
- delete mode 120000 201203/jmg_8731.jpg
- delete mode 120000 201203/jmg_8739.jpg
- delete mode 120000 201203/jmg_8745.jpg
- delete mode 120000 201203/jmg_8747_raw.jpg
- delete mode 120000 201203/jmg_8750.cr2
- delete mode 120000 201203/jmg_8750.jpg
- delete mode 120000 201204/jmg_8751.jpg
- delete mode 120000 201204/jmg_8752.jpg
- delete mode 120000 201204/jmg_8755.jpg
- delete mode 120000 201204/jmg_8756.jpg
- delete mode 120000 201204/jmg_8757.jpg
- delete mode 120000 201204/jmg_8759.jpg
- delete mode 120000 201204/jmg_8760.jpg
- delete mode 120000 201204/jmg_8761.jpg
- delete mode 120000 201204/jmg_8762.jpg
- delete mode 120000 201204/jmg_8763.cr2
- delete mode 120000 201204/jmg_8763.jpg
- delete mode 120000 201204/jmg_8766.jpg
- delete mode 120000 201204/jmg_8767.cr2
- delete mode 120000 201204/jmg_8767.jpg
- delete mode 120000 201204/jmg_8768.jpg
- delete mode 120000 201204/jmg_8769.jpg
- delete mode 120000 201204/jmg_8770.jpg
- delete mode 120000 201204/jmg_8771.jpg
- delete mode 120000 201204/jmg_8772.jpg
- delete mode 120000 201204/jmg_8773.jpg
- delete mode 120000 201205/jmg_8822.jpg
- delete mode 120000 201205/jmg_8823.jpg
- delete mode 120000 201205/jmg_8824.jpg
- delete mode 120000 201205/jmg_8826.jpg
- delete mode 120000 201205/jmg_8831.jpg
- delete mode 120000 201205/jmg_8834.jpg
- delete mode 120000 201205/jmg_8835.jpg
- delete mode 120000 201205/jmg_8835_raw.jpg
- delete mode 120000 201205/jmg_8837.jpg
- delete mode 120000 201205/jmg_8839.cr2
- delete mode 120000 201205/jmg_8839.jpg
- delete mode 120000 201205/jmg_8839_raw.jpg
- delete mode 120000 201205/jmg_8840.cr2
- delete mode 120000 201205/jmg_8840.jpg
- delete mode 120000 201205/jmg_8840_raw.jpg
- delete mode 120000 201205/jmg_8841.jpg
- delete mode 120000 201205/jmg_8842.jpg
- delete mode 120000 201205/jmg_8844.cr2
- delete mode 120000 201205/jmg_8844.jpg
- delete mode 120000 201205/jmg_8844_raw.jpg
- delete mode 120000 201205/jmg_8845.jpg
- delete mode 120000 201205/jmg_8846.jpg
- delete mode 120000 201205/jmg_8847.cr2
- delete mode 120000 201205/jmg_8847.jpg
- delete mode 120000 201205/jmg_8847_raw.jpg
- delete mode 120000 201205/jmg_8848.jpg
- delete mode 120000 201205/jmg_8849.jpg
- delete mode 120000 201205/jmg_8851.cr2
- delete mode 120000 201205/jmg_8851.jpg
- delete mode 120000 201205/jmg_8851_raw.jpg
- delete mode 120000 201205/jmg_8856.cr2
- delete mode 120000 201205/jmg_8856.jpg
- delete mode 120000 201205/jmg_8856_raw.jpg
- delete mode 120000 201205/jmg_8857.jpg
- delete mode 120000 201205/jmg_8858.jpg
- delete mode 120000 201205/jmg_8859.jpg
- delete mode 120000 201205/jmg_8861.jpg
- delete mode 120000 201205/jmg_8862.jpg
- delete mode 120000 201205/jmg_8863.jpg
- delete mode 120000 201205/jmg_8871.cr2
- delete mode 120000 201205/jmg_8871.jpg
- delete mode 120000 201205/jmg_8872.jpg
- delete mode 120000 201205/jmg_8873.jpg
- delete mode 120000 201205/jmg_8875.jpg
- delete mode 120000 201205/jmg_8876.cr2
- delete mode 120000 201205/jmg_8876.jpg
- delete mode 120000 201205/jmg_8878.cr2
- delete mode 120000 201205/jmg_8878.jpg
- delete mode 120000 201205/jmg_8879.cr2
- delete mode 120000 201205/jmg_8879.jpg
- delete mode 120000 201205/jmg_8880.cr2
- delete mode 120000 201205/jmg_8880.jpg
- delete mode 120000 201205/jmg_8881.cr2
- delete mode 120000 201205/jmg_8881.jpg
- delete mode 120000 201205/jmg_8892.cr2
- delete mode 120000 201205/jmg_8892.jpg
- delete mode 120000 201205/jmg_8893.cr2
- delete mode 120000 201205/jmg_8893.jpg
- delete mode 120000 201205/jmg_8894.cr2
- delete mode 120000 201205/jmg_8894.jpg
- delete mode 120000 201206/jmg_8989.cr2
- delete mode 120000 201206/jmg_8989.jpg
- delete mode 120000 201206/jmg_8990.cr2
- delete mode 120000 201206/jmg_8990.jpg
- delete mode 120000 201206/jmg_8995.jpg
- delete mode 120000 201206/jmg_8996.jpg
- delete mode 120000 201206/jmg_8998.jpg
- delete mode 120000 201206/jmg_9001.jpg
- delete mode 120000 201206/jmg_9003.jpg
- delete mode 120000 201206/jmg_9006.jpg
- delete mode 120000 201206/jmg_9007.jpg
- delete mode 120000 201206/jmg_9011.jpg
- delete mode 120000 201206/jmg_9014.jpg
- delete mode 120000 201206/jmg_9014_raw.jpg
- delete mode 120000 201206/jmg_9015.jpg
- delete mode 120000 201206/jmg_9016.cr2
- delete mode 120000 201206/jmg_9016.jpg
- delete mode 120000 201206/jmg_9017.cr2
- delete mode 120000 201206/jmg_9017.jpg
- delete mode 120000 201206/jmg_9018.cr2
- delete mode 120000 201206/jmg_9018.jpg
- delete mode 120000 201206/jmg_9019.cr2
- delete mode 120000 201206/jmg_9019.jpg
- delete mode 120000 201206/jmg_9023.cr2
- delete mode 120000 201206/jmg_9023.jpg
- delete mode 120000 201206/jmg_9024.cr2
- delete mode 120000 201206/jmg_9024.jpg
- delete mode 120000 201206/jmg_9025.cr2
- delete mode 120000 201206/jmg_9025.jpg
- delete mode 120000 201206/jmg_9028.jpg
- delete mode 120000 201206/jmg_9029.jpg
- delete mode 120000 201206/jmg_9030.jpg
- delete mode 120000 201206/jmg_9031.jpg
- delete mode 120000 201206/jmg_9032_raw.jpg
- delete mode 120000 201206/jmg_9033.jpg
- delete mode 120000 201206/jmg_9033_raw.jpg
- delete mode 120000 201206/jmg_9034.jpg
- delete mode 120000 201206/jmg_9035.jpg
- delete mode 120000 201206/jmg_9035_raw.jpg
- delete mode 120000 201206/jmg_9036.jpg
- delete mode 120000 201206/jmg_9039.cr2
- delete mode 120000 201206/jmg_9039.jpg
- delete mode 120000 201206/jmg_9040.cr2
- delete mode 120000 201206/jmg_9040.jpg
- delete mode 120000 201206/jmg_9043.cr2
- delete mode 120000 201206/jmg_9043.jpg
- delete mode 120000 201206/jmg_9047.cr2
- delete mode 120000 201206/jmg_9047.jpg
- delete mode 120000 201207/jmg_9048.jpg
- delete mode 120000 201207/jmg_9053.jpg
- delete mode 120000 201207/jmg_9054.jpg
- delete mode 120000 201207/jmg_9069.cr2
- delete mode 120000 201207/jmg_9069.jpg
- delete mode 120000 201207/jmg_9070.cr2
- delete mode 120000 201207/jmg_9070.jpg
- delete mode 120000 201207/jmg_9072.cr2
- delete mode 120000 201207/jmg_9072.jpg
- delete mode 120000 201207/jmg_9076.cr2
- delete mode 120000 201207/jmg_9076.jpg
- delete mode 120000 201208/jmg_9077.jpg
- delete mode 120000 201208/jmg_9302_raw.jpg
- delete mode 120000 201208/jmg_9303.jpg
- delete mode 120000 201208/jmg_9304.cr2
- delete mode 120000 201208/jmg_9304.jpg
- delete mode 120000 201208/jmg_9305.cr2
- delete mode 120000 201208/jmg_9305.jpg
- delete mode 120000 201208/jmg_9306_raw.jpg
- delete mode 120000 201208/jmg_9307.cr2
- delete mode 120000 201208/jmg_9307.jpg
- delete mode 120000 201208/jmg_9308_raw.jpg
- delete mode 120000 201208/jmg_9309_raw.jpg
- delete mode 120000 201208/jmg_9310.cr2
- delete mode 120000 201208/jmg_9310.jpg
- delete mode 120000 201208/jmg_9310_bw.jpg
- delete mode 120000 201208/jmg_9310_raw.jpg
- delete mode 120000 201208/jmg_9312.jpg
- delete mode 120000 201208/jmg_9313.jpg
- delete mode 120000 201208/jmg_9314.jpg
- delete mode 120000 201208/jmg_9315.jpg
- delete mode 120000 201208/jmg_9319.jpg
- delete mode 120000 201208/jmg_9523.jpg
- delete mode 120000 201208/jmg_9524.jpg
- delete mode 120000 201208/jmg_9525.jpg
- delete mode 120000 201208/jmg_9526.jpg
- delete mode 120000 201208/jmg_9527.jpg
- delete mode 120000 201208/jmg_9527_raw.jpg
- delete mode 120000 201208/jmg_9528.jpg
- delete mode 120000 201208/jmg_9529.jpg
- delete mode 120000 201208/jmg_9530.jpg
- delete mode 120000 201208/jmg_9531.jpg
- delete mode 120000 201208/jmg_9532.jpg
- delete mode 120000 201208/jmg_9533.cr2
- delete mode 120000 201208/jmg_9533.jpg
- delete mode 120000 201208/jmg_9534.cr2
- delete mode 120000 201208/jmg_9534.jpg
- delete mode 120000 201208/jmg_9535.jpg
- delete mode 120000 201208/jmg_9536.jpg
- delete mode 120000 201208/jmg_9537.cr2
- delete mode 120000 201208/jmg_9537.jpg
- delete mode 120000 201208/jmg_9538.jpg
- delete mode 120000 201208/jmg_9539.jpg
- delete mode 120000 201208/jmg_9540.jpg
- delete mode 120000 201208/jmg_9541.cr2
- delete mode 120000 201208/jmg_9542.jpg
- delete mode 120000 201208/jmg_9543.cr2
- delete mode 120000 201208/jmg_9543.jpg
- delete mode 120000 201208/jmg_9544.cr2
- delete mode 120000 201208/jmg_9544.jpg
- delete mode 120000 201208/jmg_9545.jpg
- delete mode 120000 201209/jmg_9547.jpg
- delete mode 120000 201209/jmg_9548.jpg
- delete mode 120000 201209/jmg_9549.jpg
- delete mode 120000 201209/jmg_9550.jpg
- delete mode 120000 201209/jmg_9551.jpg
- delete mode 120000 201209/jmg_9552.jpg
- delete mode 120000 201209/jmg_9553.jpg
- delete mode 120000 201209/jmg_9555.jpg
- delete mode 120000 201209/jmg_9556.jpg
- delete mode 120000 201209/jmg_9558.jpg
- delete mode 120000 201209/jmg_9559.cr2
- delete mode 120000 201209/jmg_9559.jpg
- delete mode 120000 201209/jmg_9560.cr2
- delete mode 120000 201209/jmg_9560.jpg
- delete mode 120000 201209/jmg_9561.jpg
- delete mode 120000 201209/jmg_9562.jpg
- delete mode 120000 201209/jmg_9568.jpg
- delete mode 120000 201210/jmg_0001.jpg
- delete mode 120000 201210/jmg_0021.jpg
- delete mode 120000 201210/jmg_0022.cr2
- delete mode 120000 201210/jmg_0022.jpg
- delete mode 120000 201210/jmg_0025.jpg
- delete mode 120000 201210/jmg_0026.jpg
- delete mode 120000 201210/jmg_0027.jpg
- delete mode 120000 201210/jmg_0028.jpg
- delete mode 120000 201210/jmg_0029.jpg
- delete mode 120000 201210/jmg_0030.jpg
- delete mode 120000 201210/jmg_0032.jpg
- delete mode 120000 201210/jmg_0034.jpg
- delete mode 120000 201210/jmg_0035.jpg
- delete mode 120000 201210/jmg_0036.jpg
- delete mode 120000 201210/jmg_0037.jpg
- delete mode 120000 201210/jmg_0039.cr2
- delete mode 120000 201210/jmg_0039.jpg
- delete mode 120000 201210/jmg_0040.jpg
- delete mode 120000 201210/jmg_9572.jpg
- delete mode 120000 201210/jmg_9573.jpg
- delete mode 120000 201210/jmg_9574.jpg
- delete mode 120000 201210/jmg_9575.jpg
- delete mode 120000 201210/jmg_9576.jpg
- delete mode 120000 201210/jmg_9578.jpg
- delete mode 120000 201210/jmg_9580.jpg
- delete mode 120000 201210/jmg_9581.jpg
- delete mode 120000 201210/jmg_9582.cr2
- delete mode 120000 201210/jmg_9582.jpg
- delete mode 120000 201210/jmg_9585.cr2
- delete mode 120000 201210/jmg_9585.jpg
- delete mode 120000 201210/jmg_9587.cr2
- delete mode 120000 201210/jmg_9587.jpg
- delete mode 120000 201210/jmg_9588.jpg
- delete mode 120000 201210/jmg_9589.jpg
- delete mode 120000 201210/jmg_9590.jpg
- delete mode 120000 201210/jmg_9591.jpg
- delete mode 120000 201210/jmg_9594.jpg
- delete mode 120000 201210/jmg_9595.jpg
- delete mode 120000 201210/jmg_9596.jpg
- delete mode 120000 201210/jmg_9597.cr2
- delete mode 120000 201210/jmg_9597.jpg
- delete mode 120000 201210/jmg_9598.cr2
- delete mode 120000 201210/jmg_9598.jpg
- delete mode 120000 201210/jmg_9599.cr2
- delete mode 120000 201210/jmg_9599.jpg
- delete mode 120000 201210/jmg_9600.jpg
- delete mode 120000 201210/jmg_9602.jpg
- delete mode 120000 201210/jmg_9603.jpg
- delete mode 120000 201210/jmg_9604.jpg
- delete mode 120000 201210/jmg_9605.cr2
- delete mode 120000 201210/jmg_9605.jpg
- delete mode 120000 201210/jmg_9606.jpg
- delete mode 120000 201210/jmg_9608.jpg
- delete mode 120000 201210/jmg_9609.jpg
- delete mode 120000 201210/jmg_9610.jpg
- delete mode 120000 201210/jmg_9611.jpg
- delete mode 120000 201210/jmg_9612.jpg
- delete mode 120000 201210/jmg_9613.jpg
- delete mode 120000 201210/jmg_9614.jpg
- delete mode 120000 201210/jmg_9616.cr2
- delete mode 120000 201210/jmg_9616.jpg
- delete mode 120000 201210/jmg_9617.jpg
- delete mode 120000 201210/jmg_9619.jpg
- delete mode 120000 201210/jmg_9620.jpg
- delete mode 120000 201210/jmg_9621.jpg
- delete mode 120000 201210/jmg_9622.jpg
- delete mode 120000 201210/jmg_9623.cr2
- delete mode 120000 201210/jmg_9623.jpg
- delete mode 120000 201210/jmg_9624.cr2
- delete mode 120000 201210/jmg_9624.jpg
- delete mode 120000 201210/jmg_9736_raw.jpg
- delete mode 120000 201210/jmg_9738_raw.jpg
- delete mode 120000 201210/jmg_9740.cr2
- delete mode 120000 201210/jmg_9740.jpg
- delete mode 120000 201210/jmg_9743.jpg
- delete mode 120000 201210/jmg_9744.jpg
- delete mode 120000 201210/jmg_9745.cr2
- delete mode 120000 201210/jmg_9745.jpg
- delete mode 120000 201210/jmg_9746.cr2
- delete mode 120000 201210/jmg_9746.jpg
- delete mode 120000 201210/jmg_9748.jpg
- delete mode 120000 201210/jmg_9749_raw.jpg
- delete mode 120000 201210/jmg_9751.jpg
- delete mode 120000 201210/jmg_9752.jpg
- delete mode 120000 201210/jmg_9754.jpg
- delete mode 120000 201210/jmg_9755.jpg
- delete mode 120000 201210/jmg_9756.jpg
- delete mode 120000 201210/jmg_9760.cr2
- delete mode 120000 201210/jmg_9760.jpg
- delete mode 120000 201210/jmg_9761.cr2
- delete mode 120000 201210/jmg_9761.jpg
- delete mode 120000 201210/jmg_9763.jpg
- delete mode 120000 201210/jmg_9764.jpg
- delete mode 120000 201210/jmg_9766.jpg
- delete mode 120000 201210/jmg_9767.cr2
- delete mode 120000 201210/jmg_9767.jpg
- delete mode 120000 201210/jmg_9768.jpg
- delete mode 120000 201210/jmg_9771.jpg
- delete mode 120000 201210/jmg_9772.jpg
- delete mode 120000 201210/jmg_9791.jpg
- delete mode 120000 201210/jmg_9792.jpg
- delete mode 120000 201210/jmg_9793.jpg
- delete mode 120000 201210/jmg_9794.jpg
- delete mode 120000 201210/jmg_9796.jpg
- delete mode 120000 201210/jmg_9797.jpg
- delete mode 120000 201210/jmg_9799.jpg
- delete mode 120000 201210/jmg_9800.jpg
- delete mode 120000 201210/jmg_9801.jpg
- delete mode 120000 201210/jmg_9803.jpg
- delete mode 120000 201210/jmg_9807.jpg
- delete mode 120000 201210/jmg_9808.jpg
- delete mode 120000 201210/jmg_9809.jpg
- delete mode 120000 201210/jmg_9810.jpg
- delete mode 120000 201210/jmg_9811.jpg
- delete mode 120000 201210/jmg_9812.jpg
- delete mode 120000 201210/jmg_9813.jpg
- delete mode 120000 201210/jmg_9815.jpg
- delete mode 120000 201210/jmg_9818.jpg
- delete mode 120000 201210/jmg_9819.jpg
- delete mode 120000 201210/jmg_9820.jpg
- delete mode 120000 201210/jmg_9821.jpg
- delete mode 120000 201210/jmg_9822.jpg
- delete mode 120000 201210/jmg_9823.jpg
- delete mode 120000 201210/jmg_9825.jpg
- delete mode 120000 201210/jmg_9826.jpg
- delete mode 120000 201210/jmg_9827.jpg
- delete mode 120000 201210/jmg_9828.jpg
- delete mode 120000 201210/jmg_9829.jpg
- delete mode 120000 201210/jmg_9830.cr2
- delete mode 120000 201210/jmg_9830.jpg
- delete mode 120000 201210/jmg_9832.cr2
- delete mode 120000 201210/jmg_9832.jpg
- delete mode 120000 201210/jmg_9834.jpg
- delete mode 120000 201210/jmg_9836.jpg
- delete mode 120000 201210/jmg_9838.jpg
- delete mode 120000 201210/jmg_9839.jpg
- delete mode 120000 201210/jmg_9841.jpg
- delete mode 120000 201210/jmg_9843.jpg
- delete mode 120000 201210/jmg_9845.jpg
- delete mode 120000 201210/jmg_9846.jpg
- delete mode 120000 201210/jmg_9848.jpg
- delete mode 120000 201210/jmg_9849.jpg
- delete mode 120000 201210/jmg_9852.jpg
- delete mode 120000 201210/jmg_9853.jpg
- delete mode 120000 201210/jmg_9854.jpg
- delete mode 120000 201210/jmg_9855.jpg
- delete mode 120000 201210/jmg_9856.jpg
- delete mode 120000 201210/jmg_9857.cr2
- delete mode 120000 201210/jmg_9857.jpg
- delete mode 120000 201210/jmg_9858.cr2
- delete mode 120000 201210/jmg_9858.jpg
- delete mode 120000 201210/jmg_9859.jpg
- delete mode 120000 201210/jmg_9860.jpg
- delete mode 120000 201210/jmg_9915.jpg
- delete mode 120000 201210/jmg_9917.jpg
- delete mode 120000 201210/jmg_9918.jpg
- delete mode 120000 201210/jmg_9919.jpg
- delete mode 120000 201210/jmg_9922.jpg
- delete mode 120000 201210/jmg_9923.jpg
- delete mode 120000 201210/jmg_9925.jpg
- delete mode 120000 201210/jmg_9926.cr2
- delete mode 120000 201210/jmg_9926.jpg
- delete mode 120000 201210/jmg_9928.jpg
- delete mode 120000 201210/jmg_9975.cr2
- delete mode 120000 201210/jmg_9975.jpg
- delete mode 120000 201210/jmg_9976.cr2
- delete mode 120000 201210/jmg_9976.jpg
- delete mode 120000 201210/jmg_9978.jpg
- delete mode 120000 201210/jmg_9986.jpg
- delete mode 120000 201210/jmg_9987.jpg
- delete mode 120000 201210/jmg_9988.jpg
- delete mode 120000 201210/jmg_9989.jpg
- delete mode 120000 201210/jmg_9991.jpg
- delete mode 120000 201210/jmg_9993.jpg
- delete mode 120000 201210/jmg_9994.cr2
- delete mode 120000 201210/jmg_9994.jpg
- delete mode 120000 201210/jmg_9997.jpg
- delete mode 120000 201210/jmg_9998.jpg
- delete mode 120000 201210/jmg_9999.jpg
- delete mode 120000 201212/jmg_0131.jpg
- delete mode 120000 201212/jmg_0134.jpg
- delete mode 120000 201212/jmg_0135.jpg
- delete mode 120000 201212/jmg_0152.jpg
- delete mode 120000 201212/jmg_0155.jpg
- delete mode 120000 201212/jmg_0156.jpg
- delete mode 120000 201212/jmg_0162.jpg
- delete mode 120000 201212/jmg_0163.jpg
- delete mode 120000 201212/jmg_0165.jpg
- delete mode 120000 201212/jmg_0176.cr2
- delete mode 120000 201212/jmg_0176.jpg
- delete mode 120000 201212/jmg_0177.cr2
- delete mode 120000 201212/jmg_0177.jpg
- delete mode 120000 201212/jmg_0178.jpg
- delete mode 120000 201212/jmg_0179.jpg
- delete mode 120000 201212/jmg_0180.jpg
- delete mode 120000 201212/jmg_0184.jpg
- delete mode 120000 201212/jmg_0185.jpg
- delete mode 120000 201212/jmg_0186.jpg
- delete mode 120000 201212/jmg_0187.jpg
- delete mode 120000 201212/jmg_0306.jpg
- delete mode 120000 201212/jmg_0307.jpg
- delete mode 120000 201212/jmg_0308.jpg
- delete mode 120000 201212/jmg_0310.jpg
- delete mode 120000 201212/jmg_0311.jpg
- delete mode 120000 201212/jmg_0312.jpg
- delete mode 120000 201212/jmg_0313.jpg
- delete mode 120000 201212/jmg_0314.jpg
- delete mode 120000 201212/jmg_0315.jpg
- delete mode 120000 201212/jmg_0316.jpg
- delete mode 120000 201212/jmg_0317.jpg
- delete mode 120000 201212/jmg_0321.jpg
- delete mode 120000 201212/jmg_0326.jpg
- delete mode 120000 201212/jmg_0328.jpg
- delete mode 120000 201212/jmg_0330.jpg
- delete mode 120000 201212/jmg_0333.jpg
- delete mode 120000 201212/jmg_0336.jpg
- delete mode 120000 201212/jmg_0340.jpg
- delete mode 120000 201212/jmg_0343.jpg
- delete mode 120000 201212/jmg_0345.jpg
- delete mode 120000 201212/jmg_0360.jpg
- delete mode 120000 201212/jmg_0362.jpg
- delete mode 120000 201212/jmg_0363.jpg
- delete mode 120000 201212/jmg_0364.jpg
- delete mode 120000 201212/jmg_0366.jpg
- delete mode 120000 201212/jmg_0367.jpg
- delete mode 120000 201212/jmg_0368.jpg
- delete mode 120000 201212/jmg_0369.jpg
- delete mode 120000 201212/jmg_0370.jpg
- delete mode 120000 201212/jmg_0372.jpg
- delete mode 120000 201212/jmg_0382.jpg
- delete mode 120000 201212/jmg_0383.jpg
- delete mode 120000 201212/jmg_0384.jpg
- delete mode 120000 201212/jmg_0385.jpg
- delete mode 120000 201212/jmg_0387.jpg
- delete mode 120000 201212/jmg_0388.jpg
- delete mode 120000 201212/jmg_0389.jpg
- delete mode 120000 201212/jmg_0390.jpg
- delete mode 120000 201212/jmg_0392.jpg
- delete mode 120000 201212/jmg_0396.jpg
- delete mode 120000 201212/jmg_0397.jpg
- delete mode 120000 201212/jmg_0398.jpg
- delete mode 120000 201212/jmg_0399.jpg
- delete mode 120000 201212/jmg_0402.jpg
- delete mode 120000 201212/jmg_0404.jpg
- delete mode 120000 201212/jmg_0405.jpg
- delete mode 120000 201212/jmg_0406.jpg
- delete mode 120000 201212/jmg_0407.jpg
- delete mode 120000 201212/jmg_0408.jpg
- delete mode 120000 201212/jmg_0410.jpg
- delete mode 120000 201212/jmg_0411.jpg
- delete mode 120000 201212/jmg_0412.jpg
- delete mode 120000 201212/jmg_0415.jpg
- delete mode 120000 201212/jmg_0417.jpg
- delete mode 120000 201212/jmg_0418.jpg
- delete mode 120000 201302/jmg_0502.cr2
- delete mode 120000 201302/jmg_0502.jpg
- delete mode 120000 201302/jmg_0503.jpg
- delete mode 120000 201302/jmg_0507.jpg
- delete mode 120000 201302/jmg_0510.jpg
- delete mode 120000 201302/jmg_0512.jpg
- delete mode 120000 201302/jmg_0513.jpg
- delete mode 120000 201302/jmg_0514.jpg
- delete mode 120000 201302/jmg_0516.jpg
- delete mode 120000 201302/jmg_0517.jpg
- delete mode 120000 201302/jmg_0518.jpg
- delete mode 120000 201302/jmg_0521.jpg
- delete mode 120000 201302/jmg_0522.jpg
- delete mode 120000 201302/jmg_0523.jpg
- delete mode 120000 201302/jmg_0524.jpg
- delete mode 120000 201302/jmg_0526.jpg
- delete mode 120000 201302/jmg_0527.jpg
- delete mode 120000 201302/jmg_0528.jpg
- delete mode 120000 201302/jmg_0532.cr2
- delete mode 120000 201302/jmg_0532.jpg
- delete mode 120000 201302/jmg_0534.jpg
- delete mode 120000 201302/jmg_0535.jpg
- delete mode 120000 201302/jmg_0537.jpg
- delete mode 120000 201302/jmg_0539.jpg
- delete mode 120000 201302/jmg_0541.jpg
- delete mode 120000 201302/jmg_0543.jpg
- delete mode 120000 201304/bruecke_saeckingen.tif
- delete mode 120000 201304/jmg_0685.cr2
- delete mode 120000 201304/jmg_0685.jpg
- delete mode 120000 201304/jmg_0687.cr2
- delete mode 120000 201304/jmg_0687.jpg
- delete mode 120000 201304/jmg_0699.jpg
- delete mode 120000 201304/jmg_0700.jpg
- delete mode 120000 201304/jmg_0726.jpg
- delete mode 120000 201304/jmg_0727.jpg
- delete mode 120000 201304/jmg_0728.jpg
- delete mode 120000 201304/jmg_0729.cr2
- delete mode 120000 201304/jmg_0729.jpg
- delete mode 120000 201304/jmg_0730.jpg
- delete mode 120000 201304/jmg_0731.jpg
- delete mode 120000 201304/jmg_0733.cr2
- delete mode 120000 201304/jmg_0733.jpg
- delete mode 120000 201304/jmg_0734.cr2
- delete mode 120000 201304/jmg_0734.jpg
- delete mode 120000 201304/jmg_0736.cr2
- delete mode 120000 201304/jmg_0736.jpg
- delete mode 120000 201304/jmg_0737.cr2
- delete mode 120000 201304/jmg_0737.jpg
- delete mode 120000 201304/jmg_0738.jpg
- delete mode 120000 201304/jmg_0739.jpg
- delete mode 120000 201304/jmg_0740.jpg
- delete mode 120000 201304/jmg_0741.jpg
- delete mode 120000 201304/jmg_0742.jpg
- delete mode 120000 201304/jmg_0744.cr2
- delete mode 120000 201304/jmg_0744.jpg
- delete mode 120000 201304/jmg_0749.jpg
- delete mode 120000 201304/jmg_0750.jpg
- delete mode 120000 201304/jmg_0751.jpg
- delete mode 120000 201304/jmg_0752.jpg
- delete mode 120000 201304/jmg_0753.jpg
- delete mode 120000 201304/jmg_0755.cr2
- delete mode 120000 201304/jmg_0755.jpg
- delete mode 120000 201304/jmg_0757.cr2
- delete mode 120000 201304/jmg_0757.jpg
- delete mode 120000 201304/jmg_0758.jpg
- delete mode 120000 201304/jmg_0759.jpg
- delete mode 120000 201304/jmg_0760.cr2
- delete mode 120000 201304/jmg_0760.jpg
- delete mode 120000 201304/jmg_0762.cr2
- delete mode 120000 201304/jmg_0762.jpg
- delete mode 120000 201304/jmg_0763.jpg
- delete mode 120000 201304/jmg_0764.jpg
- delete mode 120000 201304/jmg_0765.jpg
- delete mode 120000 201304/jmg_0766.jpg
- delete mode 120000 201304/jmg_0769.jpg
- delete mode 120000 201304/jmg_0770.jpg
- delete mode 120000 201304/jmg_0771.jpg
- delete mode 120000 201304/jmg_0785.cr2
- delete mode 120000 201304/jmg_0785.jpg
- delete mode 120000 201304/jmg_0786.cr2
- delete mode 120000 201304/jmg_0786.jpg
- delete mode 120000 201304/jmg_0787.cr2
- delete mode 120000 201304/jmg_0787.jpg
- delete mode 120000 201304/jmg_0789.jpg
- delete mode 120000 201304/jmg_0790.jpg
- delete mode 120000 201304/jmg_0791.jpg
- delete mode 120000 201304/jmg_0800.jpg
- delete mode 120000 201304/jmg_0801.jpg
- delete mode 120000 201304/jmg_0802.jpg
- delete mode 120000 201304/jmg_0803.jpg
- delete mode 120000 201304/jmg_0809.jpg
- delete mode 120000 201304/jmg_0810.jpg
- delete mode 120000 201304/jmg_0812.jpg
- delete mode 120000 201304/jmg_0813.jpg
- delete mode 120000 201304/jmg_0824.jpg
- delete mode 120000 201304/jmg_0825.jpg
- delete mode 120000 201304/jmg_0827.jpg
- delete mode 120000 201304/jmg_0831.jpg
- delete mode 120000 201304/jmg_0833.jpg
- delete mode 120000 201304/jmg_0834.jpg
- delete mode 120000 201304/jmg_0836.jpg
- delete mode 120000 201304/jmg_0837.jpg
- delete mode 120000 201304/jmg_0845.jpg
- delete mode 120000 201304/jmg_0846.jpg
- delete mode 120000 201304/jmg_0847.jpg
- delete mode 120000 201304/jmg_0848.jpg
- delete mode 120000 201304/jmg_0849.jpg
- delete mode 120000 201304/jmg_0850.jpg
- delete mode 120000 201304/jmg_0851.jpg
- delete mode 120000 201304/jmg_0857.jpg
- delete mode 120000 201304/jmg_0858.jpg
- delete mode 120000 201304/jmg_0860.jpg
- delete mode 120000 201304/jmg_0861.jpg
- delete mode 120000 201304/jmg_0862.jpg
- delete mode 120000 201304/jmg_0863.jpg
- delete mode 120000 201304/jmg_0864.jpg
- delete mode 120000 201304/jmg_0866.jpg
- delete mode 120000 201304/jmg_0867.jpg
- delete mode 120000 201304/jmg_0868.cr2
- delete mode 120000 201304/jmg_0868.jpg
- delete mode 120000 201304/jmg_0869.cr2
- delete mode 120000 201304/jmg_0869.jpg
- delete mode 120000 201304/jmg_0872.cr2
- delete mode 120000 201304/jmg_0872.jpg
- delete mode 120000 201304/jmg_0874.cr2
- delete mode 120000 201304/jmg_0874.jpg
- delete mode 120000 201304/jmg_0875.jpg
- delete mode 120000 201304/jmg_0875_raw.jpg
- delete mode 120000 201304/jmg_0876.jpg
- delete mode 120000 201304/jmg_0877.jpg
- delete mode 120000 201304/jmg_0878.jpg
- delete mode 120000 201304/jmg_0880.jpg
- delete mode 120000 201304/jmg_0881.jpg
- delete mode 120000 201304/jmg_0882.jpg
- delete mode 120000 201304/jmg_0884.jpg
- delete mode 120000 201304/jmg_0885.jpg
- delete mode 120000 201304/jmg_0886.jpg
- delete mode 120000 201304/jmg_0888.jpg
- delete mode 120000 201304/jmg_0889.jpg
- delete mode 120000 201304/jmg_0890.jpg
- delete mode 120000 201304/jmg_0891.jpg
- delete mode 120000 201304/jmg_0892.jpg
- delete mode 120000 201304/jmg_0893.cr2
- delete mode 120000 201304/jmg_0893.jpg
- delete mode 120000 201304/jmg_0894.jpg
- delete mode 120000 201304/jmg_0896.jpg
- delete mode 120000 201304/jmg_0897.jpg
- delete mode 120000 201304/jmg_0898.jpg
- delete mode 120000 201304/jmg_0899.jpg
- delete mode 120000 201304/jmg_0900.jpg
- delete mode 120000 201304/jmg_0902.jpg
- delete mode 120000 201304/jmg_0905.jpg
- delete mode 120000 201304/jmg_0921.jpg
- delete mode 120000 201304/jmg_0922.jpg
- delete mode 120000 201304/jmg_0932.jpg
- delete mode 120000 201304/jmg_0935.jpg
- delete mode 120000 201304/jmg_0936.jpg
- delete mode 120000 201304/jmg_0937.jpg
- delete mode 120000 201304/jmg_0938.jpg
- delete mode 120000 201304/jmg_0942.jpg
- delete mode 120000 201304/jmg_0944.jpg
- delete mode 120000 201304/jmg_0946.jpg
- delete mode 120000 201304/jmg_0947.jpg
- delete mode 120000 201304/jmg_0948.jpg
- delete mode 120000 201304/jmg_0949.jpg
- delete mode 120000 201304/jmg_0950.jpg
- delete mode 120000 201304/jmg_0951.jpg
- delete mode 120000 201304/jmg_0952.jpg
- delete mode 120000 201304/jmg_0953.jpg
- delete mode 120000 201304/jmg_0954.jpg
- delete mode 120000 201304/jmg_0958.jpg
- delete mode 120000 201304/jmg_0959.jpg
- delete mode 120000 201304/jmg_0960.jpg
- delete mode 120000 201304/jmg_0961.jpg
- delete mode 120000 201304/jmg_0962.jpg
- delete mode 120000 201304/jmg_0963.jpg
- delete mode 120000 201304/jmg_0964.jpg
- delete mode 120000 201304/jmg_0965.jpg
- delete mode 120000 201304/jmg_0966.jpg
- delete mode 120000 201304/jmg_0967.jpg
- delete mode 120000 201304/jmg_0968.jpg
- delete mode 120000 201304/jmg_0969.jpg
- delete mode 120000 201304/jmg_0976.cr2
- delete mode 120000 201304/jmg_0976.jpg
- delete mode 120000 201304/jmg_0978.jpg
- delete mode 120000 201304/jmg_0979.jpg
- delete mode 120000 201304/jmg_0980.jpg
- delete mode 120000 201304/jmg_0981.cr2
- delete mode 120000 201304/jmg_0981.jpg
- delete mode 120000 201304/jmg_0982.jpg
- delete mode 120000 201304/jmg_0984.cr2
- delete mode 120000 201304/jmg_0984.jpg
- delete mode 120000 201304/jmg_0987.jpg
- delete mode 120000 201304/jmg_0988.jpg
- delete mode 120000 201304/jmg_0989.jpg
- delete mode 120000 201304/jmg_0990.jpg
- delete mode 120000 201304/jmg_0991.jpg
- delete mode 120000 201304/jmg_0992.jpg
- delete mode 120000 201304/jmg_1206.jpg
- delete mode 120000 201304/jmg_1207.jpg
- delete mode 120000 201304/jmg_1208.jpg
- delete mode 120000 201304/jmg_1209.jpg
- delete mode 120000 201304/jmg_1210.cr2
- delete mode 120000 201304/jmg_1210.jpg
- delete mode 120000 201304/jmg_1211.jpg
- delete mode 120000 201304/jmg_1212.jpg
- delete mode 120000 201304/jmg_1213.jpg
- delete mode 120000 201304/jmg_1214.cr2
- delete mode 120000 201304/jmg_1214.jpg
- delete mode 120000 201304/jmg_1215.jpg
- delete mode 120000 201304/jmg_1216.cr2
- delete mode 120000 201304/jmg_1216.jpg
- delete mode 120000 201304/jmg_1217.cr2
- delete mode 120000 201304/jmg_1217.jpg
- delete mode 120000 201304/jmg_1220.cr2
- delete mode 120000 201304/jmg_1220.jpg
- delete mode 120000 201304/jmg_1222.cr2
- delete mode 120000 201304/jmg_1222.jpg
- delete mode 120000 201304/jmg_1223.jpg
- delete mode 120000 201306/jmg_1465.jpg
- delete mode 120000 201306/jmg_1466.jpg
- delete mode 120000 201306/jmg_1467.jpg
- delete mode 120000 201306/jmg_1468.jpg
- delete mode 120000 201306/jmg_1469.jpg
- delete mode 120000 201306/jmg_1470.jpg
- delete mode 120000 201306/jmg_1471.jpg
- delete mode 120000 201306/jmg_1472.jpg
- delete mode 120000 201306/jmg_1473.jpg
- delete mode 120000 201306/jmg_1475.jpg
- delete mode 120000 201306/jmg_1476.jpg
- delete mode 120000 201306/jmg_1477.jpg
- delete mode 120000 201306/jmg_1478.jpg
- delete mode 120000 201306/jmg_1479.jpg
- delete mode 120000 201306/jmg_1480.jpg
- delete mode 120000 201306/jmg_1481.jpg
- delete mode 120000 201306/jmg_1482.jpg
- delete mode 120000 201306/jmg_1483.jpg
- delete mode 120000 201306/jmg_1484.jpg
- delete mode 120000 201306/jmg_1485.jpg
- delete mode 120000 201306/jmg_1486.jpg
- delete mode 120000 201306/jmg_1487.jpg
- delete mode 120000 201306/jmg_1488.jpg
- delete mode 120000 201306/jmg_1489.jpg
- delete mode 120000 201306/jmg_1490.jpg
- delete mode 120000 201306/jmg_1491.jpg
- delete mode 120000 201306/jmg_1492.jpg
- delete mode 120000 201306/jmg_1495.jpg
- delete mode 120000 201306/jmg_1496.jpg
- delete mode 120000 201306/jmg_1498.jpg
- delete mode 120000 201306/jmg_1499.jpg
- delete mode 120000 201306/jmg_1500.jpg
- delete mode 120000 201306/jmg_1501.jpg
- delete mode 120000 201306/jmg_1502.jpg
- delete mode 120000 201306/jmg_1504.jpg
- delete mode 120000 201306/jmg_1506.jpg
- delete mode 120000 201306/jmg_1510.jpg
- delete mode 120000 201306/jmg_1512.jpg
- delete mode 120000 201306/jmg_1513.jpg
- delete mode 120000 201306/jmg_1514.jpg
- delete mode 120000 201306/jmg_1515.jpg
- delete mode 120000 201306/jmg_1517.jpg
- delete mode 120000 201306/jmg_1520.jpg
- delete mode 120000 201306/jmg_1521.jpg
- delete mode 120000 201306/jmg_1526.jpg
- delete mode 120000 201306/jmg_1533.jpg
- delete mode 120000 201306/jmg_1540.jpg
- delete mode 120000 201306/jmg_1546.jpg
- delete mode 120000 201306/jmg_1547.jpg
- delete mode 120000 201306/jmg_1549.jpg
- delete mode 120000 201306/jmg_1550.jpg
- delete mode 120000 201306/jmg_1551.jpg
- delete mode 120000 201306/jmg_1552.jpg
- delete mode 120000 201306/jmg_1553.jpg
- delete mode 120000 201306/jmg_1555.jpg
- delete mode 120000 201306/jmg_1556.jpg
- delete mode 120000 201306/jmg_1557.jpg
- delete mode 120000 201306/jmg_1558.jpg
- delete mode 120000 201306/jmg_1559.jpg
- delete mode 120000 201306/jmg_1560.jpg
- delete mode 120000 201306/jmg_1562.jpg
- delete mode 120000 201306/jmg_1566.jpg
- delete mode 120000 201306/jmg_1568.jpg
- delete mode 120000 201306/jmg_1570.jpg
- delete mode 120000 201306/jmg_1571.jpg
- delete mode 120000 201306/jmg_1572.jpg
- delete mode 120000 201306/jmg_1574.jpg
- delete mode 120000 201306/jmg_1575.jpg
- delete mode 120000 201306/jmg_1576.jpg
- delete mode 120000 201306/jmg_1577.jpg
- delete mode 120000 201306/jmg_1578.jpg
- delete mode 120000 201306/jmg_1579.jpg
- delete mode 120000 201306/jmg_1579_raw.jpg
- delete mode 120000 201306/jmg_1581.jpg
- delete mode 120000 201306/jmg_1583.jpg
- delete mode 120000 201306/jmg_1583_cut.jpg
- delete mode 120000 201306/jmg_1583_raw.jpg
- delete mode 120000 201306/jmg_1584.jpg
- delete mode 120000 201306/jmg_1586.jpg
- delete mode 120000 201306/jmg_1587.jpg
- delete mode 120000 201306/jmg_1588.jpg
- delete mode 120000 201306/jmg_1589.jpg
- delete mode 120000 201306/jmg_1591.jpg
- delete mode 120000 201306/jmg_1592.jpg
- delete mode 120000 201306/jmg_1593.jpg
- delete mode 120000 201306/jmg_1593_raw.jpg
- delete mode 120000 201306/jmg_1594.jpg
- delete mode 120000 201306/jmg_1594_raw.jpg
- delete mode 120000 201306/jmg_1595.jpg
- delete mode 120000 201306/jmg_1596.jpg
- delete mode 120000 201306/jmg_1597.jpg
- delete mode 120000 201306/jmg_1599.jpg
- delete mode 120000 201306/jmg_1626.jpg
- delete mode 120000 201306/jmg_1628.jpg
- delete mode 120000 201306/jmg_1629.jpg
- delete mode 120000 201306/jmg_1630.jpg
- delete mode 120000 201306/jmg_1631.jpg
- delete mode 120000 201306/jmg_1633.jpg
- delete mode 120000 201306/jmg_1635.jpg
- delete mode 120000 201306/jmg_1636.jpg
- delete mode 120000 201306/jmg_1637.jpg
- delete mode 120000 201306/jmg_1638.jpg
- delete mode 120000 201306/jmg_1640.jpg
- delete mode 120000 201306/jmg_1642.jpg
- delete mode 120000 201306/jmg_1643.jpg
- delete mode 120000 201306/jmg_1644.jpg
- delete mode 120000 201306/jmg_1647.jpg
- delete mode 120000 201306/jmg_1649.jpg
- delete mode 120000 201306/jmg_1650.jpg
- delete mode 120000 201306/jmg_1651.jpg
- delete mode 120000 201306/jmg_1652.jpg
- delete mode 120000 201306/jmg_1653.jpg
- delete mode 120000 201306/jmg_1655.jpg
- delete mode 120000 201306/jmg_1656.jpg
- delete mode 120000 201306/jmg_1660.jpg
- delete mode 120000 201306/jmg_1667.jpg
- delete mode 120000 201306/jmg_1682.jpg
- delete mode 120000 201306/jmg_1688.jpg
- delete mode 120000 201306/jmg_1689.jpg
- delete mode 120000 201306/jmg_1701.jpg
- delete mode 120000 201306/jmg_1702.jpg
- delete mode 120000 201306/jmg_1703.jpg
- delete mode 120000 201306/jmg_1710.jpg
- delete mode 120000 201306/jmg_1710_raw.jpg
- delete mode 120000 201306/jmg_1715.jpg
- delete mode 120000 201306/jmg_1716.jpg
- delete mode 120000 201306/jmg_1719.jpg
- delete mode 120000 201306/jmg_1722.jpg
- delete mode 120000 201306/jmg_1723.jpg
- delete mode 120000 201306/jmg_1729.cr2
- delete mode 120000 201308/jmg_2038.jpg
- delete mode 120000 201308/jmg_2039.jpg
- delete mode 120000 201308/jmg_2040.jpg
- delete mode 120000 201308/jmg_2041.jpg
- delete mode 120000 201308/jmg_2042.jpg
- delete mode 120000 201308/jmg_2043.jpg
- delete mode 120000 201308/jmg_2045.jpg
- delete mode 120000 201308/jmg_2047.jpg
- delete mode 120000 201308/jmg_2048.jpg
- delete mode 120000 201308/jmg_2049.jpg
- delete mode 120000 201308/jmg_2050.jpg
- delete mode 120000 201308/jmg_2051.jpg
- delete mode 120000 201308/jmg_2052.jpg
- delete mode 120000 201308/jmg_2053.jpg
- delete mode 120000 201308/jmg_2054.jpg
- delete mode 120000 201308/jmg_2055.jpg
- delete mode 120000 201308/jmg_2056.jpg
- delete mode 120000 201308/jmg_2057.jpg
- delete mode 120000 201308/jmg_2058.jpg
- delete mode 120000 201308/jmg_2059.jpg
- delete mode 120000 201308/jmg_2060.jpg
- delete mode 120000 201308/jmg_2061.jpg
- delete mode 120000 201308/jmg_2062.jpg
- delete mode 120000 201308/jmg_2089.cr2
- delete mode 120000 201308/jmg_2089.jpg
- delete mode 120000 201308/jmg_2089_raw.jpg
- delete mode 120000 201308/jmg_2090.jpg
- delete mode 120000 201308/jmg_2091.jpg
- delete mode 120000 201308/jmg_2092.jpg
- delete mode 120000 201308/jmg_2093.jpg
- delete mode 120000 201308/jmg_2096.jpg
- delete mode 120000 201308/jmg_2097.jpg
- delete mode 120000 201308/jmg_2098.jpg
- delete mode 120000 201308/jmg_2099.cr2
- delete mode 120000 201308/jmg_2099.jpg
- delete mode 120000 201308/jmg_2099_raw.jpg
- delete mode 120000 201308/jmg_2100.cr2
- delete mode 120000 201308/jmg_2100.jpg
- delete mode 120000 201308/jmg_2100_raw.jpg
- delete mode 120000 201308/jmg_2102.jpg
- delete mode 120000 201308/jmg_2103.jpg
- delete mode 120000 201308/jmg_2104.jpg
- delete mode 120000 201308/jmg_2105.jpg
- delete mode 120000 201308/jmg_2106.jpg
- delete mode 120000 201308/jmg_2107.jpg
- delete mode 120000 201308/jmg_2108.jpg
- delete mode 120000 201308/jmg_2109.jpg
- delete mode 120000 201308/jmg_2110.jpg
- delete mode 120000 201308/jmg_2111.jpg
- delete mode 120000 201308/jmg_2112.jpg
- delete mode 120000 201308/jmg_2113.jpg
- delete mode 120000 201308/jmg_2114.jpg
- delete mode 120000 201308/jmg_2115.jpg
- delete mode 120000 201308/jmg_2117.jpg
- delete mode 120000 201308/jmg_2118.jpg
- delete mode 120000 201308/jmg_2119.jpg
- delete mode 120000 201308/jmg_2120.jpg
- delete mode 120000 201308/jmg_2122.jpg
- delete mode 120000 201308/jmg_2125.jpg
- delete mode 120000 201308/jmg_2127.jpg
- delete mode 120000 201308/jmg_2129.jpg
- delete mode 120000 201308/jmg_2130.jpg
- delete mode 120000 201308/jmg_2132.jpg
- delete mode 120000 201308/jmg_2134.jpg
- delete mode 120000 201308/jmg_2135.jpg
- delete mode 120000 201308/jmg_2136.jpg
- delete mode 120000 201308/jmg_2137.jpg
- delete mode 120000 201308/jmg_2138.jpg
- delete mode 120000 201308/jmg_2148.jpg
- delete mode 120000 201308/jmg_2150.jpg
- delete mode 120000 201308/jmg_2151.jpg
- delete mode 120000 201308/jmg_2156.jpg
- delete mode 120000 201308/jmg_2158.cr2
- delete mode 120000 201308/jmg_2158.jpg
- delete mode 120000 201308/jmg_2159.jpg
- delete mode 120000 201308/jmg_2160.jpg
- delete mode 120000 201308/jmg_2161.jpg
- delete mode 120000 201308/jmg_2162.jpg
- delete mode 120000 201308/jmg_2165.jpg
- delete mode 120000 201308/jmg_2166.jpg
- delete mode 120000 201308/jmg_2168.jpg
- delete mode 120000 201308/jmg_2169.jpg
- delete mode 120000 201308/jmg_2171.jpg
- delete mode 120000 201308/jmg_2173.jpg
- delete mode 120000 201308/jmg_2174.jpg
- delete mode 120000 201308/jmg_2175.jpg
- delete mode 120000 201308/jmg_2177.jpg
- delete mode 120000 201308/jmg_2178.jpg
- delete mode 120000 201308/jmg_2180.jpg
- delete mode 120000 201308/jmg_2181.jpg
- delete mode 120000 201308/jmg_2182.jpg
- delete mode 120000 201308/jmg_2183.jpg
- delete mode 120000 201308/jmg_2184.jpg
- delete mode 120000 201308/jmg_2187.jpg
- delete mode 120000 201308/jmg_2188.jpg
- delete mode 120000 201308/jmg_2189.jpg
- delete mode 120000 201308/jmg_2191.cr2
- delete mode 120000 201308/jmg_2191.jpg
- delete mode 120000 201308/jmg_2193.cr2
- delete mode 120000 201308/jmg_2193.jpg
- delete mode 120000 201308/jmg_2194.cr2
- delete mode 120000 201308/jmg_2194.jpg
- delete mode 120000 201308/jmg_2197.cr2
- delete mode 120000 201308/jmg_2197.jpg
- delete mode 120000 201308/jmg_2200.cr2
- delete mode 120000 201308/jmg_2200.jpg
- delete mode 120000 201308/jmg_2201.cr2
- delete mode 120000 201308/jmg_2201.jpg
- delete mode 120000 201308/jmg_2202.cr2
- delete mode 120000 201308/jmg_2202.jpg
- delete mode 120000 201308/jmg_2209.jpg
- delete mode 120000 201308/jmg_2210.jpg
- delete mode 120000 201308/jmg_2215.jpg
- delete mode 120000 201308/jmg_2216.jpg
- delete mode 120000 201308/jmg_2217.cr2
- delete mode 120000 201308/jmg_2217.jpg
- delete mode 120000 201308/jmg_2219.cr2
- delete mode 120000 201308/jmg_2219.jpg
- delete mode 120000 201308/jmg_2223.jpg
- delete mode 120000 201308/jmg_2224.jpg
- delete mode 120000 201308/jmg_2225.cr2
- delete mode 120000 201308/jmg_2225.jpg
- delete mode 120000 201308/jmg_2227.jpg
- delete mode 120000 201308/jmg_2228.jpg
- delete mode 120000 201308/jmg_2235.jpg
- delete mode 120000 201308/jmg_2237.jpg
- delete mode 120000 201308/jmg_2238.jpg
- delete mode 120000 201308/jmg_2239.cr2
- delete mode 120000 201308/jmg_2239.jpg
- delete mode 120000 201308/jmg_2239_raw.jpg
- delete mode 120000 201308/jmg_2240.jpg
- delete mode 120000 201308/jmg_2243.jpg
- delete mode 120000 201308/jmg_2244.jpg
- delete mode 120000 201308/jmg_2245.jpg
- delete mode 120000 201308/jmg_2247.cr2
- delete mode 120000 201308/jmg_2247.jpg
- delete mode 120000 201308/jmg_2249.jpg
- delete mode 120000 201308/jmg_2250.cr2
- delete mode 120000 201308/jmg_2250.jpg
- delete mode 120000 201308/jmg_2252.jpg
- delete mode 120000 201308/jmg_2253.jpg
- delete mode 120000 201308/jmg_2254.jpg
- create mode 120000 incoming/5d/201203/jmg_8701.cr2
- create mode 120000 incoming/5d/201203/jmg_8702.jpg
- create mode 120000 incoming/5d/201203/jmg_8705.jpg
- create mode 120000 incoming/5d/201203/jmg_8711.jpg
- create mode 120000 incoming/5d/201203/jmg_8717.jpg
- create mode 120000 incoming/5d/201203/jmg_8718.jpg
- create mode 120000 incoming/5d/201203/jmg_8719.jpg
- create mode 120000 incoming/5d/201203/jmg_8721.jpg
- create mode 120000 incoming/5d/201203/jmg_8725.jpg
- create mode 120000 incoming/5d/201203/jmg_8726.jpg
- create mode 120000 incoming/5d/201203/jmg_8731.jpg
- create mode 120000 incoming/5d/201203/jmg_8745.jpg
- create mode 120000 incoming/5d/201203/jmg_8747_raw.jpg
- create mode 120000 incoming/5d/201203/jmg_8750.cr2
- create mode 120000 incoming/5d/201203/jmg_8750.jpg
- create mode 120000 incoming/5d/201207/jmg_9048.jpg
- create mode 120000 incoming/5d/201207/jmg_9053.jpg
- create mode 120000 incoming/5d/201207/jmg_9054.jpg
- create mode 120000 incoming/5d/201207/jmg_9069.cr2
- create mode 120000 incoming/5d/201207/jmg_9069.jpg
- create mode 120000 incoming/5d/201207/jmg_9070.cr2
- create mode 120000 incoming/5d/201207/jmg_9070.jpg
- create mode 120000 incoming/5d/201207/jmg_9072.cr2
- create mode 120000 incoming/5d/201207/jmg_9072.jpg
- create mode 120000 incoming/5d/201207/jmg_9076.cr2
- create mode 120000 incoming/5d/201207/jmg_9076.jpg
- create mode 120000 incoming/5d/201302/jmg_0502.cr2
- create mode 120000 incoming/5d/201302/jmg_0502.jpg
- create mode 120000 incoming/5d/201302/jmg_0503.jpg
- create mode 120000 incoming/5d/201302/jmg_0507.jpg
- create mode 120000 incoming/5d/201302/jmg_0510.jpg
- create mode 120000 incoming/5d/201302/jmg_0512.jpg
- create mode 120000 incoming/5d/201302/jmg_0513.jpg
- create mode 120000 incoming/5d/201302/jmg_0514.jpg
- create mode 120000 incoming/5d/201302/jmg_0516.jpg
- create mode 120000 incoming/5d/201302/jmg_0517.jpg
- create mode 120000 incoming/5d/201302/jmg_0518.jpg
- create mode 120000 incoming/5d/201302/jmg_0521.jpg
- create mode 120000 incoming/5d/201302/jmg_0522.jpg
- create mode 120000 incoming/5d/201302/jmg_0523.jpg
- create mode 120000 incoming/5d/201302/jmg_0524.jpg
- create mode 120000 incoming/5d/201302/jmg_0526.jpg
- create mode 120000 incoming/5d/201302/jmg_0527.jpg
- create mode 120000 incoming/5d/201302/jmg_0528.jpg
- create mode 120000 incoming/5d/201302/jmg_0532.cr2
- create mode 120000 incoming/5d/201302/jmg_0532.jpg
- create mode 120000 incoming/5d/201302/jmg_0534.jpg
- create mode 120000 incoming/5d/201302/jmg_0535.jpg
- create mode 120000 incoming/5d/201302/jmg_0537.jpg
- create mode 120000 incoming/5d/201302/jmg_0539.jpg
- create mode 120000 incoming/5d/201302/jmg_0541.jpg
- create mode 120000 incoming/5d/201302/jmg_0543.jpg
- create mode 120000 incoming/5d/jmg_0021.jpg
- create mode 120000 incoming/5d/jmg_0025.jpg
- create mode 120000 incoming/5d/jmg_0026.jpg
- create mode 120000 incoming/5d/jmg_0027.jpg
- create mode 120000 incoming/5d/jmg_0034.jpg
- create mode 120000 incoming/5d/jmg_0035.jpg
- create mode 120000 incoming/5d/jmg_0036.jpg
- create mode 120000 incoming/5d/jmg_0130.jpg
- create mode 120000 incoming/5d/jmg_0131.jpg
- create mode 120000 incoming/5d/jmg_0133.jpg
- create mode 120000 incoming/5d/jmg_0155.jpg
- create mode 120000 incoming/5d/jmg_0156.jpg
- create mode 120000 incoming/5d/jmg_0158.cr2
- create mode 120000 incoming/5d/jmg_0165.cr2
- create mode 120000 incoming/5d/jmg_0166.cr2
- create mode 120000 incoming/5d/jmg_0178.cr2
- create mode 120000 incoming/5d/jmg_0179.jpg
- create mode 120000 incoming/5d/jmg_0180.cr2
- create mode 120000 incoming/5d/jmg_0184.jpg
- create mode 120000 incoming/5d/jmg_0185.cr2
- create mode 120000 incoming/5d/jmg_0187.cr2
- create mode 120000 incoming/5d/jmg_0310.jpg
- create mode 120000 incoming/5d/jmg_0312.jpg
- create mode 120000 incoming/5d/jmg_0315.jpg
- create mode 120000 incoming/5d/jmg_0340.jpg
- create mode 120000 incoming/5d/jmg_0357.jpg
- create mode 120000 incoming/5d/jmg_0364.jpg
- create mode 120000 incoming/5d/jmg_0365.jpg
- create mode 120000 incoming/5d/jmg_0368.jpg
- create mode 120000 incoming/5d/jmg_0374.jpg
- create mode 120000 incoming/5d/jmg_0375.jpg
- create mode 120000 incoming/5d/jmg_0386.jpg
- create mode 120000 incoming/5d/jmg_0399.jpg
- create mode 120000 incoming/5d/jmg_0411.jpg
- create mode 120000 incoming/5d/jmg_0418.jpg
- create mode 120000 incoming/5d/jmg_0476.cr2
- create mode 120000 incoming/5d/jmg_0476.jpg
- create mode 120000 incoming/5d/jmg_0503.jpg
- create mode 120000 incoming/5d/jmg_0507.cr2
- create mode 120000 incoming/5d/jmg_0513.cr2
- create mode 120000 incoming/5d/jmg_0513.jpg
- create mode 120000 incoming/5d/jmg_0516.cr2
- create mode 120000 incoming/5d/jmg_0517.cr2
- create mode 120000 incoming/5d/jmg_0518.jpg
- create mode 120000 incoming/5d/jmg_0522.cr2
- create mode 120000 incoming/5d/jmg_0524.cr2
- create mode 120000 incoming/5d/jmg_0524.jpg
- create mode 120000 incoming/5d/jmg_0530.jpg
- create mode 120000 incoming/5d/jmg_0541.cr2
- create mode 120000 incoming/5d/jmg_0550.jpg
- create mode 120000 incoming/5d/jmg_0554.jpg
- create mode 120000 incoming/5d/jmg_0555.jpg
- create mode 120000 incoming/5d/jmg_0558.jpg
- create mode 120000 incoming/5d/jmg_0563.jpg
- create mode 120000 incoming/5d/jmg_0573.jpg
- create mode 120000 incoming/5d/jmg_0575.cr2
- create mode 120000 incoming/5d/jmg_0578.cr2
- create mode 120000 incoming/5d/jmg_0579.cr2
- create mode 120000 incoming/5d/jmg_0582.jpg
- create mode 120000 incoming/5d/jmg_0593.cr2
- create mode 120000 incoming/5d/jmg_0594.cr2
- create mode 120000 incoming/5d/jmg_0594.jpg
- create mode 120000 incoming/5d/jmg_0595.cr2
- create mode 120000 incoming/5d/jmg_0600.jpg
- create mode 120000 incoming/5d/jmg_0606.cr2
- create mode 120000 incoming/5d/jmg_0607.jpg
- create mode 120000 incoming/5d/jmg_0610.cr2
- create mode 120000 incoming/5d/jmg_0610.jpg
- create mode 120000 incoming/5d/jmg_0612.jpg
- create mode 120000 incoming/5d/jmg_0613.cr2
- create mode 120000 incoming/5d/jmg_0614.jpg
- create mode 120000 incoming/5d/jmg_0619.cr2
- create mode 120000 incoming/5d/jmg_0623.jpg
- create mode 120000 incoming/5d/jmg_0628.cr2
- create mode 120000 incoming/5d/jmg_0628.jpg
- create mode 120000 incoming/5d/jmg_0639.jpg
- create mode 120000 incoming/5d/jmg_0645.cr2
- create mode 120000 incoming/5d/jmg_0646.jpg
- create mode 120000 incoming/5d/jmg_0647.cr2
- create mode 120000 incoming/5d/jmg_0648.jpg
- create mode 120000 incoming/5d/jmg_0649.jpg
- create mode 120000 incoming/5d/jmg_0655.jpg
- create mode 120000 incoming/5d/jmg_0667.jpg
- create mode 120000 incoming/5d/jmg_0670.jpg
- create mode 120000 incoming/5d/jmg_0673.jpg
- create mode 120000 incoming/5d/jmg_0679.jpg
- create mode 120000 incoming/5d/jmg_0685.jpg
- create mode 120000 incoming/5d/jmg_0699.cr2
- create mode 120000 incoming/5d/jmg_0700.cr2
- create mode 120000 incoming/5d/jmg_0701.cr2
- create mode 120000 incoming/5d/jmg_0708.jpg
- create mode 120000 incoming/5d/jmg_0718.jpg
- create mode 120000 incoming/5d/jmg_0726.cr2
- create mode 120000 incoming/5d/jmg_0728.jpg
- create mode 120000 incoming/5d/jmg_0730.jpg
- create mode 120000 incoming/5d/jmg_0734.jpg
- create mode 120000 incoming/5d/jmg_0740.jpg
- create mode 120000 incoming/5d/jmg_0743.cr2
- create mode 120000 incoming/5d/jmg_0744.cr2
- create mode 120000 incoming/5d/jmg_0745.cr2
- create mode 120000 incoming/5d/jmg_0747.jpg
- create mode 120000 incoming/5d/jmg_0750.cr2
- create mode 120000 incoming/5d/jmg_0755.cr2
- create mode 120000 incoming/5d/jmg_0759.cr2
- create mode 120000 incoming/5d/jmg_0760.cr2
- create mode 120000 incoming/5d/jmg_0761.jpg
- create mode 120000 incoming/5d/jmg_0765.jpg
- create mode 120000 incoming/5d/jmg_0768.jpg
- create mode 120000 incoming/5d/jmg_0771.jpg
- create mode 120000 incoming/5d/jmg_0778.jpg
- create mode 120000 incoming/5d/jmg_0780.jpg
- create mode 120000 incoming/5d/jmg_0782.cr2
- create mode 120000 incoming/5d/jmg_0786.cr2
- create mode 120000 incoming/5d/jmg_0787.cr2
- create mode 120000 incoming/5d/jmg_0788.cr2
- create mode 120000 incoming/5d/jmg_0794.jpg
- create mode 120000 incoming/5d/jmg_0796.jpg
- create mode 120000 incoming/5d/jmg_0801.cr2
- create mode 120000 incoming/5d/jmg_0803.cr2
- create mode 120000 incoming/5d/jmg_0804.cr2
- create mode 120000 incoming/5d/jmg_0812.jpg
- create mode 120000 incoming/5d/jmg_0819.jpg
- create mode 120000 incoming/5d/jmg_0827.jpg
- create mode 120000 incoming/5d/jmg_0830.jpg
- create mode 120000 incoming/5d/jmg_0842.jpg
- create mode 120000 incoming/5d/jmg_0846.jpg
- create mode 120000 incoming/5d/jmg_0857.cr2
- create mode 120000 incoming/5d/jmg_0863.jpg
- create mode 120000 incoming/5d/jmg_0866.cr2
- create mode 120000 incoming/5d/jmg_0868.cr2
- create mode 120000 incoming/5d/jmg_0868.jpg
- create mode 120000 incoming/5d/jmg_0870.jpg
- create mode 120000 incoming/5d/jmg_0877.jpg
- create mode 120000 incoming/5d/jmg_0882.cr2
- create mode 120000 incoming/5d/jmg_0883.jpg
- create mode 120000 incoming/5d/jmg_0888.jpg
- create mode 120000 incoming/5d/jmg_0891.jpg
- create mode 120000 incoming/5d/jmg_0894.cr2
- create mode 120000 incoming/5d/jmg_0896.cr2
- create mode 120000 incoming/5d/jmg_0897.cr2
- create mode 120000 incoming/5d/jmg_0898.jpg
- create mode 120000 incoming/5d/jmg_0899.cr2
- create mode 120000 incoming/5d/jmg_0900.jpg
- create mode 120000 incoming/5d/jmg_0905.jpg
- create mode 120000 incoming/5d/jmg_0908.jpg
- create mode 120000 incoming/5d/jmg_0914.jpg
- create mode 120000 incoming/5d/jmg_0915.jpg
- create mode 120000 incoming/5d/jmg_0916.jpg
- create mode 120000 incoming/5d/jmg_0923.jpg
- create mode 120000 incoming/5d/jmg_0924.jpg
- create mode 120000 incoming/5d/jmg_0926.jpg
- create mode 120000 incoming/5d/jmg_0928.jpg
- create mode 120000 incoming/5d/jmg_0929.jpg
- create mode 120000 incoming/5d/jmg_0936.jpg
- create mode 120000 incoming/5d/jmg_0942.jpg
- create mode 120000 incoming/5d/jmg_0944.jpg
- create mode 120000 incoming/5d/jmg_0948.jpg
- create mode 120000 incoming/5d/jmg_0960.jpg
- create mode 120000 incoming/5d/jmg_0966.jpg
- create mode 120000 incoming/5d/jmg_0970.cr2
- create mode 120000 incoming/5d/jmg_0970.jpg
- create mode 120000 incoming/5d/jmg_0972.jpg
- create mode 120000 incoming/5d/jmg_0976.jpg
- create mode 120000 incoming/5d/jmg_0983.cr2
- create mode 120000 incoming/5d/jmg_0985.cr2
- create mode 120000 incoming/5d/jmg_0985.jpg
- create mode 120000 incoming/5d/jmg_0994.jpg
- create mode 120000 incoming/5d/jmg_1209.cr2
- create mode 120000 incoming/5d/jmg_1209.jpg
- create mode 120000 incoming/5d/jmg_1211.cr2
- create mode 120000 incoming/5d/jmg_1211.jpg
- create mode 120000 incoming/5d/jmg_1217.cr2
- create mode 120000 incoming/5d/jmg_1467.cr2
- create mode 120000 incoming/5d/jmg_1469.jpg
- create mode 120000 incoming/5d/jmg_1470.cr2
- create mode 120000 incoming/5d/jmg_1471.cr2
- create mode 120000 incoming/5d/jmg_1472.cr2
- create mode 120000 incoming/5d/jmg_1477.cr2
- create mode 120000 incoming/5d/jmg_1477.jpg
- create mode 120000 incoming/5d/jmg_1481.cr2
- create mode 120000 incoming/5d/jmg_1483.cr2
- create mode 120000 incoming/5d/jmg_1485.jpg
- create mode 120000 incoming/5d/jmg_1488.jpg
- create mode 120000 incoming/5d/jmg_1491.jpg
- create mode 120000 incoming/5d/jmg_1496.cr2
- create mode 120000 incoming/5d/jmg_1502.jpg
- create mode 120000 incoming/5d/jmg_1503.cr2
- create mode 120000 incoming/5d/jmg_1504.jpg
- create mode 120000 incoming/5d/jmg_1507.jpg
- create mode 120000 incoming/5d/jmg_1515.jpg
- create mode 120000 incoming/5d/jmg_1520.jpg
- create mode 120000 incoming/5d/jmg_1523.jpg
- create mode 120000 incoming/5d/jmg_1525.jpg
- create mode 120000 incoming/5d/jmg_1539.jpg
- create mode 120000 incoming/5d/jmg_1542.jpg
- create mode 120000 incoming/5d/jmg_1546.jpg
- create mode 120000 incoming/5d/jmg_1547.cr2
- create mode 120000 incoming/5d/jmg_1549.jpg
- create mode 120000 incoming/5d/jmg_1552.jpg
- create mode 120000 incoming/5d/jmg_1554.cr2
- create mode 120000 incoming/5d/jmg_1555.cr2
- create mode 120000 incoming/5d/jmg_1556.cr2
- create mode 120000 incoming/5d/jmg_1559.cr2
- create mode 120000 incoming/5d/jmg_1560.cr2
- create mode 120000 incoming/5d/jmg_1561.cr2
- create mode 120000 incoming/5d/jmg_1562.cr2
- create mode 120000 incoming/5d/jmg_1565.cr2
- create mode 120000 incoming/5d/jmg_1567.cr2
- create mode 120000 incoming/5d/jmg_1572.cr2
- create mode 120000 incoming/5d/jmg_1577.cr2
- create mode 120000 incoming/5d/jmg_1578.jpg
- create mode 120000 incoming/5d/jmg_1583_cut.jpg
- create mode 120000 incoming/5d/jmg_1583_raw.jpg
- create mode 120000 incoming/5d/jmg_1592.cr2
- create mode 120000 incoming/5d/jmg_1593.jpg
- create mode 120000 incoming/5d/jmg_1626.cr2
- create mode 120000 incoming/5d/jmg_1627.jpg
- create mode 120000 incoming/5d/jmg_1628.cr2
- create mode 120000 incoming/5d/jmg_1629.jpg
- create mode 120000 incoming/5d/jmg_1630.cr2
- create mode 120000 incoming/5d/jmg_1631.cr2
- create mode 120000 incoming/5d/jmg_1633.cr2
- create mode 120000 incoming/5d/jmg_1638.jpg
- create mode 120000 incoming/5d/jmg_1639.cr2
- create mode 120000 incoming/5d/jmg_1646.cr2
- create mode 120000 incoming/5d/jmg_1646.jpg
- create mode 120000 incoming/5d/jmg_1650.jpg
- create mode 120000 incoming/5d/jmg_1651.cr2
- create mode 120000 incoming/5d/jmg_1654.cr2
- create mode 120000 incoming/5d/jmg_1656.jpg
- create mode 120000 incoming/5d/jmg_1677.jpg
- create mode 120000 incoming/5d/jmg_1689.jpg
- create mode 120000 incoming/5d/jmg_1701.jpg
- create mode 120000 incoming/5d/jmg_1703.jpg
- create mode 120000 incoming/5d/jmg_1723.jpg
- create mode 120000 incoming/5d/jmg_2039.jpg
- create mode 120000 incoming/5d/jmg_2041.jpg
- create mode 120000 incoming/5d/jmg_2048.cr2
- create mode 120000 incoming/5d/jmg_2052.jpg
- create mode 120000 incoming/5d/jmg_2061.jpg
- delete mode 120000 incoming/5d/jmg_2064_raw.jpg
- delete mode 120000 incoming/5d/jmg_2065_mo.jpg
- delete mode 120000 incoming/5d/jmg_2065_raw.jpg
- delete mode 120000 incoming/5d/jmg_2066_mo.jpg
- delete mode 120000 incoming/5d/jmg_2066_raw.jpg
- create mode 120000 incoming/5d/jmg_2090.jpg
- create mode 120000 incoming/5d/jmg_2093.jpg
- create mode 120000 incoming/5d/jmg_2100.cr2
- create mode 120000 incoming/5d/jmg_2103.jpg
- create mode 120000 incoming/5d/jmg_2107.jpg
- create mode 120000 incoming/5d/jmg_2108.jpg
- create mode 120000 incoming/5d/jmg_2112.jpg
- create mode 120000 incoming/5d/jmg_2118.jpg
- create mode 120000 incoming/5d/jmg_2119.jpg
- create mode 120000 incoming/5d/jmg_2122.jpg
- create mode 120000 incoming/5d/jmg_2125.jpg
- create mode 120000 incoming/5d/jmg_2137.jpg
- create mode 120000 incoming/5d/jmg_2149.jpg
- create mode 120000 incoming/5d/jmg_2150.jpg
- create mode 120000 incoming/5d/jmg_2158.cr2
- create mode 120000 incoming/5d/jmg_2160.jpg
- create mode 120000 incoming/5d/jmg_2165.jpg
- create mode 120000 incoming/5d/jmg_2188.jpg
- create mode 120000 incoming/5d/jmg_2189.jpg
- create mode 120000 incoming/5d/jmg_2193.jpg
- create mode 120000 incoming/5d/jmg_2194.cr2
- create mode 120000 incoming/5d/jmg_2200.jpg
- create mode 120000 incoming/5d/jmg_2201.cr2
- create mode 120000 incoming/5d/jmg_2201.jpg
- create mode 120000 incoming/5d/jmg_2210.jpg
- create mode 120000 incoming/5d/jmg_2215.cr2
- create mode 120000 incoming/5d/jmg_2216.cr2
- create mode 120000 incoming/5d/jmg_2216.jpg
- create mode 120000 incoming/5d/jmg_2224.jpg
- create mode 120000 incoming/5d/jmg_2235.jpg
- create mode 120000 incoming/5d/jmg_2238.jpg
- create mode 120000 incoming/5d/jmg_2239.cr2
- create mode 120000 incoming/5d/jmg_2239.jpg
- create mode 120000 incoming/5d/jmg_2240.jpg
- create mode 120000 incoming/5d/jmg_2244.jpg
- create mode 120000 incoming/5d/jmg_2247.jpg
- create mode 120000 incoming/5d/jmg_7250.cr2
- create mode 120000 incoming/5d/jmg_7250.jpg
- create mode 120000 incoming/5d/jmg_7256.jpg
- create mode 120000 incoming/5d/jmg_7257.cr2
- create mode 120000 incoming/5d/jmg_7259.cr2
- create mode 120000 incoming/5d/jmg_7263.jpg
- create mode 120000 incoming/5d/jmg_7265.cr2
- create mode 120000 incoming/5d/jmg_7269.cr2
- create mode 120000 incoming/5d/jmg_7270.cr2
- create mode 120000 incoming/5d/jmg_7279.cr2
- create mode 120000 incoming/5d/jmg_7286.cr2
- create mode 120000 incoming/5d/jmg_7286.jpg
- create mode 120000 incoming/5d/jmg_7290.cr2
- create mode 120000 incoming/5d/jmg_7290.jpg
- create mode 120000 incoming/5d/jmg_7293.cr2
- create mode 120000 incoming/5d/jmg_7296.cr2
- create mode 120000 incoming/5d/jmg_7299.jpg
- create mode 120000 incoming/5d/jmg_7300.cr2
- create mode 120000 incoming/5d/jmg_7300.jpg
- create mode 120000 incoming/5d/jmg_7305_raw.jpg
- create mode 120000 incoming/5d/jmg_8532.cr2
- create mode 120000 incoming/5d/jmg_8533.cr2
- create mode 120000 incoming/5d/jmg_8534.cr2
- create mode 120000 incoming/5d/jmg_8536.jpg
- create mode 120000 incoming/5d/jmg_8538.cr2
- create mode 120000 incoming/5d/jmg_8549.cr2
- create mode 120000 incoming/5d/jmg_8549.jpg
- create mode 120000 incoming/5d/jmg_8552.cr2
- create mode 120000 incoming/5d/jmg_8557.cr2
- create mode 120000 incoming/5d/jmg_8560.cr2
- create mode 120000 incoming/5d/jmg_8565.cr2
- create mode 120000 incoming/5d/jmg_8566.cr2
- create mode 120000 incoming/5d/jmg_8569.jpg
- create mode 120000 incoming/5d/jmg_8575.jpg
- create mode 120000 incoming/5d/jmg_8576.jpg
- create mode 120000 incoming/5d/jmg_8578.cr2
- create mode 120000 incoming/5d/jmg_8579.cr2
- create mode 120000 incoming/5d/jmg_8580.jpg
- create mode 120000 incoming/5d/jmg_8583.cr2
- create mode 120000 incoming/5d/jmg_8588.cr2
- create mode 120000 incoming/5d/jmg_8589.cr2
- create mode 120000 incoming/5d/jmg_8595.jpg
- create mode 120000 incoming/5d/jmg_8597.jpg
- create mode 120000 incoming/5d/jmg_8599.jpg
- create mode 120000 incoming/5d/jmg_8602.cr2
- create mode 120000 incoming/5d/jmg_8603.cr2
- create mode 120000 incoming/5d/jmg_8606.cr2
- create mode 120000 incoming/5d/jmg_8606.jpg
- create mode 120000 incoming/5d/jmg_8609.jpg
- create mode 120000 incoming/5d/jmg_8613.jpg
- create mode 120000 incoming/5d/jmg_8615.cr2
- create mode 120000 incoming/5d/jmg_8617.jpg
- create mode 120000 incoming/5d/jmg_8619.cr2
- create mode 120000 incoming/5d/jmg_8620.jpg
- create mode 120000 incoming/5d/jmg_8625.jpg
- create mode 120000 incoming/5d/jmg_8627.jpg
- create mode 120000 incoming/5d/jmg_8628.jpg
- create mode 120000 incoming/5d/jmg_8632.cr2
- create mode 120000 incoming/5d/jmg_8636.cr2
- create mode 120000 incoming/5d/jmg_8636.jpg
- create mode 120000 incoming/5d/jmg_8637.cr2
- create mode 120000 incoming/5d/jmg_8639.jpg
- create mode 120000 incoming/5d/jmg_8640.cr2
- create mode 120000 incoming/5d/jmg_8655.jpg
- create mode 120000 incoming/5d/jmg_8657.jpg
- create mode 120000 incoming/5d/jmg_8670.cr2
- create mode 120000 incoming/5d/jmg_8673.jpg
- create mode 120000 incoming/5d/jmg_8674.cr2
- create mode 120000 incoming/5d/jmg_8676.cr2
- create mode 120000 incoming/5d/jmg_8676.jpg
- create mode 120000 incoming/5d/jmg_8677.cr2
- create mode 120000 incoming/5d/jmg_8681.jpg
- create mode 120000 incoming/5d/jmg_8682.cr2
- create mode 120000 incoming/5d/jmg_8702.cr2
- create mode 120000 incoming/5d/jmg_8702.jpg
- create mode 120000 incoming/5d/jmg_8707.jpg
- create mode 120000 incoming/5d/jmg_8714.jpg
- create mode 120000 incoming/5d/jmg_8716.jpg
- create mode 120000 incoming/5d/jmg_8717.cr2
- create mode 120000 incoming/5d/jmg_8719.jpg
- create mode 120000 incoming/5d/jmg_8721.jpg
- create mode 120000 incoming/5d/jmg_8727.cr2
- create mode 120000 incoming/5d/jmg_8730.jpg
- create mode 120000 incoming/5d/jmg_8736.cr2
- create mode 120000 incoming/5d/jmg_8737.cr2
- create mode 120000 incoming/5d/jmg_8742.cr2
- create mode 120000 incoming/5d/jmg_8742.jpg
- create mode 120000 incoming/5d/jmg_8745.jpg
- create mode 120000 incoming/5d/jmg_8748.cr2
- create mode 120000 incoming/5d/jmg_8748.jpg
- create mode 120000 incoming/5d/jmg_8751.cr2
- create mode 120000 incoming/5d/jmg_8755.cr2
- create mode 120000 incoming/5d/jmg_8757.cr2
- create mode 120000 incoming/5d/jmg_8760.cr2
- create mode 120000 incoming/5d/jmg_8760.jpg
- create mode 120000 incoming/5d/jmg_8765.cr2
- create mode 120000 incoming/5d/jmg_8771.jpg
- create mode 120000 incoming/5d/jmg_8801.jpg
- create mode 120000 incoming/5d/jmg_8803.cr2
- create mode 120000 incoming/5d/jmg_8803.jpg
- create mode 120000 incoming/5d/jmg_8804.jpg
- create mode 120000 incoming/5d/jmg_8805.jpg
- create mode 120000 incoming/5d/jmg_8813.jpg
- create mode 120000 incoming/5d/jmg_8816.cr2
- create mode 120000 incoming/5d/jmg_8823.jpg
- create mode 120000 incoming/5d/jmg_8827.cr2
- create mode 120000 incoming/5d/jmg_8829.cr2
- create mode 120000 incoming/5d/jmg_8832.jpg
- create mode 120000 incoming/5d/jmg_8833.cr2
- create mode 120000 incoming/5d/jmg_8837.cr2
- create mode 120000 incoming/5d/jmg_8838.jpg
- create mode 120000 incoming/5d/jmg_8840.jpg
- create mode 120000 incoming/5d/jmg_8842.jpg
- create mode 120000 incoming/5d/jmg_8844.cr2
- create mode 120000 incoming/5d/jmg_8850.cr2
- create mode 120000 incoming/5d/jmg_8850.jpg
- create mode 120000 incoming/5d/jmg_8852.cr2
- create mode 120000 incoming/5d/jmg_8853.cr2
- create mode 120000 incoming/5d/jmg_8853.jpg
- create mode 120000 incoming/5d/jmg_8856.cr2
- create mode 120000 incoming/5d/jmg_8859.jpg
- create mode 120000 incoming/5d/jmg_8863.jpg
- create mode 120000 incoming/5d/jmg_8870.jpg
- create mode 120000 incoming/5d/jmg_8871.cr2
- create mode 120000 incoming/5d/jmg_8871.jpg
- create mode 120000 incoming/5d/jmg_8881.jpg
- create mode 120000 incoming/5d/jmg_8883.jpg
- create mode 120000 incoming/5d/jmg_8886.jpg
- create mode 120000 incoming/5d/jmg_8887.cr2
- create mode 120000 incoming/5d/jmg_8889.cr2
- create mode 120000 incoming/5d/jmg_8894.cr2
- create mode 120000 incoming/5d/jmg_8897.cr2
- create mode 120000 incoming/5d/jmg_8898.cr2
- create mode 120000 incoming/5d/jmg_8900.jpg
- create mode 120000 incoming/5d/jmg_8901.cr2
- create mode 120000 incoming/5d/jmg_8902.cr2
- create mode 120000 incoming/5d/jmg_8904.cr2
- create mode 120000 incoming/5d/jmg_8906.jpg
- create mode 120000 incoming/5d/jmg_8908.cr2
- create mode 120000 incoming/5d/jmg_8920.cr2
- create mode 120000 incoming/5d/jmg_8920.jpg
- create mode 120000 incoming/5d/jmg_8922.cr2
- create mode 120000 incoming/5d/jmg_8922.jpg
- create mode 120000 incoming/5d/jmg_8923.cr2
- create mode 120000 incoming/5d/jmg_8924.jpg
- create mode 120000 incoming/5d/jmg_8925.cr2
- create mode 120000 incoming/5d/jmg_8929.jpg
- create mode 120000 incoming/5d/jmg_8930.jpg
- create mode 120000 incoming/5d/jmg_8937.cr2
- create mode 120000 incoming/5d/jmg_8939.cr2
- create mode 120000 incoming/5d/jmg_8940.jpg
- create mode 120000 incoming/5d/jmg_8941.jpg
- create mode 120000 incoming/5d/jmg_8943.cr2
- create mode 120000 incoming/5d/jmg_8944.jpg
- create mode 120000 incoming/5d/jmg_8950.cr2
- create mode 120000 incoming/5d/jmg_8951.jpg
- create mode 120000 incoming/5d/jmg_8955.jpg
- create mode 120000 incoming/5d/jmg_8959.cr2
- create mode 120000 incoming/5d/jmg_8960.jpg
- create mode 120000 incoming/5d/jmg_8962.cr2
- create mode 120000 incoming/5d/jmg_8964.cr2
- create mode 120000 incoming/5d/jmg_8965.jpg
- create mode 120000 incoming/5d/jmg_8966.jpg
- create mode 120000 incoming/5d/jmg_8971.jpg
- create mode 120000 incoming/5d/jmg_8976.jpg
- create mode 120000 incoming/5d/jmg_8978.cr2
- create mode 120000 incoming/5d/jmg_8981.jpg
- create mode 120000 incoming/5d/jmg_8982.jpg
- create mode 120000 incoming/5d/jmg_8985.jpg
- create mode 120000 incoming/5d/jmg_8988.cr2
- create mode 120000 incoming/5d/jmg_8988.jpg
- create mode 120000 incoming/5d/jmg_8992.cr2
- create mode 120000 incoming/5d/jmg_8995.jpg
- create mode 120000 incoming/5d/jmg_8996.cr2
- create mode 120000 incoming/5d/jmg_8997.cr2
- create mode 120000 incoming/5d/jmg_8999.cr2
- create mode 120000 incoming/5d/jmg_9000.cr2
- create mode 120000 incoming/5d/jmg_9015.cr2
- create mode 120000 incoming/5d/jmg_9017.cr2
- create mode 120000 incoming/5d/jmg_9019.cr2
- create mode 120000 incoming/5d/jmg_9021.cr2
- create mode 120000 incoming/5d/jmg_9021.jpg
- create mode 120000 incoming/5d/jmg_9022.cr2
- create mode 120000 incoming/5d/jmg_9027.cr2
- create mode 120000 incoming/5d/jmg_9028.jpg
- create mode 120000 incoming/5d/jmg_9031.cr2
- create mode 120000 incoming/5d/jmg_9035.cr2
- create mode 120000 incoming/5d/jmg_9043.jpg
- create mode 120000 incoming/5d/jmg_9057.cr2
- create mode 120000 incoming/5d/jmg_9064.cr2
- create mode 120000 incoming/5d/jmg_9077.jpg
- create mode 120000 incoming/5d/jmg_9078.jpg
- create mode 120000 incoming/5d/jmg_9081.jpg
- create mode 120000 incoming/5d/jmg_9082.cr2
- create mode 120000 incoming/5d/jmg_9083.jpg
- create mode 120000 incoming/5d/jmg_9086.cr2
- create mode 120000 incoming/5d/jmg_9088.jpg
- create mode 120000 incoming/5d/jmg_9308.jpg
- create mode 120000 incoming/5d/jmg_9312.cr2
- create mode 120000 incoming/5d/jmg_9313.jpg
- create mode 120000 incoming/5d/jmg_9319.jpg
- create mode 120000 incoming/5d/jmg_9521.cr2
- create mode 120000 incoming/5d/jmg_9522.cr2
- create mode 120000 incoming/5d/jmg_9533.jpg
- create mode 120000 incoming/5d/jmg_9534.jpg
- create mode 120000 incoming/5d/jmg_9535.cr2
- create mode 120000 incoming/5d/jmg_9538.cr2
- create mode 120000 incoming/5d/jmg_9538.jpg
- create mode 120000 incoming/5d/jmg_9540.jpg
- create mode 120000 incoming/5d/jmg_9542.cr2
- create mode 120000 incoming/5d/jmg_9545.jpg
- create mode 120000 incoming/5d/jmg_9554.jpg
- create mode 120000 incoming/5d/jmg_9555.jpg
- create mode 120000 incoming/5d/jmg_9558.jpg
- create mode 120000 incoming/5d/jmg_9561.cr2
- create mode 120000 incoming/5d/jmg_9585.cr2
- create mode 120000 incoming/5d/jmg_9587.jpg
- create mode 120000 incoming/5d/jmg_9591.jpg
- create mode 120000 incoming/5d/jmg_9595.jpg
- create mode 120000 incoming/5d/jmg_9598.cr2
- create mode 120000 incoming/5d/jmg_9600.jpg
- create mode 120000 incoming/5d/jmg_9604.jpg
- create mode 120000 incoming/5d/jmg_9610.jpg
- create mode 120000 incoming/5d/jmg_9613.cr2
- create mode 120000 incoming/5d/jmg_9613.jpg
- create mode 120000 incoming/5d/jmg_9614.cr2
- create mode 120000 incoming/5d/jmg_9618.jpg
- create mode 120000 incoming/5d/jmg_9619.jpg
- create mode 120000 incoming/5d/jmg_9620.jpg
- create mode 120000 incoming/5d/jmg_9621.jpg
- create mode 120000 incoming/5d/jmg_9623.cr2
- create mode 120000 incoming/5d/jmg_9746.jpg
- create mode 120000 incoming/5d/jmg_9763.cr2
- create mode 120000 incoming/5d/jmg_9763.jpg
- create mode 120000 incoming/5d/jmg_9764.cr2
- create mode 120000 incoming/5d/jmg_9772.jpg
- create mode 120000 incoming/5d/jmg_9773.jpg
- create mode 120000 incoming/5d/jmg_9781.jpg
- create mode 120000 incoming/5d/jmg_9790.jpg
- create mode 120000 incoming/5d/jmg_9800.jpg
- create mode 120000 incoming/5d/jmg_9808.jpg
- create mode 120000 incoming/5d/jmg_9830.jpg
- create mode 120000 incoming/5d/jmg_9834.cr2
- create mode 120000 incoming/5d/jmg_9843.jpg
- create mode 120000 incoming/5d/jmg_9848.jpg
- create mode 120000 incoming/5d/jmg_9849.jpg
- create mode 120000 incoming/5d/jmg_9853.cr2
- create mode 120000 incoming/5d/jmg_9856.jpg
- create mode 120000 incoming/5d/jmg_9857.cr2
- create mode 120000 incoming/5d/jmg_9859.cr2
- create mode 120000 incoming/5d/jmg_9860.jpg
- create mode 120000 incoming/5d/jmg_9917.jpg
- create mode 120000 incoming/5d/jmg_9923.jpg
- create mode 120000 incoming/5d/jmg_9926.jpg
- create mode 120000 incoming/5d/jmg_9975.cr2
- create mode 120000 incoming/5d/jmg_9976.cr2
- create mode 120000 incoming/5d/jmg_9978.jpg
- create mode 120000 incoming/5d/jmg_9988.jpg
- create mode 120000 incoming/5d/jmg_9997.cr2
- create mode 120000 incoming/5d/jmg_9998.jpg
- create mode 120000 incoming/5d/jmg_9999.jpg
- delete mode 120000 list_5d_repoB
- create mode 120000 only_on_repoB
- delete mode 120000 dir/2012/dir2/jmg_0128.cr2
- delete mode 120000 dir/2012/dir2/jmg_0128.jpg
- delete mode 120000 dir/2012/dir2/jmg_0129.cr2
- delete mode 120000 dir/2012/dir2/jmg_0129.jpg
- delete mode 120000 dir/2012/dir2/jmg_0353.jpg
- delete mode 120000 dir/2012/dir2/jmg_0354.jpg
- delete mode 120000 dir/2012/dir2/jmg_0375.jpg
- delete mode 120000 dir/2012/dir2/jmg_0376.jpg
- delete mode 120000 dir/2012/dir2/jmg_0378.jpg
- delete mode 120000 dir/2012/dir2/jmg_8707.cr2
- delete mode 120000 dir/2012/dir2/jmg_8707.jpg
- delete mode 120000 dir/2012/dir2/jmg_8727.cr2
- delete mode 120000 dir/2012/dir2/jmg_8727.jpg
- delete mode 120000 dir/2012/dir2/jmg_8728.cr2
- delete mode 120000 dir/2012/dir2/jmg_8728.jpg
- delete mode 120000 dir/2012/dir2/jmg_8729.cr2
- delete mode 120000 dir/2012/dir2/jmg_8729.jpg
- delete mode 120000 dir/2012/dir2/jmg_8740.cr2
- delete mode 120000 dir/2012/dir2/jmg_8740.jpg
- delete mode 120000 dir/2012/dir2/jmg_8742.cr2
- delete mode 120000 dir/2012/dir2/jmg_8742.jpg
- delete mode 120000 dir/2012/dir2/jmg_8825.cr2
- delete mode 120000 dir/2012/dir2/jmg_8825.jpg
- delete mode 120000 dir/2012/dir2/jmg_8991.cr2
- delete mode 120000 dir/2012/dir2/jmg_8991.jpg
- delete mode 120000 dir/2012/dir2/jmg_8992.cr2
- delete mode 120000 dir/2012/dir2/jmg_8992.jpg
- delete mode 120000 dir/2012/dir2/jmg_8993.cr2
- delete mode 120000 dir/2012/dir2/jmg_8993.jpg
- delete mode 120000 dir/2012/dir2/jmg_9059.cr2
- delete mode 120000 dir/2012/dir2/jmg_9059.jpg
- delete mode 120000 dir/2012/dir2/jmg_9060.cr2
- delete mode 120000 dir/2012/dir2/jmg_9060.jpg
- delete mode 120000 dir/2012/dir2/jmg_9064.cr2
- delete mode 120000 dir/2012/dir2/jmg_9064.jpg
- delete mode 120000 dir/2012/dir2/jmg_9065.cr2
- delete mode 120000 dir/2012/dir2/jmg_9065.jpg
- delete mode 120000 dir/2012/dir2/jmg_9081.cr2
- delete mode 120000 dir/2012/dir2/jmg_9081.jpg
- delete mode 120000 dir/2012/dir2/jmg_9082.cr2
- delete mode 120000 dir/2012/dir2/jmg_9082.jpg
- delete mode 120000 dir/2012/dir2/jmg_9083.cr2
- delete mode 120000 dir/2012/dir2/jmg_9083.jpg
- delete mode 120000 dir/2012/dir1/jmg_0132.cr2
- delete mode 120000 dir/2012/dir1/jmg_0132.jpg
- delete mode 120000 dir/2012/dir1/jmg_0133.cr2
- delete mode 120000 dir/2012/dir1/jmg_0133.jpg
- delete mode 120000 dir/2012/dir1/jmg_0347.jpg
- delete mode 120000 dir/2012/dir1/jmg_0351.jpg
- delete mode 120000 dir/2012/dir1/jmg_0352.jpg
- delete mode 120000 dir/2012/dir1/jmg_0374.jpg
- delete mode 120000 dir/2012/dir1/jmg_8714.cr2
- delete mode 120000 dir/2012/dir1/jmg_8714.jpg
- delete mode 120000 dir/2012/dir1/jmg_8716.cr2
- delete mode 120000 dir/2012/dir1/jmg_8716.jpg
- delete mode 120000 dir/2012/dir1/jmg_8734.cr2
- delete mode 120000 dir/2012/dir1/jmg_8734.jpg
- delete mode 120000 dir/2012/dir1/jmg_8735.cr2
- delete mode 120000 dir/2012/dir1/jmg_8735.jpg
- delete mode 120000 dir/2012/dir1/jmg_8736.cr2
- delete mode 120000 dir/2012/dir1/jmg_8736.jpg
- delete mode 120000 dir/2012/dir1/jmg_8743.cr2
- delete mode 120000 dir/2012/dir1/jmg_8743.jpg
- delete mode 120000 dir/2012/dir1/jmg_8746.cr2
- delete mode 120000 dir/2012/dir1/jmg_8746.jpg
- delete mode 120000 dir/2012/dir1/jmg_8828.cr2
- delete mode 120000 dir/2012/dir1/jmg_8828.jpg
- delete mode 120000 dir/2012/dir1/jmg_8984.cr2
- delete mode 120000 dir/2012/dir1/jmg_8984.jpg
- delete mode 120000 dir/2012/dir1/jmg_8985.cr2
- delete mode 120000 dir/2012/dir1/jmg_8985.jpg
- delete mode 120000 dir/2012/dir1/jmg_8986.cr2
- delete mode 120000 dir/2012/dir1/jmg_8986.jpg
- delete mode 120000 dir/2012/dir1/jmg_8988.cr2
- delete mode 120000 dir/2012/dir1/jmg_8988.jpg
- delete mode 120000 dir/2012/dir1/jmg_9057.cr2
- delete mode 120000 dir/2012/dir1/jmg_9057.jpg
- delete mode 120000 dir/2012/dir1/jmg_9058.cr2
- delete mode 120000 dir/2012/dir1/jmg_9058.jpg
- delete mode 120000 dir/2012/dir1/jmg_9086.cr2
- delete mode 120000 dir/2012/dir1/jmg_9086.jpg
- delete mode 120000 dir/2012/dir1/jmg_9087.cr2
- delete mode 120000 dir/2012/dir1/jmg_9087.jpg
- delete mode 120000 dir/2013/dir2/jmg_0477.cr2
- delete mode 120000 dir/2013/dir2/jmg_0477.jpg
- delete mode 120000 dir/2013/dir2/jmg_0478.cr2
- delete mode 120000 dir/2013/dir2/jmg_0478.jpg
- delete mode 120000 dir/2013/dir2/jmg_0479.cr2
- delete mode 120000 dir/2013/dir2/jmg_0479.jpg
- delete mode 120000 dir/2013/dir2/jmg_0604.cr2
- delete mode 120000 dir/2013/dir2/jmg_0604.jpg
- delete mode 120000 dir/2013/dir2/jmg_0605.cr2
- delete mode 120000 dir/2013/dir2/jmg_0605.jpg
- delete mode 120000 dir/2013/dir2/jmg_0606.cr2
- delete mode 120000 dir/2013/dir2/jmg_0606.jpg
- delete mode 120000 dir/2013/dir2/jmg_0607.cr2
- delete mode 120000 dir/2013/dir2/jmg_0607.jpg
- delete mode 120000 dir/2013/dir2/jmg_0608.cr2
- delete mode 120000 dir/2013/dir2/jmg_0608.jpg
- delete mode 120000 dir/2013/dir2/jmg_0708.cr2
- delete mode 120000 dir/2013/dir2/jmg_0708.jpg
- delete mode 120000 dir/2013/dir2/jmg_0709.cr2
- delete mode 120000 dir/2013/dir2/jmg_0709.jpg
- delete mode 120000 dir/2013/dir2/jmg_0710.cr2
- delete mode 120000 dir/2013/dir2/jmg_0710.jpg
- delete mode 120000 dir/2013/dir1/jmg_0475.cr2
- delete mode 120000 dir/2013/dir1/jmg_0475.jpg
- delete mode 120000 dir/2013/dir1/jmg_0476.cr2
- delete mode 120000 dir/2013/dir1/jmg_0476.jpg
- delete mode 120000 dir/2013/dir1/jmg_0718.cr2
- delete mode 120000 dir/2013/dir1/jmg_0718.jpg
- delete mode 120000 dir/2013/dir1/jmg_0719.cr2
- delete mode 120000 dir/2013/dir1/jmg_0719.jpg
-Already up-to-date.
-[2013-10-27 18:36:44 CET] Committer: Committing changes to git
-[2013-10-27 18:36:44 CET] Pusher: Syncing with repoB
-Already up-to-date.
-fatal: Unable to create '/media/srv/img/.git/refs/heads/synced/git-annex.lock': File exists.
-
-If no other git process is currently running, this probably means a
-git process crashed in this repository earlier. Make sure no other git
-process is running and remove the file manually to continue.
-fatal: The remote end hung up unexpectedly
-fatal: The remote end hung up unexpectedly
-From repoB:/media/srv/img
- 276f659..5eba12c synced/git-annex -> repoB/synced/git-annex
-Everything up-to-date
-[2013-10-27 18:36:50 CET] Committer: Committing changes to git
-[2013-10-27 18:36:51 CET] Pusher: Syncing with repoB
-[2013-10-27 18:36:52 CET] Transferrer: Downloaded only_on_repoB
-[2013-10-27 18:36:53 CET] Transferrer: Downloaded jmg_9077.jpg
-[2013-10-27 18:36:58 CET] Committer: Committing changes to git
-[2013-10-27 18:36:58 CET] Transferrer: Downloaded jmg_8676.cr2
-[2013-10-27 18:36:59 CET] Committer: Committing changes to git
-[2013-10-27 18:37:02 CET] Transferrer: Downloaded jmg_0021.jpg
-[2013-10-27 18:37:02 CET] Committer: Committing changes to git
-[2013-10-27 18:37:04 CET] Transferrer: Downloaded jmg_0025.jpg
-[2013-10-27 18:37:04 CET] Committer: Committing changes to git
-[2013-10-27 18:37:06 CET] Transferrer: Downloaded jmg_0026.jpg
-[2013-10-27 18:37:06 CET] Committer: Committing changes to git
-[2013-10-27 18:37:07 CET] Transferrer: Downloaded jmg_0027.jpg
-[2013-10-27 18:37:07 CET] Committer: Committing changes to git
-[2013-10-27 18:37:10 CET] Transferrer: Downloaded jmg_0034.jpg
-[2013-10-27 18:37:10 CET] Committer: Committing changes to git
-[2013-10-27 18:37:12 CET] Transferrer: Downloaded jmg_0035.jpg
-[2013-10-27 18:37:12 CET] Committer: Committing changes to git
-[2013-10-27 18:37:15 CET] Transferrer: Downloaded jmg_0036.jpg
-[2013-10-27 18:37:15 CET] Committer: Committing changes to git
-[2013-10-27 18:37:17 CET] Transferrer: Downloaded jmg_0130.jpg
-[2013-10-27 18:37:17 CET] Committer: Committing changes to git
-[2013-10-27 18:37:18 CET] Transferrer: Downloaded jmg_0131.jpg
-[2013-10-27 18:37:18 CET] Committer: Committing changes to git
-[2013-10-27 18:37:20 CET] Transferrer: Downloaded jmg_0155.jpg
-[2013-10-27 18:37:20 CET] Committer: Committing changes to git
-[2013-10-27 18:37:23 CET] Transferrer: Downloaded jmg_0156.jpg
-[2013-10-27 18:37:23 CET] Committer: Committing changes to git
-[2013-10-27 18:37:27 CET] Transferrer: Downloaded jmg_0158.cr2
-[2013-10-27 18:37:27 CET] Committer: Committing changes to git
-[2013-10-27 18:37:32 CET] Transferrer: Downloaded jmg_0165.cr2
-[2013-10-27 18:37:32 CET] Committer: Committing changes to git
-[2013-10-27 18:37:37 CET] Transferrer: Downloaded jmg_0166.cr2
-[2013-10-27 18:37:37 CET] Committer: Committing changes to git
-To repoB:/media/srv/img/
- 276f659..5eba12c git-annex -> synced/git-annex
-To repoB:/media/srv/img/
- 5eba12c..f00ee07 git-annex -> synced/git-annex
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(merging repoB/git-annex into git-annex...)
-
-
-(Recording state in git...)
-
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-# End of transcript or log.
-"""]]
-
-> [[done]], seems this was caused by the bug I alread fixed. --[[Joey]]
diff --git a/doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_1_ae4a13ff121d27f78904eee9bf5e716b._comment b/doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_1_ae4a13ff121d27f78904eee9bf5e716b._comment
deleted file mode 100644
index 88b293284..000000000
--- a/doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_1_ae4a13ff121d27f78904eee9bf5e716b._comment
+++ /dev/null
@@ -1,20 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.47"
- subject="comment 1"
- date="2013-10-28T22:02:30Z"
- content="""
-So this sounds like [[bugs/direct_mode_assistant_in_subdir_confusion]], which was fixed in 4.20131024. Is there a possibility that you started the git-annex assistant (or webapp) from within `incoming/5d` ?
-
-I'm not sure if the bug could also cause the removal of directories to happen in the wrong location.
-
-
-----
-
-It should be possible to revert these changes and get your files back.
-
-1. `git annex indirect`
-2. `git log --stat` (find the commit that deleted files)
-3. `git revert $commit`
-4. `git annex direct`
-"""]]
diff --git a/doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_2_32e360cd7b100ddb9a526e7833fc55e1._comment b/doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_2_32e360cd7b100ddb9a526e7833fc55e1._comment
deleted file mode 100644
index 1a7e4e16c..000000000
--- a/doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_2_32e360cd7b100ddb9a526e7833fc55e1._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnh6wz0pMA3NLPFg2j_I3S5JeinaOVqnng"
- nickname="Felix"
- subject="comment 2"
- date="2013-10-30T22:55:36Z"
- content="""
-It's quite possible that I have started the assistant (on the armhf machine) or the webapp (on the amd64 machine) in one of the subfolders, so yes it looks like that specific bug hit me.
-
-Having looked at the logs, I'm pretty sure that the removal of the original directory was caused by removing the suddenly occuring \"mirror\" folders in a subdirectory.
-***
-Reverting proves to be difficult. I created a full copy of the git-annex repo and switched to indirect mode. There are around 500 commits that need to be reverted and about 6 of them are merges which I haven't been able to revert. I have only reverted the non-merge commits and after going back to direct mode there are now around 200 broken symlinks. I'm now assuming that those 200 are the ones that are lost and I need to restore from a backup. Can I rely on that? It's extremely difficult for me to do a full check.
-***
-How should I proceed to get this repo (after further repairs) again in sync with the second repo and have the second repo adopt the \"repaired\" state?
-
-"""]]
diff --git a/doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_3_650dc9ede4e16ef668d96840f63dad47._comment b/doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_3_650dc9ede4e16ef668d96840f63dad47._comment
deleted file mode 100644
index 4e7d6491c..000000000
--- a/doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_3_650dc9ede4e16ef668d96840f63dad47._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.47"
- subject="comment 3"
- date="2013-11-02T20:03:33Z"
- content="""
-I don't understand why there are so many commits that need to be reverted. I'd have thought that it would have only made one bad commit due to the bug, and reverting that would do. Or even just adding back any symlinks removed by any of the bad commits, without an explicit revert would accomplish the same.
-
-You should be able to check with `git annex whereis --not --in .` what git-annex thinks about the 200 broken symlinks. Clearly their content is not in the local repisitory; it may be present elsewhere, or you might have to restore those files from backup.
-
-Once you have the git tree of the repository back in good shape, assuming you did it by committing changes, and possibly committing git reverts, you should be able to just use normal git annex syncing to sync those changes to the second repo. Ie, `git annex sync` in both, or running the assistant.
-"""]]
diff --git a/doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_4_721cf184fb5a5244ec5c15de3302ebf7._comment b/doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_4_721cf184fb5a5244ec5c15de3302ebf7._comment
deleted file mode 100644
index 3876444cd..000000000
--- a/doc/bugs/During_synchronisation_top-level_folder_suddenly_appear_in_sub-sub-folder/comment_4_721cf184fb5a5244ec5c15de3302ebf7._comment
+++ /dev/null
@@ -1,33 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnh6wz0pMA3NLPFg2j_I3S5JeinaOVqnng"
- nickname="Felix"
- subject="Number of commits"
- date="2013-11-21T20:26:46Z"
- content="""
-I have no idea where this large number of commits come from, but maybe the sheer number of files explains it:
-
-Files appearing in the wrong place (probably due to me starting the assistant in a subdirectory of the repo):
-
- $ git log --stat | grep \"5d/20.*+$\" |wc -l
- 1148
-
-Me wondering where they come from and deleting them manually step by step when I found them:
-
- $ git log --stat | grep \"5d/20.*-$\" |wc -l
- 1095
-
-git-annex removing the original files that have been mirrored in the wrong place (and maybe a few more as I was working on stuff there as well):
-
- $ git log --stat | grep \"^ 20.*-$\" | wc -l
- 1152
-
-Maybe this explains the large number (approx. 500) of commits?
-
----
-
-The missing 200 files have not been in a different repo, so apart from 3 that were not available they have been restored from the backup.
-
----
-
-As my setup needs some changes anyway I'm going to start from scratch.
-"""]]
diff --git a/doc/bugs/Error___39__get__39__ting_files_from_rsync_remote__44___versions_3.20120315_and_3.20120430.mdwn b/doc/bugs/Error___39__get__39__ting_files_from_rsync_remote__44___versions_3.20120315_and_3.20120430.mdwn
deleted file mode 100644
index 85e243382..000000000
--- a/doc/bugs/Error___39__get__39__ting_files_from_rsync_remote__44___versions_3.20120315_and_3.20120430.mdwn
+++ /dev/null
@@ -1,79 +0,0 @@
-What steps will reproduce the problem?
-
- $ git annex initremote rsyncremote type=rsync rsyncurl=myuser@rsync.hidrive.strato.com:/users/myuser/git-annex/Music/ encryption=0xC597DECC177AFD7C
- $ git annex get --from rsyncremote "file"
-
-What is the expected output? What do you see instead?
-
-I expect that the requested file is copied as for every other remote, but instead I get this error:
-
-----------------------------------------
- get <file> (from rsyncremote...) (gpg)
- rsync: change_dir "/users/myuser/git-annex/Music/0e5/a5b/'GPGHMACSHA1--3afd32ab8e70ac329262adeb770c330b0845b1e0" failed: No such file or directory (2)
-
- sent 8 bytes received 10 bytes 7.20 bytes/sec
- total size is 0 speedup is 0.00
- rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1518) [Receiver=3.0.9]
-
- rsync failed -- run git annex again to resume file transfer
-
- rsync: change_dir "/users/myuser/git-annex/Music/8k/QZ/'GPGHMACSHA1--3afd32ab8e70ac329262adeb770c330b0845b1e0" failed: No such file or directory (2)
-
- sent 8 bytes received 10 bytes 36.00 bytes/sec
- total size is 0 speedup is 0.00
- rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1518) [Receiver=3.0.9]
-
- rsync failed -- run git annex again to resume file transfer
-failed
- git-annex: get: 1 failed
-----------------------------------------
-
-I can verify that the directory /users/myuser/git-annex/Music/0e5/a5b/GPGHMACSHA1--3afd32ab8e70ac329262adeb770c330b0845b1e0 exists in the rsync remote, without the ' character.
-
-What version of git-annex are you using? On what operating system?
-
-I tried versions 3.20120315 and 3.20120430 on Gentoo linux.
-
- $ uname -a
- Linux odin 3.3.1-gentoo-odin #1 SMP Sat Apr 7 21:18:11 CEST 2012 x86_64 Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz GenuineIntel GNU/Linux
-
- $ ghc --version
- The Glorious Glasgow Haskell Compilation System, version 7.4.1
-
-Please provide any additional information below.
-
-The rsync remote config in .git/config:
-
- [remote "rsyncremote"]
- annex-rsyncurl = myuser@rsync.hidrive.strato.com:/users/myuser/git-annex/Music/
- annex-uuid = "UUID"
-
-> Here's what the --debug flag shows is being run: --[[Joey]]
-
- Running: rsync ["--progress","--inplace","joey@localhost:/tmp/Music/d98/a3c/'GPGHMACSHA1--878c3a3f59965bd87b4738ab29562efd215b954c/GPGHMACSHA1--878c3a3f59965bd87b4738ab29562efd215b954c'","/home/joey/tmp/x/.git/annex/tmp/GPGHMACSHA1--878c3a3f59965bd87b4738ab29562efd215b954c"]
-
-> But, this works for me, here, despite containing the quoting!
-> That's because here it's using rsync over ssh, which actually requires
-> that quoting. Are you using rsync
-> over the rsync protocol? If so, the workaround is to explicitly make
-> the rsyncurl start with `rsync://`
->
-> And if this is the case, I need
-> to adjust the code in git-annex that determines if it's using ssh or
-> the rsync protocol. It assumes that (and this is what the rsync man
-> says AFAICS) that the rsync protocol is only used if the url starts
-> with `rsync://` or contains `::`.
->
->> Nope, it is indeed using rsync over ssh as git-annex thought.
->
-> Hmm, I see that `hidrive.strato.com` is some kind of rsync provider?
-> Perhaps they do something with rsync over ssh that
-> avoids the need for shell quoting. For example, they might pass incoming
-> ssh connections directly into rsync, bypassing the shell
-> -- which avoids the need for this quoting. Any details you can provide
-> about them would probably be useful then. Ie, do they really use rsync
-> over ssh, is it really a `rsync.net` type rsync provider?
-> --[[Joey]]
->
->> This was the case, and the shellescape=no config option has been added
->> to rsync special remotes to deal with it. [[done]] --[[Joey]]
diff --git a/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__.mdwn b/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__.mdwn
deleted file mode 100644
index a44ecc82e..000000000
--- a/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__.mdwn
+++ /dev/null
@@ -1,28 +0,0 @@
-### Please describe the problem.
-When I try to add a box.com cloud repository with the encryption option selected, I get an error that says "internal server error".
-
-### What steps will reproduce the problem?
-Anytime I try to set up a cloud repository with box.com (and presumably others, since this seems to be a problem with gpg (see log)) that is encrypted, I get this error.
-
-
-### What version of git-annex are you using? On what operating system?
-The operating system is Mac OS X 10.8.4, and the version of git-annex is 4.20130801-gc88bbc4.
-
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-(encryption setup) gpg: /Users/adamliter/.gnupg/gpg.conf:233: invalid auto-key-locate list
-30/Aug/2013:02:27:11 -0400 [Error#yesod-core] user error (gpg ["--quiet","--trust-model","always","--gen-random","--armor","1","512"] exited 2) @(yesod-core-1.1.8.3:Yesod.Internal.Core ./Yesod/Internal/Core.hs:550:5)
-
-# End of transcript or log.
-"""]]
-
-[[!meta title="OSX bundled gpg does not work with gpg.conf created by MacGPG"]]
-
-> [[done]]; I have updated the gpg to version 1.4.14 which
-> manages to build with the missing features.
-> --[[Joey]]
diff --git a/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_1_9be1b577fa4d5fe9754845073fdf5d32._comment b/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_1_9be1b577fa4d5fe9754845073fdf5d32._comment
deleted file mode 100644
index ec0234c2d..000000000
--- a/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_1_9be1b577fa4d5fe9754845073fdf5d32._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="guilhem"
- ip="129.16.20.209"
- subject="comment 1"
- date="2013-08-30T11:39:51Z"
- content="""
-gpg complains about an invalid parameter for the `auto-key-locate` option, which is not passed by git-annex but found in your gpg.conf.
-
-What is on line 233 of `/Users/adamliter/.gnupg/gpg.conf`?
-"""]]
diff --git a/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_2_0da0d68b646f2b38be6ecf7c0fe13743._comment b/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_2_0da0d68b646f2b38be6ecf7c0fe13743._comment
deleted file mode 100644
index c8a1db228..000000000
--- a/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_2_0da0d68b646f2b38be6ecf7c0fe13743._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkgH7oNEqNbh3g-N1-UHXuqleXaRYDgj1U"
- nickname="Adam"
- subject="comment 2"
- date="2013-08-30T15:39:16Z"
- content="""
-\"auto-key-locate cert pka ldap hkp://keys.gnupg.net\" is on line 233
-"""]]
diff --git a/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_3_09c56f5574931f2ebe903069f0731160._comment b/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_3_09c56f5574931f2ebe903069f0731160._comment
deleted file mode 100644
index 3cfa9a829..000000000
--- a/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_3_09c56f5574931f2ebe903069f0731160._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="guilhem"
- ip="129.16.20.209"
- subject="comment 3"
- date="2013-08-30T16:09:58Z"
- content="""
-Hmm, it looks like a perfectly valid list. Interesting.
-But regardless, gpg doesn't seem to like that line; what gpg version
-are you using? Also, does it work directly on the command-line
-(`gpg -a --gen-random 1 1`)?
-
-Have you tried to setup the remote without that line in the gpg.conf? Of
-course it wouldn't solve the core of the issue, but it's irrelevant for
-random data generation anyway (the same goes for `--trust-model`);
-perhaps this very command should be run with `--no-options`.
-"""]]
diff --git a/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_4_0c127396e682ca6ced43aec7deeb0335._comment b/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_4_0c127396e682ca6ced43aec7deeb0335._comment
deleted file mode 100644
index 6d2bb451a..000000000
--- a/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_4_0c127396e682ca6ced43aec7deeb0335._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkgH7oNEqNbh3g-N1-UHXuqleXaRYDgj1U"
- nickname="Adam"
- subject="comment 4"
- date="2013-08-30T21:39:26Z"
- content="""
-`gpg -a --gen-random 1 1` on the command line seems to work. At least, when I just ran it it returned `Xg==`. I'm not super familiar with running gpg on the command line, so I'm not sure if that is the desired result when running that.
-
-The version of gpg is GnuPG/MacGPG2 version 2.0.20.
-
-I just tried deleting that line from the config file, and now it worked. Would I be able to replace the line after setting up the repository, or is that going to create problems? I'm not entirely sure what that line does, and I'm a little wary about messing with it in case it breaks the functionality of any of the other things that I use gpg for, like email encryption.
-"""]]
diff --git a/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_5_6bc3eadefde4750eec67a55de6651b2d._comment b/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_5_6bc3eadefde4750eec67a55de6651b2d._comment
deleted file mode 100644
index 998d67055..000000000
--- a/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_5_6bc3eadefde4750eec67a55de6651b2d._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="guilhem"
- ip="129.16.20.209"
- subject="comment 5"
- date="2013-08-30T22:51:56Z"
- content="""
-OK (you just generated 1 byte of base64-encoded random data).
-No, I'm afraid git-annex will croak for each operation using gpg on your remote (which includes get, push, fsck, ...).
-
-This lines specifies how gpg automatically retrieves public keys when you get a signed message for instance. If you don't want to mix configurations, it is easy to create a git-annex-specific GnuPG home directory, but it requires you to point the `GNUPGHOME` to this alternative directory before starting git-annex.
-
-That said, other MacOSX users have encountered the same problem, and it was [[reported_to_be_solved_recently|/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/]].
-"""]]
diff --git a/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_6_263ab9c1483438b1717c8061ac81a2fa._comment b/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_6_263ab9c1483438b1717c8061ac81a2fa._comment
deleted file mode 100644
index 65e6275da..000000000
--- a/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_6_263ab9c1483438b1717c8061ac81a2fa._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.140"
- subject="comment 6"
- date="2013-09-05T16:30:52Z"
- content="""
-I have verified the gpg build I am currently using on OSX fails with that line. MacGPG doesn't but I had problems including it in the build before.
-If you remove the \"cert\" and the \"pkg\" from the line it will work. It seems I need to update the gpg build to support these DNS based key finding methods.
-"""]]
diff --git a/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_7_eccc10990dff37584f8e60cd481a7140._comment b/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_7_eccc10990dff37584f8e60cd481a7140._comment
deleted file mode 100644
index 35d9c71e8..000000000
--- a/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_7_eccc10990dff37584f8e60cd481a7140._comment
+++ /dev/null
@@ -1,26 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.140"
- subject="comment 7"
- date="2013-09-05T16:54:36Z"
- content="""
-./configure says:
-
-<pre>
-checking whether the resolver is usable... no
-checking whether I can make the resolver usable with BIND_8_COMPAT... no
-
-configure:7918: gcc -o conftest -g -O2 conftest.c >&5
-Undefined symbols for architecture x86_64:
- \"_res_9_dn_expand\", referenced from:
- _main in ccsJFrZc.o
- \"_res_9_dn_skipname\", referenced from:
- _main in ccsJFrZc.o
- \"_res_9_query\", referenced from:
- _main in ccsJFrZc.o
-ld: symbol(s) not found for architecture x86_64
-collect2: ld returned 1 exit status
-</pre>
-
-So no DNS stuff until I can find a way to build a gpg for OSX that supports it.
-"""]]
diff --git a/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_8_f897d20cbe5e0f3f58ce1a0bacad3d71._comment b/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_8_f897d20cbe5e0f3f58ce1a0bacad3d71._comment
deleted file mode 100644
index 741c5342f..000000000
--- a/doc/bugs/Error_creating_encrypted_cloud_repository:___34__internal_server_error__34__/comment_8_f897d20cbe5e0f3f58ce1a0bacad3d71._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkgH7oNEqNbh3g-N1-UHXuqleXaRYDgj1U"
- nickname="Adam"
- subject="comment 8"
- date="2013-09-05T17:30:07Z"
- content="""
-Hmm, thanks for looking into it. I appreciate it.
-"""]]
diff --git a/doc/bugs/Error_creating_remote_repository_using_ssh_on_OSX.mdwn b/doc/bugs/Error_creating_remote_repository_using_ssh_on_OSX.mdwn
index cf7dcc88e..67dfae11d 100644
--- a/doc/bugs/Error_creating_remote_repository_using_ssh_on_OSX.mdwn
+++ b/doc/bugs/Error_creating_remote_repository_using_ssh_on_OSX.mdwn
@@ -34,3 +34,6 @@ Please provide any additional information below.
[[!tag /design/assistant/OSX]]
[[!meta title="ssh-askpass not available on OSX"]]
+
+> [[fixed|done]]; the webapp now handles ssh password prompting on its own,
+> ssh-askpass is not needed. --[[Joey]]
diff --git a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__.mdwn b/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__.mdwn
deleted file mode 100644
index d0b2c1538..000000000
--- a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__.mdwn
+++ /dev/null
@@ -1,31 +0,0 @@
-Running 3.20121112 on Debian Squeeze.
-
-Since adding a certain directory of files (just a bunch of PDFs) yesterday I am getting errors when I try to use `git annex drop .` when the files aren't present, rather doing nothing or saying 'ok', as it used to do/should do. The errors are of the form `git-annex: fd:10: hGetLine: end of file` and sometimes of the form `git-annex: fd:17: hFlush: resource vanished (Broken pipe)`. In my `daemon.log`, I have the errors
-
- (scanning...) Already up-to-date.
- Already up-to-date.
- TransferScanner crashed: fd:26: hGetLine: end of file
- Already up-to-date.
- (started...) git-annex: fd:25: hGetLine: end of file
- git-annex: fd:24: hFlush: resource vanished (Broken pipe)
- git-annex: fd:24: hFlush: resource vanished (Broken pipe)
- git-annex: fd:24: hFlush: resource vanished (Broken pipe)
- git-annex: fd:24: hFlush: resource vanished (Broken pipe)
- git-annex: fd:24: hFlush: resource vanished (Broken pipe)
- git-annex: fd:24: hFlush: resource vanished (Broken pipe)
- git-annex: fd:24: hFlush: resource vanished (Broken pipe)
- git-annex: fd:24: hFlush: resource vanished (Broken pipe)
- git-annex: fd:24: hFlush: resource vanished (Broken pipe)
- git-annex: fd:24: hFlush: resource vanished (Broken pipe)
- git-annex: fd:24: hFlush: resource vanished (Broken pipe)
- [many more repetitions]
-
-If I `git annex get` the files and then drop them again, a further attempt at a drop gives all these errors again.
-
-> So in summary, a git-annex built against the old version of git in
-> debian stable fails to work with a newer version of git, and rebuilding
-> fixes it. FWIW, the git-annex backport to stable does not have this
-> problem, because it checks git version at runtime. But I want to avoid
-> the overhead of that check in git-annex mainline, because this old git
-> version is well, very old and increasingly unlikely to be used. So,
-> I don't think any changes to git-annex are warrented. [[done]] --[[Joey]]
diff --git a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_10_8742f7ac27b5f4ad6261d04a174a691c._comment b/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_10_8742f7ac27b5f4ad6261d04a174a691c._comment
deleted file mode 100644
index 921a20024..000000000
--- a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_10_8742f7ac27b5f4ad6261d04a174a691c._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.14.162"
- subject="comment 10"
- date="2012-12-06T22:00:45Z"
- content="""
-Can you show me a transcript of git-check-attr? This is sounding like a git bug.
-
-(The build error is due to too old a version of yesod.)
-"""]]
diff --git a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_11_b8e720340000537de6713c49b7733b2f._comment b/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_11_b8e720340000537de6713c49b7733b2f._comment
deleted file mode 100644
index db964e58c..000000000
--- a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_11_b8e720340000537de6713c49b7733b2f._comment
+++ /dev/null
@@ -1,21 +0,0 @@
-[[!comment format=mdwn
- username="spwhitton"
- ip="163.1.167.50"
- subject="comment 11"
- date="2012-12-06T22:17:37Z"
- content="""
-Upgrading yesod then git-annex removes the problem I was seeing. Thanks for your help with that. Here is a `git-check-attr` session:
-
- backups $ git check-attr --stdin annex.backend annex.numcopies --
- athena-etc.tar.gz
- athena-etc.tar.gz: annex.backend: unspecified
- athena-etc.tar.gz: annex.numcopies: 2
- athena-mail.gz
- athena-mail.gz: annex.backend: unspecified
- athena-mail.gz: annex.numcopies: 2
- athena-web.tar.gz
- athena-web.tar.gz: annex.backend: unspecified
- athena-web.tar.gz: annex.numcopies: 2
- [^D pressed]
- backups $
-"""]]
diff --git a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_1_489fa3a717519cd5d8b4c1a9d143d8c6._comment b/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_1_489fa3a717519cd5d8b4c1a9d143d8c6._comment
deleted file mode 100644
index 902464317..000000000
--- a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_1_489fa3a717519cd5d8b4c1a9d143d8c6._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.253.113"
- subject="comment 1"
- date="2012-12-06T15:04:12Z"
- content="""
-Can you run it with --debug ?
-"""]]
diff --git a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_2_b0796d3b1913e1b6f7b34d75a591be42._comment b/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_2_b0796d3b1913e1b6f7b34d75a591be42._comment
deleted file mode 100644
index 696bdb5aa..000000000
--- a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_2_b0796d3b1913e1b6f7b34d75a591be42._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="spwhitton"
- ip="163.1.167.50"
- subject="comment 2"
- date="2012-12-06T15:13:02Z"
- content="""
-Sure, I've added --debug to the assistant autostart file and am running `git annex --debug drop`. For the first type of error given above I get output like
-
- [2012-12-06 15:08:50 GMT] read: git [\"--git-dir=/home/swhitton/var/.git\",\"--work-tree=/home/swhitton/var\",\"ls-files\",\"--cached\",\"-z\",\"--\",\".\"]
- [2012-12-06 15:08:50 GMT] chat: git [\"--git-dir=/home/swhitton/var/.git\",\"--work-tree=/home/swhitton/var\",\"check-attr\",\"-z\",\"--stdin\",\"annex.backend\",\"annex.numcopies\",\"--\"]
-
- git-annex: fd:10: hGetLine: end of file
- failed
-
-and for the \"resource vanished\" errors I get no further output. There is also nothing further in `daemon.log`.
-"""]]
diff --git a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_3_d8ca17ccaa5ee48d590736af8e77d88a._comment b/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_3_d8ca17ccaa5ee48d590736af8e77d88a._comment
deleted file mode 100644
index c59d60047..000000000
--- a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_3_d8ca17ccaa5ee48d590736af8e77d88a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.253.113"
- subject="comment 3"
- date="2012-12-06T15:21:25Z"
- content="""
-If you run `git annex find` instead of `git annex drop`, does it have any errors?
-"""]]
diff --git a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_4_aa7a690aaf75d21f52051a31d7fce70e._comment b/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_4_aa7a690aaf75d21f52051a31d7fce70e._comment
deleted file mode 100644
index a1baa47cd..000000000
--- a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_4_aa7a690aaf75d21f52051a31d7fce70e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="spwhitton"
- ip="163.1.167.50"
- subject="comment 4"
- date="2012-12-06T15:23:02Z"
- content="""
-No, `git annex find --debug .` outputs just `[2012-12-06 15:22:14 GMT] read: git [\"--git-dir=/home/swhitton/var/.git\",\"--work-tree=/home/swhitton/var\",\"ls-files\",\"--cached\",\"-z\",\"--\",\".\"]`.
-"""]]
diff --git a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_5_dc235dc2d024b7f340721bb578630e00._comment b/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_5_dc235dc2d024b7f340721bb578630e00._comment
deleted file mode 100644
index af7750771..000000000
--- a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_5_dc235dc2d024b7f340721bb578630e00._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.253.113"
- subject="comment 5"
- date="2012-12-06T15:26:27Z"
- content="""
-What version of git do you have installed?
-
-How did you install this version of git-annex on squeeze?
-"""]]
diff --git a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_6_5d1e6ea5b5725c773acc6e288add812c._comment b/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_6_5d1e6ea5b5725c773acc6e288add812c._comment
deleted file mode 100644
index e208b3169..000000000
--- a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_6_5d1e6ea5b5725c773acc6e288add812c._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="spwhitton"
- ip="163.1.167.50"
- subject="comment 6"
- date="2012-12-06T15:29:46Z"
- content="""
-git is at 1.7.10.4 which I got from backports. I only upgraded a couple of days ago (to solve a strange error I was having with cloning to a removable drive); sorry for not mentioning that. I installed git-annex using cabal run as root.
-"""]]
diff --git a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_7_6389b4f03ebc916358bc6674398d70c4._comment b/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_7_6389b4f03ebc916358bc6674398d70c4._comment
deleted file mode 100644
index 9d61f4ac0..000000000
--- a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_7_6389b4f03ebc916358bc6674398d70c4._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.253.113"
- subject="comment 7"
- date="2012-12-06T15:39:26Z"
- content="""
-The problem seems to involve git check-attr exiting unexpectedly. Does this happen only in a specific directory of files, or can you reproduce it elsewhere?
-
-You may be able to reproduce it exiting by running:
-
-`git check-attr --stdin annex.backend annex.numcopies --`
-
-And then entering filenames, pressing enter, and it should answer back with two attribute values and keep running.
-"""]]
diff --git a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_8_bcacc9fb3751042968118ebe33802e27._comment b/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_8_bcacc9fb3751042968118ebe33802e27._comment
deleted file mode 100644
index 8e4e5cf91..000000000
--- a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_8_bcacc9fb3751042968118ebe33802e27._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.253.113"
- subject="comment 8"
- date="2012-12-06T15:41:31Z"
- content="""
-Have you rebuilt git-annex since you upgraded git?
-
-This seems most likely to be the problem; the version of git in squeeze requires git-annex behave differently when using git check-attr, and if you have a version of git-annex built for it, it will do things the new git dislikes.
-"""]]
diff --git a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_9_6d4c9f0e133ebd94fc11346df446402e._comment b/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_9_6d4c9f0e133ebd94fc11346df446402e._comment
deleted file mode 100644
index a48e98ebc..000000000
--- a/doc/bugs/Error_when_dropping___34__hGetLine:_end_of_file__34__/comment_9_6d4c9f0e133ebd94fc11346df446402e._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="spwhitton"
- ip="163.1.167.50"
- subject="comment 9"
- date="2012-12-06T21:37:52Z"
- content="""
-Yes, running git-attr like that does indeed produce the problem. I attempted to rebuild git-annex using cabal, but the build failed with the following error:
-
- [273 of 290] Compiling Assistant.WebApp.Configurators.Local ( Assistant/WebApp/Configurators/Local.hs, dist/build/git-annex/git-annex-tmp/Assistant/WebApp/Configurators/Local.o )
-
- Assistant/WebApp/Configurators/Local.hs:55:11:
- `fieldEnctype' is not a (visible) field of constructor `Field'
- cabal: Error: some packages failed to install:
- git-annex-3.20121127.1 failed during the building phase. The exception was:
- ExitFailure 1
-"""]]
diff --git a/doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location.mdwn b/doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location.mdwn
deleted file mode 100644
index 34d05c0b1..000000000
--- a/doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location.mdwn
+++ /dev/null
@@ -1,21 +0,0 @@
-I just noticed that if you move a git-annex symlink to a location ignored by git, it simply works. Upon committing that change, however, part of git-annex's `fix` function apparently tries to `git-add` the symlink. This fails because the new, ignored location requires a `git-add --force`.
-
-Considering that git proper doesn't fail or warn, I think git-annex shouldn't either.
-
-This is the error message:
-
- $ git mv annexed-file ignored-dir/
- $ git commit
- fix ignored-dir/annexed-file ok
- (Recording state in git...)
- The following paths are ignored by one of your .gitignore files:
- ignored-dir
- Use -f if you really want to add them.
- fatal: no files added
- Command xargs ["-0","git","--git-dir=/home/[...]/repo/.git","--work-tree=/home/[...]/repo","add","--"] failed; exit code 123
-
- git-annex: user error (Command xargs ["-0","git","--git-dir=/home/[...]/repo/.git","--work-tree=/home/[...]/repo","add","--"] failed; exit code 123)
- failed
- git-annex: 1 failed
-
-> Weird edge case.. ok, fixed. [[done]] --[[Joey]]
diff --git a/doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location/comment_1_b524e70156e8bc1219d5c6741974ad99._comment b/doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location/comment_1_b524e70156e8bc1219d5c6741974ad99._comment
deleted file mode 100644
index 6b741e85e..000000000
--- a/doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location/comment_1_b524e70156e8bc1219d5c6741974ad99._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlq4ClC5EMN1Vq1DpWXAqP5TiDnCK1mSfk"
- nickname="Jonas"
- subject="Happens with import, too"
- date="2013-11-24T23:24:09Z"
- content="""
-This happens to me when using git annex import, too (on version 4.20131106)
-
- (Recording state in git...)
- The following paths are ignored by one of your .gitignore files:
- path/to/some/directory/.svn
- Use -f if you really want to add them.
- fatal: no files added
-
- git-annex: user error (xargs [\"-0\",\"git\",\"--git-dir=/path/to/annex/.git\",\"--work-tree=/path/to/annex\",\"add\",\"--\"] exited 123)
-failed
-
-"""]]
diff --git a/doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location/comment_2_ff7349c396d1249204d621e71f6a7a52._comment b/doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location/comment_2_ff7349c396d1249204d621e71f6a7a52._comment
deleted file mode 100644
index 2ee7f79b6..000000000
--- a/doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location/comment_2_ff7349c396d1249204d621e71f6a7a52._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.64"
- subject="comment 2"
- date="2013-11-26T20:04:23Z"
- content="""
-This bug was fixed, and closed 2 years ago. Posting a comment about another, related problem is not very useful.
-
-Yes, git annex import does not finish importing files if you've configured .gititnore to not allow those files to be added. If you need to do that, you could use `git annex import --force`, which will add the files despite the gitignore.
-"""]]
diff --git a/doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location/comment_4_4bc7d4c51faea3fdafc977cb66b7f73a._comment b/doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location/comment_4_4bc7d4c51faea3fdafc977cb66b7f73a._comment
deleted file mode 100644
index a3a6fc10a..000000000
--- a/doc/bugs/Error_when_moving_annexed_file_to_a_.gitignored_location/comment_4_4bc7d4c51faea3fdafc977cb66b7f73a._comment
+++ /dev/null
@@ -1,26 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlq4ClC5EMN1Vq1DpWXAqP5TiDnCK1mSfk"
- nickname="Jonas"
- subject="comment 4"
- date="2013-11-27T17:36:39Z"
- content="""
-Sorry, my bug triaging skills are limited. This one happened to have exactly the same error message...
-
-This might again be the wrong thread, but... how does git annex decide which files to ignore? In particular, it seems not always to agree with git:
-
- $ cd /tmp
- $ mkdir annex
- $ cd annex
- $ git init
- $ git annex init \"Testing annex in /tmp\"
- $ echo \"This file is hidden\" > .hidden_file
- $ git status
- shows .hidden_file as \"untracked\"
- $ git annex add .
- does nothing
- $ git annex add --force .
- does nothing, either
- $ git add .
- adds the file as expected
-
-"""]]
diff --git a/doc/bugs/Error_while_adding_a_file___34__createSymbolicLink:_already_exists__34__.mdwn b/doc/bugs/Error_while_adding_a_file___34__createSymbolicLink:_already_exists__34__.mdwn
deleted file mode 100644
index 21293af54..000000000
--- a/doc/bugs/Error_while_adding_a_file___34__createSymbolicLink:_already_exists__34__.mdwn
+++ /dev/null
@@ -1,46 +0,0 @@
-I'm importing a directory where some files are hard links of each other.
-
-This is confusing git-annex. Here's a small test of that:
-
-<pre>
-paulproteus@pathi:/tmp$ mkdir annex-test
-paulproteus@pathi:/tmp$ cd annex-test
-paulproteus@pathi:/tmp/annex-test$ git init
-Initialized empty Git repository in /tmp/annex-test/.git/
-paulproteus@pathi:/tmp/annex-test$ git annex init testing
-init testing ok
-paulproteus@pathi:/tmp/annex-test$ echo '* annex.backend=SHA1' >> .gitattributes
-paulproteus@pathi:/tmp/annex-test$ git commit .gitattributes -m 'Default to sha1'
-[master dd54b41] Default to sha1
- 1 files changed, 1 insertions(+), 0 deletions(-)
-paulproteus@pathi:/tmp/annex-test$ echo "Look at me" > file1
-paulproteus@pathi:/tmp/annex-test$ cp -l file1 file2
-paulproteus@pathi:/tmp/annex-test$ git annex add file1
-add file1 (checksum...) ok
-(Recording state in git...)
-paulproteus@pathi:/tmp/annex-test$ git commit -m 'So far, so good'
-[master eb43084] So far, so good
- 2 files changed, 2 insertions(+), 0 deletions(-)
- create mode 100644 .git-annex/9a3/f1f/SHA1-s11--b9c599d64212934582d676c722cf3ec61f60e09c.log
- create mode 120000 file1
-paulproteus@pathi:/tmp/annex-test$ git annex add file2
-add file2 (checksum...)
- git-annex: .git/annex/objects/PM/7p/SHA1-s11--b9c599d64212934582d676c722cf3ec61f60e09c/SHA1-s11--b9c599d64212934582d676c722cf3ec61f60e09c: createSymbolicLink: already exists (File exists)
-git-annex: 1 failed
-paulproteus@pathi:/tmp/annex-test$
-</pre>
-
-When trying to make a small test case for this bug, I noticed that if file1 and file2 have the same contents but are not hard links of each other, they both get annexed just fine.
-
-I think the right behavior here is to annex file2 just fine, as if they weren't hard links before.
-
-
--- Asheesh.
-
-> The same thing happens anytime the key for a file collides with a key
-> already in the annex, AFAICS. (Including when the files have the same
-> content but are not hard links... unless you're using WORM backend.)
->
-> I've fixed this bug. The first file in wins. See commit for some
-> interesting discussion about why it should not check for hash collisions
-> in this situation. [[done]] --[[Joey]]
diff --git a/doc/bugs/Every_new_file_gets_symlinked_to_a_git_object.mdwn b/doc/bugs/Every_new_file_gets_symlinked_to_a_git_object.mdwn
deleted file mode 100644
index 9788c8767..000000000
--- a/doc/bugs/Every_new_file_gets_symlinked_to_a_git_object.mdwn
+++ /dev/null
@@ -1,78 +0,0 @@
-### Please describe the problem.
-Every file I add to a watched repository (by git-annex assistant) becomes symlinked, and sub-subsequently write protected.
-
-Sorry if I'm missing something obvious.
-
-### What steps will reproduce the problem?
-1) Fresh install
-2) create directory, init repo and git-annex
-3) git annex assistant
-4) add a file
-5) ls -lsa to see the symlinked file
-6) trying to write to the file throws a write-protected error
-
-
-### What version of git-annex are you using? On what operating system?
-git-annex version: 4.20130725-g8140f7c
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP
-local repository version: 3
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-
-Using the generic linux distribution with ./runshell on Ubuntu 13.04 (I saw this same behaviour from the ubuntu package, i.e. apt-get install git-annex)
-
-
-### Please provide any additional information below.
-
-Here is the output from my ls -lsa
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
- 4 drwxrwxr-x 3 jetaggart jetaggart 4096 Jul 27 20:38 .
-16 drwx------ 60 jetaggart jetaggart 16384 Jul 27 20:44 ..
- 4 drwxrwxr-x 7 jetaggart jetaggart 4096 Jul 27 20:38 .git
- 4 lrwxrwxrwx 1 jetaggart jetaggart 188 Jul 27 20:38 another.org -> .git/annex/objects/Qm/j7/SHA256E-s11--9484d4be897ca66ad4c9bbf299d12adfe37e089bbca1daecbbb49c375a9cf1e9.org/SHA256E-s11--9484d4be897ca66ad4c9bbf299d12adfe37e089bbca1daecbbb49c375a9cf1e9.org
- 4 lrwxrwxrwx 1 jetaggart jetaggart 186 Jul 27 20:33 blah.org -> .git/annex/objects/kj/q5/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.org/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.org
-12 -rw-rw-r-- 1 jetaggart jetaggart 119 Jul 27 20:37 todo.org
-
-
-# End of transcript or log.
-"""]]
-
-Here is the daemon.log
-
-[[!format sh """
-
-[2013-07-27 20:32:55 BST] main: starting assistant version 4.20130725-g8140f7c
-(scanning...) [2013-07-27 20:32:55 BST] Watcher: Performing startup scan
-(started...)
-[2013-07-27 20:33:52 BST] Committer: Adding blah.org
-add blah.org (checksum...) ok
-[2013-07-27 20:33:52 BST] Committer: Committing changes to git
-(Recording state in git...)
-(Recording state in git...)
-[2013-07-27 20:35:59 BST] Committer: Committing changes to git
-(Recording state in git...)
-[2013-07-27 20:36:01 BST] Committer: Committing changes to git
-(Recording state in git...)
-[2013-07-27 20:37:52 BST] Committer: Committing changes to git
-(Recording state in git...)
-[2013-07-27 20:37:55 BST] Committer: Committing changes to git
-(Recording state in git...)
-[2013-07-27 20:38:44 BST] Committer: Committing changes to git
-(Recording state in git...)
-[2013-07-27 20:38:46 BST] Committer: Adding another.org
-add another.org (checksum...) ok
-[2013-07-27 20:38:46 BST] Committer: Committing changes to git
-(Recording state in git...)
-(Recording state in git...)
-[2013-07-27 20:38:51 BST] Committer: Committing changes to git
-(Recording state in git...)
-[2013-07-27 20:38:56 BST] Committer: Committing changes to git
-(Recording state in git...)
-
-# End of transcript or log.
-"""]]
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Every_new_file_gets_symlinked_to_a_git_object/comment_1_d4e7ed56b16494a95e6c904c746cc91f._comment b/doc/bugs/Every_new_file_gets_symlinked_to_a_git_object/comment_1_d4e7ed56b16494a95e6c904c746cc91f._comment
deleted file mode 100644
index e9dfda6fc..000000000
--- a/doc/bugs/Every_new_file_gets_symlinked_to_a_git_object/comment_1_d4e7ed56b16494a95e6c904c746cc91f._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.246.110"
- subject="comment 1"
- date="2013-07-27T19:55:38Z"
- content="""
-This is how git-annex is intended to work in indirect mode. You must have created your repository by hand, and not enabled [[direct_mode]]. Stop the assistant and run `git annex direct`
-"""]]
diff --git a/doc/bugs/Every_new_file_gets_symlinked_to_a_git_object/comment_2_656b2a2cc44e9102c86bdd57045549d5._comment b/doc/bugs/Every_new_file_gets_symlinked_to_a_git_object/comment_2_656b2a2cc44e9102c86bdd57045549d5._comment
deleted file mode 100644
index 81323b16f..000000000
--- a/doc/bugs/Every_new_file_gets_symlinked_to_a_git_object/comment_2_656b2a2cc44e9102c86bdd57045549d5._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmhGq_ii5HaDkp9nx2m9qIMe-xxI4HV5wo"
- nickname="Jeff"
- subject="comment 2"
- date="2013-07-27T20:05:57Z"
- content="""
-I did create it by hand, thanks for the quick feedback, sorry to waste your time.
-
-I'll stick to the forum unless I'm sure it's a bug :)
-"""]]
diff --git a/doc/bugs/EvilLinker_needs_to_escape_spaces_in_user_name.mdwn b/doc/bugs/EvilLinker_needs_to_escape_spaces_in_user_name.mdwn
new file mode 100644
index 000000000..1abe3e691
--- /dev/null
+++ b/doc/bugs/EvilLinker_needs_to_escape_spaces_in_user_name.mdwn
@@ -0,0 +1,18 @@
+### Please describe the problem.
+
+git-annex build on Windows does not complete when user name has a space in it
+
+### What steps will reproduce the problem?
+
+Build git-annex from scratch as described on the Windows page of the guide when running as user Joe Blogs
+
+
+### What version of git-annex are you using? On what operating system?
+
+Windows 7 Prof, Cygwin install on 28/5/2014
+
+### Please provide any additional information below.
+
+The problem arises in escapeDosPaths of EvilLinker: windows usernames can have spaces in them which also need escaping
+
+[[!tag confirmed]]
diff --git a/doc/bugs/EvilLinker_needs_to_escape_spaces_in_user_name/comment_1_6b289221a65a750444b1b5850df3386c._comment b/doc/bugs/EvilLinker_needs_to_escape_spaces_in_user_name/comment_1_6b289221a65a750444b1b5850df3386c._comment
new file mode 100644
index 000000000..db335239b
--- /dev/null
+++ b/doc/bugs/EvilLinker_needs_to_escape_spaces_in_user_name/comment_1_6b289221a65a750444b1b5850df3386c._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 1"
+ date="2014-05-28T22:29:05Z"
+ content="""
+Unfortunately, this is fairly intractable. It would be more productive to fix the [ghc bug](https://ghc.haskell.org/trac/ghc/ticket/8596) that the EvilLinker works around.
+
+Recommend building in a different directory in the meantime.
+"""]]
diff --git a/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications.mdwn b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications.mdwn
new file mode 100644
index 000000000..d4dcc26e3
--- /dev/null
+++ b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications.mdwn
@@ -0,0 +1,138 @@
+The Date resolution of the FAT filesystem is only 2 seconds for the "last modified time."
+This leads to the strange behaviour, that after umount and remount of an usb drive (direct mode) git-annex thinks that suddenly approx. 50% of
+the files are modified. (after remount the "seconds" appears to be rounded to even values - the inode cache before unmount had 1 second resolution) So git-annex is not real "guilty" but it would be fine to create a "workaround" for this problem...
+
+Possible the best solution for this is to set even values for the seconds in the filesystem and in annex internal tables direct after the `git annex get`.
+Other solution would be to treat differences up to 1s in modification time as unmodified or create an new parameter like rsync's "modify-window" for this. To do an `git annex sync` or `git annex add` is in my opinion not a good option, because one could add so Bad file content by accident...
+
+Here's an konsole session to show this behaviour:
+
+ $ mount /mnt/transfer/
+ $ git clone source/ /mnt/transfer/transfer-repo
+
+ Klone nach '/mnt/transfer/transfer-repo'...
+ Fertig.
+
+ $ cd /mnt/transfer/transfer-repo/
+ $ git annex init "test"
+
+ init test
+ Detected a filesystem without fifo support.
+
+ Disabling ssh connection caching.
+
+ Detected a crippled filesystem.
+
+ Enabling direct mode.
+ ok
+ (Recording state in git...)
+
+ $ git annex group here transfer
+
+ group here (merging origin/git-annex into git-annex...)
+ (Recording state in git...)
+ ok
+ (Recording state in git...)
+
+ $ git annex wanted here standard
+
+ wanted here ok
+ (Recording state in git...)
+
+ $ git annex get --auto
+
+ get n01.mp3 (from origin...)
+ SHA256E-s1159018--5674452792970dc03e9ba47d3a8af5ad7c8da6b3ca19e8e64b9a4cf462d4a92d.mp3
+ 1159018 100% 82.62MB/s 0:00:00 (xfer#1, to-check=0/1)
+
+ sent 1159308 bytes received 31 bytes 2318678.00 bytes/sec
+ total size is 1159018 speedup is 1.00
+ ok
+
+ get n02.mp3 (from origin...)
+ SHA256E-s1622113--03998dc10c4839d5ab9aeaceaa63f0363c9d728aaaca2a2707f025c7b9e920a3.mp3
+ 1622113 100% 34.45MB/s 0:00:00 (xfer#1, to-check=0/1)
+
+ sent 1622459 bytes received 31 bytes 3244980.00 bytes/sec
+ total size is 1622113 speedup is 1.00
+ ok
+
+ ...
+ ...
+
+ –--> All 29 files (n01.mp3 to n29.mp3) successfully got
+
+ (Recording state in git...)
+
+ $ git annex status
+ $ stat * >../stat-before-umount
+ $ cd /
+ $ umount /mnt/transfer
+ $ mount /mnt/transfer
+ $ cd /mnt/transfer/transfer-repo
+ $ stat * >../stat-after-remount
+ $ git annex status
+ M n05.mp3
+ M n10.mp3
+ M n11.mp3
+ M n13.mp3
+ M n16.mp3
+ M n17.mp3
+ M n20.mp3
+ M n22.mp3
+ M n23.mp3
+ M n24.mp3
+ M n26.mp3
+ M n27.mp3
+ $ diff -u ../stat-before-umount ../stat-after-remount | grep -B8 "+Modifiziert" | grep -E "Datei:|Modifi"
+
+ Datei: „n05.mp3“
+ -Modifiziert: 2014-05-03 19:42:39.000000000 +0200
+ +Modifiziert: 2014-05-03 19:42:38.000000000 +0200
+
+ Datei: „n10.mp3“
+ -Modifiziert: 2014-05-03 19:43:05.000000000 +0200
+ +Modifiziert: 2014-05-03 19:43:04.000000000 +0200
+
+ Datei: „n11.mp3“
+ -Modifiziert: 2014-05-03 19:43:07.000000000 +0200
+ +Modifiziert: 2014-05-03 19:43:06.000000000 +0200
+
+ Datei: „n13.mp3“
+ -Modifiziert: 2014-05-03 19:43:15.000000000 +0200
+ +Modifiziert: 2014-05-03 19:43:14.000000000 +0200
+
+ Datei: „n16.mp3“
+ -Modifiziert: 2014-05-03 19:43:21.000000000 +0200
+ +Modifiziert: 2014-05-03 19:43:20.000000000 +0200
+
+ Datei: „n17.mp3“
+ -Modifiziert: 2014-05-03 19:43:29.000000000 +0200
+ +Modifiziert: 2014-05-03 19:43:28.000000000 +0200
+
+ Datei: „n20.mp3“
+ -Modifiziert: 2014-05-03 19:43:53.000000000 +0200
+ +Modifiziert: 2014-05-03 19:43:52.000000000 +0200
+
+ Datei: „n22.mp3“
+ -Modifiziert: 2014-05-03 19:44:13.000000000 +0200
+ +Modifiziert: 2014-05-03 19:44:12.000000000 +0200
+
+ Datei: „n23.mp3“
+ -Modifiziert: 2014-05-03 19:44:23.000000000 +0200
+ +Modifiziert: 2014-05-03 19:44:22.000000000 +0200
+
+ Datei: „n24.mp3“
+ -Modifiziert: 2014-05-03 19:44:31.000000000 +0200
+ +Modifiziert: 2014-05-03 19:44:30.000000000 +0200
+
+ Datei: „n26.mp3“
+ -Modifiziert: 2014-05-03 19:44:35.000000000 +0200
+ +Modifiziert: 2014-05-03 19:44:34.000000000 +0200
+
+ Datei: „n27.mp3“
+ -Modifiziert: 2014-05-03 19:44:39.000000000 +0200
+ +Modifiziert: 2014-05-03 19:44:38.000000000 +0200
+
+
+> fixed [[done]] --[[Joey]]
diff --git a/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_10_13a35801805ea3d2d4428b1539f96b16._comment b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_10_13a35801805ea3d2d4428b1539f96b16._comment
new file mode 100644
index 000000000..fdd123103
--- /dev/null
+++ b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_10_13a35801805ea3d2d4428b1539f96b16._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="martin"
+ ip="193.174.111.250"
+ subject="specification"
+ date="2014-06-11T05:43:02Z"
+ content="""
+What you suggested (to not add if exact 1s or exact 1h time difference and changed checksum) would do the trick but it's hard for the user to test if this really works as expected and it would be more secure and IMHO more clear to do it like this:
+
+If `git annex add` \"meets\" such files, `git annex add` should not really add / commit these pseudo-modified files but *only adapt the timestamps* (which make the software erroneously thinks the files were modified) to the vfat values. (if checksum is still correct) I guess the timestamps are in the annex branch.
+
+`git annex add` could - instead of write: \"add ok\" - only write: \"corrected timestamp ok - no need to add\"
+
+So the user sees whats really happen and after this these files appears again as what they are: unmodified. `git annex status` would say nothing (everything fine), and `git annex fsck` would checksum these files again.
+
+I suppose that the way i suggest is harder to code :-( Unfortunately I'm not a good coder and not experienced in haskell for sending a patch myself / the open source way...
+
+
+"""]]
diff --git a/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_11_632456a0a1d399ee2bbac76b7d63a5f1._comment b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_11_632456a0a1d399ee2bbac76b7d63a5f1._comment
new file mode 100644
index 000000000..2605d69ab
--- /dev/null
+++ b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_11_632456a0a1d399ee2bbac76b7d63a5f1._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 11"
+ date="2014-06-11T17:22:12Z"
+ content="""
+@martin, to the best of my knowledge and testing, what you're proposing `git annex add` do in this case is identical to what it already happens to do, except for the message displayed.
+
+Do you have an example of it not doing that?
+
+We seem to be talking past one-another, since I've now said three times this is what it does. And I've tested it twice.
+
+I don't think that the current behavior of add, or your suggested behavior (which again, happens to be nearly identical) is sufficient to close this bug report with.
+"""]]
diff --git a/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_12_e4d268f269cc1701736cc5a39719ac20._comment b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_12_e4d268f269cc1701736cc5a39719ac20._comment
new file mode 100644
index 000000000..8d06ee857
--- /dev/null
+++ b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_12_e4d268f269cc1701736cc5a39719ac20._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 12"
+ date="2014-06-11T18:05:48Z"
+ content="""
+The resolution problem does not seems to affect Windows, at least not on NTFS. In my tests, the mtime is fully preserved across reboots there.
+
+However, any change to the timezone on Windows does manage to mess up all the timestamps. Presumably this same flawed approach is used for DST adjustments.
+
+Example from inode cache after a 1 hour time zone change, which forced git-annex add to re-checksum:
+
+<pre>
+--1 2221 1395843799
++-1 2221 1395847399
+</pre>
+
+Of course, not all time zones are 1 hour offset, so as a heuristic, treating timestamps +- 60*60*Int as the same, would be pretty bad. Instead, it would probably make sense, on windows, to normalize the timestamp, using the current time zone, to get to the UTC timestamp. (Of course on unix, a file's timestamp is always given in UTC.)
+
+Unfortunately, Data.Time.LocalTime.getCurrentTimeZone doesn't seem to really work on windows. It always returns UTC+1 in my tests.
+
+Anyway, I'm now looking at this as two separate problems, the Windows Time Zone Sucks problem and the FAT Metadata Sucks problem. They will probably have different solutions..
+"""]]
diff --git a/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_13_962cd8d7280cbc1d61778d69f3a393f0._comment b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_13_962cd8d7280cbc1d61778d69f3a393f0._comment
new file mode 100644
index 000000000..0428fadbd
--- /dev/null
+++ b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_13_962cd8d7280cbc1d61778d69f3a393f0._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="FAT MetaData Sucks: an approach"
+ date="2014-06-11T18:15:59Z"
+ content="""
+git-annex already deals with FAT metadata sucking by using the inode sentinal file, to detect when a FAT filesystem has been remounted with new random inodes, and so ignore apparent inode changes.
+
+So, when a InodeCache is compared in weak mode due to that, it could just treat all mtimes within 2 seconds as the same. This would limit the brain-damange to FAT.
+
+One problem with this idea is that it's specific to linux's handling of FAT, with its random inodes. A FAT mounted on windows will have -1 for the inodes across remounts. So this method can't detect if a filesystem on windows is FAT, and has the problem, or NTFS and not.
+
+But, I think the FAT side of this problem is also linux-specific. Linux dummies up good metadata for FAT, and then has to throw it away/degrade on unmount. Windows presumably uses real timestamps, with low resolution on FAT from the beginning.
+
+I don't know how eg OSX handles this. If it used constant inodes but cached higher resolution mtimes for FAT, this approach would not work there.
+"""]]
diff --git a/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_14_5b3bb068b62b12c7cc7504836a8acf32._comment b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_14_5b3bb068b62b12c7cc7504836a8acf32._comment
new file mode 100644
index 000000000..e3efdb6d0
--- /dev/null
+++ b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_14_5b3bb068b62b12c7cc7504836a8acf32._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 14"
+ date="2014-06-11T18:59:49Z"
+ content="""
+Opened a separate bug for [[Windows_file_timestamp_timezone_madness]].
+
+Fixed FAT issue on Linux as discussed in my previous comment.
+"""]]
diff --git a/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_15_5271ba4eed013adec8391ddfcc11eda8._comment b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_15_5271ba4eed013adec8391ddfcc11eda8._comment
new file mode 100644
index 000000000..cace00555
--- /dev/null
+++ b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_15_5271ba4eed013adec8391ddfcc11eda8._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="martin"
+ ip="89.183.21.108"
+ subject="In reply to comment 11"
+ date="2014-06-12T09:22:53Z"
+ content="""
+Dear joey,
+
+thanks a lot for fixing this!
+
+Only for this protocol (not to have the last word ;-)
+
+What `git annex add` already does now and what i suggested it could do better is indead the same (result) for uncorrupted files (the frequent case).
+But i'am afraid, it could be slightly different if we deal with corrupted files. The preset behaviour would add this file, the suggested behaviour would not...
+
+But this discussion is history now - i'm lucky :-))
+
+Now i do some tests with daylight savings time change - hopefully there are no problems!
+"""]]
diff --git a/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_1_7a536b79bae7d8f897f014d17dbb90b6._comment b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_1_7a536b79bae7d8f897f014d17dbb90b6._comment
new file mode 100644
index 000000000..0f23da162
--- /dev/null
+++ b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_1_7a536b79bae7d8f897f014d17dbb90b6._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="92.227.51.179"
+ subject="comment 1"
+ date="2014-05-13T16:50:57Z"
+ content="""
+A related issue is that a change from/to daylight-saving time will make files appear to be one hour older/younger. A modify-window couldn’t acommodate that. VFAT is really a huge pain…
+"""]]
diff --git a/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_2_349959a6daa722c8350f73feb0b27162._comment b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_2_349959a6daa722c8350f73feb0b27162._comment
new file mode 100644
index 000000000..7a78362a3
--- /dev/null
+++ b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_2_349959a6daa722c8350f73feb0b27162._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="martin"
+ ip="89.183.46.169"
+ subject="Possible solution?"
+ date="2014-05-13T17:51:41Z"
+ content="""
+How about this quick'n dirty vfat compromise:
+
+For vfat only we do like this (at least for `git annex fsck` command, so that the user doesn't wonder about the strange effects of vfat and can repair this):
+
+if we have an exact time difference of 1s (probably \"inode problem\") or 1h (\"utc problem\")
+we treat this file as likely unmodified and check this via the normal checksum algorithm.
+
+if checksum is ok, we give a message to the user, that the \"file has only a vfat timestamp problem\" but has correct checksum and if the user decides to do so git annex sets the timestamp in the filesystem to the value from annex' internal tables...
+
+"""]]
diff --git a/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_3_923fc470727ecf21f0bb368b0486b15d._comment b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_3_923fc470727ecf21f0bb368b0486b15d._comment
new file mode 100644
index 000000000..599927cd2
--- /dev/null
+++ b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_3_923fc470727ecf21f0bb368b0486b15d._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 3"
+ date="2014-06-05T17:06:40Z"
+ content="""
+> if we have an exact time difference of 1s (probably \"inode problem\") or 1h (\"utc problem\") we treat this file as likely unmodified and check this via the normal checksum algorithm.
+
+That sort of makes sense, but when is git-annex supposed to do that?
+
+If `git annex add`, it already checksums the file, and already stages no change if the file's checksum is the same. And if the user has told git-annex to add the file and it's changed, the presumption is they know it's changed and want to add the new version.
+
+> To do an git annex sync or git annex add is in my opinion not a good option, because one could add so Bad file content by accident...
+
+If not in add or sync, then when?
+
+----
+
+I am actually having a hard time coming up with a scenario where this problem results in any more than extra checksumming work by git-annex.
+
+The only scenario I see is: The drive is unmounted, gets corrupted, is remounted, and this timestamp nonsense causes git-annex to think a file (that has already gotten corrupted) has in fact changed, so it commits the corrupted version.
+"""]]
diff --git a/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_4_68a8434018430a0d2671c4e23e9a3b12._comment b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_4_68a8434018430a0d2671c4e23e9a3b12._comment
new file mode 100644
index 000000000..32abc28c2
--- /dev/null
+++ b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_4_68a8434018430a0d2671c4e23e9a3b12._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="martin"
+ ip="193.174.111.250"
+ subject="It confuses users"
+ date="2014-06-05T19:05:12Z"
+ content="""
+Other scenario: User thinks, that his usb drive has a problem, because approx. 50% of the files are gone/changed without obvious reason. I spent several hours to find the reason for this... I think we should at least give kind of explanation/warning message to the user
+"""]]
diff --git a/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_5_0b7d69489b9f10bb5ed617b5b62ae063._comment b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_5_0b7d69489b9f10bb5ed617b5b62ae063._comment
new file mode 100644
index 000000000..dc27808bb
--- /dev/null
+++ b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_5_0b7d69489b9f10bb5ed617b5b62ae063._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="martin"
+ ip="193.174.111.250"
+ subject="another scenario"
+ date="2014-06-05T19:52:04Z"
+ content="""
+If a user uses such a crippled filesystem as a transfer repo and he does an `git-annex get --auto` on the target pc for getting the content he gets only 50% of the content. (user gets only a strange message that git-annex cannot access the repo or something like this) The user does not have the intuition to do an extra `git-annex add` to get the content because from his perspective he did not made any changes... (sorry for my bad english - i hope you know what i mean)
+"""]]
diff --git a/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_6_650d950da065eeac966c2498418c668d._comment b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_6_650d950da065eeac966c2498418c668d._comment
new file mode 100644
index 000000000..94cbad0e6
--- /dev/null
+++ b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_6_650d950da065eeac966c2498418c668d._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="martin"
+ ip="89.183.56.177"
+ subject="use case and answer to joey's question &quot;...then when...&quot;"
+ date="2014-06-08T04:59:42Z"
+ content="""
+Hi joey,
+
+i really think we should repair the timestamp instead of force the user to `git-annex add` possibly corrupted files/content (see your comment above) git-annex checksums are excellent for data integrity but they are useless if we bypass them in case of adding and propagating
+potentially corrupted content with `git-annex add`
+
+So here's for example a useful use case:
+
+1. user fills his transfer repo in town A. He checks (`git annex fsck`) that everything is fine. He unmounts the drive and travels to town B.
+
+2. In town B user mounts the drive and sees, that he suddenly doesn't have \"access\" to those \"crippled files\" on his transfer repo (the files seems modified for the user without a reason - why should he `git-annex add` them again?? - he'd rather think about data corruption) . He wonders whats going on and thats why he does a
+
+3. `git-annex fsck` . `git annex fsck` should checksum also such crippled files, should report correct checksums if they are correct (so that the users knows their usb drive is working properly) and should give a message like this: \"checksum ok - crippled timestamp - repair with git-annex fsck --repair-timestamp or define a modify window \"- (to be implemented - in rsync the problem is already solved with this option \"--modify-window=NUM compare mod-times with reduced accuracy\")
+
+In my case distance between town B and town A was approx 400km and in town B i didnt know what was going on. So i went back to town A without success for further investigation of my usb drive... :-((
+
+"""]]
diff --git a/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_7_834c512e32ad5a157d8fa9fd472831b4._comment b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_7_834c512e32ad5a157d8fa9fd472831b4._comment
new file mode 100644
index 000000000..7a98be0a2
--- /dev/null
+++ b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_7_834c512e32ad5a157d8fa9fd472831b4._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 7"
+ date="2014-06-09T19:29:09Z"
+ content="""
+A transfer repository is normally bare, so would not have this problem.
+"""]]
diff --git a/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_8_2500e6f9545b916dfa41549140c053fd._comment b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_8_2500e6f9545b916dfa41549140c053fd._comment
new file mode 100644
index 000000000..193038472
--- /dev/null
+++ b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_8_2500e6f9545b916dfa41549140c053fd._comment
@@ -0,0 +1,41 @@
+[[!comment format=mdwn
+ username="martin"
+ ip="89.183.78.73"
+ subject="`git-annex add` (called by sync) should do the job and bring the files back home (IMHO)"
+ date="2014-06-10T15:58:25Z"
+ content="""
+If one does an `git annex sync` these crippled-pseudo-modified-files are *automatically* `git annex add`ed
+
+ git annex status
+ M datei1
+ M datei5
+ M datei6
+ git annex sync
+ commit add datei1 ok
+ add datei5 ok
+ add datei6 ok
+
+To avoid the risk of adding and propagating potentially corrupted content `git-annex add` should
+\"simply\" correct the timestamps (adjust to the new even inode values) for files with correct checksum but timestamp
+difference of 1s or 1h
+
+With this procedure i would have better sleep with this personal second use case:
+
+repo1: on the computer (direct mode - client)
+repo2: on usb stick - (direct mode - client - vfat - music for car)
+
+From time to time mp3 files are transferred to the stick. Then stick
+goes to the car and after some days back to the computer to be
+synchronized again. Everytime approx. 50% of the recently new added files are
+added again (via sync) because of these nonsens timestamps.
+
+So i think, the clean solution is to correct only the timestamps instead
+of adding again possibly corrupted files. If we dont do this users adapt to
+add files again and again (they need not to be added) and one day they
+add corrupted content. Like on windows (tm) you klick OK and OK again and
+here you add again and again and one day one add once too much ;-)
+
+Excuse me for this long comment...
+
+P.S. git annex is an ingenious piece of software - thanks a lot for this joey!
+"""]]
diff --git a/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_9_e2dc3ff80bbd66837f00975b16e17126._comment b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_9_e2dc3ff80bbd66837f00975b16e17126._comment
new file mode 100644
index 000000000..44ac459c0
--- /dev/null
+++ b/doc/bugs/FAT:_Date_resolution_for_mtime_2s--__62___implications/comment_9_e2dc3ff80bbd66837f00975b16e17126._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 9"
+ date="2014-06-10T19:27:55Z"
+ content="""
+> To avoid the risk of adding and propagating potentially corrupted content git-annex add should \"simply\" correct the timestamps (adjust to the new even inode values) for files with correct checksum but timestamp difference of 1s or 1h
+
+Since git-annex add already does that in this case, I think what you're actually suggesting is that, if the timestamp has a 1s or 1h diff, but the checksum has changed, git-annex add should refuse to add the files, on the grounds that it appears to be corrupt. Which obviously fails badly in at least the 1h case, because someone could add a file, then wait 1 hour and git-annex add a modified version.
+"""]]
diff --git a/doc/bugs/Failed_to_make_repository___40__calling_nonexistant_shell__41__.mdwn b/doc/bugs/Failed_to_make_repository___40__calling_nonexistant_shell__41__.mdwn
deleted file mode 100644
index 634f3e501..000000000
--- a/doc/bugs/Failed_to_make_repository___40__calling_nonexistant_shell__41__.mdwn
+++ /dev/null
@@ -1,28 +0,0 @@
-### Please describe the problem.
-
-I get this error message:
-
- Failed to make repository
-
-Something went wrong setting up the repository on the remote server.
-
-Transcript:
-
-/opt/git-annex.linux/runshell: line 73: /home/annex/sh -c 'mkdir -p '"'"'annex'"'"'&&cd '"'"'annex'"'"'&&if [ ! -d .git ]; then git init --bare --shared; fi&&git annex init&&mkdir -p ~/.ssh&&if [ ! -e ~/.ssh/git-annex-shell ]; then (echo '"'"'#!/bin/sh'"'"';echo '"'"'set -e'"'"';echo '"'"'if [ "x$SSH_ORIGINAL_COMMAND" != "x" ]; then'"'"';echo '"'"'exec git-annex-shell -c "$SSH_ORIGINAL_COMMAND"'"'"';echo '"'"'else'"'"';echo '"'"'exec git-annex-shell -c "$@"'"'"';echo '"'"'fi'"'"') > ~/.ssh/git-annex-shell; fi&&chmod 700 ~/.ssh/git-annex-shell&&touch ~/.ssh/authorized_keys&&chmod 600 ~/.ssh/authorized_keys&&echo '"'"'command="GIT_ANNEX_SHELL_DIRECTORY='"'"'"'"'"'"'"'"'annex'"'"'"'"'"'"'"'"' ~/.ssh/git-annex-shell",no-agent-forwarding,no-port-forwarding,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1RQLCJP/gY62xxTOHa4PlZSlSWD2kWBC2+o27SBpBaCVibFfxNKP+1CAgzbyzVygpE0XUXxDOA8dnrq7vPHkkdIlYUZ8JQxTO/zaVVRlzryhWb8QOjEE3ZG0CF+ZQVu14q/M/T4qZm1mtXBCIZMs1wpwTr9dRdf7e/5q5hHROd5sRj+v0PhdiyZ8e6egoq1gFAvspUF1VC74PvZwZ2NKd1s0iGOGGYvoD/nWGCeBUQzMcGk56243zI54tOcDePdZJnd7iIn8FHGprr9yGhc3KYKppWmG7vQU+DhO607FiVnW5aMWjz/msmQidCceIFvnmLFWSDQ5ZNdGVUvHlT9kQQ== p264360@pales
-'"'"' >>~/.ssh/authorized_keys': No such file or directory
-
-### What steps will reproduce the problem?
-
-I made a user annex on my server and set its shell to /opt/git-annex.linux/runshell, then used the webapp on my desktop PC to try and add a remote git repository on my server.
-
-### What version of git-annex are you using? On what operating system?
-
-The latest tarball: git-annex-standalone-amd64.tar.gz 2013-07-09 14:24 19M
-
-Ubuntu 10.04 on both desktop and server.
-
-### Please provide any additional information below.
-
-The problem seems to be runshell trying to call /home/annex/sh, which does not exist. Why would it do that?
-
-> [[done]]
diff --git a/doc/bugs/Failed_to_make_repository___40__calling_nonexistant_shell__41__/comment_1_fb8a379ed7f4b88bd55245ce5b18042c._comment b/doc/bugs/Failed_to_make_repository___40__calling_nonexistant_shell__41__/comment_1_fb8a379ed7f4b88bd55245ce5b18042c._comment
deleted file mode 100644
index 3a225a074..000000000
--- a/doc/bugs/Failed_to_make_repository___40__calling_nonexistant_shell__41__/comment_1_fb8a379ed7f4b88bd55245ce5b18042c._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.90"
- subject="comment 1"
- date="2013-07-16T19:30:55Z"
- content="""
-That's not really how you're meant to use the standalone tarball. Just untar it somewhere, and add that directory to PATH (eg, in `~/.bash_profile`).
-"""]]
diff --git a/doc/bugs/Fails_to_add_files_with_a_newline_in_their_name___59____41__.mdwn b/doc/bugs/Fails_to_add_files_with_a_newline_in_their_name___59____41__.mdwn
new file mode 100644
index 000000000..f096a1532
--- /dev/null
+++ b/doc/bugs/Fails_to_add_files_with_a_newline_in_their_name___59____41__.mdwn
@@ -0,0 +1,71 @@
+### Please describe the problem.
+
+I know that it is actually a problem with my script and that some might treat it as a feature ;) but -- apparently I can have such filenames, git also manages to add it no problem (see below)
+
+### What steps will reproduce the problem?
+
+
+### What version of git-annex are you using? On what operating system?
+
+5.20141024~bpo70+1
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+$> cd 1000genomes/
+total 352
+ 4 20131219.populations.tsv? 4 CHANGELOG? 4 phase1/ 4 README.crams? 4 README.sequence_data?
+ 4 20131219.superpopulations.tsv? 124 changelog_details/ 4 pilot_data/ 4 README.ebi_aspera_info? 4 release/
+ 4 alignment.index? 0 complete_genomics_indices/ 4 README.alignment_data? 4 README.ftp_structure? 4 sequence.index?
+ 4 alignment_indices/ 128 data/ 4 README.analysis_history? 4 README.pilot_data? 16 sequence_indices/
+ 4 analysis.sequence.index? 4 exome.alignment.index? 4 README.complete_genomics_data? 4 README.populations? 4 technical/
+(git)/backup/users/yoh/tmp/nobackup_1000genome-ls.20141124:1000genomes[master]
+#9 !5130 [0].....................................:Wed Nov 26 11:40:13:.
+head2:/backup/users/yoh/tmp/nobackup_1000genome-ls.20141124/1000genomes
+$> git annex add 20131219.*
+add 20131219.populations.tsv
+ git-annex: unknown response from git cat-file ("HEAD:./20131219.populations.tsv missing","HEAD:./20131219.populations.tsv\n")
+(git)/backup/users/yoh/tmp/nobackup_1000genome-ls.20141124:1000genomes[master]
+#10 !5131 [0].....................................:Wed Nov 26 11:40:36:.
+head2:/backup/users/yoh/tmp/nobackup_1000genome-ls.20141124/1000genomes
+*$> git annex add '20131219.populations.tsv
+'
+add 20131219.populations.tsv
+ git-annex: unknown response from git cat-file ("HEAD:./20131219.populations.tsv missing","HEAD:./20131219.populations.tsv\n")
+(git)/backup/users/yoh/tmp/nobackup_1000genome-ls.20141124:1000genomes[master]
+#11 !5132 [0].....................................:Wed Nov 26 11:41:07:.
+head2:/backup/users/yoh/tmp/nobackup_1000genome-ls.20141124/1000genomes
+$> ls -ld '20131219.populations.tsv
+'
+4 -r-------- 2 yoh yoh 91 Nov 26 10:44 20131219.populations.tsv?
+(git)/backup/users/yoh/tmp/nobackup_1000genome-ls.20141124:1000genomes[master]
+#12 !5133 [0].....................................:Wed Nov 26 11:41:15:.
+head2:/backup/users/yoh/tmp/nobackup_1000genome-ls.20141124/1000genomes
+$> acpolicy git-annex
+git-annex:
+ Installed: 5.20141024~bpo70+1
+ Candidate: 5.20141024~bpo70+1
+ Version table:
+ *** 5.20141024~bpo70+1 0
+ 100 http://debproxy/debian/ wheezy-backports/main amd64 Packages
+ 100 /var/lib/dpkg/status
+ 3.20120629 0
+ 500 http://debproxy/debian/ wheezy/main amd64 Packages
+(git)/backup/users/yoh/tmp/nobackup_1000genome-ls.20141124:1000genomes[master]
+#13 !5134 [0].....................................:Wed Nov 26 11:41:31:.
+head2:/backup/users/yoh/tmp/nobackup_1000genome-ls.20141124/1000genomes
+*$> git add '20131219.populations.tsv
+'
+(git)/backup/users/yoh/tmp/nobackup_1000genome-ls.20141124:1000genomes[master]
+#14 !5135 [0].....................................:Wed Nov 26 11:42:58:.
+head2:/backup/users/yoh/tmp/nobackup_1000genome-ls.20141124/1000genomes
+$>
+
+
+# End of transcript or log.
+"""]]
+
+> [[dup|done]] of
+> [[git_annex_import_fails_on_filenames_with_newlines_in_them]] --[[Joey]]
diff --git a/doc/bugs/Fails_to_create_remote_repo_if_no_global_email_set.mdwn b/doc/bugs/Fails_to_create_remote_repo_if_no_global_email_set.mdwn
deleted file mode 100644
index ce9f5c3da..000000000
--- a/doc/bugs/Fails_to_create_remote_repo_if_no_global_email_set.mdwn
+++ /dev/null
@@ -1,55 +0,0 @@
-### Please describe the problem.
-Trying to create repo on ssh server failed because git didn't know my email.
-
-There were other issues I encountered:
-
- - While connecting to the server assistant says that there will be a password prompt, but doesn't tell that one should expect it to appear in the terminal.
-
- - When creating keys it says that I will be prompted for key password again, but it asks for password to remote server (I understood it wanted a password for its new key pair).. there is no telling for what those password prompts in terminal are for
-
- - It actually requires password for remote server multiple times before it starts to use its own keys
-
- - When failed to test the server or create the repo there the "Retry" button doesn't work (does nothing)
-
- - Maybe it should strip leading ~ from repo name?
-
- - Local pairing with annex 3.20121112ubuntu4 from Ubuntu 13.04 sort of works, but not quite.. it syncs the files, but assistant on Ubuntu doesn't show the name for repo on Gentoo (matching versions are important?)
-
- - When pairing it doesn't check if localhost has running sshd
-
- - I think that was the reason why progress bars were showing pending transfers even after the status message about syncing was green after starting sshd (synced, already up-to-date)
-
-### What steps will reproduce the problem?
-Create repo on remote ssh server without global git settings.
-
-### What version of git-annex are you using? On what operating system?
-git-annex-4.20130601, Gentoo amd64
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-Initialized empty shared Git repository in /home/reinis/~/Annex/Lit/
-init
-*** Please tell me who you are.
-
-Run
-
- git config --global user.email "you@example.com"
- git config --global user.name "Your Name"
-
-to set your account's default identity.
-Omit --global to set the identity only in this repository.
-
-fatal: unable to auto-detect email address (got 'reinis@RD-HC.(none)')
-
-git-annex: user error (git ["--git-dir=/home/me/~/Annex/Lit","commit-tree","4b825dc642cb6eb9a060e54bf8d69288fbee4904"] efailed
-xited 128)
-git-annex: init: 1 failed
-
-
-# End of transcript or log.
-"""]]
-
-> [[done]]; I've made git-annex detect such broken systems and configure them so git will work. (sigh!) --[[Joey]]
diff --git a/doc/bugs/Feature_request:___34__quvi__34___flag.mdwn b/doc/bugs/Feature_request:___34__quvi__34___flag.mdwn
deleted file mode 100644
index 950aad0fc..000000000
--- a/doc/bugs/Feature_request:___34__quvi__34___flag.mdwn
+++ /dev/null
@@ -1,14 +0,0 @@
-### Please describe the problem.
-git-annex v4.20130827 can't be built on ARM. Technically it's vector that can't be built due to a lack of Template Haskell compilers for this architecture. Vector is a dependency of aeson, which is a dependency of git-annex, which therefore fails to compile.
-
-The only functionality that relies on aeson is, to my knowledge, quvi. Thus my feature request: If you were to introduce a flag to switch quvi support on or off, ARM users like me could circumvent the aeson dependency at build time. In this case we weren't stuck with 4.20130815 (the latest version to not depend on aeson) and could use current and future versions of git-annex. I would appreciate it.
-
-
-### What steps will reproduce the problem?
-See above.
-
-
-### What version of git-annex are you using? On what operating system?
-I'm running Raspbian Wheezy on a Raspberry Pi. The git-annex version to be built is 4.20130827.
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Feature_request:___34__quvi__34___flag/comment_1_908c38024fd252328566034608c2dec3._comment b/doc/bugs/Feature_request:___34__quvi__34___flag/comment_1_908c38024fd252328566034608c2dec3._comment
deleted file mode 100644
index a5668f664..000000000
--- a/doc/bugs/Feature_request:___34__quvi__34___flag/comment_1_908c38024fd252328566034608c2dec3._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.255.110"
- subject="comment 1"
- date="2013-09-09T05:25:39Z"
- content="""
-Sorry, I didn't consider this dependency chain.
-
-FWIW, it is possible to build aeson without TH. See `standalone/android/haskell-patches/aeson_0.6.1.0_0001-disable-TH.patch` in the git-annex source tree.
-
-However, I will add a flag.
-"""]]
diff --git a/doc/bugs/Feature_request:___34__quvi__34___flag/comment_2_4b6822fe91aa865f2ac1297a3daa3fca._comment b/doc/bugs/Feature_request:___34__quvi__34___flag/comment_2_4b6822fe91aa865f2ac1297a3daa3fca._comment
deleted file mode 100644
index ab4494c19..000000000
--- a/doc/bugs/Feature_request:___34__quvi__34___flag/comment_2_4b6822fe91aa865f2ac1297a3daa3fca._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.255.110"
- subject="comment 2"
- date="2013-09-09T05:44:48Z"
- content="""
-Also, note that libghc-aeson-dev is available for arm in Debian.
-"""]]
diff --git a/doc/bugs/Feature_request:___34__quvi__34___flag/comment_3_c72ef77e76b1c99b5e0c78d0742080e7._comment b/doc/bugs/Feature_request:___34__quvi__34___flag/comment_3_c72ef77e76b1c99b5e0c78d0742080e7._comment
deleted file mode 100644
index bbbd5b597..000000000
--- a/doc/bugs/Feature_request:___34__quvi__34___flag/comment_3_c72ef77e76b1c99b5e0c78d0742080e7._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="RaspberryPie"
- ip="91.213.8.236"
- subject="comment 3"
- date="2013-09-09T05:52:48Z"
- content="""
-Thanks for the quick answer, I will give these two options a try. A flag will be even better, though.
-"""]]
diff --git a/doc/bugs/Feature_request:___34__quvi__34___flag/comment_4_6092695d6afb1608447afe6f86e6fb83._comment b/doc/bugs/Feature_request:___34__quvi__34___flag/comment_4_6092695d6afb1608447afe6f86e6fb83._comment
deleted file mode 100644
index 10a84afda..000000000
--- a/doc/bugs/Feature_request:___34__quvi__34___flag/comment_4_6092695d6afb1608447afe6f86e6fb83._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="RaspberryPie"
- ip="96.44.189.102"
- subject="comment 4"
- date="2013-09-09T19:31:44Z"
- content="""
-That was fast!
-"""]]
diff --git a/doc/bugs/Finding_an_Unused_file.mdwn b/doc/bugs/Finding_an_Unused_file.mdwn
deleted file mode 100644
index c0e613163..000000000
--- a/doc/bugs/Finding_an_Unused_file.mdwn
+++ /dev/null
@@ -1,152 +0,0 @@
-### Please describe the problem.
-
-SHA256E makes it difficult or impossible to find the original filename
-
-### What steps will reproduce the problem?
-
-I have these unused files:
-
- $ git annex unused
- unused . (checking for unused data...) (checking master...) (checking backupbook/HEAD...) (checking b
- aster...) (checking lang/a-...) (checking lang/master...)
- Some annexed data is no longer used by any files:
- NUMBER KEY
- 1 SHA256-s9107031--2611c08c9822179c443f001f0bd7ecadf29adcd28edfa4cd1d8938d289cd3950
- 2 SHA256E-s31131336--58c48adad8e5f091981549dfbb2d9ec1003c8c46d1a660673fabefe722358f9b.flac
- 3 SHA256-s9941549--db12950459ba039e6e6f6102a0811213c11a717d140d6e2f169049b958a5e047
- 4 SHA256-s11544438--174514684e03035cc741fa397a1b46f925899bd29189a98173f8f2a136d95ace
- 5 SHA256E-s23445007--4659fae3eda6db7c528af6439fafab1496c740d02bdb67892450a8a2208fb29b.flac
- 6 SHA256E-s47080709--7d331788ae7fee16bccce060c62cafa3cdafc9e0a2b387c0843cfe5871f51fa6.flac
- 7 SHA256E-s33262563--3280607d6d397f84a02542c5ab2e5a9c44d60256b330e3d075078694f0c7f709.flac
- 8 SHA256-s6522640--a1fa374afd62e8c85a115f18f78e679722f63980191c1e11ef84a49ae86f5b4f
- 9 SHA256E-s29266138--27e792d64b6d4a4d44bdafe6867ca25ba79480d1b650cf385e67ff28a1fc5c31.flac
- 10 SHA256-s14568326--023eb9fcefc063ee3ea495f4d382a8feac795d0e1a81c585781f5d369db2e00c
- 11 SHA256-s11907175--73b66220bdbf0ca92209605b93d95d5f9e8247745f9c4367ff20cb53e11c24ac
- 12 SHA256-s9193267--e159038b78c1b239d4cb8eeb892c7acf0e7b82feac7f5b5808dad477605e8478
- 13 SHA256E-s39329047--880ffab99c4b4c48224f409acb0cd797737e4ee70eacdba9bc7d7628ba3d05d7.flac
- 14 SHA256E-s31400468--17ad7b13757d4e4d6e5d193d8295a30f566e00eea82bc19f50dc14b2bbf79ef3.flac
- 15 SHA256E-s51514687--f83eb092ddcdf35e7f729bfa2cc0914b404de60f0b42f69f207cf01766061f16.flac
- 16 SHA256E-s36235648--54e3f893b498b205b0b96bd87d5f14c71712e891c518070a0e1c730d92b3b0ac.flac
- 17 SHA256-s10001177--35afb0b91c8b9f711b2d3b0fe7433ecc3bb13aece78c6170a47323c94233133d
- 18 SHA256-s11830142--3dabe97ccbb68045d9ea82036ddf7211a3925a1bf682e05a32bcdf9b07bec676
- 19 SHA256E-s23102994--f848ed216e6ba17e6b539f31caa5af36266c367ed55dcff243445848b01fbeef.flac
- 20 SHA256E-s38505547--967763ddd42daf782afa9299e67cb5c834153cb20242b50115dda566b24a68c4.flac
- 21 SHA256-s11874975--14774a404526c4b68ede146f527202c59a4bee88376707c93df7da3bdb5345f2
- 22 SHA256-s10188700--18fd4ee62c2b3b1d8944eae528b59de2a45d493a291440edc9b30881ba10ece3
- 23 SHA256E-s53024109--eba924a26f7c602b60a83f208b2204ef3b570fd92ff39fbc067eeaec7c443ab6.flac
- 24 SHA256-s11315225--0a8d2165166995e819e8c78302c45b1eeca9b79a5d77a3574885cbf8e18f265a
- 25 SHA256-s12249573--79b9e551051232079f24902078e1fe5b7daed684e8acaa7cf29c191404a7c3c7
- 26 SHA256E-s47991289--79cfd8db5b3cbe7f50c335bfe0d148c38ff36dbc97b17ea3aff23d642bd5d167.flac
- 27 SHA256E-s76961343--80e91f73e2f3ae6790d752d380118b3fadc223f9f1449354daa0095b5713986c.flac
- 28 SHA256E-s44706648--ce782096aa5c0d58a12f7cbd6dbfe032fa7b0b4810219e23f906bd7fa0d96336.flac
- 29 SHA256-s9393784--1e0e0190030352b3583ce515cd6dfb0db9f2ae39809a462099482947193bfd0f
- 30 SHA256E-s11534608--bfcc0fdcb1ed112b1737d4fe7d2aa88511187d4c1c132bf1b7ab2cda9a7d90ad.flac
- 31 SHA256E-s27916580--1f196e1b6312421f9d9bcd227a3885a5dec299fc47748cd34d5e59fe26374187.flac
- 32 SHA256-s12099941--0a33af0293acb7cffa1727cc04efa4d7abb29a39e8f2165bfd565e2b18879430
- 33 SHA256E-s35578262--01d6f6022161bcaa825cb353012f85bacf3dcb930337ba506fc94b663b0d8043.flac
- 34 SHA256E-s38880984--fa326bd0db5c9e400a4256e77acd488fede23ec714aeab7deb6952091a09e318.flac
- 35 SHA256E-s27784704--a426f885d79d88d8b42b8a23ce267fb1c1855e8f7ff6833ec9ea61860b3c6819.flac
- 36 SHA256-s11827390--17c1e84815805ea7e01555fdfa038a643a97621b84073679d5c649c020750652
- 37 SHA256E-s16632423--9735e37261624360f6a54fd1bc8a893cb5344afdc910e6b9e00c5791036759b0.flac
- 38 SHA256-s10809006--7dd7ff078bdf4571bee6ab06213df970f427a8a2af476d4511a9c08ed0fb814d
- 39 SHA256E-s33043364--3603942143fa4b1c0082ab7ba1db9b536621402eea3ac94e08ef0197062a2ef6.flac
- 40 SHA256E-s33278052--62e1038e26894c6c014af4e77d2d9f79074ff4fc1ca9ca8c16fcc98eee5277c7.flac
- 41 SHA256E-s47299134--0b604bff3ce12d077691d6e6428648da879c021537c094c72633209d5302fd97.flac
- 42 SHA256E-s14882445--16c6aa4aaf8e60da617701281dfdfa372cb049636ae0f10f5aefcd8ce6c472af.flac
- 43 SHA256E-s18168736--dfd7bfe9a433daef89f6f0015dfddaf7ac3611dd31813b0aed049171ac008323.flac
- 44 SHA256-s10060170--9e3b638c4f397d8dbaa2fa9fc2bfacf6f9e93f00c80ee1fdd26971d25aff86ce
- 45 SHA256E-s25630107--26fedc816dee58cb999cd2be8a58f3e8726ff056ba9c2abfbb9d149e7a92a230.flac
- 46 SHA256-s9148609--3f29a2ae1ebd2e4857bb5c92aefb2f50f39a5a984e14645f658d15795a7c72a5
- 47 SHA256-s10576861--7d95469441ef205616ed795012d8a4c59acc00be00aca66bcacd8b041c2499c5
- 48 SHA256E-s23806802--8725d04f04925f4cd456bdb2108a48682cf51a498d97af9f71c58a412b8db9ab.flac
- 49 SHA256E-s43187837--e83648296fa4553556596464efd4ab313529c0062071c9a40113fecede7a5de6.flac
- 50 SHA256-s10384945--055a01b7e06f3165dddd10beb3e98ba4ca47b35abf9d5b2f26187bf07b9aa401
- 51 SHA256E-s54253300--b011eea8ec7ea51f22e0fe09645ffe83183e9589a9784ebc2d6dd0c559f07322.flac
- 52 SHA256-s10335583--008c17c1a994884c6b9c52e10d17373b9160136ffab940992ef0f9d08eac45c1
- 53 SHA256-s9769970--b36fcb01d9df7627106e3a3c283944457f3e282ab62878c186162d465530cfbc
- 54 SHA256-s10329964--dc4d82e085af3ade48d33cf828f8e7eecc27d4c33c448965e1b8bb59832ec473
- 55 SHA256-s10625243--2494e2ef2c64fc77dcb063f7b58079ad668cf46862b7f11eb28943d45f21b8dd
- 56 SHA256E-s44585111--e35b0774729ccf547cd62e652425579781e3cbd76b33a17a0127bdbedb90606a.flac
- 57 SHA256E-s42060728--9e0a533e640086fadefad7167d37d5b3c5de899e1ac5890bfd7a88524701ff14.flac
- 58 SHA256E-s30013479--ae34a897e2f0e1124f04396e75dd41749511ce9930a2891ae3a066597ad518c5.flac
- 59 SHA256E-s38896704--ca6211442c33d9c44b997bef8f1079f07cdd2eb0e9e3c1de1eda9ae8a705f137.flac
- 60 SHA256-s13044938--8714a1db8781daa9f3993128dcda5a5ca904e075723cf38a11bc5e3695cf126f
- 61 SHA256-s8814622--ba374e92c53ddb83605e2b500647117a00e4c6c463653cb0dd0311b76627c2ec
- 62 SHA256E-s14900839--e94089b89629561ebf771543236f31439af1e6fcdce7ff56b9a183041e95e7ea.flac
- 63 SHA256E-s27370218--a4717cf0615cda099ea5740194da8b4e349f2f38f6ebbf5f6111ced7f56d1736.flac
- 64 SHA256E-s57686070--6d02689ccf91317bdfa4d8694ccbf7a9ccf00a7e00b92733769194908b4087d9.flac
- 65 SHA256-s8707306--7f05e3e3dc4336eb7012d5bbb6d3d65047552901858ee4967e4a70d100fd1deb
- 66 SHA256E-s42482194--bb7a968ec9bc0a8813974af9173c38cb39a43aa7d0c2aec203ddb358119e1f25.flac
- 67 SHA256E-s31951334--b19789a9bbb98cb25df7b8a1b6d8856256bc2851cd892c91dddba7cf736542c5.flac
- 68 SHA256E-s35901187--8eae2684aa3566b632a1797bd09d112dd5f438c98b649c000d71640983a549f2.flac
- 69 SHA256E-s40659631--f6ca3227b14c7c050877ce4cc1218fea7582426649cd68fc82a74cae5d6962b4.flac
- 70 SHA256E-s41415180--9c6f0000da119bd70422fe9529c41efb3103ca943697bdfb685f119f6b5ae6fd.flac
- 71 SHA256E-s52313976--e4a59c65e05bd9450ef595b3c08365810205731952e45a68ee0c89bc76fbd9fc.flac
- 72 SHA256E-s44925214--eabc5f7172d5c2e094ff84a5ecce784c172b175c8eeca861aa3996749668ea42.flac
- (To see where data was previously used, try: git log --stat -S'KEY')
-
- To remove unwanted data: git-annex dropunused NUMBER
-
- ok
-
-And running:
-
- $ git log --stat -S'SHA256-s13044938--8714a1db8781daa9f3993128dcda5a5ca904e075723cf38a11bc5e3695cf126f'
- commit 767a63a54784139f13d69d12fcfbee8f6ca3df41
- Author: Matthew Forrester <matt@keyboardwritescode.com>
- Date: Fri Aug 23 21:38:31 2013 +0100
-
- Remove Roger Shah - Openminded! as there is another copy in Unsorted with correct? filenames
-
- Amazon/Roger Shah/Openminded!/1114 - Shine (Album Mix).mp3 | 1 -
- 1 file changed, 1 deletion(-)
-
- commit 6b04002c03287fb8918bdcdeaae393e862bebd4e
- Author: Matthew Forrester <matt@keyboardwritescode.com>
- Date: Thu Aug 8 21:30:14 2013 +0100
-
- Initial checkin
-
- Amazon/Roger Shah/Openminded!/1114 - Shine (Album Mix).mp3 | 1 +
- 1 file changed, 1 insertion(+)
-
-Works but I cannot find out how to get the `.flac` files working:
-
-
-`$ git log --stat -S'SHA256E-s38896704--ca6211442c33d9c44b997bef8f1079f07cdd2eb0e9e3c1de1eda9ae8a705f137.flac'`
-
-`$ git log --stat -S'SHA256E-s38896704--ca6211442c33d9c44b997bef8f1079f07cdd2eb0e9e3c1de1eda9ae8a705f137'`
-
-`$ git log --stat -S'SHA256-s38896704--ca6211442c33d9c44b997bef8f1079f07cdd2eb0e9e3c1de1eda9ae8a705f137'`
-
-
-None of which give answers. I don't know if I'm doing it wrong (though I __think__ I'm doing what the instructions say), but I can't make it work.
-
-
-### What version of git-annex are you using? On what operating system?
-
-$ uname -a
-Linux fozz-desktop 3.8.0-31-generic #46-Ubuntu SMP Tue Sep 10 19:56:49 UTC 2013 i686 i686 i686 GNU/Linux
-
-$ git annex version
-git-annex version: 3.20121112ubuntu2
-local repository version: 3
-default repository version: 3
-supported repository versions: 3
-upgrade supported from repository versions: 0 1 2
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> If `git log -S` does not find the key, then it was not used for any
-> commit currently in the git repository. Which is certainly possible;
-> for example `git annex add file; git rm file`.
->
-> This is a dup of [[todo/wishlist: option to print more info with 'unused']]; [[done]] --[[Joey]]
diff --git a/doc/bugs/Fix_for_opening_a_browser_on_a_mac___40__or_xdg-open_on_linux__47__bsd__63____41__.mdwn b/doc/bugs/Fix_for_opening_a_browser_on_a_mac___40__or_xdg-open_on_linux__47__bsd__63____41__.mdwn
deleted file mode 100644
index 428d62ab1..000000000
--- a/doc/bugs/Fix_for_opening_a_browser_on_a_mac___40__or_xdg-open_on_linux__47__bsd__63____41__.mdwn
+++ /dev/null
@@ -1,26 +0,0 @@
-Utility/WebApp.hs, didn't quite have the right definition to use 'open' instead of 'xdg-open' on OSX, the follow fixes that
-
-<pre>
-diff --git a/Utility/WebApp.hs b/Utility/WebApp.hs
-index 6936c66..0593dda 100644
---- a/Utility/WebApp.hs
-+++ b/Utility/WebApp.hs
-@@ -42,7 +42,7 @@ localhost = "localhost"
- runBrowser :: String -> IO Bool
- runBrowser url = boolSystem cmd [Param url]
- where
--#if MAC
-+#if OSX
- cmd = "open"
- #else
- cmd = "xdg-open"
-</pre>
-
-> [[done]], thanks
-
-I guess I should really clone the repo and submit a stream of minor changes
-:P, @joeyh please let me know if you're getting annoyed with copy and
-pasting the small fixes from the bug/forums section.
-
-> If you're going to be writing some patches, a git repo I can pull from
-> would make my life easier. --[[Joey]]
diff --git a/doc/bugs/Forcing_https_for_Google_cloud_storage_remote__63__.mdwn b/doc/bugs/Forcing_https_for_Google_cloud_storage_remote__63__.mdwn
new file mode 100644
index 000000000..7a96ff6c7
--- /dev/null
+++ b/doc/bugs/Forcing_https_for_Google_cloud_storage_remote__63__.mdwn
@@ -0,0 +1,31 @@
+### Please describe the problem.
+
+A special remote for Google cloud storage would appear to send the developer keys in the clear.
+Obviously the content itself can be secured with the encryption but sending the auth keys in
+the clear permits anybody listening (i.e. at a public WiFi access point) to gain r/w access to
+the user's GCS store.
+
+### What steps will reproduce the problem?
+
+Setup a new special remote:
+
+ git annex initremote gcs type=S3 chunk=2MiB encryption=none host=storage.googleapis.com bucket=gitannex
+ ...
+ git move --to=gcs blah
+
+Capture packets. Watch the developer keys go by in the headers. And in this case, see the content too because there's no
+encryption turned on. But I believe that I know how to fix this.
+
+I tried to persuade `git annex` to use a SSL connection but without encouraging results:
+
+ git annex initremote gcs type=S3 chunk=2MiB port=443 host=storage.googleapis.com bucket=gitannex
+ initremote gcs (checking bucket...) git-annex: ErrorClosed
+
+
+### What version of git-annex are you using? On what operating system?
+
+Debian wheezy, git-annex version: 5.20141024~bpo70+1
+
+### Please provide any additional information below.
+
+> [[done]]; port=443 supported since 5.20141203. --[[Joey]]
diff --git a/doc/bugs/Forcing_https_for_Google_cloud_storage_remote__63__/comment_1_93183de95cc5c99a15eacbade19873ef._comment b/doc/bugs/Forcing_https_for_Google_cloud_storage_remote__63__/comment_1_93183de95cc5c99a15eacbade19873ef._comment
new file mode 100644
index 000000000..66856a32d
--- /dev/null
+++ b/doc/bugs/Forcing_https_for_Google_cloud_storage_remote__63__/comment_1_93183de95cc5c99a15eacbade19873ef._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkXzY87FdO942LR-qNyJFeCth0LjWORNuw"
+ nickname="Rob"
+ subject="Proposed resolution"
+ date="2015-01-24T17:18:14Z"
+ content="""
+see [my other bug](https://git-annex.branchable.com/bugs/How_to_use_a_DRA_bucket_in_Google_cloud_storage__63__/) for a proposed resolution: a GCS-optimized external special remote
+"""]]
diff --git a/doc/bugs/Forcing_https_for_Google_cloud_storage_remote__63__/comment_2_c01a47b9df3167c9af8e5e43ec138401._comment b/doc/bugs/Forcing_https_for_Google_cloud_storage_remote__63__/comment_2_c01a47b9df3167c9af8e5e43ec138401._comment
new file mode 100644
index 000000000..9006486df
--- /dev/null
+++ b/doc/bugs/Forcing_https_for_Google_cloud_storage_remote__63__/comment_2_c01a47b9df3167c9af8e5e43ec138401._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2015-02-04T18:55:50Z"
+ content="""
+You need to upgrade to git-annex 5.20141203. With that version,
+you can pass port=443 to git-annex initremote and it will then use
+https.
+
+The old version you're using does not support this.
+
+Also, AFAIK, S3 does not send passwords over the wire; it uses a
+challange-response, which proves to the S3 server that you possess the
+access keys. This would not be susceptable to attackers in the way you
+think it is.
+"""]]
diff --git a/doc/bugs/GPG_can__39__t_handle_some_files.mdwn b/doc/bugs/GPG_can__39__t_handle_some_files.mdwn
deleted file mode 100644
index 6c29a95b8..000000000
--- a/doc/bugs/GPG_can__39__t_handle_some_files.mdwn
+++ /dev/null
@@ -1,23 +0,0 @@
-### Please describe the problem.
-
-It looks like GPG is being used in text mode, or at least isn't overriding the GPG config.
-
-### What steps will reproduce the problem?
-
-Have a binary file with long lines, and attempt to copy it into git-annex.
-
-This will happen:
-
- $ git-annex copy 09\ Into\ The\ Dissonance.mp3 -t rsync.net_annex
- copy 09 Into The Dissonance.mp3 (gpg) (checking rsync.net_annex...) (to rsync.net_annex...) gpg: can't handle text lines longer than 19995 characters
- failed
- git-annex: copy: 1 failed
-
-A workaround is to remove "textmode" from your gpg.conf, but git-annex should force this.
-
-### What version of git-annex are you using? On what operating system?
-
-7ae625363bcb6e1fc8b3733c1d7814aca05a2368 on Ubuntu 13.04 x86_64
-
-> The sheer number of ways gpg offers of shooting yourself in the foot..
-> Ok [[done]] --[[Joey]]
diff --git a/doc/bugs/GPG_can__39__t_handle_some_files/comment_1_4388c971e991dbc0326e69c49994df1e._comment b/doc/bugs/GPG_can__39__t_handle_some_files/comment_1_4388c971e991dbc0326e69c49994df1e._comment
deleted file mode 100644
index 60c363fd9..000000000
--- a/doc/bugs/GPG_can__39__t_handle_some_files/comment_1_4388c971e991dbc0326e69c49994df1e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://launchpad.net/~eythian"
- nickname="eythian"
- subject="comment 1"
- date="2013-09-06T23:37:10Z"
- content="""
-I also had a huge bunch of files come across corrupted, but the one that came after I made this change wasn't. This might be a sign that GPG is corrupting things on the way past.
-"""]]
diff --git a/doc/bugs/GPG_passphrase_repeated_prompt.mdwn b/doc/bugs/GPG_passphrase_repeated_prompt.mdwn
index 085aede92..56b2bba4e 100644
--- a/doc/bugs/GPG_passphrase_repeated_prompt.mdwn
+++ b/doc/bugs/GPG_passphrase_repeated_prompt.mdwn
@@ -22,3 +22,4 @@ Instead, it begins syncing the files to the server but prompts for a GPG passpha
Not sure if I'm just missing a setting for GPG, but I would think I should only need to use the web app to configure the remote server.
[[!tag /design/assistant]]
+[[!tag confirmed]]
diff --git a/doc/bugs/GPG_problem_on_Mac.mdwn b/doc/bugs/GPG_problem_on_Mac.mdwn
deleted file mode 100644
index dc4cfaae0..000000000
--- a/doc/bugs/GPG_problem_on_Mac.mdwn
+++ /dev/null
@@ -1,34 +0,0 @@
-### Please describe the problem.
-Adding a box.com repository fails with an Internal server error and the message "user error (gpg ["--quiet","--trust-model","always","--batch","--passphrase-fd","48","--symmetric","--force-mdc"] exited 2)"
-
-Looking at the logfile it seems like git-annex is looking for gpg (gpg-agent) in /usr/local/MacGPG2/bin/. On my system it is in /usr/local/bin (installed using homebrew). I do not have the directory /usr/local/MacGPG2/.
-
-Not sure if what the git-annex philosophy is: detect the location of such external programs or ship them together with git-annex.
-
-### What steps will reproduce the problem?
-Add a box.com repository (I assume every repository type that uses gpg will fail in the same way) on a Mac.
-
-
-### What version of git-annex are you using? On what operating system?
-* git-annex version 4.20130626-g2dd6f84 (from https://downloads.kitenet.net/git-annex/OSX/current/10.8.2_Mountain_Lion/)
-* Mac OS 10.8.4
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-(Recording state in git...)
-
-(encryption setup) (shared cipher) (testing WebDAV server...)
-(gpg) gpg: error running `/usr/local/MacGPG2/bin/gpg-agent': probably not installed
-gpg: DBG: running `/usr/local/MacGPG2/bin/gpg-agent' for testing failed: Configuration error
-gpg: can't connect to the agent: IPC connect call failed
-gpg: problem with the agent: No agent running
-27/Jun/2013:13:41:37 +0200 [Error#yesod-core] user error (gpg ["--quiet","--trust-model","always","--batch","--passphrase-fd","21","--symmetric","--force-mdc"] exited 2) @(yesod-core-1.1.8.3:Yesod.Internal.Core ./Yesod/Internal/Core.hs:550:5)
-# End of transcript or log.
-"""]]
-
-> [[done]]; I've updated the OSX autobuild to
-> use a gpg that doesn't fail when gpg-agent is missing. --[[Joey]]
diff --git a/doc/bugs/GPG_problem_on_Mac/comment_1_9ccfa12e7a9569a7ae9a3b819917c275._comment b/doc/bugs/GPG_problem_on_Mac/comment_1_9ccfa12e7a9569a7ae9a3b819917c275._comment
deleted file mode 100644
index ce04c73e1..000000000
--- a/doc/bugs/GPG_problem_on_Mac/comment_1_9ccfa12e7a9569a7ae9a3b819917c275._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnrFnHRRNUQBB5RCDaIwhVmCcxQp8_yiYw"
- nickname="Oliver"
- subject="comment 1"
- date="2013-06-28T08:42:27Z"
- content="""
-Do you have any form of gpg installed?
-I.e. is it failing to detect your GPG or do you just not have GPG?
-"""]]
diff --git a/doc/bugs/GPG_problem_on_Mac/comment_2_a5e07131e2bc1a646c8439fc2506128b._comment b/doc/bugs/GPG_problem_on_Mac/comment_2_a5e07131e2bc1a646c8439fc2506128b._comment
deleted file mode 100644
index bc81ebaff..000000000
--- a/doc/bugs/GPG_problem_on_Mac/comment_2_a5e07131e2bc1a646c8439fc2506128b._comment
+++ /dev/null
@@ -1,29 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawk7iPiqWr3BVPLWEDvJhSSvcOqheLEbLNo"
- nickname="Dirk"
- subject="comment 2"
- date="2013-06-28T16:45:08Z"
- content="""
-Hi,
-
-I have gpg installed.
-[[!format sh \"\"\"
-$ which gpg
-/usr/local/bin/gpg
-$ which gpg-agent
-/usr/local/bin/gpg-agent
-\"\"\"]]
-(are there other \"programs\" besides gpg and gpg-agent I should check for?)
-
-/usr/local/bin is part of my PATH.
-
-I actually noticed some strange behavior now:
-
- * At some point I was able add the box.com repository to my original annex dir. (I think it was caused by calling gpg-agent on the command line, but I am unsure here.)
- * I created after a reboot then a second annex dir (annex2) (not connected to the first).
- * I was again not able to add a new box.com repository for this new annex (annex2) while the original annex dir is still able to sync to box.com
-
-This seems to indicate that there is some annex specific configuration files influencing this gpg location problem.
-
-
-"""]]
diff --git a/doc/bugs/GPG_problem_on_Mac/comment_3_388238360f2423f84881e904443efb86._comment b/doc/bugs/GPG_problem_on_Mac/comment_3_388238360f2423f84881e904443efb86._comment
deleted file mode 100644
index 3e8b01d24..000000000
--- a/doc/bugs/GPG_problem_on_Mac/comment_3_388238360f2423f84881e904443efb86._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.254.222"
- subject="comment 3"
- date="2013-07-08T17:10:53Z"
- content="""
-The git-annex dmg includes a copy of gpg.
-
-It seems that the build machine has been switched to having MacGPG2 installed, which hard-codes the location of gpg-agent inside it. This did not used to be the case, and I don't want to use this MacGPG2 build in the dmg.
-
-Guess I'll have to build gpg from source myself on the mac to get a sane version to distribute..
-"""]]
diff --git a/doc/bugs/Git-Annex_requires_all_repositories_to_repair.mdwn b/doc/bugs/Git-Annex_requires_all_repositories_to_repair.mdwn
new file mode 100644
index 000000000..7087247f5
--- /dev/null
+++ b/doc/bugs/Git-Annex_requires_all_repositories_to_repair.mdwn
@@ -0,0 +1,3 @@
+I recently had my git-annex repository die and it needed to be repaired. Two of my repositories are external hard drives. When I tried to use git-annex repair, it would churn for some hours, then error because the external hard drives were not plugged in. When I brought the two hard drives home from the various places that they are (safely) stored, it all worked fine, but it would have been great if git-annex repair could somehow do what it could with what was connected and do the rest as and when the other drives are plugged in. This must only become more of a problem as git-annex is used for longer, as one may have a handful of USB keys storing a little on each.
+
+[[!taglink moreinfo]]
diff --git a/doc/bugs/Git-Annex_requires_all_repositories_to_repair/comment_1_dff1424e48835d7d3eb8653fc59de18a._comment b/doc/bugs/Git-Annex_requires_all_repositories_to_repair/comment_1_dff1424e48835d7d3eb8653fc59de18a._comment
new file mode 100644
index 000000000..d44c30f32
--- /dev/null
+++ b/doc/bugs/Git-Annex_requires_all_repositories_to_repair/comment_1_dff1424e48835d7d3eb8653fc59de18a._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 1"
+ date="2014-04-07T19:25:25Z"
+ content="""
+Repair does not require access to remotes, but it will certianly yield a better result to have one remote available. Otherwise, information that cannot be repaired will be missing from the repository. Repair will still successfully complete in this situation though.
+
+If you have an error message, please paste it.
+"""]]
diff --git a/doc/bugs/Git_annex_add_._dies_when_you_add_too_much.mdwn b/doc/bugs/Git_annex_add_._dies_when_you_add_too_much.mdwn
index ae08a29c8..9443a4fbd 100644
--- a/doc/bugs/Git_annex_add_._dies_when_you_add_too_much.mdwn
+++ b/doc/bugs/Git_annex_add_._dies_when_you_add_too_much.mdwn
@@ -54,3 +54,5 @@ Linux quad 3.8.0-34-generic #49~precise1-Ubuntu SMP Wed Nov 13 18:05:00 UTC 2013
"""]]
> Ancient git-annex version. Doubt it affects current version. [[!tag moreinfo]] --[[Joey]]
+
+>> Actually, this is a dup of [[runs_of_of_memory_adding_2_million_files]] so [[done]] --[[Joey]]
diff --git a/doc/bugs/Git_annex_add_fails_on_read-only_files.mdwn b/doc/bugs/Git_annex_add_fails_on_read-only_files.mdwn
deleted file mode 100644
index 50f005a7e..000000000
--- a/doc/bugs/Git_annex_add_fails_on_read-only_files.mdwn
+++ /dev/null
@@ -1,49 +0,0 @@
-### Please describe the problem.
-
-Git annex cannot add/import files in folders without w or x permission
-
-Note that (as stated in the comments) this might not be a bug. The problem might somewhere within Git, because Git does not manage file permissions very well. I was just hoping that I could import large directory trees into git-annex with a simple call to "git annex import"; now it seems I have to fix their permissions first.
-
-### What steps will reproduce the problem?
-
- $ cd /tmp
- $ mkdir -p folder/subfolder
- $ echo "some text" > folder/subfolder/some_file.txt
- $ chmod 500 folder/subfolder
- $ mkdir annex
- $ cd annex
- $ git init
- $ git annex init "Testing git annex"
- $ git annex import ../folder
- Fails
- $ chmod 600 ../folder/subfolder
- $ git annex import ../folder
- Fails
- $ chmod 700 ../folder/subfolder
- $ git annex import ../folder
- Works. Subfolder now has 755 permissions
-
-### What version of git-annex are you using? On what operating system?
-
- git-annex version: 4.20131106
- build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP Feeds Quvi TDFA CryptoHash
- key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
- remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
- local repository version: 3
- default repository version: 3
- supported repository versions: 3 4
- upgrade supported from repository versions: 0 1 2
-
- git version 1.8.4.3
-
-> Based on the new example, I don't consider this to be a bug.
-> I don't think that `git annex import` should disregard directory
-> permissions when importing files from them.
->
-> One very good reason not to
-> eg, chmod the directory itself is that if it did, running `git annex
-> import` on a git-annex repository would defeat git-annex's own use of
-> directory permissions to prevent deletion of the files in that
-> repository!
->
-> So, [[done]] --[[Joey]]
diff --git a/doc/bugs/Git_annex_add_fails_on_read-only_files/comment_1_d31018e8bf31d729ee9fee43a0a07934._comment b/doc/bugs/Git_annex_add_fails_on_read-only_files/comment_1_d31018e8bf31d729ee9fee43a0a07934._comment
deleted file mode 100644
index 0a4e61bc5..000000000
--- a/doc/bugs/Git_annex_add_fails_on_read-only_files/comment_1_d31018e8bf31d729ee9fee43a0a07934._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.64"
- subject="comment 1"
- date="2013-11-26T19:47:28Z"
- content="""
-I cannot reproduce this problem on Linux, with version 4.20131106. I tried in both direct and indirect mode, on Linux.
-
-I was, however, able to exactly reproduce the error message if I made the *directory* be not writable, and used indirect mode. This is because git-annex has to move the file the .git/annex/objects, and put a symlink in place, and so has to be allowed to write to the directory. Interestingly, direct mode does not have this limiation, although I doubt git-annex would ever be very useful when run in a directory you lack write permission to.
-"""]]
diff --git a/doc/bugs/Git_annex_add_fails_on_read-only_files/comment_2_e38e7048749f890169cd0be602be6ee7._comment b/doc/bugs/Git_annex_add_fails_on_read-only_files/comment_2_e38e7048749f890169cd0be602be6ee7._comment
deleted file mode 100644
index 610eea713..000000000
--- a/doc/bugs/Git_annex_add_fails_on_read-only_files/comment_2_e38e7048749f890169cd0be602be6ee7._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlq4ClC5EMN1Vq1DpWXAqP5TiDnCK1mSfk"
- nickname="Jonas"
- subject="comment 2"
- date="2013-11-27T18:05:02Z"
- content="""
-Thank you for looking into this, and sorry about the low quality of the initial bug report. I now replaced the example by a better one.
-
-As you say, this might not be a bug. I was just not aware that migrating files into git-annex would mean forsaking their permissions.
-"""]]
diff --git a/doc/bugs/Git_annex_for_Windows_keyboard_shortcut.mdwn b/doc/bugs/Git_annex_for_Windows_keyboard_shortcut.mdwn
new file mode 100644
index 000000000..4d48078a2
--- /dev/null
+++ b/doc/bugs/Git_annex_for_Windows_keyboard_shortcut.mdwn
@@ -0,0 +1,22 @@
+### Please describe the problem.
+After git annex been installed, I cannot any longer (with no hacks) use my right ALT+A shortcut creating special char.
+After installing git annex for Windows it overtook this shortcut and redirects my browser to a weird localhost server with a weird port.
+
+### What steps will reproduce the problem?
+Installing git annex for Windows and tapping rAlt+A. :)
+
+### What version of git-annex are you using? On what operating system?
+The newest version, Windows 8.
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> Seems I misunderstood, I thought that would only apply in the start menu.
+> Removed the shortcut. [[done]] --[[Joey]]
diff --git a/doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android.mdwn b/doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android.mdwn
deleted file mode 100644
index bf68208da..000000000
--- a/doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android.mdwn
+++ /dev/null
@@ -1,280 +0,0 @@
-### Please describe the problem.
-git add hangs.
-Maybe because of encrypted sdcard?
-
-
-
-
-
-### What steps will reproduce the problem?
-
- app_30@android:/sdcard $ mkdir annex;cd annex
- app_30@android:/sdcard/annex $ git init
- Initialized empty Git repository in /mnt/sdcard/annex/.git/
- app_30@android:/sdcard/annex $ git annex init
- init
- Detected a crippled filesystem.
-
- Enabling direct mode.
-
- Detected a filesystem without fifo support.
-
- Disabling ssh connection caching.
- ok
- (Recording state in git...)
- app_30@android:/sdcard/annex $ touch lala
- git annex add lala --debug <
- [2013-10-13 22:05:17 CEST] read: git ["--git-dir=/mnt/sdcard/annex/.git","--work-tree=/mnt/sdcard/annex","ls-files","--others","--exclude-standard","-z","--","lala"]
- [2013-10-13 22:05:17 CEST] read: git ["--git-dir=/mnt/sdcard/annex/.git","--work-tree=/mnt/sdcard/annex","ls-files","--modified","-z","--","lala"]
- [2013-10-13 22:05:17 CEST] chat: git ["--git-dir=/mnt/sdcard/annex/.git","--work-tree=/mnt/sdcard/annex","cat-file","--batch"]
- add lala [2013-10-13 22:05:17 CEST] chat: git ["--git-dir=/mnt/sdcard/annex/.git","--work-tree=/mnt/sdcard/annex","check-attr","-z","--stdin","annex.backend","annex.numcopies","--"]
- ** HANGS **
-
-
-
-The same will happen when just running and asking assistant to create annex for camera.
-
-ps aux | grep -i git:
-
- app_30 9870 8950 2512 464 c009cd2c 400456a4 S git
- app_30 9871 9870 64900 7552 ffffffff 40108a38 S git-annex
- app_30 9876 9871 0 0 ffffffff 00000000 Z git
- app_30 9877 9871 0 0 ffffffff 00000000 Z git
- app_30 9878 9871 2512 608 c0114a4c 400b2878 S git
- app_30 9879 9871 2512 556 c0114a4c 40074878 S git
-
-lsof | grep git:
-
- 1|app_30@android:/sdcard $ lsof | grep git
- 9870 /data/data/ga.androidterm/lib/lib.git.so /dev/pts/2
- 9870 /data/data/ga.androidterm/lib/lib.git.so /dev/pts/2
- 9870 /data/data/ga.androidterm/lib/lib.git.so /dev/pts/2
- 9870 /data/data/ga.androidterm/lib/lib.git.so /dev/log/main
- 9870 /data/data/ga.androidterm/lib/lib.git.so /dev/log/radio
- 9870 /data/data/ga.androidterm/lib/lib.git.so /dev/log/events
- 9870 /data/data/ga.androidterm/lib/lib.git.so /dev/log/system
- 9870 /data/data/ga.androidterm/lib/lib.git.so /dev/__properties__ (deleted)
- 9870 /data/data/ga.androidterm/lib/lib.git.so /system/framework/framework-res.apk
- 9870 /data/data/ga.androidterm/lib/lib.git.so /system/framework/com.htc.resources.apk
- 9870 /data/data/ga.androidterm/lib/lib.git.so /system/framework/framework-htc-res.apk
- 9870 /data/data/ga.androidterm/lib/lib.git.so /system/framework/framework.jar
- 9870 /data/data/ga.androidterm/lib/lib.git.so /system/etc/system_fonts.xml
- 9870 /data/data/ga.androidterm/lib/lib.git.so /system/etc/fallback_fonts.xml
- 9870 /data/data/ga.androidterm/lib/lib.git.so /system/fonts/Roboto-Regular.ttf
- 9870 /data/data/ga.androidterm/lib/lib.git.so /system/framework/core.jar
- 9870 /data/data/ga.androidterm/lib/lib.git.so /dev/urandom
- 9870 /data/data/ga.androidterm/lib/lib.git.so /dev/log/main
- 9870 /data/data/ga.androidterm/lib/lib.git.so /dev/log/radio
- 9870 /data/data/ga.androidterm/lib/lib.git.so /dev/log/events
- 9870 /data/data/ga.androidterm/lib/lib.git.so /dev/log/system
- 9870 /data/data/ga.androidterm/lib/lib.git.so /dev/cpuctl/tasks
- 9870 /data/data/ga.androidterm/lib/lib.git.so socket:[1172354]
- 9870 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172355]
- 9870 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172355]
- 9870 /data/data/ga.androidterm/lib/lib.git.so /dev/cpuctl/bg_non_interactive/tasks
- 9870 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172358]
- 9870 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172358]
- 9870 /data/data/ga.androidterm/lib/lib.git.so anon_inode:[eventpoll]
- 9870 /data/data/ga.androidterm/lib/lib.git.so /dev/ashmem
- 9870 /data/data/ga.androidterm/lib/lib.git.so /dev/ashmem
- 9870 /data/data/ga.androidterm/lib/lib.git.so /data/app/ga.androidterm-1.apk
- 9870 /data/data/ga.androidterm/lib/lib.git.so /data/app/ga.androidterm-1.apk
- 9870 /data/data/ga.androidterm/lib/lib.git.so /system/app/Aluminum.apk
- 9870 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172380]
- 9870 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172381]
- 9870 /data/data/ga.androidterm/lib/lib.git.so /data/data/ga.androidterm/fifo
- 9870 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172382]
- 9870 /data/data/ga.androidterm/lib/lib.git.so /dev/pts/2
- 9870 /data/data/ga.androidterm/lib/lib.git.so /system/fonts/DroidSansMono.ttf
- 9870 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172407]
- 9870 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172407]
- 9870 /data/data/ga.androidterm/lib/lib.git.so anon_inode:[eventpoll]
- 9870 /data/data/ga.androidterm/lib/lib.git.so /dev/ashmem
- 9870 /data/data/ga.androidterm/lib/lib.git.so pipe:[1177783]
- 9870 /data/data/ga.androidterm/lib/lib.git.so pipe:[1177784]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /dev/pts/2
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /dev/pts/2
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /dev/pts/2
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /dev/log/main
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /dev/log/radio
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /dev/log/events
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /dev/log/system
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so anon_inode:[eventpoll]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1184035]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /dev/__properties__ (deleted)
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1184035]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so anon_inode:[eventfd]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1184036]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1184036]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so anon_inode:[eventfd]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1184039]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1184043]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1184044]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1184046]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1184047]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /system/framework/framework-res.apk
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /system/framework/com.htc.resources.apk
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /system/framework/framework-htc-res.apk
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /system/framework/framework.jar
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /system/etc/system_fonts.xml
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /system/etc/fallback_fonts.xml
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /system/fonts/Roboto-Regular.ttf
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /system/framework/core.jar
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /dev/urandom
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /dev/log/main
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /dev/log/radio
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /dev/log/events
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /dev/log/system
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /dev/cpuctl/tasks
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so socket:[1172354]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1172355]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1172355]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /dev/cpuctl/bg_non_interactive/tasks
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1172358]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1172358]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so anon_inode:[eventpoll]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /dev/ashmem
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /dev/ashmem
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /data/app/ga.androidterm-1.apk
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /data/app/ga.androidterm-1.apk
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /system/app/Aluminum.apk
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1172380]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1172381]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /data/data/ga.androidterm/fifo
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1172382]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /dev/pts/2
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /system/fonts/DroidSansMono.ttf
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1172407]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1172407]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so anon_inode:[eventpoll]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so /dev/ashmem
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1177783]
- 9871 /data/data/ga.androidterm/lib/lib.git-annex.so pipe:[1177784]
- 9878 /data/data/ga.androidterm/lib/lib.git.so pipe:[1184043]
- 9878 /data/data/ga.androidterm/lib/lib.git.so pipe:[1184044]
- 9878 /data/data/ga.androidterm/lib/lib.git.so /dev/pts/2
- 9878 /data/data/ga.androidterm/lib/lib.git.so /dev/log/main
- 9878 /data/data/ga.androidterm/lib/lib.git.so /dev/log/radio
- 9878 /data/data/ga.androidterm/lib/lib.git.so /dev/log/events
- 9878 /data/data/ga.androidterm/lib/lib.git.so /dev/log/system
- 9878 /data/data/ga.androidterm/lib/lib.git.so /dev/__properties__ (deleted)
- 9878 /data/data/ga.androidterm/lib/lib.git.so /system/framework/framework-res.apk
- 9878 /data/data/ga.androidterm/lib/lib.git.so /system/framework/com.htc.resources.apk
- 9878 /data/data/ga.androidterm/lib/lib.git.so /system/framework/framework-htc-res.apk
- 9878 /data/data/ga.androidterm/lib/lib.git.so /system/framework/framework.jar
- 9878 /data/data/ga.androidterm/lib/lib.git.so /system/etc/system_fonts.xml
- 9878 /data/data/ga.androidterm/lib/lib.git.so /system/etc/fallback_fonts.xml
- 9878 /data/data/ga.androidterm/lib/lib.git.so /system/fonts/Roboto-Regular.ttf
- 9878 /data/data/ga.androidterm/lib/lib.git.so /system/framework/core.jar
- 9878 /data/data/ga.androidterm/lib/lib.git.so /dev/urandom
- 9878 /data/data/ga.androidterm/lib/lib.git.so /dev/log/main
- 9878 /data/data/ga.androidterm/lib/lib.git.so /dev/log/radio
- 9878 /data/data/ga.androidterm/lib/lib.git.so /dev/log/events
- 9878 /data/data/ga.androidterm/lib/lib.git.so /dev/log/system
- 9878 /data/data/ga.androidterm/lib/lib.git.so /dev/cpuctl/tasks
- 9878 /data/data/ga.androidterm/lib/lib.git.so socket:[1172354]
- 9878 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172355]
- 9878 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172355]
- 9878 /data/data/ga.androidterm/lib/lib.git.so /dev/cpuctl/bg_non_interactive/tasks
- 9878 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172358]
- 9878 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172358]
- 9878 /data/data/ga.androidterm/lib/lib.git.so anon_inode:[eventpoll]
- 9878 /data/data/ga.androidterm/lib/lib.git.so /dev/ashmem
- 9878 /data/data/ga.androidterm/lib/lib.git.so /dev/ashmem
- 9878 /data/data/ga.androidterm/lib/lib.git.so /data/app/ga.androidterm-1.apk
- 9878 /data/data/ga.androidterm/lib/lib.git.so /data/app/ga.androidterm-1.apk
- 9878 /data/data/ga.androidterm/lib/lib.git.so /system/app/Aluminum.apk
- 9878 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172380]
- 9878 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172381]
- 9878 /data/data/ga.androidterm/lib/lib.git.so /data/data/ga.androidterm/fifo
- 9878 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172382]
- 9878 /data/data/ga.androidterm/lib/lib.git.so /dev/pts/2
- 9878 /data/data/ga.androidterm/lib/lib.git.so /system/fonts/DroidSansMono.ttf
- 9878 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172407]
- 9878 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172407]
- 9878 /data/data/ga.androidterm/lib/lib.git.so anon_inode:[eventpoll]
- 9878 /data/data/ga.androidterm/lib/lib.git.so /dev/ashmem
- 9878 /data/data/ga.androidterm/lib/lib.git.so pipe:[1177783]
- 9878 /data/data/ga.androidterm/lib/lib.git.so pipe:[1177784]
- 9879 /data/data/ga.androidterm/lib/lib.git.so pipe:[1184046]
- 9879 /data/data/ga.androidterm/lib/lib.git.so pipe:[1184047]
- 9879 /data/data/ga.androidterm/lib/lib.git.so /dev/pts/2
- 9879 /data/data/ga.androidterm/lib/lib.git.so /dev/log/main
- 9879 /data/data/ga.androidterm/lib/lib.git.so /dev/log/radio
- 9879 /data/data/ga.androidterm/lib/lib.git.so /dev/log/events
- 9879 /data/data/ga.androidterm/lib/lib.git.so /dev/log/system
- 9879 /data/data/ga.androidterm/lib/lib.git.so /dev/__properties__ (deleted)
- 9879 /data/data/ga.androidterm/lib/lib.git.so /system/framework/framework-res.apk
- 9879 /data/data/ga.androidterm/lib/lib.git.so /system/framework/com.htc.resources.apk
- 9879 /data/data/ga.androidterm/lib/lib.git.so /system/framework/framework-htc-res.apk
- 9879 /data/data/ga.androidterm/lib/lib.git.so /system/framework/framework.jar
- 9879 /data/data/ga.androidterm/lib/lib.git.so /system/etc/system_fonts.xml
- 9879 /data/data/ga.androidterm/lib/lib.git.so /system/etc/fallback_fonts.xml
- 9879 /data/data/ga.androidterm/lib/lib.git.so /system/fonts/Roboto-Regular.ttf
- 9879 /data/data/ga.androidterm/lib/lib.git.so /system/framework/core.jar
- 9879 /data/data/ga.androidterm/lib/lib.git.so /dev/urandom
- 9879 /data/data/ga.androidterm/lib/lib.git.so /dev/log/main
- 9879 /data/data/ga.androidterm/lib/lib.git.so /dev/log/radio
- 9879 /data/data/ga.androidterm/lib/lib.git.so /dev/log/events
- 9879 /data/data/ga.androidterm/lib/lib.git.so /dev/log/system
- 9879 /data/data/ga.androidterm/lib/lib.git.so /dev/cpuctl/tasks
- 9879 /data/data/ga.androidterm/lib/lib.git.so socket:[1172354]
- 9879 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172355]
- 9879 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172355]
- 9879 /data/data/ga.androidterm/lib/lib.git.so /dev/cpuctl/bg_non_interactive/tasks
- 9879 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172358]
- 9879 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172358]
- 9879 /data/data/ga.androidterm/lib/lib.git.so anon_inode:[eventpoll]
- 9879 /data/data/ga.androidterm/lib/lib.git.so /dev/ashmem
- 9879 /data/data/ga.androidterm/lib/lib.git.so /dev/ashmem
- 9879 /data/data/ga.androidterm/lib/lib.git.so /data/app/ga.androidterm-1.apk
- 9879 /data/data/ga.androidterm/lib/lib.git.so /data/app/ga.androidterm-1.apk
- 9879 /data/data/ga.androidterm/lib/lib.git.so /system/app/Aluminum.apk
- 9879 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172380]
- 9879 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172381]
- 9879 /data/data/ga.androidterm/lib/lib.git.so /data/data/ga.androidterm/fifo
- 9879 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172382]
- 9879 /data/data/ga.androidterm/lib/lib.git.so /dev/pts/2
- 9879 /data/data/ga.androidterm/lib/lib.git.so /system/fonts/DroidSansMono.ttf
- 9879 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172407]
- 9879 /data/data/ga.androidterm/lib/lib.git.so pipe:[1172407]
- 9879 /data/data/ga.androidterm/lib/lib.git.so anon_inode:[eventpoll]
- 9879 /data/data/ga.androidterm/lib/lib.git.so /dev/ashmem
- 9879 /data/data/ga.androidterm/lib/lib.git.so pipe:[1177783]
- 9879 /data/data/ga.androidterm/lib/lib.git.so pipe:[1177784]
-
-
-vfat/sdcard entry:
- /dev/block/dm-2 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702, \
- allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
- tmpfs /mnt/sdcard/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0
-
-
-
-### What version of git-annex are you using? On what operating system?
-Version from git annex version:
-2a8136b6bd60a17d687eb800594ec7c37b872b3d
-
-I tried both daily build and most recent 'stable' with the same effect.
-
-Android 4.0.3 (Htc One V)
-
-The same happens on my another android device; Samsung tablet with... also 4.0.3.
-Tried to gather strace information on git, but couldn't. If anything more is necessary,
-please let me know.
-
-The same happens when I git annex add in /data/data/ga.androidterm/anntmp - so it's not sdcard nor vfat.
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> I have updated git-annex to work with the new git, which will be 1.8.5.
-> This fix should appear in the android autobuild within an hour if you
-> want to try it. [[done]] --[[Joey]]
diff --git a/doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_1_2fc435d1c741f9fc422401f682e7c8b7._comment b/doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_1_2fc435d1c741f9fc422401f682e7c8b7._comment
deleted file mode 100644
index 19b8ae1a6..000000000
--- a/doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_1_2fc435d1c741f9fc422401f682e7c8b7._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="64.134.31.139"
- subject="I can reproduce this! (with 4.20130923-g78e9013)"
- date="2013-10-15T19:57:19Z"
- content="""
-Comparing straces from Android and Linux, it seems to be due to git check-attr outputting something different:
-
-<pre>
-read(16, \"andro\0annex.backend\0unspecified\0\"..., 8096) = 66
-read(10, \"linux: annex.backend: unspecifie\"..., 8096) = 70
-</pre>
-
-So, this is not actually Android specific, thankfully. It's just a breakage caused by a change in a newish version of git! I think it's not yet released, just Android is building from git head right now.
-
-I have reverted the Android stable build to the last version I think won't be affected by this.
-"""]]
diff --git a/doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_2_b73fb99a75aef912f8286626c5bde66d._comment b/doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_2_b73fb99a75aef912f8286626c5bde66d._comment
deleted file mode 100644
index 12b0f9f6e..000000000
--- a/doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_2_b73fb99a75aef912f8286626c5bde66d._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="bla"
- ip="91.121.95.205"
- subject="Testing"
- date="2013-10-15T21:24:35Z"
- content="""
-Last autobuild (installed by replacing existing)
-annex 89345b7 with git 1.8.4.474.g128a96c - also hangs on add in the same manner (in previously created tmp git in /data/data/ga.androidterm/anntmp). Not sure if I did something wrong.
-
-Current stable release - works just fine (deinstalled, installed again - replace failed somehow)
-
-
-
-"""]]
diff --git a/doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_3_b7115f2c658439ff59a029f500697fc1._comment b/doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_3_b7115f2c658439ff59a029f500697fc1._comment
deleted file mode 100644
index eb3c993a8..000000000
--- a/doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_3_b7115f2c658439ff59a029f500697fc1._comment
+++ /dev/null
@@ -1,57 +0,0 @@
-[[!comment format=mdwn
- username="bla"
- ip="91.121.95.205"
- subject="More info on latest autobuild"
- date="2013-10-15T21:42:52Z"
- content="""
-Using adb shell, su app_30, runshell:
-
- app_30@android:/data/data/ga.androidterm/anntmp $ head -n 3 /sdcard/git-annex.>
- Installation starting to /data/data/ga.androidterm
- 89345b7108f5c18eba0845f84780a26d069d011d
- installing busybox
-
- app_30@android:/data/data/ga.androidterm/anntmp $ git version
- git version 1.8.4.474.g128a96c
- app_30@android:/data/data/ga.androidterm/anntmp $ git annex version
- git-annex version: 4.20131015-g89345b7
- build flags: Assistant Webapp Testsuite S3 WebDAV Inotify DNS Feeds Quvi TDFA CryptoHash
- key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
- remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
- local repository version: 3
- default repository version: 3
- supported repository versions: 3 4
- upgrade supported from repository versions: 0 1 2
-
- git init; git annex init; touch lala
- 130|app_30@android:/data/data/ga.androidterm/anntmp $ git annex add lala --deb>
- [2013-10-15 23:37:20 CEST] read: git [\"--git-dir=/data/data/ga.androidterm/anntmp/.git\",\"--work-tree=/data/data/ga.androidterm/anntmp\",\"ls-files\",\"--others\",\"--exclude-standard\",\"-z\",\"--\",\"lala\"]
- [2013-10-15 23:37:20 CEST] read: git [\"--git-dir=/data/data/ga.androidterm/anntmp/.git\",\"--work-tree=/data/data/ga.androidterm/anntmp\",\"diff\",\"--name-only\",\"--diff-filter=T\",\"-z\",\"--\",\"lala\"]
- add lala [2013-10-15 23:37:20 CEST] chat: git [\"--git-dir=/data/data/ga.androidterm/anntmp/.git\",\"--work-tree=/data/data/ga.androidterm/anntmp\",\"check-attr\",\"-z\",\"--stdin\",\"annex.backend\",\"annex.numcopies\",\"--\"]
- *hangs*
-
-
-
- echo lala | git check-attr -z --stdin annex.backend annex.numcopies | hexdump -C
- 00000000 6c 61 6c 61 0a 00 61 6e 6e 65 78 2e 62 61 63 6b |lala..annex.back|
- 00000010 65 6e 64 00 75 6e 73 70 65 63 69 66 69 65 64 00 |end.unspecified.|
- 00000020 6c 61 6c 61 0a 00 61 6e 6e 65 78 2e 6e 75 6d 63 |lala..annex.numc|
- 00000030 6f 70 69 65 73 00 75 6e 73 70 65 63 69 66 69 65 |opies.unspecifie|
- 00000040 64 00 |d.|
- 00000042
-
-While on my laptop (git 1.8.4.rc3)
-
- feather annex % echo lala | git check-attr -z --stdin annex.backend annex.numcopies | hexdump -C
- 00000000 22 6c 61 6c 61 5c 6e 22 3a 20 61 6e 6e 65 78 2e |\"lala\n\": annex.|
- 00000010 62 61 63 6b 65 6e 64 3a 20 75 6e 73 70 65 63 69 |backend: unspeci|
- 00000020 66 69 65 64 0a 22 6c 61 6c 61 5c 6e 22 3a 20 61 |fied.\"lala\n\": a|
- 00000030 6e 6e 65 78 2e 6e 75 6d 63 6f 70 69 65 73 3a 20 |nnex.numcopies: |
- 00000040 75 6e 73 70 65 63 69 66 69 65 64 0a |unspecified.|
- 0000004c
-
-So in fact very different indeed.
-
-
-Hope it helps - assuming i didn't do some weird mistake. I'll happily use stable version for now. GREAT THANKS!
-"""]]
diff --git a/doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_4_67de7a56ddb06fc0e31cc011d281c633._comment b/doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_4_67de7a56ddb06fc0e31cc011d281c633._comment
deleted file mode 100644
index 4456e2cef..000000000
--- a/doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_4_67de7a56ddb06fc0e31cc011d281c633._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="64.134.31.139"
- subject="comment 4"
- date="2013-10-16T16:16:02Z"
- content="""
-Thanks for testing that. I had a fencepost error, which I've fixed, and actually tested with problimatic git version now.
-"""]]
diff --git a/doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_5_58fdb2a00f1737746cdbc804f831a0e7._comment b/doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_5_58fdb2a00f1737746cdbc804f831a0e7._comment
deleted file mode 100644
index 7bbef0fdd..000000000
--- a/doc/bugs/Git_annex_hangs_after_git_annex_add_on_vfat__47__sdcard__47__android/comment_5_58fdb2a00f1737746cdbc804f831a0e7._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://adamspiers.myopenid.com/"
- nickname="Adam"
- subject="any chance of a new release?"
- date="2013-10-22T13:33:57Z"
- content="""
-I just upgraded via cabal install to 4.20131002, which (unsurprisingly, I guess) still exhibits this issue. Would be great if a new release could be cut for this ...
-"""]]
diff --git a/doc/bugs/Git_annexed_files_symlink_are_wrong_when_submodule_is_not_in_the_same_path.mdwn b/doc/bugs/Git_annexed_files_symlink_are_wrong_when_submodule_is_not_in_the_same_path.mdwn
index 3f58bd889..f7bae3b4b 100644
--- a/doc/bugs/Git_annexed_files_symlink_are_wrong_when_submodule_is_not_in_the_same_path.mdwn
+++ b/doc/bugs/Git_annexed_files_symlink_are_wrong_when_submodule_is_not_in_the_same_path.mdwn
@@ -61,3 +61,5 @@ I tried playing with making the repository direct and then indirect, hoping that
Linux konixwork 3.9-1-amd64 #1 SMP Debian 3.9.8-1 x86_64 GNU/Linux
### Please provide any additional information below.
+
+[[!tag confirmed]]
diff --git a/doc/bugs/Handling_of_files_inside_and_outside_archive_directory_at_the_same_time.mdwn b/doc/bugs/Handling_of_files_inside_and_outside_archive_directory_at_the_same_time.mdwn
index b3d6aa01f..9532d0fd0 100644
--- a/doc/bugs/Handling_of_files_inside_and_outside_archive_directory_at_the_same_time.mdwn
+++ b/doc/bugs/Handling_of_files_inside_and_outside_archive_directory_at_the_same_time.mdwn
@@ -14,3 +14,5 @@ Karsten
> same content. It doesn't loop like it did in direct mode, only
> happens once (or once per duplicate file, really). Is still potentially
> annoying and a bug. --[[Joey]]
+
+[[!tag confirmed]]
diff --git a/doc/bugs/Hanging_on_install_on_Mountain_lion.mdwn b/doc/bugs/Hanging_on_install_on_Mountain_lion.mdwn
deleted file mode 100644
index f18a0ef40..000000000
--- a/doc/bugs/Hanging_on_install_on_Mountain_lion.mdwn
+++ /dev/null
@@ -1,26 +0,0 @@
-### Please describe the problem.
-
-In trying to install git-annex on my mac OSX Mountain Lion, the program is hanging when I open the program.
-
-### What steps will reproduce the problem?
-
-Open the DMG, drag the app to applications folder, double-click on the application. Web browser opens with a localhost url. The webpage says "Starting webapp..." and doesn't go anywhere. Initialization seems to fail and I need to force quit the application.
-
-### What version of git-annex are you using? On what operating system?
-
-I'm not totally sure (since it hangs and I can't check a version number, but since I just downloaded it now and the homepage says the latest version is "version 4.20130621" which was released 2 days and 13 hours ago, I assume that is it.
-
-I'm using OSX 10.8.4.
-
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> Fixed root cause. [[done]] --[[Joey]]
diff --git a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_10_f57ff027b19ca16e2ecf1fc6aee9ef4a._comment b/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_10_f57ff027b19ca16e2ecf1fc6aee9ef4a._comment
deleted file mode 100644
index 91de599c3..000000000
--- a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_10_f57ff027b19ca16e2ecf1fc6aee9ef4a._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.193"
- subject="comment 10"
- date="2013-06-26T22:10:39Z"
- content="""
-Seems to be caused by an upgrade of the Mac the autobuilds run on. Particularly, downgrading yesod and warp to older versions seems to avoid the hang, so I've temporarily adjusted the deps so it will build with the old versions.
-
-I have updated the daily autobuild for OSX, as well as the dmg for the current release. Testing appreciated.
-"""]]
diff --git a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_11_2ff78d2090d0fd3418ab50b27c6028ce._comment b/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_11_2ff78d2090d0fd3418ab50b27c6028ce._comment
deleted file mode 100644
index cd67b45c3..000000000
--- a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_11_2ff78d2090d0fd3418ab50b27c6028ce._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.193"
- subject="not OSX specific"
- date="2013-06-27T02:36:04Z"
- content="""
-I was able to reproduce the hang on linux after upgrading to the newest version of warp and yesod.
-"""]]
diff --git a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_1_523d3c0c71f80536850a001b90fd0e9e._comment b/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_1_523d3c0c71f80536850a001b90fd0e9e._comment
deleted file mode 100644
index 06ab0f904..000000000
--- a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_1_523d3c0c71f80536850a001b90fd0e9e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnGrQBFPptA2GU_Nx8KrxRGtyAS7PIlwjw"
- nickname="Nathan"
- subject="me too."
- date="2013-06-24T07:33:54Z"
- content="""
-I'm having the exact same problem (OSX 10.8.2)
-"""]]
diff --git a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_2_6c360c64093b016c2150206dc3ad1709._comment b/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_2_6c360c64093b016c2150206dc3ad1709._comment
deleted file mode 100644
index 46c53294c..000000000
--- a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_2_6c360c64093b016c2150206dc3ad1709._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnrFnHRRNUQBB5RCDaIwhVmCcxQp8_yiYw"
- nickname="Oliver"
- subject="comment 2"
- date="2013-06-25T11:19:34Z"
- content="""
-Had that on snow leopard as well, using both the release and the nightlies. In the end I built it myself using cabal and that was OK.
-
-Possibly using the cli from inside the app to initialize the repo might fix it.
-"""]]
diff --git a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_3_7b77fd9b7dc236c345f2f6149c8138ee._comment b/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_3_7b77fd9b7dc236c345f2f6149c8138ee._comment
deleted file mode 100644
index 823474f95..000000000
--- a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_3_7b77fd9b7dc236c345f2f6149c8138ee._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnGrQBFPptA2GU_Nx8KrxRGtyAS7PIlwjw"
- nickname="Nathan"
- subject="comment 3"
- date="2013-06-25T13:39:55Z"
- content="""
-Hi there, I couldn't get it to build with cabal (likely my fault, ie. inexperience).
-
-Can I please confirm something: Theoretically I dont need to do *any* preparation to start using git-annex assistant, right? As in I dont need to first configure git separately, or set up any folder hierarchies or such? The idea is that the assistant itself does all that's required? I just wonder if through my naivety I am missing a basic step and making a rookie mistake.
-
-A couple of notes:
-
-Running **/Applications/git-annex.app/Contents/MacOS/git-annex init**
-
-Returns **git-annex: Not in a git repository.**
-
-Any further assistance you may offer woudl be great, because I'd love to start investigating the potential for using git-annex in a multi-user environment (managing motion design projects).
-"""]]
diff --git a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_5_08289596445d7588e43d35490fbfe5f4._comment b/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_5_08289596445d7588e43d35490fbfe5f4._comment
deleted file mode 100644
index d9700eab0..000000000
--- a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_5_08289596445d7588e43d35490fbfe5f4._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmxns2UBAMDbTwrwHq_Lx1sNKrVVayq1X4"
- nickname="Darren"
- subject="comment 5"
- date="2013-06-25T14:54:47Z"
- content="""
-same problem here, latest version from the website and running OSX 10.8.4.
-"""]]
diff --git a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_5_2a336fe7b8aed07cbdaa868bd34078f9._comment b/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_5_2a336fe7b8aed07cbdaa868bd34078f9._comment
deleted file mode 100644
index aceafcf9f..000000000
--- a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_5_2a336fe7b8aed07cbdaa868bd34078f9._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.193"
- subject="comment 5"
- date="2013-06-25T17:14:02Z"
- content="""
-To get this fixed, someone is going to need to do some investigation of what is happening. I do not have resources to debug OSX problems that cannot be reproduced using the command line.
-"""]]
diff --git a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_6_ea7a40c3b6748738421aed00a6f7ca10._comment b/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_6_ea7a40c3b6748738421aed00a6f7ca10._comment
deleted file mode 100644
index 16ecca625..000000000
--- a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_6_ea7a40c3b6748738421aed00a6f7ca10._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkQafKy7hNSEolLs6TvbgUnkklTctUY9LI"
- nickname="Zellyn"
- subject="Happy to debug"
- date="2013-06-26T02:47:35Z"
- content="""
-Hi Joey, I'm having the same problem. I'm currently trying the homebrew route.
-
-I would be happy to debug, but I'm not familiar at all with git annex or the assistant, so I don't even know where to start looking. Let me know what would be useful to try, and I'll try it and post the results.
-"""]]
diff --git a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_7_00962da9288976f8a48d0cbc08e1d9e2._comment b/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_7_00962da9288976f8a48d0cbc08e1d9e2._comment
deleted file mode 100644
index 2bddffc70..000000000
--- a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_7_00962da9288976f8a48d0cbc08e1d9e2._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkQafKy7hNSEolLs6TvbgUnkklTctUY9LI"
- nickname="Zellyn"
- subject="More info"
- date="2013-06-26T04:21:47Z"
- content="""
-Looking at what the browser is doing:
-
-1. Open file://localhost/var/folders/00/0wpr8000h01000cxqpysvccm003kv1/T/webapp72069.html
-2. Meta refresh to: http://127.0.0.1:64190/?auth=7b8464a1fe3ed0386520bd2b214dbb963864b345151edc0b5febc0310a7974d89fda2ab6464d5791e6b1a474bebb86026b7c90ebb920c51a8291940c75e7c1f9
-3. Redirect to: http://127.0.0.1:64190/config?auth=7b8464a1fe3ed0386520bd2b214dbb963864b345151edc0b5febc0310a7974d89fda2ab6464d5791e6b1a474bebb86026b7c90ebb920c51a8291940c75e7c1f9
-4. Redirect to: http://127.0.0.1:64190/config/repository/new/first?auth=7b8464a1fe3ed0386520bd2b214dbb963864b345151edc0b5febc0310a7974d89fda2ab6464d5791e6b1a474bebb86026b7c90ebb920c51a8291940c75e7c1f9
-5. hang indefinitely
-
-"""]]
diff --git a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_8_5d53d23e529f33f6e7deb10643831613._comment b/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_8_5d53d23e529f33f6e7deb10643831613._comment
deleted file mode 100644
index 14cc3ec55..000000000
--- a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_8_5d53d23e529f33f6e7deb10643831613._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.193"
- subject="comment 8"
- date="2013-06-26T19:06:42Z"
- content="""
-Thanks, I've reproduced the hang using wget at the command line.
-
-Probably something has been broken in the switch to a new version of Yesod.
-
-"""]]
diff --git a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_9_f00c8761e3184975b6645c0c3e241365._comment b/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_9_f00c8761e3184975b6645c0c3e241365._comment
deleted file mode 100644
index 2639fb350..000000000
--- a/doc/bugs/Hanging_on_install_on_Mountain_lion/comment_9_f00c8761e3184975b6645c0c3e241365._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkQafKy7hNSEolLs6TvbgUnkklTctUY9LI"
- nickname="Zellyn"
- subject="Excellent"
- date="2013-06-26T21:01:38Z"
- content="""
-Excellent news. If you need any more help debugging, let me know.
-
-Out of curiosity, what would be the next step of useful information for you? lsof on the process didn't seem to show anything interesting...
-"""]]
diff --git a/doc/bugs/Hangs_on_creating_repository_when_using_--listen.mdwn b/doc/bugs/Hangs_on_creating_repository_when_using_--listen.mdwn
deleted file mode 100644
index fe0fe80f3..000000000
--- a/doc/bugs/Hangs_on_creating_repository_when_using_--listen.mdwn
+++ /dev/null
@@ -1,49 +0,0 @@
-### Please describe the problem.
-When using the git-annex webapp with the --listen paramter it as usual asks one to create a new repository on first startup. Selecting a repository location here and clicking "Make repository" button leads to a never ending loading browser and some git zombies.
-
-### What steps will reproduce the problem?
-Two machines needed
-
-1. On machine one: git-annex webapp --listen=\<machine1-public-ip\>:34561 (you can choose another port as well)
-2. On machine two: use a browser to go to the url the last step gave you
-3. Click on make repository
-
-
-### What version of git-annex are you using? On what operating system?
-* git-annex version: 4.20130601
-* build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS
-* built using cabal
-* on Ubuntu 13.04 32bit
-
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-[2013-06-12 21:59:37 CEST] main: starting assistant version 4.20130601
-WebApp crashed: unable to bind to local socket
-[2013-06-12 21:59:37 CEST] WebApp: warning WebApp crashed: unable to bind to local socket
-
- dbus failed; falling back to mtab polling (ClientError {clientErrorMessage = "runClient: unable to determine DBUS address", clientErrorFatal = True})
-
- No known network monitor available through dbus; falling back to polling
-(scanning...) [2013-06-12 21:59:37 CEST] Watcher: Performing startup scan
-(started...)
-
-
-# End of transcript or log.
-"""]]
-
-> The problem is that, when a port is specified, it is used for each web
-> server started, and the process of making a new repository unavoidably
-> requires it to start a second web server instance. This would also affect
-> switching between existing repositories in the webapp. I don't see
-> any way to make it not crash here, except for ignoring the port it was told
-> to use when something else is already listening there. --[[Joey]]
-
-[[!tag /design/assistant]]
-
->> --listen no longer accepts a port. Use the new HTTPS support instead.
->> [[done]] --[[Joey]]
diff --git a/doc/bugs/Hangs_on_creating_repository_when_using_--listen/comment_1_8cbe786de8cf8b407418149b9c811aab._comment b/doc/bugs/Hangs_on_creating_repository_when_using_--listen/comment_1_8cbe786de8cf8b407418149b9c811aab._comment
deleted file mode 100644
index b0132de65..000000000
--- a/doc/bugs/Hangs_on_creating_repository_when_using_--listen/comment_1_8cbe786de8cf8b407418149b9c811aab._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawk7iPiqWr3BVPLWEDvJhSSvcOqheLEbLNo"
- nickname="Dirk"
- subject="comment 1"
- date="2013-06-15T11:39:15Z"
- content="""
-Thanks for looking into this.
-
-Following your explanation there is no easy solution to this. I guess one could potentially grey out all actions in the webapp that lead to problems. But that might be overkill for a rare use case (which I assume the use of --listen with a given port is). Maybe just documenting for which use cases (repository creation, switching, ...?) the provided port will lead to problems (e.g. in the man page under the --listen section) is good enough (it is for me)?
-
-
-
-
-"""]]
diff --git a/doc/bugs/Hangs_on_creating_repository_when_using_--listen/comment_2_dc128eeddeaaf3f84e71aca0fb7d341f._comment b/doc/bugs/Hangs_on_creating_repository_when_using_--listen/comment_2_dc128eeddeaaf3f84e71aca0fb7d341f._comment
deleted file mode 100644
index 55d7efa1c..000000000
--- a/doc/bugs/Hangs_on_creating_repository_when_using_--listen/comment_2_dc128eeddeaaf3f84e71aca0fb7d341f._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.63"
- subject="comment 2"
- date="2013-08-24T18:52:11Z"
- content="""
-This also affects creating a second repository in the webapp, not just the repository creation at first startup.
-"""]]
diff --git a/doc/bugs/Hard_links_not_synced_in_direct_mode.mdwn b/doc/bugs/Hard_links_not_synced_in_direct_mode.mdwn
index 8b03134f1..2c8bd3588 100644
--- a/doc/bugs/Hard_links_not_synced_in_direct_mode.mdwn
+++ b/doc/bugs/Hard_links_not_synced_in_direct_mode.mdwn
@@ -123,3 +123,4 @@ Codename: precise
"""]]
+> [[!taglink confirmed]] (but may be out of scope for git-annex) --[[Joey]]
diff --git a/doc/bugs/How_can_I_solve_a_non-fast-forward_push_without_using_the_assistant__63__.mdwn b/doc/bugs/How_can_I_solve_a_non-fast-forward_push_without_using_the_assistant__63__.mdwn
deleted file mode 100644
index 69b0c4116..000000000
--- a/doc/bugs/How_can_I_solve_a_non-fast-forward_push_without_using_the_assistant__63__.mdwn
+++ /dev/null
@@ -1,295 +0,0 @@
-### Please describe the problem.
-
-I use both the assistant and the command line. Unfortunately I often end up
-in a state where I cannot do a "git annex sync" (it fails as described below)
-and I have to use the assistant to synchronize things to make the sync work. I
-would like to know how to do the same thing using only the command line.
-
-### What steps will reproduce the problem?
-
-This problem involves two repos: a local, indirect mode, manual group, repo, and
-a ssh remote archive group bare repo (with full git annex available
-remotely). The local repo is "top" and the remote one is "mini_archive".
-
-I start with the assistant not running, and the two repos in sync. Note that the
-remote server cannot directly contact the local repo.
-
-local:
-
- schmitta@top ~/D/annex (master)> git annex sync
- commit
- ok
- pull mini_archive
- ok
-
-remote:
-
- schmitta@mini ~/a/archive> git annex sync
- commit
- ok
-
-I then add a file locally and try to sync, getting a problem on mini_archive:
-
- schmitta@top ~/D/annex (master)> git annex add videos/Minecraft/Icy\ and\ FlowerChild\ Play\ -\ Better\ Than\ Wolves\ 3-qg6LVTcDl4Y.mp4
- add videos/Minecraft/Icy and FlowerChild Play - Better Than Wolves 3-qg6LVTcDl4Y.mp4 (checksum...) ok
- (Recording state in git...)
- schmitta@top ~/D/annex (master)> git annex sync
- commit
- ok
- pull mini_archive
- ok
- push mini_archive
- Counting objects: 15, done.
- Delta compression using up to 4 threads.
- Compressing objects: 100% (10/10), done.
- Writing objects: 100% (10/10), 1.01 KiB | 0 bytes/s, done.
- Total 10 (delta 4), reused 0 (delta 0)
- remote: error: denying non-fast-forward refs/heads/synced/git-annex (you should pull first)
- To ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/
- a5b002b..dde2626 master -> synced/master
- ! [remote rejected] git-annex -> synced/git-annex (non-fast-forward)
- error: failed to push some refs to 'ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/'
- failed
- git-annex: sync: 1 failed
-
-I try to merge and sync on the remote (I assume sync also does merge, but I'm
-not sure).
-
- schmitta@mini ~/a/archive> git annex merge
- merge git-annex ok
- schmitta@mini ~/a/archive> git annex sync
- commit
- ok
-
-Back on the local machine, I still have the conflict.
-
- schmitta@top ~/D/annex (master) [1]> git annex sync
- commit
- ok
- pull mini_archive
- ok
- push mini_archive
- Counting objects: 7, done.
- Delta compression using up to 4 threads.
- Compressing objects: 100% (5/5), done.
- Writing objects: 100% (5/5), 513 bytes | 0 bytes/s, done.
- Total 5 (delta 1), reused 0 (delta 0)
- remote: error: denying non-fast-forward refs/heads/synced/git-annex (you should pull first)
- To ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/
- ! [remote rejected] git-annex -> synced/git-annex (non-fast-forward)
- error: failed to push some refs to 'ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/'
- failed
- git-annex: sync: 1 failed
-
-From this state, the only way to resolve things is to launch the web app. It
-tells me "synced with mini_archive" (and it starts uploading the new file). Then
-on the server there is something to merge. (I haven't waited for the file to
-finish uploading in this case.)
-
- schmitta@mini ~/a/archive> git annex merge
- merge git-annex (merging refs/synced/1cdfb490-0660-41fb-b7ce-74b89abb9aac/git-annex into git-annex...)
- ok
- schmitta@mini ~/a/archive> git annex sync
- commit
- ok
-
-and I can then sync on the local repo:
-
- schmitta@top ~/D/annex (master) [1]> git annex sync
- commit
- ok
- pull mini_archive
- From ssh://git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive
- 8f39d4c..cb7f6c3 git-annex -> mini_archive/git-annex
- ok
-
-Note that I need to do the remote merge for things to work. After the file has
-finished uploading, I get back in a conflict:
-
- schmitta@top ~/D/annex (master)> git annex sync
- commit
- ok
- pull mini_archive
- ok
- push mini_archive
- Total 0 (delta 0), reused 0 (delta 0)
- remote: error: denying non-fast-forward refs/heads/synced/git-annex (you should pull first)
- To ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/
- ! [remote rejected] git-annex -> synced/git-annex (non-fast-forward)
- error: failed to push some refs to 'ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/'
- failed
- git-annex: sync: 1 failed
-
-If I disable and re-enable the sync on the server (forcing a sync), I still have
-a conflict locally:
-
- schmitta@top ~/D/annex (master) [1]> git annex sync
- commit
- ok
- pull mini_archive
- ok
- push mini_archive
- Total 0 (delta 0), reused 0 (delta 0)
- remote: error: denying non-fast-forward refs/heads/synced/git-annex (you should pull first)
- To ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/
- ! [remote rejected] git-annex -> synced/git-annex (non-fast-forward)
- error: failed to push some refs to 'ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/'
- failed
- git-annex: sync: 1 failed
-
-It only get solved by doing a merge on the server:
-
- schmitta@mini ~/a/archive> git annex merge
- merge git-annex (merging refs/synced/1cdfb490-0660-41fb-b7ce-74b89abb9aac/git-annex into git-annex...)
- (Recording state in git...)
- ok
-
- schmitta@top ~/D/annex (master) [1]> git annex sync
- commit
- ok
- pull mini_archive
- remote: Counting objects: 13, done.
- remote: Compressing objects: 100% (5/5), done.
- remote: Total 5 (delta 3), reused 0 (delta 0)
- Unpacking objects: 100% (5/5), done.
- From ssh://git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive
- cb7f6c3..d177e1a git-annex -> mini_archive/git-annex
- ok
- (merging mini_archive/git-annex into git-annex...)
-
-
-### What version of git-annex are you using? On what operating system?
-
-Current version available on cabal:
-
- schmitta@top ~/D/annex (master)> git annex version
- git-annex version: 4.20131002
- build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi
- key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
- remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
- local repository version: 3
- default repository version: 3
- supported repository versions: 3 4
- upgrade supported from repository versions: 0 1 2
-
- schmitta@mini ~/a/archive> git annex version
- git-annex version: 4.20131002
- build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi
- key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
- remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
- local repository version: 3
- default repository version: 3
- supported repository versions: 3 4
- upgrade supported from repository versions: 0 1 2
-
-
-### Please provide any additional information below.
-
-Here is daemon.log. It mentions another repo which is an external
-hard drive not plugged it at the moment. I'm skipping the file transmission
-(...).
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-[2013-10-23 14:02:05 CEST] main: starting assistant version 4.20131002
-[2013-10-23 14:02:05 CEST] TransferScanner: Syncing with hole, mini_archive
-Already up-to-date.
-fatal: '/Volumes/hole/annex/' does not appear to be a git repository
-fatal: Could not read from remote repository.
-
-Please make sure you have the correct access rights
-and the repository exists.
-
-(scanning...) [2013-10-23 14:02:06 CEST] Watcher: Performing startup scan
-Already up-to-date.
-Already up-to-date.
-fatal: '/Volumes/hole/annex/' does not appear to be a git repository
-fatal: Could not read from remote repository.
-
-Please make sure you have the correct access rights
-and the repository exists.
-remote: error: denying non-fast-forward refs/heads/synced/git-annex (you should pull first)
-To ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/
- ! [remote rejected] git-annex -> synced/git-annex (non-fast-forward)
-error: failed to push some refs to 'ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/'
-fatal: '/Volumes/hole/annex/' does not appear to be a git repository
-fatal: Could not read from remote repository.
-
-Please make sure you have the correct access rights
-and the repository exists.
-fatal: '/Volumes/hole/annex/' does not appear to be a git repository
-fatal: Could not read from remote repository.
-
-Please make sure you have the correct access rights
-and the repository exists.
-remote: error: denying non-fast-forward refs/heads/synced/git-annex (you should pull first)
-To ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/
- ! [remote rejected] git-annex -> synced/git-annex (non-fast-forward)
-error: failed to push some refs to 'ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/'
-fatal: '/Volumes/hole/annex/' does not appear to be a git repository
-fatal: Could not read from remote repository.
-
-Please make sure you have the correct access rights
-and the repository exists.
-[2013-10-23 14:02:10 CEST] Committer: Committing changes to git
-[2013-10-23 14:02:10 CEST] Pusher: Syncing with mini_archive
-
-
-(Recording state in git...)
-(started...) To ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/
- 8f39d4c..cb7f6c3 git-annex -> refs/synced/1cdfb490-0660-41fb-b7ce-74b89abb9aac/git-annex
- a5b002b..dde2626 master -> refs/synced/1cdfb490-0660-41fb-b7ce-74b89abb9aac/master
-remote: error: denying non-fast-forward refs/heads/synced/git-annex (you should pull first)
-To ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/
- ! [remote rejected] git-annex -> synced/git-annex (non-fast-forward)
-error: failed to push some refs to 'ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/'
-remote: error: denying non-fast-forward refs/heads/synced/git-annex (you should pull first)
-To ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/
- ! [remote rejected] git-annex -> synced/git-annex (non-fast-forward)
-error: failed to push some refs to 'ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/'
-Everything up-to-date
-(gpg)
-
-
-SHA256E-s608232213--d4d6e02e651b1d265ff1c041ee8e8c23db9d880140816d62b8cc82cee4db3a54.mp4
-
-...
-
-sent 608306626 bytes received 42 bytes 5133389.60 bytes/sec
-total size is 608232213 speedup is 1.00
-[2013-10-23 14:04:13 CEST] Transferrer: Uploaded Icy and F..cDl4Y.mp4
-[2013-10-23 14:04:13 CEST] Pusher: Syncing with mini_archive
-remote: error: denying non-fast-forward refs/heads/synced/git-annex (you should pull first)
-To ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/
- ! [remote rejected] git-annex -> synced/git-annex (non-fast-forward)
-error: failed to push some refs to 'ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/'
-remote: error: denying non-fast-forward refs/heads/synced/git-annex (you should pull first)
-To ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/
- ! [remote rejected] git-annex -> synced/git-annex (non-fast-forward)
-error: failed to push some refs to 'ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/'
-To ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/
- cb7f6c3..927cc1c git-annex -> refs/synced/1cdfb490-0660-41fb-b7ce-74b89abb9aac/git-annex
-[2013-10-23 14:05:35 CEST] main: Syncing with mini_archive
-remote: error: denying non-fast-forward refs/heads/synced/git-annex (you should pull first)
-To ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/
- ! [remote rejected] git-annex -> synced/git-annex (non-fast-forward)
-error: failed to push some refs to 'ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/'
-remote: error: denying non-fast-forward refs/heads/synced/git-annex (you should pull first)
-To ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/
- ! [remote rejected] git-annex -> synced/git-annex (non-fast-forward)
-error: failed to push some refs to 'ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/'
-Everything up-to-date
-
-
-# End of transcript or log.
-"""]]
-
-> So, receive.denyNonFastforwards was the problem. It turns out that
-> `git init --bare --shared` sets that by default, and the webapp
-> uses that to create repositories on ssh server. I have made the webapp
-> unset receive.denyNonFastforwards when setting up such a repository.
->
-> Also added something to the assistant release notes about this
-> to handle existing repositories. [[done]] --[[Joey]]
diff --git a/doc/bugs/How_can_I_solve_a_non-fast-forward_push_without_using_the_assistant__63__/comment_1_0ddcbe0ccecdec1012964dfa436a3eee._comment b/doc/bugs/How_can_I_solve_a_non-fast-forward_push_without_using_the_assistant__63__/comment_1_0ddcbe0ccecdec1012964dfa436a3eee._comment
deleted file mode 100644
index ef2399d81..000000000
--- a/doc/bugs/How_can_I_solve_a_non-fast-forward_push_without_using_the_assistant__63__/comment_1_0ddcbe0ccecdec1012964dfa436a3eee._comment
+++ /dev/null
@@ -1,19 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="64.134.31.139"
- subject="comment 1"
- date="2013-10-23T15:21:34Z"
- content="""
-<pre>
-To ssh://schmitta@git-annex-**.**.**.**-schmitta_annex.2Farchive/~/annex/archive/
- ! [remote rejected] git-annex -> synced/git-annex (non-fast-forward)
-</pre>
-
-Since version 4.20130909, git-annex is supposed to have avoided this problem by forcing the push of the git-annex branch. If you run `git annex sync --debug`, you should see:
-
-[2013-10-23 11:12:54 EDT] call: git [\"--git-dir=annex/.git\",\"--work-tree=annex\",\"push\",\"foo\",\"+git-annex:synced/git-annex\",\"master:synced/master\"]
-
-The \"+\" flag before the branch name forces git push to update the remote branch even if it's not a fast-forward.
-
-You should be able to verify if git-annex is doing that, and run the same git push command manually to investigate why it might not be working. I have not seen this problem since putting in that fix, and I saw it before. Perhaps your server has an old or broken version of git that ignores this flag, or some git configuration setting I am not aware of that prevents it from working.
-"""]]
diff --git a/doc/bugs/How_can_I_solve_a_non-fast-forward_push_without_using_the_assistant__63__/comment_2_5765b849bcf045ead9f007bd50b2cfbd._comment b/doc/bugs/How_can_I_solve_a_non-fast-forward_push_without_using_the_assistant__63__/comment_2_5765b849bcf045ead9f007bd50b2cfbd._comment
deleted file mode 100644
index 44ccfe00b..000000000
--- a/doc/bugs/How_can_I_solve_a_non-fast-forward_push_without_using_the_assistant__63__/comment_2_5765b849bcf045ead9f007bd50b2cfbd._comment
+++ /dev/null
@@ -1,20 +0,0 @@
-[[!comment format=mdwn
- username="http://alan.petitepomme.net/"
- nickname="Alan Schmitt"
- subject="comment 2"
- date="2013-10-23T16:21:30Z"
- content="""
-I think I found the problem, after much googling.
-
-The command line you suggest is indeed tried, and rejected by the server.
-
-The answer came from [here](http://stackoverflow.com/questions/253055/how-do-i-push-amended-commit-to-the-remote-git-repo) where it says (speaking of a forced push)
-
-> Even this may not work as git allows remote repositories to refuse non-fastforward pushes at the far end by using the config variable 'receive.denynonfastforwards'.
-
-Indeed this is set in my annex repository. Note that this is a local setting, and that repository was created by the assistant.
-
-I removed this setting, and I can now push. Could the setting of this bit be a bug in the assistant?
-
-In any case, thanks a lot for indicating where to look at.
-"""]]
diff --git a/doc/bugs/How_to_use_a_DRA_bucket_in_Google_cloud_storage__63__.mdwn b/doc/bugs/How_to_use_a_DRA_bucket_in_Google_cloud_storage__63__.mdwn
new file mode 100644
index 000000000..a5bb5cb33
--- /dev/null
+++ b/doc/bugs/How_to_use_a_DRA_bucket_in_Google_cloud_storage__63__.mdwn
@@ -0,0 +1,27 @@
+### Please describe the problem.
+
+Git annex's special S3 remote doesn't seem to work with DRA buckets in Google cloud storage.
+
+### What steps will reproduce the problem?
+
+I created a DRA-style bucket in Google cloud storage:
+
+ gsutil mb gs://gitannex-dra
+
+Then followed [this hint](https://gist.github.com/jterrace/4576324) to
+set up use of GCS. Except that it didn't work:
+
+ git annex initremote gcs type=S3 encryption=none host=storage.googleapis.com port=80 bucket=gitannex-dra
+ initremote gcs (checking bucket...) git-annex: Invalid argument.
+
+### What version of git-annex are you using? On what operating system?
+
+Wheezy, git-annex version: 5.20141024~bpo70+1
+
+### Please provide any additional information below.
+
+There didn't seem to be any extra logs and `--debug` didn't seem to add anything useful.
+
+> Closing, as it seems others have gotten this to work with a more recent
+> version of git-annex. Please followup if it doesn't work. [[done]]
+> --[[Joey]]
diff --git a/doc/bugs/How_to_use_a_DRA_bucket_in_Google_cloud_storage__63__/comment_2_71e3fb544914c1924f8517173371c205._comment b/doc/bugs/How_to_use_a_DRA_bucket_in_Google_cloud_storage__63__/comment_2_71e3fb544914c1924f8517173371c205._comment
new file mode 100644
index 000000000..2d9161264
--- /dev/null
+++ b/doc/bugs/How_to_use_a_DRA_bucket_in_Google_cloud_storage__63__/comment_2_71e3fb544914c1924f8517173371c205._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkXzY87FdO942LR-qNyJFeCth0LjWORNuw"
+ nickname="Rob"
+ subject="proposed resolution"
+ date="2015-01-24T17:10:20Z"
+ content="""
+I believe that I could write an external special remote to enable a full GCS feature set to resolve this. I'll do this. If someone has already done so, please add to the comments.
+"""]]
diff --git a/doc/bugs/How_to_use_a_DRA_bucket_in_Google_cloud_storage__63__/comment_2_94654cd68a183a1d6210aa4ca13aca70._comment b/doc/bugs/How_to_use_a_DRA_bucket_in_Google_cloud_storage__63__/comment_2_94654cd68a183a1d6210aa4ca13aca70._comment
new file mode 100644
index 000000000..2420e3d0c
--- /dev/null
+++ b/doc/bugs/How_to_use_a_DRA_bucket_in_Google_cloud_storage__63__/comment_2_94654cd68a183a1d6210aa4ca13aca70._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkXzY87FdO942LR-qNyJFeCth0LjWORNuw"
+ nickname="Rob"
+ subject="Additional experiment"
+ date="2015-01-22T18:26:17Z"
+ content="""
+I tried unuccessfully on GCS DRA bucket gitannex-dra:
+
+ git annex initremote gcs type=S3 chunk=2MiB encryption=none host=storage.googleapis.com bucket=gitannex-dra storageclass=DURABLE_REDUCED_AVAILABILITY
+ initremote gcs (checking bucket...) git-annex: Invalid argument.
+
+
+"""]]
diff --git a/doc/bugs/How_to_use_a_DRA_bucket_in_Google_cloud_storage__63__/comment_4_e13eac28bd05f09210018a29c13aa73c._comment b/doc/bugs/How_to_use_a_DRA_bucket_in_Google_cloud_storage__63__/comment_4_e13eac28bd05f09210018a29c13aa73c._comment
new file mode 100644
index 000000000..00243b5e4
--- /dev/null
+++ b/doc/bugs/How_to_use_a_DRA_bucket_in_Google_cloud_storage__63__/comment_4_e13eac28bd05f09210018a29c13aa73c._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2015-02-04T18:46:32Z"
+ content="""
+The first thing to try is going to be a current version of git-annex,
+not the wheezy backport, which uses an old and not very good S3 library.
+
+So, upgrade to git-annex 5.20141203 or newer.
+The new aws library used by that version will probably work -- it's
+presumably what was used to make <https://gist.github.com/jterrace/4576324>
+
+Even if it fails, will probably fail in a more useful way than throwing
+an "Invalid argument" exception.
+"""]]
diff --git a/doc/bugs/In_the_assistant__44___add_some_clarifications_near___34__Add_another_local_repository__34___for_the_case_of_adding_an_existing_repository.mdwn b/doc/bugs/In_the_assistant__44___add_some_clarifications_near___34__Add_another_local_repository__34___for_the_case_of_adding_an_existing_repository.mdwn
deleted file mode 100644
index 0e49bc368..000000000
--- a/doc/bugs/In_the_assistant__44___add_some_clarifications_near___34__Add_another_local_repository__34___for_the_case_of_adding_an_existing_repository.mdwn
+++ /dev/null
@@ -1,28 +0,0 @@
-### Please describe the problem.
-
-The difference in consequences of `Add another local repository` in the *git-annex assistant* on an existing repository versus on a new directory are unclear.
-
-### What steps will reproduce the problem?
-
-Going to the "Add another local repository" in the *git-annex assistant* will make you confused if you want to add an existing repository.
-
-### What version of git-annex are you using? On what operating system?
-
-[[!format sh """
-$ git annex version
-git-annex version: 5.20140210-gd99db49
-build flags: Assistant Webapp Pairing S3 WebDAV Inotify DBus XMPP Feeds Quvi TDFA
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
-remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook external
-"""]]
-
-Ubuntu 13.04
-
-### Please provide any additional information below.
-
-Ain't nobody here but us chickens.
-
-> Ok, I have removed the reference to "new repository" since it can be
-> a new or an existing repository. The webapp already asks followup
-> questions if the repository exists to make sure nothing confusing
-> happens. [[done]] --[[Joey]]
diff --git a/doc/bugs/Incorrect_symlink_path_in_simple_submodule_use_case.mdwn b/doc/bugs/Incorrect_symlink_path_in_simple_submodule_use_case.mdwn
deleted file mode 100644
index b9cae0176..000000000
--- a/doc/bugs/Incorrect_symlink_path_in_simple_submodule_use_case.mdwn
+++ /dev/null
@@ -1,72 +0,0 @@
-### Please describe the problem.
-When creating a simple "parent" git repo, creating another "child" repo with an annexed file, then adding the child repo as a submodule of the parent, the symlink path of the large file contained by the submodule is incorrect.
-
-
-### What steps will reproduce the problem?
-Here are the exact steps for this simple use case (I have removed unrelated output for brevity, and setting up the repos is error-free):
-
- # Create "parent" repo
- $ mkdir parent
- $ cd parent/
- $ git init
- $ touch parent_start
- $ git add parent_start
- $ git commit -a -m 'New parent repo'
- $ cd ../
-
- # Create "child" repo
- $ mkdir child
- $ cd child/
- $ git init
- $ touch child_start
- $ git add child_start
- $ git commit -a -m 'New child repo'
- $ git annex init
- $ cp ~/Desktop/some_big_file child_big_file
- $ git annex add child_big_file
- $ git commit -a -m 'Added big file'
- $ cd ../
-
- # Add "child" repo as a submodule of "parent" repo
- $ cd parent/
- $ git submodule add ../child ./submodule
- $ git commit -m 'Added submodule'
-
- # Try to get annexed file
- $ cd submodule/
- $ git annex init
- $ git annex get
- $ ls ./
- -rw-r--r-- .git
- lrwxr-xr-x child_big_file -> .git/annex/objects/F5/f2/SHA256E-s1117253--ce17632dfd9c61a0a8c1384d25fb3a8a197f8056f224e15fbcad89904a82c5fd/SHA256E-s1117253--ce17632dfd9c61a0a8c1384d25fb3a8a197f8056f224e15fbcad89904a82c5fd
- -rw-r--r-- child_start
-
- # As you can see above, the child_big_file symlink path is incorrect (the ".git/annex/..." location is not a directory, and should instead be "../.git/modules/submodule/annex/...")
-
- # Show the actual location of the annexed file
- $ cd ../
- $ ls .git/modules/submodule/annex/objects/F5/f2/SHA256E-s1117253--ce17632dfd9c61a0a8c1384d25fb3a8a197f8056f224e15fbcad89904a82c5fd
- -r--r--r-- SHA256E-s1117253--ce17632dfd9c61a0a8c1384d25fb3a8a197f8056f224e15fbcad89904a82c5fd
-
-
-### What version of git-annex are you using? On what operating system?
-Mac OS X Mountain Lion. git-annex files are from within the downloadable git-annex assistant.
-
- $ sw_vers -productVersion
- 10.8.5
- $ git --version
- git version 1.7.12.4 (Apple Git-37)
- $ git-annex version
- git-annex version: 4.20131105-g136b030
- build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA
- key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
- remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
- local repository version: 3
- default repository version: 3
- supported repository versions: 3 4
- upgrade supported from repository versions: 0 1 2
-
-
-Thanks for your help :)
-
-> This is a duplicate of [[Git_annexed_files_symlink_are_wrong_when_submodule_is_not_in_the_same_path]] [[done]] --[[Joey]]
diff --git a/doc/bugs/Incorrect_symlink_path_in_simple_submodule_use_case/comment_1_73b4dc5f90c8ba5634caee35cd31af1a._comment b/doc/bugs/Incorrect_symlink_path_in_simple_submodule_use_case/comment_1_73b4dc5f90c8ba5634caee35cd31af1a._comment
deleted file mode 100644
index d8539041d..000000000
--- a/doc/bugs/Incorrect_symlink_path_in_simple_submodule_use_case/comment_1_73b4dc5f90c8ba5634caee35cd31af1a._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="206.74.132.139"
- subject="comment 1"
- date="2014-02-06T16:58:54Z"
- content="""
-Since the symlinks are committed to git, they can only point at one location, which is whereever the .git/annex directory was in the repository where they were created in the first place. You can run `git annex fix` in the submodule and it should correct the links. But then they'll point to the wrong location in the non-submodule clone of the repository.
-
-So, it seems you need to pick whether a given repository will be a submodule or not (and where it will be mounted in the parent repository if so), and stick with that choice. You can't have it both ways.
-
-I cannot imagine any change to git-annex that could change this limitation. Except perhaps using direct mode everywhere, in which case where the symlinks point internally doesn't really matter..
-
-(<http://myrepos.branchable.com> might be a usable alternative to submodules for you, that does not have this problem.)
-"""]]
diff --git a/doc/bugs/Incorrect_symlink_path_in_simple_submodule_use_case/comment_2_e84b93062c82453f18308a82ee270585._comment b/doc/bugs/Incorrect_symlink_path_in_simple_submodule_use_case/comment_2_e84b93062c82453f18308a82ee270585._comment
deleted file mode 100644
index 29302f0c1..000000000
--- a/doc/bugs/Incorrect_symlink_path_in_simple_submodule_use_case/comment_2_e84b93062c82453f18308a82ee270585._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmYwE2LrTHAgbco1mEa_y8rGVqX7exIoxc"
- nickname="François"
- subject="Replace the gitdir by a symbolic link"
- date="2014-02-11T08:06:53Z"
- content="""
-chadsgilbert proposed to replace the .git file by a symbolic link:
-
- <http://stackoverflow.com/a/18238326/1531323>
-
-What do you think of this possibility? Is it perennial? Can \"git annex init\" do it automatically?
-
-The [commit message](https://github.com/git/git/commit/69c305178) that introduces the change gives the impression that a symbolic link was a possibility.
-
-Thanks a lot for git annex!
-"""]]
diff --git a/doc/bugs/Incorrect_version_on_64_Standalone_Build.mdwn b/doc/bugs/Incorrect_version_on_64_Standalone_Build.mdwn
deleted file mode 100644
index d0f43f5b2..000000000
--- a/doc/bugs/Incorrect_version_on_64_Standalone_Build.mdwn
+++ /dev/null
@@ -1,11 +0,0 @@
- $ wget https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz
- $ tar xvzf git-annex-standalone-amd64.tar.gz
- $ cd git-annex.linux
- $ ./git-annex version
- git-annex version: 4.20130324
-
-Shouldn't that be `4.20130405`?
-
-The md5sum of the build I downloaded is `aabbb3aa2397be206cae86f33db9eef4`.
-
-> [[done]]; new version will look like eg `4.20130410-gc149c67` --[[Joey]]
diff --git a/doc/bugs/Incorrect_version_on_64_Standalone_Build/comment_1_1964e4cad33a9f98b2eedbf095e899ff._comment b/doc/bugs/Incorrect_version_on_64_Standalone_Build/comment_1_1964e4cad33a9f98b2eedbf095e899ff._comment
deleted file mode 100644
index 03a39b928..000000000
--- a/doc/bugs/Incorrect_version_on_64_Standalone_Build/comment_1_1964e4cad33a9f98b2eedbf095e899ff._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-04-10T20:38:28Z"
- content="""
-Hmm, I think this is an artifact of my release process. I copy the nightly autobuild to there, and typically do this in the morning, so there are some commits from changes to this wiki. Until I commit a new version to `debian/changelog`, `git annex version` can report wrong information. In particular, in commit c709623ff8e56490bb5802cb53880ae237f9f1d9 I changed the version number from a placeholder 4.20130324 to 4.20130405.
-
-There's a tradeoff between waiting for the next autobuild (only run once a day because the server has other users), taking the time to manually run a build, and getting the new release out to users quickly when I announce it.
-
-I think the thing to do is make it use the date of the *last* commit as the version number for autobuilds, and include the git rev in there too. Then users will know exactly what they've gotten.
-"""]]
diff --git a/doc/bugs/Install_of_git-annex-3.20121112_fails.mdwn b/doc/bugs/Install_of_git-annex-3.20121112_fails.mdwn
deleted file mode 100644
index f4f1c6c7d..000000000
--- a/doc/bugs/Install_of_git-annex-3.20121112_fails.mdwn
+++ /dev/null
@@ -1,20 +0,0 @@
-What steps will reproduce the problem?
-
-- rm -rf ~/.ghc/ && cabal update && cabal install git-annex --bindir=$HOME/bin
-
-What is the expected output? What do you see instead?
-
-- I would like to have the latest release installed
-
-What version of git-annex are you using? On what operating system?
-
-- git-annex-3.20121112
-- Ubuntu 12.04 LTS
-- The Glorious Glasgow Haskell Compilation System, version 7.4.1
-
-Please provide any additional information below.
-
-I use it heavily on 4 machines since a month and I really like it.
-
-> closing since this is a cabal library problem, and not something that
-> can be fixed by any change to git-annex. [[done]] --[[Joey]]
diff --git a/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_1_80fc80151d4390bd8a4332f30723962e._comment b/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_1_80fc80151d4390bd8a4332f30723962e._comment
deleted file mode 100644
index b3889eca6..000000000
--- a/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_1_80fc80151d4390bd8a4332f30723962e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.252.11.120"
- subject="comment 1"
- date="2012-11-13T17:08:14Z"
- content="""
-You forgot to say how it fails.
-"""]]
diff --git a/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_2_2613320a41a74dc757a3277c8c328bd0._comment b/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_2_2613320a41a74dc757a3277c8c328bd0._comment
deleted file mode 100644
index fa2b326e9..000000000
--- a/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_2_2613320a41a74dc757a3277c8c328bd0._comment
+++ /dev/null
@@ -1,62 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnldTTAP8PAifJUmqhRar6RAWNWlRcencw"
- nickname="Marco"
- subject="The failure"
- date="2012-11-13T17:24:40Z"
- content="""
-Configuring certificate-1.2.2...
-Building certificate-1.2.2...
-Preprocessing library certificate-1.2.2...
-[1 of 9] Compiling Data.Certificate.KeyRSA ( Data/Certificate/KeyRSA.hs, dist/build/Data/Certificate/KeyRSA.o )
-
-Data/Certificate/KeyRSA.hs:29:27:
- Constructor `RSA.PrivateKey' does not have field `RSA.private_size'
- In the expression:
- RSA.PrivateKey
- {RSA.private_size = calculate_modulus p_modulus 1,
- RSA.private_n = p_modulus, RSA.private_d = priv_exp,
- RSA.private_p = p_p1, RSA.private_q = p_p2,
- RSA.private_dP = p_exp1, RSA.private_dQ = p_exp2,
- RSA.private_qinv = p_coef}
- In an equation for `privkey':
- privkey
- = RSA.PrivateKey
- {RSA.private_size = calculate_modulus p_modulus 1,
- RSA.private_n = p_modulus, RSA.private_d = priv_exp,
- RSA.private_p = p_p1, RSA.private_q = p_p2,
- RSA.private_dP = p_exp1, RSA.private_dQ = p_exp2,
- RSA.private_qinv = p_coef}
- In an equation for `parsePrivate':
- parsePrivate
- [Start Sequence,
- IntVal 0,
- IntVal p_modulus,
- IntVal pub_exp,
- IntVal priv_exp,
- IntVal p_p1,
- IntVal p_p2,
- IntVal p_exp1,
- IntVal p_exp2,
- IntVal p_coef,
- End Sequence]
- = Right (pubkey, privkey)
- where
- privkey
- = RSA.PrivateKey
- {RSA.private_size = calculate_modulus p_modulus 1,
- RSA.private_n = p_modulus, RSA.private_d = priv_exp,
- RSA.private_p = p_p1, RSA.private_q = p_p2,
- RSA.private_dP = p_exp1, RSA.private_dQ = p_exp2,
- RSA.private_qinv = p_coef}
- pubkey
- = RSA.PublicKey
- {RSA.public_size = calculate_modulus p_modulus 1,
- RSA.public_n = p_modulus, RSA.public_e = pub_exp}
- calculate_modulus n i
- = if (2 ^ (i * 8)) > n then i else calculate_modulus n (i + 1)
-cabal: Error: some packages failed to install:
-authenticate-1.3.2 depends on certificate-1.2.2 which failed to install.
-certificate-1.2.2 failed during the building phase. The exception was:
-ExitFailure 1
-git-annex-3.20121112 depends on certificate-1.2.2 which failed to install.
-"""]]
diff --git a/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_3_c364764d0c56e8dc3cac276905d99841._comment b/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_3_c364764d0c56e8dc3cac276905d99841._comment
deleted file mode 100644
index e3478d03d..000000000
--- a/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_3_c364764d0c56e8dc3cac276905d99841._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.252.11.120"
- subject="comment 3"
- date="2012-11-13T17:54:30Z"
- content="""
-Hmm, the current version of certificate is 1.3.1, and I installed it without trouble just now. I don't know why cabal is installing a much older version there.
-
-In any case, this is not a bug in git annex, but some problem with the library that a library it uses depends on. You can use the pre-built standalone binary until cabal sorts itself out, I suppose.
-"""]]
diff --git a/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_4_f1057340dfa978071d3bbc9e2af1e612._comment b/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_4_f1057340dfa978071d3bbc9e2af1e612._comment
deleted file mode 100644
index 2741daacf..000000000
--- a/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_4_f1057340dfa978071d3bbc9e2af1e612._comment
+++ /dev/null
@@ -1,19 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnldTTAP8PAifJUmqhRar6RAWNWlRcencw"
- nickname="Marco"
- subject="Assistant depends on Yesod"
- date="2012-11-13T18:34:19Z"
- content="""
-Thank you Joey. Than I tried a workaround. On one machine I don't need the Webapp.
-
-I was using
-
-cabal install --only-dependencies -f-Webapp
-cabal configure -f-Webapp
-
-mp/Utility/libdiskfree.o dist/build/git-annex/git-annex-tmp/Utility/libmounts.o ./git-annex.hs
-
-Assistant/Alert.hs:21:8:
- Could not find module `Yesod'
- Use -v to see a list of the files searched for.
-"""]]
diff --git a/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_5_9007b1a3abd647945604968db19cb841._comment b/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_5_9007b1a3abd647945604968db19cb841._comment
deleted file mode 100644
index 666eef28b..000000000
--- a/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_5_9007b1a3abd647945604968db19cb841._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.252.11.120"
- subject="youch!"
- date="2012-11-13T19:37:23Z"
- content="""
-The assistant is indeed supposed to build w/o Yesod. I've fixed that in git!
-"""]]
diff --git a/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_6_0bb3ac5375f29ce9d3d0be93879267e3._comment b/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_6_0bb3ac5375f29ce9d3d0be93879267e3._comment
deleted file mode 100644
index 2aaf9cf43..000000000
--- a/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_6_0bb3ac5375f29ce9d3d0be93879267e3._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmLB39PC89rfGaA8SwrsnB6tbumezj-aC0"
- nickname="Tobias"
- subject="Bah, i missed this before making my own bug report"
- date="2012-11-13T20:56:50Z"
- content="""
-This line worked for me on ubuntu 12.10:
-
-cabal install --only-dependencies ./ --constraint=certificate==1.2.2 --constraint=crypto-pubkey-types==0.1.1
-
-"""]]
diff --git a/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_7_ae4443b8cd069080d1f77fca16aa8b04._comment b/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_7_ae4443b8cd069080d1f77fca16aa8b04._comment
deleted file mode 100644
index 99124ebe5..000000000
--- a/doc/bugs/Install_of_git-annex-3.20121112_fails/comment_7_ae4443b8cd069080d1f77fca16aa8b04._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnldTTAP8PAifJUmqhRar6RAWNWlRcencw"
- nickname="Marco"
- subject="Works"
- date="2012-11-14T07:01:34Z"
- content="""
-Thanks Joey for fixing this. Now I got a working version.
-
-Btw would it make sense to reference a stable Yesod version in the cabal file? I'm new to the haskell universe so I don't know what problems would come up with it.
-"""]]
diff --git a/doc/bugs/Installation_fails:___34__Duplicate_instance_declarations__34__.mdwn b/doc/bugs/Installation_fails:___34__Duplicate_instance_declarations__34__.mdwn
new file mode 100644
index 000000000..db02036f4
--- /dev/null
+++ b/doc/bugs/Installation_fails:___34__Duplicate_instance_declarations__34__.mdwn
@@ -0,0 +1,35 @@
+### Please describe the problem.
+
+[380 of 462] Compiling Assistant.WebApp.Types ( Assistant/WebApp/Types.hs, dist/build/git-annex/git-annex-tmp/Assistant/WebApp/Types.o )
+
+Assistant/WebApp/Types.hs:157:10:
+ Duplicate instance declarations:
+ instance PathPiece Bool
+ -- Defined at Assistant/WebApp/Types.hs:157:10
+ instance PathPiece Bool
+ -- Defined in `path-pieces-0.1.4:Web.PathPieces'
+cabal: Error: some packages failed to install:
+git-annex-5.20140709 failed during the building phase. The exception was:
+ExitFailure 1
+
+
+### What steps will reproduce the problem?
+
+cabal install git-annex --bindir=$HOME/bin
+
+
+### What version of git-annex are you using? On what operating system?
+git-annex-5.20140709, Fedora 20
+
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> Already fixed in git yesterday. [[done]] --[[Joey]]
diff --git a/doc/bugs/Internal_Server_Error_when_adding_an_uncrypted_box.com_repo_after_deleted_an_encrypted_one..mdwn b/doc/bugs/Internal_Server_Error_when_adding_an_uncrypted_box.com_repo_after_deleted_an_encrypted_one..mdwn
deleted file mode 100644
index 9a838b58f..000000000
--- a/doc/bugs/Internal_Server_Error_when_adding_an_uncrypted_box.com_repo_after_deleted_an_encrypted_one..mdwn
+++ /dev/null
@@ -1,28 +0,0 @@
-### Please describe the problem.
-I got the following error message
-
- Internal Server Error
- Cannot change encryption type of existing remote.
-
-after deleted my encrypted box.com remote and tried to add the same box.com account as an uncrypted remote.
-
-### What steps will reproduce the problem?
-* Add a box.com remote with encryption.
-* Delete the remote.
-* Add with the same box.com account a remote without encryption.
-
-### What version of git-annex are you using? On what operating system?
-* 2013.07.09 release
-* Linux 3.9.9-1-ARCH x86_64
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> fixed this [[done]] --[[Joey]]
diff --git a/doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X.mdwn b/doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X.mdwn
deleted file mode 100644
index 575a63684..000000000
--- a/doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X.mdwn
+++ /dev/null
@@ -1,25 +0,0 @@
-What steps will reproduce the problem?
-
-* Start with a clean setup.
-* Allow webapp to start; use it to create annex in ~/Documents/annex That works.
-* Go to add remote repo. Removable drive.
-* Select "/Volumes/G-DRIVE slim". Click next.
-
-What is the expected output? What do you see instead?
-Expected is something like "done". What I see is
-
-Internal Server Error
-
-git config [Param "annex.uuid",Param "6898F314-7817-4CD5-B1C3-588C55522A3B"] failed
-
-What version of git-annex are you using? On what operating system?
-
-git-annex version 3.20130107, OS X Mountain Lion. No MacPorts/homebrew/fink installed. gcc / git are installed.
-
-Please provide any additional information below.
-
-Maybe something to do with the drive name having spaces? "/Volumes/git-annex" worked fine.
-
-> Good thought in the comment. I was able to reproduce the failure
-> if the removable drive already had an "annex" directory that was not
-> a git repo. I've made it handle this case. [[done]] --[[Joey]]
diff --git a/doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_1_b2ef077d87a9da624f20649c21401b5b._comment b/doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_1_b2ef077d87a9da624f20649c21401b5b._comment
deleted file mode 100644
index f46292c19..000000000
--- a/doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_1_b2ef077d87a9da624f20649c21401b5b._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="comment 1"
- date="2013-01-14T16:07:18Z"
- content="""
-Spaces in the name is a good guess, but does not seem to cause the problem. I just successfully set up a USB drive that has spaces in the name. (Also, git-annex is carefully coded to avoid such problems..)
-
-It seems that the repository is created, but then running `git config` in it fails for some reason. One thing you could do is look at `~/Documents/annex/.git/annex/daemon.log`. It should have any error message output by the command.
-
-Or, you could try, in a shell:
-
-cd \"/Volumes/G-DRIVE slim/annex\"
-git config annex.uuid 6898F314-7817-4CD5-B1C3-588C55522A3B
-
-And see how that is failing.
-"""]]
diff --git a/doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_2_ef849e25b0264808bff800d9d3836119._comment b/doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_2_ef849e25b0264808bff800d9d3836119._comment
deleted file mode 100644
index ec7867653..000000000
--- a/doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_2_ef849e25b0264808bff800d9d3836119._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="arafel"
- ip="94.174.218.177"
- subject="comment 2"
- date="2013-01-14T20:50:50Z"
- content="""
-It did seem unlikely that you hadn't tested that. :-)
-
-Oddly, there doesn't seem to be a daemon.log file in that directory. I don't have the drive handy to test at the moment - when I do I'll try the commands you suggest and see what the output is.
-"""]]
diff --git a/doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_3_ae3cbd0eb69cbeb9b349e0060d056d43._comment b/doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_3_ae3cbd0eb69cbeb9b349e0060d056d43._comment
deleted file mode 100644
index f2e5394ce..000000000
--- a/doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_3_ae3cbd0eb69cbeb9b349e0060d056d43._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="arafel"
- ip="94.174.218.177"
- subject="comment 3"
- date="2013-01-14T21:19:12Z"
- content="""
-Pauls-MacBook-Pro:annex Paul$ cd /Volumes/G-DRIVE\ slim/annex/
-
-Pauls-MacBook-Pro:annex Paul$ git config annex.uuid 6898F314-7817-4CD5-B1C3-588C55522A3B
-
-error: could not lock config file .git/config: No such file or directory
-
-Pauls-MacBook-Pro:annex Paul$ ls -a
-
-. ..
-
-Looks like it created the directory but never got as far as 'git init'. Is it safe to just run that command, and will that (followed by the config) be enough? Or is there more to it than that? e.g. creating the remotes
-"""]]
diff --git a/doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_4_0ff2897805928b14829b7b369a3aed91._comment b/doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_4_0ff2897805928b14829b7b369a3aed91._comment
deleted file mode 100644
index 7e6b621c8..000000000
--- a/doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_4_0ff2897805928b14829b7b369a3aed91._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="comment 4"
- date="2013-01-14T22:54:30Z"
- content="""
-Can you do this:
-
-* `rmdir /Volumes/G-DRIVE\ slim/annex/`
-
-* Stop any git-annex assistant you have running.
-
-* At the console, run \"git annex webapp\", and reproduce the bug again. When it fails you should see some error message at the console where you started it.
-
-(If you're using the git-annex.app built for OSX, you should instead run the `git-annex-webapp` script included in the app.)
-"""]]
diff --git a/doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_5_414a45573aeb5201f4d80433955669d5._comment b/doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_5_414a45573aeb5201f4d80433955669d5._comment
deleted file mode 100644
index f5423f04f..000000000
--- a/doc/bugs/Internal_server_error_adding_USB_drive_on_OS_X/comment_5_414a45573aeb5201f4d80433955669d5._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="arafel"
- ip="94.174.218.177"
- subject="comment 5"
- date="2013-01-14T23:22:19Z"
- content="""
-Hm. After removing the directory, I can't get the problem to happen. I've tried both running the webapp from the CLI, and the git-annex app from Spotlight, and it works.
-
-A thought - does annex check for the existence of .git in the target folder, or does it just assume (if the folder exists) that it's been set up with git? That's the only thing I can think of. From this experience it seems that would be a worthwhile check if it doesn't already do it.
-
-Other than that we may just have to close the bug as unreproducible. I'm not sure what happened there; I'm not aware of doing anything differently the other times. Apologies for wasting your time!
-"""]]
diff --git a/doc/bugs/Internal_server_error_while_adding_remote_server_on_Windows.mdwn b/doc/bugs/Internal_server_error_while_adding_remote_server_on_Windows.mdwn
new file mode 100644
index 000000000..76a88808e
--- /dev/null
+++ b/doc/bugs/Internal_server_error_while_adding_remote_server_on_Windows.mdwn
@@ -0,0 +1,33 @@
+### Please describe the problem.
+The web app fails with an Internal server error while adding a remote server on Windows.
+ssh: createProcess: does not exist (No such file or directory)
+
+### What steps will reproduce the problem?
+Start the webapp, click add repository, select remote server, click check.
+
+### What version of git-annex are you using? On what operating system?
+Latest (as of 20141104) on Windows.
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+[2014-11-04 12:42:27 ora solare Europa occidentale] main: starting assistant version 5.20141031-gbfac20c
+Launching web browser on file://C:\Users\ltaglialegne\Documents\Annex\.git\annex\webapp.html
+[2014-11-04 12:42:27 ora solare Europa occidentale] Cronner: You should enable consistency checking to protect your data.
+(scanning...) [2014-11-04 12:42:27 ora solare Europa occidentale] Watcher: Performing startup scan
+(started...) recv: failed (No error)
+recv: failed (No error)
+recv: failed (No error)
+recv: failed (No error)
+04/Nov/2014:12:44:30 +0100 [Error#yesod-core] ssh: createProcess: does not exist (No such file or directory) @(yesod-core-1.2.19:Yesod.Core.Class.Yesod .\Yesod\Core\Class\Yesod.hs:503:5)
+04/Nov/2014:12:44:50 +0100 [Error#yesod-core] ssh: createProcess: does not exist (No such file or directory) @(yesod-core-1.2.19:Yesod.Core.Class.Yesod .\Yesod\Core\Class\Yesod.hs:503:5)
+
+# End of transcript or log.
+"""]]
+
+> [[fixed|done]]; git-annex's ssh is now installed to Git/cmd,
+> so it will be in the PATH as long as the instructions are followed to let
+> msysgit add git to the PATH. --[[Joey]]
diff --git a/doc/bugs/Internal_server_error_while_adding_remote_server_on_Windows/comment_1_af5df473e49a149701b30accb63643a9._comment b/doc/bugs/Internal_server_error_while_adding_remote_server_on_Windows/comment_1_af5df473e49a149701b30accb63643a9._comment
new file mode 100644
index 000000000..32eb8b0a2
--- /dev/null
+++ b/doc/bugs/Internal_server_error_while_adding_remote_server_on_Windows/comment_1_af5df473e49a149701b30accb63643a9._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-11-06T19:48:44Z"
+ content="""
+This looks like it's failing to find the ssh command. How did you install
+git-annex on your windows computer? Can you use ssh from a terminal?
+"""]]
diff --git a/doc/bugs/Internal_server_error_while_adding_remote_server_on_Windows/comment_2_e7ab75a3c4cd6db900bc2b786bda4e8d._comment b/doc/bugs/Internal_server_error_while_adding_remote_server_on_Windows/comment_2_e7ab75a3c4cd6db900bc2b786bda4e8d._comment
new file mode 100644
index 000000000..8557046d4
--- /dev/null
+++ b/doc/bugs/Internal_server_error_while_adding_remote_server_on_Windows/comment_2_e7ab75a3c4cd6db900bc2b786bda4e8d._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnE6kFAbud1LWrQuyX76yMYnUjHt9tR-A8"
+ nickname="Leonardo"
+ subject="comment 2"
+ date="2014-11-18T14:00:58Z"
+ content="""
+I've installed it using the installer.
+I think the problem might be that recent versions of git install somewhere in %AppData% and not in %ProgramFiles%.
+"""]]
diff --git a/doc/bugs/Internal_server_error_while_adding_remote_server_on_Windows/comment_3_0ff9b2e15904ef64b7d1937a41da5f49._comment b/doc/bugs/Internal_server_error_while_adding_remote_server_on_Windows/comment_3_0ff9b2e15904ef64b7d1937a41da5f49._comment
new file mode 100644
index 000000000..5144abcc6
--- /dev/null
+++ b/doc/bugs/Internal_server_error_while_adding_remote_server_on_Windows/comment_3_0ff9b2e15904ef64b7d1937a41da5f49._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 3"
+ date="2014-12-03T17:35:19Z"
+ content="""
+I was able to reproduce this. ssh is installed in C:\Program Files\Git\bin\, which is not in the PATH unless the msysgit installer is told to put all the unix utils in the PATH.
+"""]]
diff --git a/doc/bugs/Interrupted_switch_to_direct_mode_can_cause_all_following_switches_to_fail.mdwn b/doc/bugs/Interrupted_switch_to_direct_mode_can_cause_all_following_switches_to_fail.mdwn
deleted file mode 100644
index 432c72083..000000000
--- a/doc/bugs/Interrupted_switch_to_direct_mode_can_cause_all_following_switches_to_fail.mdwn
+++ /dev/null
@@ -1,50 +0,0 @@
-### What steps will reproduce the problem?
-
-How to reproduce:
-
-1. Check that the files involved are not available in the local repository.
-2. Force a switch to direct mode to fail, for example, due to a 'exotic' filename
-(first bug).
-3. Solve that problem.
-4. Make another switch to direct mode, but call that command in a subdirectory of
-the git-tree. Which will because some annexed file does not exists (second bug).
-Note: all subsequent switches to direct mode will now fail, no matter where started.
-
-
-Example:
-
-mkdir test1 test2 && cd test1 && git init . && git annex init
-mkdir umlaut something\ else
-date > umlaut/this_has_a_$'\201'
-date > something\ else/problem
-git annex add .
-git commit -m "Init"
-cd ../test2/
-
-git clone ../test1/ . && git annex init
-git annex move --from origin .
-
-cd ../test1/
-git annex direct #aborts with: commitBuffer: invalid argument (invalid character)
-cd umlaut
-git mv this_has_a_$'\201' this_has_a_o
-git commit -m "fix"
-git annex direct # fails with getSymbolicLinkStatus: does not exist (No such file or directory)
-
-### What is the expected output? What do you see instead?
-
-Expected is a repository switched to direct mode.
-The result is a repository which can't be switched to direct mode.
-
-### What version of git-annex are you using? On what operating system?
-
-git-annex version: 3.20130114
-OS: Arch Linux (3.7.2-2-ck)
-
-### Please provide any additional information below.
-
-The second bug seams to be very specific about folder- and/or filename.
-I believe that it has something to do with the space in the foldername.
-
-> Fixed both bugs. You should be able to upgrade git-annex and re-run the command
-> and end up with a working direct-mode repository. [[done]] --[[Joey]]
diff --git a/doc/bugs/Is_there_any_way_to_rate_limit_uploads_to_an_S3_backend__63__.mdwn b/doc/bugs/Is_there_any_way_to_rate_limit_uploads_to_an_S3_backend__63__.mdwn
index 64826c02a..0e7d61b2f 100644
--- a/doc/bugs/Is_there_any_way_to_rate_limit_uploads_to_an_S3_backend__63__.mdwn
+++ b/doc/bugs/Is_there_any_way_to_rate_limit_uploads_to_an_S3_backend__63__.mdwn
@@ -17,3 +17,4 @@ Please provide any additional information below.
The man page lists how to configure rate limiting for rsync, not sure how to do it for this
+[[!tag confirmed]]
diff --git a/doc/bugs/Issue_fewer_S3_GET_requests.mdwn b/doc/bugs/Issue_fewer_S3_GET_requests.mdwn
new file mode 100644
index 000000000..8bbcfa179
--- /dev/null
+++ b/doc/bugs/Issue_fewer_S3_GET_requests.mdwn
@@ -0,0 +1,9 @@
+It appears that git-annex issues one GET request to S3 / Google cloud for every file it tries to copy, if you don't pass --fast. (I could be wrong; I'm basing this on the fact that each "checking <remote name>" takes about the same amount of time, and that it's slow enough to be hitting the network.)
+
+Amazon lets you GET 1000 objects in one GET request, and afaict a request that returns 1000 objects costs just as much as a request that returns 1 object. The cost of GET'ing every file in my annex is nontrivial -- Google charges 0.01 per 1000 GETs, and my repo has 130k objects, so that's $1.3, compared to a monthly cost for storage of under $10. This means that if I want to back up my files more than, say, once a week, I need to write a script that parses the JSON output of git annex whereis and uploads with --fast only the files that aren't present in the cloud. It also means that I have to trust the output of whereis.
+
+All those GETs also slow down the non-fast copy, and this also applies to other kinds of remotes.
+
+There are a number of ways one could implement this. One way would be to have a command that updates the whereis data from the remote and then to add a parameter (maybe you already have it) to copy that's like --fast but skips files that are already present (maybe this is what --fast already does, but I did a quick check and it doesn't seem to). Because of the way git annex names files, I think it would be hard to coalesce GETs during a copy command, but it could be done.
+
+Anyway, please don't consider this a high-priority request; I can get by as-is, and I <3 git annex.
diff --git a/doc/bugs/Issue_fewer_S3_GET_requests/comment_1_59a6b87d01c003bf55cde4c882e1778c._comment b/doc/bugs/Issue_fewer_S3_GET_requests/comment_1_59a6b87d01c003bf55cde4c882e1778c._comment
new file mode 100644
index 000000000..b0c6b7613
--- /dev/null
+++ b/doc/bugs/Issue_fewer_S3_GET_requests/comment_1_59a6b87d01c003bf55cde4c882e1778c._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 1"
+ date="2014-10-22T21:36:27Z"
+ content="""
+The man page documents this:
+
+> To avoid contacting the remote to check if it has every
+> file when copying --to the repository, specify --fast
+
+As you've noted, this has to rely on the location tracking information being up-to-date, so if it's not it might miss copying a file to the remote that the remote doesn't currently have but used to. Otherwise, it's fine to use `copy --fast --to --remote` or `copy --not --in remote --to remote`, which is functionally identical.
+
+The check is not a GET request, it's a HEAD request, to check if the file
+is present. Does S3 have a way to combine multiple HEAD requests in a
+single http request? That seems unlikely. Maybe it is enough to reuse an
+open http connection for multiple HEADs? Anything needing a single HEAD request would not fit well into git-annex, but ways to do more caching of open http connections are being considered.
+"""]]
diff --git a/doc/bugs/Issue_fewer_S3_GET_requests/comment_2_8fdeb3352ac00a76625ec9c007e5b76a._comment b/doc/bugs/Issue_fewer_S3_GET_requests/comment_2_8fdeb3352ac00a76625ec9c007e5b76a._comment
new file mode 100644
index 000000000..b3b259445
--- /dev/null
+++ b/doc/bugs/Issue_fewer_S3_GET_requests/comment_2_8fdeb3352ac00a76625ec9c007e5b76a._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmUJBh1lYmvfCCiGr3yrdx-QhuLCSRnU5c"
+ nickname="Justin"
+ subject="comment 2"
+ date="2014-10-24T04:49:20Z"
+ content="""
+Oh jeez, I screwed that up wrt HEAD and GET. Sorry. The cost per HEAD on Google is 1/10 the price of GET, so we're talking $.13 to HEAD my 130k-file annex, which is totally reasonable.
+
+One can GET a bucket, which is what I was looking at. This returns up to 1000 elements of its contents (and there's a way to iterate over larger buckets). Of course this would only be useful if the majority of files in the bucket were of interest to git-annex, and it sounds like more trouble than it's worth at the prices I'm seeing.
+
+There might be a throughput improvement to be had by keeping the connection alive, although in my brief investigation, I think there may be a larger gain to be had by pipelining the various steps. Based on the fact that git-annex oomed when trying to upload a large file from my rpi, it seems like maybe the whole file is encrypted in memory before it's uploaded? And certainly the HEAD(s) appear not to be done in parallel with the upload.
+
+Sorry again for that HEAD/GET fail.
+"""]]
diff --git a/doc/bugs/Issue_fewer_S3_GET_requests/comment_3_6ccbb1cff7bc6b4640220d98f7ce21c3._comment b/doc/bugs/Issue_fewer_S3_GET_requests/comment_3_6ccbb1cff7bc6b4640220d98f7ce21c3._comment
new file mode 100644
index 000000000..353281db6
--- /dev/null
+++ b/doc/bugs/Issue_fewer_S3_GET_requests/comment_3_6ccbb1cff7bc6b4640220d98f7ce21c3._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 3"
+ date="2014-10-24T16:02:23Z"
+ content="""
+The OOM is [[S3_memory_leaks]]; fixed in the s3-aws branch.
+
+Yeah, GET of a bucket is doable. Another problem with it though is, if the bucket has a lot of contents, such as many files, or large files split into many chunks, that all has to be buffered in memory or processed as a stream. It would make sense in operations where git-annex knows it wants to check every key in a bucket. `git annex unused --from $s3remote` is the case that springs to mind where it could be quite useful to do that. Integrating it with `get`, not so much.
+
+I'd be inclined to demote this to a wishlist todo item to try to use bucket GET for `unused`. And/or rethink whether it makes sense for `copy --to` to run in --fast mode by default. I've been back and forth on that question before, but just from a runtime perspective, not from a 13 cents perspective. ;)
+"""]]
diff --git a/doc/bugs/Issue_on_OSX_with_some_system_limits.mdwn b/doc/bugs/Issue_on_OSX_with_some_system_limits.mdwn
index 146323bb8..394213220 100644
--- a/doc/bugs/Issue_on_OSX_with_some_system_limits.mdwn
+++ b/doc/bugs/Issue_on_OSX_with_some_system_limits.mdwn
@@ -24,3 +24,4 @@ To be precise, I suspect that the kqueue limit is 256, I had 325 files in the 'q
> since we use FSEvents there instead. --[[Joey]]
[[!tag /design/assistant]]
+[[!tag confirmed]]
diff --git a/doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__.mdwn b/doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__.mdwn
deleted file mode 100644
index f0809c568..000000000
--- a/doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__.mdwn
+++ /dev/null
@@ -1,21 +0,0 @@
-What steps will reproduce the problem?
-
- $ git annex -j sync | json_reformat
-
-What is the expected output? What do you see instead?
-
-Expecting valid JSON, instead this happens:
-
- $ git annex -j sync | json_reformat
- lexical error: invalid char in json text.
- {"command":"commit","file":""# On branch master nothing to c
- (right here) ------^
- $
-
-
-What version of git-annex are you using? On what operating system?
-
-Newest standalone (3.20121126), Linux i386. The "json_reformat" program is from the "yajl-tools" .deb package.
-
-> [[done]]; I've updated the --json documentation to note that it only
-> works with some query commands. --[[Joey]]
diff --git a/doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_1_380a49b3c132f9f529729a1cb5a69621._comment b/doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_1_380a49b3c132f9f529729a1cb5a69621._comment
deleted file mode 100644
index d1ad05842..000000000
--- a/doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_1_380a49b3c132f9f529729a1cb5a69621._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.6.49"
- subject="comment 1"
- date="2012-11-27T21:13:08Z"
- content="""
-Yeah, so git-annex has --json as a option available to any command, but the set of commands where it's actually useful is rather smaller, and certainly does not include this one. In general there are quite a lot of places where third-party program output is allowed to show through to provide necessary progress or debugging output, and that of course makes the json mode invalid.
-"""]]
diff --git a/doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_2_282f5f89fb4a46e1fad0980e0b2994a0._comment b/doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_2_282f5f89fb4a46e1fad0980e0b2994a0._comment
deleted file mode 100644
index b7b4d786e..000000000
--- a/doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_2_282f5f89fb4a46e1fad0980e0b2994a0._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://sunny256.sunbase.org/"
- nickname="sunny256"
- subject="comment 2"
- date="2012-11-27T21:30:48Z"
- content="""
-Yep, because of that I was in doubt if I should report it as a bug. Maybe it could be closed, as it's not a bug in git-annex, but git output leaking into the JSON. If there's not an easy way for git-annex to encapsulate the output or redirect the git output to stderr.
-"""]]
diff --git a/doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_3_7ff98958146b7f6396226bdd878ec86e._comment b/doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_3_7ff98958146b7f6396226bdd878ec86e._comment
deleted file mode 100644
index e3b27dd0e..000000000
--- a/doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_3_7ff98958146b7f6396226bdd878ec86e._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.6.49"
- subject="comment 3"
- date="2012-11-27T21:32:26Z"
- content="""
-I'd rather not abuse stderr.
-
-Do you have an actual use case for the json output for git annex sync? If there's a good one, the git output could be suppressed.
-"""]]
diff --git a/doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_4_f9e460a09e7e5f53c16c20ded2649201._comment b/doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_4_f9e460a09e7e5f53c16c20ded2649201._comment
deleted file mode 100644
index d773ef2c7..000000000
--- a/doc/bugs/JSON_output_broken_with___34__git_annex_sync__34__/comment_4_f9e460a09e7e5f53c16c20ded2649201._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://sunny256.sunbase.org/"
- nickname="sunny256"
- subject="comment 4"
- date="2012-11-27T21:40:05Z"
- content="""
-Actually not for the sync command, as I don't parse it in any scripts. Just meant as a heads-up, and not an especially important. Feel free to close it. :)
-"""]]
diff --git a/doc/bugs/Jabber__47__xmpp_not_supported_on_Debian_Wheezy_backport.mdwn b/doc/bugs/Jabber__47__xmpp_not_supported_on_Debian_Wheezy_backport.mdwn
deleted file mode 100644
index 0ea1a96a9..000000000
--- a/doc/bugs/Jabber__47__xmpp_not_supported_on_Debian_Wheezy_backport.mdwn
+++ /dev/null
@@ -1,12 +0,0 @@
-### Please describe the problem.
-I've installed Git-annex via the backport, everything looks fine. But when I go to Configuration>Configure jabber account I've got this message :
-
-[[!format sh """
- Jabber not supported
- This build of git-annex does not support Jabber. Sorry !
-"""]]
-
-### What version of git-annex are you using? On what operating system?
-5.20140117~bpo70+1 and Debian Wheezy with lxde
-
-> Build dependency problem. Fixed and backport updated. [[done]] --[[Joey]]
diff --git a/doc/bugs/Killing_the_assistant_daemon_leaves_ssh_mux_sessions_behind.mdwn b/doc/bugs/Killing_the_assistant_daemon_leaves_ssh_mux_sessions_behind.mdwn
deleted file mode 100644
index 12d1d7719..000000000
--- a/doc/bugs/Killing_the_assistant_daemon_leaves_ssh_mux_sessions_behind.mdwn
+++ /dev/null
@@ -1,38 +0,0 @@
-### Please describe the problem.
-
-If the assistant daemon is killed, ssh mux sessions are left behind. Incidentally there may be a better way to stop the assistant daemon besides "killall git-annex" but I haven't found it in the docs.
-
-### What steps will reproduce the problem?
-
-[[!format sh """
-$ ps aux | grep mux
-$ git-annex assistant
-$ date > fromwintermute # Just causing a change that needs to be pushed, any will do
-$ ps aux | grep mux
-pedrocr 32665 0.0 0.0 6396 948 ? Ss 11:06 0:00 ssh: /home/pedrocr/testsync/.git/annex/ssh/golias.git-annex [mux]
-$ killall git-annex
-$ ps aux | grep mux
-pedrocr 32665 0.0 0.0 6396 948 ? Ss 11:06 0:00 ssh: /home/pedrocr/testsync/.git/annex/ssh/golias.git-annex [mux]
-"""]]
-
-### What version of git-annex are you using? On what operating system?
-
-[[!format sh """
-$ git annex version
-git-annex version: 4.20130516.1
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP
-local repository version: 4
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-$ lsb_release -a
-No LSB modules are available.
-Distributor ID: Ubuntu
-Description: Ubuntu 12.04.2 LTS
-Release: 12.04
-Codename: precise
-"""]]
-
-
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Killing_the_assistant_daemon_leaves_ssh_mux_sessions_behind/comment_1_17879b98a5e79ace03b543064751e46e._comment b/doc/bugs/Killing_the_assistant_daemon_leaves_ssh_mux_sessions_behind/comment_1_17879b98a5e79ace03b543064751e46e._comment
deleted file mode 100644
index 17c91ca99..000000000
--- a/doc/bugs/Killing_the_assistant_daemon_leaves_ssh_mux_sessions_behind/comment_1_17879b98a5e79ace03b543064751e46e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-05-29T15:36:48Z"
- content="""
-There is a --stop option that can be used to stop the assistant. It will clean up ssh sessions. git-annex also automatically cleans up stale ssh sessions whenever it starts a new one.
-"""]]
diff --git a/doc/bugs/Killing_the_assistant_daemon_leaves_ssh_mux_sessions_behind/comment_2_2dc877e281750004b16619ea7b931160._comment b/doc/bugs/Killing_the_assistant_daemon_leaves_ssh_mux_sessions_behind/comment_2_2dc877e281750004b16619ea7b931160._comment
deleted file mode 100644
index 7c39be61b..000000000
--- a/doc/bugs/Killing_the_assistant_daemon_leaves_ssh_mux_sessions_behind/comment_2_2dc877e281750004b16619ea7b931160._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkx5V3MTbzCXS3J7Mn9FEq8M9bPPYMkAHY"
- nickname="Pedro"
- subject="comment 2"
- date="2013-05-29T18:08:51Z"
- content="""
-I see the --stop option in the manpage now, it's under watch and not assistant, so that's why I missed it. I had a problem with the mux sessions not being cleaned up when I changed the remote's hostname. Only after killing old mux's and restarting the assistant did I get it to sync properly.
-"""]]
diff --git a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss.mdwn b/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss.mdwn
deleted file mode 100644
index 2629a7d56..000000000
--- a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss.mdwn
+++ /dev/null
@@ -1,57 +0,0 @@
-## What steps will reproduce the problem?
-
-Take a large sub-directory in a repository (e.g. `ccash`) with some files within,
-
- $ tar -xzf ccash.tar.gz
- $ du -sh ccash
- 59M ccash
- $ ls -l ccash/trunk/annotationinterface/src/edu/byu/nlp/annotationinterface/java/BasicAnnotation.java ccash/trunk/DataProvider/WebContent/WEB-INF/lib/dom4j.jar
- -rw-r--r-- 1 dietz dietz 1748 Jul 27 2011 ccash/trunk/annotationinterface/src/edu/byu/nlp/annotationinterface/java/BasicAnnotation.java
- -rw-r--r-- 1 dietz dietz 313898 May 22 18:36 ccash/trunk/DataProvider/WebContent/WEB-INF/lib/dom4j.jar
-
-Annex it,
-
- $ git annex add ccash
- ...
- $ ls -l ccash/trunk/annotationinterface/src/edu/byu/nlp/annotationinterface/java/BasicAnnotation.java ccash/trunk/DataProvider/WebContent/WEB-INF/lib/dom4j.jar
- lrwxrwxrwx 1 dietz dietz 215 Jul 27 2011 ccash/trunk/annotationinterface/src/edu/byu/nlp/annotationinterface/java/BasicAnnotation.java -> ../../../../../../../../../../../.git/annex/objects/mv/zf/SHA256-s1748--5c0d1cbf104214b6d0ab85c53a85cadb975ec208f42a7b33a76d85e175352486/SHA256-s1748--5c0d1cbf104214b6d0ab85c53a85cadb975ec208f42a7b33a76d85e175352486
- lrwxrwxrwx 1 dietz dietz 210 Jul 27 2011 ccash/trunk/DataProvider/WebContent/WEB-INF/lib/dom4j.jar -> ../../../../../../../../.git/annex/objects/8G/gQ/SHA256-s313898--593552ffea3c5823c6602478b5002a7c525fd904a3c44f1abe4065c22edfac73/SHA256-s313898--593552ffea3c5823c6602478b5002a7c525fd904a3c44f1abe4065c22edfac73
-
-Unannex it (before or after committing),
-
- $ git annex unannex ccash
-
-Note that some fraction of the files will still be symbolic links, now pointing to non-existent files. This data has apparently been lost forever.
-
- $ ls -l ccash/trunk/annotationinterface/src/edu/byu/nlp/annotationinterface/java/BasicAnnotation.java ccash/trunk/DataProvider/WebContent/WEB-INF/lib/dom4j.jar
- -rw-r--r-- 1 dietz dietz 1748 Jul 27 2011 ccash/trunk/annotationinterface/src/edu/byu/nlp/annotationinterface/java/BasicAnnotation.java
- lrwxrwxrwx 1 dietz dietz 210 Jul 27 2011 ccash/trunk/DataProvider/WebContent/WEB-INF/lib/dom4j.jar -> ../../../../../../../../.git/annex/objects/8G/gQ/SHA256-s313898--593552ffea3c5823c6602478b5002a7c525fd904a3c44f1abe4065c22edfac73/SHA256-s313898--593552ffea3c5823c6602478b5002a7c525fd904a3c44f1abe4065c22edfac73
-
-It is unclear why some files are affected while others are not. That being said, unannexing small numbers of files at a time appears to avoid the issue,
-
- $ tar -zxf ccash.tar.gz
- $ git annex add ccash
- $ ls -l ccash/trunk/annotationinterface/src/edu/byu/nlp/annotationinterface/java/BasicAnnotation.java ccash/trunk/DataProvider/WebContent/WEB-INF/lib/dom4j.jar
- lrwxrwxrwx 1 dietz dietz 215 Jul 27 2011 ccash/trunk/annotationinterface/src/edu/byu/nlp/annotationinterface/java/BasicAnnotation.java -> ../../../../../../../../../../../.git/annex/objects/mv/zf/SHA256-s1748--5c0d1cbf104214b6d0ab85c53a85cadb975ec208f42a7b33a76d85e175352486/SHA256-s1748--5c0d1cbf104214b6d0ab85c53a85cadb975ec208f42a7b33a76d85e175352486
- lrwxrwxrwx 1 dietz dietz 210 Jul 27 2011 ccash/trunk/DataProvider/WebContent/WEB-INF/lib/dom4j.jar -> ../../../../../../../../.git/annex/objects/8G/gQ/SHA256-s313898--593552ffea3c5823c6602478b5002a7c525fd904a3c44f1abe4065c22edfac73/SHA256-s313898--593552ffea3c5823c6602478b5002a7c525fd904a3c44f1abe4065c22edfac73
- $ git annex unannex ccash/trunk/DataProvider/WebContent/WEB-INF
- ...
- $ ls -l ccash/trunk/annotationinterface/src/edu/byu/nlp/annotationinterface/java/BasicAnnotation.java ccash/trunk/DataProvider/WebContent/WEB-INF/lib/dom4j.jar
- lrwxrwxrwx 1 dietz dietz 215 Jul 27 2011 ccash/trunk/annotationinterface/src/edu/byu/nlp/annotationinterface/java/BasicAnnotation.java -> ../../../../../../../../../../../.git/annex/objects/mv/zf/SHA256-s1748--5c0d1cbf104214b6d0ab85c53a85cadb975ec208f42a7b33a76d85e175352486/SHA256-s1748--5c0d1cbf104214b6d0ab85c53a85cadb975ec208f42a7b33a76d85e175352486
- -rw-r--r-- 1 dietz dietz 313898 Jul 27 2011 ccash/trunk/DataProvider/WebContent/WEB-INF/lib/dom4j.jar
-
-For this reason, it seems likely this is due to some sort of race condition.
-
-
-## What version of git-annex are you using? On what operating system?
-
-This is on Ubuntu 12.04 with git-annex revision a1e2bc4.
-
-
-> There was no good soluton to this, so I picked a bad one that
-> will not have users complainging git-annex ate their data.
-> They will complain that `git annex unannex` is slow since it now copies
-> the file, and perhaps instead use --fast, and hopefully avoid destroying
-> their own data by editing the resulting hard links.
->
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_10_52364dc5b1b43b51748453d1896e35c6._comment b/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_10_52364dc5b1b43b51748453d1896e35c6._comment
deleted file mode 100644
index c0b286a2b..000000000
--- a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_10_52364dc5b1b43b51748453d1896e35c6._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmVV_nBwlsyCv53BXoJt8YpCX_wZPfzpyo"
- nickname="Peter"
- subject="Progress"
- date="2013-10-10T01:17:08Z"
- content="""
-Is there any type of script / tool / patch which does the --fast but with a copy instead of only a hard link? Can someone point me towards how I'm supposed to do this? I'm a technical user, however I don't really fancy having try to go learn the source code of git-annex to fix this really bad flaw :-/
-"""]]
diff --git a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_11_99b4db1841f8630a9c5efd08910e87a3._comment b/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_11_99b4db1841f8630a9c5efd08910e87a3._comment
deleted file mode 100644
index 4e55bd020..000000000
--- a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_11_99b4db1841f8630a9c5efd08910e87a3._comment
+++ /dev/null
@@ -1,104 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmVV_nBwlsyCv53BXoJt8YpCX_wZPfzpyo"
- nickname="Peter"
- subject="Productive Annoyance"
- date="2013-10-10T04:30:47Z"
- content="""
-Ok, so I'm annoyed by this enough (and desperate enough to want to get my data back) that I wrote up a few scripts to help with this. I make no claims regarding how well these will work, but they seem to work with some minimal testing on a Fedora 17 machine.
-
-READ THROUGH THESE SCRIPTS BEFORE RUNNING THEM TO MAKE SURE YOU ARE OK WITH WHAT THEY ARE DOING!!!
-
-First, a script to create a bad git-annex: one with missing files (with a few corner case names) after a git unannex. Specify the directory you'd like to make the annex at the top of the file. ALL CONTENTS OF THIS DIRECTORY WILL BE REMOVED!!!
-
- #!/bin/bash
-
- #This is the folder you'd like to create and unannex
- FOLDERTOUNANNEX='/tmp/badAnnex'
-
- pushd .
-
- if [ ! -d \"$FOLDERTOUNANNEX\" ] ; then
- mkdir \"$FOLDERTOUNANNEX\"
- fi
-
- cd \"$FOLDERTOUNANNEX\"
-
- rm -rf *
-
- mkdir subdir
- echo \"hi\" > 1one.txt
- echo \"hi\" > 2two.txt
- echo \"hi\" > \"3thr re ee.boo\"
- echo \"hi\" > \"4f o u r.boo\"
- echo \"hi\" > 5
- echo \"hi\" > \"6\"
- echo \"hi\" > \"subdir/7\"
- echo \"hi\" > \"subdir/8.cat\"
- echo \"hi\" > \"subdir/9.cat\"
-
- echo \"* annex.backend=SHA512E\" > .gitattributes
-
- chmod g-r 5 6
- chmod o-r 6
-
- ls -la
-
- git init
- git annex init \"stupid\"
- git annex add *
- ls -la
- git annex unannex *
- ls -la
-
- popd
-
-
-Then, a script to recover the files left missing by the above script. Note this might be very slow as it has to generate SHA512 hashes for all the files in your annex. Again, change the paths at the top of this file to work in your environment:
-
- #!/bin/bash
-
- #Set this to some place outside your annex, where we can store our hashes while we search for them
- #It will be fastest if this is on a different physical disk than the annexed folder
- #You can manually delete the file afterwards
- HASHFILE='/backup3/tmp.sha'
- #This is the folder you'd like to unannex
- FOLDERTOUNANNEX='/tmp/badAnnex'
-
-
-
-
- HASHLEN=128
-
- pushd .
- cd \"$FOLDERTOUNANNEX\"
-
- find \"$FOLDERTOUNANNEX\" ! -path '*.git*' -exec sha512sum \{\} \; > \"$HASHFILE\"
-
- find -L \"$FOLDERTOUNANNEX\" -type l | while read BROKENFILE; do
- POINTSTO=`file \"$BROKENFILE\" | sed -r 's/^.*broken symbolic link to .(.*).$/\1/g'`
-
- HASH=`echo \"$POINTSTO\" | sed -r \"s/^.*--([^-\/.]{$HASHLEN}).*$/\1/g\"`
-
- EXT=`echo \"$POINTSTO\" | sed -r \"s/^.*--[^-\/.]{$HASHLEN}(.[^.]+)?$/\1/g\"`
-
- echo \"-\"
- echo \"FILE:$BROKENFILE\"
- echo \"POINTSTO:$POINTSTO\"
- echo \"HASH:$HASH\"
- echo \"EXT:$EXT\"
-
- SOURCEFILE=`grep $HASH $HASHFILE | grep -m 1 \"$EXT\" | sed -r \"s/^.{$HASHLEN} (.*)$/\1/g\"`
-
- echo \"SOURCEFILE:$SOURCEFILE\"
- if [ -f \"$SOURCEFILE\" ];
- then
- cp --backup --suffix=\"~GIT_ANNEX_IS_DANGEROUS~\" -a \"$SOURCEFILE\" \"$BROKENFILE\"
- else
- echo \"ERROR: Cant find sourcefile\"
- fi
- done;
-
- popd
-
-I have not yet run this repair script on my rather large broken annex. I cannot seem to figure out how to restore file ownership and permissions which seem to have been lost when the second file is just linked to the matching previously annexed file (note: this is visible after \"fixing\" the bad annex created by the first script above in that after \"fixing\" file \"6\" is readable by other, whereas originally he was NOT readable by other. The permissions of 6 have been copied from 5.) Any thoughts or improvements on this are appreciated.
-"""]]
diff --git a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_1_fbb410a54bb0bd82d0953ef58a88600e._comment b/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_1_fbb410a54bb0bd82d0953ef58a88600e._comment
deleted file mode 100644
index 14172a3e5..000000000
--- a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_1_fbb410a54bb0bd82d0953ef58a88600e._comment
+++ /dev/null
@@ -1,24 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlup4hyZo4eCjF8T85vfRXMKBxGj9bMdl0"
- nickname="Ben"
- subject="comment 1"
- date="2012-09-06T02:28:00Z"
- content="""
-
-Here is a quick script which reproduces the issue on another Ubuntu 12.04 machine,
-
- mkdir hi
- cd hi
- wget \"http://downloads.sourceforge.net/project/free-cad/FreeCAD%20Source/freecad-0.11.3729.tar.gz\"
-
- git init
- git annex init
- tar -zxf freecad-0.11.3729.tar.gz
- git annex add FreeCAD-0.11.3729
- git annex unannex FreeCAD-0.11.3729
- echo \"The following links are broken:\"
- find -L . -type l
-
-This results in dozens of dead symlinks.
-
-"""]]
diff --git a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_2_8007c9ba42a951a4426255ec3c37d961._comment b/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_2_8007c9ba42a951a4426255ec3c37d961._comment
deleted file mode 100644
index e1f600d88..000000000
--- a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_2_8007c9ba42a951a4426255ec3c37d961._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.236"
- subject="comment 2"
- date="2012-09-06T14:55:58Z"
- content="""
-What's going on here is you have multiple files with the same content, so the symlinks point to the same annexed file. When unannex processes the first symlink, it moves the annexed file to replace it. This breaks the other symlink that pointed to it. Notice that if you then re-add the file to the annex, the broken symlink automatically gets fixed -- there's no actual data loss going on here.
-
-This problem can be avoided by using `git annex unannex --fast`, which makes hardlinks to the annexed file.
-But then you are also left with the hard links in `.git/annex/objects`.. `git annex unused` can find and remove them.
-
-It may make sense to make the current \"--fast\" behavior the default for unannex..
-"""]]
diff --git a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_3_73ecd4cb8ee58a8dfe7cab0e893dbe5b._comment b/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_3_73ecd4cb8ee58a8dfe7cab0e893dbe5b._comment
deleted file mode 100644
index 2a799fac0..000000000
--- a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_3_73ecd4cb8ee58a8dfe7cab0e893dbe5b._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlup4hyZo4eCjF8T85vfRXMKBxGj9bMdl0"
- nickname="Ben"
- subject="comment 3"
- date="2012-09-06T16:04:42Z"
- content="""
-Frankly, even the --fast behavior has an element of surprise to it. For example, one might have two files with identical content. Upon annexing and unannex they suddenly become a hard link to the same file, correct? If this is the case, changes to one will result in changes to the other. I would consider this a very nasty sort of surprise.
-"""]]
diff --git a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_4_e8a10886a564f35414c30a04335d9d32._comment b/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_4_e8a10886a564f35414c30a04335d9d32._comment
deleted file mode 100644
index 72b4c5c7f..000000000
--- a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_4_e8a10886a564f35414c30a04335d9d32._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.8.30"
- subject="comment 4"
- date="2012-09-09T16:53:35Z"
- content="""
-Perhaps the solution is to make --fast the default and to make it copy files when the content in the annex already has a hard link to it.
-"""]]
diff --git a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_5_6a318edfe45c80343d017dc7b4837acb._comment b/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_5_6a318edfe45c80343d017dc7b4837acb._comment
deleted file mode 100644
index fbc30f17b..000000000
--- a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_5_6a318edfe45c80343d017dc7b4837acb._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlup4hyZo4eCjF8T85vfRXMKBxGj9bMdl0"
- nickname="Ben"
- subject="comment 5"
- date="2012-09-09T20:47:04Z"
- content="""
-That sounds far more reasonable.
-"""]]
diff --git a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_6_f7a1d9f9d40aff531d873a95d2196edd._comment b/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_6_f7a1d9f9d40aff531d873a95d2196edd._comment
deleted file mode 100644
index 295411d25..000000000
--- a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_6_f7a1d9f9d40aff531d873a95d2196edd._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlup4hyZo4eCjF8T85vfRXMKBxGj9bMdl0"
- nickname="Ben"
- subject="comment 6"
- date="2012-09-19T23:32:35Z"
- content="""
-Has any progress been made here? While this issue may not result in data loss, the behavior documented in this bug is certainly surprising and does not instill confidence in new users.
-"""]]
diff --git a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_7_1724ffdf986301bf37ef7a6d16b6ea8a._comment b/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_7_1724ffdf986301bf37ef7a6d16b6ea8a._comment
deleted file mode 100644
index fd235321a..000000000
--- a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_7_1724ffdf986301bf37ef7a6d16b6ea8a._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.14.141"
- subject="comment 7"
- date="2012-09-23T18:02:45Z"
- content="""
-If unannex makes the file a hard link to the annexed content, it will be mode 444 or so. But if the user changes the permissions and modifys it, that will corrupt the content still in the annex!
-
-So the current --fast behavior seems no worse than the proposed behavior. And it's not at all clear to me that this would be a better default behavior for unannex than the current behavior, which at least ensures that data left in the annex (and referred to by another annexed file) cannot be corrupted.
-"""]]
diff --git a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_8_5470e2f50e6506139ecb1b342371c509._comment b/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_8_5470e2f50e6506139ecb1b342371c509._comment
deleted file mode 100644
index 7ac71b6b8..000000000
--- a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_8_5470e2f50e6506139ecb1b342371c509._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnRai_qFYPVvEgC6i1nlM1bh-C__jbhqS0"
- nickname="Matthew"
- subject="comment 8"
- date="2013-07-31T14:17:19Z"
- content="""
-Filenames are the index which users use to find their data.
-
-Leaving a broken symlink may not result in technical data loss, but can quite possibly result in the user being unable to find the data which was referenced by that filename (symlink), so in that case that data _is_ lost, in the true sense of the word (the user cannot find it). Telling the user their data exists _somewhere_ is not actually making the situation any better.
-"""]]
diff --git a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_9_e53148a9efa061a825f668a9492182f7._comment b/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_9_e53148a9efa061a825f668a9492182f7._comment
deleted file mode 100644
index 74aaa1e56..000000000
--- a/doc/bugs/Large_unannex_operations_result_in_stale_symlinks_and_data_loss/comment_9_e53148a9efa061a825f668a9492182f7._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="comment 9"
- date="2013-08-30T05:59:28Z"
- content="""
-I'll chime in and say that the non-fast behavior being the default seems wrong, and making hard-link invisibly seems wrong. What Joey proposed -- copying a file if there are multiple hard-links -- seems like the right solution.
-
-Just recently I tried to unannex a large repository and was bitten by now-dangling symlinks to files that I couldn't locate anymore. The fact is that the current unannex operation is too dangerous to be useful.
-"""]]
diff --git a/doc/bugs/Last_two_versions_didn__39__t_show_up_on_hackage.mdwn b/doc/bugs/Last_two_versions_didn__39__t_show_up_on_hackage.mdwn
deleted file mode 100644
index f1d4ae2b2..000000000
--- a/doc/bugs/Last_two_versions_didn__39__t_show_up_on_hackage.mdwn
+++ /dev/null
@@ -1,11 +0,0 @@
-### Please describe the problem.
-I don't know how the packages at hackage are managed, but the last version there is 4.20130601 while in the mean time there have been two other releases.
-
-### What steps will reproduce the problem?
-Check [[http://hackage.haskell.org/packages/archive/git-annex/]]
-
-> Thanks for reporting. Turns out that hackage was rejecting
-> it since it doesn't know about the OS name for the hurd. Since I
-> am not sure I have the right name either, I have removed those bits
-> and re-uploaded.
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Last_two_versions_didn__39__t_show_up_on_hackage/comment_1_74b56dea2100450e322e726bb55bb310._comment b/doc/bugs/Last_two_versions_didn__39__t_show_up_on_hackage/comment_1_74b56dea2100450e322e726bb55bb310._comment
deleted file mode 100644
index bbb2231dc..000000000
--- a/doc/bugs/Last_two_versions_didn__39__t_show_up_on_hackage/comment_1_74b56dea2100450e322e726bb55bb310._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://dzsino.myopenid.com/"
- nickname="dzsino"
- subject="me2"
- date="2013-06-30T13:16:38Z"
- content="""
-i'm using cabal on my mac to stay on the bleeding edge, but it still picks up version 0601, which it cannot install with yesod-1.1.9.3 failing to build (so it's not a git-annex problem). I hope a new release would fix that too..
-"""]]
diff --git a/doc/bugs/Local_files_not_found.mdwn b/doc/bugs/Local_files_not_found.mdwn
deleted file mode 100644
index b2843e35f..000000000
--- a/doc/bugs/Local_files_not_found.mdwn
+++ /dev/null
@@ -1,50 +0,0 @@
-### Please describe the problem.
-
-I have a git annex repo which cannot find the files with whereis, even though the files and contents are there. I have changed ownership of all the files. I am not sure, but I think that is when the problem was introduced. The current user that is invoking git annex owns and can access all files in the repository/annex)
-
-Creating a new repository from scratch works just fine.
-
-
-### What steps will reproduce the problem?
-
- # (in my current, somehow corrupt annex)
- $ echo hello > testfile
- $ git annex add testfile
- add testfile (checksum...) ok
- (Recording state in git...)
- $ git commit -am testfile
- [master 73ed120] testfile
- 1 file changed, 1 insertion(+)
- create mode 120000 testfile
- $ git annex whereis testfile
- whereis testfile (0 copies) failed
- git-annex: whereis: 1 failed
-
-
- # The contents exists though
- $ ls -l testfile
- lrwxrwxrwx 1 ftp ftp 176 May 13 09:43 testfile -> .git/annex/objects/P5/4q/SHA256-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03/SHA256-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03
- $ cat .git/annex/objects/P5/4q/SHA256-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03/SHA256-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03
- hello
- $ sha256sum testfile
- 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 testfile
-
-
- # the file can be found when unlocking/locking
- $ git annex unlock testfile
- unlock testfile (copying...) ok
- $ git annex lock testfile
- lock testfile ok
- (Recording state in git...)
-
-### What version of git-annex are you using? On what operating system?
-I ran Debian squeeze, with git annex 3.20120629~bpo60+2 when the problem was introduced. I just upgraded to wheezy, but the same problem exists with 3.20120629 from wheezy.
-
-I also manually installed 4.20130501 from unstable, which also showed the same problem.
-
-
-### Please provide any additional information below.
-
-I am not sure what information to supply, please provide pointers on what information might be useful.
-
-> [[done]] per comment --[[Joey]]
diff --git a/doc/bugs/Local_files_not_found/comment_1_5e1fcc0597594fa493ffa28aa32e1df8._comment b/doc/bugs/Local_files_not_found/comment_1_5e1fcc0597594fa493ffa28aa32e1df8._comment
deleted file mode 100644
index 72ed1e42f..000000000
--- a/doc/bugs/Local_files_not_found/comment_1_5e1fcc0597594fa493ffa28aa32e1df8._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawljcHBnBhazpDpk5k_9Wk9S_zA0hnjqdLQ"
- nickname="Andreas"
- subject="comment 1"
- date="2013-05-13T08:24:50Z"
- content="""
-Sorry for the noise - it turned out the local annex repository somehow had been marked as \"dead\" (as shown by git status).
-
-The fix was simply to git annex semitrust <repo uuid> and it went back to life.
-
-I am not sure how this bug tracker works, but this bug report can be closed as invalid. Thanks for git annex!
-"""]]
diff --git a/doc/bugs/Local_network___40__ssh__41___fails_to_pair__47__sync.mdwn b/doc/bugs/Local_network___40__ssh__41___fails_to_pair__47__sync.mdwn
index 6a66c553f..bff665a5e 100644
--- a/doc/bugs/Local_network___40__ssh__41___fails_to_pair__47__sync.mdwn
+++ b/doc/bugs/Local_network___40__ssh__41___fails_to_pair__47__sync.mdwn
@@ -173,3 +173,5 @@ fatal: The remote end hung up unexpectedly
ssh: connect to host Inspiron-14z.local port 22: Connection refused
fatal: The remote end hung up unexpectedly
"""]]
+
+[[!taglink moreinfo]]
diff --git a/doc/bugs/Local_pairing_fails:_received_PairMsg_loop.mdwn b/doc/bugs/Local_pairing_fails:_received_PairMsg_loop.mdwn
deleted file mode 100644
index 63f423e2c..000000000
--- a/doc/bugs/Local_pairing_fails:_received_PairMsg_loop.mdwn
+++ /dev/null
@@ -1,39 +0,0 @@
-### Please describe the problem.
-Pairing over my local network doesn't work. The pairing process never finishes. The log shows that the same PairMsg messages are repeated endlessly.
-
-### What steps will reproduce the problem?
-
-
-### What version of git-annex are you using? On what operating system?
-I'm on Ubuntu Raring 13.04. I installed git-annex 4.20131024 from the Precise PPA. It is working fine with a remote ssh repo, just not local pairing.
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-[2013-11-01 16:55:21 CDT] main: Pairing in progress
-[2013-11-01 16:55:55 CDT] PairListener: received "PairMsg (Verifiable {verifiableVal = (PairReq,PairData {remoteHostName = Just \"Onyx\", remoteUserName = \"me\", remoteDirectory = \"~/annex\", remoteSshPubKey = \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBT0Y6TTzTg8nWwonmgUPPwJmPIaJzfEoJl8DbuylpgXqGCQ4doJXuvBODHIehPfyMr1xCWqNlNNLkcWg/a/eHFceyt3IlcD9XaZ1aKPzPmpjYKKf5amiYd6mAssw8zFaZUvwaXkNuHZpXVZyg6C6TkT6kdfln+6fOJZpSGQzksy0jka/Rzx0KXjsp3oqO4tQJbC7AX0nvmD0zvLtyCURzfGV+n2IqQxpPf2nP75Evt8jamcuqm6pWoe+hj9zjGytIXpSKe35wzRwUAUrjgmZ9NweuWfi2uMPJlDv8/n+Q3HyjygA+GzixBGuYXDt1CD8ISZvuoygS+9+jeY9uYH8b me@Onyx\\n\", pairUUID = UUID \"834b4f39-ca66-4baf-9323-57ef7058d7d0\"},IPv4Addr 2281744576), verifiableDigest = \"8d5d380542f7377f09a4584a38b0dbcea9ea215c\"})"
-[2013-11-01 16:55:56 CDT] PairListener: received "PairMsg (Verifiable {verifiableVal = (PairReq,PairData {remoteHostName = Just \"kubbie\", remoteUserName = \"me\", remoteDirectory = \"~/annex\", remoteSshPubKey = \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvBEWT+AiAmehOFyTQWlSdwDs7DDbkw7rfZ4W/IeG5awZjMgT5BefIv9cmar8vGIIEFMZLpf8cL3xIargDz0xE2wuqj5CLkdz+DKp5f2FGs11Ax/62DZr+eCiVtPnwijFw0Cz0wMRzkN93uedrvzP/KkNRcczgWh3aZqn8WxlkCia1fyykm/pP3W80MNkiJYX5vXpu1NCV5KLu+UXQzKhM2njOauJ3W5wsMvSl8faZIpEmKVCD3BMDDruxTIxggA3kt9GCGvIbPawy+fGOpp/j6pHqnX3GB2kkT47RIZKYEv99HuLyvea+oY5R11FsC2yYY3ujIdUU0fXnV8pvrqSv me@kubbie\\n\", pairUUID = UUID \"fd6a6858-76c9-4eea-b733-9359c7313e72\"},IPv4Addr 1879091392), verifiableDigest = \"cbd8197c3d78c8c68bb30f63aa974cd88dd0fb13\"})"
-[2013-11-01 16:55:57 CDT] PairListener: received "PairMsg (Verifiable {verifiableVal = (PairReq,PairData {remoteHostName = Just \"Onyx\", remoteUserName = \"me\", remoteDirectory = \"~/annex\", remoteSshPubKey = \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBT0Y6TTzTg8nWwonmgUPPwJmPIaJzfEoJl8DbuylpgXqGCQ4doJXuvBODHIehPfyMr1xCWqNlNNLkcWg/a/eHFceyt3IlcD9XaZ1aKPzPmpjYKKf5amiYd6mAssw8zFaZUvwaXkNuHZpXVZyg6C6TkT6kdfln+6fOJZpSGQzksy0jka/Rzx0KXjsp3oqO4tQJbC7AX0nvmD0zvLtyCURzfGV+n2IqQxpPf2nP75Evt8jamcuqm6pWoe+hj9zjGytIXpSKe35wzRwUAUrjgmZ9NweuWfi2uMPJlDv8/n+Q3HyjygA+GzixBGuYXDt1CD8ISZvuoygS+9+jeY9uYH8b me@Onyx\\n\", pairUUID = UUID \"834b4f39-ca66-4baf-9323-57ef7058d7d0\"},IPv4Addr 2281744576), verifiableDigest = \"8d5d380542f7377f09a4584a38b0dbcea9ea215c\"})"
-[2013-11-01 16:55:58 CDT] PairListener: received "PairMsg (Verifiable {verifiableVal = (PairReq,PairData {remoteHostName = Just \"kubbie\", remoteUserName = \"me\", remoteDirectory = \"~/annex\", remoteSshPubKey = \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvBEWT+AiAmehOFyTQWlSdwDs7DDbkw7rfZ4W/IeG5awZjMgT5BefIv9cmar8vGIIEFMZLpf8cL3xIargDz0xE2wuqj5CLkdz+DKp5f2FGs11Ax/62DZr+eCiVtPnwijFw0Cz0wMRzkN93uedrvzP/KkNRcczgWh3aZqn8WxlkCia1fyykm/pP3W80MNkiJYX5vXpu1NCV5KLu+UXQzKhM2njOauJ3W5wsMvSl8faZIpEmKVCD3BMDDruxTIxggA3kt9GCGvIbPawy+fGOpp/j6pHqnX3GB2kkT47RIZKYEv99HuLyvea+oY5R11FsC2yYY3ujIdUU0fXnV8pvrqSv me@kubbie\\n\", pairUUID = UUID \"fd6a6858-76c9-4eea-b733-9359c7313e72\"},IPv4Addr 1879091392), verifiableDigest = \"cbd8197c3d78c8c68bb30f63aa974cd88dd0fb13\"})"
-[2013-11-01 16:55:59 CDT] PairListener: received "PairMsg (Verifiable {verifiableVal = (PairReq,PairData {remoteHostName = Just \"Onyx\", remoteUserName = \"me\", remoteDirectory = \"~/annex\", remoteSshPubKey = \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBT0Y6TTzTg8nWwonmgUPPwJmPIaJzfEoJl8DbuylpgXqGCQ4doJXuvBODHIehPfyMr1xCWqNlNNLkcWg/a/eHFceyt3IlcD9XaZ1aKPzPmpjYKKf5amiYd6mAssw8zFaZUvwaXkNuHZpXVZyg6C6TkT6kdfln+6fOJZpSGQzksy0jka/Rzx0KXjsp3oqO4tQJbC7AX0nvmD0zvLtyCURzfGV+n2IqQxpPf2nP75Evt8jamcuqm6pWoe+hj9zjGytIXpSKe35wzRwUAUrjgmZ9NweuWfi2uMPJlDv8/n+Q3HyjygA+GzixBGuYXDt1CD8ISZvuoygS+9+jeY9uYH8b me@Onyx\\n\", pairUUID = UUID \"834b4f39-ca66-4baf-9323-57ef7058d7d0\"},IPv4Addr 2281744576), verifiableDigest = \"8d5d380542f7377f09a4584a38b0dbcea9ea215c\"})"
-[2013-11-01 16:56:00 CDT] PairListener: received "PairMsg (Verifiable {verifiableVal = (PairReq,PairData {remoteHostName = Just \"kubbie\", remoteUserName = \"me\", remoteDirectory = \"~/annex\", remoteSshPubKey = \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvBEWT+AiAmehOFyTQWlSdwDs7DDbkw7rfZ4W/IeG5awZjMgT5BefIv9cmar8vGIIEFMZLpf8cL3xIargDz0xE2wuqj5CLkdz+DKp5f2FGs11Ax/62DZr+eCiVtPnwijFw0Cz0wMRzkN93uedrvzP/KkNRcczgWh3aZqn8WxlkCia1fyykm/pP3W80MNkiJYX5vXpu1NCV5KLu+UXQzKhM2njOauJ3W5wsMvSl8faZIpEmKVCD3BMDDruxTIxggA3kt9GCGvIbPawy+fGOpp/j6pHqnX3GB2kkT47RIZKYEv99HuLyvea+oY5R11FsC2yYY3ujIdUU0fXnV8pvrqSv me@kubbie\\n\", pairUUID = UUID \"fd6a6858-76c9-4eea-b733-9359c7313e72\"},IPv4Addr 1879091392), verifiableDigest = \"cbd8197c3d78c8c68bb30f63aa974cd88dd0fb13\"})"
-[2013-11-01 16:56:01 CDT] PairListener: received "PairMsg (Verifiable {verifiableVal = (PairReq,PairData {remoteHostName = Just \"Onyx\", remoteUserName = \"me\", remoteDirectory = \"~/annex\", remoteSshPubKey = \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBT0Y6TTzTg8nWwonmgUPPwJmPIaJzfEoJl8DbuylpgXqGCQ4doJXuvBODHIehPfyMr1xCWqNlNNLkcWg/a/eHFceyt3IlcD9XaZ1aKPzPmpjYKKf5amiYd6mAssw8zFaZUvwaXkNuHZpXVZyg6C6TkT6kdfln+6fOJZpSGQzksy0jka/Rzx0KXjsp3oqO4tQJbC7AX0nvmD0zvLtyCURzfGV+n2IqQxpPf2nP75Evt8jamcuqm6pWoe+hj9zjGytIXpSKe35wzRwUAUrjgmZ9NweuWfi2uMPJlDv8/n+Q3HyjygA+GzixBGuYXDt1CD8ISZvuoygS+9+jeY9uYH8b me@Onyx\\n\", pairUUID = UUID \"834b4f39-ca66-4baf-9323-57ef7058d7d0\"},IPv4Addr 2281744576), verifiableDigest = \"8d5d380542f7377f09a4584a38b0dbcea9ea215c\"})"
-...and so on and so on...
-# End of transcript or log.
-"""]]
-
-> I was able to reproduce something very like this by starting
-> pairing separately on both computers under poor network conditions (ie,
-> weak wifi on my front porch).
->
-> So, I've made a new PairReq message that has not been seen before
-> always make the alert pop up, even if the assistant thinks it is
-> in the middle of its own pairing process (or even another pairing process
-> with a different box on the LAN).
->
-> (This shouldn't cause a rogue PairAck to disrupt a pairing process part
-> way through.)
->
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_1_b8c485bafd98be8c21595597af361255._comment b/doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_1_b8c485bafd98be8c21595597af361255._comment
deleted file mode 100644
index 39587ee90..000000000
--- a/doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_1_b8c485bafd98be8c21595597af361255._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmNu4V5fvpLlBhaCUfXXOB0MI5NXwh8SkU"
- nickname="Adam"
- subject="comment 1"
- date="2013-11-01T23:10:12Z"
- content="""
-Also, when I initiate the pairing process on one computer only, I can see the PairMsg being constantly received in the other computer's log, but the prompt to finish pairing never appears.
-"""]]
diff --git a/doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_2_bc63489334f44a423645021415ffe196._comment b/doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_2_bc63489334f44a423645021415ffe196._comment
deleted file mode 100644
index f10b16f3c..000000000
--- a/doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_2_bc63489334f44a423645021415ffe196._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmNu4V5fvpLlBhaCUfXXOB0MI5NXwh8SkU"
- nickname="Adam"
- subject="comment 2"
- date="2013-11-01T23:27:24Z"
- content="""
-Well I installed the 1 Nov release from the tarball and then it picked up the pair request from the other system. I don't know if it was a bug in the previous version or something to do with the PPA. It's weird that the assistant just wasn't doing anything about the pair request it received.
-
-Thanks for your work on git-annex assistant.
-"""]]
diff --git a/doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_3_6345b174d04b6613c2c55a6ec9e50c21._comment b/doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_3_6345b174d04b6613c2c55a6ec9e50c21._comment
deleted file mode 100644
index a7eff6744..000000000
--- a/doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_3_6345b174d04b6613c2c55a6ec9e50c21._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.47"
- subject="comment 3"
- date="2013-11-02T19:02:55Z"
- content="""
-There is something a little strange in the logs. It shows both Onyx and kubbie are sending PairReqs. Probably one of those is the local computer, logging its own broadcast messages which loop back to it. But normally in pairing, one side starts the pairing process with a PairReq, and the other side pops up an alert and continues the process with a PairAck. It's not normal for both sides to request that pairing start.
-
-Is it possible that you started pairing on both computers separately?
-
-I tried doing that with gnu and darkstar. First I started pairing on gnu. darkstar saw the pair request, but I ignored the alert message about that, and went and started a separate pairing process on darkstar. gnu never showed an alert message for that; it ignored darkstar's PairReqs since it was sending its own.
-
-It's unlikely you'd ignore the alert, but the same thing could happen if the two computers were not able to communicate over the network initially, and pairing were started on both separately. So neither gets a chance to see the other's PairReq and show the alert. Even when they came into communication, they'd each ignore the other's PairReq.
-
-So, that seems like a bug..
-"""]]
diff --git a/doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_4_f39ec6c3d5a016b3c5260162c0b42177._comment b/doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_4_f39ec6c3d5a016b3c5260162c0b42177._comment
deleted file mode 100644
index cacbad03f..000000000
--- a/doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_4_f39ec6c3d5a016b3c5260162c0b42177._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmNu4V5fvpLlBhaCUfXXOB0MI5NXwh8SkU"
- nickname="Adam"
- subject="comment 4"
- date="2013-11-02T22:52:31Z"
- content="""
-I did indeed try to pair from both systems. What happened was, after I started the pair request, I went to the other system, and there was no pair request listed. So I misunderstood the directions and thought I was supposed to go ahead and enter the same password into the other system. (It says that pairing will complete as soon as the password is entered on the other system, so it seems reasonable to try that.) Then both systems were constantly issuing pair requests, but neither system was responding to the requests, even though it was receiving them.
-
-Both systems were always on the network and always able to communicate over it. The bug went away when I upgraded to the 1 Nov release...but then I had some very confusing issues with partially-paired repos from different git-annex versions...I ended up having to start git-annex over from scratch on both systems with the 1 Nov build.
-
-So I'm not sure where to go from here with this bug. Thanks for your help.
-"""]]
diff --git a/doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_5_ca0c5ef6e6a6d2c4b64430ac68370b6a._comment b/doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_5_ca0c5ef6e6a6d2c4b64430ac68370b6a._comment
deleted file mode 100644
index 413ca952e..000000000
--- a/doc/bugs/Local_pairing_fails:_received_PairMsg_loop/comment_5_ca0c5ef6e6a6d2c4b64430ac68370b6a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmNu4V5fvpLlBhaCUfXXOB0MI5NXwh8SkU"
- nickname="Adam"
- subject="comment 5"
- date="2013-11-02T22:55:42Z"
- content="""
-Oh, now I see your comment up there that you fixed it. Awesome. :)
-"""]]
diff --git a/doc/bugs/Log_rotation_loses_large_logs.mdwn b/doc/bugs/Log_rotation_loses_large_logs.mdwn
deleted file mode 100644
index c38c198b6..000000000
--- a/doc/bugs/Log_rotation_loses_large_logs.mdwn
+++ /dev/null
@@ -1,69 +0,0 @@
-### Please describe the problem.
-
-I have a large git-annex repository created using the assistant. It has thousands of files in it and is about 50GB in size.
-Yesterday I added a number of new files, and I also created a new "removable drive" repository for it to sync to.
-
-During these operations I could see a large amount of data being added to the git-annex log files.
-I left my computer on overnight to finish the sync.
-
-Today I went to check the log files but there was no useful information in them.
-
-Looking at the source I suspect I had a single log file > 1 Megabyte in size, which caused the rotation to occur repeatedly until it rolled off the end.
-However, I would have preferred if this large logfile had been kept for more than a couple of hours.
-
-See file contents below
-
-### What steps will reproduce the problem?
-
-See above
-
-### What version of git-annex are you using? On what operating system?
-
-Debian Wheezy, git-annex version: 5.20140210~bpo70+2 from wheezy-backports
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-When I look at the log files now, I see the following:
--rw-r--r-- 1 pgl users 443 Mar 5 21:48 daemon.log
--rw-r--r-- 1 pgl users 443 Mar 5 21:47 daemon.log.1
--rw-r--r-- 1 pgl users 81 Mar 5 01:16 daemon.log.10
--rw-r--r-- 1 pgl users 69 Mar 5 07:29 daemon.log.2
--rw-r--r-- 1 pgl users 81 Mar 5 01:16 daemon.log.3
--rw-r--r-- 1 pgl users 81 Mar 5 01:16 daemon.log.4
--rw-r--r-- 1 pgl users 81 Mar 5 01:16 daemon.log.5
--rw-r--r-- 1 pgl users 81 Mar 5 01:16 daemon.log.6
--rw-r--r-- 1 pgl users 81 Mar 5 01:16 daemon.log.7
--rw-r--r-- 1 pgl users 81 Mar 5 01:16 daemon.log.8
--rw-r--r-- 1 pgl users 81 Mar 5 01:16 daemon.log.9
-
-Looking at some of these log files.
-
-pgl@....:/....../.git/annex$ cat daemon.log.3
-[2014-03-05 01:16:15 GMT] SanityCheckerHourly: Rotated logs due to size: 1026416
-pgl@....:/....../.git/annex$ cat daemon.log.4
-[2014-03-05 01:16:15 GMT] SanityCheckerHourly: Rotated logs due to size: 1026416
-pgl@....:/....../.git/annex$ cat daemon.log.5
-[2014-03-05 01:16:15 GMT] SanityCheckerHourly: Rotated logs due to size: 1026416
-pgl@....:/....../.git/annex$ cat daemon.log.6
-[2014-03-05 01:16:15 GMT] SanityCheckerHourly: Rotated logs due to size: 1026416
-pgl@....:/....../.git/annex$ cat daemon.log.7
-[2014-03-05 01:16:15 GMT] SanityCheckerHourly: Rotated logs due to size: 1026416
-pgl@....:/....../.git/annex$ cat daemon.log.8
-[2014-03-05 01:16:15 GMT] SanityCheckerHourly: Rotated logs due to size: 1026416
-pgl@....:/....../.git/annex$ cat daemon.log.9
-[2014-03-05 01:16:15 GMT] SanityCheckerHourly: Rotated logs due to size: 1026416
-
-# End of transcript or log.
-"""]]
-
-> Changed log rotation to only rotate 1 log per hour max,
-> unless the total size of the log files is larger than the
-> free disk space on the filesystem containing them.
->
-> This way, runaway log growth will still be contained,
-> but logs will generally rotate slowly enough to give plenty of time
-> to see what's in them. [[done]] --[[Joey]]
diff --git a/doc/bugs/Lost_S3_Remote.mdwn b/doc/bugs/Lost_S3_Remote.mdwn
deleted file mode 100644
index c359b5210..000000000
--- a/doc/bugs/Lost_S3_Remote.mdwn
+++ /dev/null
@@ -1,59 +0,0 @@
-Somehow I've lost my S3 remote... git-annex knows it's there, but its not associating it with the git remote in .git/config
-
- $ git-annex whereis pebuilder.iso
- whereis pebuilder.iso (3 copies)
- 3b6fc6f6-3025-11e1-b496-33bffbc0f3ed -- housebackup (external seagate drive on /mnt/back/RemoteStore)
- 6b1326d8-2abb-11e1-8f43-979159a7f900 -- synology
- 9b297772-2ab2-11e1-a86f-2fd669cb2417 -- Amazon S3
- ok
-
-Amazon S3 is the description from the remote. My .git/config file contains this block:
-
- [remote "cloud"]
- annex-s3 = true
- annex-uuid = 9b297772-2ab2-11e1-a86f-2fd669cb2417
- annex-cost = 70
-
-The UUID matches... But I cannot access it... see below:
-
- [39532:39531 - 0:626] 08:20:38 [vivitron@tronlap:o +3] ~/annex/ISO
- $ git-annex get pebuilder.iso --from=cloud
- git-annex: there is no git remote named "cloud"
-
- [39532:39531 - 0:627] 08:20:56 [vivitron@tronlap:o +3] ~/annex/ISO
- $ git-annex get pebuilder.iso --from="Amazon S3"
- git-annex: there is no git remote named "Amazon S3"
-
- [39532:39531 - 0:628] 08:21:01 [vivitron@tronlap:o +3] ~/annex/ISO
- $ git-annex get pebuilder.iso --from=9b297772-2ab2-11e1-a86f-2fd669cb2417
- git-annex: there is no git remote named "9b297772-2ab2-11e1-a86f-2fd669cb2417"
-
- [39532:39531 - 0:629] 08:21:08 [vivitron@tronlap:o +3] ~/annex/ISO
- $
-
-git remote lists "cloud" as a remote:
-
- $ git remote
- all
- cloud
- cs
- es3
- origin
-
-git-annex status lists S3 support:
-
- $ git-annex status
- supported backends: SHA256 SHA1 SHA512 SHA224 SHA384 SHA256E SHA1E SHA512E SHA224E SHA384E WORM URL
- supported remote types: git S3 bup directory rsync web hook
-
-
-
-I appreciate any help.... I've tested versions 3.20111211, 3.20111231, and 3.20120105
-
- $ git --version
- git version 1.7.8.1
-
-
-
-> [[done]]; I've fixed the build system so this confusing thing cannot
-> happen anymore. --[[Joey]]
diff --git a/doc/bugs/Lost_S3_Remote/comment_1_6e80e6db6671581d471fc9a54181c04c._comment b/doc/bugs/Lost_S3_Remote/comment_1_6e80e6db6671581d471fc9a54181c04c._comment
deleted file mode 100644
index d6595ad5b..000000000
--- a/doc/bugs/Lost_S3_Remote/comment_1_6e80e6db6671581d471fc9a54181c04c._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 1"
- date="2012-01-06T03:04:35Z"
- content="""
-Despite `status` listing S3 support, your git-annex is actually built with S3stub, probably because it failed to find the necessary S3 module at build time. Rebuild git-annex and watch closely, you'll see \"** building without S3 support\". Look above that for the error and fix it.
-
-It was certainly a bug that it showed S3 as supported when built without it. I've fixed that.
-"""]]
diff --git a/doc/bugs/Lost_S3_Remote/comment_2_c99c65882a3924f4890e500f9492b442._comment b/doc/bugs/Lost_S3_Remote/comment_2_c99c65882a3924f4890e500f9492b442._comment
deleted file mode 100644
index 6112bc089..000000000
--- a/doc/bugs/Lost_S3_Remote/comment_2_c99c65882a3924f4890e500f9492b442._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 2"
- date="2012-01-06T03:08:28Z"
- content="""
-BTW, you'll want to \"make clean\", since the S3stub hack symlinks a file into place and it will continue building with S3stub even if you fix the problem until you clean.
-"""]]
diff --git a/doc/bugs/Lost_S3_Remote/comment_3_1e434d5a20a692cd9dc7f6f8f20f30dd._comment b/doc/bugs/Lost_S3_Remote/comment_3_1e434d5a20a692cd9dc7f6f8f20f30dd._comment
deleted file mode 100644
index 69063966c..000000000
--- a/doc/bugs/Lost_S3_Remote/comment_3_1e434d5a20a692cd9dc7f6f8f20f30dd._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkey8WuXUh_x5JC2c9_it1CYRnVTgdGu1M"
- nickname="Dustin"
- subject="Thank you!"
- date="2012-01-06T03:38:27Z"
- content="""
-make clean and rebuild worked... Thank you
-"""]]
diff --git a/doc/bugs/Makefile_is_missing_dependancies.mdwn b/doc/bugs/Makefile_is_missing_dependancies.mdwn
deleted file mode 100644
index 3e9d6e903..000000000
--- a/doc/bugs/Makefile_is_missing_dependancies.mdwn
+++ /dev/null
@@ -1,47 +0,0 @@
-<pre>
-From e45c73e66fc18d27bdf5797876fbeb07786a4af1 Mon Sep 17 00:00:00 2001
-From: Jimmy Tang <jtang@tchpc.tcd.ie>
-Date: Tue, 22 Mar 2011 22:24:07 +0000
-Subject: [PATCH] Touch up Makefile to depend on StatFS.hs
-
----
- Makefile | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index 08e2f59..4ae8392 100644
---- a/Makefile
-+++ b/Makefile
-@@ -15,7 +15,7 @@ SysConfig.hs: configure.hs TestConfig.hs
- hsc2hs $<
- perl -i -pe 's/^{-# INCLUDE.*//' $@
-
--$(bins): SysConfig.hs Touch.hs
-+$(bins): SysConfig.hs Touch.hs StatFS.hs
- $(GHCMAKE) $@
-
- git-annex.1: doc/git-annex.mdwn
---
-1.7.4.1
-
-</pre>
-
-
-StatFS.hs never gets depended on and compiled, the makefile was just missing something
-
-> Thanks, [[done]]! Interested to hear if StatFS.hs works on OSX (no warning) or
-> is a no-op (with warning). --[[Joey]]
-
->>
->> for now it gives a warning, it looks like it should be easy enough to add OSX
->> support, I guess it's a case of just digging around documentation to find the equivalent
->> calls/headers. I'll give it a go at making this feature work on OSX and get back to you.
->>
-
-<pre>
-jtang@exia:~/develop/git-annex $ make
-hsc2hs StatFS.hsc
-StatFS.hsc:85:2: warning: #warning free space checking code not available for this OS
-StatFS.hsc:85:2: warning: #warning free space checking code not available for this OS
-StatFS.hsc:85:2: warning: #warning free space checking code not available for this OS
-</pre>
diff --git a/doc/bugs/Makefile_is_missing_dependancies/comment_1_5a3da5f79c8563c7a450aa29728abe7c._comment b/doc/bugs/Makefile_is_missing_dependancies/comment_1_5a3da5f79c8563c7a450aa29728abe7c._comment
deleted file mode 100644
index ab8493a7a..000000000
--- a/doc/bugs/Makefile_is_missing_dependancies/comment_1_5a3da5f79c8563c7a450aa29728abe7c._comment
+++ /dev/null
@@ -1,47 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 1"
- date="2011-03-23T08:21:30Z"
- content="""
-Just did some minor digging around and checking, this seems to satisfy the compilers etc... I have yet to confirm that it *really* is working as expected. Also it might be better to check for a darwin operating system instead of apple I think, though I don't know of any one really using a pure darwin OS. But for now it works (I think)
-
-<pre>
-From fbfe27c2e19906ac02e3673b91bffa920f6dae5d Mon Sep 17 00:00:00 2001
-From: Jimmy Tang <jtang@tchpc.tcd.ie>
-Date: Wed, 23 Mar 2011 08:15:39 +0000
-Subject: [PATCH] Define (__APPLE__) in StatFS
-
-At least on OSX 10.6.6 it appears to have the same defintions as
-FreeBSD. The build process doesn't complain and the code is enabled,
-this needs to be tested and checked more.
----
- StatFS.hsc | 4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/StatFS.hsc b/StatFS.hsc
-index 8b453dc..45fd7e4 100644
---- a/StatFS.hsc
-+++ b/StatFS.hsc
-@@ -53,7 +53,7 @@ import Foreign.C.String
- import Data.ByteString (useAsCString)
- import Data.ByteString.Char8 (pack)
-
--#if defined (__FreeBSD__)
-+#if defined (__FreeBSD__) || defined(__APPLE__)
- # include <sys/param.h>
- # include <sys/mount.h>
- #else
-@@ -84,7 +84,7 @@ data CStatfs
- #ifdef UNKNOWN
- #warning free space checking code not available for this OS
- #else
--#if defined(__FreeBSD__)
-+#if defined(__FreeBSD__) || defined(__APPLE__)
- foreign import ccall unsafe \"sys/mount.h statfs\"
- #else
- foreign import ccall unsafe \"sys/vfs.h statfs64\"
---
-1.7.4.1
-</pre>
-"""]]
diff --git a/doc/bugs/Makefile_is_missing_dependancies/comment_2_416f12dbd0c2b841fac8164645b81df5._comment b/doc/bugs/Makefile_is_missing_dependancies/comment_2_416f12dbd0c2b841fac8164645b81df5._comment
deleted file mode 100644
index d355514a3..000000000
--- a/doc/bugs/Makefile_is_missing_dependancies/comment_2_416f12dbd0c2b841fac8164645b81df5._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 2"
- date="2011-03-23T15:05:12Z"
- content="""
-There's a simple test -- just configure annex.diskreserve to be say, 10 megabytes less than the total free space on your disk. Then try to git annex get a 11 mb file, and a 9 mb file. :)
-"""]]
diff --git a/doc/bugs/Makefile_is_missing_dependancies/comment_3_c38b6f4abc9b9ad413c3b83ca04386c3._comment b/doc/bugs/Makefile_is_missing_dependancies/comment_3_c38b6f4abc9b9ad413c3b83ca04386c3._comment
deleted file mode 100644
index 6b4cf5789..000000000
--- a/doc/bugs/Makefile_is_missing_dependancies/comment_3_c38b6f4abc9b9ad413c3b83ca04386c3._comment
+++ /dev/null
@@ -1,25 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 3"
- date="2011-03-23T15:13:33Z"
- content="""
-Alternatively, you can just load it up in ghci and see if it reports numbers that make sense:
-
-<pre>
-joey@gnu:~/src/git-annex>make StatFS.hs
-hsc2hs StatFS.hsc
-perl -i -pe 's/^{-# INCLUDE.*//' StatFS.hs
-joey@gnu:~/src/git-annex>ghci StatFS.hs
-GHCi, version 6.12.1: http://www.haskell.org/ghc/ :? for help
-Loading package ghc-prim ... linking ... done.
-Loading package integer-gmp ... linking ... done.
-Loading package base ... linking ... done.
-[1 of 1] Compiling StatFS ( StatFS.hs, interpreted )
-Ok, modules loaded: StatFS.
-*StatFS> s <- getFileSystemStats \".\"
-Loading package bytestring-0.9.1.5 ... linking ... done.
-*StatFS> s
-Just (FileSystemStats {fsStatBlockSize = 4096, fsStatBlockCount = 7427989, fsStatByteCount = 30425042944, fsStatBytesFree = 2528489472, fsStatBytesAvailable = 2219384832, fsStatBytesUsed = 27896553472})
-</pre>
-"""]]
diff --git a/doc/bugs/Makefile_is_missing_dependancies/comment_4_cc13873175edf191047282700315beee._comment b/doc/bugs/Makefile_is_missing_dependancies/comment_4_cc13873175edf191047282700315beee._comment
deleted file mode 100644
index c3ad2dafd..000000000
--- a/doc/bugs/Makefile_is_missing_dependancies/comment_4_cc13873175edf191047282700315beee._comment
+++ /dev/null
@@ -1,30 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 4"
- date="2011-03-23T16:02:34Z"
- content="""
-Ok, well it looks like it isn't doing anything useful at all.
-
-<pre>
-jtang@x00:~/develop/git-annex $ make StatFS.hs
-hsc2hs StatFS.hsc
-perl -i -pe 's/^{-# INCLUDE.*//' StatFS.hs
-jtang@x00:~/develop/git-annex $ ghci StatFS.hs
-GHCi, version 6.12.3: http://www.haskell.org/ghc/ :? for help
-Loading package ghc-prim ... linking ... done.
-Loading package integer-gmp ... linking ... done.
-Loading package base ... linking ... done.
-Loading package ffi-1.0 ... linking ... done.
-[1 of 1] Compiling StatFS ( StatFS.hs, interpreted )
-Ok, modules loaded: StatFS.
-*StatFS> s <- getFileSystemStats \".\"
-Loading package bytestring-0.9.1.7 ... linking ... done.
-*StatFS> s
-Just (FileSystemStats {fsStatBlockSize = 0, fsStatBlockCount = 1048576, fsStatByteCount = 0, fsStatBytesFree = 0, fsStatBytesAvailable = 0, fsStatBytesUsed = 0})
-*StatFS> s <- getFileSystemStats \"/\"
-*StatFS> s
-Just (FileSystemStats {fsStatBlockSize = 0, fsStatBlockCount = 1048576, fsStatByteCount = 0, fsStatBytesFree = 0, fsStatBytesAvailable = 0, fsStatBytesUsed = 0})
-*StatFS>
-</pre>
-"""]]
diff --git a/doc/bugs/Makefile_is_missing_dependancies/comment_5_0a1c52e2c96d19b9c3eb7e99b8c2434f._comment b/doc/bugs/Makefile_is_missing_dependancies/comment_5_0a1c52e2c96d19b9c3eb7e99b8c2434f._comment
deleted file mode 100644
index 149aeeb75..000000000
--- a/doc/bugs/Makefile_is_missing_dependancies/comment_5_0a1c52e2c96d19b9c3eb7e99b8c2434f._comment
+++ /dev/null
@@ -1,59 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 5"
- date="2011-03-23T16:14:22Z"
- content="""
-Actually I may have just been stupid and should have read the man page on statfs...
-
-<pre>
-jtang@x00:~/develop/git-annex $ git diff
-diff --git a/StatFS.hsc b/StatFS.hsc
-index 8b453dc..e10b2dd 100644
---- a/StatFS.hsc
-+++ b/StatFS.hsc
-@@ -53,7 +53,7 @@ import Foreign.C.String
- import Data.ByteString (useAsCString)
- import Data.ByteString.Char8 (pack)
-
--#if defined (__FreeBSD__)
-+#if defined (__FreeBSD__) || defined (__APPLE__)
- # include <sys/param.h>
- # include <sys/mount.h>
- #else
-@@ -84,8 +84,8 @@ data CStatfs
- #ifdef UNKNOWN
- #warning free space checking code not available for this OS
- #else
--#if defined(__FreeBSD__)
--foreign import ccall unsafe \"sys/mount.h statfs\"
-+#if defined(__FreeBSD__) || defined (__APPLE__)
-+foreign import ccall unsafe \"sys/mount.h statfs64\"
- #else
- foreign import ccall unsafe \"sys/vfs.h statfs64\"
- #endif
-</pre>
-
-yields this...
-
-<pre>
-jtang@x00:~/develop/git-annex $ ghci StatFS.hs
-GHCi, version 6.12.3: http://www.haskell.org/ghc/ :? for help
-Loading package ghc-prim ... linking ... done.
-Loading package integer-gmp ... linking ... done.
-Loading package base ... linking ... done.
-Loading package ffi-1.0 ... linking ... done.
-[1 of 1] Compiling StatFS ( StatFS.hs, interpreted )
-Ok, modules loaded: StatFS.
-*StatFS> s <- getFileSystemStats \".\"
-Loading package bytestring-0.9.1.7 ... linking ... done.
-*StatFS> s
-Just (FileSystemStats {fsStatBlockSize = 4096, fsStatBlockCount = 244106668, fsStatByteCount = 999860912128, fsStatBytesFree = 423097798656, fsStatBytesAvailable = 422835654656, fsStatBytesUsed = 576763113472})
-*StatFS>
-</pre>
-
-
-we could just stick another if defined (__APPLE__) instead of what I previously had and it looks like it will do the right thing on OSX.
-
-
-"""]]
diff --git a/doc/bugs/Makefile_is_missing_dependancies/comment_6_24119fc5d5963ce9dd669f7dcf006859._comment b/doc/bugs/Makefile_is_missing_dependancies/comment_6_24119fc5d5963ce9dd669f7dcf006859._comment
deleted file mode 100644
index 714459fbe..000000000
--- a/doc/bugs/Makefile_is_missing_dependancies/comment_6_24119fc5d5963ce9dd669f7dcf006859._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 6"
- date="2011-03-23T16:23:56Z"
- content="""
-I forgot to mention that the statfs64 stuff in OSX seems to be deprecated, see http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man2/statfs64.2.html
-
-on a slightly different note, is anonymous pushing to the \"wiki\" over git allowed? I'd prefer to be able to edit stuff inline for updating some of my own comments if I can :P
-"""]]
diff --git a/doc/bugs/Makefile_is_missing_dependancies/comment_7_96fd4725df4b54e670077a18d3ac4943._comment b/doc/bugs/Makefile_is_missing_dependancies/comment_7_96fd4725df4b54e670077a18d3ac4943._comment
deleted file mode 100644
index 8ba8e8d1f..000000000
--- a/doc/bugs/Makefile_is_missing_dependancies/comment_7_96fd4725df4b54e670077a18d3ac4943._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 7"
- date="2011-03-23T16:57:56Z"
- content="""
-Try the changes I've pushed to use statfs64 on apple.
-
-There is actually a standardized statvfs that I'd rather use, but after the last time that I tried going with the POSIX option first only to find it was not broadly implemented, I was happy to find some already existing code that worked for some OSs.
-
-(While ikiwiki supports anonymous git push, it's a feature we have not rolled out on Branchable.com yet, and anyway, ikiwiki disallows editing existing comments that way. I would, however, be happy to git pull changes from somewhere.)
-"""]]
diff --git a/doc/bugs/Makefile_is_missing_dependancies/comment_8_a3555e3286cdc2bfeb9cde0ff727ba74._comment b/doc/bugs/Makefile_is_missing_dependancies/comment_8_a3555e3286cdc2bfeb9cde0ff727ba74._comment
deleted file mode 100644
index 63d188bcc..000000000
--- a/doc/bugs/Makefile_is_missing_dependancies/comment_8_a3555e3286cdc2bfeb9cde0ff727ba74._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 8"
- date="2011-03-23T17:03:51Z"
- content="""
-The latest change looks good, it seems to be returning sensible numbers for me. Just tried it out on a few different mount points and it appears to be working.
-"""]]
diff --git a/doc/bugs/Manual_mode_weirdness.mdwn b/doc/bugs/Manual_mode_weirdness.mdwn
deleted file mode 100644
index efc88df2f..000000000
--- a/doc/bugs/Manual_mode_weirdness.mdwn
+++ /dev/null
@@ -1,37 +0,0 @@
-### Please describe the problem.
-
-I have an annex which contains all my photos. There are repositories on my laptop and my home server as well as an s3 backup (for which syncing is currently disabled). I switched the copy on my laptop to manual mode via 'git annex vicfg' (this correctly shows up in the webapp). I then proceeded to drop several folders (each containing a year's worth of photos). This works fine, however the assistant immediately starts downloading the dropped files from the server! Numcopies is set to 1 and the problem exists with the server in both the 'transfer' and 'backup' groups (haven't tried others).
-
-### What steps will reproduce the problem?
-
-1. Create a repo with some files.
-2. Create a bare-git remote on another machine.
-3. Make sure the assistant is running for the repo in question.
-4. Switch your local copy to manual mode.
-5. Drop some files.
-6. Watch as the assistant re-downloads them!
-
-### What version of git-annex are you using? On what operating system?
-
-git-annex version: 4.20130501
-local repository version: unknown
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP
-
-Debian Testing/Sid.
-
-### Please provide any additional information below.
-
-If it's relevant I switched the local repository to indirect mode by manually shutting down the assistant and running 'git annex indirect' before restarting the assistant. This was done before any of the steps above.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Manual_mode_weirdness/comment_1_f8ab3bac9e9a6768e5fd5a052f0d920f._comment b/doc/bugs/Manual_mode_weirdness/comment_1_f8ab3bac9e9a6768e5fd5a052f0d920f._comment
deleted file mode 100644
index fcacc3b33..000000000
--- a/doc/bugs/Manual_mode_weirdness/comment_1_f8ab3bac9e9a6768e5fd5a052f0d920f._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-05-29T16:13:10Z"
- content="""
-Yes, 4.20130501 is broken WRT manual mode. This has been fixed for a while in the current git master branch and autobuilds and there will be a new release soon with the fix.
-"""]]
diff --git a/doc/bugs/Manual_mode_weirdness/comment_2_e810daa488fad32ca8bdaae620051da8._comment b/doc/bugs/Manual_mode_weirdness/comment_2_e810daa488fad32ca8bdaae620051da8._comment
deleted file mode 100644
index 3a4cd9881..000000000
--- a/doc/bugs/Manual_mode_weirdness/comment_2_e810daa488fad32ca8bdaae620051da8._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="robconnolly"
- ip="203.167.218.84"
- subject="comment 2"
- date="2013-05-29T23:18:23Z"
- content="""
-Excellent, Thank you!
-"""]]
diff --git a/doc/bugs/Matching_oddity_in_SafeCommand.hs.mdwn b/doc/bugs/Matching_oddity_in_SafeCommand.hs.mdwn
deleted file mode 100644
index 53bba4a9b..000000000
--- a/doc/bugs/Matching_oddity_in_SafeCommand.hs.mdwn
+++ /dev/null
@@ -1,28 +0,0 @@
-In SafeCommand.hs, the code to unwrap a File looks like:
-
-[[!format haskell """
-toCommand :: [CommandParam] -> [String]
-toCommand = concatMap unwrap
- where
- [...]
- -- Files that start with a non-alphanumeric that is not a path
- -- separator are modified to avoid the command interpreting them as
- -- options or other special constructs.
- unwrap (File s@(h:_))
- | isAlphaNum h || h `elem` pathseps = [s]
- | otherwise = ["./" ++ s]
- unwrap (File s) = [s]
- [...]
-"""]]
-
-I am not sure I understand which case would be caught in the last clause "unwrap (File s)". Is that the empty file? Because all non-empty file names seem to have been caught earlier, at least in the "otherwise" if they do not match the condition. In this case, wouldn't it be an error to use an empty file name and wouldn't it be better to throw an exception instead of returning [[]]?
-
-I would use:
-
-[[!format haskell """
- unwrap (File []) = throw "Empty file name in SafeCommand.toCommand"
-"""]]
-
-or something similar instead.
-
-> [[done]]
diff --git a/doc/bugs/Matching_oddity_in_SafeCommand.hs/comment_1_1a51630c0791547a7e0b68eea5d81e4c._comment b/doc/bugs/Matching_oddity_in_SafeCommand.hs/comment_1_1a51630c0791547a7e0b68eea5d81e4c._comment
deleted file mode 100644
index d52dfed43..000000000
--- a/doc/bugs/Matching_oddity_in_SafeCommand.hs/comment_1_1a51630c0791547a7e0b68eea5d81e4c._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.172"
- subject="comment 1"
- date="2014-02-12T16:27:10Z"
- content="""
-You're right that line only matches empty filenames. I think that the Hurd actually does support empty filenames. It seems that the command being run would otherwise complain that it was given an empty parameter. So I do not think it's worth throwing an error here. Also, I prefer to keep toCommand a total function.
-"""]]
diff --git a/doc/bugs/Merge_involving_symlink_yields_unexpected_results.mdwn b/doc/bugs/Merge_involving_symlink_yields_unexpected_results.mdwn
new file mode 100644
index 000000000..1ebd4039b
--- /dev/null
+++ b/doc/bugs/Merge_involving_symlink_yields_unexpected_results.mdwn
@@ -0,0 +1,51 @@
+### Please describe the problem.
+When creating a symlink in repository A, and creating a regular file under the same name in repository B, syncing B will yield the result that the symlink is lost, and both the original filename and the .variant file will point to the same annex object containing the original content from B.
+
+Both A and B are indirect mode repos.
+
+### What steps will reproduce the problem?
+
+[[!format sh """
+
+#Initial state:
+
+repo-A$ echo file1
+This is file 1.
+repo-B$ echo file1
+This is file 1.
+
+#Make conflicting changes:
+
+repo-A$ ln -s file1 file2; git add file2; git commit -m "Add file2 as symlink."
+repo-B$ echo "This is file 2." > file2; git annex add file2; git commit -m "Add file2 as regular file."
+
+#Sync it:
+
+repo-A$ git annex sync
+repo-B$ git annex sync
+
+#Strange result in repo-B:
+
+repo-B$ ls -l file2*
+file2 -> .git/annex/objects/$HASH1
+file2.variant1234 -> .git/annex/objects/$HASH1
+repo-B$ cat file2 file2.variantXXXX
+This is file 2.
+This is file 2.
+
+#Repo-A leaves the symlink change untouched and adds a .variant containing the new regular file data.
+
+repo-A$ ls -l file*
+file2 -> file1
+file2.variant1234 -> .git/annex/objects/$HASH1
+repo-A$ cat file.variant1234
+This is file 2.
+"""]]
+### What version of git-annex are you using? On what operating system?
+Linux 3.15.3
+git-annex 5.20140613
+
+
+[[!tag confirmed]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_1_e8a2ea1b8573bee45b70bcc7ef7e3bed._comment b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_1_e8a2ea1b8573bee45b70bcc7ef7e3bed._comment
new file mode 100644
index 000000000..624b39a79
--- /dev/null
+++ b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_1_e8a2ea1b8573bee45b70bcc7ef7e3bed._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="134.147.14.84"
+ subject="comment 1"
+ date="2014-07-07T14:09:33Z"
+ content="""
+Sorry, the initial «echos» should have been «cat» of course.
+"""]]
diff --git a/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_2_b6182038292bd72dc4711e4575510172._comment b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_2_b6182038292bd72dc4711e4575510172._comment
new file mode 100644
index 000000000..39f60f775
--- /dev/null
+++ b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_2_b6182038292bd72dc4711e4575510172._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 2"
+ date="2014-07-07T17:17:49Z"
+ content="""
+Drat, so many bug fixes and test cases and this still got through?
+"""]]
diff --git a/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_3_c6ca13d475b3f846c95606c20e1a3052._comment b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_3_c6ca13d475b3f846c95606c20e1a3052._comment
new file mode 100644
index 000000000..292d11743
--- /dev/null
+++ b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_3_c6ca13d475b3f846c95606c20e1a3052._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 3"
+ date="2014-07-07T17:19:03Z"
+ content="""
+Ah, I see, it's explicitly because the non-git-annex symlink is involved. Whew!
+"""]]
diff --git a/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_4_13179e0f72026092e48c13082818ce68._comment b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_4_13179e0f72026092e48c13082818ce68._comment
new file mode 100644
index 000000000..49210ee55
--- /dev/null
+++ b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_4_13179e0f72026092e48c13082818ce68._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="analysis"
+ date="2014-07-08T17:52:59Z"
+ content="""
+When resolveMerge' calls graftin to add A's file2 symlink to B's tree, it actually stages the right symlink (the non-annexed one).
+
+However, the work tree is left as-is, so it still has the annexed symlink in it. So git status shows file2 as modified. Later syncs will commit that.
+
+This is why the sync in A doesn't have the problem, as there things are the other way around, and git-annex makes the git-annex symlink, leaving the non-annexed symlink as-is in the work tree.
+
+So, graftin needs to update the work tree. But it's tricky because graftin is called in 3 situations: non-symlink file, directory, and non-annexed symlink.
+Interestingly, in the other 2 cases, git-merge already takes care of updating the work tree -- it deletes the annexed symlink and puts in place either the non-symlink file or the directory. It's only the the case of a merge conflict involving 2 symlinks that git merge doesn't update the tree in this way. It's nice to be able to rely on git-merge in the other 2 cases, especially the directory case (avoids having to manually check out the directory).
+"""]]
diff --git a/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_5_585c8a5a13bb17032bfe30818345f936._comment b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_5_585c8a5a13bb17032bfe30818345f936._comment
new file mode 100644
index 000000000..566a0aad8
--- /dev/null
+++ b/doc/bugs/Merge_involving_symlink_yields_unexpected_results/comment_5_585c8a5a13bb17032bfe30818345f936._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="78.49.247.112"
+ subject="comment 5"
+ date="2014-07-08T19:17:29Z"
+ content="""
+Thanks for the swift fix + analysis! If I’m ever around, I’ll lend you a hand on your next truckload of firewood! ;>
+
+Cheers!
+"""]]
diff --git a/doc/bugs/Missing_dependancy_in_commit_6cecc26206c4a539999b04664136c6f785211a41.mdwn b/doc/bugs/Missing_dependancy_in_commit_6cecc26206c4a539999b04664136c6f785211a41.mdwn
deleted file mode 100644
index 2253c0f52..000000000
--- a/doc/bugs/Missing_dependancy_in_commit_6cecc26206c4a539999b04664136c6f785211a41.mdwn
+++ /dev/null
@@ -1,35 +0,0 @@
-Seems commit 6cecc26206c4a539999b04664136c6f785211a41 missed on dependancy, that is blaze-markup
-
-<pre>
-Assistant/Threads/WebApp.hs:25:8:
- Could not find module `Text.Blaze.Renderer.String'
- It is a member of the hidden package `blaze-markup-0.5.1.0'.
- Perhaps you need to add `blaze-markup' to the build-depends in your .cabal file.
- Use -v to see a list of the files searched for.
-cabal: Error: some packages failed to install:
-git-annex-3.20120721 failed during the building phase. The exception was:
-ExitFailure 1
-</pre>
-
-This should fix it
-
-<pre>
-x00:git-annex jtang$ git diff
-diff --git a/git-annex.cabal b/git-annex.cabal
-index c7d9bf5..4f98d2a 100644
---- a/git-annex.cabal
-+++ b/git-annex.cabal
-@@ -76,7 +76,7 @@ Executable git-annex
- if flag(Webapp)
- Build-Depends: yesod, yesod-static, case-insensitive, http-types,
- transformers, wai, wai-logger, warp, blaze-builder, blaze-html,
-- crypto-api, hamlet
-+ blaze-markup, crypto-api, hamlet
- CPP-Options: -DWITH_WEBAPP
-
- if (os(darwin))
-</pre>
-
-> [[done]].. interestingly, cabal had not complained about there here,
-> as in my version, it's in blaze, not blaze-markup. Added it anyway.
-> --[[Joey]]
diff --git a/doc/bugs/More_build_oddities_under_OpenBSD.mdwn b/doc/bugs/More_build_oddities_under_OpenBSD.mdwn
index 3eda52fa3..c11ffab38 100644
--- a/doc/bugs/More_build_oddities_under_OpenBSD.mdwn
+++ b/doc/bugs/More_build_oddities_under_OpenBSD.mdwn
@@ -35,3 +35,5 @@ GHCi cannot safely continue in this situation. Exiting now. Sorry.
# End of transcript or log.
"""]]
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/More_build_oddities_under_OpenBSD/comment_21_8a7f5a87bbd4289362f8f4609c02322d._comment b/doc/bugs/More_build_oddities_under_OpenBSD/comment_21_8a7f5a87bbd4289362f8f4609c02322d._comment
new file mode 100644
index 000000000..5befc39db
--- /dev/null
+++ b/doc/bugs/More_build_oddities_under_OpenBSD/comment_21_8a7f5a87bbd4289362f8f4609c02322d._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 21"""
+ date="2015-02-06T20:34:17Z"
+ content="""
+C-Keen on irc:
+for the record git-annex works fine on openbsd-current (5.7) without xmpp
+"""]]
diff --git a/doc/bugs/More_sync__39__ing_weirdness_with_the_assistant_branch_on_OSX.mdwn b/doc/bugs/More_sync__39__ing_weirdness_with_the_assistant_branch_on_OSX.mdwn
deleted file mode 100644
index 00f425307..000000000
--- a/doc/bugs/More_sync__39__ing_weirdness_with_the_assistant_branch_on_OSX.mdwn
+++ /dev/null
@@ -1,15 +0,0 @@
-Running the 'assistant' branch, I occassionally get
-
-To myhost1:/Users/jtang/annex
- ! [rejected] master -> synced/master (non-fast-forward)
-error: failed to push some refs to 'myhost1:/Users/jtang/annex'
-hint: Updates were rejected because a pushed branch tip is behind its remote
-hint: counterpart. Check out this branch and merge the remote changes
-hint: (e.g. 'git pull') before pushing again.
-hint: See the 'Note about fast-forwards' in 'git push --help' for details.
-(Recording state in git...)
-
-manually running a 'git annex sync' usually fixes it, I guess once the sync command runs periodically this problem will go away, is this even OSX specific? I don't quite get the behaviour that is described in [[design/assistant/blog/day_15__its_aliiive]].
-
-> With my changes today, I've seen it successfully recover from this
-> situation. [[done]] --[[Joey]]
diff --git a/doc/bugs/More_sync__39__ing_weirdness_with_the_assistant_branch_on_OSX/comment_1_377525e70640751e1ead445aeed15efa._comment b/doc/bugs/More_sync__39__ing_weirdness_with_the_assistant_branch_on_OSX/comment_1_377525e70640751e1ead445aeed15efa._comment
deleted file mode 100644
index 77481789c..000000000
--- a/doc/bugs/More_sync__39__ing_weirdness_with_the_assistant_branch_on_OSX/comment_1_377525e70640751e1ead445aeed15efa._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.2.25"
- subject="comment 1"
- date="2012-06-25T15:45:18Z"
- content="""
-This is indeed the problem I've planned to work on today, as I see it too when things don't start off perfectly in sync.
-"""]]
diff --git a/doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana.mdwn b/doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana.mdwn
deleted file mode 100644
index ee188eb2e..000000000
--- a/doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana.mdwn
+++ /dev/null
@@ -1,36 +0,0 @@
-Version 3.20120825 built on my OpenIndiana system just fine, but the latest release gives me this during setup:
-
- Linking /tmp/git-annex-3.20121017-13013/git-annex-3.20121017/dist/setup/setup ...
- checking version... 3.20121017
- checking git... yes
- checking git version... 1.7.8.2
- checking cp -a... yes
- checking cp -p... yes
- checking cp --reflink=auto... yes
- checking uuid generator... uuid -m
- checking xargs -0... yes
- checking rsync... yes
- checking curl... yes
- checking wget... yes
- checking bup... no
- checking gpg... no
- checking lsof... no
- checking ssh connection caching... yes
- checking sha1... sha1sum
- checking sha256... sha256sum
- checking sha512... sha512sum
- checking sha224... sha224sum
- checking sha384... sha384sum
- Configuring git-annex-3.20121017...
- Building git-annex-3.20121017...
- Preprocessing executable 'git-annex' for git-annex-3.20121017...
- In file included from Mounts.hsc:25:0:
- Utility/libmounts.h:13:3: warning: #warning mounts listing code not available for this OS [-Wcpp]
-
- Utility/libkqueue.c:13:23:
- fatal error: sys/event.h: No such file or directory
- compilation terminated.
-
-Is it possible to remove the new requirement? Thanks!
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_1_f3c336ecfee51e074ea3a9fc95301de5._comment b/doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_1_f3c336ecfee51e074ea3a9fc95301de5._comment
deleted file mode 100644
index bb1dc688f..000000000
--- a/doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_1_f3c336ecfee51e074ea3a9fc95301de5._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="2001:4978:f:21a::2"
- subject="comment 1"
- date="2012-10-17T17:42:30Z"
- content="""
-kqueue is used by the new assistant and watch features. It seems something else would need to be used for Solaris. I have modified the Makefile to (try to) detect Solaris and disable these features. I assumed your uname would be \"Solaris\", so you may need to modify it slightly.
-"""]]
diff --git a/doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_2_102c0e998934e84deca92fd1c90145fa._comment b/doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_2_102c0e998934e84deca92fd1c90145fa._comment
deleted file mode 100644
index 0a2a2641c..000000000
--- a/doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_2_102c0e998934e84deca92fd1c90145fa._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="uname on OpenIndiana"
- date="2012-10-17T22:19:04Z"
- content="""
-The uname is actually SunOS, surprisingly enough. I'll give it a try!
-"""]]
diff --git a/doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_3_1449dd796ce9f2209f085d4b017a5f33._comment b/doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_3_1449dd796ce9f2209f085d4b017a5f33._comment
deleted file mode 100644
index 8feff78d9..000000000
--- a/doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_3_1449dd796ce9f2209f085d4b017a5f33._comment
+++ /dev/null
@@ -1,19 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="Doesn't quite work"
- date="2012-10-17T22:23:16Z"
- content="""
-Your Makefile change, even with the uname corrected, had no impact at all. I'm running \"cabal install\". When I try just \"make\", I get this error:
-
-
- Annex.hs:69:28:
- No instance for (MonadBase IO (StateT AnnexState IO))
- arising from a use of `liftBase'
- Possible fix:
- add an instance declaration for
- (MonadBase IO (StateT AnnexState IO))
- In the second argument of `(.)', namely `liftBase'
- In the expression: Annex . liftBase
- In an equation for `liftBase': liftBase = Annex . liftBase
-"""]]
diff --git a/doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_4_c4aa8a4379b2c056ca9b7afcff412bbc._comment b/doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_4_c4aa8a4379b2c056ca9b7afcff412bbc._comment
deleted file mode 100644
index eb64afee2..000000000
--- a/doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_4_c4aa8a4379b2c056ca9b7afcff412bbc._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.23"
- subject="comment 4"
- date="2012-10-18T02:04:47Z"
- content="""
-You might be able to use the cabal file now. (Not sure.. the OS name used there is different from uname.)
-
-cabal may have better luck, the make error suggests that you have too old a version of the haskell transformers-base library installed.
-"""]]
diff --git a/doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_5_6ca4dd2ad51182edf7198f38b336b9b6._comment b/doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_5_6ca4dd2ad51182edf7198f38b336b9b6._comment
deleted file mode 100644
index f37b1d227..000000000
--- a/doc/bugs/Most_recent_git-annex_will_not_build_on_OpenIndiana/comment_5_6ca4dd2ad51182edf7198f38b336b9b6._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="Works great!"
- date="2012-10-18T05:34:06Z"
- content="""
-This can be moved to done.
-"""]]
diff --git a/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X.mdwn b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X.mdwn
new file mode 100644
index 000000000..0a3815cb9
--- /dev/null
+++ b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X.mdwn
@@ -0,0 +1,24 @@
+### Please describe the problem.
+
+On indirect repos on OS X, when a symlink is moved asisstant does not pick it up it. Even though assistant syncs after delete/move changes are not committed. git annex status returns ?? for the moved files. when I run git annex add on the files it says it added them but instead they still show up as ??. the only way to solve the problem is to manually restart the daemon which commits them.
+
+### What steps will reproduce the problem?
+
+Moving an annex file.
+
+
+### What version of git-annex are you using? On what operating system?
+
+5.20140703 g3cfcd54
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_1_75c14b405929a8f771a7c261dcc4b7a2._comment b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_1_75c14b405929a8f771a7c261dcc4b7a2._comment
new file mode 100644
index 000000000..5346cb949
--- /dev/null
+++ b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_1_75c14b405929a8f771a7c261dcc4b7a2._comment
@@ -0,0 +1,42 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="unable to reproduce, please provide transcript"
+ date="2014-07-11T19:36:37Z"
+ content="""
+I have tried to reproduce this problem on OSX, but it seems to work fine:
+
+<pre>
+oberon:xx joeyh$ git annex assistant
+oberon:xx joeyh$ date > foo
+oberon:xx joeyh$ git log --stat
+commit 93a208c6aa0080e70a636181606f53af5f2c4441
+Author: Joey Hess <joeyh@oberon.local.tam-lin.net>
+Date: Fri Jul 11 15:33:50 2014 -0400
+
+ foo | 1 +
+ 1 file changed, 1 insertion(+)
+oberon:xx joeyh$ mv foo bar
+oberon:xx joeyh$ git log --stat
+commit 495592b2977ee96029db99761d20396577ff3c51
+Author: Joey Hess <joeyh@oberon.local.tam-lin.net>
+Date: Fri Jul 11 15:33:54 2014 -0400
+
+ bar | 1 +
+ foo | 1 -
+ 2 files changed, 1 insertion(+), 1 deletion(-)
+
+commit 93a208c6aa0080e70a636181606f53af5f2c4441
+Author: Joey Hess <joeyh@oberon.local.tam-lin.net>
+Date: Fri Jul 11 15:33:50 2014 -0400
+
+ foo | 1 +
+ 1 file changed, 1 insertion(+)
+oberon:xx joeyh$ git annex status
+oberon:xx joeyh$
+</pre>
+
+> when I run git annex add on the files it says it added them but instead they still show up as ??
+
+This must be the root of whatever the problem is, so please provide a transcript of you doing that.
+"""]]
diff --git a/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_2_f52483415c623ea0649c3805728ce761._comment b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_2_f52483415c623ea0649c3805728ce761._comment
new file mode 100644
index 000000000..9b7f17789
--- /dev/null
+++ b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_2_f52483415c623ea0649c3805728ce761._comment
@@ -0,0 +1,35 @@
+[[!comment format=mdwn
+ username="https://me.yahoo.com/a/FHnTlSBo1eCGJRwueeKeB6.RCaPbGMPr5jxx8A--#ce0d8"
+ nickname="Hamza"
+ subject="comment 2"
+ date="2014-07-12T10:00:59Z"
+ content="""
+[[!format sh \"\"\"
+host annex/(master) $ ls -a Staging/Rise*
+Staging/Rise and Fall of the Berlin Wall - History Channel.mkv
+host annex/(master) $ mv Staging/Rise\ and\ Fall\ of\ the\ Berlin\ Wall\ -\ History\ Channel.mkv Documentary/
+host annex/(master) $ git status
+On branch master
+Untracked files:
+ (use \"git add <file>...\" to include in what will be committed)
+
+ Documentary/Rise and Fall of the Berlin Wall - History Channel.mkv
+
+nothing added to commit but untracked files present (use \"git add\" to track)
+host annex/(master) $ ga status
+D Documentary/Rise and Fall of the Berlin Wall - History Channel.mkv
+host annex/(master) $ git annex add .
+add Documentary/Rise and Fall of the Berlin Wall - History Channel.mkv ok
+(Recording state in git...)
+host annex/(master) $ ga status
+D Documentary/Rise and Fall of the Berlin Wall - History Channel.mkv
+host annex/(master) $ git annex sync
+commit ok
+pull server
+ok
+host annex/(master) $ ga status
+D Documentary/Rise and Fall of the Berlin Wall - History Channel.mkv
+host annex/(master) $
+\"\"\"]]
+
+"""]]
diff --git a/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_3_fd73fbeef61df106f084ac235fca904a._comment b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_3_fd73fbeef61df106f084ac235fca904a._comment
new file mode 100644
index 000000000..a659ad2c1
--- /dev/null
+++ b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_3_fd73fbeef61df106f084ac235fca904a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://me.yahoo.com/a/FHnTlSBo1eCGJRwueeKeB6.RCaPbGMPr5jxx8A--#ce0d8"
+ nickname="Hamza"
+ subject="comment 3"
+ date="2014-07-12T10:03:07Z"
+ content="""
+BTW the mv operation is picked up by the assistant it start syncing immediately after mv but the symlink link is left dangling. I've also waited for the assistant to sync before readding the file.
+"""]]
diff --git a/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_4_c5e9843a956984efd22bad629930f6bd._comment b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_4_c5e9843a956984efd22bad629930f6bd._comment
new file mode 100644
index 000000000..a437142af
--- /dev/null
+++ b/doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_4_c5e9843a956984efd22bad629930f6bd._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 4"
+ date="2014-07-14T20:15:07Z"
+ content="""
+Well, I don't see the \"??\" that you were talking about before in your transcript. I do not understand why the file's status shows as \"D\" which means it's deleted. What does `git ls-files` say? Does this stange behavior persist if you stop the assistant from running and re-run the same git-annex commands?
+"""]]
diff --git a/doc/bugs/Mtime_of_objects_reset_when_synchronized_to_a_different_repository.mdwn b/doc/bugs/Mtime_of_objects_reset_when_synchronized_to_a_different_repository.mdwn
new file mode 100644
index 000000000..3925b7c10
--- /dev/null
+++ b/doc/bugs/Mtime_of_objects_reset_when_synchronized_to_a_different_repository.mdwn
@@ -0,0 +1,15 @@
+### Please describe the problem.
+Files transferred from one repository to a standard remote by the assistant do not retain the original mtime
+
+### What steps will reproduce the problem?
+Create manually two repositories, in my case on two external drives directly connected to my box, with normal remotes pointing to each other.
+Activate git annex assistant and synchronize some files from one to the other.
+
+### What version of git-annex are you using? On what operating system?
+Git annex version 5.20140610-g5ec8bcf on Ubuntu Linux 12.04
+
+### Please provide any additional information below.
+I've noticed how files synchronized from one repository to another do not retain the original mtime information.
+Perhaps it's intended, but in my view retaining the time of modification of the object is essential.
+
+> [[done]]; dup and/or out of scope, --[[Joey]]
diff --git a/doc/bugs/Mtime_of_objects_reset_when_synchronized_to_a_different_repository/comment_1_651965d8a9f0e0c07313c1a2916f77e5._comment b/doc/bugs/Mtime_of_objects_reset_when_synchronized_to_a_different_repository/comment_1_651965d8a9f0e0c07313c1a2916f77e5._comment
new file mode 100644
index 000000000..fcb5c4cc6
--- /dev/null
+++ b/doc/bugs/Mtime_of_objects_reset_when_synchronized_to_a_different_repository/comment_1_651965d8a9f0e0c07313c1a2916f77e5._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-07-02T17:07:33Z"
+ content="""
+git makes no attempt to maintain mtimes etc, and neither does git-annex. There are open todo items. There is metastore, etc.
+"""]]
diff --git a/doc/bugs/Name_scheme_does_not_follow_git__39__s_rules.mdwn b/doc/bugs/Name_scheme_does_not_follow_git__39__s_rules.mdwn
deleted file mode 100644
index 722dac50b..000000000
--- a/doc/bugs/Name_scheme_does_not_follow_git__39__s_rules.mdwn
+++ /dev/null
@@ -1,31 +0,0 @@
-I can create an annex remote named 'test:/test'. git itself does not allow colons in names, though. The name scheme for an annex should be the same as for git repos themselves.
-
-> What do you mean by "an annex remote"? git-annex uses the same
-> remotes configuration as does git. If you put invalid
-> stuff in .git/config it might handle it slightly different than
-> git, I don't know. Examples needed. --[[Joey]]
-
->> What I mean is this:
-
- % cd 1
- % git init
- % git annex init "my:colon"
- % [...]
- % cd ../2
- % git init
- % git annex init "second"
- % git remote add "my:colon" ../1
- fatal: 'my:colon' is not a valid remote name
-
->> -- RichiH
-
->>> I see.. Git annex init does not specifiy a remote's name, it specifies
->>> an arbitrary human-readable description of the repository, which will
->>> be displayed when there is no configured remote corresponding to the
->>> repository. So this is not a bug unless some documentation of that is
->>> unclear. --[[Joey]]
-
->>>> Nobody spoke up to say it's unclear, so closing as PEBKAC :)
->>>> [[done]] --[[Joey]]
-
->>>>> I still think git-annex should follow the same rules as git in this regard, but if your design decision is different, I won't try to argue the point :) -- RichiH
diff --git a/doc/bugs/Need_to_manually_install_c2hs_-_3.20121127_and_previous.mdwn b/doc/bugs/Need_to_manually_install_c2hs_-_3.20121127_and_previous.mdwn
deleted file mode 100644
index 924ce06c7..000000000
--- a/doc/bugs/Need_to_manually_install_c2hs_-_3.20121127_and_previous.mdwn
+++ /dev/null
@@ -1,37 +0,0 @@
-What steps will reproduce the problem?
-
-Install git-annex via cabal - either from Hackage or as a manual install. (i.e. <http://git-annex.branchable.com/install/cabal/>)
-
-What is the expected output? What do you see instead?
-
-Expect a clean install.
-
-However, get the following error:
-
- Configuring gnuidn-0.2...
- cabal: The program c2hs is required but it could not be found.
- Failed to install gnuidn-0.2
- cabal: Error: some packages failed to install:
- git-annex-3.20121127 depends on gnuidn-0.2 which failed to install.
- gnuidn-0.2 failed during the configure step. The exception was:
- ExitFailure 1
- network-protocol-xmpp-0.4.4 depends on gnuidn-0.2 which failed to install.
-
-What version of git-annex are you using? On what operating system?
-
-git-annex: 3.20121127 (and previous versions)
-
-OS: Mac OSX 10.6.8
-
-
-Please provide any additional information below.
-
-The fix seems as easy as
-
- cabal install c2hs
-
-Should c2hs be included as a dep got git-annex or is this a bug in gnuidn?
-
-> Apparently cabal does not support automatically installing programs
-> needed for the build. I've updated the cabal installation instructions
-> to document the need to install c2hs. [[done]] --[[Joey]]
diff --git a/doc/bugs/No_progress_bars_with_S3.mdwn b/doc/bugs/No_progress_bars_with_S3.mdwn
deleted file mode 100644
index afa7ba5ee..000000000
--- a/doc/bugs/No_progress_bars_with_S3.mdwn
+++ /dev/null
@@ -1,26 +0,0 @@
-## What steps will reproduce the problem?
-
-Add new data to a repository with an S3 special remote. Monitor the repository with the web app.
-
-
-## What is the expected output? What do you see instead?
-
-I expect a changing status bar and percentage. Instead I see no changes when an upload becomes active.
-
-
-## What version of git-annex are you using? On what operating system?
-
-3.20130102 on Arch 64-bit.
-
-
-## Please provide any additional information below.
-
-
-When uploading local data to an S3 remote, I see no progress bars. The progress bar area on active uploads stays the same grey as the bar on queued uploads. The status does not change from "0% of...". The uploads are completing, but this makes it very difficult to judge their activity.
-
-The only remotes I currently have setup are S3 special remotes, so I cannot say whether progress bars are working for uploads to other remote types.
-
-> [[done]], this turned out to be a confusion in the progress code;
-> parts were expecting a full number of bytes since the start, while
-> other parts were sending the number of bytes in a chunk. Result was
-> progress bars stuck at 0% often. --[[Joey]]
diff --git a/doc/bugs/No_progress_bars_with_S3/comment_1_33a601201a9fdd2357f1c03e32fa6b9c._comment b/doc/bugs/No_progress_bars_with_S3/comment_1_33a601201a9fdd2357f1c03e32fa6b9c._comment
deleted file mode 100644
index 90d00807d..000000000
--- a/doc/bugs/No_progress_bars_with_S3/comment_1_33a601201a9fdd2357f1c03e32fa6b9c._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="comment 1"
- date="2013-01-14T16:31:06Z"
- content="""
-How large are your files? IIRC the S3 progress bar updated with a rather large granularity.
-"""]]
diff --git a/doc/bugs/No_progress_bars_with_S3/comment_2_52361805ced99c22d663b3b1e8a5b221._comment b/doc/bugs/No_progress_bars_with_S3/comment_2_52361805ced99c22d663b3b1e8a5b221._comment
deleted file mode 100644
index 04f823e0b..000000000
--- a/doc/bugs/No_progress_bars_with_S3/comment_2_52361805ced99c22d663b3b1e8a5b221._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="annexuser"
- ip="24.16.193.140"
- subject="comment 2"
- date="2013-01-14T21:26:18Z"
- content="""
-4MB to 8MB
-"""]]
diff --git a/doc/bugs/No_progress_bars_with_S3/comment_3_5903c1c40c4562f4fbaccd1640fedb18._comment b/doc/bugs/No_progress_bars_with_S3/comment_3_5903c1c40c4562f4fbaccd1640fedb18._comment
deleted file mode 100644
index c5ed8246f..000000000
--- a/doc/bugs/No_progress_bars_with_S3/comment_3_5903c1c40c4562f4fbaccd1640fedb18._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="annexuser"
- ip="50.125.41.100"
- subject="comment 3"
- date="2013-01-19T20:40:27Z"
- content="""
-Progress bars do work with a USB remote.
-"""]]
diff --git a/doc/bugs/No_progress_bars_with_S3/comment_4_80799c33e513384894b390fe34ab312a._comment b/doc/bugs/No_progress_bars_with_S3/comment_4_80799c33e513384894b390fe34ab312a._comment
deleted file mode 100644
index 6c00c43d3..000000000
--- a/doc/bugs/No_progress_bars_with_S3/comment_4_80799c33e513384894b390fe34ab312a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="annexuser"
- ip="50.125.41.100"
- subject="comment 4"
- date="2013-01-19T20:41:48Z"
- content="""
-I should also mention that I've uploaded a handful of 30MB files, and I've seen no progress bars on them.
-"""]]
diff --git a/doc/bugs/No_such_file_with_certain_filenames_using_WORM_backend.mdwn b/doc/bugs/No_such_file_with_certain_filenames_using_WORM_backend.mdwn
new file mode 100644
index 000000000..8cf6e4f72
--- /dev/null
+++ b/doc/bugs/No_such_file_with_certain_filenames_using_WORM_backend.mdwn
@@ -0,0 +1,64 @@
+### Please describe the problem.
+
+I get no such file errors when using WORM backend on files with a certain name. Doesn't like brackets?
+
+Default backend is fine (see output below).
+
+### What steps will reproduce the problem?
+
+See additional info
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex version: 5.20140613-g5587055
+On Windows 8.1
+Tried with both Windows command prompt and Git Bash shell.
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+git config --add annex.backends WORM
+git annex add extras
+
+add extras/Extra Content - Reason Drum Takes/DT Key Map.pdf ok
+add extras/Extra Content - Reason Drum Takes/DT Read Me.pdf ok
+add extras/Extra Content - Reason Drum Takes/DT7 Rock - Love (136).reason ok
+add extras/Extra Content - Reason Drum Takes/DT7 Rock - Peace (200).reason ok
+add extras/Extra Content - Reason Drum Takes/Kit Samples/1. Bass Drum mic (BD)/DT6_BD_Bd_RG_R_G06.aif
+git-annex: C:\Studio\.git\annex\objects\b43\d6d\WORM-s178174-m1363015489--extras%Extra Content - Reason Drum Takes%Kit S
+amples%1. Bass Drum mic ,40BD,41%DT6_BD_Bd_RG_R_G06.aif\WORM-s178174-m1363015489--extras%Extra Content - Reason Drum Tak
+es%Kit Samples%1. Bass Drum mic ,40BD,41%DT6_BD_Bd_RG_R_G06.aif.cache: openFile: does not exist (No such file or directo
+ry)
+failed
+add extras/Extra Content - Reason Drum Takes/Kit Samples/1. Bass Drum mic (BD)/DT6_BD_Bd_RG_R_G09.aif
+git-annex: C:\Studio\.git\annex\objects\e90\b5c\WORM-s199108-m1363015489--extras%Extra Content - Reason Drum Takes%Kit S
+amples%1. Bass Drum mic ,40BD,41%DT6_BD_Bd_RG_R_G09.aif\WORM-s199108-m1363015489--extras%Extra Content - Reason Drum Tak
+es%Kit Samples%1. Bass Drum mic ,40BD,41%DT6_BD_Bd_RG_R_G09.aif.cache: openFile: does not exist (No such file or directo
+ry)
+failed
+add extras/Extra Content - Reason Drum Takes/Kit Samples/1. Bass Drum mic (BD)/DT6_BD_Bd_RG_R_G14.aif
+git-annex: C:\Studio\.git\annex\objects\995\4e7\WORM-s201570-m1363015489--extras%Extra Content - Reason Drum Takes%Kit S
+amples%1. Bass Drum mic ,40BD,41%DT6_BD_Bd_RG_R_G14.aif\WORM-s201570-m1363015489--extras%Extra Content - Reason Drum Tak
+es%Kit Samples%1. Bass Drum mic ,40BD,41%DT6_BD_Bd_RG_R_G14.aif.cache: openFile: does not exist (No such file or directo
+ry)
+failed
+
+git config --unset annex.backends
+git annex add extras
+
+add extras/Extra Content - Reason Drum Takes/DT Key Map.pdf ok
+add extras/Extra Content - Reason Drum Takes/DT Read Me.pdf ok
+add extras/Extra Content - Reason Drum Takes/DT7 Rock - Love (136).reason ok
+add extras/Extra Content - Reason Drum Takes/DT7 Rock - Peace (200).reason ok
+add extras/Extra Content - Reason Drum Takes/Kit Samples/1. Bass Drum mic (BD)/DT6_BD_Bd_RG_R_G06.aif ok
+add extras/Extra Content - Reason Drum Takes/Kit Samples/1. Bass Drum mic (BD)/DT6_BD_Bd_RG_R_G09.aif ok
+add extras/Extra Content - Reason Drum Takes/Kit Samples/1. Bass Drum mic (BD)/DT6_BD_Bd_RG_R_G14.aif ok
+
+# End of transcript or log.
+"""]]
+
+> [[done]]; this is a duplicate of the bug referred to in my comment below.
+> --[[Joey]]
diff --git a/doc/bugs/No_such_file_with_certain_filenames_using_WORM_backend/comment_1_a1db4ff3e8517d7cbe649bca1ed275d0._comment b/doc/bugs/No_such_file_with_certain_filenames_using_WORM_backend/comment_1_a1db4ff3e8517d7cbe649bca1ed275d0._comment
new file mode 100644
index 000000000..7136cabb0
--- /dev/null
+++ b/doc/bugs/No_such_file_with_certain_filenames_using_WORM_backend/comment_1_a1db4ff3e8517d7cbe649bca1ed275d0._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 1"
+ date="2014-07-05T21:55:46Z"
+ content="""
+Hmm, the filename `WORM-s178174-m1363015489--extras%Extra\ Content\ -\ Reason\ Drum\ Takes%Kit\ Samples%1.\ Bass\ Drum\ mic\ ,40BD,41%DT6_BD_Bd_RG_R_G06.aif.cach` is a legal filename on FAT at least, dunno about NTFS..
+"""]]
diff --git a/doc/bugs/No_such_file_with_certain_filenames_using_WORM_backend/comment_2_c5645988eaf4f7493d70b6a63f21cdaf._comment b/doc/bugs/No_such_file_with_certain_filenames_using_WORM_backend/comment_2_c5645988eaf4f7493d70b6a63f21cdaf._comment
new file mode 100644
index 000000000..6305a4eff
--- /dev/null
+++ b/doc/bugs/No_such_file_with_certain_filenames_using_WORM_backend/comment_2_c5645988eaf4f7493d70b6a63f21cdaf._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2015-01-20T19:09:39Z"
+ content="""
+Seems this does not have to do with special characters at all.
+
+Instead, it's a problem with too-long filenames; windows has a crazy short
+limit. All explained here:
+(http://git-annex.branchable.com/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows)
+
+You could just switch from the WORM backend to one with shorter filenames.
+SHA1 might be a god choice.
+
+Or, install git-annex 5.20150113, which includes some changes to use shorter
+relative paths to files, and may avoid the problem at least some of the
+time. That version also avoids making such long WORM keys.
+"""]]
diff --git a/doc/bugs/No_version_information_from_cli.mdwn b/doc/bugs/No_version_information_from_cli.mdwn
deleted file mode 100644
index a0d30db41..000000000
--- a/doc/bugs/No_version_information_from_cli.mdwn
+++ /dev/null
@@ -1,18 +0,0 @@
-git-annex does not listen to -v, --version or version.
-
-At the very least, it should return both the version of the binary and the version of the object store it supports.
-If it supports several annex versions, they should be listed in a comma-separated fashion.
-If git-annex is called from within an annex, it should print the version of the local object store.
-
-Sample:
-
- % git annex version
- git-annex version : 0.24
- default object store version : 3
- supported object store versions : 2,3
- local object store version : 2
- %
-
-The above might look like overkill, but it's in a form that will, most likely, never need to be extended.
-
-> Great idea, [[done]] --[[Joey]]
diff --git a/doc/bugs/OSX_.dmg_unnecessarily_large_and_not_inherently_compressed.mdwn b/doc/bugs/OSX_.dmg_unnecessarily_large_and_not_inherently_compressed.mdwn
deleted file mode 100644
index bf74aebe6..000000000
--- a/doc/bugs/OSX_.dmg_unnecessarily_large_and_not_inherently_compressed.mdwn
+++ /dev/null
@@ -1,68 +0,0 @@
-### Please describe the problem.
-
-The .dmg the OSX build is distributed in is unnecessarily large (fixed size) and is externally compressed.
-
-I did a quick survey of .dmg images used for distributing other pieces of software which I had downloaded to my Mac, and most of them seem to be the UDBZ or the (older) UDZO formats which are internally compressed with bzip2 or zlib. According to "man hdiutil", the UDBZ format is supported since 10.4 (Tiger).
-
-Below are a pair of patches: first to enable "make clean" to work on OSX, second to build the .dmg in the UDBZ format and without an explicit size (it seems to infer a correct size). When I tested building it, it results in a .dmg which is slightly smaller than the old .dmg.bz2
-
-(This will also require a change to remove the .bz2 from the download links elsewhere in the wiki.)
-
-<pre>
-From 251e23bbe66cc63e98089554f91b2528a097e818 Mon Sep 17 00:00:00 2001
-From: Mike Magin <git@mike.magin.org>
-Date: Sun, 17 Nov 2013 08:11:05 -0800
-Subject: [PATCH 1/2] Add explicit path to find invocation in "make clean" target.
-
----
- Makefile | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index 3f3ed35..5a0cebb 100644
---- a/Makefile
-+++ b/Makefile
-@@ -83,8 +83,8 @@ clean:
- Setup Build/InstallDesktopFile Build/EvilSplicer \
- Build/Standalone Build/OSXMkLibs \
- git-union-merge git-recover-repository
-- find -name \*.o -exec rm {} \;
-- find -name \*.hi -exec rm {} \;
-+ find . -name \*.o -exec rm {} \;
-+ find . -name \*.hi -exec rm {} \;
-
- Build/InstallDesktopFile: Build/InstallDesktopFile.hs
- $(GHC) --make $@
---
-1.8.4.3
-
-From e66f767893b5ef70cbf69d420cb589071f88c784 Mon Sep 17 00:00:00 2001
-From: Mike Magin <git@mike.magin.org>
-Date: Sun, 17 Nov 2013 08:40:07 -0800
-Subject: [PATCH 2/2] Change .dmg build to include compression and not be fixed size.
-
----
- Makefile | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index 5a0cebb..b6ac549 100644
---- a/Makefile
-+++ b/Makefile
-@@ -162,10 +162,9 @@ osxapp: Build/Standalone Build/OSXMkLibs
-
- ./Build/OSXMkLibs $(OSXAPP_BASE)
- rm -f tmp/git-annex.dmg
-- hdiutil create -size 640m -format UDRW -srcfolder tmp/build-dmg \
-+ hdiutil create -format UDBZ -srcfolder tmp/build-dmg \
- -volname git-annex -o tmp/git-annex.dmg
- rm -f tmp/git-annex.dmg.bz2
-- bzip2 --fast tmp/git-annex.dmg
-
- ANDROID_FLAGS?=-f-XMPP
- # Cross compile for Android.
---
-1.8.4.3
-</pre>
-
-> Ah, that never seemed optimal. [[done]] --[[Joey]]
diff --git a/doc/bugs/OSX_alias_permissions_and_versions_problem.mdwn b/doc/bugs/OSX_alias_permissions_and_versions_problem.mdwn
deleted file mode 100644
index f4ebc9d1e..000000000
--- a/doc/bugs/OSX_alias_permissions_and_versions_problem.mdwn
+++ /dev/null
@@ -1,37 +0,0 @@
-What steps will reproduce the problem?
-
-Use assistant and create repository the a folder in home dir.
-Use textedit and save a new txt to the repository folder.
-
-What is the expected output? What do you see instead?
-
-The alias solution is broken. It should work more like Dropbox.
-Textedit saves the file initially, but it is immediately locked.
-Since it autosaves, it asks to unlock or duplicate.
-Then gives the error:
-"The file “Untitled 16.txt” cannot be unlocked."
-
-If the file exists:
-The document “Untitled 14” could not be saved as “Untitled 14.txt”. You don’t have permission.
-
-If you open a file from the repository (now replaced by a symlink) with textedit, there are other problems:
-- The filename will not be correct (will show the sha hash).
-- It will ask to unlock, then give the error "You don’t have permission to write to the folder that the file “SHA256E-s8--8985d9832de2e28b5e1af64258c391a34d7528709ef916bac496e698c139020c.txt” is in."
-
-What version of git-annex are you using? On what operating system?
-
-OSX Lion
-git-annex version: 3.20120924
-
-Please provide any additional information below.
-
-Even if you fix these problems, automatic versioning in lion will probably don't work, and the symlinks seem a hackish solution and don't seem intuitive or easy to the end user.
-The sync should be transparent but it's not, and it's error prone. It would even be best to keep file copies in the git repo and sync them with the original folder than make symlinks.
-
-Dropbox even allows to put a symlink in the dropbox directory, and it will sync the file.
-
-[[!tag /design/assistant/OSX]]
-
-> Now the assistant creates new repositories using direct mode on OSX.
-> In direct mode, there is no locking of files; they can be modified
-> directly. [[done]] --[[Joey]]
diff --git a/doc/bugs/OSX_alias_permissions_and_versions_problem/comment_1_4fabe32e7e626e6ca23aa0b6f449c4c6._comment b/doc/bugs/OSX_alias_permissions_and_versions_problem/comment_1_4fabe32e7e626e6ca23aa0b6f449c4c6._comment
deleted file mode 100644
index 74a20d08e..000000000
--- a/doc/bugs/OSX_alias_permissions_and_versions_problem/comment_1_4fabe32e7e626e6ca23aa0b6f449c4c6._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlatTbI0K-qydpeYHl37iseqPNvERcdIMk"
- nickname="Tiago"
- subject="comment 1"
- date="2012-09-26T23:38:51Z"
- content="""
-After looking more into the git annex working, I understand the use of symlinks, but they are not always correctly handled by OSX.
-
-
-Apple's Timemachine uses hardlinks for example...
-
-
-Not being able to easily edit files that are in the repo without problems or quirks makes it unusable as a dropbox replacement and version control, which is a shame.
-"""]]
diff --git a/doc/bugs/OSX_alias_permissions_and_versions_problem/comment_2_064d60fcc8366a70958540bc145e611a._comment b/doc/bugs/OSX_alias_permissions_and_versions_problem/comment_2_064d60fcc8366a70958540bc145e611a._comment
deleted file mode 100644
index 78125262e..000000000
--- a/doc/bugs/OSX_alias_permissions_and_versions_problem/comment_2_064d60fcc8366a70958540bc145e611a._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlatTbI0K-qydpeYHl37iseqPNvERcdIMk"
- nickname="Tiago"
- subject="comment 2"
- date="2012-09-26T23:50:55Z"
- content="""
-It seems many people complain about symlink behavior in Lion and Mountain Lion.
-I never used symlinks to files often, only to folders.
-I hope you can solve this problems and make it work correctly in OSX, or use hardlinks instead.
-Git annex sound awesome, but the people using the assistant will want KISS behavior, and don't even know what a symbolic link is.
-"""]]
diff --git a/doc/bugs/OSX_alias_permissions_and_versions_problem/comment_3_6c72d4f40ea0a9566a1185901beff5ba._comment b/doc/bugs/OSX_alias_permissions_and_versions_problem/comment_3_6c72d4f40ea0a9566a1185901beff5ba._comment
deleted file mode 100644
index 8ef5e6cc5..000000000
--- a/doc/bugs/OSX_alias_permissions_and_versions_problem/comment_3_6c72d4f40ea0a9566a1185901beff5ba._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlatTbI0K-qydpeYHl37iseqPNvERcdIMk"
- nickname="Tiago"
- subject="comment 3"
- date="2012-09-26T23:57:18Z"
- content="""
-Ok, so it seems Sharebox solves all this problems...you might want to integrate sharebox into the assistant, so non-techie people can treat the repos as mutable.
-Maybe make a mutable/unmutable toggle in the gui or somethink like that?
-
-What I don't understand is the need for kqueue, if the files are not supposed to be written to without unlocking, why not use FSEvents and only monitor the folders for new files.
-
-http://git-annex.branchable.com/news/sharebox_a_FUSE_filesystem_for_git-annex
-
-"""]]
diff --git a/doc/bugs/OSX_alias_permissions_and_versions_problem/comment_4_8a11f404bb72a1aeb2290744cce2d00d._comment b/doc/bugs/OSX_alias_permissions_and_versions_problem/comment_4_8a11f404bb72a1aeb2290744cce2d00d._comment
deleted file mode 100644
index aeacce31e..000000000
--- a/doc/bugs/OSX_alias_permissions_and_versions_problem/comment_4_8a11f404bb72a1aeb2290744cce2d00d._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlatTbI0K-qydpeYHl37iseqPNvERcdIMk"
- nickname="Tiago"
- subject="comment 4"
- date="2012-09-27T00:06:31Z"
- content="""
-Seems sharebox development stopped a year ago...now that you are working on the assistant, which sound awesome, I think you really should consider pick up the sharebox development and integrate it.
-
-Too bad I missed kickstarter, but I might donate now.
-I just find it wierd that it said \"Like Dropbox\" on the title, but sharebox-like functionality is not on the roadmap, and being able to easily edit the files is a big feature of dropbox.
-
-"""]]
diff --git a/doc/bugs/OSX_alias_permissions_and_versions_problem/comment_5_30888607199d6a48b76d0c48f5aa4f64._comment b/doc/bugs/OSX_alias_permissions_and_versions_problem/comment_5_30888607199d6a48b76d0c48f5aa4f64._comment
deleted file mode 100644
index d95d8f149..000000000
--- a/doc/bugs/OSX_alias_permissions_and_versions_problem/comment_5_30888607199d6a48b76d0c48f5aa4f64._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="I agree"
- date="2012-10-18T07:11:20Z"
- content="""
-I really can't think of any way that Git annex + the assistant is like Dropbox. The Annex is not usable for even a single of the uses cases for which I also use Dropbox. I think this \"branding\" of annex should be dropped, or else it actually needs to acquire the features of Dropbox.
-"""]]
diff --git a/doc/bugs/OSX_app_issues.mdwn b/doc/bugs/OSX_app_issues.mdwn
deleted file mode 100644
index 06251d2ea..000000000
--- a/doc/bugs/OSX_app_issues.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-This was a collection of problem reports for the standalone OSX app.
-Please post separate bug reports going forward; this bug report is
-[[closed|done]] --[[Joey]]
-
-(Some things that should be fixed now have been moved to [[old]].)
diff --git a/doc/bugs/OSX_app_issues/comment_10_54d8f3e429df9a9958370635c890abf0._comment b/doc/bugs/OSX_app_issues/comment_10_54d8f3e429df9a9958370635c890abf0._comment
deleted file mode 100644
index cad356c67..000000000
--- a/doc/bugs/OSX_app_issues/comment_10_54d8f3e429df9a9958370635c890abf0._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.3.194"
- subject="comment 10"
- date="2013-01-19T16:13:20Z"
- content="""
-The app uses the version of git included in it, because using the system's installed version if there is one is likely to run into other version incompatabilities.
-
-You can either install git-annex using cabal and homebrew, as documented, or you could go in and delete
-all the git programs out of the app, and then it'd use the system's git stuff instead.
-"""]]
diff --git a/doc/bugs/OSX_app_issues/comment_10_6d23232fbb15d0ee3ab532a4884f81ed._comment b/doc/bugs/OSX_app_issues/comment_10_6d23232fbb15d0ee3ab532a4884f81ed._comment
deleted file mode 100644
index 230b40758..000000000
--- a/doc/bugs/OSX_app_issues/comment_10_6d23232fbb15d0ee3ab532a4884f81ed._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 10"
- date="2013-04-16T17:14:13Z"
- content="""
-@Jeremy, it's been a long time since anyone reported having the \"LSOpenURLsWithRole()\". It seemed to go away when the dmg was fixed to include all the necessary libraries. So my guess is you installed it wrong, somehow, and perhaps it's not finding those libraries that are part of the dmg.
-
-You should be able to start the assistant by running it directly from the dmg.
-"""]]
diff --git a/doc/bugs/OSX_app_issues/comment_11_5db2baa771fd01a284eac8a16c1c8c67._comment b/doc/bugs/OSX_app_issues/comment_11_5db2baa771fd01a284eac8a16c1c8c67._comment
deleted file mode 100644
index 1760b1aa8..000000000
--- a/doc/bugs/OSX_app_issues/comment_11_5db2baa771fd01a284eac8a16c1c8c67._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlkAghrKEvslMcV2INKUhtPPMsfnzQyyd8"
- nickname="Jeremy"
- subject="comment 11"
- date="2013-04-17T02:02:00Z"
- content="""
-@joey, figured it out. There was a program added to the startup list, presumably from when I ran things from the dmg a while ago. Once I delete that, it started fine. Of course, I forgot to write down the name of the program... I remember it had an LW in the name.
-"""]]
diff --git a/doc/bugs/OSX_app_issues/comment_11_bb2ceb95a844449795addee6986d0763._comment b/doc/bugs/OSX_app_issues/comment_11_bb2ceb95a844449795addee6986d0763._comment
deleted file mode 100644
index b3bbf6077..000000000
--- a/doc/bugs/OSX_app_issues/comment_11_bb2ceb95a844449795addee6986d0763._comment
+++ /dev/null
@@ -1,26 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlYy4BrJyV1PdfqzevCVziXRp89iUH6Xzw"
- nickname="Christopher"
- subject="Code signing errors in log on starting git-annex.app"
- date="2013-01-19T22:30:32Z"
- content="""
-When I run via the App and set up a fresh repo, i get some Console.app spam (looks like one per file added to the repo dir... or maybe one per git command?):
-
- 2013-01-19 2:44:55.000 PM kernel[0]: CODE SIGNING: cs_invalid_page(0x1008b4000): p=73995[git] clearing CS_VALID
- 2013-01-19 2:44:55.000 PM kernel[0]: CODE SIGNING: cs_invalid_page(0x10f99e000): p=73996[git] clearing CS_VALID
- 2013-01-19 2:44:55.000 PM kernel[0]: CODE SIGNING: cs_invalid_page(0x102b44000): p=73997[git] clearing CS_VALID
- 2013-01-19 2:44:55.000 PM kernel[0]: CODE SIGNING: cs_invalid_page(0x1029f4000): p=73998[git] clearing CS_VALID
- ...
-
-and nothing seems to work. The page address and the pid increment steadily with each line. I'm using 10.8.2 (12C60) on a Mac Pro, and grabbed:
-
- /git-annex/OSX/current/10.8.2_Mountain_Lion/git-annex.dmg.bz2
-
-(published 14-Jan-2013 15:19)
-
-It seems to be a code signing issue, perhaps with the vendored git binaries. While things are sort-of working, the web app shows the files flying by really fast.
-
-Using a fresh repo via `git annex webapp` works great (I built that after much teeth-knashing, brew install/link cycles, and then cabal install git-annex).
-
-I am very excited for this to work, this is exactly what I've been waiting for to replace dropbox. Came very close to writing it myself a few times (and in Haskell no less!!).
-"""]]
diff --git a/doc/bugs/OSX_app_issues/comment_12_62170597c7f441d84d48986857998858._comment b/doc/bugs/OSX_app_issues/comment_12_62170597c7f441d84d48986857998858._comment
deleted file mode 100644
index 597a1a195..000000000
--- a/doc/bugs/OSX_app_issues/comment_12_62170597c7f441d84d48986857998858._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkCw26IdxXXPBoLcZsQFslM67OJSJynb1w"
- nickname="Alexander"
- subject="standalone app dmg won't open in OSX 10.8.3"
- date="2013-04-29T18:05:54Z"
- content="""
-I downloaded the app build from [http://downloads.kitenet.net/git-annex/OSX/current/10.8.2_Mountain_Lion/](http://downloads.kitenet.net/git-annex/OSX/current/10.8.2_Mountain_Lion/) and unpacked it, but the .dmg won't open. I can run other dmg's successfully.
-
-Trying to install git-annex via cabal on the same machine led to this issue: [http://git-annex.branchable.com/tips/Building_git-annex_on_Debian_OR___37____164____35____34____164____37____38____34____35___Haskell__33__/#comment-7cc94df1bf9a75a6d03369f3897d6816](http://git-annex.branchable.com/tips/Building_git-annex_on_Debian_OR___37____164____35____34____164____37____38____34____35___Haskell__33__/#comment-7cc94df1bf9a75a6d03369f3897d6816)
-"""]]
diff --git a/doc/bugs/OSX_app_issues/comment_12_f3bc5a4e4895ac9351786f0bdd8005ba._comment b/doc/bugs/OSX_app_issues/comment_12_f3bc5a4e4895ac9351786f0bdd8005ba._comment
deleted file mode 100644
index 460465b81..000000000
--- a/doc/bugs/OSX_app_issues/comment_12_f3bc5a4e4895ac9351786f0bdd8005ba._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmYiJgOvC4IDYkr2KIjMlfVD9r_1Sij_jY"
- nickname="Douglas"
- subject="Error creating remote repository using ssh on OSX"
- date="2013-01-25T13:18:40Z"
- content="""
-There is an issue with creating remote repositories using ssh (the problem may require using a different account name.) I filed the following bug:
-
-
-<http://git-annex.branchable.com/bugs/Error_creating_remote_repository_using_ssh_on_OSX/>
-"""]]
diff --git a/doc/bugs/OSX_app_issues/comment_13_cb12d419459e5cac766022ee0697fedc._comment b/doc/bugs/OSX_app_issues/comment_13_cb12d419459e5cac766022ee0697fedc._comment
deleted file mode 100644
index c9e199961..000000000
--- a/doc/bugs/OSX_app_issues/comment_13_cb12d419459e5cac766022ee0697fedc._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="John"
- ip="109.242.130.160"
- subject="runshell typo prevents execution"
- date="2013-09-22T00:24:10Z"
- content="""
-Using the latest Mountain Lion build available.
-
->$ /Applications/git-annex.app/Contents/MacOS/git-annex
-
->/Applications/git-annex.app/Contents/MacOS/runshell: line 25: syntax error near unexpected token `&'
-
-Line 25:
->echo \"** runshell loop detected!\"> &2
-
-Fix (obvious but for the sake of completeness):
->echo \"** runshell loop detected!\" >&2
-"""]]
diff --git a/doc/bugs/OSX_app_issues/comment_14_c966fa549bc73c52034ac9abc49de52a._comment b/doc/bugs/OSX_app_issues/comment_14_c966fa549bc73c52034ac9abc49de52a._comment
deleted file mode 100644
index df45eb601..000000000
--- a/doc/bugs/OSX_app_issues/comment_14_c966fa549bc73c52034ac9abc49de52a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.1.250"
- subject="comment 14"
- date="2013-09-22T14:15:28Z"
- content="""
-I have fixed the runshell typo and updated the builds.
-"""]]
diff --git a/doc/bugs/OSX_app_issues/comment_15_10f1df95266f1a8c9ef933183190f6e2._comment b/doc/bugs/OSX_app_issues/comment_15_10f1df95266f1a8c9ef933183190f6e2._comment
deleted file mode 100644
index bdb0b55fa..000000000
--- a/doc/bugs/OSX_app_issues/comment_15_10f1df95266f1a8c9ef933183190f6e2._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="gueux"
- ip="2a01:240:fe6d:0:8947:cf55:f955:49b9"
- subject="same typo on Lion build"
- date="2013-10-23T09:17:58Z"
- content="""
-Could you please fix this typo on the Lion build?
-"""]]
diff --git a/doc/bugs/OSX_app_issues/comment_16_064e151da121f9c2ef13c19ecb4e7458._comment b/doc/bugs/OSX_app_issues/comment_16_064e151da121f9c2ef13c19ecb4e7458._comment
deleted file mode 100644
index 8569bda7c..000000000
--- a/doc/bugs/OSX_app_issues/comment_16_064e151da121f9c2ef13c19ecb4e7458._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="Remy"
- ip="83.87.21.84"
- subject="Crashes on OSX 10.9"
- date="2013-10-23T20:30:12Z"
- content="""
-I just installed OSX Mavericks. I also took the latest autobuild and copied it over the old git-annex.app to be sure it doesn't work.
-When I execute \"git-annex status\" I get the following message
-
-
-> dyld: Symbol not found: _objc_debug_taggedpointer_mask
-> Referenced from: /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
-> Expected in: /Applications/git-annex.app/Contents/MacOS/bundle/I
-> in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
-> [1] 1361 trace trap git-annex status
-"""]]
diff --git a/doc/bugs/OSX_app_issues/comment_17_0e6ac5e0a54ce78bdc56c62e6fb92846._comment b/doc/bugs/OSX_app_issues/comment_17_0e6ac5e0a54ce78bdc56c62e6fb92846._comment
deleted file mode 100644
index 5d5c0237e..000000000
--- a/doc/bugs/OSX_app_issues/comment_17_0e6ac5e0a54ce78bdc56c62e6fb92846._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="calmyournerves"
- ip="85.3.250.239"
- subject="comment 17"
- date="2013-10-24T21:43:37Z"
- content="""
-For 10.9 Mavericks see http://git-annex.branchable.com/bugs/git_annex_doesn__39__t_work_in_Max_OS_X_10.9/#comments
-"""]]
diff --git a/doc/bugs/OSX_app_issues/comment_2_fd560811c57df5cbc3976639642b8b19._comment b/doc/bugs/OSX_app_issues/comment_2_fd560811c57df5cbc3976639642b8b19._comment
deleted file mode 100644
index 2107390be..000000000
--- a/doc/bugs/OSX_app_issues/comment_2_fd560811c57df5cbc3976639642b8b19._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkN91jAhoesnVI9TtWANaBPaYjd1V9Pag8"
- nickname="Benjamin"
- subject="Package for older OS X"
- date="2012-11-17T12:36:45Z"
- content="""
-Is there an option to provide application bundle for older versions of OS X? The last time I tried the bundle wouldn't work under 10.5. If no specific features from newer OS X versions are required, it could be enough to add a simple switch when building.
-"""]]
diff --git a/doc/bugs/OSX_app_issues/comment_7_93e0bb53ac2d7daef53426fbdc5f92d9._comment b/doc/bugs/OSX_app_issues/comment_7_93e0bb53ac2d7daef53426fbdc5f92d9._comment
deleted file mode 100644
index fccd9fb3f..000000000
--- a/doc/bugs/OSX_app_issues/comment_7_93e0bb53ac2d7daef53426fbdc5f92d9._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkurjhi0CRJvgm7QNaZDWS9hitBtavqIpc"
- nickname="Bret"
- subject="git-annex.app Not working on 32 bit machines"
- date="2012-11-03T19:18:47Z"
- content="""
-I tried running the git-annex.app on my Core Duo Macbook pro, and it does not run at all. I get an error on my system.log
-
-`Nov 3 12:13:26 Bret-Mac [0x0-0x15015].com.branchable.git-annex[155]: /Applications/git-annex.app/Contents/MacOS/runshell: line 52: /Applications/git-annex.app/Contents/MacOS/bin/git-annex: Bad CPU type in executable
-Nov 3 12:13:26 Bret-Mac com.apple.launchd.peruser.501[92] ([0x0-0x15015].com.branchable.git-annex[155]): Exited with exit code: 1`
-
-It works on my 64 bit machine, and this has become quite the problem for a while now, where people with newer macs dont compile back for a 32bit machine.
-
-Is there any hope for a pre-compiled binary that works on a 32 bit machine?
-"""]]
diff --git a/doc/bugs/OSX_app_issues/comment_8_141eac2f3fb25fe18b4268786f00ad6a._comment b/doc/bugs/OSX_app_issues/comment_8_141eac2f3fb25fe18b4268786f00ad6a._comment
deleted file mode 100644
index f7b1f2281..000000000
--- a/doc/bugs/OSX_app_issues/comment_8_141eac2f3fb25fe18b4268786f00ad6a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 8"
- date="2012-11-07T16:08:00Z"
- content="""
-I've been updating my haskell platform install recently, i used to try and get the builder to spit out 32/64bit binaries, but recently it's just become too messy, I've just migrated to a full 64bit build system. I'm afraid I won't be able to provide 32bit builds any more.
-"""]]
diff --git a/doc/bugs/OSX_app_issues/comment_8_f4d5b2645d7f29b80925159efb94a998._comment b/doc/bugs/OSX_app_issues/comment_8_f4d5b2645d7f29b80925159efb94a998._comment
deleted file mode 100644
index 3a4ca0b57..000000000
--- a/doc/bugs/OSX_app_issues/comment_8_f4d5b2645d7f29b80925159efb94a998._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmOsimKUgz6rxpmsS_nrBQGavEYyUpDlsE"
- nickname="Tim"
- subject="OS X 10.8.2"
- date="2013-01-11T00:07:54Z"
- content="""
-Double click on the app, give permission for it to run and ... nothing
-"""]]
diff --git a/doc/bugs/OSX_app_issues/comment_9_2e6dfca0fd8df04066769653724eae28._comment b/doc/bugs/OSX_app_issues/comment_9_2e6dfca0fd8df04066769653724eae28._comment
deleted file mode 100644
index 8b9fcbc68..000000000
--- a/doc/bugs/OSX_app_issues/comment_9_2e6dfca0fd8df04066769653724eae28._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmRFKwny4rArBaz-36xTcsJYqKIgdDaw5Q"
- nickname="Andrew"
- subject="Prefer the system/path git binaries if they're a newer version"
- date="2013-01-19T06:20:38Z"
- content="""
-I have used homebrew to install git v1.8.0.2 but git-annex.app packages git v1.7.10.2. git 1.7 crashes due to some newer directives in my global git config.
-
- error: Malformed value for push.default: simple
- error: Must be one of nothing, matching, tracking or current.
- fatal: bad config file line 38 in /Users/akraut/.gitconfig
-
- git-annex: fd:13: hGetLine: end of file
- failed
- git-annex: webapp: 1 failed
-
-"""]]
diff --git a/doc/bugs/OSX_app_issues/comment_9_e1bbe83a1b9a7385ed6d443d0cc22bc7._comment b/doc/bugs/OSX_app_issues/comment_9_e1bbe83a1b9a7385ed6d443d0cc22bc7._comment
deleted file mode 100644
index 91df3c388..000000000
--- a/doc/bugs/OSX_app_issues/comment_9_e1bbe83a1b9a7385ed6d443d0cc22bc7._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlkAghrKEvslMcV2INKUhtPPMsfnzQyyd8"
- nickname="Jeremy"
- subject="Unable to start assistant"
- date="2013-04-16T01:07:05Z"
- content="""
-I got the git-annex assistant to work once a long time ago when I ran it the first time directly from the dmg. Ever since then (i.e., after putting it in my applications folder) I have never gotten it to run. Wondering if anyone else has experienced this?
-
-I am running OSX 10.7.5 and just pulled the latest app (05-Apr-2013 10:17).
-
-For reference, when I try to kick off the the assistant from the command line I get the error:
-
- $ open /Applications/git-annex.app
- LSOpenURLsWithRole() failed with error -10810 for the file /Applications/git-annex.app.
-
-I am wondering if there is some sort of file or modification that was made when I accidently kicked it off initially from the dmg, if so any thoughts on what to clear / change?
-
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old.mdwn b/doc/bugs/OSX_app_issues/old.mdwn
deleted file mode 100644
index 42f77125d..000000000
--- a/doc/bugs/OSX_app_issues/old.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-These issues should be fixed now.
diff --git a/doc/bugs/OSX_app_issues/old/comment_10_bb823dc3cd6dc914ed14c176afa0b2f3._comment b/doc/bugs/OSX_app_issues/old/comment_10_bb823dc3cd6dc914ed14c176afa0b2f3._comment
deleted file mode 100644
index 857cf3a62..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_10_bb823dc3cd6dc914ed14c176afa0b2f3._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://wiggy.net/"
- nickname="Wichert"
- subject="Re: Trying to add remote server after failed attempt blocks forever"
- date="2012-11-28T21:26:36Z"
- content="""
-It appears to not just wait forever: there was also a **git config --null --list** process taking all CPU.
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_11_a30e69fed14b0809184ffe05358ab871._comment b/doc/bugs/OSX_app_issues/old/comment_11_a30e69fed14b0809184ffe05358ab871._comment
deleted file mode 100644
index a25514ba9..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_11_a30e69fed14b0809184ffe05358ab871._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.6.49"
- subject="comment 11"
- date="2012-11-29T19:55:17Z"
- content="""
-I've dealt with these ssh issues by including ssh in the app bundle.
-
-OTOH, I don't know how `git config --null --list` could possibly take any appreciable amount of CPU to run.
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_12_23d47b3696e537d60df1d383f33f19e4._comment b/doc/bugs/OSX_app_issues/old/comment_12_23d47b3696e537d60df1d383f33f19e4._comment
deleted file mode 100644
index 73a5d1345..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_12_23d47b3696e537d60df1d383f33f19e4._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnqQyhiNXdPIWWSuu232luY5nc-h5RS8bE"
- nickname="Arve"
- subject="Make Repository hangs (git consuming 100% cpu)"
- date="2012-12-01T01:26:04Z"
- content="""
-When starting git-annex from Applications first time (Finder or spotlight), pressing \"Make Repository\" hangs.
-
-\"ps aux | grep git\" shows
-arve 1723 100.0 0.0 2459668 3988 ?? R 2:00AM 0:31.30 git init --quiet /Users/arve/Desktop/annex/
-
-Strange enough, if i start the app from terminal (/Applications/git-annex.app/Contents/MacOS/git-annex-webapp), the creation of repository works. Though, if I kill it and start git-annex from spotlight, the web frontend doesn't show, and \"git config --null --list\" is consuming 100% cpu.
-
-My OSX version is 10.8.1
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_13_be5738b42b13ec8cd828c5fa66f030e8._comment b/doc/bugs/OSX_app_issues/old/comment_13_be5738b42b13ec8cd828c5fa66f030e8._comment
deleted file mode 100644
index 8a9ee061a..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_13_be5738b42b13ec8cd828c5fa66f030e8._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.6.49"
- subject="comment 13"
- date="2012-12-01T18:50:31Z"
- content="""
-So it works with a controlling console, and git commands are somehow misbehaving without a controlling console. Very strange.
-
-Any chance you can `dtrace -p` the stuck git processes to see what they're doing or what resource they're blocked on?
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_14_5783a4716cd104e1f1c276aa0b9cb153._comment b/doc/bugs/OSX_app_issues/old/comment_14_5783a4716cd104e1f1c276aa0b9cb153._comment
deleted file mode 100644
index a88a0047e..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_14_5783a4716cd104e1f1c276aa0b9cb153._comment
+++ /dev/null
@@ -1,41 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkfHTPsiAcHEEN7Xl7WxiZmYq-vX7azxFY"
- nickname="Vincent"
- subject="OS/X build 2012-12-12"
- date="2012-12-13T00:59:51Z"
- content="""
-I installed this today from the .dmg.bz2, md5sum 1bb50b3ee5eda3cd7f4b4a70cdae1855 on OS/X 10.8.2
-
-uname -a
-Darwin foo 12.2.0 Darwin Kernel Version 12.2.0: Sat Aug 25 00:48:52 PDT 2012; root:xnu-2050.18.24~1/RELEASE_X86_64 x86_64
-
-I installed the app to the Applications folder.
-
-I had chrome and firefox running, recent versions.
-
-Double-click and it opens a new chrome window. This came up behind the existing (iconified) window. A nit, but just so you know.
-
-The configuration part of the app is shown, so far so good.
-I type in the path I want it to use (~/work/annex) and press the create button.
-It hangs forever trying to access localhost:55163
-
- $ ps aux|grep git
- me 85291 100.0 0.0 2460884 4160 ?? R 11:42am 12:03.72 git init --quiet /Users/me/work/annex/
- me 85233 0.0 0.3 2687204 44064 ?? S 11:42am 0:00.44 git-annex webapp -psn_0_50204638
- me 85226 0.0 0.0 2433432 868 ?? S 11:42am 0:00.00 /bin/sh /Applications/git-annex.app/Contents/MacOS/git-annex-webapp -psn_0_50204638
- me 85515 0.0 0.0 2432768 620 s000 S+ 11:54am 0:00.00 grep git
-
- $ netstat -an |grep 55163
- tcp4 0 0 127.0.0.1.55163 127.0.0.1.55207 CLOSE_WAIT
- tcp4 0 0 127.0.0.1.55163 127.0.0.1.55206 CLOSE_WAIT
- tcp4 0 0 127.0.0.1.55163 127.0.0.1.55205 CLOSE_WAIT
- tcp4 0 0 127.0.0.1.55163 127.0.0.1.55201 ESTABLISHED
- tcp4 0 0 127.0.0.1.55201 127.0.0.1.55163 ESTABLISHED
- tcp4 0 0 127.0.0.1.55163 127.0.0.1.55199 CLOSE_WAIT
- tcp4 0 0 127.0.0.1.55163 127.0.0.1.55197 CLOSE_WAIT
- tcp4 0 0 127.0.0.1.55163 *.* LISTEN
-
-I was plugged into wired ethernet, no other interfaces up, no VPN.
-
-I have macports but no haskell packages, which ghc returns nothing.
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_14_e126d87a263f3aa6261f72ee7ff086fc._comment b/doc/bugs/OSX_app_issues/old/comment_14_e126d87a263f3aa6261f72ee7ff086fc._comment
deleted file mode 100644
index 30e9c40cb..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_14_e126d87a263f3aa6261f72ee7ff086fc._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnqQyhiNXdPIWWSuu232luY5nc-h5RS8bE"
- nickname="Arve"
- subject="comment 14"
- date="2012-12-01T22:33:21Z"
- content="""
-\"dtrace -p pid\" gives \"dtrace: no probes specified.\" I've tried to read man dtrace, and some online resources, dtrace is new to me. Any directions?
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_15_56c7fcafc7dca8be28ebf9e37a8f6b71._comment b/doc/bugs/OSX_app_issues/old/comment_15_56c7fcafc7dca8be28ebf9e37a8f6b71._comment
deleted file mode 100644
index 1cf4916f5..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_15_56c7fcafc7dca8be28ebf9e37a8f6b71._comment
+++ /dev/null
@@ -1,23 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkfHTPsiAcHEEN7Xl7WxiZmYq-vX7azxFY"
- nickname="Vincent"
- subject="comment 15"
- date="2012-12-13T01:04:44Z"
- content="""
-following up to #14.
-
- dtruss -p <git --init process>
-
-shows the same symptom as reported earlier
- SYSCALL(args) = return
- workq_kernreturn(0x1, 0x10F31E000, 0x0) = -1 Err#22
- workq_kernreturn(0x1, 0x10F31E000, 0x0) = -1 Err#22
- workq_kernreturn(0x1, 0x10F31E000, 0x0) = -1 Err#22
- workq_kernreturn(0x1, 0x10F31E000, 0x0) = -1 Err#22
- workq_kernreturn(0x1, 0x10F31E000, 0x0) = -1 Err#22
- workq_kernreturn(0x1, 0x10F31E000, 0x0) = -1 Err#22
- ...
- workq_kernreturn(0x1, 0x10F31E000, 0x0) = -1 Err#22
- dtrace: 339527 drops on CPU 0
-
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_15_e58bd3d66f0f43c159d2b37172f152de._comment b/doc/bugs/OSX_app_issues/old/comment_15_e58bd3d66f0f43c159d2b37172f152de._comment
deleted file mode 100644
index 2ae192646..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_15_e58bd3d66f0f43c159d2b37172f152de._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.6.49"
- subject="comment 15"
- date="2012-12-01T22:49:54Z"
- content="""
-Seems the command I was thinking of is really `dtruss -p`
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_16_01f2c968bad66b0ff0c09eb468325deb._comment b/doc/bugs/OSX_app_issues/old/comment_16_01f2c968bad66b0ff0c09eb468325deb._comment
deleted file mode 100644
index 5c076012f..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_16_01f2c968bad66b0ff0c09eb468325deb._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnqQyhiNXdPIWWSuu232luY5nc-h5RS8bE"
- nickname="Arve"
- subject="comment 16"
- date="2012-12-01T22:53:29Z"
- content="""
-Returns alot of \"workq_kernreturn(0x1, 0x107D27000, 0x0) = -1 Err#22\" and occasionally \"dtrace: 36244 drops on CPU 1\"
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_16_0b7cd3d5952c5abf36a89a68a4afc1e7._comment b/doc/bugs/OSX_app_issues/old/comment_16_0b7cd3d5952c5abf36a89a68a4afc1e7._comment
deleted file mode 100644
index 0b110ce52..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_16_0b7cd3d5952c5abf36a89a68a4afc1e7._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.8.117"
- subject="comment 16"
- date="2012-12-13T22:40:59Z"
- content="""
-Today's daily build of the OSX app has a further change that *might* help. I removed the system library and frameworks from the bundle.
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_17_82d9963e1fbf17644ce697e5a43943f5._comment b/doc/bugs/OSX_app_issues/old/comment_17_82d9963e1fbf17644ce697e5a43943f5._comment
deleted file mode 100644
index f710878c2..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_17_82d9963e1fbf17644ce697e5a43943f5._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.6.49"
- subject="comment 17"
- date="2012-12-01T23:08:50Z"
- content="""
-Doesn't say anything to me..
-
-Using nohup might help, or at least get us an error message to see. Edit `git-annex.app/Contents/MacOS/git-annex-webapp` and make the last line:
-
-<pre>
-nohup \"$base/runshell\" git-annex webapp \"$@\"
-</pre>
-
-It'll put a nohup.out log file in your home directory, or somewhere like that.
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_17_c2de94a48e7958b9efffd89dda9144ff._comment b/doc/bugs/OSX_app_issues/old/comment_17_c2de94a48e7958b9efffd89dda9144ff._comment
deleted file mode 100644
index 83c2023db..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_17_c2de94a48e7958b9efffd89dda9144ff._comment
+++ /dev/null
@@ -1,59 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkfHTPsiAcHEEN7Xl7WxiZmYq-vX7azxFY"
- nickname="Vincent"
- subject="OS/X daily 2012-12-13"
- date="2012-12-14T09:22:42Z"
- content="""
-Thanks for the update - I tried again, similar results.
-
-same platform. installed image md5sum 1bb50b3ee5eda3cd7f4b4a70cdae1855
-
-Procedure was the same.
- - download, bunzip2, mount, drag app to Applications.
- - chrome had one tab open, iconified
- - double-click application icon
-
-Chrome opens up and shows the config window. Type in the same path
-after checking that the final element of the path did not already exist.
-
- ps aux|grep git
- me 89194 99.0 0.0 2460884 4160 ?? R 8:03pm 0:12.58 git init --quiet /Users/me/me/annex/
- me 89245 0.2 0.0 2423356 220 s001 R+ 8:07pm 0:00.00 grep git
- me 89182 0.0 0.3 2668772 44208 ?? S 8:03pm 0:00.30 git-annex webapp -psn_0_55022710
- me 89177 0.0 0.0 2433432 868 ?? S 8:03pm 0:00.00 /bin/sh /Applications/git-annex.app/Contents/MacOS/git-annex-webapp -psn_0_55022710
-
-I ran dtruss on the two processes of interest, including when I sent them kill -9 in case that showed anything of interest.
-Mail me if you need that but the gist is git init was doing
-
- workq_kernreturn(0x1, 0x1019CC000, 0x0) = -1 Err#22
- workq_kernreturn(0x1, 0x1019CC000, 0x0) = -1 Err#22
- workq_kernreturn(0x1, 0x1019CC000, 0x0) = -1 Err#22
- ...
- workq_kernreturn(0x1, 0x1019CC000, 0x0) = -1 Err#22
- dtrace: 2006687 drops on CPU 0
- workq_kernreturn(0x1, 0x1019CC000, 0x0) = -1 Err#22
-
-and the git-annex webapp was doing stuff like
-
- psynch_cvwait(0x7FD7F1418888, 0x2BE010002BF00, 0x600) = -1 Err#260
- sigreturn(0x7FFF543DD810, 0x1E, 0x2) = 0 Err#-2
- __pthread_canceled(0x0, 0x2BE010002BF00, 0x7FFF543DD8C8) = -1 Err#22
- psynch_cvwait(0x7FD7F1418888, 0x2C8010002C900, 0x600) = -1 Err#260
- sigreturn(0x7FFF543DD810, 0x1E, 0x2) = 0 Err#-2
- __pthread_canceled(0x0, 0x2C8010002C900, 0x7FFF543DD8C8) = -1 Err#22
- psynch_cvwait(0x7FD7F1418888, 0x2D0010002D100, 0x600) = -1 Err#260
- sigreturn(0x7FFF543DD810, 0x1E, 0x2) = 0 Err#-2
- __pthread_canceled(0x0, 0x2D0010002D100, 0x7FFF543DD8C8) = -1 Err#22
- psynch_cvwait(0x7FD7F1418888, 0x2D7010002D800, 0x600) = -1 Err#260
- sigreturn(0x7FFF543DD810, 0x1E, 0x10DCEDC00) = 0 Err#-2
- __pthread_canceled(0x0, 0x2D7010002D800, 0x7FFF543DD8C8) = -1 Err#22
- psynch_cvwait(0x7FD7F14189D8, 0x230100002400, 0x2300) = 0 0
- read(0x6, \"\377\0\", 0x1000) = 1 0
- setitimer(0x0, 0x116903E50, 0x0) = 0 0
- write(0x7, \"\377\0\", 0x1) = 1 0
- sigreturn(0x7FFF543DD810, 0x1E, 0x0) = 0 Err#-2
- __pthread_canceled(0x0, 0x2BC010002BD00, 0x7FFF543DD8C8) = -1 Err#22
-
-which may be unrelated browser event loop stuff I guess.
-
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_18_29af9df9ea295d114574e76e15b8e737._comment b/doc/bugs/OSX_app_issues/old/comment_18_29af9df9ea295d114574e76e15b8e737._comment
deleted file mode 100644
index 9a2bcfcd0..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_18_29af9df9ea295d114574e76e15b8e737._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnqQyhiNXdPIWWSuu232luY5nc-h5RS8bE"
- nickname="Arve"
- subject="comment 18"
- date="2012-12-02T00:02:51Z"
- content="""
-Adding nohup doesn't produce any output (that I can find; sudo find / -name nohup.out) :/
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_18_88ddc846eb4e4a2d54028a3412ba28d6._comment b/doc/bugs/OSX_app_issues/old/comment_18_88ddc846eb4e4a2d54028a3412ba28d6._comment
deleted file mode 100644
index 45c14024e..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_18_88ddc846eb4e4a2d54028a3412ba28d6._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.8.117"
- subject="comment 18"
- date="2012-12-14T20:55:12Z"
- content="""
-I've built the app on 10.8.2, let's hope that'll finally put this problem to rest.
-
-Temporarily available here: <http://downloads.kitenet.net/tmp/git-annex.dmg.bz2>
-
-(This build currently lacks XMPP support.)
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_19_6d6341b05123cd317c4eac96353c8662._comment b/doc/bugs/OSX_app_issues/old/comment_19_6d6341b05123cd317c4eac96353c8662._comment
deleted file mode 100644
index 70e7e7daa..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_19_6d6341b05123cd317c4eac96353c8662._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.2.244"
- subject="comment 19"
- date="2012-12-07T16:13:42Z"
- content="""
-This hang seems not to occur on OSX 10.7, which is the version the autobuilder is running. So this is some sort of incompatability.
-
-So, building git-annex from source should avoid the problem. I'd like to get a version of the app built for 10.8, have not yet been able to arrange that.
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_19_aff4ab761c4d196732baa046af45fe24._comment b/doc/bugs/OSX_app_issues/old/comment_19_aff4ab761c4d196732baa046af45fe24._comment
deleted file mode 100644
index 76fc993e4..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_19_aff4ab761c4d196732baa046af45fe24._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkfHTPsiAcHEEN7Xl7WxiZmYq-vX7azxFY"
- nickname="Vincent"
- subject="comment 19"
- date="2012-12-16T05:27:06Z"
- content="""
-downloaded the 10.8.2 build, md5 9fc31ec6dcf0088d3723d1b25110f7f7.
-
-git --init works instantaneously.
-
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_20_43bd5985d8a3a5e7f826a34e5dd9216e._comment b/doc/bugs/OSX_app_issues/old/comment_20_43bd5985d8a3a5e7f826a34e5dd9216e._comment
deleted file mode 100644
index 8e01d948e..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_20_43bd5985d8a3a5e7f826a34e5dd9216e._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.8.117"
- subject="comment 20"
- date="2012-12-17T16:23:05Z"
- content="""
-@Vincent OMG, it works!?!
-
-\o/
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_3_08613b2e2318680508483d204a43da76._comment b/doc/bugs/OSX_app_issues/old/comment_3_08613b2e2318680508483d204a43da76._comment
deleted file mode 100644
index 24b6bde51..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_3_08613b2e2318680508483d204a43da76._comment
+++ /dev/null
@@ -1,76 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- nickname="edheil"
- subject="No luck running it on OS X Lion."
- date="2012-11-21T06:07:55Z"
- content="""
-here's the crash info:
-
-<pre>
-Process: git-annex [84369]
-Path: /Applications/git-annex.app/Contents/MacOS/bin/git-annex
-Identifier: git-annex
-Version: ??? (???)
-Code Type: X86-64 (Native)
-Parent Process: sh [84364]
-
-Date/Time: 2012-11-21 00:27:03.068 -0500
-OS Version: Mac OS X 10.7.5 (11G63)
-Report Version: 9
-
-Crashed Thread: 0
-
-Exception Type: EXC_BREAKPOINT (SIGTRAP)
-Exception Codes: 0x0000000000000002, 0x0000000000000000
-
-Application Specific Information:
-dyld: launch, loading dependent libraries
-
-Dyld Error Message:
- Library not loaded: /opt/local/lib/libgss.3.dylib
- Referenced from: /Applications/git-annex.app/Contents/MacOS/opt/local/lib/libgsasl.7.dylib
- Reason: image not found
-
-Binary Images:
- 0x105baa000 - 0x107b89fe7 +git-annex (??? - ???) <45311C82-015C-3F87-9F9B-01325EFBD0D9> /Applications/git-annex.app/Contents/MacOS/bin/git-annex
- 0x10822d000 - 0x10823eff7 +libz.1.dylib (1.2.7 - compatibility 1.0.0) <57016CC1-AD54-337E-A983-457933B24D35> /Applications/git-annex.app/Contents/MacOS/opt/local/lib/libz.1.dylib
- 0x108245000 - 0x10827dff7 +libpcre.1.dylib (2.1.0 - compatibility 2.0.0) <431BD758-FA7B-38B3-AB7E-6511EC06152E> /Applications/git-annex.app/Contents/MacOS/opt/local/lib/libpcre.1.dylib
- 0x108283000 - 0x1083b3ff7 +libxml2.2.dylib (11.0.0 - compatibility 11.0.0) <0663F820-D436-3304-B12F-9158901087EB> /Applications/git-annex.app/Contents/MacOS/opt/local/lib/libxml2.2.dylib
- 0x1083e9000 - 0x108400fef +libgsasl.7.dylib (16.6.0 - compatibility 16.0.0) <41503EE1-D58B-385C-AC2E-BEAA7D0D4E38> /Applications/git-annex.app/Contents/MacOS/opt/local/lib/libgsasl.7.dylib
- 0x10840a000 - 0x1084a1fff +libgnutls.26.dylib (49.3.0 - compatibility 49.0.0) <0320352A-3336-3B6B-A7DE-F3069669AD27> /Applications/git-annex.app/Contents/MacOS/opt/local/lib/libgnutls.26.dylib
- 0x1084c3000 - 0x1084f1ff7 +libidn.11.dylib (18.8.0 - compatibility 18.0.0) <97073970-9370-3F85-B943-1B989EA41148> /Applications/git-annex.app/Contents/MacOS/opt/local/lib/libidn.11.dylib
- 0x1084fc000 - 0x1085f5ff7 +libiconv.2.dylib (8.1.0 - compatibility 8.0.0) <1B8D243B-F617-301E-97B1-EE78A72617AB> /Applications/git-annex.app/Contents/MacOS/opt/local/lib/libiconv.2.dylib
- 0x108606000 - 0x108606fff +libcharset.1.dylib (2.0.0 - compatibility 2.0.0) <E3797413-2AA3-3698-B393-E1203B4799A0> /Applications/git-annex.app/Contents/MacOS/opt/local/lib/libcharset.1.dylib
- 0x10860c000 - 0x108665fef +libgmp.10.dylib (11.5.0 - compatibility 11.0.0) <EE407B22-0F44-38B6-9937-10CA6A529F37> /Applications/git-annex.app/Contents/MacOS/opt/local/lib/libgmp.10.dylib
- 0x108675000 - 0x1086a2fe7 +libSystem.B.dylib (159.1.0 - compatibility 1.0.0) <7BEBB139-50BB-3112-947A-F4AA168F991C> /Applications/git-annex.app/Contents/MacOS/usr/lib/libSystem.B.dylib
- 0x1086b4000 - 0x1086c8fef +libgcc_s.1.dylib (??? - ???) <3C5BF0B8-B1E9-3B41-B52F-F7499687217C> /Applications/git-annex.app/Contents/MacOS/opt/local/lib/gcc47/libgcc_s.1.dylib
- 0x1086d8000 - 0x1086f5ff7 +liblzma.5.dylib (6.4.0 - compatibility 6.0.0) <1D682E06-EB89-34CA-855A-AEF611C4DF86> /usr/local/lib/liblzma.5.dylib
- 0x7fff657aa000 - 0x7fff657debaf dyld (195.6 - ???) <0CD1B35B-A28F-32DA-B72E-452EAD609613> /usr/lib/dyld
- 0x7fff8b669000 - 0x7fff8b672ff7 libsystem_notify.dylib (80.1.0 - compatibility 1.0.0) <A4D651E3-D1C6-3934-AD49-7A104FD14596> /usr/lib/system/libsystem_notify.dylib
- 0x7fff8b6e4000 - 0x7fff8b6e5ff7 libsystem_sandbox.dylib (??? - ???) <2A09E4DA-F47C-35CB-B70C-E0492BA9F20E> /usr/lib/system/libsystem_sandbox.dylib
- 0x7fff8c000000 - 0x7fff8c006ff7 libunwind.dylib (30.0.0 - compatibility 1.0.0) <1E9C6C8C-CBE8-3F4B-A5B5-E03E3AB53231> /usr/lib/system/libunwind.dylib
- 0x7fff8c1c4000 - 0x7fff8c1c5ff7 libremovefile.dylib (21.1.0 - compatibility 1.0.0) <739E6C83-AA52-3C6C-A680-B37FE2888A04> /usr/lib/system/libremovefile.dylib
- 0x7fff8cf13000 - 0x7fff8cf4efff libsystem_info.dylib (??? - ???) <35F90252-2AE1-32C5-8D34-782C614D9639> /usr/lib/system/libsystem_info.dylib
- 0x7fff8dbc3000 - 0x7fff8dbc8fff libcache.dylib (47.0.0 - compatibility 1.0.0) <1571C3AB-BCB2-38CD-B3B2-C5FC3F927C6A> /usr/lib/system/libcache.dylib
- 0x7fff8dbc9000 - 0x7fff8dbd0fff libcopyfile.dylib (85.1.0 - compatibility 1.0.0) <0AB51EE2-E914-358C-AC19-47BC024BDAE7> /usr/lib/system/libcopyfile.dylib
- 0x7fff8dbdf000 - 0x7fff8dbedfff libdispatch.dylib (187.10.0 - compatibility 1.0.0) <8E03C652-922A-3399-93DE-9EA0CBFA0039> /usr/lib/system/libdispatch.dylib
- 0x7fff8dcf2000 - 0x7fff8dcf7ff7 libsystem_network.dylib (??? - ???) <5DE7024E-1D2D-34A2-80F4-08326331A75B> /usr/lib/system/libsystem_network.dylib
- 0x7fff8e1bb000 - 0x7fff8e298fef libsystem_c.dylib (763.13.0 - compatibility 1.0.0) <41B43515-2806-3FBC-ACF1-A16F35B7E290> /usr/lib/system/libsystem_c.dylib
- 0x7fff8e6e2000 - 0x7fff8e6eafff libsystem_dnssd.dylib (??? - ???) <584B321E-5159-37CD-B2E7-82E069C70AFB> /usr/lib/system/libsystem_dnssd.dylib
- 0x7fff8fab6000 - 0x7fff8fab8fff libquarantine.dylib (36.7.0 - compatibility 1.0.0) <8D9832F9-E4A9-38C3-B880-E5210B2353C7> /usr/lib/system/libquarantine.dylib
- 0x7fff8fc3e000 - 0x7fff8fc80ff7 libcommonCrypto.dylib (55010.0.0 - compatibility 1.0.0) <BB770C22-8C57-365A-8716-4A3C36AE7BFB> /usr/lib/system/libcommonCrypto.dylib
- 0x7fff90fa3000 - 0x7fff90fa9fff libmacho.dylib (800.0.0 - compatibility 1.0.0) <165514D7-1BFA-38EF-A151-676DCD21FB64> /usr/lib/system/libmacho.dylib
- 0x7fff90faa000 - 0x7fff90fabfff libunc.dylib (24.0.0 - compatibility 1.0.0) <337960EE-0A85-3DD0-A760-7134CF4C0AFF> /usr/lib/system/libunc.dylib
- 0x7fff910b4000 - 0x7fff910b8fff libmathCommon.A.dylib (2026.0.0 - compatibility 1.0.0) <FF83AFF7-42B2-306E-90AF-D539C51A4542> /usr/lib/system/libmathCommon.A.dylib
- 0x7fff916b9000 - 0x7fff916bdfff libdyld.dylib (195.6.0 - compatibility 1.0.0) <FFC59565-64BD-3B37-90A4-E2C3A422CFC1> /usr/lib/system/libdyld.dylib
- 0x7fff916be000 - 0x7fff916defff libsystem_kernel.dylib (1699.32.7 - compatibility 1.0.0) <66C9F9BD-C7B3-30D4-B1A0-03C8A6392351> /usr/lib/system/libsystem_kernel.dylib
- 0x7fff916df000 - 0x7fff916e0fff libdnsinfo.dylib (395.11.0 - compatibility 1.0.0) <853BAAA5-270F-3FDC-B025-D448DB72E1C3> /usr/lib/system/libdnsinfo.dylib
- 0x7fff929f8000 - 0x7fff929fdfff libcompiler_rt.dylib (6.0.0 - compatibility 1.0.0) <98ECD5F6-E85C-32A5-98CD-8911230CB66A> /usr/lib/system/libcompiler_rt.dylib
- 0x7fff93a3c000 - 0x7fff93a3cfff libkeymgr.dylib (23.0.0 - compatibility 1.0.0) <61EFED6A-A407-301E-B454-CD18314F0075> /usr/lib/system/libkeymgr.dylib
- 0x7fff97139000 - 0x7fff9713aff7 libsystem_blocks.dylib (53.0.0 - compatibility 1.0.0) <8BCA214A-8992-34B2-A8B9-B74DEACA1869> /usr/lib/system/libsystem_blocks.dylib
- 0x7fff9724f000 - 0x7fff9726cfff libxpc.dylib (77.19.0 - compatibility 1.0.0) <9F57891B-D7EF-3050-BEDD-21E7C6668248> /usr/lib/system/libxpc.dylib
- 0x7fff97cfe000 - 0x7fff97d08ff7 liblaunch.dylib (392.39.0 - compatibility 1.0.0) <8C235D13-2928-30E5-9E12-2CC3D6324AE2> /usr/lib/system/liblaunch.dylib
-</pre>
-
-
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_4_4cda124b57ddc87645d5822f14ed5c59._comment b/doc/bugs/OSX_app_issues/old/comment_4_4cda124b57ddc87645d5822f14ed5c59._comment
deleted file mode 100644
index 758140903..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_4_4cda124b57ddc87645d5822f14ed5c59._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkBTVYS5lTecuenAB01eHgfUxE20vWVpU4"
- nickname="Peng"
- subject="Large Mountain Loin package size"
- date="2012-12-28T22:17:43Z"
- content="""
-I see that git-annex package file is 489.9MB on Mac Mountain Loin (git-annex.dmg.bz2). The file git-annex.dmg.bz2 is only of size 24M. Is there any way to reduce the package size?
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_5_0d1df34f83a8dac9c438d93806236818._comment b/doc/bugs/OSX_app_issues/old/comment_5_0d1df34f83a8dac9c438d93806236818._comment
deleted file mode 100644
index 89078a7da..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_5_0d1df34f83a8dac9c438d93806236818._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="2001:4978:f:21a::2"
- subject="comment 5"
- date="2013-01-02T19:52:28Z"
- content="""
-The build for today's release is 24 mb.
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_6_12bd83e7e2327c992448e87bdb85d17e._comment b/doc/bugs/OSX_app_issues/old/comment_6_12bd83e7e2327c992448e87bdb85d17e._comment
deleted file mode 100644
index 62851c15b..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_6_12bd83e7e2327c992448e87bdb85d17e._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/6xTna_B_h.ECb6_ftC2dYLytAEwrv36etg_054U-#4c1e7"
- nickname="Fake"
- subject="libncurses on 10.7"
- date="2012-10-17T21:24:24Z"
- content="""
-I'm getting an error from gpg when I try to set up a repository on a remote server with encrypted rsync. Looks like libncurses in /usr/lib is 32 bit:
-
- Dyld Error Message:
- Library not loaded: /opt/local/lib/libncurses.5.dylib
- Referenced from: /Applications/git-annex.app/Contents/MacOS/opt/local/lib/libreadline.6.2.dylib
- Reason: no suitable image found. Did find:
- /usr/lib/libncurses.5.dylib: mach-o, but wrong architecture
- /usr/lib/libncurses.5.dylib: mach-o, but wrong architecture
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_6_bc44d5aea5f77e331a32913ada293730._comment b/doc/bugs/OSX_app_issues/old/comment_6_bc44d5aea5f77e331a32913ada293730._comment
deleted file mode 100644
index 187197e81..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_6_bc44d5aea5f77e331a32913ada293730._comment
+++ /dev/null
@@ -1,27 +0,0 @@
-[[!comment format=mdwn
- username="https://www.jsilence.org/"
- nickname="jsilence"
- subject="Setting up a repository fails on OSX 10.6"
- date="2013-01-05T11:17:18Z"
- content="""
-I installed Haskell via MacPorts and managed to compile git-annex as described via cabal.
-
-On the initial start, git-annex webapp starts just fine and the webapp opens in the browser. When I try to configure a local repository, the webapp crashes.
-
- 1 jsilence@zeo ~ % git-annex webapp
- (Recording state in git...)
- WebApp crashed: watch mode is not available on this system
-
- Launching web browser on file:///var/folders/6b/6bWnFAnbFXSPCLPvCnKNrE+++TI/-Tmp-/webapp1003.html
- jsilence@zeo ~ %
-
-\"watch mode is not suported\" suggests that lsof is not in the PATH. lsof resides in /usr/sbin and can be found just fine:
-
- jsilence@zeo ~ % which lsof
- /usr/sbin/lsof
-
-Any help would be appreciated.
-
--jsl
-
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_6_cea97dbbfb566a9fe463365ca4511119._comment b/doc/bugs/OSX_app_issues/old/comment_6_cea97dbbfb566a9fe463365ca4511119._comment
deleted file mode 100644
index 6c968aa1e..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_6_cea97dbbfb566a9fe463365ca4511119._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://nico.kaiser.me/"
- nickname="Nico Kaiser"
- subject="git-annex crashing on OS X 10.8.2"
- date="2012-11-27T08:01:29Z"
- content="""
- $ /Applications/git-annex.app/Contents/MacOS/git-annex-webapp
- dyld: Symbol not found: _OBJC_CLASS_$_NSObject
- Referenced from: /usr/bin/open
- Expected in: /Applications/git-annex.app/Contents/MacOS/usr/lib/libobjc.A.dylib
- in /usr/bin/open
- WebApp crashed: failed to start web browser
-
- Launching web browser on file:///var/folders/8g/_fvs7jf572l4fj03q5mhrq9r0000gn/T/webapp1196.html
-
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_7_911f187d46890093a54859032ada2442._comment b/doc/bugs/OSX_app_issues/old/comment_7_911f187d46890093a54859032ada2442._comment
deleted file mode 100644
index 636627959..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_7_911f187d46890093a54859032ada2442._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.6.49"
- subject="comment 7"
- date="2012-11-27T21:13:18Z"
- content="""
-@Nico, that's actually kind of promising; people have been reporting much earlier crashes with OSX. This later crash is one I think I can do something about! :)
-
-So, it looks like the standalone app build needs to run the web browser in a clean environment that doesn't use any of its bundled libraries. I've committed that change and it will be in a release later today.
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_7_acd73cc5c4caa88099e2d2f19947aadf._comment b/doc/bugs/OSX_app_issues/old/comment_7_acd73cc5c4caa88099e2d2f19947aadf._comment
deleted file mode 100644
index bdbdfc9ab..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_7_acd73cc5c4caa88099e2d2f19947aadf._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.211"
- subject="comment 7"
- date="2013-01-05T17:48:52Z"
- content="""
-@jsilence, this problem does not involve lsof. There was a typo in the cabal file that prevented cabal building it with hfsevents. I'm releasing a new version to cabal with this typo fixed.
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_8_08b091a58106ca6050ac669579ed9ff4._comment b/doc/bugs/OSX_app_issues/old/comment_8_08b091a58106ca6050ac669579ed9ff4._comment
deleted file mode 100644
index d32d9a024..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_8_08b091a58106ca6050ac669579ed9ff4._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://wiggy.net/"
- nickname="Wichert"
- subject="Adding a remote server repository fails"
- date="2012-11-28T21:17:23Z"
- content="""
-The error message I get is:
-
-> Failed to ssh to the server. Transcript: dyld: Symbol not found: ___progname Referenced from: /usr/bin/ssh Expected in: /Users/wichert/Applications/git-annex.app/Contents/MacOS/usr/lib/libSystem.B.dylib in /usr/bin/ssh
-
-"""]]
diff --git a/doc/bugs/OSX_app_issues/old/comment_9_8464c839cb169a4c6e72bebdc2065e9a._comment b/doc/bugs/OSX_app_issues/old/comment_9_8464c839cb169a4c6e72bebdc2065e9a._comment
deleted file mode 100644
index 42aaa9bfe..000000000
--- a/doc/bugs/OSX_app_issues/old/comment_9_8464c839cb169a4c6e72bebdc2065e9a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://wiggy.net/"
- nickname="Wichert"
- subject="Trying to add remote server after failed attempt blocks forever"
- date="2012-11-28T21:23:54Z"
- content="""
-Out of curiosity I checked what would happen if I tried to add a remote server repo again after it just failed with the missing library error (see previous comment). Surprisingly the webapp is now waiting forever at the *Testing server ...* message.
-"""]]
diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass.mdwn b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass.mdwn
new file mode 100644
index 000000000..bb76e96e5
--- /dev/null
+++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass.mdwn
@@ -0,0 +1,119 @@
+### Please describe the problem.
+
+git-annex assistant on Mac OSX 10.8.5 fails to download new repo files from SSH remote/rsync shared-encryption annex after initial startup. The assistant does sync with the repo and create symlinks for new files, and file contents can manually be retrieved using 'git annex get $file' once the file is in the repository. However, assistant makes no subsequent attempt to download the new files until assistant is restarted. Once restarted, assistant downloads all new files for which is previously only had symlinks.
+
+git-annex whereis $file does not indicate that the files represented as symlinks are located on the Mac OSX clients in question until after files are manually retrieved or assistant is retarted and files are automatically downloaded, replacing the symlinks.
+
+git-annex assistant on Mac OSX does not have problems uploading files to the remote as they are added.
+
+git-annex 5.20140517.4 on Ubuntu 12.04 behaves as expected and downloads new files (with content) properly as they are added to the repo.
+
+### What steps will reproduce the problem?
+
+(all using git-annex webapp)
+
+--create client repo on Mac OSX, direct mode (used two 10.8.5 machines)
+
+--create client repo on Ubuntu, direct mode (used several 12.04 VMs)
+
+--create repo (transfer mode) on VPS
+
+--create shared encryption repo (backup mode) on same VPS
+
+--add VPS transfer repo to each client (shared encryption repo appears and syncing is enabled for each client)
+
+--create file in Mac OSX annex - file gets distributed to VPS backup repo and each linux system. Symlink is created on 2nd Mac OS X machine.
+
+--create file in Ubuntu VM annex - file gets distributed to VPS backup repo and each linux system. Symlink is created on both Mac OSX machines.
+
+
+
+### What version of git-annex are you using? On what operating system?
+git-annex version: 5.20140421 (installed using brew), Mac OSX 10.8.5
+
+I tested 5.20140613 (from brew) also and it appears to also not download new files automatically.
+
+
+
+### Please provide any additional information below.
+I've tested a few things I thought might be related. Since restarting assistant seems to temporarily "fix" the problem, I thought there may be some SSH client caching problems... as in the existing connection not being reused properly. However, I disabled annex.sshcaching as described elsewhere and that did not have any affect.
+
+I've enabled XMPP and it only introduced more confusion as the XMPP messaging was not reliably consistent.
+
+daemon.log for Mac OS systems does not show the "Pusher" process getting initiated once new files are added to the repo if the assistant is currently running, however it is logged immediately after assistant is started if there are new files in the repo.
+
+daemon.log for Ubuntu systems does contain the Pusher process event following the repo sync that takes place once the file has been added to the repo.
+
+
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+MACOSX:user$git-annex assistant --autostart
+
+daemon.log:
+
+[2014-06-25 11:52:04 CDT] main: starting assistant version 5.20140421
+[2014-06-25 11:52:09 CDT] TransferScanner: Syncing with serverrepo
+
+Already up-to-date.
+(scanning...) [2014-06-25 11:52:09 CDT] Watcher: Performing startup scan
+
+Already up-to-date.
+(started...)
+[2014-06-25 11:52:10 CDT] Committer: Committing changes to git
+(Recording state in git...)
+(gpg)
+Already up-to-date.
+
+Already up-to-date.
+[2014-06-25 11:52:11 CDT] Pusher: Syncing with serverrepo
+
+GPGHMACSHA1--3e18c6a4ee5aece84f4f00fc2e7fcb828d8fa7d8
+Everything up-to-date0.00kB/s 0:00:00
+Everything up-to-date4.56MB/s 0:00:00
+ 8409197 100% 4.94MB/s 0:00:01 (xfer#1, to-check=0/1)
+
+sent 38 bytes received 8411383 bytes 2403263.14 bytes/sec
+total size is 8409197 speedup is 1.00
+[2014-06-25 11:52:13 CDT] Transferrer: Downloaded 67-more-fromubuntu
+[2014-06-25 11:52:14 CDT] Committer: Adding 67-more-fromubuntu
+add /Users/user/computer_annex/67-more-fromubuntu ok
+[2014-06-25 11:52:14 CDT] Committer: Committing changes to git
+(Recording state in git...)
+[2014-06-25 11:52:20 CDT] Pusher: Syncing with serverrepo
+(Recording state in git...)
+To ssh://user@git-annex-server.remotehost.net-user_.2Fhome.2Fuser.2Fserver_repo/home/user/server_repo/
+ 7e375a8..1a64e4c git-annex -> synced/git-annex
+[2014-06-25 11:52:36 CDT] RemoteControl: Syncing with serverrepo
+From ssh://git-annex-server.remotehost.net-user_.2Fhome.2Fuser.2Fserver_repo/home/user/server_repo
+ 1a64e4c..dee9f84 synced/git-annex -> serverrepo/synced/git-annex
+ d424057..989003e synced/master -> serverrepo/synced/master
+(merging serverrepo/synced/git-annex into git-annex...)
+
+<<<File gets added to any other client annex, MAC OSX or Ubuntu>>>
+
+Updating d424057..989003e
+Fast-forward
+ 89-more-fromubuntu | 1 +
+ 1 file changed, 1 insertion(+)
+ create mode 120000 89-more-fromubuntu
+[2014-06-25 11:58:42 CDT] RemoteControl: Syncing with serverrepo
+From ssh://git-annex-server.remotehost.net-user_.2Fhome.2Fuser.2Fserver_repo/home/user/server_repo
+ dee9f84..b24c8bf synced/git-annex -> serverrepo/synced/git-annex
+(merging serverrepo/synced/git-annex into git-annex...)
+[2014-06-25 11:58:47 CDT] RemoteControl: Syncing with serverrepo
+From ssh://git-annex-server.remotehost.net-user_.2Fhome.2Fuser.2Fserver_repo/home/user/server_repo
+ b24c8bf..6488b45 synced/git-annex -> serverrepo/synced/git-annex
+(merging serverrepo/synced/git-annex into git-annex...)
+[2014-06-25 11:58:56 CDT] RemoteControl: Syncing with serverrepo
+From ssh://git-annex-server.remotehost.net-user_.2Fhome.2Fuser.2Fserver_repo/home/user/server_repo
+ 6488b45..c73c180 synced/git-annex -> serverrepo/synced/git-annex
+(merging serverrepo/synced/git-annex into git-annex...)
+
+
+
+
+# End of transcript or log.
+"""]]
diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_10_3feba4ba84efb77bd4f8f46b6b4600f1._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_10_3feba4ba84efb77bd4f8f46b6b4600f1._comment
new file mode 100644
index 000000000..37aa47c37
--- /dev/null
+++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_10_3feba4ba84efb77bd4f8f46b6b4600f1._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawncukUQl56TwiBJb7dIyAqP1YirNg_wjR4"
+ nickname="Matthew"
+ subject="Actions -> Sync Now in webapp does properly download new files"
+ date="2014-07-17T13:50:06Z"
+ content="""
+confirmed - your understanding is correct
+"""]]
diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_1_a33fcd088e419d8e6c459e42f21f8bbe._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_1_a33fcd088e419d8e6c459e42f21f8bbe._comment
new file mode 100644
index 000000000..b78fd5aa0
--- /dev/null
+++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_1_a33fcd088e419d8e6c459e42f21f8bbe._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnu1NjsjNS3m0OxiYLKO-5SKNpSERxpi6k"
+ nickname="Matthew"
+ subject="comment 1"
+ date="2014-07-09T13:56:31Z"
+ content="""
+\"workaround\" is just a cron job that runs 'git annex sync --content' every N minutes...
+
+Is there any possible configuration error I've made that would cause the OSX clients to behave differently than the linux clients despite ostensibly being set up identically??
+"""]]
diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_2_47196f7e781137751ebd1a1d7083838a._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_2_47196f7e781137751ebd1a1d7083838a._comment
new file mode 100644
index 000000000..ee5ad138e
--- /dev/null
+++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_2_47196f7e781137751ebd1a1d7083838a._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 2"
+ date="2014-07-10T19:19:36Z"
+ content="""
+Could you please go into some more detail about these two things:
+
+> --create repo (transfer mode) on VPS
+>
+> --create shared encryption repo (backup mode) on same VPS
+
+It's not clear to me what kind of repositories these are. Are they bare git repositories? What version of git-annex, if any, is installed on that VPS?
+
+> git-annex whereis $file does not indicate that the files represented as symlinks are located on the Mac OSX clients in question until after files are manually retrieved
+
+Well, I'd not expect whereis to say that the file is in a repository until it's retrieved into that repository. However, does whereis, on the OSX clients, ever say that the file has reached one of the repos on the VPS?
+"""]]
diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_3_672d98ee06e051430f8e01faa93bb4cf._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_3_672d98ee06e051430f8e01faa93bb4cf._comment
new file mode 100644
index 000000000..e26492dd7
--- /dev/null
+++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_3_672d98ee06e051430f8e01faa93bb4cf._comment
@@ -0,0 +1,28 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawncukUQl56TwiBJb7dIyAqP1YirNg_wjR4"
+ nickname="Matthew"
+ subject="comment 3"
+ date="2014-07-11T17:06:43Z"
+ content="""
+I created an local repository on each of 2 OS X (10.8.5) systems running git-annex version 5.20140421, and each of 2 Ubuntu 12.04 systems running version 5.20140517.4
+
+I then created a remote SSH repository by selecting \"Make an unencrypted git repository on the server\" - this repo is in \"transfer\" mode.
+
+On the 2nd OSX client, I added a remote SSH repository, providing the same host and path information and elected to \"combine\" my local repo with the remote repo so that files would stay in sync.
+
+I did the same on each of the linux clients.
+
+git-annex indicates that local repos on each machine are in direct mode and show all expected semi trusted repos: web, SSH remote, other clients that have combined with the SSH remote.
+
+git-annex indicates that the SSH remote repo is in indirect mode
+
+git indicates that all repos are in bare mode
+
+git-annex version 5.20140412ubuntu1 is installed on the VPS, and 'git-annex shell notify changes' processes are running.
+
+Agreed on the behavior of git-annex whereis… just pointing out that the location info is accurate.
+
+The 2nd, encrypted repo may have no bearing at all because even when I remove it, the client behavior on OSX doesn't change.
+
+Thanks for taking the time to consider this!
+"""]]
diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_4_06fb3031b838cd443326f4ecd689b600._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_4_06fb3031b838cd443326f4ecd689b600._comment
new file mode 100644
index 000000000..0f77607a0
--- /dev/null
+++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_4_06fb3031b838cd443326f4ecd689b600._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawncukUQl56TwiBJb7dIyAqP1YirNg_wjR4"
+ nickname="Matthew"
+ subject="comment 4"
+ date="2014-07-11T17:11:41Z"
+ content="""
+I should add that in the web app on OSX, the behavior is consistent; syncing the local repository on an OSX client create a symlink (if that hasn't already been done in the background). resyncing \"here\" (local client) doesn't download the file. syncing the remote SSH repo, however does download the file content (as does git-annex sync --content)
+
+thanks!
+"""]]
diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_5_42d447400c15acf6ca031d165b2c781c._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_5_42d447400c15acf6ca031d165b2c781c._comment
new file mode 100644
index 000000000..04a5de75c
--- /dev/null
+++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_5_42d447400c15acf6ca031d165b2c781c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawncukUQl56TwiBJb7dIyAqP1YirNg_wjR4"
+ nickname="Matthew"
+ subject="comment 5"
+ date="2014-07-11T18:10:06Z"
+ content="""
+Sorry to miss this previously, but, yes, whereis does indicate that it has made it to both of the remotes.
+"""]]
diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_6_edd7d5d5c761ff665840f0ef7bea50c9._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_6_edd7d5d5c761ff665840f0ef7bea50c9._comment
new file mode 100644
index 000000000..9b2890986
--- /dev/null
+++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_6_edd7d5d5c761ff665840f0ef7bea50c9._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 6"
+ date="2014-07-16T20:51:36Z"
+ content="""
+5.20140421 happens to be the very first version of git-annex to support notifychanges. I forget what bugs that first attempt may have had. Have you tried upgrading the macs to a newer version?
+
+
+"""]]
diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_7_18e5334ab89efcf89ba8847436d55065._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_7_18e5334ab89efcf89ba8847436d55065._comment
new file mode 100644
index 000000000..197fca67a
--- /dev/null
+++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_7_18e5334ab89efcf89ba8847436d55065._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawncukUQl56TwiBJb7dIyAqP1YirNg_wjR4"
+ nickname="Matthew"
+ subject="comment 7"
+ date="2014-07-16T21:23:00Z"
+ content="""
+git-annex version: 5.20140613 also behaves the same way, however it generates a new log message during the sync attempt:
+
+Automatic merge went well; stopped before committing as requested
+
+
+
+"""]]
diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_8_35b2bbdc24a7bd686527cd1839dee7d0._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_8_35b2bbdc24a7bd686527cd1839dee7d0._comment
new file mode 100644
index 000000000..f551fe627
--- /dev/null
+++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_8_35b2bbdc24a7bd686527cd1839dee7d0._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 8"
+ date="2014-07-16T22:23:50Z"
+ content="""
+Hmm, it looks to me like the transfer scan may not be getting run after the git branches get pulled. I would expect to see \"starting scan of\" in the debug log when it does that scan. Do you see that in the log?
+
+AIUI, when you click on Actions -> Sync Now in the webapp for the repository that contains the content, it gets downloaded right? That does the same scan that should be automatically run after a branch is pulled.
+"""]]
diff --git a/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_9_a771c6b453e6a4b3895dd69a53093440._comment b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_9_a771c6b453e6a4b3895dd69a53093440._comment
new file mode 100644
index 000000000..bf57b46be
--- /dev/null
+++ b/doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_9_a771c6b453e6a4b3895dd69a53093440._comment
@@ -0,0 +1,246 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawncukUQl56TwiBJb7dIyAqP1YirNg_wjR4"
+ nickname="Matthew"
+ subject="comment 9"
+ date="2014-07-17T01:58:29Z"
+ content="""
+Hi Joey,
+
+Thanks for taking the time to follow up on this - I sincerely appreciate it!
+
+Only immediately after I start the assistant does the \"starting scan of\" message get logged:
+
+[2014-07-16 20:38:07 CDT] TransferScanner: starting scan of [Remote { name =\"hostrepo\" }]
+
+and, at that point, new files are downloaded.
+
+If the assistant has been running for a while, I then create a new file in an annex on another machine, and the OS X assistant has synced and then created a symlink for new files, the following log is generated (NOTE the groovy scroodled first line if it's at all of interest...):
+
+
+[2014-07-16 20:30:[312 0C1D4T-] 0c7a-ll1:6 g2i0t: 3[0\":--3g1i tC-DdTi]r =R/eUmsoetresC/omnhtirlotly:/ sShYiNnCiIeNrG_ asnsnhe:x///.mgaitte\"o,@\"g-i-tw-oarnkn-etxr-egeo=t/aU.sienrfsr/omnhtiiletrys/.snheitn-imeart_eaon_ngeoxt\"a,_\"r-ecp\"o,/\"~c/ogroet.ab_arreep=of/a
+lse\",\"fetch\",\"hostrepo\"]
+
+[2014-07-16 20:30:31 CDT] RemoteControl: Syncing with hostrepo
+From ssh://git-annex-host.vpshost.net-someuser_host_repo/~/host_repo
+ fdd1eff..e1057e0 synced/git-annex -> hostrepo/synced/git-annex
+ fa3cfb0..e4ba411 synced/master -> hostrepo/synced/master
+
+[2014-07-16 20:30:32 CDT] RemoteControl: DONESYNCING ssh://someuser@git-annex-host.vpshost.net-someuser_host_repo/~/host_repo/ 1
+
+[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"]
+
+[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+
+[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..fdd1effb8d2b8073e94725874e16056d6557f199\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..e1057e037f03ba804f021c8c39073b2efd1fad08\",\"--oneline\",\"-n1\"]
+(merging hostrepo/synced/git-annex into git-annex...)
+
+[2014-07-16 20:30:32 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"]
+
+[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"e1057e037f03ba804f021c8c39073b2efd1fad08\"]
+
+[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"e1057e037f03ba804f021c8c39073b2efd1fad08..refs/heads/git-annex\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:30:32 CDT] call: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-ref\",\"refs/heads/git-annex\",\"e1057e037f03ba804f021c8c39073b2efd1fad08\"]
+
+[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"ls-tree\",\"--full-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"numcopies.log\",\"schedule.log\",\"preferred-content.log\",\"required-content.log\",\"group-preferred-content.log\"]
+
+[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"symbolic-ref\",\"HEAD\"]
+
+[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"refs/heads/annex/direct/master\"]
+
+[2014-07-16 20:30:32 CDT] Merger: merging refs/remotes/hostrepo/synced/master into refs/heads/annex/direct/master
+
+[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/annex/direct/master\"]
+
+[2014-07-16 20:30:32 CDT] call: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex/.git/annex/merge/\",\"-c\",\"core.bare=false\",\"merge\",\"--no-edit\",\"refs/remotes/hostrepo/synced/master\"]
+
+Updating fa3cfb0..e4ba411
+Fast-forward
+ from-ubuntu | 1 +
+ 1 file changed, 1 insertion(+)
+ create mode 120000 from-ubuntu
+
+[2014-07-16 20:30:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-tree\",\"-z\",\"--raw\",\"--no-renames\",\"-l0\",\"-r\",\"fa3cfb01cc4493ed8a7cf84dff38bbba1fc042f9\",\"HEAD\"]
+
+[2014-07-16 20:30:33 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"]
+
+[2014-07-16 20:30:33 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+
+[2014-07-16 20:30:33 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..e1057e037f03ba804f021c8c39073b2efd1fad08\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:30:33 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:30:33 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"]
+
+[2014-07-16 20:30:33 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"refs/heads/git-annex\"]
+
+[2014-07-16 20:30:45 CDT][ cal2l0:1 4g-i0t7 -[16\" -2-0g:i3t0-:di4r5= /CUDsTe]r sR/emmhoitletCyo/nsthrionli:e rS_YaNnCnIeNxG/ .sgsiht:\"/,/\"m-a-tweoor@kg-ittr-eaen=n/eUxs-egrost/am.hiinlftryo/nsthiienrise.rn_eatn-nmeaxt\"e,o\"_-gco\"t,a\"_croerpeo./b~a/rgeo=tfaa_lrseep\"o,/\"
+fetch\",\"hostrepo\"]
+
+[2014-07-16 20:30:45 CDT] RemoteControl: Syncing with hostrepo
+From ssh://git-annex-host.vpshost.net-someuser_host_repo/~/host_repo
+ e1057e0..d44a67a synced/git-annex -> hostrepo/synced/git-annex
+
+[2014-07-16 20:30:47 CDT] RemoteControl: DONESYNCING ssh://someuser@git-annex-host.vpshost.net-someuser_host_repo/~/host_repo/ 1
+
+[2014-07-16 20:30:47 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"]
+
+[2014-07-16 20:30:47 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+
+[2014-07-16 20:30:47 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..e1057e037f03ba804f021c8c39073b2efd1fad08\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:30:47 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:30:47 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..d44a67a5795c28e423a9ac018bead9dac793be5c\",\"--oneline\",\"-n1\"]
+(merging hostrepo/synced/git-annex into git-annex...)
+
+[2014-07-16 20:30:47 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"]
+
+[2014-07-16 20:30:47 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"d44a67a5795c28e423a9ac018bead9dac793be5c\"]
+
+[2014-07-16 20:30:47 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"d44a67a5795c28e423a9ac018bead9dac793be5c..refs/heads/git-annex\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:30:47 CDT] call: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-ref\",\"refs/heads/git-annex\",\"d44a67a5795c28e423a9ac018bead9dac793be5c\"]
+
+[2014-07-16 20:30:48 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"]
+
+[2014-07-16 20:30:48 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+
+[2014-07-16 20:30:48 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..d44a67a5795c28e423a9ac018bead9dac793be5c\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:30:48 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:30:48 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"]
+
+[2014-07-16 20:30:48 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"refs/heads/git-annex\"]
+
+[2014-07-16 20:30:51 CD[T]2 0c1a4l-l:0 7g-it1 6[ \"2-0-:g3i0t:-d5i1r =C/DUTs]e rRse/mmohtielCtoyn/tsrhoiln:i eSrY_NaCnInNeGx /s.sghi:t/\"/,m\"a-t-ewoo@rgki-tt-raenen=e/xU-sgeortsa/.mihniflrtoyn/tsiheirnsi.enre_ta-nmnaetxe\"o,_\"g-oct\"a,_\"rceoproe/.~b/agroet=af_arlespeo\"/,
+\"fetch\",\"hostrepo\"]
+
+[2014-07-16 20:30:51 CDT] RemoteControl: Syncing with hostrepo
+From ssh://git-annex-host.vpshost.net-someuser_host_repo/~/host_repo
+ d44a67a..660d71a synced/git-annex -> hostrepo/synced/git-annex
+
+[2014-07-16 20:30:51 CDT] RemoteControl: DONESYNCING ssh://someuser@git-annex-host.vpshost.net-someuser_host_repo/~/host_repo/ 1
+
+[2014-07-16 20:30:51 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"]
+
+[2014-07-16 20:30:51 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+
+[2014-07-16 20:30:51 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..d44a67a5795c28e423a9ac018bead9dac793be5c\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:30:51 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:30:52 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..660d71ac55b47061c531e5c8fa2af7910f2e13aa\",\"--oneline\",\"-n1\"]
+(merging hostrepo/synced/git-annex into git-annex...)
+
+[2014-07-16 20:30:52 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"]
+
+[2014-07-16 20:30:52 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"660d71ac55b47061c531e5c8fa2af7910f2e13aa\"]
+
+[2014-07-16 20:30:52 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"660d71ac55b47061c531e5c8fa2af7910f2e13aa..refs/heads/git-annex\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:30:52 CDT] call: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-ref\",\"refs/heads/git-annex\",\"660d71ac55b47061c531e5c8fa2af7910f2e13aa\"]
+
+[2014-07-16 20:30:52 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"]
+
+[2014-07-16 20:30:52 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+
+[2014-07-16 20:30:52 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..660d71ac55b47061c531e5c8fa2af7910f2e13aa\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:30:53 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:30:53 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"]
+
+[2014-07-16 20:30:53 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"refs/heads/git-annex\"]
+
+[2014-07-16 20[:32101:4-007-71 6 C2D0T:]3 1:ca0l7l :C DgTi]t Re[m\"ot-e-Cognitrtol-: dSiYNrCI=NG/ Usssh:e/r/msa/tmeoh@giitl-tayn/nesx-hgoitan.iinefrron_tiaerns.nneetx-/m.agtieto\"_,g\"o-t-a_wroepro/k~/-gottar_reepeo/=
+/Users/someuser/local_ann[ex\"2,0\"1-4c-\",0\"7c-o1r6e .2b0a:r3e1=:fa0l7s eC\"D,T\"]f eRtecmho\"t,e\"Cgoonttarroelp:o \"]
+Syncing with hostrepo
+From ssh://git-annex-host.vpshost.net-someuser_host_repo/~/host_repo
+ 660d71a..273bc7f synced/git-annex -> hostrepo/synced/git-annex
+
+[2014-07-16 20:31:09 CDT] RemoteControl: DONESYNCING ssh://someuser@git-annex-host.vpshost.net-someuser_host_repo/~/host_repo/ 1
+
+[2014-07-16 20:31:09 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-
+annex\"]
+
+[2014-07-16 20:31:09 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+
+[2014-07-16 20:31:09 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..660d71ac55b47061c531e5c8fa2af7910f2e13aa\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:31:09 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:31:09 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..273bc7f261a79539abcc237f1f0bbf5cd4f57add\",\"--oneline\",\"-n1\"]
+(merging hostrepo/synced/git-annex into git-annex...)
+
+[2014-07-16 20:31:09 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"]
+
+[2014-07-16 20:31:09 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"273bc7f261a79539abcc237f1f0bbf5cd4f57add\"]
+
+[2014-07-16 20:31:09 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"273bc7f261a79539abcc237f1f0bbf5cd4f57add..refs/heads/git-annex\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:31:09 CDT] call: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-ref\",\"refs/heads/git-annex\",\"273bc7f261a79539abcc237f1f0bbf5cd4f57add\"]
+
+[2014-07-16 20:31:10 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"]
+
+[2014-07-16 20:31:10 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+
+[2014-07-16 20:31:10 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..273bc7f261a79539abcc237f1f0bbf5cd4f57add\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:31:10 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:31:10 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"]
+
+[2014-07-16 20:31:10 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"refs/heads/git-annex\"]
+
+[2014-07-16 20:31:11 CDT] Watcher: directory deleted /Users/someuser/local_annex/local_annex-test
+
+[2014-07-16 20:31:11 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"ls-files\",\"--deleted\",\"-z\",\"--\",\"/Users/someuser/local_annex/local_annex-test\"]
+
+[2014-07-16 20:31[:1270 1C4D-T]0 7c-al1l6: 2g0i:t3 1[:\"-1-7g iCtD-Td]i rR=e/mUosteerCso/nmthriollt:y /SsYhNiCnIiNeGr _sasnhn:e/x//m.agtieto\"@,g\"i-t--waonrnke-xt-rgeoet=a/.Uisnefrrso/nmthiielrtsy./nsehti-nmiaetre_oa_ngnoetxa\"_r,e\"po-/c~\"/g,o\"tcao_rreep.ob/a
+re=false\",\"fetch\",\"g[ot2a0r1e4p-o0\"7]-
+16 20:31:17 CDT] RemoteControl: Syncing with hostrepo
+From ssh://git-annex-host.vpshost.net-someuser_host_repo/~/host_repo
+ 273bc7f..ce6dd68 synced/git-annex -> hostrepo/synced/git-annex
+
+[2014-07-16 20:31:18 CDT] RemoteControl: DONESYNCING ssh://someuser@git-annex-host.vpshost.net-someuser_host_repo/~/host_repo/ 1
+
+[2014-07-16 20:31:18 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"]
+
+[2014-07-16 20:31:18 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+
+[2014-07-16 20:31:18 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..273bc7f261a79539abcc237f1f0bbf5cd4f57add\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:31:18 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:31:18 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..ce6dd68adec97bbf73f5da408c17511aca8840c5\",\"--oneline\",\"-n1\"]
+(merging hostrepo/synced/git-annex into git-annex...)
+
+[2014-07-16 20:31:18 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"]
+
+[2014-07-16 20:31:18 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"ce6dd68adec97bbf73f5da408c17511aca8840c5\"]
+
+[2014-07-16 20:31:18 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"ce6dd68adec97bbf73f5da408c17511aca8840c5..refs/heads/git-annex\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:31:18 CDT] call: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-ref\",\"refs/heads/git-annex\",\"ce6dd68adec97bbf73f5da408c17511aca8840c5\"]
+
+[2014-07-16 20:31:19 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"]
+
+[2014-07-16 20:31:19 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+
+[2014-07-16 20:31:19 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..ce6dd68adec97bbf73f5da408c17511aca8840c5\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:31:19 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..bfef6b84186d59431377343ab968e255db8c76fa\",\"--oneline\",\"-n1\"]
+
+[2014-07-16 20:31:19 CDT] feed: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"]
+
+[2014-07-16 20:31:19 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"refs/heads/git-annex\"]
+
+[2014-07-16 20:31:32 CDT] read: git [\"--git-dir=/Users/someuser/local_annex/.git\",\"--work-tree=/Users/someuser/local_annex\",\"-c\",\"core.bare=false\",\"ls-tree\",\"--full-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"numcopies.log\",\"schedule.log\",\"preferred-content.log\",\"required-content.log\",\"group-preferred-content.log\"]
+
+"""]]
diff --git a/doc/bugs/OSX_build_broken.mdwn b/doc/bugs/OSX_build_broken.mdwn
deleted file mode 100644
index a68531bec..000000000
--- a/doc/bugs/OSX_build_broken.mdwn
+++ /dev/null
@@ -1,13 +0,0 @@
-### Please describe the problem.
-
-The OSX webapp doesn't start on the current OSX 10.7.5 builds.
-
-### What steps will reproduce the problem?
-
-Download git-annex from http://downloads.kitenet.net/git-annex/OSX/current/10.7.5_Lion/git-annex.dmg and install it by copying it to Application. Try to launch it then. The result is a message in the system log saying "git-annex unknown command webapp" and then the usage information.
-
-### What version of git-annex are you using? On what operating system?
-
-The current version as downloaded from http://downloads.kitenet.net/git-annex/OSX/current/10.7.5_Lion/git-annex.dmg on OSX 10.7.5
-
-> OS Lion builds are no longer being made. [[done]] --[[Joey]]
diff --git a/doc/bugs/OSX_build_broken/comment_1_0b570aa6c58effeace2a989184c9c601._comment b/doc/bugs/OSX_build_broken/comment_1_0b570aa6c58effeace2a989184c9c601._comment
deleted file mode 100644
index 05079b2ae..000000000
--- a/doc/bugs/OSX_build_broken/comment_1_0b570aa6c58effeace2a989184c9c601._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.87"
- subject="comment 1"
- date="2013-12-15T19:31:39Z"
- content="""
-This should only affect Lion. Jimmy will need to install missing dependencies.
-
-In the meantime, I have reverted the lion build to the previous release, which I assume didn't have this problem. (Currently downloading that release my my archive, which git-annex says will take around 5 more minutes.)
-"""]]
diff --git a/doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__.mdwn b/doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__.mdwn
deleted file mode 100644
index ac5c66951..000000000
--- a/doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__.mdwn
+++ /dev/null
@@ -1,26 +0,0 @@
-**What steps will reproduce the problem?**
-
-Either double click on the app or from the terminal
-
- $ open /Applications/git-annex.app
-
-**What is the expected output? What do you see instead?**
-
-I'd expect to see git-annex run. "git-annex" doesn't run and what I see (in the terminal) is:
-
- LSOpenURLsWithRole() failed with error -10810 for the file /Applications/git-annex.app.
-
-**What version of git-annex are you using? On what operating system?**
-
-*git-annex*: 3.20121017
-
-*git-annex.app*: ???
-
-*OS*: OSX 10.6.8 64 bit
-
-
-**Please provide any additional information below.**
-
-[[!tag /design/assistant/OSX]]
-
-> This was fixed a while ago. [[done]] --[[Joey]]
diff --git a/doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_1_0dfa839f1ba689b23f811787515b8cff._comment b/doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_1_0dfa839f1ba689b23f811787515b8cff._comment
deleted file mode 100644
index 896ae26ce..000000000
--- a/doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_1_0dfa839f1ba689b23f811787515b8cff._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://a-or-b.myopenid.com/"
- ip="220.244.41.108"
- subject="comment 1"
- date="2012-10-28T06:46:40Z"
- content="""
-My best advice to anyone running into this is simply install using cabal. It works. :-)
-"""]]
diff --git a/doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_2_612b947eb5474f6d792a833e33105665._comment b/doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_2_612b947eb5474f6d792a833e33105665._comment
deleted file mode 100644
index 0732cbfcf..000000000
--- a/doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_2_612b947eb5474f6d792a833e33105665._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 2"
- date="2012-10-28T20:11:43Z"
- content="""
-I sort of got a feeling that this build might have issues on OSX 10.6, I create the OSX builds on 10.7.
-"""]]
diff --git a/doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_3_549b8bcae6f1f8b21932b734e32fbdd1._comment b/doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_3_549b8bcae6f1f8b21932b734e32fbdd1._comment
deleted file mode 100644
index c5ada3d1d..000000000
--- a/doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_3_549b8bcae6f1f8b21932b734e32fbdd1._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnKgoTWEDuAqxBT7LnQVNJBmI0wajSgORA"
- nickname="Martin"
- subject="Same on 10.8.2"
- date="2012-10-31T20:17:17Z"
- content="""
-I get the same error on OSX 10.8.2.
-"""]]
diff --git a/doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_4_23078dfea127fa3ef20696eb10ce964c._comment b/doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_4_23078dfea127fa3ef20696eb10ce964c._comment
deleted file mode 100644
index 6b0278fe8..000000000
--- a/doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_4_23078dfea127fa3ef20696eb10ce964c._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlfvsw_0TFUvMcHVBRw1D1UmAaOJ3VsNSU"
- nickname="chee"
- subject="comment 4"
- date="2012-11-16T03:14:50Z"
- content="""
-Same error here, 10.8.2
-
-https://snaek.org/resources/ff40b1c2fd9486614c7df72aaeca9755fb43d6ff.png
-"""]]
diff --git a/doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_5_7da5ef8325b8787bbf1c6e2c17b1142e._comment b/doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_5_7da5ef8325b8787bbf1c6e2c17b1142e._comment
deleted file mode 100644
index 2f7c1184b..000000000
--- a/doc/bugs/OSX_git-annex.app_error:__LSOpenURLsWithRole__40____41__/comment_5_7da5ef8325b8787bbf1c6e2c17b1142e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.6.49"
- subject="comment 5"
- date="2012-11-26T23:52:52Z"
- content="""
-The OSX app has been updated for today's release, and includes a lot of missing libraries. I don't understand this error message, but on the off chance it was caused by some of the missing libraries, it could conceviably be fixed. Your testing of it would be appreciated.
-"""]]
diff --git a/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp.mdwn b/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp.mdwn
deleted file mode 100644
index 3a93c3881..000000000
--- a/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp.mdwn
+++ /dev/null
@@ -1,31 +0,0 @@
-### Please describe the problem.
-
-If the assistant is not running, I can successfully open the git-annex application, which will trigger my browser to open a new tab with the assistant interface.
-
-However, once that has been done one time, there appears to be no way to get back to the assistant if the tab is closed. Attempting to open the application again while the assistant is running in the background results in nothing happening at all.
-
-### What steps will reproduce the problem?
-
-1. Open git-annex.app
-2. See assistant and then close the browser tab
-3. Open git-annex.app again
-4. Nothing happens
-
-### What version of git-annex are you using? On what operating system?
-
-Version 4.20130723-ge023649 on OS X 10.8.4.
-
-### Please provide any additional information below.
-
-From .git/annex/daemon.log:
-
-[[!format sh """
-[2013-07-28 00:01:08 CDT] main: starting assistant version 4.20130723-ge023649
-
-(scanning...) [2013-07-28 00:01:08 CDT] Watcher: Performing startup scan
-(started...)
-"""]]
-
-> [[done]]; I added the `&` to git-annex-shell.
-> Hopefully that does not cause any other unwanted behavior..
-> --[[Joey]]
diff --git a/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_1_2653fe701a1bb20254f3d6b90f10a43b._comment b/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_1_2653fe701a1bb20254f3d6b90f10a43b._comment
deleted file mode 100644
index 7982f30f2..000000000
--- a/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_1_2653fe701a1bb20254f3d6b90f10a43b._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkfHTPsiAcHEEN7Xl7WxiZmYq-vX7azxFY"
- nickname="Vincent"
- subject="Having trouble reproducing"
- date="2013-07-29T11:14:46Z"
- content="""
-I have the same platform (os/x 10.8.4) and git-annex revision (4.20130723-ge023649) but am unable to reproduce this.
-I may have seen it in the last couple of months (http://git-annex.branchable.com/bugs/wishlist:_simple_url_for_webapp/) but it now does not seem to be affecting me; joey's prescription works.
-
-Additional info:
-
-If I stop the daemon via the webapp menu, close the tab and start again via the app icon (in the Dock), I get the tab opening as expected.
-
-Sometimes, if I have the assistant in an open tab and doubleclick the app icon again, I get another tab with the assistant in it and the same auth= string.
-Other times, I don't. It's unclear to me what the difference is. Possibly relevant - the time that I saw the second tab appear was when the existing tab was left over from the machine being in sleep mode, but it was definitely responding to mouse clicks etc (ie not a 'dead' page) and the daemon was still running in the background. After stopping and starting, I never saw the second tab instance appear again.
-
-Browser is chrome 28.0.1500.71.
-"""]]
diff --git a/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_2_d9ce701d077e40f39b142ce2cc570a3b._comment b/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_2_d9ce701d077e40f39b142ce2cc570a3b._comment
deleted file mode 100644
index 9f31c76d5..000000000
--- a/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_2_d9ce701d077e40f39b142ce2cc570a3b._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnaH44G3QbxBAYyDwy0PbvL0ls60XoaR3Y"
- nickname="Nigel"
- subject=".git/annex/webapp.html"
- date="2013-07-29T12:08:04Z"
- content="""
-after accidentally closing the webapp tab, I reopened the link from the above file and it seemed to work
-"""]]
diff --git a/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_3_14964ab68253dc1a8903d14a821b8b40._comment b/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_3_14964ab68253dc1a8903d14a821b8b40._comment
deleted file mode 100644
index 6f66fdb70..000000000
--- a/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_3_14964ab68253dc1a8903d14a821b8b40._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl-BU4KfFktO2-bqaFmlArHta0Oy7zJrCs"
- nickname="J. Ryan"
- subject="Thanks!"
- date="2013-07-29T14:44:42Z"
- content="""
-I was unaware of both `git-annex-webapp` command as well as the `webapp.html` file it appears to open, so now I have two approaches to get back into the webapp.
-
-It does seem like it would be nice if future double-clicks on the app itself triggered the page to open, but at least now I have some way to get there.
-"""]]
diff --git a/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_4_4a579e9a13305ab4157f4b3eba46b92d._comment b/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_4_4a579e9a13305ab4157f4b3eba46b92d._comment
deleted file mode 100644
index e8337926f..000000000
--- a/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_4_4a579e9a13305ab4157f4b3eba46b92d._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.21"
- subject="comment 4"
- date="2013-07-30T18:06:05Z"
- content="""
-There's clearly something not quite right with how the program is started on OSX. I've had reports about the app icon \"bouncing\" for a long time, and now this.
-
-Since I do not own a Mac, and only have VNC access to a Mac desktop one for about 1 hour a week (and that's pretty slow), doing anything to improve this is quite a low priority background task for me.
-
-It seems that, as a non-Cocoa application, there are only a couple of behaviors that git-annex could have that play into this.
-
-Perhaps the problem is that if the git-annex assistant daemon is not already running (it's supposed to autostart on login, but this may not be working, or perhaps git-annex has only just been installed and has not started yet), git-annex-webapp runs the daemon, and keeps it running, in the foreground. Perhaps this is interpreted by the GUI as an app that has not finished starting up, or as an app that is already running so it does not re-run it when the icon is clicked on again (which would run git-annex webapp and have it open a new browser window). This should be easy to play around with, by just editing the `git-annex-webapp` shell script. For example, adding a \"&\" at the end of the last line in the file would make it instead run in the background.
-
-Or, the problem might be with the .plist file for the app. Perhaps there's some change that could be made to it that would clue OSX in on how git-annex works.
-"""]]
diff --git a/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_5_2a710960dc3a177ce62ef92f8546c496._comment b/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_5_2a710960dc3a177ce62ef92f8546c496._comment
deleted file mode 100644
index f3505ba60..000000000
--- a/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_5_2a710960dc3a177ce62ef92f8546c496._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl-BU4KfFktO2-bqaFmlArHta0Oy7zJrCs"
- nickname="J. Ryan"
- subject="comment 5"
- date="2013-07-30T18:44:00Z"
- content="""
-Joey: Success! I was able to get things working properly by backgrounding the app by adding `&` at the end of `git-annex-webapp` like you suggested.
-
-After doing that, I am able to relaunch the OS X app as many times as I want, and each time I get a new tab in my browser as desired.
-
-I guess if it's left in the foreground, OS X thinks \"there's already an instance of that app running\" and does nothing. If it were a GUI app, it would focus the GUI app in that case, but with a shell script there's nothing really for it to do, so that sort of explains the behavior.
-"""]]
diff --git a/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_6_a4ad73530cd0f6621bcc6394d5f39af7._comment b/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_6_a4ad73530cd0f6621bcc6394d5f39af7._comment
deleted file mode 100644
index a5f2d4fb1..000000000
--- a/doc/bugs/OS_X_10.8:_Can__39__t_reopen_webapp/comment_6_a4ad73530cd0f6621bcc6394d5f39af7._comment
+++ /dev/null
@@ -1,41 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkfHTPsiAcHEEN7Xl7WxiZmYq-vX7azxFY"
- nickname="Vincent"
- subject="seems to work"
- date="2013-07-31T09:37:36Z"
- content="""
-I tried this as well.
-
- % diff -u /Applications/git-annex.app/Contents/MacOS/git-annex-shell{.old,}
- --- /Applications/git-annex.app/Contents/MacOS/git-annex-shell.old 2013-07-31 19:32:28.000000000 +1000
- +++ /Applications/git-annex.app/Contents/MacOS/git-annex-shell 2013-07-23 14:12:36.000000000 +1000
- @@ -22,4 +22,4 @@
- export GIT_ANNEX_APP_BASE
- fi
-
- -\"$base/runshell\" git-annex-shell
- +\"$base/runshell\" git-annex-shell \"$@\"
-
- % ps ax|grep git|grep -v grep |wc
- 0 0 0
-
- <click the gui app icon>
- <a new browser tab opens, running the assistant>
- % ps ax|grep git |grep -v grep
- 33124 ?? S 0:00.40 git-annex webapp -psn_0_31972988
- 33133 ?? S 0:00.00 git --git-dir=/Users/me/annex/.git --work-tree=/Users/me/annex cat-file --batch
- 33162 ?? S 0:00.00 git --git-dir=/Users/me/annex/.git --work-tree=/Users/me/annex cat-file --batch
- 33174 ?? S 0:00.00 git --git-dir=/Users/me/annex/.git --work-tree=/Users/me/annex cat-file --batch
- 33177 ?? S 0:00.00 git --git-dir=/Users/me/annex/.git --work-tree=/Users/me/annex check-attr -z --stdin annex.backend annex.numcopies --
-
- <click the gui app icon again>
- <a new browser tab opens, running the assistant. the original remains.>
- % ps ax|grep git |grep -v grep
- 33124 ?? S 0:00.46 git-annex webapp -psn_0_31972988
- 33133 ?? S 0:00.00 git --git-dir=/Users/me/annex/.git --work-tree=/Users/me/annex cat-file --batch
- 33162 ?? S 0:00.00 git --git-dir=/Users/me/annex/.git --work-tree=/Users/me/annex cat-file --batch
- 33174 ?? S 0:00.00 git --git-dir=/Users/me/annex/.git --work-tree=/Users/me/annex cat-file --batch
- 33177 ?? S 0:00.00 git --git-dir=/Users/me/annex/.git --work-tree=/Users/me/annex check-attr -z --stdin annex.backend annex.numcopies --
-
-HTH
-"""]]
diff --git a/doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple.mdwn b/doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple.mdwn
deleted file mode 100644
index 6d6df52a5..000000000
--- a/doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple.mdwn
+++ /dev/null
@@ -1,67 +0,0 @@
-### Please describe the problem.
-Internal Server Error when setting up new annex and git push.default set to simple.
-
-### What steps will reproduce the problem?
-git v1.8.2.1 installed on mac os x 10.8.3 via brew
-
-Set push.default = simple (for 2.0-style push handling)
-Point git-annex-assistant at a directory.
-
-### What version of git-annex are you using? On what operating system?
-git-annex version 4.20130422-gb9341fd (from annex-assistant's footer)
-git version 1.8.2.1
-Mac OS X 10.8.3
-
-### Please provide any additional information below.
-
-Changing the push.default to "matching"
-
-The error message as shown was:
-
-Internal Server Error
-git init failed!
-Output:
-error: Malformed value for push.default: simple
-error: Must be one of nothing, matching, tracking or current.
-fatal: bad config file line 22 in /Users/nhyde/.gitconfig
-
-My .gitconfig is as follows:
-
-[user]
- email = nhyde@example.com
- #email = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- name = Nathan Hyde
-[alias]
- st = status
- ci = commit
- br = branch
- co = checkout
- df = diff
- lg = log -p
- who = shortlog -s --
- fs = flow feature start
- ff = flow feature finish
-[color]
- ui = true
-[core]
- excludesfile = /Users/nhyde/.gitignore_global
- ignorecase = false
- editor = vim
-[push]
- default = matching
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/debug.log
-
-
-# End of transcript or log.
-"""]]
-
-> Closing this because all autobuilders have been upgraded
-> to a more recent version of git. done --[[Joey]]
->> Reopened, because the Linux autobuilds have been downgraded to Debian
->> stable and have this problem again. --[[Joey]]
-
->>> Closing again! Autobuilders all run unstable and will have a current
->>> git. [[done]] --[[Joey]]
diff --git a/doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_1_971224d2c0c0ce8d4530b1991508f849._comment b/doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_1_971224d2c0c0ce8d4530b1991508f849._comment
deleted file mode 100644
index 2d5bb923b..000000000
--- a/doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_1_971224d2c0c0ce8d4530b1991508f849._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-05-13T19:02:38Z"
- content="""
-I can't think of a way to make the assistant detect that `~/.gitconfig` contains settings not supported by the version of git bundled with git-annex. Even if I could detect it, what could it do? It could perhaps prevent the config file being used by git-annex, but that could have other unwanted consequences.
-
-An error message like this seems about as good as this situation can be handled. However, the version of git bundled with git-annex should be kept up-to-date to prevent this kind of problem as much as possible. I don't currently have a good way to ensure that happens; it takes whatever version of git is installed on the build system.
-
-I'm going to try to get the autobuilders all updated to git 1.8.2, at least.
-"""]]
diff --git a/doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_2_6866f96277dbe83a8aadcdeb426b6750._comment b/doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_2_6866f96277dbe83a8aadcdeb426b6750._comment
deleted file mode 100644
index fc4f16500..000000000
--- a/doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_2_6866f96277dbe83a8aadcdeb426b6750._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 2"
- date="2013-05-13T19:08:09Z"
- content="""
-Done for both Linux autobuilds. OSX still needs updating; emailed the owners of those builds.
-"""]]
diff --git a/doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_3_eaed9b5532e30e401f50193a72b98310._comment b/doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_3_eaed9b5532e30e401f50193a72b98310._comment
deleted file mode 100644
index bee277aa6..000000000
--- a/doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_3_eaed9b5532e30e401f50193a72b98310._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmTNrhkVQ26GBLaLD5-zNuEiR8syTj4mI8"
- nickname="Juan"
- subject="Still happening in the linux autobuild (08/22/2013)"
- date="2013-08-23T02:04:42Z"
- content="""
-I've seen that git-annex for linux is still coming with git 1.7, which causes problems with my installed git (1.8.1.2).
-Wasn't that corrected in autobuilds?
-Thanks in advance.
-Keep up the good work.
-Regards,
- Juan
-"""]]
diff --git a/doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_4_1fab407f3823ce8cec87f5df55e49f8c._comment b/doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_4_1fab407f3823ce8cec87f5df55e49f8c._comment
deleted file mode 100644
index 2c9c33c8e..000000000
--- a/doc/bugs/Older_version_of_git_causes_Internal_Server_Error_when_push.default___61___simple/comment_4_1fab407f3823ce8cec87f5df55e49f8c._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.63"
- subject="comment 4"
- date="2013-08-23T17:41:32Z"
- content="""
-It was done for the autobuilds, but then I switched them to build using Debian stable, which still has git 1.7, and there is not currently a backport of a newer git to stable for me to use.
-"""]]
diff --git a/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__.mdwn b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__.mdwn
new file mode 100644
index 000000000..d7788fa93
--- /dev/null
+++ b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__.mdwn
@@ -0,0 +1,93 @@
+### Please describe the problem.
+
+Following steps from http://git-annex.branchable.com/assistant/quickstart/ does not get past the first screen.
+
+### What steps will reproduce the problem?
+
+* On a nearly fresh Lubuntu system, nearly fresh account, Lubuntu session, run `git-annex` from the start menu.
+* Opens firefox, in `Create a git-annex repository` select my `~/Documents` folder, press `Make Repository`.
+
+* Expected: a new, different page opens.
+* Observed: the same page opens, only difference the path displayed is `/home/mylogin/Documents`. Pressing `Make Repository` again shows the same page again.
+
+I couldn't find any logs at the time. Now I see that they are in .git/annex/daemon.log but content from that time is already gone.
+
+### What version of git-annex are you using? On what operating system?
+
+A fresh Ubuntu 14.04 (actually Lubuntu but this shouldn't change anything, right ?), create a user, login.
+
+
+ LC_ALL=C apt-cache policy git-annex
+ git-annex:
+ Installed: 5.20140412ubuntu1
+ Candidate: 5.20140412ubuntu1
+ Version table:
+ *** 5.20140412ubuntu1 0
+ 500 http://fr.archive.ubuntu.com/ubuntu/ trusty/universe i386 Packages
+ 100 /var/lib/dpkg/status
+
+
+### Please provide any additional information below.
+
+[[!format sh """
+# No command line in bug occurrence. This is the transcript of the workaround I found.
+# Actually, the PC was rebooted then I went command line.
+cd ~/Documents
+git status
+fatal: This operation must be run in a work tree
+# oh I see it's a bare repo
+git annex add .
+add (my file names... one line for each) ok
+(Recording state in git...)
+
+Now the webapp seems to run okay, I can see many pages, schedule checks, etc.
+
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+-> Ok but log shows only events after I manually dit git annex add.
+
+[2014-06-08 14:28:46 CEST] main: starting assistant version 5.20140412ubuntu1
+[2014-06-08 14:28:46 CEST] Cronner: You should enable consistency checking to protect your data.
+
+ dbus failed; falling back to mtab polling (ClientError {clientErrorMessage = "runClient: unable to determine DBUS address", clientErrorFatal = True})
+(scanning...) [2014-06-08 14:28:46 CEST] Watcher: Performing startup scan
+(started...) [2014-06-08 14:28:47 CEST] Committer: Adding (myfiles)
+
+add (my files...) ok
+[2014-06-08 14:32:51 CEST] Committer: Committing changes to git
+[2014-06-08 14:34:12 CEST] Committer: Committing changes to git
+[2014-06-08 14:34:13 CEST] Committer: Adding (myfiles)
+ok
+(Recording state in git...)
+(Recording state in git...)
+(Recording state in git...)
+(Recording state in git...)
+(Recording state in git...)
+add (myfile) ok
+add (myfile) [2014-06-08 14:34:13 CEST] Committer: Committing changes to git
+[2014-06-08 14:42:48 CEST] Cronner: Consistency check in progress
+fsck (myfile) (checksum...)
+ok
+
+# End of transcript or log.
+"""]]
+
+
+
+# Question:
+
+ cat /etc/xdg/autostart/git-annex.desktop
+ [Desktop Entry]
+ Type=Application
+ Version=1.0
+ Name=Git Annex Assistant
+ Comment=Autostart
+ Terminal=false
+ Exec=/usr/bin/git-annex assistant --autostart
+ Categories=
+
+Should there be a git-annex process whenever I log in even if I don't launch the webapp ?
+I can check that on next login.
+
+At the moment there is "git-annex webapp" and several child processes.
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_1_7508685b6f676c72e316642b80e40ee8._comment b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_1_7508685b6f676c72e316642b80e40ee8._comment
new file mode 100644
index 000000000..e92e1b100
--- /dev/null
+++ b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_1_7508685b6f676c72e316642b80e40ee8._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-06-09T18:57:25Z"
+ content="""
+It sounds rather like the webapp is failing to create the repository. Although I would expect for it to show an error message in red beneath the repository path. OTOH, it also sounds like something (either the webapp or eg a manual git-annex run) set up a git-annex repository in ~/Documents.
+
+git-annex will be started automatically on login as long as `~/.config/git-annex/autostart` lists a repository to use. If that file exists and contains ~/Documents then we'll know that the webapp successfully set up the repository.
+"""]]
diff --git a/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_2_c4dd12ea578d1f07464e1b9d68ec96cf._comment b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_2_c4dd12ea578d1f07464e1b9d68ec96cf._comment
new file mode 100644
index 000000000..a94d0c13a
--- /dev/null
+++ b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_2_c4dd12ea578d1f07464e1b9d68ec96cf._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm7eqCMh_B7mxE0tnchbr0JoYu11FUAFRY"
+ nickname="Stéphane"
+ subject="comment 2"
+ date="2014-06-09T20:34:55Z"
+ content="""
+> It sounds rather like the webapp is failing to create the repository. Although I would expect for it to show an error message in red beneath the repository path.
+
+No message in red at any time.
+
+> OTOH, it also sounds like something (either the webapp or eg a manual git-annex run) set up a git-annex repository in ~/Documents.
+
+There was none before the webapp.
+After the webapp failure, there was one, but without any file.
+Only after I manually did git annex add, it looked \"unlocked\".
+
+> git-annex will be started automatically on login as long as ~/.config/git-annex/autostart lists a repository to use. If that file exists and contains ~/Documents then we'll know that the webapp successfully set up the repository.
+
+Can't check now, the machine is off. Should check soon. Thanks.
+"""]]
diff --git a/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_3_8687c1d1c44d88a8ac13208273565d6c._comment b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_3_8687c1d1c44d88a8ac13208273565d6c._comment
new file mode 100644
index 000000000..4e497e240
--- /dev/null
+++ b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_3_8687c1d1c44d88a8ac13208273565d6c._comment
@@ -0,0 +1,37 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm7eqCMh_B7mxE0tnchbr0JoYu11FUAFRY"
+ nickname="Stéphane"
+ subject="No git-annex process."
+ date="2014-06-11T17:55:56Z"
+ content="""
+> It sounds rather like the webapp is failing to create the repository. Although I would expect for it to show an error message in red beneath the repository path. OTOH, it also sounds like something (either the webapp or eg a manual git-annex run) set up a git-annex repository in ~/Documents.
+
+As told before, there was definitely no git repository there before the webapp tried to create one.
+
+> git-annex will be started automatically on login as long as ~/.config/git-annex/autostart lists a repository to use. If that file exists and contains ~/Documents then we'll know that the webapp successfully set up the repository.
+
+There exists a ~/.config/git-annex/autostart containing one line, the correct /home/mylogin/Documents path to the folder.
+
+There is no process with git or annex in its name when user logs on his desktop session.
+
+
+ $ grep . $(dpkg -L git-annex | grep -i desktop)
+ /usr/share/applications/git-annex.desktop:[Desktop Entry]
+ /usr/share/applications/git-annex.desktop:Type=Application
+ /usr/share/applications/git-annex.desktop:Version=1.0
+ /usr/share/applications/git-annex.desktop:Name=Git Annex
+ /usr/share/applications/git-annex.desktop:Comment=Track and sync the files in your Git Annex
+ /usr/share/applications/git-annex.desktop:Terminal=false
+ /usr/share/applications/git-annex.desktop:Exec=/usr/bin/git-annex webapp
+ /usr/share/applications/git-annex.desktop:Icon=git-annex
+ /usr/share/applications/git-annex.desktop:Categories=Network;FileTransfer;
+ /etc/xdg/autostart/git-annex.desktop:[Desktop Entry]
+ /etc/xdg/autostart/git-annex.desktop:Type=Application
+ /etc/xdg/autostart/git-annex.desktop:Version=1.0
+ /etc/xdg/autostart/git-annex.desktop:Name=Git Annex Assistant
+ /etc/xdg/autostart/git-annex.desktop:Comment=Autostart
+ /etc/xdg/autostart/git-annex.desktop:Terminal=false
+ /etc/xdg/autostart/git-annex.desktop:Exec=/usr/bin/git-annex assistant --autostart
+ /etc/xdg/autostart/git-annex.desktop:Categories=
+
+"""]]
diff --git a/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_4_62be3dd4092b15cdf85cf9a231b2863a._comment b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_4_62be3dd4092b15cdf85cf9a231b2863a._comment
new file mode 100644
index 000000000..748b57df5
--- /dev/null
+++ b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_4_62be3dd4092b15cdf85cf9a231b2863a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 4"
+ date="2014-06-11T20:09:14Z"
+ content="""
+What happens if you run `git-annex assistant --autostart` ?
+"""]]
diff --git a/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_5_cca4905426a3e01da6e12be855c7a418._comment b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_5_cca4905426a3e01da6e12be855c7a418._comment
new file mode 100644
index 000000000..50b6e5dfa
--- /dev/null
+++ b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_5_cca4905426a3e01da6e12be855c7a418._comment
@@ -0,0 +1,27 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm7eqCMh_B7mxE0tnchbr0JoYu11FUAFRY"
+ nickname="Stéphane"
+ subject="Can't reproduce"
+ date="2014-06-30T20:06:30Z"
+ content="""
+I tried to reproduce the bug on another account on the same machine, same LXDE environment.
+The bug did not occur again.
+
+> What happens if you run `git-annex assistant --autostart` ?
+
+To answer that, I went back to the first account. Just logging in.
+The following git-related processes are automatically launched without running `git-annex assistant --autostart`.
+
+ git-annex assistant --startdelay=5s
+ git --git-dir=/home/somelogin/Documents/.git --work-tree=/home/somelogin/Documents -c core.bare=false cat-file --batch
+ git --git-dir=/home/somelogin/Documents/.git --work-tree=/home/somelogin/Documents -c core.bare=false cat-file --batch
+ git --git-dir=/home/somelogin/Documents/.git --work-tree=/home/somelogin/Documents -c core.bare=false check-ignore -z --stdin --verbose --non-matching
+ git --git-dir=/home/somelogin/Documents/.git --work-tree=/home/somelogin/Documents -c core.bare=false check-attr -z --stdin annex.backend annex.numcopies --
+
+So, somehow things went back in order by themselves ?
+
+There were quite a bunch of software upgrades from Ubuntu, including `lxsession`. Perhaps something was wrong in handling autostart desktop files ?
+
+Since things appear to work now, should we close the bug ?
+
+"""]]
diff --git a/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_6_ae2ca07169321c4a51b7e8e581fda5e2._comment b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_6_ae2ca07169321c4a51b7e8e581fda5e2._comment
new file mode 100644
index 000000000..6349de01e
--- /dev/null
+++ b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_6_ae2ca07169321c4a51b7e8e581fda5e2._comment
@@ -0,0 +1,72 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm7eqCMh_B7mxE0tnchbr0JoYu11FUAFRY"
+ nickname="Stéphane"
+ subject="Cconfirmed it was a LXDE issue, now fixed."
+ date="2014-07-03T09:58:24Z"
+ content="""
+Since this is a little strange, I just looked again at the machine.
+Your software attracts archivist kind of git-annex user, so don't be surprise that I kept logs of the machine.
+
+Short answer: **confirmed it was a LXDE issue, now fixed**.
+
+## From what date has git-annex started to work ?
+
+ git log | grep Date:
+
+ (many other lines...)
+ Date: Mon Jun 30 21:43:49 2014 +0200
+ Date: Mon Jun 30 21:42:07 2014 +0200
+ Date: Mon Jun 30 21:38:22 2014 +0200
+ Date: Sun Jun 8 14:34:13 2014 +0200
+ Date: Sun Jun 8 14:28:48 2014 +0200
+ Date: Sat Jun 7 16:21:06 2014 +0200
+
+So I tried to enable it on June 7, reported bug on June 8.
+The the machine was used on a regular basis but git-annex assistant was ineffective.
+Then it started working as expected from June 30th.
+
+## Any package install near June 30th ?
+
+Updates installed regularly.
+
+ cd /var/log ; zgrep -h \" installed.*\" dpkg.log* | grep '2014-0[67]-..' -o | sort | uniq -c
+
+ 2 2014-06-02
+ 3 2014-06-03
+ 3 2014-06-04
+ 3 2014-06-06
+ 49 2014-06-07
+ 3 2014-06-10
+ 8 2014-06-11
+ 45 2014-06-12
+ 7 2014-06-13
+ 2 2014-06-16
+ 42 2014-06-21
+ 20 2014-06-25
+ 3 2014-06-26
+ 23 2014-06-27
+ 13 2014-06-28
+ 6 2014-06-30
+ 15 2014-07-02
+ 3 2014-07-03
+
+Which packages were installed on 2014-06-30 ?
+
+ cd /var/log ; zgrep -h \" installed.*\" dpkg.log* | grep '2014-06-(29|30)' -E
+
+ 2014-06-30 17:29:15 status installed lxsession-data:all 0.4.9.2+git20140410-0ubuntu1.1
+ 2014-06-30 17:29:29 status installed desktop-file-utils:i386 0.22-1ubuntu1
+ 2014-06-30 17:29:30 status installed mime-support:all 3.54ubuntu1
+ 2014-06-30 17:29:30 status installed lxsession-default-apps:i386 0.4.9.2+git20140410-0ubuntu1.1
+ 2014-06-30 17:29:44 status installed lxsession-logout:i386 0.4.9.2+git20140410-0ubuntu1.1
+ 2014-06-30 17:29:58 status installed lxsession:i386 0.4.9.2+git20140410-0ubuntu1.1
+
+And indeed [0.4.9.2+git20140410-0ubuntu1.1 : “lxsession” package : Ubuntu](https://launchpad.net/ubuntu/+source/lxsession/0.4.9.2+git20140410-0ubuntu1.1)
+
+So it was indeed a lxde bug.
+
+[Diff text](http://launchpadlibrarian.net/177201602/lxsession_0.4.9.2%2Bgit20140410-0ubuntu1_0.4.9.2%2Bgit20140410-0ubuntu1.1.diff.gz)
+
+I added a comment there (#69) which may serve as a hint to other people having not updated their system. [Bug #1308348 “network settings indicator missing from panel” : Bugs : “lxsession” package : Ubuntu](https://bugs.launchpad.net/ubuntu/+source/lxsession/+bug/1308348)
+
+"""]]
diff --git a/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_7_ae5c434a9c94aa000b604095f52e3d3c._comment b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_7_ae5c434a9c94aa000b604095f52e3d3c._comment
new file mode 100644
index 000000000..4ae545407
--- /dev/null
+++ b/doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_7_ae5c434a9c94aa000b604095f52e3d3c._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 7"
+ date="2014-07-03T19:03:52Z"
+ content="""
+That lubuntu bug explains why git-annex would not autostart on login.
+
+However, that does not explain the original problem description, which was that the `Make Repository` button seemed to make a repository but not switch to the webapp running in that repository. In the case of making a new repository, the webapp is started in it by git-annex, not by the desktop autostart mechanism.
+
+Can you reproduce the original problem?
+
+
+"""]]
diff --git a/doc/bugs/On_Windows__44___annex_get_fails_with_HTTP_Remote__44___but_believes_it_has_succeeded..mdwn b/doc/bugs/On_Windows__44___annex_get_fails_with_HTTP_Remote__44___but_believes_it_has_succeeded..mdwn
deleted file mode 100644
index b34befcc0..000000000
--- a/doc/bugs/On_Windows__44___annex_get_fails_with_HTTP_Remote__44___but_believes_it_has_succeeded..mdwn
+++ /dev/null
@@ -1,180 +0,0 @@
-### Please describe the problem.
-On Windows, with a remote annex configured for HTTP access, attempting to annex get a file will not result in the content being downloaded, but will download a 404 error page as the file.
-
-### What steps will reproduce the problem?
-1. Create an annex (A1) on a Linux system.
-2. "git update-server-info"
-3. run an HTTP server with, a directory up. python -m SimpleHTTPServer
-4. on a Windows system, clone the annex with 'git clone http://remote_host/annex_dir/.git'
-5. "git annex get <file>"
-
-the resulting file will not have the correct content, but rather a 404 error page. In addition, subsequent attempts to "git annex get <file>" will fail, unless you "git annex drop <file>" first. (it appears to believe it correctly retrieved the file).
-
-
-### What version of git-annex are you using? On what operating system?
-Windows 7: 4.20140627-g8a36ec5 (from the git-annex download page)
-
-Debian Linux: 3.20120629 (from the package manager)
-
-### Please provide any additional information below.
-After some debugging, I believe the issue is related to the way git-annex uses curl. it appears that git-annex uses the return code of curl or wget to determine if a download was successful, but curl by default will return status code 0 on a 404, unless the -f option is used (which it is not).
-
-getting git-annex on windows to use wget works around the issue.
-
-
-
-###Full Transcript
-
-#### 1. setup of linux repo
-[[!format sh """
-test-git-annex@linux_host:~/test_annex$ git version
-git version 1.7.10.4
-test-git-annex@linux_host:~/test_annex$ git annex version
-git-annex version: 3.20120629
-local repository version: 3
-default repository version: 3
-supported repository versions: 3
-upgrade supported from repository versions: 0 1 2
-test-git-annex@linux_host: ~test-git-annex@linux_host:~$ mkdir test_annex
-test-git-annex@linux_host: ~test-git-annex@linux_host:~$ cd test_annex/
-test-git-annex@linux_host:~/test_annex$ git init .
-Initialized empty Git repository in /home/test-git-annex/test_annex/.git/
-test-git-annex@linux_host:~/test_annex$ annex init laptop
-init laptop ok
-(Recording state in git...)
-~/test_annextest-git-annex@linux_host:~/test_annex$ echo "this is some content" > file1.txt
-test-git-annex@linux_host:~/test_annex$ git annex add file1.txt
-add file1.txt (checksum...) ok
-(Recording state in git...)
-test-git-annex@linux_host:~/test_annex$ git commit -a -m "initial commit"
-[master (root-commit) 821c6c1] initial commit
- 1 file changed, 1 insertion(+)
- create mode 120000 file1.txt
-test-git-annex@linux_host:~/test_annex$ ls -l
-total 4
-lrwxrwxrwx 1 test-git-annex test-git-annex 178 Jul 6 11:33 file1.txt -> .git/annex/objects/J9/m6/SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729/SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729
-test-git-annex@linux_host:~/test_annex$ cat file1.txt
-this is some content
-"""]]
-
-#### 2. set up and run http server
-[[!format sh """
-test-git-annex@MrLinuxTablet:~/test_annex$ git update-server-info
-cd ..
-test-git-annex@MrLinuxTablet:~$ python -m SimpleHTTPServer
-Serving HTTP on 0.0.0.0 port 8000 ...
-
-"""]]
-
-#### 3. Set up Windows, clone repo, init annex
-
-[[!format sh """
-
-#Windows 7
-#download and install git from git-scm.com/download/win
-#Git-1.8.3-preview20130601.exe
-#on install, selecting "Run Git from the Windows Command Prompt"
-#on install, selecting "checkout as-is, commit as-is"
-#installs to C:\Program Files (x86)\Git
-#download and install git-annex from http://git-annex.branchable.com/install/
-#git-annex-installer.exe
-#need to right-click 'run as administrator', per reported bug (link here)
-#installs to C:\Program Files (x86)\Git\cmd
-#also installs some utilities, including wget.exe
-
-C:\Users\test-git-annex>git clone http://192.168.0.8:8000/test_annex/.git
-Cloning into 'test_annex'...
-
-C:\Users\test-git-annex>cd test_annex
-
-C:\Users\test-git-annex\test_annex>dir
- Volume in drive C has no label.
-
- Directory of C:\Users\test-git-annex\test_annex
-
-<DIR> .
-<DIR> ..
- 178 file1.txt
- 1 File(s) 178 bytes
-
-C:\Users\test-git-annex\test_annex>type file1.txt
-.git/annex/objects/J9/m6/SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729/SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729
-
-C:\Users\test-git-annex\test_annex>git annex init windows
-init windows
- Detected a crippled filesystem.
-
- Enabling direct mode.
-
- Detected a filesystem without fifo support.
-
- Disabling ssh connection caching.
-ok
-(Recording state in git...)
-
-"""]]
-
-####4. annex get
-
-[[!format sh """
-#copy Git\bin\libcurl.dll to Git\bin\libcurl-4.dll
-
-C:\Users\test-git-annex\test_annex>git annex -vd get file1.txt
-[<datetime>] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","ls-files","--cached","-z","--","file1.txt"]
-get file1.txt [<datetime>] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","show-ref","git-annex"]
-[<datetime>] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","show-ref","--hash","refs/heads/git-annex"]
-[<datetime>] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","log","refs/heads/git-annex..36508d74a05fd93daee965f2f73c977852e4b626","--oneline","-n1"]
-[<datetime>] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","log","refs/heads/git-annex..304263841906c0b4dda39d0fdbe54e4af4307cb8","--oneline","-n1"]
-(merging origin/git-annex into git-annex...)
-[<datetime>] chat: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","cat-file","--batch"]
-[<datetime>] feed: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","update-index","-z","--index-info"]
-[<datetime>] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","diff-index","--raw","-z","-r","--no-renames","-l0","--cached","304263841906c0b4dda39d0fdbe54e4af4307cb8"]
-[<datetime>] chat: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","hash-object","-t","blob","-w","--stdin","--no-filters"]
-[<datetime>] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","log","304263841906c0b4dda39d0fdbe54e4af4307cb8..refs/heads/git-annex","--oneline","-n1"]
-(Recording state in git...)
-[<datetime>] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","write-tree"]
-[<datetime>] chat: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","commit-tree","103a0273cf24deec587295845f761b172a63ea19","-p","refs/heads/git-annex","-p","304263841906c0b4dda39d0fdbe54e4af4307cb8"]
-[<datetime>] call: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","update-ref","refs/heads/git-annex","538f6b44a762be415ec6fef2b6644c10bc1f3780"]
-[<datetime>] call: curl ["-s","-L","-C","-","-#","-o","C:\\Users\\test-git-annex\\AppData\\Local\\Temp\\git-annex8156.tmp","http://192.168.0.8:8000/test_annex/.git/config"]
-[<datetime>] read: git ["config","--null","--list","--file","C:\\Users\\test-git-annex\\AppData\\Local\\Temp\\git-annex8156.tmp"]
-[<datetime>] call: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","config","remote.origin.annex-uuid","64000156-e66a-11e2-aa76-131bb0a453f3"]
-[<datetime>] read: git ["config","--null","--list"]
-(from origin...) [<datetime>] call: curl ["-L","-C","-","-#","-o","C:\\Users\\test-git-annex\\test_annex\\.git\\annex\\tmp\\SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729","http://192.168.0.8:8000/test_annex/.git/annex\\objects\\c96\\53e\\SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729\\SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729"]
-######################################################################## 100.0%
-ok
-[<datetime>] chat: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","hash-object","-w","--stdin-paths","--no-filters"]
-[<datetime>] feed: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","update-index","-z","--index-info"]
-[<datetime>] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","show-ref","--hash","refs/heads/git-annex"]
-(Recording state in git...)
-[<datetime>] read: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","write-tree"]
-[<datetime>] chat: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","commit-tree","b81dc8e53f4c02d433288d7f073be501d27c3648","-p","refs/heads/git-annex"]
-[<datetime>] call: git ["--git-dir=C:\\Users\\test-git-annex\\test_annex\\.git","--work-tree=C:\\Users\\test-git-annex\\test_annex","update-ref","refs/heads/git-annex","949181f4978c2654e156f1e4250f67135ddc2774"]
-
-C:\Users\test-git-annex\test_annex>git annex find .
-file1.txt
-
-C:\Users\test-git-annex\test_annex>type file1.txt
-<head>
-<title>Error response</title>
-</head>
-<body>
-<h1>Error response</h1>
-<p>Error code 404.
-<p>Message: File not found.
-<p>Error code explanation: 404 = Nothing matches the given URI.
-</body>
-"""]]
-
-#### http server output from above
-
-[[!format sh """
-192.168.0.2 - - [<datetime>] "GET /test_annex/.git/annex\objects\c96\53e\SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729\SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729 HTTP/1.1" 404 -
-192.168.0.2 - - [<datetime>] code 404, message File not found
-"""]]
-
-> This seems to be two distinct bugs. First, curl was not propigating the exit
-> status. I already fixed that.
->
-> Second, it's using DOS style path separators when constructing the url.
-> `http://192.168.0.8:8000/test_annex/.git/annex\\objects\\c96`
-> I've put in an (ugly) fix for that. [[done]] --[[Joey]]
diff --git a/doc/bugs/On_Windows__44___wget_is_not_used__44___even_if_available.mdwn b/doc/bugs/On_Windows__44___wget_is_not_used__44___even_if_available.mdwn
deleted file mode 100644
index 5420b986c..000000000
--- a/doc/bugs/On_Windows__44___wget_is_not_used__44___even_if_available.mdwn
+++ /dev/null
@@ -1,67 +0,0 @@
-### Please describe the problem.
-On Windows, with a remote repository configured for HTTP access, wget is never used, even if it's available in the system. curl is always used.
-
-### What steps will reproduce the problem?
-1. Set up an annex on a remote system, configure it for HTTP access, run an HTTP server.
-2. over HTTP, clone it to Windows
-3. "annex get -vd <file>"
-4. note that curl is used.
-
-
-### What version of git-annex are you using? On what operating system?
-Windows 7: 4.20140627-g8a36ec5 (from the git-annex download page)
-
-### Additional Info
-After some debugging, it appears the issue is that git-annex looks to see if the file 'wget' is available in any directory on the PATH. on windows, wget is installed as 'wget.exe', and the file 'wget' does not exist anywhere. creating a file named 'wget' works around the issue. (wget.exe appears to still be the file used)
-
-###Full Transcript
-1. remote annex is created on host 192.168.0.8, with file "file1.txt"
-[[!format sh """
-#Windows 7
-#download and install git from git-scm.com/download/win
-#Git-1.8.3-preview20130601.exe
-#on install, selecting "Run Git from the Windows Command Prompt"
-#on install, selecting "checkout as-is, commit as-is"
-#installs to C:\Program Files (x86)\Git
-#download and install git-annex from http://git-annex.branchable.com/install/
-#git-annex-installer.exe
-#need to right-click 'run as administrator', per reported bug (link here)
-#installs to C:\Program Files (x86)\Git\cmd
-#also installs some utilities, including wget.exe
-
-C:\Users\test-git-annex>git clone http://192.168.0.8:8000/test_annex/.git
-Cloning into 'test_annex'...
-
-C:\Users\test-git-annex>cd test_annex
-
-C:\Users\test-git-annex\test_annex>dir
- Volume in drive C has no label.
-
- Directory of C:\Users\test-git-annex\test_annex
-
-<DIR> .
-<DIR> ..
- 178 file1.txt
- 1 File(s) 178 bytes
-
-C:\Users\test-git-annex\test_annex>type file1.txt
-.git/annex/objects/J9/m6/SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729/SHA256-s21--6ed275e9e01c84a57fdd99d6af793c5d587d02e699cd2c28b32b7dc90f73e729
-
-C:\Users\test-git-annex\test_annex>git annex init windows
-init windows
- Detected a crippled filesystem.
-
- Enabling direct mode.
-
- Detected a filesystem without fifo support.
-
- Disabling ssh connection caching.
-ok
-(Recording state in git...)
-
-C:\Users\test-git-annex\test_annex> git annex get file.txt
-#fails, with error dialog box, indicating libcurl-4.dll is missing, indicating git-annex is trying to use curl.
-
-"""]]
-
-> I fixed this immediately after it was mentioned on IRC. [[done]] --[[Joey]]
diff --git a/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_1_3a3891c9d7ee808f6a71780cb628f23d._comment b/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_1_3a3891c9d7ee808f6a71780cb628f23d._comment
index a26db0870..70e7ba79d 100644
--- a/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_1_3a3891c9d7ee808f6a71780cb628f23d._comment
+++ b/doc/bugs/On_restart__44___most_repositories__44___including_original_one__44___gone./comment_1_3a3891c9d7ee808f6a71780cb628f23d._comment
@@ -4,7 +4,7 @@
subject="comment 1"
date="2013-09-12T21:29:39Z"
content="""
-The git-annex webapp displays a view from \"inside\" one git repsitory at a time. It seems to me that you have two or more local git repositories; one in ~/annex and one on a removable drive. The webapp is coming up viewing from inside your removable drive's repository. You can change the repository that the webapp views by going to the Repository menu in the upper-right corner and selecting Switch repository. The webapp will remember which repository it viewed last, and come back up showing that same repository.
+The git-annex webapp displays a view from \"inside\" one git repository at a time. It seems to me that you have two or more local git repositories; one in ~/annex and one on a removable drive. The webapp is coming up viewing from inside your removable drive's repository. You can change the repository that the webapp views by going to the Repository menu in the upper-right corner and selecting Switch repository. The webapp will remember which repository it viewed last, and come back up showing that same repository.
It's BTW an unusual configuration to have the git-annex assistant directly running on a removable drive as you seem to have done. You must have previously went to the Repository menu and selected \"Add another local repository\", and then added the removable drive, and then connected that repository up to your ~/annex repository. Which would explain why the webapp was last showing the repository on the removable drive. The more usual way to add a removable drive is to use the \"Add another repository\" button and select \"Removable drive\".
diff --git a/doc/bugs/Out_of_memory_error_in_fsck_whereis_find_and_status_cmds/comment_8_cf1f9d0be5da4ba874209d981ff8afc6._comment b/doc/bugs/Out_of_memory_error_in_fsck_whereis_find_and_status_cmds/comment_8_cf1f9d0be5da4ba874209d981ff8afc6._comment
new file mode 100644
index 000000000..976664a94
--- /dev/null
+++ b/doc/bugs/Out_of_memory_error_in_fsck_whereis_find_and_status_cmds/comment_8_cf1f9d0be5da4ba874209d981ff8afc6._comment
@@ -0,0 +1,38 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlVUq_c3-lrQBculOEUu3yjvdavE7JbvEI"
+ nickname="Stig"
+ subject="comment 8"
+ date="2014-07-25T10:02:53Z"
+ content="""
+\"git annex sync\" or \"git annex fsck\" gives me the same problem. This is an annex which has previously been running with the git annex assistant.
+
+Output is first:
+
+ $ git annex sync
+ (merging synced/git-annex into git-annex...)
+
+…then the workstation starts swapping, and after eating 16 GB RAM, and all of 16 GB swap, OOM killer komes for \"git\".
+
+The process which eats up all the memory is:
+
+ git --git-dir=/home/ssm/annex/.git --work-tree=/home/ssm/annex \
+ -c core.bare=false log \
+ 7bed443dc22961214f86e65aedb8861affd215d3..refs/heads/git-annex \
+ -n1 --pretty=%H
+
+I _think_ that since a \"-n1\" argument is given, it will only show the log for the last commit in the range, and one could specify \"refs/heads/git-annex\" instead of the range. With just \"refs/heads/git-annex\" instead of the range, it returns a reference instantly.
+
+The output of git count-objects is
+
+ $ git count-objects -H -v
+ count: 334758
+ size: 6.27 GiB
+ in-pack: 16600
+ packs: 1
+ size-pack: 1.70 MiB
+ prune-packable: 0
+ garbage: 0
+ size-garbage: 0 bytes
+
+…and there is 1043 files in the annex.
+"""]]
diff --git a/doc/bugs/Partial_direct__47__indirect_repo.mdwn b/doc/bugs/Partial_direct__47__indirect_repo.mdwn
deleted file mode 100644
index 11cf7a1e8..000000000
--- a/doc/bugs/Partial_direct__47__indirect_repo.mdwn
+++ /dev/null
@@ -1,24 +0,0 @@
-Setup:
-
-* Fresh install of Debian Wheezy on machines A & B, git-annex 4.20130227 pulled in from unstable
-* On both machines, clone old repository which contains both annexed files and a three small files checked straight into git
-
-Steps:
-
-* On both machines, use webapp to create `~/.config/git-annex/autostart` by just firing it up and typing in location of existing repository
-* Move a new file into B's annex, in a subdirectory that is preferred on both A & B
-
-Expected:
-
-* The new file is copied over to A and everything remains in indirect mode
-* Three files checked straight into git remain checked straight into git (see below for why this is a variant on [[bugs/Switching_between_direct_and_indirect_stomps_on___39__regular__39___git_files/]])
-
-Actual:
-
-* New file copied over but seems to be in direct mode, while all the other content that is present is still symlinked
-* Files checked into git converted to direct mode files too (can tell this has happened by following step:)
-* Typing `git annex indirect` on A & B shows conversion of precisely four files (three files originally checked into git and new file added to B ) back to indirect
-
-Thanks.
-
-> [[done]], webapp now avoids changing existing repos here. --[[Joey]]
diff --git a/doc/bugs/Partial_direct__47__indirect_repo/comment_1_42344fce051d759f95215c985e9d1135._comment b/doc/bugs/Partial_direct__47__indirect_repo/comment_1_42344fce051d759f95215c985e9d1135._comment
deleted file mode 100644
index 0d903a13d..000000000
--- a/doc/bugs/Partial_direct__47__indirect_repo/comment_1_42344fce051d759f95215c985e9d1135._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-03-12T11:23:47Z"
- content="""
-This can happen if your repository gets annex.direct=true set in its .git/config, without `git annex direct` having been run to truely put it into direct mode.
-
-The proof that this was the case is that `git annex indirect` did anything at all. The first thing `git annex indirect` does is check if it's in a direct mode repository. If not, it steps without doing anything, and without outputting anything.
-
-I think this was user error.
-"""]]
diff --git a/doc/bugs/Partial_direct__47__indirect_repo/comment_2_8ba64f2750d0ef4adf595674c723bc65._comment b/doc/bugs/Partial_direct__47__indirect_repo/comment_2_8ba64f2750d0ef4adf595674c723bc65._comment
deleted file mode 100644
index 96a12e96d..000000000
--- a/doc/bugs/Partial_direct__47__indirect_repo/comment_2_8ba64f2750d0ef4adf595674c723bc65._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 2"
- date="2013-03-12T11:27:30Z"
- content="""
-Oh, I see, you started up the webapp, and told it to make a repo that already existed. So it helpfully set its annex.direct, thinking it was a new repository.
-"""]]
diff --git a/doc/bugs/Partial_direct__47__indirect_repo/comment_3_bd4985864b7dcd70a609ca7bc2617e4a._comment b/doc/bugs/Partial_direct__47__indirect_repo/comment_3_bd4985864b7dcd70a609ca7bc2617e4a._comment
deleted file mode 100644
index 1a9e187cc..000000000
--- a/doc/bugs/Partial_direct__47__indirect_repo/comment_3_bd4985864b7dcd70a609ca7bc2617e4a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="spwhitton"
- ip="82.36.235.9"
- subject="comment 3"
- date="2013-03-12T11:37:50Z"
- content="""
-That's right--I don't think it should do that for existing respositories. I didn't realise it wasn't standard to use the webapp to recreate the autostart file.
-"""]]
diff --git a/doc/bugs/Permission_problem_in_second_user_account_on_Android.mdwn b/doc/bugs/Permission_problem_in_second_user_account_on_Android.mdwn
new file mode 100644
index 000000000..8b7308223
--- /dev/null
+++ b/doc/bugs/Permission_problem_in_second_user_account_on_Android.mdwn
@@ -0,0 +1,15 @@
+I get the following error message upon starting git-annex in a second user account on Android:
+
+ Falling back to hardcoded app location: cannot find expected files in /data/app-lib
+ git annex webapp
+ lib/lib.runshell.so: line 133: git: Permission denied
+
+ [Terminal session finished]
+
+The same version of git-annex works just fine for the primary user.
+(The primary user has root access which unfortunately can't be enabled for other user accounts.)
+
+### What version of git-annex are you using? On what operating system?
+
+ * git-annex: 5.20140710
+ * OS: CyanogenMod 10.1.3-p3110
diff --git a/doc/bugs/Permission_problem_in_second_user_account_on_Android/comment_1_4ac4f94354b6c5c4370f792689107ddc._comment b/doc/bugs/Permission_problem_in_second_user_account_on_Android/comment_1_4ac4f94354b6c5c4370f792689107ddc._comment
new file mode 100644
index 000000000..a4f56553c
--- /dev/null
+++ b/doc/bugs/Permission_problem_in_second_user_account_on_Android/comment_1_4ac4f94354b6c5c4370f792689107ddc._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 1"
+ date="2014-08-15T17:52:57Z"
+ content="""
+I'm afraid all I can do to help with this is to say that the git-annex Android app does not do anything I know of to prevent running the programs, such as git, that are included in it. If your user cannot access them, it must be your OS configuration preventing it.
+"""]]
diff --git a/doc/bugs/Permission_problem_in_second_user_account_on_Android/comment_2_ef775b5fceb4caf00227978318f73470._comment b/doc/bugs/Permission_problem_in_second_user_account_on_Android/comment_2_ef775b5fceb4caf00227978318f73470._comment
new file mode 100644
index 000000000..761bca635
--- /dev/null
+++ b/doc/bugs/Permission_problem_in_second_user_account_on_Android/comment_2_ef775b5fceb4caf00227978318f73470._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://inkwell.za.net/"
+ nickname="kwill"
+ subject="Confirmation"
+ date="2014-11-11T08:01:48Z"
+ content="""
+I can confirm this occurs for me on Android 4.4 with exactly the same symptoms: primary user account can install and run Git Annex (triggers repo setup, webapp opens), secondary user account can install, but gets this error when starting Git Annex (webapp does not open). Is there any additional info I can provide to resolve this?
+"""]]
diff --git a/doc/bugs/Permission_problem_in_second_user_account_on_Android/comment_3_2977076f0f4f26daa7d6a087d8af18b3._comment b/doc/bugs/Permission_problem_in_second_user_account_on_Android/comment_3_2977076f0f4f26daa7d6a087d8af18b3._comment
new file mode 100644
index 000000000..45700fda0
--- /dev/null
+++ b/doc/bugs/Permission_problem_in_second_user_account_on_Android/comment_3_2977076f0f4f26daa7d6a087d8af18b3._comment
@@ -0,0 +1,43 @@
+[[!comment format=mdwn
+ username="http://inkwell.za.net/"
+ nickname="kwill"
+ subject="Logfile with errors"
+ date="2015-01-06T11:43:12Z"
+ content="""
+Found the logfile for the attempted installation at `/storage/emulated/10/git-annex.home/git-annex-install.log`
+
+It looks like there's a problem quite early on. BTW this is on Android 4.4 running on a Nexus 7 (2012). Only modification is installation of F-Droid. Is it worth / possible to install the recent Android 5.0 build?
+
+ Installation starting to /data/data/ga.androidterm
+ abcdef_SOME_LONG_HEX_STRING
+ mv: can't rename '/data/data/ga.androidterm/bin': Permission denied
+ installing busybox
+ ln: /data/data/ga.androidterm/bin/busybox: Permission denied
+ installing git-annex
+ ln: /data/data/ga.androidterm/bin/git-annex: Permission denied
+
+ ... (more of the same)
+
+ busybox: /data/data/ga.androidterm/bin/[: Permission denied
+ busybox: /data/data/ga.androidterm/bin/[[: Permission denied
+ busybox: /data/data/ga.androidterm/bin/ar: Permission denied
+ busybox: /data/data/ga.androidterm/bin/arp: Permission denied
+
+ ... (more of the same)
+
+ busybox: /data/data/ga.androidterm/bin/zcat: Permission denied
+ tar: can't remove old file ./links/git-shell: Permission denied
+ tar: write: Broken pipe
+ cat: can't open '/data/data/ga.androidterm/links/git': Permission denied
+ rm: can't stat '/data/data/ga.androidterm/links/git': Permission denied
+ cat: can't open '/data/data/ga.androidterm/links/git-shell': Permission denied
+ rm: can't stat '/data/data/ga.androidterm/links/git-shell': Permission denied
+ cat: can't open '/data/data/ga.androidterm/links/git-upload-pack': Permission denied
+ rm: can't stat '/data/data/ga.androidterm/links/git-upload-pack': Permission denied
+ lib/lib.runshell.so: line 133: can't create /data/data/ga.androidterm/runshell: Permission denied
+ lib/lib.runshell.so: line 133: can't create /data/data/ga.androidterm/runshell: Permission denied
+ chmod: runshell: Operation not permitted
+ lib/lib.runshell.so: line 133: can't create /data/data/ga.androidterm/bin/trustedkeys.gpg: Permission denied
+ lib/lib.runshell.so: line 133: can't create /data/data/ga.androidterm/installed-version: Permission denied
+ Installation complete
+"""]]
diff --git a/doc/bugs/Photos___34__disappear__34___after_adding_a_remote_server_repository_on_Android.mdwn b/doc/bugs/Photos___34__disappear__34___after_adding_a_remote_server_repository_on_Android.mdwn
new file mode 100644
index 000000000..a72b22b63
--- /dev/null
+++ b/doc/bugs/Photos___34__disappear__34___after_adding_a_remote_server_repository_on_Android.mdwn
@@ -0,0 +1,24 @@
+### Please describe the problem.
+
+I have a very simple use case for Git Annex on Android : I want my photos to be transferred to my home server automatically, in a special "incoming photos" folder, where they eventually get classified into other folders or deleted. git-annex in installed on this server.
+
+However, adding a Remote server (ssh) repository on a Photos repository on Android results in a totally confusing situation where the files on the Android device are removed and transferred to a bare repository on the server. Getting out of this sticky situation requires some commandline-fu.
+
+### What steps will reproduce the problem?
+
+1. Install git-annex on Android
+2. Open git-annex from the apps menu
+3. Accept offer to create a Photos repository
+4. Add a "Remote server" server repository
+5. Wait a bit.
+6. "Uh oh."
+
+### What version of git-annex are you using? On what operating system?
+
+Using git-annex Android and Debian.
+
+### Please provide any additional information below.
+
+I thought that adding a remote server repository would result in two non-bare repositories, such as what the Local pairing mode achieves. However Local pairing is not available on Android. I assumed the remote server would function in the same manner, except that I entered the SSH connection information manually.
+
+> [[done]]; not a bug per comment --[[Joey]]
diff --git a/doc/bugs/Photos___34__disappear__34___after_adding_a_remote_server_repository_on_Android/comment_1_75b71bf556e54bbf503bb32d54445224._comment b/doc/bugs/Photos___34__disappear__34___after_adding_a_remote_server_repository_on_Android/comment_1_75b71bf556e54bbf503bb32d54445224._comment
new file mode 100644
index 000000000..fcd4566de
--- /dev/null
+++ b/doc/bugs/Photos___34__disappear__34___after_adding_a_remote_server_repository_on_Android/comment_1_75b71bf556e54bbf503bb32d54445224._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-10T17:15:51Z"
+ content="""
+I don't think this is a bug. By default, git-annex repos on android are
+configured to be in the "source" [[group|standard_groups]]. This means
+that, as soon as the files have reached some other repository, they're
+removed from the Android device. Which saves space.
+
+If you don't want this behavior, click on Edit for the android repositry
+in the webapp, and change to some other group, like "client".
+"""]]
diff --git a/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths.mdwn b/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths.mdwn
new file mode 100644
index 000000000..716c76f6c
--- /dev/null
+++ b/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths.mdwn
@@ -0,0 +1,24 @@
+This is a follow-up to [this
+qbug](http://git-annex.branchable.com/bugs/WORM_keys_differ_depending_on_working_dir_during_add/).
+Thank you for your fix there! However, if I understood correctly, you
+indicated in your reply that the current fix completely removes the
+relative path component from WORM keys. I gave some thought to this
+and believe not having the relative path encoded inside WORM keys
+makes key collisions (and accordingly data-loss) a very dire problem,
+while they are not of practical concern if the relative path is
+encoded.
+
+When relative paths are encoded within the key, a collision can only
+occur when a file in the same directory is annexed twice within the
+resolution of the mtime component inside the key (i.e., one second).
+As such, unless one adds files automatically with a period of < 1s,
+one can very much be certain that no collisions come up.
+
+Without relative paths, however, one could never be certain that
+adding a file will not result in data-loss.
+
+Instead of just using the basename, WORM keys could be kept stable by
+using the relative path and anchoring it to the root of the
+repository.
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_1_b37615636e685b60fab8ae1c4276d032._comment b/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_1_b37615636e685b60fab8ae1c4276d032._comment
new file mode 100644
index 000000000..71164b0bd
--- /dev/null
+++ b/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_1_b37615636e685b60fab8ae1c4276d032._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 1"
+ date="2014-08-15T17:32:15Z"
+ content="""
+I don't see much difference between (mtime, size, location) and (mtime, size) as far as entropy goes. Consider: A repository with all files in a single directory in the top level is going to have identical probabilities of collision either way. A less special case of a repository that typically has files added to it in a particular directory (\"inbox\", say), is again going to have identical probabilities of collision.
+
+If you're worried about such collisions, you should not be using WORM. I think that the documentation for it is pretty clear.
+
+If we really wanted to increase the entropy of worm, we could add a random number to the key, or perhaps the file's (original) inode number.
+"""]]
diff --git a/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_2_e8f011263bfa4c3c3d04494ea1c88523._comment b/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_2_e8f011263bfa4c3c3d04494ea1c88523._comment
new file mode 100644
index 000000000..90684d96c
--- /dev/null
+++ b/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_2_e8f011263bfa4c3c3d04494ea1c88523._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="78.48.163.229"
+ subject="comment 2"
+ date="2014-08-16T11:42:22Z"
+ content="""
+Hm, I don’t quite follow the remark on having everything in a single
+directory. Rather than saying that the relative path adds additional
+entropy, what I was aiming at is the file-system cannot have two
+alternate versions of one file name at the same path with the same
+mtime, and that’s why it occurred to me that encoding both path and
+mtime within the key doesn’t just increase the odds, but effectively
+_guarantees_ that there won’t be any collisions. Does this seem to
+hold up, or am I missing something? (Of course one can fudge the
+mtimes, but that’s something under the user’s control.)
+
+While a large repo with many files very likely has lots of distinct
+files with identical basename, mtime (in s.) and size, all these files
+with the same mtime must necessarily be located at different paths.
+
+"""]]
diff --git a/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_3_bda1e0d3569a6becf374d0e820219469._comment b/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_3_bda1e0d3569a6becf374d0e820219469._comment
new file mode 100644
index 000000000..54fe869c5
--- /dev/null
+++ b/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_3_bda1e0d3569a6becf374d0e820219469._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="78.48.163.229"
+ subject="comment 3"
+ date="2014-08-16T13:58:28Z"
+ content="""
+One scenario where the above guarantee would be violated is when one
+moves a new file of identical size, basename, and mtime, into a path
+where a key-colliding file has been kept before. Still, I’d consider
+this a scenario one could reasonably control for (especially in the
+archive usecase); plus, even without manual control such a
+move-induced collision would be much more unlikely than a collision of
+basenames only.
+
+"""]]
diff --git a/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_4_4241c05a0fa7ce597c75ff5992b71b89._comment b/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_4_4241c05a0fa7ce597c75ff5992b71b89._comment
new file mode 100644
index 000000000..a02b1deb6
--- /dev/null
+++ b/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_4_4241c05a0fa7ce597c75ff5992b71b89._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 4"
+ date="2014-08-18T18:39:33Z"
+ content="""
+> Rather than saying that the relative path adds additional entropy, what I was aiming at is the file-system cannot have two alternate versions of one file name at the same path with the same mtime
+
+True of a single filesystem, but not of a set of connected git repositories. :)
+
+So there are multiple scenarios when encoding the file path in the key doesn't help. The probabilities of these seem low, but perhaps not as low as the probability that there will be two differing files with the same name+size+mtime in the first place. It's not clear to me that it adds more than a false sense of security to change from basename to git filename.
+"""]]
diff --git a/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_5_8378cd8c03fabdaa300194b66c1ea53c._comment b/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_5_8378cd8c03fabdaa300194b66c1ea53c._comment
new file mode 100644
index 000000000..72bc4f8f4
--- /dev/null
+++ b/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_5_8378cd8c03fabdaa300194b66c1ea53c._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="78.48.163.229"
+ subject="comment 5"
+ date="2014-08-18T20:54:10Z"
+ content="""
+> True of a single filesystem, but not of a set of connected git repositories.
+
+That’s a good point. Might depend on the use case, though.
+
+> The probabilities of these seem low, but perhaps not as low as the probability that there will be two differing files with the same name+size+mtime in the first place.
+
+This one I’m not completely sure about. E.g., I have an annex with web pages mirrored from the web. Due to the crawler implementation, there are lots of «index.html» or «favicon.ico» with the same mtime (in particular when mtime is read with a 1 sec. precision). Files like favicon are often bitmaps of the same resolution and often have the same size due to this. Because there are file-formats where both size and basename are semantically pre-determined, there is zero entropy from these sources alone (also cf. «readme.txt»). The entropy of mtime alone is not really large, I suppose, and in some use-cases will also approach zero (think «initializing a repo by cp -r on a fast disk without preserving mtime). The relative path could make a huge difference there. I believe this argument is actually what worried me the most. Does it seem valid?
+
+Apart from entropy, there’s the non-probabilistic advantage we discussed (granted, with some limiting constraints which one has to assure for oneself). Granted, one might argue a hash would be the better way, but this is not always practical in every setup.
+"""]]
diff --git a/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_6_d3c9a1bee717b5b99f31be81150a3ec8._comment b/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_6_d3c9a1bee717b5b99f31be81150a3ec8._comment
new file mode 100644
index 000000000..d22ef3e0a
--- /dev/null
+++ b/doc/bugs/Possible_data-loss_if_WORM_keys_do_not_encode_relative_paths/comment_6_d3c9a1bee717b5b99f31be81150a3ec8._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.132"
+ subject="comment 6"
+ date="2014-09-11T18:41:45Z"
+ content="""
+Ok, those are good examples. I personally think it would be insane to use WORM in a repository in either of those cases, or really in almost any case where you do not have a strong degree of confidence that unique file contents have unique file names. If people are going to abuse WORM like that, it might be best to simply remove it. (Except I have quite a lot of WORMy disks.)
+
+I suppose I'll add the extra data, although I remain unconvinced that it is going to help anyone who should actually be using WORM.
+"""]]
diff --git a/doc/bugs/Possible_data_loss_-_git_status___39__typechange__39___and_direct_mode.mdwn b/doc/bugs/Possible_data_loss_-_git_status___39__typechange__39___and_direct_mode.mdwn
deleted file mode 100644
index 4a3329326..000000000
--- a/doc/bugs/Possible_data_loss_-_git_status___39__typechange__39___and_direct_mode.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-#### What steps will reproduce the problem?
-
-When moving to direct mode files get flagged in git as 'typechange'.
-
- md test-directmode; cd test-directmode ; git init; git annex init
- date > test.file ; git annex add test.file
- git commit -m "Initial commit"
- git status # All fine
- git annex direct
- git status # typechange: test.file
- git add test.file && git commit -m "looks like I should commit this"
- # And the symlink is now broken...
-
-#### What is the expected output? What do you see instead?
-
-Surprised to see the typechange status in git. Would not expect to see anything, however, if you `git add` and then commit you can get data loss. :-(
-
-
-#### What version of git-annex are you using? On what operating system?
-
-git-annex version: 3.20130114
-
-OS: OSX 10.6.8
-
-#### Please provide any additional information below.
-
-> This was the pre-commit hook, made it not run in direct mode. [[done]]
->
-> However, it's normal to see typechanged files in direct mode, and many
-> git commands that manipulate files in the working tree *can* result in
-> data loss. This is documented on [[direct_mode]].
-> --[[Joey]]
diff --git a/doc/bugs/Possible_data_loss_-_git_status___39__typechange__39___and_direct_mode/comment_1_84cb8c651584ec2887f6e1b7dc107190._comment b/doc/bugs/Possible_data_loss_-_git_status___39__typechange__39___and_direct_mode/comment_1_84cb8c651584ec2887f6e1b7dc107190._comment
deleted file mode 100644
index b06706374..000000000
--- a/doc/bugs/Possible_data_loss_-_git_status___39__typechange__39___and_direct_mode/comment_1_84cb8c651584ec2887f6e1b7dc107190._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://a-or-b.myopenid.com/"
- ip="203.45.2.230"
- subject="comment 1"
- date="2013-01-17T02:13:03Z"
- content="""
-Should g-a encourage users to *not* `git add` files with the typechange attribute?
-"""]]
diff --git a/doc/bugs/Possible_issues_with_git_1.7.10_and_newer___40__merge_command_now_asks_for_a_commit_message__34__.mdwn b/doc/bugs/Possible_issues_with_git_1.7.10_and_newer___40__merge_command_now_asks_for_a_commit_message__34__.mdwn
deleted file mode 100644
index 05024ffe9..000000000
--- a/doc/bugs/Possible_issues_with_git_1.7.10_and_newer___40__merge_command_now_asks_for_a_commit_message__34__.mdwn
+++ /dev/null
@@ -1,18 +0,0 @@
-running 'git annex sync' doesn't merge the branches as expected (from the
-limited testing I have done) with git 1.7.10, the behaviour of merge has
-changed, it now asks for a commit message. I would expect setting
-_GIT_MERGE_AUTOEDIT=no_ should resolve this issue.
-
-I had to manually do a merge (or set that variable) to get the branches
-back in sync again, this confused me a bit when git-annex watch was running
-in the background on a remote and it did not pick up the changes.
-
-> Yeah, I tend to miss these since the first thing I did when this
-> misfeature was being posted was to write a mail discouraging them from
-> doing it (sadly ignored), and then set in ~/.environment:
-
- # My time is more valuable than git's new, bad default
- GIT_MERGE_AUTOEDIT=no
- export GIT_MERGE_AUTOEDIT
-
-> Anyway, I've made sync run merge with --no-edit now. [[done]] --[[Joey]]
diff --git a/doc/bugs/Prevent_accidental_merges.mdwn b/doc/bugs/Prevent_accidental_merges.mdwn
index 3e30e0223..9947f7373 100644
--- a/doc/bugs/Prevent_accidental_merges.mdwn
+++ b/doc/bugs/Prevent_accidental_merges.mdwn
@@ -12,3 +12,5 @@ Yes, there is an argument to be made that this is too much hand-holding, but I s
> as it is to undo any other git commit, right? I quite like that git-annex
> no longer adds any clutter to the master branch, and would be reluctant
> to change that. --[[Joey]]
+
+[[wontfix|done]] --[[Joey]]
diff --git a/doc/bugs/Problem_setting_up_encrypted_repository_using_the_assistant_with___40__outside_of_git-annex__41___shared_pgp_key.mdwn b/doc/bugs/Problem_setting_up_encrypted_repository_using_the_assistant_with___40__outside_of_git-annex__41___shared_pgp_key.mdwn
new file mode 100644
index 000000000..1d4ea2105
--- /dev/null
+++ b/doc/bugs/Problem_setting_up_encrypted_repository_using_the_assistant_with___40__outside_of_git-annex__41___shared_pgp_key.mdwn
@@ -0,0 +1,387 @@
+### Please describe the problem.
+Using the assistant on two computers to setup a shared encrypted repository (while sharing the same pgp key) on a third computer leads to files not propagating between one and two.
+
+The first and second computer does not get changes done on the other. If new files are added on the first computer it appears as if everything works (no error messages) but the files never reach the second computer (and vice versa).
+
+
+### What steps will reproduce the problem?
+
+Three computers needed.
+
+* Computer A: Use the assistant to create a repository
+* Computer A: Use the assitant to setup a remote repository on Computer C (Add another repository - Remote server - Encrypt with GnuPG key/Encript repository with a new encryption key - Save changes)
+
+[At this point files propagate from A to C]
+
+* Computer A: Export the private and public gpg keys to files
+* Computer B: Import these private and public gpg files, fix trust to ultimate
+* Computer B: Use the assistant to create a repository
+* Computer B: Use the assitant to connect with the remote repository on Computer C (Add another repository - Remote server - Combine the repositories)
+
+[Files created on A before adding B now appear on B]
+
+[New files created on A do not appear on B, new files created on B do not appear on A. Files from A and B seem to propagate to C (the number of files/directories in the object sub directory on C goes up after adding files on A or B)]
+
+
+
+### What version of git-annex are you using? On what operating system?
+Computer A:
+[[!format sh """
+dirk@A:~$ lsb_release -a
+No LSB modules are available.
+Distributor ID: Ubuntu
+Description: Ubuntu 14.04.1 LTS
+Release: 14.04
+Codename: trusty
+dirk@A:~$ git-annex version
+git-annex version: 5.20140818-g10bf03a
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+dirk@A:~$
+
+dirk@A:~$ gpg --list-keys --list-options show-uid-validity
+/home/dirk/.gnupg/pubring.gpg
+-----------------------------
+pub 4096R/0A7AA2A4 2014-08-23
+uid [ultimate] dirk's git-annex encryption key
+
+dirk@A:~$ gpg --list-secret-keys --list-options show-uid-validity
+/home/dirk/.gnupg/secring.gpg
+-----------------------------
+sec 4096R/0A7AA2A4 2014-08-23
+uid dirk's git-annex encryption key
+
+dirk@A:~$
+"""]]
+
+Computer B:
+[[!format sh """
+dirk@B:~$ lsb_release -a
+No LSB modules are available.
+Distributor ID: Ubuntu
+Description: Ubuntu 14.04.1 LTS
+Release: 14.04
+Codename: trusty
+dirk@B:~$ git-annex version
+git-annex version: 5.20140818-g10bf03a
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+dirk@B:~$
+
+dirk@B:~$ gpg --list-keys --list-options show-uid-validity
+/home/dirk/.gnupg/pubring.gpg
+-----------------------------
+pub 4096R/0A7AA2A4 2014-08-23
+uid [ultimate] dirk's git-annex encryption key
+
+dirk@B:~$ gpg --list-secret-keys --list-options show-uid-validity
+/home/dirk/.gnupg/secring.gpg
+-----------------------------
+sec 4096R/0A7AA2A4 2014-08-23
+uid dirk's git-annex encryption key
+
+dirk@B:~$
+"""]]
+
+Computer C:
+[[!format sh """
+dirk@C:~$ lsb_release -a
+No LSB modules are available.
+Distributor ID: Debian
+Description: Debian GNU/Linux 7.6 (wheezy)
+Release: 7.6
+Codename: wheezy
+dirk@C:~$ git-annex version
+git-annex version: 5.20140717~bpo70+1
+build flags: Assistant Webapp Pairing S3 Inotify DBus XMPP Feeds Quvi TDFA
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
+remote types: git gcrypt S3 bup directory rsync web tahoe glacier ddar hook external
+dirk@C:~$
+"""]]
+
+### Please provide any additional information below.
+
+.git/annex/daemon.log - Computer A
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+[2014-08-23 15:15:01 CEST] main: starting assistant version 5.20140818-g10bf03a
+[2014-08-23 15:15:01 CEST] Cronner: You should enable consistency checking to protect your data.
+(scanning...) [2014-08-23 15:15:01 CEST] Watcher: Performing startup scan
+(started...)
+gpg: new configuration file `/home/dirk/.gnupg/gpg.conf' created
+gpg: WARNING: options in `/home/dirk/.gnupg/gpg.conf' are not yet active during this run
+
+Not enough random bytes available. Please do some other work to give
+the OS a chance to collect more entropy! (Need 235 more bytes)
+....+++++
+
+Not enough random bytes available. Please do some other work to give
+the OS a chance to collect more entropy! (Need 196 more bytes)
+.......+++++
+gpg: /home/dirk/.gnupg/trustdb.gpg: trustdb created
+gpg: key 0A7AA2A4 marked as ultimately trusted
+Generating public/private rsa key pair.
+Your identification has been saved in /tmp/git-annex-keygen.0/key.
+Your public key has been saved in /tmp/git-annex-keygen.0/key.pub.
+The key fingerprint is:
+7d:02:34:56:d4:86:b6:e5:82:b0:d9:4f:3b:51:b3:c7 dirk@A
+The key's randomart image is:
++--[ RSA 2048]----+
+| +ooo |
+| .o .o * |
+| =.o * + |
+| o oo= o E |
+| Soo+.. |
+| +o |
+| . |
+| |
+| |
++-----------------+
+(encryption setup) (hybrid cipher with gpg key 7815EA570A7AA2A4) gcrypt: Development version -- Repository format MAY CHANGE
+gpg: checking the trustdb
+gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
+gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
+gcrypt: Repository not found: ssh://dirk@git-annex-C-dirk_1022_annex/~/annex/
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Repository not found: ssh://dirk@git-annex-C-dirk_1022_annex/~/annex/
+gcrypt: Setting up new repository
+gcrypt: Remote ID is :id:00RaA3cNQu+nZDMERYMM
+gcrypt: Encrypting to: -r 7815EA570A7AA2A4
+gcrypt: Requesting manifest signature
+To gcrypt::ssh://dirk@git-annex-C-dirk_1022_annex/~/annex/
+ * [new branch] git-annex -> git-annex
+ok
+[2014-08-23 15:25:46 CEST] main: Syncing with C_annex
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Decrypting manifest
+gpg: Signature made Sat 23 Aug 2014 03:25:45 PM CEST using RSA key ID 0A7AA2A4
+gpg: Good signature from "dirk's git-annex encryption key"
+(Recording state in git...)
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Decrypting manifest
+gpg: Signature made Sat 23 Aug 2014 03:25:45 PM CEST using RSA key ID 0A7AA2A4
+gpg: Good signature from "dirk's git-annex encryption key"
+gcrypt: Encrypting to: -r 7815EA570A7AA2A4
+gcrypt: Requesting manifest signature
+To gcrypt::ssh://dirk@git-annex-C-dirk_1022_annex/~/annex/
+ * [new branch] git-annex -> synced/git-annex
+ * [new branch] annex/direct/master -> synced/master
+[2014-08-23 15:26:46 CEST] Pusher: Syncing with C_annex
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Decrypting manifest
+gpg: Signature made Sat 23 Aug 2014 03:25:49 PM CEST using RSA key ID 0A7AA2A4
+gpg: Good signature from "dirk's git-annex encryption key"
+Everything up-to-date
+[2014-08-23 15:34:01 CEST] Committer: Adding hhhhn.txt
+add hhhhn.txt ok
+add hhhhn.txt ok
+[2014-08-23 15:34:01 CEST] Committer: Committing changes to git
+(Recording state in git...)
+[2014-08-23 15:34:01 CEST] Pusher: Syncing with C_annex
+(Recording state in git...)
+gcrypt: Development version -- Repository format MAY CHANGE
+(gpg)
+GPGHMACSHA1--7a46226ea53e4043cb45e8df6a2382ac2696164e
+
+ 74 100% 0.00kB/s 0:00:00
+ 74 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1)
+[2014-08-23 15:34:01 CEST] Transferrer: Uploaded hhhhn.txt
+gcrypt: Decrypting manifest
+gpg: Signature made Sat 23 Aug 2014 03:33:27 PM CEST using RSA key ID 0A7AA2A4
+gpg: Good signature from "dirk's git-annex encryption key"
+gcrypt: WARNING:
+gcrypt: WARNING: Remote ID has changed!
+gcrypt: WARNING: from :id:00RaA3cNQu+nZDMERYMM
+gcrypt: WARNING: to :id:h/BFJbR+mE8CEkASZ/tx
+gcrypt: WARNING:
+gcrypt: Encrypting to: -r 7815EA570A7AA2A4
+gcrypt: Requesting manifest signature
+To gcrypt::ssh://dirk@git-annex-C-dirk_1022_annex/~/annex/
+ 85b70d6..e1d6871 annex/direct/master -> synced/master
+ + 99dc810...a7a89ff git-annex -> synced/git-annex (forced update)
+[2014-08-23 15:34:07 CEST] Pusher: Syncing with C_annex
+(Recording state in git...)
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Decrypting manifest
+gpg: Signature made Sat 23 Aug 2014 03:34:04 PM CEST using RSA key ID 0A7AA2A4
+gpg: Good signature from "dirk's git-annex encryption key"
+gcrypt: Encrypting to: -r 7815EA570A7AA2A4
+gcrypt: Requesting manifest signature
+To gcrypt::ssh://dirk@git-annex-C-dirk_1022_annex/~/annex/
+ a7a89ff..e68b5a9 git-annex -> synced/git-annex
+[2014-08-23 15:48:30 CEST] main: warning git-annex has been shut down
+# End of transcript or log.
+"""]]
+
+.git/annex/daemon.log - Computer B
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+[2014-08-23 15:30:11 CEST] main: starting assistant version 5.20140818-g10bf03a
+[2014-08-23 15:30:11 CEST] Cronner: You should enable consistency checking to protect your data.
+
+ dbus failed; falling back to mtab polling (ClientError {clientErrorMessage = "runClient: unable to determine DBUS address", clientErrorFatal = True})
+
+ No known network monitor available through dbus; falling back to polling
+(scanning...) [2014-08-23 15:30:11 CEST] Watcher: Performing startup scan
+(started...)
+Generating public/private rsa key pair.
+Your identification has been saved in /tmp/git-annex-keygen.0/key.
+Your public key has been saved in /tmp/git-annex-keygen.0/key.pub.
+The key fingerprint is:
+b5:c3:6b:af:fc:fe:82:f2:a6:f3:42:e9:50:4b:63:9e dirk@A
+The key's randomart image is:
++--[ RSA 2048]----+
+| |
+| |
+| . |
+| =o . |
+| =S=+ |
+| . E o |
+| + o. |
+| =oo.. |
+| .O=++o. |
++-----------------+
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Decrypting manifest
+gpg: Signature made Sat 23 Aug 2014 03:25:49 PM CEST using RSA key ID 0A7AA2A4
+gpg: checking the trustdb
+gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
+gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
+gpg: Good signature from "dirk's git-annex encryption key"
+gcrypt: Remote ID is :id:00RaA3cNQu+nZDMERYMM
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Decrypting manifest
+gpg: Signature made Sat 23 Aug 2014 03:25:49 PM CEST using RSA key ID 0A7AA2A4
+gpg: Good signature from "dirk's git-annex encryption key"
+gcrypt: Remote ID is :id:00RaA3cNQu+nZDMERYMM
+Receiving objects: 14% (1/7)
+Receiving objects: 28% (2/7)
+Receiving objects: 42% (3/7)
+Receiving objects: 57% (4/7)
+Receiving objects: 71% (5/7)
+Receiving objects: 85% (6/7)
+Receiving objects: 100% (7/7)
+Receiving objects: 100% (7/7), done.
+Receiving objects: 12% (1/8)
+Receiving objects: 25% (2/8)
+Receiving objects: 37% (3/8)
+Receiving objects: 50% (4/8)
+Receiving objects: 62% (5/8)
+Receiving objects: 75% (6/8)
+Receiving objects: 87% (7/8)
+Receiving objects: 100% (8/8)
+Receiving objects: 100% (8/8), done.
+From gcrypt::ssh://dirk@git-annex-C-dirk_1022_annex/~/annex
+ * [new branch] git-annex -> tmpgcryptremote/git-annex
+ * [new branch] synced/git-annex -> tmpgcryptremote/synced/git-annex
+ * [new branch] synced/master -> tmpgcryptremote/synced/master
+ * [new branch] master -> tmpgcryptremote/master
+(merging tmpgcryptremote/git-annex tmpgcryptremote/synced/git-annex into git-annex...)
+(Recording state in git...)
+(encryption update) (hybrid cipher with gpg key 7815EA570A7AA2A4) gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Decrypting manifest
+gpg: Signature made Sat 23 Aug 2014 03:25:49 PM CEST using RSA key ID 0A7AA2A4
+gpg: Good signature from "dirk's git-annex encryption key"
+gcrypt: Remote ID is :id:00RaA3cNQu+nZDMERYMM
+From gcrypt::ssh://dirk@git-annex-C-dirk_1022_annex/~/annex
+ * [new branch] git-annex -> C_annex/git-annex
+ * [new branch] synced/git-annex -> C_annex/synced/git-annex
+ * [new branch] synced/master -> C_annex/synced/master
+ * [new branch] master -> C_annex/master
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Decrypting manifest
+gpg: Signature made Sat 23 Aug 2014 03:25:49 PM CEST using RSA key ID 0A7AA2A4
+gpg: Good signature from "dirk's git-annex encryption key"
+gcrypt: Encrypting to: -r 7815EA570A7AA2A4
+gcrypt: Requesting manifest signature
+remote: error: denying non-fast-forward refs/heads/master (you should pull first)
+To ssh://dirk@git-annex-C-dirk_1022_annex/~/annex/
+ ! [remote rejected] refs/gcrypt/gitception+ -> master (non-fast-forward)
+error: failed to push some refs to 'ssh://dirk@git-annex-C-dirk_1022_annex/~/annex/'
+error: failed to push some refs to 'gcrypt::ssh://dirk@git-annex-C-dirk_1022_annex/~/annex/'
+ok
+[2014-08-23 15:31:36 CEST] main: Syncing with C_annex
+
+Automatic merge went well; stopped before committing as requested
+Already up-to-date!
+gcrypt: Development version -- Repository format MAY CHANGE
+[2014-08-23 15:31:37 CEST] Pusher: Syncing with C_annex
+(Recording state in git...)
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Decrypting manifest
+gcrypt: Repository not found: ssh://dirk@git-annex-C-dirk_1022_annex/~/annex/
+gcrypt: Setting up new repository
+gpg: Signature made Sat 23 Aug 2014 03:25:49 PM CEST using RSA key ID 0A7AA2A4
+gpg: Good signature from "dirk's git-annex encryption key"
+fatal: ambiguous argument 'refs/heads/synced/master..refs/remotes/C_annex/synced/master': unknown revision or path not in the working tree.
+Use '--' to separate paths from revisions, like this:
+'git <command> [<revision>...] -- [<file>...]'
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Remote ID is :id:h/BFJbR+mE8CEkASZ/tx
+gcrypt: Encrypting to: -r 7815EA570A7AA2A4
+gcrypt: Requesting manifest signature
+gcrypt: Decrypting manifest
+gpg: Signature made Sat 23 Aug 2014 03:25:49 PM CEST using RSA key ID 0A7AA2A4
+gpg: Good signature from "dirk's git-annex encryption key"
+gcrypt: Encrypting to: -r 7815EA570A7AA2A4
+gcrypt: Requesting manifest signature
+To gcrypt::ssh://dirk@git-annex-C-dirk_1022_annex/~/annex/
+ * [new branch] git-annex -> synced/git-annex
+ * [new branch] annex/direct/master -> synced/master
+fatal: Not a valid object name refs/gcrypt/gitception+
+To gcrypt::ssh://dirk@git-annex-C-dirk_1022_annex/~/annex/
+ 5d2eb63..e4763b8 git-annex -> synced/git-annex
+ da18915..3068bad annex/direct/master -> synced/master
+[2014-08-23 15:32:37 CEST] Pusher: Syncing with C_annex
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Decrypting manifest
+gpg: Signature made Sat 23 Aug 2014 03:31:43 PM CEST using RSA key ID 0A7AA2A4
+gpg: Good signature from "dirk's git-annex encryption key"
+gcrypt: WARNING:
+gcrypt: WARNING: Remote ID has changed!
+gcrypt: WARNING: from :id:00RaA3cNQu+nZDMERYMM
+gcrypt: WARNING: to :id:h/BFJbR+mE8CEkASZ/tx
+gcrypt: WARNING:
+Everything up-to-date
+[2014-08-23 15:33:17 CEST] Committer: Adding fmksmxxs.txt
+add fmksmxxs.txt ok
+add fmksmxxs.txt ok
+[2014-08-23 15:33:18 CEST] Committer: Committing changes to git
+(Recording state in git...)
+[2014-08-23 15:33:18 CEST] Pusher: Syncing with C_annex
+(Recording state in git...)
+gcrypt: Development version -- Repository format MAY CHANGE
+(gpg) gcrypt: Decrypting manifest
+gpg: Signature made Sat 23 Aug 2014 03:31:43 PM CEST using RSA key ID 0A7AA2A4
+gpg: Good signature from "dirk's git-annex encryption key"
+gcrypt: Encrypting to: -r 7815EA570A7AA2A4
+gcrypt: Requesting manifest signature
+
+GPGHMACSHA1--f605f108429ffba3058a2fcf0bc006a1fbe600be
+
+ 70 100% 0.00kB/s 0:00:00
+ 70 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1)
+[2014-08-23 15:33:20 CEST] Transferrer: Uploaded fmksmxxs.txt
+To gcrypt::ssh://dirk@git-annex-C-dirk_1022_annex/~/annex/
+ e4763b8..85dbfc5 git-annex -> synced/git-annex
+ 3068bad..85b70d6 annex/direct/master -> synced/master
+[2014-08-23 15:33:25 CEST] Pusher: Syncing with C_annex
+(Recording state in git...)
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Decrypting manifest
+gpg: Signature made Sat 23 Aug 2014 03:33:22 PM CEST using RSA key ID 0A7AA2A4
+gpg: Good signature from "dirk's git-annex encryption key"
+gcrypt: Encrypting to: -r 7815EA570A7AA2A4
+gcrypt: Requesting manifest signature
+To gcrypt::ssh://dirk@git-annex-C-dirk_1022_annex/~/annex/
+ 85dbfc5..99dc810 git-annex -> synced/git-annex
+[2014-08-23 15:48:39 CEST] main: warning git-annex has been shut down
+# End of transcript or log.
+"""]]
diff --git a/doc/bugs/Problem_setting_up_encrypted_repository_using_the_assistant_with___40__outside_of_git-annex__41___shared_pgp_key/comment_1_c8e7be58222afff2a4c1df60f657d2ed._comment b/doc/bugs/Problem_setting_up_encrypted_repository_using_the_assistant_with___40__outside_of_git-annex__41___shared_pgp_key/comment_1_c8e7be58222afff2a4c1df60f657d2ed._comment
new file mode 100644
index 000000000..5b26906da
--- /dev/null
+++ b/doc/bugs/Problem_setting_up_encrypted_repository_using_the_assistant_with___40__outside_of_git-annex__41___shared_pgp_key/comment_1_c8e7be58222afff2a4c1df60f657d2ed._comment
@@ -0,0 +1,35 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk7iPiqWr3BVPLWEDvJhSSvcOqheLEbLNo"
+ nickname="Dirk"
+ subject="comment 1"
+ date="2014-08-23T18:13:06Z"
+ content="""
+Restarting the two git-annex instances actually now leads to an error message on computer B.
+
+[[!format sh \"\"\"
+[2014-08-23 20:02:00 CEST] main: starting assistant version 5.20140818-g10bf03a
+[2014-08-23 20:02:00 CEST] Cronner: You should enable consistency checking to protect your data.
+
+ dbus failed; falling back to mtab polling (ClientError {clientErrorMessage = \"runClient: unable to determine DBUS address\", clientErrorFatal = True})
+[2014-08-23 20:02:00 CEST] TransferScanner: Syncing with C_annex
+
+ No known network monitor available through dbus; falling back to polling
+(scanning...) [2014-08-23 20:02:00 CEST] Watcher: Performing startup scan
+gcrypt: Development version -- Repository format MAY CHANGE
+(started...)
+gcrypt: Decrypting manifest
+gpg: Signature made Sat 23 Aug 2014 03:34:08 PM CEST using RSA key ID 0A7AA2A4
+gpg: Good signature from \"dirk's git-annex encryption key\"
+gcrypt: Packfile 59a8d97d3d252effb044625e020f9dc8621804649186a5c33c4e47f9e961cc1a does not match digest!
+fatal: early EOF
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Decrypting manifest
+gpg: Signature made Sat 23 Aug 2014 03:34:08 PM CEST using RSA key ID 0A7AA2A4
+gpg: Good signature from \"dirk's git-annex encryption key\"
+gcrypt: Encrypting to: -r 7815EA570A7AA2A4
+gcrypt: Requesting manifest signature
+To gcrypt::ssh://dirk@git-annex-C-dirk_1022_annex/~/annex/
+ e1d6871..85b70d6 annex/direct/master -> synced/master
+ + e68b5a9...99dc810 git-annex -> synced/git-annex (forced update)
+\"\"\"]]
+"""]]
diff --git a/doc/bugs/Problem_when_dropping_unused_files.mdwn b/doc/bugs/Problem_when_dropping_unused_files.mdwn
deleted file mode 100644
index 2c15680b8..000000000
--- a/doc/bugs/Problem_when_dropping_unused_files.mdwn
+++ /dev/null
@@ -1,21 +0,0 @@
-### Please describe the problem.
-
-While dropping 19 unused files from an annex, I got this error:
-
- error: invalid object 100644 c873416e78db4dd94b6ab40470d6fe99b2ecb8bd for '002/0a6/SHA256E-s427690--03aeabcde841b66168b72de80098d74e047f3ffc832d4bbefa1f2f70ee6c92f8.jpg.log'
- fatal: git-write-tree: error building trees
- git-annex: failed to read sha from git write-tree
-
-I've actually seen this before, a few months ago.
-
-### What steps will reproduce the problem?
-
-I have no idea, but once it happens I can't interact with unused files anymore. Also, `git annex fsck` now reports this same problem as well.
-
-### What version of git-annex are you using? On what operating system?
-
-git-annex version: 4.20130815, OS X 10.8.4
-
-> [[done]]; no indication this is anything other than a corrupt git
-> repository, which can be caused by system crash, disk data loss,
-> cosmic rays, etc. This is why we keep backups... --[[Joey]]
diff --git a/doc/bugs/Problem_when_dropping_unused_files/comment_10_d4f6bfe8e04560fc661a47b09ed8a5f4._comment b/doc/bugs/Problem_when_dropping_unused_files/comment_10_d4f6bfe8e04560fc661a47b09ed8a5f4._comment
deleted file mode 100644
index 9c0e25528..000000000
--- a/doc/bugs/Problem_when_dropping_unused_files/comment_10_d4f6bfe8e04560fc661a47b09ed8a5f4._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.251.174"
- subject="comment 10"
- date="2013-09-07T17:14:36Z"
- content="""
-Again this error message has nothing to do with git-annex beyond it being a file in the git-annex branch that is corrupt. Your system seems to be repeatedly corrupting git repositories. You need to run `git fsck`, get the git repository in a clean state, and probably check the drive it's on, and run a memory test or otherwise deal with whatever is causing your system to corrupt files in the git repository.
-"""]]
diff --git a/doc/bugs/Problem_when_dropping_unused_files/comment_1_e1a99bd3eb8b3186653b52a52b1836de._comment b/doc/bugs/Problem_when_dropping_unused_files/comment_1_e1a99bd3eb8b3186653b52a52b1836de._comment
deleted file mode 100644
index 0e39a96fc..000000000
--- a/doc/bugs/Problem_when_dropping_unused_files/comment_1_e1a99bd3eb8b3186653b52a52b1836de._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="comment 1"
- date="2013-08-24T05:01:37Z"
- content="""
-The following command restored some sanity:
-
- find .git/annex/ -name '*.log' -delete
-"""]]
diff --git a/doc/bugs/Problem_when_dropping_unused_files/comment_2_dec3e5ffe5cfdc439f418ee00d7d9810._comment b/doc/bugs/Problem_when_dropping_unused_files/comment_2_dec3e5ffe5cfdc439f418ee00d7d9810._comment
deleted file mode 100644
index e0c5a2882..000000000
--- a/doc/bugs/Problem_when_dropping_unused_files/comment_2_dec3e5ffe5cfdc439f418ee00d7d9810._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="arand"
- ip="130.243.226.21"
- subject="comment 2"
- date="2013-08-24T11:40:54Z"
- content="""
-If I recall, such files being stored in the annex object store is a result of using direct mode?
-"""]]
diff --git a/doc/bugs/Problem_when_dropping_unused_files/comment_3_d106a87101db52f957da84d90dafcdbb._comment b/doc/bugs/Problem_when_dropping_unused_files/comment_3_d106a87101db52f957da84d90dafcdbb._comment
deleted file mode 100644
index 8c739552d..000000000
--- a/doc/bugs/Problem_when_dropping_unused_files/comment_3_d106a87101db52f957da84d90dafcdbb._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.63"
- subject="comment 3"
- date="2013-08-24T16:04:21Z"
- content="""
-Unfortunately, the git error message you pasted suggests very strongly that your git repository has gotten corrupted. You can probably verify that by running `git annex fsck`. Assuming it is corrupted, the best thing to do is to make a new clone and move .git/annex and .git/config over from the corrupted repository to it, and finally run `git annex fsck`
-
-You then seem to have some reason decided to go delete git-annex's .git/annex/journal/*.log files, which are just files that have not yet been committed to the git-annex branch. The only reason this \"restored some sanity\" is that git-annex was trying to commit that data to git, and failing because your git repository is corrupted.
-
-(This has nothing at all to do with direct mode.)
-"""]]
diff --git a/doc/bugs/Problem_when_dropping_unused_files/comment_4_f28ed0635612693e437e64d872af5c37._comment b/doc/bugs/Problem_when_dropping_unused_files/comment_4_f28ed0635612693e437e64d872af5c37._comment
deleted file mode 100644
index ba2e693ee..000000000
--- a/doc/bugs/Problem_when_dropping_unused_files/comment_4_f28ed0635612693e437e64d872af5c37._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="comment 4"
- date="2013-08-25T05:27:57Z"
- content="""
-Do you have any thoughts on why it may have gotten corrupted, or why it seems to happen so commonly with large git-annex repositories? I've seen this exact same sort of error while processing log files maybe 5 or 6 times now.
-"""]]
diff --git a/doc/bugs/Problem_when_dropping_unused_files/comment_5_f0237075653768c84deb702442645f28._comment b/doc/bugs/Problem_when_dropping_unused_files/comment_5_f0237075653768c84deb702442645f28._comment
deleted file mode 100644
index 4ad874c08..000000000
--- a/doc/bugs/Problem_when_dropping_unused_files/comment_5_f0237075653768c84deb702442645f28._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="comment 5"
- date="2013-08-25T05:50:35Z"
- content="""
-I meant to say, in 5 or 6 different repositories. Further, when I see it happen the next time, how do you recommend I track down the real problem, instead of always just cloning and starting over?
-"""]]
diff --git a/doc/bugs/Problem_when_dropping_unused_files/comment_6_b509006e1590480a104627369bc910f2._comment b/doc/bugs/Problem_when_dropping_unused_files/comment_6_b509006e1590480a104627369bc910f2._comment
deleted file mode 100644
index 60f2165e2..000000000
--- a/doc/bugs/Problem_when_dropping_unused_files/comment_6_b509006e1590480a104627369bc910f2._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="comment 6"
- date="2013-08-30T04:19:57Z"
- content="""
-Just saw it happen again today, in a repository that passed \"fsck -A\" multiple times just yesterday. What is going on?
-"""]]
diff --git a/doc/bugs/Problem_when_dropping_unused_files/comment_7_fe261c074211ccb94bbcb32cfd8ee654._comment b/doc/bugs/Problem_when_dropping_unused_files/comment_7_fe261c074211ccb94bbcb32cfd8ee654._comment
deleted file mode 100644
index 6f3e42f5c..000000000
--- a/doc/bugs/Problem_when_dropping_unused_files/comment_7_fe261c074211ccb94bbcb32cfd8ee654._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="comment 7"
- date="2013-08-30T04:25:45Z"
- content="""
-I tried your suggestion of cloning the repository and moving `.git/config` and `.git/annex`, and got this:
-
- fsck Astronomy/12_ATM_2.jpg error: invalid object 100644 06f8fe222f052100101e5c2e77640f2ec3efff98 for '002/0a6/SHA256E-s427690--03aeabcde841b66168b72de80098d74e047f3ffc832d4bbefa1f2f70ee6c92f8.jpg.log'
- fatal: git-write-tree: error building trees
- git-annex: failed to read sha from git write-tree
-
-What else can I try? Note that I can't even find this `.log` anywhere under my `.git` directory for this repository.
-"""]]
diff --git a/doc/bugs/Problem_when_dropping_unused_files/comment_8_bc8e4dc7e0d6577ba5fcc98f56627b1f._comment b/doc/bugs/Problem_when_dropping_unused_files/comment_8_bc8e4dc7e0d6577ba5fcc98f56627b1f._comment
deleted file mode 100644
index 0b82af2f1..000000000
--- a/doc/bugs/Problem_when_dropping_unused_files/comment_8_bc8e4dc7e0d6577ba5fcc98f56627b1f._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="comment 8"
- date="2013-08-30T04:30:14Z"
- content="""
-The only thing that worked was nuking `.git/annex/index` and letting `git-annex sync` rebuild it.
-"""]]
diff --git a/doc/bugs/Problem_when_dropping_unused_files/comment_9_e9a22aa2ebcde5f6595b49dba9375761._comment b/doc/bugs/Problem_when_dropping_unused_files/comment_9_e9a22aa2ebcde5f6595b49dba9375761._comment
deleted file mode 100644
index b75b3f61b..000000000
--- a/doc/bugs/Problem_when_dropping_unused_files/comment_9_e9a22aa2ebcde5f6595b49dba9375761._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="comment 9"
- date="2013-08-30T06:20:58Z"
- content="""
-And yet again it happens:
-
- error: invalid object 100644 3edb1d4a44ffba1ea1491693ae7d9faa82aad717 for '000/4ce/SHA256E-s175006724--a0edc4f880223028b3fa3a27b142c8e027ddf66db973b8272ca845a4a9e01d3e.mp4.log' fatal: git-write-tree: error building trees
-
-This was in a repository that was working perfectly well until I tried to `git-annex get`. The weird thing is that I don't even have any `SHA256E` files anymore.
-
-I think that after my recent migration, none of my repositories can be trusted. This is just happening too often (more than 10 times in the last week, across many repositories on many machines). I will just rebuild them all. But I do wish git-annex was more resilient about this.
-"""]]
diff --git a/doc/bugs/Problem_with_bup:_cannot_lock_refs.mdwn b/doc/bugs/Problem_with_bup:_cannot_lock_refs.mdwn
deleted file mode 100644
index f8df1f082..000000000
--- a/doc/bugs/Problem_with_bup:_cannot_lock_refs.mdwn
+++ /dev/null
@@ -1,52 +0,0 @@
-Hi!
-
-Using bup for storing seems a good idea to save space, but I still have a problem when trying to copy files to my local git repo.
-I have two partitions:
-
-- /Data (NTFS)
-
-- / (ext4)
-
-I turned the directory /Data/Audio into a git-annex repo, and cloned it into /home/me/AudioClone.
-I added the remote bup to AudioClone by doing:
-
- git annex initremote mybup type=bup encryption=none buprepo=
-
-But when I try to copy some files that I have previously got by "git annex get" by doing:
-
- [~/AudioClone]$ git annex copy someartist/somealbum --to mybup
-
-it fails and tells me:
-
- copy Order To Die/01 Morituri Te Salutant.flac (to mybup...)
- fatal: Cannot lock the ref 'refs/heads/WORM-s7351771-m1318841909--01 Morituri Te Salutant.flac'.
- Traceback (most recent call last):
- File "/usr/lib/bup/cmd/bup-split", line 170, in <module>
- git.update_ref(refname, commit, oldref)
- File "/usr/lib/bup/bup/git.py", line 835, in update_ref
- _git_wait('git update-ref', p)
- File "/usr/lib/bup/bup/git.py", line 930, in _git_wait
- raise GitError('%s returned %d' % (cmd, rv))
- bup.git.GitError: git update-ref returned 128
-
-for each file, **except for the album cover file**, which is a simple JPG that bup doesn't try to split. This one gets copied nicely but the big FLAC files don't.
-
-I tried to restart my session, in case bup adds my username to a group or something.
-
-(I'm using Ubuntu 11.10)
-
-> Apparently bup-split does not allow storing data using filenames with
-> spaces in them. I can reproduce the same bug using the same filename;
-> if I remove the spaces all is well.
->
-> Since bup-split -n uses git branches, I guess git-annex needs to avoid
-> giving it any names containing spaces, or anything else not allowed
-> in a git branch name. The rules for legal git branch names are quite complex
-> (see git-check-ref-format(1)) so it will take me some times to code
-> this up.
->
-> A workaround is to switch to the SHA256 backend
-> (`git annex migrate --backend=SHA256`), which avoids spaces in its keys.
-> --[[Joey]]
-
->> Now fixed in git. [[done]] --[[Joey]]
diff --git a/doc/bugs/Problem_with_windows_version:_1.9.5.msysgit.0_wrong_path.mdwn b/doc/bugs/Problem_with_windows_version:_1.9.5.msysgit.0_wrong_path.mdwn
new file mode 100644
index 000000000..20a92fea5
--- /dev/null
+++ b/doc/bugs/Problem_with_windows_version:_1.9.5.msysgit.0_wrong_path.mdwn
@@ -0,0 +1,82 @@
+### Please describe the problem.
+1. git annex - command not found - found a workaround
+2. git assistant broken
+
+### What steps will reproduce the problem?
+1. fresh download of 19.5.msysgit.0
+2. fresh download of recent git-annex
+### What version of git-annex are you using? On what operating system?
+1. Window 7.
+2. git version 1.9.5.msysgit.0
+2. git-annex version 5.20150205-g0f63eb0
+
+### Please provide any additional information below.
+After copying
+ cp cmd/git-annex bin
+in the git install directory it was working.
+
+Adding a fresh "removeable Storage" repository delivered
+git [Param "config",Param "core.fsyncobjectfiles",Param "true"] failed
+
+calling the command (locally) manually:
+ git config core.fsyncobjectfiles true
+works fine, but i found no way to call it on the remote directory.
+The "annex" directory on H: was created and looks like a bare git depot.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+[2015-02-07 17:09:04 Mitteleuropõische Zeit] main: starting assistant version 5.20150205-g0f63eb0
+[2015-02-07 17:09:04 Mitteleuropõische Zeit] Cronner: You should enable consistency checking to protect your data.
+(scanning...) [2015-02-07 17:09:05 Mitteleuropõische Zeit] Watcher: Performing startup scan
+(started...) [2015-02-07 17:09:42 Mitteleuropõische Zeit] main: starting assistant version 5.20150205-g0f63eb0
+[2015-02-07 17:09:42 Mitteleuropõische Zeit] Cronner: You should enable consistency checking to protect your data.
+recv: failed (No error)
+(scanning...) [2015-02-07 17:09:42 Mitteleuropõische Zeit] Watcher: Performing startup scan
+(started...) [2015-02-07 17:09:51 Mitteleuropõische Zeit] main: starting assistant version 5.20150205-g0f63eb0
+[2015-02-07 17:09:52 Mitteleuropõische Zeit] Cronner: You should enable consistency checking to protect your data.
+(scanning...) [2015-02-07 17:09:52 Mitteleuropõische Zeit] Watcher: Performing startup scan
+(started...) [2015-02-07 17:10:18 Mitteleuropõische Zeit] Committer: Adding DSC07173.JPG DSC07174.JPG DSC07175.JPG
+
+add 2014-08-01-Waal\DSC07173.JPG Committer crashed: sha256sum parse error
+[2015-02-07 17:10:18 Mitteleuropõische Zeit] Committer: warning Committer crashed: sha256sum parse error
+recv: failed (No error)
+[2015-02-07 17:10:27 Mitteleuropõische Zeit] Committer: Adding DSC07175.JPG DSC07176.JPG DSC07177.JPG DSC07178.JPG
+add 2014-08-01-Waal\DSC07175.JPG Committer crashed: sha256sum parse error
+[2015-02-07 17:10:27 Mitteleuropõische Zeit] Committer: warning Committer crashed: sha256sum parse error
+[2015-02-07 17:10:37 Mitteleuropõische Zeit] main: starting assistant version 5.20150205-g0f63eb0
+[2015-02-07 17:10:37 Mitteleuropõische Zeit] Cronner: You should enable consistency checking to protect your data.
+recv: failed (No error)
+recv: failed (No error)
+DaemonStatus crashed: MoveFileEx ".git\\annex\\daemon.status6720.tmp" ".git\\annex\\daemon.status": permission denied (Zugriff verweigert)
+[2015-02-07 17:10:37 Mitteleuropõische Zeit] DaemonStatus: warning DaemonStatus crashed: MoveFileEx ".git\\annex\\daemon.status6720.tmp" ".git\\annex\\daemon.status": permission denied (Zugriff verweigert)
+(scanning...) [2015-02-07 17:10:37 Mitteleuropõische Zeit] Watcher: Performing startup scan
+(started...) [2015-02-07 17:10:38 Mitteleuropõische Zeit] Committer: Adding DSC07178.JPG DSC07177.JPG DSC07176.JPG DSC07175.JPG DSC07174.JPG DSC07173.JPG
+
+add .\2014-08-01-Waal\DSC07178.JPG Committer crashed: sha256sum parse error
+[2015-02-07 17:10:38 Mitteleuropõische Zeit] Committer: warning Committer crashed: sha256sum parse error
+[2015-02-07 17:10:40 Mitteleuropõische Zeit] main: starting assistant version 5.20150205-g0f63eb0
+WebApp crashed: MoveFileEx ".git\\annex\\webapp.html5592.tmp" ".git\\annex\\webapp.html": permission denied (Zugriff verweigert)
+[2015-02-07 17:10:40 Mitteleuropõische Zeit] WebApp: warning WebApp crashed: MoveFileEx ".git\\annex\\webapp.html5592.tmp" ".git\\annex\\webapp.html": permission denied (Zugriff verweigert)
+[2015-02-07 17:10:40 Mitteleuropõische Zeit] Cronner: You should enable consistency checking to protect your data.
+(scanning...) [2015-02-07 17:10:41 Mitteleuropõische Zeit] Watcher: Performing startup scan
+(started...) [2015-02-07 17:10:41 Mitteleuropõische Zeit] Committer: Adding DSC07178.JPG DSC07177.JPG DSC07176.JPG DSC07175.JPG DSC07174.JPG DSC07173.JPG
+
+add .\2014-08-01-Waal\DSC07178.JPG Committer crashed: sha256sum parse error
+[2015-02-07 17:10:42 Mitteleuropõische Zeit] Committer: warning Committer crashed: sha256sum parse error
+rerrrcereevcecc:vcvv :v::f : af ffiafaaliaiielilldelee dedd( d N( ((oN(NN oNooe o re eerrerrorrrrroroo)rorr
+)r))
+)
+
+
+recv: failed (No error)
+recv: failed (No error)
+fatal: unable to access '..\..\..\..\H:\annex/config': Invalid argument
+07/Feb/2015:17:11:40 +0100 [Error#yesod-core] git [Param "config",Param "core.fsyncobjectfiles",Param "true"] failed @(yesod-core-1.2.19:Yesod.Core.Class.Yesod .\Yesod\Core\Class\Yesod.hs:503:5)
+
+
+
+# End of transcript or log.
+"""]]
+
+> User error; [[closing|done]] --[[Joey]]
diff --git a/doc/bugs/Problem_with_windows_version:_1.9.5.msysgit.0_wrong_path/comment_1_c949934a5fc8889f7cbeac9e789116f4._comment b/doc/bugs/Problem_with_windows_version:_1.9.5.msysgit.0_wrong_path/comment_1_c949934a5fc8889f7cbeac9e789116f4._comment
new file mode 100644
index 000000000..cda18c4a4
--- /dev/null
+++ b/doc/bugs/Problem_with_windows_version:_1.9.5.msysgit.0_wrong_path/comment_1_c949934a5fc8889f7cbeac9e789116f4._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-09T20:44:41Z"
+ content="""
+Are you sure you told msysgit to add itself to PATH when installing it?
+
+Unless something has changed in msysgit, it installs `cmd/git.exe`, and it
+puts `cmd` in PATH, not `bin`.
+"""]]
diff --git a/doc/bugs/Problem_with_windows_version:_1.9.5.msysgit.0_wrong_path/comment_2_5087aa261b897090031ad32bdc1434f9._comment b/doc/bugs/Problem_with_windows_version:_1.9.5.msysgit.0_wrong_path/comment_2_5087aa261b897090031ad32bdc1434f9._comment
new file mode 100644
index 000000000..4d0ca3634
--- /dev/null
+++ b/doc/bugs/Problem_with_windows_version:_1.9.5.msysgit.0_wrong_path/comment_2_5087aa261b897090031ad32bdc1434f9._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawl52i_Ao3TpmLrpYMCbRcnNiMuNiwIDr4E"
+ nickname="Martin"
+ subject="Cross check"
+ date="2015-02-10T22:58:01Z"
+ content="""
+I reinstalled the stuff, with the path \"Option\" set. No git-annex is found.
+All other problems remained.
+"""]]
diff --git a/doc/bugs/Problem_with_windows_version:_1.9.5.msysgit/comment_1_720dbf9d959a0050a159713cd1386913._comment b/doc/bugs/Problem_with_windows_version:_1.9.5.msysgit/comment_1_720dbf9d959a0050a159713cd1386913._comment
new file mode 100644
index 000000000..da503f413
--- /dev/null
+++ b/doc/bugs/Problem_with_windows_version:_1.9.5.msysgit/comment_1_720dbf9d959a0050a159713cd1386913._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-10T16:08:21Z"
+ content="""
+I have tried a clean install of msysgit 1.9.5, and verified that it still
+puts `cmd` in the PATH, as long as you follow the instructions and tell it
+to.
+
+Closing this bug.
+"""]]
diff --git a/doc/bugs/Problems_building_on_Mac_OS_X.mdwn b/doc/bugs/Problems_building_on_Mac_OS_X.mdwn
deleted file mode 100644
index 39594773f..000000000
--- a/doc/bugs/Problems_building_on_Mac_OS_X.mdwn
+++ /dev/null
@@ -1,62 +0,0 @@
-### Please describe the problem.
-
-Installing via Cabal fails due to dependency conflicts with yesod. If I build without the webapp flag, the problem disappears.
-
-### What steps will reproduce the problem?
-Running `cabal install c2hs git-annex --bindir=$HOME/bin`.
-
-### What version of git-annex are you using? On what operating system?
-I was attempting to install 4.20130521 from Hackage. My operating system is Mac OS X 10.6.8. Cabal-install is at 0.14.0.
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/debug.log
-Resolving dependencies...
-cabal: Could not resolve dependencies:
-trying: git-annex-4.20130521 (user goal)
-trying: git-annex-4.20130521:+webapp
-trying: yesod-default-1.2.0 (dependency of git-annex-4.20130521:+webapp)
-trying: yesod-core-1.2.1 (dependency of yesod-default-1.2.0)
-trying: cookie-0.4.0.1/installed-9d9... (dependency of yesod-core-1.2.1)
-next goal: yesod (dependency of git-annex-4.20130521:+webapp)
-rejecting: yesod-1.2.0.1, 1.2.0 (conflict: git-annex-4.20130521:webapp =>
-yesod(<1.2))
-rejecting: yesod-1.1.9.3, 1.1.9.2, 1.1.9.1, 1.1.9, 1.1.8.2, 1.1.8.1, 1.1.8,
-1.1.7.2, 1.1.7.1, 1.1.7, 1.1.6, 1.1.5, 1.1.4.1, 1.1.4 (conflict:
-yesod-core==1.2.1, yesod => yesod-core>=1.1.5 && <1.2)
-rejecting: yesod-1.1.3.1, 1.1.3, 1.1.2, 1.1.1.2, 1.1.1, 1.1.0.3, 1.1.0.2,
-1.1.0.1, 1.1.0 (conflict: yesod-core==1.2.1, yesod => yesod-core>=1.1 && <1.2)
-rejecting: yesod-1.0.1.6, 1.0.1.5, 1.0.1.4, 1.0.1.3, 1.0.1.2, 1.0.1.1, 1.0.1,
-1.0.0.2, 1.0.0.1, 1.0.0 (conflict: yesod-core==1.2.1, yesod => yesod-core>=1.0
-&& <1.1)
-rejecting: yesod-0.10.2, 0.10.1.4, 0.10.1.3, 0.10.1.2, 0.10.1.1, 0.10.1
-(conflict: yesod-core==1.2.1, yesod => yesod-core>=0.10.1 && <0.11)
-rejecting: yesod-0.9.4.1, 0.9.4, 0.9.3.4, 0.9.3.3, 0.9.3.2 (conflict:
-yesod-core==1.2.1, yesod => yesod-core>=0.9.3.4 && <0.10)
-rejecting: yesod-0.9.3.1, 0.9.3, 0.9.2.2, 0.9.2.1, 0.9.2, 0.9.1.1 (conflict:
-yesod-core==1.2.1, yesod => yesod-core>=0.9.1.1 && <0.10)
-rejecting: yesod-0.9.1 (conflict: yesod-core==1.2.1, yesod => yesod-core>=0.9
-&& <0.10)
-rejecting: yesod-0.8.2.1, 0.8.2, 0.8.1 (conflict: yesod-core==1.2.1, yesod =>
-yesod-core>=0.8.1 && <0.9)
-rejecting: yesod-0.8.0 (conflict: yesod-core==1.2.1, yesod => yesod-core>=0.8
-&& <0.9)
-rejecting: yesod-0.7.3, 0.7.2 (conflict: yesod-core==1.2.1, yesod =>
-yesod-core>=0.7.0.2 && <0.8)
-rejecting: yesod-0.7.1 (conflict: yesod-core==1.2.1, yesod =>
-yesod-core>=0.7.0.1 && <0.8)
-rejecting: yesod-0.7.0 (conflict: yesod-core==1.2.1, yesod => yesod-core>=0.7
-&& <0.8)
-rejecting: yesod-0.6.7, 0.6.6, 0.6.5, 0.6.4, 0.6.3, 0.6.2, 0.6.1.2, 0.6.1.1,
-0.6.1, 0.6.0.2, 0.6.0.1, 0.6.0, 0.5.4.2, 0.5.4.1, 0.5.4, 0.5.3, 0.5.2, 0.5.1,
-0.5.0.3, 0.5.0.2, 0.5.0.1, 0.5.0, 0.4.1, 0.4.0.3, 0.4.0.2, 0.4.0.1, 0.4.0
-(conflict: cookie => time==1.4/installed-d61..., yesod => time>=1.1.4 && <1.3)
-rejecting: yesod-0.3.1.1, 0.3.1, 0.3.0, 0.2.0, 0.0.0.2, 0.0.0.1, 0.0.0
-(conflict: cookie => time==1.4/installed-d61..., yesod => time>=1.1.3 && <1.2)
-# End of transcript or log.
-"""]]
-
-> Not OSX specific. I have added a version hint that makes cabal work and uploaded
-> a point release with this fix. [[done]] --[[Joey]]
diff --git a/doc/bugs/Problems_building_on_Mac_OS_X/comment_1_1c199b826fdd84b5184b1466ad03a9a4._comment b/doc/bugs/Problems_building_on_Mac_OS_X/comment_1_1c199b826fdd84b5184b1466ad03a9a4._comment
deleted file mode 100644
index f73808014..000000000
--- a/doc/bugs/Problems_building_on_Mac_OS_X/comment_1_1c199b826fdd84b5184b1466ad03a9a4._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmu416zAYgYzbXVZAe30MiXoOWO4z6nGX8"
- nickname="Johannes"
- subject="comment 1"
- date="2013-05-23T10:02:55Z"
- content="""
-Same problem on archlinux with cabal-install 1.16.0.2
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx.mdwn b/doc/bugs/Problems_running_make_on_osx.mdwn
deleted file mode 100644
index 83b75fb54..000000000
--- a/doc/bugs/Problems_running_make_on_osx.mdwn
+++ /dev/null
@@ -1,49 +0,0 @@
-Followed the instructions over here: http://git-annex.branchable.com/forum/git-annex_on_OSX/
-
-and had to install the following extra packages to be able to get make to start:
-
-[realizes pcre-light is needed but pcre not installed on my mac]
-sudo port install pcre
-sudo cabal install pcre-light
-
-> Ah right, that is a new dependency. I've updated the forum page
-> with this info.
-> --[[Joey]]
-
-But then I got the following error:
-
-<pre>
-ghc -O2 -Wall --make git-annex
-[ 7 of 52] Compiling BackendTypes ( BackendTypes.hs, BackendTypes.o
-
-BackendTypes.hs:71:17:
- No instance for (Arbitrary Char)
- arising from a use of `arbitrary' at BackendTypes.hs:71:17-25
- Possible fix: add an instance declaration for (Arbitrary Char)
- In a stmt of a 'do' expression: backendname <- arbitrary
- In the expression:
- do backendname <- arbitrary
- keyname <- arbitrary
- return $ Key (backendname, keyname)
- In the definition of `arbitrary':
- arbitrary = do backendname <- arbitrary
- keyname <- arbitrary
- return $ Key (backendname, keyname)
-make: *** [git-annex] Error 1
-</pre>
-
-My knowledge of Haskell (had to lookup the spelling...) is more than rudimentary so any help would be appreciated.
-
-> Hmm, it seems you may be missing part of the quickcheck haskell
-> library, or have a different version than me.
->
-> The easy fix is probably to just edit BackendTypes.hs and delete the
-> entire end of the file from line 68, "for quickcheck" down. This code
-> is only used by the test suite (so "make test" will fail),
-> but it should get it to build. --[[Joey]]
-
----
-
-Closing this bug because the above problem now has a solution documented on
-the install page, and the below test suite failure problems should all be
-resolved on OSX. [[done]] --[[Joey]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_10_94e4ac430140042a2d0fb5a16d86b4e5._comment b/doc/bugs/Problems_running_make_on_osx/comment_10_94e4ac430140042a2d0fb5a16d86b4e5._comment
deleted file mode 100644
index 95a9773e2..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_10_94e4ac430140042a2d0fb5a16d86b4e5._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 10"
- date="2011-02-09T15:04:50Z"
- content="""
-I don't know what these problems forking could be. Can you strace it?
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_11_56f1143fa191361d63b441741699e17f._comment b/doc/bugs/Problems_running_make_on_osx/comment_11_56f1143fa191361d63b441741699e17f._comment
deleted file mode 100644
index 3fbe57ecd..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_11_56f1143fa191361d63b441741699e17f._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 11"
- date="2011-02-09T19:35:47Z"
- content="""
-I got dtruss to give me a trace, the output is quite big to post here (~560kb gzip'd), do you mind if I emailed it or posted it somewhere else for you?
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_12_ec5131624d0d2285d3b6880e47033f97._comment b/doc/bugs/Problems_running_make_on_osx/comment_12_ec5131624d0d2285d3b6880e47033f97._comment
deleted file mode 100644
index beba5dc42..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_12_ec5131624d0d2285d3b6880e47033f97._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 12"
- date="2011-02-09T19:47:30Z"
- content="""
-joey@kitenet.net (hope I can make sense of dtruss output)
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_13_88ed095a448096bf8a69015a04e64df1._comment b/doc/bugs/Problems_running_make_on_osx/comment_13_88ed095a448096bf8a69015a04e64df1._comment
deleted file mode 100644
index dd25c3d0c..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_13_88ed095a448096bf8a69015a04e64df1._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 13"
- date="2011-02-09T21:59:47Z"
- content="""
-The dtrace puzzlingly does not have the same errors shown above, but a set of mostly new errors. I don't know what to make of that.
-
-> git-annex: git-annex/.t/repo/.git/hooks/pre-commit: fileAccess: permission denied (Operation not permitted)
-
-This seems to be caused by it setting the execute bit on the file. I don't know why that would fail; it's just written the file and renamed it into place so clearly should be able to write to it.
-
-> was able to modify annexed file's sha1foo content
-
-This also suggests something breaking with permissions.
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_14_89a960b6706ed703b390a81a8bc4e311._comment b/doc/bugs/Problems_running_make_on_osx/comment_14_89a960b6706ed703b390a81a8bc4e311._comment
deleted file mode 100644
index 724fe5505..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_14_89a960b6706ed703b390a81a8bc4e311._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 14"
- date="2011-02-12T21:19:24Z"
- content="""
-I've been trying to dig around the trace and code, and used google to see if the forkProcess issue was a haskell thing or an OSX thing. It seems that <http://hackage.haskell.org/trac/ghc/ticket/4493> someone may have ran into a similar issue, though I am not sure if its related.
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_15_6b8867b8e48bf807c955779c9f8f0909._comment b/doc/bugs/Problems_running_make_on_osx/comment_15_6b8867b8e48bf807c955779c9f8f0909._comment
deleted file mode 100644
index 733ec997a..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_15_6b8867b8e48bf807c955779c9f8f0909._comment
+++ /dev/null
@@ -1,71 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 15"
- date="2011-02-13T02:45:51Z"
- content="""
-It may be possible that OSX has some low resource limits, for user processes (266 per user I think) doing a
-
- sudo sysctl -w kern.maxproc=2048
- sudo sysctl -w kern.maxprocperuid=1024
- sudo echo \"limit maxfiles 1024 unlimited\" >> /etc/launchd.conf
- sudo echo \"limit maxproc 1024 2048\" >> /etc/launchd.conf
-
-seems to change the behaviour of the tests abit...
-
-<pre>
-Testing 1:blackbox:3:git-annex unannex:1:with content
-### Failure in: 1:blackbox:3:git-annex unannex:1:with content
-foo is not a symlink
-Testing 1:blackbox:4:git-annex drop:0:no remotes
-### Failure in: 1:blackbox:4:git-annex drop:0:no remotes
-drop wrongly succeeded with no known copy of file
-Testing 1:blackbox:4:git-annex drop:1:with remote
-Testing 1:blackbox:4:git-annex drop:2:untrusted remote
-Testing 1:blackbox:5:git-annex get
-Testing 1:blackbox:6:git-annex move
-Testing 1:blackbox:7:git-annex copy
-Testing 1:blackbox:8:git-annex unlock/lock
-Testing 1:blackbox:9:git-annex edit/commit:0
-Cases: 30 Tried: 20 Errors: 0 Failures: 2add foo ok
-ok
-Testing 1:blackbox:9:git-annex edit/commit:1
-Testing 1:blackbox:10:git-annex fix
-Testing 1:blackbox:11:git-annex trust/untrust/semitrust
-Testing 1:blackbox:12:git-annex fsck:0
-Cases: 30 Tried: 24 Errors: 0 Failures: 2 Only 1 of 2 trustworthy copies of foo exist.
- Back it up with git-annex copy.
- Only 1 of 2 trustworthy copies of sha1foo exist.
- Back it up with git-annex copy.
- Bad file size; moved to /Users/jtang/develop/git-annex/.t/tmprepo/.git/annex/bad/WORM:1297565141:20:foo
- Bad file content; moved to /Users/jtang/develop/git-annex/.t/tmprepo/.git/annex/bad/SHA1:ee80d2cec57a3810db83b80e1b320df3a3721ffa
-Testing 1:blackbox:12:git-annex fsck:1
-### Failure in: 1:blackbox:12:git-annex fsck:1
-fsck failed to fail with content only available in untrusted (current) repository
-Testing 1:blackbox:12:git-annex fsck:2
-Cases: 30 Tried: 26 Errors: 0 Failures: 3 Only 1 of 2 trustworthy copies of foo exist.
- Back it up with git-annex copy.
- The following untrusted locations may also have copies:
- 58e831c2-371b-11e0-bc1f-47d738dc52ee -- test repo
- Only 1 of 2 trustworthy copies of sha1foo exist.
- Back it up with git-annex copy.
- The following untrusted locations may also have copies:
- 58e831c2-371b-11e0-bc1f-47d738dc52ee -- test repo
-Testing 1:blackbox:13:git-annex migrate:0
-Cases: 30 Tried: 27 Errors: 0 Failures: 3 git-annex: user error (Error in fork: forkProcess: resource exhausted (Resource temporarily unavailable))
-### Failure in: 1:blackbox:13:git-annex migrate:0
-migrate annexedfile failed
-Testing 1:blackbox:13:git-annex migrate:1
-### Error in: 1:blackbox:13:git-annex migrate:1
-forkProcess: resource exhausted (Resource temporarily unavailable)
-Testing 1:blackbox:14:git-annex unused/dropunused
-### Error in: 1:blackbox:14:git-annex unused/dropunused
-forkProcess: resource exhausted (Resource temporarily unavailable)
-Cases: 30 Tried: 30 Errors: 2 Failures: 4
-test: failed
-</pre>
-
-
-the number of failures vary as I change the values of the maxprocs, I think I have narrowed it down to OSX just being stupid with limits thus causing the tests to fail.
-
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_16_5c2dd6002aadaab30841b77a5f5aed34._comment b/doc/bugs/Problems_running_make_on_osx/comment_16_5c2dd6002aadaab30841b77a5f5aed34._comment
deleted file mode 100644
index ca1b8e8cd..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_16_5c2dd6002aadaab30841b77a5f5aed34._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 16"
- date="2011-02-13T04:52:26Z"
- content="""
-I've fixed the test suite to not accumulate all those zombie processes. Now only 2 or 3 processes should run max. Am curious to see if that clears up all the problems.
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_17_62fccb04b0e4b695312f7a3f32fb96ee._comment b/doc/bugs/Problems_running_make_on_osx/comment_17_62fccb04b0e4b695312f7a3f32fb96ee._comment
deleted file mode 100644
index 7c7200fb9..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_17_62fccb04b0e4b695312f7a3f32fb96ee._comment
+++ /dev/null
@@ -1,43 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 17"
- date="2011-02-13T10:46:54Z"
- content="""
-Yeap, that did the trick. I just tested a few separate OSX 10.6.6 systems and the tests are better behaved now, only 3 failures now.
-
-So the tests behave better (at least we don't get resource fork errors any more)
-
- * after the commit c319a3 without modifying the system limits (of 266 procs per user)
- * without the commit c319a3 and when I increase the system process limits to as much as OSX allows
-
-On all the systems I tested on, I'm down to 3 failures now.
-
-<pre>
-### Failure in: 1:blackbox:3:git-annex unannex:1:with content
-foo is not a symlink
-### Failure in: 1:blackbox:4:git-annex drop:0:no remotes
-drop wrongly succeeded with no known copy of file
-Cases: 30 Tried: 20 Errors: 0 Failures: 2add foo ok
-ok
-Cases: 30 Tried: 24 Errors: 0 Failures: 2 Only 1 of 2 trustworthy copies of foo exist.
- Back it up with git-annex copy.
- Only 1 of 2 trustworthy copies of sha1foo exist.
- Back it up with git-annex copy.
- Bad file size; moved to /Users/jtang/develop/git-annex/.t/tmprepo/.git/annex/bad/WORM:1297594011:20:foo
- Bad file content; moved to /Users/jtang/develop/git-annex/.t/tmprepo/.git/annex/bad/SHA1:ee80d2cec57a3810db83b80e1b320df3a3721ffa
-### Failure in: 1:blackbox:12:git-annex fsck:1
-fsck failed to fail with content only available in untrusted (current) repository
-Cases: 30 Tried: 26 Errors: 0 Failures: 3 Only 1 of 2 trustworthy copies of foo exist.
- Back it up with git-annex copy.
- The following untrusted locations may also have copies:
- 90d63906-375e-11e0-8867-abb8a6368269 -- test repo
- Only 1 of 2 trustworthy copies of sha1foo exist.
- Back it up with git-annex copy.
- The following untrusted locations may also have copies:
- 90d63906-375e-11e0-8867-abb8a6368269 -- test repo
-Cases: 30 Tried: 30 Errors: 0 Failures: 3
-</pre>
-
-It's the same set of failures across all the OSX systems that I have tested on. Now I just need to figure out why there are still these three failures.
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_18_64fab50d95de619eb2e8f08f90237de1._comment b/doc/bugs/Problems_running_make_on_osx/comment_18_64fab50d95de619eb2e8f08f90237de1._comment
deleted file mode 100644
index df76bb301..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_18_64fab50d95de619eb2e8f08f90237de1._comment
+++ /dev/null
@@ -1,24 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="maybe killed another osx bug in the test."
- date="2011-02-13T15:12:10Z"
- content="""
-I think I have figured out why
-
- ### Failure in: 1:blackbox:3:git-annex unannex:1:with content
- foo is not a symlink
-
-It goes back to the this piece of code (in test.hs)
-
- copyrepo :: FilePath -> FilePath -> IO FilePath
- copyrepo old new = do
- cleanup new
- ensuretmpdir
- Utility.boolSystem \"cp\" [\"-pr\", old, new] @? \"cp -pr failed\"
-
-It seems that on OSX it does not preserve the symbolic link information, basically cp is not gnu cp on OSX, doing a \"cp -a SOURCE DEST\" seem's to the right thing on OSX. I tried it out on my archlinux workstation by replacing *-pr* with just *-a* and all the tests passed on archlinux.
-
-I'm not sure what the implications would be with changing the test with changing the cp command.
-
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_19_4253988ed178054c8b6400beeed68a29._comment b/doc/bugs/Problems_running_make_on_osx/comment_19_4253988ed178054c8b6400beeed68a29._comment
deleted file mode 100644
index 090c991c3..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_19_4253988ed178054c8b6400beeed68a29._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 19"
- date="2011-02-13T15:55:47Z"
- content="""
-On second thought and after some messing (trying most of the options and combinations of options on OSX for).... I tried replacing cp with gnu cp from coreutils on my OSX install, and all the tests passed. *sigh* cp -a is preserving some permissions and attributes but not all, its not behaving in the same way as the gnu cp does... the closet thing that I have found on OSX that behaves in the same way as gnu \"cp -pr\" is to use \"ditto\".
-
-Just doing a \"ditto SOURCE DEST\" in the tests passes everything. I'm not sure if its a good idea to use this even though it works. Though this is just the tests, does it affect CopyFile.hs where \"cp\" is called?
-
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_1_34120e82331ace01a6a4960862d38f2d._comment b/doc/bugs/Problems_running_make_on_osx/comment_1_34120e82331ace01a6a4960862d38f2d._comment
deleted file mode 100644
index a33fef7d9..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_1_34120e82331ace01a6a4960862d38f2d._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmd3qri1pXEYktlxYGwj37wCnrM4FMEJCc"
- nickname="Antoine"
- subject="Got it going!"
- date="2011-02-06T06:02:57Z"
- content="""
-Thanks to your feedback, I got it going.
-
-Maybe those two should be added to the 'OSX how-to' in the forum
-
-[realizes pcre-light is needed but pcre not installed on my mac]
-sudo port install pcre
-sudo cabal install pcre-light
-
-[tests are failing, need haskell's quickcheck]
-sudo cabal install quickcheck
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_20_7db27d1a22666c831848bc6c06d66a84._comment b/doc/bugs/Problems_running_make_on_osx/comment_20_7db27d1a22666c831848bc6c06d66a84._comment
deleted file mode 100644
index b617da926..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_20_7db27d1a22666c831848bc6c06d66a84._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 20"
- date="2011-02-13T17:54:09Z"
- content="""
-Outside the test suite, git-annex's actual use of cp puts fairly low demands on it. It tries to use cp -a or cp -p if available just to preserve whatever attributes it can preserve, but the worst case if that you have a symlink pointing to a file that doesn't have the original timestamp or whatever. And there's little expectation git preserves that stuff anyway.
-
-I will probably try to make the test suite entirely use git clone rather than cp.
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_2_cc53d1681d576186dbc868dd9801d551._comment b/doc/bugs/Problems_running_make_on_osx/comment_2_cc53d1681d576186dbc868dd9801d551._comment
deleted file mode 100644
index 91d3e89f0..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_2_cc53d1681d576186dbc868dd9801d551._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 2"
- date="2011-02-06T17:39:52Z"
- content="""
-Yes, I've moved it to [[install/OSX]] page where anyone can update it in this wiki, and added your improvements.
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_3_68f0f8ae953589ae26d57310b40c878d._comment b/doc/bugs/Problems_running_make_on_osx/comment_3_68f0f8ae953589ae26d57310b40c878d._comment
deleted file mode 100644
index 39f32c244..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_3_68f0f8ae953589ae26d57310b40c878d._comment
+++ /dev/null
@@ -1,57 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="tests fail with more recent installs of haskell platform"
- date="2011-02-07T12:43:43Z"
- content="""
-I'm running ghc 6.12.3 with the corresponding haskell-platform package from the HP site which I installed in preference to the macports version of haskell-platform (it's quite old). it seems when you install quickcheck, the version that is installed is of version 2.4.0.1 and not 1.2.0 which git-annex depends on for its tests.
-
-<pre>
-jtang@x00:~ $ cabal install quickcheck --reinstall
-Resolving dependencies...
-Configuring QuickCheck-2.4.0.1...
-Preprocessing library QuickCheck-2.4.0.1...
-
-..
-and so on..
-..
-
-</pre>
-
-it fails with this
-
-<pre>
-[54 of 54] Compiling Main ( test.hs, test.o )
-
-test.hs:56:3:
- No instance for (QuickCheck-1.2.0.1:Test.QuickCheck.Arbitrary Char)
- arising from a use of `qctest' at test.hs:56:3-64
- Possible fix:
- add an instance declaration for
- (QuickCheck-1.2.0.1:Test.QuickCheck.Arbitrary Char)
- In the expression:
- qctest \"prop_idempotent_deencode\" Git.prop_idempotent_deencode
- In the first argument of `TestList', namely
- `[qctest \"prop_idempotent_deencode\" Git.prop_idempotent_deencode,
- qctest \"prop_idempotent_fileKey\" Locations.prop_idempotent_fileKey,
- qctest
- \"prop_idempotent_key_read_show\"
- BackendTypes.prop_idempotent_key_read_show,
- qctest
- \"prop_idempotent_shellEscape\" Utility.prop_idempotent_shellEscape,
- ....]'
- In the second argument of `($)', namely
- `TestList
- [qctest \"prop_idempotent_deencode\" Git.prop_idempotent_deencode,
- qctest \"prop_idempotent_fileKey\" Locations.prop_idempotent_fileKey,
- qctest
- \"prop_idempotent_key_read_show\"
- BackendTypes.prop_idempotent_key_read_show,
- qctest
- \"prop_idempotent_shellEscape\" Utility.prop_idempotent_shellEscape,
- ....]'
-</pre>
-
-I'd imagine if I could downgrade, it would compile and pass the tests (I hope)
-
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_4_c52be386f79f14c8570a8f1397c68581._comment b/doc/bugs/Problems_running_make_on_osx/comment_4_c52be386f79f14c8570a8f1397c68581._comment
deleted file mode 100644
index e245e139f..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_4_c52be386f79f14c8570a8f1397c68581._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 4"
- date="2011-02-08T19:00:14Z"
- content="""
-I doubt that git-annex can be used with QuickCheck 1.2.0. The QuickCheck I've tested it with is 2.1.0.3 actually.
-
-I suspect you have an old version of the TestPack haskell library on your system, that is linked against QuickCheck 1.2.0. Git-annex has been tested with TestPack 2.0.0, which uses QuickCheck 2.x.
-
-In any case, you don't have to run 'make test' to build git-annex, and my comments above should make the main program compile, I expect.
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_5_7f1330a1e541b0f3e2192e596d7f7bee._comment b/doc/bugs/Problems_running_make_on_osx/comment_5_7f1330a1e541b0f3e2192e596d7f7bee._comment
deleted file mode 100644
index 9c83feb32..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_5_7f1330a1e541b0f3e2192e596d7f7bee._comment
+++ /dev/null
@@ -1,107 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 5"
- date="2011-02-08T19:56:55Z"
- content="""
-Ah, that gave me a good clue, my system just got pretty confused with a mixture of quickcheck and testpack installs. Would it be possible to put up a list of versions of the software you are using on your development environment? (at least the minimum tested version)
-
-I guess it shouldn't matter to most users who are going to rely on packagers to sort these dependancy issues, but it's nice to know.
-
-Anyway, the tests build now, and they seem to fail on my (rather messy) install of haskell platform + ghc 6.12 on osx 10.6.6.
-
-<pre>
-< output that passed some tests >
-Testing 1:blackbox:0:git-annex init
-Testing 1:blackbox:1:git-annex add:0
-Testing 1:blackbox:1:git-annex add:1
-Cases: 30 Tried: 9 Errors: 0 Failures: 0test: sha1sum: executeFile: does not exist (No such file or directory)
- git-annex: <file descriptor: 6>: hGetLine: end of file
-### Failure in: 1:blackbox:1:git-annex add:1
-add with SHA1 failed
-Testing 1:blackbox:2:git-annex setkey/fromkey
-Cases: 30 Tried: 10 Errors: 0 Failures: 1(checksum...) test: sha1sum: executeFile: does not exist (No such file or directory)
-### Error in: 1:blackbox:2:git-annex setkey/fromkey
-<file descriptor: 3>: hGetLine: end of file
-Testing 1:blackbox:3:git-annex unannex:0:no content
-Cases: 30 Tried: 11 Errors: 1 Failures: 1chmod: -R: No such file or directory
-chmod: -R: No such file or directory
-Testing 1:blackbox:3:git-annex unannex:1:with content
-### Failure in: 1:blackbox:3:git-annex unannex:1:with content
-foo is not a symlink
-Testing 1:blackbox:4:git-annex drop:0:no remotes
-Cases: 30 Tried: 13 Errors: 1 Failures: 2chmod: -R: No such file or directory
-### Error in: 1:blackbox:4:git-annex drop:0:no remotes
-.t/tmprepo/.git/annex/objects/WORM:1297194705:20:foo/WORM:1297194705:20:foo: removeLink: permission denied (Permission denied)
-Testing 1:blackbox:4:git-annex drop:1:with remote
-Cases: 30 Tried: 14 Errors: 2 Failures: 2chmod: -R: No such file or directory
-### Error in: 1:blackbox:4:git-annex drop:1:with remote
-.t/tmprepo/.git/annex/objects/WORM:1297194705:20:foo/WORM:1297194705:20:foo: removeLink: permission denied (Permission denied)
-Testing 1:blackbox:4:git-annex drop:2:untrusted remote
-Cases: 30 Tried: 15 Errors: 3 Failures: 2chmod: -R: No such file or directory
-### Error in: 1:blackbox:4:git-annex drop:2:untrusted remote
-.t/tmprepo/.git/annex/objects/WORM:1297194705:20:foo/WORM:1297194705:20:foo: removeLink: permission denied (Permission denied)
-Testing 1:blackbox:5:git-annex get
-Cases: 30 Tried: 16 Errors: 4 Failures: 2chmod: -R: No such file or directory
-### Error in: 1:blackbox:5:git-annex get
-.t/tmprepo/.git/annex/objects/WORM:1297194705:20:foo/WORM:1297194705:20:foo: removeLink: permission denied (Permission denied)
-Testing 1:blackbox:6:git-annex move
-Cases: 30 Tried: 17 Errors: 5 Failures: 2chmod: -R: No such file or directory
-### Error in: 1:blackbox:6:git-annex move
-.t/tmprepo/.git/annex/objects/WORM:1297194705:20:foo/WORM:1297194705:20:foo: removeLink: permission denied (Permission denied)
-Testing 1:blackbox:7:git-annex copy
-Cases: 30 Tried: 18 Errors: 6 Failures: 2chmod: -R: No such file or directory
-### Error in: 1:blackbox:7:git-annex copy
-.t/tmprepo/.git/annex/objects/WORM:1297194705:20:foo/WORM:1297194705:20:foo: removeLink: permission denied (Permission denied)
-Testing 1:blackbox:8:git-annex unlock/lock
-Cases: 30 Tried: 19 Errors: 7 Failures: 2chmod: -R: No such file or directory
-### Error in: 1:blackbox:8:git-annex unlock/lock
-.t/tmprepo/.git/annex/objects/WORM:1297194705:20:foo/WORM:1297194705:20:foo: removeLink: permission denied (Permission denied)
-Testing 1:blackbox:9:git-annex edit/commit:0
-Cases: 30 Tried: 20 Errors: 8 Failures: 2chmod: -R: No such file or directory
-### Error in: 1:blackbox:9:git-annex edit/commit:0
-.t/tmprepo/.git/annex/objects/WORM:1297194705:20:foo/WORM:1297194705:20:foo: removeLink: permission denied (Permission denied)
-Testing 1:blackbox:9:git-annex edit/commit:1
-Cases: 30 Tried: 21 Errors: 9 Failures: 2chmod: -R: No such file or directory
-### Error in: 1:blackbox:9:git-annex edit/commit:1
-.t/tmprepo/.git/annex/objects/WORM:1297194705:20:foo/WORM:1297194705:20:foo: removeLink: permission denied (Permission denied)
-Testing 1:blackbox:10:git-annex fix
-Cases: 30 Tried: 22 Errors: 10 Failures: 2chmod: -R: No such file or directory
-### Error in: 1:blackbox:10:git-annex fix
-.t/tmprepo/.git/annex/objects/WORM:1297194705:20:foo/WORM:1297194705:20:foo: removeLink: permission denied (Permission denied)
-Testing 1:blackbox:11:git-annex trust/untrust/semitrust
-Cases: 30 Tried: 23 Errors: 11 Failures: 2chmod: -R: No such file or directory
-### Error in: 1:blackbox:11:git-annex trust/untrust/semitrust
-.t/tmprepo/.git/annex/objects/WORM:1297194705:20:foo/WORM:1297194705:20:foo: removeLink: permission denied (Permission denied)
-Testing 1:blackbox:12:git-annex fsck:0
-Cases: 30 Tried: 24 Errors: 12 Failures: 2chmod: -R: No such file or directory
-### Error in: 1:blackbox:12:git-annex fsck:0
-.t/tmprepo/.git/annex/objects/WORM:1297194705:20:foo/WORM:1297194705:20:foo: removeLink: permission denied (Permission denied)
-Testing 1:blackbox:12:git-annex fsck:1
-Cases: 30 Tried: 25 Errors: 13 Failures: 2chmod: -R: No such file or directory
-### Error in: 1:blackbox:12:git-annex fsck:1
-.t/tmprepo/.git/annex/objects/WORM:1297194705:20:foo/WORM:1297194705:20:foo: removeLink: permission denied (Permission denied)
-Testing 1:blackbox:12:git-annex fsck:2
-Cases: 30 Tried: 26 Errors: 14 Failures: 2chmod: -R: No such file or directory
-### Error in: 1:blackbox:12:git-annex fsck:2
-.t/tmprepo/.git/annex/objects/WORM:1297194705:20:foo/WORM:1297194705:20:foo: removeLink: permission denied (Permission denied)
-Testing 1:blackbox:13:git-annex migrate:0
-Cases: 30 Tried: 27 Errors: 15 Failures: 2chmod: -R: No such file or directory
-### Error in: 1:blackbox:13:git-annex migrate:0
-.t/tmprepo/.git/annex/objects/WORM:1297194705:20:foo/WORM:1297194705:20:foo: removeLink: permission denied (Permission denied)
-Testing 1:blackbox:13:git-annex migrate:1
-Cases: 30 Tried: 28 Errors: 16 Failures: 2chmod: -R: No such file or directory
-### Error in: 1:blackbox:13:git-annex migrate:1
-.t/tmprepo/.git/annex/objects/WORM:1297194705:20:foo/WORM:1297194705:20:foo: removeLink: permission denied (Permission denied)
-Testing 1:blackbox:14:git-annex unused/dropunused
-Cases: 30 Tried: 29 Errors: 17 Failures: 2chmod: -R: No such file or directory
-### Error in: 1:blackbox:14:git-annex unused/dropunused
-.t/tmprepo/.git/annex/objects/WORM:1297194705:20:foo/WORM:1297194705:20:foo: removeLink: permission denied (Permission denied)
-Cases: 30 Tried: 30 Errors: 18 Failures: 2
-chmod: -R: No such file or directory
-test: .t/repo/.git/annex/objects/WORM:1297194705:20:foo/WORM:1297194705:20:foo: removeLink: permission denied (Permission denied)
-make: *** [test] Error 1
-</pre>
-
-I assumed that since the tests built, then running them shouldn't be a problem. It looks like some argument isn't being passed about for the location of the .t directory that gets created. I will check the dependancies on my system again.
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_6_0c46f5165ceb5a7b9ea9689c33b3a4f8._comment b/doc/bugs/Problems_running_make_on_osx/comment_6_0c46f5165ceb5a7b9ea9689c33b3a4f8._comment
deleted file mode 100644
index afc3088d4..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_6_0c46f5165ceb5a7b9ea9689c33b3a4f8._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 6"
- date="2011-02-08T23:20:08Z"
- content="""
-You're missing the sha1sum command, everything else is a followon error from that. Added a hint about this to [[install]],
-and in the next version configure will check for sha1sum.
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_7_237a137cce58a28abcc736cbf2c420b0._comment b/doc/bugs/Problems_running_make_on_osx/comment_7_237a137cce58a28abcc736cbf2c420b0._comment
deleted file mode 100644
index 8d8aefcb2..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_7_237a137cce58a28abcc736cbf2c420b0._comment
+++ /dev/null
@@ -1,22 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 7"
- date="2011-02-09T00:45:31Z"
- content="""
-That's odd, I have the md5sha1sum package installed and it still fails with pretty much the same error
-
-<pre>
-Testing 1:blackbox:0:git-annex init
-Cases: 30 Tried: 7 Errors: 0 Failures: 0chmod: -R: No such file or directory
-### Error in: 1:blackbox:0:git-annex init
-.t/repo/.git/annex/objects/SHA1:ee80d2cec57a3810db83b80e1b320df3a3721ffa/SHA1:ee80d2cec57a3810db83b80e1b320df3a3721ffa: removeLink: permission denied (Permission denied)
-Testing 1:blackbox:1:git-annex add:0
-### Error in: 1:blackbox:1:git-annex add:0
-foo: openFile: permission denied (Permission denied)
-
-< and so on >
-</pre>
-
-the configure script finds sha1sum, builds and starts to run.
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_8_efafa203addf8fa79e33e21a87fb5a2b._comment b/doc/bugs/Problems_running_make_on_osx/comment_8_efafa203addf8fa79e33e21a87fb5a2b._comment
deleted file mode 100644
index 9401bd453..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_8_efafa203addf8fa79e33e21a87fb5a2b._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 8"
- date="2011-02-09T04:10:27Z"
- content="""
-The chmod errors are because your chmod does not understand the -R argument. Only the test suite uses chmod -R. I've fixed it to modify modes manually.
-"""]]
diff --git a/doc/bugs/Problems_running_make_on_osx/comment_9_cc283b485b3c95ba7eebc8f0c96969b3._comment b/doc/bugs/Problems_running_make_on_osx/comment_9_cc283b485b3c95ba7eebc8f0c96969b3._comment
deleted file mode 100644
index da6d7ca17..000000000
--- a/doc/bugs/Problems_running_make_on_osx/comment_9_cc283b485b3c95ba7eebc8f0c96969b3._comment
+++ /dev/null
@@ -1,66 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 9"
- date="2011-02-09T09:12:52Z"
- content="""
-[a0826293][] fixed the last problem, there is coreutils available in macports, if they are installed you get the gnu equivalents but they are prefixed with a g (e.g. gchmod instead of chmod), I guess not everyone will have these install or prefer these on [[install/OSX]]
-
-Some more tests fail now...
-
-<pre>
-Testing 1:blackbox:3:git-annex unannex:1:with content
-### Failure in: 1:blackbox:3:git-annex unannex:1:with content
-foo is not a symlink
-Testing 1:blackbox:4:git-annex drop:0:no remotes
-### Failure in: 1:blackbox:4:git-annex drop:0:no remotes
-drop wrongly succeeded with no known copy of file
-Testing 1:blackbox:4:git-annex drop:1:with remote
-Testing 1:blackbox:4:git-annex drop:2:untrusted remote
-Testing 1:blackbox:5:git-annex get
-Testing 1:blackbox:6:git-annex move
-Testing 1:blackbox:7:git-annex copy
-### Failure in: 1:blackbox:7:git-annex copy
-move --to of file already there failed
-Testing 1:blackbox:8:git-annex unlock/lock
-### Error in: 1:blackbox:8:git-annex unlock/lock
-forkProcess: resource exhausted (Resource temporarily unavailable)
-Testing 1:blackbox:9:git-annex edit/commit:0
-### Error in: 1:blackbox:9:git-annex edit/commit:0
-forkProcess: resource exhausted (Resource temporarily unavailable)
-Testing 1:blackbox:9:git-annex edit/commit:1
-### Error in: 1:blackbox:9:git-annex edit/commit:1
-forkProcess: resource exhausted (Resource temporarily unavailable)
-Testing 1:blackbox:10:git-annex fix
-### Error in: 1:blackbox:10:git-annex fix
-forkProcess: resource exhausted (Resource temporarily unavailable)
-Testing 1:blackbox:11:git-annex trust/untrust/semitrust
-### Error in: 1:blackbox:11:git-annex trust/untrust/semitrust
-forkProcess: resource exhausted (Resource temporarily unavailable)
-Testing 1:blackbox:12:git-annex fsck:0
-### Error in: 1:blackbox:12:git-annex fsck:0
-forkProcess: resource exhausted (Resource temporarily unavailable)
-Testing 1:blackbox:12:git-annex fsck:1
-### Error in: 1:blackbox:12:git-annex fsck:1
-forkProcess: resource exhausted (Resource temporarily unavailable)
-Testing 1:blackbox:12:git-annex fsck:2
-### Error in: 1:blackbox:12:git-annex fsck:2
-forkProcess: resource exhausted (Resource temporarily unavailable)
-Testing 1:blackbox:13:git-annex migrate:0
-### Error in: 1:blackbox:13:git-annex migrate:0
-forkProcess: resource exhausted (Resource temporarily unavailable)
-Testing 1:blackbox:13:git-annex migrate:1
-### Error in: 1:blackbox:13:git-annex migrate:1
-forkProcess: resource exhausted (Resource temporarily unavailable)
-Testing 1:blackbox:14:git-annex unused/dropunused
-### Error in: 1:blackbox:14:git-annex unused/dropunused
-forkProcess: resource exhausted (Resource temporarily unavailable)
-Cases: 30 Tried: 30 Errors: 11 Failures: 3
-test: failed
-make: *** [test] Error 1
-</pre>
-
-On a side note, I think I found another bug in the testing. I had tested in a virtual machine in archlinux (a very recent updated version) Please see the report here [[tests fail when there is no global .gitconfig for the user]]
-
-[a0826293]: http://git.kitenet.net/?p=git-annex;a=commit;h=7a0826293e0ac6c0000f49a1618c1c613b909aa1
-"""]]
diff --git a/doc/bugs/Problems_with_syncing_gnucash.mdwn b/doc/bugs/Problems_with_syncing_gnucash.mdwn
deleted file mode 100644
index 6a1f96a9f..000000000
--- a/doc/bugs/Problems_with_syncing_gnucash.mdwn
+++ /dev/null
@@ -1,568 +0,0 @@
-### Please describe the problem.
-I am trying to sync gnucash between my server and my notebook. Both devices are connected via VPN to provide bidirectional SSH connectivity. After adding some data in gnucash the logfiles get synced properly but the changes to the gnucash.gnucash file are not recognized. Touching the file afterwards causes git-annex to immediately transfer the file.
-
-### What steps will reproduce the problem?
-
-Store your gnucash configuration in a git-annex repository. Add some transactions and wait for git-annex to sync your *.gnucash file.
-
-### What version of git-annex are you using? On what operating system?
-
-server and notebook -> Ubuntu 12.04.2 LTS:
-[[!format sh """
-florz@server:~$ git-annex version
-git-annex version: 4.20130601
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS
-"""]]
-
-### Please provide any additional information below.
-
-before opening gnucash:
-[[!format sh """
-florz@notebook:~$ stat annex-sync/gnucash/gnucash.gnucash
- Datei: »annex-sync/gnucash/gnucash.gnucash“
- Größe: 113902 Blöcke: 240 EA Block: 4096 Normale Datei
-Gerät: 15h/21d Inode: 2974371 Verknüpfungen: 1
-Zugriff: (0600/-rw-------) Uid: ( 1000/ florz) Gid: ( 1000/ florz)
-Zugriff : 2013-06-22 19:32:37.974073365 +0200
-Modifiziert: 2013-06-22 19:32:37.846073367 +0200
-Geändert : 2013-06-22 19:32:37.970073365 +0200
- Geburt : -
-
-florz@server:~$ stat annex-sync/gnucash/gnucash.gnucash
- Datei: »annex-sync/gnucash/gnucash.gnucash“
- Größe: 113902 Blöcke: 224 EA Block: 4096 Normale Datei
-Gerät: fc00h/64512d Inode: 401737579 Verknüpfungen: 1
-Zugriff: (0600/-rw-------) Uid: ( 1000/ florz) Gid: ( 1000/ florz)
-Zugriff : 2013-06-22 19:40:24.148876398 +0200
-Modifiziert: 2013-06-22 19:24:18.000000000 +0200
-Geändert : 2013-06-22 19:24:26.817865369 +0200
- Geburt : -
-"""]]
-
-after doing some changes in gnucash:
-[[!format sh """
-florz@notebook:~$ stat annex-sync/gnucash/gnucash.gnucash
- Datei: »annex-sync/gnucash/gnucash.gnucash“
- Größe: 114039 Blöcke: 240 EA Block: 4096 Normale Datei
-Gerät: 15h/21d Inode: 2974990 Verknüpfungen: 1
-Zugriff: (0600/-rw-------) Uid: ( 1000/ florz) Gid: ( 1000/ florz)
-Zugriff : 2013-06-22 19:52:12.226049268 +0200
-Modifiziert: 2013-06-22 19:52:12.342049265 +0200
-Geändert : 2013-06-22 19:52:12.342049265 +0200
- Geburt : -
-
-florz@server:~$ stat annex-sync/gnucash/gnucash.gnucash
- Datei: »annex-sync/gnucash/gnucash.gnucash“
- Größe: 113902 Blöcke: 224 EA Block: 4096 Normale Datei
-Gerät: fc00h/64512d Inode: 401737579 Verknüpfungen: 1
-Zugriff: (0600/-rw-------) Uid: ( 1000/ florz) Gid: ( 1000/ florz)
-Zugriff : 2013-06-22 19:40:24.148876398 +0200
-Modifiziert: 2013-06-22 19:24:18.000000000 +0200
-Geändert : 2013-06-22 19:24:26.817865369 +0200
- Geburt : -
-
-# after some time -> still no transfer
-
-florz@server:~$ stat annex-sync/gnucash/gnucash.gnucash
- Datei: »annex-sync/gnucash/gnucash.gnucash“
- Größe: 113902 Blöcke: 224 EA Block: 4096 Normale Datei
-Gerät: fc00h/64512d Inode: 401737579 Verknüpfungen: 1
-Zugriff: (0600/-rw-------) Uid: ( 1000/ florz) Gid: ( 1000/ florz)
-Zugriff : 2013-06-22 19:40:24.148876398 +0200
-Modifiziert: 2013-06-22 19:24:18.000000000 +0200
-Geändert : 2013-06-22 19:24:26.817865369 +0200
- Geburt : -
-"""]]
-
-doing a touch on the file:
-[[!format sh """
-florz@notebook:~$ touch annex-sync/gnucash/gnucash.gnucash
-florz@notebook:~$ stat annex-sync/gnucash/gnucash.gnucash
- Datei: »annex-sync/gnucash/gnucash.gnucash“
- Größe: 114039 Blöcke: 240 EA Block: 4096 Normale Datei
-Gerät: 15h/21d Inode: 2974990 Verknüpfungen: 1
-Zugriff: (0600/-rw-------) Uid: ( 1000/ florz) Gid: ( 1000/ florz)
-Zugriff : 2013-06-22 19:54:27.222046497 +0200
-Modifiziert: 2013-06-22 19:54:27.070046501 +0200
-Geändert : 2013-06-22 19:54:27.214046498 +0200
- Geburt : -
-
-#it syncs immediately
-
-florz@server:~$ stat annex-sync/gnucash/gnucash.gnucash
- Datei: »annex-sync/gnucash/gnucash.gnucash“
- Größe: 114039 Blöcke: 224 EA Block: 4096 Normale Datei
-Gerät: fc00h/64512d Inode: 401737638 Verknüpfungen: 1
-Zugriff: (0600/-rw-------) Uid: ( 1000/ florz) Gid: ( 1000/ florz)
-Zugriff : 2013-06-22 19:54:35.307056482 +0200
-Modifiziert: 2013-06-22 19:54:27.000000000 +0200
-Geändert : 2013-06-22 19:54:34.787072264 +0200
- Geburt : -
-"""]]
-
-on my notebook:
-[[!format sh """
-Everything up-to-date
-Everything up-to-date
-Everything up-to-date
-[2013-06-22 19:52:12 CEST] Watcher: file deleted gnucash/gnucash.gnucash.tmp-rFzA3U
-[2013-06-22 19:52:12 CEST] Committer: committing 1 changes
-[2013-06-22 19:52:12 CEST] Committer: Committing changes to git
-[2013-06-22 19:52:12 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]
-[2013-06-22 19:52:12 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit","--allow-empty-message","--no-edit","-m","","--quiet","--no-verify"]
-[2013-06-22 19:52:12 CEST] Pusher: Syncing with server192.168.2.2, home192.168.1.3
-[2013-06-22 19:52:12 CEST] Watcher: add direct gnucash/gnucash.gnucash.20130622195200.log
-[2013-06-22 19:52:12 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]
-[2013-06-22 19:52:12 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]
-[2013-06-22 19:52:12 CEST] Pusher: pushing to [Remote { name ="server192.168.2.2" },Remote { name ="home192.168.1.3" }]
-[2013-06-22 19:52:12 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","branch","-f","synced/master"]
-[2013-06-22 19:52:12 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","home192.168.1.3","git-annex:synced/git-annex","master:synced/master"]
-[2013-06-22 19:52:12 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","server192.168.2.2","git-annex:synced/git-annex","master:synced/master"]
-[2013-06-22 19:52:13 CEST] read: lsof ["-F0can","+d","/home/florz/annex-sync/.git/annex/tmp/"]
-[2013-06-22 19:52:13 CEST] Committer: Adding gnucash.g..95200.log
-ok
-(Recording state in git...)
-(Recording state in git...)
-
-
-
-(Recording state in git...)
-add gnucash/gnucash.gnucash.20130622195200.log (checksum...) [2013-06-22 19:52:13 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-t","blob","-w","--stdin"]
-[2013-06-22 19:52:13 CEST] Committer: committing 1 changes
-[2013-06-22 19:52:13 CEST] Committer: Committing changes to git
-[2013-06-22 19:52:13 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]
-[2013-06-22 19:52:13 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit","--allow-empty-message","--no-edit","-m","","--quiet","--no-verify"]
-[2013-06-22 19:52:13 CEST] Committer: queued Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash.20130622195200.log Nothing : new file created
-[2013-06-22 19:52:13 CEST] Transferrer: Transferring: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash.20130622195200.log Nothing
-[2013-06-22 19:52:13 CEST] Committer: queued Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash.20130622195200.log Nothing : new file created
-[2013-06-22 19:52:13 CEST] call: /home/florz/bin/git-annex ["transferkeys","--readfd","29","--writefd","27"]
-[2013-06-22 19:52:13 CEST] TransferWatcher: transfer starting: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash.20130622195200.log Nothing
-[2013-06-22 19:52:14 CEST] Watcher: changed direct .gnucash/books/gnucash.gnucash.gcm
-[2013-06-22 19:52:14 CEST] Watcher: file deleted gnucash/gnucash.gnucash.7f0101.29284.LNK
-[2013-06-22 19:52:14 CEST] Watcher: file deleted gnucash/gnucash.gnucash.LCK
-[2013-06-22 19:52:14 CEST] Watcher: changed direct .gnucash/accelerator-map
-[2013-06-22 19:52:14 CEST] Watcher: changed direct .gnucash/expressions-2.0
-[2013-06-22 19:52:14 CEST] Watcher: changed direct .gnucash/stylesheets-2.0
-[2013-06-22 19:52:14 CEST] Watcher: add direct gnucash/gnucash.gnucash.20130622195212.log
-[2013-06-22 19:52:14 CEST] read: lsof ["-F0can","+d","/home/florz/annex-sync/.git/annex/tmp/"]
-[2013-06-22 19:52:14 CEST] Committer: Adding 5 files
-ok
-(Recording state in git...)
-add .gnucash/books/gnucash.gnucash.gcm (checksum...) [2013-06-22 19:52:15 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-t","blob","-w","--stdin"]
-ok
-add .gnucash/accelerator-map (checksum...) [2013-06-22 19:52:15 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-t","blob","-w","--stdin"]
-ok
-add .gnucash/expressions-2.0 (checksum...) [2013-06-22 19:52:15 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-t","blob","-w","--stdin"]
-ok
-add .gnucash/stylesheets-2.0 (checksum...) [2013-06-22 19:52:15 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-t","blob","-w","--stdin"]
-ok
-add gnucash/gnucash.gnucash.20130622195212.log (checksum...) [2013-06-22 19:52:15 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-t","blob","-w","--stdin"]
-[2013-06-22 19:52:15 CEST] Committer: committing 7 changes
-[2013-06-22 19:52:15 CEST] Committer: Committing changes to git
-[2013-06-22 19:52:15 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]
-To ssh://florz@192.168.1.3/home/florz/annex-sync/
- 7d4c30d..1954c7f master -> synced/master
-[2013-06-22 19:52:15 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit","--allow-empty-message","--no-edit","-m","","--quiet","--no-verify"]
-[2013-06-22 19:52:15 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]
-[2013-06-22 19:52:15 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]
-[2013-06-22 19:52:15 CEST] Merger: merging refs/remotes/home192.168.1.3/synced/master into refs/heads/master
-[2013-06-22 19:52:15 CEST] Committer: queued Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash.20130622195212.log Nothing : new file created
-[2013-06-22 19:52:15 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]
-[2013-06-22 19:52:15 CEST] Committer: queued Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash.20130622195212.log Nothing : new file created
-[2013-06-22 19:52:15 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]
-[2013-06-22 19:52:15 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]
-[2013-06-22 19:52:15 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync/.git/annex/merge/","merge","--no-edit","refs/remotes/home192.168.1.3/synced/master"]
-Already up-to-date.
-[2013-06-22 19:52:15 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]
-[2013-06-22 19:52:15 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","diff-tree","-z","--raw","--no-renames","-l0","-r","e1cb6c3b8bc0c851e6dab51271a4cde04815c50c","e1cb6c3b8bc0c851e6dab51271a4cde04815c50c"]
-To ssh://florz@192.168.2.2/home/florz/annex-sync/
- 7d4c30d..e1cb6c3 master -> synced/master
-[2013-06-22 19:52:16 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]
-[2013-06-22 19:52:16 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]
-[2013-06-22 19:52:16 CEST] Merger: merging refs/remotes/server192.168.2.2/synced/master into refs/heads/master
-[2013-06-22 19:52:16 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]
-[2013-06-22 19:52:16 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]
-[2013-06-22 19:52:16 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]
-[2013-06-22 19:52:16 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync/.git/annex/merge/","merge","--no-edit","refs/remotes/server192.168.2.2/synced/master"]
-Already up-to-date.
-[2013-06-22 19:52:16 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]
-[2013-06-22 19:52:16 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","diff-tree","-z","--raw","--no-renames","-l0","-r","e1cb6c3b8bc0c851e6dab51271a4cde04815c50c","e1cb6c3b8bc0c851e6dab51271a4cde04815c50c"]
-
-gnucash.gnucash.20130622195200.log
-
- 778 100% 0.00kB/s 0:00:00
- 778 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-[2013-06-22 19:52:17 CEST] TransferWatcher: transfer starting: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash.20130622195200.log Just 778
-
-sent 876 bytes received 31 bytes 201.56 bytes/sec
-total size is 778 speedup is 0.86
-[2013-06-22 19:52:17 CEST] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512", transferKey = Key {keyName = "8b8aa5c2cfe4466c6b897f7987246021468033301a696e2db0070386f7d0f3fd.log", keyBackendName = "SHA256E", keySize = Just 778, keyMtime = Nothing}}
-[2013-06-22 19:52:17 CEST] Transferrer: Uploaded gnucash.g..95200.log
-[2013-06-22 19:52:17 CEST] Transferrer: Transferring: Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash.20130622195212.log Nothing
-[2013-06-22 19:52:17 CEST] TransferWatcher: transfer starting: Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash.20130622195212.log Nothing
-[2013-06-22 19:52:18 CEST] Pusher: Syncing with server192.168.2.2, home192.168.1.3
-[2013-06-22 19:52:18 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-w","--stdin-paths"]
-[2013-06-22 19:52:18 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]
-[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","write-tree"]
-[2013-06-22 19:52:18 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit-tree","f2463d30e73fec86e14c9df4bcae5e568398a503","-p","refs/heads/git-annex"]
-[2013-06-22 19:52:18 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-ref","refs/heads/git-annex","776258f91d4245ffe13117a771dc8c7723867c1a"]
-[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]
-[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]
-[2013-06-22 19:52:18 CEST] Pusher: pushing to [Remote { name ="server192.168.2.2" },Remote { name ="home192.168.1.3" }]
-[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]
-[2013-06-22 19:52:18 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","branch","-f","synced/master"]
-[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:52:18 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","server192.168.2.2","git-annex:synced/git-annex","master:synced/master"]
-[2013-06-22 19:52:18 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","home192.168.1.3","git-annex:synced/git-annex","master:synced/master"]
-[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..776258f91d4245ffe13117a771dc8c7723867c1a","--oneline","-n1"]
-[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e7d4504abea59b0b59659908ba771783acc6cd55","--oneline","-n1"]
-[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]
-[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]
-[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","ls-tree","-z","--","refs/heads/git-annex","uuid.log","remote.log","trust.log","group.log","preferred-content.log"]
-[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]
-[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]
-[2013-06-22 19:52:18 CEST] Merger: merging refs/heads/synced/master into refs/heads/master
-[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]
-[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]
-[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]
-[2013-06-22 19:52:18 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync/.git/annex/merge/","merge","--no-edit","refs/heads/synced/master"]
-Already up-to-date.
-[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]
-[2013-06-22 19:52:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","diff-tree","-z","--raw","--no-renames","-l0","-r","e1cb6c3b8bc0c851e6dab51271a4cde04815c50c","e1cb6c3b8bc0c851e6dab51271a4cde04815c50c"]
-
-gnucash.gnucash.20130622195212.log
-
- 411 100% 0.00kB/s 0:00:00
- 411 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-[2013-06-22 19:52:20 CEST] TransferWatcher: transfer starting: Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash.20130622195212.log Just 411
-
-sent 509 bytes received 31 bytes 154.29 bytes/sec
-total size is 411 speedup is 0.76
-[2013-06-22 19:52:20 CEST] Transferrer: Uploaded gnucash.g..95212.log
-[2013-06-22 19:52:20 CEST] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID "84bab1ab-238f-4602-953a-a297aab6da44", transferKey = Key {keyName = "36e8842e91f7577d12992724c8f52586e9ea7cb0234312dc5544ea4dc6f6c39a.log", keyBackendName = "SHA256E", keySize = Just 411, keyMtime = Nothing}}
-[2013-06-22 19:52:20 CEST] Transferrer: Transferring: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash.20130622195212.log Nothing
-[2013-06-22 19:52:20 CEST] TransferWatcher: transfer starting: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash.20130622195212.log Nothing
-To ssh://florz@192.168.1.3/home/florz/annex-sync/
- e7d4504..776258f git-annex -> synced/git-annex
-[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]
-[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..776258f91d4245ffe13117a771dc8c7723867c1a","--oneline","-n1"]
-[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e7d4504abea59b0b59659908ba771783acc6cd55","--oneline","-n1"]
-[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]
-[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]
-[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]
-[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]
-[2013-06-22 19:52:21 CEST] Merger: merging refs/remotes/home192.168.1.3/synced/master into refs/heads/master
-[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]
-[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]
-[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]
-[2013-06-22 19:52:21 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync/.git/annex/merge/","merge","--no-edit","refs/remotes/home192.168.1.3/synced/master"]
-Already up-to-date.
-[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]
-[2013-06-22 19:52:21 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","diff-tree","-z","--raw","--no-renames","-l0","-r","e1cb6c3b8bc0c851e6dab51271a4cde04815c50c","e1cb6c3b8bc0c851e6dab51271a4cde04815c50c"]
-
-gnucash.gnucash.20130622195212.log
-
- 411 100% 0.00kB/s 0:00:00
- 411 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-[2013-06-22 19:52:21 CEST] TransferWatcher: transfer starting: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash.20130622195212.log Just 411
-
-sent 509 bytes received 31 bytes 360.00 bytes/sec
-total size is 411 speedup is 0.76
-[2013-06-22 19:52:22 CEST] Transferrer: Uploaded gnucash.g..95212.log
-[2013-06-22 19:52:22 CEST] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512", transferKey = Key {keyName = "36e8842e91f7577d12992724c8f52586e9ea7cb0234312dc5544ea4dc6f6c39a.log", keyBackendName = "SHA256E", keySize = Just 411, keyMtime = Nothing}}
-[2013-06-22 19:52:22 CEST] Transferrer: Transferring: Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash.20130622195200.log Nothing
-[2013-06-22 19:52:22 CEST] TransferWatcher: transfer starting: Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash.20130622195200.log Nothing
-To ssh://florz@192.168.2.2/home/florz/annex-sync/
- e7d4504..776258f git-annex -> synced/git-annex
-[2013-06-22 19:52:22 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]
-[2013-06-22 19:52:22 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:52:22 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..776258f91d4245ffe13117a771dc8c7723867c1a","--oneline","-n1"]
-[2013-06-22 19:52:22 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e7d4504abea59b0b59659908ba771783acc6cd55","--oneline","-n1"]
-[2013-06-22 19:52:22 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]
-[2013-06-22 19:52:22 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]
-git-annex-shell: key is already present in annex
-rsync: connection unexpectedly closed (0 bytes received so far) [sender]
-rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
-[2013-06-22 19:52:22 CEST] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID "84bab1ab-238f-4602-953a-a297aab6da44", transferKey = Key {keyName = "8b8aa5c2cfe4466c6b897f7987246021468033301a696e2db0070386f7d0f3fd.log", keyBackendName = "SHA256E", keySize = Just 778, keyMtime = Nothing}}
-git-annex-shell: key is already present in annex
-rsync: connection unexpectedly closed (0 bytes received so far) [sender]
-rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
-[2013-06-22 19:52:24 CEST] Pusher: Syncing with server192.168.2.2, home192.168.1.3
-[2013-06-22 19:52:24 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-w","--stdin-paths"]
-[2013-06-22 19:52:24 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]
-[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","write-tree"]
-[2013-06-22 19:52:24 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit-tree","1641422d48162f533f80693486d7c5a1208b9fcf","-p","refs/heads/git-annex"]
-[2013-06-22 19:52:24 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-ref","refs/heads/git-annex","48cfe2eb07d63d4a59c237994eb07896c92ef1c4"]
-[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]
-[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]
-[2013-06-22 19:52:24 CEST] Pusher: pushing to [Remote { name ="server192.168.2.2" },Remote { name ="home192.168.1.3" }]
-[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]
-[2013-06-22 19:52:24 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","branch","-f","synced/master"]
-[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:52:24 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","server192.168.2.2","git-annex:synced/git-annex","master:synced/master"]
-[2013-06-22 19:52:24 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","home192.168.1.3","git-annex:synced/git-annex","master:synced/master"]
-[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..48cfe2eb07d63d4a59c237994eb07896c92ef1c4","--oneline","-n1"]
-[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e7d4504abea59b0b59659908ba771783acc6cd55","--oneline","-n1"]
-[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]
-[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..776258f91d4245ffe13117a771dc8c7723867c1a","--oneline","-n1"]
-[2013-06-22 19:52:24 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]
-[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]
-[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..48cfe2eb07d63d4a59c237994eb07896c92ef1c4","--oneline","-n1"]
-[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..df87e3bef80902abc6d48ce0fbfe3432c790cd21","--oneline","-n1"]
-[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]
-[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..776258f91d4245ffe13117a771dc8c7723867c1a","--oneline","-n1"]
-[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]
-[2013-06-22 19:52:25 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]
-[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","diff-index","--raw","-z","-r","--no-renames","-l0","--cached","df87e3bef80902abc6d48ce0fbfe3432c790cd21"]
-[2013-06-22 19:52:25 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-t","blob","-w","--stdin"]
-[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","df87e3bef80902abc6d48ce0fbfe3432c790cd21..refs/heads/git-annex","--oneline","-n1"]
-[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","write-tree"]
-[2013-06-22 19:52:25 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit-tree","5bf44cd143b2c35a44e609e083af23093eb02028","-p","refs/heads/git-annex","-p","df87e3bef80902abc6d48ce0fbfe3432c790cd21"]
-[2013-06-22 19:52:25 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-ref","refs/heads/git-annex","4cd264f192611f5a0d76e54d31329921a650f896"]
-[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]
-[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..4cd264f192611f5a0d76e54d31329921a650f896","--oneline","-n1"]
-[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..df87e3bef80902abc6d48ce0fbfe3432c790cd21","--oneline","-n1"]
-[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]
-[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..776258f91d4245ffe13117a771dc8c7723867c1a","--oneline","-n1"]
-[2013-06-22 19:52:25 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]
-To ssh://florz@192.168.1.3/home/florz/annex-sync/
- df87e3b..4cd264f git-annex -> synced/git-annex
-[2013-06-22 19:52:26 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]
-[2013-06-22 19:52:26 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:52:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..4cd264f192611f5a0d76e54d31329921a650f896","--oneline","-n1"]
-[2013-06-22 19:52:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..df87e3bef80902abc6d48ce0fbfe3432c790cd21","--oneline","-n1"]
-[2013-06-22 19:52:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]
-[2013-06-22 19:52:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..776258f91d4245ffe13117a771dc8c7723867c1a","--oneline","-n1"]
-[2013-06-22 19:52:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]
-To ssh://florz@192.168.2.2/home/florz/annex-sync/
- 776258f..4cd264f git-annex -> synced/git-annex
-[2013-06-22 19:52:28 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]
-[2013-06-22 19:52:28 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:52:28 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..4cd264f192611f5a0d76e54d31329921a650f896","--oneline","-n1"]
-[2013-06-22 19:52:28 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..df87e3bef80902abc6d48ce0fbfe3432c790cd21","--oneline","-n1"]
-[2013-06-22 19:52:28 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]
-[2013-06-22 19:52:28 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]
-[2013-06-22 19:53:18 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","ls-tree","-z","--","refs/heads/git-annex","uuid.log","remote.log","trust.log","group.log","preferred-content.log"]
-[2013-06-22 19:54:27 CEST] Watcher: changed direct gnucash/gnucash.gnucash
-[2013-06-22 19:54:27 CEST] read: lsof ["-F0can","+d","/home/florz/annex-sync/.git/annex/tmp/"]
-[2013-06-22 19:54:27 CEST] Committer: Adding gnucash.gnucash
-ok
-(Recording state in git...)
-
-
-(Recording state in git...)
-
-
-(Recording state in git...)
-(merging synced/git-annex into git-annex...)
-(Recording state in git...)
-add gnucash/gnucash.gnucash (checksum...) [2013-06-22 19:54:27 CEST] read: sha256sum ["/home/florz/annex-sync/.git/annex/tmp/gnucash25536.gnucash"]
-[2013-06-22 19:54:27 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-t","blob","-w","--stdin"]
-[2013-06-22 19:54:27 CEST] Committer: committing 1 changes
-[2013-06-22 19:54:27 CEST] Committer: Committing changes to git
-[2013-06-22 19:54:27 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit","--allow-empty-message","--no-edit","-m","","--quiet","--no-verify"]
-[2013-06-22 19:54:27 CEST] Committer: queued Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash Nothing : new file created
-[2013-06-22 19:54:27 CEST] Pusher: Syncing with server192.168.2.2, home192.168.1.3
-[2013-06-22 19:54:27 CEST] Transferrer: Transferring: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash Nothing
-[2013-06-22 19:54:27 CEST] Committer: queued Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash Nothing : new file created
-[2013-06-22 19:54:27 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-w","--stdin-paths"]
-[2013-06-22 19:54:27 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","write-tree"]
-[2013-06-22 19:54:27 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit-tree","4c81716cf1a0e0df472ffb43770ac8a27ca45420","-p","refs/heads/git-annex"]
-[2013-06-22 19:54:27 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-ref","refs/heads/git-annex","e9e2f951a5c1c645447ccc565bc3def9caeff93c"]
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]
-[2013-06-22 19:54:27 CEST] Pusher: pushing to [Remote { name ="server192.168.2.2" },Remote { name ="home192.168.1.3" }]
-[2013-06-22 19:54:27 CEST] TransferWatcher: transfer starting: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash Nothing
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]
-[2013-06-22 19:54:27 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","branch","-f","synced/master"]
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:54:27 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","server192.168.2.2","git-annex:synced/git-annex","master:synced/master"]
-[2013-06-22 19:54:27 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","home192.168.1.3","git-annex:synced/git-annex","master:synced/master"]
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e9e2f951a5c1c645447ccc565bc3def9caeff93c","--oneline","-n1"]
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..df87e3bef80902abc6d48ce0fbfe3432c790cd21","--oneline","-n1"]
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..4cd264f192611f5a0d76e54d31329921a650f896","--oneline","-n1"]
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","ls-tree","-z","--","refs/heads/git-annex","uuid.log","remote.log","trust.log","group.log","preferred-content.log"]
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]
-[2013-06-22 19:54:27 CEST] Merger: merging refs/heads/synced/master into refs/heads/master
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]
-[2013-06-22 19:54:27 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync/.git/annex/merge/","merge","--no-edit","refs/heads/synced/master"]
-Already up-to-date.
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]
-[2013-06-22 19:54:27 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","diff-tree","-z","--raw","--no-renames","-l0","-r","e41ffae310ed2a50058b2f963decde4f9bc10a14","e41ffae310ed2a50058b2f963decde4f9bc10a14"]
-
-
-
-gnucash.gnucash
-
- 32768 28% 0.00kB/s 0:00:00 [2
- 114039 100% 15.50MB/s 0:00:00 (xfer#1, to-check=0/1)
-013-06-22 19:54:28 CEST] TransferWatcher: transfer starting: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash Just 32768
-[2013-06-22 19:54:28 CEST] TransferWatcher: transfer starting: Upload UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512" gnucash/gnucash.gnucash Just 114039
-To ssh://florz@192.168.1.3/home/florz/annex-sync/
- 4cd264f..e9e2f95 git-annex -> synced/git-annex
- e1cb6c3..e41ffae master -> synced/master
-[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]
-[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e9e2f951a5c1c645447ccc565bc3def9caeff93c","--oneline","-n1"]
-[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..df87e3bef80902abc6d48ce0fbfe3432c790cd21","--oneline","-n1"]
-[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]
-[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..4cd264f192611f5a0d76e54d31329921a650f896","--oneline","-n1"]
-[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]
-[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]
-[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]
-[2013-06-22 19:54:33 CEST] Merger: merging refs/remotes/home192.168.1.3/synced/master into refs/heads/master
-[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]
-[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]
-[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]
-[2013-06-22 19:54:33 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync/.git/annex/merge/","merge","--no-edit","refs/remotes/home192.168.1.3/synced/master"]
-Already up-to-date.
-[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/ann
-sent 114130 bytes received 31 bytes 20756.55 bytes/sec
-total size is 114039 espeedup is 1.00
-x-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]
-[2013-06-22 19:54:33 CEST] Transferrer: Uploaded gnucash.gnucash
-[2013-06-22 19:54:33 CEST] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID "dc591dd7-2446-45c6-84dc-55bdf79e7512", transferKey = Key {keyName = "91ec950e4004863219ea33f1398ea4308e0969267c207272e046858ede8bf9d9", keyBackendName = "SHA256E", keySize = Just 114039, keyMtime = Nothing}}
-[2013-06-22 19:54:33 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","diff-tree","-z","--raw","--no-renames","-l0","-r","e41ffae310ed2a50058b2f963decde4f9bc10a14","e41ffae310ed2a50058b2f963decde4f9bc10a14"]
-[2013-06-22 19:54:33 CEST] Transferrer: Transferring: Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash Nothing
-[2013-06-22 19:54:33 CEST] TransferWatcher: transfer starting: Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash Nothing
-
-gnucash.gnucash
-
- 32768 28% 0.00kB/s 0:00:00
- 114039 100% 19.38MB/s 0:00:00 (xfer#1, to-check=0/1)
-[2013-06-22 19:54:33 CEST] TransferWatcher: transfer starting: Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash Just 32768
-[2013-06-22 19:54:33 CEST] TransferWatcher: transfer starting: Upload UUID "84bab1ab-238f-4602-953a-a297aab6da44" gnucash/gnucash.gnucash Just 114039
-To ssh://florz@192.168.2.2/home/florz/annex-sync/
- 4cd264f..e9e2f95 git-annex -> synced/git-annex
- e1cb6c3..e41ffae master -> synced/master
-[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]
-[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e9e2f951a5c1c645447ccc565bc3def9caeff93c","--oneline","-n1"]
-[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..df87e3bef80902abc6d48ce0fbfe3432c790cd21","--oneline","-n1"]
-[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]
-[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]
-[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]
-[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]
-[2013-06-22 19:54:34 CEST] Merger: merging refs/remotes/server192.168.2.2/synced/master into refs/heads/master
-[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]
-[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]
-[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]
-[2013-06-22 19:54:34 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync/.git/annex/merge/","merge","--no-edit","refs/remotes/server192.168.2.2/synced/master"]
-Already up-to-date.
-[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/master"]
-[2013-06-22 19:54:34 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","diff-tree","-z","--raw","--no-renames","-l0","-r","e41ffae310ed2a50058b2f963decde4f9bc10a14","e41ffae310ed2a50058b2f963decde4f9bc10a14"]
-
-sent 114130 bytes received 31 bytes 45664.40 bytes/sec
-total size is 114039 speedup is 1.00
-[2013-06-22 19:54:35 CEST] Transferrer: Uploaded gnucash.gnucash
-[2013-06-22 19:54:35 CEST] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID "84bab1ab-238f-4602-953a-a297aab6da44", transferKey = Key {keyName = "91ec950e4004863219ea33f1398ea4308e0969267c207272e046858ede8bf9d9", keyBackendName = "SHA256E", keySize = Just 114039, keyMtime = Nothing}}
-[2013-06-22 19:54:36 CEST] Pusher: Syncing with server192.168.2.2, home192.168.1.3
-[2013-06-22 19:54:36 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-w","--stdin-paths"]
-[2013-06-22 19:54:36 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]
-[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","write-tree"]
-[2013-06-22 19:54:36 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit-tree","fb43dcef4baa4b928faec6622a4f7889125c6c0a","-p","refs/heads/git-annex"]
-[2013-06-22 19:54:36 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-ref","refs/heads/git-annex","b74b3402e31d7394815733811b9668b00cc51aa9"]
-[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","symbolic-ref","HEAD"]
-[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","refs/heads/master"]
-[2013-06-22 19:54:36 CEST] Pusher: pushing to [Remote { name ="server192.168.2.2" },Remote { name ="home192.168.1.3" }]
-[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]
-[2013-06-22 19:54:36 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","branch","-f","synced/master"]
-[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:54:36 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","server192.168.2.2","git-annex:synced/git-annex","master:synced/master"]
-[2013-06-22 19:54:36 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","home192.168.1.3","git-annex:synced/git-annex","master:synced/master"]
-[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..b74b3402e31d7394815733811b9668b00cc51aa9","--oneline","-n1"]
-[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..df87e3bef80902abc6d48ce0fbfe3432c790cd21","--oneline","-n1"]
-[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]
-[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e9e2f951a5c1c645447ccc565bc3def9caeff93c","--oneline","-n1"]
-[2013-06-22 19:54:36 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]
-[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]
-[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:54:39 CEST] read: git ["--gitTo ssh://florz@192.168.1.3/home/florz/annex-sync/
-- ! [rejected] dgit-annex -> synced/git-annexi (r=/non-fast-forwardh)o
-me/florz/aerror: failed to push some refs to 'ssh://florz@192.168.1.3/home/florz/annex-sync/'
-nTo prevent you from losing history, non-fast-forward updates were rejected
-Merge the remote changes (e.g. 'git pull') before pushing again. See the
-'Note about fast-forwards' section of 'git push --help' for details.
-nex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..b74b3402e31d7394815733811b9668b00cc51aa9","--oneline","-n1"]
-[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..89e2137442dfdb06facbaba3079873d90c7af281","--oneline","-n1"]
-[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]
-[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e9e2f951a5c1c645447ccc565bc3def9caeff93c","--oneline","-n1"]
-[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]
-[2013-06-22 19:54:39 CEST] feed: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-index","-z","--index-info"]
-[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","diff-index","--raw","-z","-r","--no-renames","-l0","--cached","89e2137442dfdb06facbaba3079873d90c7af281"]
-[2013-06-22 19:54:39 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","hash-object","-t","blob","-w","--stdin"]
-[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","89e2137442dfdb06facbaba3079873d90c7af281..refs/heads/git-annex","--oneline","-n1"]
-[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","write-tree"]
-[2013-06-22 19:54:39 CEST] chat: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","commit-tree","f175a05b82160942363f46bf1af3e7af1660dfa1","-p","refs/heads/git-annex","-p","89e2137442dfdb06facbaba3079873d90c7af281"]
-[2013-06-22 19:54:39 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","update-ref","refs/heads/git-annex","fabac4b203dce9e812b4637f7e95375b15a3f739"]
-[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]
-[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..fabac4b203dce9e812b4637f7e95375b15a3f739","--oneline","-n1"]
-[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..89e2137442dfdb06facbaba3079873d90c7af281","--oneline","-n1"]
-[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]
-[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e9e2f951a5c1c645447ccc565bc3def9caeff93c","--oneline","-n1"]
-[2013-06-22 19:54:39 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]
-To ssh://florz@192.168.2.2/home/florz/annex-sync/
- e9e2f95..fabac4b git-annex -> synced/git-annex
-[2013-06-22 19:54:40 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]
-[2013-06-22 19:54:40 CEST] Pusher: trying manual pull to resolve failed pushes
-[2013-06-22 19:54:40 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:54:40 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..fabac4b203dce9e812b4637f7e95375b15a3f739","--oneline","-n1"]
-[2013-06-22 19:54:40 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..89e2137442dfdb06facbaba3079873d90c7af281","--oneline","-n1"]
-[2013-06-22 19:54:40 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]
-[2013-06-22 19:54:40 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..e9e2f951a5c1c645447ccc565bc3def9caeff93c","--oneline","-n1"]
-[2013-06-22 19:54:40 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]
-[2013-06-22 19:54:40 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","fetch","home192.168.1.3"]
-From ssh://192.168.1.3/home/florz/annex-sync
- e9e2f95..89e2137 synced/git-annex -> home192.168.1.3/synced/git-annex
-[2013-06-22 19:54:42 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]
-[2013-06-22 19:54:42 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:54:42 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..fabac4b203dce9e812b4637f7e95375b15a3f739","--oneline","-n1"]
-[2013-06-22 19:54:42 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..89e2137442dfdb06facbaba3079873d90c7af281","--oneline","-n1"]
-[2013-06-22 19:54:42 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]
-[2013-06-22 19:54:43 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]
-[2013-06-22 19:54:43 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]
-[2013-06-22 19:54:43 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:54:43 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..fabac4b203dce9e812b4637f7e95375b15a3f739","--oneline","-n1"]
-[2013-06-22 19:54:43 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..89e2137442dfdb06facbaba3079873d90c7af281","--oneline","-n1"]
-[2013-06-22 19:54:43 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]
-[2013-06-22 19:54:43 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]
-[2013-06-22 19:54:43 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--verify","-q","refs/remotes/home192.168.1.3/master"]
-[2013-06-22 19:54:43 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/master..refs/remotes/home192.168.1.3/master","--oneline","-n1"]
-[2013-06-22 19:54:43 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--verify","-q","refs/remotes/home192.168.1.3/synced/master"]
-[2013-06-22 19:54:43 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/synced/master..refs/remotes/home192.168.1.3/synced/master","--oneline","-n1"]
-[2013-06-22 19:54:43 CEST] Pusher: pushing to [Remote { name ="home192.168.1.3" }]
-[2013-06-22 19:54:43 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","branch","-f","synced/master"]
-[2013-06-22 19:54:43 CEST] call: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","push","home192.168.1.3","git-annex:synced/git-annex","master:synced/master"]
-[2013-06-22 19:54:45 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]
-[2013-06-22 19:54:45 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:54:45 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..fabac4b203dce9e812b4637f7e95375b15a3f739","--oneline","-n1"]
-[2013-06-22 19:54:45 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]
-[2013-06-22 19:54:45 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..89e2137442dfdb06facbaba3079873d90c7af281","--oneline","-n1"]
-[2013-06-22 19:54:45 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]
-Everything up-to-date
-[2013-06-22 19:54:46 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","git-annex"]
-[2013-06-22 19:54:46 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","show-ref","--hash","refs/heads/git-annex"]
-[2013-06-22 19:54:47 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..fabac4b203dce9e812b4637f7e95375b15a3f739","--oneline","-n1"]
-[2013-06-22 19:54:47 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..69a00fc4a2079b3a87725cc0e3e8b8a1e3a9ae20","--oneline","-n1"]
-[2013-06-22 19:54:47 CEST] read: git ["--git-dir=/home/florz/annex-sync/.git","--work-tree=/home/florz/annex-sync","log","refs/heads/git-annex..3c87a082e3b5340597dc59b9d5963b191f24a936","--oneline","-n1"]
-"""]]
-
-[[!tag /design/assistant]]
-[[!meta title="hard link to open file which is then deleted"]]
-
-> I have fixed this bug. [[done]] --[[Joey]]
diff --git a/doc/bugs/Problems_with_syncing_gnucash/comment_1_ca195af3ba4a286eb5ab687634192fa4._comment b/doc/bugs/Problems_with_syncing_gnucash/comment_1_ca195af3ba4a286eb5ab687634192fa4._comment
deleted file mode 100644
index 481f65d5b..000000000
--- a/doc/bugs/Problems_with_syncing_gnucash/comment_1_ca195af3ba4a286eb5ab687634192fa4._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.193"
- subject="comment 1"
- date="2013-06-25T17:30:05Z"
- content="""
-First of all, are you sure that git-annex is even the right tool for this job? gnucash files tend to be pretty small, and are easy to check into git directly. What happens if two machines make conflicting edits, and the git-annex assistant automatically resolves the merge conflict by moving files around and making .variant copies of gnucash log files?
-"""]]
diff --git a/doc/bugs/Problems_with_syncing_gnucash/comment_2_754fb430381ad88e6248ecb902b32118._comment b/doc/bugs/Problems_with_syncing_gnucash/comment_2_754fb430381ad88e6248ecb902b32118._comment
deleted file mode 100644
index ff81b4d98..000000000
--- a/doc/bugs/Problems_with_syncing_gnucash/comment_2_754fb430381ad88e6248ecb902b32118._comment
+++ /dev/null
@@ -1,20 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.193"
- subject="comment 2"
- date="2013-06-25T17:49:08Z"
- content="""
-I was able to reproduce this with gnucash, and came up with a small test case:
-
-[[!format perl \"\"\"
-my $foo=\"foo\";
-open(OUT, \">$foo.new\");
-link(\"$foo.new\", \"$foo\");
-unlink(\"$foo.new\");
-close OUT;
-\"\"\"]]
-
-This defeats the watcher, which sees the file be opened for write, and then deleted before it's closed. To fix this it would need to correlate the hard link with the original file, to know that when the original file is closed, the hard link can now be safely added to the annex.
-
-The daily sanity checker will find and eventually add these files, or the assistant will see them the next time it's started.
-"""]]
diff --git a/doc/bugs/Problems_with_syncing_gnucash/comment_4_25881998c6f149c70b1358f37b7c66ba._comment b/doc/bugs/Problems_with_syncing_gnucash/comment_4_25881998c6f149c70b1358f37b7c66ba._comment
deleted file mode 100644
index 509ef4a5c..000000000
--- a/doc/bugs/Problems_with_syncing_gnucash/comment_4_25881998c6f149c70b1358f37b7c66ba._comment
+++ /dev/null
@@ -1,20 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl99Gxq3NPNvwZHp3PDufaknQH4rZb_KKY"
- nickname="Florian"
- subject="comment 4"
- date="2013-06-27T01:52:03Z"
- content="""
-Thanks for the quick fix! I'm always amazed how fasts you find fixes for such problems. This qualified you for a flattr subscription (I know it's not much but if more people did this...). I didn't test the fix but I'm nearly sure it will work with the next release :-)
-
-I know that my expectations in this project are a little bit high and I see how much work it was to get where we are now. Once again thank you for the excellent work done so far. I don't fear to synchronize important data with git-annex. I even use git-annex to backup and synchronize the member database for our club (wannabe hackerspace). As soon as cabal downloads an compiles your latest release my last problems will be gone (the locking problem).
-
-I know about the remaining problems and thus use git-annex with care. Of course you didn't imagine all use cases in the beginning and maybe some are impossible to realise but as I already said, we are on a very good way! :-)
-
-My vision is to get rid of any centralized service (even the XMPP part -> maybe you could add add a global polling/watchdog/keepalive option for SSH only setups (in case one node died/wasn't started) ). At the moment this already works as long as git-annex runs on all machines. I already synced several thousands of private photos just by using SSH so thanks again! :-)
-
-An other vision (I know I'm not speaking for the majority and this is still utopic...) is to decentralize my home directory and to enable collaboration (e.g. on our club database (of course not simultaneously)). At my university AFS is used to store home and project directories. This filesystem also suffers from race conditions and file locking is only as good as each application implemented it but we still use it because it is sufficient. I am sure that git-annex is not far from this state and it could even do more (-> lock files as long as they are opened on one machine).
-
-One last thing I can imagine for now is to improve the synchronization speed. At least for me git-annex seems quite slow in syncing smaller files over high latency connections. Do you close ssh connections after each file and do you use something like the the fuzzy option in rsync (for moved/renamed logfiles/backups (once again one of these little problem with the management tool for our club))?
-
-I hope you don't get me wrong for this. I never before wrote any bug reports so take this as an other success of your project. ;-) I really hope it will get to the point I described above and I can assure you that it is already way better than what I tried to use before. Keep up the good work!
-"""]]
diff --git a/doc/bugs/Provide_64-bit_standalone_build.mdwn b/doc/bugs/Provide_64-bit_standalone_build.mdwn
deleted file mode 100644
index 7f24e0055..000000000
--- a/doc/bugs/Provide_64-bit_standalone_build.mdwn
+++ /dev/null
@@ -1,6 +0,0 @@
-The 32-bit standalone build appears to require two libraries (lib32-libyaml and lib32-gsasl) that are not available on Arch Linux. [See the comments on the AUR package](https://aur.archlinux.org/packages/git-annex-bin/). I'd appreciate it if you could bring back the 64-bit build.
-
-> [[done]], based on <https://aur.archlinux.org/packages/git-annex-bin/>
-> they are managing with what I am providing. Also, Arch Linux has a
-> proper build of git-annex from source, so I'm not going to worry about
-> git-annex-bin, the rationalle for which I don't even understand. --[[Joey]]
diff --git a/doc/bugs/Provide_64-bit_standalone_build/comment_1_1850bb3eb464f1d3c122cfeb4ccaf265._comment b/doc/bugs/Provide_64-bit_standalone_build/comment_1_1850bb3eb464f1d3c122cfeb4ccaf265._comment
deleted file mode 100644
index 76e8d0d5c..000000000
--- a/doc/bugs/Provide_64-bit_standalone_build/comment_1_1850bb3eb464f1d3c122cfeb4ccaf265._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-03-03T21:32:39Z"
- content="""
-Thanks for the heads up.
-
-As far as I can see, the necessary libraries are included in the standalone build. So it should work when used as intended via `runshell`.
-
-But that's not what the AUR is doing. It's binary editing (!!) the git-annex binary to use different library sonames, and taking the git-annex binary and dropping it unprotected into a system it was not built for to fend for itself.
-That strikes me as a technique that is unlikely to continue working, and one that I cannot commit to support.
-
-I don't want to cause you Arch people unnecessary work, but building a 64 bit standalone build every time I release git-annex is unnecessary work on my part, as long as the 32 bit one works everywhere when used as designed. If someone has to do this 64 bit build, why not you? This would also avoid any further breakage, since you could build it against the actual library sonames it's going to be used with on Arch.
-"""]]
diff --git a/doc/bugs/Proxy_support.mdwn b/doc/bugs/Proxy_support.mdwn
index d3ab3c601..ae6eaf689 100644
--- a/doc/bugs/Proxy_support.mdwn
+++ b/doc/bugs/Proxy_support.mdwn
@@ -16,3 +16,4 @@ What version of git-annex are you using? On what operating system?
Please provide any additional information below.
I don't use networkmanager if proxy information is obtained from it. There should be a fallback to environment variables.
+[[!tag confirmed]]
diff --git a/doc/bugs/Race_condition_between_watch__47__assistant_and_addurl.mdwn b/doc/bugs/Race_condition_between_watch__47__assistant_and_addurl.mdwn
new file mode 100644
index 000000000..1fee43928
--- /dev/null
+++ b/doc/bugs/Race_condition_between_watch__47__assistant_and_addurl.mdwn
@@ -0,0 +1,195 @@
+Addurl can fail due to an apparent race condition when watch or assistant is running and the repository is in direct mode. The following stress test script encounters the bug consistently on my system. I am running git-annex 5.20140320 on on Ubuntu 13.10.
+
+[[!format sh """
+#!/bin/sh
+set -eu
+
+cleanup() {
+ local dir
+ dir="$1"; shift
+ if [ -d "$dir" ]; then
+ (
+ set -x
+ fuser -k -w "$dir/annex/.git/annex/daemon.log" || :
+ find "$dir" -type d -exec chmod 700 '{}' '+'
+ find "$dir" -type f -exec chmod 600 '{}' '+'
+ rm -fr "$dir"
+ )
+ fi
+}
+
+go() {
+ local dir
+ dir="$(mktemp -d "${TMP:-/tmp}/stress-annex.XXXXXXXXXX")"
+ trap "cleanup '$dir'" 0 1 2 13 15
+
+ (
+ cd "$dir"
+ mkdir annex
+ cd annex
+ set -x
+
+ git init
+ git annex init
+ git annex direct
+ git annex watch
+
+ for n in $(seq 100); do
+ git annex addurl --file=foo http://heh.fi/robots.txt
+ git annex sync
+ rm -f foo
+ git annex sync
+ done
+
+ git annex watch --stop
+ git annex uninit
+ )
+
+ cleanup "$dir"
+ trap - 0 1 2 13 14
+}
+
+go
+"""]]
+
+Script output:
+
+[[!format sh """
+% ./stress-annex
++ git init
+Initialized empty Git repository in /tmp/stress-annex.OKj6D8kVmV/annex/.git/
++ git annex init
+init ok
+(Recording state in git...)
++ git annex direct
+commit
+On branch master
+
+Initial commit
+
+nothing to commit
+ok
+direct ok
++ git annex watch
++ seq 100
++ git annex addurl --file=foo http://heh.fi/robots.txt
+addurl foo (downloading http://heh.fi/robots.txt ...)
+--2014-03-27 03:14:29-- http://heh.fi/robots.txt
+Resolving heh.fi (heh.fi)... 83.145.237.222
+Connecting to heh.fi (heh.fi)|83.145.237.222|:80... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: 0 [text/plain]
+Saving to: ‘/tmp/stress-annex.OKj6D8kVmV/annex/.git/annex/tmp/URL--http&c%%heh.fi%robots.txt’
+
+ [ <=> ] 0 --.-K/s in 0s
+
+2014-03-27 03:14:29 (0.00 B/s) - ‘/tmp/stress-annex.OKj6D8kVmV/annex/.git/annex/tmp/URL--http&c%%heh.fi%robots.txt’ saved [0/0]
+
+(Recording state in git...)
+ok
+(Recording state in git...)
++ git annex sync
+commit ok
++ rm -f foo
++ git annex sync
+commit (Recording state in git...)
+ok
+(Recording state in git...)
++ git annex addurl --file=foo http://heh.fi/robots.txt
+addurl foo (downloading http://heh.fi/robots.txt ...)
+--2014-03-27 03:14:29-- http://heh.fi/robots.txt
+Resolving heh.fi (heh.fi)... 83.145.237.222
+Connecting to heh.fi (heh.fi)|83.145.237.222|:80... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: 0 [text/plain]
+Saving to: ‘/tmp/stress-annex.OKj6D8kVmV/annex/.git/annex/tmp/URL--http&c%%heh.fi%robots.txt’
+
+ [ <=> ] 0 --.-K/s in 0s
+
+2014-03-27 03:14:29 (0.00 B/s) - ‘/tmp/stress-annex.OKj6D8kVmV/annex/.git/annex/tmp/URL--http&c%%heh.fi%robots.txt’ saved [0/0]
+
+(Recording state in git...)
+ok
+(Recording state in git...)
++ git annex sync
+commit ok
++ rm -f foo
++ git annex sync
+commit (Recording state in git...)
+ok
+(Recording state in git...)
++ git annex addurl --file=foo http://heh.fi/robots.txt
+addurl foo (downloading http://heh.fi/robots.txt ...)
+--2014-03-27 03:14:29-- http://heh.fi/robots.txt
+Resolving heh.fi (heh.fi)... 83.145.237.222
+Connecting to heh.fi (heh.fi)|83.145.237.222|:80... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: 0 [text/plain]
+Saving to: ‘/tmp/stress-annex.OKj6D8kVmV/annex/.git/annex/tmp/URL--http&c%%heh.fi%robots.txt’
+
+ [ <=> ] 0 --.-K/s in 0s
+
+2014-03-27 03:14:29 (0.00 B/s) - ‘/tmp/stress-annex.OKj6D8kVmV/annex/.git/annex/tmp/URL--http&c%%heh.fi%robots.txt’ saved [0/0]
+
+
+git-annex: /tmp/stress-annex.OKj6D8kVmV/annex/.git/annex/objects/pX/ZJ/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/: openTempFile: permission denied (Permission denied)
+failed
+git-annex: addurl: 1 failed
++ fuser -k -w /tmp/stress-annex.OKj6D8kVmV/annex/.git/annex/daemon.log
+/tmp/stress-annex.OKj6D8kVmV/annex/.git/annex/daemon.log: 30704 30709 30735 30738 30778
++ find /tmp/stress-annex.OKj6D8kVmV -type d -exec chmod 700 {} +
++ find /tmp/stress-annex.OKj6D8kVmV -type f -exec chmod 600 {} +
++ rm -fr /tmp/stress-annex.OKj6D8kVmV
+"""]]
+
+The script also seems to encounter another issue. The output when seq 100 is changed to seq 1 and addurl happens to succeed:
+
+[[!format sh """
++ git init
+Initialized empty Git repository in /tmp/stress-annex.QEs0pNyS9z/annex/.git/
++ git annex init
+init ok
+(Recording state in git...)
++ git annex direct
+commit
+On branch master
+
+Initial commit
+
+nothing to commit
+ok
+direct ok
++ git annex watch
++ seq 1
++ git annex addurl --file=foo http://heh.fi/robots.txt
+addurl foo (downloading http://heh.fi/robots.txt ...)
+--2014-03-27 03:17:20-- http://heh.fi/robots.txt
+Resolving heh.fi (heh.fi)... 83.145.237.222
+Connecting to heh.fi (heh.fi)|83.145.237.222|:80... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: 0 [text/plain]
+Saving to: ‘/tmp/stress-annex.QEs0pNyS9z/annex/.git/annex/tmp/URL--http&c%%heh.fi%robots.txt’
+
+ [ <=> ] 0 --.-K/s in 0s
+
+2014-03-27 03:17:20 (0.00 B/s) - ‘/tmp/stress-annex.QEs0pNyS9z/annex/.git/annex/tmp/URL--http&c%%heh.fi%robots.txt’ saved [0/0]
+
+(Recording state in git...)
+ok
+(Recording state in git...)
++ git annex sync
+commit ok
++ rm -f foo
++ git annex sync
+commit (Recording state in git...)
+ok
+(Recording state in git...)
++ git annex watch --stop
++ git annex uninit
+git-annex: /tmp/stress-annex.QEs0pNyS9z/annex/.git/annex/objects/pX/ZJ/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.map: removeLink: permission denied (Permission denied)
++ fuser -k -w /tmp/stress-annex.QEs0pNyS9z/annex/.git/annex/daemon.log
++ :
++ find /tmp/stress-annex.QEs0pNyS9z -type d -exec chmod 700 {} +
++ find /tmp/stress-annex.QEs0pNyS9z -type f -exec chmod 600 {} +
++ rm -fr /tmp/stress-annex.QEs0pNyS9z
+"""]]
diff --git a/doc/bugs/Race_condition_between_watch__47__assistant_and_addurl/comment_1_8f56b8661a600729d7a9d569e8a0ba70._comment b/doc/bugs/Race_condition_between_watch__47__assistant_and_addurl/comment_1_8f56b8661a600729d7a9d569e8a0ba70._comment
new file mode 100644
index 000000000..cf010cd25
--- /dev/null
+++ b/doc/bugs/Race_condition_between_watch__47__assistant_and_addurl/comment_1_8f56b8661a600729d7a9d569e8a0ba70._comment
@@ -0,0 +1,55 @@
+[[!comment format=mdwn
+ username="http://johan.kiviniemi.name/"
+ nickname="Johan"
+ subject="Another race condition"
+ date="2014-03-31T03:42:42Z"
+ content="""
+Here’s another race condition which seems related:
+
+[[!format sh \"\"\"
+% git annex addurl 'quvi:http://youtu.be/-CbFj9K9AQg'
+addurl David_Raymond_Christiansen___Dependently_Typed_Programming_in_Idris___A_Demo.webm
+--2014-03-31 05:45:49-- http://r4---sn-oxc0a5-ixae.googlevideo.com/videoplayback?<cut>
+Resolving r4---sn-oxc0a5-ixae.googlevideo.com (r4---sn-oxc0a5-ixae.googlevideo.com)... 83.145.196.143, 2001:1bc8:100:1b::f
+Connecting to r4---sn-oxc0a5-ixae.googlevideo.com (r4---sn-oxc0a5-ixae.googlevideo.com)|83.145.196.143|:80... connected.
+HTTP request sent, awaiting response... 302 Found
+Location: http://r13---sn-5go7dn7s.googlevideo.com/videoplayback?<cut> [following]
+--2014-03-31 05:45:49-- http://r13---sn-5go7dn7s.googlevideo.com/videoplayback?<cut>
+Resolving r13---sn-5go7dn7s.googlevideo.com (r13---sn-5go7dn7s.googlevideo.com)... 173.194.48.18, 2a00:1450:400f::12
+Connecting to r13---sn-5go7dn7s.googlevideo.com (r13---sn-5go7dn7s.googlevideo.com)|173.194.48.18|:80... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: 320557466 (306M) [video/webm]
+Saving to: ‘/home/ion/nobackup/media/video/.git/annex/tmp/URL--quvi&chttp&c%%youtu.be%-CbFj9K9AQg’
+
+100%[======================================>] 320,557,466 895KB/s in 6m 14s
+
+2014-03-31 05:52:04 (837 KB/s) - ‘/home/ion/nobackup/media/video/.git/annex/tmp/URL--quvi&chttp&c%%youtu.be%-CbFj9K9AQg’ saved [320557466/320557466]
+
+(Recording state in git...)
+fatal: Unable to create '/home/ion/nobackup/media/video/.git/index.lock': File exists.
+
+If no other git process is currently running, this probably means a
+git process crashed in this repository earlier. Make sure no other git
+process is running and remove the file manually to continue.
+
+git-annex: user error (xargs [\"-0\",\"git\",\"--git-dir=/home/ion/nobackup/media/video/.git\",\"--work-tree=/home/ion/nobackup/media/video\",\"-c\",\"core.bare=false\",\"add\",\"--\"] exited 123)
+failed
+git-annex: addurl: 1 failed
+
+% ls -l /home/ion/nobackup/media/video/.git/index.lock
+ls: cannot access /home/ion/nobackup/media/video/.git/index.lock: No such file or directory
+\"\"\"]]
+
+The only lines in daemon.log from that time:
+
+[[!format sh \"\"\"
+[2014-03-31 05:52:04 EEST] Committer: Committing changes to git
+[2014-03-31 05:52:04 EEST] Pusher: Syncing with heh.fi
+Already up-to-date.
+To heh.fi:/storage/ion/media/video
+ 3df241b..095d6c3 git-annex -> synced/git-annex
+ 10b3166..98074c1 annex/direct/master -> synced/master
+Already up-to-date.
+\"\"\"]]
+
+"""]]
diff --git a/doc/bugs/Race_condition_between_watch__47__assistant_and_addurl/comment_2_46dc67bdcd174cd50ccc421ec56735ad._comment b/doc/bugs/Race_condition_between_watch__47__assistant_and_addurl/comment_2_46dc67bdcd174cd50ccc421ec56735ad._comment
new file mode 100644
index 000000000..ec3c974d9
--- /dev/null
+++ b/doc/bugs/Race_condition_between_watch__47__assistant_and_addurl/comment_2_46dc67bdcd174cd50ccc421ec56735ad._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 2"
+ date="2014-04-02T20:17:19Z"
+ content="""
+These races look beniegn, as far as I can see it doesn't cause any data to be lost, or indeed anything to happen that wouldn't have happened if addurl had been run without the assistant running.
+
+The first race probably has addurl and the assistant both trying to move the file object into the annex at the same time. One wins and moves it; the other loses and sulks.
+
+The second race has addurl trying to `git add` the file, while the assistant has already noticed the file appeared, `git add`ed it, and committed the add.
+
+The only way to really avoid these races would be to add a lot of lock checking. Or just make `git annex addurl` and presumably also `git annex add` and maybe several other commands refuse to run when the assistant is running.
+"""]]
diff --git a/doc/bugs/Recreating_remote_repository__39__s_annex.mdwn b/doc/bugs/Recreating_remote_repository__39__s_annex.mdwn
new file mode 100644
index 000000000..58003f624
--- /dev/null
+++ b/doc/bugs/Recreating_remote_repository__39__s_annex.mdwn
@@ -0,0 +1,34 @@
+### Please describe the problem.
+My remote repository's annex was lost. In the webapp, I can now click to recreate it, that fails half-way.
+
+### What steps will reproduce the problem?
+Create a remote repo, delete the annex directory.
+
+### What version of git-annex are you using? On what operating system?
+git-annex version: 5.20140517-g0aed6d9
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+local repository version: unknown
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+
+### Please provide any additional information below.
+
+[[!format sh """
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Repository not found: ssh://lhunath@satura.lyndir.com/~/annex/
+gcrypt: Setting up new repository
+gcrypt: Remote ID is :id:ROTs3SImZEdvdO2yCMku
+gcrypt: Encrypting to: -R 0EF21226F43EA6BC
+gcrypt: Requesting manifest signature
+Warning: remote port forwarding failed for listen port 2222
+Warning: remote port forwarding failed for listen port 37218
+fatal: '~/annex/' does not appear to be a git repository
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+"""]]
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/Recreating_remote_repository__39__s_annex/comment_1_9fffb1329a4a06111cf2afd8552aea62._comment b/doc/bugs/Recreating_remote_repository__39__s_annex/comment_1_9fffb1329a4a06111cf2afd8552aea62._comment
new file mode 100644
index 000000000..94404fca3
--- /dev/null
+++ b/doc/bugs/Recreating_remote_repository__39__s_annex/comment_1_9fffb1329a4a06111cf2afd8552aea62._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmZilYULa6CDEGfuagoDlesyakBgnf-dF8"
+ nickname="Maarten"
+ subject="comment 1"
+ date="2014-05-21T22:21:37Z"
+ content="""
+I'd delete the repo and recreate it but I can't do that either - deleting works from webapp but when recreating it says there is already a repo by that name. enableing that repo leads me to this situation again.
+"""]]
diff --git a/doc/bugs/Recreating_remote_repository__39__s_annex/comment_2_b7f5634e136294ea1a3d4ce6de58fc5d._comment b/doc/bugs/Recreating_remote_repository__39__s_annex/comment_2_b7f5634e136294ea1a3d4ce6de58fc5d._comment
new file mode 100644
index 000000000..887fca94a
--- /dev/null
+++ b/doc/bugs/Recreating_remote_repository__39__s_annex/comment_2_b7f5634e136294ea1a3d4ce6de58fc5d._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="24.159.78.125"
+ subject="comment 2"
+ date="2014-05-23T14:27:01Z"
+ content="""
+What are you clicking on in the webapp?
+
+What kind of repository did the remote have before it got deleted? Was it a repository encrypted with git-remote-gcrypt?
+
+Show the contents of ~/annex/.git/config on your local system.
+"""]]
diff --git a/doc/bugs/Remote_repo_and_set_operation_with_find.mdwn b/doc/bugs/Remote_repo_and_set_operation_with_find.mdwn
deleted file mode 100644
index 3e1acd4a8..000000000
--- a/doc/bugs/Remote_repo_and_set_operation_with_find.mdwn
+++ /dev/null
@@ -1,6 +0,0 @@
-Currently, git annex find lists files that are present in the current repository, possibly restricted to a subdirectory. But it does not easily seem possible to get this information about a remote repository.
-
-I would find it useful if this command understood flags that makes it tell me what is present somewhere else (maybe "--on remote") and combinations of the flags ("--on remote1 --and --not-on remote2" or "--on disk1 --or --on disk2").
-
-> Almost. You're looking for `--in remote`, which was added 2 months ago.
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Remote_repositories_have_to_be_setup_encrypted.mdwn b/doc/bugs/Remote_repositories_have_to_be_setup_encrypted.mdwn
index f281fb1b9..bcac962ee 100644
--- a/doc/bugs/Remote_repositories_have_to_be_setup_encrypted.mdwn
+++ b/doc/bugs/Remote_repositories_have_to_be_setup_encrypted.mdwn
@@ -25,3 +25,4 @@ What version of git-annex are you using? On what operating system?
[[!meta title="webapp does not allow disabling encryption on rsync special remotes"]]
[[!tag /design/assistant]]
+[[!tag confirmed]]
diff --git a/doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository.mdwn b/doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository.mdwn
deleted file mode 100644
index a051a8170..000000000
--- a/doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository.mdwn
+++ /dev/null
@@ -1,70 +0,0 @@
-### Please describe the problem.
-
-I've setup two (actually more) direct mode repositories pointing at each other with ssh keys allowing them to talk to each other. I run the assistant in both repositories. Once I add a file to one repository I can see in the assistant log that it's been sent to the other side but it doesn't show up. Once I add a file to the other repository both repositories get both files.
-
-### What steps will reproduce the problem?
-
-In the first host:
-[[!format sh """
-$ ls -l
-total 0
-$ date | tee fromhostA
-Fri May 31 19:25:12 WEST 2013
-"""]]
-
-And then in the second host
-
-[[!format sh """
-$ ls
-$ date | tee fromhostB
-Fri May 31 19:25:27 WEST 2013
-$ ls
-fromhostB
-$ ls # After a little while
-fromhostA fromhostB
-"""]]
-
-Back at hostA
-
-[[!format sh """
-$ ls -l
-total 8
--rw-r--r-- 1 pedrocr pedrocr 30 May 31 19:25 fromhostA
--rw-r--r-- 1 pedrocr pedrocr 30 May 31 19:25 fromhostB
-"""]]
-
-I looked at the logs for hostA and it seemed like it was pushing the changes right away. In hostB this is the moment where fromhostB gets added:
-
-[[!format sh """
-[2013-05-31 19:22:04 WEST] Pusher: Syncing with zeus, wintermute, ulisses
-[2013-05-31 19:25:27 WEST] Committer: Adding fromhostB
-
-(merging zeus/git-annex into git-annex...)
-(Recording state in git...)
-(merging wintermute/git-annex into git-annex...)
-(Recording state in git...)
-(merging ulisses/git-annex into git-annex...)
-(Recording state in git...)
-"""]]
-
-It seems to be that merging in the remotes only gets done when there's an added file and that's why fromhostA didn't show up until fromhostB was there. I don't think this is the correct behavior. I want to be able to setup a new repository with other repositories as remotes and have it automatically pull in all the contents without having to create content itself.
-
-### What version of git-annex are you using? On what operating system?
-
-[[!format sh """
-$ git annex version
-git-annex version: 4.20130516.1
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP
-local repository version: 4
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-$ lsb_release -a
-No LSB modules are available.
-Distributor ID: Ubuntu
-Description: Ubuntu 12.04.2 LTS
-Release: 12.04
-Codename: precise
-"""]]
-
-> [[done]]; see comment --[[Joey]]
diff --git a/doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository/comment_1_92211091daf9827a4ec7e5b5a6769d59._comment b/doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository/comment_1_92211091daf9827a4ec7e5b5a6769d59._comment
deleted file mode 100644
index 0daa25b7f..000000000
--- a/doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository/comment_1_92211091daf9827a4ec7e5b5a6769d59._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-05-31T21:12:52Z"
- content="""
-How are you creating the repositories? git cannot merge origin/master into master when master does not exist yet. The assistant, when it creates a repository, makes an empty commit, to create the master branch, which should avoid this problem.
-"""]]
diff --git a/doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository/comment_2_f0fa97a9eba1c624f6f8720ba8a160b7._comment b/doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository/comment_2_f0fa97a9eba1c624f6f8720ba8a160b7._comment
deleted file mode 100644
index cee6bce0d..000000000
--- a/doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository/comment_2_f0fa97a9eba1c624f6f8720ba8a160b7._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkx5V3MTbzCXS3J7Mn9FEq8M9bPPYMkAHY"
- nickname="Pedro"
- subject="comment 2"
- date="2013-05-31T21:48:43Z"
- content="""
-I'm doing everything by hand. I just do \"git init\" and \"git annex init\" in an empty directory, and then do \"git remote add ...\" to add the ssh remotes to each other. After that I launch \"git annex assistant\".
-"""]]
diff --git a/doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository/comment_3_e3d677ea4170c07cd31efe6dc85fa5f3._comment b/doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository/comment_3_e3d677ea4170c07cd31efe6dc85fa5f3._comment
deleted file mode 100644
index 1e563d409..000000000
--- a/doc/bugs/Remotes_only_start_showing_changes_after_both_sides_have_written_to_the_repository/comment_3_e3d677ea4170c07cd31efe6dc85fa5f3._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-06-11T14:23:31Z"
- content="""
-This then explains your problem. If you're going to set things up by hand you need to do the same setup that the assistant does of making an initial commit, which can be empty.
-"""]]
diff --git a/doc/bugs/Repository_Information_Is_Lost.mdwn b/doc/bugs/Repository_Information_Is_Lost.mdwn
new file mode 100644
index 000000000..7b11ac4cf
--- /dev/null
+++ b/doc/bugs/Repository_Information_Is_Lost.mdwn
@@ -0,0 +1,33 @@
+### Please describe the problem.
+
+Clone of a repository does not contain the names of other repositories.
+
+### What steps will reproduce the problem?
+
+
+### What version of git-annex are you using? On what operating system?
+
+Mac OS X
+
+git-annex version: 5.20140308-g06fb279
+build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Qu
+vi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256
+ SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook extern
+al
+
+
+### Please provide any additional information below.
+
+Clones of my repositories lost all track of other repositories they only seem to know about them selfs attempting to remove other repositories (git annex dead name-of-an-existing-repo) fails, telling me that the repository with the name is not found.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/Repository_Information_Is_Lost/comment_1_bae0ed4c0a6baf1675f8de1663042f43._comment b/doc/bugs/Repository_Information_Is_Lost/comment_1_bae0ed4c0a6baf1675f8de1663042f43._comment
new file mode 100644
index 000000000..8534442b6
--- /dev/null
+++ b/doc/bugs/Repository_Information_Is_Lost/comment_1_bae0ed4c0a6baf1675f8de1663042f43._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 1"
+ date="2014-04-07T19:24:12Z"
+ content="""
+Have you run `git-annex repair` or used the assistant to repair this repository? This can result in data going missing until the repository is able to pull the data from one of its remotes.
+"""]]
diff --git a/doc/bugs/Repository_deletion_error.mdwn b/doc/bugs/Repository_deletion_error.mdwn
deleted file mode 100644
index 33142d8dd..000000000
--- a/doc/bugs/Repository_deletion_error.mdwn
+++ /dev/null
@@ -1,46 +0,0 @@
-**What steps will reproduce the problem?**
-
-On the dashboard, click settings > Delete on the repo you want to remove.
-Wait for the dropping to finish.
-Start final deletion when the message "The repository "repo" has been emptied, and can now be removed." pops up.
-
-**What is the expected output? What do you see instead?**
-
-The repository should be deleted, but I only see "Internal Server Error: git [Param "remote",Param "remove",Param "repo"] failed".
-
-**What version of git-annex are you using? On what operating system?**
-
-Standalone build, git-annex version 4.20130417-g4bb97d5
-
-**Please provide any additional information below.**
-
-The log shows:
-
- [2013-04-22 22:17:22 CEST] TransferScanner: The repository "repo" has been emptied, and can now be removed.
- error: Unknown subcommand: remove
- usage: git remote [-v | --verbose]
- or: git remote add [-t <branch>] [-m <master>] [-f] [--mirror=<fetch|push>] <name> <url>
- or: git remote rename <old> <new>
- or: git remote rm <name>
- or: git remote set-head <name> (-a | -d | <branch>)
- or: git remote [-v | --verbose] show [-n] <name>
- or: git remote prune [-n | --dry-run] <name>
- or: git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]
- or: git remote set-branches [--add] <name> <branch>...
- or: git remote set-url <name> <newurl> [<oldurl>]
- or: git remote set-url --add <name> <newurl>
- or: git remote set-url --delete <name> <url>
-
- -v, --verbose be verbose; must be placed before a subcommand
-
-
-
-> Seems that `git remote remove` is new as of git 1.8.0 or so.
-> Older gits only support `git remote rm`. Which newer gits
-> support as well. but it seems to be in the process
-> of being deprecated so I'd rather not use it.
->
-> So, I've made the version of git it's
-> built for determine which subcommand it uses. [[done]] --[[Joey]]
->
-> (You can run `git remote rm repo` by hand to clean up from this BTW.)
diff --git a/doc/bugs/Repository_deletion_error/comment_1_31673d0300986b6098d1af2cc4b180c6._comment b/doc/bugs/Repository_deletion_error/comment_1_31673d0300986b6098d1af2cc4b180c6._comment
deleted file mode 100644
index 1ed723d12..000000000
--- a/doc/bugs/Repository_deletion_error/comment_1_31673d0300986b6098d1af2cc4b180c6._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-04-22T20:43:26Z"
- content="""
-It's running `git remote remove` to remove it. Your git appears not to support this, but mine (1.8.2) does.
-
-What version of git do you have installed?
-"""]]
diff --git a/doc/bugs/Repository_in_manual_mode_does_not_hold_files.mdwn b/doc/bugs/Repository_in_manual_mode_does_not_hold_files.mdwn
deleted file mode 100644
index 9572487dd..000000000
--- a/doc/bugs/Repository_in_manual_mode_does_not_hold_files.mdwn
+++ /dev/null
@@ -1,305 +0,0 @@
-### Please describe the problem.
-
-I have two repositories in my local network which are locally paired and synced using git-annex assistant (setup using webapp, both in direct mode). The one (master) has all files and is in mode "full backup". The second one (slave) is in "manual" mode and should therefore only contain the file content it already has. But it also should not loose any content it has until I explicitely drop it but this is exactly what happens! Files are getting dropped (I think it happens during git-annex startup of the slave repository, but I am not sure).
-
-### What steps will reproduce the problem?
-
-1. Setup two repositories using git-annex webapp in local network
-2. Set one to "full backup" mode, the second to "manual" mode
-3. Add files to the master repository
-4. Pair both repositories over webapp
-5. Call git-annex get folderA on slave system to transfer some file contents to it.
-
-=> After some time the file contents from folderA seem to disappear on slave system.
-
-### What version of git-annex are you using? On what operating system?
-
-* Master (full backup) repository is running on Ubuntu Server 12.04 and git-annex 5.20140117.1 from PPA. Git version 1.7.9.5
-* Slave (manual) repository is running on Gentoo Linux with 5.20140116, created from own ebuild. Git version 1.8.4.5
-
-### Please provide any additional information below.
-
-[[!format sh """
-[2014-01-29 09:14:15 CET] main: starting assistant version 5.20140116
-[2014-01-29 09:19:33 CET] TransferScanner: Syncing with Eifel.fritz.box__mnt_raid_Media
-Already up-to-date.
-
-(scanning...) [2014-01-29 09:19:34 CET] Watcher: Performing startup scan
-Already up-to-date.
-Already up-to-date.
-[2014-01-29 09:35:31 CET] Committer: Committing changes to git
-[2014-01-29 09:35:31 CET] Pusher: Syncing with Eifel.fritz.box__mnt_raid_Media
-[2014-01-29 09:40:37 CET] Committer: Committing changes to git
-[2014-01-29 09:44:15 CET] Committer: Committing changes to git
-Von ssh://git-annex-Eifel.fritz.box-fabian_.2Fmnt.2Fraid.2FMedia/mnt/raid/Media
- 390c764..7775ce1 annex/direct/master -> Eifel.fritz.box__mnt_raid_Media/annex/direct/master
- eca59d1..59db343 git-annex -> Eifel.fritz.box__mnt_raid_Media/git-annex
- + a1f3176...7775ce1 synced/master -> Eifel.fritz.box__mnt_raid_Media/synced/master (Aktualisierung erzwungen)
-Already up-to-date.
-error: Ref refs/heads/synced/master is at a1f3176ff3821cdd9aa74bfa310dfdccb8452247 but expected 7775ce196da4561367ee231ce116fe5849827c51
-remote: error: failed to lock refs/heads/synced/master
-To ssh://fabian@git-annex-Eifel.fritz.box-fabian_.2Fmnt.2Fraid.2FMedia/mnt/raid/Media/
- 98219eb..3d2b713 git-annex -> synced/git-annex
- ! [remote rejected] annex/direct/master -> synced/master (failed to lock)
-error: Fehler beim Versenden einiger Referenzen nach 'ssh://fabian@git-annex-Eifel.fritz.box-fabian_.2Fmnt.2Fraid.2FMedia/mnt/raid/Media/'
-Von ssh://git-annex-Eifel.fritz.box-fabian_.2Fmnt.2Fraid.2FMedia/mnt/raid/Media
- 7775ce1..a1f3176 annex/direct/master -> Eifel.fritz.box__mnt_raid_Media/annex/direct/master
- 59db343..6e39b5b git-annex -> Eifel.fritz.box__mnt_raid_Media/git-annex
- 7775ce1..a1f3176 synced/master -> Eifel.fritz.box__mnt_raid_Media/synced/master
-Already up-to-date.
-[2014-01-29 09:51:41 CET] Committer: Committing changes to git
-error: Ref refs/heads/synced/git-annex is at 3d2b7131d39c78fc56f67e29617e72b177807449 but expected 98219eb545d5dc51da9984ede4b4c5c41ec188d0
-remote: error: failed to lock refs/heads/synced/git-annex
-To ssh://fabian@git-annex-Eifel.fritz.box-fabian_.2Fmnt.2Fraid.2FMedia/mnt/raid/Media/
- ! [remote rejected] git-annex -> synced/git-annex (failed to lock)
-error: Fehler beim Versenden einiger Referenzen nach 'ssh://fabian@git-annex-Eifel.fritz.box-fabian_.2Fmnt.2Fraid.2FMedia/mnt/raid/Media/'
-To ssh://fabian@git-annex-Eifel.fritz.box-fabian_.2Fmnt.2Fraid.2FMedia/mnt/raid/Media/
- 3d2b713..5bd0d7e git-annex -> synced/git-annex
-[2014-01-29 09:51:51 CET] Pusher: Syncing with Eifel.fritz.box__mnt_raid_Media
-Everything up-to-date
-Everything up-to-date
-[2014-01-29 09:53:01 CET] Committer: Committing changes to git
-[2014-01-29 09:53:01 CET] Pusher: Syncing with Eifel.fritz.box__mnt_raid_Media
-Everything up-to-date
-
-
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(merging synced/git-annex into git-annex...)
-(Recording state in git...)
-(merging synced/git-annex into git-annex...)
-(Recording state in git...)
-
-
-(Recording state in git...)
-(Recording state in git...)
-(started...) [2014-01-29 09:53:48 CET] Committer: Committing changes to git
-[2014-01-29 09:53:48 CET] Pusher: Syncing with Eifel.fritz.box__mnt_raid_Media
-Everything up-to-date
-[2014-01-29 10:19:33 CET] NetWatcherFallback: Syncing with Eifel.fritz.box__mnt_raid_Media
-Von ssh://git-annex-Eifel.fritz.box-fabian_.2Fmnt.2Fraid.2FMedia/mnt/raid/Media
- 6e39b5b..5bd0d7e git-annex -> Eifel.fritz.box__mnt_raid_Media/git-annex
-Everything up-to-date
-[2014-01-29 10:39:49 CET] Committer: Committing changes to git
-[2014-01-29 10:39:49 CET] Pusher: Syncing with Eifel.fritz.box__mnt_raid_Media
-[2014-01-29 10:39:50 CET] Committer: Committing changes to git
-[2014-01-29 10:39:51 CET] Committer: Committing changes to git
-[2014-01-29 10:39:53 CET] Committer: Committing changes to git
-[2014-01-29 10:39:54 CET] Committer: Committing changes to git
-[2014-01-29 10:39:55 CET] Committer: Committing changes to git
-[2014-01-29 10:39:56 CET] Committer: Committing changes to git
-[2014-01-29 10:39:57 CET] Committer: Committing changes to git
-[2014-01-29 10:39:59 CET] Committer: Committing changes to git
-[2014-01-29 10:40:00 CET] Committer: Committing changes to git
-[2014-01-29 10:40:01 CET] Committer: Committing changes to git
-[2014-01-29 10:40:02 CET] Committer: Committing changes to git
-[2014-01-29 10:40:03 CET] Committer: Committing changes to git
-[2014-01-29 10:40:05 CET] Committer: Committing changes to git
-[2014-01-29 10:40:07 CET] Committer: Adding AlbumArtSmall.jpg Folder.jpg
-
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-add Audio/Musik/2raumwohnung/2002 - In Wirklich/AlbumArtSmall.jpg ok
-add Audio/Musik/2raumwohnung/2002 - In Wirklich/Folder.jpg [2014-01-29 10:40:07 CET] Committer: Committing changes to git
-[2014-01-29 10:40:08 CET] Committer: Committing changes to git
-[2014-01-29 10:40:09 CET] Committer: Committing changes to git
-[2014-01-29 10:40:11 CET] Committer: Committing changes to git
-[2014-01-29 10:40:12 CET] Committer: Committing changes to git
-[2014-01-29 10:40:13 CET] Committer: Committing changes to git
-[2014-01-29 10:40:14 CET] Committer: Committing changes to git
-[2014-01-29 10:40:16 CET] Committer: Committing changes to git
-[2014-01-29 10:40:17 CET] Committer: Committing changes to git
-[2014-01-29 10:40:18 CET] Committer: Committing changes to git
-[2014-01-29 10:40:19 CET] Committer: Committing changes to git
-[2014-01-29 10:40:20 CET] Committer: Committing changes to git
-[2014-01-29 10:40:21 CET] Committer: Committing changes to git
-[2014-01-29 10:40:23 CET] Committer: Committing changes to git
-[2014-01-29 10:40:24 CET] Committer: Committing changes to git
-[2014-01-29 10:40:26 CET] Committer: Committing changes to git
-[2014-01-29 10:40:27 CET] Committer: Committing changes to git
-[2014-01-29 10:40:28 CET] Committer: Committing changes to git
-[2014-01-29 10:40:29 CET] Committer: Committing changes to git
-[2014-01-29 10:40:30 CET] Committer: Committing changes to git
-[2014-01-29 10:40:31 CET] Committer: Committing changes to git
-[2014-01-29 10:40:32 CET] Committer: Committing changes to git
-[2014-01-29 10:40:34 CET] Committer: Committing changes to git
-[2014-01-29 10:40:35 CET] Committer: Committing changes to git
-[2014-01-29 10:40:36 CET] Committer: Committing changes to git
-[2014-01-29 10:40:37 CET] Committer: Committing changes to git
-[2014-01-29 10:40:39 CET] Committer: Committing changes to git
-[2014-01-29 10:40:40 CET] Committer: Committing changes to git
-[2014-01-29 10:40:41 CET] Committer: Committing changes to git
-[2014-01-29 10:40:42 CET] Committer: Committing changes to git
-[2014-01-29 10:40:44 CET] Committer: Committing changes to git
-[2014-01-29 10:40:45 CET] Committer: Committing changes to git
-[2014-01-29 10:40:46 CET] Committer: Committing changes to git
-[2014-01-29 10:40:47 CET] Committer: Committing changes to git
-[2014-01-29 10:40:48 CET] Committer: Committing changes to git
-[2014-01-29 10:40:50 CET] Committer: Committing changes to git
-[2014-01-29 10:40:51 CET] Committer: Committing changes to git
-[2014-01-29 10:40:52 CET] Committer: Committing changes to git
-[2014-01-29 10:40:53 CET] Committer: Committing changes to git
-[2014-01-29 10:40:54 CET] Committer: Committing changes to git
-[2014-01-29 10:40:55 CET] Committer: Committing changes to git
-[2014-01-29 10:40:57 CET] Committer: Committing changes to git
-[2014-01-29 10:40:58 CET] Committer: Committing changes to git
-[2014-01-29 10:40:59 CET] Committer: Committing changes to git
-[2014-01-29 10:41:00 CET] Committer: Committing changes to git
-[2014-01-29 10:41:02 CET] Committer: Committing changes to git
-[2014-01-29 10:41:03 CET] Committer: Committing changes to git
-[2014-01-29 10:41:04 CET] Committer: Committing changes to git
-[2014-01-29 10:41:05 CET] Committer: Committing changes to git
-[2014-01-29 10:41:06 CET] Committer: Committing changes to git
-[2014-01-29 10:41:07 CET] Committer: Committing changes to git
-[2014-01-29 10:41:09 CET] Committer: Committing changes to git
-[2014-01-29 10:41:10 CET] Committer: Committing changes to git
-[2014-01-29 10:41:11 CET] Committer: Committing changes to git
-[2014-01-29 10:41:12 CET] Committer: Committing changes to git
-[2014-01-29 10:41:23 CET] Committer: Committing changes to git
-[2014-01-29 10:41:24 CET] Committer: Committing changes to git
-[2014-01-29 10:41:29 CET] Committer: Committing changes to git
-[2014-01-29 10:41:30 CET] Committer: Committing changes to git
-[2014-01-29 10:41:32 CET] Committer: Committing changes to git
-[2014-01-29 10:41:33 CET] Committer: Committing changes to git
-[2014-01-29 10:41:34 CET] Committer: Committing changes to git
-[2014-01-29 10:41:35 CET] Committer: Committing changes to git
-[2014-01-29 10:41:36 CET] Committer: Committing changes to git
-[2014-01-29 10:41:38 CET] Committer: Adding AlbumArt_..Small.jpg Folder.jpg
-ok
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-add Audio/Musik/Alanis Morissette/1995 - Jagged Little Pill/AlbumArt_{79951A99-BD71-4029-80F6-C3705D930871}_Small.jpg ok
-add Audio/Musik/Alanis Morissette/1995 - Jagged Little Pill/Folder.jpg [2014-01-29 10:41:38 CET] Committer: Committing changes to git
-[2014-01-29 10:41:39 CET] Committer: Committing changes to git
-[2014-01-29 10:41:41 CET] Committer: Committing changes to git
-[2014-01-29 10:41:42 CET] Committer: Committing changes to git
-[2014-01-29 10:41:44 CET] Committer: Committing changes to git
-[2014-01-29 10:41:45 CET] Committer: Committing changes to git
-[2014-01-29 10:41:46 CET] Committer: Committing changes to git
-[2014-01-29 10:41:47 CET] Committer: Committing changes to git
-[2014-01-29 10:41:48 CET] Committer: Committing changes to git
-[2014-01-29 10:41:49 CET] Committer: Committing changes to git
-[2014-01-29 10:41:51 CET] Committer: Committing changes to git
-[2014-01-29 10:41:52 CET] Committer: Committing changes to git
-[2014-01-29 10:41:54 CET] Committer: Committing changes to git
-[2014-01-29 10:41:55 CET] Committer: Committing changes to git
-[2014-01-29 10:41:56 CET] Committer: Committing changes to git
-[2014-01-29 10:41:58 CET] Committer: Committing changes to git
-[2014-01-29 10:41:59 CET] Committer: Committing changes to git
-[2014-01-29 10:42:00 CET] Committer: Committing changes to git
-[2014-01-29 10:42:01 CET] Committer: Committing changes to git
-[2014-01-29 10:42:02 CET] Committer: Committing changes to git
-[2014-01-29 10:42:04 CET] Committer: Committing changes to git
-[2014-01-29 10:42:05 CET] Committer: Committing changes to git
-[2014-01-29 10:42:06 CET] Committer: Committing changes to git
-[2014-01-29 10:42:07 CET] Committer: Committing changes to git
-[2014-01-29 10:42:08 CET] Committer: Committing changes to git
-[2014-01-29 10:42:10 CET] Committer: Committing changes to git
-[2014-01-29 10:42:11 CET] Committer: Committing changes to git
-[2014-01-29 10:42:12 CET] Committer: Committing changes to git
-[2014-01-29 10:42:13 CET] Committer: Committing changes to git
-[2014-01-29 10:42:14 CET] Committer: Committing changes to git
-[2014-01-29 10:42:15 CET] Committer: Committing changes to git
-[2014-01-29 10:42:17 CET] Committer: Committing changes to git
-[2014-01-29 10:42:18 CET] Committer: Committing changes to git
-[2014-01-29 10:42:19 CET] Committer: Committing changes to git
-[2014-01-29 10:42:20 CET] Committer: Committing changes to git
-[2014-01-29 10:42:21 CET] Committer: Committing changes to git
-[2014-01-29 10:42:23 CET] Committer: Committing changes to git
-[2014-01-29 10:42:24 CET] Committer: Committing changes to git
-[2014-01-29 10:42:25 CET] Committer: Committing changes to git
-[2014-01-29 10:42:26 CET] Committer: Committing changes to git
-[2014-01-29 10:42:27 CET] Committer: Committing changes to git
-[2014-01-29 10:42:28 CET] Committer: Committing changes to git
-To ssh://fabian@git-annex-Eifel.fritz.box-fabian_.2Fmnt.2Fraid.2FMedia/mnt/raid/Media/
- 5bd0d7e..1eda3be git-annex -> synced/git-annex
-[2014-01-29 10:43:43 CET] Pusher: Syncing with Eifel.fritz.box__mnt_raid_Media
-To ssh://fabian@git-annex-Eifel.fritz.box-fabian_.2Fmnt.2Fraid.2FMedia/mnt/raid/Media/
- 1eda3be..4c70ad2 git-annex -> synced/git-annex
-"""]]
-
-> The only way a repository can become "unwanted" is if you
-> tell git-annex to start deleting it (or perhaps set its group to unwanted
-> manually). This will cause git-annex to try to move all files away from
-> that repository.
->
-> So, AFAICS, this must have been a case of operator error. [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/Repository_in_manual_mode_does_not_hold_files/comment_1_86e8a4e546610e8e265806eb245d8aba._comment b/doc/bugs/Repository_in_manual_mode_does_not_hold_files/comment_1_86e8a4e546610e8e265806eb245d8aba._comment
deleted file mode 100644
index 855f3bf85..000000000
--- a/doc/bugs/Repository_in_manual_mode_does_not_hold_files/comment_1_86e8a4e546610e8e265806eb245d8aba._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.199"
- subject="comment 1"
- date="2014-01-29T17:49:18Z"
- content="""
-The preferred content setting for manual mode will try to clear out files that are in archive directories (once they reach an archive repository), but not other locations. I've re-tested it, and it still works that way. Perhaps your files are located inside archive directories; you don't say. If not, you will need to enable debug mode and show debug output.
-"""]]
diff --git a/doc/bugs/Repository_in_manual_mode_does_not_hold_files/comment_2_17d5775a38b67ba4f0e73f6b89cff2d0._comment b/doc/bugs/Repository_in_manual_mode_does_not_hold_files/comment_2_17d5775a38b67ba4f0e73f6b89cff2d0._comment
deleted file mode 100644
index f715db458..000000000
--- a/doc/bugs/Repository_in_manual_mode_does_not_hold_files/comment_2_17d5775a38b67ba4f0e73f6b89cff2d0._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://launchpad.net/~maestro-alubia"
- nickname="maestro-alubia"
- subject="comment 2"
- date="2014-01-30T20:50:32Z"
- content="""
-I did not configure any archive repositories or directories. But I just noticed my repository changed to \"unwanted\" in webapp. I am pretty sure I did not set this... I will set it back to manual now and see if this problem occurs again. But anyway, thanks for your help so far!
-"""]]
diff --git a/doc/bugs/Req:_Upgrade_to_Yesod_1.4__63___https:__47____47__github.com__47__NixOS__47__nixpkgs__47__pull__47__4391.mdwn b/doc/bugs/Req:_Upgrade_to_Yesod_1.4__63___https:__47____47__github.com__47__NixOS__47__nixpkgs__47__pull__47__4391.mdwn
new file mode 100644
index 000000000..6e0117202
--- /dev/null
+++ b/doc/bugs/Req:_Upgrade_to_Yesod_1.4__63___https:__47____47__github.com__47__NixOS__47__nixpkgs__47__pull__47__4391.mdwn
@@ -0,0 +1,24 @@
+### Please describe the problem.
+
+Not a super big "problem" but I'm blocked upgrading Nix packages to Yesod 1.4 because of git-annex breakage.
+
+### What steps will reproduce the problem?
+
+Try to build with Yesod 1.4
+
+### What version of git-annex are you using? On what operating system?
+
+Latest
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> [[fixed|done]], although I have not made a release yet.
+> It's a 1 line change anyhow, just adding ViewPatterns. --[[Joey]]
diff --git a/doc/bugs/Resource_leak_somewhere_in_the___39__get__39___code.mdwn b/doc/bugs/Resource_leak_somewhere_in_the___39__get__39___code.mdwn
deleted file mode 100644
index 2746ade5c..000000000
--- a/doc/bugs/Resource_leak_somewhere_in_the___39__get__39___code.mdwn
+++ /dev/null
@@ -1,24 +0,0 @@
-What steps will reproduce the problem?
-
-I have an Annex with about 18k files in it. If I clone it and then run `git annex get .`, it gets a few thousand files and then starts reporting:
-
- get 2004-2012/Originals/110414_0362.jpg (from titan...)
- rsync: fork: Resource temporarily unavailable (35)
- rsync error: error in IPC code (code 14) at pipe.c(63) [Receiver=3.0.9]
-
-I have to abort and re-run `git annex get .` several times to finally get all of the files.
-
-What is the expected output? What do you see instead?
-
-I didn't expect what I saw! I think there's a resource not being released in the `get` code.
-
-What version of git-annex are you using? On what operating system?
-
-master branch, d430fb1.
-
-Please provide any additional information below.
-
-OS X 10.8.2. The machine has tons of RAM and tons of process handles free. It's really not doing anything else but this git-annex at the time of my tests.
-
-> [[done]], this is a bug introduced in 3.20121009, and I've reverted the
-> buggy change. --[[Joey]]
diff --git a/doc/bugs/Resource_leak_somewhere_in_the___39__get__39___code/comment_1_66b21720cd1b2a4f66ef24252d3e6305._comment b/doc/bugs/Resource_leak_somewhere_in_the___39__get__39___code/comment_1_66b21720cd1b2a4f66ef24252d3e6305._comment
deleted file mode 100644
index 4bdc7943b..000000000
--- a/doc/bugs/Resource_leak_somewhere_in_the___39__get__39___code/comment_1_66b21720cd1b2a4f66ef24252d3e6305._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="2001:4978:f:21a::2"
- subject="comment 1"
- date="2012-10-17T00:41:03Z"
- content="""
-The resource in question appears to be processes. Do you get a lot of zombies or something?
-"""]]
diff --git a/doc/bugs/Resource_leak_somewhere_in_the___39__get__39___code/comment_2_18c9f55c5af1f4f690a7727df71ab561._comment b/doc/bugs/Resource_leak_somewhere_in_the___39__get__39___code/comment_2_18c9f55c5af1f4f690a7727df71ab561._comment
deleted file mode 100644
index 29214814b..000000000
--- a/doc/bugs/Resource_leak_somewhere_in_the___39__get__39___code/comment_2_18c9f55c5af1f4f690a7727df71ab561._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="2001:4978:f:21a::2"
- subject="comment 2"
- date="2012-10-17T01:07:00Z"
- content="""
-Urk. Seems I was making some recent changes lately to clean up zombies and I accidentually let them accumulate here. Fixed that.
-"""]]
diff --git a/doc/bugs/Revert_to_old_file_version_in_direct_mode___40__VFAT__41__.mdwn b/doc/bugs/Revert_to_old_file_version_in_direct_mode___40__VFAT__41__.mdwn
new file mode 100644
index 000000000..4a3b1199b
--- /dev/null
+++ b/doc/bugs/Revert_to_old_file_version_in_direct_mode___40__VFAT__41__.mdwn
@@ -0,0 +1,29 @@
+### Please describe the problem.
+
+Somewhere on the forums you advised that in order to revert to an old
+version of a file in a direct-mode annex, one should briefly switch to
+indirect mode and check out an earlier revision.
+
+This won’t work though if the direct-mode repo is on a VFAT
+file-system, which does not support indirect mode.
+
+If I didn’t overlook an alternative way, would it make sense to expose
+this functionality in «git annex get $file»? Like «git annex get $file
+--from $repo/$revision»?
+
+Specifying revisions to get from might also be convenient for
+alternative use-cases, I suppose.
+
+Best regards,
+T.
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex 5.20140421
+Linux 3.14.3
+
+> VFAT is a crippled file system. I am not going to reimplenent all of git
+> to support it. The suggested method won't work; git-annex would need
+> to add a git-annex revert, etc, etc, etc ad infinitum
+>
+> Instead, see the `git annex proxy` command. [[done]] --[[Joey]]
diff --git a/doc/bugs/Revert_to_old_file_version_in_direct_mode___40__VFAT__41__/comment_1_7e512732f1d24300dd13bb093f28122d._comment b/doc/bugs/Revert_to_old_file_version_in_direct_mode___40__VFAT__41__/comment_1_7e512732f1d24300dd13bb093f28122d._comment
new file mode 100644
index 000000000..69c33813a
--- /dev/null
+++ b/doc/bugs/Revert_to_old_file_version_in_direct_mode___40__VFAT__41__/comment_1_7e512732f1d24300dd13bb093f28122d._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="92.227.51.179"
+ subject="comment 1"
+ date="2014-05-13T20:43:38Z"
+ content="""
+Crosslink to related wishlist item.
+http://git-annex.branchable.com/todo/A_Way_To_Extract_Previous_Versions_of_a_File_From_a_Direct_Repo/
+"""]]
diff --git a/doc/bugs/Revert_to_old_file_version_in_direct_mode___40__VFAT__41__/comment_2_0ede40e0d68bfb9c6dbc1777f944ed06._comment b/doc/bugs/Revert_to_old_file_version_in_direct_mode___40__VFAT__41__/comment_2_0ede40e0d68bfb9c6dbc1777f944ed06._comment
new file mode 100644
index 000000000..066fefa0c
--- /dev/null
+++ b/doc/bugs/Revert_to_old_file_version_in_direct_mode___40__VFAT__41__/comment_2_0ede40e0d68bfb9c6dbc1777f944ed06._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="92.227.51.179"
+ subject="comment 2"
+ date="2014-05-17T14:16:12Z"
+ content="""
+One follow-up comment, because it occurred to me I might have phrased
+the bug inadequately. By «revert» I didn’t mean a revert in the
+git-sense, but merely «checking out» a file from a selected commit.
+
+But I think I can achieve this in direct mode on VFAT by doing «git
+show upstream/branch~X:file > file», right? «git annex get file» then
+gets the correct content, only that it will not place the content into
+the indicated file until I do «git annex fsck». Maybe «git annex get»
+could take this into account and have the content immediately stored
+there.
+
+"""]]
diff --git a/doc/bugs/Revert_to_old_file_version_in_direct_mode___40__VFAT__41__/comment_3_4ce1601f5dbd8fb769d3c5bb429c3bc5._comment b/doc/bugs/Revert_to_old_file_version_in_direct_mode___40__VFAT__41__/comment_3_4ce1601f5dbd8fb769d3c5bb429c3bc5._comment
new file mode 100644
index 000000000..6e5db42d0
--- /dev/null
+++ b/doc/bugs/Revert_to_old_file_version_in_direct_mode___40__VFAT__41__/comment_3_4ce1601f5dbd8fb769d3c5bb429c3bc5._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="92.227.51.179"
+ subject="comment 3"
+ date="2014-05-17T14:21:30Z"
+ content="""
+Plus it seems that the file can’t be dropped normally afterwards.
+"""]]
diff --git a/doc/bugs/Rsync_encrypted_remote_asks_for_ssh_key_password_for_each_file.mdwn b/doc/bugs/Rsync_encrypted_remote_asks_for_ssh_key_password_for_each_file.mdwn
deleted file mode 100644
index 8239ae708..000000000
--- a/doc/bugs/Rsync_encrypted_remote_asks_for_ssh_key_password_for_each_file.mdwn
+++ /dev/null
@@ -1,30 +0,0 @@
-What steps will reproduce the problem?
-
-Add an encrypted rsync remote by it's 'Host' value in ~/.ssh/config.
-
-eg.:
-
-cat ~/.ssh/config | grep Host
-
- Host serverNick
-
-git annex initremote rsyncRemote type=rsync rsyncurl=serverNick:/home/USER/Music encryption=USER@gmail.com
-
-git annex copy some\ artist --to serverNick
-
-
-What is the expected output? What do you see instead?
-
-I'd expect it to remember the key password like a normal ssh remote. Instead I get asked for the key password 3 times for each file in the folder.
-
-What version of git-annex are you using? On what operating system?
-
-3.20130216. Arch x64 (up to date as of 2013-03-07)
-
-Please provide any additional information below.
-
-
-[[!meta title="rsync special remote does not use ssh connection caching"]]
-
-> [[done]]; ssh connection caching is now done for these remotes.
-> --[[Joey]]
diff --git a/doc/bugs/Rsync_encrypted_remote_asks_for_ssh_key_password_for_each_file/comment_1_fd95e0bb61e80a72b4ac1304ef6c2e77._comment b/doc/bugs/Rsync_encrypted_remote_asks_for_ssh_key_password_for_each_file/comment_1_fd95e0bb61e80a72b4ac1304ef6c2e77._comment
deleted file mode 100644
index 5f55f356b..000000000
--- a/doc/bugs/Rsync_encrypted_remote_asks_for_ssh_key_password_for_each_file/comment_1_fd95e0bb61e80a72b4ac1304ef6c2e77._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-03-08T18:59:27Z"
- content="""
-git-annex does not use ssh connection caching for rsync special remotes, and so if you've configured ssh such that it needs to prompt for a password when making a connection, you'll be prompted twice for each file when using `git annex copy`: Once when it checks if the file is present, once when it rsyncs it. (One of those can be avoided by passing --fast)
-
-I don't see where a third password prompt can come from, other than gpg. But that would only prompt once per git-annex command, since git-annex caches the remote's encryption key.
-
-Of course, you can use a ssh-agent to avoid repeated ssh password prompts.
-
-----
-
-There's certainly a valid wishlist todo item that the rsync special remote should support ssh connection caching. It could be implemented using rsync -e. Although it would need to parse all valid rsync urls to determine which use ssh and which not, and what the user and hostname are.
-"""]]
diff --git a/doc/bugs/S3_Access_fails_on_windows.mdwn b/doc/bugs/S3_Access_fails_on_windows.mdwn
new file mode 100644
index 000000000..403d0c0c2
--- /dev/null
+++ b/doc/bugs/S3_Access_fails_on_windows.mdwn
@@ -0,0 +1,42 @@
+### Please describe the problem.
+
+Attempting to do *anything* with an S3 reomote using git-annex on windows fails with error code 10093 (i.e. WSA_NOT_INITIALISED).
+
+### What steps will reproduce the problem?
+
+Assuming you have a disabled S3 remote called "the-cloud" (e.g. a fresh clone)
+[[!format sh """
+C:\annex> git annex enableremote "the-cloud"
+enableremote the-cloud gpg: WARNING: using insecure memory!
+gpg: please see http://www.gnupg.org/documentation/faqs.html for more information
+(checking bucket...) (creating bucket in ap-southeast-2...) git-annex-old: FailedConnectionException2 "my-bucket-name.s3-ap-southeast-2.amazonaws.com" 80 False getAddrInfo: does not exist (error 10093)
+"""]]
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex 5.20150113-gcf247cf on windows 8.1
+
+### Please provide any additional information below.
+
+This error is caused by the Winsock library not being initialised before a socket operation is attempted. The patch below fixes the issue, and it should be a no-op on non-Windows platforms.
+
+[[!format patch """
+diff --git a/git-annex.hs b/git-annex.hs
+index cdaa754..0eed9db 100644
+--- a/git-annex.hs
++++ b/git-annex.hs
+@@ -21,8 +21,10 @@ import Utility.UserInfo
+ import Utility.Env
+ #endif
+
++import Network.Socket (withSocketsDo)
++
+ main :: IO ()
+-main = do
++main = withSocketsDo $ do
+ ps <- getArgs
+ run ps =<< getProgName
+ where
+"""]]
+
+> Thanks very much for the patch! [[done]] --[[Joey]]
diff --git a/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing.mdwn b/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing.mdwn
deleted file mode 100644
index 2c0037c90..000000000
--- a/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing.mdwn
+++ /dev/null
@@ -1,10 +0,0 @@
-While using HMAC instead of "plain" hash functions is inherently more secure, it's still a bad idea to re-use keys for different purposes.
-
-Also, ttbomk, HMAC needs two keys, not one. Are you re-using the same key twice?
-
-Compability for old buckets and support for different ones can be maintained by introducing a new option and simply copying over the encryption key's identifier into this new option should it be missing.
-
-> Bug was filed prematurely, but was a good bit of paranoia, and gpg and
-> hmac are given different secret keys [[done]] --[[Joey]]
-
->> Thanks :) -- RIchiH
diff --git a/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_1_dc5ae7af499203cfd903e866595b8fea._comment b/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_1_dc5ae7af499203cfd903e866595b8fea._comment
deleted file mode 100644
index 320fb5ef0..000000000
--- a/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_1_dc5ae7af499203cfd903e866595b8fea._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 1"
- date="2011-03-30T14:32:34Z"
- content="""
-S3 doesn't support encryption at all, yet.
-
-It certainly makes sense to use a different portion of the encrypted secret key for HMAC than is uses as the gpg symmetric encryption key.
-
-The two keys used in HMAC would be the secret key and the key/value key for the content being stored.
-
-There is a difficult problem with encrypting filenames in S3 buckets, and that is determining when some data in the bucket is unused for dropunused. I've considered two choices:
-
-1. gpg encrypt the filenames. This would allow dropunused to recover the original filenames, and is probably more robust encryption. But it would double the number of times gpg is run when moving content in/out, and to check for unused content, gpg would have to be run once for every item in the bucket, which just feels way excessive, even though it would not be prompting for a passphrase. Still, haven't ruled this out.
-
-2. HMAC or other hash. To determine what data was unused the same hash and secret key would have to be used to hash all filenames currently used, and then that set of hashes could be interested with the set in the bucket. But then git-annex could only say \"here are some opaque hashes of content that appears unused by anything in your current git repository, but there's no way, short of downloading it and examining it to tell what it is\". (This could be improved by keeping a local mapping between filenames and S3 keys, but maintaining and committing that would bring pain of its own.)
-"""]]
diff --git a/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_2_c62daf5b3bfcd2f684262c96ef6628c1._comment b/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_2_c62daf5b3bfcd2f684262c96ef6628c1._comment
deleted file mode 100644
index dec06c89f..000000000
--- a/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_2_c62daf5b3bfcd2f684262c96ef6628c1._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 2"
- date="2011-03-30T17:01:40Z"
- content="""
-After mulling this over, I think actually encrypting the filenames is preferable.
-
-Did you consider encrypting the symmetric key with an asymmetric one? That's what TrueCrypt etc are using to allow different people access to a shared volume. This has the added benefit that you could, potentially, add new keys for data that new people should have access to while making access to old data impossible. Or keys per subdirectory, or, or, or.
-
-As an aside, could the same mechanism be extended to transparently encrypt data for a remote annex repo? A friend of mine is interested to host his data with me, but he wants to encrypt his data for obvious reasons.
-"""]]
diff --git a/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_3_e1f39c4af5bdb0daabf000da80858cd9._comment b/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_3_e1f39c4af5bdb0daabf000da80858cd9._comment
deleted file mode 100644
index c5bb26f59..000000000
--- a/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_3_e1f39c4af5bdb0daabf000da80858cd9._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 3"
- date="2011-03-30T18:15:18Z"
- content="""
-Yes, encrypting the symmetric key with users' regular gpg keys is the plan.
-
-I don't think that encryption of content in a git annex remote makes much sense; the filenames obviously cannot be encrypted there. It's more likely that the same encryption would get used for a bup remote, or with the [[special_remotes/directory]] remote I threw in today.
-"""]]
diff --git a/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_4_bb6b814ab961818d514f6553455d2bf3._comment b/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_4_bb6b814ab961818d514f6553455d2bf3._comment
deleted file mode 100644
index 09b7a8b1a..000000000
--- a/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_4_bb6b814ab961818d514f6553455d2bf3._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 4"
- date="2011-03-30T18:20:56Z"
- content="""
-Picking up the automagic encryption idea for annex remotes, this would allow you to host a branchable-esque git-annex hosting service. (Nexenta with ZFS is a cheap and reliable option until btrfs becomes stable in a year or five).
-"""]]
diff --git a/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_5_5bb128f6d2ca4b5e4d881fae297fa1f8._comment b/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_5_5bb128f6d2ca4b5e4d881fae297fa1f8._comment
deleted file mode 100644
index 49d43ffc6..000000000
--- a/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_5_5bb128f6d2ca4b5e4d881fae297fa1f8._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 5"
- date="2011-03-30T18:59:19Z"
- content="""
-This is brain-storming only so the idea might be crap, but a branch could keep encrypted filenames while master keeps the real deal. This might fit into the whole scheme just nicely or break future stuff in a dozen places, I am not really sure yet. But at least I can't forget the idea, now.
-"""]]
diff --git a/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_6_63fb74da342751fc35e1850409c506f6._comment b/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_6_63fb74da342751fc35e1850409c506f6._comment
deleted file mode 100644
index d994ca77f..000000000
--- a/doc/bugs/S3_bucket_uses_the_same_key_for_encryption_and_hashing/comment_6_63fb74da342751fc35e1850409c506f6._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 6"
- date="2011-03-30T19:02:20Z"
- content="""
-OTOH, if encryption makes a bup backend more likely disregard the idea above ;)
-"""]]
diff --git a/doc/bugs/S3_memory_leaks.mdwn b/doc/bugs/S3_memory_leaks.mdwn
index 2f72b09ac..7dc1e5757 100644
--- a/doc/bugs/S3_memory_leaks.mdwn
+++ b/doc/bugs/S3_memory_leaks.mdwn
@@ -2,9 +2,13 @@ S3 has memory leaks
Sending a file to S3 causes a slow memory increase toward the file size.
+> This is fixed, now that it uses aws. --[[Joey]]
+
Copying the file back from S3 causes a slow memory increase toward the
file size.
+> [[fixed|done]] too! --[[Joey]]
+
The author of hS3 is aware of the problem, and working on it. I think I
have identified the root cause of the buffering; it's done by hS3 so it can
resend the data if S3 sends it a 307 redirect. --[[Joey]]
@@ -12,3 +16,4 @@ resend the data if S3 sends it a 307 redirect. --[[Joey]]
At least the send leak should be fixed by the patch in the s3-memory-leak
branch in git. That needs a patch to hS3, which I have sent to its author.
--[[Joey]]
+[[!tag confirmed]]
diff --git a/doc/bugs/S3_memory_leaks/comment_3_5e9cecb0e2ec7602963406779b6e3c1f._comment b/doc/bugs/S3_memory_leaks/comment_3_5e9cecb0e2ec7602963406779b6e3c1f._comment
new file mode 100644
index 000000000..a7bb0265f
--- /dev/null
+++ b/doc/bugs/S3_memory_leaks/comment_3_5e9cecb0e2ec7602963406779b6e3c1f._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.112"
+ subject="comment 3"
+ date="2014-08-02T23:08:44Z"
+ content="""
+hS3's author seems to have abandoned it and it has other problems. I should try to switch to a different S3 library.
+
+There is now a workaround; S3 special remotes can be configured to use [[chunking]]. A max of one chunk will then be buffered in memory at a time.
+
+For example, to reconfigure an existing mys3 remote: `enableremote mys3 chunk=1MiB`
+"""]]
diff --git a/doc/bugs/S3_memory_leaks/comment_4_37e41b518813bd7c349017abf4a0ca0f._comment b/doc/bugs/S3_memory_leaks/comment_4_37e41b518813bd7c349017abf4a0ca0f._comment
new file mode 100644
index 000000000..464588a79
--- /dev/null
+++ b/doc/bugs/S3_memory_leaks/comment_4_37e41b518813bd7c349017abf4a0ca0f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.112"
+ subject="comment 4"
+ date="2014-08-03T18:40:26Z"
+ content="""
+Beginning work on a `s3-aws` branch using the aws library instead of hS3.
+"""]]
diff --git a/doc/bugs/S3_memory_leaks/comment_5_1b6d13852aeb37c5c29baf100bd62789._comment b/doc/bugs/S3_memory_leaks/comment_5_1b6d13852aeb37c5c29baf100bd62789._comment
new file mode 100644
index 000000000..ae07de74c
--- /dev/null
+++ b/doc/bugs/S3_memory_leaks/comment_5_1b6d13852aeb37c5c29baf100bd62789._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmUJBh1lYmvfCCiGr3yrdx-QhuLCSRnU5c"
+ nickname="Justin"
+ subject="comment 5"
+ date="2014-11-30T22:18:56Z"
+ content="""
+This is getting in my way, but I'm concerned about using a mostly-untested branch (and also, compiling for ARM sounds really unpleasant). Can you elaborate on the risks here? Can I perhaps donate developer time to get this merged into mainline?
+"""]]
diff --git a/doc/bugs/S3_memory_leaks/comment_6_71ffb88f548969fd4d45eac4656380c0._comment b/doc/bugs/S3_memory_leaks/comment_6_71ffb88f548969fd4d45eac4656380c0._comment
new file mode 100644
index 000000000..fe88d8ef4
--- /dev/null
+++ b/doc/bugs/S3_memory_leaks/comment_6_71ffb88f548969fd4d45eac4656380c0._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 6"""
+ date="2014-12-02T17:10:42Z"
+ content="""
+The s3-aws branch is well tested now.
+
+I am blocked from merging it by some dependency issues, in particular
+<http://hackage.haskell.org/package/dbus> needs to have a small dependency
+fix. I have emailed its author a second time now to try to get that done.
+"""]]
diff --git a/doc/bugs/S3_memory_leaks/comment_7_1ac572b79caa23e3f791e4f8461fcddd._comment b/doc/bugs/S3_memory_leaks/comment_7_1ac572b79caa23e3f791e4f8461fcddd._comment
new file mode 100644
index 000000000..5aaab2bdd
--- /dev/null
+++ b/doc/bugs/S3_memory_leaks/comment_7_1ac572b79caa23e3f791e4f8461fcddd._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmUJBh1lYmvfCCiGr3yrdx-QhuLCSRnU5c"
+ nickname="Justin"
+ subject="comment 7"
+ date="2014-12-06T18:15:50Z"
+ content="""
+The new version works really great for me. I've been copying to S3 over the past few days with no issues on my raspberry pi.
+
+Thanks a ton for getting this out.
+"""]]
diff --git a/doc/bugs/S3_upload_not_using_multipart.mdwn b/doc/bugs/S3_upload_not_using_multipart.mdwn
index d242908f9..ac3817c65 100644
--- a/doc/bugs/S3_upload_not_using_multipart.mdwn
+++ b/doc/bugs/S3_upload_not_using_multipart.mdwn
@@ -51,3 +51,12 @@ Please provide any additional information below.
supported repository versions: 3
upgrade supported from repository versions: 0 1 2
+[[!tag confirmed]]
+
+> [[fixed|done]] This is now supported, when git-annex is built with a new
+> enough version of the aws library. You need to configure the remote to
+> use an appropriate value for multipart, eg:
+>
+> git annex enableremote cloud partsize=1GiB
+>
+> --[[Joey]]
diff --git a/doc/bugs/S3_upload_not_using_multipart/comment_11_ba1f866645419476bbedd6b1e4bbd33f._comment b/doc/bugs/S3_upload_not_using_multipart/comment_11_ba1f866645419476bbedd6b1e4bbd33f._comment
new file mode 100644
index 000000000..c2fdae5e9
--- /dev/null
+++ b/doc/bugs/S3_upload_not_using_multipart/comment_11_ba1f866645419476bbedd6b1e4bbd33f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 11"""
+ date="2014-11-03T21:27:22Z"
+ content="""
+Now implemented on s3-aws branch. Needs a version of the
+haskell aws library that is not quite released yet (but available in git).
+"""]]
diff --git a/doc/bugs/S3_upload_not_using_multipart/comment_12_bf98d0c771dfdd15ddafdba2d94d911f._comment b/doc/bugs/S3_upload_not_using_multipart/comment_12_bf98d0c771dfdd15ddafdba2d94d911f._comment
new file mode 100644
index 000000000..2be62f668
--- /dev/null
+++ b/doc/bugs/S3_upload_not_using_multipart/comment_12_bf98d0c771dfdd15ddafdba2d94d911f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnWvnTWY6LrcPB4BzYEBn5mRTpNhg5EtEg"
+ nickname="Bence"
+ subject="comment 12"
+ date="2014-12-08T17:28:52Z"
+ content="""
+Linked this bug to [[special remotes/S3|/special_remotes/S3]].
+"""]]
diff --git a/doc/bugs/S3_upload_not_using_multipart/comment_1_5bed9faafc43b535f7820749510aaa14._comment b/doc/bugs/S3_upload_not_using_multipart/comment_1_5bed9faafc43b535f7820749510aaa14._comment
new file mode 100644
index 000000000..117055e3f
--- /dev/null
+++ b/doc/bugs/S3_upload_not_using_multipart/comment_1_5bed9faafc43b535f7820749510aaa14._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
+ nickname="Richard"
+ subject="comment 1"
+ date="2014-05-13T15:09:42Z"
+ content="""
+JFTR, this is impacting DebConf's video storage as well.
+
+Richard
+"""]]
diff --git a/doc/bugs/S3_upload_not_using_multipart/comment_2_d82952cf324e769e45f4d90f200210f4._comment b/doc/bugs/S3_upload_not_using_multipart/comment_2_d82952cf324e769e45f4d90f200210f4._comment
new file mode 100644
index 000000000..7ee3c1167
--- /dev/null
+++ b/doc/bugs/S3_upload_not_using_multipart/comment_2_d82952cf324e769e45f4d90f200210f4._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="annexuser"
+ ip="64.71.7.82"
+ subject="comment 2"
+ date="2014-07-14T18:21:00Z"
+ content="""
+I'm having the same problem. Is there a fix for this yet?
+
+ $ git annex version
+ git-annex version: 5.20140709-gc75193e
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 0 1 2 4
+"""]]
diff --git a/doc/bugs/S3_upload_not_using_multipart/comment_3_d878b87a05f4fcd380e6ff309b615aab._comment b/doc/bugs/S3_upload_not_using_multipart/comment_3_d878b87a05f4fcd380e6ff309b615aab._comment
new file mode 100644
index 000000000..46245e657
--- /dev/null
+++ b/doc/bugs/S3_upload_not_using_multipart/comment_3_d878b87a05f4fcd380e6ff309b615aab._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.112"
+ subject="comment 3"
+ date="2014-08-02T23:13:41Z"
+ content="""
+There is now a workaround; S3 special remotes can be configured to use [[chunking]].
+
+For example, to reconfigure an existing mys3 remote: `enableremote mys3 chunk=1MiB`
+
+I'm leaving this bug open because chunking is not the default (although the assistant does enable it by default), and because this chunking operates at a higher, and less efficient level than S3's own multipart upload API. In particular, AWS will charge a fee for each http request made for a chunk.
+
+Adding proper multipart support will probably require switching to a different S3 library.
+"""]]
diff --git a/doc/bugs/S3_upload_not_using_multipart/comment_4_09a3372fd13734cbb05e79d0ba76d052._comment b/doc/bugs/S3_upload_not_using_multipart/comment_4_09a3372fd13734cbb05e79d0ba76d052._comment
new file mode 100644
index 000000000..d36628163
--- /dev/null
+++ b/doc/bugs/S3_upload_not_using_multipart/comment_4_09a3372fd13734cbb05e79d0ba76d052._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.112"
+ subject="comment 4"
+ date="2014-08-03T18:22:58Z"
+ content="""
+The aws library does not support multipart yet either; here's the bug report requesting it: <https://github.com/aristidb/aws/issues/94>
+"""]]
diff --git a/doc/bugs/S3_upload_not_using_multipart/comment_5_5add65b5b284f79ec09ee4d0326e7132._comment b/doc/bugs/S3_upload_not_using_multipart/comment_5_5add65b5b284f79ec09ee4d0326e7132._comment
new file mode 100644
index 000000000..0c7742364
--- /dev/null
+++ b/doc/bugs/S3_upload_not_using_multipart/comment_5_5add65b5b284f79ec09ee4d0326e7132._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.112"
+ subject="comment 5"
+ date="2014-08-03T18:27:32Z"
+ content="""
+However, I don't think that multipart upload actually allows exceeding the S3 limit of 5 GB per object. Configuring the remote with `chunk=100MiB` *does* allow bypassing whatever S3's maximum object size happens to be.
+"""]]
diff --git a/doc/bugs/S3_upload_not_using_multipart/comment_6_906abafc53070d8e4f33df486d2241ea._comment b/doc/bugs/S3_upload_not_using_multipart/comment_6_906abafc53070d8e4f33df486d2241ea._comment
new file mode 100644
index 000000000..ad9d4b601
--- /dev/null
+++ b/doc/bugs/S3_upload_not_using_multipart/comment_6_906abafc53070d8e4f33df486d2241ea._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://svario.it/gioele"
+ nickname="gioele"
+ subject="Multipart S3 support files > 5 GB"
+ date="2014-08-04T06:00:45Z"
+ content="""
+The [multipart guide](http://docs.aws.amazon.com/AmazonS3/latest/dev/UploadingObjects.html) says that the limit is 5 TB per file.
+
+> **Upload objects in parts—Using the Multipart upload API you can upload large objects, up to 5 TB.**
+
+> The Multipart Upload API is designed to improve the upload experience for larger objects. You can upload objects in parts. These object parts can be uploaded independently, in any order, and in parallel. You can use a Multipart Upload for objects from 5 MB to 5 TB in size. For more information, see Uploading Objects Using Multipart Upload. For more information, see Uploading Objects Using Multipart Upload API.
+"""]]
diff --git a/doc/bugs/S3_upload_not_using_multipart/comment_7_f620888512cd78628f82ec9e5eed4ad1._comment b/doc/bugs/S3_upload_not_using_multipart/comment_7_f620888512cd78628f82ec9e5eed4ad1._comment
new file mode 100644
index 000000000..ec47aa2be
--- /dev/null
+++ b/doc/bugs/S3_upload_not_using_multipart/comment_7_f620888512cd78628f82ec9e5eed4ad1._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
+ nickname="Richard"
+ subject="comment 7"
+ date="2014-09-29T08:07:55Z"
+ content="""
+As I found the latest comment confusing, here's the full quote:
+
+ Depending on the size of the data you are uploading, Amazon S3 offers the following options:
+
+ Upload objects in a single operation—With a single PUT operation you can upload objects up to 5 GB in size.
+
+ Upload objects in parts—Using the Multipart upload API you can upload large objects, up to 5 TB.
+
+ The Multipart Upload API is designed to improve the upload experience for larger objects. You can upload objects in parts.
+ These object parts can be uploaded independently, in any order, and in parallel.
+ You can use a Multipart Upload for objects from 5 MB to 5 TB in size.
+
+ We encourage Amazon S3 customers to use Multipart Upload for objects greater than 100 MB.
+
+"""]]
diff --git a/doc/bugs/S3_upload_not_using_multipart/comment_8_4d9242cde0d2348452438659a8aa8d6d._comment b/doc/bugs/S3_upload_not_using_multipart/comment_8_4d9242cde0d2348452438659a8aa8d6d._comment
new file mode 100644
index 000000000..a427c504e
--- /dev/null
+++ b/doc/bugs/S3_upload_not_using_multipart/comment_8_4d9242cde0d2348452438659a8aa8d6d._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
+ nickname="Richard"
+ subject="comment 8"
+ date="2014-09-29T08:09:33Z"
+ content="""
+PS: Chunking spams the S3 remote with individual objects whereas multipart uploads do not. Just something to keep in mind in case you turn on chunking for S3.
+"""]]
diff --git a/doc/bugs/S3_upload_not_using_multipart/comment_9_1f5578a9100f0f087a558e5e5968d753._comment b/doc/bugs/S3_upload_not_using_multipart/comment_9_1f5578a9100f0f087a558e5e5968d753._comment
new file mode 100644
index 000000000..10cab3da9
--- /dev/null
+++ b/doc/bugs/S3_upload_not_using_multipart/comment_9_1f5578a9100f0f087a558e5e5968d753._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 9"""
+ date="2014-10-28T18:25:04Z"
+ content="""
+I have a WIP branch `aws-s3-multipart`. I stopped when I got blocked
+by a bad API in the aws library: <https://github.com/aristidb/aws/issues/141>
+"""]]
diff --git a/doc/bugs/S3_upload_not_using_multipart/comment_9_74b2a392a537dde1c28089f1deed940c._comment b/doc/bugs/S3_upload_not_using_multipart/comment_9_74b2a392a537dde1c28089f1deed940c._comment
new file mode 100644
index 000000000..b965ff0ab
--- /dev/null
+++ b/doc/bugs/S3_upload_not_using_multipart/comment_9_74b2a392a537dde1c28089f1deed940c._comment
@@ -0,0 +1,31 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 9"""
+ date="2014-10-28T16:42:21Z"
+ content="""
+The aws library now supports multipart uploads, using its
+S3.Commands.Multipart module.
+
+I don't think that multipart and chunking fit together: Typically the
+chunks are too small to need multipart for individual chunks. And the
+chunks shouldn't be combined together into a complete object at the end (at
+least not if we care about using chunking to obscure object size).
+Individual chunks sizes can vary when encryption is used, so combining them
+all into one file wouldn't work.
+
+Also, multipart uploads require at least 3 http calls, so there's no point
+using it for small objects, as it would only add overhead.
+
+So, multipart uploads should be used when not chunking, when the object to
+upload exceeds some size, which should probably defaut to something in the
+range of 100 mb to 1 gb.
+
+It might be possible to support resuming of interrupted multipart uploads.
+It seems that git-annex would need to store, locally, the UploadId,
+as well as the list of uploaded parts, including the Etag for the upload
+(which is needed when completing the multipart upload too).
+
+Also it should probably set Expires when initiating the multipart upload,
+so that incomplete ones get cleaned up after some period of time.
+Otherwise, users would probably be billed for them.
+"""]]
diff --git a/doc/bugs/SSH:_command-line:_line_0:_Bad_configuration_option:_ControlPersist___40__SSH_too_old_on_OS_X_10.6.8__63____41__.mdwn b/doc/bugs/SSH:_command-line:_line_0:_Bad_configuration_option:_ControlPersist___40__SSH_too_old_on_OS_X_10.6.8__63____41__.mdwn
deleted file mode 100644
index a3d27e404..000000000
--- a/doc/bugs/SSH:_command-line:_line_0:_Bad_configuration_option:_ControlPersist___40__SSH_too_old_on_OS_X_10.6.8__63____41__.mdwn
+++ /dev/null
@@ -1,27 +0,0 @@
-What steps will reproduce the problem?
-
-Try to get any file from a remote ssh repository on OS X 10.6.8
-
-What is the expected output? What do you see instead?
-
-Instead of retrieving the files, I get:
-
- % git annex get .
- get <filename> command-line: line 0: Bad configuration option: ControlPersist
- command-line: line 0: Bad configuration option: ControlPersist
- (not available)
- Try making some of these repositories available:
- 2efd46d2-0e32-11e2-95fe-f72f09c6615e -- office
-
-What version of git-annex are you using? On what operating system?
- % git annex version
- git-annex version: 3.20120925
- local repository version: 3
- default repository version: 3
- supported repository versions: 3
- upgrade supported from repository versions: 0 1 2
-
-I seems that this option is passed to SSH, but SSH is too old: OpenSSH_5.2p1, OpenSSL 0.9.8r 8 Feb
-
-> Future builds of the standalone binary will default annex.sshcaching to
-> false. [[done]] --[[Joey]]
diff --git a/doc/bugs/SSH:_command-line:_line_0:_Bad_configuration_option:_ControlPersist___40__SSH_too_old_on_OS_X_10.6.8__63____41__/comment_1_0c57a2196d35eb1ecfb0c51273bba05c._comment b/doc/bugs/SSH:_command-line:_line_0:_Bad_configuration_option:_ControlPersist___40__SSH_too_old_on_OS_X_10.6.8__63____41__/comment_1_0c57a2196d35eb1ecfb0c51273bba05c._comment
deleted file mode 100644
index ec510ae30..000000000
--- a/doc/bugs/SSH:_command-line:_line_0:_Bad_configuration_option:_ControlPersist___40__SSH_too_old_on_OS_X_10.6.8__63____41__/comment_1_0c57a2196d35eb1ecfb0c51273bba05c._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.246.8"
- subject="comment 1"
- date="2012-10-15T18:16:58Z"
- content="""
-Here's a workaround, which you can run in the local repository:
-
-git config annex.sshcaching false
-"""]]
diff --git a/doc/bugs/SanityCheckerStartup_crashed.mdwn b/doc/bugs/SanityCheckerStartup_crashed.mdwn
new file mode 100644
index 000000000..65a9beb65
--- /dev/null
+++ b/doc/bugs/SanityCheckerStartup_crashed.mdwn
@@ -0,0 +1,28 @@
+### Please describe the problem.
+On startup, the webapp shows the following warning in a box to the upper right of the screen, with an offer to "Restart thread":
+
+ SanityCheckerStartup crashed: /home/anton/Halvhemligt/.git/annex/misctmp/IMG_32978856.JPG: getFileStatus: does not exist (No such file or directory)
+
+Restarting it causes it to crash again immediately. The log shows the same:
+
+ SanityCheckerStartup crashed: /home/anton/Halvhemligt/.git/annex/misctmp/IMG_32978856.JPG: getFileStatus: does not exist (No such file or directory)
+ [2014-06-02 23:31:13 CEST] SanityCheckerStartup: warning SanityCheckerStartup crashed: /home/anton/Halvhemligt/.git/annex/misctmp/IMG_32978856.JPG: getFileStatus: does not exist (No such file or directory)
+
+/home/anton/Halvhemligt/.git/annex/misctmp/ contains the following:
+
+ lrwxrwxrwx 2 anton anton 199 15 maj 21.08 IMG_32978856.JPG -> ../.git/annex/objects/z3/K2/SHA256E-s728022--12de1f194042af3f8c4dbee15c317de0511bbb8b9e8a0463fffb07e7bbc58bb5.JPG/SHA256E-s728022--12de1f194042af3f8c4dbee15c317de0511bbb8b9e8a0463fffb07e7bbc58bb5.JPG
+ lrwxrwxrwx 2 anton anton 199 15 maj 21.09 IMG_32988856.JPG -> ../.git/annex/objects/vw/30/SHA256E-s688301--8bb6d636163b443705c9a333194116da3937d8272b70613ca6345eaf6bba1255.JPG/SHA256E-s688301--8bb6d636163b443705c9a333194116da3937d8272b70613ca6345eaf6bba1255.JPG
+ lrwxrwxrwx 2 anton anton 199 15 maj 21.17 IMG_33198856.JPG -> ../.git/annex/objects/p3/WG/SHA256E-s754900--224e6489370527156293912e11390af517ad4ef9374ee22c8324b5af5fac0dd7.JPG/SHA256E-s754900--224e6489370527156293912e11390af517ad4ef9374ee22c8324b5af5fac0dd7.JPG
+
+The symlinks are all broken. IMG_3297.JPG, IMG_3298.JPG and IMG_3319.JPG exist in the repository, but I do not recognize the appended numbers 8856. git log shows that these three files have not been modified since they were first added.
+
+### What steps will reproduce the problem?
+No idea. I believe this repository was created in the webapp but most of the changes to it has been done in the CLI.
+
+### What version of git-annex are you using? On what operating system?
+Precompiled 5.20140530 on Arch Linux x86_64 (git-annex-bin package from the AUR), but 5.20140518 had the same problem.
+
+### Please provide any additional information below.
+The crash has not caused any real problem for me that I'm aware of. I'm just reporting it because the error message looks a little scary.
+
+> [[dup|done]] --[[Joey]]
diff --git a/doc/bugs/SanityCheckerStartup_crashed/comment_1_f30b69c11b487334ef02ce7bfcdeb36c._comment b/doc/bugs/SanityCheckerStartup_crashed/comment_1_f30b69c11b487334ef02ce7bfcdeb36c._comment
new file mode 100644
index 000000000..52354d7dc
--- /dev/null
+++ b/doc/bugs/SanityCheckerStartup_crashed/comment_1_f30b69c11b487334ef02ce7bfcdeb36c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-06-04T18:07:11Z"
+ content="""
+This was already fixed in [[!commit 9c0f3ae7e13cc8ed43ac73fbab565e07c10d2c90]].
+"""]]
diff --git a/doc/bugs/SanityCheckerStartup_crashed/comment_2_8b800bf7b54e487e82d0897c87967f22._comment b/doc/bugs/SanityCheckerStartup_crashed/comment_2_8b800bf7b54e487e82d0897c87967f22._comment
new file mode 100644
index 000000000..fd08002d2
--- /dev/null
+++ b/doc/bugs/SanityCheckerStartup_crashed/comment_2_8b800bf7b54e487e82d0897c87967f22._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://launchpad.net/~eliasson"
+ nickname="eliasson"
+ subject="comment 2"
+ date="2014-06-05T17:15:32Z"
+ content="""
+Great. I will patiently await the next release.
+"""]]
diff --git a/doc/bugs/Segfaults_on_Fedora_18_with_SELinux_enabled.mdwn b/doc/bugs/Segfaults_on_Fedora_18_with_SELinux_enabled.mdwn
deleted file mode 100644
index 39b860e7c..000000000
--- a/doc/bugs/Segfaults_on_Fedora_18_with_SELinux_enabled.mdwn
+++ /dev/null
@@ -1,65 +0,0 @@
-git-annex version: 4.20130323
-
-Running the webapp with SELinux enabled:
-
- [0 zerodogg@browncoats annexed]$ git annex webapp --debug
- Launching web browser on file:///home/zerodogg/Documents/annexed/.git/annex/webapp.html
- /home/zerodogg/bin/git-annex: line 25: 5801 Segmentation fault (core dumped) "$base/runshell" git-annex "$@"
-
-After disabling SELinux it works just fine. This is on a freshly installed (default settings) Fedora 18 on x86-64.
-
-Running the assistant also works, but segfaults when attempting to open the webapp:
-
- [0 zerodogg@browncoats annexed]$ git annex assistant &
- [1] 6241
- [0 zerodogg@browncoats annexed]$
- [0 zerodogg@browncoats annexed]$ git annex webapp --debug
- Launching web browser on file:///home/zerodogg/Documents/annexed/.git/annex/webapp.html
- /home/zerodogg/bin/git-annex: line 25: 6322 Segmentation fault (core dumped) "$base/runshell" git-annex "$@"
- [139 zerodogg@browncoats annexed]$ Created new window in existing browser session.
-
-Here's what `dmesg` says:
-
- [ 71.488843] SELinux: initialized (dev proc, type proc), uses genfs_contexts
- [ 115.443932] git-annex[3985]: segfault at e6e62984 ip 0000000009b8085a sp 00000000f4bfd028 error 4 in git-annex[8048000+1c75000]
- [ 125.148819] SELinux: initialized (dev proc, type proc), uses genfs_contexts
- [ 125.230155] git-annex[4043]: segfault at e6eda984 ip 0000000009b8085a sp 00000000f63fd028 error 4 in git-annex[8048000+1c75000]
- [ 406.855659] SELinux: initialized (dev proc, type proc), uses genfs_contexts
- [ 407.033966] git-annex[5806]: segfault at e6faa984 ip 0000000009b8085a sp 00000000f6dfd028 error 4 in git-annex[8048000+1c75000]
- [ 462.368045] git-annex[6279]: segfault at e6f76984 ip 0000000009b8085a sp 00000000f49fd028 error 4 in git-annex[8048000+1c75000]
- [ 465.714636] SELinux: initialized (dev proc, type proc), uses genfs_contexts
- [ 465.930434] git-annex[6329]: segfault at e6e7a984 ip 0000000009b8085a sp 00000000f63fd028 error 4 in git-annex[8048000+1c75000]
- [ 560.570480] git-annex[7050]: segfault at e7022984 ip 0000000009b8085a sp 00000000f54fd028 error 4 in git-annex[8048000+1c75000]
- [ 565.510664] SELinux: initialized (dev proc, type proc), uses genfs_contexts
- [ 565.688681] git-annex[7108]: segfault at e7196984 ip 0000000009b8085a sp 00000000f54fd028 error 4 in git-annex[8048000+1c75000]
-
-Running the whole thing with --debug doesn't appear to provide anything useful:
-
- [0 zerodogg@browncoats annexed]$ git annex assistant --debug &
- [1] 7018
- [0 zerodogg@browncoats annexed]$ [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","show-ref","git-annex"]
- [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","show-ref","--hash","refs/heads/git-annex"]
- [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","log","refs/heads/git-annex..f2260840bd9563f3d9face53dddd6807813860cd","--oneline","-n1"]
- [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","log","refs/heads/git-annex..798526ef1315811296b1ac95d4cf97c72141ad29","--oneline","-n1"]
- [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","log","refs/heads/git-annex..0d827b1ef545a88e94ee8cc973e54a1b74d216f4","--oneline","-n1"]
- [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","log","refs/heads/git-annex..1d8f91411b827c4d59735dbc572e7f278e870e43","--oneline","-n1"]
- [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","log","refs/heads/git-annex..cc442416b325866139db6dbe374bddacda6fef91","--oneline","-n1"]
- [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","log","refs/heads/git-annex..3c2f44ffd82df1a0ae8858bdf2610e933b105a09","--oneline","-n1"]
- [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","log","refs/heads/git-annex..fb8819ca92d9a2ed39e6d329160b5f8da60df83f","--oneline","-n1"]
- [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","log","refs/heads/git-annex..68d0f936ee044b0ca34cf4029bcd6274fed88499","--oneline","-n1"]
- [2013-03-24 16:27:02 CET] read: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","log","refs/heads/git-annex..3ba3dfef6340196126f4fc630b5048188230d1ff","--oneline","-n1"]
- [2013-03-24 16:27:02 CET] chat: git ["--git-dir=/home/zerodogg/Documents/annexed/.git","--work-tree=/home/zerodogg/Documents/annexed","cat-file","--batch"]
-
- [1] + done GITWRAP annex assistant --debug
- [0 zerodogg@browncoats annexed]$ git annex webapp --debug &
- [1] 7082
- [0 zerodogg@browncoats annexed]$ Launching web browser on file:///home/zerodogg/Documents/annexed/.git/annex/webapp.html
- /home/zerodogg/bin/git-annex: line 25: 7088 Segmentation fault (core dumped) "$base/runshell" git-annex "$@"
-
- [1] + exit 139 GITWRAP annex webapp --debug
- [0 zerodogg@browncoats annexed]$ Created new window in existing browser session.
-
-> On IRC it developed that it segfaulted at other times, and gdb complained
-> of a library mismatch. Seems something changed in Fedora libc, and
-> the 32 bit binary is not working on 64 bit. I've brought back the 64 bit
-> standalone builds, which work. [[done]] --[[Joey]]
diff --git a/doc/bugs/Segfaults_on_Fedora_18_with_SELinux_enabled/comment_1_f708d87aa65cd38c20087859d3ab2dc7._comment b/doc/bugs/Segfaults_on_Fedora_18_with_SELinux_enabled/comment_1_f708d87aa65cd38c20087859d3ab2dc7._comment
deleted file mode 100644
index 458e31327..000000000
--- a/doc/bugs/Segfaults_on_Fedora_18_with_SELinux_enabled/comment_1_f708d87aa65cd38c20087859d3ab2dc7._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-03-27T16:18:14Z"
- content="""
-What is this GITWRAP? That is not part of git-annex, I suspect it's a locally set up wrapper around git of some sort.
-
---debug causes the assistant to log to `.git/annex/daemon.log`, there may be useful information in there. In particular it's not at all clear whether the web browser is segfaulting, or whether the crash occurs before the web browser is started.
-
-Does your SE linux policy allow git-annex to run your web browser? What happens if you start the assistant and then manually open file:///home/zerodogg/Documents/annexed/.git/annex/webapp.html in your web browser?
-"""]]
diff --git a/doc/bugs/Segfaults_on_Fedora_18_with_SELinux_enabled/comment_2_fb7188db031147992f3c906783ebbee0._comment b/doc/bugs/Segfaults_on_Fedora_18_with_SELinux_enabled/comment_2_fb7188db031147992f3c906783ebbee0._comment
deleted file mode 100644
index 6b7e7ccc8..000000000
--- a/doc/bugs/Segfaults_on_Fedora_18_with_SELinux_enabled/comment_2_fb7188db031147992f3c906783ebbee0._comment
+++ /dev/null
@@ -1,59 +0,0 @@
-[[!comment format=mdwn
- username="EskildHustvedt"
- ip="84.48.83.221"
- subject="comment 2"
- date="2013-03-31T18:13:53Z"
- content="""
-GITWRAP is just my shell function that sets GIT_PAGER to different values depending on the command.
-
-SELinux lets git-annex run the browser. Browser opens on the file, redirects to the git-annex localhost URL (which fails to connect at that point, since git-annex has crashed). So the crash is 1) in git-annex, and 2) after it has started the browser. The segfault also occurs if I directly start the browser on `/home/zerodogg/Documents/annexed/.git/annex/webapp.html`, so it would appear that the crash occurs when something tries to connect to the http server.
-
-There's nothing from --debug in `.git/annex/daemon.log`:
-
- [2013-03-31 19:58:09 CEST] main: starting assistant version 4.20130323
- [2013-03-31 19:58:09 CEST] read: host [\"-t\",\"SRV\",\"--\",\"_xmpp-client._tcp.dukgo.com\"]
- [2013-03-31 19:58:09 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"symbolic-ref\",\"HEAD\"]
- [2013-03-31 19:58:09 CEST] TransferScanner: Syncing with serenity, river, hufsa, browncoats
- [2013-03-31 19:58:09 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"show-ref\",\"refs/heads/master\"]
- [2013-03-31 19:58:09 CEST] NetWatcher: Using running DBUS service org.freedesktop.NetworkManager to monitor network connection events.
- [2013-03-31 19:58:09 CEST] MountWatcher: Using running DBUS service org.gtk.Private.UDisks2VolumeMonitor to monitor mount events.
- [2013-03-31 19:58:09 CEST] Merger: merging refs/remotes/browncoats/synced/master into refs/heads/master
- [2013-03-31 19:58:09 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"ls-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"preferred-content.log\"]
- [2013-03-31 19:58:09 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"symbolic-ref\",\"HEAD\"]
- [2013-03-31 19:58:09 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"show-ref\",\"refs/heads/master\"]
-
- [2013-03-31 19:58:09 CEST] call: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"merge\",\"--no-edit\",\"refs/remotes/browncoats/synced/master\"]
- Already up-to-date.
- [2013-03-31 19:58:09 CEST] call: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"fetch\",\"serenity\"]
- [2013-03-31 19:58:09 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"show-ref\",\"git-annex\"]
- [2013-03-31 19:58:09 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- [2013-03-31 19:58:09 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"log\",\"refs/heads/git-annex..d5e18a083c7d0caeddc3da78f18b53fac0d56a7f\",\"--oneline\",\"-n1\"]
- [2013-03-31 19:58:09 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"log\",\"refs/heads/git-annex..f2260840bd9563f3d9face53dddd6807813860cd\",\"--oneline\",\"-n1\"]
- [2013-03-31 19:58:09 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"log\",\"refs/heads/git-annex..798526ef1315811296b1ac95d4cf97c72141ad29\",\"--oneline\",\"-n1\"]
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"log\",\"refs/heads/git-annex..21a6361e598efd80e851276c17249e5c3284713f\",\"--oneline\",\"-n1\"]
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"log\",\"refs/heads/git-annex..3c2f44ffd82df1a0ae8858bdf2610e933b105a09\",\"--oneline\",\"-n1\"]
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"log\",\"refs/heads/git-annex..3b4fcc605fd4787084afe47e82eac6821cb2cd37\",\"--oneline\",\"-n1\"]
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"ls-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"preferred-content.log\"]
- (scanning...) [2013-03-31 19:58:10 CEST] Watcher: Performing startup scan
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"show-ref\",\"git-annex\"]
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"log\",\"refs/heads/git-annex..d5e18a083c7d0caeddc3da78f18b53fac0d56a7f\",\"--oneline\",\"-n1\"]
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"log\",\"refs/heads/git-annex..f2260840bd9563f3d9face53dddd6807813860cd\",\"--oneline\",\"-n1\"]
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"log\",\"refs/heads/git-annex..798526ef1315811296b1ac95d4cf97c72141ad29\",\"--oneline\",\"-n1\"]
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"log\",\"refs/heads/git-annex..21a6361e598efd80e851276c17249e5c3284713f\",\"--oneline\",\"-n1\"]
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"log\",\"refs/heads/git-annex..3c2f44ffd82df1a0ae8858bdf2610e933b105a09\",\"--oneline\",\"-n1\"]
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"log\",\"refs/heads/git-annex..3b4fcc605fd4787084afe47e82eac6821cb2cd37\",\"--oneline\",\"-n1\"]
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"symbolic-ref\",\"HEAD\"]
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"show-ref\",\"refs/heads/master\"]
- [2013-03-31 19:58:10 CEST] Merger: merging refs/remotes/serenity/synced/master into refs/heads/master
-
- [2013-03-31 19:58:10 CEST] call: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"merge\",\"--no-edit\",\"refs/remotes/serenity/synced/master\"]
- Already up-to-date.
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"show-ref\",\"git-annex\"]
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"log\",\"refs/heads/git-annex..d5e18a083c7d0caeddc3da78f18b53fac0d56a7f\",\"--oneline\",\"-n1\"]
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"log\",\"refs/heads/git-annex..f2260840bd9563f3d9face53dddd6807813860cd\",\"--oneline\",\"-n1\"]
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"log\",\"refs/heads/git-annex..798526ef1315811296b1ac95d4cf97c72141ad29\",\"--oneline\",\"-n1\"]
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"log\",\"refs/heads/git-annex..21a6361e598efd80e851276c17249e5c3284713f\",\"--oneline\",\"-n1\"]
- [2013-03-31 19:58:10 CEST] read: git [\"--git-dir=/home/zerodogg/Documents/annexed/.git\",\"--work-tree=/home/zerodogg/Documents/annexed\",\"log\",\"refs/heads/git-annex..3c2f44ffd82df1a0ae8858bdf2610e933b105a09\",\"--oneline\",\"-n1\"]
-"""]]
diff --git a/doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably..mdwn b/doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably..mdwn
index 86e93e1ad..a6c258332 100644
--- a/doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably..mdwn
+++ b/doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably..mdwn
@@ -20,3 +20,7 @@ There is no logoutput to add... I'm sorry.
# End of transcript or log.
"""]]
+
+[[!meta title="XMPP does not work with jabber.ccc.de"]]
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably./comment_4_a1948b7cd6ea990c8f1be5e483c835fa._comment b/doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably./comment_4_a1948b7cd6ea990c8f1be5e483c835fa._comment
new file mode 100644
index 000000000..6eec4ae9a
--- /dev/null
+++ b/doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably./comment_4_a1948b7cd6ea990c8f1be5e483c835fa._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://xlogon.net/yminus"
+ nickname="http://xlogon.net/yminus"
+ subject="comment 4"
+ date="2014-05-08T21:12:49Z"
+ content="""
+When will this issue be fixed? Currently my Jabber account is on jabber.ccc.de.
+
+This is the error message:
+
+ Unable to connect to the Jabber server. Maybe you entered the wrong password? (Error message: host jabberd.jabber.ccc.de.:5222 failed: AuthenticationFailure (Element {elementName = Name {nameLocalName = \"failure\", nameNamespace = Just \"urn:ietf:params:xml:ns:xmpp-sasl\", namePrefix = Nothing}, elementAttributes = [], elementNodes = [NodeElement (Element {elementName = Name {nameLocalName = \"bad-protocol\", nameNamespace = Just \"urn:ietf:params:xml:ns:xmpp-sasl\", namePrefix = Nothing}, elementAttributes = [], elementNodes = []})]}); host jabberd.jabber.ccc.de.:80 failed: AuthenticationFailure (Element {elementName = Name {nameLocalName = \"failure\", nameNamespace = Just \"urn:ietf:params:xml:ns:xmpp-sasl\", namePrefix = Nothing}, elementAttributes = [], elementNodes = [NodeElement (Element {elementName = Name {nameLocalName = \"bad-protocol\", nameNamespace = Just \"urn:ietf:params:xml:ns:xmpp-sasl\", namePrefix = Nothing}, elementAttributes = [], elementNodes = []})]}))
+
+Can you advise me another trustworthy non-profit and free (free as in free beer\" as well as \"free as in free speech\") jabber server?
+"""]]
diff --git a/doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably./comment_5_293b333134c97dc666a825cc7a8b2b62._comment b/doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably./comment_5_293b333134c97dc666a825cc7a8b2b62._comment
new file mode 100644
index 000000000..37c86cc80
--- /dev/null
+++ b/doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably./comment_5_293b333134c97dc666a825cc7a8b2b62._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.36"
+ subject="comment 5"
+ date="2014-05-24T20:03:46Z"
+ content="""
+AFAIKS, this is not a failure from a self-signed certificate. git-annex contacted the jabber server, accepted its certificate, and tried to log in. The jabber server rejected the login.
+
+This kind of problem has in the past turned out to involve incompatabilities in SASL authentication using some newish authentication schemes. Often it's been a bug in the XMPP server that's tickled by the haksell TLS library. See for example <http://bugs.debian.org/717463>
+
+So, what XMPP server is used by CCC?
+"""]]
diff --git a/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__.mdwn b/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__.mdwn
deleted file mode 100644
index 7eaf2a71b..000000000
--- a/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__.mdwn
+++ /dev/null
@@ -1,46 +0,0 @@
-> git annex status
-supported backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
-supported remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
-repository mode: indirect
-trusted repositories: 0
-semitrusted repositories: 8
- 00000000-0000-0000-0000-000000000001 -- web
- 44AF00F1-511F-4902-8235-DFF741B09400 -- here
- 44af00f1-511f-4902-8235-dff741b09400 -- chrissy
- 53499200-CA18-4B51-B6B3-651C18208349 -- stevedave
- 56C56658-0995-4613-8A1B-B2FA534A834C -- olaf
- 8FE9B19F-4FC8-4CFA-AD89-4B70EB432EDC -- passport
- AFC75641-B34A-4644-B566-C8D3127823F7 -- glacier
- B3238A12-D81B-40EA-BE89-3BDB318AE2B7 -- brodie
-untrusted repositories: 0
-transfers in progress: none
-available local disk space: 78.8 gigabytes (+1 gigabyte reserved)
-local annex keys: 3915
-local annex size: 81.37 gigabytes
-known annex keys: 5728
-known annex size: 641.36 gigabytes
-bloom filter size: 16 mebibytes (0.8% full)
-backend usage:
- SHA256E: 8716
- URL: 927
-
-> git annex version
-git-annex version: 4.20130909
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi
-local repository version: 3
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-
-> git-annex intentionally treats UUIDs as opaque strings,
-> so it is not going to go to any bother to consider
-> different byte sequences to be the same UUID, sorry.
-> (The standard may be arbitrarily complicated, but I have arbitrarily
-> decided to ignore it.)
->
-> Since git-annex only ever generates each UUID once, and copies
-> the exact sequence of bytes as necessary, the only way the situation
-> you show above can happen is if you have manually gone in and entered
-> UUIDs in two different cases.
->
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_1_00b52dba3bc30516e06c44cbfd3a05a2._comment b/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_1_00b52dba3bc30516e06c44cbfd3a05a2._comment
deleted file mode 100644
index b1417816f..000000000
--- a/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_1_00b52dba3bc30516e06c44cbfd3a05a2._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 1"
- date="2013-09-12T09:44:54Z"
- content="""
-There does not seem to be an actual bug description in here. Can you provide more info?
-
-To answer the actual question: RFC 4122 clearly answers no:
-
- Each field is treated as an integer and has its value printed as a
- zero-filled hexadecimal digit string with the most significant
- digit first. The hexadecimal values \"a\" through \"f\" are output as
- lower case characters and are case insensitive on input.
-
-Yes, that means that git-annex prints them wrongly as that's upper case.
-"""]]
diff --git a/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_2_8f5fa659c2ab91b1757bac31cd3b15eb._comment b/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_2_8f5fa659c2ab91b1757bac31cd3b15eb._comment
deleted file mode 100644
index f07a7bf9d..000000000
--- a/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_2_8f5fa659c2ab91b1757bac31cd3b15eb._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 2"
- date="2013-09-12T09:49:56Z"
- content="""
-What OS are you using?
-
-versions 4.20130827 and 4.20130911 on Debian Sid print UUIDs which are lower case, as should be expected.
-"""]]
diff --git a/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_3_ccf9623d60c58d036d8bf24757e50de3._comment b/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_3_ccf9623d60c58d036d8bf24757e50de3._comment
deleted file mode 100644
index 76f6c0742..000000000
--- a/doc/bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/comment_3_ccf9623d60c58d036d8bf24757e50de3._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmRFKwny4rArBaz-36xTcsJYqKIgdDaw5Q"
- nickname="Andrew"
- subject="comment 3"
- date="2013-09-12T16:24:30Z"
- content="""
-This is on OSX 10.8.4
-
-If you look at the remote \"chrissy\" and \"here\" they are the same uuid, but with different case.
-"""]]
diff --git a/doc/bugs/Should_ignore_.thumbnails__47___on_android.mdwn b/doc/bugs/Should_ignore_.thumbnails__47___on_android.mdwn
deleted file mode 100644
index 30dc5caee..000000000
--- a/doc/bugs/Should_ignore_.thumbnails__47___on_android.mdwn
+++ /dev/null
@@ -1,28 +0,0 @@
-### Please describe the problem.
-
-When creating a Camera repository on android, the .thumbnails/ directory (containing useless crushed JPGs and even more useless oodles of thumbnail metadata databases) is annexed. This leads to confusion (assistant tries to annex database and thumbnails in modification) and waste (uploading/annexing unusable/unneeded metadata).
-
-### What steps will reproduce the problem?
-
-Install git-annex on Android and choose the defaults for a camera repository.
-
-
-### What version of git-annex are you using? On what operating system?
-
-4.20130601, Android 4.2.2
-
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> I've [[done]] this, however the .gitignore file it writes will
-> not actually be used by the assistant until it gets support
-> for querying gitignore settings from git. There is already a
-> bug tracking that, and it's in process. --[[Joey]]
diff --git a/doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials.mdwn b/doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials.mdwn
new file mode 100644
index 000000000..b22a81610
--- /dev/null
+++ b/doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials.mdwn
@@ -0,0 +1,30 @@
+### Please describe the problem.
+
+I have an existing Git annex repository with an Amazon S3 remote. I don't have the original credentials for this S3 account any more, but I would like to enable this remote in a fresh clone. When using the new IAM credentials, I get a SignatureDoesNotMatch error.
+
+### What steps will reproduce the problem?
+
+ [ollie@nixos:/media/music]$ export AWS_ACCESS_KEY_ID="redacted"
+
+ [ollie@nixos:/media/music]$ export AWS_SECRET_ACCESS_KEY="redacted"
+
+ [ollie@nixos:/media/music]$ git annex enableremote S3musicencrypted
+ enableremote S3musicencrypted (checking bucket...) (creating bucket in EU...) git-annex: S3Error {s3StatusCode = Status {statusCode = 403, statusMessage = "Forbidden"}, s3ErrorCode = "SignatureDoesNotMatch", s3ErrorMessage = "The request signature we calculated does not match the signature you provided. Check your key and signing method.", s3ErrorResource = Nothing, s3ErrorHostId = Just "jjTIOt9HhXtYTYTHQB7a7CryvCVwZI2nW2EoR/GcF5QxlNf//qDd5ySLnlBiU3BDN4KzZuI2U8w=", s3ErrorAccessKeyId = Just "redacted", s3ErrorStringToSign = Just "PUT\n\n\nTue, 3 Feb 2015 19:36:58 GMT\n/s3musicencrypted-a7e22956-5ce2-11e2-97a5-6f33220ffbf3/"}
+
+
+### What version of git-annex are you using? On what operating system?
+
+ [ollie@nixos:/media/music]$ git annex version
+ git-annex version: 5.20150113
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash TorrentParser
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web bittorrent webdav tahoe glacier ddar hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 0 1 2 4
+
+ [ollie@nixos:/media/music]$ uname -a
+ Linux nixos 3.18.3 #1-NixOS SMP Thu Jan 1 00:00:01 UTC 1970 x86_64 GNU/Linux
+
+ [ollie@nixos:/media/music]$ cat /run/current-system/nixos-version
+ 15.05pre-70b398d
diff --git a/doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials/comment_1_804a51b57ac9261a95b268d122eb7cae._comment b/doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials/comment_1_804a51b57ac9261a95b268d122eb7cae._comment
new file mode 100644
index 000000000..ada6829eb
--- /dev/null
+++ b/doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials/comment_1_804a51b57ac9261a95b268d122eb7cae._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-04T19:03:35Z"
+ content="""
+Does the S3musicencrypted special remote have embedcreds=yes set
+in its configuration? You could look at `git show git-annex:remote.log`
+to check. (Don't paste it here, may contain access keys.)
+
+Does `.git/annex/creds/a7e22956-5ce2-11e2-97a5-6f33220ffbf3` exist?
+
+Based on looking at the code, I'd expect environment variables to override
+both of those, so I wonder if perhaps the creds you passed in the
+environment are just wrong.
+"""]]
diff --git a/doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials/comment_2_ed27571352892fb5229b4daa50934308._comment b/doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials/comment_2_ed27571352892fb5229b4daa50934308._comment
new file mode 100644
index 000000000..64d6a148c
--- /dev/null
+++ b/doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials/comment_2_ed27571352892fb5229b4daa50934308._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmg0NqVniTETKYIWr6eyYRJnakNg0A6tRc"
+ nickname="Oliver"
+ subject="comment 2"
+ date="2015-02-04T21:42:22Z"
+ content="""
+Hi joey,
+
+It doesn't seem like embedcreds is set - `git show git-annex:remote.log | grep embed` doesn't yield anything.
+
+The file you asked me to check does exist, and whenever I run `git annex enableremote` it gets updated with the contents of my environment variables.
+
+I'm pretty certain the contents of these variables is correct - I'm using AWS' \"IAM\" options to allocate new access keys to my git-annex user, and would expect a different error if things were wrong there. I'll continue to double check my account settings.
+"""]]
diff --git a/doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials/comment_3_8d4217b54a37eabfd12016c04c7e55b1._comment b/doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials/comment_3_8d4217b54a37eabfd12016c04c7e55b1._comment
new file mode 100644
index 000000000..a53456b8d
--- /dev/null
+++ b/doc/bugs/SignatureDoesNotMatch_error_when_trying_to_enable_S3_remote_with_IAM_credentials/comment_3_8d4217b54a37eabfd12016c04c7e55b1._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2015-02-09T18:30:46Z"
+ content="""
+Well, looks like git-annex is using the IAM credentials you're providing.
+
+You could try to use a different S3 client on
+the same bucket to check if the credentials are good.
+
+This may be a problem with the credentials not allowing some actions,
+like creating a bucket. Which is the action git-annex is failing at.
+
+The bucket does already exist, right? Does it contain an "annex-uuid"
+file? Does that file contain "a7e22956-5ce2-11e2-97a5-6f33220ffbf3"?
+"""]]
diff --git a/doc/bugs/Specifying_a_filename_starting_with___34__-c__34___instead_applies_it_to_all_files.mdwn b/doc/bugs/Specifying_a_filename_starting_with___34__-c__34___instead_applies_it_to_all_files.mdwn
deleted file mode 100644
index 52db9e0ae..000000000
--- a/doc/bugs/Specifying_a_filename_starting_with___34__-c__34___instead_applies_it_to_all_files.mdwn
+++ /dev/null
@@ -1,75 +0,0 @@
-### Please describe the problem.
-Trying to apply certain commands - such as 'drop' - to a filename which starts with "-c" instead applies it to all files. In the instance where I found this, I was using "drop --force" and it caused it to indiscriminately get rid of everything in the directory instead of a single file.
-
-### What steps will reproduce the problem?
-1. Make a repository.
-2. Create several files and add them.
-3. Create a file whose name begins with "-c" and add it as well.
-4. Run "git annex drop <fname>" where 'fname' is the file from that last step.
-
-### What version of git-annex are you using? On what operating system?
-4.20130516-gedc4ccd on Arch Linux
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-[user@host ~]$ mkdir annex_test
-[user@host ~]$ cd annex_test/
-[user@host annex_test]$ ls
-[user@host annex_test]$ git init
-Initialized empty Git repository in /home/user/annex_test/.git/
-[user@host annex_test]$ git annex init "test"
-init test ok
-(Recording state in git...)
-[user@host annex_test]$
-[user@host annex_test]$ echo foo > foo
-[user@host annex_test]$ echo bar > bar
-[user@host annex_test]$ echo baz > baz
-[user@host annex_test]$ echo test > "-c-test"
-[user@host annex_test]$ git annex add *
-add bar (checksum...) ok
-add baz (checksum...) ok
-add foo (checksum...) ok
-(Recording state in git...)
-[user@host annex_test]$ git annex add -c-test
-add -c-test (checksum...) ok
-(Recording state in git...)
-[user@host annex_test]$ git annex drop -c-test
-drop -c-test (unsafe)
- Could only verify the existence of 0 out of 1 necessary copies
-
- Rather than dropping this file, try using: git annex move
-
- (Use --force to override this check, or adjust annex.numcopies.)
-failed
-drop bar (unsafe)
- Could only verify the existence of 0 out of 1 necessary copies
-
- Rather than dropping this file, try using: git annex move
-
- (Use --force to override this check, or adjust annex.numcopies.)
-failed
-drop baz (unsafe)
- Could only verify the existence of 0 out of 1 necessary copies
-
- Rather than dropping this file, try using: git annex move
-
- (Use --force to override this check, or adjust annex.numcopies.)
-failed
-drop foo (unsafe)
- Could only verify the existence of 0 out of 1 necessary copies
-
- Rather than dropping this file, try using: git annex move
-
- (Use --force to override this check, or adjust annex.numcopies.)
-failed
-git-annex: drop: 4 failed
-
-
-# End of transcript or log.
-"""]]
-
-> Closing, as this is basically user error. [[done]] --[[Joey]]
diff --git a/doc/bugs/Specifying_a_filename_starting_with___34__-c__34___instead_applies_it_to_all_files/comment_1_2fe6d735bc075275a6b8890fac48ee58._comment b/doc/bugs/Specifying_a_filename_starting_with___34__-c__34___instead_applies_it_to_all_files/comment_1_2fe6d735bc075275a6b8890fac48ee58._comment
deleted file mode 100644
index 39a469933..000000000
--- a/doc/bugs/Specifying_a_filename_starting_with___34__-c__34___instead_applies_it_to_all_files/comment_1_2fe6d735bc075275a6b8890fac48ee58._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-06-10T20:30:27Z"
- content="""
-This is the same as trying to rm a file named `-rf`
-
-In git-annex, as in git, -c sets a git configuration option. The text after the -c is supposed to be the option name and value. So -c-test is a valid command-line option.
-
-This leaves `git annex drop`, with no files specified to drop. As documented, git-annex commands default to acting on all relevant files in the current directory and subdirectories.
-
-Luckily, drop does check that numcopies other remotes have the file, so unless you also have a file named --force, you're not going to lose data doing this.
-
-I don't see any change I could make to prevent this kind of mistake. I checked and git also treats \"-c -test\" as valid input, despite \"-test\" not being a likely git config key (and no value being specified). I could make git-annex's option parser require the space between option and value (which git does require), which would perhaps reduce the set of files whose names are valid options.
-
-Fundamentally, this is a type of mistake that the design of unix command options allows to happen, if people use filenames starting with dashes -- so people generally don't do that. It's worth noting that git-annex is *very* careful itself, whenever passing a filename to a unix command, to check if it starts with a dash, and use \"./-file\" instead!
-"""]]
diff --git a/doc/bugs/Stale_lock_files_on_Android.mdwn b/doc/bugs/Stale_lock_files_on_Android.mdwn
deleted file mode 100644
index b3451a153..000000000
--- a/doc/bugs/Stale_lock_files_on_Android.mdwn
+++ /dev/null
@@ -1,44 +0,0 @@
-### Please describe the problem.
-
-Both my Android devices where not processing git-annex updates due to stale lock files. While the lock files are different, I've reported them both together as they are related.
-
-### What steps will reproduce the problem?
-
-Unknown, perhaps the assistant crashed, or the battery ran flat on them.
-
-To resolve the issue I had to manually remove the lock files.
-
-### What version of git-annex are you using? On what operating system?
-
-On my Android phone, daily build 4.20130614-g221aea4
-On my Android tablet, daily build 4.20130621-g36258de
-
-### Please provide any additional information below.
-
-It seems to me that it'd be useful to have the assistant check to see if the lock files are still valid and remove them if they're stale.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-My phone:
-
-From ssh://git-annex-flick-andrewannex_phonecamera/~/phone-camera
- 987dc25..682cdd1 git-annex -> flick_phonecamera/git-annex
-fatal: Unable to create '/storage/emulated/legacy/DCIM/.git/refs/remotes/flick_phonecamera/synced/git-annex.lock': File exists.
-
-My tablet:
-
-Committer: Adding Coleman-C..eedom.pdf
-Committer: Committing changes to git
-fatal: Unable to create '/mnt/sdcard/reference/.git/index.lock': File exists.
-
-# End of transcript or log.
-"""]]
-
-> The '/mnt/sdcard/reference/.git/index.lock' lock file will now be
-> automatically dealt with. Have not done anything about the refs/remotes
-> lock files yet. --[[Joey]]
->
-> Now the assistant deals with all stale git lock files on startup.
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Switching_between_direct_and_indirect_stomps_on___39__regular__39___git_files.mdwn b/doc/bugs/Switching_between_direct_and_indirect_stomps_on___39__regular__39___git_files.mdwn
deleted file mode 100644
index db1889f81..000000000
--- a/doc/bugs/Switching_between_direct_and_indirect_stomps_on___39__regular__39___git_files.mdwn
+++ /dev/null
@@ -1,27 +0,0 @@
-# What steps will reproduce the problem?
-
- git add file
- git annex add file2
- git annex direct
- git annex indirect
-
-file and file2 are now both in the annex.
-
-# What is the expected output? What do you see instead?
-
-file should remain in the main repo, file2 should remain in the annex
-
-# What version of git-annex are you using? On what operating system?
-
- git-annex version: 4.20130228
- local repository version: 3
- default repository version: 3
- supported repository versions: 3 4
- upgrade supported from repository versions: 0 1 2
-
- git version 1.8.1.5
-
-Mac OSX 10.8.2 Build 12C60
-
-> Closing this bug, as I cannot reproduce it and the bug reporter is
-> not responding. [[done]] --[[Joey]]
diff --git a/doc/bugs/Switching_between_direct_and_indirect_stomps_on___39__regular__39___git_files/comment_1_0d2cb3b8509cd0eba50aafa14afefc02._comment b/doc/bugs/Switching_between_direct_and_indirect_stomps_on___39__regular__39___git_files/comment_1_0d2cb3b8509cd0eba50aafa14afefc02._comment
deleted file mode 100644
index d4afd95c4..000000000
--- a/doc/bugs/Switching_between_direct_and_indirect_stomps_on___39__regular__39___git_files/comment_1_0d2cb3b8509cd0eba50aafa14afefc02._comment
+++ /dev/null
@@ -1,63 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-03-08T19:44:29Z"
- content="""
-I cannot reproduce this using the steps given. Transcript:
-
-<pre>
-joey@gnu:~/tmp>mkdir test
-joey@gnu:~/tmp>cd test
-joey@gnu:~/tmp/test>git init
-Initialized empty Git repository in /home/joey/tmp/test/.git/
-joey@gnu:~/tmp/test>git annex init
-init ok
-(Recording state in git...)
-joey@gnu:~/tmp/test>echo file > file
-joey@gnu:~/tmp/test>echo file2 > file2
-joey@gnu:~/tmp/test>git add file
-joey@gnu:~/tmp/test>git annex add file2
-add file2 (checksum...) ok
-(Recording state in git...)
-joey@gnu:~/tmp/test>git annex direct
-commit
-[master (root-commit) 8d49cac] commit before switching to direct mode
- 2 files changed, 2 insertions(+)
- create mode 100644 file
- create mode 120000 file2
-ok
-direct file2 ok
-direct ok
-joey@gnu:~/tmp/test>git annex indirect
-commit (Recording state in git...)
-
-ok
-# On branch master
-# Changes not staged for commit:
-# (use \"git add <file>...\" to update what will be committed)
-# (use \"git checkout -- <file>...\" to discard changes in working directory)
-#
-# typechange: file2
-#
-no changes added to commit (use \"git add\" and/or \"git commit -a\")
-ok
-indirect file2 ok
-indirect ok
-ok
-joey@gnu:~/tmp/test>ls
-file file2@
-joey@gnu:~/tmp/test>file file
-file: ASCII text
-joey@gnu:~/tmp/test>file file2
-file2: symbolic link to `.git/annex/objects/ZV/w4/SHA256E-s6--67ee5478eaadb034ba59944eb977797b49ca6aa8d3574587f36ebcbeeb65f70e/SHA256E-s6--67ee5478eaadb034ba59944eb977797b49ca6aa8d3574587f36ebcbeeb65f70e'
-joey@gnu:~/tmp/test>git log --oneline file
-8d49cac commit before switching to direct mode
-</pre>
-
-I even tried to reproduce the bug on a mac in case it was somehow only happening on that OS, but still, no go. `file` remains checked into git as a normal file, it is not annexed.
-
-`git annex indirect` does not touch files unless they have a symlink committed to git. The code is pretty clear about that.
-
-Please post a complete transcript that goes all the way from repository creation to the bug happening.
-"""]]
diff --git a/doc/bugs/Switching_from_indirect_mode_to_direct_mode_breaks_duplicates.mdwn b/doc/bugs/Switching_from_indirect_mode_to_direct_mode_breaks_duplicates.mdwn
deleted file mode 100644
index 55d2b13b9..000000000
--- a/doc/bugs/Switching_from_indirect_mode_to_direct_mode_breaks_duplicates.mdwn
+++ /dev/null
@@ -1,30 +0,0 @@
-#What steps will reproduce the problem?
-
-1. Create a new repository in indirect mode.
-
-2. Add the same file twice under a different name. Now you have two symlinks pointing to the same file under .git/annex/objects/
-
-3. Switch to direct mode. The first symlink gets replaced by the actual file. The second stays unchanged, pointing to nowhere. But git annex whereis still reports it has a copy.
-
-4. Delete the first file. Git annex whereis still thinks it has a copy of file 2, which is not true -> data loss.
-
-#What is the expected output? What do you see instead?
-
-When switching to direct mode, both symlinks should be replaced by a copy (or at least a hardlink) of the actual file.
-
-> The typo that caused this bug is fixed. --[[Joey]]
-
-#What version of git-annex are you using? On what operating system?
-
-3.20130107 on Arch Linux x64
-
-#Please provide any additional information below.
-
-The deduplication performed by git-annex is very dangerous in itself
-because files with identical content become replaced by references to the
-same file without the user necessarily being aware. Think of the user
-making a copy of a file, than modifying it. He would expect to end up with
-two files, the unchanged original and the modified copy. But what he really
-gets is two symlinks pointing to the same modified file.
-
-> I agree, it now copies rather than hard linking. [[done]] --[[Joey]]
diff --git a/doc/bugs/Switching_repositories_in_webapp_on_a_remote_server_is_not_honoring_--listen_parameter.mdwn b/doc/bugs/Switching_repositories_in_webapp_on_a_remote_server_is_not_honoring_--listen_parameter.mdwn
deleted file mode 100644
index faa7a36de..000000000
--- a/doc/bugs/Switching_repositories_in_webapp_on_a_remote_server_is_not_honoring_--listen_parameter.mdwn
+++ /dev/null
@@ -1,24 +0,0 @@
-### Please describe the problem.
-I am running my "origin" repositories on a headless server. Managing these with webapp --listen=<server IP>:<port> is a very conveniant way. Now I am creating more repositories for different content on the same server. When I try to switch the webapp between these repositories webapp gives me a link with 127.0.0.1:<random port> in the URL.
-
-### What steps will reproduce the problem?
-1. Start webapp on a remote system with --listen parameter.
-2. Add an existing (did not try for a new repository) manually created annex to the webapp using "add another local repository" (btw. file select dialog is also not working remotely)
-3. You get asked if you want to combine the new annex with the current or to keep them separate (--> keep them separate)
-4. You get forwarded to the new webapp instance but with a localhost address (127.0.0.1). The same address is also used when you manually try to swich between repositories using the repository menu.
-
-### What version of git-annex are you using? On what operating system?
-4.20130501 on Ubuntu precise from the rubiojr PPA repository
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/debug.log
-
-
-# End of transcript or log.
-"""]]
-
->> --listen no longer accepts a port. Use the new HTTPS support instead.
->> [[done]] --[[Joey]]
diff --git a/doc/bugs/Switching_repositories_in_webapp_on_a_remote_server_is_not_honoring_--listen_parameter/comment_1_4dd773372979dd95538bfba6516a11eb._comment b/doc/bugs/Switching_repositories_in_webapp_on_a_remote_server_is_not_honoring_--listen_parameter/comment_1_4dd773372979dd95538bfba6516a11eb._comment
deleted file mode 100644
index 37b43d548..000000000
--- a/doc/bugs/Switching_repositories_in_webapp_on_a_remote_server_is_not_honoring_--listen_parameter/comment_1_4dd773372979dd95538bfba6516a11eb._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="marvin"
- ip="91.152.75.65"
- subject="Comfirm"
- date="2013-07-28T19:42:38Z"
- content="""
-I'm seeing this too. Debian sid package 4.20130723
-
-"""]]
diff --git a/doc/bugs/Syncing_creates_broken_links_instead_of_proper_files.mdwn b/doc/bugs/Syncing_creates_broken_links_instead_of_proper_files.mdwn
deleted file mode 100644
index b10df810c..000000000
--- a/doc/bugs/Syncing_creates_broken_links_instead_of_proper_files.mdwn
+++ /dev/null
@@ -1,51 +0,0 @@
-What steps will reproduce the problem?
-
-Create two repositories by running git annex webapp. Sync them by linking them to the same xmpp account. Add files on both sides.
-
-What is the expected output? What do you see instead?
-
-I expect the same file to show up on both sides with the same contents. Instead adding a file on any side creates a broken link with the same name on the other side. For example:
-
-Side A:
-
- $ ls -la
- total 20
- drwxrwxr-x 3 pedrocr pedrocr 4096 Jan 3 19:24 .
- drwxr-xr-x 55 pedrocr pedrocr 4096 Jan 3 19:19 ..
- lrwxrwxrwx 1 pedrocr pedrocr 178 Jan 3 19:22 bar -> .git/annex/objects/FQ/vV/SHA256E-s8--12a61f4e173fb3a11c05d6471f74728f76231b4a5fcd9667cef3af87a3ae4dc2/SHA256E-s8--12a61f4e173fb3a11c05d6471f74728f76231b4a5fcd9667cef3af87a3ae4dc2
- lrwxrwxrwx 1 pedrocr pedrocr 178 Jan 3 19:20 foo -> .git/annex/objects/g7/9v/SHA256E-s4--7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730/SHA256E-s4--7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730
- drwxrwxr-x 7 pedrocr pedrocr 4096 Jan 3 19:24 .git
- -rw-r--r-- 1 pedrocr pedrocr 0 Jan 3 19:24 testing
-
-"foo" and "bar" are broken links that were created on Side B
-
-Side B:
-
- $ ls -la
- total 24
- drwxrwxr-x 3 pedrocr pedrocr 4096 Jan 3 19:24 .
- drwx------ 42 pedrocr pedrocr 4096 Jan 3 19:18 ..
- -rw-r--r-- 1 pedrocr pedrocr 8 Jan 3 19:22 bar
- -rw-r--r-- 1 pedrocr pedrocr 4 Jan 3 19:20 foo
- drwxrwxr-x 7 pedrocr pedrocr 4096 Jan 3 19:24 .git
- lrwxrwxrwx 1 pedrocr pedrocr 178 Jan 3 19:24 testing -> .git/annex/objects/pX/ZJ/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
-
-In this case "testing" is a broken link and was created on Side A.
-
-What version of git-annex are you using? On what operating system?
-
- $ ./git-annex version
- git-annex version: 3.20130102
-
- $ uname -a
- Linux wintermute 3.2.0-35-generic #55-Ubuntu SMP Wed Dec 5 17:45:18 UTC 2012 i686 i686 i386 GNU/Linux
-
- $ lsb_release -a
- Distributor ID: Ubuntu
- Description: Ubuntu 12.04.1 LTS
- Release: 12.04
- Codename: precise
-
-> [[done]]; the webapp now detects when XMPP pairing has been used but no
-> transfer remote is available, and prompts the user to create one.
-> --[[Joey]]
diff --git a/doc/bugs/Syncing_creates_broken_links_instead_of_proper_files/comment_1_a2bedb2e77451b02fc66fc9ef5c4405c._comment b/doc/bugs/Syncing_creates_broken_links_instead_of_proper_files/comment_1_a2bedb2e77451b02fc66fc9ef5c4405c._comment
deleted file mode 100644
index 146a9b1d6..000000000
--- a/doc/bugs/Syncing_creates_broken_links_instead_of_proper_files/comment_1_a2bedb2e77451b02fc66fc9ef5c4405c._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.211"
- subject="comment 1"
- date="2013-01-03T19:38:07Z"
- content="""
-The broken links represent files whose contents have not yet arrived in the local repository.
-
-If you linked your repos by XMPP, they cannot ssh from one to the other to transfer file contents.
-In this case, you need to set up a transfer repository, that both your repositories can access.
-"""]]
diff --git a/doc/bugs/Syncing_of_file_contents_seems_to_be_broken_in_recent_versions_of_the_assistant.mdwn b/doc/bugs/Syncing_of_file_contents_seems_to_be_broken_in_recent_versions_of_the_assistant.mdwn
index c14ad54f8..590c86205 100644
--- a/doc/bugs/Syncing_of_file_contents_seems_to_be_broken_in_recent_versions_of_the_assistant.mdwn
+++ b/doc/bugs/Syncing_of_file_contents_seems_to_be_broken_in_recent_versions_of_the_assistant.mdwn
@@ -130,3 +130,5 @@ build flags: Assistant Webapp Pairing S3 WebDAV Inotify DBus XMPP Feeds Quvi TDF
key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
"""]]
+
+> [[!taglink moreinfo]] needed. --[[Joey]]
diff --git a/doc/bugs/Test_failure_on_debian_dropunused.mdwn b/doc/bugs/Test_failure_on_debian_dropunused.mdwn
deleted file mode 100644
index 459c5f55b..000000000
--- a/doc/bugs/Test_failure_on_debian_dropunused.mdwn
+++ /dev/null
@@ -1,31 +0,0 @@
-### Please describe the problem.
-./git-annex test fails:
-
- ### Failure in: git-annex unused/dropunused
- dropunused failed
- Cases: 1 Tried: 1 Errors: 0 Failures: 1
-
-### What steps will reproduce the problem?
-./git-annex test
-
-### What version of git-annex are you using? On what operating system?
-4.20130723-206-g1647361
-
-
-debian 7.1 i686
-
-### Please provide any additional information below.
-
-I'm not sure if there is a way to get extra information out of the test harness. I had a quick look at the code and couldn't see anything obvious.
-I've tried a clean and rebuild and it reappears, so if there is more information you need just let me know what.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> Forgot to update the test suite for this behavior change.
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/The_assistant_hangs_forever.mdwn b/doc/bugs/The_assistant_hangs_forever.mdwn
deleted file mode 100644
index be8968ff8..000000000
--- a/doc/bugs/The_assistant_hangs_forever.mdwn
+++ /dev/null
@@ -1,46 +0,0 @@
-What steps will reproduce the problem?
-
-1. Open the assistant with git-annex webapp
-2. Click add another repository
-3. Choose "add another repository"
-4. Use "/home/pierre/testme" (try and get the problem with a new directory or an existing directory)
-5. Press "Make Repository"
-5. Choose "Keep the repository separate"
-
-What is the expected output? What do you see instead?
-
-Go to the created repository but the interface hangs forever
-I have 4 git-annex processes that use no CPUs.
-I can still use the UI by clicking around with success or even shutdown the daemon.
-If I shutdown the daemon, all git-annex process gets killed.
-
-What version of git-annex are you using? On what operating system?
-
-It is said to be git-annex version: 4.20130324 but it is actually 4.20130405 (known bug)
-
-Please provide any additional information below.
-
-
-OS: Arch linux, bin package (not installed from source)
-All tests are OK
-Nothing happens on the log pages
-
-This is so weird that I would like to see the log file but I cannot find it. I have looked at /var/log without success.
-I have tried other available version on Arch linux (AUR git-annex-bin, AUR git-annex-standalone, haskell-web git-annex) and they all exhibit the same problem.
-At that stage, what I would like to be able is to try to figure out what is going on using the log file.
-Thanks
-
-> This could happen when using the amd64 standalone build, because I
-> forgot to install curl into its chroot, so it was not included in the
-> bundle. If the host system also lacked curl, or something prevented
-> curl from working, it would fail like this.
->
-> I've included curl into the amd64 standalone build. I've also made the
-> assistant fall back to using a built-in http client if it is built
-> without curl.
->
-> None of which helps at all with the Arch git-annex-bin hack, since
-> that binary will be built with a working curl (when my amd64 standalone
-> builder builds it), and then installed onto a system, that,
-> apparently, has a broken curl. Which is one of many reasons I cannot
-> support that hack. [[done]] --[[Joey]]
diff --git a/doc/bugs/The_assistant_hangs_forever/comment_1_b0291e32860e0da0b66837d14ed5aab6._comment b/doc/bugs/The_assistant_hangs_forever/comment_1_b0291e32860e0da0b66837d14ed5aab6._comment
deleted file mode 100644
index b22711b65..000000000
--- a/doc/bugs/The_assistant_hangs_forever/comment_1_b0291e32860e0da0b66837d14ed5aab6._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://pradermecker.myopenid.com/"
- ip="81.244.190.181"
- subject="comment 1"
- date="2013-04-14T09:45:35Z"
- content="""
-Forgot to mention that this is my first attempt to work with the assistant on 64 bits (previous binary package were 32 bits only)
-"""]]
diff --git a/doc/bugs/The_assistant_hangs_forever/comment_2_a2950cf91b8a4e4f2951f5522ef0e9c4._comment b/doc/bugs/The_assistant_hangs_forever/comment_2_a2950cf91b8a4e4f2951f5522ef0e9c4._comment
deleted file mode 100644
index 90b93f0bb..000000000
--- a/doc/bugs/The_assistant_hangs_forever/comment_2_a2950cf91b8a4e4f2951f5522ef0e9c4._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="saironiq"
- ip="147.251.209.29"
- subject="comment 2"
- date="2013-04-14T12:09:11Z"
- content="""
-Not sure if this is the real reason, but I get a bunch of
-
->curl: symbol lookup error: /usr/lib/libssl.so.1.0.0: undefined symbol: EVP_idea_cbc
-
-errors in the git-annex log. Running nm on the lib produces the following:
-
->$ nm /usr/lib/libssl.so.1.0.0 | grep EVP_idea_cbc<br>
->&nbsp;&nbsp;&nbsp;&nbsp;U EVP_idea_cbc
-
-...where \"U\" means undefined. I think the reason 64-bit does not work is that there is no curl (and lsof) binaries and libs included.
-
-"""]]
diff --git a/doc/bugs/The_assistant_hangs_forever/comment_3_db95f78519d5ffbad793906028730dab._comment b/doc/bugs/The_assistant_hangs_forever/comment_3_db95f78519d5ffbad793906028730dab._comment
deleted file mode 100644
index e9e76f5b2..000000000
--- a/doc/bugs/The_assistant_hangs_forever/comment_3_db95f78519d5ffbad793906028730dab._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-04-14T17:57:47Z"
- content="""
-The assistant's log file is stored in `.git/annex/daemon.log` within the git repository.
-
-I have to say I don't really understand the bug report. In one sentence you say the \"interface hangs forever\", and then in the next sentence you say you can \"still use the UI by clicking around\". These statements contradict one-another.
-
-(@saironiq, I don't see any connection between what you're saying and pradermecker's bug report. If you have a bug to report, you should file a separate bug report.)
-"""]]
diff --git a/doc/bugs/The_assistant_hangs_forever/comment_4_28b13fd3165b38a2fbc9e1a461c38921._comment b/doc/bugs/The_assistant_hangs_forever/comment_4_28b13fd3165b38a2fbc9e1a461c38921._comment
deleted file mode 100644
index 3bec70a7f..000000000
--- a/doc/bugs/The_assistant_hangs_forever/comment_4_28b13fd3165b38a2fbc9e1a461c38921._comment
+++ /dev/null
@@ -1,22 +0,0 @@
-[[!comment format=mdwn
- username="saironiq"
- ip="147.251.209.29"
- subject="comment 4"
- date="2013-04-15T10:35:36Z"
- content="""
-These symbol lookup errors appear right after i click 'keep the repositories separate', so I think there indeed is a connection. There's nothing else in the log, except this one line repeating over and over again.
-
->[2013-04-15 11:14:30 CEST] main: starting assistant version 4.20130324<br/>
->Already up-to-date.</br>
->
->(scanning...) [2013-04-15 11:14:31 CEST] Watcher: Performing startup scan<br/>
->Already up-to-date.<br/>
->
->(started...) [2013-04-15 12:14:30 CEST] NetWatcherFallback: Syncing with wolf, zyzyx<br/>
->(Recording state in git...)<br/>
->git-annex: Daemon is already running.<br/>
->curl: symbol lookup error: /usr/lib/libssl.so.1.0.0: undefined symbol: EVP_idea_cbc<br/>
->curl: symbol lookup error: /usr/lib/libssl.so.1.0.0: undefined symbol: EVP_idea_cbc<br/>
->curl: symbol lookup error: /usr/lib/libssl.so.1.0.0: undefined symbol: EVP_idea_cbc<br/>
->...
-"""]]
diff --git a/doc/bugs/The_assistant_hangs_forever/comment_5_81a79c8840ff26307a9c6edad5b850f9._comment b/doc/bugs/The_assistant_hangs_forever/comment_5_81a79c8840ff26307a9c6edad5b850f9._comment
deleted file mode 100644
index f8b6a61bc..000000000
--- a/doc/bugs/The_assistant_hangs_forever/comment_5_81a79c8840ff26307a9c6edad5b850f9._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="saironiq"
- ip="147.251.209.29"
- subject="comment 5"
- date="2013-04-15T11:01:32Z"
- content="""
-Here's a full strace output (first symbol lookup error is on line #102681):<br/>
-[[https://dl.dropboxusercontent.com/u/62238161/webapp.log]]
-"""]]
diff --git a/doc/bugs/The_assistant_hangs_forever/comment_6_b739719b14705f4d7e1d412b3cab090c._comment b/doc/bugs/The_assistant_hangs_forever/comment_6_b739719b14705f4d7e1d412b3cab090c._comment
deleted file mode 100644
index 0e05b5090..000000000
--- a/doc/bugs/The_assistant_hangs_forever/comment_6_b739719b14705f4d7e1d412b3cab090c._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="https://pradermecker.myopenid.com/"
- ip="81.244.149.180"
- subject="comment 6"
- date="2013-04-15T19:59:00Z"
- content="""
-I can confirm I also get the error:
-curl: symbol lookup error: /usr/lib/libssl.so.1.0.0: undefined symbol: EVP_idea_cbc
-
-What I mean by the UI is hanging is that after the last action, I can see that the page is never fully re-loaded. So to be more precise the reloading of the page never stops.
-
-When I am bored waiting for the page to reload ;-) I can still use the UI in the situation I describe (left to assume the operation fails :-)
-
-I believe @saironiq is right: the problem is related to the 64 bits version.
-
-
-"""]]
diff --git a/doc/bugs/The_assistant_hangs_forever/comment_7_2b300d960697c5b967c1f109dfd6dfbf._comment b/doc/bugs/The_assistant_hangs_forever/comment_7_2b300d960697c5b967c1f109dfd6dfbf._comment
deleted file mode 100644
index 8203bbb66..000000000
--- a/doc/bugs/The_assistant_hangs_forever/comment_7_2b300d960697c5b967c1f109dfd6dfbf._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="https://pradermecker.myopenid.com/"
- ip="81.244.149.180"
- subject="comment 7"
- date="2013-04-15T20:39:20Z"
- content="""
-@joey just to make the connection clear, both @saironiq and I use the same git-annex package (bin package) from Arch linux AUR (@saironiq is the maintainer of the package)
-
-I suspect all 64bits binary packages on Arch linux to exhibit problems.
-
-The package is fetching the bin archive from your repo: so I actually dare to suspect that all recent 64bits versions have similar problems.
-
-I have describe one problem but they are many, so it does not take long to realize that the apps is not working properly.
-
-I guess it is a packaging problem (something is missing in <http://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz>), not an application bug ?
-"""]]
diff --git a/doc/bugs/The_assistant_hangs_forever/comment_8_8623220d08b1a72ed8b669a2d9cc0f75._comment b/doc/bugs/The_assistant_hangs_forever/comment_8_8623220d08b1a72ed8b669a2d9cc0f75._comment
deleted file mode 100644
index cc275eb2c..000000000
--- a/doc/bugs/The_assistant_hangs_forever/comment_8_8623220d08b1a72ed8b669a2d9cc0f75._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 8"
- date="2013-04-16T18:39:30Z"
- content="""
-Switching repositories uses curl to discover when the other daemon has started. If you installed <https://aur.archlinux.org/packages/git-annex-bin/> , it will use the curl binary provided by your distribution. It looks like yours is broken.
-
-> \"I have describe one problem but they are many, so it does not take long to realize that the apps is not working properly.\"
-
-Yes, that's the real problem, isn't it? <https://aur.archlinux.org/packages/git-annex-bin/>
-takes the binary built for the standalone tarball and dumps it into a filesystem without any of its support libraries, and just hopes it works. It's not at all surpising that it continually fails to work. Which is causing bug report noise that takes away from my time working on actual improvements to git-annex.
-
-I'm sorry, but I cannot support that package. Use <https://aur.archlinux.org/packages.php?ID=44272> or install using cabal or use the standalone tarball.
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible.mdwn b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible.mdwn
deleted file mode 100644
index b98e09b32..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible.mdwn
+++ /dev/null
@@ -1,29 +0,0 @@
-**What steps will reproduce the problem?**
-
-On my work computer I created a new repository and then added a directory on my home server to backup some of my files. The assistant created a new key pair which then made password login quite hard.
-On the commandline I could still login via ssh -o PreferredAuthentications=keyboard-interactive ... but all gui tools (e.g. gigolo) stop after connecting to the restricted shell.
-I don't want to allow full passwordless access to my server from this computer.
-
-**What is the expected output? What do you see instead?**
-
-It should be possible to use this private key with git-annex exclusively. Maybe a line like this in the [remote] block in .git/config would solve the problem:
-
- IdentityFile = /home/user/.ssh/annex/id_rsa_annex
-
-I think it should be the default behaviour that git-annex uses its own key pair with restricted access. For portability the keys could be stored somewhere in the repository itself.
-
-**What version of git-annex are you using? On what operating system?**
-
-git-annex version: 4.20130324, Ubuntu 11.04
-
-**Please provide any additional information below.**
-
-> [[done]]. Although I have not 100% reproduced this, I have seen
-> enough of the source code to gnome-keyring to be pretty sure it's at
-> fault, and that my fix works.
->
-> If this is happening to you, you can fix it by making a `~/.ssh/annex/`
-> directory and moving `~/.ssh/key.annex*` to it. Then you'll need to edit
-> `~/.ssh/config` to use the new path to the key. And you'll need to run
-> `ssh-add -D` to clear out the bogus keys from the ssh agent (or log out
-> and back in). --[[Joey]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_10_8305becdc6e70abdaf17e42f263173fc._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_10_8305becdc6e70abdaf17e42f263173fc._comment
deleted file mode 100644
index 09c4802f7..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_10_8305becdc6e70abdaf17e42f263173fc._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="marvin"
- ip="91.152.75.65"
- subject="comment 10"
- date="2013-04-14T02:34:50Z"
- content="""
-Hopefully I haven't done anything stupid, wouldn't be the first time :)
-Retried with a different setup, same result.
-Pasted into pastebin as I wasn't sure about the formatting..
-
-<http://pastebin.com/vnnmiBeE>
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_11_d75896a6e204d1abdda04923aa668d04._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_11_d75896a6e204d1abdda04923aa668d04._comment
deleted file mode 100644
index 31460ae5b..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_11_d75896a6e204d1abdda04923aa668d04._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 11"
- date="2013-04-14T02:58:05Z"
- content="""
-Thanks for that.. It's not verbose enough for me to see it choose the key to use. Can you add one more `v`? ssh -vvv , 3 v's..
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_12_a36a4a64a04c01c2db467b09300e6ebd._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_12_a36a4a64a04c01c2db467b09300e6ebd._comment
deleted file mode 100644
index 428d5a43c..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_12_a36a4a64a04c01c2db467b09300e6ebd._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="marvin"
- ip="91.152.75.65"
- subject="comment 12"
- date="2013-04-14T09:51:27Z"
- content="""
-hmm.. I did use -vvv, even tried with 4 which doesen't change anything. Is there a ceartain version of ssh or debian live image I could test with? There shouldn't be anything extraordinary about my setup.
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_13_c9d6631c304acb289e485fb901e1f274._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_13_c9d6631c304acb289e485fb901e1f274._comment
deleted file mode 100644
index 083c1e5a2..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_13_c9d6631c304acb289e485fb901e1f274._comment
+++ /dev/null
@@ -1,35 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 13"
- date="2013-04-14T18:27:35Z"
- content="""
-This should not be a hard problem to debug.
-
-* You have a local client, and a remote server.
-* The remote server has a `~/.ssh/authorized_keys` file that contains a public key that git-annex set up, which is restricted to only run \"command=git-annex-shell\".
-* The local client has that key in `~/.ssh/key.git-annex-$hostname-$username`
-* The local client is configured in `~/.ssh/config` to only use that key when sshing to the special hostname \"git-annex-$hostname-$username\"
-* The problem is either on the client, or on the server.
-* If the problem is on the client, then it must be, somehow, incorrectly sending the git-annex key to the server when you \"ssh $hostname\". You can see what keys it decides to send by looking at the messages it prints with -vvv :
-
-<pre>
-joey@gnu:~>ssh -vvv git-annex-kitenet.net-joey
-OpenSSH_6.0p1 Debian-4, OpenSSL 1.0.1e 11 Feb 2013
-debug1: Reading configuration data /home/joey/.ssh/config
-debug1: /home/joey/.ssh/config line 3: Applying options for git-annex-kitenet.net-joey
-debug1: Reading configuration data /etc/ssh/ssh_config
-debug1: /etc/ssh/ssh_config line 19: Applying options for *
-debug2: ssh_connect: needpriv 0
-debug1: Connecting to kitenet.net [80.68.85.49] port 22.
-debug1: Connection established.
-debug3: Incorrect RSA1 identifier
-debug3: Could not load \"/home/joey/.ssh/key.git-annex-kitenet.net-joey\" as a RSA1 public key
-debug1: identity file /home/joey/.ssh/key.git-annex-kitenet.net-joey type 1
-</pre>
-
-* If the problem is on the server, then it must be for some reason deciding to run `git-annex-shell` when you ssh in,
- despite the client not sending it the special git-annex key. If this were the case, no change you made on the client could fix
- the problem, but deleting `.ssh/authorized_keys` on the server probably would.
-
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_14_10282c4352075c8d148b8674973b7b16._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_14_10282c4352075c8d148b8674973b7b16._comment
deleted file mode 100644
index 0b1da9029..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_14_10282c4352075c8d148b8674973b7b16._comment
+++ /dev/null
@@ -1,22 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="ssh agent?"
- date="2013-04-14T18:34:45Z"
- content="""
-The only other thing I can think of is that if you have a ssh-agent, it might somehow be caching the git-annex key and incorrectly sending it to ssh. If this were the case, then unsetting `SSH_AUTH_SOCK` or stopping the agent would presumably make the problem go away.
-
-In @marvin's log, I see:
-
-<pre>
-debug1: Offering RSA public key: marvin@marvin-U-100
-</pre>
-
-This is different from what I see when ssh is using a regular key in `.ssh/`:
-
-<pre>
-debug1: Offering RSA public key: /home/joey/.ssh/id_rsa
-</pre>
-
-Marvin's log does not show where it gets this \"marvin@marvin-U-100\".. which makes me suspect it comes from a ssh agent.
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_15_ceb68da01d9e2fe9a70fab6244116da0._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_15_ceb68da01d9e2fe9a70fab6244116da0._comment
deleted file mode 100644
index bbf5a45b5..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_15_ceb68da01d9e2fe9a70fab6244116da0._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 15"
- date="2013-04-14T18:46:54Z"
- content="""
-I tried the following experiment:
-
-1. Manually ran `ssh-add .ssh/key.git-annex-kitenet.net-joey`
-2. `ssh -vvv kitenet.net` did run git-annex-shell
-
-Guys, please paste the output of `ssh-add -l`
-
-Also, if you run `ssh-add -D`, the problem should go away, and the server should not run git-annex-shell. If that's the case, we've confirmed this is somehow a ssh agent problem. However, I still don't know what could be scanning `~/.ssh` for random keys and loading them into the agent.
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_16_cca4abde86a8be5e2919c4738f5bdd0c._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_16_cca4abde86a8be5e2919c4738f5bdd0c._comment
deleted file mode 100644
index 2260917b3..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_16_cca4abde86a8be5e2919c4738f5bdd0c._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 16"
- date="2013-04-14T19:04:11Z"
- content="""
-Are you guys running Gnome? Using gnome-keyring?
-
-I found the following highly suspicious code inside gnome-keyring:
-
-[[!format C \"\"\"
- if (!self->directory)
- self->directory = g_strdup (\"~/.ssh\");
- self->tracker = gkm_file_tracker_new (self->directory, \"*.pub\", NULL);
-\"\"\"]]
-
-This seems to load *all* keys, as described. Not keys in subdirectories of ~/.ssh/ either.
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_17_2fa5d7d9110c91b0a3a833cb3d9f53fd._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_17_2fa5d7d9110c91b0a3a833cb3d9f53fd._comment
deleted file mode 100644
index 2b760bb55..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_17_2fa5d7d9110c91b0a3a833cb3d9f53fd._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="marvin"
- ip="91.152.75.65"
- subject="comment 17"
- date="2013-04-14T20:07:33Z"
- content="""
-YES! Straight from the tty console it works correctly. Seems this project unearths lots of bugs all over the place.
-
-Thank you!
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_18_bf21d28142e4c304aa0bc740955ddea0._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_18_bf21d28142e4c304aa0bc740955ddea0._comment
deleted file mode 100644
index 67021d180..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_18_bf21d28142e4c304aa0bc740955ddea0._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 18"
- date="2013-04-14T20:13:54Z"
- content="""
-@Marvin, just to be clear, it was `ssh-add -D` that fixed it for you?
-
-To make the fix stick, you need to make a ~/.ssh/annex/ directory, and move the keys to there, and then edit ~/.ssh/config to use the new path to the key file. This should prevent gnome-keyring from seeing them.
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_19_45537758fa937f16fc82120bf8b234e8._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_19_45537758fa937f16fc82120bf8b234e8._comment
deleted file mode 100644
index 3d0d4a45e..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_19_45537758fa937f16fc82120bf8b234e8._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="marvin"
- ip="91.152.75.65"
- subject="comment 19"
- date="2013-04-14T20:47:37Z"
- content="""
-nope, ssh-add -D doesn't seem to help. Killing gnome-keyring-daemon does.
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_1_a38497772834a4b12137390b461ce70b._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_1_a38497772834a4b12137390b461ce70b._comment
deleted file mode 100644
index fb7bd7420..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_1_a38497772834a4b12137390b461ce70b._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-04-09T17:29:00Z"
- content="""
-The key pair that the assistant sets up is limited, in ~/.ssh/config to only be used when a mangled version of the hostname is used. That is, you have to \"ssh git-annex-hostname\" to use that key. So it should not be possible for this to impact your normal use of ssh to that host.
-
-(`.git/config` does not support an `IdentityFile` option TTBOMK.)
-
-You need to provide more details about the problem you have encountered.
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_20_b685050ee6fbb1a685e33f9656a10e84._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_20_b685050ee6fbb1a685e33f9656a10e84._comment
deleted file mode 100644
index 83ab46051..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_20_b685050ee6fbb1a685e33f9656a10e84._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 20"
- date="2013-04-14T20:59:26Z"
- content="""
-Ok, I don't know how gnome-keyring communicates with ssh, but that's good enough evidence for me: It was certainly gnome-keyring that got us into this mess!
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_3_17bc0220c20553c848875475c5fd4ae6._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_3_17bc0220c20553c848875475c5fd4ae6._comment
deleted file mode 100644
index f8e07dd4a..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_3_17bc0220c20553c848875475c5fd4ae6._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-04-11T16:26:26Z"
- content="""
-When git-annex uses an existing key (which is done automatically if it detects you have already set up passwordless login to the server using the default key), it does not configure the server to further restrict use of that key.
-
-I have just verified this to be sure. That would be a bad bug. Doesn't happen.
-
-So, I still don't understand what this bug report is about.
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_4_76472bc58bb790f773c46ec2c39fcf88._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_4_76472bc58bb790f773c46ec2c39fcf88._comment
deleted file mode 100644
index 54bfc750b..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_4_76472bc58bb790f773c46ec2c39fcf88._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl99Gxq3NPNvwZHp3PDufaknQH4rZb_KKY"
- nickname="Florian"
- subject="comment 4"
- date="2013-04-12T15:01:16Z"
- content="""
-I think I found a part of the problem. I still don't know why there was this strange key setup in the beginning. Maybe i did this manually and forgot about it instantly...
-
-However, today I again had the problem with ending up in git-annex-shell on the commandline. To debug this I called ssh -vvv ... and found out that ssh somehow found the private key in ~/.ssh/key.git-annex-servername-username and ofcourse tried to use it.
-Moving the key to a subdirectory in ~/.ssh/ and fixing the path in ~/.ssh/config solved my problem again.
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_4_dcd9286e314779c25764484beff40561._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_4_dcd9286e314779c25764484beff40561._comment
deleted file mode 100644
index 44df43339..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_4_dcd9286e314779c25764484beff40561._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl99Gxq3NPNvwZHp3PDufaknQH4rZb_KKY"
- nickname="Florian"
- subject="comment 4"
- date="2013-04-10T12:39:49Z"
- content="""
-OK, problem solved. I deleted the key on the server and then readded the repository. Now I have a separate git-annex key pair and the config is as you described. I don't know why an existing key pair was used in the setup before. I log into my home server frequently and don't remember that I added the public key manually (especially regarding the restriction to git-annex-shell that was applied).
-
-However, thanks for the great work so far!
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_5_2146eec77b87b615100d0d003e8dce75._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_5_2146eec77b87b615100d0d003e8dce75._comment
deleted file mode 100644
index 8889c3adb..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_5_2146eec77b87b615100d0d003e8dce75._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="marvin"
- ip="91.152.75.65"
- subject="Seeing the same thing"
- date="2013-04-13T22:36:00Z"
- content="""
-So what I did on a clean ubuntu install was
-
-1. start git-annex-webapp Version: ( 4.20130413-g5747bf4 )
-2. set up local repository and remote ssh repository
-3. sync some files
-4. trying to ssh from the console to the remote now fails with error message \"git-annex-shell: bad parameters\"
-
-I do believe it has always done this (also on wheezy). Is this supposed to work this way? Hope to get a webdav / owncloud / some own hosted system not relying on ssh. Just want to sync files to a headless server. I'll gladly help if I can.
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_6_2bd6f4e04903ee251d43d0a97bd40b6e._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_6_2bd6f4e04903ee251d43d0a97bd40b6e._comment
deleted file mode 100644
index 901798fe8..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_6_2bd6f4e04903ee251d43d0a97bd40b6e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 6"
- date="2013-04-13T22:40:02Z"
- content="""
-No, it is not supposed to do that. Can you take a look at the `.ssh/authorized_keys` file on the remote and see what key it has configured to run git-annex-shell? This should not be your main ssh key..
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_7_7db8ed002eb6313b07f09bd1a34019e3._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_7_7db8ed002eb6313b07f09bd1a34019e3._comment
deleted file mode 100644
index cf1e30824..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_7_7db8ed002eb6313b07f09bd1a34019e3._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 7"
- date="2013-04-13T22:48:55Z"
- content="""
-@Florian, it seems very unlikely that ssh would go off and pick a **utterly random file** to use as the key. ssh generally tries to be consistent, and secure, and that would be neither.
-
-Can you paste the `ssh -vv` output when it does it?
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_8_1bcb2a238006044bc78849e56cb21a01._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_8_1bcb2a238006044bc78849e56cb21a01._comment
deleted file mode 100644
index 9cc054b39..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_8_1bcb2a238006044bc78849e56cb21a01._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="marvin"
- ip="91.152.75.65"
- subject="comment 8"
- date="2013-04-14T00:37:21Z"
- content="""
-The key in authorized file is the same as git-annex pub key ( key.git-annex-192.168.1.43-marvin.pub )
-Which is also the only ssh key in the authorized file. Is it assumed keys are always used instead of only passwords?
-"""]]
diff --git a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_9_26c6937cf78e7141e0e3b20f25ed8f7a._comment b/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_9_26c6937cf78e7141e0e3b20f25ed8f7a._comment
deleted file mode 100644
index 7f36e3c43..000000000
--- a/doc/bugs/The_restricted_ssh_key_pair_makes_password_login___40__nearly__41___impossible/comment_9_26c6937cf78e7141e0e3b20f25ed8f7a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 9"
- date="2013-04-14T00:46:32Z"
- content="""
-Can you please paste the output of `ssh -vvv host
-"""]]
diff --git a/doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories.mdwn b/doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories.mdwn
deleted file mode 100644
index 88e39efe9..000000000
--- a/doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories.mdwn
+++ /dev/null
@@ -1,33 +0,0 @@
-What steps will reproduce the problem?
-
-After creating new remote repositories in the webapp there's no option to delete them
-
-What is the expected output? What do you see instead?
-
-Some option to delete a repository, just like I can disable sync or change the config of a remote
-
-What version of git-annex are you using? On what operating system?
-
- $ ./git-annex version
- git-annex version: 3.20130102
-
- $ uname -a
- Linux wintermute 3.2.0-35-generic #55-Ubuntu SMP Wed Dec 5 17:45:18 UTC 2012 i686 i686 i386 GNU/Linux
-
- $ lsb_release -a
- Distributor ID: Ubuntu
- Description: Ubuntu 12.04.1 LTS
- Release: 12.04
- Codename: precise
-
-[[!tag /design/assistant]]
-
-> Status: You can delete the current repository. You can also remove
-> repositories from the list of remotes (without deleting their content)
-> and you can tell it you want to stop using a remote, and it will
-> suck all content off that remote until it's empty.
->
-> Still todo: Detect when a remote has been sucked dry, and actually delete
-> it. --[[Joey]]
-
->> [[done]] --[[Joey]]
diff --git a/doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories/comment_1_1b80f9cfedd25e34997fa07e08d15012._comment b/doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories/comment_1_1b80f9cfedd25e34997fa07e08d15012._comment
deleted file mode 100644
index 5087b5f4e..000000000
--- a/doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories/comment_1_1b80f9cfedd25e34997fa07e08d15012._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.211"
- subject="comment 1"
- date="2013-01-03T19:48:46Z"
- content="""
-Something I would like to support, although complicated by what \"delete\" means. At its simplest it can mean removing the git remote configuration, but leaving the remote's data as-is, so it can be added back, or other repositories can continue to access it. More complicated, it could mean completely deleting the repository, and its data -- which would probably first need to move any data that was solely in that repository off to elsewhere.
-"""]]
diff --git a/doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories/comment_2_53499da1185c56d8fd25f86ba41d96ce._comment b/doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories/comment_2_53499da1185c56d8fd25f86ba41d96ce._comment
deleted file mode 100644
index e84094738..000000000
--- a/doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories/comment_2_53499da1185c56d8fd25f86ba41d96ce._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="173.162.44.162"
- subject="it also doesn't recognize when a local repository has been deleted manually"
- date="2013-01-09T16:13:41Z"
- content="""
-I created a new local repository to play with the new Direct Mode features. I ended up deleting it (deleting the directory), but when I launched the assistant, I was still given the option of \"switching repository\" to the now-deleted one. It threw the error Internal Server Error (user error (git [\"config\",\"--null\",\"--list\"] exited 126)).
-
-> Fixed this. --[[Joey]]
-
-"""]]
diff --git a/doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories/comment_3_3e07b8386d2c7afce2a78d24b9c260b9._comment b/doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories/comment_3_3e07b8386d2c7afce2a78d24b9c260b9._comment
deleted file mode 100644
index 76342ec63..000000000
--- a/doc/bugs/The_webapp_doesn__39__t_allow_deleting_repositories/comment_3_3e07b8386d2c7afce2a78d24b9c260b9._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://piotr.ozarowski.pl/"
- nickname="p1otr"
- subject="Re: comment 1"
- date="2013-01-15T09:26:21Z"
- content="""
-How about asking the user? Something like:
-
-Do you want to...
-
-* only remove configuration from annex
-* make sure there's a copy of all files from this repository somewhere and remove it (including remote files)
-* remove remote files (and remove them from annex if there's no other copy)
-"""]]
diff --git a/doc/bugs/Too_many_open_files.mdwn b/doc/bugs/Too_many_open_files.mdwn
deleted file mode 100644
index 53c9bb690..000000000
--- a/doc/bugs/Too_many_open_files.mdwn
+++ /dev/null
@@ -1,59 +0,0 @@
-### Please describe the problem.
-
-The transferrer crashes after a while due to too many open files
-
-### What steps will reproduce the problem?
-
-Have a huge annex. Connect two local machines, one with the huge annex, the other one without. Let them copy files…
-
-### What version of git-annex are you using? On what operating system?
-
-latest version
-git-annex version: 5.20131117-gbd514dc
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
-remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
-
-on Mac OS X 10.9
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-[2013-11-22 10:49:19 CET] Transferrer: Downloaded oktaeder.png
-[2013-11-22 10:49:19 CET] Transferrer: Downloaded oktaeder.png
-[2013-11-22 10:49:19 CET] Transferrer: Downloaded oktaeder.png
-[2013-11-22 10:49:20 CET] Transferrer: Downloaded klett-cover-neu.jpg
-[2013-11-22 10:49:20 CET] Transferrer: Downloaded klett-cover-neu.jpg
-[2013-11-22 10:49:20 CET] Transferrer: Downloaded kara-worl..ditor.gif
-git-annex: runInteractiveProcess: pipe: Too many open files
-Committer crashed: lsof: createProcess: resource exhausted (Too many open files)
-[2013-11-22 10:49:20 CET] Committer: warning Committer crashed: lsof: createProcess: resource exhausted (Too many open files)
-[2013-11-22 10:49:20 CET] Transferrer: Downloaded kara-worl..ditor.gif
-[2013-11-22 10:49:20 CET] Transferrer: Downloaded kara-worl..ditor.gif
-[2013-11-22 10:49:20 CET] Transferrer: Downloaded image1.png
-[2013-11-22 10:49:21 CET] Transferrer: Downloaded image1.png
-[2013-11-22 10:49:21 CET] Transferrer: Downloaded image.png
-[2013-11-22 10:49:21 CET] Transferrer: Downloaded image.png
-[2013-11-22 10:49:21 CET] Transferrer: Downloaded ikoseder.png
-[2013-11-22 10:49:21 CET] Transferrer: Downloaded ikoseder.png
-[2013-11-22 10:49:22 CET] Transferrer: Downloaded ikoseder.png
-[2013-11-22 10:49:22 CET] Transferrer: Downloaded ikosaeder.jpg
-git-annex: runInteractiveProcess: pipe: Too many open files
-ok
-(Recording state in git...)
-git-annex: socket: resource exhausted (Too many open files)
-[2013-11-22 10:49:22 CET] Transferrer: Downloaded ikosaeder.jpg
-Transferrer crashed: getCurrentDirectory: resource exhausted (Too many open files)
-[2013-11-22 10:49:22 CET] Transferrer: warning Transferrer crashed: getCurrentDirectory: resource exhausted (Too many open files)
-git-annex: runInteractiveProcess: pipe: Too many open files
-git-annex: runInteractiveProcess: pipe: Too many open files
-
-# End of transcript or log.
-"""]]
-
-> This appears to be the same problem as [[Resource_exhausted]],
-> so closing as duplicate; please follow up to the other bug report if
-> possible. [[done]] --[[Joey]]
diff --git a/doc/bugs/Too_many_open_files/comment_1_d5d509b9b431d2ea6000ebc0aed62857._comment b/doc/bugs/Too_many_open_files/comment_1_d5d509b9b431d2ea6000ebc0aed62857._comment
deleted file mode 100644
index 477192692..000000000
--- a/doc/bugs/Too_many_open_files/comment_1_d5d509b9b431d2ea6000ebc0aed62857._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.64"
- subject="comment 1"
- date="2013-11-26T16:28:25Z"
- content="""
-You can use `lsof -c git-annex` to find out what files git-annex has open. (lsof is included in the git-annex.app bundle on OSX) That would be very helpful in tracking this down.
-"""]]
diff --git a/doc/bugs/Too_much_system_load_on_startup.mdwn b/doc/bugs/Too_much_system_load_on_startup.mdwn
deleted file mode 100644
index fc514ca73..000000000
--- a/doc/bugs/Too_much_system_load_on_startup.mdwn
+++ /dev/null
@@ -1,24 +0,0 @@
-### Please describe the problem.
-When I log in, if git annex is monitoring a large repo, my desktop is very sluggish getting started. Git-annex causes moderate CPU load, but keeps the disk IO very busy -delaying the opening of desktop applications.
-
-### What steps will reproduce the problem?
-On Linux, with git-annex set to autostart and monitoring a folder with more than a few hundred files (I have a pdf library of a few thousand journal articles).
-
-### What version of git-annex are you using? On what operating system?
-4.20131002 Ubuntu, from Hess's PPA.
-
-### Please provide any additional information below.
-
-I solved this problem by changing the call to git-annex in /etc/xdg/autostart/git-annex.desktop from:
-
-Exec=/usr/bin/git-annex assistant --autostart
-
-to
-
-Exec=sleep 5 ionice -c 3 /usr/bin/git-annex assistant --autostart
-
-This delays the start of git-annex for 5 seconds, letting the desktop get started, and forces git-annex to yield IO to other programs -preventing it from slowing them down by forcing them to wait for disk access. Since this is a background daemon with potentially high IO usage, but no need for quick responsiveness, perhaps that would make a decent default?
-
-> Added 5 second delay to existing ionice. Provisionally [[done]],
-> although it does occur to me that the startup scan could add some delays
-> in between actions to run more as a batch job. --[[Joey]]
diff --git a/doc/bugs/Too_much_system_load_on_startup/comment_1_4470cddc0965062588acff1bc77285e9._comment b/doc/bugs/Too_much_system_load_on_startup/comment_1_4470cddc0965062588acff1bc77285e9._comment
deleted file mode 100644
index 31e735985..000000000
--- a/doc/bugs/Too_much_system_load_on_startup/comment_1_4470cddc0965062588acff1bc77285e9._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.47"
- subject="comment 1"
- date="2013-10-26T16:44:59Z"
- content="""
-git-annex version 4.20131002 *already* ionices itself on startup, assuming it detects a system it can do that on. So the only relevant change you made is delaying it from starting. I have made the assistant wait 5 seconds before running the startup scan when autostarted.
-"""]]
diff --git a/doc/bugs/TransferScanner_crash_on_Android.mdwn b/doc/bugs/TransferScanner_crash_on_Android.mdwn
deleted file mode 100644
index 56d869537..000000000
--- a/doc/bugs/TransferScanner_crash_on_Android.mdwn
+++ /dev/null
@@ -1,28 +0,0 @@
-### Please describe the problem.
-
-TransferScanner crashes trying to add a file.
-
-### What steps will reproduce the problem?
-
-Start the web app.
-
-### What version of git-annex are you using? On what operating system?
-
-4.20130709-g339d1e0 on Android.
-
-### Please provide any additional information below.
-
-There was a whole stack of nulls in some of those log lines as well. I've
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-TransferScanner crashed: unknown response from git cat-file ("refs/heads/git-annex:289/20f/SHA256E-s85883241--3bf01cfd6a422f9b661ed335e6142bbdaf899cd71587bb3cc812256064c7071e missing",refs/heads/git-annex:289/20f/SHA256E-s85883241--3bf01cfd6a422f9b661ed335e6142bbdaf899cd71587bb3cc812256064c7071e\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00(7981 more elided)\00.log)
-[2013-07-16 15:19:26 NZST] TransferScanner: warning TransferScanner crashed: unknown response from git cat-file ("refs/heads/git-annex:289/20f/SHA256E-s85883241--3bf01cfd6a422f9b661ed335e6142bbdaf899cd71587bb3cc812256064c7071e missing",refs/heads/git-annex:289/20f/SHA256E-s85883241--3bf01cfd6a422f9b661ed335e6142bbdaf899cd71587bb3cc812256064c7071e\00\00\00\00\00(7991 more elided)\00.log)
-# End of transcript or log.
-"""]]
-
-> Lacking other information about this problem, and with the assistant
-> able to detect problems and run `git annex repair` to fix up corrupt git
-> repos, I suppose this is [[done]] --[[Joey]]
diff --git a/doc/bugs/TransferScanner_crash_on_Android/comment_1_6c3584ade1ee6cccddddeaa8e1697945._comment b/doc/bugs/TransferScanner_crash_on_Android/comment_1_6c3584ade1ee6cccddddeaa8e1697945._comment
deleted file mode 100644
index c7622955b..000000000
--- a/doc/bugs/TransferScanner_crash_on_Android/comment_1_6c3584ade1ee6cccddddeaa8e1697945._comment
+++ /dev/null
@@ -1,20 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.90"
- subject="comment 1"
- date="2013-07-16T18:16:52Z"
- content="""
-Wow, that's a lot of NULs!
-
-Can you drop to a shell and run `git fsck` in the repository?
-
-I'm guessing that `git annex fsck` is going to fail with some of the same type errors, but you could also try it.
-
-It seems pretty clear there's damage somewhere. Like something (perhaps a compact flash glitch?) inserted a ton of NULs into the git repository, or corrupted a filename's length field or something.
-
----
-
-Probably the best thing to do, to get back to a working repository is to move the current repo out of the way, re-setup the assistant on your Android from one of your other repositories (assuming you have another one). Or if this is your only clone of this git repository, you may be able to run `git annex uninit` in it.
-
-Then if necessary the contents of files can be rescued from `.git/annex/objects/` in the corrupt repository, by running `git annex import` in the new repository and passing it that directory. And finish up with a `git annex fsck`.
-"""]]
diff --git a/doc/bugs/TransferScanner_crash_on_Android/comment_2_06574e05149a677d666a722061586658._comment b/doc/bugs/TransferScanner_crash_on_Android/comment_2_06574e05149a677d666a722061586658._comment
deleted file mode 100644
index 12105342c..000000000
--- a/doc/bugs/TransferScanner_crash_on_Android/comment_2_06574e05149a677d666a722061586658._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkF8_uQjLYm5Mf5F_JuVW-BxlvzpWjvR_o"
- nickname="Andrew"
- subject="git annex fsck"
- date="2013-07-16T22:22:25Z"
- content="""
-Running git annex fsck appears to have resolved the corruption, but it removed all the content and the assistant hasn't refetched them.
-
-I'm running git annex get . now to refetch all the content.
-"""]]
diff --git a/doc/bugs/TransferScanner_crash_on_Android/comment_3_54ae097d30bb7a49fe151f38c9bac033._comment b/doc/bugs/TransferScanner_crash_on_Android/comment_3_54ae097d30bb7a49fe151f38c9bac033._comment
deleted file mode 100644
index bb31e7f86..000000000
--- a/doc/bugs/TransferScanner_crash_on_Android/comment_3_54ae097d30bb7a49fe151f38c9bac033._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.90"
- subject="comment 3"
- date="2013-07-17T19:12:49Z"
- content="""
-I don't see how git annex fsck could resolve the corruption, which appeared to be of data from the git repository, not the git-annex content store. Did you try `git fsck`?
-"""]]
diff --git a/doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file.mdwn b/doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file.mdwn
new file mode 100644
index 000000000..40cd3ebb9
--- /dev/null
+++ b/doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file.mdwn
@@ -0,0 +1,50 @@
+### Please describe the problem.
+git-annex assistant reports a warning:
+TransferScanner crashed: fd:59: hGetLine: end of file
+
+### What steps will reproduce the problem?
+I don't know. Just run git-annex assistant and wait for this to happen.
+
+### What version of git-annex are you using? On what operating system?
+Version: 5.20140709
+Build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS Feeds Quvi TDFA CryptoHash
+
+Gentoo
+
+### Please provide any additional information below.
+
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+error: object file /home/crabman/annex/.git/objects/97/3b57761ebe88b11e1d0d2c70c8d3b48530202f is empty
+fatal: loose object 973b57761ebe88b11e1d0d2c70c8d3b48530202f (stored in /home/crabman/annex/.git/objects/97/3b57761ebe88b11e1d0d2c70c8d3b48530202f) is corrupt
+error: object file /home/crabman/annex/.git/objects/97/3b57761ebe88b11e1d0d2c70c8d3b48530202f is empty
+fatal: loose object 973b57761ebe88b11e1d0d2c70c8d3b48530202f (stored in /home/crabman/annex/.git/objects/97/3b57761ebe88b11e1d0d2c70c8d3b48530202f) is corrupt
+error: object file /home/crabman/annex/.git/objects/97/3b57761ebe88b11e1d0d2c70c8d3b48530202f is empty
+fatal: loose object 973b57761ebe88b11e1d0d2c70c8d3b48530202f (stored in /home/crabman/annex/.git/objects/97/3b57761ebe88b11e1d0d2c70c8d3b48530202f) is corrupt
+error: object file /home/crabman/annex/.git/objects/97/3b57761ebe88b11e1d0d2c70c8d3b48530202f is empty
+fatal: loose object 973b57761ebe88b11e1d0d2c70c8d3b48530202f (stored in /home/crabman/annex/.git/objects/97/3b57761ebe88b11e1d0d2c70c8d3b48530202f) is corrupt
+fd:31: hGetLine: end of file
+fd:32: hGetLine: end of file
+fd:33: hGetLine: end of file
+fd:34: hGetLine: end of file
+fd:38: hGetLine: end of file
+fd:41: hGetLine: end of file
+fd:41: hGetLine: end of file
+fd:41: hGetLine: end of file
+fd:41: hGetLine: end of file
+fd:41: hGetLine: end of file
+fd:41: hGetLine: end of file
+fd:43: hGetLine: end of file
+fd:41: hGetLine: end of file
+fd:41: hGetLine: end of file
+fd:41: hGetLine: end of file
+fd:41: hGetLine: end of file
+fd:41: hGetLine: end of file
+fd:41: hGetLine: end of file
+fd:43: hGetLine: end of file
+
+
+# End of transcript or log.
+"""]]
diff --git a/doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file/comment_1_a1392b92efdff82783a4b0cc2c3c7f2f._comment b/doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file/comment_1_a1392b92efdff82783a4b0cc2c3c7f2f._comment
new file mode 100644
index 000000000..101b23404
--- /dev/null
+++ b/doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file/comment_1_a1392b92efdff82783a4b0cc2c3c7f2f._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-14T18:47:21Z"
+ content="""
+You did not seem to paste the whole log, but it's clear that your git repository is corrupt. You might try running `git annex repair` inside it.
+
+This was probably caused by a disk corruption or if you're lucky just a hard shutdown that caused files to get truncated.
+
+The assistant tries to detect corrupt repositories on startup, but it's hard to detect when a repository has a few corrupt objects like this. This is why the webapp suggests you set up periodic repository consistency checks, which should eventually repair this kind of problem.
+
+Perhaps it would make sense for the webapp, when a thread crashes, to provide a button to run an consistency check immediately.
+"""]]
diff --git a/doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file/comment_2_5e153b7c59c474988fe551a505e545bc._comment b/doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file/comment_2_5e153b7c59c474988fe551a505e545bc._comment
new file mode 100644
index 000000000..c8d4a988a
--- /dev/null
+++ b/doc/bugs/TransferScanner_crashed:_fd:59:_hGetLine:_end_of_file/comment_2_5e153b7c59c474988fe551a505e545bc._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="jg123h12jh3y12g3y"
+ ip="86.62.100.131"
+ subject="comment 2"
+ date="2014-07-15T07:58:15Z"
+ content="""
+But I do have periodice consistency checks turned on. I think git-annex assistant should tell the user what the heck is going on and maybe try to repair it automatically.
+"""]]
diff --git a/doc/bugs/Trouble_initializing_git_annex_on_NFS.mdwn b/doc/bugs/Trouble_initializing_git_annex_on_NFS.mdwn
deleted file mode 100644
index 8eb20baf9..000000000
--- a/doc/bugs/Trouble_initializing_git_annex_on_NFS.mdwn
+++ /dev/null
@@ -1,16 +0,0 @@
-The following occurs in a directory that is shared on an NFS server:
-
- /media/mybook/movies $ git init
- Initialized empty Git repository in /media/mybook/movies/.git/
- /media/mybook/movies $ git annex init mybook-movies
- init mybook-movies
- git-annex: waitToSetLock: resource exhausted (No locks available)
- failed
- git-annex: init: 1 failed
- /media/mybook/movies $
-
-This happens reliably. Is there any way around it? I have shell
-access on the NFS server, but it is a NAS, so I don't think it is
-capable of running git-annex.
-
-[[done]]
diff --git a/doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_1_e26952373150d63b8a5d3643a2762de1._comment b/doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_1_e26952373150d63b8a5d3643a2762de1._comment
deleted file mode 100644
index 8e951ab7c..000000000
--- a/doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_1_e26952373150d63b8a5d3643a2762de1._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 1"
- date="2011-11-15T04:40:35Z"
- content="""
-git-annex uses locking to avoid problems if multiple processes are run at the same time.
-
-I just tested on NFS, with Linux on the server and client, and it works ok. It seems your NFS client (or server) must not support fncl locking. What OS is your NAS running?
-"""]]
diff --git a/doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_2_f80b10ed395738e50e345fc22c708ae5._comment b/doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_2_f80b10ed395738e50e345fc22c708ae5._comment
deleted file mode 100644
index bd302e6be..000000000
--- a/doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_2_f80b10ed395738e50e345fc22c708ae5._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 2"
- date="2011-11-15T04:46:13Z"
- content="""
-You might try mounting your NAS with the mount option `local_lock=all`
-
-This will keep the lock files on your (I assume linux) client. If you do this make sure you don't have another client using git-annex in the same NFS directory.
-"""]]
diff --git a/doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_3_f99e0f05950fc2fc80fdecd35e17012c._comment b/doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_3_f99e0f05950fc2fc80fdecd35e17012c._comment
deleted file mode 100644
index b95c795ea..000000000
--- a/doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_3_f99e0f05950fc2fc80fdecd35e17012c._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://cgray.myopenid.com/"
- nickname="cgray"
- subject="comment 3"
- date="2011-11-15T05:14:03Z"
- content="""
-I did a bit of research and my NAS had ancient NFS software on it. I upgraded that and things are now working as expected. Sorry for the noise.
-"""]]
diff --git a/doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_4_e42146d2dcc4052266dd61d204aeb551._comment b/doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_4_e42146d2dcc4052266dd61d204aeb551._comment
deleted file mode 100644
index 59919789e..000000000
--- a/doc/bugs/Trouble_initializing_git_annex_on_NFS/comment_4_e42146d2dcc4052266dd61d204aeb551._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmnG4EuvZWse5hvgrl0XAK-U61e-0iGaao"
- nickname="David"
- subject="nolock option worked"
- date="2012-10-01T20:31:18Z"
- content="""
-I had the same problem on my NAS, updated the firmware but it didn't solve it. The remedy was to mount the NAS with the 'nolock' option.
-"""]]
diff --git a/doc/bugs/True_backup_support.mdwn b/doc/bugs/True_backup_support.mdwn
deleted file mode 100644
index 72fd9fb1f..000000000
--- a/doc/bugs/True_backup_support.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-I'd like to be able to restore my data from S3/Glacier following a catastrophic loss of information.
-
-As I understand it, git-annex doesn't solve this problem for me because it only stores file *contents* in S3/Glacier. A restore-from-nothing requires both the file contents and also the file names and metadata, which git-annex doesn't store in S3.
-
-I'm still feeling my way around git-annex, but I think it will probably be sufficient for my purposes to set up a cron job to push my annex to github. But I think it would be helpful if git-annex could take care of this automatically.
-
-> Based on the comments, this is [[done]] --[[Joey]]
diff --git a/doc/bugs/True_backup_support/comment_1_50aa0bc1e2502622585682cb703e0b85._comment b/doc/bugs/True_backup_support/comment_1_50aa0bc1e2502622585682cb703e0b85._comment
deleted file mode 100644
index 33ad32eaa..000000000
--- a/doc/bugs/True_backup_support/comment_1_50aa0bc1e2502622585682cb703e0b85._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnSenxKyE_2Z6Wb-EBMO8FciyRywjx1ZiQ"
- nickname="Walter"
- subject="I think this already works"
- date="2013-05-01T03:09:13Z"
- content="""
-I think this should already work in the latest git version, I have been using this feature for the last week or so.
-
-This change was described in [[/design/assistant/blog/day_245__misc/]], and I asked for it [[here|/forum/Automatically_syncronise_centralised_repository/]].
-"""]]
diff --git a/doc/bugs/True_backup_support/comment_2_d6030c6c49b227e022f05d590746d4ca._comment b/doc/bugs/True_backup_support/comment_2_d6030c6c49b227e022f05d590746d4ca._comment
deleted file mode 100644
index f8059d5a7..000000000
--- a/doc/bugs/True_backup_support/comment_2_d6030c6c49b227e022f05d590746d4ca._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmUJBh1lYmvfCCiGr3yrdx-QhuLCSRnU5c"
- nickname="Justin"
- subject="comment 2"
- date="2013-05-01T03:12:23Z"
- content="""
-Indeed, this looks like what I'm after. Thanks!
-"""]]
diff --git a/doc/bugs/Truncated_file_transferred_via_S3.mdwn b/doc/bugs/Truncated_file_transferred_via_S3.mdwn
index 9261c8a05..b489f60d9 100644
--- a/doc/bugs/Truncated_file_transferred_via_S3.mdwn
+++ b/doc/bugs/Truncated_file_transferred_via_S3.mdwn
@@ -612,3 +612,6 @@ BST] XMPPClient: NetMessager stored Pushing "e57" (ReceivePackDone ExitSuccess)
# End of transcript or log.
"""]]
+
+> Pretty sure this must have been due to Char8 truncation. So,
+> [[fixed|done]].
diff --git a/doc/bugs/Truncated_file_transferred_via_S3/comment_6_6aa9261c0cdb02c6dd66d25f5c71f622._comment b/doc/bugs/Truncated_file_transferred_via_S3/comment_6_6aa9261c0cdb02c6dd66d25f5c71f622._comment
new file mode 100644
index 000000000..b5c27c5fd
--- /dev/null
+++ b/doc/bugs/Truncated_file_transferred_via_S3/comment_6_6aa9261c0cdb02c6dd66d25f5c71f622._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 6"
+ date="2014-05-28T00:33:48Z"
+ content="""
+I've just noticed the the S3 backend used Char8 for reading/writing encrypted files. I don't know that this could result in this problem, but it at least seems possible. If you can still reproduce the bug, try getting the next daily build and see if perhaps it fixed it.
+"""]]
diff --git a/doc/bugs/USB_drive_not_syncing.mdwn b/doc/bugs/USB_drive_not_syncing.mdwn
deleted file mode 100644
index c933222a5..000000000
--- a/doc/bugs/USB_drive_not_syncing.mdwn
+++ /dev/null
@@ -1,519 +0,0 @@
-### Please describe the problem.
-A USB drive could not be synced, whether as a client or transfer repository. The misbehaving part appears to be at this point in the logs:
-
-error: Ref refs/heads/synced/git-annex is at ff94266684335f9b152282fe620ef086e067afba but expected 0000000000000000000000000000000000000000
-
-"git annex get" also fails as shown in the (full) log message pasted below.
-
-### What steps will reproduce the problem?
-Not sure. Re-inserting the same drive gives the same problem. As the very first time using git annex (and not knowing git that well too), I need guidance in narrowing down this problem. If this bug has been fixed in the mean time, that is also fine.
-
-### What version of git-annex are you using? On what operating system?
-git-annex version: 4.20131106~bpo70+1
-build flags: Assistant Webapp Pairing Testsuite S3 Inotify DBus XMPP Feeds Quvi TDFA
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
-remote types: git gcrypt S3 bup directory rsync web glacier hook
-local repository version: 3
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-
-
-apg-get installed from Debian wheezy backports. uname -a gives:
-
-Linux im1 3.2.0-4-686-pae #1 SMP Debian 3.2.51-1 i686 GNU/Linux
-
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-[2014-01-05 21:01:40 CST] main: starting assistant version 4.20131106~bpo70+1
-[2014-01-05 21:01:40 CST] Cronner: You should enable consistency checking to protect your data.
-(Recording state in git...)
-(scanning...) [2014-01-05 21:01:40 CST] Watcher: Performing startup scan
-(started...) [2014-01-05 21:03:56 CST] Committer: Adding README.txt cassandra-env.sh cassandra..roperties cassandra..roperties cassandra.yaml
-
-add conf/README.txt (checksum...) ok
-add conf/README.txt (checksum...) ok
-add conf/cassandra-env.sh (checksum...) ok
-add conf/cassandra-env.sh (checksum...) ok
-add conf/cassandra-rackdc.properties (checksum...) ok
-add conf/cassandra-rackdc.properties (checksum...) ok
-add conf/cassandra-topology.properties (checksum...) ok
-add conf/cassandra-topology.properties (checksum...) ok
-add conf/cassandra.yaml (checksum...) ok
-add conf/cassandra.yaml (checksum...) [2014-01-05 21:03:57 CST] Committer: Adding commitlog..roperties cqlshrc.sample log4j-ser..roperties log4j-too..roperties
-ok
-add conf/commitlog_archiving.properties (checksum...) ok
-add conf/commitlog_archiving.properties (checksum...) ok
-add conf/cqlshrc.sample (checksum...) ok
-add conf/cqlshrc.sample (checksum...) ok
-add conf/log4j-server.properties (checksum...) ok
-add conf/log4j-server.properties (checksum...) ok
-add conf/log4j-tools.properties (checksum...) ok
-add conf/log4j-tools.properties (checksum...) [2014-01-05 21:03:58 CST] Committer: Committing changes to git
-[2014-01-05 21:09:46 CST] Committer: Committing changes to git
-ok
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-Launching web browser on file:///home/tyc20/Desktop/annex/.git/annex/webapp.html
-[2014-01-05 21:11:46 CST] main: starting assistant version 4.20131106~bpo70+1
-[2014-01-05 21:11:46 CST] Cronner: You should enable consistency checking to protect your data.
-(scanning...) [2014-01-05 21:11:46 CST] Watcher: Performing startup scan
-(started...)
-(scanning...) [2014-01-05 21:13:17 CST] Watcher: Performing startup scan
-[2014-01-05 21:13:17 CST] Committer: Committing changes to git
-(Recording state in git...)
-(started...) [2014-01-05 21:13:18 CST] Committer: Committing changes to git
-[2014-01-05 21:16:19 CST] Committer: Adding cassandra.thrift
-
-(Recording state in git...)
-add conf/cassandra.thrift (checksum...) [2014-01-05 21:16:19 CST] Committer: Committing changes to git
-[2014-01-05 21:16:20 CST] Committer: Adding cassandra.thrift
-ok
-(Recording state in git...)
-(Recording state in git...)
-add conf/cassandra.thrift (checksum...) [2014-01-05 21:16:20 CST] Committer: Committing changes to git
-[2014-01-05 21:16:29 CST] Committer: Committing changes to git
-[2014-01-05 21:16:40 CST] Committer: Committing changes to git
-[2014-01-05 21:17:56 CST] Committer: Adding new-name.properties
-[2014-01-05 21:17:56 CST] Committer: Committing changes to git
-ok
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-ok
-(Recording state in git...)
-(Recording state in git...)
-
- conf/Smalltalk-80 The language and its implementation (Bluebook).pdf still has writers, not adding
-
- conf/Smalltalk-80 The language and its implementation (Bluebook).pdf still has writers, not adding
-[2014-01-05 21:27:34 CST] Committer: Committing changes to git
-[2014-01-05 21:28:09 CST] Committer: Adding The Essen..tions.pdf
-(Recording state in git...)
-(Recording state in git...)
-add conf/The Essence of Compiling with Continuations.pdf (checksum...) ok
-add conf/The Essence of Compiling with Continuations.pdf (checksum...) [2014-01-05 21:28:09 CST] Committer: Committing changes to git
-[2014-01-05 21:28:49 CST] Committer: Committing changes to git
-gpg: new configuration file \`/home/tyc20/.gnupg/gpg.conf\' created
-gpg: WARNING: options in \`/home/tyc20/.gnupg/gpg.conf\' are not yet active during this run
-ok
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-
- Detected a crippled filesystem.
-
- Detected a filesystem without fifo support.
-
- Disabling ssh connection caching.
-[2014-01-05 21:35:09 CST] main: Syncing with ADATAUFD
-warning: no common commits
-From /media/A-DATA UFD/annex
- * [new branch] git-annex -> ADATAUFD/git-annex
-[2014-01-05 21:35:09 CST] Pusher: Syncing with ADATAUFD
-Already up-to-date.
-error: Ref refs/heads/synced/git-annex is at ff94266684335f9b152282fe620ef086e067afba but expected 0000000000000000000000000000000000000000
-error: Ref refs/heads/synced/master is at 745c01118e8684b4826f2fb53368faf0568fcafc but expected 0000000000000000000000000000000000000000
-remote: error: failed to lock refs/heads/synced/git-annex
-To /media/A-DATA UFD/annex
- * [new branch] git-annex -> synced/git-annex
- * [new branch] master -> synced/master
-remote: error: failed to lock refs/heads/synced/master
-To /media/A-DATA UFD/annex
- ! [remote rejected] git-annex -> synced/git-annex (failed to lock)
- ! [remote rejected] master -> synced/master (failed to lock)
-error: failed to push some refs to '/media/A-DATA UFD/annex'
-Already up-to-date.
-Everything up-to-date
-
-cassandra-rackdc.properties
-
- 1199 100% 0.00kB/s 0:00:00
- 1199 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 1290 bytes received 31 bytes 2642.00 bytes/sec
-total size is 1199 speedup is 0.91
-[2014-01-05 21:35:13 CST] Transferrer: Uploaded cassandra..roperties
-[2014-01-05 21:35:13 CST] Pusher: Syncing with ADATAUFD
-
-cassandra-topology.properties
-
- 1358 100% 0.00kB/s 0:00:00
- 1358 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 1451 bytes received 31 bytes 2964.00 bytes/sec
-total size is 1358 speedup is 0.92
-[2014-01-05 21:35:13 CST] Transferrer: Uploaded cassandra..roperties
-
-cassandra.thrift
-
- 32768 93% 0.00kB/s 0:00:00
- 35216 100% 2.33MB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 35300 bytes received 31 bytes 70662.00 bytes/sec
-total size is 35216 speedup is 1.00
-[2014-01-05 21:35:14 CST] Transferrer: Uploaded cassandra.thrift
-
-commitlog_archiving.properties
-
- 2328 100% 0.00kB/s 0:00:00
- 2328 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 2422 bytes received 31 bytes 4906.00 bytes/sec
-total size is 2328 speedup is 0.95
-[2014-01-05 21:35:15 CST] Transferrer: Uploaded commitlog..roperties
-
-cqlshrc.sample
-
- 1324 100% 0.00kB/s 0:00:00
- 1324 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 1402 bytes received 31 bytes 2866.00 bytes/sec
-total size is 1324 speedup is 0.92
-[2014-01-05 21:35:15 CST] Transferrer: Uploaded cqlshrc.sample
-
-new-name.properties
-
- 1850 100% 0.00kB/s 0:00:00
- 1850 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 1933 bytes received 31 bytes 3928.00 bytes/sec
-total size is 1850 speedup is 0.94
-[2014-01-05 21:35:16 CST] Transferrer: Uploaded new-name.properties
-To /media/A-DATA UFD/annex
- ff94266..d2dcc21 git-annex -> synced/git-annex
-[2014-01-05 21:35:19 CST] Pusher: Syncing with ADATAUFD
-To /media/A-DATA UFD/annex
- d2dcc21..c9f93f8 git-annex -> synced/git-annex
-[2014-01-05 21:42:39 CST] Committer: Adding Smalltalk..book).pdf
-(Recording state in git...)
-(merging ADATAUFD/git-annex into git-annex...)
-(Recording state in git...)
-
-
-(Recording state in git...)
-(Recording state in git...)
-add Smalltalk-80 The language and its implementation (Bluebook).pdf (checksum...) [2014-01-05 21:42:40 CST] Committer: Committing changes to git
-[2014-01-05 21:42:40 CST] Pusher: Syncing with ADATAUFD
-
-Smalltalk-80 The language and its implementation (Bluebook).pdf
-
- 32768 0% 0.00kB/s 0:00:00 Already up-to-date.
-
- 8847360 26% 8.39MB/s 0:00:02
- 21037056 62% 10.01MB/s 0:00:01 To /media/A-DATA UFD/annex
- c9f93f8..1f1bfe9 git-annex -> synced/git-annex
- 745c011..6c6149b master -> synced/master
-Already up-to-date.
-
- 31129600 92% 9.88MB/s 0:00:00
- 33558574 100% 9.85MB/s 0:00:03 (xfer#1, to-check=0/1)
-[2014-01-05 21:42:45 CST] Pusher: Syncing with ADATAUFD
-Everything up-to-date
-
-sent 33562798 bytes received 31 bytes 3196459.90 bytes/sec
-total size is 33558574 speedup is 1.00
-[2014-01-05 21:42:51 CST] Transferrer: Uploaded Smalltalk..book).pdf
-[2014-01-05 21:42:51 CST] Pusher: Syncing with ADATAUFD
-To /media/A-DATA UFD/annex
- 1f1bfe9..07ac8cf git-annex -> synced/git-annex
-[2014-01-05 21:46:18 CST] main: Syncing with annex2
-warning: no common commits
-From /home/tyc20/Desktop/annex2
- * [new branch] git-annex -> annex2/git-annex
- * [new branch] master -> annex2/master
-Already up-to-date!
-Merge made by the 'recursive' strategy.
-[2014-01-05 21:46:19 CST] Pusher: Syncing with annex2, ADATAUFD
-Already up-to-date.
-To /home/tyc20/Desktop/annex2
- * [new branch] git-annex -> synced/git-annex
- * [new branch] master -> synced/master
-error: Ref refs/heads/synced/git-annex is at cf8e5160f57d8279770613851ee75fb6b7c1d381 but expected 0000000000000000000000000000000000000000
-remote: error: failed to lock refs/heads/synced/git-annex
-error: Ref refs/heads/synced/master is at 8de8929c1e6712613f9e81faba88c2e464c809a7 but expected 0000000000000000000000000000000000000000
-remote: error: failed to lock refs/heads/synced/master
-To /home/tyc20/Desktop/annex2
- ! [remote rejected] git-annex -> synced/git-annex (failed to lock)
- ! [remote rejected] master -> synced/master (failed to lock)
-error: failed to push some refs to '/home/tyc20/Desktop/annex2'
-Already up-to-date.
-[2014-01-05 21:46:20 CST] Transferrer: Uploaded Smalltalk..book).pdf
-ok
-(Recording state in git...)
-(Recording state in git...)
-
-
-(Recording state in git...)
-(Recording state in git...)
-(merging annex2/git-annex into git-annex...)
-(Recording state in git...)
-
-
-
-drop ADATAUFD Smalltalk-80 The language and its implementation (Bluebook).pdf [2014-01-05 21:46:20 CST] Transferrer: Uploaded cassandra..roperties
-ok
-drop ADATAUFD conf/cassandra-rackdc.properties [2014-01-05 21:46:21 CST] Transferrer: Uploaded cassandra..roperties
-ok
-drop ADATAUFD conf/cassandra-topology.properties To /media/A-DATA UFD/annex
- 07ac8cf..cf8e516 git-annex -> synced/git-annex
- 6c6149b..8de8929 master -> synced/master
-From /home/tyc20/Desktop/annex2
- 0f740b9..47ed905 git-annex -> annex2/git-annex
-[2014-01-05 21:46:23 CST] Transferrer: Uploaded cassandra.thrift
-Already up-to-date.
-ok
-
-(merging annex2/git-annex into git-annex...)
-(Recording state in git...)
-drop ADATAUFD conf/cassandra.thrift To /home/tyc20/Desktop/annex2
- cf8e516..859a06b git-annex -> synced/git-annex
-[2014-01-05 21:46:25 CST] Transferrer: Uploaded commitlog..roperties
-ok
-drop ADATAUFD conf/commitlog_archiving.properties [2014-01-05 21:46:25 CST] Transferrer: Uploaded cqlshrc.sample
-ok
-drop ADATAUFD conf/cqlshrc.sample [2014-01-05 21:46:26 CST] Transferrer: Uploaded new-name.properties
-ok
-drop ADATAUFD conf/new-name.properties [2014-01-05 21:46:27 CST] Pusher: Syncing with annex2, ADATAUFD
-To /home/tyc20/Desktop/annex2
- 859a06b..da020f9 git-annex -> synced/git-annex
-To /media/A-DATA UFD/annex
- cf8e516..da020f9 git-annex -> synced/git-annex
-Updating 8de8929..2bfeaab
-Fast-forward
- conf/{new-name.properties => new-name2.properties} | 0
- 1 file changed, 0 insertions(+), 0 deletions(-)
- rename conf/{new-name.properties => new-name2.properties} (100%)
-[2014-01-05 21:47:23 CST] Committer: Committing changes to git
-[2014-01-05 21:47:23 CST] Pusher: Syncing with annex2, ADATAUFD
-To /home/tyc20/Desktop/annex2
- da020f9..1649bb6 git-annex -> synced/git-annex
-Already up-to-date.
-[2014-01-05 21:47:24 CST] Committer: Committing changes to git
-To /media/A-DATA UFD/annex
- da020f9..1649bb6 git-annex -> synced/git-annex
- 8de8929..2bfeaab master -> synced/master
-Already up-to-date.
-[2014-01-05 21:47:37 CST] Pusher: Syncing with annex2, ADATAUFD
-Everything up-to-date
-Everything up-to-date
-
-Smalltalk-80 The language and its implementation (Bluebook).pdf
-
- 32768 0% 0.00kB/s 0:00:00
- 10354688 30% 9.84MB/s 0:00:02
- 20709376 61% 9.86MB/s 0:00:01
- 29851648 88% 9.48MB/s 0:00:00
- 33558574 100% 9.33MB/s 0:00:03 (xfer#1, to-check=0/1)
-
-sent 33562798 bytes received 31 bytes 3532929.37 bytes/sec
-total size is 33558574 speedup is 1.00
-[2014-01-05 21:52:09 CST] Transferrer: Uploaded Smalltalk..book).pdf
-[2014-01-05 21:52:09 CST] Pusher: Syncing with annex2, ADATAUFD
-
-cassandra-rackdc.properties
-
- 1199 100% 0.00kB/s 0:00:00
- 1199 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 1290 bytes received 31 bytes 2642.00 bytes/sec
-total size is 1199 speedup is 0.91
-To /home/tyc20/Desktop/annex2
- 1649bb6..7329695 git-annex -> synced/git-annex
-[2014-01-05 21:52:13 CST] Transferrer: Uploaded cassandra..roperties
-
-cassandra-topology.properties
-
- 1358 100% 0.00kB/s 0:00:00
- 1358 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 1451 bytes received 31 bytes 2964.00 bytes/sec
-total size is 1358 speedup is 0.92
-[2014-01-05 21:52:13 CST] Transferrer: Uploaded cassandra..roperties
-
-cassandra.thrift
-
- 32768 93% 0.00kB/s 0:00:00
- 35216 100% 2.33MB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 35300 bytes received 31 bytes 23554.00 bytes/sec
-total size is 35216 speedup is 1.00
-[2014-01-05 21:52:14 CST] Transferrer: Uploaded cassandra.thrift
-
-commitlog_archiving.properties
-
- 2328 100% 0.00kB/s 0:00:00
- 2328 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 2422 bytes received 31 bytes 4906.00 bytes/sec
-total size is 2328 speedup is 0.95
-[2014-01-05 21:52:15 CST] Transferrer: Uploaded commitlog..roperties
-
-cqlshrc.sample
-
- 1324 100% 0.00kB/s 0:00:00
- 1324 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 1402 bytes received 31 bytes 2866.00 bytes/sec
-total size is 1324 speedup is 0.92
-[2014-01-05 21:52:15 CST] Transferrer: Uploaded cqlshrc.sample
-
-new-name2.properties
-
- 1850 100% 0.00kB/s 0:00:00
- 1850 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 1934 bytes received 31 bytes 3930.00 bytes/sec
-total size is 1850 speedup is 0.94
-[2014-01-05 21:52:17 CST] Transferrer: Uploaded new-name2..roperties
-To /media/A-DATA UFD/annex
- 1649bb6..7329695 git-annex -> synced/git-annex
-[2014-01-05 21:52:21 CST] Pusher: Syncing with annex2, ADATAUFD
-To /home/tyc20/Desktop/annex2
- 7329695..a7286da git-annex -> synced/git-annex
-To /media/A-DATA UFD/annex
- 7329695..a7286da git-annex -> synced/git-annex
-Updating 2bfeaab..40ceb79
-Fast-forward
- conf/commitlog_archiving.properties | 1 -
- 1 file changed, 1 deletion(-)
- delete mode 120000 conf/commitlog_archiving.properties
-[2014-01-05 21:55:05 CST] Pusher: Syncing with annex2
-[2014-01-05 21:55:05 CST] Committer: Committing changes to git
-To /home/tyc20/Desktop/annex2
- a7286da..688d27e git-annex -> synced/git-annex
-Already up-to-date.
-[2014-01-05 21:55:07 CST] Pusher: Syncing with annex2
-Everything up-to-date
-[2014-01-05 21:55:58 CST] MountWatcher: You should enable consistency checking to protect your data in ADATAUFD.
-[2014-01-05 21:55:58 CST] MountWatcher: Syncing with ADATAUFD
-To /media/A-DATA UFD/annex
- a7286da..688d27e git-annex -> synced/git-annex
- 2bfeaab..40ceb79 master -> synced/master
-Already up-to-date.
-
-
-
-
-In addition, this is what the drive looks like from the console.
-
-tyc20@im1:/media/A-DATA UFD/annex$ git annex get
-(merging synced/git-annex into git-annex...)
-(Recording state in git...)
-get SHA256E-s9400--8dce230c548a40fe9722ef1cf9444a54ae726a7420391a8eae937c8beaff6d96.sh (not available)
- No other repository is known to contain the file.
-failed
-get SHA256E-s1228--7e4190c2da12aa55c0f2598688d38723716bc11809ade1e594eae000ca40742c (not available)
- No other repository is known to contain the file.
-failed
-get SHA256E-s298--d60cff88544f63e6da177d98ef18a593268df6d4fcfd1247443ce3656cb185ba.txt (not available)
- No other repository is known to contain the file.
-failed
-get SHA256E-s26331--69bbae153239fa57b752bc931345275f36b608b26a3e9542ab4fabf21e05e57c.pdf (not available)
- No other repository is known to contain the file.
-failed
-get SHA256E-s31688--fea8690cf82baea3365ff692108742fdec308638bf6d66a8765bdc582e6ebb2c.yaml (not available)
- No other repository is known to contain the file.
-failed
-git-annex: get: 5 failed
-tyc20@im1:/media/A-DATA UFD/annex$ ls
-annex branches config description HEAD hooks info objects refs
-tyc20@im1:/media/A-DATA UFD/annex$ git annex sync
-commit
-ok
-pull im1
-From /home/tyc20/Desktop/annex
- * [new branch] git-annex -> im1/git-annex
- * [new branch] master -> im1/master
- * [new branch] synced/git-annex -> im1/synced/git-annex
- * [new branch] synced/master -> im1/synced/master
-ok
-push im1
-Counting objects: 73, done.
-Delta compression using up to 2 threads.
-Compressing objects: 100% (17/17), done.
-Writing objects: 100% (24/24), 1.54 KiB | 0 bytes/s, done.
-Total 24 (delta 16), reused 0 (delta 0)
-To /home/tyc20/Desktop/annex
- 688d27e..2819176 git-annex -> synced/git-annex
-ok
-tyc20@im1:/media/A-DATA UFD/annex$ git annex sync
-commit
-ok
-pull im1
-remote: Counting objects: 10, done.
-remote: Compressing objects: 100% (4/4), done.
-remote: Total 5 (delta 3), reused 0 (delta 0)
-Unpacking objects: 100% (5/5), done.
-From /home/tyc20/Desktop/annex
- 688d27e..c28d1a4 git-annex -> im1/git-annex
- 2819176..c28d1a4 synced/git-annex -> im1/synced/git-annex
-ok
-(merging im1/git-annex into git-annex...)
-tyc20@im1:/media/A-DATA UFD/annex$ git annex get
-get SHA256E-s9400--8dce230c548a40fe9722ef1cf9444a54ae726a7420391a8eae937c8beaff6d96.sh (not available)
- No other repository is known to contain the file.
-failed
-get SHA256E-s1228--7e4190c2da12aa55c0f2598688d38723716bc11809ade1e594eae000ca40742c (not available)
- No other repository is known to contain the file.
-failed
-get SHA256E-s298--d60cff88544f63e6da177d98ef18a593268df6d4fcfd1247443ce3656cb185ba.txt (not available)
- No other repository is known to contain the file.
-failed
-get SHA256E-s26331--69bbae153239fa57b752bc931345275f36b608b26a3e9542ab4fabf21e05e57c.pdf (not available)
- No other repository is known to contain the file.
-failed
-get SHA256E-s31688--fea8690cf82baea3365ff692108742fdec308638bf6d66a8765bdc582e6ebb2c.yaml (not available)
- No other repository is known to contain the file.
-failed
-git-annex: get: 5 failed
-tyc20@im1:/media/A-DATA UFD/annex$ mount -l
-sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
-proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
-udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=128012,mode=755)
-devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
-tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=103412k,mode=755)
-/dev/disk/by-uuid/25f084fb-c946-4c0d-bf0b-65ae4b68a7c6 on / type ext3 (rw,relatime,errors=remount-ro,barrier=1,data=ordered)
-tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
-tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=285260k)
-none on /mnt/share type vboxsf (rw,nodev,relatime)
-rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
-/dev/sr0 on /media/VBOXADDITIONS_4.3.6_91406 type iso9660 (ro,nosuid,nodev,relatime,uid=1000,gid=1000,iocharset=utf8,mode=0400,dmode=0500,uhelper=udisks) [VBOXADDITIONS_4.3.6_91406]
-/dev/sdb1 on /media/A-DATA UFD type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0077,codepage=cp437,iocharset=utf8,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks) [A-DATA UFD]
-
-
-tyc20@im1:/media/A-DATA UFD/annex$ ls -la ~/Desktop/annex/conf/
-total 60
-drwxr-xr-x 2 tyc20 tyc20 4096 Jan 5 21:55 .
-drwxr-xr-x 4 tyc20 tyc20 4096 Jan 5 21:42 ..
--rw-r--r-- 1 tyc20 tyc20 1199 Jul 28 09:14 cassandra-rackdc.properties
--rw-r--r-- 1 tyc20 tyc20 35216 Jul 28 09:14 cassandra.thrift
--rw-r--r-- 1 tyc20 tyc20 1358 Jul 28 09:14 cassandra-topology.properties
--rw-r--r-- 1 tyc20 tyc20 1324 Jul 28 09:14 cqlshrc.sample
--rw-r--r-- 1 tyc20 tyc20 1850 Jul 28 09:14 new-name2.properties
-tyc20@im1:/media/A-DATA UFD/annex$ ls -la ~/Desktop/annex/
-total 32828
-drwxr-xr-x 4 tyc20 tyc20 4096 Jan 5 21:42 .
-drwxr-xr-x 4 tyc20 tyc20 4096 Jan 5 21:45 ..
-drwxr-xr-x 2 tyc20 tyc20 4096 Jan 5 21:55 conf
-drwxr-xr-x 9 tyc20 tyc20 4096 Jan 5 22:01 .git
--rwxrwxrwx 1 tyc20 tyc20 33558574 Aug 27 2007 Smalltalk-80 The language and its implementation (Bluebook).pdf
-tyc20@im1:/media/A-DATA UFD/annex$
-
-# End of transcript or log.
-"""]]
-
-> [[done]]; seems to be some badly set up repository. Happy to help with
-> fixing it, if you reply.. --[[Joey]]
diff --git a/doc/bugs/USB_drive_not_syncing/comment_1_de76bd6b9f8eb2489d4854a4c8ddd308._comment b/doc/bugs/USB_drive_not_syncing/comment_1_de76bd6b9f8eb2489d4854a4c8ddd308._comment
deleted file mode 100644
index afa3b3b6c..000000000
--- a/doc/bugs/USB_drive_not_syncing/comment_1_de76bd6b9f8eb2489d4854a4c8ddd308._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.35"
- subject="comment 1"
- date="2014-01-05T18:52:08Z"
- content="""
-You seem to have already had a regular bare git repository on the drive at `/media/A-DATA UFD/annex`, and then used the webapp or command line to make an encrypted gcrypt repository in the same location. This is the only way I can explain you being able to run \"git annex get in `/media/A-DATA UFD/annex` and it do anything at all, and it also explains the \"warning: no common commits\" and the failure to sync.
-
-So, you have some unholy mix of two different types of repositories in one location. The best way to untangle this is probably to go into the webapp and
-in the settings menu next to that repository, choose Delete. This will get back the files that were stored in the gcrypt repository. (Or stop the assistant, and in `~/annex/` run `git annex get` to hopefully retrieve the files that it stored in the gcrypt repository, and then remove the gcrypt repository from .git/config).
-
-You may then need to edit `/media/A-DATA UFD/annex/config` to remove the gcrypt-id setting. At that point, it should be possible to use the webapp to add the removable drive, which will see the git repository on there and use it.
-
-I have re-tested that the webapp does not allow creating a gcrypt repository when a regular bare git repository already exists on a removable drive. IIRC there were some bugs in this area initially, but they've all been fixed for a while. It *is* possible to manually use `git annex initremote` at the command line to turn a regular bare git repository into a gcrypt repository.
-"""]]
diff --git a/doc/bugs/Unable_to_copy_from_Android.mdwn b/doc/bugs/Unable_to_copy_from_Android.mdwn
deleted file mode 100644
index 405e227d6..000000000
--- a/doc/bugs/Unable_to_copy_from_Android.mdwn
+++ /dev/null
@@ -1,148 +0,0 @@
-### Please describe the problem.
-
-I am unable to copy files from my Android git annex repository into a remote repository on a Ubuntu machine.
-It was previously working fine, but after recent upgrades, it throws odd errors and refuses to copy the files.
-
-### What steps will reproduce the problem?
-
-Run this command:
-
-`git annex copy --to remote Path/To/File.txt`
-
-### What version of git-annex are you using? On what operating system?
-
-Souce Android Tablet
-
-[[!format sh """
-git-annex version: 5.20131221-gf8c928d
-build flags: Assistant Webapp Testsuite S3 WebDAV Inotify XMPP DNS Feeds Quvi TDFA CryptoHash
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
-remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
-local repository version: 5
-default repository version: 3
-supported repository versions: 3 5
-upgrade supported from repository versions: 0 1 2 4
-"""]]
-
-Destination Ubuntu server
-
-[[!format sh """
-git-annex version: 5.20131224-g692aa01
-build flags: Assistant Webapp Pairing S3 WebDAV Inotify DBus XMPP Feeds Quvi TDFA
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
-remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
-"""]]
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-git annex copy --to gimli Books/Laravel/laravel.mobi
-copy Books/Laravel/laravel.mobi (checking gimli...) git-annex: Not in a git repository.
-(to gimli...) git-annex: unknown command recvkey
-
-Usage: git-annex command [option ...]
-
-Commonly used commands:
-
-add [PATH ...] add files to annex
-addurl URL ... add urls to annex
-assistant automatically handle changes
-copy [PATH ...] copy content of files to/from another repository
-drop [PATH ...] indicate content of files not currently wanted
-edit [PATH ...] same as unlock
-get [PATH ...] make content of annexed files available
-import [PATH ...] move and add files from outside git working copy
-importfeed URL ... import files from podcast feeds
-lock [PATH ...] undo unlock command
-mirror [PATH ...] mirror content of files to/from another repository
-move [PATH ...] move content of files to/from another repository
-rmurl FILE URL record file is not available at url
-status [PATH ...] show the working tree status
-sync [REMOTE ...] synchronize local repository with remotes
-unlock [PATH ...] unlock files for modification
-watch watch for changes
-webapp launch webapp
-
-Repository setup commands:
-
-dead REMOTE ... hide a lost repository
-describe REMOTE DESC change description of a repository
-direct switch repository to direct mode
-enableremote NAME [K=V ...] enables use of an existing special remote
-group REMOTE DESC add a repository to a group
-indirect switch repository to indirect mode
-init DESC initialize git-annex
-initremote NAME [K=V ...] creates a special (non-git) remote
-schedule REMOTE [EXPR] get or set scheduled jobs
-semitrust REMOTE ... return repository to default trust level
-trust REMOTE ... trust a repository
-ungroup REMOTE DESC remove a repository from a group
-untrust REMOTE ... do not trust a repository
-vicfg edit git-annex's configuration
-wanted REMOTE [EXPR] get or set preferred content expression
-
-Repository maintenance commands:
-
-addunused NUM|RANGE ... add back unused files
-dropunused NUM|RANGE ... drop unused file content
-fix [PATH ...] fix up symlinks to point to annexed content
-forget prune git-annex branch history
-fsck [PATH ...] check for problems
-merge automatically merge changes from remotes
-repair recover broken git repository
-unused look for unused file content
-upgrade upgrade repository layout
-
-Query commands:
-
-find [PATH ...] lists available files
-help display help
-info [PATH ...] shows general information about the annex
-list [PATH ...] show which remotes contain files
-log [PATH ...] shows location log
-map generate map of repositories
-version show version info
-whereis [PATH ...] lists repositories that have file content
-
-Utility commands:
-
-migrate [PATH ...] switch data to different backend
-reinject SRC DEST sets content of annexed file
-unannex [PATH ...] undo accidential add command
-uninit [PATH ...] de-initialize git-annex and clean out repository
-
-Plumbing commands:
-
-dropkey KEY ... drops annexed content for specified keys
-examinekey KEY ... prints information from a key
-fromkey KEY PATH adds a file using a specific key
-lookupkey FILE ... looks up key used for file
-pre-commit [PATH ...] run by git pre-commit hook
-rekey [PATH KEY ...] change keys used for files
-transferkey KEY transfers a key from or to a remote
-transferkeys transfers keys
-xmppgit git to XMPP relay
-
-rsync: connection unexpectedly closed (0 bytes received so far) [sender]
-rsync error: error in rsync protocol data stream (code 12) at io.c(224) [sender=3.1.0dev]
-
-
-rsync failed -- run git annex again to resume file transfer
-failed
-git-annex: copy: 1 failed
-
-# End of transcript or log.
-"""]]
-
-> There was a bug in the linux standalone tarball distributed
-> with 5.20131221 that made the `git-annex-shell` wrapper accidentially run
-> `git-annex` instead of `git-annex-shell`. Which results in
-> this error about recvkey, which is a git-annex-shell command, not a
-> git-annex command.
->
-> I think your ubuntu system must have git-annex installed from that tarball.
-> This bug is fixed in the daily builds, and I have updated the
-> tarballs for the release too, now. [[done]] --[[Joey]]
diff --git a/doc/bugs/Unable_to_copy_from_Android/comment_1_3bb70c44b6b8d451687591fcab5c1506._comment b/doc/bugs/Unable_to_copy_from_Android/comment_1_3bb70c44b6b8d451687591fcab5c1506._comment
deleted file mode 100644
index 44e8beed6..000000000
--- a/doc/bugs/Unable_to_copy_from_Android/comment_1_3bb70c44b6b8d451687591fcab5c1506._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://id.clacke.se/"
- nickname="clacke"
- subject="dup"
- date="2013-12-27T04:18:16Z"
- content="""
-Looks like a duplicate of [[android_cannot_get_from_5.20131221]].
-"""]]
diff --git a/doc/bugs/Unable_to_import_feed.mdwn b/doc/bugs/Unable_to_import_feed.mdwn
deleted file mode 100644
index 49dc21bfe..000000000
--- a/doc/bugs/Unable_to_import_feed.mdwn
+++ /dev/null
@@ -1,27 +0,0 @@
-Using `git-annex version: 4.20130802` on Debian unstable, when trying to add the feed at <http://www.ndr.de/fernsehen/sendungen/extra_3/videos/zum_mitnehmen/extradrei196_version-hq.xml>, I get:
-
-[[!format sh """
-importfeed http://www.ndr.de/fernsehen/sendungen/extra_3/videos/zum_mitnehmen/extradrei196_version-hq.xml
---2013-08-16 09:14:13-- http://www.ndr.de/fernsehen/sendungen/extra_3/videos/zum_mitnehmen/extradrei196_version-hq.xml
-Auflösen des Hostnamen »www.ndr.de (www.ndr.de)«... 212.201.100.171, 212.201.100.187
-Verbindungsaufbau zu www.ndr.de (www.ndr.de)|212.201.100.171|:80... verbunden.
-HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
-Länge: 61809 (60K) [application/xml]
-In »»/tmp/feed4404«« speichern.
-
-100%[============================================>] 61.809 --.-K/s in 0,03s
-
-2013-08-16 09:14:13 (2,20 MB/s) - »»/tmp/feed4404«« gespeichert [61809/61809]
-
-failed
-git-annex: importfeed: 1 failed
-"""]]
-
-(Oh, and using `format` with nono-ASCII seems to break down., at least in the preview.)
-
-> I'm going to close this since I've narrowed it down to a bug in the
-> upstream feed library. [[done]]. Of course, if we get a lot of reports of
-> the library not working, I may need to revisit using it, but for now this
-> seems an isolated problem. Also, I tried validating the feed, and it is
-> not 100% valid, and one of the validity problems is a missing enclosure
-> length. --[[Joey]]
diff --git a/doc/bugs/Unable_to_import_feed/comment_1_16230fbbb996e165b84787ed4d5f72ea._comment b/doc/bugs/Unable_to_import_feed/comment_1_16230fbbb996e165b84787ed4d5f72ea._comment
deleted file mode 100644
index 7c9c1e129..000000000
--- a/doc/bugs/Unable_to_import_feed/comment_1_16230fbbb996e165b84787ed4d5f72ea._comment
+++ /dev/null
@@ -1,45 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.63"
- subject="comment 1"
- date="2013-08-23T18:09:27Z"
- content="""
-When I try this, without the German translation, I get:
-
-<pre>
-joey@gnu:~/tmp/newrepo>git annex importfeed 'http://www.ndr.de/fernsehen/sendungen/extra_3/videos/zum_mitnehmen/extradrei196_version-hq.xml'
-(checking known urls...)
-importfeed http://www.ndr.de/fernsehen/sendungen/extra_3/videos/zum_mitnehmen/extradrei196_version-hq.xml
---2013-08-23 13:58:19-- http://www.ndr.de/fernsehen/sendungen/extra_3/videos/zum_mitnehmen/extradrei196_version-hq.xml
-Resolving www.ndr.de (www.ndr.de)... 23.73.180.154, 23.73.180.115
-Connecting to www.ndr.de (www.ndr.de)|23.73.180.154|:80... connected.
-HTTP request sent, awaiting response... 200 OK
-Length: 61865 (60K) [application/xml]
-Saving to: ‘/home/joey/tmp/feed31120’
-
-100%[======================================>] 61,865 151KB/s in 0.4s
-
-2013-08-23 13:58:25 (151 KB/s) - ‘/home/joey/tmp/feed31120’ saved [61865/61865]
-
-
- warning: bad feed content
-</pre>
-
-It seems you left out the last line of the error.
-
-The feed library seems to fail to find any of the enclosures in this feed, although it is able to parse it as far as finding the individual items in the feed:
-
-<pre>
-Prelude Text.Feed.Query Text.Feed.Import> f <- parseFeedFromFile \"extradrei196_version-hq.xml\"
-Prelude Text.Feed.Query Text.Feed.Import> map getItemEnclosure $ feedItems f
-[Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing]
-</pre>
-
-The feed *appears* to contain enclosures, for example:
-
-<pre>
-<enclosure url=\"http://media.ndr.de/progressive/2013/0821/TV-20130821-2329-5942.hq.mp4\" type=\"video/mp4\"/>
-</pre>
-
-It may not be well-formed, or the feed library may have a bug. Assuming the latter, I have filed a bug report on the feed library: https://github.com/sof/feed/issues/3
-"""]]
diff --git a/doc/bugs/Unable_to_switch_back_to_direct_mode.mdwn b/doc/bugs/Unable_to_switch_back_to_direct_mode.mdwn
deleted file mode 100644
index 8144dfe4d..000000000
--- a/doc/bugs/Unable_to_switch_back_to_direct_mode.mdwn
+++ /dev/null
@@ -1,55 +0,0 @@
-### Please describe the problem.
-
-I seem to be unable to switch back and forth between git annex direct and git annex indirect mode in one of my repositories. I can in others just fine.
-
-### What steps will reproduce the problem?
-
-In the broken repository I can do:
-
- cwebber@earlgrey:~/gfx-proj/mediagoblin_vid$ git annex direct
- commit
- add audio/part2.aup (checksum...) ok
- ok
- add images/campaign.png (checksum...) ok
- ok
- add images/transifex.png (checksum...) ok
- ok
- add script-lines.txt (checksum...) ok
- ok
- add vid_pitch.blend (checksum...) ok
- ok
- (Recording state in git...)
- [master 9f13dc0] commit before switching to direct mode
- 1 file changed, 145 insertions(+), 1 deletion(-)
- rewrite audio/part2.aup (100%)
- mode change 120000 => 100644
- ok
- direct gavroche-vid-shot.blend
- git-annex: /home/cwebber/gfx-proj/mediagoblin_vid/.git/annex/objects/3M/mx/SHA256E-s2935980--3a1c838333a4a0ee1eaa837c3f08a910d3f29fc60baf41affd936fbefe11111f/SHA256E-s2935980--3a1c838333a4a0ee1eaa837c3f08a910d3f29fc60baf41affd936fbefe11111f: rename: permission denied (Permission denied)
- failed
- git-annex: direct: 1 failed
-
-looking at the files:
-
- cwebber@earlgrey:~/gfx-proj/mediagoblin_vid$ ls -l gavroche-vid-shot.blend
- lrwxrwxrwx 1 cwebber cwebber 190 Apr 28 18:27 gavroche-vid-shot.blend -> .git/annex/objects/3M/mx/SHA256E-s2935980--3a1c838333a4a0ee1eaa837c3f08a910d3f29fc60baf41affd936fbefe11111f/SHA256E-s2935980--3a1c838333a4a0ee1eaa837c3f08a910d3f29fc60baf41affd936fbefe11111f
- cwebber@earlgrey:~/gfx-proj/mediagoblin_vid$ ls -l .git/annex/objects/3M/mx/SHA256E-s2935980--3a1c838333a4a0ee1eaa837c3f08a910d3f29fc60baf41affd936fbefe11111f/SHA256E-s2935980--3a1c838333a4a0ee1eaa837c3f08a910d3f29fc60baf41affd936fbefe11111f
- -rw-r--r-- 1 cwebber cwebber 2935980 Apr 28 18:27 .git/annex/objects/3M/mx/SHA256E-s2935980--3a1c838333a4a0ee1eaa837c3f08a910d3f29fc60baf41affd936fbefe11111f/SHA256E-s2935980--3a1c838333a4a0ee1eaa837c3f08a910d3f29fc60baf41affd936fbefe11111f
- cwebber@earlgrey:~/gfx-proj/mediagoblin_vid$
-
-... it looks like these permissions should be fine!
-
-Some notable things:
-
-* I believe Blender wrote directly to a file that was in "locked" somehow, despite it being in that state. It may have actually followed the symlink and overwritten that file, I'm not sure.
-* However, the file that git-annex is now reporting with "permission denied" is not the one it did previously... I did git checkout -- on all the files, switched them over, and it's a different set of broken things now!
-* It's actually easy enough to fix... in fact, I did fix it! I just did a fresh clone of the git repository and a git annex get and everything is fine now. However, it seemed like possibly a bug that might hit other people, hence my reporting it.
-
-### What version of git-annex are you using? On what operating system?
-
-git annex version 4.20130417 on debian wheezy
-
-### Please provide any additional information below.
-
-
-> [[done]]; see comments. --[[Joey]]
diff --git a/doc/bugs/Unable_to_switch_back_to_direct_mode/comment_1_4585b251f011a153c62f377c324cf963._comment b/doc/bugs/Unable_to_switch_back_to_direct_mode/comment_1_4585b251f011a153c62f377c324cf963._comment
deleted file mode 100644
index 6ba0111a7..000000000
--- a/doc/bugs/Unable_to_switch_back_to_direct_mode/comment_1_4585b251f011a153c62f377c324cf963._comment
+++ /dev/null
@@ -1,24 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmRFKwny4rArBaz-36xTcsJYqKIgdDaw5Q"
- nickname="Andrew"
- subject="comment 1"
- date="2013-04-30T02:31:31Z"
- content="""
-I've had the same thing happen in reverse. I can not switch from direct to indirect mode. After receiving a similar error:
-
- git-annex: /Users/akraut/Desktop/annexes/home/.git/annex/objects/ZV/kq/SHA256E-s207--4b4fa180ac4c16fe83eb2a5fed4c217c1d26195c876a4e0e700ae63605348d75.mp3/SHA256E-s207--4b4fa180ac4c16fe83eb2a5fed4c217c1d26195c876a4e0e700ae63605348d75.mp3.cache: removeLink: permission denied (Permission denied)
- failed
- git-annex: indirect: 1 failed
-
- % > ls -la /Users/akraut/Desktop/annexes/home/.git/annex/objects/ZV/kq/SHA256E-s207--4b4fa180ac4c16fe83eb2a5fed4c217c1d26195c876a4e0e700ae63605348d75.mp3/SHA256E-s207--4b4fa180ac4c16fe83eb2a5fed4c217c1d26195c876a4e0e700ae63605348d75.mp3.cache
- -rw-r--r-- 1 akraut staff 23 Mar 23 21:10 /Users/akraut/Desktop/annexes/home/.git/annex/objects/ZV/kq/SHA256E-s207--4b4fa180ac4c16fe83eb2a5fed4c217c1d26195c876a4e0e700ae63605348d75.mp3/SHA256E-s207--4b4fa180ac4c16fe83eb2a5fed4c217c1d26195c876a4e0e700ae63605348d75.mp3.cache
-
-After this error, annex things I'm in indirect mode:
-
- % > git annex status
- supported backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
- supported remote types: git S3 bup directory rsync web webdav glacier hook
- repository mode: indirect
-
-And git things that my repo has many uncommitted typechanges.
-"""]]
diff --git a/doc/bugs/Unable_to_switch_back_to_direct_mode/comment_2_5848ebbab38d1244347f7e7351b3a30d._comment b/doc/bugs/Unable_to_switch_back_to_direct_mode/comment_2_5848ebbab38d1244347f7e7351b3a30d._comment
deleted file mode 100644
index 2b13674a7..000000000
--- a/doc/bugs/Unable_to_switch_back_to_direct_mode/comment_2_5848ebbab38d1244347f7e7351b3a30d._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 2"
- date="2013-04-30T23:36:12Z"
- content="""
-@andrew I've reproduced and fixed this problem. It does not seem to be related to cwebber's problem.
-
-Waiting on a test case from cwebber. His permissions seem ok, so I don't know what's causing that.
-"""]]
diff --git a/doc/bugs/Unable_to_switch_back_to_direct_mode/comment_3_1c5c7b0c7bc336e00f43e257b87a6208._comment b/doc/bugs/Unable_to_switch_back_to_direct_mode/comment_3_1c5c7b0c7bc336e00f43e257b87a6208._comment
deleted file mode 100644
index b23697942..000000000
--- a/doc/bugs/Unable_to_switch_back_to_direct_mode/comment_3_1c5c7b0c7bc336e00f43e257b87a6208._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmRFKwny4rArBaz-36xTcsJYqKIgdDaw5Q"
- nickname="Andrew"
- subject="comment 3"
- date="2013-04-30T23:38:52Z"
- content="""
-Ah, cool. What's the recommended way to recover from it?
-"""]]
diff --git a/doc/bugs/Unable_to_switch_back_to_direct_mode/comment_4_b0bfd68998bc3e11d8e089646b8292a6._comment b/doc/bugs/Unable_to_switch_back_to_direct_mode/comment_4_b0bfd68998bc3e11d8e089646b8292a6._comment
deleted file mode 100644
index af406b1d2..000000000
--- a/doc/bugs/Unable_to_switch_back_to_direct_mode/comment_4_b0bfd68998bc3e11d8e089646b8292a6._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 4"
- date="2013-05-06T16:41:42Z"
- content="""
-cwebber sent me a test case, and it turns out that while his problem was different, I fixed it in the same commit I fixed the problem described in the comment above. Both problems involved cases where the object storage directory was left with frozen permissions, and they needed to be unlocked before moving files in/out of it.
-
-Also, it seems that blender did not misbehave as thought. It only replaces the git-annex symlink with a new .blend file. Which is fine.
-
-Finally, there was an unrelated bug in `git annex direct` that chris's test case repo happened to have, which caused it to not convert 2 files to direct mode. I've fixed that bug as well.
-"""]]
diff --git a/doc/bugs/Unable_to_sync_a_second_machine_through_Box.mdwn b/doc/bugs/Unable_to_sync_a_second_machine_through_Box.mdwn
deleted file mode 100644
index a4cac6ace..000000000
--- a/doc/bugs/Unable_to_sync_a_second_machine_through_Box.mdwn
+++ /dev/null
@@ -1,46 +0,0 @@
-What steps will reproduce the problem?
-
-Install 4.20130417 as packaged in Debian unstable.
-Using "git annex webapp", setup on first machine adding repository ~/annex. Add a Box.com repository in directory "annex", encrypted. Add a jabber account (apparently successful).
-Add test file to ~/annex. Login via website to box.com, notice that the "annex" directory is created and contains encrypted file.
-On second (remote machine), follow the same steps (add repository in ~/annex, Add a Box.com repository in directory "annex", encrypted, Add same jabber account).
-
-What is the expected output? What do you see instead?
-
-Expected the file to appear in the second machine's ~/annex. The webapp indicates: Synced with box.com
-Log file says:
-
-[2013-04-23 06:50:16 EDT] main: starting assistant version 4.20130417
-(scanning...) [2013-04-23 06:50:16 EDT] Watcher: Performing startup scan
-(started...)
-(encryption setup shared cipher) (testing WebDAV server...)
-(gpg) [2013-04-23 06:50:50 EDT] main: Syncing with box.com
-[2013-04-23 06:50:50 EDT] main: Share with friends, and keep your devices in sync across the cloud.
-[2013-04-23 06:51:03 EDT] main: Share with friends, and keep your devices in sync across the cloud.
-warning: Not updating non-default fetch respec
-
- Please update the configuration manually if necessary.
-Initializing nautilus-gdu extension
-Shutting down nautilus-gdu extension
-git-annex: Daemon is already running.
-
-What version of git-annex are you using? On what operating system?
-
-4.20130417, debian testing with apt-pinning to unstable on both systems.
-
-Please provide any additional information below.
-
-When editing the Box.com repository, the option to select a directory no longer appears (and the configuration doesn't show the one selected at creation).
-There's no indication if the jabber communication is working successfully. It could be that signalling isn't working for some reason, but the user has no information to determine that.
-It would be helpful if there were some indication in the Dashboard as to the number of files/directories/objects that git annex believes exists in each location. It could be that it's not accessing the Box.com server successfully, but again, this is difficult to determine.
-
-It's great to see that git annex might make a box.com account useful for automatic upload and sync... looking forward to getting it to work on both sides! Thanks for making this!
-
-[[!tag /design/assistant moreinfo]]
-
-> The robustness of the XMPP support has massively improved since this bug
-> report was filed. Since no more information is forthcoming, I consider
-> this bug [[done]].
->
-> (Incidentially, this bug got me to santize all information logged about
-> XMPP protocol, including the names/emails of buddies..) --[[Joey]]
diff --git a/doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_1_cb43a2bc976e3eb1cfc3ee9d4d34e78e._comment b/doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_1_cb43a2bc976e3eb1cfc3ee9d4d34e78e._comment
deleted file mode 100644
index ae117f36f..000000000
--- a/doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_1_cb43a2bc976e3eb1cfc3ee9d4d34e78e._comment
+++ /dev/null
@@ -1,22 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-04-23T17:54:14Z"
- content="""
-Are files that you add in machine A showing up in machine B as broken symlinks? If so, jabber sync is working and the problem is with the Box.com remore. If not, the problem must be with the jabber sync.
-
-The log includes something like this when git is pulling over jabber:
-
-<pre>
-[2013-04-22 14:08:05 JEST] XMPPClient: Syncing with youraccount
-To xmpp::youraccount@gmail.com
- 385f85c..3aae8b7 git-annex -> refs/synced/8ff0aa10-0a9d-4184-b16f-27b32ef87372/ZmFtaWx5QGtpdGVuZXQubmV0/git-annex
-</pre>
-
-You can turn on debugging (--debug at startup or Enable debug logging in Configuration -> Preferences) to get full XMPP protocol dumps in the log. If you do not see something like the above, please do so, and paste them, so I can debug why it's not working.
-
-> When editing the Box.com repository, the option to select a directory no longer appears
-
-This is normal; it doesn't make sense to change the directory the remote uses once the remote is in use.
-"""]]
diff --git a/doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_2_3375e9bfab3fed271413bd9bb5fa0121._comment b/doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_2_3375e9bfab3fed271413bd9bb5fa0121._comment
deleted file mode 100644
index f3a39ef2f..000000000
--- a/doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_2_3375e9bfab3fed271413bd9bb5fa0121._comment
+++ /dev/null
@@ -1,30 +0,0 @@
-[[!comment format=mdwn
- username="http://keverets.livejournal.com/"
- ip="108.170.138.61"
- subject="comment 2"
- date="2013-04-23T19:04:15Z"
- content="""
-I do see XMPP connecting after I enable logging (could the XMPP status be shown in the webapp directly?)
-
-It shows long, long lists of PresenceMessages:
-
- [2013-04-23 14:55:56 EDT] XMPPClient: connected JID \"...\"
- [2013-04-23 14:55:56 EDT] XMPPClient: received: [PresenceMessage (Presence {presenceType = PresenceAvailable, presenceTo = Just (JID ...
-
-Still no files gets transferred from Box.com to the second machine. I see:
-
- [2013-04-23 14:53:41 EDT] main: Syncing with box.com
-
-but no:
-
- XMPPClient: Syncing
-
-anywhere in the log.
-
->> When editing the Box.com repository, the option to select a directory no longer appears
-> This is normal; it doesn't make sense to change the directory the remote uses once the remote is in use.
-
-It might not make sense to change it, but it would be useful to still see it (if disabled), especially when there are a few different Box.com directories that are shared with different repositories.
-
-Thanks again for any hints.
-"""]]
diff --git a/doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_3_c4420e1a3db321b4135b1626d3582adb._comment b/doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_3_c4420e1a3db321b4135b1626d3582adb._comment
deleted file mode 100644
index 1b66d12e9..000000000
--- a/doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_3_c4420e1a3db321b4135b1626d3582adb._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="I am not a horse"
- date="2013-04-23T20:05:25Z"
- content="""
-A horse, when put in harness, is equipped with blinders, to prevent it from seeing scary things out of the corner of its eye, and panicing.
-
-I am not a horse. The more information I am presented with, the more likely I am to see and understand and fix a problem. ;)
-
-So, please paste the whole XMPP output, not 2 edited lines of it.
-"""]]
diff --git a/doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_4_f4b2c88bb5938dacdd04dfe9a68560de._comment b/doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_4_f4b2c88bb5938dacdd04dfe9a68560de._comment
deleted file mode 100644
index 32ceea2c0..000000000
--- a/doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_4_f4b2c88bb5938dacdd04dfe9a68560de._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="http://keverets.livejournal.com/"
- ip="108.170.138.61"
- subject="Your users aren't horses, either"
- date="2013-04-24T23:42:45Z"
- content="""
-I appreciate the difficulty in responding to bug reports with incomplete logs.
-
-Please consider that the log file includes lists of email addresses (as XMPP contacts in the Presence messages) that are those of my contacts and not my own. In addition, these bug reports seem to be posted publicly in this wiki. As such, providing some other means of submitting logs would likely be a good idea (ideally from inside the webapp where they're being collected, so the user is less likely to miss some with a copy & paste through the browser; they should be sent to a more private destination such as an email address).
-
-I really do not want to be bothering you with bug reports if I could gather the information I need to solve the issue myself. That's why I suggested adding better notification in the webapp of the status of XMPP (there's just a brief \"Testing, this might take a minute\" message, and then never any indication afterwards as to the state), along with better information about the status of each repository as git annex sees them. If it's something that's tripping me up, and I'm willing to jump through the hoops (perhaps I am a horse) of hunting down and dealing with the bug reporting system, then there are likely others who will have the same issue but just give up.
-
-We're both left trying to sort out the problem partially blind, which is about as much fun for me as it is for you.
-
-I see a few ways to reduce the effort on both sides going forward. One (my preferred) is to give the users more information in the webapp as to what's going on with the sync so that the user can determine if it's the local git annex, the remote shared repository, the remote system, or the signalling in between. Another is to provide a more private means of submitting complete log data to help get quickly to the root of the problem without greatly compromising user's (and their contacts') privacy. And the last (my least preferred) is that you respond to bug reports in the manner above, resulting in the alienation of those who are trying to help, who are interested in what you're doing and trying to aid in improving the project so that it will be useful and pleasant-to-use for all. In doing so I'm fairly certain you'll get many fewer bug reports.
-
-That last one seems like less effort, but I really would prefer one of the two former solutions.
-"""]]
diff --git a/doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_5_6dcc95ffb3fc7bbbedd6be5df0111c85._comment b/doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_5_6dcc95ffb3fc7bbbedd6be5df0111c85._comment
deleted file mode 100644
index 5919a7206..000000000
--- a/doc/bugs/Unable_to_sync_a_second_machine_through_Box/comment_5_6dcc95ffb3fc7bbbedd6be5df0111c85._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 5"
- date="2013-04-24T23:46:11Z"
- content="""
-<mailto:id@joeyh.name>
-"""]]
diff --git a/doc/bugs/Unable_to_use_remotes_with_space_in_the_path.mdwn b/doc/bugs/Unable_to_use_remotes_with_space_in_the_path.mdwn
deleted file mode 100644
index 6bb6c0782..000000000
--- a/doc/bugs/Unable_to_use_remotes_with_space_in_the_path.mdwn
+++ /dev/null
@@ -1,35 +0,0 @@
-### Please describe the problem.
-
-Git annex can't use remotes with the type "file://" if the path contains spaces
-
-### What steps will reproduce the problem?
-
-- Create one repository with a space in the path (and initialize annex in it)
-- Clone that repo to an other directory (and initialize annex also in that)
-- add a file to the first repository in the annex way
-- chdir to the second repository and try to get that file, it won't work (also after git pull or git sync pull)
-
-Check this typescripts for a more detailed description
-
-<http://uz.sns.it/~enrico/git-annex-bugreport.txt>
-
-<http://pastebin.com/f8wkDNrG> (thanks mhameed for that data)
-
-
-### What version of git-annex are you using? On what operating system?
-
-I'm using debian testing (jessie) on a i386 machine.
-
-`git-annex` version: 4.20130521 (according to apt data and `git annex version`)
-
-`git-annex` build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP
-
-`git` version: 1.7.10.4
-
-
-### Please provide any additional information below.
-
-I don't use git annex assistant nor the webapp
-
-> Tested and only file:// and not other urls have this problem.
-> guilhem provided a fix. [[done]] --[[Joey]]
diff --git a/doc/bugs/Unclear_output_during_git-annex_copy.mdwn b/doc/bugs/Unclear_output_during_git-annex_copy.mdwn
new file mode 100644
index 000000000..12ae9a745
--- /dev/null
+++ b/doc/bugs/Unclear_output_during_git-annex_copy.mdwn
@@ -0,0 +1,17 @@
+I noticed the following output during a `git-annex sync --content` run
+which I found a little disconcerting:
+
+ copy file.idx copy file.idx (gpg) (checking s3...) (to s3...)
+ ok
+ copy file.pack copy file.pack (checking s3...) (to s3...)
+ ok
+ (Recording state in git...)
+
+It's confusing that seemingly only the first file got encrypted (gpg).
+
+Fortunately, it appears that actually all files were encrypted (only GPGHMAC file names in remote location),
+so this is hopefully just a cosmetic issue.
+
+git-annex version: 5.20141024-g613f396
+
+> removed confusing output, [[done]] --[[Joey]]
diff --git a/doc/bugs/Unfortunate_interaction_with_Calibre.mdwn b/doc/bugs/Unfortunate_interaction_with_Calibre.mdwn
deleted file mode 100644
index 16921a06e..000000000
--- a/doc/bugs/Unfortunate_interaction_with_Calibre.mdwn
+++ /dev/null
@@ -1,24 +0,0 @@
-# Calibre
-
-Calibre is a somewhat popular eBook management package that's also free software. <http://calibre-ebook.com/>
-
-Install via
- # apt-get install calibre
-
-There is a somewhat unfortunate interaction between Calibre and git-annex...
-
-* git-annex makes its files become read-only. By the way, that's not quite obvious from the documentation; I suggest making that more prominent.
-* Calibre modifies files (not quite sure of semantics, how, or why) when doing various operations, notably such as when copying a book from one's library to one's portable reading device.
-
-These don't play well together, sadly.
-
-I'd expect most of the issue to sit on the Calibre side, and have reported it as a bug.
-[Calibre bug #739045](https://bugs.launchpad.net/calibre/+bug/739045)
-Preliminary indication is that they're treating it as a functionality change they'll decline to fix. Which isn't entirely unreasonable - I anticipated as much, and I don't want to treat that as a bad/wrong decision.
-
-However, I think it's:
-* Unfortunate, as fitting Calibre together with git-annex seems like a neat idea.
-* Useful to make sure that this kind of "doesn't play well together" condition is documented, even if only as a bug report.
-
-> [[done]]; the assistant uses direct mode by default now to avoid
-> this kind of thing. --[[Joey]]
diff --git a/doc/bugs/Unfortunate_interaction_with_Calibre/comment_1_7cb5561f11dfc7726a537ddde2477489._comment b/doc/bugs/Unfortunate_interaction_with_Calibre/comment_1_7cb5561f11dfc7726a537ddde2477489._comment
deleted file mode 100644
index 35a2cdb3f..000000000
--- a/doc/bugs/Unfortunate_interaction_with_Calibre/comment_1_7cb5561f11dfc7726a537ddde2477489._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 1"
- date="2011-03-21T13:15:03Z"
- content="""
-Maybe I will run into issues myself somewhere down the road, but generally speaking, I really really like the fact that files are immutable by default.
-"""]]
diff --git a/doc/bugs/Unfortunate_interaction_with_Calibre/comment_2_b8ae4bc589c787dacc08ab2ee5491d6e._comment b/doc/bugs/Unfortunate_interaction_with_Calibre/comment_2_b8ae4bc589c787dacc08ab2ee5491d6e._comment
deleted file mode 100644
index 719451976..000000000
--- a/doc/bugs/Unfortunate_interaction_with_Calibre/comment_2_b8ae4bc589c787dacc08ab2ee5491d6e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 2"
- date="2011-03-31T19:32:25Z"
- content="""
-One option would be to use the new [[news/sharebox_a_FUSE_filesystem_for_git-annex]], which would hide the immutable file details from Calibre, and proxy any changes it made through to git-annex as a series of `git annex unlock; modify; git-annex lock`
-"""]]
diff --git a/doc/bugs/Unfortunate_interaction_with_Calibre/comment_3_977c5f6b82f9e18cdd81d57005bb8b89._comment b/doc/bugs/Unfortunate_interaction_with_Calibre/comment_3_977c5f6b82f9e18cdd81d57005bb8b89._comment
deleted file mode 100644
index e23490ac4..000000000
--- a/doc/bugs/Unfortunate_interaction_with_Calibre/comment_3_977c5f6b82f9e18cdd81d57005bb8b89._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="comment 3"
- date="2013-01-17T20:59:03Z"
- content="""
-I'd say that the best option now is to use [[direct_mode]] for repositories with files that you want to let programs modify directly.
-"""]]
diff --git a/doc/bugs/Unfortunate_interaction_with_Calibre/comment_4_ff7d2e9a39dfe12b975d04650ac57cc4._comment b/doc/bugs/Unfortunate_interaction_with_Calibre/comment_4_ff7d2e9a39dfe12b975d04650ac57cc4._comment
deleted file mode 100644
index 750ba8474..000000000
--- a/doc/bugs/Unfortunate_interaction_with_Calibre/comment_4_ff7d2e9a39dfe12b975d04650ac57cc4._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkvSZ1AFJdY_1FeutZr_KWeqtzjZta1PNE"
- nickname="Thedward"
- subject="comment 4"
- date="2013-01-18T16:30:59Z"
- content="""
-I couldn't get calibre to work with sharebox either, but I can confirm it works fine when I use git-annex in direct mode.
-"""]]
diff --git a/doc/bugs/Unfortunate_interaction_with_Calibre/comment_5_fc4d5301797589e92cc9a24697b2155d._comment b/doc/bugs/Unfortunate_interaction_with_Calibre/comment_5_fc4d5301797589e92cc9a24697b2155d._comment
deleted file mode 100644
index a54d53c58..000000000
--- a/doc/bugs/Unfortunate_interaction_with_Calibre/comment_5_fc4d5301797589e92cc9a24697b2155d._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="https://lot-of-stuff.info/"
- nickname="__DL__"
- subject="Another solution."
- date="2013-08-13T16:39:17Z"
- content="""
-calibre store all the metadata for safekeeping of the metadata
-(author, title...).
-
-If like me you do not like much direct mode (because of its not so
-cool interaction with plain git), you could use the largfiles config
-to let those files in plain git. You will then also need something for
-the database. See [[tips/Git_annex_and_Calibre]] for a full solution.
-
-"""]]
diff --git a/doc/bugs/Uninstalling_removes_libcrypto.dll.mdwn b/doc/bugs/Uninstalling_removes_libcrypto.dll.mdwn
new file mode 100644
index 000000000..642bcef8b
--- /dev/null
+++ b/doc/bugs/Uninstalling_removes_libcrypto.dll.mdwn
@@ -0,0 +1,25 @@
+### Please describe the problem.
+Just feedback to you:
+After I uninstalled git-annex (Windows), traditional git was not able to push changes to an origin server via ssh.
+Instead I got an error "libcrypto.dll is missing".
+Installing git once again after uninstalling git-annex solved the problem.
+
+### What steps will reproduce the problem?
+Installing and uninstalling git-annex.
+
+### What version of git-annex are you using? On what operating system?
+File "git-annex-installer.exe" downloaded 2014-11-09.
+Windows 8.
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> [[fixed|done]]; git-annex no longer includes its own ssh, and uses the
+> one from msysgit. --[[Joey]]
diff --git a/doc/bugs/Uninstalling_removes_libcrypto.dll/comment_1_0a0c8c62ca4d314f14d50306546c33c2._comment b/doc/bugs/Uninstalling_removes_libcrypto.dll/comment_1_0a0c8c62ca4d314f14d50306546c33c2._comment
new file mode 100644
index 000000000..941f41361
--- /dev/null
+++ b/doc/bugs/Uninstalling_removes_libcrypto.dll/comment_1_0a0c8c62ca4d314f14d50306546c33c2._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-12-01T23:15:42Z"
+ content="""
+Hmm, git-annex bundles a libcrypto.dll, and so the uninstallation
+process should remove that.
+
+I suspect what's going on is that the uninstaller is accidentially
+being told the full path to the library, as it was on the build system.
+
+Hmm, doesn't seem so, relevant code is:
+
+ removefilesFrom d = mapM_ (\f -> delete [RebootOK] $ fromString $ d ++ "/" ++ takeFileName f)
+
+Note `takeFileName`..
+
+Alternate theory: Maybe if git-annex is installed before git, it
+installs libcrypto.dll. Then maybe git's installer sees that is installed
+and doesn't install its own copy.
+"""]]
diff --git a/doc/bugs/Uninstalling_removes_libcrypto.dll/comment_2_68f84ce2eb95567012ed4ff20524c166._comment b/doc/bugs/Uninstalling_removes_libcrypto.dll/comment_2_68f84ce2eb95567012ed4ff20524c166._comment
new file mode 100644
index 000000000..80d9a36c9
--- /dev/null
+++ b/doc/bugs/Uninstalling_removes_libcrypto.dll/comment_2_68f84ce2eb95567012ed4ff20524c166._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2014-12-02T17:02:05Z"
+ content="""
+Tried uninistalling git-annex on my windows test box, and there was
+no ssh command for git to use. git-annex provides a ssh, does msysgit
+also provide one now? Lacking bandwidth to check.
+"""]]
diff --git a/doc/bugs/Uninstalling_removes_libcrypto.dll/comment_3_fad04c6f0c4d46b648d6cabfb59d92cf._comment b/doc/bugs/Uninstalling_removes_libcrypto.dll/comment_3_fad04c6f0c4d46b648d6cabfb59d92cf._comment
new file mode 100644
index 000000000..96851c557
--- /dev/null
+++ b/doc/bugs/Uninstalling_removes_libcrypto.dll/comment_3_fad04c6f0c4d46b648d6cabfb59d92cf._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 3"
+ date="2014-12-03T17:26:08Z"
+ content="""
+msysgit does ship a ssh, in Git/bin/
+
+So, when git-annex is installed on top of git, it installs its own ssh there, overwriting git's. Removing git-annex will then remove the ssh, and leave git w/o a ssh.
+So, that's clearly wrong, although I was not able to reproduce git-annex's ssh being left behind. That must be what happened though, since git's ssh is not linked with libcrypto.dll.
+
+In any case, there's no reason for git-annex to ship a ssh, since msysgit already does. So I will fix the bug that way.
+"""]]
diff --git a/doc/bugs/Uninstalling_removes_libcrypto.dll/comment_4_8d36cf821c62207df0a3b1fda5758fae._comment b/doc/bugs/Uninstalling_removes_libcrypto.dll/comment_4_8d36cf821c62207df0a3b1fda5758fae._comment
new file mode 100644
index 000000000..c048d7e54
--- /dev/null
+++ b/doc/bugs/Uninstalling_removes_libcrypto.dll/comment_4_8d36cf821c62207df0a3b1fda5758fae._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 4"
+ date="2014-12-03T17:36:58Z"
+ content="""
+Except it turns out that Git/bin is not in PATH by default.
+
+So, instead, git-annex will bundle ssh, but install it to Git/cmd, which is in PATH. This avoids the conflict and fixed [[bugs/Internal_server_error_while_adding_remote_server_on_Windows]]
+"""]]
diff --git a/doc/bugs/Uninstalling_removes_libcrypto.dll/comment_5_4741efcc77b1bf1125ef230a0278ca51._comment b/doc/bugs/Uninstalling_removes_libcrypto.dll/comment_5_4741efcc77b1bf1125ef230a0278ca51._comment
new file mode 100644
index 000000000..06b160ac9
--- /dev/null
+++ b/doc/bugs/Uninstalling_removes_libcrypto.dll/comment_5_4741efcc77b1bf1125ef230a0278ca51._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawktFJRkdqZvsZB59DrY-N1988HkjSIIZ5w"
+ nickname="Michał"
+ subject="More details."
+ date="2014-12-03T21:56:35Z"
+ content="""
+Just to put more info: Yes, I installed git-annex when git been already installed.
+"""]]
diff --git a/doc/bugs/Unknown_command___39__list__39__.mdwn b/doc/bugs/Unknown_command___39__list__39__.mdwn
deleted file mode 100644
index f08fc6eef..000000000
--- a/doc/bugs/Unknown_command___39__list__39__.mdwn
+++ /dev/null
@@ -1,15 +0,0 @@
-### Please describe the problem.
-
-The man page claims there exists a query command 'list' but:
-
- % git annex list somefile
- git-annex: Unknown command 'list'
-
-### What version of git-annex are you using? On what operating system?
-
-man page online and git-annex version 4.20130909.
-
-> Your last line explains the problem. The online man page
-> documents the latest release, or in some cases
-> unrelased git version. You have a version 2 releases old installed.
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/Unknown_command___39__list__39__/comment_1_c625d03d1ed2019141ac9202f933466d._comment b/doc/bugs/Unknown_command___39__list__39__/comment_1_c625d03d1ed2019141ac9202f933466d._comment
deleted file mode 100644
index 7566dc1ef..000000000
--- a/doc/bugs/Unknown_command___39__list__39__/comment_1_c625d03d1ed2019141ac9202f933466d._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://cstork.org/"
- nickname="Chris Stork"
- subject="News page stopped listing latest releases?"
- date="2013-09-30T16:08:18Z"
- content="""
-Ah, cabal tells me that 4.20130927 is out now. I missed that because I thought that the [News](http://git-annex.branchable.com/news/) page is 'authoritative' :-) and it's still advertising 4.20130909. Sorry about that.
-"""]]
diff --git a/doc/bugs/Unknown_command___39__list__39__/comment_2_800e1b6417768bdadda311ebfb5df637._comment b/doc/bugs/Unknown_command___39__list__39__/comment_2_800e1b6417768bdadda311ebfb5df637._comment
deleted file mode 100644
index f8592b571..000000000
--- a/doc/bugs/Unknown_command___39__list__39__/comment_2_800e1b6417768bdadda311ebfb5df637._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.8.80"
- subject="comment 2"
- date="2013-09-30T16:23:31Z"
- content="""
-I've had a bit of a mess with cabal. First my release scripts apparently broke and didn't upload the last 2 releases there. Then when I manually fixed that, hackage has been upgraded to a new version, which is broken and will not accept tarballs > 1 mb. So I had to re-upload git-annex hacked to fit in 1 mb (removing all documentation), and I did so from a current git snapshot. Meh.
-"""]]
diff --git a/doc/bugs/Unknown_command___39__list__39__/comment_3_35dfc75ce9efffff139f8929dc311e29._comment b/doc/bugs/Unknown_command___39__list__39__/comment_3_35dfc75ce9efffff139f8929dc311e29._comment
deleted file mode 100644
index 1899029ad..000000000
--- a/doc/bugs/Unknown_command___39__list__39__/comment_3_35dfc75ce9efffff139f8929dc311e29._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://cstork.org/"
- nickname="Chris Stork"
- subject="comment 3"
- date="2013-10-04T11:17:42Z"
- content="""
-Ah, I could have sworn that I also tried to update via cabal but didn't see a new version and this explains why...
-
-Your release script might also have a problem with updating the [[News]] page...
-"""]]
diff --git a/doc/bugs/Unknown_remote_type_webdav.mdwn b/doc/bugs/Unknown_remote_type_webdav.mdwn
deleted file mode 100644
index 7c6f1ae36..000000000
--- a/doc/bugs/Unknown_remote_type_webdav.mdwn
+++ /dev/null
@@ -1,8 +0,0 @@
-When I attempt to setup a [box.com special remote](http://git-annex.branchable.com/tips/using_box.com_as_a_special_remote/) I get the following error:
-
- git-annex: Unknown remote type webdav
-
-I'm using the Linux prebuilt tarball. Does it not include webdav support?
-
-> The amd64 standalone tarball was indeed built without it for the last
-> release. Fixed that. [[done]] --[[Joey]]
diff --git a/doc/bugs/Unnecessary_remote_transfers.mdwn b/doc/bugs/Unnecessary_remote_transfers.mdwn
deleted file mode 100644
index 04ede7a02..000000000
--- a/doc/bugs/Unnecessary_remote_transfers.mdwn
+++ /dev/null
@@ -1,27 +0,0 @@
-### Please describe the problem.
-This is related to [[http://git-annex.branchable.com/bugs/assistant_does_not_always_use_repo_cost_info_when_queueing_downloads/]]
-
-### What steps will reproduce the problem?
-1. Make a client repo on two machines on the local network.
-2. Pair them.
-3. Make a remote transfer repo.
-4. Set up Jabber on both local machines.
-5. Put a large file into the annex on one of the local machines.
-6. Watch as the source client repo copies the file directly to the local paired machine, but also copies it to the remote transfer repo.
-7. Wait for the local paired transfer to finish.
-8. Manually disable syncing to the remote transfer repo.
-9. Manually reenable it.
-10. Watch as the remote transfer is not resumed.
-
-### What version of git-annex are you using? On what operating system?
-Using the 1 Nov Linux tarball, Ubuntu Raring.
-
-### Please provide any additional information below.
-This is a problem because unless I manually disable the remote repo, it will continue uploading the large file until it finishes, which uses the limited upstream bandwidth on my Internet connection--and this could take hours depending on the size of the file.
-
-The remote transfer wasn't even necessary to begin with, because it already had a direct connection to the local paired repo. But even so, it should at least abort the remote transfer when the local transfer finishes.
-
-Thanks for your work on git-annex assistant.
-
-> From a re-read of the comments, this was resolved satisfactorily,
-> and I don't need to make any changes. [[done]] --[[Joey]]
diff --git a/doc/bugs/Unnecessary_remote_transfers/comment_10_b778fbb1386f0f51bf057ffacd590ebb._comment b/doc/bugs/Unnecessary_remote_transfers/comment_10_b778fbb1386f0f51bf057ffacd590ebb._comment
deleted file mode 100644
index 8c985243a..000000000
--- a/doc/bugs/Unnecessary_remote_transfers/comment_10_b778fbb1386f0f51bf057ffacd590ebb._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmNu4V5fvpLlBhaCUfXXOB0MI5NXwh8SkU"
- nickname="Adam"
- subject="comment 10"
- date="2013-11-03T02:19:04Z"
- content="""
-Thanks, Joey. I didn't realize that there were two instances of the assistant running.
-
-Forgive my ignorance, but if I disable the assistant running in the backup repo, will the other assistant still backup files to it?
-
-Also, from a UI perspective, does the webapp currently not seem to support secondary internal drives, at least in a useful way?
-"""]]
diff --git a/doc/bugs/Unnecessary_remote_transfers/comment_11_55430eac842d0a192dc7f41d7730e4d5._comment b/doc/bugs/Unnecessary_remote_transfers/comment_11_55430eac842d0a192dc7f41d7730e4d5._comment
deleted file mode 100644
index 808c5bca6..000000000
--- a/doc/bugs/Unnecessary_remote_transfers/comment_11_55430eac842d0a192dc7f41d7730e4d5._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.47"
- subject="comment 11"
- date="2013-11-03T02:32:47Z"
- content="""
-Yes, either of the assistants will still back up files to it, as long as they have it configured as a git remote. The same way that your transfer repository is (probably) not running the git-annex assistant.
-
-It does sound like using the removable drive UI would have saved you some trouble. I'm not sure why the webapp would not list a llvm device as a removable drive -- from inspecting the code, it seems like it would not be filtered out, as long as /proc/mounts shows the decive as /dev/something (I don't have a llvm device handy to check what it looks like).
-"""]]
diff --git a/doc/bugs/Unnecessary_remote_transfers/comment_1_00c18e07678dc513a02d974fe059df73._comment b/doc/bugs/Unnecessary_remote_transfers/comment_1_00c18e07678dc513a02d974fe059df73._comment
deleted file mode 100644
index 7baa58489..000000000
--- a/doc/bugs/Unnecessary_remote_transfers/comment_1_00c18e07678dc513a02d974fe059df73._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.47"
- subject="comment 1"
- date="2013-11-02T19:54:44Z"
- content="""
-In what order does the webapp list your repositories?
-
-When a new file appears, it will always go through the list of repositories in order, and try to transfer the file to each in turn, unless the configuration indicates it shouldn't. So, if the remote transfer repo is listed before the local repo, it will first upload the file to the transfer repo, and then upload it to the local repo. (And then later on, remove it from the transfer repo, since the file has reached all clients, probably.) OTOH, if the local repo comes first, it will upload the file to it over the LAN, and then when it comes to the transfer repo, if the file has successfully been sent to all clients, the transfer repo will no longer want it, and so no expensive upload is done over the internet.
-
-You can re-order the repository list in the webapp by dragging them up and down. It should default to having your locally paired repos first, unless you've changed it. If you think it came up with the wrong order, paste in your .git/config before you re-order the repositories..
-"""]]
diff --git a/doc/bugs/Unnecessary_remote_transfers/comment_2_2e9992dbfceabd6df535a2770626de16._comment b/doc/bugs/Unnecessary_remote_transfers/comment_2_2e9992dbfceabd6df535a2770626de16._comment
deleted file mode 100644
index cc0cb067e..000000000
--- a/doc/bugs/Unnecessary_remote_transfers/comment_2_2e9992dbfceabd6df535a2770626de16._comment
+++ /dev/null
@@ -1,35 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmNu4V5fvpLlBhaCUfXXOB0MI5NXwh8SkU"
- nickname="Adam"
- subject="comment 2"
- date="2013-11-02T22:48:18Z"
- content="""
-The webapp has the remote repo at the bottom of the list. But here's .git/config. It has a high repo cost for the local paired repo, and no cost listed for the remote one:
-
-[[!format sh \"\"\"
-[core]
- repositoryformatversion = 0
- filemode = true
- bare = false
- logallrefupdates = true
-[annex]
- uuid = 946f9095-588b-4421-b66a-4a1e5632ff6b
- version = 3
- direct = true
- diskreserve = 1 megabyte
- numcopies = 1
- debug = false
-[gc]
- auto = 0
-[remote \"Onyx\"]
- url = ssh://me@git-annex-Onyx.local-me_annex/~/annex/
- annex-uuid = 80709bc2-3cbe-434b-b7b9-306278b9a4e9
- annex-cost = 125.0
- fetch = +refs/heads/*:refs/remotes/Onyx/*
-[remote \"Remote\"]
- annex-rsyncurl = username@git-annex-example.net-username_annex:annex/
- annex-uuid = 33930bae-63d2-4a52-b330-58872aaeb1bf
- fetch =
- annex-sync = true
-\"\"\"]]
-"""]]
diff --git a/doc/bugs/Unnecessary_remote_transfers/comment_3_a98f3091a6a658919f0562cf396439c2._comment b/doc/bugs/Unnecessary_remote_transfers/comment_3_a98f3091a6a658919f0562cf396439c2._comment
deleted file mode 100644
index b6900f339..000000000
--- a/doc/bugs/Unnecessary_remote_transfers/comment_3_a98f3091a6a658919f0562cf396439c2._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmNu4V5fvpLlBhaCUfXXOB0MI5NXwh8SkU"
- nickname="Adam"
- subject="comment 3"
- date="2013-11-02T22:59:18Z"
- content="""
-Also, I just realized that it's uploading two large files to my remote transfer repo, even though I already have both files in my local paired repo on both systems; i.e. there's no need to send it to the transfer repo at all. And it was yesterday when the two files were transferred. So I have no idea why today it thinks it needs to upload them to the transfer repo. :/
-"""]]
diff --git a/doc/bugs/Unnecessary_remote_transfers/comment_4_417c1e8e27ee1a1f9ebf9160560605c5._comment b/doc/bugs/Unnecessary_remote_transfers/comment_4_417c1e8e27ee1a1f9ebf9160560605c5._comment
deleted file mode 100644
index b0d4c1146..000000000
--- a/doc/bugs/Unnecessary_remote_transfers/comment_4_417c1e8e27ee1a1f9ebf9160560605c5._comment
+++ /dev/null
@@ -1,96 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmNu4V5fvpLlBhaCUfXXOB0MI5NXwh8SkU"
- nickname="Adam"
- subject="Super confused"
- date="2013-11-02T23:30:41Z"
- content="""
-I think now I'm double- or triple-confused. Here is me@desktop:~/annex/.git/config:
-
-[[!format sh \"\"\"
-[core]
- repositoryformatversion = 0
- filemode = true
- bare = false
- logallrefupdates = true
-[annex]
- uuid = 80709bc2-3cbe-434b-b7b9-306278b9a4e9
- version = 3
- direct = true
- fscknudge = true
-[gc]
- auto = 0
-[remote \"laptop\"]
- url = ssh://me@git-annex-laptop-me_annex/~/annex/
- annex-uuid = 946f9095-588b-4421-b66a-4a1e5632ff6b
- annex-cost = 175.0
- fetch = +refs/heads/*:refs/remotes/laptop/*
-[remote \"Remote\"]
- annex-rsyncurl = username@example.net:annex/
- annex-uuid = 33930bae-63d2-4a52-b330-58872aaeb1bf
- fetch =
- annex-sync = false
-[remote \"backupOndesktop\"]
- url = /mnt/debian/home/me/annex-backup
- annex-uuid = 86535965-6ca7-4bf3-89af-bca3a07f96f9
- fetch = +refs/heads/*:refs/remotes/backupOndesktop/*
-\"\"\"]]
-
-What I have set up (or intended to set up) is:
-
-* Client: me@laptop:~/annex
-* Client: me@desktop:~/annex
-* Transfer: username@example.net:~/annex
-* Full Backup: me@desktop:/mnt/debian/home/me/annex-backup
-
-What I expected was that:
-
-1. The two Client repos would sync directly over the LAN whenever possible.
-2. The transfer repo would be used only to sync the laptop and desktop, and then only if my laptop were not on the LAN with my desktop.
-3. The Full Backup repo would be synced directly with the me@desktop Client repo, within the same system, from one hard disk to the other.
-
-But what I'm seeing is...not quite that.
-
-1. It's very confusing (to me, at least) that on my desktop system I can look at my annex setup from the \"perspective\" of both local repos. When I \"switch\" to the other repo, the setup looks different: even the same repos can have different names and descriptions, and can be enabled and disabled independently depending on the \"perspective\"...but their Type is still the same.
-
-2. Looking from the \"perspective\" of the Full Backup repo, I'm seeing files being transferred to the Transfer repo, even though those files are already present in both Client repos, and even though the webapp says that the Full Backup repo has been synced. When I disable and reenable the Transfer repo, it starts those transfers over again, even though they aren't necessary. For example, here is the log from disabling and reenabling the Transfer repo from the \"perspective\" of the Full Backup repo:
-
-[[!format sh \"\"\"
-[2013-11-02 18:24:35 CDT] main: Syncing with example.net_annex
-(gpg)
-gpg: Terminated caught ... exiting
-[2013-11-02 18:24:49 CDT] call: git [\"--git-dir=/mnt/debian/home/me/annex-backup/.git\",\"--work-tree=/mnt/debian/home/me/annex-backup\",\"config\",\"remote.example.net_annex.annex-sync\",\"true\"]
-[2013-11-02 18:24:49 CDT] read: git [\"config\",\"--null\",\"--list\"]
-[2013-11-02 18:24:49 CDT] read: git [\"config\",\"--null\",\"--list\"]
-[2013-11-02 18:24:49 CDT] read: git [\"config\",\"--null\",\"--list\"]
-[2013-11-02 18:24:49 CDT] main: Syncing with example.net_annex
-[2013-11-02 18:24:49 CDT] read: git [\"--git-dir=/mnt/debian/home/me/annex-backup/.git\",\"--work-tree=/mnt/debian/home/me/annex-backup\",\"symbolic-ref\",\"HEAD\"]
-[2013-11-02 18:24:49 CDT] read: git [\"--git-dir=/mnt/debian/home/me/annex-backup/.git\",\"--work-tree=/mnt/debian/home/me/annex-backup\",\"show-ref\",\"refs/heads/master\"]
-[2013-11-02 18:24:49 CDT] read: git [\"--git-dir=/mnt/debian/home/me/annex-backup/.git\",\"--work-tree=/mnt/debian/home/me/annex-backup\",\"show-ref\",\"git-annex\"]
-[2013-11-02 18:24:49 CDT] read: git [\"--git-dir=/mnt/debian/home/me/annex-backup/.git\",\"--work-tree=/mnt/debian/home/me/annex-backup\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
-[2013-11-02 18:24:49 CDT] read: git [\"--git-dir=/mnt/debian/home/me/annex-backup/.git\",\"--work-tree=/mnt/debian/home/me/annex-backup\",\"log\",\"refs/heads/git-annex..2c42d607c099b6ec4a20603b809f44d161e42489\",\"--oneline\",\"-n1\"]
-[2013-11-02 18:24:49 CDT] read: git [\"--git-dir=/mnt/debian/home/me/annex-backup/.git\",\"--work-tree=/mnt/debian/home/me/annex-backup\",\"symbolic-ref\",\"HEAD\"]
-[2013-11-02 18:24:49 CDT] read: git [\"--git-dir=/mnt/debian/home/me/annex-backup/.git\",\"--work-tree=/mnt/debian/home/me/annex-backup\",\"show-ref\",\"refs/heads/master\"]
-[2013-11-02 18:24:49 CDT] TransferScanner: starting scan of [Remote { name =\"example.net_annex\" }]
-[2013-11-02 18:24:49 CDT] read: git [\"--git-dir=/mnt/debian/home/me/annex-backup/.git\",\"--work-tree=/mnt/debian/home/me/annex-backup\",\"ls-files\",\"--cached\",\"-z\",\"--\"]
-[2013-11-02 18:24:49 CDT] TransferScanner: queued Upload UUID \"33930bae-63d2-4a52-b330-58872aaeb1bf\" video.flv Nothing : expensive scan found missing object
-[2013-11-02 18:24:49 CDT] Transferrer: Transferring: Upload UUID \"33930bae-63d2-4a52-b330-58872aaeb1bf\" video.flv Nothing
-[2013-11-02 18:24:49 CDT] TransferScanner: queued Upload UUID \"33930bae-63d2-4a52-b330-58872aaeb1bf\" image.jpg Nothing : expensive scan found missing object
-[2013-11-02 18:24:49 CDT] call: /home/me/.bin/git-annex.linux/git-annex [\"transferkeys\",\"--readfd\",\"35\",\"--writefd\",\"34\"]
-[2013-11-02 18:24:49 CDT] TransferScanner: queued Upload UUID \"33930bae-63d2-4a52-b330-58872aaeb1bf\" linux-image-3.8.0-29-generic_3.8.0-29.42_i386.deb Nothing : expensive scan found missing object
-[2013-11-02 18:24:49 CDT] TransferScanner: finished scan of [Remote { name =\"example.net_annex\" }]
-[2013-11-02 18:24:49 CDT] read: git [\"--git-dir=/mnt/debian/home/me/annex-backup/.git\",\"--work-tree=/mnt/debian/home/me/annex-backup\",\"show-ref\",\"git-annex\"]
-[2013-11-02 18:24:49 CDT] read: git [\"--git-dir=/mnt/debian/home/me/annex-backup/.git\",\"--work-tree=/mnt/debian/home/me/annex-backup\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
-[2013-11-02 18:24:49 CDT] read: git [\"--git-dir=/mnt/debian/home/me/annex-backup/.git\",\"--work-tree=/mnt/debian/home/me/annex-backup\",\"log\",\"refs/heads/git-annex..2c42d607c099b6ec4a20603b809f44d161e42489\",\"--oneline\",\"-n1\"]
-[2013-11-02 18:24:49 CDT] chat: git [\"--git-dir=/mnt/debian/home/me/annex-backup/.git\",\"--work-tree=/mnt/debian/home/me/annex-backup\",\"cat-file\",\"--batch\"]
-[2013-11-02 18:24:49 CDT] read: git [\"config\",\"--null\",\"--list\"]
-[2013-11-02 18:24:49 CDT] TransferWatcher: transfer starting: Upload UUID \"33930bae-63d2-4a52-b330-58872aaeb1bf\" video.flv Nothing
-(gpg) [2013-11-02 18:24:49 CDT] chat: gpg [\"--batch\",\"--no-tty\",\"--use-agent\",\"--quiet\",\"--trust-model\",\"always\",\"--batch\",\"--passphrase-fd\",\"20\",\"--symmetric\",\"--force-mdc\",\"--no-textmode\"]
-[2013-11-02 18:24:50 CDT] call: git [\"--git-dir=/mnt/debian/home/me/annex-backup/.git\",\"--work-tree=/mnt/debian/home/me/annex-backup\",\"config\",\"remote.example.net_annex.annex-sync\",\"false\"]
-[2013-11-02 18:24:50 CDT] read: git [\"config\",\"--null\",\"--list\"]
-[2013-11-02 18:24:50 CDT] read: git [\"config\",\"--null\",\"--list\"]
-[2013-11-02 18:24:50 CDT] read: git [\"config\",\"--null\",\"--list\"]
-
-gpg: Terminated caught ... exiting\"\"\"]]
-
-I have no idea why it's doing that, because all three of those files are already in both Client repos and the Full Backup repo.
-"""]]
diff --git a/doc/bugs/Unnecessary_remote_transfers/comment_5_eb5a2717a1f0c7bb761d2a7866b23def._comment b/doc/bugs/Unnecessary_remote_transfers/comment_5_eb5a2717a1f0c7bb761d2a7866b23def._comment
deleted file mode 100644
index 0e2ec4ec8..000000000
--- a/doc/bugs/Unnecessary_remote_transfers/comment_5_eb5a2717a1f0c7bb761d2a7866b23def._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmNu4V5fvpLlBhaCUfXXOB0MI5NXwh8SkU"
- nickname="Adam"
- subject="Deleting repos from different perspectives"
- date="2013-11-02T23:33:48Z"
- content="""
-One other thing, sorry, but I think this is important: From the perspective of the Full Backup repo, I set the Transfer repo to be deleted, thinking that would prevent the desktop's Client and Full Backup repos from syncing through the Transfer repo. But then when I switch to the perspective of the desktop's Client repo, it is \"cleaning out\" the Transfer repo--but I wanted the Transfer repo to be used for syncing the two Client repos! So I set it back to Transfer instead of Unwanted...but then when I switch back to the Full Backup perspective, the Transfer repo is no longer Unwanted.
-"""]]
diff --git a/doc/bugs/Unnecessary_remote_transfers/comment_6_89f756db1f3f2e60a3bd1f35f55fee43._comment b/doc/bugs/Unnecessary_remote_transfers/comment_6_89f756db1f3f2e60a3bd1f35f55fee43._comment
deleted file mode 100644
index 509cc3f3f..000000000
--- a/doc/bugs/Unnecessary_remote_transfers/comment_6_89f756db1f3f2e60a3bd1f35f55fee43._comment
+++ /dev/null
@@ -1,40 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmNu4V5fvpLlBhaCUfXXOB0MI5NXwh8SkU"
- nickname="Adam"
- subject="config from backup repo"
- date="2013-11-03T00:20:11Z"
- content="""
-Sorry for posting over and over again, just trying to provide info when I discover it.
-
-Here's **/mnt/debian/home/me/annex-backup/.git/config**
-
-[[!format sh \"\"\"
-[core]
- repositoryformatversion = 0
- filemode = true
- bare = false
- logallrefupdates = true
-[annex]
- uuid = 86535965-6ca7-4bf3-89af-bca3a07f96f9
- version = 3
- direct = true
- fscknudge = true
- diskreserve = 100 megabyte
- numcopies = 1
- debug = false
-[gc]
- auto = 0
-[remote \"desktop\"]
- url = /home/me/annex
- fetch = +refs/heads/*:refs/remotes/desktop/*
- annex-uuid = 80709bc2-3cbe-434b-b7b9-306278b9a4e9
-[remote \"Remote\"]
- annex-rsyncurl = username@example.net:annex/
- annex-uuid = 33930bae-63d2-4a52-b330-58872aaeb1bf
- annex-sync = false
- fetch =\"\"\"]]
-
-1. Should I remove the \"Remote\" Transfer repo from this config file to prevent it from using the Transfer repo? I only want this repo to sync directly with the other internal hard disk.
-
-2. Is it correct for git-annex to add this Transfer repo to this config file in the first place?
-"""]]
diff --git a/doc/bugs/Unnecessary_remote_transfers/comment_7_5aaf8766a7ba05c4f92715e5d5175a8f._comment b/doc/bugs/Unnecessary_remote_transfers/comment_7_5aaf8766a7ba05c4f92715e5d5175a8f._comment
deleted file mode 100644
index f117f15c1..000000000
--- a/doc/bugs/Unnecessary_remote_transfers/comment_7_5aaf8766a7ba05c4f92715e5d5175a8f._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.47"
- subject="comment 7"
- date="2013-11-03T00:45:09Z"
- content="""
-* The costs you show look fine.
-* Yes, deleting a repository in the webapp actually deletes it. It doesn't just remove the remote from .git/config. Most people using the webapp don't want to draw such a fine distinction, I think.
-* It's not a very usual configuration to have 2 repositories on the same machine with the git-annex assistant running in both. You might just want to configure the assistant to not run in the backup repository.
-
-Some of the things you've said suggest that the backup repository might not be immediately noticing when changes are pushed to it. Since its location is shown as /mnt/debian/home/me, I have to wonder if that's some NFS mount or other network filesystem causing problems.
-
-"""]]
diff --git a/doc/bugs/Unnecessary_remote_transfers/comment_8_e856b350632cc865d16d1995a6cdf065._comment b/doc/bugs/Unnecessary_remote_transfers/comment_8_e856b350632cc865d16d1995a6cdf065._comment
deleted file mode 100644
index 1177205e3..000000000
--- a/doc/bugs/Unnecessary_remote_transfers/comment_8_e856b350632cc865d16d1995a6cdf065._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmNu4V5fvpLlBhaCUfXXOB0MI5NXwh8SkU"
- nickname="Adam"
- subject="comment 8"
- date="2013-11-03T01:07:31Z"
- content="""
-> It's not a very usual configuration to have 2 repositories on the same machine with the git-annex assistant running in both. You might just want to configure the assistant to not run in the backup repository.
-
-Maybe that's the crux of the problem. But I'm not sure what I did wrong to make that happen. I have a second internal hard disk in my desktop system, and I wanted to put a Full Backup repo on it. I tried to add a \"Removable drive\" repo (since I sometimes unplug it to swap cables with a DVD drive), but since the assistant didn't detect any actual removable drives, that didn't work. So I used \"Add another repository\" and set it to a Full Backup repo. Is that the wrong way to do it? :)
-
-> Some of the things you've said suggest that the backup repository might not be immediately noticing when changes are pushed to it. Since its location is shown as /mnt/debian/home/me, I have to wonder if that's some NFS mount or other network filesystem causing problems.
-
-/mnt/debian is /dev/mapper/lvm-root, another internal disk. The disk is working fine. :)
-"""]]
diff --git a/doc/bugs/Unnecessary_remote_transfers/comment_9_64f831545b34b78452952cf49b5f5b05._comment b/doc/bugs/Unnecessary_remote_transfers/comment_9_64f831545b34b78452952cf49b5f5b05._comment
deleted file mode 100644
index 03127c4ad..000000000
--- a/doc/bugs/Unnecessary_remote_transfers/comment_9_64f831545b34b78452952cf49b5f5b05._comment
+++ /dev/null
@@ -1,25 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.47"
- subject="comment 9"
- date="2013-11-03T01:52:56Z"
- content="""
-Ok, since we don't have NFS craziness, I'm going to put theories about it not noticing incoming syncs on hold. (I think I probably misunderstood [this comment](http://git-annex.branchable.com/bugs/Unnecessary_remote_transfers/#comment-39490c318620c141e7557b7bcba0e5c8) and anyway the assistant has some throttling so won't always immediately load config changes that have been synced to it if some other config changes were loaded a minute before.)
-
-I think this behavior can probably be explained without resorting to any bugs, now that I have, I think, a full picture of the repository network:
-
-<pre>
-laptop <-> desktop <-> backup
- | | |
- v v v
- transfer (cloud)
-</pre>
-
-Now when a file is added to desktop, it immediately copies it to backup, which is on the same machine, so that happens quite quickly. Then it starts sending it across the LAN to laptop.
-
-Meanwhile, the assistant daemon running on backup wakes up, notices it's just received an object, and sees that this object is currently located on only desktop and backup, but not yet on laptop or transfer. Which means that it should send the object to transfer, from which it will eventually reach laptop.
-
-The only ways I can think of to avoid such an unnecessary transfer would be a) for desktop could somehow tell backup that it's in the process of sending the file to laptop or b) for a map of current state of the network to be constructed and maintained and analyzed automatically, so it it could conclude backup does not need to send files to transfer if they're already present on desktop. There is some discussion about this in [[design/assistant/syncing]]. Hard problem in general I think, although slightly less hard in this specific case since desktop and backup know they're in the same machine.
-
-But it should be easy to configure it so this doesn't happen. Just make backup not have the transfer repository configured as a remote (or just pause it syncing to there in the webapp). Or, don't run the assistant at all on backup (see `~/.config/git-annex/autostart`).
-"""]]
diff --git a/doc/bugs/Unused_files_not_being_reported:_Do_not_take_remote_tracking_branches_into_account__63__.mdwn b/doc/bugs/Unused_files_not_being_reported:_Do_not_take_remote_tracking_branches_into_account__63__.mdwn
deleted file mode 100644
index 99043aa25..000000000
--- a/doc/bugs/Unused_files_not_being_reported:_Do_not_take_remote_tracking_branches_into_account__63__.mdwn
+++ /dev/null
@@ -1,18 +0,0 @@
-### Please describe the problem.
-After branching from master/HEAD^ and deleting the master branch, I was surprised that content introduced in master/HEAD is not reported as unused. Instead, one first has to delete the synced/master branch, and also the remote-tracking branches for master.
-
-Would it make sense to discount synced/* and the remote tracking branches when gathering unused files? If the remote-tracking branch always reflects the state of the remote, tracking a branch should not cause annex to think that the local annex is somehow using all the files on the remote. Or would that be unsafe? As for the synced/* branches I'm not so sure.
-
-### What steps will reproduce the problem?
-Clone annex A to B.
-Branch off of master^ in B.
-Delete master.
-Issue git annex unused. --> Content introduced in master is still not reported as unused.
-Delete synced/master --> Cf. above.
-Delete origin/master and origin/synced/master --> Content is now reported as unused.
-
-### What version of git-annex are you using? On what operating system?
-
-5.20131230
-
-> Behaving as designed; [[done]] --[[Joey]]
diff --git a/doc/bugs/Unused_files_not_being_reported:_Do_not_take_remote_tracking_branches_into_account__63__/comment_1_8fe44da0581d9b8c6ab5fe6aea8d83d1._comment b/doc/bugs/Unused_files_not_being_reported:_Do_not_take_remote_tracking_branches_into_account__63__/comment_1_8fe44da0581d9b8c6ab5fe6aea8d83d1._comment
deleted file mode 100644
index a89f761a4..000000000
--- a/doc/bugs/Unused_files_not_being_reported:_Do_not_take_remote_tracking_branches_into_account__63__/comment_1_8fe44da0581d9b8c6ab5fe6aea8d83d1._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.46"
- subject="comment 1"
- date="2014-01-26T18:08:21Z"
- content="""
-I'd rather that people not lose the content of annexed files that are in either their current local branch, or the current branch of any other clones of the repository that they might be working on. This is why `unused` looks at the remote tracking branches, and the various sync branches.
-"""]]
diff --git a/doc/bugs/Update_dependency_on_certificate___62____61___1.3.3.mdwn b/doc/bugs/Update_dependency_on_certificate___62____61___1.3.3.mdwn
deleted file mode 100644
index 2a2a1469d..000000000
--- a/doc/bugs/Update_dependency_on_certificate___62____61___1.3.3.mdwn
+++ /dev/null
@@ -1,64 +0,0 @@
-What steps will reproduce the problem?
-
-Run:
-
- cabal install git-annex
-
-What is the expected output? What do you see instead?
-
-The current output is the following:
-
- $ cabal install git-annex
- Resolving dependencies...
- Configuring certificate-1.3.2...
- Building certificate-1.3.2...
- Preprocessing library certificate-1.3.2...
- [ 1 of 10] Compiling Data.Certificate.KeyDSA ( Data/Certificate/KeyDSA.hs, dist/build/Data/Certificate/KeyDSA.o )
- [ 2 of 10] Compiling Data.Certificate.KeyRSA ( Data/Certificate/KeyRSA.hs, dist/build/Data/Certificate/KeyRSA.o )
-
- Data/Certificate/KeyRSA.hs:64:27:
- `RSA.private_pub' is not a (visible) field of constructor `RSA.PrivateKey'
- cabal: Error: some packages failed to install:
- DAV-0.3 depends on certificate-1.3.2 which failed to install.
- authenticate-1.3.2 depends on certificate-1.3.2 which failed to install.
- certificate-1.3.2 failed during the building phase. The exception was:
- ExitFailure 1
- git-annex-3.20130107 depends on certificate-1.3.2 which failed to install.
- http-conduit-1.8.6.3 depends on certificate-1.3.2 which failed to install.
- http-reverse-proxy-0.1.1.1 depends on certificate-1.3.2 which failed to install.
- tls-1.0.3 depends on certificate-1.3.2 which failed to install.
- tls-extra-0.5.1 depends on certificate-1.3.2 which failed to install.
- yesod-1.1.7.2 depends on certificate-1.3.2 which failed to install.
- yesod-auth-1.1.3 depends on certificate-1.3.2 which failed to install.
-
-I'd rather get a message stating how awesome the software I just installed is. :)
-
-What version of git-annex are you using? On what operating system?
-
- * Debian (testing)
- * GHC 7.4.1
- * Cabal 1.14.0, cabal-install 0.14.0
- * cabal list git-annex says the installing version is: 3.20130107
-
-Please provide any additional information below.
-
-The certificate package version 1.3.2 does not seem to install properly with
-this version of GHC (I think).
-
-Version 1.3.3 solves the issue. I don't know if there is a way for me to
-override the dependency tree to try to force the version update with
-cabal-install, so maybe it's worth filing a bug.
-
-Thanks a lot for git-annex.
-
-> Welcome to cabal hell! This problem is why haskell's cabal system is not
-> a sufficient way for users to install git-annex, and we have to provide
-> prebuilt builds.
->
-> No change to git-annex can fix this problem. The problem is that
-> the old version of certificate got busted by some change to one of its
-> dependencies, and several libraries that git-annex depends on have not
-> yet been updated to use the new version of certificate. Once those
-> libraries get updated, it'll fix itself.
->
-> [[done]]; not git-annex bug. --[[Joey]]
diff --git a/doc/bugs/Upgrade_Does_not_Complete_on_OS_X.mdwn b/doc/bugs/Upgrade_Does_not_Complete_on_OS_X.mdwn
new file mode 100644
index 000000000..1fcaf80a9
--- /dev/null
+++ b/doc/bugs/Upgrade_Does_not_Complete_on_OS_X.mdwn
@@ -0,0 +1,32 @@
+### Please describe the problem.
+
+Every time git-annex launches (after a reboot). It prompts me to finish upgrade, even though the binary is not updated. (All my repos are set to not auto update and this happens on all my repos).
+
+
+### What steps will reproduce the problem?
+
+Relaunching git-annex.
+
+
+### What version of git-annex are you using? On what operating system?
+
+OS X 10.9
+
+git-annex version: 5.20140419-g477c0c0
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook external
+
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> This seems to be a duplicate of this bug: [[Upgrade_impossible_om_Mac_OSX]]. Please follow up there with any details you can provide. --[[Joey]]
+> [[dup|done]]
diff --git a/doc/bugs/Upgrade_impossible_om_Mac_OSX.mdwn b/doc/bugs/Upgrade_impossible_om_Mac_OSX.mdwn
new file mode 100644
index 000000000..de0392eaa
--- /dev/null
+++ b/doc/bugs/Upgrade_impossible_om_Mac_OSX.mdwn
@@ -0,0 +1,22 @@
+### Please describe the problem.
+When starting git-annex Version: 5.20140420-ga25b8bb Build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash on My MBP running OSX 10.9.2 I get a notification about: An upgrade of git-annex is available. (version 5.20140421)
+
+I then click UPGRADE and then get this message: Internal Server Error Cannot find old distribution bundle; not upgrading.
+
+### What steps will reproduce the problem?
+See problem description above, not sure what else to say.
+
+### What version of git-annex are you using? On what operating system?
+See problem description above, not sure what else to say.
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_10_8c1487635f724d017ebe2f8b7bc10e8d._comment b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_10_8c1487635f724d017ebe2f8b7bc10e8d._comment
new file mode 100644
index 000000000..13427f466
--- /dev/null
+++ b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_10_8c1487635f724d017ebe2f8b7bc10e8d._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="OK"
+ date="2014-05-21T18:19:30Z"
+ content="""
+so I'll watch this behavior with future updates and reply if I have more info
+"""]]
diff --git a/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_1_84e52a4d1502fd622bdb25e04b459292._comment b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_1_84e52a4d1502fd622bdb25e04b459292._comment
new file mode 100644
index 000000000..6ddb5ef30
--- /dev/null
+++ b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_1_84e52a4d1502fd622bdb25e04b459292._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="fixed"
+ date="2014-05-09T13:12:59Z"
+ content="""
+re-downloaded the old version, re-isntalled and now it actually starts downlaoding the new version => http://screencast.com/t/id2Ng57Z9
+
+NOT sure though, why it now uploads the new version to all repositories? i.e. box.com? IS there a reason for this?
+
+Transfers
+git-annex.dmg (for upgrade)→box.com 42% of 22.52 MiB
+"""]]
diff --git a/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_2_f2b109f6cf92f101d7f0afeb91605240._comment b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_2_f2b109f6cf92f101d7f0afeb91605240._comment
new file mode 100644
index 000000000..9ed8dade9
--- /dev/null
+++ b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_2_f2b109f6cf92f101d7f0afeb91605240._comment
@@ -0,0 +1,24 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="spoke too soon"
+ date="2014-05-09T13:23:52Z"
+ content="""
+Stuck in a loop, now with every restart of git-annex it downloads the update and then uploads it to all my repositories again:
+http://screencast.com/t/Ow7SlPVaS68
+
+And then it says:
+ Finished upgrading git-annex to version 5.20140420-ga25b8bb
+BUT that is the OLD version not the new one :-/
+
+NEXT TRY:
+
+killed all processes of git and git-annex, restart.
+
+Was greeted by:
+ An upgrade of git-annex is available.
+(version 5.20140421)
+
+Klicked the Upgrade button.
+Nothing happens, except that the upgrade notice disappeared :-/
+"""]]
diff --git a/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_3_df9b111aefea82b9d108495b79d7ffb4._comment b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_3_df9b111aefea82b9d108495b79d7ffb4._comment
new file mode 100644
index 000000000..32b067a97
--- /dev/null
+++ b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_3_df9b111aefea82b9d108495b79d7ffb4._comment
@@ -0,0 +1,24 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="comment 3"
+ date="2014-05-09T13:28:38Z"
+ content="""
+here is what the log looks like:
+
+[2014-05-09 15:23:22 SAST] main: starting assistant version 5.20140420-ga25b8bb
+(scanning...) [2014-05-09 15:23:23 SAST] Watcher: Performing startup scan
+[2014-05-09 15:23:24 SAST] Upgrader: An upgrade of git-annex is available. (version 5.20140421)
+(started...) [2014-05-09 15:25:10 SAST] main: warning git-annex has been shut down
+[2014-05-09 15:25:31 SAST] main: starting assistant version 5.20140420-ga25b8bb
+(scanning...) [2014-05-09 15:25:31 SAST] Watcher: Performing startup scan
+[2014-05-09 15:25:32 SAST] Upgrader: An upgrade of git-annex is available. (version 5.20140421)
+(started...) [2014-05-09 15:25:59 SAST] main: warning git-annex has been shut down
+
+[2014-05-09 15:27:14 SAST] main: starting assistant version 5.20140420-ga25b8bb
+(scanning...) [2014-05-09 15:27:14 SAST] Watcher: Performing startup scan
+[2014-05-09 15:27:15 SAST] Upgrader: An upgrade of git-annex is available. (version 5.20140421)
+(started...) [2014-05-09 15:27:46 SAST] main: starting assistant version 5.20140420-ga25b8bb
+(scanning...) [2014-05-09 15:27:46 SAST] Watcher: Performing startup scan
+(started...) [2014-05-09 15:27:48 SAST] Upgrader: An upgrade of git-annex is available. (version 5.20140421)
+"""]]
diff --git a/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_4_e3b5bc815376383bbd1f312cc1c32a41._comment b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_4_e3b5bc815376383bbd1f312cc1c32a41._comment
new file mode 100644
index 000000000..e55d370d9
--- /dev/null
+++ b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_4_e3b5bc815376383bbd1f312cc1c32a41._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 4"
+ date="2014-05-16T17:36:10Z"
+ content="""
+\"Cannot find old distribution bundle; not upgrading\"
+
+This message means that git-annex was unable to find where the old version was installed, which it needs to do in order to replace it with the new version. It looks for a `git-annex.app` directory, and could not find one. How did you install the old version, and to what location?
+
+I think it might try to upload the dmg file to a repository if that repository is set as a full backup and so wants all files even ones not in the work tree.
+"""]]
diff --git a/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_5_cd9b77e6670840a9902f5be80e1e658a._comment b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_5_cd9b77e6670840a9902f5be80e1e658a._comment
new file mode 100644
index 000000000..8320e53a2
--- /dev/null
+++ b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_5_cd9b77e6670840a9902f5be80e1e658a._comment
@@ -0,0 +1,87 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="comment 5"
+ date="2014-05-16T17:45:48Z"
+ content="""
+I gave up on this. After doing this a few times, I stopped. Living in Africa, bandwidth is really expensive :-/
+
+Initially I installed via the downloaded .dmg file.
+After poking around a few times, I found a folder inside my Applications folder:
+
+ ls -al /Applications/gi*
+ /Applications/git-annex.app:
+ total 0
+ drwxr-xr-x@ 3 ovi admin 102 May 12 13:10 .
+ drwxrwxr-x+ 155 root admin 5270 May 15 04:19 ..
+ drwxr-xr-x 5 ovi admin 170 May 9 15:45 Contents
+
+ /Applications/git-annex.app.5.20140421:
+ total 0
+ drwxr-xr-x 2 ovi admin 68 May 11 11:26 .
+ drwxrwxr-x+ 155 root admin 5270 May 15 04:19 ..
+
+Every time I now open git-annex assistant I am greeted with:
+
+ An upgrade of git-annex is available.
+ (version 5.20140421)
+
+I just did it again and it starts downloading again arrrghh!
+
+ Transfers
+ git-annex.dmg (for upgrade)←web 12% of 22.52 MiB
+
+restarted the assistant and it now says:
+
+ Finished upgrading git-annex to version 5.20140420-ga25b8bb
+
+Then I check and find this:
+
+ls -al /Applications/gi*
+/Applications/git-annex.app:
+total 0
+drwxr-xr-x@ 3 ovi admin 102 May 12 13:10 .
+drwxrwxr-x+ 155 root admin 5270 May 15 04:19 ..
+drwxr-xr-x 5 ovi admin 170 May 9 15:45 Contents
+
+/Applications/git-annex.app.5.20140421:
+total 0
+drwxr-xr-x 2 ovi admin 68 May 11 11:26 .
+drwxrwxr-x+ 155 root admin 5270 May 15 04:19 ..
+shiny-2:~ ovi$ ls -al /Applications/gi*
+/Applications/git-annex.app:
+total 0
+drwxr-xr-x@ 3 ovi admin 102 May 12 13:10 .
+drwxrwxr-x+ 155 root admin 5270 May 15 04:19 ..
+drwxr-xr-x 5 ovi admin 170 May 9 15:45 Contents
+
+/Applications/git-annex.app.5.20140421:
+total 0
+drwxr-xr-x 2 ovi admin 68 May 11 11:26 .
+drwxrwxr-x+ 155 root admin 5270 May 15 04:19 ..
+
+LOL. restarting the assistant am greeted with click here to finish the upgrade. did so.
+
+now only 2 folders not 3 left:
+
+ls -al /Applications/gi*
+/Applications/git-annex.app:
+total 0
+drwxr-xr-x@ 3 ovi admin 102 May 12 13:10 .
+drwxrwxr-x+ 155 root admin 5270 May 15 04:19 ..
+drwxr-xr-x 5 ovi admin 170 May 9 15:45 Contents
+
+/Applications/git-annex.app.5.20140421:
+total 0
+drwxr-xr-x 2 ovi admin 68 May 11 11:26 .
+drwxrwxr-x+ 155 root admin 5270 May 15 04:19 ..
+
+Started the asistant again, am greeted with:
+
+ An upgrade of git-annex is available.
+(version 5.20140421)
+
+Thank you very much... not going to downlaod it again...
+
+COULD YOU PLEASE JUST SHARE THE DOWNLOAD LINK TO THE NEWEST ONE?
+"""]]
diff --git a/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_6_4584393333d377532d8607b42319abd9._comment b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_6_4584393333d377532d8607b42319abd9._comment
new file mode 100644
index 000000000..023ccebfe
--- /dev/null
+++ b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_6_4584393333d377532d8607b42319abd9._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="failed upgrade log file"
+ date="2014-05-16T17:55:34Z"
+ content="""
+Just in case it helps diagnose the problem: http://pastebin.com/PUpPRURb
+"""]]
diff --git a/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_7_d9d36ff62267dde98a27c5981951df7f._comment b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_7_d9d36ff62267dde98a27c5981951df7f._comment
new file mode 100644
index 000000000..b38502bf4
--- /dev/null
+++ b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_7_d9d36ff62267dde98a27c5981951df7f._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 7"
+ date="2014-05-16T17:57:13Z"
+ content="""
+The repeated attempts to upgrade to 21 when it only downloads 20 are due to a different bug: [[bugs/git-annex_auto_upgrade_is_redundant]]. I've just put in a quick fix that should avoid that.
+
+However, for the purposes of this bug report, I'm interested in the original problem of \"Cannot find old distribution bundle; not upgrading\", and to fix that, I need to know how you originally installed git-annex.
+"""]]
diff --git a/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_8_5b26711c737eeb0b302060f098cb320b._comment b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_8_5b26711c737eeb0b302060f098cb320b._comment
new file mode 100644
index 000000000..b2cab6097
--- /dev/null
+++ b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_8_5b26711c737eeb0b302060f098cb320b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="comment 8"
+ date="2014-05-16T17:59:13Z"
+ content="""
+download 20.dmg, double clicked it, dragged it into my Applications folder.
+"""]]
diff --git a/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_9_1bf050056dcac7c1e0f497ee6e87a95a._comment b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_9_1bf050056dcac7c1e0f497ee6e87a95a._comment
new file mode 100644
index 000000000..245bdc56a
--- /dev/null
+++ b/doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_9_1bf050056dcac7c1e0f497ee6e87a95a._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.3"
+ subject="comment 9"
+ date="2014-05-21T17:28:16Z"
+ content="""
+I have adjusted the \"Cannot find old distribution bundle; not upgrading\" message to say where it looked, and failed to find the git-annex.app directory.
+
+I am going to have to moreinfo this, since without knowing where git-annex was installed to, I can't say why it failed to find a git-annex.app directory.
+"""]]
diff --git a/doc/bugs/Upload_to_S3_fails_.mdwn b/doc/bugs/Upload_to_S3_fails_.mdwn
new file mode 100644
index 000000000..de74bfd7f
--- /dev/null
+++ b/doc/bugs/Upload_to_S3_fails_.mdwn
@@ -0,0 +1,59 @@
+### Please describe the problem.
+
+Uploading a 21GB file to an S3 special remote fails. It will generally fail somewhere at about 3-15%. I am using the new chunking feature, with chunks set to 25MiB.
+
+### What steps will reproduce the problem?
+
+ $ git annex copy my-big-file.tar.bz --to s3
+ copy my-big-file.tar.bz (gpg) (checking s3...) (to s3...)
+ 13% 863.8KB/s 6h0m
+ ErrorClosed
+ failed
+ git-annex: copy: 1 failed
+
+### What version of git-annex are you using? On what operating system?
+
+Running on Arch Linux.
+
+ git-annex version: 5.20140818-g10bf03a
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 0 1 2 4
+
+### Please provide any additional information below.
+
+If I fire up the web app and open the log, the end looks like this:
+
+
+[[!format sh """
+...
+
+3% 857.3KB/s 6h46m
+3% 857.3KB/s 6h46m
+3% 857.3KB/s 6h46m
+3% 857.4KB/s 6h46m
+3% 857.4KB/s 6h46m
+3% 857.5KB/s 6h46m
+3% 857.5KB/s 6h46m
+3% 857.6KB/s 6h46m
+3% 857.6KB/s 6h46m
+3% 857.6KB/s 6h46m
+3% 857.7KB/s 6h46m
+3% 857.7KB/s 6h46m
+3% 857.8KB/s 6h46m
+3% 857.8KB/s 6h46m
+3% 857.8KB/s 6h46m
+3% 857.9KB/s 6h46m
+3% 857.9KB/s 6h46m
+3% 858.0KB/s 6h46m
+3% 858.0KB/s 6h46m
+3% 858.1KB/s 6h46m
+3% 858.1KB/s 6h45m
+3% 858.1KB/s 6h45mmux_client_request_session: read from master failed: Broken pipe
+
+"""]]
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/Upload_to_S3_fails_/comment_10_b7e912bac673bdffa5775b71d5d39937._comment b/doc/bugs/Upload_to_S3_fails_/comment_10_b7e912bac673bdffa5775b71d5d39937._comment
new file mode 100644
index 000000000..ecc34d487
--- /dev/null
+++ b/doc/bugs/Upload_to_S3_fails_/comment_10_b7e912bac673bdffa5775b71d5d39937._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkvSZ1AFJdY_1FeutZr_KWeqtzjZta1PNE"
+ nickname="Thedward"
+ subject="comment 10"
+ date="2014-10-21T21:25:57Z"
+ content="""
+The only files that succeeded were small text files. The other files — 3-200MiB — all failed.
+"""]]
diff --git a/doc/bugs/Upload_to_S3_fails_/comment_11_65cb9b1dd69cd657f2cfde036eb60417._comment b/doc/bugs/Upload_to_S3_fails_/comment_11_65cb9b1dd69cd657f2cfde036eb60417._comment
new file mode 100644
index 000000000..ec59d6a20
--- /dev/null
+++ b/doc/bugs/Upload_to_S3_fails_/comment_11_65cb9b1dd69cd657f2cfde036eb60417._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 11"
+ date="2014-10-23T21:05:15Z"
+ content="""
+When it resumes, it will start at 0% but jump forward to the resume point pretty quickly, after verifying which chunks have already been sent.
+If any full chunk gets transferred, I'd expect it to resume. This may not be very obvious it's happening for smaller files.
+
+I have been running `git annex testremote` against S3 special remotes today, and have not managed to reproduce this problem (using either the old S3 or the new AWS libraries). It could be anything, including a problem with your network or the network between you and the S3 endpoint. Have you tried using a different S3 region?
+"""]]
diff --git a/doc/bugs/Upload_to_S3_fails_/comment_1_398c014921f9af957fb5e9a92ed0ef4d._comment b/doc/bugs/Upload_to_S3_fails_/comment_1_398c014921f9af957fb5e9a92ed0ef4d._comment
new file mode 100644
index 000000000..a18ca1d05
--- /dev/null
+++ b/doc/bugs/Upload_to_S3_fails_/comment_1_398c014921f9af957fb5e9a92ed0ef4d._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-09-18T18:49:43Z"
+ content="""
+This is using the old hS3 library. So, each chunk is sent using a new http connection. It seems that the connection must be being closed by S3 part way through the upload of a chunk.
+
+It may be that the new aws library somehow avoids this problem. So, a git-annex built with the `s3-aws` branch merged in may help with this bug. OTOH, that new branch makes a single http connection be reused for all the chunks in a file, so it might also make things worse.
+"""]]
diff --git a/doc/bugs/Upload_to_S3_fails_/comment_2_f33ce058c9460cf7d151e739bff0440a._comment b/doc/bugs/Upload_to_S3_fails_/comment_2_f33ce058c9460cf7d151e739bff0440a._comment
new file mode 100644
index 000000000..dcf719bba
--- /dev/null
+++ b/doc/bugs/Upload_to_S3_fails_/comment_2_f33ce058c9460cf7d151e739bff0440a._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 2"
+ date="2014-09-18T18:52:17Z"
+ content="""
+If you're using the new chunking system, git-annex should support resuming the upload to S3. Next time you try to send the file, it should find the chunks that were successfully sent, and resume at the chunk where it failed.
+
+Supporting this even for encrypted uploads was a major benefit of the new chunking system, so I hope it works...?
+"""]]
diff --git a/doc/bugs/Upload_to_S3_fails_/comment_3_cd1e768fe1e67daf08b5afd460620922._comment b/doc/bugs/Upload_to_S3_fails_/comment_3_cd1e768fe1e67daf08b5afd460620922._comment
new file mode 100644
index 000000000..5efb78685
--- /dev/null
+++ b/doc/bugs/Upload_to_S3_fails_/comment_3_cd1e768fe1e67daf08b5afd460620922._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="annexuser"
+ ip="71.198.212.13"
+ subject="comment 3"
+ date="2014-09-19T04:43:42Z"
+ content="""
+Was the version I listed above not using the new chunking from the `s3-aws` branch? How do I determine if my version of git-annex was built with the new or old chunking?
+"""]]
diff --git a/doc/bugs/Upload_to_S3_fails_/comment_4_0cdd2e8d6e83c03de717ecd3253e753d._comment b/doc/bugs/Upload_to_S3_fails_/comment_4_0cdd2e8d6e83c03de717ecd3253e753d._comment
new file mode 100644
index 000000000..216aea575
--- /dev/null
+++ b/doc/bugs/Upload_to_S3_fails_/comment_4_0cdd2e8d6e83c03de717ecd3253e753d._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="67.223.1.203"
+ subject="comment 4"
+ date="2014-09-19T18:33:17Z"
+ content="""
+Your version supports both new and old style chunking. Which is used depends on how the S3 remote was configured when it was set up. It can't really be changed w/o re-setting up the remote. You can check which is used by `git show git-annex:remote.log`, find the line for the UUID of the remote, and see if it has chunk= (new chunking) or chunksize= (old chunking).
+"""]]
diff --git a/doc/bugs/Upload_to_S3_fails_/comment_5_020c055f6c06860dda27c1debb123742._comment b/doc/bugs/Upload_to_S3_fails_/comment_5_020c055f6c06860dda27c1debb123742._comment
new file mode 100644
index 000000000..368d2853f
--- /dev/null
+++ b/doc/bugs/Upload_to_S3_fails_/comment_5_020c055f6c06860dda27c1debb123742._comment
@@ -0,0 +1,43 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkvSZ1AFJdY_1FeutZr_KWeqtzjZta1PNE"
+ nickname="Thedward"
+ subject="comment 5"
+ date="2014-10-21T04:10:16Z"
+ content="""
+
+I am experiencing similar behavior on Ubuntu Trusty (x86_64) using a prebuilt Linux release:
+
+ Linux hostname 3.13.0-36-generic #63-Ubuntu SMP Wed Sep 3 21:30:07 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
+
+ Distributor ID: Ubuntu
+ Description: Ubuntu 14.04.1 LTS
+ Release: 14.04
+ Codename: trusty
+
+ git-annex version: 5.20141016-g26b38fd
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+
+Copying files to S3 consistently fails both from the command line and via the assistant:
+
+ [2014-10-20 22:34:32 CDT] read: git [\"--git-dir=/home/user/git-annex/.git\",\"--work-tree=/home/user/git-annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"]
+ [2014-10-20 22:34:32 CDT] read: git [\"--git-dir=/home/user/git-annex/.git\",\"--work-tree=/home/user/git-annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+ [2014-10-20 22:34:32 CDT] read: git [\"--git-dir=/home/user/git-annex/.git\",\"--work-tree=/home/user/git-annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..78e9b6b85f3b453d8ed4f66f63ff09e03ce13d06\",\"-n1\",\"--pretty=%H\"]
+ [2014-10-20 22:34:32 CDT] read: git [\"--git-dir=/home/user/git-annex/.git\",\"--work-tree=/home/user/git-annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..658720ba59a2fefee89c908b972971ca901f84dc\",\"-n1\",\"--pretty=%H\"]
+ [2014-10-20 22:34:32 CDT] chat: git [\"--git-dir=/home/user/git-annex/.git\",\"--work-tree=/home/user/git-annex\",\"-c\",\"core.bare=false\",\"cat-file\",\"--batch\"]
+ [2014-10-20 22:34:32 CDT] read: git [\"--git-dir=/home/user/git-annex/.git\",\"--work-tree=/home/user/git-annex\",\"-c\",\"core.bare=false\",\"ls-files\",\"--cached\",\"-z\",\"--\",\"storage/data.bin\"]
+ [2014-10-20 22:34:32 CDT] chat: git [\"--git-dir=/home/user/git-annex/.git\",\"--work-tree=/home/user/git-annex\",\"-c\",\"core.bare=false\",\"cat-file\",\"--batch\"]
+ copy storage/data.bin (gpg) (checking S3git-annex...) (to S3git-annex...)
+ 0% 0.0 B/s 0s[2014-10-20 22:34:33 CDT] chat: gpg [\"--batch\",\"--no-tty\",\"--use-agent\",\"--quiet\",\"--trust-model\",\"always\",\"--batch\",\"--passphrase-fd\",\"14\",\"--symmetric\",\"--force-mdc\",\"--no-textmode\"]
+ 8% 512.0KB/s 21s[2014-10-20 22:34:35 CDT] chat: gpg [\"--batch\",\"--no-tty\",\"--use-agent\",\"--quiet\",\"--trust-model\",\"always\",\"--batch\",\"--passphrase-fd\",\"14\",\"--symmetric\",\"--force-mdc\",\"--no-textmode\"]
+ 8% 528.0KB/s 21s
+ ErrorClosed
+ failed
+ git-annex: copy: 1 failed
+
+Two files (out of several hundred) have succeeded.
+
+Any ideas?
+
+"""]]
diff --git a/doc/bugs/Upload_to_S3_fails_/comment_6_8bc023fca8cedfc517856cdcd20b7f10._comment b/doc/bugs/Upload_to_S3_fails_/comment_6_8bc023fca8cedfc517856cdcd20b7f10._comment
new file mode 100644
index 000000000..ed21bb8fb
--- /dev/null
+++ b/doc/bugs/Upload_to_S3_fails_/comment_6_8bc023fca8cedfc517856cdcd20b7f10._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 6"
+ date="2014-10-21T16:31:02Z"
+ content="""
+I need to know if the S3 remote is configured to use the new style chunking feature, and what size chunks it is configured to use. I have already explained how to check that in this thread.
+
+I also need to know if retrying the upload after it fails lets it resume where it left off.
+"""]]
diff --git a/doc/bugs/Upload_to_S3_fails_/comment_7_32685258748a7cdd177e7af2105f128e._comment b/doc/bugs/Upload_to_S3_fails_/comment_7_32685258748a7cdd177e7af2105f128e._comment
new file mode 100644
index 000000000..4d6655224
--- /dev/null
+++ b/doc/bugs/Upload_to_S3_fails_/comment_7_32685258748a7cdd177e7af2105f128e._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkvSZ1AFJdY_1FeutZr_KWeqtzjZta1PNE"
+ nickname="Thedward"
+ subject="comment 7"
+ date="2014-10-21T17:35:16Z"
+ content="""
+It is running the new style chunking (chunk=1MiB).
+
+It does not appear to resume when it tries again. If I try copying a file to the remote from the command line, it always starts at 0% and dies at some point before 100% even if it has tried to copy that file before.
+"""]]
diff --git a/doc/bugs/Upload_to_S3_fails_/comment_8_841fd94d0f599c71a76fd22b07944366._comment b/doc/bugs/Upload_to_S3_fails_/comment_8_841fd94d0f599c71a76fd22b07944366._comment
new file mode 100644
index 000000000..61e201c9d
--- /dev/null
+++ b/doc/bugs/Upload_to_S3_fails_/comment_8_841fd94d0f599c71a76fd22b07944366._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkvSZ1AFJdY_1FeutZr_KWeqtzjZta1PNE"
+ nickname="Thedward"
+ subject="comment 8"
+ date="2014-10-21T17:47:35Z"
+ content="""
+Additional info: I created both of the related git-annex repositories yesterday via the webapp. Then imported a number of files to each one. Then connected them via xmpp. Then created the S3 remote via the webapp so they could actually share files. I am using an IAM identity for S3 instead of my root access key; it has full S3 access (and data IS showing up in the bucket, so it's not a *simple* permissions problem).
+"""]]
diff --git a/doc/bugs/Upload_to_S3_fails_/comment_9_dd837a1cb2146224b9c000cbeea4f3b3._comment b/doc/bugs/Upload_to_S3_fails_/comment_9_dd837a1cb2146224b9c000cbeea4f3b3._comment
new file mode 100644
index 000000000..4cfda38c2
--- /dev/null
+++ b/doc/bugs/Upload_to_S3_fails_/comment_9_dd837a1cb2146224b9c000cbeea4f3b3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 9"
+ date="2014-10-21T20:22:52Z"
+ content="""
+How big is the file that it fails to copy?
+"""]]
diff --git a/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work.mdwn b/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work.mdwn
deleted file mode 100644
index 1bb985891..000000000
--- a/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work.mdwn
+++ /dev/null
@@ -1,49 +0,0 @@
-What steps will reproduce the problem?
-1. Create a Repository
-2. Add a Remote Server
-
-What is the expected output? What do you see instead?
-The option "Use a git repository on the server" is marked as not available
-
-What version of git-annex are you using? On what operating system?
-Version: 4.20130405 but on Webapp ist shows: Version: 4.20130324
-Linux 64bit
-
-Please provide any additional information below.
-git and git-annex are available on the Remote Server
-
-> While this bug report was about a server that did not get git-annex-shell
-> installed in PATH (something trivially fixed by `apt-get install
-> git-annex`), the comments below would like to turn this into a bug report about
-> the error message "unknown UUID; cannot modify". All right then..
-> --[[Joey]]
->
-> This can occur if a ssh key is locked down to use directory A, and a
-> new repo is added in directory B which uses the same ssh key. Things will
-> then fail when git-annex-shell rejects the attept to use directory B, and
-> this results in the webapp displaying an internal server error of
-> "unknown UUID; cannot modify" since NoUUID is retreived for the repo.
->
-> In fact, I already dealt with this
-> once in 79561774450c8abf7c2cb42b08575a3ca27010dc; it used to not use
-> the directory name at all as part of the mangled hostname. Most of the
-> "me too" responses" predate that fix.
->
-> Now, this can only happen
-> if the mangled hostname for directory A and B is the same. One way this can
-> happen is if the directories are "annex" and "~/annex". In other words,
-> I suspect that users are entering "annex" once, and "~/annex" another
-> time, when setting up what they intend to be the same repo. Perhaps the
-> first time something else fails (like the original problem of
-> git-annex-shell not being in path), or they want to set it up again,
-> and the next time the subtly different directory is entered.
->
-> To fix this,
-> `mangleSshHostName` would need to be changed to generate different mangled
-> hostnames in all cases. Currently, it skips non-alpha-numeric
-> characters in the directory. [[done]] --[[Joey]]
-> --[[Joey]]
->
-> Additionally, just entering a path starting with "~/" would cause this
-> error, since the webapp tacks on "/~/" to make a relative path absolute.
-> I've also fixed that. [[done]] --[[Joey]]
diff --git a/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_1_2143f0540fdcd7efeb25b5a3b54fe0fd._comment b/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_1_2143f0540fdcd7efeb25b5a3b54fe0fd._comment
deleted file mode 100644
index aa8237c17..000000000
--- a/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_1_2143f0540fdcd7efeb25b5a3b54fe0fd._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-04-06T16:38:46Z"
- content="""
-Well, it works here. It checks that all of `git`, `rsync`, and `git-annex` are in the path on the remote server using `which`.
-
-I think the most likely reason would be if you've installed git-annex on the remote server but not in the PATH. If you're using the standalone tarball, for example, it's \"installed\", but it has no way to find it.
-
-Or, you could have installed from cabal, which puts it in ~/.cabal/bin or ~/bin or something like that, and perhaps you configured your shell to put that directory in the PATH, but you did it in a way that only works for login shells. If you set the PATH in `~/.bashrc`, for example, that would not work for a noninteractive shell.
-"""]]
diff --git a/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_2_bca95245b457631d08b47591da6163ad._comment b/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_2_bca95245b457631d08b47591da6163ad._comment
deleted file mode 100644
index f93285611..000000000
--- a/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_2_bca95245b457631d08b47591da6163ad._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="modules"
- ip="31.150.97.85"
- subject="comment 2"
- date="2013-04-06T20:49:20Z"
- content="""
-I have the same issue here and it seems to be the PATH problem with standalone tarball for noniteractive shell on remote server. Is there an easy way to setup right PATH or workaround for prebuilt tarballs?
-
-"""]]
diff --git a/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_3_f54bb003096752dae0442660267a1e37._comment b/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_3_f54bb003096752dae0442660267a1e37._comment
deleted file mode 100644
index 3a7158b80..000000000
--- a/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_3_f54bb003096752dae0442660267a1e37._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-04-06T20:59:10Z"
- content="""
-You can run this script as root, and it will install it to /usr/local/bin, which should always be in your path:
-<https://github.com/zerodogg/scriptbucket/blob/master/gitannex-install>
-
-However, I'd hope most people do not need to use the standalone tarball to install git-annex on a server. Most major linux distributions have their own way to install git-annex by now, and while most of them are too old versions to use the git annex assistant with, those old versions work fine on a server. The assistant will interoperate with them just fine.
-"""]]
diff --git a/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_4_38bb916ed5b90b92ffa91a452ff052a9._comment b/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_4_38bb916ed5b90b92ffa91a452ff052a9._comment
deleted file mode 100644
index c9742b6e1..000000000
--- a/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_4_38bb916ed5b90b92ffa91a452ff052a9._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnq5niDqUBoGE7cQ8MDQKtGYIfYtg3_MvY"
- nickname="Tobias"
- subject="comment 4"
- date="2013-04-06T23:03:37Z"
- content="""
-One Step forward. But now I get the error message \"Internal Server Error unknown UUID; cannot modify\" after click on the \"Use a git repository on the server\"-Button
-
-Thanks a lot for the link to the install-script. It works very well.
-"""]]
diff --git a/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_5_5b6ef464ab1ad061f27122db40191e26._comment b/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_5_5b6ef464ab1ad061f27122db40191e26._comment
deleted file mode 100644
index f818a023e..000000000
--- a/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_5_5b6ef464ab1ad061f27122db40191e26._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="EskildHustvedt"
- ip="84.48.83.221"
- subject="comment 5"
- date="2013-04-08T07:41:38Z"
- content="""
-Tobias, you may want to download the latest version of the install script and then run it as \"gitannex-install --force\", as its version of \"git-annex-shell\" was broken (linked to a missing file, fixed now).
-"""]]
diff --git a/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_6_3727bda5082cb1f2b1f746f9f80ced7d._comment b/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_6_3727bda5082cb1f2b1f746f9f80ced7d._comment
deleted file mode 100644
index 350139350..000000000
--- a/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_6_3727bda5082cb1f2b1f746f9f80ced7d._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnq5niDqUBoGE7cQ8MDQKtGYIfYtg3_MvY"
- nickname="Tobias"
- subject="comment 6"
- date="2013-04-09T17:52:14Z"
- content="""
-After update the script local and on the remote Server and run it on both with --force, I still get the same error.
-"""]]
diff --git a/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_7_a7139f19f0b73c024cd9218eb01e6104._comment b/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_7_a7139f19f0b73c024cd9218eb01e6104._comment
deleted file mode 100644
index 36547245e..000000000
--- a/doc/bugs/Use_a_git_repository_on_the_server_don__39__t_work/comment_7_a7139f19f0b73c024cd9218eb01e6104._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnu1NYw8UF-NoDbKu8YKVGxi8FoZLH7JPs"
- nickname="Chris"
- subject="Same error with Android"
- date="2013-05-21T02:15:25Z"
- content="""
-I'm using git-annex version 4.20130516-g3240006 on Android, and when I attempt to add a cloud repo with SSH & git, I get that same error - \"unknown UUID: cannot modify\". My Linux box running 4.20130516-gedc4ccd handles the same server as a cloud repo without any problems.
-"""]]
diff --git a/doc/bugs/Using_Github_as_remote_throws_proxy_errors.mdwn b/doc/bugs/Using_Github_as_remote_throws_proxy_errors.mdwn
deleted file mode 100644
index 34d9eafb4..000000000
--- a/doc/bugs/Using_Github_as_remote_throws_proxy_errors.mdwn
+++ /dev/null
@@ -1,27 +0,0 @@
-What steps will reproduce the problem?
-
-1. cd to an already existing git repository that uses Github as a remote, with the remote format similar to git@github.com:user/repo.git
-2. git annex init
-3. git annex status
-
-What is the expected output? What do you see instead?
-
- $ git annex status
- supported backends: SHA256 SHA1 SHA512 SHA224 SHA384 SHA256E SHA1E SHA512E SHA224E SHA384E WORM URL
- supported remote types: git S3 bup directory rsync web hook
- trusted repositories: Invalid command: 'git-annex-shell 'configlist' '/~/dlo/objectifier.git''
- You appear to be using ssh to clone a git:// URL.
- Make sure your core.gitProxy config option and the
- GIT_PROXY_COMMAND environment variable are NOT set.
- Command ssh ["-S","/Users/dan/Documents/Web/objectifier/.git/annex/ssh/git@github.com","-o","ControlMaster=auto","-o","ControlPersist=yes","git@github.com","git-annex-shell 'configlist' '/~/dlo/objectifier.git'"] failed; exit code 1
- 0
- # ... other stuff that isn't relevant
-
-
-What version of git-annex are you using? On what operating system?
-
-git-annex-3.20120825
-
-Max OS X 10.8.1
-
-> [[done]]; see comments --[[Joey]]
diff --git a/doc/bugs/Using_Github_as_remote_throws_proxy_errors/comment_1_10616b17c3fb8286fdc64c841023f8a1._comment b/doc/bugs/Using_Github_as_remote_throws_proxy_errors/comment_1_10616b17c3fb8286fdc64c841023f8a1._comment
deleted file mode 100644
index 77ebcaa1a..000000000
--- a/doc/bugs/Using_Github_as_remote_throws_proxy_errors/comment_1_10616b17c3fb8286fdc64c841023f8a1._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.14.141"
- subject="comment 1"
- date="2012-09-24T17:24:47Z"
- content="""
-The proxy message is sent from github, so I can't do anything about that. `git@github.com:user/repo.git` is a ssh url, so git-annex tries to use it as a full git-annex remote. If you use a git:// url, git-annex will
-skip it. Or you can set `git config remote.origin.annex-ignore true` (replace origin with the name of the github remote).
-"""]]
diff --git a/doc/bugs/Using_Github_as_remote_throws_proxy_errors/comment_2_8a72887d33e492a041f8246d93d0c778._comment b/doc/bugs/Using_Github_as_remote_throws_proxy_errors/comment_2_8a72887d33e492a041f8246d93d0c778._comment
deleted file mode 100644
index 5fe4e6b5a..000000000
--- a/doc/bugs/Using_Github_as_remote_throws_proxy_errors/comment_2_8a72887d33e492a041f8246d93d0c778._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmG8L2pP-i6QATf6pK9WCSGpl0O9twwh8Q"
- nickname="Dan"
- subject="comment 2"
- date="2012-09-24T18:00:17Z"
- content="""
-Ah, so with the full ssh URL, git annex thinks it's a \"real\" server and can run commands on it. Makes sense. Thanks!
-"""]]
diff --git a/doc/bugs/Using_a_revoked_GPG_key.mdwn b/doc/bugs/Using_a_revoked_GPG_key.mdwn
deleted file mode 100644
index 4e522ab78..000000000
--- a/doc/bugs/Using_a_revoked_GPG_key.mdwn
+++ /dev/null
@@ -1,34 +0,0 @@
-### Please describe the problem.
-git-annex refuses to use revoked GPG keys. This may be understandable for the initial remote setup, but it hit me when I tried to add a new key to a remote. The previous key has been revoked (because it has been superseded by the new one), and git-annex refused to reinvoke the shared key with both keys because one of them was revoked.
-
-Given the encryption model does not allow key replacement, it should not refuse to reencrypt using a revoked key. Maybe using `--expert` would help.
-
-### What steps will reproduce the problem?
-Encrypt a special remote with a key K1. Revoke key K1. Try to add key K2 with enableremote. git-annex will refuse to encrypt the shared key with the revoked one.
-
-### What version of git-annex are you using? On what operating system?
-git-annex version: 4.20130802-g1452ac3
-
-### Please provide any additional information below.
-
-[[!format sh """
-% git annex enableremote zoidberg-crypted encryption=42B8F7C2
-enableremote zoidberg-crypted (encryption update)
-You need a passphrase to unlock the secret key for
-user: "Samuel Tardieu <sam@rfc1149.net>"
-2048-bit ELG key, ID F0D70BAF, created 2002-05-31 (main key ID 1B80ADE6)
-
-gpg: NOTE: key has been revoked
-gpg: reason for revocation: Key is superseded
-gpg: revocation comment: Key superseded by 42B8F7C2
-gpg: revocation comment: (fingerprint 1D36 D924 8B33 DCAB 7BA5 BA44 7A30 BCF4 42B8 F7C2)
-gpg: F13322411B80ADE6: skipped: Unusable public key
-gpg: [stdin]: encryption failed: Unusable public key
-
-git-annex: user error (gpg ["--quiet","--trust-model","always","--encrypt","--no-encrypt-to","--no-default-recipient","--recipient","7A30BCF442B8F7C2","--recipient","F13322411B80ADE6"] exited 2)
-failed
-git-annex: enableremote: 1 failed
-"""]]
-
-> [[done]]; can now use: `git annex enableremote foo keyid-=REVOKEDKEY
-> keyid+=NEWKEY` to remove it, and add a new key. --[[Joey]]
diff --git a/doc/bugs/Using_a_revoked_GPG_key/comment_1_7bb01d081282e5b02b7720b2953fe5be._comment b/doc/bugs/Using_a_revoked_GPG_key/comment_1_7bb01d081282e5b02b7720b2953fe5be._comment
deleted file mode 100644
index baddbbf49..000000000
--- a/doc/bugs/Using_a_revoked_GPG_key/comment_1_7bb01d081282e5b02b7720b2953fe5be._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmWg4VvDTer9f49Y3z-R0AH16P4d1ygotA"
- nickname="Tobias"
- subject="comment 1"
- date="2013-08-12T11:47:28Z"
- content="""
-I'd be very unhappy indeed if I couldn't revoke access to my annex.
-"""]]
diff --git a/doc/bugs/Using_a_revoked_GPG_key/comment_2_9c0c40360f0058a4bd346c1362e302b6._comment b/doc/bugs/Using_a_revoked_GPG_key/comment_2_9c0c40360f0058a4bd346c1362e302b6._comment
deleted file mode 100644
index 003f9a34a..000000000
--- a/doc/bugs/Using_a_revoked_GPG_key/comment_2_9c0c40360f0058a4bd346c1362e302b6._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://www.rfc1149.net/"
- nickname="Sam"
- subject="comment 2"
- date="2013-08-13T07:28:30Z"
- content="""
-Tobias: I don't understand what you mean. The issue here is that once an existing key is revoked, git-annex will refuse to add *another non-revoked* key.
-"""]]
diff --git a/doc/bugs/Using_a_revoked_GPG_key/comment_3_8f69f58107246595f5603f35c4aa7395._comment b/doc/bugs/Using_a_revoked_GPG_key/comment_3_8f69f58107246595f5603f35c4aa7395._comment
deleted file mode 100644
index 7f18cfe39..000000000
--- a/doc/bugs/Using_a_revoked_GPG_key/comment_3_8f69f58107246595f5603f35c4aa7395._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmWg4VvDTer9f49Y3z-R0AH16P4d1ygotA"
- nickname="Tobias"
- subject="comment 3"
- date="2013-08-13T08:47:45Z"
- content="""
-Ah, sorry, i'm uncomprehending :)
-"""]]
diff --git a/doc/bugs/Using_a_revoked_GPG_key/comment_4_78b3c52ba85edfa6ee6e273bec3bea5c._comment b/doc/bugs/Using_a_revoked_GPG_key/comment_4_78b3c52ba85edfa6ee6e273bec3bea5c._comment
deleted file mode 100644
index 61b03c109..000000000
--- a/doc/bugs/Using_a_revoked_GPG_key/comment_4_78b3c52ba85edfa6ee6e273bec3bea5c._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="guilhem"
- ip="129.16.20.209"
- subject="comment 4"
- date="2013-08-16T07:14:12Z"
- content="""
-The [[OpenPGP standard|https://tools.ietf.org/html/rfc4880]] specifies that revoked keys/subkeys \"are not to be used\". AFIK GnuPG, as any RFC-compliant implementation, will not let you encrypt to a revoked key no matter what. An extremely dirty workaround is to set up your system clock prior to the revocation date (but that might put your whole system at risk since other applications may rely synced clocks to work properly).
-
-That said, what you really wanted to do was to revoke access to K1 and add K2 instead. That seems to be a perfectly valid use-case, and it shouldn't be hard to add to git-annex; stay tunned ;-)
-
-
-Tobias: Not sure what you meant by \"revoke access to my annex\", but if you were thinking of the key owner, note that with the current [[encryption design|http://git-annex.branchable.com/design/encryption]], since that person may simply grab from the git repo and then at any time decrypt the passphrase for the symmetric cipher, it makes little sense to revoke access for that person unless you change that passphrase, and reencrypt all annexed files on the remote, which of course needs to be done locally for the encryption to make sense at all.
-"""]]
diff --git a/doc/bugs/Using_a_revoked_GPG_key/comment_5_a85ccf2f09ebe87147f8761b81a02326._comment b/doc/bugs/Using_a_revoked_GPG_key/comment_5_a85ccf2f09ebe87147f8761b81a02326._comment
deleted file mode 100644
index ff441671f..000000000
--- a/doc/bugs/Using_a_revoked_GPG_key/comment_5_a85ccf2f09ebe87147f8761b81a02326._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://www.rfc1149.net/"
- nickname="Sam"
- subject="comment 5"
- date="2013-08-19T11:35:52Z"
- content="""
-Indeed, removing the revoked key and putting the new one would be acceptable, there is no reason to keep the revoked one around.
-"""]]
diff --git a/doc/bugs/Using_a_revoked_GPG_key/comment_6_8b89eb5e6386acd0a922310c04f863ac._comment b/doc/bugs/Using_a_revoked_GPG_key/comment_6_8b89eb5e6386acd0a922310c04f863ac._comment
deleted file mode 100644
index eb9cd0f54..000000000
--- a/doc/bugs/Using_a_revoked_GPG_key/comment_6_8b89eb5e6386acd0a922310c04f863ac._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="guilhem"
- ip="129.16.20.209"
- subject="comment 6"
- date="2013-08-19T13:22:59Z"
- content="""
-All right, what would be a nice user interface, compatible with the current commands? I was thinking of something along the lines of `git annex enableremote +encryption=newKey -encryption=oldKey`, with an alias `+encryption=encryption` to be backward compatible. It's probably not optimal though, feel free to comment :-)
-
-Of course, `git-annex` should ensure that at any point in time the passphrase is always encrypted using an OpenPGP key. (Otherwise it might be stored clear in the git repository, which would void the encryption.) Also, anyone who can decrypt the passphrase can revoke all existing keys and reencrypt it using another key; this not really a big deal since the cipher is version-controlled anyway, so loosing access to the repo is unlikely.
-
-By the way, since we're about to amend the arguments for `enableremote`, it'd be nice to take advantage of the situation to allow pure asymmetric encryption. I propose `git annex initremote ... encryption=myKey crypto={none,hybrid,pubkey}` to use respectively no-encryption, an asymmetrically encrypted passphrase (the current design, default), and OpenPGP keys only.
-"""]]
diff --git a/doc/bugs/Using_a_revoked_GPG_key/comment_7_20dc5a7ce7cb6ca97ccdfb923c3b24bb._comment b/doc/bugs/Using_a_revoked_GPG_key/comment_7_20dc5a7ce7cb6ca97ccdfb923c3b24bb._comment
deleted file mode 100644
index 02be72e36..000000000
--- a/doc/bugs/Using_a_revoked_GPG_key/comment_7_20dc5a7ce7cb6ca97ccdfb923c3b24bb._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="guilhem"
- ip="129.16.20.209"
- subject="comment 7"
- date="2013-08-19T16:08:49Z"
- content="""
-On second thought, I think it makes more sense to have something like `git annex initremote ... encryption={none,shared,hybrid,pubkey} keyid=whatever` and `git annex enableremote ... [+keyid=newkey] [-keyid=oldkey]`, where `keyid` can only be used when `encryption` is either `hybrid` (default) or `pubkey`.
-
-This would break compatibility with the current interpretation of `encryption`, but I believe it's not so invasive: People are not creating new remotes every day, and an error message could clarify the new behavior. It's also clearer, since key IDs can be added and deleted at will, whereas the encryption scheme cannot.
-"""]]
diff --git a/doc/bugs/Using_a_revoked_GPG_key/comment_8_9dc921dc6077f828454a4444088b9a43._comment b/doc/bugs/Using_a_revoked_GPG_key/comment_8_9dc921dc6077f828454a4444088b9a43._comment
deleted file mode 100644
index a63ce1262..000000000
--- a/doc/bugs/Using_a_revoked_GPG_key/comment_8_9dc921dc6077f828454a4444088b9a43._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.63"
- subject="comment 8"
- date="2013-08-22T17:05:49Z"
- content="""
-Note that the assistant generates initremote parameters so code there also needs to be changed if the syntax changes.
-
-I think I am ok with changing the syntax. However, it seems that `encryption=-oldkey encryption=newkey` could be used to remove the old revoked key and add a new one. Using `-keyid` as a parameter to initremote is a bit tricky since git-annex's regular option parser would see it, before the parameter could get to initremote. (Unless -keyid was defined as a regular option specific to initremote.) OR, git-annex could just try to detect when a key is revoked and automatically remove it when a new encryption key is specified.
-
-Hmm, it would be possible to have it just notice, when adding a new key, if one of the existing keys is revoked, and
-remove the revoked key automatically.
-
-The above doesn't deal with the case of wanting to add pure asymmetric encryption. It seems to me that from a user's point of view, what they really need to know about asymmetric encryption is that they can't easily give additional keyids access after the fact (without reencrypting and reuploading everything). So I think it would be good if the syntax made that obvious. Perhaps `encryptiononly=key`
-"""]]
diff --git a/doc/bugs/Using_a_revoked_GPG_key/comment_9_f50c802d78041fd1522f0e7599ce6a45._comment b/doc/bugs/Using_a_revoked_GPG_key/comment_9_f50c802d78041fd1522f0e7599ce6a45._comment
deleted file mode 100644
index d86de4e1b..000000000
--- a/doc/bugs/Using_a_revoked_GPG_key/comment_9_f50c802d78041fd1522f0e7599ce6a45._comment
+++ /dev/null
@@ -1,42 +0,0 @@
-[[!comment format=mdwn
- username="guilhem"
- ip="129.16.20.209"
- subject="comment 9"
- date="2013-08-22T18:42:28Z"
- content="""
-Hehe, I ran into the option parser issue when implementing that change
-;-) So I moved to `git annex enableremote ... [keyid+=newkey]
-[keyid-=oldkey]` (where `+` is optional, for consistency) which doesn't
-prevent users from specifying a key by something starting with a sign.
-
-While it's certainly possible to tell git-annex to manage the authorized
-keys itself, users may have other reasons to remove a key so I'm not
-sure it's a good idea. Also, what if someone forgets to add his/her new
-key after revocation (it's still possible to decrypt after all)? If
-another person updates the keyring afterwards, the first user will be
-denied further access, and will have to retrieve and reencrypt the
-\"cipher\" manually, which is not so trivial.
-
-
-I understand that asymmetric encryption needs special care, but Sam's
-use case could be reproduced with that scheme I believe. For instance a
-user may superseed and revoke his/her old key; then new files would be
-uploaded with the new one, but as long as the old key is not
-compromised, I don't see why s/he should reupload everything instead of
-using the old key when pulling from the remote. Of course one may argue
-that the key shouldn't be revoked at the first place, but if it's used
-for other purposes (e.g., it's publicly available on a key server) it's
-good practice to revoke it IMHO.
-
-As for the removal of keys with pure asymmetric encryption, it is just
-required I think: Otherwise revoking a key would prevent any further
-content to be encrypted. There I can't see any problem with git-annex
-managing the keyring itself (beside the extra code to write :-P).
-
-All in all if we are to allow deletion/addition of keyIDs (and I think
-we should!), I think it should be done for both `hybrid` and `pubkey`
-schemes. Do you really want another syntax? I'd say clarify the manage
-(plus maybe a warning when running the CLI) is enough, but true it's
-easy to shoot oneself in the foot there...
-
-"""]]
diff --git a/doc/bugs/VFAT_crazy_limit_on_max_filenames_in_directory.mdwn b/doc/bugs/VFAT_crazy_limit_on_max_filenames_in_directory.mdwn
new file mode 100644
index 000000000..8c526ea62
--- /dev/null
+++ b/doc/bugs/VFAT_crazy_limit_on_max_filenames_in_directory.mdwn
@@ -0,0 +1,2 @@
+VFAT limits have been hit when the .git/annex/journal/
+directory gets a lot of stuff in it. See <http://bugs.debian.org/696313>
diff --git a/doc/bugs/Visual_glitch_while_xmpp_pairing.mdwn b/doc/bugs/Visual_glitch_while_xmpp_pairing.mdwn
new file mode 100644
index 000000000..03b0a5350
--- /dev/null
+++ b/doc/bugs/Visual_glitch_while_xmpp_pairing.mdwn
@@ -0,0 +1,14 @@
+### Please describe the problem.
+When pairing with xmpp buddies, the well does not expand to fit the whole buddy list
+
+### What steps will reproduce the problem?
+Go to the pairing menu
+
+### What version of git-annex are you using? On what operating system?
+ 5.20140717 from the homebrew bottle
+
+### Please provide any additional information below.
+
+![image of bug](http://i.imgur.com/fZe1ERD.png)
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/WEBDAV_443.mdwn b/doc/bugs/WEBDAV_443.mdwn
deleted file mode 100644
index cfde1a1a7..000000000
--- a/doc/bugs/WEBDAV_443.mdwn
+++ /dev/null
@@ -1,307 +0,0 @@
-What steps will reproduce the problem?
-
-```
-WEBDAV_USERNAME=pradermecker@yahoo.ca WEBDAV_PASSWORD=xxxxxx git annex initremote box.com type=webdav url=https://www.box.com/dav/git-annex chunksize=75mb encryption=none
-```
-
-What is the expected output? What do you see instead?
-
-I have:
-```
-git-annex: WebDAV failed to write file: FailedConnectionException "www.box.com" 443: user error
-```
-# What version of git-annex are you using? On what operating system?
-
-```
-git-annex version: 4.20130314
-local repository version: 3
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS
-```
-Archlinux 64: https://aur.archlinux.org/packages/git-annex/
-
-# Please provide any additional information below.
-
-1. Try my password a couple of time. It works with Chrome, Firefox or cadaver
-2. I am using a zsh shell and try exporting both env. variables
-3. git-annex test has errors
-
-### Error in: git-annex add:1
-sha1foodup: openFile: does not exist (No such file or directory)
-Cases: 3 Tried: 2 Errors: 2 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-git-annex: dir/foo: getFileStatus: does not exist (No such file or directory)
-### Failure in: git-annex add:2
-add of subdir failed
-Cases: 3 Tried: 3 Errors: 2 Failures: 1
-----------------------------------------------------------------------
-reinject
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-git-annex: sha1foo not found
-### Failure in: git-annex reinject/fromkey
-reinject failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-----------------------------------------------------------------------
-unannex
-Cases: 2 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-### Error in: git-annex unannex:0:no content
-foo: getSymbolicLinkStatus: does not exist (No such file or directory)
-Cases: 2 Tried: 1 Errors: 1 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-git-annex: foo not found
-### Error in: git-annex unannex:1:with content
-foo: getSymbolicLinkStatus: does not exist (No such file or directory)
-Cases: 2 Tried: 2 Errors: 2 Failures: 0
-----------------------------------------------------------------------
-drop
-Cases: 3 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-git-annex: foo not found
-git-annex: foo not found
-### Failure in: git-annex drop:0:no remotes
-drop wrongly succeeded with no known copy of file
-Cases: 3 Tried: 1 Errors: 0 Failures: 1warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-git-annex: foo not found
-### Error in: git-annex drop:1:with remote
-foo: getSymbolicLinkStatus: does not exist (No such file or directory)
-Cases: 3 Tried: 2 Errors: 1 Failures: 1warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-git-annex: foo not found
-### Error in: git-annex drop:2:untrusted remote
-foo: getSymbolicLinkStatus: does not exist (No such file or directory)
-Cases: 3 Tried: 3 Errors: 2 Failures: 1
-----------------------------------------------------------------------
-get
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-### Error in: git-annex get
-foo: openFile: does not exist (No such file or directory)
-Cases: 1 Tried: 1 Errors: 1 Failures: 0
-----------------------------------------------------------------------
-move
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-### Error in: git-annex move
-foo: getSymbolicLinkStatus: does not exist (No such file or directory)
-Cases: 1 Tried: 1 Errors: 1 Failures: 0
-----------------------------------------------------------------------
-copy
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-### Error in: git-annex copy
-foo: getSymbolicLinkStatus: does not exist (No such file or directory)
-Cases: 1 Tried: 1 Errors: 1 Failures: 0
-----------------------------------------------------------------------
-lock
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-### Error in: git-annex unlock/lock
-foo: getSymbolicLinkStatus: does not exist (No such file or directory)
-Cases: 1 Tried: 1 Errors: 1 Failures: 0
-----------------------------------------------------------------------
-edit
-Cases: 2 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-git-annex: foo not found
-### Error in: git-annex edit/commit:0
-foo: getSymbolicLinkStatus: does not exist (No such file or directory)
-Cases: 2 Tried: 1 Errors: 1 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-git-annex: foo not found
-### Error in: git-annex edit/commit:1
-foo: getSymbolicLinkStatus: does not exist (No such file or directory)
-Cases: 2 Tried: 2 Errors: 2 Failures: 0
-----------------------------------------------------------------------
-fix
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-### Error in: git-annex fix
-foo: getSymbolicLinkStatus: does not exist (No such file or directory)
-Cases: 1 Tried: 1 Errors: 1 Failures: 0
-----------------------------------------------------------------------
-trust
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-Cases: 1 Tried: 1 Errors: 0 Failures: 0
-----------------------------------------------------------------------
-fsck
-Cases: 4 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-### Failure in: git-annex fsck:0
-fsck failed to fail with numcopies unsatisfied
-Cases: 4 Tried: 2 Errors: 0 Failures: 1warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-git-annex: foo not found
-### Failure in: git-annex fsck:2
-fsck failed to fail with content only available in untrusted (current) repository
-Cases: 4 Tried: 3 Errors: 0 Failures: 2warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-git-annex: foo not found
-git-annex: sha1foo not found
-### Failure in: git-annex fsck:3
-fsck failed to fail with content not replicated to enough non-untrusted repositories
-Cases: 4 Tried: 4 Errors: 0 Failures: 3
-----------------------------------------------------------------------
-migrate
-Cases: 2 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-### Error in: git-annex migrate:0
-foo: getSymbolicLinkStatus: does not exist (No such file or directory)
-Cases: 2 Tried: 1 Errors: 1 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-### Error in: git-annex migrate:1
-foo: getSymbolicLinkStatus: does not exist (No such file or directory)
-Cases: 2 Tried: 2 Errors: 2 Failures: 0
-----------------------------------------------------------------------
- unused
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-git-annex: foo not found
-git-annex: sha1foo not found
-fatal: pathspec 'foo' did not match any files
-### Failure in: git-annex unused/dropunused
-git rm failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-----------------------------------------------------------------------
-describe
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-Cases: 1 Tried: 1 Errors: 0 Failures: 0
-----------------------------------------------------------------------
-find
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-### Error in: git-annex find
-foo: getSymbolicLinkStatus: does not exist (No such file or directory)
-Cases: 1 Tried: 1 Errors: 1 Failures: 0
-----------------------------------------------------------------------
-merge
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-Cases: 1 Tried: 1 Errors: 0 Failures: 0
-----------------------------------------------------------------------
-status
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-{"command":"status","supported backends":["SHA256E","SHA1E","SHA512E","SHA224E","SHA384E","SHA256","SHA1","SHA512","SHA224","SHA384","WORM","URL"],"supported remote types":["git","S3","bup","directory","rsync","web","webdav","glacier","hook"],"repository mode":"indirect","trusted repositories":[],"semitrusted repositories":[{"uuid":"00000000-0000-0000-0000-000000000001","description":"web","here":false},{"uuid":"80db3ccc-8c73-4279-b803-1b02c91dd158","description":".t/tmprepo0","here":true},{"uuid":"c01ef662-caa7-46d1-95de-544bee8b08f1","description":"origin (test repo)","here":false}],"untrusted repositories":[],"dead repositories":[],"available local disk space":"75 gigabytes (+1 megabyte reserved)","local annex keys":0,"local annex size":"0 bytes","known annex keys":0,"known annex size":"0 bytes","bloom filter size":"16 mebibytes (0% full)","success":true}
-Cases: 1 Tried: 1 Errors: 0 Failures: 0
-----------------------------------------------------------------------
-version
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-git-annex version: 4.20130314
-local repository version: 3
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS
-Cases: 1 Tried: 1 Errors: 0 Failures: 0
-----------------------------------------------------------------------
-sync
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-# On branch master
-#
-# Initial commit
-#
-nothing to commit (create/copy files and use "git add" to track)
-### Failure in: git-annex sync
-sync failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-----------------------------------------------------------------------
-sync regression
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-git-annex: foo not found
-git-annex: foo not found
-git-annex: foo not found
-# On branch master
-#
-# Initial commit
-#
-nothing to commit (create/copy files and use "git add" to track)
-### Failure in: git-annex sync_regression
-sync failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-----------------------------------------------------------------------
-map
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-Cases: 1 Tried: 1 Errors: 0 Failures: 0
-----------------------------------------------------------------------
-uninit
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-### Error in: git-annex uninit
-foo: getSymbolicLinkStatus: does not exist (No such file or directory)
-Cases: 1 Tried: 1 Errors: 1 Failures: 0
-----------------------------------------------------------------------
-upgrade
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-Cases: 1 Tried: 1 Errors: 0 Failures: 0
-----------------------------------------------------------------------
-whereis
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-### Error in: git-annex whereis
-foo: getSymbolicLinkStatus: does not exist (No such file or directory)
-Cases: 1 Tried: 1 Errors: 1 Failures: 0
-----------------------------------------------------------------------
-hook remote
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-git-annex: foo not found
-### Error in: git-annex hook remote
-foo: getSymbolicLinkStatus: does not exist (No such file or directory)
-Cases: 1 Tried: 1 Errors: 1 Failures: 0
-----------------------------------------------------------------------
-directory remote
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-git-annex: foo not found
-### Error in: git-annex directory remote
-foo: getSymbolicLinkStatus: does not exist (No such file or directory)
-Cases: 1 Tried: 1 Errors: 1 Failures: 0
-----------------------------------------------------------------------
-rsync remote
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-git-annex: foo not found
-### Error in: git-annex rsync remote
-foo: getSymbolicLinkStatus: does not exist (No such file or directory)
-Cases: 1 Tried: 1 Errors: 1 Failures: 0
-----------------------------------------------------------------------
-bup remote
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-Cases: 1 Tried: 1 Errors: 0 Failures: 0
-----------------------------------------------------------------------
-crypto
-Cases: 1 Tried: 0 Errors: 0 Failures: 0warning: remote HEAD refers to nonexistent ref, unable to checkout.
-
-git-annex: foo not found
-### Error in: git-annex crypto
-foo: getSymbolicLinkStatus: does not exist (No such file or directory)
-Cases: 1 Tried: 1 Errors: 1 Failures: 0
-----------------------------------------------------------------------
-Some tests failed!
- (This could be due to a bug in git-annex, or an incompatability
- with utilities, such as git, installed on this system.)
-
-> (The test suite output suggests to me that it was run on a system
-> that does not support symlinks, and may be broken in some other way
-> as well, but is not relevant to this bug report.)
-> --[[Joey]]
-
-> Closing this bug since the bug submitter cannot reproduce it and
-> had many problems that seems to point at a bad build. [[done]] --[[Joey]]
diff --git a/doc/bugs/WEBDAV_443/comment_10_9ee2c5ed44295455af890caee7b06f1a._comment b/doc/bugs/WEBDAV_443/comment_10_9ee2c5ed44295455af890caee7b06f1a._comment
deleted file mode 100644
index 38c38e019..000000000
--- a/doc/bugs/WEBDAV_443/comment_10_9ee2c5ed44295455af890caee7b06f1a._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="https://pradermecker.myopenid.com/"
- ip="195.244.162.7"
- subject="comment 10"
- date="2013-03-18T15:47:19Z"
- content="""
-Ok, I will try that.
-
-For your information, I have rebuild the aur package inside a VM using the latest master. All tests passed.
-
-Now I get a new error message with WEBDAV saying:
-
-```
-git-annex: WebDAV failed to write file: \"Conflict\": user error
-```
-
-As a note the current aur build is rather cumbersome because it needs to rebuild a lot of packages using cabal. I believe this is due to a few missing dependencies in the Arch repos [haskell-core] and [haskell-web] such as uuid, SafeSemaphore or c2hs.
-"""]]
diff --git a/doc/bugs/WEBDAV_443/comment_11_863a7d315212c9a8ab8f6fafa5d1b7f5._comment b/doc/bugs/WEBDAV_443/comment_11_863a7d315212c9a8ab8f6fafa5d1b7f5._comment
deleted file mode 100644
index c58c70c21..000000000
--- a/doc/bugs/WEBDAV_443/comment_11_863a7d315212c9a8ab8f6fafa5d1b7f5._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://pradermecker.myopenid.com/"
- ip="195.244.162.7"
- subject="comment 11"
- date="2013-03-18T16:24:52Z"
- content="""
-FYI, it is a bit heavy for me to try the standalone version as it is 32 bits only (I am on 64-bits)
-"""]]
diff --git a/doc/bugs/WEBDAV_443/comment_12_c17a4e23011e0a917dbe0ecf7e9f0cb5._comment b/doc/bugs/WEBDAV_443/comment_12_c17a4e23011e0a917dbe0ecf7e9f0cb5._comment
deleted file mode 100644
index be045c407..000000000
--- a/doc/bugs/WEBDAV_443/comment_12_c17a4e23011e0a917dbe0ecf7e9f0cb5._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 12"
- date="2013-03-18T16:33:31Z"
- content="""
-The standalone version works on either architecture, it does not depend on any system libraries, thus the name \"standalone\".
-"""]]
diff --git a/doc/bugs/WEBDAV_443/comment_13_3414416ff455d2fd1a7c7e7c4554b54d._comment b/doc/bugs/WEBDAV_443/comment_13_3414416ff455d2fd1a7c7e7c4554b54d._comment
deleted file mode 100644
index 0a3297f71..000000000
--- a/doc/bugs/WEBDAV_443/comment_13_3414416ff455d2fd1a7c7e7c4554b54d._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="https://pradermecker.myopenid.com/"
- ip="195.244.162.7"
- subject="comment 13"
- date="2013-03-18T16:39:58Z"
- content="""
-I actually don't know if it has something to do with 32 or 64 bits but with the standalone I have got:
-/opt/git-annex.linux/runshell: line 69: /opt/git-annex.linux/bin/git-annex-shell: No such file or directory
-
-I have tried both the aur standalone and directly downloading the tarball.
-"""]]
diff --git a/doc/bugs/WEBDAV_443/comment_14_e1da141eefb0445c217e5f5c119356da._comment b/doc/bugs/WEBDAV_443/comment_14_e1da141eefb0445c217e5f5c119356da._comment
deleted file mode 100644
index 5097df183..000000000
--- a/doc/bugs/WEBDAV_443/comment_14_e1da141eefb0445c217e5f5c119356da._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 14"
- date="2013-03-18T16:54:02Z"
- content="""
-Given that line 69 of runshell is a newline, and that runshell does not ever try to run git-annex-shell, I wonder what you downloaded exactly...
-"""]]
diff --git a/doc/bugs/WEBDAV_443/comment_15_41c3134bcc222b97bf183559723713d9._comment b/doc/bugs/WEBDAV_443/comment_15_41c3134bcc222b97bf183559723713d9._comment
deleted file mode 100644
index 5bf5bafe4..000000000
--- a/doc/bugs/WEBDAV_443/comment_15_41c3134bcc222b97bf183559723713d9._comment
+++ /dev/null
@@ -1,27 +0,0 @@
-[[!comment format=mdwn
- username="https://pradermecker.myopenid.com/"
- ip="195.244.162.7"
- subject="comment 15"
- date="2013-03-18T19:07:31Z"
- content="""
-Euh. I actually feel stupid enough with this but ...
-
-I have try first with your link and it gives me:
-
-```
-./runshell: line 75: /home/vagrant/programs/git-annex.linux/bin/sh: No such file or directory
-```
-
-As I told you I then try the AUR package : https://aur.archlinux.org/packages/git-annex-standalone/
-
-And it does give me the same error on line 69.
-
-It is the same line (3 lines before the end):
-
-```
-exec \"$cmd\" \"$@\"
-```
-
-I really don't get it because the file is there ... and the first sanity checks of the script have pass.
-
-"""]]
diff --git a/doc/bugs/WEBDAV_443/comment_16_89621b526065b5bef753ce75db1af7b5._comment b/doc/bugs/WEBDAV_443/comment_16_89621b526065b5bef753ce75db1af7b5._comment
deleted file mode 100644
index 059a8ee00..000000000
--- a/doc/bugs/WEBDAV_443/comment_16_89621b526065b5bef753ce75db1af7b5._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://pradermecker.myopenid.com/"
- ip="195.244.162.7"
- subject="comment 16"
- date="2013-03-18T19:31:42Z"
- content="""
-Actually it is even worse ...
-
-With your link, line 75 is actually 2 lines below (sh).
-
-So same command (runshell), same error, different places (I guess it is always the last line executed) ...
-
-Is it supposed to work fine in 64 bits also ?
-"""]]
diff --git a/doc/bugs/WEBDAV_443/comment_17_131a1b65c8008cf9f02c93d4fb75720b._comment b/doc/bugs/WEBDAV_443/comment_17_131a1b65c8008cf9f02c93d4fb75720b._comment
deleted file mode 100644
index 515976b85..000000000
--- a/doc/bugs/WEBDAV_443/comment_17_131a1b65c8008cf9f02c93d4fb75720b._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 7"
- date="2013-03-18T23:05:26Z"
- content="""
-The standalone linux tarball will work on 64 or 32 bit systems, as long as they are capable of linking 32 bit elf executables. I cannot test if Arch Linux is incapable of this.
-
-I'm getting a bit tired of wild tangents, can we you just find someplace, be it a Debian chroot or whatever, to run the standalone linux tarball and test if DAV works there?
-"""]]
diff --git a/doc/bugs/WEBDAV_443/comment_18_b4f894a0b9ebb84ab73f6ffcf0778090._comment b/doc/bugs/WEBDAV_443/comment_18_b4f894a0b9ebb84ab73f6ffcf0778090._comment
deleted file mode 100644
index fe25b98e6..000000000
--- a/doc/bugs/WEBDAV_443/comment_18_b4f894a0b9ebb84ab73f6ffcf0778090._comment
+++ /dev/null
@@ -1,29 +0,0 @@
-[[!comment format=mdwn
- username="https://pradermecker.myopenid.com/"
- ip="195.244.162.7"
- subject="It works !"
- date="2013-03-19T10:40:31Z"
- content="""
-Sorry for the wild tangents.
-
-It is now working. I am not sure what went wrong.
-
-For the record here are the steps I took (all using the Git annex UI):
-
-* Set up removable media -> OK
-* Set up remote SSH -> missing lsof -> install it -> everything OK
-* Set up S3 -> had issue with time -> solve it with ntp -> everything OK
-* Try again WebDav -> \"Conflict\" message -> try using another dir -> everything OK
-
-There might be a \"cleanup after error problem\" somewhere that would explain the conflict message I have received.
-
-Again for the record, I made it works inside a VM using the AUR \"git-annex 4.20130314-1\" (not the standalone). The only change I made on the PKGBUILD was to install everything with cabal except for the packages in the [haskell-core] Arch repo. I know you are not aware with Arch but basically I choose not to rely on the [haskell-web] Arch repo.
-
-I will try again at home on my laptop and I will try the standalone as well.
-
-Thanks you so much for the wonderful product !
-
-Cheers
-
-
-"""]]
diff --git a/doc/bugs/WEBDAV_443/comment_1_c6572ca1eaaf89b01c0ed99a4058412f._comment b/doc/bugs/WEBDAV_443/comment_1_c6572ca1eaaf89b01c0ed99a4058412f._comment
deleted file mode 100644
index f474fe488..000000000
--- a/doc/bugs/WEBDAV_443/comment_1_c6572ca1eaaf89b01c0ed99a4058412f._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-03-16T15:35:05Z"
- content="""
-The i386 standalone build for 4.20130314, which is IIRC repackaged by Arch linux, was made using a known broken webdav library. I've since updated that build to use a new version of webdav. Since it only affected that one build, I do not plan to do a full re-release with a new version number.
-
-Probably Arch needs to update their package.
-"""]]
diff --git a/doc/bugs/WEBDAV_443/comment_2_a357969cde382a91e13920ee1e9f711c._comment b/doc/bugs/WEBDAV_443/comment_2_a357969cde382a91e13920ee1e9f711c._comment
deleted file mode 100644
index 522685670..000000000
--- a/doc/bugs/WEBDAV_443/comment_2_a357969cde382a91e13920ee1e9f711c._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://pradermecker.myopenid.com/"
- ip="81.244.205.197"
- subject="Thanks"
- date="2013-03-16T15:46:45Z"
- content="""
-Thanks for your quick comment ! I was about to get crazy trying my password again and again ;-)
-"""]]
diff --git a/doc/bugs/WEBDAV_443/comment_3_213815d6b827d467c60f3e8af925813b._comment b/doc/bugs/WEBDAV_443/comment_3_213815d6b827d467c60f3e8af925813b._comment
deleted file mode 100644
index 60f7ef9d3..000000000
--- a/doc/bugs/WEBDAV_443/comment_3_213815d6b827d467c60f3e8af925813b._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-03-17T21:07:50Z"
- content="""
-Seems that I misdiagnosed this. The error message from the bad TLS library was about a had certificate, not \"user error\" (which, confusingly, does not mean what user error normally means!).
-
-Also, I see you reported this at <https://aur.archlinux.org/packages/git-annex/>, so you're using that build and not the \"git-annex-bin\" build at <https://aur.archlinux.org/packages.php?ID=63503>. The Arch Linux build that's done from source couldn't be affected by the Debian-spefific TLS bug anyway.
-
-I am reopening this bug report.
-
-Now, FailedConnectionException could be any of several things, but I noticed that someone else (perhaps cooindidentially using Arch Linux) reported the same error message here: [[Proxy_support]]. I wonder if you perhaps also have a http proxy that could be causing trouble.
-"""]]
diff --git a/doc/bugs/WEBDAV_443/comment_4_b775be4b722fc7124d9fbe2d5d01cc9f._comment b/doc/bugs/WEBDAV_443/comment_4_b775be4b722fc7124d9fbe2d5d01cc9f._comment
deleted file mode 100644
index 12767d961..000000000
--- a/doc/bugs/WEBDAV_443/comment_4_b775be4b722fc7124d9fbe2d5d01cc9f._comment
+++ /dev/null
@@ -1,22 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 4"
- date="2013-03-17T21:19:20Z"
- content="""
-Digging into your error message a bit more, it looks like this is not a http proxy (or if it is, it's letting some connections through).
-
-git-annex is testing the box.com WebDAV server, by performing 3 actions:
-
-1. Creating the requested subdirectory on it, in your case \"git-annex\".
-2. Creating an empty file to that directory, named \"git-annex-test\"
-3. Deleting the file.
-
-Step 2 is failing. Which sort of suggests step 1 succeeded, but who knows..
-
-So, if you go look at your files on box.com, do you have a git-annex directory?
-
-Does git-annex/git-annex-test exist?
-
-Does it also fail if you use a different directory, like https://www.box.com/dav/git-annex2 ?
-"""]]
diff --git a/doc/bugs/WEBDAV_443/comment_5_c4ea745da437e56b2426d1c2c00dfcec._comment b/doc/bugs/WEBDAV_443/comment_5_c4ea745da437e56b2426d1c2c00dfcec._comment
deleted file mode 100644
index e99f36524..000000000
--- a/doc/bugs/WEBDAV_443/comment_5_c4ea745da437e56b2426d1c2c00dfcec._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="https://pradermecker.myopenid.com/"
- ip="81.244.157.3"
- subject="comment 5"
- date="2013-03-17T22:03:22Z"
- content="""
-No there is no directory created on box.com. I have actually tried with other names without success. I did even try to create the directory myself and use this one but it makes no difference.
-
-I am not sure to understand what 443 means.
-
-To be sure it is not a local config problem on my computer, I have tried to put a file to box using cadaver: cadaver works just fine (create dir, upload, delete file).
-
-After your comment, I actually rebuild the package using master. I still have the same error with WebDav but now all tests pass (git annex test)
-
-Let me know if you need me to do further investigation. Thanks.
-
-"""]]
diff --git a/doc/bugs/WEBDAV_443/comment_6_ef05c0ae88fee9c626922c6064ffdf1e._comment b/doc/bugs/WEBDAV_443/comment_6_ef05c0ae88fee9c626922c6064ffdf1e._comment
deleted file mode 100644
index 0d3261646..000000000
--- a/doc/bugs/WEBDAV_443/comment_6_ef05c0ae88fee9c626922c6064ffdf1e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://pradermecker.myopenid.com/"
- ip="81.244.157.3"
- subject="comment 6"
- date="2013-03-17T22:07:06Z"
- content="""
-I have also tried with the gui and got the same error.
-"""]]
diff --git a/doc/bugs/WEBDAV_443/comment_7_eecabe8d5ed564cb540450770ca7d0b6._comment b/doc/bugs/WEBDAV_443/comment_7_eecabe8d5ed564cb540450770ca7d0b6._comment
deleted file mode 100644
index d6d3241bf..000000000
--- a/doc/bugs/WEBDAV_443/comment_7_eecabe8d5ed564cb540450770ca7d0b6._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 7"
- date="2013-03-18T00:18:52Z"
- content="""
-443 is the port used for https.
-"""]]
diff --git a/doc/bugs/WEBDAV_443/comment_8_7f77ba8ebd90186d3b3949ae529ba393._comment b/doc/bugs/WEBDAV_443/comment_8_7f77ba8ebd90186d3b3949ae529ba393._comment
deleted file mode 100644
index 68d6d5b83..000000000
--- a/doc/bugs/WEBDAV_443/comment_8_7f77ba8ebd90186d3b3949ae529ba393._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://pradermecker.myopenid.com/"
- ip="195.244.162.7"
- subject="comment 8"
- date="2013-03-18T08:33:04Z"
- content="""
-Yes, of course, I know about 443.
-
-I was just surprised to see it in the error message (where as a code my mind was expecting a http error code).
-
-What I meant is that I don't really see how it fits in the current error message.
-"""]]
diff --git a/doc/bugs/WEBDAV_443/comment_9_87ebdc92b48d672964fb3f248c53600f._comment b/doc/bugs/WEBDAV_443/comment_9_87ebdc92b48d672964fb3f248c53600f._comment
deleted file mode 100644
index eb51fe641..000000000
--- a/doc/bugs/WEBDAV_443/comment_9_87ebdc92b48d672964fb3f248c53600f._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 9"
- date="2013-03-18T15:04:00Z"
- content="""
-I think what you need to do is try installing the [Linux standalone tarball](http://downloads.kitenet.net/git-annex/linux/current/) and see if it works with WebDAV. We need to rule out this being a bad build on the Arch side. The Linux standalone tarball works with box.com for me.
-
-"""]]
diff --git a/doc/bugs/WORM:_Handle_long_filenames_correctly.mdwn b/doc/bugs/WORM:_Handle_long_filenames_correctly.mdwn
deleted file mode 100644
index 3c9374100..000000000
--- a/doc/bugs/WORM:_Handle_long_filenames_correctly.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-I have files with very long filenames on an xfs at home. On my laptop the annex should have been checked out on an encfs, but there filenames can't be as long as on the xfs. So perhaps it would be good to limit the keysize to a sane substring of the filename e.g. use only the first 120 characters.
-
-> Since there seems no strong argument for a WORM100, and better options
-> exist, closing. [[done]] --[[Joey]]
diff --git a/doc/bugs/WORM:_Handle_long_filenames_correctly/comment_1_77aa9cafbe20367a41377f3edccc9ddb._comment b/doc/bugs/WORM:_Handle_long_filenames_correctly/comment_1_77aa9cafbe20367a41377f3edccc9ddb._comment
deleted file mode 100644
index 41d3afb3e..000000000
--- a/doc/bugs/WORM:_Handle_long_filenames_correctly/comment_1_77aa9cafbe20367a41377f3edccc9ddb._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 1"
- date="2011-04-08T17:14:25Z"
- content="""
-Seems like you probably have files in git with nearly as long filenames as the key files. Course, you can rename those yourself.
-
-This couldn't be changed directly in WORM without some ugly transition, but it would be possible to implement it as a WORM100 or so. OTOH, if you're going to git annex migrate, you might as well use SHA1.
-"""]]
diff --git a/doc/bugs/WORM:_Handle_long_filenames_correctly/comment_2_fe735d728878d889ccd34ec12b3a7dea._comment b/doc/bugs/WORM:_Handle_long_filenames_correctly/comment_2_fe735d728878d889ccd34ec12b3a7dea._comment
deleted file mode 100644
index d00191f9d..000000000
--- a/doc/bugs/WORM:_Handle_long_filenames_correctly/comment_2_fe735d728878d889ccd34ec12b3a7dea._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 2"
- date="2011-04-08T22:02:41Z"
- content="""
-What if your files have the same prefix and it happens to be 100 chars long? This can not be solved within WORM, but as Joey pointed out, SHA* exists.
-"""]]
diff --git a/doc/bugs/WORM:_Handle_long_filenames_correctly/comment_3_2bf0f02d27190578e8f4a32ddb195a0a._comment b/doc/bugs/WORM:_Handle_long_filenames_correctly/comment_3_2bf0f02d27190578e8f4a32ddb195a0a._comment
deleted file mode 100644
index d9c291b17..000000000
--- a/doc/bugs/WORM:_Handle_long_filenames_correctly/comment_3_2bf0f02d27190578e8f4a32ddb195a0a._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 3"
- date="2011-04-09T20:11:59Z"
- content="""
-I wouldn't say it's completly impossible for a WORM100 to work. It would just have the contract that the pair of mtime+100chars has to be unique for each unique piece of data.
-
-But, I have yet to be convinced there's any point, since SHA1 exists.
-"""]]
diff --git a/doc/bugs/WORM:_Handle_long_filenames_correctly/comment_4_8f7ba9372463863dda5aae13205861bf._comment b/doc/bugs/WORM:_Handle_long_filenames_correctly/comment_4_8f7ba9372463863dda5aae13205861bf._comment
deleted file mode 100644
index 5c08cad6e..000000000
--- a/doc/bugs/WORM:_Handle_long_filenames_correctly/comment_4_8f7ba9372463863dda5aae13205861bf._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 4"
- date="2011-04-09T23:45:28Z"
- content="""
-mtime+100chars can still get collisions and a _lot_ easier than even SHA1. This introduces more problems that it solves, imo.
-"""]]
diff --git a/doc/bugs/WORM_keys_differ_depending_on_working_dir_during_add.mdwn b/doc/bugs/WORM_keys_differ_depending_on_working_dir_during_add.mdwn
new file mode 100644
index 000000000..9787ad5cc
--- /dev/null
+++ b/doc/bugs/WORM_keys_differ_depending_on_working_dir_during_add.mdwn
@@ -0,0 +1,68 @@
+### Please describe the problem.
+
+While the docs say that WORM keys are a function of a files basename,
+when doing «git annex add .», the generated keys will actually contain
+the relative path (with slashes escaped). Not sure whether this is by
+design or a bug in its own right. I suppose that to minimize the chance
+of collisions on WORM, having the path within the key is preferable.
+
+A problem about this, however, is that the path in the key is not
+stable, but varies with the working dir when doing the «git annex
+add». So, when a file is added from one working dir (say, the repo
+base), later unlocked, and readded from another working dir (say,
+somewhere below the repo base), this will generate a different key
+even when the file has not been touched.
+
+Is there a rationale for this variability, or should «add» canonicalize
+the encoded paths to the repo root?
+
+
+### What steps will reproduce the problem?
+
+
+[[!format sh """
+
+# Init
+$ git init /tmp/foo
+$ cd /tmp/foo && git annex init
+
+$ mkdir baz
+$ touch baz/quux
+
+# Add file with working dir at repo root.
+$ git annex add --backend=WORM baz
+$ git commit -m "first"
+
+# Key includes relative path.
+$ readlink baz/quux
+../.git/annex/objects/8x/8V/WORM-s0-m1406981486--baz%quux/WORM-s0-m1406981486--baz%quux
+
+# Unlock and readd with working dir at path below repo root.
+$ cd baz
+$ git annex unlock quux
+
+$ git annex add quux
+$ git com -m "second"
+
+# Relative path is anchored to working dir instead of repo root.
+$ readlink quux
+../.git/annex/objects/9G/72/WORM-s0-m1406981486--quux/WORM-s0-m1406981486--quux
+
+# End of transcript or log.
+"""]]
+
+### What version of git-annex are you using? On what operating system?
+Linux 3.15.8
+
+git-annex 5.20140716
+
+> This was a bug. I suspect it got broken a while ago and I didn't noticed
+> since I rarely use WORM and when I do it's almost always adding files
+> in the current directory. [[fixed|done]] to take the filename only.
+>
+> I don't think it's a problem to have the subdirectory path in the
+> existing WORM keys, other than the problems you note with this meaning
+> a later add of the same file will generate a different key. So I have not
+> done anything to try to fix up existing keys. (If this became a problem,
+> I could add upgrade code to the WORM backend.)
+> --[[Joey]]
diff --git a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults.mdwn b/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults.mdwn
deleted file mode 100644
index f3833b3b3..000000000
--- a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults.mdwn
+++ /dev/null
@@ -1,31 +0,0 @@
-After fixing a few things - see [[bugs/the tip at commit 6cecc26206c4a539999b04664136c6f785211a41 disables the watch command on OSX]], [[bugs/Missing dependancy in commit 6cecc26206c4a539999b04664136c6f785211a41]] and [[bugs/Fix for opening a browser on a mac (or xdg-open on linux/bsd?)]] I tried the watch command on my ~180gig annex of stuff. This might be yet again related to the issue of [[bugs/Issue on OSX with some system limits]]
-
-the watch command segfaults
-
-<pre>
-x00:annex jtang$ git annex watch --foreground -d
-watch . [2012-07-26 12:27:16 IST] read: git ["--git-dir=/Users/jtang/annex/.git","--work-tree=/Users/jtang/annex","show-ref","git-annex"]
-[2012-07-26 12:27:16 IST] read: git ["--git-dir=/Users/jtang/annex/.git","--work-tree=/Users/jtang/annex","show-ref","--hash","refs/heads/git-annex"]
-[2012-07-26 12:27:16 IST] read: git ["--git-dir=/Users/jtang/annex/.git","--work-tree=/Users/jtang/annex","log","refs/heads/git-annex..38d3f769ef004b96b6d640cfb59a45f7b4edf5f6","--oneline","-n1"]
-[2012-07-26 12:27:16 IST] read: git ["--git-dir=/Users/jtang/annex/.git","--work-tree=/Users/jtang/annex","log","refs/heads/git-annex..ebabe9c92516c350a30126037173080648f5930b","--oneline","-n1"]
-[2012-07-26 12:27:16 IST] read: git ["--git-dir=/Users/jtang/annex/.git","--work-tree=/Users/jtang/annex","log","refs/heads/git-annex..d36d8d88847decc2320f0be22892ad94a8abe594","--oneline","-n1"]
-[2012-07-26 12:27:16 IST] read: git ["--git-dir=/Users/jtang/annex/.git","--work-tree=/Users/jtang/annex","log","refs/heads/git-annex..aaa62a8191b3c964fdf546077049f626e8561b22","--oneline","-n1"]
-[2012-07-26 12:27:16 IST] chat: git ["--git-dir=/Users/jtang/annex/.git","--work-tree=/Users/jtang/annex","cat-file","--batch"]
-(scanning...) error: git-annex died of signal 11
-</pre>
-
-The above was done on the usual OSX 10.7 system that I have.
-
----
-
-I'll try and bisect it and find out where the problem first appeared, does the tests currently test the watch command? (also my comments seem to get moderated whether i use my openid account with google or with the native ikiwiki account, so some comments might be hidden)
-
-> The test suite does not currently test the watch command, unfortunatly.
->
-> Wow, I had not noticed the 30 pending moderated comments.. Let them all
-> thru, and I guess I'll turn off comment spam filtering for now, since
-> there has apparently been none. --[[Joey]]
-
----
-
-> Seems this segfault is fixed. [[done]] --[[Joey]]
diff --git a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_10_6c872dff4fcc63c16bf69d1e96891c89._comment b/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_10_6c872dff4fcc63c16bf69d1e96891c89._comment
deleted file mode 100644
index 952ffadc4..000000000
--- a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_10_6c872dff4fcc63c16bf69d1e96891c89._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="jtang"
- ip="79.97.135.214"
- subject="comment 10"
- date="2012-07-29T10:49:05Z"
- content="""
-This is looking good, no more segfaulting.
-"""]]
diff --git a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_1_5cad24007f819e4be193123dab0d511a._comment b/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_1_5cad24007f819e4be193123dab0d511a._comment
deleted file mode 100644
index 23a4165a4..000000000
--- a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_1_5cad24007f819e4be193123dab0d511a._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.2.189"
- subject="not good.."
- date="2012-07-26T17:09:16Z"
- content="""
-Do you see the segfault in a repo with fewer files?
-
-
-"""]]
diff --git a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_2_d449bf656a59d424833f9ab5a7fb4e82._comment b/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_2_d449bf656a59d424833f9ab5a7fb4e82._comment
deleted file mode 100644
index 04b7ed1ae..000000000
--- a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_2_d449bf656a59d424833f9ab5a7fb4e82._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.2.189"
- subject="comment 2"
- date="2012-07-26T17:09:59Z"
- content="""
-Also, you might try bisecting to find whatever commit it first started segfaulting on.
-"""]]
diff --git a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_3_ffb1ce41477ad60840abd7a89a133067._comment b/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_3_ffb1ce41477ad60840abd7a89a133067._comment
deleted file mode 100644
index 42f59d1bc..000000000
--- a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_3_ffb1ce41477ad60840abd7a89a133067._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="jtang"
- ip="79.97.135.214"
- subject="comment 3"
- date="2012-07-26T17:11:55Z"
- content="""
-It fails on repos with either no files or smaller repos.
-"""]]
diff --git a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_4_cebbc138c6861c086bb7937b54f5adbc._comment b/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_4_cebbc138c6861c086bb7937b54f5adbc._comment
deleted file mode 100644
index 71e810291..000000000
--- a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_4_cebbc138c6861c086bb7937b54f5adbc._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="jtang"
- ip="79.97.135.214"
- subject="comment 4"
- date="2012-07-26T17:50:42Z"
- content="""
-It just occurred to me that bisecting won't help much, as the watch command was disabled accidentally in earlier commits and doing a script for bisecting is going to be as much work as just stepping through and debugging the issue with a debugger (i might need to fire up gdb on a mac (this wont be fun))
-"""]]
diff --git a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_5_5e27737a5bb0e9e46c98708700318e67._comment b/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_5_5e27737a5bb0e9e46c98708700318e67._comment
deleted file mode 100644
index 8f781ed97..000000000
--- a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_5_5e27737a5bb0e9e46c98708700318e67._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 5"
- date="2012-07-27T12:20:07Z"
- content="""
-After some debugging, I looked at the Utility/libkqueue.c and used it as a test, it seems to be hanging/segfaulting around the call to that library. Annoyingly I get segfaults from the library every so often on OSX, it's pretty a random event.
-"""]]
diff --git a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_6_1f92da712232d050e085a4f39063d7a6._comment b/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_6_1f92da712232d050e085a4f39063d7a6._comment
deleted file mode 100644
index 2aa866410..000000000
--- a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_6_1f92da712232d050e085a4f39063d7a6._comment
+++ /dev/null
@@ -1,21 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.2.20"
- subject="comment 6"
- date="2012-07-27T16:34:45Z"
- content="""
-Are you seeing libkqueue crash when it's called from a debugger or C program, rather than from Haskell?
-
-Are you building for 32 or 64 bit? You might try getting the 32 bit version of GCC (or The Haskell Platform) and see if it does better. There is a known GCC crashes on 64 bit OSX involving C libraries,
-although this bug report doesn't seem to apply, since we're not using ghci <http://hackage.haskell.org/trac/ghc/ticket/7040>.
-
-Are you building with cabal, or using the Makefile?
-
-You might try reverting git commit da4c506d61115236f3e43dd0bd17f30cd54df950
-
-You might try disabling the -threaded option in the cabal file or Makefile.
-
-I ssh'd to the OSX box I have an account on, and confirmed that git-annex watch still works there as of the current head of the `assistant` branch. That's a 64 bit GHC system, FWIW.
-
-Do you see the crash when building from the `master` branch, or only `assistant`? Master has the watch command, but it's much out of date, so this will tell if the problem was introduced recently... and you might still have to bisect it since I can't reproduce it. :(
-"""]]
diff --git a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_7_4153dc8029c545f8e86584a38bd536fb._comment b/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_7_4153dc8029c545f8e86584a38bd536fb._comment
deleted file mode 100644
index ccb4593ec..000000000
--- a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_7_4153dc8029c545f8e86584a38bd536fb._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 7"
- date="2012-07-27T17:23:24Z"
- content="""
-I'm using make and a 64bit version of haskell-platform, it's fine on the master branch. It's just crashing on the assistant branch, I'm just thinking out loud, but could I share the binaries that I have with you (I'd like to grab your binaries too) to see see if its just some silly problem with my build environment.
-
-I'm seeing the crash when I'm running git-annex (in haskell), when I run libkqueue in a debugger it behaves randomly, is mostly succeeds, but every so often it fails. A back trace reveals nothing so I am a bit at a loss.
-
-I've tried disabling the threaded option, but it still crashes, I will give it another try later when I get home. The problem seems to occur on my desktop mac in work and my home mac, however it is fine on my linux machines.
-
-Could I ask which version of OSX do you have access to? is it 10.6 or 10.7 ?
-
-"""]]
diff --git a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_8_f85b6eb5bfd28ffc6973fb4ab0fe4337._comment b/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_8_f85b6eb5bfd28ffc6973fb4ab0fe4337._comment
deleted file mode 100644
index cbbd2933c..000000000
--- a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_8_f85b6eb5bfd28ffc6973fb4ab0fe4337._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.2.20"
- subject="comment 8"
- date="2012-07-27T18:10:06Z"
- content="""
-I've reproduced a crash on OSX, involving not kqueue, but the WebApp's use of getaddrinfo. I've fixed that, but several things you've said in this bug report don't 100% add up to this being the same crash you've been seeing (for one thing, this can't affect `git annex watch`), so I'll wait for you to confirm.
-"""]]
diff --git a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_9_c747c488461c98cd285b51d3afc2c3eb._comment b/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_9_c747c488461c98cd285b51d3afc2c3eb._comment
deleted file mode 100644
index b23ae0125..000000000
--- a/doc/bugs/Watch_command_as_of_commit_6cecc26206c4a539999b04664136c6f785211a41_segfaults/comment_9_c747c488461c98cd285b51d3afc2c3eb._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="jtang"
- ip="79.97.135.214"
- subject="comment 9"
- date="2012-07-27T18:17:45Z"
- content="""
-Ah, it's alive, I'm testing on my home machine right now and it's functioning as expected. I've tested on my work machine as well and the watch command works as expected! (short of the existing system limits which fails for my bigger annexes).
-
-Apologies for sending you on the wrong path with the kqueue path. I reckon if I give this a good testing over the weekend is a good idea before closing this bug, I will report back in a few days on this after giving a thrashing of files!
-"""]]
diff --git a/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist.mdwn b/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist.mdwn
deleted file mode 100644
index f798fe2ea..000000000
--- a/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist.mdwn
+++ /dev/null
@@ -1,25 +0,0 @@
-### Please describe the problem.
-
-When starting an git annex webapp in my documents repository, i get the error message, that the watcher thread has died. The error message seems to be arising from the fact, that a watcher thread for an empty string should be started, which does not work.
-
-### What steps will reproduce the problem?
-
-I've no idea, how to reproduce this in another repostory.
-
-### What version of git-annex are you using? On what operating system?
-
-ii git-annex 4.20130709 i386 manage files with git, without checking their contents into git
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-Watcher crashed: addWatch: does not exist (No such file or directory)
-[2013-07-14 10:30:35 CEST] Watcher: warning Watcher crashed: addWatch: does not exist (No such file or directory)
-
-# End of transcript or log.
-"""]]
-
-> [[done]]; see my comment --[[Joey]]
diff --git a/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_1_24f511a8103727894c6e96798a559870._comment b/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_1_24f511a8103727894c6e96798a559870._comment
deleted file mode 100644
index 54808de57..000000000
--- a/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_1_24f511a8103727894c6e96798a559870._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.90"
- subject="comment 1"
- date="2013-07-17T19:33:43Z"
- content="""
-Are you seeing this every time you start the webapp? Because I see a way it could crash, but only if, for example, a directory gets moved or deleted right when it's starting up. That would look just like the crash you've reported, but would seem to be an unusual case that would be unlikely to happen repeatedly.
-
-I've put in a fix for that crash.
-"""]]
diff --git a/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_2_e14eddbc09cadbf1e4dbbb0c07e0e5b0._comment b/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_2_e14eddbc09cadbf1e4dbbb0c07e0e5b0._comment
deleted file mode 100644
index 9f3dd80f5..000000000
--- a/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_2_e14eddbc09cadbf1e4dbbb0c07e0e5b0._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkptNW1PzrVjYlJWP_9e499uH0mjnBV6GQ"
- nickname="Christian"
- subject="comment 2"
- date="2013-07-19T06:14:05Z"
- content="""
-I see the problem always i start the assistant. Even when i don't touch the repository otherwise. But there is a funny observation: I have multiple seperate repositories: there are two old ones, that were created some months ago (upper bound: one year). Those two (seperate) repositories show the addWatch problem (on multiple machines). A newly created repository does not show the problem.
-
-So i suspect that those old repositories behave in some direction differently. Is this possible? I could also give you a clone of one repository.
-"""]]
diff --git a/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_3_513fae4d379008f954a307be8df34976._comment b/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_3_513fae4d379008f954a307be8df34976._comment
deleted file mode 100644
index a85470f68..000000000
--- a/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_3_513fae4d379008f954a307be8df34976._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkptNW1PzrVjYlJWP_9e499uH0mjnBV6GQ"
- nickname="Christian"
- subject="comment 3"
- date="2013-07-19T06:57:39Z"
- content="""
-Oh, I think i found a problem with the inotify_add_watch. I checked the strace and:
-
- [pid 19346] inotify_add_watch(63, \"./Perry Rhodan - Atlan\", IN_CLOSE_WRITE|IN_MOVED_FROM|IN_MOVED_TO|IN_CREATE|IN_DELETE) = 137
- [pid 19346] inotify_add_watch(63, \"./Perry Rhodan - Atlan/Atlan Blaue- Silberbnde\", IN_CLOSE_WRITE|IN_MOVED_FROM|IN_MOVED_TO|IN_CREATE|IN_DELETE) = -1 ENOENT (No such file or directory)
-
-The problem is that there seems to be an encoding problem. There should be a german Umlaut in Silberb[ae]nde. The directory name is not valid encoded.
-"""]]
diff --git a/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_4_172eaeb3bb8b502379695aba35f96120._comment b/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_4_172eaeb3bb8b502379695aba35f96120._comment
deleted file mode 100644
index 84a84dfb8..000000000
--- a/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_4_172eaeb3bb8b502379695aba35f96120._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkptNW1PzrVjYlJWP_9e499uH0mjnBV6GQ"
- nickname="Christian"
- subject="comment 4"
- date="2013-07-19T19:00:23Z"
- content="""
-So it is probably not only an assumption. After fixing the filenames with a script from
-
-http://askubuntu.com/questions/113188/character-encoding-problem-with-filenames-find-broken-filenames
-
-The watcher thread did survive, and the assistant is syncing just fine.
-"""]]
diff --git a/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_5_8adb9de82cc8581422734acc66dd094c._comment b/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_5_8adb9de82cc8581422734acc66dd094c._comment
deleted file mode 100644
index cb95ab913..000000000
--- a/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_5_8adb9de82cc8581422734acc66dd094c._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.140"
- subject="comment 5"
- date="2013-07-20T17:39:48Z"
- content="""
-Ok, I was able to reproduce this problem, although only when using LANG=C.
-
-With a utf8 locale, it doesn't mind the Umlaut, and even works on directories containing invalid unicode characters
-(0xd801 and 0xffff)
-"""]]
diff --git a/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_6_02f0beef1188bfa336bf4220eb5c6286._comment b/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_6_02f0beef1188bfa336bf4220eb5c6286._comment
deleted file mode 100644
index a21352693..000000000
--- a/doc/bugs/Watcher_crashed:_addWatch:_does_not_exist/comment_6_02f0beef1188bfa336bf4220eb5c6286._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.140"
- subject="comment 6"
- date="2013-07-20T22:31:02Z"
- content="""
-Isolated the bug to a problem with the upstream inotify library.
-<https://github.com/kolmodin/hinotify/issues/5> I've sent in a patch to that library that fixes the problem.
-
-Unfortunately, I cannot work around it in git-annex more than I already have. It'll no longer crash, but will skip over files or directories that contain characters not valid in the current locale.
-
-I have applied my patch to the haskell-hinotify package in Debian unstable, and have deployed fixed versions to all my linux autobuilds, including Android. (An Android user had mentioned also seeing this bug.)
-"""]]
diff --git a/doc/bugs/WebDAV_HandshakeFailed_.mdwn b/doc/bugs/WebDAV_HandshakeFailed_.mdwn
deleted file mode 100644
index 69be0c4b5..000000000
--- a/doc/bugs/WebDAV_HandshakeFailed_.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-When I attempt to add a Box.com special remote to my annex I get the following error:
-
- git-annex: HandshakeFailed (Error_Protocol ("certificate rejected: certificate is not allowed to sign another certificate",True,CertificateUnknown))
-
-Running git-annex version: 3.20130207
-
-> Got that bug fixed in Debian and all builds updated. [[done]] --[[Joey]]
diff --git a/doc/bugs/WebDAV_HandshakeFailed_/comment_1_40499110ea43bc99ad9dd9f642da434c._comment b/doc/bugs/WebDAV_HandshakeFailed_/comment_1_40499110ea43bc99ad9dd9f642da434c._comment
deleted file mode 100644
index 9bcc489ee..000000000
--- a/doc/bugs/WebDAV_HandshakeFailed_/comment_1_40499110ea43bc99ad9dd9f642da434c._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlqOu7P4tb4D-Xo2pYrjln2NsAObtErliM"
- nickname="Alexander"
- subject="Same problem"
- date="2013-02-24T16:51:52Z"
- content="""
-Hello,
-
-same problem with box.com and german telekom (https://webdav.mediencenter.t-online.de).
-I'm using git-annex (3.20130216) from debian/unstable on amd64.
-git annex --debug is not helpful I think. Any other trace I can help with?
-
-Regards,
-Alexander
-"""]]
diff --git a/doc/bugs/WebDAV_HandshakeFailed_/comment_2_506712e8cc5b47b9bd69edf67ae54da7._comment b/doc/bugs/WebDAV_HandshakeFailed_/comment_2_506712e8cc5b47b9bd69edf67ae54da7._comment
deleted file mode 100644
index 53642bce4..000000000
--- a/doc/bugs/WebDAV_HandshakeFailed_/comment_2_506712e8cc5b47b9bd69edf67ae54da7._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.210"
- subject="comment 2"
- date="2013-02-24T19:09:14Z"
- content="""
-This is a reversion in version haskell-tls-extra-0.4.6.1.
-
-Opened a bug about this: <https://github.com/vincenthz/hs-tls/issues/32>
-"""]]
diff --git a/doc/bugs/WebDAV_HandshakeFailed_/comment_3_5641481d9e9ed2b711b1516f1abc5c30._comment b/doc/bugs/WebDAV_HandshakeFailed_/comment_3_5641481d9e9ed2b711b1516f1abc5c30._comment
deleted file mode 100644
index 02bb0db11..000000000
--- a/doc/bugs/WebDAV_HandshakeFailed_/comment_3_5641481d9e9ed2b711b1516f1abc5c30._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="annexuser"
- ip="50.125.41.24"
- subject="comment 3"
- date="2013-03-15T18:45:49Z"
- content="""
-The [day 210 update](http://git-annex.branchable.com/design/assistant/blog/day_210__spring/) said that WebDAV should be working in the next release. I just tried it in 4.20130314 (standalone) and get the same `HandshakeFailed` failed error.
-"""]]
diff --git a/doc/bugs/WebDAV_HandshakeFailed_/comment_4_1d609de93fa66ce9dc802e67b5922243._comment b/doc/bugs/WebDAV_HandshakeFailed_/comment_4_1d609de93fa66ce9dc802e67b5922243._comment
deleted file mode 100644
index 5b91e1d5e..000000000
--- a/doc/bugs/WebDAV_HandshakeFailed_/comment_4_1d609de93fa66ce9dc802e67b5922243._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="which build?"
- date="2013-03-15T21:47:34Z"
- content="""
-Can you be more specific which build you are using?
-"""]]
diff --git a/doc/bugs/WebDAV_HandshakeFailed_/comment_5_62761882d30c1b02930c938cb8e30ed4._comment b/doc/bugs/WebDAV_HandshakeFailed_/comment_5_62761882d30c1b02930c938cb8e30ed4._comment
deleted file mode 100644
index dbb1a7e80..000000000
--- a/doc/bugs/WebDAV_HandshakeFailed_/comment_5_62761882d30c1b02930c938cb8e30ed4._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="annexuser"
- ip="50.125.41.24"
- subject="comment 5"
- date="2013-03-15T22:23:44Z"
- content="""
- git-annex version: 4.20130314
-
-Linux i386 standalone build on Arch 64-bit.
-"""]]
diff --git a/doc/bugs/WebDAV_HandshakeFailed_/comment_6_acda8fae848ec486ce2a0b3dff3bd0a5._comment b/doc/bugs/WebDAV_HandshakeFailed_/comment_6_acda8fae848ec486ce2a0b3dff3bd0a5._comment
deleted file mode 100644
index 85678f1ac..000000000
--- a/doc/bugs/WebDAV_HandshakeFailed_/comment_6_acda8fae848ec486ce2a0b3dff3bd0a5._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 6"
- date="2013-03-15T23:49:27Z"
- content="""
-Indeed, I forgot to upgrade that one. Did so and have replaced the autobuild.
-"""]]
diff --git a/doc/bugs/WebDAV_HandshakeFailed_/comment_7_6c51b6c7dd477d8911dd9a7a5c41ea2e._comment b/doc/bugs/WebDAV_HandshakeFailed_/comment_7_6c51b6c7dd477d8911dd9a7a5c41ea2e._comment
deleted file mode 100644
index 9a7036ff0..000000000
--- a/doc/bugs/WebDAV_HandshakeFailed_/comment_7_6c51b6c7dd477d8911dd9a7a5c41ea2e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="annexuser"
- ip="50.46.189.77"
- subject="comment 7"
- date="2013-03-17T01:29:48Z"
- content="""
-It's working now! Thanks!
-"""]]
diff --git a/doc/bugs/WebDAV_HandshakeFailed_/comment_8_e834f791d3000669fab25732a7c72ab3._comment b/doc/bugs/WebDAV_HandshakeFailed_/comment_8_e834f791d3000669fab25732a7c72ab3._comment
deleted file mode 100644
index 8858c8c49..000000000
--- a/doc/bugs/WebDAV_HandshakeFailed_/comment_8_e834f791d3000669fab25732a7c72ab3._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlqOu7P4tb4D-Xo2pYrjln2NsAObtErliM"
- nickname="Alexander"
- subject="box.com fixed"
- date="2013-03-29T15:15:31Z"
- content="""
-yes, box.com is now working. thanks.
-
-german telekom still doesn't work though, due to the lock/unlock issue; see http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=698379
-
-best regards,
-alexander
-"""]]
diff --git a/doc/bugs/WebDAV_error_when_connecting_to_box.com:_The_resource_you_tried_to_create_already_exists.mdwn b/doc/bugs/WebDAV_error_when_connecting_to_box.com:_The_resource_you_tried_to_create_already_exists.mdwn
new file mode 100644
index 000000000..857ca333a
--- /dev/null
+++ b/doc/bugs/WebDAV_error_when_connecting_to_box.com:_The_resource_you_tried_to_create_already_exists.mdwn
@@ -0,0 +1,36 @@
+### Please describe the problem.
+
+"git-annex enableremote box.com" fails with "git-annex: WebDAV test failed". The server returns error message "The resource you tried to create already exists" (see below).
+
+### What steps will reproduce the problem?
+
+1. I initialize box.com special remote in desktop. The path at box.com is at "gas/annex".
+
+2. I enable the box.com special remote in laptop. I got the error I described above.
+
+### What version of git-annex are you using? On what operating system?
+
+ $ git annex version
+ git-annex version: 5.20140831-g62e6ad8
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+ $ uname -a
+ Linux tkf-acer 3.12.9-2-ARCH #1 SMP PREEMPT Fri Jan 31 10:22:54 CET 2014 x86_64 GNU/Linux
+
+
+### Please provide any additional information below.
+
+I ran the following while with appropriate environment variable WEBDAV_USERNAM and WEBDAV_PASSWORD.
+
+ me@desktop$ git-annex initremote box type=webdav url=https://dav.box.com/dav/gas/annex chunk=50mb encryption=shared
+
+ me@laptop$ git-annex enableremote box.com
+ enableremote box.com (testing WebDAV server...)
+
+ git-annex: WebDAV test failed: StatusCodeException (Status {statusCode = 405, statusMessage = "Method Not Allowed"}) [("Server","nginx"),("Date","Sat, 27 Sep 2014 09:36:42 GMT"),("Content-Type","application/xml; charset=utf-8"),("Content-Length","247"),("Connection","keep-alive"),("Vary","Host"),("Allow","OPTIONS, GET, HEAD, DELETE, PROPFIND, PUT, PROPPATCH, COPY, MOVE, REPORT, LOCK, UNLOCK"),("X-Response-Body-Start","<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<d:error xmlns:d=\"DAV:\" xmlns:s=\"http://sabredav.org/ns\">\n <s:exception>Sabre_DAV_Exception_MethodNotAllowed</s:exception>\n <s:message>The resource you tried to create already exists</s:message>\n</d:error>\n")] (CJ {expose = []}): user error
+ failed
+ git-annex: enableremote: 1 failed
+
+> You are using an old version of git-annex; this bug was fixed in
+> version 5.20140919. [[done]] --[[Joey]]
diff --git a/doc/bugs/WebDAV_error_when_connecting_to_box.com:_The_resource_you_tried_to_create_already_exists/comment_1_ac40ddc26bff27dafdbc457837695a92._comment b/doc/bugs/WebDAV_error_when_connecting_to_box.com:_The_resource_you_tried_to_create_already_exists/comment_1_ac40ddc26bff27dafdbc457837695a92._comment
new file mode 100644
index 000000000..89ab74c69
--- /dev/null
+++ b/doc/bugs/WebDAV_error_when_connecting_to_box.com:_The_resource_you_tried_to_create_already_exists/comment_1_ac40ddc26bff27dafdbc457837695a92._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk0GR7KgDF6PAzHTkLZCCkjAvJVB7ceXTY"
+ nickname="Takafumi"
+ subject="comment 1"
+ date="2014-09-27T19:46:08Z"
+ content="""
+I updated git-annex and it works. Thank you very much.
+"""]]
diff --git a/doc/bugs/Weird_behaviour_of_direct_and_indirect_annexes.mdwn b/doc/bugs/Weird_behaviour_of_direct_and_indirect_annexes.mdwn
deleted file mode 100644
index b3b0eea64..000000000
--- a/doc/bugs/Weird_behaviour_of_direct_and_indirect_annexes.mdwn
+++ /dev/null
@@ -1,57 +0,0 @@
-## What steps will reproduce the problem?
-
- ~$ git annex webapp
-
-
-* Add Another Local Repository (~/Direct) "Direct", keep separate (from existing repo) no repo type
-* Add Repository, ~/Indirect "Indirect", combine (with Direct) , repo type client
-* Syncing enabled on both
-
-Then
-
- ~/Indirect$ git annex indirect
- commit ok
- indirect ok
- ok
- ~/Indirect$ touch ../Direct/Test.File
-
-
-## What is the expected output? What do you see instead?
-
-That ~/Indirect/Test.File be a symlink into .git/annex/objects/.......
-
-Instead, it is not a symlink. However, doing
-
- ~/Indirect$ git annex direct
- ~/Indirect$ git annex indirect
-
-results in what I would expect (until the content of Direct/Test.File is changed, when it ceases to be a symlink in ~/Indirect once more)
-
-
-
-## What version of git-annex are you using? On what operating system?
-git-annex version: 4.20130405
-
-Ubuntu 12.10
-
-
-## Please provide any additional information below.
-
-Reading [[direct_mode]], I thought that I could have two repos on my computer, one direct, and one indirect, and if running the assistant, that I could gain the security of retaining old versions, as well as the convenience of direct mode. (I think I understand that correctly; if a direct-mode file only exists in one repository, and is edited, the old version is lost, but if it is in multiple repos, then the old versions will be retained).
-
-It seems to me that if I do
-
- ~/Direct$ echo Content > Test.File
- ~/Direct$ echo More Content > Test.File
- ~/Direct$ echo Even More Content > Test.File
-
-that all three copies are stored in ~/Indirect, so the functionality I'm after seems to work. However, ~/Indirect/Test.File ends up not being a symlink, which I think is odd/unexpected.
-
-
-**Edit: Doing a git annex sync in ~/Indirect results in the continuing behaviour to be correct, so there's some issue telling Direct that Indirect is no longer in direct-mode?**
-This appears to fix it, but I guess shouldn't be necessary.
-
-> AFAICS, the entire problem is that the assistant does not notice when the
-> repository it's running in is changed from direct to indirect mode. Since this
-> has also been reported to cause problems with the assistant, I have added
-> a check to prevent it from being done. [[done]] --[[Joey]]
diff --git a/doc/bugs/Weird_behaviour_of_direct_and_indirect_annexes/comment_1_56474a69c2f174d83be9137d3c045a47._comment b/doc/bugs/Weird_behaviour_of_direct_and_indirect_annexes/comment_1_56474a69c2f174d83be9137d3c045a47._comment
deleted file mode 100644
index d2a261b83..000000000
--- a/doc/bugs/Weird_behaviour_of_direct_and_indirect_annexes/comment_1_56474a69c2f174d83be9137d3c045a47._comment
+++ /dev/null
@@ -1,33 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnSenxKyE_2Z6Wb-EBMO8FciyRywjx1ZiQ"
- nickname="Walter"
- subject="Commands to accomplish same"
- date="2013-04-13T04:43:41Z"
- content="""
-I feel that the following commands should do essentially the same (ie they do what I intend to do).
-More, they even display the correct (expected) behaviour, it seems the strangeness is introduced by the webapp (which, by the way, is really cool).
-
- cd ~
- mkdir Direct Indirect
- git init Direct/
- git init Indirect/
- cd Direct/
- git annex init Direct
- git annex direct
- cd ../Indirect
- git annex init Indirect
- git annex indirect
- touch Indirect
- git annex add Indirect
- git commit -m 'Initial commit'
- git remote add Direct ..//Direct/
- git annex assistant
- cd ../Direct/
- touch Direct
- git annex add Direct
- git commit -m 'Initial commit'
- git remote add Indirect ../Indirect
- git annex assistant
- touch Test
- echo Test > Test
-"""]]
diff --git a/doc/bugs/When_adding_a_box.com_repo_with_the_webapp_the_old-style_chunking_is_used.mdwn b/doc/bugs/When_adding_a_box.com_repo_with_the_webapp_the_old-style_chunking_is_used.mdwn
new file mode 100644
index 000000000..7f00a2e51
--- /dev/null
+++ b/doc/bugs/When_adding_a_box.com_repo_with_the_webapp_the_old-style_chunking_is_used.mdwn
@@ -0,0 +1,5 @@
+Last week I added a new Box.com repository through the webapp with the latest git-annex version, and I've noticed that the remote uses the old chunksize param.
+
+Is this correct? AFAIK it should use the chunk param: http://git-annex.branchable.com/chunking/
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace.mdwn b/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace.mdwn
deleted file mode 100644
index d345cf4da..000000000
--- a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace.mdwn
+++ /dev/null
@@ -1,49 +0,0 @@
-What steps will reproduce the problem?
-Created a repository (working directory), then an another one on the same computer,
-in a different folder for backup repository.
-
-The initial folder, what I imported, contained:
-741MB, 23381 files, most of the files are 30-150kB in sizes.
-
-After 18 hours of continous work
-(I started 28 hours ago, but the laptop died one time,
-and I needed to restart git-annex 4 times in total, and the laptop overheated once):
-The initial directory (/home/user/down) contains at this point (still not finished):
-8.1GB
-
-The target directory(/mnt/dat/annex2) contains:
-975MB
-
-
-What is the expected output? What do you see instead?
-I expect maximum three times the usefull data size. So I can calculate with (rule of thumb).
-(Ie. if I want to put 1GB data into annex, it would need maximum (at any point of time 3GB of data)
-
-Currently it uses 11x(!) times the original size, and still growing.
-
-I also expect to stop syncing, when it used up all the available disk space
-(ie. it should leave at least 200MB on the original partition,
-none of the other programs like to have 0 bytes left).
-The machine just freeze, ie. takes almost 10 minutes to kill process,
-and delete something to get back to life again.
-
-Also some kind of feedback how many files has been synchronized,
-because currently the dashboard does not indicate any useful info.
-Also the log page seems only growing, making firefox crashes.
-
-Self-controlled resource hogging. Ie. dont use more then 50% processor,
-or dont make heavy disk usage for 3-4 hours, because the laptop can overheat.
-
-What version of git-annex are you using? On what operating system?
-https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-i386.tar.gz
-Version: 4.20130227
-Ubuntu 10.04, laptop Toshiba L300, Intel Core2Duo T5800@2.0Ghz, 3GB ram
-
-Please provide any additional information below.
-The syncing is still not finished.
-I hope it will finish within additional 24hours.
-
-Best,
- Laszlo
-
-> [[done]] per comments
diff --git a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_0._comment b/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_0._comment
deleted file mode 100644
index 87bec8530..000000000
--- a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_0._comment
+++ /dev/null
@@ -1,34 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm5iosFbL2By7UFeViqkc6v-hoAtqILeDA"
- nickname="Laszlo"
- subject="Tried to add a bug, but website fails"
- date="2013-03-01T14:40:18Z"
- content="""
-@joeyh: I tried to add a comment to my bugreport:
-http://git-annex.branchable.com/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace.Makefile/
-
-I get this error:
-Error: failed to create directory /home/b-git-annex/source/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace.Makefile/: File exists
-
-The comment I tried to add:
-Seems like the logging is the culprit:
-
-user@usermachine:~/down/annex$ du -ak . | sort -nr | cut -f2 | xargs -d '\n' du -sh |head -n 30 -
-8,2G .
-7,5G ./.git
-6,5G ./.git/annex
-2,7G ./.git/annex/daemon.log
-1,8G ./.git/annex/daemon.log.1
-1,5G ./.git/annex/daemon.log.5
-980M ./.git/objects
-742M ./mydir
-640M ./mydir/wp
-616M ./mydir/wp/wd
-314M ./mydir/wp/wd/2012
-278M ./.git/annex/daemon.log.4
-226M ./mydir/wp/wd/2011
-154M ./.git/annex/daemon.log.6
-109M ./.git/annex/objects
-
-
-"""]]
diff --git a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_10_037a6dd6e15ef5f789a1f364f7507b53._comment b/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_10_037a6dd6e15ef5f789a1f364f7507b53._comment
deleted file mode 100644
index f973238d8..000000000
--- a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_10_037a6dd6e15ef5f789a1f364f7507b53._comment
+++ /dev/null
@@ -1,45 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm5iosFbL2By7UFeViqkc6v-hoAtqILeDA"
- nickname="Laszlo"
- subject="comment 10"
- date="2013-03-03T18:31:24Z"
- content="""
-The problem with restarting, that it seems, it puts everything one more time into .git.
-(if we ignore the logging problem).
-
-Right now, here is the:
- $ du -ak . | sort -nr | cut -f2 | xargs -d '\n' du -sh |head -n 30 -
-output:
- 8,7G .
- 8,0G ./.git
- 6,3G ./.git/annex
- 3,5G ./.git/annex/daemon.log.2
- 2,5G ./.git/annex/daemon.log
- 1,7G ./.git/objects
- 742M ./mydir
- 640M ./mydir/wp
- 616M ./mydir/wp/wd
- 314M ./mydir/wp/wd/2012
- 226M ./mydir/wp/wd/2011
- 227M ./.git/annex/daemon.log.1
- 109M ./.git/annex/objects
-
-If you observe ./.git/objects dir, is 1,7G,
-while yesterday it was 742M (see my first comment).
-
-Other problem, that once it runs out of space, threads crashes:
- Pusher crashed: user error (git [\"--git-dir=/home/user/down/annex/.git\",\"--work-tree=/home/user/down/annex\",\"update-index\",\"-z\",\"--index-info\"] exited 128)
- NetWatcherFallback crashed: fd:28: hGetLine: end of file
- DaemonStatus crashed: /home/user/down/annex/.git/annex/daemon.status.tmp7564: hClose: resource exhausted (No space left on device)
-
-Right now, I think I tested everything I could.
-
-Where is the autobuild? This one still is 2013 feb 27:
-http://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-i386.tar.gz
-
-Anyway, once the new version is out, I will retest this experiment.
-
-Best,
- Laszlo
-
-"""]]
diff --git a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_11_614e4110188fc6474e7da50fc4281e13._comment b/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_11_614e4110188fc6474e7da50fc4281e13._comment
deleted file mode 100644
index 38d9bb621..000000000
--- a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_11_614e4110188fc6474e7da50fc4281e13._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 11"
- date="2013-03-03T18:36:31Z"
- content="""
-The autobuild is linked to on [[install/Linux_standalone]]
-
-I don't understand how you're \"restarting\" and not deleting the old .git repository. The right way would be to stop the assistant, run \"git annex uninit\", and then remove \".git\"
-"""]]
diff --git a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_12_dcb74fb91e1c2f0db4efd68c8bcbc96c._comment b/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_12_dcb74fb91e1c2f0db4efd68c8bcbc96c._comment
deleted file mode 100644
index 8bf20fc18..000000000
--- a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_12_dcb74fb91e1c2f0db4efd68c8bcbc96c._comment
+++ /dev/null
@@ -1,20 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm5iosFbL2By7UFeViqkc6v-hoAtqILeDA"
- nickname="Laszlo"
- subject="comment 12"
- date="2013-03-03T21:24:18Z"
- content="""
-restarting == Stop git-annex using the gui (Confirm shutdown daemon). Then check if there are running git process (ps -e |grep git),
-if there are kill it, if (defunct) process present, then restart computer. Then launch git-annex using \"git-annex-webapp\" script).
-
-So its a normal program usage (start-stop cycle).
-
-The .git directory is growing. Without a single file moving/deleting/renaming/editing in the working directory.
-
-So the .git directory just grows, and I think it is a bug, and a bad one. (if we ignore the logging problem, the slow startup, the failing of disk full).
-
-I'll give it a spin to the autobuild (http://downloads.kitenet.net/git-annex/autobuild/i386/git-annex-standalone-i386.tar.gz), and report back. It will take at least 2 day, to repeat my whole experience. So expect update from me wednesday the soonest.
-
-Best, Laszlo
-
-"""]]
diff --git a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_14_38671ba8d302f4d32460d1478abd2111._comment b/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_14_38671ba8d302f4d32460d1478abd2111._comment
deleted file mode 100644
index cb9abcf72..000000000
--- a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_14_38671ba8d302f4d32460d1478abd2111._comment
+++ /dev/null
@@ -1,45 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm5iosFbL2By7UFeViqkc6v-hoAtqILeDA"
- nickname="Laszlo"
- subject="version 20130314, still not improved"
- date="2013-03-16T10:01:27Z"
- content="""
-Hi,
-
-I promised you a feedback, once a newer version comes out.
-
-I started fresh (from the gui), created a new directory, and copied my files over it,
-deleted the old one (git-annex-webapp just silently quite, when I tried to use the old directory).
-
-Problems:
-> 1. each starts costs me an hour at least
-
-> 2. when computer starts git-annex starts too, and try to eat all the resources.
- Resulting a 10 minute bootup. Would be nice to kick in, when computer idle,
-and others already finished booting up. (ie. I had a chance to start a webbrowser)
-
-> 3. .git objects still going.
-find `pwd` >../gitannexstartup[TIME].txt
-
-Some results:
-gitannexstartup1034.txt
-91179
-gitannexstartup1035.txt
-91566
-gitannexstartup1040.txt
-91938
-
- diff between 1034 and 1035 (only 1 minute difference when the file created),
- shows many entries like this:
- /home/user/Desktop/down/annexnew/.git/objects/52/1ba05331f99585923f1724bb97c18a8f22837444843a45232
- /home/user/Desktop/down/annexnew/.git/objects/52/7457c478a19f8f85c73b9f17c5640378cf307044868a45258
-
-So git objects keeps still adding.
-As I have many duplicates in my directory
-(backup of backups, I'm kind of paranoid, when comes to daily job), so it may be related to this bug:
-
-http://git-annex.branchable.com/bugs/Direct_mode_keeps_re-checksuming_duplicated_files/
-
-It is just a hunch. Please tell me what else to test.
-
-"""]]
diff --git a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_14_483244b1ed5744308022465f45c091fd._comment b/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_14_483244b1ed5744308022465f45c091fd._comment
deleted file mode 100644
index 8594e5d75..000000000
--- a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_14_483244b1ed5744308022465f45c091fd._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm5iosFbL2By7UFeViqkc6v-hoAtqILeDA"
- nickname="Laszlo"
- subject="comment 14"
- date="2013-04-18T05:54:09Z"
- content="""
-Hi, these bugs (too detailed logging) and duplicated files issues are both solved in the latest (2013.04.17) release.
-
-Thank you very much, you can close this issue.
-
-Best,
- Laszlo
-
-"""]]
diff --git a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_1_d2c63723fa4bf828873770a42ffaab20._comment b/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_1_d2c63723fa4bf828873770a42ffaab20._comment
deleted file mode 100644
index 3096e596a..000000000
--- a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_1_d2c63723fa4bf828873770a42ffaab20._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-03-01T16:44:17Z"
- content="""
-Can you please post a representative sample of the logs?
-"""]]
diff --git a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_3_52f0db73dc38c3e3a73f6c7a420bf016._comment b/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_3_52f0db73dc38c3e3a73f6c7a420bf016._comment
deleted file mode 100644
index b7b866dc6..000000000
--- a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_3_52f0db73dc38c3e3a73f6c7a420bf016._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-03-01T17:31:31Z"
- content="""
-I have made the assistant check hourly if its logs are larger than one megabyte, and trim old logs.
-"""]]
diff --git a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_4_93596b4d5a48ffcf4bc11ba9c83cf7ca._comment b/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_4_93596b4d5a48ffcf4bc11ba9c83cf7ca._comment
deleted file mode 100644
index 7efe77303..000000000
--- a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_4_93596b4d5a48ffcf4bc11ba9c83cf7ca._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm5iosFbL2By7UFeViqkc6v-hoAtqILeDA"
- nickname="Laszlo"
- subject="comment 4"
- date="2013-03-01T19:52:13Z"
- content="""
-Here is the last 300 lines of a 3.3GB daemon.log file:
-http://pastebin.com/TF35H5gu
-"""]]
diff --git a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_5_de94e80dde6d12485140bb079d74d775._comment b/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_5_de94e80dde6d12485140bb079d74d775._comment
deleted file mode 100644
index 16f8cf65a..000000000
--- a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_5_de94e80dde6d12485140bb079d74d775._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 5"
- date="2013-03-01T20:20:21Z"
- content="""
-Aha, so it's a direct mode repository and all this \"typechange\" stuff git outputs in such repositories is presumably the main culprit for log bloat. I have made it suppress that output.
-
-Excessive repacking may also explain a lot of the CPU usage and slowness. What does this say?
-
-`grep \"Auto packing the repository for optimum performance.\" .git/annex/*.log |wc -l`
-
-It may make sense for the assistant to tune `gc.auto` to avoid repacks. You might try disabling repacking altogether and see if it helps: `git config gc.auto 0`
-"""]]
diff --git a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_6_5f34c3d449247b4bce4665b3ea4d054c._comment b/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_6_5f34c3d449247b4bce4665b3ea4d054c._comment
deleted file mode 100644
index 8da24d60f..000000000
--- a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_6_5f34c3d449247b4bce4665b3ea4d054c._comment
+++ /dev/null
@@ -1,25 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm5iosFbL2By7UFeViqkc6v-hoAtqILeDA"
- nickname="Laszlo"
- subject="comment 6"
- date="2013-03-02T10:05:38Z"
- content="""
- $ ls -lah daemon.log
- -rw-r--r-- 1 user user 3,3G 2013-03-02 10:54 daemon.log
-
- $ cat daemon.log |wc -l
- 30746274
-
- $ grep \"Auto packing the repository for optimum performance.\" daemon.log |wc -l
- 568
-
- $ grep \"typechange: \" daemon.log |wc -l
- 30713158
-
-I'm not sure where should I issue the git command. Inside the annex/.git directory?
-The useful data is also in git repository locally.
-I try to RTFM over the internet, thanks for the pointer!
-
-
-
-"""]]
diff --git a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_7_b43ae8aec23ba3acaf70edc0de058710._comment b/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_7_b43ae8aec23ba3acaf70edc0de058710._comment
deleted file mode 100644
index 4f53dedd1..000000000
--- a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_7_b43ae8aec23ba3acaf70edc0de058710._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm5iosFbL2By7UFeViqkc6v-hoAtqILeDA"
- nickname="Laszlo"
- subject="comment 7"
- date="2013-03-02T11:03:46Z"
- content="""
- Ok, quick question: Should I issue git config gc.auto 0, in both repositories?
- (it puts variable inside .git/config)
-
- With this gc.auto 0, should the \"typechange: \" logging change? (because it still in the log)
-
- I'm testing the whole experience, and report back,
- also when new build is available i will switch to it, to report about the logging size.
-
-Thank you for your fast response!
-
-"""]]
diff --git a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_8_13b8e0a62f6b6d02960687e206a8b016._comment b/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_8_13b8e0a62f6b6d02960687e206a8b016._comment
deleted file mode 100644
index 4d3f11f36..000000000
--- a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_8_13b8e0a62f6b6d02960687e206a8b016._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm5iosFbL2By7UFeViqkc6v-hoAtqILeDA"
- nickname="Laszlo"
- subject="comment 8"
- date="2013-03-02T12:54:14Z"
- content="""
-The startup time is somewhere between 4-5 hours
-(dunno exactly, its only running about 3 hours) with this gc.auto 0.
-
-I will try to relaunch git-annex-assistant once it finishes startup,
-but I can report back only tomorrow because it may take 5 hours/try.
-
-Laszlo
-
-"""]]
diff --git a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_9_818b94a74b01a210d1106dd35bc932d8._comment b/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_9_818b94a74b01a210d1106dd35bc932d8._comment
deleted file mode 100644
index 11b3efec0..000000000
--- a/doc/bugs/When_syncing_two_repositories__44___git_annex_uses_9x_times_diskspace/comment_9_818b94a74b01a210d1106dd35bc932d8._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 9"
- date="2013-03-03T17:45:34Z"
- content="""
-Well, that sounds like an improvement for sure with gc.auto=0. I have made that be done by default when committing.
-
-The typechange fix is available in the autobuilds already.
-"""]]
diff --git a/doc/bugs/Windows_and_Linux_in_direct_mode_confuses_git.mdwn b/doc/bugs/Windows_and_Linux_in_direct_mode_confuses_git.mdwn
deleted file mode 100644
index dd4b6a921..000000000
--- a/doc/bugs/Windows_and_Linux_in_direct_mode_confuses_git.mdwn
+++ /dev/null
@@ -1,384 +0,0 @@
-### Please describe the problem.
-I try to share some files between a windows machine and a linux machine in direct mode, with a remote repository between the two. I can't seem to reproduce the problem in indirect mode...
-
-I add a file on the windows machine then copy it to the remote repository. I then get it on the linux machine and edit it there. If I `git annex sync` and copy the file's data to the remote repository, a `git annex sync` on windows will fail like this:
-
-[[!format sh """
-$ git annex sync
-commit
-ok
-pull origin
-remote: Counting objects: 41, done.
-remote: Compressing objects: 100% (24/24), done.
-remote: Total 31 (delta 9), reused 0 (delta 0)
-Unpacking objects: 100% (31/31), done.
-From ssh://192.168.1.29:/home/raz/work/test
- b23cb44..9073cc3 git-annex -> origin/git-annex
- 7d4f0e2..87438fc master -> origin/master
- 57a661c..b33b025 synced/git-annex -> origin/synced/git-annex
- 7d4f0e2..87438fc synced/master -> origin/synced/master
-ok
-(merging origin/git-annex origin/synced/git-annex into git-annex...)
-(Recording state in git...)
-push origin
-Counting objects: 17, done.
-Delta compression using up to 8 threads.
-Compressing objects: 100% (4/4), done.
-Writing objects: 100% (5/5), 565 bytes | 0 bytes/s, done.
-Total 5 (delta 2), reused 0 (delta 0)
-To ssh://192.168.1.29:/home/raz/work/test.git
- b33b025..dcfaf23 git-annex -> synced/git-annex
- ! [rejected] master -> synced/master (non-fast-forward)
-error: failed to push some refs to 'ssh://192.168.1.29:/home/raz/work/test.git'
-hint: Updates were rejected because a pushed branch tip is behind its remote
-hint: counterpart. Check out this branch and merge the remote changes
-hint: (e.g. 'git pull') before pushing again.
-hint: See the 'Note about fast-forwards' in 'git push --help' for details.
-failed
-git-annex: sync: 1 failed
-"""]]
-
-A `git log` tells me the master branch is not properly merged so I assume the pull failed silently (I paste the log in the transcript).
-
-I can then try to manually fix the windows working copy and sometimes it kind of work, but sometimes I have a hard time recovering and I am better off cloning a new version and moving data's around...
-
-### What steps will reproduce the problem?
-Create a repository on a windows.
-
-Add a file.
-
-`git clone --bare` the repository and put it on a remote machine.
-
-Clone the remote repository to a linux machine.
-
-Get the file's data.
-
-Edit the file on linux.
-
-Commit it and copy the data's to the remote machine.
-
-`git clone sync` on the windows machine --> Error.
-
-### What version of git-annex are you using? On what operating system?
-On Windows:
-[[!format sh """
-git-annex version: 4.20130827-g4f18612
-build flags: Pairing Testsuite S3 WebDAV DNS
-local repository version: 4
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 2
-"""]]
-
-On Linux
-[[!format sh """
-git-annex version: 4.20130815
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP
-local repository version: 4
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-"""]]
-
-### Please provide any additional information below.
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-### On Windows
-
-$ mkdir test_windows
-
-$ cd test_windows/
-
-$ git init
-Initialized empty Git repository in c:/Users/raz/test_windows/.git/
-
-$ git annex init windows
-init windows
- Detected a crippled filesystem.
-
- Enabling direct mode.
-
- Detected a filesystem without fifo support.
-
- Disabling ssh connection caching.
-ok
-(Recording state in git...)
-
-$ echo "test 1" > test.txt
-
-$ git annex add test.txt
-add test.txt (checksum...) ok
-(Recording state in git...)
-
-$ git annex sync
-commit
-ok
-git-annex: no branch is checked out
-
-$ cd ..
-
-$ git clone --bare test_windows/ test.git
-Cloning into bare repository 'test.git'...
-done.
-
-$ scp -r test.git 192.168.1.29:/home/raz/work/
-config 100% 183 0.2KB/s 00:00
-description 100% 73 0.1KB/s 00:00
-HEAD 100% 23 0.0KB/s 00:00
-applypatch-msg.sample 100% 452 0.4KB/s 00:00
-commit-msg.sample 100% 896 0.9KB/s 00:00
-post-commit.sample 100% 160 0.2KB/s 00:00
-post-receive.sample 100% 552 0.5KB/s 00:00
-post-update.sample 100% 189 0.2KB/s 00:00
-pre-applypatch.sample 100% 398 0.4KB/s 00:00
-pre-commit.sample 100% 1704 1.7KB/s 00:00
-pre-push.sample 100% 1348 1.3KB/s 00:00
-pre-rebase.sample 100% 4951 4.8KB/s 00:00
-prepare-commit-msg.sample 100% 1239 1.2KB/s 00:00
-update.sample 100% 3611 3.5KB/s 00:00
-exclude 100% 240 0.2KB/s 00:00
-825dc642cb6eb9a060e54bf8d69288fbee4904 100% 15 0.0KB/s 00:00
-a31b7a55380d79248658d3fffff6d2dc41a726 100% 116 0.1KB/s 00:00
-dcabbf728abe62b6e2bcc06b8306eb3aa9a497 100% 176 0.2KB/s 00:00
-332ecbfe923879df51a7a3f9bb86ebdfb64273 100% 45 0.0KB/s 00:00
-4f0e20d38d6dc757340a8c569270b5a857fc67 100% 160 0.2KB/s 00:00
-62956bcf45c63b24a637b22a742db0d9458248 100% 86 0.1KB/s 00:00
-7ec519eb1b257a85ae8f9373d0835dea9ddc04 100% 82 0.1KB/s 00:00
-1d1559a050b4a2df2e653b1e7ac15bdf7d56b1 100% 51 0.1KB/s 00:00
-b74dbedfac4d6a0a90580cff2088a5d61f6675 100% 130 0.1KB/s 00:00
-0ca042f439ef997f04a25a449aa1f539b93cf4 100% 53 0.1KB/s 00:00
-bbce5e51e5a90ffd26900de3546fc4f9704181 100% 151 0.2KB/s 00:00
-18bd66316298fcc5c06af9865c30a2fe4d2476 100% 176 0.2KB/s 00:00
-edf8b5cc207e16ca0173785a2ba569c5d4208c 100% 71 0.1KB/s 00:00
-packed-refs 100% 160 0.2KB/s 00:00
-
-$ cd test_windows/
-
-$ git remote add origin ssh://192.168.1.29:/home/raz/work/test.git
-
-$ git annex copy --to origin
-copy test.txt (checking origin...) (to origin...)
-test.txt
- 7 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 79 bytes received 31 bytes 220.00 bytes/sec
-total size is 7 speedup is 0.06
-ok
-(Recording state in git...)
-
-$ git annex sync
-commit
-ok
-pull origin
-remote: Counting objects: 11, done.
-remote: Compressing objects: 100% (5/5), done.
-remote: Total 6 (delta 1), reused 0 (delta 0)
-Unpacking objects: 100% (6/6), done.
-From ssh://192.168.1.29:/home/raz/work/test
- * [new branch] git-annex -> origin/git-annex
- * [new branch] master -> origin/master
-ok
-(merging origin/git-annex into git-annex...)
-(Recording state in git...)
-push origin
-Counting objects: 18, done.
-Delta compression using up to 8 threads.
-Compressing objects: 100% (8/8), done.
-Writing objects: 100% (10/10), 874 bytes | 0 bytes/s, done.
-Total 10 (delta 4), reused 0 (delta 0)
-To ssh://192.168.1.29:/home/raz/work/test.git
- * [new branch] git-annex -> synced/git-annex
- * [new branch] master -> synced/master
-ok
-
-### On Linux
-
-$ git clone test.git test_linux
-Cloning into 'test_linux'...
-done.
-
-$ cd test_linux
-
-$ git annex init linux
-init linux ok
-(Recording state in git...)
-
-$ git annex sync
-(merging origin/git-annex origin/synced/git-annex into git-annex...)
-(Recording state in git...)
-commit
-ok
-pull origin
-ok
-push origin
-Counting objects: 11, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (6/6), done.
-Writing objects: 100% (8/8), 775 bytes | 0 bytes/s, done.
-Total 8 (delta 3), reused 0 (delta 0)
-To /home/raz/work/test.git
- 0b4f175..41fba1d git-annex -> synced/git-annex
-ok
-
-$ git annex get
-get test.txt (from origin...) ok
-(Recording state in git...)
-
-$ git annex direct
-commit
-# On branch master
-nothing to commit, working directory clean
-ok
-direct test.txt ok
-direct ok
-
-$ git annex sync
-commit
-ok
-pull origin
-ok
-push origin
-Counting objects: 9, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (4/4), done.
-Writing objects: 100% (5/5), 492 bytes | 0 bytes/s, done.
-Total 5 (delta 1), reused 0 (delta 0)
-To /home/raz/work/test.git
- 41fba1d..57a661c git-annex -> synced/git-annex
-ok
-
-$ cat test.txt
-test 1
-
-$ echo "test 2" > test.txt
-
-$ git annex sync
-add test.txt (checksum...) ok
-(Recording state in git...)
-commit
-(Recording state in git...)
-ok
-pull origin
-ok
-push origin
-Counting objects: 22, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (12/12), done.
-Writing objects: 100% (16/16), 1.40 KiB | 0 bytes/s, done.
-Total 16 (delta 4), reused 0 (delta 0)
-To /home/raz/work/test.git
- 57a661c..4883cad git-annex -> synced/git-annex
- 7d4f0e2..87438fc master -> synced/master
-ok
-
-$ git annex copy --to origin
-copy test.txt (to origin...) ok
-(Recording state in git...)
-
-$ git annex sync
-commit
-ok
-pull origin
-remote: Counting objects: 6, done.
-remote: Compressing objects: 100% (4/4), done.
-remote: Total 5 (delta 0), reused 0 (delta 0)
-Unpacking objects: 100% (5/5), done.
-From /home/raz/work/test
- b23cb44..9073cc3 git-annex -> origin/git-annex
-ok
-(merging origin/git-annex into git-annex...)
-(Recording state in git...)
-push origin
-Counting objects: 18, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (8/8), done.
-Writing objects: 100% (10/10), 924 bytes | 0 bytes/s, done.
-Total 10 (delta 3), reused 0 (delta 0)
-To /home/raz/work/test.git
- 4883cad..b33b025 git-annex -> synced/git-annex
-ok
-
-$
-
-
-### On Windows
-
-$ git annex sync
-commit
-ok
-pull origin
-remote: Counting objects: 41, done.
-remote: Compressing objects: 100% (24/24), done.
-remote: Total 31 (delta 9), reused 0 (delta 0)
-Unpacking objects: 100% (31/31), done.
-From ssh://192.168.1.29:/home/raz/work/test
- b23cb44..9073cc3 git-annex -> origin/git-annex
- 7d4f0e2..87438fc master -> origin/master
- 57a661c..b33b025 synced/git-annex -> origin/synced/git-annex
- 7d4f0e2..87438fc synced/master -> origin/synced/master
-ok
-(merging origin/git-annex origin/synced/git-annex into git-annex...)
-(Recording state in git...)
-push origin
-Counting objects: 17, done.
-Delta compression using up to 8 threads.
-Compressing objects: 100% (4/4), done.
-Writing objects: 100% (5/5), 565 bytes | 0 bytes/s, done.
-Total 5 (delta 2), reused 0 (delta 0)
-To ssh://192.168.1.29:/home/raz/work/test.git
- b33b025..dcfaf23 git-annex -> synced/git-annex
- ! [rejected] master -> synced/master (non-fast-forward)
-error: failed to push some refs to 'ssh://192.168.1.29:/home/raz/work/test.git'
-hint: Updates were rejected because a pushed branch tip is behind its remote
-hint: counterpart. Check out this branch and merge the remote changes
-hint: (e.g. 'git pull') before pushing again.
-hint: See the 'Note about fast-forwards' in 'git push --help' for details.
-failed
-git-annex: sync: 1 failed
-
-$ git log --graph --oneline --decorate --all
-* 87438fc (origin/synced/master, origin/master) git-annex automatic sync
-* 7d4f0e2 (HEAD, synced/master, master) git-annex automatic sync
-*-. dcfaf23 (origin/synced/git-annex, git-annex) merging origin/git-annex orig
-|\ \
-| | * b33b025 merging origin/git-annex into git-annex
-| | |\
-| | |/
-| |/|
-| * | 9073cc3 (origin/git-annex) update
-| | * 73518bc update
-| | * 4883cad update
-| | * 1b447f5 update
-| |/
-|/|
-* | 57a661c update
-| |
-| \
-*-. \ 41fba1d merging origin/git-annex origin/synced/git-annex into git-annex
-|\ \ \
-| | |/
-| |/|
-| | * 0b4f175 merging origin/git-annex into git-annex
-| | |\
-| | |/
-| |/|
-| * | b23cb44 update
-| | * b5755a2 update
-| |/
-| * 6adcabb update
-| * df18bd6 update
-| * dcbbce5 branch created
-* 0d138eb update
-* fe6bccc branch created
-
-$
-
-# End of transcript or log.
-"""]]
-
-> Apparently `test.git` had `receive.denyNonFastForwards`
-> set to true, which prevents the forced pushing `git annex sync`
-> needs to do. I have made it print out a hint about this setting
-> when a push failes. [[done]] --[[Joey]]
diff --git a/doc/bugs/Windows_and_Linux_in_direct_mode_confuses_git/comment_1_155e0c4d3aa41eebfe27533ab70a91d3._comment b/doc/bugs/Windows_and_Linux_in_direct_mode_confuses_git/comment_1_155e0c4d3aa41eebfe27533ab70a91d3._comment
deleted file mode 100644
index 1a443fb19..000000000
--- a/doc/bugs/Windows_and_Linux_in_direct_mode_confuses_git/comment_1_155e0c4d3aa41eebfe27533ab70a91d3._comment
+++ /dev/null
@@ -1,68 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawknruiCHUcOh2mmpkh7OFJ4iNfAOOamRVs"
- nickname="Renaud"
- subject="comment 1"
- date="2013-08-29T06:38:44Z"
- content="""
-I wonder if it isn't related to the fact that even if I do `git annex drop` on windows, the file is still marked as modified in git.
-What is in repository is the path to the file's data using unix style folder separator but what is in my working directory is a file containing the path using windows style folder separator.
-
-I paste a transcript to describe what I mean:
-
-[[!format sh \"\"\"
-$ mkdir tmp
-
-$ cd tmp
-
-$ git init
-Initialized empty Git repository in c:/Users/raz/tmp/tmp/.git/
-
-$ git annex init test
-init test
- Detected a crippled filesystem.
-
- Enabling direct mode.
-
- Detected a filesystem without fifo support.
-
- Disabling ssh connection caching.
-ok
-(Recording state in git...)
-
-$ echo test > test
-
-$ git annex add
-add test (checksum...) ok
-(Recording state in git...)
-
-$ git annex sync
-commit
-ok
-git-annex: no branch is checked out
-
-$ git annex drop --force
-drop test ok
-(Recording state in git...)
-
-$ git status
-# On branch master
-# Changes not staged for commit:
-# (use \"git add <file>...\" to update what will be committed)
-# (use \"git checkout -- <file>...\" to discard changes in working directory)
-#
-# modified: test
-#
-no changes added to commit (use \"git add\" and/or \"git commit -a\")
-
-$ git diff
-diff --git a/test b/test
-index a9dd439..62343b2 120000
---- a/test
-+++ b/test
-@@ -1 +1 @@
--.git/annex/objects/w8/pv/SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93
-\ No newline at end of file
-+.git\annex\objects\w8\pv\SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93
-\ No newline at end of file
-\"\"\"]]
-"""]]
diff --git a/doc/bugs/Windows_build_has_hardcoded_paths.mdwn b/doc/bugs/Windows_build_has_hardcoded_paths.mdwn
new file mode 100644
index 000000000..199d00b03
--- /dev/null
+++ b/doc/bugs/Windows_build_has_hardcoded_paths.mdwn
@@ -0,0 +1,39 @@
+### Please describe the problem.
+
+The windows build seems to be hardcoded to finding git at c:\program files\Git\
+I have git in another directory. Git-annex does not find it.
+
+### What steps will reproduce the problem?
+
+Install git-annex. Run the webapp.
+Get error "Internal Server Error
+You need to install git in order to use git-annex!"
+
+### What version of git-annex are you using? On what operating system?
+
+5.20140817-g71c2250.
+Windows XP.
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+[[!meta title="git-annex on windows does not find msgit if user does not let msysgit add itsselt to PATH"]]
+
+> I don't think it's any better for git-annex's installer to prompt for the
+> path to git, than it is for msysgit's installer to prompt for adding it
+> to the system path.
+>
+> The best fix would be to bundle msysgit into the git-annex installer
+> along with all the other stuff. But, that adds build-time complications
+> I would rather avoid.
+>
+> For now, I am going to treat this as a documentation problem;
+> I've updated the install page to be clear that msysgit needs to be
+> installed into PATH. [[done]] --[[Joey]]
diff --git a/doc/bugs/Windows_build_has_hardcoded_paths/comment_1_03518523a823a89fbb97b6a57d650e2b._comment b/doc/bugs/Windows_build_has_hardcoded_paths/comment_1_03518523a823a89fbb97b6a57d650e2b._comment
new file mode 100644
index 000000000..f1a170e21
--- /dev/null
+++ b/doc/bugs/Windows_build_has_hardcoded_paths/comment_1_03518523a823a89fbb97b6a57d650e2b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="24.159.78.125"
+ subject="comment 1"
+ date="2014-08-20T14:37:30Z"
+ content="""
+git-annex does not hardcode any paths, and certianly not the path to git. Your system probably does not have the location you installed git added to the PATH. In that case, git-annex may do what windows programs do and look for git.exe in the same directory it was installed into.
+"""]]
diff --git a/doc/bugs/Windows_build_has_hardcoded_paths/comment_2_58b856e19c8d5e59164b42399ba6b1fd._comment b/doc/bugs/Windows_build_has_hardcoded_paths/comment_2_58b856e19c8d5e59164b42399ba6b1fd._comment
new file mode 100644
index 000000000..a4784c634
--- /dev/null
+++ b/doc/bugs/Windows_build_has_hardcoded_paths/comment_2_58b856e19c8d5e59164b42399ba6b1fd._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="Hans_Ryding"
+ ip="81.229.194.7"
+ subject="Quite right"
+ date="2014-08-21T08:54:50Z"
+ content="""
+Incorrect assumption from my part.
+I reinstalled git into the expected path (C:\program files\Git)
+and the problem is still there.
+
+Running git-annex from command-line works.
+(I tried running git-annex test. It had 23 failed tests,
+most of them because of inability to access the remote: origin.
+But it ran just fine.)
+Running the web-app gives the error listed above.
+"""]]
diff --git a/doc/bugs/Windows_build_has_hardcoded_paths/comment_3_f9543c0ca1ff81c4d495a01c77429ea8._comment b/doc/bugs/Windows_build_has_hardcoded_paths/comment_3_f9543c0ca1ff81c4d495a01c77429ea8._comment
new file mode 100644
index 000000000..ba06cd435
--- /dev/null
+++ b/doc/bugs/Windows_build_has_hardcoded_paths/comment_3_f9543c0ca1ff81c4d495a01c77429ea8._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="Hans_Ryding"
+ ip="81.229.194.7"
+ subject="Change the name of the bug"
+ date="2014-08-21T09:14:16Z"
+ content="""
+I can't seem to change the name of the bug to something more appropriate.
+Maybe you can?
+"""]]
diff --git a/doc/bugs/Windows_build_has_hardcoded_paths/comment_4_01096994c19b7d0df1cc6866d4f22e21._comment b/doc/bugs/Windows_build_has_hardcoded_paths/comment_4_01096994c19b7d0df1cc6866d4f22e21._comment
new file mode 100644
index 000000000..5daa87d5e
--- /dev/null
+++ b/doc/bugs/Windows_build_has_hardcoded_paths/comment_4_01096994c19b7d0df1cc6866d4f22e21._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmBmv0HhwTFxkpxlf8ifTlMOHnIwHCHTYs"
+ nickname="y"
+ subject="path on windows"
+ date="2014-08-23T22:02:07Z"
+ content="""
+I think I have a related problem on win7 sp1.
+
+When first installing msys git, there's a screen asking for how to set the PATH variable. I chose the option not to update the windows PATH variable, which is the default. Then I installed git annex. Then launching the git-annex-autostart.vbs as well as the webapp one gets an object not found error (on line 2). launching git-annex from git bash with full path yielded an error about not finding git.
+
+Then I proceeded and reinstalled git on top of itself and picked the option to only add git and bash to windows path and it worked.
+"""]]
diff --git a/doc/bugs/Windows_build_has_hardcoded_paths/comment_5_0d7a4f740180dff7c0853062e4913804._comment b/doc/bugs/Windows_build_has_hardcoded_paths/comment_5_0d7a4f740180dff7c0853062e4913804._comment
new file mode 100644
index 000000000..42537f9f4
--- /dev/null
+++ b/doc/bugs/Windows_build_has_hardcoded_paths/comment_5_0d7a4f740180dff7c0853062e4913804._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="Hans_Ryding"
+ ip="81.229.194.7"
+ subject="Relying on path is not best practice in a Windows environment"
+ date="2014-08-25T16:16:33Z"
+ content="""
+Unlike under POSIX environments
+generally applications under windows don't add themselves to path,
+or to a directory already in path.
+
+Generally applications announce their location using the registry.
+Under either HKEY_LOCAL_MACHINE\SOFTWARE,
+or in case of software installed for one particular user only
+under HKEY_CURRENT_USER\SOFTWARE.
+
+Git however AFAIK does not.
+Most likely the best thing to do is to prompt the user when installing git-annex
+where git is, and store this variable.
+
+Note that in both my installs I installed git-annex into the git directory,
+and the git-annex webapp still couldn't find it.
+"""]]
diff --git a/doc/bugs/Windows_build_has_hardcoded_paths/comment_6_748aa921afee3d7e4667dee50e70a558._comment b/doc/bugs/Windows_build_has_hardcoded_paths/comment_6_748aa921afee3d7e4667dee50e70a558._comment
new file mode 100644
index 000000000..4cbf0ea58
--- /dev/null
+++ b/doc/bugs/Windows_build_has_hardcoded_paths/comment_6_748aa921afee3d7e4667dee50e70a558._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmBmv0HhwTFxkpxlf8ifTlMOHnIwHCHTYs"
+ nickname="y"
+ subject="path on windows"
+ date="2014-08-26T12:18:39Z"
+ content="""
+To add to my comment I also installed git-annex in the same directory as the msys git distrib in both cases.
+"""]]
diff --git a/doc/bugs/Windows_daemon_silently_dies.mdwn b/doc/bugs/Windows_daemon_silently_dies.mdwn
new file mode 100644
index 000000000..cbffc0083
--- /dev/null
+++ b/doc/bugs/Windows_daemon_silently_dies.mdwn
@@ -0,0 +1,132 @@
+### Please describe the problem.
+
+Using the latest build, when the agent is started, it works ... and works ... and works ... until it silently dies at some point.
+
+### What steps will reproduce the problem?
+
+I hope this will reproduce:
+
+* Create a remote with an invalid host which is not reachable
+* Start git-annex-autostart.vbs
+* Wait 5-30 minutes until no git.exe/git-annex.exe are visible any more in task manager (for my current test it took 10 minutes)
+* Inspect the logs
+
+### What version of git-annex are you using? On what operating system?
+
+ $ git annex version
+ git-annex version: 5.20140715-g622a376
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 2 3 4
+
+### Please provide any additional information below.
+
+I hope/think that this is also related to what I wrote in:
+https://git-annex.branchable.com/forum/Restricting_SSH_+_supply_key
+
+Here the assistant apparently takes the wrong ssh.exe (from bin/ instead than cmd/ directory). This results in the fact that for some reason .ssh/config is not used.
+In any case, the host alias can not be resolved.
+At some point git annex assistant seems to die because of that, but I am not sure.
+In any case, a non-reachable server should not be the cause that the assistant dies.
+The last entries of daemon.log are always:
+
+ git-annex: <stdin>: hGetLine: invalid argument (Bad file descriptor)
+ failed
+ git-annex: assistant: 1 failed
+
+So I think this is the cause.
+
+[[!format sh """
+[2014-07-14 21:21:19 Pacific Daylight Time] main: starting assistant version 5.20140715-g622a376
+[2014-07-14 21:21:19 Pacific Daylight Time] Cronner: You should enable consistency checking to protect your data.
+[2014-07-14 21:21:24 Pacific Daylight Time] TransferScanner: Syncing with 192.168.200.121
+(scanning...) [2014-07-14 21:21:25 Pacific Daylight Time] Watcher: Performing startup scan
+ssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+ssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+sssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+ssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+
+ssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+sssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+(started...) [2014-07-14 21:21:43 Pacific Daylight Time] Committer: Committing changes to git
+[2014-07-14 21:21:43 Pacific Daylight Time] Pusher: Syncing with 192.168.200.121
+ssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+ssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+ssh: Could notssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+[2014-07-14 21:22:03 Pacific Daylight Time] Committer: Committing changes to git
+fatal: Unable to create 'c:\data\annex\.git/index.lock': File exists.
+
+If no other git process is currently running, this probably means a
+git process crashed in this repository earlier. Make sure no other git
+process is running and remove the file manually to continue.
+fatal: Unable to create 'c:\data\annex\.git/index.lock': File exists.
+
+If no other git process is currently running, this probably means a
+git process crashed in this repository earlier. Make sure no other git
+process is running and remove the file manually to continue.
+Committer crashed: failed to read sha from git write-tree
+[2014-07-14 21:22:03 Pacific Daylight Time] Committer: warning Committer crashed: failed to read sha from git write-tree
+ssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+ssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+
+ssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+
+ssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+
+ssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+
+ssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+
+Network.Socket.ByteString.send: does not exist (No such file or directory)
+Network.Socket.ByteString.send: does not exist (No such file or directory)
+
+(Recording state in git...)
+(Recording state in git...)
+
+git-annex: <stdin>: hGetLine: invalid argument (Bad file descriptor)
+failed
+git-annex: assistant: 1 failed
+"""]]
+
+[[!tag confirmed]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/Windows_daemon_silently_dies/comment_1_b590aaeedec78c8540d549a8c773881e._comment b/doc/bugs/Windows_daemon_silently_dies/comment_1_b590aaeedec78c8540d549a8c773881e._comment
new file mode 100644
index 000000000..e2c6cdecf
--- /dev/null
+++ b/doc/bugs/Windows_daemon_silently_dies/comment_1_b590aaeedec78c8540d549a8c773881e._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-15T17:36:22Z"
+ content="""
+I doubt that it has anything to do with a ssh remote.
+
+Please enable debug logging and see if you can get a more detailed log around when it dies.
+"""]]
diff --git a/doc/bugs/Windows_daemon_silently_dies/comment_2_472975d2bd9784ae40b35f11fc561231._comment b/doc/bugs/Windows_daemon_silently_dies/comment_2_472975d2bd9784ae40b35f11fc561231._comment
new file mode 100644
index 000000000..dae862205
--- /dev/null
+++ b/doc/bugs/Windows_daemon_silently_dies/comment_2_472975d2bd9784ae40b35f11fc561231._comment
@@ -0,0 +1,72 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="128.12.90.218"
+ subject="comment 2"
+ date="2014-07-15T20:51:07Z"
+ content="""
+Unfortunately not. I did that already. At least in my opinion nothing special.
+
+These are the latest lines:
+
+[[!format sh \"\"\"
+Please make sure you have the correct access rights
+and the repository exists.
+[2014-07-15 13:34:32 Pacific Daylight Time] read: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"]
+[2014-07-15 13:34:32 Pacific Daylight Time] read: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+[2014-07-15 13:34:32 Pacific Daylight Time] read: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..8ea0bbec209e1ec1240aa94ba2d6975023d83ac5\",\"-n1\",\"--pretty=%H\"]
+[2014-07-15 13:34:32 Pacific Daylight Time] read: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..528b6b61318d138db5df2262ee501d6895b859d0\",\"-n1\",\"--pretty=%H\"]
+[2014-07-15 13:34:32 Pacific Daylight Time] read: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..45aff729d5c9e60d925fad4c7fd75497ff5301fa\",\"-n1\",\"--pretty=%H\"]
+[2014-07-15 13:34:32 Pacific Daylight Time] call: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--verify\",\"-q\",\"refs/remotes/server/annex/direct/master\"]
+[2014-07-15 13:34:32 Pacific Daylight Time] read: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/annex/direct/master..refs/remotes/server/annex/direct/master\",\"-n1\",\"--pretty=%H\"]
+[2014-07-15 13:34:32 Pacific Daylight Time] call: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"show-ref\",\"--verify\",\"-q\",\"refs/remotes/server/synced/master\"]
+[2014-07-15 13:34:32 Pacific Daylight Time] read: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/synced/master..refs/remotes/server/synced/master\",\"-n1\",\"--pretty=%H\"]
+[2014-07-15 13:34:32 Pacific Daylight Time] Pusher: pushing to [Remote { name =\"server\" }]
+[2014-07-15 13:34:32 Pacific Daylight Time] call: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"push\",\"server\",\"+git-annex:synced/git-annex\",\"annex/direct/master:synced/master\"]
+ssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+[2014-07-15 13:34:34 Pacific Daylight Time] read: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"push\",\"server\",\"master\"]
+ssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+
+[2014-07-15 13:34:35 Pacific Daylight Time] RemoteControl: DISCONNECTED ssh://test@annex/srv/data/Shared
+[2014-07-15 13:34:35 Pacific Daylight Time] RemoteControl: fromList []
+[2014-07-15 13:34:36 Pacific Daylight Time] Pusher: fallback pushing to [Remote { name =\"server\" }]
+[2014-07-15 13:34:36 Pacific Daylight Time] call: git [\"--git-dir=c:\\data\\annex\\.git\",\"--work-tree=c:\\data\\annex\",\"-c\",\"core.bare=false\",\"push\",\"server\",\"+git-annex:refs/synced/91347741-60cd-4bca-a64a-90adee8d1910/git-annex\",\"refs/heads/annex/direct/master:refs/synced/91347741-60cd-4bca-a64a-90adee8d1910/annex/direct/master\"]
+ssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+[2014-07-15 13:34:51 Pacific Daylight Time] chat: ssh [\"-T\",\"test@annex\",\"git-annex-shell 'notifychanges' '/srv/data/Shared' --uuid df1c0b77-f9b6-4ed7-96f3-3e7f010c4fb6\"]
+ssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+
+[2014-07-15 13:35:03 Pacific Daylight Time] RemoteControl: DISCONNECTED ssh://test@annex/srv/data/Shared
+[2014-07-15 13:35:03 Pacific Daylight Time] RemoteControl: fromList []
+[2014-07-15 13:35:35 Pacific Daylight Time] chat: ssh [\"-T\",\"test@annex\",\"git-annex-shell 'notifychanges' '/srv/data/Shared' --uuid df1c0b77-f9b6-4ed7-96f3-3e7f010c4fb6\"]
+ss[2014-07-15 13:35:47 Pacific Daylight Time] RemoteControl: DISCONNECTED ssh://test@annex/srv/data/Shared
+[2014-07-15 13:35:47 Pacific Daylight Time] RemoteControl: fromList []
+[2014-07-15 13:36:51 Pacific Daylight Time] chat: ssh [\"-T\",\"test@annex\",\"git-annex-shell 'notifychanges' '/srv/data/Shared' --uuid df1c0b77-f9b6-4ed7-96f3-3e7f010c4fb6\"]
+ssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+
+[2014-07-15 13:37:02 Pacific Daylight Time] RemoteControl: DISCONNECTED ssh://test@annex/srv/data/Shared
+[2014-07-15 13:37:02 Pacific Daylight Time] RemoteControl: fromList []
+[2014-07-15 13:39:10 Pacific Daylight Time] chat: ssh [\"-T\",\"test@annex\",\"git-annex-shell 'notifychanges' '/srv/data/Shared' --uuid df1c0b77-f9b6-4ed7-96f3-3e7f010c4fb6\"]
+ssh: Co[2014-07-15 13:39:21 Pacific Daylight Time] RemoteControl: DISCONNECTED ssh://test@annex/srv/data/Shared
+[2014-07-15 13:39:21 Pacific Daylight Time] RemoteControl: fromList []
+[2014-07-15 13:43:37 Pacific Daylight Time] chat: ssh [\"-T\",\"test@annex\",\"git-annex-shell 'notifychanges' '/srv/data/Shared' --uuid df1c0b77-f9b6-4ed7-96f3-3e7f010c4fb6\"]
+ssh: Could not resolve hostname an[2014-07-15 13:43:49 Pacific Daylight Time] RemoteControl: DISCONNECTED ssh://test@annex/srv/data/Shared
+[2014-07-15 13:43:49 Pacific Daylight Time] RemoteControl: fromList []
+
+(Recording state in git...)
+
+git-annex: <stdin>: hGetLine: invalid argument (Bad file descriptor)
+failed
+git-annex: assistant: 1 failed
+\"\"\"]]
+
+Maybe it's something different but what could it be?
+
+
+"""]]
diff --git a/doc/bugs/Windows_daemon_silently_dies/comment_3_48415a7251abffca998b8dccc5e0ba80._comment b/doc/bugs/Windows_daemon_silently_dies/comment_3_48415a7251abffca998b8dccc5e0ba80._comment
new file mode 100644
index 000000000..3498cc88e
--- /dev/null
+++ b/doc/bugs/Windows_daemon_silently_dies/comment_3_48415a7251abffca998b8dccc5e0ba80._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="128.12.90.218"
+ subject="comment 3"
+ date="2014-07-15T22:02:41Z"
+ content="""
+Update: You are right. It has nothing to do with the connections. I created a new repository without any sync. Same here:
+
+ [2014-07-15 13:53:33 Pacific Daylight Time] main: starting assistant version 5.20140715-g622a376
+ [2014-07-15 13:53:33 Pacific Daylight Time] Cronner: You should enable consistency checking to protect your data.
+ (scanning...) [2014-07-15 13:53:38 Pacific Daylight Time] Watcher: Performing startup scan
+ (started...)
+
+ git-annex: <stdin>: hGetLine: invalid argument (Bad file descriptor)
+ failed
+ git-annex: assistant: 1 failed
+
+It always takes exactly 10 minutes until it dies (you see is started 13:53:33 and it died at 14:03:33 (=modification of daemon.log).
+So this is reproduceable ...
+
+
+"""]]
diff --git a/doc/bugs/Windows_daemon_silently_dies/comment_4_1c0b0b2e7180425ff2d5e5316a138f7d._comment b/doc/bugs/Windows_daemon_silently_dies/comment_4_1c0b0b2e7180425ff2d5e5316a138f7d._comment
new file mode 100644
index 000000000..63b37a7e1
--- /dev/null
+++ b/doc/bugs/Windows_daemon_silently_dies/comment_4_1c0b0b2e7180425ff2d5e5316a138f7d._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 4"
+ date="2014-07-16T18:18:11Z"
+ content="""
+Hmm, there are two places where the assistant happens to hard code a 10 minute time period. But one is 10 minutes from starting to configure a ssh remote in the webapp, not from start. And the other is the watcher's afterLastDaemonRun check, which only happens when a symlink appears in the repository (which shouldn't happen on windows and wouldn't necessarily happen 10 minutes after start).
+
+Fabulous .. I just reproduced the crash!
+"""]]
diff --git a/doc/bugs/Windows_daemon_silently_dies/comment_5_0d14dd2c8d94a81ffd5aae07e927344f._comment b/doc/bugs/Windows_daemon_silently_dies/comment_5_0d14dd2c8d94a81ffd5aae07e927344f._comment
new file mode 100644
index 000000000..2b2e81946
--- /dev/null
+++ b/doc/bugs/Windows_daemon_silently_dies/comment_5_0d14dd2c8d94a81ffd5aae07e927344f._comment
@@ -0,0 +1,40 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 5"
+ date="2014-07-16T18:21:24Z"
+ content="""
+A full log in an empty repo of the crash:
+
+<pre>
+[2014-07-16 14:00:53 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..9c07d1385e80dbc6044814357e9097fd231b8c99\",\"-n1\",\"--pretty=%H\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] chat: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"cat-file\",\"--batch\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] logging to C:\WINDOWS\TT\.git\annex\daemon.log
+[2014-07-16 14:00:54 Atlantic Standard Time] main: starting assistant version 5.20140714-gf892329
+[2014-07-16 14:00:54 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..9c07d1385e80dbc6044814357e9097fd231b8c99\",\"-n1\",\"--pretty=%H\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] chat: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"cat-file\",\"--batch\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"ls-files\",\"--stage\",\"-z\",\"--\",\"C:\\WINDOWS\\TT\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] Cronner: You should enable consistency checking to protect your data.
+[2014-07-16 14:00:54 Atlantic Standard Time] SanityCheckerStartup: no index file; restaging
+[2014-07-16 14:00:54 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"ls-files\",\"--stage\",\"-z\",\"--\",\"C:\\WINDOWS\\TT\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] chat: git-annex [\"remotedaemon\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"ls-tree\",\"--full-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"numcopies.log\",\"schedule.log\",\"preferred-content.log\",\"required-content.log\",\"group-preferred-content.log\"]
+[2014-07-16 14:00:54 Atlantic Standard Time] Merger: watching C:\WINDOWS\TT\.git\refs
+[2014-07-16 14:00:54 Atlantic Standard Time] TransferWatcher: watching for transfers
+(scanning...) [2014-07-16 14:00:54 Atlantic Standard Time] Watcher: Performing startup scan
+[2014-07-16 14:00:54 Atlantic Standard Time] read: git [\"--git-dir=C:\\WINDOWS\\TT\\.git\",\"--work-tree=C:\\WINDOWS\\TT\",\"-c\",\"core.bare=false\",\"ls-files\",\"--deleted\",\"-z\",\"--\",\"C:\\WINDOWS\\TT\"]
+(started...) [2014-07-16 14:00:54 Atlantic Standard Time] Watcher: watching .
+
+
+git-annex: <stdin>: hGetLine: invalid argument (Bad file descriptor)
+failed
+git-annex: assistant: 1 failed
+</pre>
+
+The two blank lines just before the crash seem to be significant somehow; they are not output at the beginning, so must occur just before it crashes.
+
+"""]]
diff --git a/doc/bugs/Windows_daemon_silently_dies/comment_6_20a420680058f84a8cbd43682957fe7b._comment b/doc/bugs/Windows_daemon_silently_dies/comment_6_20a420680058f84a8cbd43682957fe7b._comment
new file mode 100644
index 000000000..4b596c762
--- /dev/null
+++ b/doc/bugs/Windows_daemon_silently_dies/comment_6_20a420680058f84a8cbd43682957fe7b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 6"
+ date="2014-07-16T18:38:51Z"
+ content="""
+It appears to be the remoteResponderThread crashing (based on adding debugging around all hGetLine call sites).
+"""]]
diff --git a/doc/bugs/Windows_daemon_silently_dies/comment_7_1514739ba9885917d03597dcc6aa7bec._comment b/doc/bugs/Windows_daemon_silently_dies/comment_7_1514739ba9885917d03597dcc6aa7bec._comment
new file mode 100644
index 000000000..3ce65580a
--- /dev/null
+++ b/doc/bugs/Windows_daemon_silently_dies/comment_7_1514739ba9885917d03597dcc6aa7bec._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 7"
+ date="2014-07-16T20:18:50Z"
+ content="""
+Well, it seems not to be the RemoteControl thread after all. I made that thread start the remotedaemon and then not read from it at all, and the crash still happens. Also, the remotedaemon itself seems to run forever ok.
+
+(This is sort of a relief, because it should not be possible for a crash of a named thread like RemoteControl to take down the whole assistant!)
+
+The hGetLine must be being called by some other library function.
+
+Hmm... Could it perhaps be waitForTermination? On windows that ends up calling getLine in a loop. A 600 second loop!
+
+Update: Seems so. With a 60 second loop, it crashes after 60 seconds. With the 2 newlines happening just before.
+
+Also, it makes sense now why this is a new crash. Before the assistant ran with stdio connected to the terminal, but recently on windows it got hooked up to the debug log, and stdin is closed now.
+
+I still don't understand where the 2 newlines come from (possibly output by something while git-annex is crashing?).. But have confirmed I've fixed the problem now.
+"""]]
diff --git a/doc/bugs/Windows_daemon_silently_dies/comment_8_0210436870e6622a83c9b4788e31eef4._comment b/doc/bugs/Windows_daemon_silently_dies/comment_8_0210436870e6622a83c9b4788e31eef4._comment
new file mode 100644
index 000000000..09e7eb867
--- /dev/null
+++ b/doc/bugs/Windows_daemon_silently_dies/comment_8_0210436870e6622a83c9b4788e31eef4._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="204.17.143.10"
+ subject="comment 8"
+ date="2014-07-16T23:53:39Z"
+ content="""
+Really great, seems to be fixed in the current version (at least it's running for 1h now). Thank you!!
+"""]]
diff --git a/doc/bugs/Windows_file_timestamp_timezone_madness.mdwn b/doc/bugs/Windows_file_timestamp_timezone_madness.mdwn
new file mode 100644
index 000000000..69e9838f2
--- /dev/null
+++ b/doc/bugs/Windows_file_timestamp_timezone_madness.mdwn
@@ -0,0 +1,31 @@
+Windows has an unfortunate handling of time zones, which means that when
+the time zone is changed (or DST changes), the timestamps of files also
+appear to change.
+
+This means that after such a change, git-annex will see new mtimes, and
+want to re-checksum every file in the repo.
+
+[[!tag confirmed]]
+
+> Update: Actually, I seem to have been getting confused by behavior of
+> cygwin terminal setting TZ. That indeed led to timestamp changes when the
+> time zone changed. I have made git-annex unset TZ to avoid this.
+>
+> Without TZ set, time stamps are actually stable across time zone changes.
+> Ie, a simple program to read the time stamp of a file and print it
+> always shows the same thing, before and after a timezone change.
+>
+> However, and here's where it gets truely ghastly: A program that stats a
+> file in a loop will see its timestamp change when the timezone changes.
+> I suspect this might be a bug in the Haskell RTS caching something it
+> should not. Stopping and re-running the program gets back to the
+> original timestamp.
+>
+> I have not tested DST changes, but it's hard to imagine it being any
+> worse than the above behavior.
+>
+> So, that's insane then. We can't trust timestamps to be stable on windows
+> when git-annex is running for a long period of time. --[[Joey]]
+>
+> > [[fixed|done]], using the inode sentinal file to detect when windows
+> > has lost its mind, and calculating its delta from insanity. --[[Joey]]
diff --git a/doc/bugs/Windows_file_timestamp_timezone_madness/comment_1_9db59ab2242186a23a47337a1597f4e2._comment b/doc/bugs/Windows_file_timestamp_timezone_madness/comment_1_9db59ab2242186a23a47337a1597f4e2._comment
new file mode 100644
index 000000000..fbda5c285
--- /dev/null
+++ b/doc/bugs/Windows_file_timestamp_timezone_madness/comment_1_9db59ab2242186a23a47337a1597f4e2._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-06-11T19:09:17Z"
+ content="""
+Rather than getting the timezone, another approach might be to look at the inode sentinal file. Its timestamp will also appear to have changed. If the delta is exactly some number of hours, and the inode sential's other data is unchanged, a Windows-specific hack could apply that same delta to all inode cache timestamps.
+
+Except, time zones are not all actually on hour boundaries. Some are half hours, some may be 15 minutes, and next week some crazy country might legislate a 3 minute delta for all I know.
+
+Well, could just say if the inode sentinal's mtime has changed at all (delta < 3600 seconds), and it's otherwise unchanged, and we're on windows, assume this is a time zone change. When would that fail? Only if the repository is copied to someplace, and the mtime is not preserved.
+"""]]
diff --git a/doc/bugs/Windows_file_timestamp_timezone_madness/comment_2_a6a3871747306913b69abcd73d13305e._comment b/doc/bugs/Windows_file_timestamp_timezone_madness/comment_2_a6a3871747306913b69abcd73d13305e._comment
new file mode 100644
index 000000000..c213aa0a9
--- /dev/null
+++ b/doc/bugs/Windows_file_timestamp_timezone_madness/comment_2_a6a3871747306913b69abcd73d13305e._comment
@@ -0,0 +1,26 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 2"
+ date="2014-06-11T19:51:15Z"
+ content="""
+Note that multiple time zone changes complicate this. I think that means that the delta can't be simply applied when comparing inode caches. Instead, probably it needs to be applied when generating inode caches.
+
+A scenario:
+
+1. Time zone is at +1h when the inode sential is written.
+2. Time zone changes to +2h
+3. File F is added (with a current timestamp of T)
+4. Time zone changes to +5h
+
+I am a little confused by which way windows moves the timestamps when the time zone changes. Let's assume I might get the sign wrong.
+
+Let F's timestamp after step 4, F4 = T+-3h.
+
+Let the delta after step 4, D4 = +-4h
+And, let the delta after step 2, D2 = +-1h
+
+If step 3 writes the current timestamp to the inode cache, then the cache still has T in it after step 4. F4+D4 /= T (T +-3h +-4h /= T). So comparison doesn't work.
+
+If instead the current delta is applied when generating inode caches (both for storing on disk, and for immediate comparison), then the inode cache will have T+D2 in it. Then after step 4, generating a new inode cache for F will yield F4+D4. So, does F4+D4 == T+D2? T +-3h +-4h == T +-1h YES!
+"""]]
diff --git a/doc/bugs/Windows_file_timestamp_timezone_madness/comment_3_7fe149bedb8ceab75953996ac8e20f0f._comment b/doc/bugs/Windows_file_timestamp_timezone_madness/comment_3_7fe149bedb8ceab75953996ac8e20f0f._comment
new file mode 100644
index 000000000..1a25d3c82
--- /dev/null
+++ b/doc/bugs/Windows_file_timestamp_timezone_madness/comment_3_7fe149bedb8ceab75953996ac8e20f0f._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 3"
+ date="2014-06-11T22:11:38Z"
+ content="""
+I have implemented this on the loststamp git branch. It seems to work!
+
+However, it has a big problem:
+
+ If the timezone changes while the assistant (or a long-running command)
+ runs, it won't notice, since it only checks the inode cache once, and
+ so will use the old delta for all new inode caches it generates for new
+ files it's added. Which will result in them seeming changed the next time
+ it runs.
+
+So, it would be really nice to be able to check the actual timezone instead.
+But I suppose I can make the assistant poll the inode cache file, or check
+it when adding a new file, or something like that. Bleagh.
+"""]]
diff --git a/doc/bugs/Windows_file_timestamp_timezone_madness/comment_4_c9e8c9997b7c3a82c14fc34af319382d._comment b/doc/bugs/Windows_file_timestamp_timezone_madness/comment_4_c9e8c9997b7c3a82c14fc34af319382d._comment
new file mode 100644
index 000000000..d06df7b77
--- /dev/null
+++ b/doc/bugs/Windows_file_timestamp_timezone_madness/comment_4_c9e8c9997b7c3a82c14fc34af319382d._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 4"
+ date="2014-06-11T22:54:48Z"
+ content="""
+Getting the actual time zone on windows works better if you unset TZ first.
+
+But, a haskell program that polls the time zone fails to notice when it's changed. It only notices after being restarted. I have contacted the time library maintainer about this.
+"""]]
diff --git a/doc/bugs/Windows_file_timestamp_timezone_madness/comment_5_0739426403f5bf9954acbc86ca0d11ea._comment b/doc/bugs/Windows_file_timestamp_timezone_madness/comment_5_0739426403f5bf9954acbc86ca0d11ea._comment
new file mode 100644
index 000000000..ac1f090f5
--- /dev/null
+++ b/doc/bugs/Windows_file_timestamp_timezone_madness/comment_5_0739426403f5bf9954acbc86ca0d11ea._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 5"
+ date="2014-06-11T23:02:28Z"
+ content="""
+I've developed a fix for the time library. This patch has been sent to the author, hopefully it will get applied and then I can use getCurrentTImeZone. Note that git-annex would need to unset TZ first, which might be hard on windows.
+
+<pre>
+diff --git a/cbits/HsTime.c b/cbits/HsTime.c
+index cfafb27..86ca92a 100644
+--- a/cbits/HsTime.c
++++ b/cbits/HsTime.c
+@@ -8,6 +8,7 @@ long int get_current_timezone_seconds (time_t t,int* pdst,char const* * pname)
+ tzset();
+ struct tm* ptm = localtime_r(&t,&tmd);
+ #else
++ tzset();
+ struct tm* ptm = localtime(&t);
+ #endif
+ if (ptm)
+</pre>
+"""]]
diff --git a/doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase.mdwn b/doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase.mdwn
deleted file mode 100644
index e6f3524b2..000000000
--- a/doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase.mdwn
+++ /dev/null
@@ -1,21 +0,0 @@
-I'm using S3 special remote that I initialized like this:
-
- git annex initremote s3 type=S3 encryption=EEF2B390 datacenter="EU" storageclass="REDUCED_REDUNDANCY"
-
-Instead of asking me my key passphrase (I have gpg-agent running), it ask me a new passphase an then repeat it. So it's not my passphrase because if I kill gpg-agent, it will ask me three passphrase for each file: one mine and two for the new one. If i don't put anything there it says:
-
- copy GOPR1672.JPG (checking s3...) (to s3...) gpg: error creating passphrase: Invalid passphrase
- gpg: symmetric encryption of `[stdin]' failed: Invalid passphrase
- failed
- git-annex: fd:13: hPutBuf: resource vanished (Broken pipe)
- copy GOPR1673.JPG (checking s3...) (to s3...)
-
-So I create a new passphrase (two times) for each file I tried to upload. The problem is that I have more than 12000 files to upload!
-
-What's this new passphrase for?
-
-BTW: git-annex version: 3.20130102 same precompiled binary on Arch Linux.
-
-> I've reproduced this with gpg 2.0.19. It is a documented incompatability
-> between gpg 1.x and 2.x; the latter needs --batch included in its
-> parameters. I've put in a fix. [[done]]
diff --git a/doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_1_a4fc30bf7d39cae337286e9e815e6cba._comment b/doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_1_a4fc30bf7d39cae337286e9e815e6cba._comment
deleted file mode 100644
index b006b3b44..000000000
--- a/doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_1_a4fc30bf7d39cae337286e9e815e6cba._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="joksnet"
- ip="193.253.37.245"
- subject="Working now"
- date="2013-01-16T01:36:43Z"
- content="""
-Ok. I don't what happend, but it's working now. I restart gpg-agent a few times with the script found [here](https://wiki.archlinux.org/index.php/GPG#gpg-agent). And now it doesn't ask for any passphrase.
-
-Par contre, I need to export the AWS_* variables if I reboot my pc. I think is because I didn't set embedcreds=yes when initremote. Can I change it now? O I have to remote rm and initremote again?
-
-Thank you,
-Juan
-"""]]
diff --git a/doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_2_e5d42b623017acedf6a3890ce15680a3._comment b/doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_2_e5d42b623017acedf6a3890ce15680a3._comment
deleted file mode 100644
index 7b26ca738..000000000
--- a/doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_2_e5d42b623017acedf6a3890ce15680a3._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="comment 2"
- date="2013-01-16T02:17:26Z"
- content="""
-Someone else reported what sounds like the same bug at [[encryption_given_a_gpg_keyid_still_uses_symmetric_encryption]]. It sounds like this is somehow an agent bug. I cannot reproduce it. I can hypothesise that, if this bug is occurring, you'll be prompted for a passphrase when running this command.. which if it happens would certainly be a bug in gpg or its agent
-
-touch foo; echo foo| gpg --symmetric --passphrase-fd=0 foo
-
-(You can run `git annex initremote $yourremote embedcreds=yes` and it'll modify the existing configuration.)
-"""]]
diff --git a/doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_3_e5150b65b514896e14b9ad3d951963f7._comment b/doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_3_e5150b65b514896e14b9ad3d951963f7._comment
deleted file mode 100644
index 4764dcd5d..000000000
--- a/doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_3_e5150b65b514896e14b9ad3d951963f7._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="joksnet"
- ip="193.253.37.245"
- subject="comment 3"
- date="2013-01-16T17:23:26Z"
- content="""
-It's a GPG/GPG-Agent (2.0.19) bug because the command you give me ask me for a new passphrase.
-
-Thank you for the answer.
-"""]]
diff --git a/doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_4_47c2fc167b0c396edc40468fb7c7bfee._comment b/doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_4_47c2fc167b0c396edc40468fb7c7bfee._comment
deleted file mode 100644
index 20f6564c8..000000000
--- a/doc/bugs/With_S3__44___GPG_ask_for_a_new_passphrase/comment_4_47c2fc167b0c396edc40468fb7c7bfee._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="comment 4"
- date="2013-01-16T19:05:38Z"
- content="""
-Does it ask for a passphrase if --batch is included in gpg's parameters?
-"""]]
diff --git a/doc/bugs/_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41_____91__2014-07-23_16:41:45_CEST__93___WebApp:_warning_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41__.mdwn b/doc/bugs/_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41_____91__2014-07-23_16:41:45_CEST__93___WebApp:_warning_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41__.mdwn
new file mode 100644
index 000000000..69732a743
--- /dev/null
+++ b/doc/bugs/_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41_____91__2014-07-23_16:41:45_CEST__93___WebApp:_warning_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41__.mdwn
@@ -0,0 +1,46 @@
+### Please describe the problem.
+
+
+some time ago i was using the webapp bound to a dedicated port number to get around firewall reconfig. Now after some time without using the webapp i'm using it again and when i start it with
+
+ git-annex webapp --listen=192.168.21.12:46199
+
+it never starts but just keeps waiting forever(?)
+
+Update:(to clarify - the following works fine but results in the "random" port "problem")
+
+ git-annex webapp --listen=192.168.21.12
+
+
+
+
+### What steps will reproduce the problem?
+
+
+git-annex webapp --listen=192.168.21.12:46199
+
+
+### What version of git-annex are you using? On what operating system?
+
+
+version 5.20140716-g8c14ba8 on debian wheezy using your pre build static tar archive.
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+the log output is the following 3 lines
+
+[2014-07-23 16:41:45 CEST] main: starting assistant version 5.20140716-g8c14ba8
+WebApp crashed: getAddrInfo: does not exist (Name or service not known)
+[2014-07-23 16:41:45 CEST] WebApp: warning WebApp crashed: getAddrInfo: does not exist (Name or service not known)
+
+
+
+# End of transcript or log.
+"""]]
+
+> [[done]] --[[Joey]]
diff --git a/doc/bugs/_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41_____91__2014-07-23_16:41:45_CEST__93___WebApp:_warning_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41__/comment_1_4d1b96911e3e227c7433ccea543872c1._comment b/doc/bugs/_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41_____91__2014-07-23_16:41:45_CEST__93___WebApp:_warning_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41__/comment_1_4d1b96911e3e227c7433ccea543872c1._comment
new file mode 100644
index 000000000..5808c5644
--- /dev/null
+++ b/doc/bugs/_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41_____91__2014-07-23_16:41:45_CEST__93___WebApp:_warning_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41__/comment_1_4d1b96911e3e227c7433ccea543872c1._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="24.159.78.125"
+ subject="comment 1"
+ date="2014-07-23T22:10:37Z"
+ content="""
+Support for --listen with a port was removed in version 5.20140306, since it was buggy. In particular, when the webapp creates a new repository, it needs to switch to a new port to serve that repository, so specifying a single port won't work.
+
+Instead, when annex.listen or --listen specifies the address to listen on, `git annex webapp` will print out the url to use to open it, including the port it picked. This could be used in a script, or clicked on in the terminal to open a local browser when running the webapp on a remote host.
+"""]]
diff --git a/doc/bugs/_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41_____91__2014-07-23_16:41:45_CEST__93___WebApp:_warning_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41__/comment_2_7be98a630e1deb655a4d1675bf622d05._comment b/doc/bugs/_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41_____91__2014-07-23_16:41:45_CEST__93___WebApp:_warning_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41__/comment_2_7be98a630e1deb655a4d1675bf622d05._comment
new file mode 100644
index 000000000..2dd988501
--- /dev/null
+++ b/doc/bugs/_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41_____91__2014-07-23_16:41:45_CEST__93___WebApp:_warning_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41__/comment_2_7be98a630e1deb655a4d1675bf622d05._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="markusk"
+ ip="79.243.250.79"
+ subject="comment 2"
+ date="2014-07-23T23:18:37Z"
+ content="""
+Thank you for the info! Will add the port grep to my auth grep script as you suggested.
+"""]]
diff --git a/doc/bugs/__171__transferkey__187___fails_for_bare_remotes.mdwn b/doc/bugs/__171__transferkey__187___fails_for_bare_remotes.mdwn
new file mode 100644
index 000000000..b8c583618
--- /dev/null
+++ b/doc/bugs/__171__transferkey__187___fails_for_bare_remotes.mdwn
@@ -0,0 +1,21 @@
+### Please describe the problem.
+
+I wanted to inspect the state of an object present in a bare remote
+without touching the working copy. So I issued «transferkey $KEY --from
+bare-remote»; however, even for keys that are definitely present on
+the remote, this would fail with «requested key is not present».
+
+The same method, when using a non-bare repo in «--from», would succeed
+under otherwise identical conditions.
+
+### What steps will reproduce the problem?
+
+Cf. above.
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex 5.20140708
+
+Linux 3.15.4
+
+> [[done]] not a bug per comment.
diff --git a/doc/bugs/__171__transferkey__187___fails_for_bare_remotes/comment_1_dd4538ab19a7f8e0f49aa0156aeaae43._comment b/doc/bugs/__171__transferkey__187___fails_for_bare_remotes/comment_1_dd4538ab19a7f8e0f49aa0156aeaae43._comment
new file mode 100644
index 000000000..c7760dc05
--- /dev/null
+++ b/doc/bugs/__171__transferkey__187___fails_for_bare_remotes/comment_1_dd4538ab19a7f8e0f49aa0156aeaae43._comment
@@ -0,0 +1,32 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="134.147.14.84"
+ subject="comment 1"
+ date="2014-07-09T08:51:22Z"
+ content="""
+[[!format sh \"\"\"
+
+# Key present on remote.
+seb@vserver [ /srv/git/seb/ebooks.git ]$ ls -l annex/objects/f15/e83/WORM-s55921664-m1404679753--calibre%metadata.db/WORM-s55921664-m1404679753--calibre%metadata.db
+-r--r--r-- 1 seb users 54M 6. Jul 22:49 annex/objects/f15/e83/WORM-s55921664-m1404679753--calibre%metadata.db/WORM-s55921664-m1404679753--calibre%metadata.db
+
+# Trying to transfer key from remote.
+seb [ ~/Ebooks ]$ git annex transferkey WORM-s55921664-m1404679753--calibre%metadata.db --from vserver -d
+[2014-07-09 10:49:37 CEST] read: git [\"--git-dir=/home/seb/Ebooks/.git\",\"--work-tree=/home/seb/Ebooks\",\"-c\",\"core.bare=false\",\"show-ref\",\"git-annex\"]
+[2014-07-09 10:49:37 CEST] read: git [\"--git-dir=/home/seb/Ebooks/.git\",\"--work-tree=/home/seb/Ebooks\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+[2014-07-09 10:49:37 CEST] read: git [\"--git-dir=/home/seb/Ebooks/.git\",\"--work-tree=/home/seb/Ebooks\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..d2ae02b03f8b87c3465c82f96a924ac7b913fed7\",\"-n1\",\"--pretty=%H\"]
+[2014-07-09 10:49:37 CEST] read: git [\"--git-dir=/home/seb/Ebooks/.git\",\"--work-tree=/home/seb/Ebooks\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..fc2251ff897bdbc3152c98c4142dcdf77328404b\",\"-n1\",\"--pretty=%H\"]
+[2014-07-09 10:49:37 CEST] read: git [\"--git-dir=/home/seb/Ebooks/.git\",\"--work-tree=/home/seb/Ebooks\",\"-c\",\"core.bare=false\",\"log\",\"refs/heads/git-annex..717b07d139b3375cab8c0d54c5dc6379a6c5cb89\",\"-n1\",\"--pretty=%H\"]
+[2014-07-09 10:49:37 CEST] chat: git [\"--git-dir=/home/seb/Ebooks/.git\",\"--work-tree=/home/seb/Ebooks\",\"-c\",\"core.bare=false\",\"cat-file\",\"--batch\"]
+[2014-07-09 10:49:37 CEST] read: ssh [\"-O\",\"stop\",\"-S\",\"wirrsal.net\",\"-o\",\"ControlMaster=auto\",\"-o\",\"ControlPersist=yes\",\"localhost\"]
+
+[2014-07-09 10:49:37 CEST] read: rsync [\"--progress\",\"--inplace\",\"--perms\",\"-e\",\"'ssh' '-S' '.git/annex/ssh/wirrsal.net' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=yes' '-T' 'wirrsal.net' 'git-annex-shell ''sendkey'' ''/srv/git/seb/ebooks.git'' ''WORM-s55921664-m1404679753--calibre%metadata.db'' --uuid 4316c3dc-5b6d-46eb-b780-948c717b7be5 ''--'' ''remoteuuid=a97ab0e5-320e-488b-b9e8-b9da57785b81'' ''direct=1'' ''--'''\",\"--\",\"dummy:\",\"/home/seb/Ebooks/.git/annex/tmp/WORM-s55921664-m1404679753--calibre&smetadata.db\"]
+ requested key is not present
+rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
+rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.1]
+
+ rsync failed -- run git annex again to resume file transfer
+
+
+\"\"\"]]
+"""]]
diff --git a/doc/bugs/__171__transferkey__187___fails_for_bare_remotes/comment_2_4276ff682d10c1d4be9728f9b649ebae._comment b/doc/bugs/__171__transferkey__187___fails_for_bare_remotes/comment_2_4276ff682d10c1d4be9728f9b649ebae._comment
new file mode 100644
index 000000000..ef593e5c1
--- /dev/null
+++ b/doc/bugs/__171__transferkey__187___fails_for_bare_remotes/comment_2_4276ff682d10c1d4be9728f9b649ebae._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="134.147.14.84"
+ subject="comment 2"
+ date="2014-07-09T09:02:59Z"
+ content="""
+Ah, sorry. I see. So, the «%» have to be unescaped into slashes, of course. My bad.
+
+[[!tag done]]
+"""]]
diff --git a/doc/bugs/__171__uninit__187___on_direct_mode_repo_gives___171__removeLink:_permission_denied___40__Permission_denied__41____187__.mdwn b/doc/bugs/__171__uninit__187___on_direct_mode_repo_gives___171__removeLink:_permission_denied___40__Permission_denied__41____187__.mdwn
new file mode 100644
index 000000000..b7dcf29b7
--- /dev/null
+++ b/doc/bugs/__171__uninit__187___on_direct_mode_repo_gives___171__removeLink:_permission_denied___40__Permission_denied__41____187__.mdwn
@@ -0,0 +1,33 @@
+### Please describe the problem.
+
+I suppose that in a direct mode repo, one might as well just «chmod -R
++w .git/annex; rm -r .git/annex», but I noticed that, when using «git
+annex uninit», this will fail to remove some files in .git/annex.
+
+### What steps will reproduce the problem?
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+$ mkdir /tmp/foo
+$ cd /tmp/foo
+$ git init
+$ git annex init
+$ echo quux > file
+$ git annex add file
+$ git annex sync
+$ git annex uninit
+unannex file ok
+git-annex: /tmp/foo/.git/annex/objects/zQ/MQ/SHA256E-s3--98ea6e4f216f2fb4b69fff9b3a44842c38686ca685f3f55dc48c5d3fb1107be4/SHA256E-s3--98ea6e4f216f2fb4b69fff9b3a44842c38686ca685f3f55dc48c5d3fb1107be4.map: removeLink: permission denied (Permission denied)
+
+# End of transcript or log.
+"""]]
+
+
+### What version of git-annex are you using? On what operating system?
+git-annex 5.20140709-1
+
+linux 3.15.5
+
+### Please provide any additional information below.
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/__34__Adding_4923_files__34___is_really_slow.mdwn b/doc/bugs/__34__Adding_4923_files__34___is_really_slow.mdwn
index 148fa7325..5495662b9 100644
--- a/doc/bugs/__34__Adding_4923_files__34___is_really_slow.mdwn
+++ b/doc/bugs/__34__Adding_4923_files__34___is_really_slow.mdwn
@@ -98,3 +98,5 @@ add music/Pop/Various/Like, Omigod! The 80s Pop Culture Box (totally)/._4-08 Tal
"""]]
[[!meta title="direct mode mappings scale badly with thousands of identical files"]]
+
+[[!tag confirmed]]
diff --git a/doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error..mdwn b/doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error..mdwn
deleted file mode 100644
index 94a124b23..000000000
--- a/doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error..mdwn
+++ /dev/null
@@ -1,42 +0,0 @@
-### Please describe the problem.
-
-After setting the username (xyz@gmail.com) and the password the webapp takes several minutes until eventually an error message is displayed stating that:
-
- Unable to connect to the Jabber server. Maybe you entered the wrong password? (Error message: host gmail.com:5222 failed: connect: does not exist (Network is unreachable))
-
-Testing with xyz@xmpp.l.gmail.com yields:
-
- Unable to connect to the Jabber server. Maybe you entered the wrong password? (Error message: host xmpp.l.google.com:5222 failed: AuthenticationFailure)
-
-What's strange about that is that the exact same procedure works on a different (Ubuntu-) system with almost no time spend.
-
-### What steps will reproduce the problem?
-
-Trying to set up the jabber connection.
-
-### What version of git-annex are you using? On what operating system?
-
- git-annex version: 4.20130922-g7dc188a
- build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP Feeds Quvi
- (actually a zeroinstall feed from here: http://f12n.de/0install/git-annex-webapp.xml which is based on the standalone build)
-
-OS: up-to-date ARCH system
-
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-[2013-09-23 19:24:04 CEST] main: starting assistant version 4.20130922-g7dc188a
-(scanning...) [2013-09-23 19:24:04 CEST] Watcher: Performing startup scan
-(started...)
-[2013-09-23 20:18:12 CEST] read: host ["-t","SRV","--","_xmpp-client._tcp.gmail.com"]
-.git/annex/daemon.log (END)
-
-# End of transcript or log.
-"""]]
-
-> [[done]]; I have enabled the haskell dns library on all the autobuilds.
-> --[[Joey]]
diff --git a/doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error./comment_1_6d821af99ab3c83a5b0f52d3713ab8e2._comment b/doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error./comment_1_6d821af99ab3c83a5b0f52d3713ab8e2._comment
deleted file mode 100644
index c2dd31f17..000000000
--- a/doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error./comment_1_6d821af99ab3c83a5b0f52d3713ab8e2._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.220"
- subject="comment 1"
- date="2013-09-25T18:27:24Z"
- content="""
-Sounds like the SRV lookup is failing. Does `git-annex version` list either DNS or ADNS in the build flags?
-
-Does `host -t SRV _xmpp-client._tcp.gmail.com` work?
-"""]]
diff --git a/doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error./comment_2_206b6c8cce8350fc088f01c42fc4715b._comment b/doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error./comment_2_206b6c8cce8350fc088f01c42fc4715b._comment
deleted file mode 100644
index 1cb191d8f..000000000
--- a/doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error./comment_2_206b6c8cce8350fc088f01c42fc4715b._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawknwkXgi8SnK4QT32ANl3GMKvFLyQGeHqo"
- nickname="Florian"
- subject="comment 2"
- date="2013-09-25T21:19:23Z"
- content="""
-Aaaah ok ... the *host* command is not installed by default on Arch Linux. I've installed it ... now it works ... will report it to the package maintainer.
-"""]]
diff --git a/doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error./comment_3_ed36f503f88611382b50687608b9b7e7._comment b/doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error./comment_3_ed36f503f88611382b50687608b9b7e7._comment
deleted file mode 100644
index a69763af7..000000000
--- a/doc/bugs/__34__Configuring_Jabber_Account__34___fails_with_a___34__Network_unreachable__34___error./comment_3_ed36f503f88611382b50687608b9b7e7._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="108.236.230.124"
- subject="comment 3"
- date="2013-11-08T18:42:22Z"
- content="""
-Seems like I should fix the standalone linux tarball to either include the host program, or better, build git-annex with the Haskell [DNS library](https://hackage.haskell.org/package/dns). (I think that the Mac app and other builds are built with DNS by default, since they have dependencies installed using cabal directly).
-
-I need to first get that library included in Debian, so I can install it reliably on my build systems.
-"""]]
diff --git a/doc/bugs/__34__annex_sync__34___gets_confused_when_operating_in_a_symlink__39__ed_directory.mdwn b/doc/bugs/__34__annex_sync__34___gets_confused_when_operating_in_a_symlink__39__ed_directory.mdwn
deleted file mode 100644
index 96d1d4d2e..000000000
--- a/doc/bugs/__34__annex_sync__34___gets_confused_when_operating_in_a_symlink__39__ed_directory.mdwn
+++ /dev/null
@@ -1,18 +0,0 @@
-What steps will reproduce the problem?
-
- * Create a symlink to a directory in your annex repository, like e.g. ~/Notes -> ~/annex/Notes
- * cd into ~/Notes
- * execute 'git annex sync <remote>', assuming that <remote> has made some changes
-
-What is the expected output? What do you see instead?
-
-If <remote> has made a change to, say, ~/annex/Documents/test.txt, the sync unexpectedly creates the new test.txt at ~/Notes/Documents/test.txt.
-It should either magically figure out that it has to create the file relative to the repository's root (i.e. ~/annex) or throw an error instead.
-
-What version of git-annex are you using? On what operating system?
-
-git-annex version: 4.20130323
-OS: Archlinux
-Shell: zsh
-
-
diff --git a/doc/bugs/__34__drop__34___deletes_all_files_with_identical_content.mdwn b/doc/bugs/__34__drop__34___deletes_all_files_with_identical_content.mdwn
deleted file mode 100644
index bdf48760c..000000000
--- a/doc/bugs/__34__drop__34___deletes_all_files_with_identical_content.mdwn
+++ /dev/null
@@ -1,49 +0,0 @@
-# What steps will reproduce the problem?
-
- echo "TEST CONTENT" > fileA
- cp fileA fileB
- git annex add file{A,B}
- git annex drop fileA --force
- cat fileB
-
-# What is the expected output? What do you see instead?
-
-## expected:
-
---> TEST CONTENT
-
-## observed:
-
---> cat: fileB: No such file or directory
-
-
-# What version of git-annex are you using? On what operating system?
-
-git-annex version: 3.20121017
-
-# Please provide any additional information below.
-
-I really like git annex's feature, to store the same content only once. But as this happens transparently (i.e. the user does not need to no, nor is he told, that contents are identical (which is very comfortable, of course)), the "git annex drop" function is broken. For it effectively deleting (seemingly) random files, WITHOUT notifying the user.
-
-
-# Possible solution?
-
-One simple solution would be to use "git annex find" functionality to see who else uses the file and NOT deleting it.
-
-But this still leaves a problem:
-
-Consider the following variation of the above example and assume, that "drop" does not delete content that is still used (i.e. implementing the above solution).
-
- echo "TEST CONTENT" > fileA
- cp fileA fileB
- git annex add file{A,B}
- git rm fileB
- git annex drop fileA --force
- git checkout --force
- cat fileB
---> cat: fileB: No such file or directory
-
-Here again, the problem is, that the user would probably (correct me if I am wrong) expect that the fileB still exists, because removing a file and checking it out again is expected to not mess with the annex contents (?). He does not know, that the "annex frop fileA" actually drop fileB's contents, because there was no additional file linking to it. It effectively performed a "git annex dropunused".
-
-> We seem to have agreed this is reasonable behavior, and a doc change was done.
-> Do feel free to suggest other doc changes.. [[done]] --[[Joey]]
diff --git a/doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_1_2eb20b65582fa7f271b1d0bb5560d08c._comment b/doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_1_2eb20b65582fa7f271b1d0bb5560d08c._comment
deleted file mode 100644
index 712657e82..000000000
--- a/doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_1_2eb20b65582fa7f271b1d0bb5560d08c._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="2001:4978:f:21a::2"
- subject="comment 1"
- date="2012-10-28T17:13:32Z"
- content="""
-You can avoid this by not using a deduplicating backend; for example you can use the WORM backend.
-
-However, the foot shooting actually occurs due to using drop --force, which is explicitly asking git-annex to be unsafe. If you want to be safe, simply don't use --force. If you want to safely delete a file, simply `git rm` it, and then `git annex unused` will come along and find content that can safely be removed.
-"""]]
diff --git a/doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_2_b14e1d31dd6a8fb930fcc0bec798e194._comment b/doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_2_b14e1d31dd6a8fb930fcc0bec798e194._comment
deleted file mode 100644
index 005c45be2..000000000
--- a/doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_2_b14e1d31dd6a8fb930fcc0bec798e194._comment
+++ /dev/null
@@ -1,19 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlgyVag95OnpvSzQofjyX0WjW__MOMKsl0"
- nickname="Sehr"
- subject="comment 2"
- date="2012-10-28T21:46:08Z"
- content="""
-I onyl used \"--force\" for demonstration purposes. I could also set
-
- annex.numcopies = 0
-
-which removes the need \"force\". While this setting can be totally reasonable in certain circumstancing it seems very dangerous, that completely unrelated files might unwillingly be deleted.
-
-I agree with you, that a possible solution could be to not use a deduplicating backend. But my point is, that this needs to be either changed or documented. Because even if the user can \"fix\" this by changing his behavior, he will probably only do so AFTER he lost something.
-
-Instead of changing the program (to include a check), I would at least suggest an addition to \"drop\"'s documentation:
-
-
-\"drop\": keep in mind, that on dedcupliocating backends, you might end up deleting more than one file. to be perfectly safe, use git-rm and git-annex dropunused.
-"""]]
diff --git a/doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_3_1892bcfbe3c462aa74552a241d65cad9._comment b/doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_3_1892bcfbe3c462aa74552a241d65cad9._comment
deleted file mode 100644
index 8dfc30a60..000000000
--- a/doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_3_1892bcfbe3c462aa74552a241d65cad9._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="2001:4978:f:21a::2"
- subject="comment 3"
- date="2012-10-28T23:29:46Z"
- content="""
-numcopies=0 is inherently unsafe, and unreasonable if you value your data at all. I've added some warnings about it to the man page.
-"""]]
diff --git a/doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_4_dfa0e31996eaa14e2945c1d11670c4d9._comment b/doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_4_dfa0e31996eaa14e2945c1d11670c4d9._comment
deleted file mode 100644
index d82a3026d..000000000
--- a/doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_4_dfa0e31996eaa14e2945c1d11670c4d9._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlgyVag95OnpvSzQofjyX0WjW__MOMKsl0"
- nickname="Sehr"
- subject="comment 4"
- date="2012-10-29T00:00:33Z"
- content="""
-Thanks, that's cool. Admittedly, I cannot think of too many scenarios, where there are two identical files without the user's knowloedge. And an even smaller subset of scenarios, where one would want to issue a \"drop\" on (only) one of these due to storage shortages.
-
-
-
-By the way, I LOVE git-annex.
-
-
-PS: I just realized, that the same applies to the \"move\" command.
-"""]]
diff --git a/doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_5_e2a9336cf1080c158765d4adfe72f26b._comment b/doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_5_e2a9336cf1080c158765d4adfe72f26b._comment
deleted file mode 100644
index cc93b0f49..000000000
--- a/doc/bugs/__34__drop__34___deletes_all_files_with_identical_content/comment_5_e2a9336cf1080c158765d4adfe72f26b._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="2001:4978:f:21a::2"
- subject="comment 5"
- date="2012-10-29T00:03:40Z"
- content="""
-You're guaranteed to still have at least 1 copy of the file after move though, so you can get it back.
-
-"""]]
diff --git a/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit.mdwn b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit.mdwn
new file mode 100644
index 000000000..f6265f05a
--- /dev/null
+++ b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit.mdwn
@@ -0,0 +1,24 @@
+### Please describe the problem.
+After having added new content (SHA1E backend), when trying to commit, git commit fails with the following error:
+
+[[!format sh """
+(Recording state in git...)
+error: invalid object 100644 5d471129a031f0f493de3736eaea6f2f4056aeee for '000/091/WORM-s1493-m1321288671--scrapbook%data%20111114173520%horiz-menu-tab-r_001.png.log'
+fatal: git-write-tree: error building trees
+git-annex: failed to read sha from git write-tree
+"""]]
+
+The commit subsequently fails and the index is left as is. When I did git-annex add, I got the same error, but the additions seem to have been staged, at least.
+
+What’s curious about this is that I migrated all keys to SHA1E earlier and dropped all WORM keys. git annex info also says that all my keys are SHA1E.
+
+Can this be related to your changes to the WORM backend? I upgraded to git-annex 5.20140818 today. Rolling back to 5.20140716 didn’t allow me to commit, either, though.
+
+Any way I could resolve this? I don’t want to git reset for now, since this will leave the added objects in the annex store.
+
+### What version of git-annex are you using? On what operating system?
+git-annex 5.20140818
+
+Linux 3.16.1
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_10_8abfe7417167df54b686960319465a65._comment b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_10_8abfe7417167df54b686960319465a65._comment
new file mode 100644
index 000000000..a8d501682
--- /dev/null
+++ b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_10_8abfe7417167df54b686960319465a65._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="CandyAngel"
+ ip="81.111.193.130"
+ subject="comment 10"
+ date="2014-09-08T08:08:50Z"
+ content="""
+Removing .git/annex/index is safe, it is a step in getting git-annex to [forget a commit entirely](http://git-annex.branchable.com/forum/How_to_get_git-annex_to_forget_a_commit__63__).
+"""]]
diff --git a/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_11_7776659e257a97c9a3855c8ad008207a._comment b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_11_7776659e257a97c9a3855c8ad008207a._comment
new file mode 100644
index 000000000..4632a5df3
--- /dev/null
+++ b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_11_7776659e257a97c9a3855c8ad008207a._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 11"
+ date="2014-10-02T16:09:37Z"
+ content="""
+It seems to me that the problem must be with .git/annex/index.
+
+I would be interested in looking at this git repository, if there's a way to get a copy (no .git/annex/objects needed).
+"""]]
diff --git a/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_12_e8bbfb4eb26dae31f90a5fa53b4dc948._comment b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_12_e8bbfb4eb26dae31f90a5fa53b4dc948._comment
new file mode 100644
index 000000000..dd6b5c196
--- /dev/null
+++ b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_12_e8bbfb4eb26dae31f90a5fa53b4dc948._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""ping?"""
+ date="2015-02-10T17:37:06Z"
+ content="""
+Do you still have this repository?
+
+Marking this bug moreinfo.
+"""]]
diff --git a/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_1_2a64a2da445a64149da7335f35142a08._comment b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_1_2a64a2da445a64149da7335f35142a08._comment
new file mode 100644
index 000000000..af980d1bc
--- /dev/null
+++ b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_1_2a64a2da445a64149da7335f35142a08._comment
@@ -0,0 +1,35 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="78.48.163.229"
+ subject="comment 1"
+ date="2014-08-22T09:27:34Z"
+ content="""
+git fsck only shows a few dangling blobs from a branch I did earlier and left behind, but otherwise reports no errors.
+
+git annex fsck --fast ultimately fails with the original error message at some point:
+
+[[!format sh \"\"\"
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+# nx fsck --fast|egrep -v 'ok$'
+[2014-08-22 11:14:43 CEST] read: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"ls-files\",\"--cached\",\"-z\",\"--\"]
+[2014-08-22 11:14:43 CEST] chat: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"check-attr\",\"-z\",\"--stdin\",\"annex.backend\",\"annex.numcopies\",\"--\"]
+[2014-08-22 11:14:43 CEST] read: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"show-ref\",\"git-annex\"]
+[2014-08-22 11:14:43 CEST] read: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+[2014-08-22 11:14:43 CEST] read: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"log\",\"refs/heads/git-annex..dda9b068ac5c075e79ab63a531770ad772ae8491\",\"-n1\",\"--pretty=%H\"]
+[2014-08-22 11:14:43 CEST] chat: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"cat-file\",\"--batch\"]
+[2014-08-22 11:25:24 CEST] chat: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"hash-object\",\"-w\",\"--stdin-paths\",\"--no-filters\"]
+[2014-08-22 11:25:24 CEST] feed: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"update-index\",\"-z\",\"--index-info\"]
+[2014-08-22 11:25:24 CEST] read: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+[2014-08-22 11:25:24 CEST] read: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"write-tree\"]
+error: invalid object 100644 5d471129a031f0f493de3736eaea6f2f4056aeee for '000/091/WORM-s1493-m1321288671--scrapbook%data%20111114173520%horiz-menu-tab-r_001.png.log'
+fatal: git-write-tree: error building trees
+git-annex: failed to read sha from git write-tree
+(Recording state in git...)
+
+# End of transcript or log.
+\"\"\"]]
+
+
+"""]]
diff --git a/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_2_decb1689b8cc2541077e2d0ae273b5e7._comment b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_2_decb1689b8cc2541077e2d0ae273b5e7._comment
new file mode 100644
index 000000000..b4feb654f
--- /dev/null
+++ b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_2_decb1689b8cc2541077e2d0ae273b5e7._comment
@@ -0,0 +1,30 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="78.48.163.229"
+ subject="comment 2"
+ date="2014-08-22T09:38:03Z"
+ content="""
+git commit with git-annex debug output enabled:
+
+
+[[!format sh \"\"\"
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+[2014-08-22 11:36:46 CEST] read: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"diff\",\"--cached\",\"--name-only\",\"-z\",\"--diff-filter=ACMRT\",\"--\",\".\"]
+[2014-08-22 11:36:46 CEST] read: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"diff\",\"--name-only\",\"--diff-filter=T\",\"-z\",\"--cached\",\"--\",\".\"]
+[2014-08-22 11:36:46 CEST] read: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"symbolic-ref\",\"HEAD\"]
+[2014-08-22 11:36:46 CEST] read: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"show-ref\",\"refs/heads/master\"]
+[2014-08-22 11:36:46 CEST] chat: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"hash-object\",\"-w\",\"--stdin-paths\",\"--no-filters\"]
+[2014-08-22 11:36:46 CEST] feed: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"update-index\",\"-z\",\"--index-info\"]
+[2014-08-22 11:36:46 CEST] read: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+(Recording state in git...)
+[2014-08-22 11:36:46 CEST] read: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"write-tree\"]
+error: invalid object 100644 5d471129a031f0f493de3736eaea6f2f4056aeee for '000/091/WORM-s1493-m1321288671--scrapbook%data%20111114173520%horiz-menu-tab-r_001.png.log'
+fatal: git-write-tree: error building trees
+git-annex: failed to read sha from git write-tree
+
+# End of transcript or log.
+\"\"\"]]
+
+"""]]
diff --git a/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_3_1f6443e495cc16a13e2e4175e73dc8f1._comment b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_3_1f6443e495cc16a13e2e4175e73dc8f1._comment
new file mode 100644
index 000000000..78e7f4138
--- /dev/null
+++ b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_3_1f6443e495cc16a13e2e4175e73dc8f1._comment
@@ -0,0 +1,27 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="78.48.163.229"
+ subject="comment 3"
+ date="2014-08-22T09:58:05Z"
+ content="""
+Doing a git annex fsck on a new clone of the repository succeded; the problem must somehow with the .git/annex/index then, I presume?
+
+I did a git reset to restore to the sane state state before adding, but the problem is that I cannot unannex the files I added. :(
+
+[[!format sh \"\"\"
+nx unannex scrapbook/data/20140822101558/1.jpg
+[2014-08-22 11:56:16 CEST] read: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"show-ref\",\"--head\"]
+[2014-08-22 11:56:16 CEST] read: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"diff-index\",\"-z\",\"--raw\",\"--no-renames\",\"-l0\",\"--cached\",\"HEAD\"]
+[2014-08-22 11:56:16 CEST] read: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"ls-files\",\"--cached\",\"-z\",\"--\",\"scrapbook/data/20140822101558/1.jpg\"]
+[2014-08-22 11:56:16 CEST] call: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"commit\",\"-q\",\"--allow-empty\",\"--no-verify\",\"-m\",\"content removed from git annex\"]
+[2014-08-22 11:56:16 CEST] chat: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"hash-object\",\"-w\",\"--stdin-paths\",\"--no-filters\"]
+[2014-08-22 11:56:16 CEST] feed: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"update-index\",\"-z\",\"--index-info\"]
+[2014-08-22 11:56:16 CEST] read: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+(Recording state in git...)
+[2014-08-22 11:56:16 CEST] read: git [\"--git-dir=/home/seb/Webmirror/.git\",\"--work-tree=/home/seb/Webmirror\",\"write-tree\"]
+error: invalid object 100644 5d471129a031f0f493de3736eaea6f2f4056aeee for '000/091/WORM-s1493-m1321288671--scrapbook%data%20111114173520%horiz-menu-tab-r_001.png.log'
+fatal: git-write-tree: error building trees
+git-annex: failed to read sha from git write-tree
+\"\"\"]]
+
+"""]]
diff --git a/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_4_522020e71393434834def6c80b82e39e._comment b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_4_522020e71393434834def6c80b82e39e._comment
new file mode 100644
index 000000000..bfab0d1be
--- /dev/null
+++ b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_4_522020e71393434834def6c80b82e39e._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="78.48.163.229"
+ subject="comment 4"
+ date="2014-08-22T10:15:51Z"
+ content="""
+The file referred to in the error message seems to be in good shape:
+
+[[!format sh \"\"\"
+git --no-pager show git-annex:000/091/WORM-s1493-m1321288671--scrapbook%data%20111114173520%horiz-menu-tab-r_001.png.log
+1408605730.57892s 0 b25f42de-f4be-4d31-84d1-ab0b71dfec01
+1408562938.526946s 0 e148ea91-0eb6-4f47-86e9-db2136a15279
+\"\"\"]]
+
+Strangely, the SHA1 of the blob is different from the one reported in the write-tree error.
+"""]]
diff --git a/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_5_cc4cba022869b32d298cdafed9545a34._comment b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_5_cc4cba022869b32d298cdafed9545a34._comment
new file mode 100644
index 000000000..0be1eb958
--- /dev/null
+++ b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_5_cc4cba022869b32d298cdafed9545a34._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="78.48.163.229"
+ subject="comment 5"
+ date="2014-08-22T13:07:34Z"
+ content="""
+I remembered I keep an hourly snapshot regimen and was able to get back the repository from before doing the «add» this morning. Both git fsck and git annex fsck return no errors, and yet, whenever anything is done to the git-annex branch (I tried add and forget), I get the above error.
+"""]]
diff --git a/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_6_e71b251db2ff1f52a40fec40303cdefc._comment b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_6_e71b251db2ff1f52a40fec40303cdefc._comment
new file mode 100644
index 000000000..3fcbf200b
--- /dev/null
+++ b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_6_e71b251db2ff1f52a40fec40303cdefc._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="78.48.163.229"
+ subject="comment 6"
+ date="2014-08-22T13:15:06Z"
+ content="""
+I tried git annex repair on the repo (before doing any adds). It reports no fsck errors, but the repair then dies from a stack overflow.
+
+[[!format sh \"\"\"
+Running git fsck ...
+No problems found.
+Stack space overflow: current size 8388608 bytes.
+Use `+RTS -Ksize -RTS' to increase it.
+\"\"\"]]
+"""]]
diff --git a/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_7_0b6413f9ca403be3d83bb3306d1e7f8f._comment b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_7_0b6413f9ca403be3d83bb3306d1e7f8f._comment
new file mode 100644
index 000000000..eb2dea956
--- /dev/null
+++ b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_7_0b6413f9ca403be3d83bb3306d1e7f8f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="78.48.163.229"
+ subject="comment 7"
+ date="2014-08-22T14:00:42Z"
+ content="""
+I experimented on my snapshot a bit and found out something odd: When I reset the git-annex branch from dda9b06 to git-annex~1 (4246f73) my local file additions succeed, even though git-annex will fast-forward the branch to dda9b06 again before adding (when merging from origin/git-annex). dda9b06 is a large commit in which I dropped many unused WORM keys from another remote.
+"""]]
diff --git a/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_8_f951981f0bf8cbaecfc46e7b9c903d70._comment b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_8_f951981f0bf8cbaecfc46e7b9c903d70._comment
new file mode 100644
index 000000000..ec876d2ea
--- /dev/null
+++ b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_8_f951981f0bf8cbaecfc46e7b9c903d70._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="78.48.163.229"
+ subject="comment 8"
+ date="2014-08-22T18:57:37Z"
+ content="""
+I just checked my other large git annex repo and noticed that here too I could no longer add files to the annex. The same observations as above apply. Here too on the tip of the git-anenx branch I had one huge commit in which I dropped the last of the unused WORM keys from another remote. Resetting the git-annex branch to git-annex~1 allowed me to make additions again, even though the reset tip was subsequently merged in again from the remote tracking branch.
+"""]]
diff --git a/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_9_7c98c8b291fdf28a09ccb6c7e4001d5a._comment b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_9_7c98c8b291fdf28a09ccb6c7e4001d5a._comment
new file mode 100644
index 000000000..1a49e449f
--- /dev/null
+++ b/doc/bugs/__34__error:_invalid_object__34____44___after_add__59___cannot_commit/comment_9_7c98c8b291fdf28a09ccb6c7e4001d5a._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="78.48.163.229"
+ subject="comment 9"
+ date="2014-09-07T14:04:51Z"
+ content="""
+Any ideas? I noticed one alternative way (cf. the reset workaround
+above) to make «git annex add» work again is by deleting
+.git/annex/index*. Is this safe?
+
+In both repos, I had not even staged annex additions before the index
+was corrupted; the corruption must somehow have been left-over from
+earlier actions, altough all previous additions succeeded at the time,
+before both repositories mysteriously stopped working (in the context
+of backend-migration).
+
+I still have the original snapshots around if you’d like to debug
+this. As noted, «git fsck» succeeds, and all the block-level checksums
+check out, so the problem can’t be on the block device or file-system
+level.
+
+"""]]
diff --git a/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows.mdwn b/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows.mdwn
new file mode 100644
index 000000000..d127934fa
--- /dev/null
+++ b/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows.mdwn
@@ -0,0 +1,109 @@
+### Please describe the problem.
+
+When attempting to clone and use a git repository in a subdirectory several levels deep on Windows, I observe symptoms very similar to those described at http://git-annex.branchable.com/direct_mode/#comment-8feee726df4e287dd3751bc77fd1441f. By contrast, when I attempt the same operation in a subdirectory higher up, the operation is successful. Logs of both sessions are given below.
+
+My suspicion is that this has to do with exceeding the maximum path length limitation (MAX_PATH) of 260 characters on Windows, as described here: http://msdn.microsoft.com/en-us/library/aa365247.aspx.
+
+
+### What steps will reproduce the problem?
+
+See above.
+
+
+### What version of git-annex are you using? On what operating system?
+
+>git annex version
+git-annex version: 5.20140517-gee56d21
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 2 3 4
+
+>git version
+git version 1.9.0.msysgit.0
+
+Operating system: Windows 7 Professional (64-bit), Service Pack 1
+
+
+### Please provide any additional information below.
+
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+C:\Users\areeves\Documents\Work\MyDirectoryHere\git>git clone ssh://areeves@myserver:/home/work/git/sbv
+Cloning into 'sbv'...
+remote: Counting objects: 65, done.
+remote: Compressing objects: 100% (57/57), done.
+remote: Total 65 (delta 26), reused 0 (delta 0)
+Receiving objects: 100% (65/65), 9.25 KiB | 0 bytes/s, done.
+Resolving deltas: 100% (26/26), done.
+Checking connectivity... done.
+
+
+C:\Users\areeves\Documents\Work\MyDirectoryHere\git>cd sbv
+C:\Users\areeves\Documents\Work\MyDirectoryHere\git\sbv>git annex get
+
+ Detected a filesystem without fifo support.
+
+ Disabling ssh connection caching.
+
+ Detected a crippled filesystem.
+
+ Enabling direct mode.
+git-annex: C:\Users\areeves\Documents\Work\MyDirectoryHere\git\sbv\.git\annex\objects\3de\5f4\SHA256-s765223180--c9e2eebd915b4ade9429b00a7a893df928389b3fb4ab759ea9f00b0e05e18de6\: openTempFile: does not exist (No such file or directory)
+
+
+C:\Users\areeves\Documents\Work\MyDirectoryHere\git\sbv>git annex direct
+commit
+On branch master
+Your branch is up-to-date with 'origin/master'.
+
+nothing to commit, working directory clean
+ok
+
+git-annex: C:\Users\areeves\Documents\Work\MyDirectoryHere\git\sbv\.git\annex\objects\3de\5f4\SHA256-s765223180--c9e2eebd915b4ade9429b00a7a893df928389b3fb4ab759ea9f00b0e05e18de6\: openTempFile: does not exist (No such file or directory)
+failed
+git-annex: direct: 1 failed
+
+
+C:\Users\areeves\Documents\Work\MyDirectoryHere\git\sbv>cd c:\temp
+c:\temp>git clone ssh://areeves@myserver:/home/work/git/sbv
+Cloning into 'sbv'...
+remote: Counting objects: 65, done.
+remote: Compressing objects: 100% (57/57), done.
+remote: Total 65 (delta 26), reused 0 (delta 0)
+Receiving objects: 100% (65/65), 9.25 KiB | 0 bytes/s, done.
+Resolving deltas: 100% (26/26), done.
+Checking connectivity... done.
+
+c:\temp>cd sbv
+c:\temp\sbv>git annex direct
+
+ Detected a filesystem without fifo support.
+
+ Disabling ssh connection caching.
+
+ Detected a crippled filesystem.
+
+ Enabling direct mode.
+(Recording state in git...)
+
+
+c:\temp\sbv>git annex get
+get BigBinaryFile_Data_Package_2012-03-31.tar.bz2.gpg (merging origin/git-annex into git-annex...)
+(Recording state in git...)
+sent 30 bytes received 765316741 bytes 11011752.10 bytes/sec
+total size is 765223180 speedup is 1.00
+ok
+(Recording state in git...)
+
+
+c:\temp\sbv>
+
+# End of transcript or log.
+"""]]
+
+[[!meta title="window's tiny mind is confused by some long paths used by git-annex"]]
diff --git a/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_1_ce2355485f2610b6a7a79914dcd365be._comment b/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_1_ce2355485f2610b6a7a79914dcd365be._comment
new file mode 100644
index 000000000..127d0603f
--- /dev/null
+++ b/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_1_ce2355485f2610b6a7a79914dcd365be._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="edward"
+ subject="another example"
+ date="2014-12-06T21:01:03Z"
+ content="""
+I'm having the same problem:
+
+> git-annex: c:\Users\TV\annex\.git\annex\objects\566\a33\URL--quvi&chttps&c%%www.youtube.com%watch,63v,61XS-kKX9wQk0,38index,615,38list,61PLQ-uHSnFig5NCQkhJfkn8ogXFwzrP4SIf\: openTempFile: does not exist (No such file or directory)
+> failed
+> git-annex: init: 1 failed
+
+In my case the filename is slightly shorter, 154 characters, for Aaron the offending filename was 162 characters.
+
+I think the full filename that git annex is trying to write is 270 characters:
+
+> c:\Users\TV\annex\.git\annex\objects\566\a33\URL--quvi&chttps&c%%www.youtube.com%watch,63v,61XS-kKX9wQk0,38index,615,38list,61PLQ-uHSnFig5NCQkhJfkn8ogXFwzrP4SIf/URL--quvi&chttps&c%%www.youtube.com%watch,63v,61XS-kKX9wQk0,38index,615,38list,61PLQ-uHSnFig5NCQkhJfkn8ogXFwzrP4SIf
+"""]]
diff --git a/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_2_dfc398002e2ffbe0b63ce422a1e16d67._comment b/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_2_dfc398002e2ffbe0b63ce422a1e16d67._comment
new file mode 100644
index 000000000..89af53b41
--- /dev/null
+++ b/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_2_dfc398002e2ffbe0b63ce422a1e16d67._comment
@@ -0,0 +1,25 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 2"
+ date="2015-01-06T19:18:26Z"
+ content="""
+On Linux and OSX, there is a maximum filename size, typically 255 bytes. git-annex always ensures that keys it generates are a maximum of 255 bytes long, no matter the platform. But, in dir/subdir/file, each of the 3 segments of the path is allowed to be that long. The limit on the total path size on Linux is a more reasonable 4096 bytes; OSX has only 1024 bytes.
+
+I don't know what to do about Windows having such an absurdly small `MAX_PATH` compared to more modern systems.
+
+The length of just a SHA512 checksum is 128 bytes; that means SHA512 backend cannot be used on windows, at all, since the paths git-annex generates will be at least twice that long, and will easily overflow `PATH_MAX`. I've confirmed this; just adding a file with --backend=SHA512 fails with a \"No such file or directory\" error when it tries to use the path.
+
+A SHA256 is a more manageable 64 bytes long. So a typical path to such an object will end with eg \".git\annex\objects\566\a33\SHA256E--d728a4c4727febe1c28509482ae1b7b2215798218e544eed7cb7b4dc988f838b\SHA256E--d728a4c4727febe1c28509482ae1b7b2215798218e544eed7cb7b4dc988f838b\" -- 174 bytes long (or a bit longer when there are also extension and size in the key) and leaving only 86 bytes or so for `c:\path\to\repo`.
+
+Perhaps git-annex should reduce its maximum key size from 255 to 64 bytes, the same as SHA256. Then url keys would work on Windows, except for in deep paths, where git-annex cannot work at all. This would be an easy change.
+
+git-annex could also avoid using absolute paths, which it currently uses extensively for simplicity (and possiibly robustness against renames of repositories and changes of working directory?), and use relative paths instead. This would probably solve the two examples given in the bug report, and it would make git-annex work better when in a deep path in Windows. It would not make SHA512 work though; with keys that long, the relative path is still too long. (And, it's still possible to get a relative path that has so many '../../' and subdirectories etc that it overflows `PATH_MAX`. It would probably take a really crazy repository directory structure though.)
+
+The MSDN article has one very interesting bit:
+
+> The Windows API has many functions that also have Unicode versions to permit an extended-length path for a maximum total path length of 32,767 characters. This type of path is composed of components separated by backslashes, each up to the value returned in the lpMaximumComponentLength parameter of the GetVolumeInformation function (this value is commonly 255 characters). To specify an extended-length path, use the \"\\?\\" prefix. For example, \"\\?\D:\very long path\".
+
+(It seems that, when using that prefix, `/` is not converted to `\` .. I think git-annex is quite good about getting the slashes the right way round these days.)
+
+So it might be possible for git-annex to use that prefix and avoid this issue entirely. Haskell's FilePath library does understand that prefix (treats it as part of the drive). Since git-annex always uses the path to the top of the Repo when constructing the problimatic FilePaths, I might be able to just change the Repo constructor to add that prefix, and everything follow from that. I tried doing that, unfortunately this makes *git* fail, with \"fatal: relative path syntax cannot be used outside working tree\" when operating on such a repo. Cause git doesn't understand that prefix.
+"""]]
diff --git a/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_3_1d23e9760782a8d6d2ea2dd5a4c6253a._comment b/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_3_1d23e9760782a8d6d2ea2dd5a4c6253a._comment
new file mode 100644
index 000000000..153c48db2
--- /dev/null
+++ b/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_3_1d23e9760782a8d6d2ea2dd5a4c6253a._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 3"
+ date="2015-01-06T20:51:20Z"
+ content="""
+I've started a `relativepaths` branch that uses all relative paths to the git repo. After working on it for several hours, there are still 16 test suite failures (update: 10) (update: 1). The potential for uncaught breakage is much higher than I am happy with. (Amoung other problems, git-annex does call setCurrentDirectory in several places, and this utterly breaks the relative paths).
+
+Using that branch on windows, I am still unable to add files with --backend=SHA512; even relative paths don't make it short enough for such keys.
+"""]]
diff --git a/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_4_108f3e4449fc9591bcdeb490b486357f._comment b/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_4_108f3e4449fc9591bcdeb490b486357f._comment
new file mode 100644
index 000000000..3aa56f004
--- /dev/null
+++ b/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_4_108f3e4449fc9591bcdeb490b486357f._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 4"
+ date="2015-01-06T21:59:15Z"
+ content="""
+Even with relative paths, Edward's example would use a path of 253 characters, and so a slightly longer url would still break it, even with relative paths.
+
+So, I think reducing url key length needs to be done anyway, and I've done that. Which hardly closes this bug.
+"""]]
diff --git a/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_5_a1c8ac1d7884d676f05db588b2894603._comment b/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_5_a1c8ac1d7884d676f05db588b2894603._comment
new file mode 100644
index 000000000..54c29af3b
--- /dev/null
+++ b/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_5_a1c8ac1d7884d676f05db588b2894603._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 5"
+ date="2015-01-07T02:35:46Z"
+ content="""
+I've beat on the relativepaths branch some more and am probably as confident about it as I'm going to get. Will have to merge it and see what else it breaks.
+
+Also, I've documented that SHA512 and other large hashes are not recommended if one wants to interop with Windows.
+
+None of which completely fixes this bug, but short of teaching git about the magic filename prefix to make windows not be so broken, I don't see anything more I can do.
+"""]]
diff --git a/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_6_739b4fd2156de7570ec71417f41eb188._comment b/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_6_739b4fd2156de7570ec71417f41eb188._comment
new file mode 100644
index 000000000..b20fe2ab9
--- /dev/null
+++ b/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_6_739b4fd2156de7570ec71417f41eb188._comment
@@ -0,0 +1,23 @@
+[[!comment format=sh
+ username="https://www.google.com/accounts/o8/id?id=AItOawkDqgw0JLrxLH3GIpg36Mp79F_1pxZxWxU"
+ nickname="Benjamin"
+ subject="comment 6"
+ date="2015-02-04T14:56:36Z"
+ content="""
+Hi,
+
+I experienced the same problem. In my case the path to the local clone is \"C:\Users\user\Documents\dev\testplay\studyforrest\". Trying to get a file within that repo (\"c:\Users\user\Documents\dev\testplay\studyforrest\stimulus\task001\annotations>git annex get german_audio_description.csv\") results in \"couldn't find path\".
+More precise git annex says: \"git-annex: MoveFileEx \"..\\..\\..\\.git\\annex\\tmp\\SHA256E-s49358--49140697bfd54e0d384b30efb7256c246b99f8c2cd63a48d54078e7d03e26286.csv\" \"..\\..\\..\\.git\\annex\\objects\\885\\a97\\SHA256E-s49358--
+49140697bfd54e0d384b30efb7256c246b99f8c2cd63a48d54078e7d03e26286.csv\\SHA256E-s49358--49140697bfd54e0d384b30efb7256c246b99f8c2cd63a48d54078e7d03e26286.csv\": does not exist (Das System kann den angegeb
+enen Pfad nicht finden.)
+failed
+git-annex: get: 1 failed\"
+
+
+Cloning to c:\studyforrest works.
+
+Now, I wonder why, since none of the mentioned paths exceeds the limit of 260. But as git annex mentioned it seems to use that relative path \"..\\..\\..\\.git\\annex\ [...]\". May be it internally composes it to something like
+\"c:\Users\user\Documents\dev\testplay\studyforrest\stimulus\task001\annotations\..\\..\\..\\.git\\annex\ [...]\" where the part \"stimulus\task001\annotations\..\..\..\\" is actually not needed to adress the desired file. So, if that is the case may be you could give some more room by eliminating this?
+
+
+"""]]
diff --git a/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_7_c561d2eb75a2579db620bf7877c98502._comment b/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_7_c561d2eb75a2579db620bf7877c98502._comment
new file mode 100644
index 000000000..6243b9129
--- /dev/null
+++ b/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_7_c561d2eb75a2579db620bf7877c98502._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnx8kHW66N3BqmkVpgtXDlYMvr8TJ5VvfY"
+ nickname="Yaroslav"
+ subject="comment 7"
+ date="2015-02-04T15:53:48Z"
+ content="""
+It seems that is where where having no read-only key/ directory would also be of help to shorten filename paths. (as discussed in https://github.com/datalad/datalad/issues/32)
+"""]]
diff --git a/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_8_169423dd4f3292e503b285f088f6701f._comment b/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_8_169423dd4f3292e503b285f088f6701f._comment
new file mode 100644
index 000000000..c88e3b1b5
--- /dev/null
+++ b/doc/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows/comment_8_169423dd4f3292e503b285f088f6701f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkDqgw0JLrxLH3GIpg36Mp79F_1pxZxWxU"
+ nickname="Benjamin"
+ subject="comment 8"
+ date="2015-02-05T13:05:31Z"
+ content="""
+Despite all things, that may or may not be possible to do to shorten the path lengths used by git-annex, it would be very helpful to properly detect that this problem is occuring and give a reasonable error message. Since windows' \"couldn't find path\"-message doesn't tell you what's going on.
+"""]]
diff --git a/doc/bugs/__34__git_annex_metadata__34___without_a_file_name_is_hazardous.mdwn b/doc/bugs/__34__git_annex_metadata__34___without_a_file_name_is_hazardous.mdwn
new file mode 100644
index 000000000..44644c890
--- /dev/null
+++ b/doc/bugs/__34__git_annex_metadata__34___without_a_file_name_is_hazardous.mdwn
@@ -0,0 +1,26 @@
+### Please describe the problem.
+
+Accidentally leaving of the file name when invoking git annex metadata means that
+the changes are applied to all files. This is almost never what I want, and generally leads to either manual work or trying to undo the commit on the git-annex branch.
+
+### What steps will reproduce the problem?
+
+% git annex metadata -s field=value
+
+congrats, your old values of field are (kinda) gone.
+
+### What version of git-annex are you using? On what operating system?
+
+5.20141125, debian
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> agreed; [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/__34__git_annex_watch__34___adds_map.dot.mdwn b/doc/bugs/__34__git_annex_watch__34___adds_map.dot.mdwn
deleted file mode 100644
index 94c495735..000000000
--- a/doc/bugs/__34__git_annex_watch__34___adds_map.dot.mdwn
+++ /dev/null
@@ -1,23 +0,0 @@
-"git annex watch" will add the file generated by "git annex map", which is
-probably not intended. Shouldn’t this file be created in /tmp or
-.git/annex/ or somewhere else?
-
-> Indeed, so [[done]] --[[Joey]]
-
- /tmp $ cd test/
- /tmp/test $ git init
- Initialized empty Git repository in /tmp/test/.git/
- /tmp/test $ git annex init
- init ok
- (Recording state in git...)
- /tmp/test $ git annex watch
- /tmp/test $ git annex map
- map /tmp/test ok
-
- running: dot -Tx11 map.dot
-
- ok
- /tmp/test $ ls -l
- insgesamt 4
- lrwxrwxrwx 1 jojo jojo 180 Jul 15 23:36 map.dot -> .git/annex/objects/P3/76/SHA256-s208--44199582b5948512ff12cf03de0b86fa1bebf09785dba2827fe52afee0afbe3d/SHA256-s208--44199582b5948512ff12cf03de0b86fa1bebf09785dba2827fe52afee0afbe3d
-
diff --git a/doc/bugs/__34__make_test__34___fails_silently.mdwn b/doc/bugs/__34__make_test__34___fails_silently.mdwn
deleted file mode 100644
index 8632f03f5..000000000
--- a/doc/bugs/__34__make_test__34___fails_silently.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-`make test` fails silently when the test program cannot be built. This happens, for example, when attempting to compile git-annex with `QuickCheck-2.4.2`.
-
-> I've made "make test" exit nonzero if the test suite cannot be built.
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/__34__make_test__34___fails_silently/comment_1_f868e34f41d828d4571968d1ab07820a._comment b/doc/bugs/__34__make_test__34___fails_silently/comment_1_f868e34f41d828d4571968d1ab07820a._comment
deleted file mode 100644
index 00f67ad11..000000000
--- a/doc/bugs/__34__make_test__34___fails_silently/comment_1_f868e34f41d828d4571968d1ab07820a._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 1"
- date="2012-01-03T16:54:19Z"
- content="""
-The code is:
-
-<pre>
-@if ! $(GHCMAKE) -O0 test; then \
- echo \"** not running test suite\" >&2; \
-else \
-</pre>
-
-The error message from the compiler, followed by the above error message does not seem \"silent\". It does exit 0 without running the test suite if it cannot be built.
-"""]]
diff --git a/doc/bugs/__34__make_test__34___fails_silently/comment_2_fb9e8e2716b0dea15b0d4807ae7cd114._comment b/doc/bugs/__34__make_test__34___fails_silently/comment_2_fb9e8e2716b0dea15b0d4807ae7cd114._comment
deleted file mode 100644
index 3b76e3f14..000000000
--- a/doc/bugs/__34__make_test__34___fails_silently/comment_2_fb9e8e2716b0dea15b0d4807ae7cd114._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://peter-simons.myopenid.com/"
- ip="77.188.44.113"
- subject="comment 2"
- date="2012-01-03T18:09:38Z"
- content="""
-When \"make test\" fails to run any tests at all, it should not return exit code 0. This behavior is quite misleading, and it means that automated build systems are not going to detect the fact that the test suit could not be run.
-"""]]
diff --git a/doc/bugs/__34__old__34___and___34__new__34___hash_formats_are_mixed_up.mdwn b/doc/bugs/__34__old__34___and___34__new__34___hash_formats_are_mixed_up.mdwn
new file mode 100644
index 000000000..e11d79867
--- /dev/null
+++ b/doc/bugs/__34__old__34___and___34__new__34___hash_formats_are_mixed_up.mdwn
@@ -0,0 +1,31 @@
+~~~~
+$ git annex version
+git-annex version: 5.20140818-g10bf03a
+~~~~
+
+When repository was initially created, it used "old" hashing from http://git-annex.branchable.com/internals/hashing/ . After some operations, annex was upgraded to "new" format. However, symlinks are still in "old" format and dangling. "git annex fsck", "git annex repair", "git annex pre-commit" - none helps.
+
+~~~~
+$ ls -l pics
+lrwxrwxrwx 1 pfalcon pfalcon 199 Jan 22 2012 IMG_3776.JPG -> ../.git/annex/objects/KM/j6/SHA256E-s688630--5bc2e8beb7a57f6fbcd7d9321cd5283f04448ea475099dac07ae38f002208040.JPG/SHA256E-s688630--5bc2e8beb7a57f6fbcd7d9321cd5283f04448ea475099dac07ae38f002208040.JPG
+lrwxrwxrwx 1 pfalcon pfalcon 199 Jan 22 2012 renamed2.jpg -> ../.git/annex/objects/7F/z3/SHA256E-s676047--3cd28892ee54aba13e074f230709b2c3b87915ff36efd9be3ddfc603e92ecdda.JPG/SHA256E-s676047--3cd28892ee54aba13e074f230709b2c3b87915ff36efd9be3ddfc603e92ecdda.JPG
+lrwxrwxrwx 1 pfalcon pfalcon 199 Jan 22 2012 renamed.jpg -> ../.git/annex/objects/W1/vK/SHA256E-s585398--005fe0534d6cc17a3536c1817b091d00249834c338f289ec6569e9f262889251.JPG/SHA256E-s585398--005fe0534d6cc17a3536c1817b091d00249834c338f289ec6569e9f262889251.JPG
+
+$ find .git/annex/objects/
+.git/annex/objects/
+.git/annex/objects/219
+.git/annex/objects/219/741
+.git/annex/objects/219/741/SHA256E-s585398--005fe0534d6cc17a3536c1817b091d00249834c338f289ec6569e9f262889251.JPG
+.git/annex/objects/219/741/SHA256E-s585398--005fe0534d6cc17a3536c1817b091d00249834c338f289ec6569e9f262889251.JPG/SHA256E-s585398--005fe0534d6cc17a3536c1817b091d00249834c338f289ec6569e9f262889251.JPG
+.git/annex/objects/7a6
+.git/annex/objects/7a6/632
+.git/annex/objects/7a6/632/SHA256E-s688630--5bc2e8beb7a57f6fbcd7d9321cd5283f04448ea475099dac07ae38f002208040.JPG
+.git/annex/objects/7a6/632/SHA256E-s688630--5bc2e8beb7a57f6fbcd7d9321cd5283f04448ea475099dac07ae38f002208040.JPG/SHA256E-s688630--5bc2e8beb7a57f6fbcd7d9321cd5283f04448ea475099dac07ae38f002208040.JPG
+.git/annex/objects/df3
+.git/annex/objects/df3/9a8
+.git/annex/objects/df3/9a8/SHA256E-s676047--3cd28892ee54aba13e074f230709b2c3b87915ff36efd9be3ddfc603e92ecdda.JPG
+.git/annex/objects/df3/9a8/SHA256E-s676047--3cd28892ee54aba13e074f230709b2c3b87915ff36efd9be3ddfc603e92ecdda.JPG/SHA256E-s676047--3cd28892ee54aba13e074f230709b2c3b87915ff36efd9be3ddfc603e92ecdda.JPG
+~~~~
+
+> Unforunately, I cannot see through the attitude problem to a clear bug
+> report. Lacking time/energy to try to coax one out. [[done]] --[[Joey]]
diff --git a/doc/bugs/__34__old__34___and___34__new__34___hash_formats_are_mixed_up/comment_1_5ed3f7b21b007e269f5846cb2d805493._comment b/doc/bugs/__34__old__34___and___34__new__34___hash_formats_are_mixed_up/comment_1_5ed3f7b21b007e269f5846cb2d805493._comment
new file mode 100644
index 000000000..8ca81d325
--- /dev/null
+++ b/doc/bugs/__34__old__34___and___34__new__34___hash_formats_are_mixed_up/comment_1_5ed3f7b21b007e269f5846cb2d805493._comment
@@ -0,0 +1,35 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawld54zdyk6b0W4jXnssSO_j2Nn3W1uVsUE"
+ nickname="Paul"
+ subject="comment 1"
+ date="2014-08-24T20:27:08Z"
+ content="""
+Aha, so local repo is created with old hash format. But when you add remote (special rsync remote in my case), and copy --to it, it uses new hashes:
+
+~~~~
+copy 20120122 Routing doorbell/IMG_3776.JPG (checking nas-rsync...) (to nas-rsync...)
+sending incremental file list
+7a6/
+7a6/632/
+7a6/632/SHA256E-s688630--5bc2e8beb7a57f6fbcd7d9321cd5283f04448ea475099dac07ae38f002208040.JPG/
+7a6/632/SHA256E-s688630--5bc2e8beb7a57f6fbcd7d9321cd5283f04448ea475099dac07ae38f002208040.JPG/SHA256E-s688630--5bc2e8beb7a57f6fbcd7d9321cd5283f04448ea475099dac07ae38f002208040.JPG
+~~~~
+
+This explains this nonsense:
+
+~~~~
+$ git annex unused --from=nas-rsync
+unused nas-rsync (checking for unused data...) (checking master...)
+ Some annexed data on nas-rsync is not used by any files:
+ NUMBER KEY
+ 1 SHA256E-s585398--005fe0534d6cc17a3536c1817b091d00249834c338f289ec6569e9f262889251.JPG
+ 2 SHA256E-s688630--5bc2e8beb7a57f6fbcd7d9321cd5283f04448ea475099dac07ae38f002208040.JPG
+ 3 SHA256E-s676047--3cd28892ee54aba13e074f230709b2c3b87915ff36efd9be3ddfc603e92ecdda.JPG
+ (To see where data was previously used, try: git log --stat -S'KEY')
+
+ To remove unwanted data: git-annex dropunused --from nas-rsync NUMBER
+
+ok
+~~~~
+
+"""]]
diff --git a/doc/bugs/__34__old__34___and___34__new__34___hash_formats_are_mixed_up/comment_2_436d8994457517e4c6f68f572b83decc._comment b/doc/bugs/__34__old__34___and___34__new__34___hash_formats_are_mixed_up/comment_2_436d8994457517e4c6f68f572b83decc._comment
new file mode 100644
index 000000000..192d48fc7
--- /dev/null
+++ b/doc/bugs/__34__old__34___and___34__new__34___hash_formats_are_mixed_up/comment_2_436d8994457517e4c6f68f572b83decc._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawld54zdyk6b0W4jXnssSO_j2Nn3W1uVsUE"
+ nickname="Paul"
+ subject="comment 2"
+ date="2014-08-24T22:26:47Z"
+ content="""
+Ok, I see, http://git-annex.branchable.com/internals/hashing/ says that old vs new hash mess is deliberate, to make user experience better. (One might ask why one hash was replaced with another equivalent, but nobody would. Oh wait, it's a filesystem case sensitivity issue of course. But it's too secret to be mentioned on \"hashing\" page.)
+
+\"unused --from=\" issue comes and goes, don't see it now. That initial issue of completely broken symlinks happened after running testremote, then breaking it (because it should say it takes hour(s) to complete). So, many users probably won't be affected (nevermind that those who will, will essentially have data loss).
+
+Last issue I faced that somehow my local working copy gets \"bare = true\" each time I sync against remote SSH repo (which is bare of course, as remote repo should be).
+
+"""]]
diff --git a/doc/bugs/__39__Cannot_write_a_repository_there__39___on_Windows.mdwn b/doc/bugs/__39__Cannot_write_a_repository_there__39___on_Windows.mdwn
deleted file mode 100644
index 62ad4a15f..000000000
--- a/doc/bugs/__39__Cannot_write_a_repository_there__39___on_Windows.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-### Please describe the problem.
-When I try to create the repository with the suggested location `C:\Users\bbigras\Desktop\annex\` I get "Cannot write a repository there". I didn't see the program output any errors on the console. [screen capture](http://imgur.com/7ZUqqVQ)
-
-It works if I change the path to `C:\Users\bbigras\annex\`.
-
-### What steps will reproduce the problem?
-* run `git annex webapp`
-* click `Make Repository`
-
-### What version of git-annex are you using? On what operating system?
-[[!format sh """
-git-annex version: 5.20131213-g2893b22
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
-remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
-
-git version 1.8.4.msysgit.0
-"""]]
-
-Windows 7 64-bit
-
-### Please provide any additional information below.
-
-[[!format sh """
-Launching web browser on file://C:\Users\bbigras\AppData\Local\Temp\webapp9924.html
-"""]]
-
-> It checks if the directory can be written to, and it seems that for some
-> reason Windows is preventing you from writing to your Desktop. That seems
-> really weird to me (and I have not seen that behavior). But, I can easily
-> make it check if that's the case, and fall back to the other path, so
-> have done so. [[done]] --[[Joey]]
diff --git a/doc/bugs/__39__Internal_Server_Error__39___when_creating_repo_on_other_drive_than_C:_on_Windows.mdwn b/doc/bugs/__39__Internal_Server_Error__39___when_creating_repo_on_other_drive_than_C:_on_Windows.mdwn
deleted file mode 100644
index b6f8e3ca4..000000000
--- a/doc/bugs/__39__Internal_Server_Error__39___when_creating_repo_on_other_drive_than_C:_on_Windows.mdwn
+++ /dev/null
@@ -1,36 +0,0 @@
-### Please describe the problem.
-When I try to create an annex on my `D:\` drive I get the following error:
-
-[[!format sh """
-Internal Server Error
-git [Param "config",Param "annex.uuid",Param "d2277948-4689-41d8-bd55-15c634f38cee"] failed
-"""]]
-
-[screen capture](http://imgur.com/w7uPLDp)
-
-
-### What steps will reproduce the problem?
-* run `git annex webapp`
-* create annex on `d:\annex`
-
-### What version of git-annex are you using? On what operating system?
-[[!format sh """
-git-annex version: 5.20131213-g2893b22
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
-remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
-
-git version 1.8.4.msysgit.0
-"""]]
-
-Windows 7 64-bit
-
-### Please provide any additional information below.
-[[!format sh """
-Launching web browser on file://C:\Users\bbigras\AppData\Local\Temp\webapp9400.html
-fatal: Not a git repository: '/annex/.git'
-error: could not lock config file /annex/.git/config: No such file or directory
-"""]]
-
-> I've fixed this! [[done]] Yay!! Get the fix from the hourly windows autobuilder.
-> --[[Joey]]
diff --git a/doc/bugs/__39__Internal_Server_Error__39___when_creating_repo_on_other_drive_than_C:_on_Windows/comment_1_ea3b2c0e3bdfb50ac0dce10ba1b6339f._comment b/doc/bugs/__39__Internal_Server_Error__39___when_creating_repo_on_other_drive_than_C:_on_Windows/comment_1_ea3b2c0e3bdfb50ac0dce10ba1b6339f._comment
deleted file mode 100644
index 9b476c598..000000000
--- a/doc/bugs/__39__Internal_Server_Error__39___when_creating_repo_on_other_drive_than_C:_on_Windows/comment_1_ea3b2c0e3bdfb50ac0dce10ba1b6339f._comment
+++ /dev/null
@@ -1,24 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.227"
- subject="comment 1"
- date="2013-12-24T21:36:04Z"
- content="""
-I can reproduce this bug (using drive E:)
-
-It's caused by [[!commit e93206e2945c476c3305a73e41113efd781268cd]], which forced msysgit to use unix-style paths to repositories.
-
-Unless I can find a way to use dos-style paths with msysgit 1.8.4 (or it's fixed in a newer version), I can't pass it drive letters, so it tries to use the default/current drive instead of the one where the repository is really located.
-
-My preferences to fix this:
-
-1. Try a newer msysgit, and perhaps it's fixed there to support --git-dir with a DOS-style path. (For example, in C:\FOO, see if this command work: `git init; git --git-dir=C:\FOO\.git --work-tree=C:\FOO status`)
-2. File a bug on msysgit, get it fixed. 1.8.3.msysgit.0 *did* support that.
-3. Make git-annex not pass --git-dir and --work-tree in Windows. But this would be quite ugly; while normally it is operating in the repository in the CWD, sometimes it's not.
-
-Workaround: if you're at the prompt, this works, because it changes the current drive before using git-annex, and so the unix-style paths just work:
-
- E:
- cd annex
- git annex init
-"""]]
diff --git a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content.mdwn b/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content.mdwn
deleted file mode 100644
index 6dcb1ec6b..000000000
--- a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content.mdwn
+++ /dev/null
@@ -1,24 +0,0 @@
-What steps will reproduce the problem?
-
-running the assistant on my setup, which is a central 'client' repo, and two 'backup' repos on a USB drive and an ssh connection to another server. Both of those backup repos are non-bare, and I occasionally manually run 'git annex sync' on them to keep them up to date. I have 'numcopies' set to 2.
-
-
-What is the expected output? What do you see instead?
-
-I expect everything to be copied to the 'backup' repos and content in the 'archive' subdirectories of the 'client' repo to be dropped.
-
-What happened instead: This morning, I started up the assistant without the USB drive present. I added one file to my client repo. The assistant began copying it to the SSH backup repo. I then plugged in the USB drive, and it began copying it to the USB repo; however, it *also* queued up large amounts of content in 'archive' subdirectories and started copying it down onto my client repo, which is unacceptable because there is not actually enough disk space on the client machine to hold everything in the 'archive' subdirectories! I stopped the assistant and started it up again. It started doing the same thing (queueing up archive content to transfer to client), and in addition started dropping content from my USB drive. This seems very similar to the bug in the previous version, where the globbing was broken. It's acting as if my usb remote preferred no content at all, and it transfers everything away from it and drops it -- and at the same time, brings in content which is not supposed to be there on my client machine. Strangely it's not doing the same thing on the ssh remote -- the ssh remote is fine. No anomalies there -- it has not been trying to drop content from there.
-
-This is just happening this morning -- I compiled 4.20130227 last night and ran the assistant and it behaved correctly, with no bugs at all. Now when I run it, it's going crazy.
-
-What version of git-annex are you using? On what operating system?
-
-4.20130227 on OS X.
-
-
-Please provide any additional information below.
-
-One thing that would be incredibly helpful with the kinds of bugs I've seen in the assistant is if the daemon.log contained info about *why* it is dropping or transferring content. "transferring content because there was only 1 copy and we need to fulfill numcopies" "transferring content because it matches such-and-such a preferred content expresson" "dropping content because it does not match this preferred content expression" -- that would remove a lot of mystery about the way the assistant is working.
-
-> The several bugs mentioned here seem to be fixed, so closing this report.
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_1_56f9cd5cc2e089b32cb076dc2e2a8ca5._comment b/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_1_56f9cd5cc2e089b32cb076dc2e2a8ca5._comment
deleted file mode 100644
index cf309b8b3..000000000
--- a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_1_56f9cd5cc2e089b32cb076dc2e2a8ca5._comment
+++ /dev/null
@@ -1,22 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-03-01T19:59:23Z"
- content="""
-I've added some debug info to the log for transfers and drops. You have to start the assistant with the --debug flag, then you'll get stuff like:
-
-<pre>
-[2013-03-01 15:23:10 JEST] Committer: queued Upload UUID \"a0cd7cb6-57ee-4551-955f-aa77738135cc\" myfile : newly added file
-[2013-03-01 15:25:00 JEST] Watcher: queued Download UUID \"a0cd7cb6-57ee-4551-955f-aa77738135cc\" ./foo : new or renamed file wanted
-[2013-03-01 15:54:00 JEST] Watcher: dropped ./archive/foo (from: here) (copies now: 1): file renamed
-</pre>
-
-It would take more work to show the preferred content expressions that caused the transfer or drop, but this is simple to determine:
-
-* for Uploads it should always be the preferred content expression of the remote being uploaded to
-* for Downloads it is always the preferred content expression of the local repository
-* for drops it is always the preferred content expression of the repository it is dropped from
-
-Have not managed to reproduce problem yet.
-"""]]
diff --git a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_2_21c0f7f328cb51080fbd97e086c47a30._comment b/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_2_21c0f7f328cb51080fbd97e086c47a30._comment
deleted file mode 100644
index 5eb511b65..000000000
--- a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_2_21c0f7f328cb51080fbd97e086c47a30._comment
+++ /dev/null
@@ -1,37 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="99.54.57.201"
- subject="comment 2"
- date="2013-03-03T18:44:35Z"
- content="""
-I rebuilt and ran with --debug, and started up git annex. It behaved itself.
-
-I tried restarting it, unplugging and plugging back in my USB drive to see if it provoked any problems -- none.
-
-I decided to try adding something. I added a music video to my Movies/Music directory. It uploaded it to my ssh remote but not to the USB drive and, bizarrely, when I use \"git annex whereis\" it doesn't show it as existing *anywhere*:
-
- annex$ git annex whereis Movies/Music/Tanlines\ -\ All\ Of\ Me.flv
- annex$
-
-It does in fact exist in all three repos! The link is there:
-
-annex$ ls -l Movies/Music/Tanlines\ -\ All\ Of\ Me.flv
-lrwxr-xr-x 1 ed staff 206 Mar 3 13:18 Movies/Music/Tanlines - All Of Me.flv -> ../../.git/annex/objects/0k/j6/SHA256E-s37822147--c9df1d6c9f6d2d72e039de9705ea4673160da32eb0cc9ea87e65003506d9297d.flv/SHA256E-s37822147
-
-the object is there!
-
-annex$ ls -l .git/annex/objects/0k/j6/SHA256E-s37822147--c9df1d6c9f6d2d72e039de9705ea4673160da32eb0cc9ea87e65003506d9297d.flv/SHA256E-s37822147--c9df1d6c9f6d2d72e039de9705ea4673160da32eb0cc9ea87e65003506d9297d.flv
--r--r--r-- 1 ed staff 37822147 Mar 3 13:17 .git/annex/objects/0k/j6/SHA256E-s37822147--c9df1d6c9f6d2d72e039de9705ea4673160da32eb0cc9ea87e65003506d9297d.flv/SHA256E-s37822147--c9df1d6c9f6d2d72e039de9705ea4673160da32eb0cc9ea87e65003506d9297d.flv
-
-The corresponding object also exists in the .git/annex/objects directory of the USB remote and the ssh remote.
-
-here's a pastebin of the daemon.log: http://pastebin.com/BGRBQ6Rx
-
-Shut down the daemon to see if that changed anything; nope. \"Whereis\" still comes up blank. Tried a git annex fsck --fast to see if that changed anything; nope. \"Whereis\" still comes up blank.
-
-Any ideas? Is the log revealing at all?
-
-
-
-
-"""]]
diff --git a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_3_3287b2f25f3b5ae4c27f4748694563ee._comment b/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_3_3287b2f25f3b5ae4c27f4748694563ee._comment
deleted file mode 100644
index e108052d7..000000000
--- a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_3_3287b2f25f3b5ae4c27f4748694563ee._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-03-03T18:53:23Z"
- content="""
-Are you sure the file in question is checked into git? Because git-annex ignores symlinks that are not checked into git.
-"""]]
diff --git a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_4_e515eca68a70d40c522805d7e0d7c0e6._comment b/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_4_e515eca68a70d40c522805d7e0d7c0e6._comment
deleted file mode 100644
index 4a533fc92..000000000
--- a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_4_e515eca68a70d40c522805d7e0d7c0e6._comment
+++ /dev/null
@@ -1,24 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="99.54.57.201"
- subject="comment 4"
- date="2013-03-03T18:58:42Z"
- content="""
-Just to see what happened, I re-added that same file in another directory manually (not with the assistant).
-
-git annex whereis instantly showed that it was in all the other repositories.
-
-I finally thought to try a \"git status\" -- it showed that with for the original copy of this I added, the actual symlink was never checked into git.
-
- annex$ git status
- # On branch master
- # Untracked files:
- # (use \"git add <file>...\" to include in what will be committed)
- #
- # Movies/Music/Tanlines - All Of Me.flv
- nothing added to commit but untracked files present (use \"git add\" to track)
- annex$
-
-This is probably all unrelated to the original topic of the bug -- I am not seeing the \"client repo starts pulling in archive content, dropping it from backup remote\" issue anymore.
-
-"""]]
diff --git a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_5_b27f4c103dda050b6e9cf03ea3157abc._comment b/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_5_b27f4c103dda050b6e9cf03ea3157abc._comment
deleted file mode 100644
index 434bcb1dd..000000000
--- a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_5_b27f4c103dda050b6e9cf03ea3157abc._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 5"
- date="2013-03-03T19:42:19Z"
- content="""
-A symlink not added to git could happen with the assistant for various reasons. For example, if the assistant was shut down before it got a chance to stage a newly added file. The assistant detects such symlinks when started up and will add them then.
-
-Back to the original bug report..
-"""]]
diff --git a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_6_2cc7083dab944705bf91fc00319b75e6._comment b/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_6_2cc7083dab944705bf91fc00319b75e6._comment
deleted file mode 100644
index 9f110d30d..000000000
--- a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_6_2cc7083dab944705bf91fc00319b75e6._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="99.54.57.201"
- subject="comment 6"
- date="2013-03-04T00:20:25Z"
- content="""
-Since I can't reproduce the \"copy archived content to the client repo then drop it from the backup repo\" anymore, I guess we can close. If I notice anything like that happening again I have the --debug flag available to investigate and open a new bug report.
-
-"""]]
diff --git a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_7_1175f9be789d4c1907f0be98e435bd2f._comment b/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_7_1175f9be789d4c1907f0be98e435bd2f._comment
deleted file mode 100644
index 1f11f8bed..000000000
--- a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_7_1175f9be789d4c1907f0be98e435bd2f._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 7"
- date="2013-03-04T00:57:38Z"
- content="""
-With the new Preferences page I added to the webapp today you can also enable debugging while the assistant is running if it starts to misbehave.
-
-However, I'm in no hurry to close this bug just yet.
-"""]]
diff --git a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_8_78e6164ef67a9560a3a9ead1f7a72473._comment b/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_8_78e6164ef67a9560a3a9ead1f7a72473._comment
deleted file mode 100644
index c49cbbeef..000000000
--- a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_8_78e6164ef67a9560a3a9ead1f7a72473._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="173.162.44.162"
- subject="comment 8"
- date="2013-03-08T14:46:55Z"
- content="""
-I've not seen this kind of strange behavior happen again so far.
-
-But I have got another example of a file which I added to git-annex via the assistant not having its symlink added to git. Again, the content of the file is in git-annex and was even correctly transferred to a couple of remotes, but the symlink is still unstaged.
-
-I tried restarting the assistant to see if that would fix it but that didn't change anything.
-
-I imagine the symlink will be fixed during a daily scan, tomorrow maybe? Is it problematic for the symlink not to be checked into git for a day? Is this worth a bug report or is this really harmless behavior?
-
-"""]]
diff --git a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_9_1d578fd13022dcd6382b415a7f6e097a._comment b/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_9_1d578fd13022dcd6382b415a7f6e097a._comment
deleted file mode 100644
index 9c2cd3c75..000000000
--- a/doc/bugs/__39__client__39___repo_starts_pulling_in___39__archive__39___content/comment_9_1d578fd13022dcd6382b415a7f6e097a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 9"
- date="2013-03-18T15:45:19Z"
- content="""
-There turned out to be a bug specific to OSX that prevented symlinks being checked into git. The daily sanity check did eventually add them. I fixed this bug yesterday.
-"""]]
diff --git a/doc/bugs/__39__git_annex_get__39___returns_success_when_file_not_found.mdwn b/doc/bugs/__39__git_annex_get__39___returns_success_when_file_not_found.mdwn
new file mode 100644
index 000000000..93f2a8fd9
--- /dev/null
+++ b/doc/bugs/__39__git_annex_get__39___returns_success_when_file_not_found.mdwn
@@ -0,0 +1,30 @@
+### Please describe the problem.
+When attempting to 'git annex get' a file that does not exist in the git repository, git-annex correctly reports "not found". But it still returns exit code 0, incorrectly indicating success. This is problematic for scripting.
+
+### What steps will reproduce the problem?
+See transcript
+
+### What version of git-annex are you using? On what operating system?
+git-annex 5.20140517.4 as supplied by 'git-annex' aptitude package on Ubuntu 12.04.4 LTS (32-bit)
+
+### Please provide any additional information below.
+
+[[!format sh """
+
+henry@commsbox:~/work/tmp$ git init test
+Initialized empty Git repository in /home/henry/work/tmp/test/.git/
+henry@commsbox:~/work/tmp$ cd test
+henry@commsbox:~/work/tmp/test$ git annex init
+init ok
+(Recording state in git...)
+henry@commsbox:~/work/tmp/test$ git annex get nonexistent.file
+git-annex: nonexistent.file not found
+henry@commsbox:~/work/tmp/test$ echo $?
+0
+
+
+"""]]
+
+> Ok, I can find no reason why it was implemented as a warning in
+> 5f3661238de9f31e6fed0be74fca9d5f1659278c in the bug report associated
+> with that commit. So, promoted to error. [[done]] --[[Joey]]
diff --git a/doc/bugs/__40__assistant__41___dependency_on_ssh-askpass_-_not_installed_automatically_on_xubuntu.mdwn b/doc/bugs/__40__assistant__41___dependency_on_ssh-askpass_-_not_installed_automatically_on_xubuntu.mdwn
index 7968d32cc..68ad05809 100644
--- a/doc/bugs/__40__assistant__41___dependency_on_ssh-askpass_-_not_installed_automatically_on_xubuntu.mdwn
+++ b/doc/bugs/__40__assistant__41___dependency_on_ssh-askpass_-_not_installed_automatically_on_xubuntu.mdwn
@@ -20,3 +20,7 @@ Also if I run "git-annex webapp" from the terminal, this doesn't happen because
# End of transcript or log.
"""]]
+
+> [[fixed|done]]; the assistant no longer recommends ssh-askpass, it does
+> its own ssh password prompting and is its own ssh password agent.
+> --[[Joey]]
diff --git a/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__.mdwn b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__.mdwn
new file mode 100644
index 000000000..57a8b9756
--- /dev/null
+++ b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__.mdwn
@@ -0,0 +1,20 @@
+### Please describe the problem.
+Android 5.0 (apparently) requires PIE executables. [You get "error: only position independent executables (PIE) are supported.")
+
+### What steps will reproduce the problem?
+Trying to start git annex (or the webapp) on android 5.0
+
+### What version of git-annex are you using? On what operating system?
+Currently nightly on Android 5.0 (Nexus 5)
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_10_2e434e142a0d8b7ad27c00836043e261._comment b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_10_2e434e142a0d8b7ad27c00836043e261._comment
new file mode 100644
index 000000000..01fdc9b4a
--- /dev/null
+++ b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_10_2e434e142a0d8b7ad27c00836043e261._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 10"
+ date="2015-01-07T02:41:21Z"
+ content="""
+I really want to know if I managed to get git-annex linked PIE before proceeding with furher yak shaving on getting busybox, etc built PIE.
+
+If you can use adb or another terminal, see if you can run /data/data/ga.androidterm/lib/lib.git-annex.so and if it prints git-annex's usage message.
+"""]]
diff --git a/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_11_d8d5a0c61320b583dc1c42e875173bc3._comment b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_11_d8d5a0c61320b583dc1c42e875173bc3._comment
new file mode 100644
index 000000000..a76fd7869
--- /dev/null
+++ b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_11_d8d5a0c61320b583dc1c42e875173bc3._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="etset"
+ subject="git-annex is correctly linked"
+ date="2015-01-07T14:30:38Z"
+ content="""
+I tested the executable you mention, and indeed, the git-annex help/list of commands appears. I also tested every other executable in the folder, and most of them display the PIE error message.
+"""]]
diff --git a/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_12_feeb65a0cb3273b605061ae3d3b8ff92._comment b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_12_feeb65a0cb3273b605061ae3d3b8ff92._comment
new file mode 100644
index 000000000..6bf56ddea
--- /dev/null
+++ b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_12_feeb65a0cb3273b605061ae3d3b8ff92._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 12"
+ date="2015-01-07T20:39:27Z"
+ content="""
+After some work, all binaries are now built PIE. Further testing appreciated.
+"""]]
diff --git a/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_13_bec0fb96b4b26382c20511a3c9ed537c._comment b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_13_bec0fb96b4b26382c20511a3c9ed537c._comment
new file mode 100644
index 000000000..878a6b376
--- /dev/null
+++ b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_13_bec0fb96b4b26382c20511a3c9ed537c._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="etset"
+ subject="Seems to be fixed"
+ date="2015-01-07T22:14:57Z"
+ content="""
+I didn't have an opportunity to do a sync with it yet, but the main problem seems to be gone with this last build: it now successfully opens and shows the assistant web interface. Thanks a lot! :D
+"""]]
diff --git a/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_14_fd30c9f9c3713728fb910b310397ba32._comment b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_14_fd30c9f9c3713728fb910b310397ba32._comment
new file mode 100644
index 000000000..de92a09ee
--- /dev/null
+++ b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_14_fd30c9f9c3713728fb910b310397ba32._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="ztzg"
+ subject="Build 5.20150107-g0e8cf92 seems to work"
+ date="2015-01-12T17:53:07Z"
+ content="""
+Hi Joey, everybody,
+
+I was successful in syncing a repository (twice, and including contents) using version 5.20150107-g0e8cf92.
+The environment is: Nexus 7 (2013), Android 5.0.1, not rooted.
+
+Note, however, that this version spews a lot of bionic warnings (I'm using
+git-annex from the terminal):
+
+![Warnings](http://dd.crosstwine.com/tmp/git-annex-bionic-warnings.png)
+
+Probably hamless, but I thought I'd mention them.
+"""]]
diff --git a/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_15_82446751b835e95832d4aefd7805cd1f._comment b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_15_82446751b835e95832d4aefd7805cd1f._comment
new file mode 100644
index 000000000..c86607ef8
--- /dev/null
+++ b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_15_82446751b835e95832d4aefd7805cd1f._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="ztzg"
+ subject="comment 15"
+ date="2015-01-12T17:56:20Z"
+ content="""
+Oh, and many thanks!
+"""]]
diff --git a/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_1_526c86345ab82e4344c6b50bc00f2437._comment b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_1_526c86345ab82e4344c6b50bc00f2437._comment
new file mode 100644
index 000000000..a98dd2266
--- /dev/null
+++ b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_1_526c86345ab82e4344c6b50bc00f2437._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="etset"
+ subject="comment 1"
+ date="2014-12-03T09:42:01Z"
+ content="""
+git-annex also stopped working for me after upgrading to Android 5 in my Nexus 7 (2012). Opening it shows the above error (\"error: only position independent executables (PIE) are supported.\") in the terminal, and that's it.
+"""]]
diff --git a/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_2_43bb5bb481f54764d355dfac536daba6._comment b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_2_43bb5bb481f54764d355dfac536daba6._comment
new file mode 100644
index 000000000..cb171e604
--- /dev/null
+++ b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_2_43bb5bb481f54764d355dfac536daba6._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="ztzg"
+ subject="+1"
+ date="2014-12-19T07:39:20Z"
+ content="""
+Same here. Nexus 7 (2013), Android 5.0.1. It looks like non-PIE executables are not coming back.
+"""]]
diff --git a/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_3_3c37c32fe851f2a8cd854ccdd64b4453._comment b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_3_3c37c32fe851f2a8cd854ccdd64b4453._comment
new file mode 100644
index 000000000..5509e8668
--- /dev/null
+++ b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_3_3c37c32fe851f2a8cd854ccdd64b4453._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkev8_Er652-NMvfEpn3r5VwulP5phjNuI"
+ nickname="jerome"
+ subject="it need to be built with -fPIE -pie."
+ date="2014-12-30T10:40:11Z"
+ content="""
+https://code.google.com/p/android-developer-preview/issues/detail?id=888
+"""]]
diff --git a/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_4_35a4da019f17c7979f220aba04b6b80a._comment b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_4_35a4da019f17c7979f220aba04b6b80a._comment
new file mode 100644
index 000000000..23cde1d17
--- /dev/null
+++ b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_4_35a4da019f17c7979f220aba04b6b80a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2015-01-05T16:27:20Z"
+ content="""
+I have added a 5.0 build that is built with -fPIE -pie. I have not tested
+this build yet so look forward to your feedback.
+"""]]
diff --git a/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_5_6b7da5bd28e8f9463b141ffdf2b60011._comment b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_5_6b7da5bd28e8f9463b141ffdf2b60011._comment
new file mode 100644
index 000000000..ebfab6f18
--- /dev/null
+++ b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_5_6b7da5bd28e8f9463b141ffdf2b60011._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="gio"
+ subject="comment 5"
+ date="2015-01-06T10:07:50Z"
+ content="""
+With the new build, it still complains about the executable not being PIE.
+"""]]
diff --git a/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_6_105c4a78e10fd74f2775ec01be6a3324._comment b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_6_105c4a78e10fd74f2775ec01be6a3324._comment
new file mode 100644
index 000000000..45fe8a4ea
--- /dev/null
+++ b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_6_105c4a78e10fd74f2775ec01be6a3324._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="etset"
+ subject="Same for me"
+ date="2015-01-06T12:45:25Z"
+ content="""
+I confirm that the new build still doesn't work, unfortunately.
+"""]]
diff --git a/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_7_c9104ad6d9cfec93f561b9cd514b6f48._comment b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_7_c9104ad6d9cfec93f561b9cd514b6f48._comment
new file mode 100644
index 000000000..3d4f7e230
--- /dev/null
+++ b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_7_c9104ad6d9cfec93f561b9cd514b6f48._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 7"
+ date="2015-01-06T17:43:45Z"
+ content="""
+I verified with `eu-readelf --file-header` that the git-annex binary is DYN; ie linked PIE.
+
+It might be that I also need to tell the C compiler to build it with PIE options. I have now updated the build to include that. Please test the new build.
+
+It occurs to me that the problem might be not git-annex, but one of the other binaries, like busybox. Does the android app install to the point that there is a working terminal app with a shell?
+
+It also seems possible that the entire haskell library stack might need to be built with PIE options. If so, that will be a massive pain; I'd need an entire separate autobuilder instance.
+"""]]
diff --git a/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_8_e628cc5365b1268450f0245b362266cc._comment b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_8_e628cc5365b1268450f0245b362266cc._comment
new file mode 100644
index 000000000..ad25a2694
--- /dev/null
+++ b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_8_e628cc5365b1268450f0245b362266cc._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="etset"
+ subject="Still not working"
+ date="2015-01-06T22:48:18Z"
+ content="""
+The terminal opens, showing the error message at start and at every new opened tab, without a working shell ever appearing.
+"""]]
diff --git a/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_9_0c8b65e117ffb3f00c57c4a420313c05._comment b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_9_0c8b65e117ffb3f00c57c4a420313c05._comment
new file mode 100644
index 000000000..7b14e7328
--- /dev/null
+++ b/doc/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/comment_9_0c8b65e117ffb3f00c57c4a420313c05._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 9"
+ date="2015-01-07T02:37:25Z"
+ content="""
+Then it's busybox (and git, and...) that's the problem.
+"""]]
diff --git a/doc/bugs/__91__Android__93_____34__Make_Camera_Repository__34___button_goes_to_blank_page.mdwn b/doc/bugs/__91__Android__93_____34__Make_Camera_Repository__34___button_goes_to_blank_page.mdwn
new file mode 100644
index 000000000..93765a2c5
--- /dev/null
+++ b/doc/bugs/__91__Android__93_____34__Make_Camera_Repository__34___button_goes_to_blank_page.mdwn
@@ -0,0 +1,17 @@
+### Please describe the problem.
+
+When first installing the Android app, it opens the browser to the "Welcome to git-annex!" page. There is a big button to "Make Camera Repository". I click it, and am brought to a completely blank page. If I re-open the web app, it does appear to have created the DCIM repository (it shows in the repository list), but should probably show something (a confirmation, at least?) on that page.
+
+### What steps will reproduce the problem?
+
+1. Install the android app
+2. Run it
+3. Click the "Make Camera Repository" button
+
+### What version of git-annex are you using? On what operating system?
+
+Current (2014-11-14) Android 4.3/4.4 build on a non-rooted Moto X. I don't see a way to find version info about the Android app itself, but the terminal output for "version" says it's running git-annex version 5.20141104-gcaafd06
+
+### Please provide any additional information below.
+
+
diff --git a/doc/bugs/__91__Installation__93___There_is_no_available_version_of_quickcheck_that_satisfies___62____61__2.1.mdwn b/doc/bugs/__91__Installation__93___There_is_no_available_version_of_quickcheck_that_satisfies___62____61__2.1.mdwn
deleted file mode 100644
index a6e2423a8..000000000
--- a/doc/bugs/__91__Installation__93___There_is_no_available_version_of_quickcheck_that_satisfies___62____61__2.1.mdwn
+++ /dev/null
@@ -1,40 +0,0 @@
-Hi,
-
-I just wanted to install git-annex via cabal, as described in the install document. More specifically, I did this on my Ubuntu Lucid box:
-
- andreas@antares:~$ sudo aptitude install cabal-install
- [...]
- andreas@antares:~$ cabal update
- andreas@antares:~$ cabal install quickcheck --bindir=$HOME/bin
- andreas@antares:~$ cabal install git-annex -v --bindir=$HOME/bin
-
-However, I got this error:
-
- /usr/bin/ghc --numeric-version
- looking for package tool: ghc-pkg near compiler in /usr/bin
- found package tool in /usr/bin/ghc-pkg
- /usr/bin/ghc-pkg --version
- /usr/bin/ghc --supported-languages
- Reading installed packages...
- /usr/bin/ghc-pkg dump --global
- /usr/bin/ghc-pkg dump --user
- Reading available packages...
- Resolving dependencies...
- selecting
- cabal: cannot configure git-annex-3.20120113. It requires quickcheck >=2.1
- There is no available version of quickcheck that satisfies >=2.1
-
-which is really strange, because quickcheck 2.4.2 is installed:
-
- andreas@antares:~$ ls -a .cabal/lib/
- . .. QuickCheck-2.4.2
-
-Any help is greatly appreciated :)
-Andreas.
-
-> QuickCheck has to be spelled in mixed case. --[[Joey]]
-
-Sorry to disagree, this doesn't fix my problem. cabal still complains that no version >= 2.1 is available, even though 2.4.2 is installed. This problem already occurred before I explicitly installed QuickCheck. According to [[install]], the `cabal install git-annex -v --bindir=$HOME/bin` should already take care of the dependencies.
-
->> You need to `cabal update` to get the fixed version of git-annex which
->> spells QuickCheck correctly. [[done]] --[[Joey]]
diff --git a/doc/bugs/__91__webapp__93___pause_syncing_with_specific_repository.mdwn b/doc/bugs/__91__webapp__93___pause_syncing_with_specific_repository.mdwn
deleted file mode 100644
index dca16e4d3..000000000
--- a/doc/bugs/__91__webapp__93___pause_syncing_with_specific_repository.mdwn
+++ /dev/null
@@ -1,8 +0,0 @@
-[Due to some stupid issue on my and AT&T's part] one of my remote repositories is currently unreachable. I would like to tell the webapp/assistant to not attempt to sync with it, or, at least, modify this error message to be more specific (by telling me which repository is unreachable).
-
-In a red bubble it says: "Synced with rose 60justin"
-
-That verbage is the same if they all succeed. The only difference is the red instead of green. Would be nice to know exactly which machine to kick (if I didn't already know, eg I was syncing only with repositories not under my control).
-
-> Fixed alert display. Webapp has allowed pausing syncing with a repository
-> for a while. [[done]] --[[Joey]]
diff --git a/doc/bugs/__91__wishlistAndroid:_bundle_an_ssh_server___40__dropbear__63____41___and_add_an_option_to_start_it_easily_with_the_terminal_app_menu.mdwn b/doc/bugs/__91__wishlistAndroid:_bundle_an_ssh_server___40__dropbear__63____41___and_add_an_option_to_start_it_easily_with_the_terminal_app_menu.mdwn
deleted file mode 100644
index 97b72c49c..000000000
--- a/doc/bugs/__91__wishlistAndroid:_bundle_an_ssh_server___40__dropbear__63____41___and_add_an_option_to_start_it_easily_with_the_terminal_app_menu.mdwn
+++ /dev/null
@@ -1,23 +0,0 @@
-### Please describe the problem.
-
-quite often is desired to fetch/navigate through the git annex installation under git annex user, e.g. to fetch the log to be provided here for the "additional information".
-Given already big size of the app bundling some lightweight ssh server should not be a major size hit, but would ease troubleshooting and bug reporting
-
-### What steps will reproduce the problem?
-
-
-### What version of git-annex are you using? On what operating system?
-
-Android from Nov 18
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> Not a direction I want to go in with the Android app. [[done]] --[[Joey]]
diff --git a/doc/bugs/__91__wishlistAndroid:_bundle_an_ssh_server___40__dropbear__63____41___and_add_an_option_to_start_it_easily_with_the_terminal_app_menu/comment_1_9bb53c45d685b368c7ba1758885f2874._comment b/doc/bugs/__91__wishlistAndroid:_bundle_an_ssh_server___40__dropbear__63____41___and_add_an_option_to_start_it_easily_with_the_terminal_app_menu/comment_1_9bb53c45d685b368c7ba1758885f2874._comment
deleted file mode 100644
index 36440eac5..000000000
--- a/doc/bugs/__91__wishlistAndroid:_bundle_an_ssh_server___40__dropbear__63____41___and_add_an_option_to_start_it_easily_with_the_terminal_app_menu/comment_1_9bb53c45d685b368c7ba1758885f2874._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.64"
- subject="comment 1"
- date="2013-11-26T16:09:19Z"
- content="""
-This was previously suggested in the forum: [[forum/Suggestion:_Put_ssh_server_back_into_android_version]]
-
-As said there, I feel that `adb` is a better option in these situations. Of course, the git-annex bundle already has a ssh client, so you can rsync files from it to other ssh servers too.
-
-Also, the bundle is too big, I don't want to make it any bigger.
-"""]]
diff --git a/doc/bugs/__91__wishlistAndroid:_bundle_an_ssh_server___40__dropbear__63____41___and_add_an_option_to_start_it_easily_with_the_terminal_app_menu/comment_2_251311a04f1a610e54ebe8e9b92de72e._comment b/doc/bugs/__91__wishlistAndroid:_bundle_an_ssh_server___40__dropbear__63____41___and_add_an_option_to_start_it_easily_with_the_terminal_app_menu/comment_2_251311a04f1a610e54ebe8e9b92de72e._comment
deleted file mode 100644
index 48707e82b..000000000
--- a/doc/bugs/__91__wishlistAndroid:_bundle_an_ssh_server___40__dropbear__63____41___and_add_an_option_to_start_it_easily_with_the_terminal_app_menu/comment_2_251311a04f1a610e54ebe8e9b92de72e._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://yarikoptic.myopenid.com/"
- nickname="site-myopenid"
- subject="comment 2"
- date="2013-11-27T04:30:53Z"
- content="""
-we just shrinked the bundle by 60MB so there could be some space for sshd.
-
-adb might indeed be more powerful but would require usb connection (right?) -- at times not convenient
-
-syncing via ssh from phone: that is what I was trying to avoid -- working in the shell on the phone -- it is possible but a bit \"inconvenient\"
-sshd could be ran on any unprivileged port while letting the user who starts it know the IP and the port, thus making it easy to connect.
-"""]]
diff --git a/doc/bugs/__91__wishlistAndroid:_bundle_an_ssh_server___40__dropbear__63____41___and_add_an_option_to_start_it_easily_with_the_terminal_app_menu/comment_3_83ac87a01639776a6e519af226bd84d5._comment b/doc/bugs/__91__wishlistAndroid:_bundle_an_ssh_server___40__dropbear__63____41___and_add_an_option_to_start_it_easily_with_the_terminal_app_menu/comment_3_83ac87a01639776a6e519af226bd84d5._comment
deleted file mode 100644
index c6cccfeb3..000000000
--- a/doc/bugs/__91__wishlistAndroid:_bundle_an_ssh_server___40__dropbear__63____41___and_add_an_option_to_start_it_easily_with_the_terminal_app_menu/comment_3_83ac87a01639776a6e519af226bd84d5._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnZEanlyzay_QlEAL0CWpyZcRTyN7vay8U"
- nickname="Carlo"
- subject="comment 3"
- date="2013-11-28T15:28:36Z"
- content="""
-I made that previous suggestion... I'm using sshelper right now, outstanding server. He seems to have already worked through all kinds of android specific details for running an SSH server. Of course, you don't get all the git goodness. I wonder how hard it would be to get runshell working when logging in through SSHelper, or provide an add an SSHelper style configured OpenSSH binary for the git annex shell.
-"""]]
diff --git a/doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op.mdwn b/doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op.mdwn
deleted file mode 100644
index 54920fa31..000000000
--- a/doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op.mdwn
+++ /dev/null
@@ -1,15 +0,0 @@
-### Please describe the problem.
-
-`git annex fix` only works on files that have been annexed, already.
-While that's a safety measure of course, an option like `--force` or similar would be nice if one is shuffling around data by hand.
-
-### What steps will reproduce the problem?
-
-Please see [[bugs/__96__git_annex_add__96___changes_mtime_if_symlinks_are_fixed_in_the_background/]] for details; I didn't want to spam exactly the same output twice.
-
-### What version of git-annex are you using? On what operating system?
-
-git-annex 4.20130709 on Debian unstable i386 and x64.
-
-> We've discussed this on IRC and there seems to be nothing more to do here.
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_1_9b671e583eec5adf870dccd1e97b5dbc._comment b/doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_1_9b671e583eec5adf870dccd1e97b5dbc._comment
deleted file mode 100644
index f2db49dd4..000000000
--- a/doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_1_9b671e583eec5adf870dccd1e97b5dbc._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.235"
- subject="comment 1"
- date="2013-07-11T15:26:52Z"
- content="""
-I don't understand what you want fix to do when run on files that are not annexed.
-"""]]
diff --git a/doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_2_d11744202213d6f897f4234bc4c70c18._comment b/doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_2_d11744202213d6f897f4234bc4c70c18._comment
deleted file mode 100644
index 20b3a251e..000000000
--- a/doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_2_d11744202213d6f897f4234bc4c70c18._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 2"
- date="2013-07-11T20:18:44Z"
- content="""
-I wanted to use it as a way to prepare the files before running `git annex add`. I like to have everything exactly how I want it before I add anything to git, or git-annex. Does git-annex do anything in the git-annex branch prior to running the pre-commit hook? I.e. is there any penalty, however slight, in running `git annex add` several times while moving stuff around?
-
-"""]]
diff --git a/doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_3_a729deb465ff44f5a9b87c963cd6235a._comment b/doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_3_a729deb465ff44f5a9b87c963cd6235a._comment
deleted file mode 100644
index d4c65308d..000000000
--- a/doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_3_a729deb465ff44f5a9b87c963cd6235a._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 3"
- date="2013-07-13T15:05:53Z"
- content="""
-With git-annex built from current Git (i.e. the mtime fix for `git annex fix/add` applied), I have imported directory structure and objects (I will write a blog post along with scripts and pitfalls about that once the process is totally finished) and been running `git annex add` and `git mv` repeatedly to keep things up to date.
-
-As I now need to rename a few files with globs (`zmv`/`rename`) where `git mv` does not really cut it, I am in between a rock and a hard place. Most likely, I will `git checkout -- .`, rename, and `git annex add` again. I am pretty sure that `git annex add` does not do anything other than staging in the current branch and does not touch the `git-annex` branch. But I don't _know_.
-
-Long story short, it would make both my workflow easier and give me more peace of mind if there was a `git annex fix --untracked` or similar which does exactly the same, but operates on files that are not checked in and/or staged.
-
-As an aside, `git annex fsck --untracked` which is basically `git annex fsck --numcopies=1` on untracked files would be.... awesome.
-
-"""]]
diff --git a/doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_4_3f735503df9a08472d42fabd219c2ec5._comment b/doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_4_3f735503df9a08472d42fabd219c2ec5._comment
deleted file mode 100644
index 41f4e9db8..000000000
--- a/doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_4_3f735503df9a08472d42fabd219c2ec5._comment
+++ /dev/null
@@ -1,31 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.140"
- subject="comment 4"
- date="2013-07-18T19:27:41Z"
- content="""
-It seems to me that what you're looking for is:
-
-<pre>
-git annex import /dir
-mv foo bar
-...
-git add .
-git annex fix
-git commit
-</pre>
-
-This avoids the minor overhead of `git annex add` when run on a symlink updating the location tracking information.
-
-(Note that the manual call to `git annex fix` there is entirely unnecessary, since the pre-commit hook does the same thing when you commit.)
-
-Alternatively:
-
-<pre>
-git annex import /dir -c annex.alwayscommit=false
-mv foo bar
-...
-git annex add
-git commit
-</pre>
-"""]]
diff --git a/doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_5_2c61eabbba7fd2a52ba02d59a0a76a42._comment b/doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_5_2c61eabbba7fd2a52ba02d59a0a76a42._comment
deleted file mode 100644
index a417dac02..000000000
--- a/doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op/comment_5_2c61eabbba7fd2a52ba02d59a0a76a42._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.140"
- subject="comment 5"
- date="2013-07-18T19:29:02Z"
- content="""
-Note that the second option will work in direct mode; first one won't.
-"""]]
diff --git a/doc/bugs/__96__git_annex_forget_--drop-dead_--force__96_____95__revives__95___repositories.mdwn b/doc/bugs/__96__git_annex_forget_--drop-dead_--force__96_____95__revives__95___repositories.mdwn
new file mode 100644
index 000000000..ef0f85662
--- /dev/null
+++ b/doc/bugs/__96__git_annex_forget_--drop-dead_--force__96_____95__revives__95___repositories.mdwn
@@ -0,0 +1,88 @@
+As per topic, `git annex forget --drop-dead --force` does not behave as expected. Instead of getting rid of dead repositories, it actually revives them.
+
+I messed up the initial setup of the S3 special remote and instead of risking manual intervention, I figured it would be cleanest to nuke the old special remotes, using a new one instead.
+And yes, I should have used a test repo :(
+
+As this is apu.debconf.org, you could get access to the repo if that helps.
+
+
+[[!format sh """
+richih@apu (git)-[master] /srv/video/video.debian.net % git annex info
+repository mode: indirect
+trusted repositories: 0
+semitrusted repositories: 4
+ 00000000-0000-0000-0000-000000000001 -- web
+ 070cff8a-6302-4aa7-a63c-3fdd34e598a2 -- amazon_s3_us_east--SHA512E
+ 0bae683f-bede-43dd-a815-c4f8fb6db32d -- aws_s3_us_east--SHA512E
+ 92e9fac9-97ec-401f-a421-33f6b4f43e47 -- here (apu.debconf.org/srv/video/conference_videos.annex)
+untrusted repositories: 0
+transfers in progress: none
+available local disk space: 136.3 gigabytes (+1 megabyte reserved)
+local annex keys: 4392
+local annex size: 884.64 gigabytes
+annexed files in working tree: 4628
+size of annexed files in working tree: 885.68 gigabytes
+bloom filter size: 16 mebibytes (0.9% full)
+backend usage:
+ SHA512E: 9020
+richih@apu (git)-[master] /srv/video/video.debian.net % git annex dead 070cff8a-6302-4aa7-a63c-3fdd34e598a2
+dead 070cff8a-6302-4aa7-a63c-3fdd34e598a2 ok
+(Recording state in git...)
+richih@apu (git)-[master] /srv/video/video.debian.net % git annex dead 0bae683f-bede-43dd-a815-c4f8fb6db32d
+dead 0bae683f-bede-43dd-a815-c4f8fb6db32d ok
+(Recording state in git...)
+richih@apu (git)-[master] /srv/video/video.debian.net % git annex initremote amazon_aws_s3-us_east_1--SHA512E type=S3 encryption='none' embedcreds='no' fileprefix='SHA512E/' bucket='debian-video'
+initremote amazon_aws_s3-us_east_1--SHA512E (checking bucket...) git-annex: This bucket is already in use by a different S3 special remote, with UUID: 0bae683f-bede-43dd-a815-c4f8fb6db32d
+richih@apu (git)-[master] /srv/video/video.debian.net % git annex info
+repository mode: indirect
+trusted repositories: 0
+semitrusted repositories: 2
+ 00000000-0000-0000-0000-000000000001 -- web
+ 92e9fac9-97ec-401f-a421-33f6b4f43e47 -- here (apu.debconf.org/srv/video/conference_videos.annex)
+untrusted repositories: 0
+transfers in progress: none
+available local disk space: 136.3 gigabytes (+1 megabyte reserved)
+local annex keys: 4392
+local annex size: 884.64 gigabytes
+annexed files in working tree: 4628
+size of annexed files in working tree: 885.68 gigabytes
+bloom filter size: 16 mebibytes (0.9% full)
+backend usage:
+ SHA512E: 9020
+richih@apu (git)-[master] /srv/video/video.debian.net % git annex forget --drop-dead --force
+forget git-annex (Recording state in git...)
+ok
+(Recording state in git...)
+richih@apu (git)-[master] /srv/video/video.debian.net % git annex info
+repository mode: indirect
+trusted repositories: 0
+semitrusted repositories: 4
+ 00000000-0000-0000-0000-000000000001 -- web
+ 070cff8a-6302-4aa7-a63c-3fdd34e598a2 -- amazon_s3_us_east--SHA512E
+ 0bae683f-bede-43dd-a815-c4f8fb6db32d -- aws_s3_us_east--SHA512E
+ 92e9fac9-97ec-401f-a421-33f6b4f43e47 -- here (apu.debconf.org/srv/video/conference_videos.annex)
+untrusted repositories: 0
+transfers in progress: none
+available local disk space: 136.3 gigabytes (+1 megabyte reserved)
+local annex keys: 4392
+local annex size: 884.64 gigabytes
+annexed files in working tree: 4628
+size of annexed files in working tree: 885.68 gigabytes
+bloom filter size: 16 mebibytes (0.9% full)
+backend usage:
+ SHA512E: 9020
+richih@apu (git)-[master] /srv/video/video.debian.net % git annex version
+git-annex version: 5.20140117~bpo70+2
+build flags: Assistant Webapp Pairing S3 Inotify DBus XMPP Feeds Quvi TDFA
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
+remote types: git gcrypt S3 bup directory rsync web tahoe glacier hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+richih@apu (git)-[master] /srv/video/video.debian.net % cat /etc/issue
+Debian GNU/Linux 7 \n \l
+
+richih@apu (git)-[master] /srv/video/video.debian.net %
+"""]]
+
+> [[fixed|done]] via not removing from trust.log --[[Joey]]
diff --git a/doc/bugs/__96__git_annex_forget_--drop-dead_--force__96_____95__revives__95___repositories/comment_1_930b40e0f68da95d335eea5bd4216126._comment b/doc/bugs/__96__git_annex_forget_--drop-dead_--force__96_____95__revives__95___repositories/comment_1_930b40e0f68da95d335eea5bd4216126._comment
new file mode 100644
index 000000000..05aa545ef
--- /dev/null
+++ b/doc/bugs/__96__git_annex_forget_--drop-dead_--force__96_____95__revives__95___repositories/comment_1_930b40e0f68da95d335eea5bd4216126._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.41"
+ subject="comment 1"
+ date="2014-03-26T17:19:58Z"
+ content="""
+You still have git remotes configured with the uuid of the remote, so `git annex info` pulls that data in. Since --drop-dead removes all mention of the remote from the git-annex branch, including that its trust level is dead, the remaining info from the .git/config takes effect.
+
+--drop-dead could `git remote rm` but that won't help other clones of the repo that also have the dead remote. Instead, I think it may make sense for --drop-dead to avoid removing the uuid from trust.log, so it will still know this remote is dead.
+
+(Of course, you can easily deal with this locally by `git remote rm` yourself.)
+"""]]
diff --git a/doc/bugs/__96__git_annex_forget_--drop-dead_--force__96_____95__revives__95___repositories/comment_2_5397d488bc337cb3d7cb46ed774d0437._comment b/doc/bugs/__96__git_annex_forget_--drop-dead_--force__96_____95__revives__95___repositories/comment_2_5397d488bc337cb3d7cb46ed774d0437._comment
new file mode 100644
index 000000000..8bdde8972
--- /dev/null
+++ b/doc/bugs/__96__git_annex_forget_--drop-dead_--force__96_____95__revives__95___repositories/comment_2_5397d488bc337cb3d7cb46ed774d0437._comment
@@ -0,0 +1,90 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
+ nickname="Richard"
+ subject="comment 2"
+ date="2014-03-26T22:39:34Z"
+ content="""
+Sorry, I had to remove the fixed tag.
+
+
+The bug makes sense, as does your fix. I didn't even consider that this may be the cause. Still, `git remote rm` and `git annex forget --drop-dead --force` does not seem to be enough to truly get rid of the repo (and its UUID & state):
+
+[[!format sh \"\"\"
+richih@apu [2] [0] (git)-[master] /srv/video/video.debian.net % git annex info
+repository mode: indirect
+trusted repositories: 0
+semitrusted repositories: 4
+ 00000000-0000-0000-0000-000000000001 -- web
+ 070cff8a-6302-4aa7-a63c-3fdd34e598a2 -- amazon_s3_us_east--SHA512E
+ 0bae683f-bede-43dd-a815-c4f8fb6db32d -- aws_s3_us_east--SHA512E
+ 92e9fac9-97ec-401f-a421-33f6b4f43e47 -- here (apu.debconf.org/srv/video/conference_videos.annex)
+untrusted repositories: 0
+transfers in progress: none
+available local disk space: 136.3 gigabytes (+1 megabyte reserved)
+local annex keys: git4392
+local annex size: 884.64 gigabytes
+annexed files in working tree: am4628
+size of annexed files in working tree: 885.68 gigabytes
+bloom filter size: 16 mebibytes (0.9% full)
+backend usage:
+ SHA512E: 9020
+richih@apu [2] [0] (git)-[master] /srv/video/video.debian.net % git annex dead amazon_s3_us_east--SHA512E
+dead amazon_s3_us_east--SHA512E ok
+(Recording state in git...)
+richih@apu [2] [0] (git)-[master] /srv/video/video.debian.net % git annex dead aws_s3_us_east--SHA512E
+dead aws_s3_us_east--SHA512E ok
+(Recording state in git...)
+richih@apu [2] [0] (git)-[master] /srv/video/video.debian.net % git remote rm amazon_s3_us_east--SHA512E
+richih@apu [2] [0] (git)-[master] /srv/video/video.debian.net % git remote rm aws_s3_us_east--SHA512E
+richih@apu [2] [0] (git)-[master] /srv/video/video.debian.net % git annex forget --drop-dead --force
+forget git-annex (Recording state in git...)
+ok
+(Recording state in git...)
+richih@apu [2] [0] (git)-[master] /srv/video/video.debian.net % git annex info
+repository mode: indirect
+trusted repositories: 0
+semitrusted repositories: 2
+ 00000000-0000-0000-0000-000000000001 -- web
+ 92e9fac9-97ec-401f-a421-33f6b4f43e47 -- here (apu.debconf.org/srv/video/conference_videos.annex)
+untrusted repositories: 0
+transfers in progress: none
+available local disk space: 136.3 gigabytes (+1 megabyte reserved)
+local annex keys: 4392
+local annex size: 884.64 gigabytes
+annexed files in working tree: 4628
+size of annexed files in working tree: 885.68 gigabytes
+bloom filter size: 16 mebibytes (0.9% full)
+backend usage:
+ SHA512E: 9020
+richih@apu [2] [0] (git)-[master] /srv/video/video.debian.net % git annex initremote amazon_aws_s3-us_east_1--SHA512E type=S3 encryption='none' embedcreds='no' fileprefix='SHA512E/' bucket='debian-video'
+initremote amazon_aws_s3-us_east_1--SHA512E (checking bucket...) git-annex: This bucket is already in use by a different S3 special remote, with UUID: 0bae683f-bede-43dd-a815-c4f8fb6db32d
+richih@apu [2] [0] (git)-[master] /srv/video/video.debian.net % cat .git/annex
+cat: .git/annex: Ist ein Verzeichnis
+richih@apu [2] [0] (git)-[master] /srv/video/video.debian.net % cat .git/config
+[core]
+ repositoryformatversion = 0
+ filemode = true
+ bare = false
+ logallrefupdates = true
+[annex]
+ uuid = 92e9fac9-97ec-401f-a421-33f6b4f43e47
+ version = 5
+richih@apu [2] [0] (git)-[master] /srv/video/video.debian.net % git annex info 537 23:33:37 Mi 26.03.2014
+repository mode: indirect
+trusted repositories: 0
+semitrusted repositories: 2
+ 00000000-0000-0000-0000-000000000001 -- web
+ 92e9fac9-97ec-401f-a421-33f6b4f43e47 -- here (apu.debconf.org/srv/video/conference_videos.annex)
+untrusted repositories: 0
+transfers in progress: none
+available local disk space: 136.3 gigabytes (+1 megabyte reserved)
+local annex keys: 4392
+local annex size: 884.64 gigabytes
+annexed files in working tree: 4628
+size of annexed files in working tree: 885.68 gigabytes
+bloom filter size: 16 mebibytes (0.9% full)
+backend usage:
+ SHA512E: 9020
+richih@apu [2] [0] (git)-[master] /srv/video/video.debian.net %
+\"\"\"]]
+"""]]
diff --git a/doc/bugs/__96__git_annex_forget_--drop-dead_--force__96_____95__revives__95___repositories/comment_3_1b30e7611ec824dc6e79ef35e43ac740._comment b/doc/bugs/__96__git_annex_forget_--drop-dead_--force__96_____95__revives__95___repositories/comment_3_1b30e7611ec824dc6e79ef35e43ac740._comment
new file mode 100644
index 000000000..5b5784012
--- /dev/null
+++ b/doc/bugs/__96__git_annex_forget_--drop-dead_--force__96_____95__revives__95___repositories/comment_3_1b30e7611ec824dc6e79ef35e43ac740._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.41"
+ subject="comment 3"
+ date="2014-03-27T17:40:51Z"
+ content="""
+git-annex stores the uuid of a S3 remote inside the bucket for various reasons. Now that you have removed all knowledge of the remote from the repository, when you attempt to reuse the same bucket for some reason, git-annex has no way to know that this is a remote it used to use with that bucket.
+
+I think this behavior is entirely reasonable. Also, it's not what you filed the original bug report about; I fixed that bug. I'm going to re-close this.
+"""]]
diff --git a/doc/bugs/__96__git_annex_import__96___does_not_work_on_other_git_annex_repositories.mdwn b/doc/bugs/__96__git_annex_import__96___does_not_work_on_other_git_annex_repositories.mdwn
deleted file mode 100644
index 1580cee81..000000000
--- a/doc/bugs/__96__git_annex_import__96___does_not_work_on_other_git_annex_repositories.mdwn
+++ /dev/null
@@ -1,113 +0,0 @@
-### Please describe the problem.
-
-`git annex import otherrepo` does not work.
-
-
-### What steps will reproduce the problem?
-
- richih@eudyptes ~ % mcd killme/git-annex-source
- richih@eudyptes ~/killme/git-annex-source % git init; git annex init
- Initialized empty Git repository in /home/richih/killme/git-annex-source/.git/
- init ok
- (Recording state in git...)
- richih@eudyptes (git)-[master] ~/killme/git-annex-source % dd if=/dev/urandom of=foo bs=1M count=1
- 1+0 records in
- 1+0 records out
- 1048576 bytes (1.0 MB) copied, 0.281043 s, 3.7 MB/s
- richih@eudyptes (git)-[master] ~/killme/git-annex-source % git annex add .
- add foo (checksum...) ok
- (Recording state in git...)
- richih@eudyptes (git)-[master] ~/killme/git-annex-source % git commit -m files
- [master (root-commit) 8054eeb] files
- 1 file changed, 1 insertion(+)
- create mode 120000 foo
- richih@eudyptes (git)-[master] ~/killme/git-annex-source % mcd ../git-annex-import
- richih@eudyptes ~/killme/git-annex-import % git init; git annex init
- Initialized empty Git repository in /home/richih/killme/git-annex-import/.git/
- init ok
- (Recording state in git...)
- richih@eudyptes (git)-[master] ~/killme/git-annex-import % git annex import ../git-annex-source/foo
- richih@eudyptes (git)-[master] ~/killme/git-annex-import % ls
-
-### What version of git-annex are you using? On what operating system?
-
-4.20130920 on Debian Sid
-
-
-### PS:
-
-To add insult to injury, this does "work":
-
- ih@eudyptes (git)-[master] ~/killme/git-annex-import % mcd bar
- richih@eudyptes (git)-[master] ~/killme/git-annex-import/bar % git annex import ../../git-annex-source/
- import .git/description (checksum...) ok
- import .git/HEAD (checksum...) ok
- import .git/config (checksum...) ok
- import .git/index (checksum...) ok
- import .git/COMMIT_EDITMSG (checksum...) ok
- import .git/refs/heads/git-annex (checksum...) ok
- import .git/refs/heads/master (checksum...) ok
- import .git/hooks/update.sample (checksum...) ok
- import .git/hooks/applypatch-msg.sample (checksum...) ok
- import .git/hooks/pre-rebase.sample (checksum...) ok
- import .git/hooks/pre-commit.sample (checksum...) ok
- import .git/hooks/pre-applypatch.sample (checksum...) ok
- import .git/hooks/prepare-commit-msg.sample (checksum...) ok
- import .git/hooks/commit-msg.sample (checksum...) ok
- import .git/hooks/post-update.sample (checksum...) ok
- import .git/hooks/pre-push.sample (checksum...) ok
- import .git/hooks/pre-commit (checksum...) ok
- import .git/info/exclude (checksum...) ok
- import .git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 (checksum...) ok
- import .git/objects/a2/6f9bdbe47ada699d537eaa8b6fbfc1e53ef214 (checksum...) ok
- import .git/objects/30/4b790d132863d54313e2380bed17e557944f08 (checksum...) ok
- import .git/objects/ab/09feaa1b55080f42ccfad8c8bb5612f2397c5a (checksum...) ok
- import .git/objects/95/b73ee41ebe8abbd5d8c0c368d1148b5256d4f2 (checksum...) ok
- import .git/objects/2e/96f9962c1baf83c563aa59dcc67e19f21d4b1f (checksum...) ok
- import .git/objects/74/6306e594874907246b2300b3af22f2805dde3e (checksum...) ok
- import .git/objects/5b/11e29d0ef96be4ee73f8dae9b2f525cb808ef1 (checksum...) ok
- import .git/objects/fc/0c0dc4d0579a15c20be29186a27feb2ee77304 (checksum...) ok
- import .git/objects/73/c38d817e0a9f1ef4699551ae83130edd166364 (checksum...) ok
- import .git/objects/c9/80716b5b506515410ca3ad1d88ceae13d8f6f9 (checksum...) ok
- import .git/objects/e2/6cb10dbce11f4065c249183bb085d0afc1b55d (checksum...) ok
- import .git/objects/80/54eeb150b094b0d8483c43ccf2ddf182c71bd3 (checksum...) ok
- import .git/annex/sentinal (checksum...) ok
- import .git/annex/sentinal.cache (checksum...) ok
- import .git/annex/index (checksum...) ok
- import .git/annex/index.lck (checksum...) ok
- import .git/annex/journal.lck (checksum...) ok
- import .git/annex/objects/F7/zw/SHA256E-s1048576--74f3a1a65df608d1c8ae575f83c6ee21a5aeb1a914ca73f202a881f8c3ba8f59/SHA256E-s1048576--74f3a1a65df608d1c8ae575f83c6ee21a5aeb1a914ca73f202a881f8c3ba8f59
- git-annex: ../../git-annex-source/.git/annex/objects/F7/zw/SHA256E-s1048576--74f3a1a65df608d1c8ae575f83c6ee21a5aeb1a914ca73f202a881f8c3ba8f59/SHA256E-s1048576--74f3a1a65df608d1c8ae575f83c6ee21a5aeb1a914ca73f202a881f8c3ba8f59: rename: permission denied (Permission denied)
- failed
- import .git/logs/HEAD (checksum...) ok
- import .git/logs/refs/heads/git-annex (checksum...) ok
- import .git/logs/refs/heads/master (checksum...) ok
- (Recording state in git...)
- error: Invalid path 'bar/.git/COMMIT_EDITMSG'
- error: unable to add bar/.git/COMMIT_EDITMSG to index
- fatal: adding files failed
-
- git-annex: user error (xargs ["-0","git","--git-dir=/home/richih/killme/git-annex-import/.git","--work-tree=/home/richih/killme/git-annex-import","add","--"] exited 123)
- failed
- git-annex: import: 2 failed
- richih@eudyptes (git)-[master] ~/killme/git-annex-import/bar % ls -la
- total 0
- drwxr-xr-x 3 richih richih 17 Sep 24 01:45 .
- drwxr-xr-x 4 richih richih 38 Sep 24 01:45 ..
- drwxr-xr-x 8 richih richih 152 Sep 24 01:45 .git
- richih@eudyptes (git)-[master] ~/killme/git-annex-import/bar %
-
-> I have made git-annex import skip .git directories. Of course,
-> running it on *any* directory without the --duplicate option
-> will result in it moving data to git-annex, so is not advisable
-> to do that if you want to keep the data in the directory where it was.
->
-> I am doubtful about special-casing git-annex import to do something
-> else when told to import a git-annex repository. It seems a bit of a
-> slippery slope to it getting very complicated, which we seem to already be
-> further down than I would like. If people are this pissed off about
-> git-annex import's behavior,
-> I would be inclined to *remove* it. Then you can use `mv` and `git annex
-> add`. I originally wrote git-annex import just to avoid needing to run
-> those 2 commands myself, and I can make my own local shell script
-> to do that... --[[Joey]]
diff --git a/doc/bugs/__96__git_annex_import__96___does_not_work_on_other_git_annex_repositories/comment_1_94ccd548c084286163eeb2af1ddc18e3._comment b/doc/bugs/__96__git_annex_import__96___does_not_work_on_other_git_annex_repositories/comment_1_94ccd548c084286163eeb2af1ddc18e3._comment
deleted file mode 100644
index 4de9cc10d..000000000
--- a/doc/bugs/__96__git_annex_import__96___does_not_work_on_other_git_annex_repositories/comment_1_94ccd548c084286163eeb2af1ddc18e3._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.220"
- subject="comment 1"
- date="2013-09-25T18:21:25Z"
- content="""
-Import skips symlinks and other non-regular files. It would work if the source repository was in direct mode.
-"""]]
diff --git a/doc/bugs/__96__git_annex_import__96___does_not_work_on_other_git_annex_repositories/comment_2_befde3ef3d2b171ebb691915ff3af172._comment b/doc/bugs/__96__git_annex_import__96___does_not_work_on_other_git_annex_repositories/comment_2_befde3ef3d2b171ebb691915ff3af172._comment
deleted file mode 100644
index 9996882fc..000000000
--- a/doc/bugs/__96__git_annex_import__96___does_not_work_on_other_git_annex_repositories/comment_2_befde3ef3d2b171ebb691915ff3af172._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://id.koumbit.net/anarcat"
- ip="72.0.72.144"
- subject="it's worse than not working, it kills! :)"
- date="2013-10-07T12:06:22Z"
- content="""
-so yeah, it doesn't really work well, and maybe that is to be expected because of symlinks, but it's much worse than that: the original git annex repo will actually be destroyed because git annex import will [[trash the .git metadata directory|bugs/git_annex_import_destroys_a_fellow_git_annex_repository]]. Recovering from that is... interesting, to say the least. :)
-"""]]
diff --git a/doc/bugs/__96__git_annex_sync__96___ignores_remotes.mdwn b/doc/bugs/__96__git_annex_sync__96___ignores_remotes.mdwn
deleted file mode 100644
index 825d9527b..000000000
--- a/doc/bugs/__96__git_annex_sync__96___ignores_remotes.mdwn
+++ /dev/null
@@ -1,106 +0,0 @@
-### Please describe the problem.
-
-A mere `git annex sync` does not go through the reachable remotes.
-
-### What steps will reproduce the problem?
-
-I do not know what could have put my repository in this state.
-
-### What version of git-annex are you using? On what operating system?
-
-git-annex version: 4.20130802-g1452ac3
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP
-local repository version: 4
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-
-Linux dawn 3.10.3-1-ARCH #1 SMP PREEMPT Fri Jul 26 11:26:59 CEST 2013 x86_64 GNU/Linux
-
-### Please provide any additional information below.
-
-[[!format sh """
-% git annex status
-supported backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
-supported remote types: git S3 bup directory rsync web webdav glacier hook
-repository mode: direct
-trusted repositories: 1
- f3cb4e8f-65f1-4ded-a6a1-abef64ddcff5 -- zoidberg (sam@git-annex:/media/git-annex/Music)
-semitrusted repositories: 5
- 00000000-0000-0000-0000-000000000001 -- web
- 063a31dc-542d-407f-a9ed-124479fa6354 -- here (dawn)
- 22b72aa6-058b-4622-8132-27aa2d8950dc -- arrakis (sam@arrakis:~/Music)
- 5b3a1abf-5e0b-41bc-a141-774d6236ec76 -- backup on old USB disk
- 6affec3c-fd26-11e2-9ddd-53f02e5ca176 -- music on eeePC
-untrusted repositories: 0
-transfers in progress: none
-available local disk space: 9.83 gigabytes (+1 megabyte reserved)
-local annex keys: 3947
-local annex size: 23.51 gigabytes
-known annex keys: 3965
-known annex size: 23.56 gigabytes
-bloom filter size: 16 mebibytes (0.8% full)
-backend usage:
- SHA256E: 7912
-
-% git remote -v
-arrakis arrakis:Music (fetch)
-arrakis arrakis:Music (push)
-zoidberg ssh://git-annex@zoidberg.rfc1149.net:2222/~/Music (fetch)
-zoidberg ssh://git-annex@zoidberg.rfc1149.net:2222/~/Music (push)
-
-# Note how here it does not seem to sync with any remote
-% git annex sync
-(Recording state in git...)
-commit
-ok
-
-% git annex sync zoidberg
-(Recording state in git...)
-commit
-ok
-pull zoidberg
-ok
-push zoidberg
-Everything up-to-date
-ok
-
-% git annex sync arrakis
-(Recording state in git...)
-commit
-ok
-pull arrakis
-From arrakis:Music
- c1a24bd..ba060b7 git-annex -> arrakis/git-annex
- 98b9a8e..be9c146 master -> arrakis/master
- e0df2be..be9c146 synced/master -> arrakis/synced/master
-ok
-
-# A nameless sync with debug turned on
-% git annex sync --debug
-[2013-08-06 10:59:57 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","symbolic-ref","HEAD"]
-[2013-08-06 10:59:57 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","show-ref","refs/heads/master"]
-[2013-08-06 10:59:57 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","show-ref","git-annex"]
-[2013-08-06 10:59:57 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","show-ref","--hash","refs/heads/git-annex"]
-[2013-08-06 10:59:57 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","log","refs/heads/git-annex..ba060b7777413ab687d64771b5d6c2b36a072335","--oneline","-n1"]
-[2013-08-06 10:59:57 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","log","refs/heads/git-annex..f401f2b7b67567862df7c5b8d304f52c3af43f4b","--oneline","-n1"]
-[2013-08-06 10:59:57 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","log","refs/heads/git-annex..feaba7c5ea5f4ca73c123e6ea44ffd6333bf383e","--oneline","-n1"]
-[2013-08-06 10:59:57 CEST] chat: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","cat-file","--batch"]
-[2013-08-06 10:59:57 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","ls-files","--stage","-z","--others","--exclude-standard","--","/home/sam/Music"]
-[2013-08-06 10:59:57 CEST] chat: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","cat-file","--batch"]
-(Recording state in git...)
-[2013-08-06 11:00:16 CEST] feed: xargs ["-0","git","--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","add","-f"]
-commit
-[2013-08-06 11:00:16 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","commit","-m","git-annex automatic sync"]
-ok
-[2013-08-06 11:00:17 CEST] call: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","show-ref","--verify","-q","refs/heads/synced/master"]
-[2013-08-06 11:00:17 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","log","refs/heads/master..refs/heads/synced/master","--oneline","-n1"]
-[2013-08-06 11:00:17 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","show-ref","git-annex"]
-[2013-08-06 11:00:17 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","show-ref","--hash","refs/heads/git-annex"]
-[2013-08-06 11:00:17 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","log","refs/heads/git-annex..ba060b7777413ab687d64771b5d6c2b36a072335","--oneline","-n1"]
-[2013-08-06 11:00:17 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","log","refs/heads/git-annex..f401f2b7b67567862df7c5b8d304f52c3af43f4b","--oneline","-n1"]
-[2013-08-06 11:00:17 CEST] read: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","log","refs/heads/git-annex..feaba7c5ea5f4ca73c123e6ea44ffd6333bf383e","--oneline","-n1"]
-[2013-08-06 11:00:17 CEST] call: git ["--git-dir=/home/sam/Music/.git","--work-tree=/home/sam/Music","branch","-f","synced/master"]
-"""]]
-
-[[done]]
diff --git a/doc/bugs/__96__git_annex_sync__96___ignores_remotes/comment_1_39421e6935233cd8f45949ebdef369fe._comment b/doc/bugs/__96__git_annex_sync__96___ignores_remotes/comment_1_39421e6935233cd8f45949ebdef369fe._comment
deleted file mode 100644
index a88baa834..000000000
--- a/doc/bugs/__96__git_annex_sync__96___ignores_remotes/comment_1_39421e6935233cd8f45949ebdef369fe._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="2001:4978:f:21a::2"
- subject="comment 1"
- date="2013-08-07T16:13:31Z"
- content="""
-It seems to me that you must have set `git config remote.zoidberg.annex-sync false`
-(or clicked around in the webapp and caused it to set that). If you set annex-sync back to true, it will sync with all remotes by default.
-"""]]
diff --git a/doc/bugs/__96__git_annex_sync__96___ignores_remotes/comment_2_53fb15d6fbf96d43564ff7c866239d18._comment b/doc/bugs/__96__git_annex_sync__96___ignores_remotes/comment_2_53fb15d6fbf96d43564ff7c866239d18._comment
deleted file mode 100644
index 1b870e1f7..000000000
--- a/doc/bugs/__96__git_annex_sync__96___ignores_remotes/comment_2_53fb15d6fbf96d43564ff7c866239d18._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://www.rfc1149.net/"
- nickname="Sam"
- subject="Indeed"
- date="2013-08-07T16:17:41Z"
- content="""
-You are perfectly right. Every remote had this parameter set to false for a reason I do not know.
-"""]]
diff --git a/doc/bugs/_impossible_to_switch_repositories_on_android__in_webapp/comment_3_9ffafbeb572e110b3e072029d1ce177c._comment b/doc/bugs/_impossible_to_switch_repositories_on_android__in_webapp/comment_3_9ffafbeb572e110b3e072029d1ce177c._comment
new file mode 100644
index 000000000..b181a4fa1
--- /dev/null
+++ b/doc/bugs/_impossible_to_switch_repositories_on_android__in_webapp/comment_3_9ffafbeb572e110b3e072029d1ce177c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="yasin.zaehringer"
+ ip="90.218.200.128"
+ subject="comment 3"
+ date="2014-04-02T11:43:52Z"
+ content="""
+The bug still exists. It is not possible to change the repository in the WebApp.
+"""]]
diff --git a/doc/bugs/acl_not_honoured_in_rsync_remote.mdwn b/doc/bugs/acl_not_honoured_in_rsync_remote.mdwn
index b5f92a9fb..edc4e67d7 100644
--- a/doc/bugs/acl_not_honoured_in_rsync_remote.mdwn
+++ b/doc/bugs/acl_not_honoured_in_rsync_remote.mdwn
@@ -55,3 +55,5 @@ the git annex version used is 3.20121017 as in debian, the receiving site uses r
this is probably not a bug of git-annex alone, but affects its operation and might be solvable by invoking rsync differently.
(this is kind of a follow-up on [[forum/__34__permission_denied__34___in_fsck_on_shared_repo]])
+
+[[!tag forwarded]]
diff --git a/doc/bugs/add_range_argument_to___34__git_annex_dropunused__34___.mdwn b/doc/bugs/add_range_argument_to___34__git_annex_dropunused__34___.mdwn
deleted file mode 100644
index 471a698a0..000000000
--- a/doc/bugs/add_range_argument_to___34__git_annex_dropunused__34___.mdwn
+++ /dev/null
@@ -1,21 +0,0 @@
-The command `git annex dropunused` currently takes a number, as referenced in output of last `git annex unused` command.
-
-When you want to drop all, or a range, this may be annoying, as you have to specify each number on the command line.
-
-A range argument, such as `1-1845`, possibly combined with other argument types (Cf. many print dialogues: `1,3,5-7,9`) would be great.
-
-I work around this lack as I want to drop all unused files anyway by something like this:
-
- git annex unused | grep -o -P "^ [0-9]+" | xargs git annex dropunused
-
-> It's designed to be used with `seq`. There's an example in the
-> [[walkthrough|walkthrough/unused_data]], and of course multiple seq calls can be used to
-> specifiy multiple ranges. So:
-
- git annex dropunused `seq 1 9` `seq 11 1845`
-
-> I don't see adding my own range operations to be an improvement worth
-> making; it'd arguably only be a complication. --[[Joey]] [[done]]
-
->> Actually, this did get implemented, since using seq could fall afoul
->> of command-line length limits in extreme cases.
diff --git a/doc/bugs/add_script-friendly_output_options.mdwn b/doc/bugs/add_script-friendly_output_options.mdwn
deleted file mode 100644
index 7d7bdfc51..000000000
--- a/doc/bugs/add_script-friendly_output_options.mdwn
+++ /dev/null
@@ -1,19 +0,0 @@
-I have a need to use git-annex from a larger program. It'd be great if the information output by some of the commands that is descriptive (for example, whereis) could be sent to stdout in a machine-readable format like (preferably) JSON, or XML. That way I can simply read in the output of the command and use the data directly instead of having to parse it via regexes or other such string manipulation.
-
-This could perhaps be triggered by a --json or --xml flag to the relevant commands.
-
-> This is [[done]], --json is supported by all commands, more or less.
->
-> Caveats:
->
-> * the version, status, and find commands produce custom output and so
-> no json. This could change for version and status; find needs to just
-> be a simple list of files, I think
-> * The "note" fields may repeat multiple times per object with different
-> notes and are of course not machine readable, and subject to change.
-> * Output of helper commands like rsync is not diverted away, and
-> could clutter up the json output badly. Should only affect commands
-> that transfer data. And AFAICS, wget and rsync both output their
-> progress displays to stderr, so shouldn't be a problem.
->
-> --[[Joey]]
diff --git a/doc/bugs/adding_a_remote_server_fails.mdwn b/doc/bugs/adding_a_remote_server_fails.mdwn
new file mode 100644
index 000000000..06e6af4da
--- /dev/null
+++ b/doc/bugs/adding_a_remote_server_fails.mdwn
@@ -0,0 +1,27 @@
+### Please describe the problem.
+I tried to add a remote server to my annex repo using the webapp.
+
+### What steps will reproduce the problem?
+Configuration -> Repositories -> Remote server -> Fill in stuff, use public key auth -> click "check this server" -> enjoy
+
+### What version of git-annex are you using? On what operating system?
+OpenSUSE Tumbleweed, git-annex 5.20140709-gc75193e
+
+### Please provide any additional information below.
+Error message: `user error (gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--with-colons","--list-secret-keys","--fixed-list-mode"] exited 2)`
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+[2014-07-11 12:03:52 CEST] main: starting assistant version 5.20140709-gc75193e
+[2014-07-11 12:03:53 CEST] UpgradeWatcher: Finished upgrading git-annex to version 5.20140709-gc75193e
+(scanning...) [2014-07-11 12:03:53 CEST] Watcher: Performing startup scan
+(started...) gpg: /home/zilti/.gnupg/gpg.conf:200: argument not expected
+gpg: /home/zilti/.gnupg/gpg.conf:201: invalid option
+gpg: /home/zilti/.gnupg/gpg.conf:200: argument not expected
+gpg: /home/zilti/.gnupg/gpg.conf:201: invalid option
+
+# End of transcript or log.
+"""]]
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/adding_a_remote_server_fails/comment_1_cf7ea9171f002c5793a882b42d33a77d._comment b/doc/bugs/adding_a_remote_server_fails/comment_1_cf7ea9171f002c5793a882b42d33a77d._comment
new file mode 100644
index 000000000..1dc6d6954
--- /dev/null
+++ b/doc/bugs/adding_a_remote_server_fails/comment_1_cf7ea9171f002c5793a882b42d33a77d._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="obvious questions"
+ date="2014-07-11T18:12:44Z"
+ content="""
+From what source did you install git-annex?
+
+What version of gpg is installed on your system? What is the contents of line 200 and 201 of/home/zilti/.gnupg/gpg.conf?
+"""]]
diff --git a/doc/bugs/adding_an_rsync.net_repo_give_an_gpg_error.mdwn b/doc/bugs/adding_an_rsync.net_repo_give_an_gpg_error.mdwn
deleted file mode 100644
index bb340231f..000000000
--- a/doc/bugs/adding_an_rsync.net_repo_give_an_gpg_error.mdwn
+++ /dev/null
@@ -1,22 +0,0 @@
-### Please describe the problem.
-adding an rsync.net repo returns an internal server error "user error (gpg ["--quite","--trust-model","always","--gen-random","--armor","1","512"] exited 127)
-
-
-### What steps will reproduce the problem?
-add an rsync.net repo
-
-
-### What version of git-annex are you using? On what operating system?
-4.20130516-g8a26544 for OSX Mountain Lion
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/debug.log
-
-
-# End of transcript or log.
-"""]]
-
-> [[done]]; the OSX gpg was broken for a while, now fixed. --[[Joey]]
diff --git a/doc/bugs/adding_an_rsync.net_repo_give_an_gpg_error/comment_1_f55cfc133be72ac10cae93c877c487df._comment b/doc/bugs/adding_an_rsync.net_repo_give_an_gpg_error/comment_1_f55cfc133be72ac10cae93c877c487df._comment
deleted file mode 100644
index 7daf6b734..000000000
--- a/doc/bugs/adding_an_rsync.net_repo_give_an_gpg_error/comment_1_f55cfc133be72ac10cae93c877c487df._comment
+++ /dev/null
@@ -1,21 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-05-19T21:09:54Z"
- content="""
-I'm seeing some indications (this bug and also the [[git_annex_fork_bombs_on_gpg_file]] bug) that gpg is somehow broken on OSX.
-
-Aha. I just tried on my build box, and:
-
-<pre>
-oberon:~ joeyh$ gpg
-dyld: warning, LC_RPATH @loader_path/../lib in /usr/local/bin/gpg being ignored in restricted program because of @loader_path
-dyld: Library not loaded: @rpath/libz.1.2.7.dylib
- Referenced from: /usr/local/bin/gpg
- Reason: image not found
-</pre>
-
-So, I'm packing up a broken gpg. Need to fix that then..
-
-"""]]
diff --git a/doc/bugs/adding_an_rsync.net_repo_give_an_gpg_error/comment_2_24dd024ac4b21a82a781343b8fe3891e._comment b/doc/bugs/adding_an_rsync.net_repo_give_an_gpg_error/comment_2_24dd024ac4b21a82a781343b8fe3891e._comment
deleted file mode 100644
index b1a4114a2..000000000
--- a/doc/bugs/adding_an_rsync.net_repo_give_an_gpg_error/comment_2_24dd024ac4b21a82a781343b8fe3891e._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnmvJtM53ZX9h8OGQoU2t2OfGwrF7rxFX0"
- nickname="Shawn"
- subject="fixed"
- date="2013-05-22T14:37:05Z"
- content="""
-seems to be fix with 4.20130521-g25dba9d.
-
-
-Thanks
-"""]]
diff --git a/doc/bugs/adding_existing_repo_as_remote_in_webapp_may_reset_its_group.mdwn b/doc/bugs/adding_existing_repo_as_remote_in_webapp_may_reset_its_group.mdwn
new file mode 100644
index 000000000..37a9c2a2e
--- /dev/null
+++ b/doc/bugs/adding_existing_repo_as_remote_in_webapp_may_reset_its_group.mdwn
@@ -0,0 +1,16 @@
+Adding eg a ssh remote when the remote repo already exists, in the webapp,
+resets its group to transfer. It also clears any preferred content
+settings.
+
+Adding existing local repositories or repositories from removable drives
+may have the same problems. Didn't check yet.
+
+[[!tag confirmed]] --[[Joey]]
+
+> Fixed for local repos and repos on removable drives. Still open for
+> ssh remotes (incl gcrypt). --[[Joey]]
+
+>> Fixed for ssh (including gcrypt) too.
+>>
+>> Also affected enabling existing special remotes, like webdav; that's
+>> also fixed. [[done]] --[[Joey]]
diff --git a/doc/bugs/addurl_--relaxed_with_--file_doesn__39__t_actually_relax.mdwn b/doc/bugs/addurl_--relaxed_with_--file_doesn__39__t_actually_relax.mdwn
deleted file mode 100644
index 9118a5041..000000000
--- a/doc/bugs/addurl_--relaxed_with_--file_doesn__39__t_actually_relax.mdwn
+++ /dev/null
@@ -1,26 +0,0 @@
-It appears like addurl --relaxed if used incombination with --file doesn't actually relax.
-
-(I'm interested in quickly adding links to an extremely large set of files (and for a large set of revisions), and the fact that addurl takes a second or so per file makes this impossible performance-wise.)
-
-What steps will reproduce the problem? (Well, this isn't the problem per see, but it illustrates that it does checking)
-
- $ echo foo > foo
- $ git annex add foo
- $ git annex addurl --relaxed http://lambda.haskell.org/platform/download/2012.4.0.0/haskell-platform-2012.4.0.0.tar.gz --file foo
- addurl foo
- failed to verify url: http://lambda.haskell.org/platform/download/2012.4.0.0/haskell-platform-2012.4.0.0.tar.gz
- failed
- git-annex: addurl: 1 failed
-
-What version of git-annex are you using? On what operating system?
-
-Debian Sid
-
- git-annex version: 4.20130228
- local repository version: 3
- default repository version: 3
- supported repository versions: 3 4
- upgrade supported from repository versions: 0 1 2
- build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS
-
-> Missed the case of adding an url to an existing file. [[done]] --[[Joey]]
diff --git a/doc/bugs/addurl_fails_on_the_internet_archive.mdwn b/doc/bugs/addurl_fails_on_the_internet_archive.mdwn
deleted file mode 100644
index 556575db6..000000000
--- a/doc/bugs/addurl_fails_on_the_internet_archive.mdwn
+++ /dev/null
@@ -1,65 +0,0 @@
-### Please describe the problem.
-
-`addurl` doesn't support the internet archive:
-
-1. it doesn't actually accept the proper URL as a secondary source of content
-2. it doesn't parse the HTML from the video page (the "details page")
-
-### What steps will reproduce the problem?
-
- # download eben moglen's excellent re:publica presentation from youtube
- git annex addurl https://www.youtube.com/watch?v=sKOk4Y4inVY
- # copy that file aside
- cp -L re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm-bak
- # drop it so we can try again
- git annex drop re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
- # add the IA URL for the same video, failing
- git annex addurl --file=re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm http://ia601009.us.archive.org/9/items/Republica2012-EbenMoglen-FreedomOfThoughtRequiresFreeMedia/re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
- # try again with --relaxed to skip some checks
- git annex addurl --relaxed --file=re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm http://ia601009.us.archive.org/9/items/Republica2012-EbenMoglen-FreedomOfThoughtRequiresFreeMedia/re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
- # observe both files are the same size and checksum
-
-The files should look like this:
-
-[[!format txt """
-anarcat@angela:presentations$ ls -alL re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm*
--r--r--r-- 1 anarcat anarcat 419359123 oct 9 23:41 re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
--r--r--r-- 1 anarcat anarcat 419359123 oct 11 19:40 re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm-bak
-anarcat@angela:presentations$ md5sum re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm*
-7892df24a9e1c40e2587be1035728ef0 re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
-7892df24a9e1c40e2587be1035728ef0 re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm-bak
-"""]]
-
-There are two separate bugs here: one is the above need to use --relaxed even though the file is the same.
-
-The second is probably simply that quvi doesn't support the internet archive, and maybe that one should be moved to a separate [[todo]]/[[wishlist]]. I was expecting this to "do the right thing" (ie. download the video):
-
- git annex addurl http://archive.org/details/Republica2012-EbenMoglen-FreedomOfThoughtRequiresFreeMedia
-
-... but instead it downloads the HTML.
-### What version of git-annex are you using? On what operating system?
-
-my good old faithful `4.20130921-g434dc22` i compiled manually some time ago. :)
-
-This is [[done]] in git-annex version: 4.20131011-g2c0badc. Thanks!
-
-### Please provide any additional information below.
-
-[[!format sh """
-anarcat@marcos:presentations$ git annex addurl --file=re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm http://archive.org/download/Republica2012-EbenMoglen-FreedomOfThoughtRequiresFreeMedia/re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
-addurl re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
- failed to verify url exists: http://archive.org/download/Republica2012-EbenMoglen-FreedomOfThoughtRequiresFreeMedia/re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
-failed
-git-annex: addurl: 1 failed
-anarcat@marcos:presentations$ git annex addurl --debug --file=re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm http://ia601009.us.archive.org/9/items/Republica2012-EbenMoglen-FreedomOfThoughtRequiresFreeMedia/re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
-[2013-10-09 18:26:30 EDT] call: quvi ["-v","mute","--support","http://ia601009.us.archive.org/9/items/Republica2012-EbenMoglen-FreedomOfThoughtRequiresFreeMedia/re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm"]
-addurl re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm [2013-10-09 18:26:30 EDT] read: curl ["-s","--head","-L","http://ia601009.us.archive.org/9/items/Republica2012-EbenMoglen-FreedomOfThoughtRequiresFreeMedia/re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm","-w","%{http_code}"]
-
- failed to verify url exists: http://ia601009.us.archive.org/9/items/Republica2012-EbenMoglen-FreedomOfThoughtRequiresFreeMedia/re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
-failed
-git-annex: addurl: 1 failed
-"""]]
-
-Originally reported in [[tips/Internet_Archive_via_S3]]. --[[anarcat]]
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/addurl_fails_on_the_internet_archive/comment_1_e227aa25eea0b41f1176037a601c5844._comment b/doc/bugs/addurl_fails_on_the_internet_archive/comment_1_e227aa25eea0b41f1176037a601c5844._comment
deleted file mode 100644
index 4754b8366..000000000
--- a/doc/bugs/addurl_fails_on_the_internet_archive/comment_1_e227aa25eea0b41f1176037a601c5844._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.22"
- subject="comment 1"
- date="2013-10-11T18:49:25Z"
- content="""
-Afaik this was fixed in 747f5b123cb3c6b3b87d4e79f8767e69d842b96b.
-
-Probably noone has bothered to add IA support to quvi, but it should be doable.
-"""]]
diff --git a/doc/bugs/addurl_fails_on_the_internet_archive/comment_2_6d4fd58f0caa1f75ee2dd3f0a909cd91._comment b/doc/bugs/addurl_fails_on_the_internet_archive/comment_2_6d4fd58f0caa1f75ee2dd3f0a909cd91._comment
deleted file mode 100644
index f24d0583f..000000000
--- a/doc/bugs/addurl_fails_on_the_internet_archive/comment_2_6d4fd58f0caa1f75ee2dd3f0a909cd91._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://id.koumbit.net/anarcat"
- ip="72.0.72.144"
- subject="awesome, fix confirmed, and IA+quvi forwarded upstream"
- date="2013-10-12T11:23:31Z"
- content="""
-Great! I confirm latest versions work properly.. I have [written the quvi-devel mailing list](http://sourceforge.net/mailarchive/forum.php?thread_name=20131012104904.GA11972%40angela.anarcat.ath.cx&forum_name=quvi-devel) to ask for help for archive.org support, we'll see where it goes...
-"""]]
diff --git a/doc/bugs/addurl_file_doesn__39__t_work_with_spaces_in_filenames_and_--fast.mdwn b/doc/bugs/addurl_file_doesn__39__t_work_with_spaces_in_filenames_and_--fast.mdwn
deleted file mode 100644
index 40a310df4..000000000
--- a/doc/bugs/addurl_file_doesn__39__t_work_with_spaces_in_filenames_and_--fast.mdwn
+++ /dev/null
@@ -1,29 +0,0 @@
-###What steps will reproduce the problem?
- $ git annex addurl 'file:///$HOME/space file' --fast
- addurl _$HOME_space%20file
- unable to access url: file:///$HOME/space file
- failed
- git-annex: addurl: 1 failed
-
- $ git annex addurl 'file:///home/arand/space\ file' --fast
- addurl _home_arand_space%5C%20file
- unable to access url: file:///home/arand/space\ file
- failed
- git-annex: addurl: 1 failed
-
-###What is the expected output? What do you see instead?
-
-I guess it's semi-expected to fail since spaces aren't supposed to be in urls, but with file:// it would be nice if that restriction was lessened.
-
-###What version of git-annex are you using? On what operating system?
-
-Debian sid/experimental
-
- git-annex version: 4.20130227
- local repository version: 4
- default repository version: 3
- supported repository versions: 3 4
- upgrade supported from repository versions: 0 1 2
-
-> Relaxed url parsing so this will work, and also in http:// urls etc.
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/addurl_file_doesn__39__t_work_with_spaces_in_filenames_and_--fast/comment_1_eea9477ea1157cb88c8a07d8da5f0dba._comment b/doc/bugs/addurl_file_doesn__39__t_work_with_spaces_in_filenames_and_--fast/comment_1_eea9477ea1157cb88c8a07d8da5f0dba._comment
deleted file mode 100644
index 6e970322c..000000000
--- a/doc/bugs/addurl_file_doesn__39__t_work_with_spaces_in_filenames_and_--fast/comment_1_eea9477ea1157cb88c8a07d8da5f0dba._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://launchpad.net/~arand"
- nickname="arand"
- subject="comment 1"
- date="2013-03-10T21:56:04Z"
- content="""
-This seems to only occur with the \"--fast\" option.
-
-And the first example above is obviously failing due to '$HOME' as well
-"""]]
diff --git a/doc/bugs/allows_repository_with_the_same_name_twice.mdwn b/doc/bugs/allows_repository_with_the_same_name_twice.mdwn
deleted file mode 100644
index e32bfda61..000000000
--- a/doc/bugs/allows_repository_with_the_same_name_twice.mdwn
+++ /dev/null
@@ -1,24 +0,0 @@
-What steps will reproduce the problem?
-
-Unsure. I believe:
-
-* Add a git remote
-* Mark it as dead
-* Remove the git remote, re-add with the same name
-
-What is the expected output? What do you see instead?
-
-When I do a `git annex status` I see:
-
- 04e701b5-8a22-4391-ad74-d75dde715c7b -- bigserver
- 6ddfda5d-0f17-45a9-b41a-2a626a823101 -- bigserver
-
-What version of git-annex are you using? On what operating system?
-
-4.20130323 on OSX and Linux
-
-Please provide any additional information below.
-
-Trying to get a file from bigserver kept on failing with the message "Try making some of these repositories available". Which led me on a wild goose chases blaming SSH keys and PATH issues.
-
-> [[done]]; not a bug --[[Joey]]
diff --git a/doc/bugs/allows_repository_with_the_same_name_twice/comment_1_ba7801403e7138684704a3471c8bc4a6._comment b/doc/bugs/allows_repository_with_the_same_name_twice/comment_1_ba7801403e7138684704a3471c8bc4a6._comment
deleted file mode 100644
index d307d4af6..000000000
--- a/doc/bugs/allows_repository_with_the_same_name_twice/comment_1_ba7801403e7138684704a3471c8bc4a6._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-04-04T16:10:38Z"
- content="""
-The \"bigserver\" shown there is not a repository name, it's a repository description. You can change it with `git annex describe 6ddfda5d-0f17-45a9-b41a-2a626a823101 otherbigserver`
-
-git-annex does not use these descriptions in any way, except for to show them to you. It also shows the UUID, so that if you have described two repositories the same way, you can still tell them apart.
-
-I don't see a bug here, unless you can be more specific about a problem.
-"""]]
diff --git a/doc/bugs/allows_repository_with_the_same_name_twice/comment_2_8c19a4ddedbe7ddb8bdcf84acac68cc8._comment b/doc/bugs/allows_repository_with_the_same_name_twice/comment_2_8c19a4ddedbe7ddb8bdcf84acac68cc8._comment
deleted file mode 100644
index 4d6905865..000000000
--- a/doc/bugs/allows_repository_with_the_same_name_twice/comment_2_8c19a4ddedbe7ddb8bdcf84acac68cc8._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://danieroux.com/"
- nickname="danie"
- subject="Having difficulty recreating it"
- date="2013-04-04T17:53:56Z"
- content="""
-I got into a situation where:
-
-git annex get myfile.txt
-
-Would complain that I have to \"make bigserver available\" - even though it had a remote called that already.
-
-Will pay closer attention if I get into that corner next time.
-"""]]
diff --git a/doc/bugs/amd64_i386_standalone:_no_SKEIN.mdwn b/doc/bugs/amd64_i386_standalone:_no_SKEIN.mdwn
deleted file mode 100644
index 628cb13bd..000000000
--- a/doc/bugs/amd64_i386_standalone:_no_SKEIN.mdwn
+++ /dev/null
@@ -1,41 +0,0 @@
-### Please describe the problem.
-
-git-annex standalone has no SKEIN backends on i386 and amd64. OSX and Android standalones have them, debian package had it in version 4.20131106 and probably still does.
-
-### What steps will reproduce the problem?
-
-1. download git-annex standalone for amd64 or i386
-2. extract
-3. git-annex.linux/git-annex version
-
-Expect key/value backends row to mention SKEIN. It does on other platforms, but not here.
-
-Trying to e.g. get SKEIN-hashed files produces error messages.
-
-### What version of git-annex are you using? On what operating system?
-amd64 and i386 standalones 5.20140103 on Ubuntu Precise/12.04 (Mint 13)
-
-### Please provide any additional information below.
-
-[[!format sh """
-clacke@acozed:~$ /usr/bin/git-annex version
-git-annex version: 4.20131106
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP Feeds Quvi TDFA CryptoHash
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
-remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
-clacke@acozed:~$ ~/.local/libexec/git-annex.linux-5.20140103/git-annex version
-git-annex version: 5.20131230-g4aa88d8
-build flags: Assistant Webapp Pairing S3 WebDAV Inotify DBus XMPP Feeds Quvi TDFA
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
-remote types: git gcrypt S3 bup directory rsync web webdav glacier hook external
-clacke@acozed:~$ ~/.local/libexec/git-annex.linux-5.20140103_i386/git-annex version
-git-annex version: 5.20131230-g52a46585
-build flags: Assistant Webapp Pairing S3 WebDAV Inotify DBus XMPP Feeds Quvi TDFA
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
-remote types: git gcrypt S3 bup directory rsync web webdav glacier hook external
-"""]]
-
--- [[clacke]]
-
-> [[done]] The autobuilds are now running debian unstable, and SKEIN is included
-> now. --[[Joey]]
diff --git a/doc/bugs/amd64_i386_standalone:_no_SKEIN/comment_1_fcf7e1089b25993378df7574ccee8062._comment b/doc/bugs/amd64_i386_standalone:_no_SKEIN/comment_1_fcf7e1089b25993378df7574ccee8062._comment
deleted file mode 100644
index c725acd62..000000000
--- a/doc/bugs/amd64_i386_standalone:_no_SKEIN/comment_1_fcf7e1089b25993378df7574ccee8062._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.43"
- subject="comment 1"
- date="2014-01-08T22:06:35Z"
- content="""
-Those builds are done on Debian stable for portability reasons, and it has too old a version of haskell-cryptohash for SKEIN.
-"""]]
diff --git a/doc/bugs/amd64_standalone:_ld-linux-x86-64.so.2:_not_found.mdwn b/doc/bugs/amd64_standalone:_ld-linux-x86-64.so.2:_not_found.mdwn
deleted file mode 100644
index 9f6f1e53d..000000000
--- a/doc/bugs/amd64_standalone:_ld-linux-x86-64.so.2:_not_found.mdwn
+++ /dev/null
@@ -1,21 +0,0 @@
-### Please describe the problem.
-While trying to diagnose [[bugs/armel_standalone:_git-upload-pack_and_-receive-pack_not_shimmed/]] I updated the version of the standalone git-annex on Server A from 3.20121017 to the latest not daily build.
-
-### What steps will reproduce the problem?
-1. download git-annex standalone for amd64 (I did both the normal not-daily build, and the daily build, same thing in both)
-2. extract
-3. ./runshell
-
-### What version of git-annex are you using? On what operating system?
-Debian amd64 (yes... I know, blame asheesh)
-
-### Please provide any additional information below.
-
-[[!format sh """
-greg@rose:~/bin/git-annex.linux$ ./runshell
-exec: 2: /home/greg/bin/git-annex.linux/lib64/ld-linux-x86-64.so.2: not found
-"""]]
-
-
-### Indeed a dupe ###
-Thanks clacke, [[done]] - Greg
diff --git a/doc/bugs/amd64_standalone:_ld-linux-x86-64.so.2:_not_found/comment_1_5e40f32caf9c1177a5f7b9883cdcc6dd._comment b/doc/bugs/amd64_standalone:_ld-linux-x86-64.so.2:_not_found/comment_1_5e40f32caf9c1177a5f7b9883cdcc6dd._comment
deleted file mode 100644
index 00b1f46e4..000000000
--- a/doc/bugs/amd64_standalone:_ld-linux-x86-64.so.2:_not_found/comment_1_5e40f32caf9c1177a5f7b9883cdcc6dd._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://id.clacke.se/"
- nickname="clacke"
- subject="dup"
- date="2013-12-23T12:50:04Z"
- content="""
-Seems to be a duplicate of [[Latest_64_bit_standalone_Linux_build_broken]].
-"""]]
diff --git a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit.mdwn b/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit.mdwn
deleted file mode 100644
index e739b9691..000000000
--- a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit.mdwn
+++ /dev/null
@@ -1,28 +0,0 @@
-### Please describe the problem.
-
-I installed git-annex on my android device (Nook HD+, with Cyanogenmod 10.1 installed) for the first time today and was excited to get it working. However, I noticed the device warming alarmingly, and, after installing a CPU usage monitor, it became clear that git annex was the problem, as it was hovering around 30-40% even when idle.
-
-I tried quitting git-annex using the webapp's "Shutdown Daemon" menu option, and it seemed to shut down successfully, but the CPU monitor still showed that process present and taking up high amounts of CPU (sometimes well over 50%). I used the android app switcher and noticed that the terminal emulator for git annex was still running; I tried to quit this by using the X button and it seemed to close, but the CPU monitor still showed the git-annex process consuming large amounts of CPU. Finally I had to quit the process forcefully from the monitor.
-
-### What steps will reproduce the problem?
-
-Install & run; observe CPU. I used a dedicated CPU monitor to stop it the first time; another time, I tried stopping it by going to Preferences, Apps, Running Applications, where it told me it had one process and one service running. I stopped the service without issue; it said the process could not be safely stopped but I stopped it anyway and that successfully stopped the app.
-
-
-### What version of git-annex are you using? On what operating system?
-
-the current (4.20130826-g46f422) version on Android.
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-(I'm not sure how to get a log out of the web app to paste here unfortunately.
-
-# End of transcript or log.
-"""]]
-
-> [[done]]; I fixed the bug which turned out to be a stupid
-> minunderstanding of how a java library worked. --[[Joey]]
diff --git a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_10_1d841ff0b0ffd814efed2449dc1f35f3._comment b/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_10_1d841ff0b0ffd814efed2449dc1f35f3._comment
deleted file mode 100644
index 892894ad4..000000000
--- a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_10_1d841ff0b0ffd814efed2449dc1f35f3._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.63"
- subject="comment 10"
- date="2013-08-27T01:46:36Z"
- content="""
-This seems to be a reversion instroduced in commit a48d340abdaf3296a2ddacd73c18adc9a13a02ef. With that backed out, I get 0% cpu usage for the terminal app. Even if I run top in the terminal, its CPU sits under 1%.
-
-Clearly the infinite loop in that patch is running faster than expected!
-"""]]
diff --git a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_10_cd101e0af45d8f463011fb0d04b3b822._comment b/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_10_cd101e0af45d8f463011fb0d04b3b822._comment
deleted file mode 100644
index d8ca9fb05..000000000
--- a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_10_cd101e0af45d8f463011fb0d04b3b822._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="173.162.44.162"
- subject="comment 10"
- date="2013-08-26T20:19:06Z"
- content="""
-Yeah, that would definitely explain both what I'm seeing and why you haven't been seeing it.
-
-"""]]
diff --git a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_11_8595041cfe703d9bea49e792732dc15f._comment b/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_11_8595041cfe703d9bea49e792732dc15f._comment
deleted file mode 100644
index 085f3d108..000000000
--- a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_11_8595041cfe703d9bea49e792732dc15f._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="173.162.44.162"
- subject="comment 11"
- date="2013-08-27T02:27:08Z"
- content="""
-Awesome! I'll grab a new nightly in a day or two and give it another shot.
-"""]]
diff --git a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_1_8e7bc6965ea967a8d43240791a30c5bc._comment b/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_1_8e7bc6965ea967a8d43240791a30c5bc._comment
deleted file mode 100644
index 756b9d5c6..000000000
--- a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_1_8e7bc6965ea967a8d43240791a30c5bc._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="173.162.44.162"
- subject="comment 1"
- date="2013-08-26T18:34:44Z"
- content="""
-Just noticed I was using the autobuild instead of the last release version; I'll try the release version and see if that makes any difference.
-
-"""]]
diff --git a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_2_891c1073f908b204651899d41599f944._comment b/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_2_891c1073f908b204651899d41599f944._comment
deleted file mode 100644
index c26c512ea..000000000
--- a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_2_891c1073f908b204651899d41599f944._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.63"
- subject="comment 2"
- date="2013-08-26T18:42:02Z"
- content="""
-If you shut down the daemon, it seems to me that the process that was still running would probably be `git annex transferkey` which runs in its own process to upload/download file contents. I normally see 0% to 1% cpu use from git-annex when it is running on my android tablet. It's possible that the 1% use is due to it waking up every second, which got fixed in 9dc2373977d583b4c4aa6cf0555dc97309f89991.
-"""]]
diff --git a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_3_de02b8f1b5928fa1a7078c4aa2124bea._comment b/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_3_de02b8f1b5928fa1a7078c4aa2124bea._comment
deleted file mode 100644
index 71ad88d74..000000000
--- a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_3_de02b8f1b5928fa1a7078c4aa2124bea._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="173.162.44.162"
- subject="comment 3"
- date="2013-08-26T19:03:45Z"
- content="""
-OK, so I might have a rogue transferkey process going on, but one which starts over again when I restart the app?
-
-I've set this all up purely as a \"can I do this\" experiment right now; there is literally zero important data there to lose, either on the tablet or on the laptop, so maybe I could just write this off as a bad result of my first few shaky attempts to get the device paired with my laptop, wipe out both annexes, and start completely from scratch.
-
-"""]]
diff --git a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_6_506acc4275a81ed9e9b08e8a40fcf96a._comment b/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_6_506acc4275a81ed9e9b08e8a40fcf96a._comment
deleted file mode 100644
index 553a135a0..000000000
--- a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_6_506acc4275a81ed9e9b08e8a40fcf96a._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="173.162.44.162"
- subject="comment 6"
- date="2013-08-26T19:38:12Z"
- content="""
-a final note -- according to the process monitor, the process eating CPU is \"ga.androidterm\". There are also a small swarm of about 6 git processes none of which are consuming much CPU time at all.
-
-"""]]
diff --git a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_7_d38d6f40db4c9437764c7b2ddf36b5a9._comment b/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_7_d38d6f40db4c9437764c7b2ddf36b5a9._comment
deleted file mode 100644
index 819d31672..000000000
--- a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_7_d38d6f40db4c9437764c7b2ddf36b5a9._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.63"
- subject="comment 7"
- date="2013-08-26T20:00:39Z"
- content="""
-It's certainly possible that the terminal app eats cpu for some reason even when sitting idle. It's hard for me to tell since I've been measuring cpu use by running top inside that terminal, which necessarily seems to use a lot of the CPU just to draw the screen.
-
-If it's the terminal at fault, it would continue after you shutdown the git-annex daemon, since that doesn't close the terminal.
-"""]]
diff --git a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_8_9bb23e9cbc77ecca4b1209b0f66bc2b0._comment b/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_8_9bb23e9cbc77ecca4b1209b0f66bc2b0._comment
deleted file mode 100644
index 3fce2f21f..000000000
--- a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_8_9bb23e9cbc77ecca4b1209b0f66bc2b0._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.63"
- subject="oh yeah, i can run top in adb.."
- date="2013-08-26T20:14:13Z"
- content="""
-So, I can tell that on my tablet, the terminal app is using 82% cpu while idle.
-"""]]
diff --git a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_9_d1ce7fc251db076da61eed5bb9d71b9a._comment b/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_9_d1ce7fc251db076da61eed5bb9d71b9a._comment
deleted file mode 100644
index ffd0a44be..000000000
--- a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_9_d1ce7fc251db076da61eed5bb9d71b9a._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="173.162.44.162"
- subject="comment 9"
- date="2013-08-26T20:49:34Z"
- content="""
-(removed my earlier comments with debug info, since it wasn't relevant and I'd just as soon not display my gmail id and home machine's address on the web if I don't need to)
-
-"""]]
diff --git a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_9_feb71c1022ff65d82e66a3958a41dfb2._comment b/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_9_feb71c1022ff65d82e66a3958a41dfb2._comment
deleted file mode 100644
index 8f32df035..000000000
--- a/doc/bugs/android:_high_CPU_usage__44___unclear_how_to_quit/comment_9_feb71c1022ff65d82e66a3958a41dfb2._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.63"
- subject="comment 9"
- date="2013-08-26T20:16:05Z"
- content="""
-Strace doesn't show it doing anything. I suppose I should try building the terminal without the several patches I added to it to support git-annex to see if I somehow made it use all this cpu..
-"""]]
diff --git a/doc/bugs/android_4.3_install_failed_.mdwn b/doc/bugs/android_4.3_install_failed_.mdwn
new file mode 100644
index 000000000..69749ea2a
--- /dev/null
+++ b/doc/bugs/android_4.3_install_failed_.mdwn
@@ -0,0 +1,20 @@
+### Please describe the problem.
+Impossible installation on Android 4.3
+
+
+### What version of git-annex are you using? On what operating system?
+The lastest version of git-annex, and Android 4.3, **without sdcard** (Wiko Wax)
+
+### Please provide any additional information below.
+
+The message given by git-annex:
+
+
+ Falling back to hardcoded app location; cannot find expected files in /data/app-lib
+ mkdir: can't create directory '/sdcard/git-annex.home': Permission denied
+ mkdir of /sdcard/git-annex.home failed !
+ lib/lib.runshell.so: line 133: can't create /sdcard/git-annex.home/git-annex-install.log: Permission denied
+ Installation failed ! Please report a but and attach /sdcard/git-annex.home/git-annex-install.log
+
+[[!meta title="android 4.3 install failed on android device without sdcard"]]
+[[!tag moreinfo]]
diff --git a/doc/bugs/android_4.3_install_failed_/comment_1_82447f1e24d7e8df8048464d1b7df117._comment b/doc/bugs/android_4.3_install_failed_/comment_1_82447f1e24d7e8df8048464d1b7df117._comment
new file mode 100644
index 000000000..682780cb2
--- /dev/null
+++ b/doc/bugs/android_4.3_install_failed_/comment_1_82447f1e24d7e8df8048464d1b7df117._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="24.159.78.125"
+ subject="comment 1"
+ date="2014-06-02T16:28:42Z"
+ content="""
+git-annex needs a directory to use to store its repositories. If your android device does not have a /sdcard directory (which does not have to be a literal sd card, but just someplace you can write to), does it have any equivilant directory?
+"""]]
diff --git a/doc/bugs/android_4.3_install_failed_/comment_2_67ace7c454c7e962ca69e42178142e80._comment b/doc/bugs/android_4.3_install_failed_/comment_2_67ace7c454c7e962ca69e42178142e80._comment
new file mode 100644
index 000000000..09374e8ee
--- /dev/null
+++ b/doc/bugs/android_4.3_install_failed_/comment_2_67ace7c454c7e962ca69e42178142e80._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkPSASwemBzccJmjkotESlbUSs5GPFiPCs"
+ nickname="Lin"
+ subject="Ok, but ?"
+ date="2014-06-02T18:22:24Z"
+ content="""
+You mean that I have to create the missed files ?
+"""]]
diff --git a/doc/bugs/android_4.3_install_failed_/comment_3_051e39129a38e439f24703385f503cf4._comment b/doc/bugs/android_4.3_install_failed_/comment_3_051e39129a38e439f24703385f503cf4._comment
new file mode 100644
index 000000000..3f6e86ce4
--- /dev/null
+++ b/doc/bugs/android_4.3_install_failed_/comment_3_051e39129a38e439f24703385f503cf4._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 3"
+ date="2014-06-04T18:08:39Z"
+ content="""
+I asked if your Android device has an eqivilant directory to /sdcard that you can write to. If so, I can fix git-annex to use that directory. But you need to tell me what it is first!
+"""]]
diff --git a/doc/bugs/android_autobuild_broken.mdwn b/doc/bugs/android_autobuild_broken.mdwn
new file mode 100644
index 000000000..6bbd1dfcd
--- /dev/null
+++ b/doc/bugs/android_autobuild_broken.mdwn
@@ -0,0 +1,4 @@
+The android build is broken. Annoying evilsplicer failure in the new
+bootstrap3 code. --[[Joey]]
+
+[[fixed|done]]
diff --git a/doc/bugs/android_cannot_get_from_5.20131221.mdwn b/doc/bugs/android_cannot_get_from_5.20131221.mdwn
deleted file mode 100644
index c2422d853..000000000
--- a/doc/bugs/android_cannot_get_from_5.20131221.mdwn
+++ /dev/null
@@ -1,41 +0,0 @@
-## Reproduce
-
- - run `git annex get --from mylinuxbox` on git-annex Android 5.20131213 or 5.20131221
- - `mylinuxbox` is running 5.20131221 standalone
-
-## Expected result
-
-The Android box gets the missing file.
-
-## Actual result
-
- git-annex: unknown command sendkey
-
-## Workaround
-
-Run 5.20131213 on `mylinuxbox`, which does not have this problem.
-
-## Additional
-
-linux standalone 5.20131213 and 5.20131221 are both able to `get` from linux standalone 5.20131221 -- this only affects the Android version.
-
-*Edit:* On second thought, Android is not the only distinguishing factor. Apart from being Android, the box and repo having trouble have the following distinguishing factors from the ones I tried that worked:
-
- - Android
- - Direct mode
- - Remote was set up by the Assistant
-
-> [[clacke]]
-
-> There was a bug in the linux standalone tarball distributed
-> with 5.20131221 that made the `git-annex-shell` wrapper accidentially run
-> `git-annex` instead of `git-annex-shell`. Which results in
-> this error about recvkey, which is a git-annex-shell command, not a
-> git-annex command.
->
-> So, the problem is not in the android build, but in the git-annex
-> installed on the server (or laptop or whatever) that the android is
-> trying to access.
-
-> This bug is fixed in the daily builds, and I have updated the
-> tarballs for the release too, now. [[done]] --[[Joey]]
diff --git a/doc/bugs/android_cannot_get_from_5.20131221/comment_1_f8eeb67e58bf2a4658dcc32a9f275f19._comment b/doc/bugs/android_cannot_get_from_5.20131221/comment_1_f8eeb67e58bf2a4658dcc32a9f275f19._comment
deleted file mode 100644
index 48f02c785..000000000
--- a/doc/bugs/android_cannot_get_from_5.20131221/comment_1_f8eeb67e58bf2a4658dcc32a9f275f19._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnZEanlyzay_QlEAL0CWpyZcRTyN7vay8U"
- nickname="Carlo"
- subject="comment 1"
- date="2013-12-22T17:57:24Z"
- content="""
-Same problem on copy --to, but says \"unknown command recvkey\". sender is linux x64, receiver is raspberry pi.
-"""]]
diff --git a/doc/bugs/android_cannot_get_from_5.20131221/comment_2_eba841b1978c70a4c20a8d96c9f71172._comment b/doc/bugs/android_cannot_get_from_5.20131221/comment_2_eba841b1978c70a4c20a8d96c9f71172._comment
deleted file mode 100644
index 73ba6a3ae..000000000
--- a/doc/bugs/android_cannot_get_from_5.20131221/comment_2_eba841b1978c70a4c20a8d96c9f71172._comment
+++ /dev/null
@@ -1,36 +0,0 @@
-[[!comment format=mdwn
- username="etset"
- ip="188.83.117.67"
- subject="comment 2"
- date="2013-12-23T13:35:18Z"
- content="""
-Same problem here: When I try `git annex get $somefile --debug --from $remote` in my laptop with 5.20131221, with the remote being a ssh remote on a server running 5.20131222-g487b01c, the output shows:
-
- [2013-12-23 13:03:17 WET] read: git [\"--git-dir=/home/etset/annex/.git\",\"--work-tree=/home/etset/annex\",\"ls- files\",\"--cached\",\"-z\",\"--\",\"running.gnumeric\"]
- get running.gnumeric [2013-12-23 13:03:17 WET] read: git [\"--git-dir=/home/etset/annex/.git\",\"--work-tree=/home/etset/annex\",\"show-ref\",\"git-annex\"]
- [2013-12-23 13:03:17 WET] read: git [\"--git-dir=/home/etset/annex/.git\",\"--work-tree=/home/etset/annex\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- [2013-12-23 13:03:17 WET] read: git [\"--git-dir=/home/etset/annex/.git\",\"--work-tree=/home/etset/annex\",\"log\",\"refs/heads/git-annex..32bf5294e7fda349e689b40f3e6627d58067a455\",\"--oneline\",\"-n1\"]
- [2013-12-23 13:03:17 WET] read: git [\"--git-dir=/home/etset/annex/.git\",\"--work-tree=/home/etset/annex\",\"log\",\"refs/heads/git-annex..338e69ac06c3602f8e3a01390dad3be039203935\",\"--oneline\",\"-n1\"]
- [2013-12-23 13:03:17 WET] read: git [\"--git-dir=/home/etset/annex/.git\",\"--work-tree=/home/etset/annex\",\"log\",\"refs/heads/git-annex..1682681264cd47e1721203485f8f43b09bdf9e61\",\"--oneline\",\"-n1\"]
- [2013-12-23 13:03:17 WET] chat: git [\"--git-dir=/home/etset/annex/.git\",\"--work-tree=/home/etset/annex\",\"cat-file\",\"--batch\"]
- (from server...)
- [2013-12-23 13:03:17 WET] read: rsync [\"--progress\",\"--inplace\",\"-e\",\"'ssh' '-S' '.git/annex/ssh/47d5752367356bb61361fd5cf9c1ec32' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=yes' '-T' 'etset@server.lan' 'git-annex-shell ''sendkey'' ''/mnt/disk/annex/'' ''SHA256E-s17623--c547d78c210676ba17f418ffa1171094900bb863298c01eb497af8f75f64353f'' --uuid ff21315c-8faa-430c-ae7e-c7bbb468071b ''--'' ''remoteuuid=21141b76-9875-45c2-b5ea-a165ad983a85'' ''direct=1'' ''associatedfile=running.gnumeric'' ''--'''\",\"--\",\"dummy:\",\"/home/etset/annex/.git/annex/tmp/SHA256E-s17623--c547d78c210676ba17f418ffa1171094900bb863298c01eb497af8f75f64353f\"]
- git-annex: unknown command sendkey
-
- Usage: git-annex command [option ...]
-
- [ ...long list of possible commands here... ]
-
- rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
- rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.0]
-
- rsync failed -- run git annex again to resume file transfer
-
- Unable to access these remotes: server
-
- Try making some of these repositories available:
- ff21315c-8faa-430c-ae7e-c7bbb468071b -- server (etset@server.lan:/mnt/disk/annex)
- ff4f4c32-ad94-45f4-8b3f-f7d843d7c496 -- u0_a178@localhost:/sdcard/annex
- failed
- git-annex: get: 1 failed
-"""]]
diff --git a/doc/bugs/android_cannot_get_from_5.20131221/comment_3_4ba8208822c7f66e23037564b3501391._comment b/doc/bugs/android_cannot_get_from_5.20131221/comment_3_4ba8208822c7f66e23037564b3501391._comment
deleted file mode 100644
index dbb94a50d..000000000
--- a/doc/bugs/android_cannot_get_from_5.20131221/comment_3_4ba8208822c7f66e23037564b3501391._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl99Gxq3NPNvwZHp3PDufaknQH4rZb_KKY"
- nickname="Florian"
- subject="comment 3"
- date="2013-12-26T00:15:56Z"
- content="""
-I can still confirm the bug for the current version (5.20131224-g692aa01). I see this problem on all my machines.
-"""]]
diff --git a/doc/bugs/annex-rsync-options_shell-split_carelessly.mdwn b/doc/bugs/annex-rsync-options_shell-split_carelessly.mdwn
deleted file mode 100644
index c8eeb7160..000000000
--- a/doc/bugs/annex-rsync-options_shell-split_carelessly.mdwn
+++ /dev/null
@@ -1,16 +0,0 @@
-with rsync, it is sometimes the case that one needs to specify ssh options -- typical examples from the rsync man page are `rsync -e 'ssh -p 2234'`. as git-annex does the shell splitting of the arguments in `annex-rsync-options` (see [[special remotes/rsync]]) itself by looking for whitespace, these options can't be passed directly. (`annex-rsync-options = -e 'ssh -p 2234'` gets split to `["rsync", "-e", "'ssh", "-p", "2234'"]` instead of `["rsync", "-e", "ssh -p 2234"]`).
-
-git-annex should respect shell splitting rules when looking at annex-rsync-options. (i suppose there is a haskell library or module for that; in python, we have the `shlex` module for that).
-
-## workaround
-
-put this in .git/ssh and mark it as executable:
-
- #!/bin/sh
- exec ssh -p 2234 $@
-
-put this in your git annex config in the particular remote's section:
-
- annex-rsync-options = -e /local/path/to/your/repo/.git/ssh
-
-(typical bug report information: observed with git-annex 3.20121127 on debian)
diff --git a/doc/bugs/annex-rsync-options_shell-split_carelessly/comment_1_2636e0d224317f2e6db94658d8a094c4._comment b/doc/bugs/annex-rsync-options_shell-split_carelessly/comment_1_2636e0d224317f2e6db94658d8a094c4._comment
deleted file mode 100644
index 42b92ce28..000000000
--- a/doc/bugs/annex-rsync-options_shell-split_carelessly/comment_1_2636e0d224317f2e6db94658d8a094c4._comment
+++ /dev/null
@@ -1,23 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.8.117"
- subject="comment 1"
- date="2012-12-13T17:03:08Z"
- content="""
-Due to the way git-annex runs rsync, which involves a specific -e parameter it constructs that, you cannot pass -e in annex-rsync-options anyway; or if you do you'll bypass use of git-annex-shell, which is not desirable. I have not checked which, but would not recommend use of it.
-
-There is no need for ugly workarounds. Just use ~/.ssh/config to configure the hostname to use the nonstandard port it needs. For example:
-
-<pre>
-Host example.com
-Port 2234
-</pre>
-
-Or, to make a separate example.com-2234 host that can be used to use the nonstandard port:
-
-<pre>
-Host example.com-2234
-Hostname example.com
-Port 2234
-</pre>
-"""]]
diff --git a/doc/bugs/annex-rsync-transport_ignored.mdwn b/doc/bugs/annex-rsync-transport_ignored.mdwn
new file mode 100644
index 000000000..1c6923a88
--- /dev/null
+++ b/doc/bugs/annex-rsync-transport_ignored.mdwn
@@ -0,0 +1,30 @@
+### Please describe the problem.
+I have an rsync remote with the following option in config:
+annex-rsync-transport = ssh -i /path/to/private/key
+
+and git annex copy --to <remote> still asks for the remote's password. I've checked and I can ssh into the remote using that key with no problems, here's the --debug output:
+
+ copy SHA256E-s152396--56bcf5e3f72daa1a194b16e42330fe82806cc1dbc6f3bb52888ff5e5c57b8d08.log (gpg) (checking <remote>...) [2014-09-05 13:12:41 CEST] read: rsync ["<user>@<remote>:<remote path>/81c/b5e/'GPGHMACSHA1--7d9470e207a5669e2d9120538b68815274dbf16d/GPGHMACSHA1--7d9470e207a5669e2d9120538b68815274dbf16d'"]
+ <user>@<remote>'s password:
+
+
+Once it has asked for the password twice, it starts using the rsync options correctly to copy and the password is no longer needed, until the next "checking remote…". Maybe the "checking remote…" part ignores the configuration?
+
+### What steps will reproduce the problem?
+Use an rsync remote with annex-rsync-transport config set.
+
+### What version of git-annex are you using? On what operating system?
+git annex version gives:
+
+ git-annex version: 5.20140814-g9b89b5c
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 0 1 2 4
+
+which is the latest available linux-armel version.
+
+> Also removing didn't use the configured transport. Both [[fixed|done]]
+> --[[Joey]]
diff --git a/doc/bugs/annex.autocommit_seems_ignored_for_new_files.mdwn b/doc/bugs/annex.autocommit_seems_ignored_for_new_files.mdwn
new file mode 100644
index 000000000..a06d3aa5a
--- /dev/null
+++ b/doc/bugs/annex.autocommit_seems_ignored_for_new_files.mdwn
@@ -0,0 +1,39 @@
+### Please describe the problem.
+
+When `annex.autocommit` is set to `false`, the assistant continues to commit to the repository, at least in indirect mode (direct mode not tested). I'd like it to not even `git annex add`, but it should at least not `git commit`.
+
+### What steps will reproduce the problem?
+
+I started the assistant with `git annex assistant`. Then I also opened the webapp with `git annex website`.
+
+Next, I ran `git config --bool --local --replace-all annex.autocommit false`. Supposedly that'll stop the assistant from committing things.
+
+Then I did a `echo "hello world" > test`.
+
+The webapp showed the file syncing, and `ls -l test` confirmed it'd been added the annex. `git status` confirmed it'd been committed as well.
+
+I did a `git rm test`, and then a `git status`... and it turns out the annex committed that as well.
+
+NOTE: My repository is in indirect mode.
+
+I tried `--global` instead of `--local` for the config, and that didn't make a difference.
+
+
+### What version of git-annex are you using? On what operating system?
+
+5.20141125 on Debian testing, from the package. (And, thank you Joey, for all your work on Debian. You'll be missed.)
+
+### Please provide any additional information below.
+
+> The assistant does not notice changes to the
+> git configuration that are made while it's already running.
+>
+> I have verified that setting `git config annex.autocommit true`
+> and then starting the assistant behaves as documented.
+>
+> So will asking the webapp to restart.
+>
+> Retitling bug report appropriately. --[[Joey]]
+
+[[!meta title="git-annex assistant could watch .git/config and react to config changes on the fly"]]
+[[!tag confirmed]]
diff --git a/doc/bugs/annex.numcopies_not_overriden_by_--numcopies_option.mdwn b/doc/bugs/annex.numcopies_not_overriden_by_--numcopies_option.mdwn
deleted file mode 100644
index ba63897ba..000000000
--- a/doc/bugs/annex.numcopies_not_overriden_by_--numcopies_option.mdwn
+++ /dev/null
@@ -1,16 +0,0 @@
-### Please describe the problem.
-Using "--numcopies=N" on the command line doesn't overrides (as advertised) the annex.numcopies variable when set via .gitattributes.
-
-### What steps will reproduce the problem?
-
-$ echo '* annex.numcopies=2' > .gitattributes
-
-$ git annex drop --numcopies=1 somefile.txt
-
-Second line fails if only one other copy exists.
-
-### What version of git-annex are you using? On what operating system?
-git-annex version: 4.20130627
-
-> I don't think this was ever handled correctly.
-> I've fixed it now. [[done]] --[[Joey]]
diff --git a/doc/bugs/annex_add_in_annex.mdwn b/doc/bugs/annex_add_in_annex.mdwn
deleted file mode 100644
index e12826f00..000000000
--- a/doc/bugs/annex_add_in_annex.mdwn
+++ /dev/null
@@ -1,6 +0,0 @@
-I accidentally annexed some files in the .git-annex directory and it cause git-annex/git to be very unhappy when i pulled the repo to somewhere else. It might be worth teaching git-annex to disallow annex'ing of files inside the .git-annex/.git directories.
-
-> There is a guard against `git annex add .git-annex/foo`, but it doesn't
-> notice `cd .git-annex; git annex add foo`. --[[Joey]]
-
-> Now fixed, by removing the .git-annex directory. [[done]] --[[Joey]]
diff --git a/doc/bugs/annex_get_fails:___34__No_such_file_or_directory__34__.mdwn b/doc/bugs/annex_get_fails:___34__No_such_file_or_directory__34__.mdwn
deleted file mode 100644
index 33ac259d9..000000000
--- a/doc/bugs/annex_get_fails:___34__No_such_file_or_directory__34__.mdwn
+++ /dev/null
@@ -1,68 +0,0 @@
-**What steps will reproduce the problem?**
-
-I did a basic git annex setup with two repositories talking to each other. They are on the same macine, but I identified them via the hostname, because I intend to set up my production systems on two machines. Since I am new to annex, I'll reproduce the full sequence of commands to create the repos and sync them. *I* noticed the trouble at the last step, when `git annex get` failed.
-
-Here is the full sequence of commands:
-
- >>> cd /scr/wandschn/hackNtest/distributed/nyc/STU_files
- >>> git init
- >>> git annex init nyc
- >>> cd /scr/wandschn/hackNtest/distributed/pdx
-
- >>> git clone xerxes:/scr/wandschn/hackNtest/distributed/nyc/STU_files
- >>> git annex init pdx
- >>> git remote add nyc xerxes:/scr/wandschn/hackNtest/distributed/nyc/STU_files
-
- >>> cd /scr/wandschn/hackNtest/distributed/nyc/STU_files
- >>> git remote add pdx xerxes:/scr/wandschn/hackNtest/distributed/pdx/STU_files
-
- >>> mkdir shared
- >>> cp ../../../files/shared/* shared/.
- >>> git annex add shared
- >>> git commit -a -m "initial add of shared files"
-
- >>> cd /scr/wandschn/hackNtest/distributed/pdx/STU_files
- >>> git fetch nyc
- >>> git merge nyc/master
- >>> ls shared/135.mae
- shared/135.mae
- >>> git annex whereis shared/135.mae
- whereis shared/135.mae (1 copy)
- 6f0368db-f1b1-4192-9200-3575c16c2ef1 -- origin (nyc)
- ok
- >>> git annex get shared/135.mae
- fatal: Could not switch to '../.git/annex/objects/KV/5f/SHA256-s1499628--4a7e2ba13096ee2d1a6b3c3b314efae623516d200c09d35ff0f695395b6ad47a': No such file or directory
-
- git-annex: <file descriptor: 4>: hGetLine: end of file
- failed
- git-annex: get: 1 failed
-
-**What is the expected output? What do you see instead?**
-
-I expected the file shared/135.mae to be copied from the remote repo to the local repo. Instead, this command failed, and said that there was a missing file. This file path is the one that the broken link points to, and it exists on the remote repo.
-
-**What version of git-annex are you using? On what operating system?**
-
-git version 1.7.9.6
-
-git-annex 3.20120523
-
-CentOS 6.3 (kernel 2.6.32)
-
-64bit Xeon processor
-
-
-**Please provide any additional information below.**
-
-> Thanks for the command sequence, which I have tested here is ok with
-> a current version of git-annex (except for one cd you left out..).
->
-> You version of git-annex is quite old, and this
-> particular bug was fixed in version 3.20120721.
->
-> The bug is that it fails to correctly determine the git version at
-> compile time, and I think it thinks you have an old version of git
-> from before 1.7.7, which changed some behavior of `git check-attr`.
->
-> Upgrading git-annex should fix this, please let me know if not. [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/annex_get_fails_from_read-only_filesystem.mdwn b/doc/bugs/annex_get_fails_from_read-only_filesystem.mdwn
new file mode 100644
index 000000000..18b446ee1
--- /dev/null
+++ b/doc/bugs/annex_get_fails_from_read-only_filesystem.mdwn
@@ -0,0 +1,27 @@
+### Please describe the problem.
+
+annex get does not work from read-only file systems...
+
+### What steps will reproduce the problem?
+
+ $ git annex get --from=...
+ error: could not lock config file /.../Annex/.git/config: Read-only file system
+ get ... (from ...) error: could not lock config file .../Annex/.git/config: Read-only file system
+ git [Param "config",Param "annex.version",Param "5"] failed
+ failed
+
+### What version of git-annex are you using? On what operating system?
+
+annex.version = 3 in the remote
+
+ $ git annex version
+ git-annex version: 5.20140927
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 0 1 2 4
+
+[[!tag confirmed]]
+[[!meta title="read-only filesystem on remote prevents auto-upgrade from v3 to v5, and prevents using a remote"]]
diff --git a/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_1_d8ab07429195c06ec4fae199ca9e0764._comment b/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_1_d8ab07429195c06ec4fae199ca9e0764._comment
new file mode 100644
index 000000000..9fadf817f
--- /dev/null
+++ b/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_1_d8ab07429195c06ec4fae199ca9e0764._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 1"
+ date="2014-10-06T15:11:18Z"
+ content="""
+There might be a general problem with using git-annex against a read-only filesystem, but the specific case here is a read-only filesystem containing a repository in an old format which git-annex needs to upgrade to the current format to use. So it's pretty reasonable that the (automatic) upgrade fails, since it's not being allowed to write to the repository to upgrade it.
+
+Now, if that repository is a indirect mode repo, there is really no change between version 3 and version 5, so it might do to let git-annex ignore the failure to write out the config, and treat that repo as if it's a v5 repo. It seems easier in most cases to mount the media read-write for git-annex to do the upgrade though.
+"""]]
diff --git a/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_2_03c16df9d6c14e1529c5dc8b5fc49691._comment b/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_2_03c16df9d6c14e1529c5dc8b5fc49691._comment
new file mode 100644
index 000000000..4bd0bce59
--- /dev/null
+++ b/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_2_03c16df9d6c14e1529c5dc8b5fc49691._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="72.0.72.144"
+ subject="comment 2"
+ date="2014-10-06T15:18:20Z"
+ content="""
+i've seen problems like this not related to upgrades at all, in [[todo/read-only removable drives]]. furthermore, it seems to me that failure to upgrade a repository shouldn't be fatal and we should be able to recover and get files anyways, in the spirit of [[backwards compatibility|future_proofing]]. --[[anarcat]]
+"""]]
diff --git a/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_3_c505a9df0ef63bb7cac28af9502a953d._comment b/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_3_c505a9df0ef63bb7cac28af9502a953d._comment
new file mode 100644
index 000000000..3fd24eb67
--- /dev/null
+++ b/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_3_c505a9df0ef63bb7cac28af9502a953d._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 3"
+ date="2014-10-06T15:59:10Z"
+ content="""
+From a code complication POV, it's useful for git-annex to only support one version of repository at a time.
+
+As far as backwards compatablity goes, I don't anticipate ever removing the upgrade code from git-annex. It still supports upgrading v0 repos which probably only I ever used!
+"""]]
diff --git a/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_4_2491fabe2eb7a14bfef0e388b4b9c4c7._comment b/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_4_2491fabe2eb7a14bfef0e388b4b9c4c7._comment
new file mode 100644
index 000000000..8543aaad7
--- /dev/null
+++ b/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_4_2491fabe2eb7a14bfef0e388b4b9c4c7._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="anarcat"
+ ip="70.83.139.100"
+ subject="comment 4"
+ date="2014-10-30T15:22:32Z"
+ content="""
+the problem here is that it upgrading the repo will not work on a readonly filesystem, so we can't upgrade, we can't get files, so we can't sync.
+
+we should be able to sync anyways - can't we try our best shot at getting files even without upgrading the metadata? i mean i'm looking for something in .git/annex/objects/, maybe i don't care about tracking so much - i just want to recover some files...
+"""]]
diff --git a/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_5_07f612d7059a9b561c48d63e471d5ed7._comment b/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_5_07f612d7059a9b561c48d63e471d5ed7._comment
new file mode 100644
index 000000000..24b7dd118
--- /dev/null
+++ b/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_5_07f612d7059a9b561c48d63e471d5ed7._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://jaen.saul.ee/id/"
+ nickname="Jaen"
+ subject="Re: why this happened"
+ date="2014-10-30T19:04:56Z"
+ content="""
+I agree that at least read-only support should be there. This error was from an filesystem type that is impossible to mount read-write.
+
+Now that I am looking at it again with fresh eyes, I suppose it's possible to get around this by mounting an union filesystem with a read-write temp layer on top of the read-only one (not that a regular user would ever figure that out...)
+"""]]
diff --git a/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_6_c469f1fe8ae6981a038be7f8723a07b1._comment b/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_6_c469f1fe8ae6981a038be7f8723a07b1._comment
new file mode 100644
index 000000000..fac28c24d
--- /dev/null
+++ b/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_6_c469f1fe8ae6981a038be7f8723a07b1._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 6"""
+ date="2014-10-31T16:55:47Z"
+ content="""
+An upgrade could move the annexed objects around.
+"""]]
diff --git a/doc/bugs/annex_get_over_SSH_is_very_slow.mdwn b/doc/bugs/annex_get_over_SSH_is_very_slow.mdwn
deleted file mode 100644
index 215e725e9..000000000
--- a/doc/bugs/annex_get_over_SSH_is_very_slow.mdwn
+++ /dev/null
@@ -1,33 +0,0 @@
-### Please describe the problem.
-Attempting to populate one annex from another over an SSH connection is very slow.
-
-### What steps will reproduce the problem?
-1. Create an annex on Linux
-2. Clone annex to Windows system
-3. Set up sshd on Linux system, access keys, etc.
-4. "git annex get ."
-5. Checking if an individual file exists takes a few seconds, and downloading it takes a few seconds. on a 100Mbps LAN, transfers at an average of 7Mbps.
-6. By comparison operating over a working HTTP connection transfers between 20~40 Mbps.
-
-
-### What version of git-annex are you using? On what operating system?
-Windows 7: 4.20140627-g8a36ec5 (from the git-annex download page)
-
-Debian Linux: 3.20120629 (from the package manager)
-
-> The problem is that git-annex is designed to be used with ssh connection
-> caching. However, I have not gotten ssh connection caching to work on
-> Windows. I did try getting this to work with IIRC, cygwin's ssh, but
-> it seems that the Unix sockets it expects to use with `-o ControlMaster`
-> don't work, or it's not been ported to use the Windows equivilant.
->
-> It's not practical to make git-annex reuse a single ssh connection
-> itself, due to the way rsync is run over ssh.
->
-> Since this is basically a bug in ssh for Windows, and not in git-annex
-> per se, I am going to close this bug report. However, I do mention
-> this in [[todo/windows_support]].
->
-> [[done]] --[[Joey]]
-
-[[!meta title="No ssh connection caching support on Windows"]]
diff --git a/doc/bugs/annex_seems_to_ignore_core.bare_setting.mdwn b/doc/bugs/annex_seems_to_ignore_core.bare_setting.mdwn
deleted file mode 100644
index d5f31ca14..000000000
--- a/doc/bugs/annex_seems_to_ignore_core.bare_setting.mdwn
+++ /dev/null
@@ -1,45 +0,0 @@
-### Please describe the problem.
-I have a transfer repository on a thumbdrive with a FAT file system mounted. It has been working very well for almost a year.
-However, the current annex version overrides the core.bare setting with 'false' and tries to checkout the work tree on my thumbdrive (e.g. on a 'git annex status').
-
-### What version of git-annex are you using? On what operating system?
-
-Broken git-annex versions:
-
- * 5.20131130-gc25be33
- * 5.20131118-gc7e5cde
-
-Working version:
-
- * 4.20131101-gf59a6d1
-
-OS is Linux.
-
-### Please provide any additional information below.
-
-[[!format sh """
-$> git config --list
-core.repositoryformatversion=0
-core.filemode=false
-core.bare=true
-core.symlinks=false
-core.ignorecase=true
-annex.uuid=3fb63b01-40cf-4613-b171-d6cba04028af
-annex.version=4
-annex.crippledfilesystem=true
-annex.direct=true
-"""]]
-
-[[!format sh """
-$> git annex status -d
-[2013-12-05 15:01:30 CET] read: git ["--git-dir=/media/transfer/annex-media.git","--work-tree=/media/transfer","-c","core.bare=false","symbolic-ref","HEAD"]
-[2013-12-05 15:01:30 CET] read: git ["--git-dir=/media/transfer/annex-media.git","--work-tree=/media/transfer","-c","core.bare=false","show-ref","--hash","refs/heads/master"]
-[2013-12-05 15:01:30 CET] call: git ["--git-dir=/media/transfer/annex-media.git","--work-tree=/media/transfer","-c","core.bare=false","update-ref","refs/heads/annex/direct/master","eb688442ea29660e9bc604434a77821b9c0349ad"]
-[2013-12-05 15:01:30 CET] call: git ["--git-dir=/media/transfer/annex-media.git","--work-tree=/media/transfer","-c","core.bare=false","checkout","-q","-B","annex/direct/master"]
-...
-git-annex: git [Param "checkout",Param "-q",Param "-B",Param "annex/direct/master"] failed
-"""]]
-
-> If I understand the followup comment corretcly, it confirms my hypothesis
-> that this is about the bug that has since been fixed. So, [[done]].
-> --[[Joey]]
diff --git a/doc/bugs/annex_seems_to_ignore_core.bare_setting/comment_1_beb674205f06310f6a9060bea35fa3fe._comment b/doc/bugs/annex_seems_to_ignore_core.bare_setting/comment_1_beb674205f06310f6a9060bea35fa3fe._comment
deleted file mode 100644
index 8ee885b5f..000000000
--- a/doc/bugs/annex_seems_to_ignore_core.bare_setting/comment_1_beb674205f06310f6a9060bea35fa3fe._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.64"
- subject="comment 1"
- date="2013-12-05T20:14:54Z"
- content="""
-There was a bug in 5.20131118 through 5.20131127 that caused git-annex init, when run in a bare repository, to set core.bare=false. This would also happen
-if you had a bare repository that had not been initted, and ran some otherwise innocuous command like git-annex status in it (since git-annex can auto-init).
-
-The most recent version you say is broken, 5.20131130-gc25be33, is right at the commit where I fixed that bug. But before I taught git-annex to automatically fix up a repository that it had done this to. You can get that fix in the current daily builds, or you can just run `git config core.bare true` to fix the setting, and version 5.20131130-gc25be33 shouldn't screw it up again.
-"""]]
diff --git a/doc/bugs/annex_seems_to_ignore_core.bare_setting/comment_2_bc5a4be517409f8da2f36299dc4cbbde._comment b/doc/bugs/annex_seems_to_ignore_core.bare_setting/comment_2_bc5a4be517409f8da2f36299dc4cbbde._comment
deleted file mode 100644
index 07aeb141a..000000000
--- a/doc/bugs/annex_seems_to_ignore_core.bare_setting/comment_2_bc5a4be517409f8da2f36299dc4cbbde._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmu416zAYgYzbXVZAe30MiXoOWO4z6nGX8"
- nickname="Johannes"
- subject="comment 2"
- date="2013-12-06T13:18:45Z"
- content="""
-I believe this has been caused by the direct mode guart. I already had core.bare=true but also annex.direct=true which is actually incorrect when you really wanna have bare repository.
-"""]]
diff --git a/doc/bugs/annex_tries_to_start_old_binaray.mdwn b/doc/bugs/annex_tries_to_start_old_binaray.mdwn
new file mode 100644
index 000000000..76f935001
--- /dev/null
+++ b/doc/bugs/annex_tries_to_start_old_binaray.mdwn
@@ -0,0 +1,45 @@
+### Please describe the problem.
+See the logs. git-annex-shell tries to use not existing runshell
+
+
+### What steps will reproduce the problem?
+I am on Debian testing and have, some month ago, tried the tarball distribution.
+I have returned to deb packages later and deleted the tarball installation.
+Seems that there some traces left.
+
+I have tried to find the runshell configuration, but failed to do so.
+
+I have destroyed the repo completely, has not helped.
+
+### What version of git-annex are you using? On what operating system?
+ii git-annex 5.20140831 amd64
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+[2014-09-07 17:15:04 CEST] main: starting assistant version 5.20140831
+[2014-09-07 17:15:04 CEST] Cronner: Consistency check in progress
+/home/<user>/.ssh/git-annex-shell: 4: exec: /home/<user>/git-annex.linux.5.20131213/runshell: not found
+/home/<user>/.ssh/git-annex-shell: 4: exec: /home/<user>/git-annex.linux.5.20131213/runshell: not found
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+/home/<user>/.ssh/git-annex-shell: 4: exec: /home/<user>/git-annex.linux.5.20131213/runshell: not found
+/home/<user>/.ssh/git-annex-shell: 4: exec: /home/<user>/git-annex.linux.5.20131213/runshell: not found
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+/home/<user>/.ssh/git-annex-shell: 4: exec: /home/<user>/git-annex.linux.5.20131213/runshell: not found
+(scanning...) [2014-09-07 17:16:47 CEST] Watcher: Performing startup scan
+/home/<user>/.ssh/git-annex-shell: 4: exec: /home/<user>/git-annex.linux.5.20131213/runshell: not found
+/home/<user>/.ssh/git-annex-shell: 4: exec: /home/<user>/git-annex.linux.5.2013121/
+/home/<user>/.ssh/git-annex-shell: 4: exec: /home/<user>/git-annex.linux.5.20131213/runshell: not found
+/home/<user>/.ssh/git-annex-shell: 4: exec: /home/<user>/git-annex.linux.5.20131213/runshell: not found
+
+# End of transcript or log.
+"""]]
diff --git a/doc/bugs/annex_tries_to_start_old_binaray/comment_1_209c36b737a48a6136eeb85d1f3d01b3._comment b/doc/bugs/annex_tries_to_start_old_binaray/comment_1_209c36b737a48a6136eeb85d1f3d01b3._comment
new file mode 100644
index 000000000..753b9a998
--- /dev/null
+++ b/doc/bugs/annex_tries_to_start_old_binaray/comment_1_209c36b737a48a6136eeb85d1f3d01b3._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.132"
+ subject="comment 1"
+ date="2014-09-11T17:55:28Z"
+ content="""
+~/.ssh/git-annex-shell is a wrapper script that gets installed when you use the standalone build. You can delete it and your problem will be fixed.
+
+It would probably be good if the standalone build came with an uninstallation script.
+"""]]
diff --git a/doc/bugs/another_build_error_in_assistant.mdwn b/doc/bugs/another_build_error_in_assistant.mdwn
deleted file mode 100644
index c21f1ac4e..000000000
--- a/doc/bugs/another_build_error_in_assistant.mdwn
+++ /dev/null
@@ -1,79 +0,0 @@
-What steps will reproduce the problem?
-Just trying to install git-annex last release (20121120) from cabal or from bundled sources
-
-What is the expected output? What do you see instead?
-Build stop like this :
-(doing cabal install or build from the bundle)
-...
-[161 of 284] Compiling Assistant.Alert ( Assistant/Alert.hs, dist/build/git-annex/git-annex-tmp/Assistant/Alert.o )
-[162 of 284] Compiling Assistant.Types.DaemonStatus ( Assistant/Types/DaemonStatus.hs, dist/build/git-annex/git-annex-tmp/Assistant/Types/DaemonStatus.o )
-[163 of 284] Compiling Assistant.Monad ( Assistant/Monad.hs, dist/build/git-annex/git-annex-tmp/Assistant/Monad.o )
-
-Assistant/Monad.hs:86:16:
- Couldn't match expected type `Assistant a'
- with actual type `Reader AssistantData a'
- Expected type: (AssistantData -> a) -> Assistant a
- Actual type: (AssistantData -> a) -> Reader AssistantData a
- In the expression: reader
- In an equation for `getAssistant': getAssistant = reader
-
-Assistant/Monad.hs:93:15:
- Couldn't match expected type `Assistant t0'
- with actual type `Reader r0 a0'
- In the return type of a call of `reader'
- In a stmt of a 'do' block: st <- reader threadState
- In the expression:
- do { st <- reader threadState;
- liftIO $ runThreadState st a }
-
-Assistant/Monad.hs:99:14:
- Couldn't match expected type `Assistant t0'
- with actual type `Reader r0 a0'
- In the return type of a call of `reader'
- In a stmt of a 'do' block: d <- reader id
- In the expression:
- do { d <- reader id;
- liftIO $ io $ runAssistant d a }
-
-Assistant/Monad.hs:105:14:
- Couldn't match expected type `Assistant t0'
- with actual type `Reader r0 a0'
- In the return type of a call of `reader'
- In a stmt of a 'do' block: d <- reader id
- In the expression:
- do { d <- reader id;
- return $ runAssistant d a }
-
-Assistant/Monad.hs:110:14:
- Couldn't match expected type `Assistant t0'
- with actual type `Reader r0 a0'
- In the return type of a call of `reader'
- In a stmt of a 'do' block: d <- reader id
- In the expression:
- do { d <- reader id;
- return $ \ v -> runAssistant d $ a v }
-
-Assistant/Monad.hs:115:14:
- Couldn't match expected type `Assistant t0'
- with actual type `Reader r0 a0'
- In the return type of a call of `reader'
- In a stmt of a 'do' block: d <- reader id
- In the expression:
- do { d <- reader id;
- return $ \ v1 v2 -> runAssistant d (a v1 v2) }
-
-Assistant/Monad.hs:120:12:
- Couldn't match expected type `Assistant a0'
- with actual type `Reader r0 a1'
- In the return type of a call of `reader'
- In the first argument of `(>>=)', namely `reader v'
- In the expression: reader v >>= liftIO . io
-
-
-
-
-What version of git-annex are you using? On what operating system?
-- version 3.20121112
-- Ubuntu 12.04 LTS, 64 bits
-
-> Dup of [[3.20121112_build_fails_on_Ubuntu_12.04]]. --[[Joey]] [[done]]
diff --git a/doc/bugs/archiving_git_repositories.mdwn b/doc/bugs/archiving_git_repositories.mdwn
deleted file mode 100644
index 1753c10ae..000000000
--- a/doc/bugs/archiving_git_repositories.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-In a true dropbox-like fashion, I tried to import my entire homefolder into the git-annex assistant. However, it seems that git-annex breaks on the several git repositories I've got checked out in my "Projects" folder. Is this a possible use case, or should I look at other tools to perform this with?
diff --git a/doc/bugs/archiving_git_repositories/comment_1_51f546a571303118446a9e0b3e6482c9._comment b/doc/bugs/archiving_git_repositories/comment_1_51f546a571303118446a9e0b3e6482c9._comment
deleted file mode 100644
index cec1398fc..000000000
--- a/doc/bugs/archiving_git_repositories/comment_1_51f546a571303118446a9e0b3e6482c9._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.23"
- subject="comment 1"
- date="2012-10-19T21:01:44Z"
- content="""
-The assistant is not ready to manage whole home directories, and the webapp refuses to allow you to do that.
-
-git doesn't allow checking a git repository into a git repository either. I archive old git repos inside one of my annexes by tarring them up.
-"""]]
diff --git a/doc/bugs/aria2c_display_broken_in_git-annex.mdwn b/doc/bugs/aria2c_display_broken_in_git-annex.mdwn
new file mode 100644
index 000000000..c08fdeba0
--- /dev/null
+++ b/doc/bugs/aria2c_display_broken_in_git-annex.mdwn
@@ -0,0 +1,147 @@
+[[!meta title="aria2c output very verbose (non-console mode)"]]
+[[!tag confirmed]]
+
+### Please describe the problem.
+
+Instead of displaying what are probably carriage returns, git-annex strips those out and outputs a *lot* of lines when downloading stuff through aria2c. On small downloads, it's not a big deal, but on large downloads it can flood the screen pretty badly.
+
+### What steps will reproduce the problem?
+
+Just download a torrent with git-annex.
+
+### What version of git-annex are you using? On what operating system?
+
+`5.20150205-gbf9058a` on current debian jessie.
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+anarcat@marcos:iso(master +)$ /srv/downloads.kitenet.net/git-annex/linux/current/git-annex.linux/git-annex addurl http://images.kali.org/kali-linux-1.1.0-amd64.torrent
+(downloading torrent file...)
+--2015-02-09 22:12:51-- http://images.kali.org/kali-linux-1.1.0-amd64.torrent
+Résolution de images.kali.org (images.kali.org)… 50.7.37.130
+Connexion à images.kali.org (images.kali.org)|50.7.37.130|:80… connecté.
+requête HTTP transmise, en attente de la réponse… 200 OK
+Taille : 233152 (228K) [application/octet-stream]
+Sauvegarde en : « ../.git/annex/misctmp/torrent32659 »
+
+100%[=====================================================================================================================================================================================================>] 233 152 610KB/s ds 0,4s
+
+2015-02-09 22:12:52 (610 KB/s) — « ../.git/annex/misctmp/torrent32659 » sauvegardé [233152/233152]
+
+addurl images.kali.org_kali_linux_1.1.0_amd64.torrent/kali_linux_1.1.0_amd64.iso (from bittorrent)
+
+
+02/09 22:12:52 [NOTICE] IPv4 DHT: listening on UDP port 6940
+
+02/09 22:12:52 [ERROR] Erreur d'intégrité détectée. fichier=../.git/annex/misctmp/URL--http&c%%images.kali.org%kali-linux-1.1.0-amd64.torrent/kali-linux-1.1.0-amd64
+
+02/09 22:12:52 [NOTICE] IPv4 BitTorrent: listening on TCP port 6923
+
+02/09 22:12:52 [NOTICE] IPv6 BitTorrent: listening on TCP port 6923
+[#066a28 0B/2.8GiB(0%) CN:0 SD:0 DL:0B]
+[#066a28 0B/2.8GiB(0%) CN:44 SD:0 DL:0B]
+[#066a28 0B/2.8GiB(0%) CN:44 SD:0 DL:0B]
+[#066a28 0B/2.8GiB(0%) CN:44 SD:1 DL:0B]
+[#066a28 0B/2.8GiB(0%) CN:44 SD:2 DL:0B]
+[#066a28 16KiB/2.8GiB(0%) CN:44 SD:2 DL:11KiB ETA:72h44m54s]
+[#066a28 32KiB/2.8GiB(0%) CN:44 SD:4 DL:11KiB ETA:72h55m47s]
+[#066a28 48KiB/2.8GiB(0%) CN:44 SD:5 DL:10KiB ETA:79h7m17s]
+[#066a28 64KiB/2.8GiB(0%) CN:49 SD:6 DL:10KiB ETA:77h27m]
+[#066a28 96KiB/2.8GiB(0%) CN:47 SD:6 DL:13KiB ETA:60h20m41s]
+[#066a28 160KiB/2.8GiB(0%) CN:45 SD:6 DL:20KiB ETA:41h20m43s]
+[#066a28 304KiB/2.8GiB(0%) CN:45 SD:6 DL:33KiB ETA:24h28m29s]
+[#066a28 384KiB/2.8GiB(0%) CN:45 SD:6 DL:38KiB ETA:21h34m21s]
+[#066a28 416KiB/2.8GiB(0%) CN:44 SD:6 DL:37KiB ETA:21h54m17s]
+[#066a28 512KiB/2.8GiB(0%) CN:44 SD:6 DL:42KiB ETA:19h26m19s]
+[#066a28 544KiB/2.8GiB(0%) CN:44 SD:6 DL:41KiB ETA:19h48m32s]
+[#066a28 624KiB/2.8GiB(0%) CN:44 SD:6 DL:44KiB ETA:18h38m8s]
+[#066a28 720KiB/2.8GiB(0%) CN:44 SD:6 DL:52KiB ETA:15h42m33s]
+[#066a28 736KiB/2.8GiB(0%) CN:44 SD:6 DL:50KiB ETA:16h30m42s]
+[#066a28 768KiB/2.8GiB(0%) CN:44 SD:7 DL:52KiB ETA:15h42m44s]
+[#066a28 896KiB/2.8GiB(0%) CN:44 SD:7 DL:57KiB ETA:14h20m4s]
+[#066a28 1.0MiB/2.8GiB(0%) CN:44 SD:7 DL:69KiB ETA:11h58m54s]
+[#066a28 1.1MiB/2.8GiB(0%) CN:44 SD:7 DL:79KiB ETA:10h21m22s]
+[#066a28 1.2MiB/2.8GiB(0%) CN:44 SD:7 DL:87KiB ETA:9h24m15s]
+[#066a28 1.4MiB/2.8GiB(0%) CN:44 SD:6 DL:90KiB ETA:9h8m26s]
+[#066a28 1.4MiB/2.8GiB(0%) CN:44 SD:6 DL:88KiB ETA:9h23m40s]
+[#066a28 1.5MiB/2.8GiB(0%) CN:44 SD:6 DL:85KiB ETA:9h41m21s]
+[#066a28 1.6MiB/2.8GiB(0%) CN:44 SD:6 DL:89KiB ETA:9h12m17s]
+[#066a28 1.6MiB/2.8GiB(0%) CN:44 SD:6 DL:86KiB ETA:9h32m9s]
+[#066a28 1.7MiB/2.8GiB(0%) CN:44 SD:6 DL:85KiB UL:451KiB(288KiB) ETA:9h37m58s]
+[#066a28 1.8MiB/2.8GiB(0%) CN:44 SD:6 DL:89KiB UL:168KiB(288KiB) ETA:9h16m53s]
+[#066a28 1.8MiB/2.8GiB(0%) CN:44 SD:6 DL:84KiB UL:105KiB(288KiB) ETA:9h47m6s]
+[#066a28 1.8MiB/2.8GiB(0%) CN:44 SD:6 DL:89KiB UL:76KiB(288KiB) ETA:9h16m44s]
+[#066a28 1.9MiB/2.8GiB(0%) CN:44 SD:7 DL:85KiB UL:59KiB(288KiB) ETA:9h36m53s]
+[#066a28 1.9MiB/2.8GiB(0%) CN:44 SD:7 DL:79KiB UL:49KiB(288KiB) ETA:10h24m56s]
+[#066a28 2.1MiB/2.8GiB(0%) CN:44 SD:7 DL:80KiB UL:42KiB(288KiB) ETA:10h15m19s]
+[#066a28 2.2MiB/2.8GiB(0%) CN:44 SD:7 DL:75KiB UL:68KiB(544KiB) ETA:10h56m]
+[#066a28 2.3MiB/2.8GiB(0%) CN:44 SD:7 DL:75KiB UL:60KiB(544KiB) ETA:10h54m12s]
+[#066a28 2.4MiB/2.8GiB(0%) CN:44 SD:7 DL:70KiB UL:54KiB(544KiB) ETA:11h39m51s]
+[#066a28 2.4MiB/2.8GiB(0%) CN:44 SD:7 DL:71KiB UL:49KiB(544KiB) ETA:11h29m45s]
+[#066a28 2.6MiB/2.8GiB(0%) CN:44 SD:7 DL:74KiB UL:44KiB(544KiB) ETA:11h1m53s]
+[#066a28 2.6MiB/2.8GiB(0%) CN:44 SD:7 DL:73KiB UL:41KiB(544KiB) ETA:11h14m27s]
+[#066a28 2.7MiB/2.8GiB(0%) CN:44 SD:7 DL:76KiB UL:38KiB(544KiB) ETA:10h52m4s]
+[#066a28 2.7MiB/2.8GiB(0%) CN:44 SD:7 DL:73KiB UL:19KiB(544KiB) ETA:11h18m54s]
+[#066a28 2.8MiB/2.8GiB(0%) CN:44 SD:7 DL:78KiB UL:27KiB(544KiB) ETA:10h31m16s]
+[#066a28 2.9MiB/2.8GiB(0%) CN:44 SD:7 DL:74KiB UL:25KiB(544KiB) ETA:11h7m40s]
+[#066a28 2.9MiB/2.8GiB(0%) CN:44 SD:7 DL:72KiB UL:22KiB(544KiB) ETA:11h22m19s]
+[#066a28 3.0MiB/2.8GiB(0%) CN:44 SD:7 DL:77KiB UL:41KiB(800KiB) ETA:10h42m53s]
+[#066a28 3.0MiB/2.8GiB(0%) CN:44 SD:7 DL:79KiB UL:38KiB(800KiB) ETA:10h24m56s]
+[#066a28 3.2MiB/2.8GiB(0%) CN:44 SD:7 DL:82KiB UL:35KiB(800KiB) ETA:10h4m14s]
+[#066a28 3.2MiB/2.8GiB(0%) CN:44 SD:7 DL:76KiB UL:72KiB(800KiB) ETA:10h44m14s]
+[#066a28 3.2MiB/2.8GiB(0%) CN:44 SD:7 DL:69KiB UL:113KiB(1.0MiB) ETA:11h48m20s]
+[#066a28 3.3MiB/2.8GiB(0%) CN:44 SD:8 DL:69KiB UL:92KiB(1.0MiB) ETA:11h54m37s]
+[#066a28 3.4MiB/2.8GiB(0%) CN:44 SD:8 DL:73KiB UL:78KiB(1.0MiB) ETA:11h17m38s]
+[#066a28 3.6MiB/2.8GiB(0%) CN:44 SD:8 DL:78KiB UL:67KiB(1.0MiB) ETA:10h27m51s]
+[#066a28 3.7MiB/2.8GiB(0%) CN:44 SD:9 DL:76KiB UL:59KiB(1.0MiB) ETA:10h46m10s]
+[#066a28 3.7MiB/2.8GiB(0%) CN:44 SD:9 DL:72KiB UL:53KiB(1.0MiB) ETA:11h21m24s]
+[#066a28 3.8MiB/2.8GiB(0%) CN:44 SD:10 DL:75KiB UL:72KiB(1.2MiB) ETA:10h55m4s]
+[#066a28 3.9MiB/2.8GiB(0%) CN:44 SD:10 DL:74KiB UL:66KiB(1.2MiB) ETA:11h9m6s]
+[#066a28 4.0MiB/2.8GiB(0%) CN:44 SD:10 DL:80KiB UL:62KiB(1.3MiB) ETA:10h12m8s]
+[#066a28 4.1MiB/2.8GiB(0%) CN:44 SD:10 DL:84KiB UL:58KiB(1.3MiB) ETA:9h45m9s]
+[#066a28 4.2MiB/2.8GiB(0%) CN:44 SD:9 DL:88KiB UL:54KiB(1.3MiB) ETA:9h17m20s]
+[#066a28 4.2MiB/2.8GiB(0%) CN:44 SD:9 DL:83KiB UL:46KiB(1.3MiB) ETA:9h53m47s]
+[#066a28 4.3MiB/2.8GiB(0%) CN:44 SD:8 DL:75KiB UL:42KiB(1.3MiB) ETA:10h55m25s]
+[#066a28 4.4MiB/2.8GiB(0%) CN:44 SD:8 DL:82KiB UL:39KiB(1.3MiB) ETA:10h3m52s]
+[#066a28 4.4MiB/2.8GiB(0%) CN:44 SD:7 DL:80KiB UL:36KiB(1.3MiB) ETA:10h18m43s]
+[#066a28 4.4MiB/2.8GiB(0%) CN:44 SD:7 DL:76KiB UL:53KiB(1.5MiB) ETA:10h49m36s]
+[#066a28 4.4MiB/2.8GiB(0%) CN:44 SD:7 DL:66KiB UL:48KiB(1.5MiB) ETA:12h22m22s]
+[#066a28 4.5MiB/2.8GiB(0%) CN:44 SD:7 DL:57KiB UL:43KiB(1.5MiB) ETA:14h27m44s]
+[#066a28 4.5MiB/2.8GiB(0%) CN:44 SD:7 DL:55KiB UL:39KiB(1.5MiB) ETA:14h52m9s]
+[#066a28 4.5MiB/2.8GiB(0%) CN:44 SD:8 DL:52KiB UL:37KiB(1.5MiB) ETA:15h48m10s]
+[#066a28 4.6MiB/2.8GiB(0%) CN:44 SD:8 DL:50KiB UL:21KiB(1.5MiB) ETA:16h13m54s]
+[#066a28 4.6MiB/2.8GiB(0%) CN:44 SD:9 DL:42KiB UL:30KiB(1.5MiB) ETA:19h24m47s]
+[#066a28 4.6MiB/2.8GiB(0%) CN:44 SD:9 DL:41KiB UL:53KiB(1.8MiB) ETA:19h44m57s]
+[#066a28 4.7MiB/2.8GiB(0%) CN:44 SD:9 DL:32KiB UL:48KiB(1.8MiB) ETA:25h20m56s]
+[#066a28 4.7MiB/2.8GiB(0%) CN:44 SD:10 DL:38KiB UL:44KiB(1.8MiB) ETA:21h24m33s]
+[#066a28 4.8MiB/2.8GiB(0%) CN:44 SD:10 DL:34KiB UL:40KiB(1.8MiB) ETA:23h45m37s]
+[#066a28 4.8MiB/2.8GiB(0%) CN:48 SD:10 DL:31KiB UL:56KiB(2.0MiB) ETA:26h11m56s]
+[#066a28 4.8MiB/2.8GiB(0%) CN:46 SD:10 DL:30KiB UL:52KiB(2.0MiB) ETA:27h15m40s]
+[#066a28 4.9MiB/2.8GiB(0%) CN:44 SD:10 DL:32KiB UL:75KiB(2.0MiB) ETA:25h13m45s]
+[#066a28 4.9MiB/2.8GiB(0%) CN:44 SD:10 DL:36KiB UL:66KiB(2.0MiB) ETA:22h32m9s]
+[#066a28 4.9MiB/2.8GiB(0%) CN:44 SD:10 DL:35KiB UL:61KiB(2.0MiB) ETA:23h9m10s]
+[#066a28 5.0MiB/2.8GiB(0%) CN:44 SD:9 DL:36KiB UL:80KiB(2.3MiB) ETA:22h43m56s]
+[#066a28 5.0MiB/2.8GiB(0%) CN:44 SD:9 DL:35KiB UL:69KiB(2.3MiB) ETA:23h6m29s]
+[#066a28 5.1MiB/2.8GiB(0%) CN:44 SD:10 DL:37KiB UL:62KiB(2.3MiB) ETA:21h58m37s]
+[#066a28 5.1MiB/2.8GiB(0%) CN:44 SD:10 DL:38KiB UL:58KiB(2.3MiB) ETA:21h19m1s]
+[#066a28 5.1MiB/2.8GiB(0%) CN:49 SD:12 DL:35KiB UL:55KiB(2.3MiB) ETA:23h3s]
+[#066a28 5.2MiB/2.8GiB(0%) CN:48 SD:11 DL:38KiB UL:48KiB(2.3MiB) ETA:21h41m12s]
+[#066a28 5.2MiB/2.8GiB(0%) CN:45 SD:11 DL:32KiB UL:64KiB(2.6MiB) ETA:25h8m51s]
+[#066a28 5.2MiB/2.8GiB(0%) CN:44 SD:12 DL:32KiB UL:59KiB(2.6MiB) ETA:25h17m48s]
+^C
+anarcat@marcos:iso(master +%)$ aria2c kali-linux-1.1.0-amd64.torrent
+
+02/09 22:17:16 [NOTICE] IPv4 DHT: listening on UDP port 6963
+
+02/09 22:17:16 [NOTICE] IPv4 BitTorrent: listening on TCP port 6950
+
+02/09 22:17:16 [NOTICE] IPv6 BitTorrent: listening on TCP port 6950
+[#51d0f6 5.2MiB/2.8GiB(0%) CN:44 SD:12 DL:241KiB ETA:3h25m7s]
+
+# End of transcript or log.
+"""]]
+
+Could be caused by [[bittorrent_special_url_double-encoding]]? --[[anarcat]]
diff --git a/doc/bugs/aria2c_display_broken_in_git-annex/comment_1_770e1d657bba2a3f5782eac2e8bdca57._comment b/doc/bugs/aria2c_display_broken_in_git-annex/comment_1_770e1d657bba2a3f5782eac2e8bdca57._comment
new file mode 100644
index 000000000..2fe9bf475
--- /dev/null
+++ b/doc/bugs/aria2c_display_broken_in_git-annex/comment_1_770e1d657bba2a3f5782eac2e8bdca57._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-10T16:11:09Z"
+ content="""
+This is because aria2c detects it's not outputting to a terminal, so it
+stops using \r for progress displays. You can get the same effect by piping
+aria2c to less. There does not seem to be any switch to force console-style
+output.
+
+The only solution would be the complexity of making git-annex use a pty
+internally, or just not showing aria2c progress output (or not intercepting
+it for metering).
+"""]]
diff --git a/doc/bugs/aria2c_display_broken_in_git-annex/comment_2_2f26037c5a67f6f8928204ab0b7b7965._comment b/doc/bugs/aria2c_display_broken_in_git-annex/comment_2_2f26037c5a67f6f8928204ab0b7b7965._comment
new file mode 100644
index 000000000..4f12f3681
--- /dev/null
+++ b/doc/bugs/aria2c_display_broken_in_git-annex/comment_2_2f26037c5a67f6f8928204ab0b7b7965._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="anarcat"
+ subject="comment 2"
+ date="2015-02-10T17:22:08Z"
+ content="""
+maybe adding `\r` chars ourselves would fix it?
+"""]]
diff --git a/doc/bugs/assistant___40__OS_X_Lion__41___-___34__too_many_open_files__34___error.mdwn b/doc/bugs/assistant___40__OS_X_Lion__41___-___34__too_many_open_files__34___error.mdwn
deleted file mode 100644
index 1b3879e63..000000000
--- a/doc/bugs/assistant___40__OS_X_Lion__41___-___34__too_many_open_files__34___error.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-What steps will reproduce the problem?
-
-I downloaded the most recent OS X Lion build of the Git Annex application bundle and ran it.
-
-I wanted to test the direct mode, as my existing annex is in the old style.
-So I set up a new (direct) repository, then added an SSH remote, then dropped a large number of files (170) in there.
-
-
-What is the expected output? What do you see instead?
-
-Expected: the files will be added to the repository in direct mode and stored on the ssh remote.
-Instead: the following error appeared in the webapp:
-
-Committer crashed: /Users/ed/directannex/.git/annex/tmp/: openTempFile: resource exhausted (Too many open files)
-
-nothing seems to have been synced to the remote -- I gather this from the fact that the annex directory in the remote git repo is only 70K instead of several hundred megs.
-
-
-What version of git-annex are you using? On what operating system?
-
- Version: 3.20130102 on OS X lion, using the version bundled as an application bundle.
-
-
-Please provide any additional information below.
-
-I imagine I could avoid this error by using the "ulimit -n" command to increase number of files in a shell session and then running assistant manually, so this is really only a bug report about the bundled application.
-
-> This seems to be caused by Command.Add.lockdown not closing the
-> temporary file handle, so when called in a mapM by the committer
-> thread when there are a lot of files, it could build up a lot of
-> open handles before later GC closes them. Added a manual close,
-> so I think this is [[done]]. --[[Joey]]
diff --git a/doc/bugs/assistant___40__OS_X_Lion__41___-___34__too_many_open_files__34___error/comment_1_9904c30a4c24a699d71e90ce5e9b89cf._comment b/doc/bugs/assistant___40__OS_X_Lion__41___-___34__too_many_open_files__34___error/comment_1_9904c30a4c24a699d71e90ce5e9b89cf._comment
deleted file mode 100644
index 4db7bf9a8..000000000
--- a/doc/bugs/assistant___40__OS_X_Lion__41___-___34__too_many_open_files__34___error/comment_1_9904c30a4c24a699d71e90ce5e9b89cf._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="99.54.57.201"
- subject="comment 1"
- date="2013-01-05T00:32:44Z"
- content="""
-After I painstakingly killed off the assistant's processes (I didn't see a way to stop it in the web interface, and issuing \"git annex assistant --stop\" did not stop it), and restarted the assistant, it synced successfully, so the error seems to have been transient.
-"""]]
diff --git a/doc/bugs/assistant_always_assumes_port_22__63__.mdwn b/doc/bugs/assistant_always_assumes_port_22__63__.mdwn
deleted file mode 100644
index 27896acd4..000000000
--- a/doc/bugs/assistant_always_assumes_port_22__63__.mdwn
+++ /dev/null
@@ -1,39 +0,0 @@
-### Please describe the problem.
-git-annex assistant always assumes port 22 (I use a different port), despite my editing .ssh/config to correct this.
-
-Also, assistant doesn't give me a port option like it did in the intro screencast.
-
-### What steps will reproduce the problem?
-Using my version of git-annex, I assume.
-
-### What version of git-annex are you using? On what operating system?
-git-annex version: 3.20121112ubuntu2
-
-xubuntu 13.04
-
-### Please provide any additional information below.
-I don't see any .git/annex/daemon.log.
-
-I click the "remote server" link, sign in just fine [note below]. I click "Use a git repository on the server" (but "Use an encrypted rsync repository on the server" also does this), and eventually I get an error:
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-Failed to make repository
-
-Something went wrong setting up the repository on the remote server.
-
-Transcript: ssh: connect to host <host> port 22: Connection timed out
-
-# End of transcript or log.
-"""]]
-
-> Your version of git-annex is too old.
-> Support for setting the port was added in version 3.20121211 --
-> about a month after the version you have installed
-> (ah, the period where everything was 11 and 12.. I don't miss it!)
->
-> I don't recommend using such an old version of the assistant,
-> *massive* numbers of bugs have been fixed since then. Upgrade to
-> the Ubuntu PPA. [[done]] --[[Joey]]
-
-note: if I use "git-annex webapp" in the terminal it works fine; if I use xfce's "internet -> git annex" menu, it errors trying to use ssh_askpass, which I don't have. I'm going to make a new thread about this.
diff --git a/doc/bugs/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address/comment_1_1650539846521ae11837e4ac73348af6._comment b/doc/bugs/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address/comment_1_1650539846521ae11837e4ac73348af6._comment
deleted file mode 100644
index 859810a44..000000000
--- a/doc/bugs/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address/comment_1_1650539846521ae11837e4ac73348af6._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="99.54.57.201"
- subject="comment 1"
- date="2013-01-06T05:23:25Z"
- content="""
-Fair enough. :) Power user solution to power user whine!
-
-"""]]
diff --git a/doc/bugs/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address/comment_2_b91415e4ee74eb12bc6e6faddd00af6e._comment b/doc/bugs/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address/comment_2_b91415e4ee74eb12bc6e6faddd00af6e._comment
deleted file mode 100644
index d910e016e..000000000
--- a/doc/bugs/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address/comment_2_b91415e4ee74eb12bc6e6faddd00af6e._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmcYryijvlF8bJvM_eZNSrUPEkMlxMDGTQ"
- nickname="Thiago"
- subject="Also relevant for machines behind pagekite.net"
- date="2013-02-19T20:00:30Z"
- content="""
-I'm running into this problem too. I need to use an ssh alias because machines behind pagekite have to be accessed using an HTTP connect proxy, which is done with the ProxyCommand option in the ssh config file. I'm mentioning this because IMHO it's much less of a power user problem than you seem to think.
-
-In fact, I'd argue that a power user is more likely to have access to a machine with a fixed IP address or FQDN. It is people which fall more into the \"mere mortal\" side of the spectrum that need to resort to ssh aliases to access machines behind NAT or dynamic IPs. :-)
-
-All that to say that it would be nice if this usecase was explicitly supported in the UI (maybe a checkbox saying \"this is an ssh alias\", or a textfield to enter a proxy through which the connection has to be routed).
-"""]]
diff --git a/doc/bugs/assistant_does_not_allow_adding_an_existing_repo.mdwn b/doc/bugs/assistant_does_not_allow_adding_an_existing_repo.mdwn
index 8a6218c04..8d2c3c996 100644
--- a/doc/bugs/assistant_does_not_allow_adding_an_existing_repo.mdwn
+++ b/doc/bugs/assistant_does_not_allow_adding_an_existing_repo.mdwn
@@ -6,3 +6,5 @@ Mac OS 10.7 version 2013-09-10
[[!meta title="assistant does not interoperate with gitolite when adding a repository"]]
[2013-09-13 17:00:55 CEST] chat: ssh ["-p","22","git@example.org","sh -c 'mkdir -p '\"'\"'my-annex.git'\"'\"'&&cd '\"'\"'my-annex.git'\"'\"'&&if [ ! -d .git ]; then git init --bare --shared; fi&&git annex init'"]
+
+[[!tag confirmed]]
diff --git a/doc/bugs/assistant_does_not_always_use_repo_cost_info_when_queueing_downloads.mdwn b/doc/bugs/assistant_does_not_always_use_repo_cost_info_when_queueing_downloads.mdwn
index c00c3448d..d7002a2f7 100644
--- a/doc/bugs/assistant_does_not_always_use_repo_cost_info_when_queueing_downloads.mdwn
+++ b/doc/bugs/assistant_does_not_always_use_repo_cost_info_when_queueing_downloads.mdwn
@@ -14,3 +14,5 @@ temporarily.
[[!tag /design/assistant]]
--[[Joey]]
+
+[[!tag confirmed]]
diff --git a/doc/bugs/assistant_does_not_list_remote___39__origin__39__.mdwn b/doc/bugs/assistant_does_not_list_remote___39__origin__39__.mdwn
deleted file mode 100644
index 2266c5dc4..000000000
--- a/doc/bugs/assistant_does_not_list_remote___39__origin__39__.mdwn
+++ /dev/null
@@ -1,26 +0,0 @@
-What steps will reproduce the problem?
-
-1. create a git annex repo on a server
-2. clone it on workstation
-3. open the webapp on the workstation
-
-
-What is the expected output? What do you see instead?
-
-The webapp should show the 'origin' remote and the assistant should ensure syncing.
-Instead the remote does not show up in the webapp.
-I checked with `git annex status` and the remote is there.
-
-What version of git-annex are you using? On what operating system?
-
-3.20130207 on latest Ubuntu
-
-Please provide any additional information below.
-
-I tried both with direct and indirect mode for the local annex repo.
-
-I am sorry if I am missing the point. I checked the docs, however without much success.
-
-[[!tag /design/assistant]]
-
-[[done]]
diff --git a/doc/bugs/assistant_does_not_list_remote___39__origin__39__/comment_1_ffa008240c61b50396aa92f467731db6._comment b/doc/bugs/assistant_does_not_list_remote___39__origin__39__/comment_1_ffa008240c61b50396aa92f467731db6._comment
deleted file mode 100644
index 8f6cb5317..000000000
--- a/doc/bugs/assistant_does_not_list_remote___39__origin__39__/comment_1_ffa008240c61b50396aa92f467731db6._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmaMxYm33s0H-nxBo5uzYUzdIECoyR8Ug8"
- nickname="Stefan"
- subject="an update"
- date="2013-02-13T20:33:22Z"
- content="""
-The remotes were not listed because git-annex-shell was not working (found in the path, however necessary *.so files were not found).
-
-Now all remotes are listed. `.git/config` is ok, with the uuid listed. `git annex status` returns all.
-
-However sync is not working. The webapp on the workstation states that it has synced with the server, however `ls` on the server returns empty. The server is set as archive, the workstation as client.
-"""]]
diff --git a/doc/bugs/assistant_does_not_list_remote___39__origin__39__/comment_2_a53f80090bc2a0f32b8d8307cb24b563._comment b/doc/bugs/assistant_does_not_list_remote___39__origin__39__/comment_2_a53f80090bc2a0f32b8d8307cb24b563._comment
deleted file mode 100644
index 5915fd844..000000000
--- a/doc/bugs/assistant_does_not_list_remote___39__origin__39__/comment_2_a53f80090bc2a0f32b8d8307cb24b563._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.210"
- subject="comment 2"
- date="2013-02-26T19:51:47Z"
- content="""
-You are probably not running the assistant on the server. This is fine, but it means that git pushes made to the server when files are added to the client are not merged into its working copy. Which is why you don't see the files. Running `git annex sync` on the server should make all the files that have been sent to it show up.
-"""]]
diff --git a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add.mdwn b/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add.mdwn
deleted file mode 100644
index 6539dc9e8..000000000
--- a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add.mdwn
+++ /dev/null
@@ -1,46 +0,0 @@
-What steps will reproduce the problem?
-
-Unable to reproduce as it seems to happen randomly, to very few files (4/250).
-
-What is the expected output? What do you see instead?
-
-I expect to see the assistant warn if it attempts to add a file which fails to add to the annex.
-Instead, I see no output from the assistant, but lines like this in the log.
-
-daemon.log.2:add Indie Game Stand/Deadly 30/Deadly30_MAC.zip (checksum...) failed
-daemon.log.2:add Indie Game Stand/Wyv and Keep/xnafx40_redist.msi (checksum...) failed
-daemon.log.2:add Indie Game Stand/Blueberry Garden/Blueberry_Garden_1.1.zip (checksum...) failed
-daemon.log.2:add Indie Game Stand/Flatspace Bundle/fsmusicpack3setup.exe (checksum...) failed
-
-There is no reason given for the failure in the log file. The assistant also never tries to add them again in normal running (but did add them when it was started again after a reboot).
-
-What version of git-annex are you using? On what operating system?
-
-git-annex version: 4.20130314
-OS: Arch Linux
-
-Please provide any additional information below.
-
-The assistant in this case is being used as nothing more than a way for me to see which files have been added (--verbose, --foreground and --debug with 'watch' outputs nothing..). No remotes or anything like that.
-
-> I have made the assistant re-queue any file that it fails to add,
-> so it will retry it later. Typically within a few seconds. [[done]]
->
-> I have only been able to think of one scenario in which this could
-> happen. It's pretty unusual:
->
-> * Something writes to a file, and closes it.
-> * Assistant sees file has no writers, and locks it down in preparation
-> to add it.
-> * Something then re-opens the file to write to it some more.
-> Note that it would seem to need to bypass permissions that prevent
-> the file from being written to in order to do this. It makes a change
-> to the file.
-> * Assistant is checksumming file, reaches end, and detects it has been
-> tampered with and gives up.
->
-> I would still like more information about circumstances that
-> cause this to happen, because while a possible scenario, the
-> above is too weird to believe anyone could run into it.
->
-> --[[Joey]]
diff --git a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_1_13b2f93b7d09c8fd6c22829a0dc6428b._comment b/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_1_13b2f93b7d09c8fd6c22829a0dc6428b._comment
deleted file mode 100644
index 02db48da7..000000000
--- a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_1_13b2f93b7d09c8fd6c22829a0dc6428b._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-04-06T16:34:00Z"
- content="""
-The assistant runs a daily sanity checker job which will clean up files like these. (`git annex watch` does not, however).
-
-I think the main reason add could fail is if a file gets modified while it's in the process of being added. It could retry right away, although it needs to do it in a way that does not loop if the file continually fails to be added.
-"""]]
diff --git a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_2_94e46bc0044b8a91a9fd51058825aa8f._comment b/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_2_94e46bc0044b8a91a9fd51058825aa8f._comment
deleted file mode 100644
index a8a5aad9a..000000000
--- a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_2_94e46bc0044b8a91a9fd51058825aa8f._comment
+++ /dev/null
@@ -1,60 +0,0 @@
-[[!comment format=mdwn
- username="Xyem"
- ip="87.194.19.134"
- subject="comment 2"
- date="2013-04-06T21:50:18Z"
- content="""
-The sanity check never added the failed files:
-
- daemon.log.2:add Indie Game Stand/Deadly 30/Deadly30_WINDOWS.zip (checksum...) [2013-03-24 20:44:10 GMT] Committer: Committing changes to git
- daemon.log.2:add Indie Game Stand/Deadly 30/Deadly30_LINUX.zip (checksum...) [2013-03-24 20:44:34 GMT] Committer: Committing changes to git
- daemon.log.2:add Indie Game Stand/Deadly 30/Deadly30_MAC.zip (checksum...) failed
- daemon.log.2:add Indie Game Stand/Deadly 30/GonzoSSM_YouTube_Videos.zip (checksum...) [2013-03-24 20:51:05 GMT] Committer: Committing changes to git
-
- daemon.log.2:[2013-03-25 14:48:01 GMT] SanityCheckerDaily: Running daily sanity check to make sure everything is ok.
-
- daemon.log.2:add Indie Game Stand/Wyv and Keep/Wyvs_Cartographer.zip (checksum...) [2013-03-25 17:46:19 GMT] Committer: Committing changes to git
- daemon.log.2:add Indie Game Stand/Wyv and Keep/WnK_Level_Pack.zip (checksum...) [2013-03-25 17:46:20 GMT] Committer: Committing changes to git
- daemon.log.2:add Indie Game Stand/Wyv and Keep/SmashBox_OST_Mp3.zip (checksum...) [2013-03-25 17:56:37 GMT] Committer: Committing changes to git
- daemon.log.2:add Indie Game Stand/Wyv and Keep/xnafx40_redist.msi (checksum...) failed
- daemon.log.2:add Indie Game Stand/Wyv and Keep/WnK091_Win.zip (checksum...) [2013-03-25 18:04:53 GMT] Committer: Committing changes to git
- daemon.log.2:add Indie Game Stand/Wyv and Keep/wyv_and_keep_OST_MP3.zip (checksum...) [2013-03-25 18:08:20 GMT] Committer: Committing changes to git
- daemon.log.2:add Indie Game Stand/Wyv and Keep/SmashBox_OST_FLAC.zip (checksum...) [2013-03-25 18:08:43 GMT] Committer: Committing changes to git
- daemon.log.2:add Indie Game Stand/Wyv and Keep/WnK0907_OSX.zip (checksum...) [2013-03-25 18:10:25 GMT] Committer: Committing changes to git
- daemon.log.2:add Indie Game Stand/Wyv and Keep/dotNetFx40_Full_x86_x64.exe (checksum...) [2013-03-25 18:10:39 GMT] Committer: Committing changes to git
- daemon.log.2:add Indie Game Stand/Wyv and Keep/wyv_and_keep_OST_FLAC.zip (checksum...) [2013-03-25 18:45:39 GMT] Committer: Committing changes to git
- daemon.log.2:add Indie Game Stand/Blueberry Garden/BlueBerryGarden_Sheet_Music.zip (checksum...) [2013-03-25 19:08:04 GMT] Committer: Committing changes to git
- daemon.log.2:add Indie Game Stand/Blueberry Garden/dotNetFx45_Full_setup.exe (checksum...) [2013-03-25 19:08:18 GMT] Committer: Committing changes to git
- daemon.log.2:add Indie Game Stand/Blueberry Garden/Eriks_Prototypes.zip (checksum...) [2013-03-25 19:08:25 GMT] Committer: Committing changes to git
- daemon.log.2:add Indie Game Stand/Blueberry Garden/xnafx40_redist.msi (checksum...) [2013-03-25 19:09:05 GMT] Committer: Committing changes to git
-
- daemon.log.2:add Indie Game Stand/Blueberry Garden/Blueberry_Garden_1.1.zip (checksum...) failed
- daemon.log.2:add Indie Game Stand/Blueberry Garden/daduk_Et_Apres.zip (checksum...) [2013-03-25 19:09:53 GMT] Committer: Committing changes to git
-
- daemon.log.2:add Indie Game Stand/Flatspace Bundle/fsmusicpack3setup.exe (checksum...) failed
- daemon.log.2:add Indie Game Stand/Flatspace Bundle/flatspaceiifullsetup.exe (checksum...) [2013-03-25 20:45:17 GMT] Committer: Committing changes to git
- daemon.log.2:add Indie Game Stand/Flatspace Bundle/flatspacefullsetup.exe (checksum...) [2013-03-25 20:45:24 GMT] Committer: Committing changes to git
-
- daemon.log.2:[2013-03-26 14:48:04 GMT] SanityCheckerDaily: Running daily sanity check to make sure everything is ok.
- daemon.log.2:[2013-03-27 14:48:08 GMT] SanityCheckerDaily: Running daily sanity check to make sure everything is ok.
- daemon.log.2:[2013-03-28 14:48:12 GMT] SanityCheckerDaily: Running daily sanity check to make sure everything is ok.
- daemon.log.2:[2013-03-29 14:48:15 GMT] SanityCheckerDaily: Running daily sanity check to make sure everything is ok.
- daemon.log.2:[2013-03-30 14:48:18 GMT] SanityCheckerDaily: Running daily sanity check to make sure everything is ok.
- daemon.log.2:[2013-03-31 15:48:22 BST] SanityCheckerDaily: Running daily sanity check to make sure everything is ok.
- daemon.log.2:[2013-04-01 15:48:25 BST] SanityCheckerDaily: Running daily sanity check to make sure everything is ok.
- daemon.log.2:[2013-04-02 15:48:29 BST] SanityCheckerDaily: Running daily sanity check to make sure everything is ok.
- daemon.log.2:[2013-04-03 15:48:33 BST] SanityCheckerDaily: Running daily sanity check to make sure everything is ok.
- daemon.log.2:[2013-04-04 15:48:36 BST] SanityCheckerDaily: Running daily sanity check to make sure everything is ok.
- daemon.log.2:[2013-04-05 15:48:40 BST] SanityCheckerDaily: Running daily sanity check to make sure everything is ok.
-
- daemon.log.1:add Indie Game Stand/Blueberry Garden/Blueberry_Garden_1.1.zip (checksum...) [2013-04-05 21:21:15 BST] Committer: Adding Deadly30_MAC.zip
- daemon.log.1:add Indie Game Stand/Deadly 30/Deadly30_MAC.zip (checksum...) [2013-04-05 21:21:16 BST] Committer: Adding fsmusicpa..setup.exe
- daemon.log.1:add Indie Game Stand/Flatspace Bundle/fsmusicpack3setup.exe (checksum...) [2013-04-05 21:21:16 BST] Committer: Adding xnafx40_redist.msi
- daemon.log.1:add Indie Game Stand/Wyv and Keep/xnafx40_redist.msi (checksum...) [2013-04-05 21:21:16 BST] Committer: Committing changes to git
-
-I just managed to trigger the issue again. The file has been chmod-ed to 440 but not added to the annex. The log, once again, shows that the checksum failed.
-
- add CG Cookie/Modeling a Female Human Head/couse_female_head_05.zip (checksum...) failed
-
-The files are being downloaded directly into the directory with the DownThemAll. This downloads the file in a temporary name ending in .dtapart, which is ignored through \".gitignore\". I would have thought that there was nothing stopping the file from being checksummed as git-annex would only see it after the rename, where the file is no longer being written to by anything.
-"""]]
diff --git a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_3_10a38bdbf31dd4071e4bc4ac746d9c56._comment b/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_3_10a38bdbf31dd4071e4bc4ac746d9c56._comment
deleted file mode 100644
index 3ad62a251..000000000
--- a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_3_10a38bdbf31dd4071e4bc4ac746d9c56._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-04-08T17:17:54Z"
- content="""
-The assistant does not yet support `.gitignore`
-
-Does `git annex add` work on these files?
-
-"""]]
diff --git a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_4_b8fdf502c7e80aece5a9544a2078c85c._comment b/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_4_b8fdf502c7e80aece5a9544a2078c85c._comment
deleted file mode 100644
index 33b050070..000000000
--- a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_4_b8fdf502c7e80aece5a9544a2078c85c._comment
+++ /dev/null
@@ -1,36 +0,0 @@
-[[!comment format=mdwn
- username="Xyem"
- ip="87.194.19.134"
- subject="comment 4"
- date="2013-04-08T18:25:48Z"
- content="""
-Interesting that you say .gitignore doesn't work with assistant because.. it definitely does.
-
- $ git init /tmp/annex-test
- $ cd /tmp/annex-test
- $ git annex init
- $ echo \"file.test\" > .gitignore
- $ git annex assistant
- $ echo \"test1\" > file.test
- $ echo \"test2\" > file2.test
-
-yields this log file:
-
- (scanning...) [2013-04-08 19:17:03 BST] Watcher: Performing startup scan
- (started...)
- [2013-04-08 19:17:10 BST] Committer: Adding file2.test
- add file2.test (checksum...) [2013-04-08 19:17:10 BST] Committer: Committing changes to git
- (Recording state in git...)
- (Recording state in git...)
- [2013-04-08 19:17:11 BST] Committer: Committing changes to git
-
-git annex find:
-
- file2.test
-
-On the previous files, the log shows all failed files being added to the annex find after the assistant was restarted (daemon.log.1) so I would imagine 'git annex add' would have worked fine too.
-
-Right now, I'm just running
- while true; do git annex add; sleep 1; done
-in the annex directory, which gives me (expensive) watch-like behaviour, with fairly clear output for me to confirm everything has been added.
-"""]]
diff --git a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_5_a2ff7668f2a0d549b362d7de97fac8a1._comment b/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_5_a2ff7668f2a0d549b362d7de97fac8a1._comment
deleted file mode 100644
index 10c068f13..000000000
--- a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_5_a2ff7668f2a0d549b362d7de97fac8a1._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 5"
- date="2013-04-08T21:16:33Z"
- content="""
-\"I would imagine\" is not a useful debugging method. I asked you to run `git annex add` so that if it succeeds, I have a verified data point that reduces the problem space to only code inside the assistant, and if it fails, I have an easy way to reproduce the problem to debug further. At the moment, I have neither. :P
-
-`.gitignore` is really, truely, not supported by the assistant. I just ran your test case, and it added `file.test` as soon as I created it. Also, I never wrote support for `.gitignore`; I know right where that support should go, and I have a dozen people who have complained it is not supported.
-"""]]
diff --git a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_6_60d72f34a6cfd1c081f74aa610f4305a._comment b/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_6_60d72f34a6cfd1c081f74aa610f4305a._comment
deleted file mode 100644
index c8a2730c2..000000000
--- a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_6_60d72f34a6cfd1c081f74aa610f4305a._comment
+++ /dev/null
@@ -1,33 +0,0 @@
-[[!comment format=mdwn
- username="Xyem"
- ip="87.194.19.134"
- subject="comment 6"
- date="2013-04-08T22:06:35Z"
- content="""
-When you asked me if 'git annex add' worked, I wasn't in the position to test it as I didn't have any files in this failed state. All reported occurrences had been added by the assistant's startup scan on its second running...
-
-I've managed to reproduce the issue again and can confirm 'git annex add'ing the file that failed to checksum through the assistant works successfully. The only difference on this occurrence is that I downloaded the files from a local webserver, sharing the files from my disk as it was taking several gigabytes of download to occur. All other files were added successfully.
-
-daemon.log
-
- [2013-04-08 22:41:13 BST] Committer: Adding blender_l.eos_04.zip
- add blender_lowpoly_videos_04.zip (checksum...) failed
-
-git annex add
-
- $ git annex add blender_lowpoly_videos_04.zip
- add blender_lowpoly_videos_04.zip (checksum...) ok
-
-In case it matters at all, the workaround I am using below has not demonstrated the issue yet:
-
- while true; do git annex add; sleep 1; done
-
-Still very interesting that .gitignore is not supposed to work. After running through the test case on my machine:
-Restarting the assistant doesn't add file.test
-'git annex add' doesn't add file.test
-'git annex add file.test' doesn't add file.test
-
-Looks like it works as one would expect from here. Perhaps I'm in some backwards dimension where what should work, doesn't, and what shouldn't work, does! :) Would certainly explain a lot..
-
-Thanks for your help. As you can probably tell, I really want to use git-annex!
-"""]]
diff --git a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_7_53a73e662c9356b759fbfa1e5a3bd927._comment b/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_7_53a73e662c9356b759fbfa1e5a3bd927._comment
deleted file mode 100644
index 578870f0a..000000000
--- a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_7_53a73e662c9356b759fbfa1e5a3bd927._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 7"
- date="2013-04-23T22:11:32Z"
- content="""
-I have added some messages when add fails to indicate why it failed. Going through the failure modes while doing this, the most likely reason does seem to be that the file is changed while it's in the process of being checksummed. You can upgrade to tonight's build to get a version with these added messages.
-
-Can you run the assistant with `--debug` and send a complete log of the problem happening?
-
-(The sanity checker not adding the files seems to be a red herring; I was wrong and it only adds any symlinks that failed to get staged.)
-
-(Re the .gitignore red herring, the one place in the assistant that *does* honor .gitignore is the startup scan. However this will not affect the assistant's behavior when files are added to the repository after it's started up and is running. I suspect that if you just look at `git log --stat` you will see that the temp files used by DownThemAll are being added, and then deleted from the git repository. But this is a red herring, so meh.)
-"""]]
diff --git a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_8_10b65168b6a54d960427966d7e3d05f5._comment b/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_8_10b65168b6a54d960427966d7e3d05f5._comment
deleted file mode 100644
index 2cf9790e9..000000000
--- a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_8_10b65168b6a54d960427966d7e3d05f5._comment
+++ /dev/null
@@ -1,19 +0,0 @@
-[[!comment format=mdwn
- username="Xyem"
- ip="87.194.19.134"
- subject="comment 8"
- date="2013-05-12T22:59:37Z"
- content="""
-Just reproduced this issue on 4.20130417-g4bb97d5. Looks like the digesting is the failing part, but no indication as to why.
-
- [2013-05-12 23:23:21 BST] Watcher: file deleted test/SleepIsDeath_v16_UnixSource.tar.gz-{b8c941eb-baf0-46de-81fa-19d25aca05fb}.dtapart
- [2013-05-12 23:23:21 BST] read: git [\"--git-dir=/home/xyem/annex/.git\",\"--work-tree=/home/xyem/annex\",\"ls-files\",\"--others\",\"--exclude-standard\",\"-z\",\"--\",\"test/SleepIsDeath_v16_UnixSource.tar.gz-{b8c941eb-baf0-46de-81fa-19d25aca05fb}.dtapart\",\"test/SleepIsDeath_v16_UnixSource.tar.gz\"]
- [2013-05-12 23:23:21 BST] read: lsof [\"-F0can\",\"+d\",\"/home/xyem/annex/.git/annex/tmp/\"]
- [2013-05-12 23:23:22 BST] Committer: Adding SleepIsDe..ce.tar.gz
- add test/SleepIsDeath_v16_UnixSource.tar.gz (checksum...) [2013-05-12 23:23:22 BST] read: sha256sum [\"/home/xyem/annex/.git/annex/tmp/SleepIsDeath_v16_UnixSource.tar6479.gz\"]
- failed
- [2013-05-12 23:23:22 BST] Committer: committing 1 changes
- [2013-05-12 23:23:22 BST] Committer: Committing changes to git
- (Recording state in git...)
-
-"""]]
diff --git a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_9_b640e8fa6aafb041d66bbf8857a8fa3d._comment b/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_9_b640e8fa6aafb041d66bbf8857a8fa3d._comment
deleted file mode 100644
index 738e1929f..000000000
--- a/doc/bugs/assistant_does_not_warn_on_files_it_failed_to_add/comment_9_b640e8fa6aafb041d66bbf8857a8fa3d._comment
+++ /dev/null
@@ -1,44 +0,0 @@
-[[!comment format=mdwn
- username="Xyem"
- ip="87.194.19.134"
- subject="comment 9"
- date="2013-05-12T23:34:51Z"
- content="""
-Whoops. Upgraded to 4.20130501-g4a5bfb3 and reproduced it again. Looks like the file is being changed between the file being closed and git-annex trying to add it.
-
-Though I'm using DownThemAll, I have it set to \"1 segment\" so the file should only have 1 writer.
-Looks like the file gets retried immediately and is being added okay though.
-
-Would it be worth me trying to log filesystem accesses with a passthrough FUSE filesystem to try and figure out what it going on?
-
- O'Reilly/Mind Performance Hacks/urn_x-domain_oreilly.com_product_9780596153113.EBOOK-{711cd6ac-12b9-4d4e-92d6-66caa9825cf4}.dtapart still has writers, not adding
- [2013-05-13 00:18:29 BST] read: git [\"--git-dir=/home/xyem/annex/.git\",\"--work-tree=/home/xyem/annex\",\"ls-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"preferred-content.log\"]
- [2013-05-13 00:18:33 BST] Watcher: file deleted O'Reilly/Mind Performance Hacks/urn_x-domain_oreilly.com_product_9780596153113.EBOOK-{711cd6ac-12b9-4d4e-92d6-66caa9825cf4}.dtapart
- [2013-05-13 00:18:33 BST] read: git [\"--git-dir=/home/xyem/annex/.git\",\"--work-tree=/home/xyem/annex\",\"ls-files\",\"--others\",\"--exclude-standard\",\"-z\",\"--\",\"O'Reilly/Mind Performance Hacks/urn_x-domain_oreilly.com_product_9780596153113.EBOOK-{711cd6ac-12b9-4d4e-92d6-66caa9825cf4}.dtapart\",\"O'Reilly/Mind Performance Hacks/Mind_Performance_Hacks.mobi\"]
- [2013-05-13 00:18:33 BST] read: lsof [\"-F0can\",\"+d\",\"/home/xyem/annex/.git/annex/tmp/\"]
- [2013-05-13 00:18:33 BST] Committer: Adding Mind_Perf..acks.mobi
- add O'Reilly/Mind Performance Hacks/Mind_Performance_Hacks.mobi (checksum...) [2013-05-13 00:18:33 BST] read: sha256sum [\"/home/xyem/annex/.git/annex/tmp/Mind_Performance_Hacks13351.mobi\"]
-
- O'Reilly/Mind Performance Hacks/Mind_Performance_Hacks.mobi changed while it was being added
- [2013-05-13 00:18:33 BST] Committer: delaying commit of 1 changes
- failed
- [2013-05-13 00:18:33 BST] Committer: committing 1 changes
- [2013-05-13 00:18:33 BST] Committer: Committing changes to git
- (Recording state in git...)
- [2013-05-13 00:18:33 BST] feed: git [\"--git-dir=/home/xyem/annex/.git\",\"--work-tree=/home/xyem/annex\",\"update-index\",\"-z\",\"--index-info\"]
- [2013-05-13 00:18:33 BST] read: git [\"--git-dir=/home/xyem/annex/.git\",\"--work-tree=/home/xyem/annex\",\"commit\",\"--allow-empty-message\",\"--no-edit\",\"-m\",\"\",\"--quiet\",\"--no-verify\"]
- [2013-05-13 00:18:33 BST] read: git [\"--git-dir=/home/xyem/annex/.git\",\"--work-tree=/home/xyem/annex\",\"symbolic-ref\",\"HEAD\"]
- [2013-05-13 00:18:33 BST] read: git [\"--git-dir=/home/xyem/annex/.git\",\"--work-tree=/home/xyem/annex\",\"show-ref\",\"refs/heads/master\"]
- [2013-05-13 00:18:34 BST] read: git [\"--git-dir=/home/xyem/annex/.git\",\"--work-tree=/home/xyem/annex\",\"ls-files\",\"--others\",\"--exclude-standard\",\"-z\",\"--\",\"O'Reilly/Mind Performance Hacks/Mind_Performance_Hacks.mobi\"]
- [2013-05-13 00:18:34 BST] read: lsof [\"-F0can\",\"+d\",\"/home/xyem/annex/.git/annex/tmp/\"]
- [2013-05-13 00:18:34 BST] Committer: Adding Mind_Perf..acks.mobi
- add O'Reilly/Mind Performance Hacks/Mind_Performance_Hacks.mobi (checksum...) [2013-05-13 00:18:34 BST] read: sha256sum [\"/home/xyem/annex/.git/annex/tmp/Mind_Performance_Hacks13351.mobi\"]
- [2013ok
- -05-13 00:18:34 BST] Watcher: file deleted O'Reilly/Mind Performance Hacks/Mind_Performance_Hacks.mobi
- [2013-05-13 00:18:34 BST] Watcher: add symlink O'Reilly/Mind Performance Hacks/Mind_Performance_Hacks.mobi
- [2013-05-13 00:18:34 BST] Committer: committing 2 changes
- [2013-05-13 00:18:34 BST] chat: git [\"--git-dir=/home/xyem/annex/.git\",\"--work-tree=/home/xyem/annex\",\"hash-object\",\"-t\",\"blob\",\"-w\",\"--stdin\"]
- [2013-05-13 00:18:34 BST] Committer: Committing changes to git
- (Recording state in git...)
-
-"""]]
diff --git a/doc/bugs/assistant_doesn__39__t_sync_empty_directories.mdwn b/doc/bugs/assistant_doesn__39__t_sync_empty_directories.mdwn
index 0b8b5bc1a..53ee5a105 100644
--- a/doc/bugs/assistant_doesn__39__t_sync_empty_directories.mdwn
+++ b/doc/bugs/assistant_doesn__39__t_sync_empty_directories.mdwn
@@ -28,3 +28,5 @@ Description: Ubuntu 12.04.2 LTS
Release: 12.04
Codename: precise
"""]]
+
+> [[!taglink confirmed]] (but may be out of scope) --[[Joey]]
diff --git a/doc/bugs/assistant_doesn__39__t_sync_file_permissions.mdwn b/doc/bugs/assistant_doesn__39__t_sync_file_permissions.mdwn
index 3acb402bf..48a99d7c2 100644
--- a/doc/bugs/assistant_doesn__39__t_sync_file_permissions.mdwn
+++ b/doc/bugs/assistant_doesn__39__t_sync_file_permissions.mdwn
@@ -43,3 +43,5 @@ Description: Ubuntu 12.04.2 LTS
Release: 12.04
Codename: precise
"""]]
+
+> [[!taglink confirmed]] (but may be out of scope) --[[Joey]]
diff --git a/doc/bugs/assistant_doesn__39__t_sync_file_permissions/comment_6_13db3474113b157b7431eb1c835e5814._comment b/doc/bugs/assistant_doesn__39__t_sync_file_permissions/comment_6_13db3474113b157b7431eb1c835e5814._comment
new file mode 100644
index 000000000..6f7283be2
--- /dev/null
+++ b/doc/bugs/assistant_doesn__39__t_sync_file_permissions/comment_6_13db3474113b157b7431eb1c835e5814._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="Xyem"
+ ip="178.79.137.64"
+ subject="comment 6"
+ date="2014-06-24T10:05:26Z"
+ content="""
+Now that git-annex has a proper metadata system now, can this be handled?
+
+Perhaps doing this:
+
+git annex metadata -s __executable 001
+
+could cause git-annex to set the executable bit (on get, fsck etc.) and that be set automatically on git annex add if the file has executable bit set (numbers are a bitmask for which execute bit to set..?).
+"""]]
diff --git a/doc/bugs/assistant_eats_all_CPU.mdwn b/doc/bugs/assistant_eats_all_CPU.mdwn
index 4939bf456..719fca425 100644
--- a/doc/bugs/assistant_eats_all_CPU.mdwn
+++ b/doc/bugs/assistant_eats_all_CPU.mdwn
@@ -520,3 +520,10 @@ $ ps -O start xf | grep git-annex
13761 23:56:38 Z ? 00:00:00 \_ [git] <defunct>
6252 12:56:59 S ? 00:01:09 /usr/bin/emacs23
"""]]
+
+#### This bug is fixed
+
+> [[fixed|done]]. This was a Cronner bug, triggered when you had a
+> scheduled fsck job that runs monthly at any time, and the last time it ran was on a day of a
+> month > 12. Workaround: Disable scheduled fsck jobs, or change them to
+> run on a specific day of the month. Or upgrade. --[[Joey]]
diff --git a/doc/bugs/assistant_eats_all_CPU/comment_23_48a4c8d9dcc6cec243c6072090f26b6d._comment b/doc/bugs/assistant_eats_all_CPU/comment_23_48a4c8d9dcc6cec243c6072090f26b6d._comment
new file mode 100644
index 000000000..b6d2dec76
--- /dev/null
+++ b/doc/bugs/assistant_eats_all_CPU/comment_23_48a4c8d9dcc6cec243c6072090f26b6d._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 23"
+ date="2014-04-11T16:32:47Z"
+ content="""
+<maxy> the clock_gettime(0x2 and clock_gettime(0x3 are consistent with getCurrentTime and getTimeZone of nextTime
+
+So, that strongly points to the Cronner thread, and I doubt this is specific to stable at all.
+
+Please run git-annex vicfg, and paste all the \"schedule\" lines, from a repository that has the problem. That should allow me to reproduce and fix this bug.
+"""]]
diff --git a/doc/bugs/assistant_expensive_scan_unnecessarily_queues_files.mdwn b/doc/bugs/assistant_expensive_scan_unnecessarily_queues_files.mdwn
new file mode 100644
index 000000000..0196b7d7d
--- /dev/null
+++ b/doc/bugs/assistant_expensive_scan_unnecessarily_queues_files.mdwn
@@ -0,0 +1,65 @@
+### Please describe the problem.
+Summary: The assistant pulls files from remote repos although they are stored on trusted repos (remote machine may be up or down).
+
+After starting the assistant via "git annex webapp --listen #ip# --verbose --debug" it starts to check for pending tasks and starts to queue lots of files (could be all of them). I checked the daemon.log and found the following line:
+
+[[!format sh """
+[2014-06-03 21:39:04 CEST] TransferScanner: queued Download UUID "541d2f88-16c3-11e2-aa7e-8f1a2c8e14c5" apps/Apache_OpenOffice_4.0.0_MacOS_x86_install_en-US.dmg Nothing : expensive scan found missing object
+"""]]
+
+The file is available in a remote repo:
+
+[[!format sh """
+$ git annex whereis apps/Apache_OpenOffice_4.0.0_MacOS_x86_install_en-US.dmg
+whereis apps/Apache_OpenOffice_4.0.0_MacOS_x86_install_en-US.dmg (1 copy)
+ 541d2f88-16c3-11e2-aa7e-8f1a2c8e14c5 -- dump
+ok
+"""]]
+
+The remote "dump" is trusted and is configured as "backup" repo. The repo running the assistant is configured as "manual". The configuration settings for wanted, required and scheduled remained untouched.
+
+Num copies is unset and defaults to 1:
+
+[[!format sh """
+$ git annex numcopies
+global numcopies is not set
+(default is 1)
+"""]]
+
+When calling "git annex find --want-get" no files are listed as in my case, all are stored in the "dump" repo which is trusted.
+
+[[!format sh """
+$ git annex find --want-get
+$
+"""]]
+
+### What steps will reproduce the problem?
+Start the assistant and wait for it to finish startup checking. The assistant adds lots (all?) of the files due to “expensive scan found missing object”.
+
+### What version of git-annex are you using? On what operating system?
+Snapshot build from the annex branchable webpage running on an OSX 10.9.3 machine:
+[[!format sh """
+$ git annex version
+git-annex version: 5.20140411-g2503f43
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+"""]]
+
+Note: Updated to 5.20140529-g68a56a6 but same behavior is observed.
+
+### Please provide any additional information below.
+
+The backup node was down while the assistant starts up. However also files from another trusted node that is online 24/7 is pulled. Repo was upgraded from version 4 to 5. Is there a way to further check why a file was added e.g. to dump all variables of the evaluated term (approxlackingcopies, copies, etc)?
+
+[[!format sh """
+[2014-06-03 21:39:04 CEST] TransferScanner: starting scan of [Remote { name ="origin" },Remote { name ="dump" }]
+[2014-06-03 21:39:04 CEST] read: git ["--git-dir=/Volumes/DATA/annex/images/.git","--work-tree=/Volumes/DATA/annex/images","ls-files","--cached","-z","--"]
+[2014-06-03 21:39:04 CEST] chat: git ["--git-dir=/Volumes/DATA/annex/images/.git","--work-tree=/Volumes/DATA/annex/images","check-attr","-z","--stdin","annex.backend","annex.numcopies","--"]
+[2014-06-03 21:39:04 CEST] TransferScanner: queued Download UUID "541d2f88-16c3-11e2-aa7e-8f1a2c8e14c5" apps/Apache_OpenOffice_4.0.0_MacOS_x86_install_en-US.dmg Nothing : expensive scan found missing object
+[2014-06-03 21:39:04 CEST] Transferrer: Transferring: Download UUID "541d2f88-16c3-11e2-aa7e-8f1a2c8e14c5" apps/Apache_OpenOffice_4.0.0_MacOS_x86_install_en-US.dmg Nothing
+[2014-06-03 21:39:04 CEST] TransferScanner: queued Download UUID "541d2f88-16c3-11e2-aa7e-8f1a2c8e14c5" apps/Apache_OpenOffice_4.0.1_MacOS_x86_install_en-US.dmg Nothing : expensive scan found missing object
+"""]]
diff --git a/doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_1_bc874e077009b81ab36a6d43d793030a._comment b/doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_1_bc874e077009b81ab36a6d43d793030a._comment
new file mode 100644
index 000000000..91c8616c2
--- /dev/null
+++ b/doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_1_bc874e077009b81ab36a6d43d793030a._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-06-12T20:07:30Z"
+ content="""
+This seems to me to be likely to be some kind of configuration problem. In particular, what is the \"wanted\" setting for the repo running the assistant? If it's not \"standard\" then the fact that it's in the \"manual\" group won't affect the assistant's behavior.
+
+If that's not it, it would probably help to paste the entire vicfg display, so I can replicate the config (or share the repo).
+"""]]
diff --git a/doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_2_a7e9d8ec500399dd6794e168f85e6a5c._comment b/doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_2_a7e9d8ec500399dd6794e168f85e6a5c._comment
new file mode 100644
index 000000000..589086f6e
--- /dev/null
+++ b/doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_2_a7e9d8ec500399dd6794e168f85e6a5c._comment
@@ -0,0 +1,40 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmXSkgjC_ypUQafVwvHTLsStrkiXH8CfHU"
+ nickname="Matthias"
+ subject="comment 2"
+ date="2014-06-13T18:30:25Z"
+ content="""
+Thanks for your fast reply, Joey. I appended the shortened config below. Wanted and groupwanted were untouched and therefore still commented out. I removed the hash from wanted to explicitly set it standard. Now the assistant behaves as expected. However I’m wondering:
+
+* Shouldn’t ‘standard’ be the default rule to apply for wanted/groupwanted in case both are not explicitly set in the config? I assumed this to be the case.
+* Shouldn’t “find --want-get” list the identical set of files that is also requested by the assistant? Especially this one confused me.
+
+[[!format sh \"\"\"
+# Repository trust configuration
+# (for macbook)
+#trust 3938865a-ce40-4166-a918-2012078846c7 = semitrusted
+
+# Repository groups
+# (for macbook)
+group 3938865a-ce40-4166-a918-2012078846c7 = manual
+
+# Repository preferred contents
+# (for macbook)
+#wanted 3938865a-ce40-4166-a918-2012078846c7 = standard
+
+# Group preferred contents
+# (Used by repositories with \"groupwanted\" in their preferred contents)
+(config defaults - all commented out)
+
+# Standard preferred contents
+(config defaults - all commented out)
+
+# Repository required contents
+# (for macbook)
+#required 3938865a-ce40-4166-a918-2012078846c7 =
+
+# Scheduled activities
+# (for macbook)
+#schedule 3938865a-ce40-4166-a918-2012078846c7 =
+\"\"\"]]
+"""]]
diff --git a/doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_3_a0824e00f04f95c39823f29d6c76e7fe._comment b/doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_3_a0824e00f04f95c39823f29d6c76e7fe._comment
new file mode 100644
index 000000000..58f2069c1
--- /dev/null
+++ b/doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_3_a0824e00f04f95c39823f29d6c76e7fe._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 3"
+ date="2014-06-13T18:35:53Z"
+ content="""
+I need to look into why --want-get didn't behave as expected.
+
+It would probably make sense to make standard be the default. There could be upgrade concerns though.
+"""]]
diff --git a/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual.mdwn b/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual.mdwn
deleted file mode 100644
index c5a75b361..000000000
--- a/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual.mdwn
+++ /dev/null
@@ -1,24 +0,0 @@
-Thanks for git annex!
-
-### Please describe the problem.
-
-I've set up two computers A, B to sync to (and each other through) a remote server S. If I add files to A, it syncs with S. But B is not getting synced unless I run 'git annex sync' or restart the daemon in the webapp, i.e. I don't see these files on B at all, not even as broken symlinks.
-The same happens if I manually copy files from A to S. B is not updating the copy count in 'git annex whereis' until I manually sync on B.
-
-It would be great if B could automatically sync when S is changed, either file locations or contents.
-
-### What steps will reproduce the problem?
-
-Both computers' local repos were setup with annex assistant, and switched into indirect mode. The server contains git repo and file data. All systems, computers and server are set to manual in the preferred content mode.
-
-### What version of git-annex are you using? On what operating system?
-
-A is running Debian testing with git-annex 4.20130827, B and S are running Debian stable with the backports version of git-annex 4.20130815~bpo70+1. A and S are 64 bit, B is 32 bit. All are up to date.
-
-### Please provide any additional information below.
-
-I tried this setup before with direct mode and different preferred content settings (A, B as client, S as backup or archive), and syncing of git and file data was working then.
-
-Despite being able to run 'sync' it is at least inconvenient to not have automatically updated file location information when I run the assistant. (I could then just run without it, but I had it happen to me that I setup a local repo w/o assistant, and when I ran assistant, expecting it would tell me "there are no local repos, would you like to create one?" it somehow automatically found the manually created one and started copying files. But that's another problem.)
-
-> [[done]] unless my diagnosis is wrong. --[[Joey]]
diff --git a/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_1_37acb3afafb1b4c4da7c778130cf3035._comment b/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_1_37acb3afafb1b4c4da7c778130cf3035._comment
deleted file mode 100644
index 94dc51d0a..000000000
--- a/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_1_37acb3afafb1b4c4da7c778130cf3035._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlQsgfXntaEvZPKgd_K0dfoFcYBJXKcaFE"
- nickname="Sten"
- subject="Direct oder indirect mode makes no difference"
- date="2013-09-09T23:36:49Z"
- content="""
-Direct or indirect mode does not make a difference. I created another setup like this, only different is direct mode, otherwise the same (in particular preferred content mode is manual). Result: Still no sync.
-"""]]
diff --git a/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_2_9d58887ee0184663852bde83b8d497c7._comment b/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_2_9d58887ee0184663852bde83b8d497c7._comment
deleted file mode 100644
index 8d388ceee..000000000
--- a/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_2_9d58887ee0184663852bde83b8d497c7._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlQsgfXntaEvZPKgd_K0dfoFcYBJXKcaFE"
- nickname="Sten"
- subject="computer in manual mode seems to be the reason, not server"
- date="2013-09-10T02:21:59Z"
- content="""
-If I create a setup like originally described with the only difference being S set to full backup mode, I see no change in sync behavior.
-
-In detail, what happens is: A gets files added. These changes are committed and synced. Because S is in full backup mode, the file content is also sent from A to S (this is different, but expected). However, B still does not sync until manually run. I would expect that B's manual mode only applies to file content (it is the preferred content setting), not to changes to the git repo, thus I'd expect git changes to sync to all involved (and accessible) repos.
-"""]]
diff --git a/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_3_b70881c8026e30fd3ddc051bd01a888b._comment b/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_3_b70881c8026e30fd3ddc051bd01a888b._comment
deleted file mode 100644
index d42cf6cd2..000000000
--- a/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_3_b70881c8026e30fd3ddc051bd01a888b._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlQsgfXntaEvZPKgd_K0dfoFcYBJXKcaFE"
- nickname="Sten"
- subject="available copies update need manual sync too"
- date="2013-09-10T02:55:44Z"
- content="""
-After copying files from S to B (as expected manually), I have to (unexpectedly) manually sync again on A to update the #copies on A.
-"""]]
diff --git a/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_4_43f756e2e6ff985c8e050da0e369d486._comment b/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_4_43f756e2e6ff985c8e050da0e369d486._comment
deleted file mode 100644
index 51e9cc135..000000000
--- a/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_4_43f756e2e6ff985c8e050da0e369d486._comment
+++ /dev/null
@@ -1,25 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlQsgfXntaEvZPKgd_K0dfoFcYBJXKcaFE"
- nickname="Sten"
- subject="output of git annex sync "
- date="2013-09-10T03:19:51Z"
- content="""
-When running sync on B after copying file content from A to S (manually or automatically), I saw the following output (copied just the end of it):
- ...
- file.pdf | 1 +
- file.txt | 1 +
- 762 files changed, 762 insertions(+)
- ...
- create mode 120000 file.pdf
- create mode 120000 file.txt
-
-git-annex: /home/sten/Documents/.git/annex/merge/: getDirectoryContents: does not exist (No such file or directory)
-failed
-push server
-Everything up-to-date
-ok
-git-annex: sync: 1 failed
-
-A subsequent sync worked without error.
-
-"""]]
diff --git a/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_5_eda947eb7f8c46b9a61d6430b5f9ebfd._comment b/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_5_eda947eb7f8c46b9a61d6430b5f9ebfd._comment
deleted file mode 100644
index 05a3d7f74..000000000
--- a/doc/bugs/assistant_fails_to_sync_in_preferred_content_mode_manual/comment_5_eda947eb7f8c46b9a61d6430b5f9ebfd._comment
+++ /dev/null
@@ -1,25 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.2.134"
- subject="comment 5"
- date="2013-09-13T18:30:53Z"
- content="""
-You have described the following git-annex network:
-
- A --(ssh)-- S --(ssh)-- B
-
-So A automatically syncs to S. But there is no way at all for A to tell B that it has made changes. So B does not automatically sync.
-
-The git-annex webapp will detect this kind of situation, and display this alert:
-
-[[assistant/xmppnudge.png]]
-
-Once you set up an XMPP account, the network will look like:
-
- A --(ssh)-- S --(ssh)-- B
- \_________(XMPP)_______/
-
-And now B will immediatly know when A has pushed a change to S, and will go get it.
-
-(The `getDirectoryContents` error is probably because you are running git annex sync in a repository that the git-annex assistant is running in, and they are both using the same tmp directory for merging branches sync pulled. It does not seem to be worth worrying about.)
-"""]]
diff --git a/doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files.mdwn b/doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files.mdwn
deleted file mode 100644
index 910796091..000000000
--- a/doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files.mdwn
+++ /dev/null
@@ -1,56 +0,0 @@
-__What steps will reproduce the problem?__
-
-on server:
-
-* mkdir annex
-* cd annex
-* git init
-* git annex init "donkey"
-* git commit -m "CREATE GIT ANNEX" --allow-empty
-
-on desktop:
-
-* git clone ssh://donkey/home/xyem/annex
-* cd annex
-* git annex init "jaguar"
-* git annex vicfg
-(..change origin and 'here' to 'manual' group..)
-* git annex sync
-* git annex webapp
-
-on server:
-
-* git annex sync
-* git annex assistant
-
-(..download/move a file into the annex folder on the desktop..)
-
-__What is the expected output?__
-
-The server should be synced, gaining a broken symlink to the file. No file data transferred to the server (manual mode).
-
-__What do you see instead?__
-
-In addition to the expected/wanted behaviour above, the webapp shows the assistant trying to transfer the file contents to the server, despite it being in the manual group. This is also shown in 'ps aux | grep git' where there is a 'transferkey' operation for the file[1].
-
-__What version of git-annex are you using? On what operating system?__
-
-* server: 4.20130314
-* desktop: 4.20130314
-* OS: Arch Linux
-* Package: git-annex-bin (AUR)
-
-__Please provide any additional information below.__
-
-[1] The transfer itself doesn't work because the assistant is trying to use its own SSH connection caching, with no keys and without prompting for a password, rather than use my existing connection caching. Running the transferkey command manually seems to work though. This isn't a concern at the moment.
-
-Restarting the webapp has not effect. The file is still in the transfer queue and additional files also get added for transfer.
-
-This was working correctly on a previous version, but I'm not sure which one of these I was using at the time:
-
-* 3.20130114
-* 3.20130216
-* 4.20130227
-
-> Closing this bug report since my comment below seems a reasonable
-> explanation for the behavior you saw. [[done]] --[[Joey]]
diff --git a/doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_1_e3f545d9adc27a4e7340bf16177c4fe0._comment b/doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_1_e3f545d9adc27a4e7340bf16177c4fe0._comment
deleted file mode 100644
index bad85478e..000000000
--- a/doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_1_e3f545d9adc27a4e7340bf16177c4fe0._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-03-24T12:45:23Z"
- content="""
-You say you changed `origin` and `here` to be in the manual group, but did you set their preferred-content to `standard`? If you did not, the group setting will not influence which files they want, and the default behavior of wanting all files will be used.
-
-Since you are running the assistant on the server, it will automatically update to have symlinks to new files when the desktop does a git push to it. It sounds like the desktop is failing to push to the server for some reason. You can look at '.git/annex/daemon.log` to see any error messages from `git push`.
-
-If you have `ssh-askpass` installed on the client, it should use it to prompt for any necessary ssh password. Given your described configuration, git-annex will be using your regular ssh keys. You can disable its built-in ssh connection caching with `git config annex.sshcaching false` if desired.
-"""]]
diff --git a/doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_2_1403076dbc47733607f0c8b2856e2381._comment b/doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_2_1403076dbc47733607f0c8b2856e2381._comment
deleted file mode 100644
index e30e99eee..000000000
--- a/doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_2_1403076dbc47733607f0c8b2856e2381._comment
+++ /dev/null
@@ -1,37 +0,0 @@
-[[!comment format=mdwn
- username="Xyem"
- ip="87.194.19.134"
- subject="comment 2"
- date="2013-04-13T20:50:16Z"
- content="""
-Ah I see. Bit of a misunderstanding on my end about what the groups did, by the looks of it. I was under the impression they controlled how files moved around, if at all (as described in the webapp), and the preferred-content was just fine-tuning controls.
-
-I just went to set this back up to see if setting it to \"standard\" in vicfg works how I want it to and now I've hit a different problem. The webapp/assistant isn't populating the git commit messages on it's own, it is launching $EDITOR (vi if unset on my system) in the background to prompt me for it (where I can't see it).
-
- ├─xterm
- │ └─bash
- │ └─git annex webapp
- │ └─git-annex webapp
- │ ├─git --git-dir=/home/xyem/tmp/annex/.git --work-tree=/home/xyem/tmp/annex cat-file --batch
- │ ├─git --git-dir=/home/xyem/tmp/annex/.git --work-tree=/home/xyem/tmp/annex cat-file --batch
- │ ├─git --git-dir=/home/xyem/tmp/annex/.git --work-tree=/home/xyem/tmp/annex check-attr -z --stdin annex.backend annex.numcopies --
- │ ├─git --git-dir=/home/xyem/tmp/annex/.git --work-tree=/home/xyem/tmp/annex commit --allow-empty-message -m --quiet --no-verify
- │ │ └─nano .git/COMMIT_EDITMSG
- │ └─6*[{git-annex}]
-
-If I do the steps manually, it seems to work fine:
-
- $ echo \"testfile\" > testfile.txt
- $ git annex add testfile.txt
-
- add testfile.txt (checksum...) ok
- (Recording state in git...)
-
- $ git --git-dir=/home/xyem/tmp/annex/.git --work-tree=/home/xyem/tmp/annex commit --allow-empty-message -m --quiet --no-verify
-
- [master 636605f] --quiet
- 1 file changed, 1 insertion(+)
- create mode 120000 testfile.txt
-
-This, to me, implies it is a bug with the assistant/webapp but I don't know how to isolate it any more than that (--debug doesn't output anything else). Should I report this as another bug?
-"""]]
diff --git a/doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_3_af83717bfb260bea6d52ff71c6b34743._comment b/doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_3_af83717bfb260bea6d52ff71c6b34743._comment
deleted file mode 100644
index 10216b5cc..000000000
--- a/doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_3_af83717bfb260bea6d52ff71c6b34743._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="Xyem"
- ip="87.194.19.134"
- subject="comment 3"
- date="2013-04-13T22:02:09Z"
- content="""
-Just noticed (while trying to commit in another annex) that the command I used above in the \"manual\" one commits with the message \"--quiet\". I guess pstree doesn't show all arguments!
-"""]]
diff --git a/doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_4_b4f811611d14e7392009c539fa6b8574._comment b/doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_4_b4f811611d14e7392009c539fa6b8574._comment
deleted file mode 100644
index 6ff6b3c16..000000000
--- a/doc/bugs/assistant_ignores___34__manual__34___group__44___tries_to_transfer_files/comment_4_b4f811611d14e7392009c539fa6b8574._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 4"
- date="2013-04-16T20:28:44Z"
- content="""
-There's an open bug about this weird commit editor problem. Please follow up there: [[assistant_hangs_during_commit]]
-"""]]
diff --git a/doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts.mdwn b/doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts.mdwn
deleted file mode 100644
index 90034f7f5..000000000
--- a/doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts.mdwn
+++ /dev/null
@@ -1,30 +0,0 @@
-What steps will reproduce the problem?
-
-Using the Linux tarball (i386) with configured IPv6:
-
-* git-annex.linux/git-annex-webapp
-
-A browser is then started, pointing to file:///tmp/webapp313.html which in turn points to http://localhost:$port/$blah .
-
-On my box localhost resolves to ::1, but the webapp is only listening on 127.0.0.1 so . While I can work around this by specifying 127.0.0.1 as the hostname, the next page that is loaded goes back to localhost.
-
-What is the expected output? What do you see instead?
-
-I would expect that the webapp would bind to ::1 if possible.
-
-What version of git-annex are you using? On what operating system?
-
-3.20130102 fromt the Linux tarball release on Debian Squeeze.
-
-Please provide any additional information below.
-
-I've tested this with:
-
-* epiphany
-* iceweasel
-* chromium
-
-Iceweasel is the only one which correctly fell back to IPv4 and worked.
-
-> Ok, I've made it use the IP address in the URL. Ugly, but avoids
-> whatever mess results in this behavior. [[done]] --[[Joey]]
diff --git a/doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts/comment_1_91a62a2ce14a1027d2ac8b8e88df5f0c._comment b/doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts/comment_1_91a62a2ce14a1027d2ac8b8e88df5f0c._comment
deleted file mode 100644
index 540e06ee3..000000000
--- a/doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts/comment_1_91a62a2ce14a1027d2ac8b8e88df5f0c._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.1.42"
- subject="comment 1"
- date="2013-01-09T23:21:58Z"
- content="""
-I have a ipv6 enabled computer here, where the webapp works fine. I think you must have something odd in your network configuration if web browsers, when sent to \"http://localhost:port/ don't manage to connect to a web server running on ipv4.
-
-The webapp only uses 127.0.0.1 if \"localhost\" resolves to that address. If \"localhost\" resolves to both ipv6 and ipv4 addresses, the webapp uses the ipv4 and not the ipv6 address. If \"localhost\" resolves to only ipv6, the webapp uses ipv6.
-
-AFAIK it's not possible to bind to both an ipv4 and an ipv6 address, and get the same port number for both, and the webapp needs a port number to use to launch the web browser. Therefore, it has to choose one address. It choses ipv4 in preference to ipv6 because there are some things that still don't support ipv6. [This commit](http://source.git-annex.branchable.com/?p=source.git;a=commit;h=467844d7d3f703f99fcde1f951f33efda5e90074) is relevant.
-"""]]
diff --git a/doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts/comment_2_4982cd373eaaeee180be03c6e9fda7b1._comment b/doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts/comment_2_4982cd373eaaeee180be03c6e9fda7b1._comment
deleted file mode 100644
index 849bde6e4..000000000
--- a/doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts/comment_2_4982cd373eaaeee180be03c6e9fda7b1._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkF8_uQjLYm5Mf5F_JuVW-BxlvzpWjvR_o"
- nickname="Andrew"
- subject="comment 2"
- date="2013-01-09T23:51:18Z"
- content="""
-Watching tcpdump on loopback I only see a request from Epiphany to ::1, after that it gives up. So not terribly helpful.
-
-It looks like it might be a bug in the browsers. :(
-"""]]
diff --git a/doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts/comment_3_85d264e311acaa91dac0597ee8deda82._comment b/doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts/comment_3_85d264e311acaa91dac0597ee8deda82._comment
deleted file mode 100644
index 91da74efc..000000000
--- a/doc/bugs/assistant_listens_on_127.0.0.1_not_::1_which_breaks_IPv6_enabled_hosts/comment_3_85d264e311acaa91dac0597ee8deda82._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkF8_uQjLYm5Mf5F_JuVW-BxlvzpWjvR_o"
- nickname="Andrew"
- subject="comment 3"
- date="2013-01-10T22:10:00Z"
- content="""
-Cool, thanks Joey. Let's hope we can remove the ugly hack one day. ;)
-"""]]
diff --git a/doc/bugs/assistant_locked_my_files.mdwn b/doc/bugs/assistant_locked_my_files.mdwn
index 14ac62172..07bafd6cc 100644
--- a/doc/bugs/assistant_locked_my_files.mdwn
+++ b/doc/bugs/assistant_locked_my_files.mdwn
@@ -26,3 +26,5 @@ upgrade supported from repository versions: 0 1 2 4
"""]]
### Please provide any additional information below.
+
+[[!tag confirmed]]
diff --git a/doc/bugs/assistant_on_windows_adding_remote_containing_linux_paths.mdwn b/doc/bugs/assistant_on_windows_adding_remote_containing_linux_paths.mdwn
deleted file mode 100644
index c6b6ee482..000000000
--- a/doc/bugs/assistant_on_windows_adding_remote_containing_linux_paths.mdwn
+++ /dev/null
@@ -1,23 +0,0 @@
-### Please describe the problem.
-
-Internal Server Error
-
-internal error, /home/michele/assistannex is not absolute
-
-### What steps will reproduce the problem?
-
-create a transfer repository on a usb drive (from windows) merge it with a
-repository on linux, try to merge it on another target windows machine
-
-### What version of git-annex are you using? On what operating system?
-
-git-annex version 5.20140128-g29aea74
-
-> I'm not able to follow the steps to reproduce this, but I think
-> I see what the problem is. `isAbsolute` on windows does not think that
-> unix-style path is absolute. Such a path can appear in a remote of a git
-> repository, particularly if part of that repository was set up on a
-> non-Windows system. While the remote won't be usable on Windows with a
-> path like that, git-annex should not choke on the path either.
-> I have fixed the code to deal with this.
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/assistant_should_set_up_dedicated_ssh_keys_for_remotes_using_the_standalone_tarball.mdwn b/doc/bugs/assistant_should_set_up_dedicated_ssh_keys_for_remotes_using_the_standalone_tarball.mdwn
index ccec9370f..7e605ba7c 100644
--- a/doc/bugs/assistant_should_set_up_dedicated_ssh_keys_for_remotes_using_the_standalone_tarball.mdwn
+++ b/doc/bugs/assistant_should_set_up_dedicated_ssh_keys_for_remotes_using_the_standalone_tarball.mdwn
@@ -12,4 +12,10 @@ the assistant re-uses that key.
The assistant should either always set up a dedicated ssh key, even when
not otherwise needed, or it should probe to see if git-receive-pack and
git-send-pack can be run as part of its probing, and set up a dedicated
-ssh key when they cannot be.
+ssh key when they cannot be. --[[Joey]]
+
+> After recent sshpassword changes, the webapp sets up a dedicated ssh key
+> by default. If the user chooses to use an existing ssh key, it will be
+> used. So this is less likely to be a problem. --[[Joey]]
+
+[[!tag confirmed]]
diff --git a/doc/bugs/assistant_windows_does_not_start.mdwn b/doc/bugs/assistant_windows_does_not_start.mdwn
new file mode 100644
index 000000000..6aaafc57e
--- /dev/null
+++ b/doc/bugs/assistant_windows_does_not_start.mdwn
@@ -0,0 +1,37 @@
+### Please describe the problem.
+
+webapp does not start.
+
+Reports the following error:
+
+Script: c:\Programm Files(x86)\Git\git-annex-webapp.vbs
+Line: 2
+Character: 1
+Error: System can not fine the specified File
+Code: 80070002
+Source: null
+
+
+### What steps will reproduce the problem?
+
+1. Downloaded the installer.
+2. Run the installer
+3. In folder c:\Programm Files(x86)\Git doubleclick on git-annex-webapp
+4. Content vbs:
+ Set objshell=CreateObject("Wscript.Shell")
+ objShell.Run("git-annex webapp"), 0, False
+4.
+### What version of git-annex are you using? On what operating system?
+Version 2014-11-05 14:38
+Server Windows Server 2008 R2
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> [[done]]; never heard back, so I assume my comment is right. --[[Joey]]
diff --git a/doc/bugs/assistant_windows_does_not_start/comment_1_007c2d489a521115d0e679d0130748fb._comment b/doc/bugs/assistant_windows_does_not_start/comment_1_007c2d489a521115d0e679d0130748fb._comment
new file mode 100644
index 000000000..2d994433e
--- /dev/null
+++ b/doc/bugs/assistant_windows_does_not_start/comment_1_007c2d489a521115d0e679d0130748fb._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-12-02T17:16:09Z"
+ content="""
+I think you have either forgotten to install msysgit, or if you did install
+it, you didn't tell its installer to add git to the PATH.
+
+Git-annex relies on that to be located in the search path itself.
+
+You can probably fix the problem by (re)installing msysgit.
+"""]]
diff --git a/doc/bugs/authentication_to_rsync.net_fails.mdwn b/doc/bugs/authentication_to_rsync.net_fails.mdwn
deleted file mode 100644
index 707f93d49..000000000
--- a/doc/bugs/authentication_to_rsync.net_fails.mdwn
+++ /dev/null
@@ -1,30 +0,0 @@
-### Please describe the problem.
-
-Used assistant to "Add a cloud repository". Supplied hostname, username in webapp. Directory "annex" port 22.
-Clicked on "Use this rsync.net repository" and got
-
-**********************
-ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory
-ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory
-ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory
-Received disconnect from 69.43.165.7: 2: Too many authentication failures for 2440
-**********************
-
-### What steps will reproduce the problem?
-See above? A simple "ssh user@host.rsync.net ls /usr/bin" reveals that indeed no ssh-askpass is available in that namespace.
-
-### What version of git-annex are you using? On what operating system?
-git-annex version: 4.20130521 on debian linux 7.1.
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-That log is empty.
-# End of transcript or log.
-"""]]
-
-> I added ssh-askpass as a recommends, so I suppose
-> I can close this. [[done]] --[[Joey]]
diff --git a/doc/bugs/authentication_to_rsync.net_fails/comment_1_9db65f89415c8d825f268afb75244998._comment b/doc/bugs/authentication_to_rsync.net_fails/comment_1_9db65f89415c8d825f268afb75244998._comment
deleted file mode 100644
index 731d5148f..000000000
--- a/doc/bugs/authentication_to_rsync.net_fails/comment_1_9db65f89415c8d825f268afb75244998._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawliqfHEW134uawIUPwyKiyOdoF-oI5TxnQ"
- nickname="Ethan"
- subject="Doh. /usr/bin/ssh-askpass needs to be on *local* machine."
- date="2013-08-15T20:13:31Z"
- content="""
-My mistake; the problem was the I was missing /usr/bin/ssh-askpass on my local machine, not the rsync.net host.
-
-I still think this is a bug. I'm on a debian machine and installed git-annex from its debian package, so seems like the ssh-askpass package should be listed as a dependency. But that's a debian packaging problem, not a git-annex bug per se, so I'll go file it elsewhere.
-"""]]
diff --git a/doc/bugs/backend_version_upgrade_leaves_repo_unusable.mdwn b/doc/bugs/backend_version_upgrade_leaves_repo_unusable.mdwn
deleted file mode 100644
index 122224a8f..000000000
--- a/doc/bugs/backend_version_upgrade_leaves_repo_unusable.mdwn
+++ /dev/null
@@ -1,72 +0,0 @@
-foo is a local repo, bar is a bare remote.
-
-I upgraded foo's git-annex to 0.20110325 and upgraded a local repo backend
-to version 2. I then ran `git annex copy . --to bar` and checked the
-remote. This created WORM:SHA512--123123 files in annex/objects.
-Understandable but unwanted. So I upgraded git-annex on bar's machine, as
-well.
-
- % git annex copy . --to bar
- copy quux (checking bar) git-annex-shell: Repository version 1 is not supported. Upgrade this repository: git-annex upgrade (to bar)
- git-annex-shell: Repository version 1 is not supported. Upgrade this repository: git-annex upgrade
- rsync: connection unexpectedly closed (0 bytes received so far) [sender]
- rsync error: error in rsync protocol data stream (code 12) at io.c(601) [sender=3.0.7]
-
- rsync failed -- run git annex again to resume file transfer
- failed
-
-Running `git annex upgrade` on bar's machine I get:
-
- % git annex upgrade
- upgrade (v1 to v2) (moving content...) git-annex: Prelude.read: no parse
-
-Again, bar is a bare repo.
-Running the copy job again, I am still getting the same error as above (as expected). Partial contents of annex/objects on bar:
-
- [...]
- SHA512:123
- WORM:SHA512--234
- [...]
-
-
--- RichiH
-
-> Upgrading bare repos to v2 generally works fine, so I actually need
-> to see the full content of annex/, not a fragment, in order to debug this.
-> (Filename contents I don't need to see.) Feel free to email me the details at
-> joey@kitenet.net if you don't want to post them here. --[[Joey]]
-
->> Sent. -- RichiH
-
->>> Ok, I'm going to go work on my reading comprehension. I see now
->>> that you
->>> explained the problem pretty well. The problem is caused by these
->>> few weird v1 mixed with v2 keys in the annex.
->>> Ones like "annex/objects/WORM:SHA512--$sha512".
->>>
->>> That's a v1 key, but a corrupt form of the key; it's missing the
->>> size and mtime fields that all WORM keys have in v1. And
->>> the filename is itself a key, a v2 SHA512 key. These were
->>> created when you did the `git annex copy to the v1 bare repo.
->>> In v2, git-annex-shell takes a full key object, while in v1,
->>> it takes a key name and a backend name. This incompatability
->>> leads to the weird behavior seen.
->>>
->>> I had suggested you delete data.. don't. On second thought,
->>> you shouldn't delete anything. I'll simply make the v2 upgrade
->>> detect and work around this bug.
->>> --[[Joey]]
-
->>>> This should be fixed in current git. The scambled keys will be
->>>> fixed up on upgrade. Thanks for your patience! [[done]] --[[Joey]]
-
->>>>> I should stop reading your answers via git; by the time I got to
->>>>> "second thoughts", I had already deleted the files & directories
->>>>> in question, upgraded the bare repo and was busy uploading from my
->>>>> local repo. I agree that taking care of this in the upgrade code
->>>>> is the cleanest approach, by the way.
->>>>> No need to thank me for my patience; thank you for your quickness!
->>>>> RichiH
->>>>>
->>>>> PS: If I get a handle on the mtime issue in the SHA backend, git
->>>>> annex will be pretty much perfect :)
diff --git a/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa.mdwn b/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa.mdwn
deleted file mode 100644
index 87e937d42..000000000
--- a/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa.mdwn
+++ /dev/null
@@ -1,22 +0,0 @@
-What steps will reproduce the problem?
-I was trying to pair two repositories on 2 different computers,
-but my public key had this email address at the end:
-bachir@Bachirs-iMac.local
-
-What is the expected output? What do you see instead?
-I was expecting successful pairing.
-I got:
-bad comment in ssh public key ssh-rsa
-AAB3....SAK
-bachir@Bachirs-iMac.local
-
-What version of git-annex are you using? On what operating system?
-I am using the package git-annex Version: 3.20120925
-on MacOSX Lion
-
-Please provide any additional information below.
-I've checked your code, seems to complain about the dash '-' in the email address
-bachir@Bachirs-iMac.local
-
-> This bug is already fixed, the fix is in the
-> 3.20121001 release. [[done]] --[[Joey]]
diff --git a/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_1_15cce6e6f455e83f4362a38c561bc973._comment b/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_1_15cce6e6f455e83f4362a38c561bc973._comment
deleted file mode 100644
index 5f2dcca85..000000000
--- a/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_1_15cce6e6f455e83f4362a38c561bc973._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="https://lorrin.myopenid.com/"
- nickname="Lorrin Nelson"
- subject="Still seeing this"
- date="2013-07-29T07:44:36Z"
- content="""
-Trying to pair Ubuntu 13.04 (git-annex 3.20121112ubuntu4) with OS X 10.7.5 (not sure where to see version info, but it was marked 2013-07-23 on the download page).
-
-If the pairing is initiated on OS X and the Ubuntu machine tries to connect, the Ubuntu browser shows:
-Internal Server Error
-
-bad comment in ssh public key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCr0uArI+Yfusf+jICdv2tSCVQdydtoUuQixBHUGj2QlUlip4zf94HnCBBlSUhMuWBeaGUAAojp05Y3PaxQNS95bX1wWlhraQBx/8w23M68Q1L5Je60PWYha1dLREApJjl5eGxuTIXUip8UcDXIH/esB7G/lMihTjniEBqS430NxrfO01uU9HuNgQfO9zvTcJhjG+myek1GU2bx8GzYc7HAZ8VA3TsYKLaWA63w8WyFC/Hz+kunp9X8dNE11KpmNFVSk/j1QGImUOVcnGd2WupMyjLtRAKL3ikL6tBK2YccZUKPSNYek657CFR8uVek5czzQQCY5bFRAH3Pw9htsPgv user@host.fqdn
-
-Where user@host.fqdn is the user and DNS locally-resolvable host name of the Mac. However, this isn't a key I recognize. Is it generating a new one on the fly? There already are key pairs set up between the machines in my ~/.ssh directory; not sure if relevant.
-
-
-"""]]
diff --git a/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_2_e9e1f38880a32610b3fbce475bffc3e4._comment b/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_2_e9e1f38880a32610b3fbce475bffc3e4._comment
deleted file mode 100644
index 6028f49ed..000000000
--- a/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_2_e9e1f38880a32610b3fbce475bffc3e4._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.21"
- subject="comment 2"
- date="2013-07-30T18:16:06Z"
- content="""
-Local pairing always sets up a dedicated ssh key that can only be used for git-annex syncing.
-
-I'm afraid that, unless your login is literally \"user@host.fqdn\", you've obfuscated exactly the information I'd need to diagnose the problem. If you don't feel comfortable including the real information here you can mail it to me; see [[privacy]]
-
-Also, you may want to file a new bug report, since I *did* fix and close this bug. You're probably seeing a slightly different bug.
-"""]]
diff --git a/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_3_51da7f5881f65422328d341e5ab0d250._comment b/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_3_51da7f5881f65422328d341e5ab0d250._comment
deleted file mode 100644
index 4cf86f646..000000000
--- a/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_3_51da7f5881f65422328d341e5ab0d250._comment
+++ /dev/null
@@ -1,33 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlEhzszkzOIy8-Rx8b2mcr75QcnIc6O_OA"
- nickname="Rachel"
- subject="I'm afraid I'm getting this too"
- date="2013-09-12T12:48:04Z"
- content="""
-Very similar setup. Initially set up on a Mac, then tried to set up the first local pairing with a Linux system. Basically seeing exactly the same thing.
-
- bad comment in ssh public key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDa09lpmgLeRVF1KZn2gX6tmBH4Jpcou/rkPbhwLoFNLtQsdNrbjDKuyc4pDbUhexWVvub1YCLItLK0vYRdMvoJWjNzy926sHs8CxXFVg6PMQXw3wOHousSn0NkVfwUMNn5aS+1vz/WDlStmg7WzXgiPg1Whn6CKIomxA63rUMe3I+2nVkyO6jGlOkliPApVP2utURJbyxBDYDB+Ys7zUxvEcCekhxJO263myuo2gwI4A3mfTLRJMzbz8frRZJz5iuUIcOHaIDy6n0qKFq18BDux4SDwNjQ34yti5yqveRBMwFndHQYN6YHk1k26h0kyhb2T6lXaaAirSqa3dwfZuKp rachel@celestia.local
-
-
-# Versions and Stuff:
-
-## Mac:
-
-* OS X 10.8.4
-* git-annex 4.20130909-ga29f960 (downloaded about half an hour ago!)
-* BTW I have git installed from Homebrew, version 1.8.3.4 in my shell's $PATH, but obviously /usr/bin/git from the system is intact.
-* Hostname: celestia.local
-* Username: rachel
-
-## Linux:
-* Ubuntu 13.04
-* git-annex 3.20121112ubuntu4 (from Ubuntu's own repos)
-* I note that's later than the version you said this bug was fixed in, hence the report. :-)
-* Hostname: twilight.local (mDNS domain not appended even by hostname -f but avahi is working)
-* Username: rachel
-
-IPv6 is active, but I note a comment somewhere that that's probably not relevant for git-annex.
-
-Machines are very local to each other, in the same room, connected via a gigabit switch. They can definitely see each other. :-)
-
-"""]]
diff --git a/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_4_ba384314c1e47ec4b72e1843e0500df9._comment b/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_4_ba384314c1e47ec4b72e1843e0500df9._comment
deleted file mode 100644
index 4b9e27bba..000000000
--- a/doc/bugs/bad_comment_in_ssh_public_key_ssh-rsa/comment_4_ba384314c1e47ec4b72e1843e0500df9._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmpBDWko1yZmngBYzm_CeBv8RjoIMXaINE"
- nickname="Rachel"
- subject="latest works"
- date="2013-09-12T13:19:09Z"
- content="""
-Downloaded the latest tarball (4.20130911-g6625d0e) and that seems to be able to pair ok.
-
-Different bug though: It objects to push.default = simple in ~/.gitconfig, but no such complaint on osx. But that's a different bug; i'll report separately when I'm a bit more up to speed.
-"""]]
diff --git a/doc/bugs/bad_merge_commit_deleting_all_files.mdwn b/doc/bugs/bad_merge_commit_deleting_all_files.mdwn
new file mode 100644
index 000000000..affabdb02
--- /dev/null
+++ b/doc/bugs/bad_merge_commit_deleting_all_files.mdwn
@@ -0,0 +1,78 @@
+In our family repository, we had an event where git-annex committed a bad
+merge commit. This had the effect of seeming to delete all the files
+in the repository. However, it is completely recoverable with no file loss.
+
+Other users have reported apparently the same problem.
+--[[Joey]]
+
+> This appears to be a race, and I have put in a fix for that.
+> It will be released in git-annex 5.20140709.
+>
+> It's a little bit difficult to say for sure that the bug is fixed, since
+> I don't have a good way to reproduce it. However, everything I am seeing
+> is consistent with my analysis, at least as far as the people who
+> reported this happening with versions 5.20140613-5.20140707.
+> Calling this [[done]]. --[[Joey]]
+
+## recovery
+
+Look through the git log for the bad commit. It will be the one
+that deletes a lot of files. Since the bad commit is a merge commit,
+you need to include the -c switch:
+
+ git log -c --stat
+
+Once the bad commit sha is found, revert it. Since it's a merge commit,
+you will need to pass -m 1 to git revert. If the repository you're working
+is uses direct mode, you will first need to switch it to indirect mode.
+
+ git annex indirect
+ git revert -m 1 a36077cf1234eeb755fec8f699d3cbaaee817bac
+
+(It's possible, but I think unlikely that this will pick the wrong
+branch of the merge to revert. If it did, "git reset --hard HEAD@{1}" and
+redo, passing `-m 2` instead.)
+
+Once the revert is done, all your files should be back. You can switch
+the repository back to direct mode if desired (`git annex direct`)
+and can `git annex sync` to push the fix out to all other clones.
+Everywhere the fix lands should restore the deleted files.
+
+Note that it's possible that some repositories may have pruned the deleted
+files as unused. This is most likely to happen in the repository that made
+the bad merge commit in the first place.
+
+If you have any problems following these instructions, please contact
+<urgent2014@joeyh.name> for support.
+
+[[!tag confirmed urgent]]
+
+## analysis
+
+In the one case I have of this happening, the commit was made by the
+git-annex assistant, in direct mode. It was git-annex version 5.20140613.
+This version had a bug that caused it to do unncessary merge commits.
+That bug has been fixed in 5.20140707.
+That is apparently related, in that it caused the assistant to do much more
+work than normal.
+
+But, I don't think that bug is fully responsible for the
+problem. I think a few users have run into this bug before, although I have
+never succeeded in getting a full problem description from anyone who might
+have. I think that the unncessary commit bug made it more likely to happen.
+(This suggests a race may be involved.)
+
+The bad merge commit looked like this:
+
+<pre>
+commit a36077cf1234eeb755fec8f699d3cbaaee817bac
+Merge: 52ecff2 9d8bfd4
+Author: xxx
+Date: Mon Jul 7 19:58:18 2014 -0400
+
+ merge refs/heads/synced/master
+</pre>
+
+Both parent trees were good and contained all files. In fact, the 2
+parent trees contained the same set of files. But the merge commit
+"resolved" the merge by deleting all the files.
diff --git a/doc/bugs/bad_merge_commit_deleting_all_files/comment_1_3503644244e39c65d531807769365f50._comment b/doc/bugs/bad_merge_commit_deleting_all_files/comment_1_3503644244e39c65d531807769365f50._comment
new file mode 100644
index 000000000..6b24ea958
--- /dev/null
+++ b/doc/bugs/bad_merge_commit_deleting_all_files/comment_1_3503644244e39c65d531807769365f50._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 1"
+ date="2014-07-09T18:20:13Z"
+ content="""
+mergeDirect locks .git/index, so no other git command should use it while the merge is in progress.
+
+However, if the index file is deleted, and stageMerge runs, it stages deletion of all files. So that looks likely to be part of the story.
+"""]]
diff --git a/doc/bugs/bad_merge_commit_deleting_all_files/comment_2_9c4c950da0c07bf7c7edfcc7cc3b6011._comment b/doc/bugs/bad_merge_commit_deleting_all_files/comment_2_9c4c950da0c07bf7c7edfcc7cc3b6011._comment
new file mode 100644
index 000000000..19dcf1ca0
--- /dev/null
+++ b/doc/bugs/bad_merge_commit_deleting_all_files/comment_2_9c4c950da0c07bf7c7edfcc7cc3b6011._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 2"
+ date="2014-07-09T18:25:08Z"
+ content="""
+Also pointing in the direction of a race: The bad commit happened 3 seconds after another commit did. The other commit was an empty commit, so caused by the bug in 5.20140613.
+"""]]
diff --git a/doc/bugs/bad_merge_commit_deleting_all_files/comment_3_be42de12faf15562265ad6cf8964f5db._comment b/doc/bugs/bad_merge_commit_deleting_all_files/comment_3_be42de12faf15562265ad6cf8964f5db._comment
new file mode 100644
index 000000000..dd689eae7
--- /dev/null
+++ b/doc/bugs/bad_merge_commit_deleting_all_files/comment_3_be42de12faf15562265ad6cf8964f5db._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="theory"
+ date="2014-07-09T18:31:07Z"
+ content="""
+Suppose we have 2 mergeDirect's A and B running at the same time somehow, with B around 3 seconds behind A, and this sequence of events occurs:
+
+1. A copies index file to index.lock
+2. A stages an empty commit
+3. B copies index file to index.lock
+4. A finishes its commit, and so renames index.lock back to index.
+5. B runs stageMerge
+
+So, B is now running stageMerge with `GIT_INDEX_FILE` pointing to an index.lock that DNE. As noted above, this causes a deletion of all files to get staged by B.
+
+If this is the problem, git-annex could fix it using a real lock file. (The index.lock only prevents other git commands from manipulating the index during the merge.)
+"""]]
diff --git a/doc/bugs/bad_merge_commit_deleting_all_files/comment_4_d5cbd1440e4d6706eb14644a4ff1883b._comment b/doc/bugs/bad_merge_commit_deleting_all_files/comment_4_d5cbd1440e4d6706eb14644a4ff1883b._comment
new file mode 100644
index 000000000..1440ee46b
--- /dev/null
+++ b/doc/bugs/bad_merge_commit_deleting_all_files/comment_4_d5cbd1440e4d6706eb14644a4ff1883b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 4"
+ date="2014-07-09T18:36:36Z"
+ content="""
+The above race was first introduced in version 5.20140613.
+"""]]
diff --git a/doc/bugs/bad_merge_commit_deleting_all_files/comment_6_c532859deb682dff9e59037d08f66a51._comment b/doc/bugs/bad_merge_commit_deleting_all_files/comment_6_c532859deb682dff9e59037d08f66a51._comment
new file mode 100644
index 000000000..b1a5d32a6
--- /dev/null
+++ b/doc/bugs/bad_merge_commit_deleting_all_files/comment_6_c532859deb682dff9e59037d08f66a51._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 6"
+ date="2014-07-09T19:01:33Z"
+ content="""
+Note that [[Assistant_merge_loop]], which contributes to this bug, is not actually fixed in 5.20140707, it seems.
+"""]]
diff --git a/doc/bugs/bad_merge_commit_deleting_all_files/comment_6_c946d2793fe0354151c447ddd0e59fd7._comment b/doc/bugs/bad_merge_commit_deleting_all_files/comment_6_c946d2793fe0354151c447ddd0e59fd7._comment
new file mode 100644
index 000000000..20006ff6c
--- /dev/null
+++ b/doc/bugs/bad_merge_commit_deleting_all_files/comment_6_c946d2793fe0354151c447ddd0e59fd7._comment
@@ -0,0 +1,41 @@
+[[!comment format=mdwn
+ username="http://jamesjustjames.wordpress.com/"
+ nickname="purpleidea"
+ subject="The guy with this bug."
+ date="2014-07-09T18:50:36Z"
+ content="""
+* Sure enough looking though the git log, I found one that removed 81
+files. It was useful to grep for 'deletions'.
+
+* It turned out there were actually two, one from each of the two
+git-annex-assistant machines. I had to do the revert separately on each
+machine for the corresponding commit that it had made.
+
+* I typically run the latest version that the webapp offers, within
+about a week or so of it prompting me (unless I'm away for a while).
+This means that maybe you can track down the approximate version where
+this occured by looking at the two commit dates of the \"bad\" merges:
+
+commit bbe43fb638d101d5b9bfa65a4023e7f9d90e72e6
+Merge: 351cca8 95935ce
+Author: James <james@computer1>
+Date: Tue Jul 8 02:15:57 2014 -0400
+
+commit 1902a3af25b1ce3723c38877c7f25907885040e4
+Merge: 125b984 efcece7
+Author: James <james@computer2>
+Date: Tue Jul 8 02:15:27 2014 -0400
+
+* I use the command line for pretty much most of what I do. Funny enough
+though I only really use git-annex through the webapp.
+
+* Bug wise I don't know if this is relevant, but I have done the
+following:
+> added/changed/removed files to ~/annex on computer one while git-annex
+wasn't running
+> added/changed/removed files to ~/annex on computer two while it wasn't
+running
+> started git-annex on computer one
+> started git-annex on computer two
+> and similar combinations of the above...
+"""]]
diff --git a/doc/bugs/bad_merge_commit_deleting_all_files/comment_7_24dea380fcf470e0ea488dece0410f37._comment b/doc/bugs/bad_merge_commit_deleting_all_files/comment_7_24dea380fcf470e0ea488dece0410f37._comment
new file mode 100644
index 000000000..0cb39e7c8
--- /dev/null
+++ b/doc/bugs/bad_merge_commit_deleting_all_files/comment_7_24dea380fcf470e0ea488dece0410f37._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="more confirmation of race theory"
+ date="2014-07-09T19:26:55Z"
+ content="""
+@purpleidea showed me his git log, and as I had expected, there were previous empty commits immediately before the 2 commits that removes all of his files (which happened independenctly on 2 different machines running the assistant). This is consistent with my suspicion it's a race. Note that the assistant's git ref watcher can easily run multiple merges concurrently if multiple refs change.
+"""]]
diff --git a/doc/bugs/bare_git_repos.mdwn b/doc/bugs/bare_git_repos.mdwn
deleted file mode 100644
index 5e9100acf..000000000
--- a/doc/bugs/bare_git_repos.mdwn
+++ /dev/null
@@ -1,29 +0,0 @@
-It would be nice if git-annex could be used in bare git repos.
-However, that is not currently supported. Problems include:
-
-* git-annex often does not read a git repo's config before touching it,
- so it doesn't know if the repo is bare or not
- (reading the config when operating on ssh repos would be a pain and SLOW;
- I had some of that code in as of 1aa19422ac8748eeff219ac4f46df166dae783c5,
- but ripped it all out)
-* .. which results in creating `.git/annex` in a bare repo, which mightily
- confuses git (so it will complain that the bare repo is not
- a git repo at all!)
-* `.git-annex/` needs to have state recorded to it and committed, and that
- is not possible with a bare repo. (If [[todo/branching]] were done,
- that might be fixed.) (now fixed)
-
-----
-
-Update: Now that git-annex-shell is used for accessing remote repos,
-it would be possible to add smarts about bare repos there, and avoid
-some of the above problems. Probably only the state recording problem
-remains.
-
-A possible other approach to the state recording repo is to not
-record state changes on the remote in that case. Git-annex already
-records remote state changes locally whenever it modifies the state of a
-remote. --[[Joey]]
-
-> And... [[done]]! See [[/bare_repositories]] for current status
-> and gotchas. --[[Joey]]
diff --git a/doc/bugs/bencode.mdwn b/doc/bugs/bencode.mdwn
new file mode 100644
index 000000000..92257b7d8
--- /dev/null
+++ b/doc/bugs/bencode.mdwn
@@ -0,0 +1,32 @@
+### Please describe the problem.
+
+I have been packaging bencode as a dependency for git-annex on Debian.
+
+I contacted the upstream authors in reference to getting some licensing issues fixed and they pointed me to a package called "AttoBencode" which
+might be a more recent and maintained option for bencode parsing in Git Annex.
+
+http://hackage.haskell.org/package/AttoBencode
+
+This isn't actually a bug, I just thought this would be a good place to bring this up.
+
+For what it's worth, I like the idea that packages can become stable (or old) and still serve their purpose so if bencode works just fine I think that's great.
+
+### What steps will reproduce the problem?
+
+
+### What version of git-annex are you using? On what operating system?
+
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> Closing, since it's been over a month with no followup to my question,
+> and I cannot find any license problems at all with bencode. --[[Joey]]
+> [[done]]
diff --git a/doc/bugs/bencode/comment_1_24bc8c996eb32f344b3f091e14171a15._comment b/doc/bugs/bencode/comment_1_24bc8c996eb32f344b3f091e14171a15._comment
new file mode 100644
index 000000000..822139471
--- /dev/null
+++ b/doc/bugs/bencode/comment_1_24bc8c996eb32f344b3f091e14171a15._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-01-05T15:53:32Z"
+ content="""
+Rewriting the torrent library to use attobencode feels like yak shaving.
+It's not like parsing torrents is a performance bottleneck in this
+situation, that would need an attoparsec based parser for speed.
+
+I don't see any licensing problems in bencode.
+"""]]
diff --git a/doc/bugs/bittorrent_special_url_double-encoding.mdwn b/doc/bugs/bittorrent_special_url_double-encoding.mdwn
new file mode 100644
index 000000000..ebbf76a34
--- /dev/null
+++ b/doc/bugs/bittorrent_special_url_double-encoding.mdwn
@@ -0,0 +1,177 @@
+[[!meta title="mojibake in aria2c output"]]
+
+### Please describe the problem.
+
+French messages in the `aria2c` client called from `git-annex` are garbled, probably double utf-8 encoded.
+
+### What steps will reproduce the problem?
+
+download a bittorrent url with git-torrent using a UTF8 locale.
+
+### What version of git-annex are you using? On what operating system?
+
+`5.20150205-gbf9058a` on current debian jessie.
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+anarcat@marcos:iso(master)$ /srv/downloads.kitenet.net/git-annex/linux/current/git-annex.linux/git-annex addurl http://images.kali.org/kali-linux-1.1.0-amd64-mini.torrent
+(downloading torrent file...)
+--2015-02-09 22:08:58-- http://images.kali.org/kali-linux-1.1.0-amd64-mini.torrent
+Résolution de images.kali.org (images.kali.org)… 50.7.37.130
+Connexion à images.kali.org (images.kali.org)|50.7.37.130|:80… connecté.
+requête HTTP transmise, en attente de la réponse… 200 OK
+Taille : 2668 (2,6K) [application/octet-stream]
+Sauvegarde en : « ../.git/annex/misctmp/torrent31107 »
+
+100%[=====================================================================================================================================================================================================>] 2 668 --.-K/s ds 0,002s
+
+2015-02-09 22:08:59 (1,56 MB/s) — « ../.git/annex/misctmp/torrent31107 » sauvegardé [2668/2668]
+
+addurl images.kali.org_kali_linux_1.1.0_amd64_mini.torrent/kali_linux_1.1.0_amd64_mini.iso (from bittorrent)
+
+
+02/09 22:08:59 [ERROR] Exception caught while loading DHT routing table from /home/anarcat/.aria2/dht.dat
+Exception: [DHTRoutingTableDeserializer.cc:83] errorCode=1 Failed to load DHT routing table from /home/anarcat/.aria2/dht.dat
+
+02/09 22:08:59 [NOTICE] IPv4 DHT: listening on UDP port 6912
+
+02/09 22:08:59 [ERROR] Erreur d'intégrité détectée. fichier=../.git/annex/misctmp/URL--http&c%%images.kali.org%kali-linux-1.1.0-amd64-mini.torrent/kali-linux-1.1.0-amd64-mini
+
+02/09 22:08:59 [NOTICE] IPv4 BitTorrent: listening on TCP port 6910
+
+02/09 22:08:59 [NOTICE] IPv6 BitTorrent: listening on TCP port 6910
+[#9acd0a 0B/27MiB(0%) CN:0 SD:0 DL:0B]
+[#9acd0a 0B/27MiB(0%) CN:29 SD:0 DL:0B]
+[#9acd0a 0B/27MiB(0%) CN:29 SD:1 DL:0B]
+[#9acd0a 0B/27MiB(0%) CN:27 SD:5 DL:0B]
+[#9acd0a 464KiB/27MiB(1%) CN:27 SD:6 DL:612KiB ETA:44s]
+[#9acd0a 1.0MiB/27MiB(3%) CN:27 SD:6 DL:604KiB ETA:44s]
+[#9acd0a 1.5MiB/27MiB(5%) CN:27 SD:7 DL:583KiB ETA:44s]
+[#9acd0a 2.2MiB/27MiB(8%) CN:26 SD:8 DL:600KiB ETA:42s]
+[#9acd0a 2.7MiB/27MiB(10%) CN:26 SD:10 DL:596KiB ETA:41s]
+[#9acd0a 3.2MiB/27MiB(12%) CN:26 SD:11 DL:579KiB ETA:41s]
+[#9acd0a 3.8MiB/27MiB(14%) CN:27 SD:11 DL:584KiB ETA:40s]
+[#9acd0a 4.4MiB/27MiB(16%) CN:27 SD:11 DL:584KiB ETA:39s]
+[#9acd0a 5.0MiB/27MiB(18%) CN:26 SD:11 DL:589KiB ETA:38s]
+[#9acd0a 5.5MiB/27MiB(20%) CN:26 SD:11 DL:590KiB ETA:37s]
+[#9acd0a 6.2MiB/27MiB(23%) CN:26 SD:11 DL:595KiB ETA:35s]
+[#9acd0a 6.8MiB/27MiB(25%) CN:26 SD:11 DL:596KiB ETA:34s]
+[#9acd0a 7.3MiB/27MiB(27%) CN:24 SD:9 DL:594KiB ETA:33s]
+[#9acd0a 7.9MiB/27MiB(29%) CN:24 SD:9 DL:594KiB ETA:32s]
+[#9acd0a 8.4MiB/27MiB(31%) CN:24 SD:10 DL:591KiB ETA:32s]
+[#9acd0a 9.1MiB/27MiB(33%) CN:24 SD:10 DL:595KiB ETA:30s]
+[#9acd0a 9.7MiB/27MiB(35%) CN:24 SD:10 DL:596KiB ETA:29s]
+[#9acd0a 10MiB/27MiB(37%) CN:22 SD:9 DL:589KiB ETA:29s]
+[#9acd0a 10MiB/27MiB(39%) CN:10 SD:8 DL:588KiB ETA:28s]
+[#9acd0a 11MiB/27MiB(41%) CN:9 SD:8 DL:583KiB ETA:27s]
+[#9acd0a 11MiB/27MiB(43%) CN:9 SD:8 DL:587KiB ETA:26s]
+[#9acd0a 12MiB/27MiB(45%) CN:8 SD:7 DL:586KiB ETA:25s]
+[#9acd0a 12MiB/27MiB(48%) CN:8 SD:7 DL:584KiB ETA:24s]
+[#9acd0a 13MiB/27MiB(50%) CN:8 SD:8 DL:585KiB ETA:23s]
+[#9acd0a 14MiB/27MiB(52%) CN:8 SD:8 DL:574KiB ETA:23s]
+[#9acd0a 14MiB/27MiB(53%) CN:8 SD:8 DL:567KiB ETA:22s]
+[#9acd0a 14MiB/27MiB(55%) CN:8 SD:8 DL:556KiB ETA:22s]
+[#9acd0a 15MiB/27MiB(57%) CN:8 SD:8 DL:555KiB ETA:21s]
+[#9acd0a 15MiB/27MiB(59%) CN:8 SD:8 DL:550KiB ETA:20s]
+[#9acd0a 16MiB/27MiB(60%) CN:8 SD:8 DL:543KiB ETA:19s]
+[#9acd0a 16MiB/27MiB(62%) CN:8 SD:8 DL:540KiB ETA:18s]
+[#9acd0a 17MiB/27MiB(64%) CN:8 SD:8 DL:537KiB ETA:18s]
+[#9acd0a 18MiB/27MiB(66%) CN:8 SD:8 DL:535KiB ETA:17s]
+[#9acd0a 18MiB/27MiB(68%) CN:8 SD:8 DL:525KiB ETA:16s]
+[#9acd0a 18MiB/27MiB(70%) CN:8 SD:8 DL:522KiB ETA:15s]
+[#9acd0a 19MiB/27MiB(72%) CN:8 SD:8 DL:522KiB ETA:14s]
+[#9acd0a 19MiB/27MiB(74%) CN:8 SD:8 DL:523KiB ETA:13s]
+[#9acd0a 20MiB/27MiB(76%) CN:8 SD:8 DL:517KiB ETA:12s]
+[#9acd0a 21MiB/27MiB(78%) CN:8 SD:8 DL:522KiB ETA:11s]
+[#9acd0a 21MiB/27MiB(80%) CN:13 SD:8 DL:532KiB ETA:10s]
+[#9acd0a 22MiB/27MiB(82%) CN:13 SD:8 DL:541KiB ETA:8s]
+[#9acd0a 22MiB/27MiB(84%) CN:13 SD:8 DL:544KiB ETA:7s]
+[#9acd0a 23MiB/27MiB(86%) CN:13 SD:8 DL:552KiB ETA:6s]
+[#9acd0a 23MiB/27MiB(88%) CN:13 SD:8 DL:549KiB ETA:5s]
+[#9acd0a 24MiB/27MiB(91%) CN:13 SD:8 DL:558KiB ETA:4s]
+[#9acd0a 25MiB/27MiB(93%) CN:13 SD:8 DL:570KiB ETA:3s]
+[#9acd0a 25MiB/27MiB(95%) CN:13 SD:8 DL:576KiB ETA:2s]
+[#9acd0a 26MiB/27MiB(97%) CN:13 SD:8 DL:587KiB ETA:1s]
+[#9acd0a 26MiB/27MiB(99%) CN:13 SD:8 DL:592KiB]
+
+02/09 22:09:53 [NOTICE] Le téléchargement des fichiers sélectionnés est terminé.
+
+02/09 22:09:53 [NOTICE] Le partage (seeding) est terminé
+[#9acd0a SEED(0.0) CN:9 SD:4]
+[#9acd0a SEED(0.0) CN:0 SD:0]
+
+02/09 22:09:55 [NOTICE] Téléchargement terminé: ../.git/annex/misctmp/URL--http&c%%images.kali.org%kali-linux-1.1.0-amd64-mini.torrent/kali-linux-1.1.0-amd64-mini
+
+02/09 22:09:55 [NOTICE] Votre ratio de partage était de 0.0, envoyé/téléchargé=0B/27MiB
+
+
+Résultats du téléchargement:
+gid |stat|avg speed |path/URI
+======+====+===========+=======================================================
+9acd0a|OK | 518KiB/s|../.git/annex/misctmp/URL--http&c%%images.kali.org%kali-linux-1.1.0-amd64-mini.torrent/kali-linux-1.1.0-amd64-mini/kali-linux-1.1.0-amd64-mini.iso
+
+Légende du statut:
+(OK): téléchargement terminé.
+ok
+addurl images.kali.org_kali_linux_1.1.0_amd64_mini.torrent/kali_linux_1.1.0_amd64_mini.txt.sha1sum (from bittorrent)
+
+
+02/09 22:09:56 [NOTICE] IPv4 DHT: listening on UDP port 6990
+
+02/09 22:09:56 [NOTICE] Le fichier de contrôle défectueux ../.git/annex/misctmp/URL--http&c%%images.kali.org%kali-linux-1.1.0-amd64-mini.torrent/kali-linux-1.1.0-amd64-mini.aria2 a été supprimé car le fichier téléchargé ../.git/annex/misctmp/URL--http&c%%images.kali.org%kali-linux-1.1.0-amd64-mini.torrent/kali-linux-1.1.0-amd64-mini n'existe pas.
+
+02/09 22:09:56 [ERROR] Erreur d'intégrité détectée. fichier=../.git/annex/misctmp/URL--http&c%%images.kali.org%kali-linux-1.1.0-amd64-mini.torrent/kali-linux-1.1.0-amd64-mini
+
+02/09 22:09:56 [NOTICE] IPv4 BitTorrent: listening on TCP port 6899
+
+02/09 22:09:56 [NOTICE] IPv6 BitTorrent: listening on TCP port 6899
+[#5f49f7 0B/75B(0%) CN:0 SD:0 DL:0B]
+[#5f49f7 0B/75B(0%) CN:28 SD:0 DL:0B]
+[#5f49f7 0B/75B(0%) CN:28 SD:1 DL:0B]
+
+02/09 22:10:00 [NOTICE] Le téléchargement des fichiers sélectionnés est terminé.
+
+02/09 22:10:00 [NOTICE] Le partage (seeding) est terminé
+[#5f49f7 SEED(0.0) CN:22 SD:3]
+[#5f49f7 SEED(0.0) CN:0 SD:0]
+
+02/09 22:10:02 [NOTICE] Téléchargement terminé: ../.git/annex/misctmp/URL--http&c%%images.kali.org%kali-linux-1.1.0-amd64-mini.torrent/kali-linux-1.1.0-amd64-mini
+
+02/09 22:10:02 [NOTICE] Votre ratio de partage était de 0.0, envoyé/téléchargé=0B/75B
+
+
+Résultats du téléchargement:
+gid |stat|avg speed |path/URI
+======+====+===========+=======================================================
+5f49f7|OK | 19B/s|../.git/annex/misctmp/URL--http&c%%images.kali.org%kali-linux-1.1.0-amd64-mini.torrent/kali-linux-1.1.0-amd64-mini/kali-linux-1.1.0-amd64-mini.txt.sha1sum
+
+Légende du statut:
+(OK): téléchargement terminé.
+ok
+(recording state in git...)
+anarcat@marcos:iso(master +)$ locale
+LANG=fr_CA.UTF-8
+LANGUAGE=
+LC_CTYPE="fr_CA.UTF-8"
+LC_NUMERIC="fr_CA.UTF-8"
+LC_TIME="fr_CA.UTF-8"
+LC_COLLATE="fr_CA.UTF-8"
+LC_MONETARY="fr_CA.UTF-8"
+LC_MESSAGES="fr_CA.UTF-8"
+LC_PAPER="fr_CA.UTF-8"
+LC_NAME="fr_CA.UTF-8"
+LC_ADDRESS="fr_CA.UTF-8"
+LC_TELEPHONE="fr_CA.UTF-8"
+LC_MEASUREMENT="fr_CA.UTF-8"
+LC_IDENTIFICATION="fr_CA.UTF-8"
+LC_ALL=
+# End of transcript or log.
+"""]]
+
+Previous similar UTF-8 bug: [[forget_corrupts_non-ascii_chars]]. Looks similar. --[[anarcat]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/box.com.mdwn b/doc/bugs/box.com.mdwn
new file mode 100644
index 000000000..aab8ebdbb
--- /dev/null
+++ b/doc/bugs/box.com.mdwn
@@ -0,0 +1,35 @@
+### Please describe the problem.
+
+I´m trying to use an box.com acount as special remote repository for transfering data amoung my clients. Adding the box.com is possible. On the box.com website i see that git-annex has create an folder, but there is no syncing.
+
+When i try to enable the box.com Repository on an another client i get an Internal Error Server: bad creds.
+
+
+### What version of git-annex are you using? On what operating system?
+
+Git-Annex Version: git-annex version 5.20140830-g3c96b79
+
+Mac OS X 10.9.4
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+03/Sep/2014:20:41:31 +0200 [Error#yesod-core] bad creds @(yesod-core-1.2.19:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:503:5)
+
+[2014-09-03 20:41:47 CEST] main: Syncing with Box.com
+
+ bad creds
+
+ bad creds
+
+ bad creds
+
+ bad creds
+
+# End of transcript or log.
+"""]]
+
+> [[done]]; fixed in [[!commit d84eab8a8af0c8cfa85de5baabfd9a2cf306f968]]
diff --git a/doc/bugs/box.com/comment_1_d904a08519424cb9f599b2154d1ef953._comment b/doc/bugs/box.com/comment_1_d904a08519424cb9f599b2154d1ef953._comment
new file mode 100644
index 000000000..d230e52aa
--- /dev/null
+++ b/doc/bugs/box.com/comment_1_d904a08519424cb9f599b2154d1ef953._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-09-18T19:28:56Z"
+ content="""
+Ok, I managed to reproduce this. In my case, there was no \"Bad creds\" message because the broken creds data it used happened to contain a newline, but same problem; the creds stored by the webapp are not used properly when re-enabling the box.com remote elsewhere. Same problem would affect other special remotes using embedded creds and shared encryption.
+
+Seems to be a bug introduced in [[!commit fbdeeeed5fa276d94be587c8916d725eddcaf546]]. Despite what the commit says, the embedded creds did get encrypted with the shared gpg key. I have reverted that commit to fix this problem.
+"""]]
diff --git a/doc/bugs/bug_in_download_prebuilt_linux_tarball__44___and_constraints_issues_with_3.20121112.mdwn b/doc/bugs/bug_in_download_prebuilt_linux_tarball__44___and_constraints_issues_with_3.20121112.mdwn
deleted file mode 100644
index 4a942ec9e..000000000
--- a/doc/bugs/bug_in_download_prebuilt_linux_tarball__44___and_constraints_issues_with_3.20121112.mdwn
+++ /dev/null
@@ -1,45 +0,0 @@
-What steps will reproduce the problem?
-
-First issue:
-* The prebuilt tarball doesn't synchronize properly.
-
-Reproduce:
-* Download and untar tarball
-* Start gitannex webapp on multiple computers(i had three in use)
-* Synchronize with xmpp and an ssh server backend.
-* The tarball versions don't push/get from ssh server backend.
-
-Second issue:
-* I can't install git-annex on ubuntu 12.10(Works fine in debian unstable)
-* http://hpaste.org/77684
-
-Reproduce:
-* cabal update
-* cabal install --only-dependencies
-* cabal configure
-* cabal build
-* cabal install --bindir=$HOME/bin
-
-With these constraints the cabal install can work:
-* cabal install --only-dependencies ./ --constraint=certificate==1.2.2 --constraint=crypto-pubkey-types==0.1.1
-
-What is the expected output? What do you see instead?
-* Tarball version doesn't push to ssh backend.
-* cabal install git-annex gives http://hpaste.org/77684
-
-What version of git-annex are you using? On what operating system?
-* git-annex 3.20121112 on debian unstale (working)
-* ubuntu 12.10(failing)
-
-Please provide any additional information below.
-
-With these constraints the cabal install can work:
-* cabal install --only-dependencies ./ --constraint=certificate==1.2.2 --constraint=crypto-pubkey-types==0.1.1
-
-NOTE:
-I couldn't get the markdown to cooperate, so using pl pagetype.
-
-> I suspect this is [[done]]..
->
-> I fixed some bugs in the prebuilt tarball in the past 2 days that prevented it
-> from transferring files.
diff --git a/doc/bugs/build_is_broken_at_commit_cc0e5b7.mdwn b/doc/bugs/build_is_broken_at_commit_cc0e5b7.mdwn
deleted file mode 100644
index 43074915f..000000000
--- a/doc/bugs/build_is_broken_at_commit_cc0e5b7.mdwn
+++ /dev/null
@@ -1,13 +0,0 @@
-the build is currently borked with
-
-<pre>
-ghc -O2 -threaded -Wall -ignore-package monads-fd -ignore-package monads-tf -outputdir tmp -IUtility -DWITH_ASSISTANT -DWITH_S3 -DWITH_WEBAPP -DWITH_PAIRING -DWITH_KQUEUE -DOSX --make git-annex -o tmp/git-annex Utility/libdiskfree.o Utility/libmounts.o Utility/libkqueue.o
-Assistant/Install.hs:19:8:
-Could not find module `Utility'
-Use -v to see a list of the files searched for.
-make: *** [git-annex] Error 1
-</pre>
-
-This was first introduced at commit e88e3ba
-
-> oops, -DOSX is not a good idea. [[done]] --[[Joey]]
diff --git a/doc/bugs/build_issue_with_latest_release_0.20110522-1-gde817ba.mdwn b/doc/bugs/build_issue_with_latest_release_0.20110522-1-gde817ba.mdwn
deleted file mode 100644
index a7bae50b8..000000000
--- a/doc/bugs/build_issue_with_latest_release_0.20110522-1-gde817ba.mdwn
+++ /dev/null
@@ -1,14 +0,0 @@
-A recent checkout of git-annex fails to build for me (I've installed the new dependancies as well)
-
-<pre>
-[70 of 81] Compiling Command.DropUnused ( Command/DropUnused.hs, Command/DropUnused.o )
-[71 of 81] Compiling Command.Status ( Command/Status.hs, Command/Status.o )
-
-Command/Status.hs:133:37: Not in scope: `swap'
-make: *** [git-annex] Error 1
-</pre>
-
-it fails on OSX 10.6.x with ghc 6.12.3 and a corresponding haskell-platform install. I ran a bisect and found that commit 75a3f5027f74565d909fb940893636d081d9872a seems to have broken git-annex for me, reverting the commit allows me to build git-annex, I have not run the tests to verify everything is working correctly though.
-
-> Probably `swap` appeared only in a newer GHC. I've reverted to avoid a
-> versioned build dependency. [[done]] --[[Joey]]
diff --git a/doc/bugs/build_problem_on_OSX.mdwn b/doc/bugs/build_problem_on_OSX.mdwn
deleted file mode 100644
index e859a1150..000000000
--- a/doc/bugs/build_problem_on_OSX.mdwn
+++ /dev/null
@@ -1,18 +0,0 @@
-I just squelched a bunch of build issues (to do with dependancies) on my autobuilder for OSX, this is currently happening
-
-<pre>
-install -d tmp
-ghc -O2 -Wall -outputdir tmp -IUtility -DWITH_ASSISTANT -DWITH_S3 -DWITH_WEBAPP -DWITH_PAIRING -DWITH_XMPP -DWITH_DNS -DWITH_KQUEUE -threaded --make git-annex -o tmp/git-annex Utility/libdiskfree.o Utility/libmounts.o Utility/libkqueue.o
-
-Assistant/Threads/NetWatcher.hs:29:0:
- warning: #warning Building without dbus support; will poll for network connection changes
-
-Assistant/Threads/MountWatcher.hs:36:0:
- warning: #warning Building without dbus support; will use mtab polling
-[ 29 of 259] Compiling Utility.OSX ( Utility/OSX.hs, tmp/Utility/OSX.o )
-
-Utility/OSX.hs:22:17: Not in scope: `myHomeDir'
-make: *** [git-annex] Error 1
-</pre>
-
-> Someone else reported that too; I fixed it. [[done]] --[[Joey]]
diff --git a/doc/bugs/building_on_lenny.mdwn b/doc/bugs/building_on_lenny.mdwn
deleted file mode 100644
index 48386bde4..000000000
--- a/doc/bugs/building_on_lenny.mdwn
+++ /dev/null
@@ -1,80 +0,0 @@
-hi,
-
-I am trying to build git annex on lenny.
-
-I checked out the latest from git c88d4939453845efee04da811d64aa41046f9c11,
-installed all the packages (some from backports) as required by dpkg-buildpackage
-
-Then I get this:
-
- ...
- mkdir -p build
- ghc -odir build -hidir build --make git-annex
- [ 1 of 19] Compiling Utility ( Utility.hs, build/Utility.o )
- [ 2 of 19] Compiling GitRepo ( GitRepo.hs, build/GitRepo.o )
- [ 3 of 19] Compiling GitQueue ( GitQueue.hs, build/GitQueue.o )
- [ 4 of 19] Compiling TypeInternals ( TypeInternals.hs, build/TypeInternals.o )
- [ 5 of 19] Compiling Types ( Types.hs, build/Types.o )
- [ 6 of 19] Compiling Annex ( Annex.hs, build/Annex.o )
- [ 7 of 19] Compiling Locations ( Locations.hs, build/Locations.o )
- [ 8 of 19] Compiling UUID ( UUID.hs, build/UUID.o )
- [ 9 of 19] Compiling LocationLog ( LocationLog.hs, build/LocationLog.o )
- [10 of 19] Compiling Core ( Core.hs, build/Core.o )
- [11 of 19] Compiling Backend.URL ( Backend/URL.hs, build/Backend/URL.o )
- [12 of 19] Compiling Backend ( Backend.hs, build/Backend.o )
-
- Backend.hs:114:50:
- Not in scope: type constructor or class `SomeException'
- make[1]: *** [git-annex] Error 1
- make[1]: Leaving directory `/home/cstamas/tmp/git-annex'
- dh_auto_build: make -j1 returned exit code 2
- make: *** [build] Error 2
- dpkg-buildpackage: failure: debian/rules build gave error exit status 2
-
-I will try to check the mentioned file for error, but I do not know how to program in haskell.
-
-Thanks for your help! --[[cstamas]]
-
-> Newer versions of ghc changed their exception handling types, and
-> I coded git-annex to use the new style and not the old. gch6 6.12 will
-> work. I do not think there is a backport available though. --[[Joey]]
->
-> Ok, found and deployed a workaround. It is not tested. Let me know how it
-> works for you. --[[Joey]]
-
->> I did a git pull and now I get:
-
- mkdir -p build
- ghc -cpp -odir build -hidir build --make git-annex
- [ 1 of 20] Compiling Portability ( Portability.hs, build/Portability.o )
-
- Portability.hs:13:21:
- Not in scope: type constructor or class `Exception'
- make[1]: *** [git-annex] Error 1
- make[1]: Leaving directory `/home/cstamas/tmp/git-annex'
- dh_auto_build: make -j1 returned exit code 2
- make: *** [build] Error 2
- dpkg-buildpackage: failure: debian/rules build gave error exit status 2
-
->> --[[cstamas]]
-
->>> Ok well, I'm not going to try to reimplement all of
->>> Control.Exception.Extensible so I've made it use it. You will have to
->>> figure out how to install that library yourself though, I don't know
->>> how to use cabal with such an old ghc. Library is here:
->>> <http://hackage.haskell.org/package/extensible-exceptions>
->>> and I asked how to get it on stable here:
->>> <http://ask.debian.net/questions/how-to-get-haskell-extensible-extceptions-on-stable> --[[Joey]]
-
->>>> I made some effort with cabal on lenny. I can install (and I did it) cabal
->>>> from squeeze as dependencies are ok. Then I installed extensible
->>>> exceptions, but it places it in some local dir that git-annex's installer
->>>> (or ghc itself) does not know about.
->>>>
->>>> Later I realized that *only* for the compilation ghc6 and its friends are
->>>> needed. So I built the package on my other machine running squeeze. Then
->>>> resulting deb packages cleanly installs on lenny
->>>>
->>>> For me this is OK. Thanks! --[[cstamas]]
-
-[[done]]
diff --git a/doc/bugs/bup_initremote_failed_with_localhost_+_username.mdwn b/doc/bugs/bup_initremote_failed_with_localhost_+_username.mdwn
deleted file mode 100644
index c15de5b3e..000000000
--- a/doc/bugs/bup_initremote_failed_with_localhost_+_username.mdwn
+++ /dev/null
@@ -1,49 +0,0 @@
-### Please describe the problem.
-Attempted to create a bup remote on the current system via ssh. It appears to have created the bup remote fine, but fails when sshing to it and does not add the remote.
-This is a normal indirect annex (currently containing a single test jpg in its root)
-I'm presuming the error is "(storing uuid...) sh: 1: cd: can't cd to /~/archie"
-
-
-### What steps will reproduce the problem?
-git annex initremote bup type=bup encryption=none buprepo=sshservername:path
-
-I've tried using .ssh/config to remove the username from the servername passed to bup repo and it still fails.
-
-### What version of git-annex are you using? On what operating system?
-[[!format sh """
->git-annex version
-git-annex version: 4.20130615-g29d5bb9
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS
-local repository version: 3
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-"""]]
-debian wheezy i686
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-> git annex initremote bup type=bup encryption=none buprepo=bup@localhost:archie
-initremote bup (bup init...)
-Reinitialized existing Git repository in /media/backup/home/archie/.bup/
-Initialized empty Git repository in /media/backup/bup/archie/
-(storing uuid...) sh: 1: cd: can't cd to /~/archie
-git-annex: ssh failed
-
-> ssh bup@localhost
-Last login: Mon Jun 17 10:35:45 2013 from localhost
-$ ls
-archie
-$ cd archie
-$ ls
-branches config description HEAD hooks info objects refs
-
-
-# End of transcript or log.
-"""]]
-
-> applied patchm, [[done]] --[[Joey]]
diff --git a/doc/bugs/bup_initremote_failed_with_localhost_+_username/comment_1_0e669c3039b089fa8a815d3ec11465d2._comment b/doc/bugs/bup_initremote_failed_with_localhost_+_username/comment_1_0e669c3039b089fa8a815d3ec11465d2._comment
deleted file mode 100644
index b8bfb0c04..000000000
--- a/doc/bugs/bup_initremote_failed_with_localhost_+_username/comment_1_0e669c3039b089fa8a815d3ec11465d2._comment
+++ /dev/null
@@ -1,20 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnrFnHRRNUQBB5RCDaIwhVmCcxQp8_yiYw"
- nickname="Oliver"
- subject="figured it out."
- date="2013-06-19T14:21:08Z"
- content="""
-It's failing because I am passing a relative url as buprepo - bup is expanding
-
- host:dir
-
-to
-
- ssh://host/~/dir
-
-but then onBupRemote isn't converting it back quite right.
-
-My haskell is rather rusty, but I have a working, if perhaps suboptimal patch; I'll email it across.
-
-
-"""]]
diff --git a/doc/bugs/cabal_build:___34__Could_not_find_module___96__Data.AssocList__39____34__.mdwn b/doc/bugs/cabal_build:___34__Could_not_find_module___96__Data.AssocList__39____34__.mdwn
deleted file mode 100644
index a23930bd7..000000000
--- a/doc/bugs/cabal_build:___34__Could_not_find_module___96__Data.AssocList__39____34__.mdwn
+++ /dev/null
@@ -1,23 +0,0 @@
-What steps will reproduce the problem?
-
-Download current git head (fa5100d) and run cabal update; cabal install --only-dependencies; cabal configure; cabal build
-
-What is the expected output? What do you see instead?
-
-Expect succcessful build, get:
-
-Assistant/Install.hs:24:8:
- Could not find module `Data.AssocList'
- It is a member of the hidden package `hxt-9.3.1.1'.
- Perhaps you need to add `hxt' to the build-depends in your .cabal file.
- Use -v to see a list of the files searched for.
-
-
-What version of git-annex are you using? On what operating system?
-
-building using cabal from clone of git clone git://git-annex.branchable.com/, commit fa5100d (same problem happens with last release, 3.20121127). On OS X, "Lion".
-
-
-Please provide any additional information below.
-
-> [[done]], using Data.List instead now.
diff --git a/doc/bugs/cabal_build:___34__Could_not_find_module___96__Data.AssocList__39____34__/comment_1_0da9fd67c3cc01b316f95a1df4eb62ae._comment b/doc/bugs/cabal_build:___34__Could_not_find_module___96__Data.AssocList__39____34__/comment_1_0da9fd67c3cc01b316f95a1df4eb62ae._comment
deleted file mode 100644
index 967e203c1..000000000
--- a/doc/bugs/cabal_build:___34__Could_not_find_module___96__Data.AssocList__39____34__/comment_1_0da9fd67c3cc01b316f95a1df4eb62ae._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="99.54.57.201"
- subject="Could not find module `Data.AssocList' confirmed fixed."
- date="2012-11-28T03:38:19Z"
- content="""
-builds fine now, thank you!
-"""]]
diff --git a/doc/bugs/cabal_configure_is_broken_on_OSX_builds.mdwn b/doc/bugs/cabal_configure_is_broken_on_OSX_builds.mdwn
deleted file mode 100644
index ddbbcb874..000000000
--- a/doc/bugs/cabal_configure_is_broken_on_OSX_builds.mdwn
+++ /dev/null
@@ -1,14 +0,0 @@
-Seems the last few commits have borked 'cabal configure' on OSX with the following error message
-
-<pre>
-[jtang@laplace git-annex (master)]$ cabal configure
-Resolving dependencies...
-
-Build/InstallDesktopFile.hs:19:8:
- Could not find module `Assistant.OSX'
- Use -v to see a list of the files searched for.
-</pre>
-
-Looks like a missing module.
-
-> Was broken everywhere really, so I fixed it. [[done]] --[[Joey]]
diff --git a/doc/bugs/cabal_install_fails:_Could_not_find_module___8216__Network.URI__8217__.mdwn b/doc/bugs/cabal_install_fails:_Could_not_find_module___8216__Network.URI__8217__.mdwn
new file mode 100644
index 000000000..2f9b5de3e
--- /dev/null
+++ b/doc/bugs/cabal_install_fails:_Could_not_find_module___8216__Network.URI__8217__.mdwn
@@ -0,0 +1,216 @@
+### Please describe the problem.
+
+Can't install git-annex from current git master. cabal install also fails. Both fail with the same error.
+
+### What steps will reproduce the problem?
+
+cabal install git-annex --bindir=$HOME/bin
+
+### What version of git-annex are you using? On what operating system?
+
+[[!format sh """
+$ uname -a
+Linux arch 3.16.3-1-ARCH #1 SMP PREEMPT Wed Sep 17 21:54:13 CEST 2014 x86_64 GNU/Linux
+
+$ cabal --version
+cabal-install version 1.20.0.3
+using version 1.20.0.0 of the Cabal library
+"""]]
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+$ cabal install git-annex --bindir=$HOME/bin
+Resolving dependencies...
+Configuring DAV-1.0.2...
+Configuring gnuidn-0.2.1...
+Configuring gsasl-0.3.5...
+Configuring hS3-0.5.8...
+Failed to install gsasl-0.3.5
+Build log ( /home/dirk/.cabal/logs/gsasl-0.3.5.log ):
+Configuring gsasl-0.3.5...
+setup-Simple-Cabal-1.18.1.3-x86_64-linux-ghc-7.8.3: The pkg-config package
+libgsasl version >=1.1 is required but it could not be found.
+Failed to install gnuidn-0.2.1
+Build log ( /home/dirk/.cabal/logs/gnuidn-0.2.1.log ):
+Configuring gnuidn-0.2.1...
+setup-Simple-Cabal-1.18.1.3-x86_64-linux-ghc-7.8.3: The program c2hs is
+required but it could not be found.
+Building hS3-0.5.8...
+Building DAV-1.0.2...
+Failed to install hS3-0.5.8
+Build log ( /home/dirk/.cabal/logs/hS3-0.5.8.log ):
+Configuring hS3-0.5.8...
+Building hS3-0.5.8...
+Preprocessing library hS3-0.5.8...
+
+Network/AWS/S3Object.hs:26:8:
+ Could not find module ‘Network.URI’
+ It is a member of the hidden package ‘network-uri-2.6.0.1’.
+ Perhaps you need to add ‘network-uri’ to the build-depends in your .cabal file.
+ Use -v to see a list of the files searched for.
+Failed to install DAV-1.0.2
+Build log ( /home/dirk/.cabal/logs/DAV-1.0.2.log ):
+Configuring DAV-1.0.2...
+Building DAV-1.0.2...
+Preprocessing library DAV-1.0.2...
+[1 of 2] Compiling Network.Protocol.HTTP.DAV.TH ( Network/Protocol/HTTP/DAV/TH.hs, dist/build/Network/Protocol/HTTP/DAV/TH.o )
+Loading package ghc-prim ... linking ... done.
+Loading package integer-gmp ... linking ... done.
+Loading package base ... linking ... done.
+Loading package array-0.5.0.0 ... linking ... done.
+Loading package deepseq-1.3.0.2 ... linking ... done.
+Loading package containers-0.5.5.1 ... linking ... done.
+Loading package bytestring-0.10.4.0 ... linking ... done.
+Loading package transformers-0.3.0.0 ... linking ... done.
+Loading package mtl-2.1.3.1 ... linking ... done.
+Loading package text-1.2.0.0 ... linking ... done.
+Loading package parsec-3.1.6 ... linking ... done.
+Loading package hashable-1.2.2.0 ... linking ... done.
+Loading package scientific-0.3.3.1 ... linking ... done.
+Loading package attoparsec-0.12.1.2 ... linking ... done.
+Loading package dlist-0.7.1 ... linking ... done.
+Loading package old-locale-1.0.0.6 ... linking ... done.
+Loading package syb-0.4.2 ... linking ... done.
+Loading package pretty-1.1.1.1 ... linking ... done.
+Loading package template-haskell ... linking ... done.
+Loading package time-1.4.2 ... linking ... done.
+Loading package unordered-containers-0.2.5.0 ... linking ... done.
+Loading package primitive-0.5.3.0 ... linking ... done.
+Loading package vector-0.10.11.0 ... linking ... done.
+Loading package aeson-0.8.0.0 ... linking ... done.
+Loading package blaze-builder-0.3.3.4 ... linking ... done.
+Loading package blaze-markup-0.6.1.1 ... linking ... done.
+Loading package blaze-html-0.7.0.3 ... linking ... done.
+Loading package filepath-1.3.0.2 ... linking ... done.
+Loading package unix-2.7.0.1 ... linking ... done.
+Loading package directory-1.2.1.0 ... linking ... done.
+Loading package exceptions-0.6.1 ... linking ... done.
+Loading package process-1.2.0.0 ... linking ... done.
+Loading package system-filepath-0.4.12 ... linking ... done.
+Loading package system-fileio-0.3.14 ... linking ... done.
+Loading package shakespeare-2.0.1.1 ... linking ... done.
+Loading package stm-2.4.3 ... linking ... done.
+Loading package transformers-base-0.4.3 ... linking ... done.
+Loading package monad-control-0.3.3.0 ... linking ... done.
+Loading package lifted-base-0.2.3.0 ... linking ... done.
+Loading package mmorph-1.0.4 ... linking ... done.
+Loading package resourcet-1.1.2.3 ... linking ... done.
+Loading package nats-0.2 ... linking ... done.
+Loading package semigroups-0.15.3 ... linking ... done.
+Loading package void-0.6.1 ... linking ... done.
+Loading package conduit-1.2.0.2 ... linking ... done.
+Loading package attoparsec-conduit-1.1.0 ... linking ... done.
+Loading package blaze-builder-conduit-1.1.0 ... linking ... done.
+Loading package network-2.6.0.2 ... linking ... done.
+Loading package random-1.1 ... linking ... done.
+Loading package zlib-0.5.4.1 ... linking ... done.
+Loading package streaming-commons-0.1.5 ... linking ... done.
+Loading package conduit-extra-1.1.3.4 ... linking ... done.
+Loading package data-default-class-0.0.1 ... linking ... done.
+Loading package data-default-instances-base-0.0.1 ... linking ... done.
+Loading package data-default-instances-containers-0.0.1 ... linking ... done.
+Loading package data-default-instances-dlist-0.0.1 ... linking ... done.
+Loading package data-default-instances-old-locale-0.0.1 ... linking ... done.
+Loading package data-default-0.5.3 ... linking ... done.
+Loading package xml-types-0.3.4 ... linking ... done.
+Loading package xml-conduit-1.2.2 ... linking ... done.
+Loading package xml-hamlet-0.4.0.9 ... linking ... done.
+Loading package transformers-compat-0.3.3.4 ... linking ... done.
+Loading package contravariant-1.2 ... linking ... done.
+Loading package tagged-0.7.2 ... linking ... done.
+Loading package distributive-0.4.4 ... linking ... done.
+Loading package comonad-4.2.2 ... linking ... done.
+Loading package semigroupoids-4.2 ... linking ... done.
+Loading package bifunctors-4.1.1.1 ... linking ... done.
+Loading package prelude-extras-0.4 ... linking ... done.
+Loading package profunctors-4.2.0.1 ... linking ... done.
+Loading package free-4.9 ... linking ... done.
+Loading package parallel-3.2.0.4 ... linking ... done.
+Loading package reflection-1.5.1 ... linking ... done.
+Loading package split-0.2.2 ... linking ... done.
+Loading package lens-4.4.0.2 ... linking ... done.
+Loading package byteable-0.1.1 ... linking ... done.
+Loading package securemem-0.1.3 ... linking ... done.
+Loading package crypto-cipher-types-0.0.9 ... linking ... done.
+Loading package cipher-aes-0.2.8 ... linking ... done.
+Loading package crypto-random-0.0.8 ... linking ... done.
+Loading package cprng-aes-0.5.2 ... linking ... done.
+Loading package cereal-0.4.0.1 ... linking ... done.
+Loading package socks-0.5.4 ... linking ... done.
+Loading package asn1-types-0.2.3 ... linking ... done.
+Loading package asn1-encoding-0.8.1.3 ... linking ... done.
+Loading package cipher-des-0.0.6 ... linking ... done.
+Loading package cipher-rc4-0.1.4 ... linking ... done.
+Loading package crypto-numbers-0.2.3 ... linking ... done.
+Loading package crypto-pubkey-types-0.4.2.2 ... linking ... done.
+Loading package cryptohash-0.11.6 ... linking ... done.
+Loading package crypto-pubkey-0.2.4 ... linking ... done.
+Loading package asn1-parse-0.8.1 ... linking ... done.
+Loading package base64-bytestring-1.0.0.1 ... linking ... done.
+Loading package pem-0.2.2 ... linking ... done.
+Loading package x509-1.4.12 ... linking ... done.
+Loading package x509-store-1.4.4 ... linking ... done.
+Loading package x509-validation-1.5.0 ... linking ... done.
+Loading package tls-1.2.9 ... linking ... done.
+Loading package x509-system-1.4.5 ... linking ... done.
+Loading package connection-0.2.3 ... linking ... done.
+Loading package case-insensitive-1.2.0.1 ... linking ... done.
+Loading package cookie-0.4.1.3 ... linking ... done.
+Loading package http-types-0.8.5 ... linking ... done.
+Loading package mime-types-0.1.0.4 ... linking ... done.
+Loading package network-uri-2.6.0.1 ... linking ... done.
+Loading package utf8-string-0.3.8 ... linking ... done.
+Loading package publicsuffixlist-0.1 ... linking ... done.
+Loading package http-client-0.4.0 ... linking ... done.
+Loading package http-client-tls-0.2.2 ... linking ... done.
+Loading package MonadRandom-0.3 ... linking ... done.
+Loading package either-4.3.1 ... linking ... done.
+Loading package safe-0.3.8 ... linking ... done.
+Loading package errors-1.4.7 ... linking ... done.
+[2 of 2] Compiling Network.Protocol.HTTP.DAV ( Network/Protocol/HTTP/DAV.hs, dist/build/Network/Protocol/HTTP/DAV.o )
+
+Network/Protocol/HTTP/DAV.hs:80:1: Warning:
+ The import of ‘unauthorized401’
+ from module ‘Network.HTTP.Types’ is redundant
+
+Network/Protocol/HTTP/DAV.hs:92:95: Warning:
+ ‘DAVT’ is an instance of MonadPlus but not Alternative - this will become an error in GHC 7.10, under the Applicative-Monad Proposal.
+
+Network/Protocol/HTTP/DAV.hs:213:1: Warning:
+ Defined but not used: ‘supportsCalDAV’
+
+Network/Protocol/HTTP/DAV.hs:88:10: Warning:
+ Orphan instance: instance Default DAVContext
+
+Network/Protocol/HTTP/DAV.hs:95:10: Warning:
+ Orphan instance: instance MonadMask m => MonadMask (EitherT e m)
+In-place registering DAV-1.0.2...
+Preprocessing executable 'hdav' for DAV-1.0.2...
+
+hdav.hs:33:8:
+ Could not find module ‘Network.URI’
+ It is a member of the hidden package ‘network-uri-2.6.0.1’.
+ Perhaps you need to add ‘network-uri’ to the build-depends in your .cabal file.
+ Use -v to see a list of the files searched for.
+cabal: Error: some packages failed to install:
+DAV-1.0.2 failed during the building phase. The exception was:
+ExitFailure 1
+git-annex-5.20140919 depends on DAV-1.0.2 which failed to install.
+gnuidn-0.2.1 failed during the configure step. The exception was:
+ExitFailure 1
+gsasl-0.3.5 failed during the configure step. The exception was:
+ExitFailure 1
+hS3-0.5.8 failed during the building phase. The exception was:
+ExitFailure 1
+network-protocol-xmpp-0.4.6 depends on gnuidn-0.2.1 which failed to install.
+
+# End of transcript or log.
+"""]]
+
+> This is a bug in hS3, not in git-annex. hS3 needs to be updated
+> per the example at <http://hackage.haskell.org/package/network>.
+> Email sent to hS3 author; [[done]]. --[[Joey]]
diff --git a/doc/bugs/cabal_install_fails_to_install_manpage.mdwn b/doc/bugs/cabal_install_fails_to_install_manpage.mdwn
deleted file mode 100644
index 265ad2432..000000000
--- a/doc/bugs/cabal_install_fails_to_install_manpage.mdwn
+++ /dev/null
@@ -1,43 +0,0 @@
-### Please describe the problem.
-
-The git-annex manual page is not installed when using [[install/cabal]] to install git-annex.
-
-### What steps will reproduce the problem?
-
-Follow [[install/cabal]] with `--bin-dir=/usr/local` and try `man git-annex`.
-
-I was expecting the manpage to be installed in `/usr/local/share/man`.
-
-### What version of git-annex are you using? On what operating system?
-
-git annex from a recent git build (4.20130909-g7f079d6) in Debian wheezy.
-
-### Please provide any additional information below.
-
-<del>This could be just a documentation problem...</del> Actually, the manpage can be read directly from the source tree in `doc/git-annex.mdwn`, but I still think it should be installed, for [[!wikipedia POLA]]'s sake. --[[anarcat]]
-
-I figured it out - that stuff is in the makefile, I updated [[install/cabal]] accordingly, so <del>done</del> - not done just yet. --[[anarcat]]
-
-> Doesn't seem right to me; Setup.hs has some stuff to do with
-> installing man pages. This does currently require that they
-> are distributed in pre-built form in the .tar.gz on hackage,
-> which I've just checked and they are.
->
-> Perhaps cabal put the man pages somewhere else? After all, you
-> apparently did not set --datadir --[[Joey]]
-
-> > True, I didn't - the docs didn't say to. ;) But really, it's one of two things, either Setup.hs can install manpages, and then the Makefile shouldn't install it, or we should update documentation to use the makefile only. I'll try this again next time I reinstall through cabal i guess... -- [[anarcat]]a
-
->>> The default location cabal installs man pages to is
->>> `~/.cabal/share/man/man1`. That is insane, but it is not as
->>> insane as not installing programs into PATH, which is why
->>> the documentation tells how to set --bindir to fix that particular
->>> cabal insanity. (Also, many systems don't have a good per-user
->>> man directory anyway.)
->>>
->>> `make install` does not use `cabal install` because as noted, cabal
->>> install is thurougly bat shit crazy. Not all systems that have
->>> cabal have make, which is why the cabal documentation is the way it is.
->>> --[[Joey]]
-
-[[done]]
diff --git a/doc/bugs/cabal_install_on_Ubuntu_12.04_fails_with_complaint_about_regex-base.mdwn b/doc/bugs/cabal_install_on_Ubuntu_12.04_fails_with_complaint_about_regex-base.mdwn
deleted file mode 100644
index b84d930b4..000000000
--- a/doc/bugs/cabal_install_on_Ubuntu_12.04_fails_with_complaint_about_regex-base.mdwn
+++ /dev/null
@@ -1,34 +0,0 @@
-## What steps will reproduce the problem?
-
-I attempt
-
- cabal install git-annex
-
-(already having installed `c2hs`)
-
-## What is the expected output? What do you see instead?
-
-I get
-
- $ cabal install git-annex
- Resolving dependencies...
- cabal: Could not resolve dependencies:
- trying: git-annex-3.20130216.1 (user goal)
- trying: git-annex-3.20130216.1:+webapp
- trying: git-annex-3.20130216.1:+assistant
- trying: yesod-1.1.9 (dependency of git-annex-3.20130216.1:+assistant)
- trying: http-conduit-1.9.0 (dependency of yesod-1.1.9)
- trying: regex-compat-0.95.1/installed-851... (dependency of
- http-conduit-1.9.0)
- next goal: regex-base (dependency of regex-compat-0.95.1/installed-851...)
- rejecting: regex-base-0.93.2/installed-999... (conflict: regex-base =>
- mtl==2.0.1.0/installed-db1..., git-annex => mtl(>=2.1.1))
- rejecting: regex-base-0.93.2, 0.93.1, 0.93, 0.92, 0.91, 0.90, 0.83, 0.72.0.2,
- 0.72.0.1, 0.71 (conflict: regex-compat => regex-base==0.93.2/installed-999...)
-
-> This is a transient version skew in cabal, generally
-> known as "cabal hell". It will be fixed when the libraries
-> involved fix their versioned dependencies, which may have
-> already happened. Precompiled builds of git-annex are provided
-> so I do not have to chase every transient version skew
-> that occurs for every use who runs into it. [[done]] --[[Joey]]
diff --git a/doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository.mdwn b/doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository.mdwn
deleted file mode 100644
index 2a2832da3..000000000
--- a/doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository.mdwn
+++ /dev/null
@@ -1,208 +0,0 @@
-What steps will reproduce the problem?
-
-Since syncing of non-git-annex repositories was enabled (thanks!), I see error messages
-
- conq: invalid command syntax.
-
-in the output of git annex sync (and in the logs of the webapp), which I am fairly sure is an error from bitbucket, which I am using as the centralised repository. I know a similar thing has been reported before ([[conq:_invalid_command_syntax]]), but I really don't know how to tackle this. I have included the output from git annex sync --debug, and the ssh command which is causing this, at the end.
-
-If I strip out all the options from the ssh command, I get the same error. I don't know if this is some peculiarity from bitbucket, or a more general issue.
-
-
-Also, I don't know if this is even a problem. The syncing does seem to work properly.
-
-
---Walter
-
-**edit** I have tried with another centralised annex-less git server, and the behaviour is better (more logs below). It realises that it doesn't have annex, modifies .git/config, and then afterwards doesn't try to run the problematic command. So, my first guess is that it isn't correctly determining that that command failed in some cases?
-
-
-What version of git-annex are you using? On what operating system?
-
-4.20130423-ge0f5abb, Ubuntu 12.10
-
-Please provide any additional information below.
-
-
-[[!format sh """
-~/annex$ git annex sync --debug
-[2013-04-24 10:21:39 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","symbolic-ref","HEAD"]
-[2013-04-24 10:21:39 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","refs/heads/master"]
-[2013-04-24 10:21:39 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","git-annex"]
-[2013-04-24 10:21:39 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-24 10:21:39 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..44700457a651992eb40ff67a148d77217e8aa1d7","--oneline","-n1"]
-[2013-04-24 10:21:39 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..94392bcdad74257adaadb98ce85d17a83da7648c","--oneline","-n1"]
-[2013-04-24 10:21:39 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..ff126032854d9ead0a096acae04f105628de0cc4","--oneline","-n1"]
-[2013-04-24 10:21:39 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..62da8e99021b72a9255064385a75c5fe643e3711","--oneline","-n1"]
-[2013-04-24 10:21:39 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..00cca957c30882c9dfaf494101251e4c634baa31","--oneline","-n1"]
-[2013-04-24 10:21:39 NZST] chat: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","cat-file","--batch"]
-[2013-04-24 10:21:39 NZST] read: git ["config","--null","--list"]
-[2013-04-24 10:21:39 NZST] read: ssh ["-S","/home/walter/annex/.git/annex/ssh/git@bitbucket.org","-o","ControlMaster=auto","-o","ControlPersist=yes","-T","git@bitbucket.org","git-annex-shell 'configlist' '/~/waltersom/annex.git'"]
-conq: invalid command syntax.
-[2013-04-24 10:21:39 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","ls-files","--others","--exclude-standard","--stage","-z","--","/home/walter/annex"]
-commit
-[2013-04-24 10:21:39 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","commit","-m","git-annex automatic sync"]
-ok
-[2013-04-24 10:21:39 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","--verify","-q","refs/heads/synced/master"]
-[2013-04-24 10:21:39 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/master..refs/heads/synced/master","--oneline","-n1"]
-pull bitbucket
-[2013-04-24 10:21:39 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","fetch","bitbucket"]
-[2013-04-24 10:21:43 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","--verify","-q","refs/remotes/bitbucket/master"]
-[2013-04-24 10:21:43 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/master..refs/remotes/bitbucket/master","--oneline","-n1"]
-[2013-04-24 10:21:43 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","--verify","-q","refs/remotes/bitbucket/synced/master"]
-[2013-04-24 10:21:43 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/synced/master..refs/remotes/bitbucket/synced/master","--oneline","-n1"]
-ok
-[2013-04-24 10:21:43 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","git-annex"]
-[2013-04-24 10:21:43 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-24 10:21:43 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..44700457a651992eb40ff67a148d77217e8aa1d7","--oneline","-n1"]
-[2013-04-24 10:21:43 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..94392bcdad74257adaadb98ce85d17a83da7648c","--oneline","-n1"]
-[2013-04-24 10:21:43 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..ff126032854d9ead0a096acae04f105628de0cc4","--oneline","-n1"]
-[2013-04-24 10:21:43 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..62da8e99021b72a9255064385a75c5fe643e3711","--oneline","-n1"]
-[2013-04-24 10:21:43 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..00cca957c30882c9dfaf494101251e4c634baa31","--oneline","-n1"]
-[2013-04-24 10:21:43 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","branch","-f","synced/master"]
-[2013-04-24 10:21:43 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","--verify","-q","refs/remotes/bitbucket/synced/master"]
-[2013-04-24 10:21:43 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/remotes/bitbucket/synced/master..refs/heads/synced/master","--oneline","-n1"]
-[2013-04-24 10:21:43 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","--verify","-q","refs/remotes/bitbucket/git-annex"]
-[2013-04-24 10:21:43 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/remotes/bitbucket/git-annex..git-annex","--oneline","-n1"]
-push bitbucket
-[2013-04-24 10:21:43 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","push","bitbucket","git-annex:synced/git-annex","master:synced/master"]
-Everything up-to-date
-ok
-"""]]
-
-
-[[!format sh """
-~/annex$ ssh -vvv -S /home/walter/annex/.git/annex/ssh/git@bitbucket.org -o ControlMaster=auto -o ControlPersist=yes -T git@bitbucket.org git-annex-shell 'configlist' '/~/waltersom/annex.git'
-OpenSSH_6.0p1 Debian-3ubuntu1, OpenSSL 1.0.1c 10 May 2012
-debug1: Reading configuration data /etc/ssh/ssh_config
-debug1: /etc/ssh/ssh_config line 19: Applying options for *
-debug1: auto-mux: Trying existing master
-debug2: fd 3 setting O_NONBLOCK
-debug2: mux_client_hello_exchange: master version 4
-debug3: mux_client_forwards: request forwardings: 0 local, 0 remote
-debug3: mux_client_request_session: entering
-debug3: mux_client_request_alive: entering
-debug3: mux_client_request_alive: done pid = 5213
-debug3: mux_client_request_session: session request sent
-debug1: mux_client_request_session: master session id: 2
-conq: invalid command syntax.
-debug3: mux_client_read_packet: read header failed: Broken pipe
-debug2: Received exit status from master 0
-"""]]
-
-
-Here is the output once I added another (non-bitbucket) repository, also without git-annex-shell
-
-[[!format sh """
-~/annex$ git annex sync --debug
-[2013-04-24 10:56:20 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","symbolic-ref","HEAD"]
-[2013-04-24 10:56:20 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","refs/heads/master"]
-[2013-04-24 10:56:20 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","git-annex"]
-[2013-04-24 10:56:20 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-24 10:56:20 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..44700457a651992eb40ff67a148d77217e8aa1d7","--oneline","-n1"]
-[2013-04-24 10:56:20 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..94392bcdad74257adaadb98ce85d17a83da7648c","--oneline","-n1"]
-[2013-04-24 10:56:20 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..ff126032854d9ead0a096acae04f105628de0cc4","--oneline","-n1"]
-[2013-04-24 10:56:20 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..62da8e99021b72a9255064385a75c5fe643e3711","--oneline","-n1"]
-[2013-04-24 10:56:20 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..00cca957c30882c9dfaf494101251e4c634baa31","--oneline","-n1"]
-[2013-04-24 10:56:20 NZST] chat: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","cat-file","--batch"]
-[2013-04-24 10:56:20 NZST] read: git ["config","--null","--list"]
-[2013-04-24 10:56:20 NZST] read: ssh ["-S","/home/walter/annex/.git/annex/ssh/waltersom_aaatos@ssh.phx.nearlyfreespeech.net","-o","ControlMaster=auto","-o","ControlPersist=yes","-T","waltersom_aaatos@ssh.phx.nearlyfreespeech.net","git-annex-shell 'configlist' '/home/protected/gitroot/test.git'"]
-waltersom_aaatos@ssh.phx.nearlyfreespeech.net's password:
--bash: git-annex-shell: command not found
-[2013-04-24 10:56:25 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","fetch","--quiet","aaatos"]
-waltersom_aaatos@ssh.phx.nearlyfreespeech.net's password:
-
- Remote aaatos does not have git-annex installed; setting remote.aaatos.annex-ignore
-[2013-04-24 10:56:30 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","config","remote.aaatos.annex-ignore","true"]
-[2013-04-24 10:56:30 NZST] read: ssh ["-S","/home/walter/annex/.git/annex/ssh/git@bitbucket.org","-o","ControlMaster=auto","-o","ControlPersist=yes","-T","git@bitbucket.org","git-annex-shell 'configlist' '/~/waltersom/annex.git'"]
-conq: invalid command syntax.
-[2013-04-24 10:56:30 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","ls-files","--others","--exclude-standard","--stage","-z","--","/home/walter/annex"]
-commit
-[2013-04-24 10:56:30 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","commit","-m","git-annex automatic sync"]
-ok
-[2013-04-24 10:56:30 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","--verify","-q","refs/heads/synced/master"]
-[2013-04-24 10:56:30 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/master..refs/heads/synced/master","--oneline","-n1"]
-pull bitbucket
-[2013-04-24 10:56:30 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","fetch","bitbucket"]
-[2013-04-24 10:56:34 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","--verify","-q","refs/remotes/bitbucket/master"]
-[2013-04-24 10:56:34 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/master..refs/remotes/bitbucket/master","--oneline","-n1"]
-[2013-04-24 10:56:34 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","--verify","-q","refs/remotes/bitbucket/synced/master"]
-[2013-04-24 10:56:35 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/synced/master..refs/remotes/bitbucket/synced/master","--oneline","-n1"]
-ok
-pull aaatos
-[2013-04-24 10:56:35 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","fetch","aaatos"]
-waltersom_aaatos@ssh.phx.nearlyfreespeech.net's password:
-[2013-04-24 10:56:40 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","--verify","-q","refs/remotes/aaatos/master"]
-[2013-04-24 10:56:40 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","--verify","-q","refs/remotes/aaatos/synced/master"]
-[2013-04-24 10:56:40 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/synced/master..refs/remotes/aaatos/synced/master","--oneline","-n1"]
-ok
-[2013-04-24 10:56:40 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","git-annex"]
-[2013-04-24 10:56:40 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-24 10:56:40 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..44700457a651992eb40ff67a148d77217e8aa1d7","--oneline","-n1"]
-[2013-04-24 10:56:40 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..94392bcdad74257adaadb98ce85d17a83da7648c","--oneline","-n1"]
-[2013-04-24 10:56:40 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..ff126032854d9ead0a096acae04f105628de0cc4","--oneline","-n1"]
-[2013-04-24 10:56:40 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..62da8e99021b72a9255064385a75c5fe643e3711","--oneline","-n1"]
-[2013-04-24 10:56:40 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/heads/git-annex..00cca957c30882c9dfaf494101251e4c634baa31","--oneline","-n1"]
-[2013-04-24 10:56:40 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","branch","-f","synced/master"]
-[2013-04-24 10:56:40 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","--verify","-q","refs/remotes/bitbucket/synced/master"]
-[2013-04-24 10:56:40 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/remotes/bitbucket/synced/master..refs/heads/synced/master","--oneline","-n1"]
-[2013-04-24 10:56:40 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","--verify","-q","refs/remotes/bitbucket/git-annex"]
-[2013-04-24 10:56:40 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/remotes/bitbucket/git-annex..git-annex","--oneline","-n1"]
-push bitbucket
-[2013-04-24 10:56:40 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","push","bitbucket","git-annex:synced/git-annex","master:synced/master"]
-Everything up-to-date
-ok
-[2013-04-24 10:56:44 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","--verify","-q","refs/remotes/aaatos/synced/master"]
-[2013-04-24 10:56:44 NZST] read: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","log","refs/remotes/aaatos/synced/master..refs/heads/synced/master","--oneline","-n1"]
-[2013-04-24 10:56:44 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","show-ref","--verify","-q","refs/remotes/aaatos/git-annex"]
-push aaatos
-[2013-04-24 10:56:44 NZST] call: git ["--git-dir=/home/walter/annex/.git","--work-tree=/home/walter/annex","push","aaatos","git-annex:synced/git-annex","master:synced/master"]
-waltersom_aaatos@ssh.phx.nearlyfreespeech.net's password:
-Counting objects: 1363, done.
-Delta compression using up to 8 threads.
-Compressing objects: 100% (604/604), done.
-Writing objects: 100% (1363/1363), 96.41 KiB, done.
-Total 1363 (delta 709), reused 898 (delta 467)
-To waltersom_aaatos@ssh.phx.nearlyfreespeech.net:/home/protected/gitroot/test.git
- * [new branch] git-annex -> synced/git-annex
- * [new branch] master -> synced/master
-ok
-[2013-04-24 10:56:50 NZST] read: ssh ["-O","stop","-S","/home/walter/annex/.git/annex/ssh/waltersom_aaatos@ssh.phx.nearlyfreespeech.net","-o","ControlMaster=auto","-o","ControlPersist=yes","waltersom_aaatos@ssh.phx.nearlyfreespeech.net"]
-"""]]
-
-
-Here is the contents of .git/config (the last line was added by git annex sync)
-[[!format sh """
-[core]
- repositoryformatversion = 0
- filemode = true
- bare = false
- logallrefupdates = true
-[annex]
- uuid = ef94eb2c-ebce-4419-900b-937c88df9aa1
- version = 3
- direct = true
- diskreserve = 1 gigabyte
- numcopies = 1
- autocommit = true
-[gc]
- auto = 0
-[remote "S3Sydney"]
- annex-s3 = true
- annex-uuid = 004d3b86-43db-4d82-9dec-347bc1b86420
-[remote "327D522A6727FE79"]
- url = /media/walter/327D522A6727FE79/annex
- fetch = +refs/heads/*:refs/remotes/327D522A6727FE79/*
- annex-uuid = c9fe9266-3581-4608-aa3c-9322afd9b533
- annex-cost = 125.0
- annex-sync = true
-[remote "bitbucket"]
- url = git@bitbucket.org:waltersom/annex.git
- fetch = +refs/heads/*:refs/remotes/bitbucket/*
-[remote "aaatos"]
- url = waltersom_aaatos@ssh.phx.nearlyfreespeech.net:/home/protected/gitroot/test.git
- fetch = +refs/heads/*:refs/remotes/aaatos/*
- annex-ignore = true
-"""]]
-
-> Reproduced and fixed. [[done]] --[[Joey]]
diff --git a/doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository/comment_1_dd202a7764d9df998868d595a86ffb21._comment b/doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository/comment_1_dd202a7764d9df998868d595a86ffb21._comment
deleted file mode 100644
index 50a133ac8..000000000
--- a/doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository/comment_1_dd202a7764d9df998868d595a86ffb21._comment
+++ /dev/null
@@ -1,30 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="you win at highlighting logs!"
- date="2013-04-23T23:04:13Z"
- content="""
-This weird message is coming from whatever equivilant bitbucket has of a login shell.
-
-I'd expect you would only see the message once. When git-annex notices it cannot run git-annex-shell on the remote, it automatically sets `remote.bitbucket.annex-ignore`. Once that is set, it will not try again to send/receive files from the remote. But due to the recent change I made, will still git push/pull to it.
-
-I don't see anything unexpected in the logs.. What would be unexpected is if `remote.bitbucket.annex-ignore` is set, and it tries to do this again next time it syncs. Or if `remote.bitbucket.annex-ignore` is not set to true in `.git/config`.
-
-Here is an example of how it's supposed to work:
-
-<pre>
-joey@gnu:~/tmp/rr>git annex sync
-fatal: unrecognized command 'git-annex-shell 'configlist' '/~/test.git''
-
- Remote origin does not have git-annex installed; setting remote.origin.annex-ignore
-commit
-ok
-
-joey@gnu:~/tmp/rr>git config remote.origin.annex-ignore
-true
-
-joey@gnu:~/tmp/rr>git annex sync
-commit
-ok
-</pre>
-"""]]
diff --git a/doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository/comment_2_ca065c82ac8e3215b581660f3e44f459._comment b/doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository/comment_2_ca065c82ac8e3215b581660f3e44f459._comment
deleted file mode 100644
index c7d4ad7c3..000000000
--- a/doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository/comment_2_ca065c82ac8e3215b581660f3e44f459._comment
+++ /dev/null
@@ -1,51 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnSenxKyE_2Z6Wb-EBMO8FciyRywjx1ZiQ"
- nickname="Walter"
- subject=":'( no format directive in comments?"
- date="2013-04-23T23:13:02Z"
- content="""
-That's right; `git config remote.bitbucket.annex-ignore true` does fix the problem.
-
-So, I guess if you're looking for more things to do, there is somehow a problem detecting that git-annex-shell isn't present sometimes.
-
-
- ~/annex$ git config remote.bitbucket.annex-ignore
- ~/annex$ git annex sync
- conq: invalid command syntax.
- commit
- ok
- pull bitbucket
- ok
- push bitbucket
- Everything up-to-date
- ok
- ~/annex$ git annex sync
- conq: invalid command syntax.
- commit
- ok
- pull bitbucket
- ok
- push bitbucket
- Everything up-to-date
- ok
- ~/annex$ git annex sync
- conq: invalid command syntax.
- commit
- ok
- pull bitbucket
- ok
- push bitbucket
- Everything up-to-date
- ok
- ~/annex$ git config remote.bitbucket.annex-ignore true
- ~/annex$ git annex sync
- commit
- ok
- pull bitbucket
- ok
- push bitbucket
- Everything up-to-date
- ok
-
-
-"""]]
diff --git a/doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository/comment_3_927a01f9961c71bedb42c519a31b5fe5._comment b/doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository/comment_3_927a01f9961c71bedb42c519a31b5fe5._comment
deleted file mode 100644
index e565eaf7a..000000000
--- a/doc/bugs/call_to_git-annex-shell_when_on_centralised___40__non-git-annex__41___repository/comment_3_927a01f9961c71bedb42c519a31b5fe5._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-04-23T23:13:45Z"
- content="""
-I noticed this:
-
-> debug2: Received exit status from master 0
-
-So, bitbucket prints an error message.. and exits successfully. Durrrrrr....
-
-I'll put in a fix for this if I can. FWIW, the behavior is nothing to worry about; everything will work as-is, it'll just annoyingly keep trying to ask bitbucket to please identify its repository via git-annex-shell.
-"""]]
diff --git a/doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode.mdwn b/doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode.mdwn
deleted file mode 100644
index ca47d3a4c..000000000
--- a/doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode.mdwn
+++ /dev/null
@@ -1,23 +0,0 @@
-### Please describe the problem.
-When trying to annex get *from* an annex on a Windows machine, over HTTP, annex get fails with 404 errors.
-
-### What steps will reproduce the problem?
-1. Create an annex on a Windows and Linux machine.
-2. annex add some content on Windows repository.
-3. Configure Windows repository for HTTP access
-4. on Linux machine, fetch updates. this succeeds.
-5. attempt to "annex get <new files>"
-6. requests for files of the format ".git/annex/objects/<3-char-hash>/<3-char-hash>/SHA<filehash>.<extension>" fail with 404 errors. the annex get fails.
-
-
-### What version of git-annex are you using? On what operating system?
-Windows 7: 4.20140627-g8a36ec5 (from the git-annex download page)
-
-Debian Linux: 3.20120629 (from the package manager)
-
-### Please provide any additional information below.
-there is no <filehash>.<extension> file in the relevant directories, there are only .map and .cache files. The Windows annex is in direct mode, and the Linux annex fails to annex get from this correctly.
-
-[[!meta title="can't use a direct mode repository as a http remote"]]
-
-> [[done]]; unsupported configuration. --[[Joey]]
diff --git a/doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode/comment_1_20c31a844d8351a99cf69e05d2836e0e._comment b/doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode/comment_1_20c31a844d8351a99cf69e05d2836e0e._comment
deleted file mode 100644
index 17665bd70..000000000
--- a/doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode/comment_1_20c31a844d8351a99cf69e05d2836e0e._comment
+++ /dev/null
@@ -1,19 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkxl76M-3zKZXFbFf6NY6c6y-78CSKGyJw"
- nickname="T"
- subject="comment 1"
- date="2013-07-06T20:11:54Z"
- content="""
-When I tried to duplicate these results today, it failed in a different fashion.
-
-adding a new file (file2.txt) to a test repo on windows, setting up an HTTP access, and fetching and merging onto linux leaves the following state:
-[[!format sh \"\"\"
-test-git-annex@linux_host:~/test_annex$ ls -l
-total 4
-lrwxrwxrwx 1 test-git-annex test-git-annex <datetime> file1.txt -> this is some content?
-lrwxrwxrwx 1 test-git-annex test-git-annex <datetime> file2.txt -> some new content, on a new annex
-\"\"\"]]
-
-it is treating the contents of the files as the name of a symlink. get annex get . is unable to retrieve them as contents.
-
-"""]]
diff --git a/doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode/comment_2_f26e0f763f9027d9dfc08cd840ced153._comment b/doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode/comment_2_f26e0f763f9027d9dfc08cd840ced153._comment
deleted file mode 100644
index 913f5304d..000000000
--- a/doc/bugs/can__39__t_annex_get_from_annex_in_direct_mode/comment_2_f26e0f763f9027d9dfc08cd840ced153._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.254.222"
- subject="comment 2"
- date="2013-07-07T17:43:49Z"
- content="""
-You generally cannot use a git-annex repository that is in direct mode as a remote over http. A remote git-annex does not have sufficient information to safely use a direct mode repository in that way. I don't think I can fix that. The http transport will work with indirect mode repositories (not supported on Windows), and with bare repositories (should work ok on Windows).
-
-I'm perplexed by what you show happening in the comment. It appears that the content of the files has been staged into the git repository as the symlink target on Windows. I have never seen that happen, cannot imagine how git-annex could do that. My best guess is you might have run `git commit -a` after `git annex add`, and on Windows, since it doesn't really have symlinks, that could leave the symlink bit set while staging the full content of the file. You should never run `git commit -a` in a direct mode repository (Windows always uses direct mode). See [[/direct_mode]] for caveats about git commands that are unsafe to run in direct mode.
-"""]]
diff --git a/doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain.mdwn b/doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain.mdwn
new file mode 100644
index 000000000..b63f56ce8
--- /dev/null
+++ b/doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain.mdwn
@@ -0,0 +1,21 @@
+### Please describe the problem.
+In "Configuring jabber account" custom domains through google apps don't connect properly.
+
+### What steps will reproduce the problem?
+Try to use a google account that uses a non-gmail domain, e.g. user@domain.com
+
+### What version of git-annex are you using? On what operating system?
+Newest, on Mac OS 10.9
+
+### Please provide any additional information below.
+The issue is because git-annex is trying to connect to @domain.com as the jabber server, but the server should be talk.google.com:5223.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain/comment_1_6537e928a0d6d5c41b55370f112f4afb._comment b/doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain/comment_1_6537e928a0d6d5c41b55370f112f4afb._comment
new file mode 100644
index 000000000..26a63f87f
--- /dev/null
+++ b/doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain/comment_1_6537e928a0d6d5c41b55370f112f4afb._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-07-02T17:28:01Z"
+ content="""
+This seems like the same problem as in [[bugs/googlemail]].
+
+git-annex uses SRV records to find the jabber server for a domain. What is google doing that makes this not work? Do you have a sample domain?
+"""]]
diff --git a/doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain/comment_2_b639ad750a4635d95f6ad16a1aa39a3e._comment b/doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain/comment_2_b639ad750a4635d95f6ad16a1aa39a3e._comment
new file mode 100644
index 000000000..a705f6855
--- /dev/null
+++ b/doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain/comment_2_b639ad750a4635d95f6ad16a1aa39a3e._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlU0H3uyacCnqWxjSI_chHBlHu8TDIkTt0"
+ nickname="Matt"
+ subject="cannot connect via google apps domain"
+ date="2014-08-14T15:55:07Z"
+ content="""
+Having the same issue with our domain: zebradog.com SRV records are correctly specified (as defined here: https://support.google.com/a/answer/34143?hl=en)
+"""]]
diff --git a/doc/bugs/can__39__t_drop_unused_files_that_never_were_added.mdwn b/doc/bugs/can__39__t_drop_unused_files_that_never_were_added.mdwn
deleted file mode 100644
index 361f21f0e..000000000
--- a/doc/bugs/can__39__t_drop_unused_files_that_never_were_added.mdwn
+++ /dev/null
@@ -1,86 +0,0 @@
-### Please describe the problem.
-
-When adding files to the annex and then deciding against it in an "unusual" way, git-annex gets confused and the file left behind can't be removed from the annex...
-
-### What steps will reproduce the problem?
-
-1. Add file with "git annex add"
-2. Decide you don't need the file add all
-3. "git rm -f newfile"
-4. "git annex unused"
-5. "git annex dropunused all"
-
-### What version of git-annex are you using? On what operating system?
-
-git-annex version: 5.20140210 on Debian unstable
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-$ git init
-Initialized empty Git repository in /tmp/foo/.git/
-$ ls -l
-total 0
-$ cp ~/download/hub-ctrl.c .
-$ git add hub-ctrl.c
-$ git commit
-[master (root-commit) ed7eb68] A file.
- 1 file changed, 412 insertions(+)
- create mode 100644 hub-ctrl.c
-$ cp ~/download/hub-ctrl .
-$ ls -l
-total 28
--rwxr-xr-x 1 tobias tobias 14130 Feb 19 00:49 hub-ctrl
--rw-r--r-- 1 tobias tobias 9270 Feb 19 00:48 hub-ctrl.c
-$ git annex init
-init ok
-(Recording state in git...)
-$ git annex add
-add hub-ctrl ok
-(Recording state in git...)
-$ git status
-On branch master
-Changes to be committed:
- (use "git reset HEAD <file>..." to unstage)
-
- new file: hub-ctrl
-
-$ git rm hub-ctrl
-error: the following file has changes staged in the index:
- hub-ctrl
-(use --cached to keep the file, or -f to force removal)
-$ git rm -f hub-ctrl
-rm 'hub-ctrl'
-$ git status
-On branch master
-nothing to commit, working directory clean
-$ git annex unused
-unused . (checking for unused data...) (checking HEAD...)
- Some annexed data is no longer used by any files:
- NUMBER KEY
- 1 SHA256E-s14130--d4e777ba2b99ed0a520fbabe7b93cf2165373b4945afe8dcb626231d9051f19d
- (To see where data was previously used, try: git log --stat -S'KEY')
-
- To remove unwanted data: git-annex dropunused NUMBER
-
-ok
-$ git annex dropunused all
-dropunused 1 (unsafe)
- Could only verify the existence of 0 out of 1 necessary copies
-
- Rather than dropping this file, try using: git annex move
-
- (Use --force to override this check, or adjust numcopies.)
-failed
-git-annex: dropunused: 1 failed
-$
-
-# End of transcript or log.
-"""]]
-
-> It seems to me that if you run `git annex dropunused --force`, it will
-> remove the file. This needing --force is a recent change; git-annex
-> tries to never posibly lose data unless forced. Dropping the last
-> copy of a file certianly qualifies. [[done]] --[[Joey]]
diff --git a/doc/bugs/can__39__t_run_the_assistant_from_the_command_line_anymore__63__.mdwn b/doc/bugs/can__39__t_run_the_assistant_from_the_command_line_anymore__63__.mdwn
deleted file mode 100644
index 58828e8ca..000000000
--- a/doc/bugs/can__39__t_run_the_assistant_from_the_command_line_anymore__63__.mdwn
+++ /dev/null
@@ -1,31 +0,0 @@
-What steps will reproduce the problem?
-
-just compiled the latest version of git annex from git, checkout hash was c9c0042
-
-Tried running the assistant from the command line, got unexpected error
-
-What is the expected output? What do you see instead?
-
-Expected assistant to start, instead got:
-
- annex$ git annex assistant
- git-annex: watch mode is not available on this system
-
-
-What version of git-annex are you using? On what operating system?
-
-annex$ git annex version
-git-annex version: 3.20130103
-local repository version: 3
-default repository version: 3
-supported repository versions: 3
-upgrade supported from repository versions: 0 1 2
-annex$
-
-OS X Lion.
-
-
-Please provide any additional information below.
-
-> The cabal file had a typo that prevented it from using hfsevents. I'm
-> uploading a fix now. [[done]] --[[Joey]]
diff --git a/doc/bugs/can_not_add_ssh_remote_to_assistant_with___34__host:port__34___syntax.mdwn b/doc/bugs/can_not_add_ssh_remote_to_assistant_with___34__host:port__34___syntax.mdwn
deleted file mode 100644
index dfe2738ef..000000000
--- a/doc/bugs/can_not_add_ssh_remote_to_assistant_with___34__host:port__34___syntax.mdwn
+++ /dev/null
@@ -1,30 +0,0 @@
-What steps will reproduce the problem?
-
-* Start the assistant
-* try to add a remote server (ssh) which is not on port 22. E.g. using myhost:1234
-* after a rather long time the connection fails
-
-
-What is the expected output? What do you see instead?
-
-it would be nice if this syntax was supported, or if an (optional) port field was provided.
-second best solution: inform the user that "myhost:1234" is not the expected format.
-third best solution (already in place) fail with "some error message".
-
-
-
-
-What version of git-annex are you using? On what operating system?
-
-3.20121016 on Ubuntu 12.04 (in future maybe also on home nas with wheezy)
-
-
-Please provide any additional information below.
-
-Thanks for a nice program and all your work on debian!
-this is not really a bug more of a wishlist feature.
-
-
-[[!tag /design/assistant]]
-
-> Ok, it has a port field now. [[done]] --[[Joey]]
diff --git a/doc/bugs/can_not_add_ssh_remote_to_assistant_with___34__host:port__34___syntax/comment_1_397eb359c3f8ef30460a9556b6f55848._comment b/doc/bugs/can_not_add_ssh_remote_to_assistant_with___34__host:port__34___syntax/comment_1_397eb359c3f8ef30460a9556b6f55848._comment
deleted file mode 100644
index 991a7483d..000000000
--- a/doc/bugs/can_not_add_ssh_remote_to_assistant_with___34__host:port__34___syntax/comment_1_397eb359c3f8ef30460a9556b6f55848._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
- nickname="Justin"
- subject="comment 1"
- date="2012-11-09T14:04:57Z"
- content="""
-edit ~/.ssh/config. add
-
- Host myhost
- Port 1234
-
-
-now you never have to specify the port again(for ssh,scp,rsync,etc)
-"""]]
diff --git a/doc/bugs/cannot_add_file__44___get___34__user_error__34__.mdwn b/doc/bugs/cannot_add_file__44___get___34__user_error__34__.mdwn
deleted file mode 100644
index 398cda3b6..000000000
--- a/doc/bugs/cannot_add_file__44___get___34__user_error__34__.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-What steps will reproduce the problem?
-
-I can reproduce it locally:
-
- % annex -d add Eigene\ Bilder/
- [2013-03-19 15:44:01 CET] read: git ["--git-dir=/Users/fschulze/Bilder/.git","--work-tree=/Users/fschulze/Bilder","ls-files","--others","--exclude-standard","-z","--","Eigene Bilder/"]
- [2013-03-19 15:44:01 CET] read: git ["--git-dir=/Users/fschulze/Bilder/.git","--work-tree=/Users/fschulze/Bilder","diff","--name-only","--diff-filter=T","-z","--","Eigene Bilder/"]
- add Eigene Bilder/20070311/Bild023.jpg [2013-03-19 15:44:01 CET] chat: git ["--git-dir=/Users/fschulze/Bilder/.git","--work-tree=/Users/fschulze/Bilder","check-attr","-z","-- stdin","annex.backend","annex.numcopies","--"]
- (checksum...) [2013-03-19 15:44:01 CET] read: sha512sum ["/Users/fschulze/Bilder/.git/annex/tmp/Bild02366551.jpg"]
-
-git-annex: user error (sha512sum ["/Users/fschulze/Bilder/.git/annex/tmp/Bild02366551.jpg"] exited 127)
-failed
-
-What is the expected output? What do you see instead?
-
-The file isn't added.
-
-What version of git-annex are you using? On what operating system?
-
-OS X from dmg
-
- git-annex version: 4.20130314
- local repository version: 3
- default repository version: 3
- supported repository versions: 3 4
- upgrade supported from repository versions: 0 1 2
- build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS
-
-> The OSX app is now changed so that git-annex is a wrapper
-> script using runshell. This allows putting `git-annex.app/Contents/MacOS`
-> into PATH and using git-annex, and it will find all the libraries and
-> utilities bundled with it. [[done]] --[[Joey]]
diff --git a/doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_1_14aa717c1befcbbf526f25ca2f0af825._comment b/doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_1_14aa717c1befcbbf526f25ca2f0af825._comment
deleted file mode 100644
index 87855ab4b..000000000
--- a/doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_1_14aa717c1befcbbf526f25ca2f0af825._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-03-19T17:19:32Z"
- content="""
-What version of OSX is this? From what url did you download the dmg?
-
-Have you run \"runshell\" to get the shell you're using git-annex in?
-
-What happens if you run sha512sum on the file yourself?
-
-The SHA512 backend is not the default backend used by git-annex. Is the default SHA256 backend working?
-"""]]
diff --git a/doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_2_7f7ac59e7f3dce9d7a7d0c3379c2edcf._comment b/doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_2_7f7ac59e7f3dce9d7a7d0c3379c2edcf._comment
deleted file mode 100644
index 0e9b034c0..000000000
--- a/doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_2_7f7ac59e7f3dce9d7a7d0c3379c2edcf._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawla3gLc6_rHuggFfy7o7eGMPvPztFZTrUQ"
- nickname="Florian"
- subject="comment 2"
- date="2013-03-19T17:42:00Z"
- content="""
-OS X Lion 10.7.5
-http://downloads.kitenet.net/git-annex/OSX/current/10.7.5_Lion/git-annex.dmg.bz2
-
-What is \"runshell\"? I used the binary from inside the app, maybe that's the issue? How am I supposed to use it from the command line? I had used a 2012 version installed via cabal before, but upgrading it didn't work anymore. I got lot's of errors from various cabal packages when I tried.
-
-Directly it seems to work fine:
-
-% ~/Applications/git-annex.app/Contents/MacOS/sha512sum Eigene\ Bilder/20070311/Bild023.jpg
-96d61ed877bcd5c9b5935aca77a1eae78bcb577d5c7aa049b247861bbcd4122ff3c2280ea6dc6152bc843e73c006281614c28d14bdd70aa1692f948e8f19bf4c Eigene Bilder/20070311/Bild023.jpg
-
-I'm actually using SHA512E. I will try later to reproduce with just that file in another repository. Is there anything else I can provide?
-"""]]
diff --git a/doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_3_5ebf03120b12edb3fbb8954546e7603e._comment b/doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_3_5ebf03120b12edb3fbb8954546e7603e._comment
deleted file mode 100644
index 8db2a8ea1..000000000
--- a/doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_3_5ebf03120b12edb3fbb8954546e7603e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-03-19T18:17:23Z"
- content="""
-`~/Applications/git-annex.app/Contents/MacOS/runshell` is a little program that sets up your shell to use the programs, and crucially, the libraries, included in the dmg. Running binaries from the app directly and not through runshell is not likely to work. I have updated [[the_OSX_page|/install/OSX]] with information about runshell.
-"""]]
diff --git a/doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_4_1ba6d2614778949520b47896fd98b598._comment b/doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_4_1ba6d2614778949520b47896fd98b598._comment
deleted file mode 100644
index 383f21f1c..000000000
--- a/doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_4_1ba6d2614778949520b47896fd98b598._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawla3gLc6_rHuggFfy7o7eGMPvPztFZTrUQ"
- nickname="Florian"
- subject="comment 4"
- date="2013-03-19T21:18:19Z"
- content="""
-Using runshell solved the problem, but for my usecases I'm not happy with that. I guess I'll try with a clean cabal again.
-"""]]
diff --git a/doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_5_4a6e55861a63b350a02edb888b4da99b._comment b/doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_5_4a6e55861a63b350a02edb888b4da99b._comment
deleted file mode 100644
index 1baec9625..000000000
--- a/doc/bugs/cannot_add_file__44___get___34__user_error__34__/comment_5_4a6e55861a63b350a02edb888b4da99b._comment
+++ /dev/null
@@ -1,21 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 5"
- date="2013-03-19T22:53:30Z"
- content="""
-Well, one way to use runshell without annoyance is to put a git-annex wrapper in ~/bin
-like this:
-
-<pre>
-#!/bin/sh
-~/Applications/git-annex.app/Contents/MacOS/runshell git-annex \"$@\"
-</pre>
-
-I think I will repurpose this bug report: The git-annex inside the dmg should
-be such a wrapper, so that it can just be put into PATH and used. The actual binaries in the dmg should be hidden away in a subdirectory where users won't stumble over them.
-
-----
-
-However, cabal is a fine choice.
-"""]]
diff --git a/doc/bugs/cannot_add_local_readonly_repo_through_the_webapp.mdwn b/doc/bugs/cannot_add_local_readonly_repo_through_the_webapp.mdwn
new file mode 100644
index 000000000..9b1f726cf
--- /dev/null
+++ b/doc/bugs/cannot_add_local_readonly_repo_through_the_webapp.mdwn
@@ -0,0 +1,98 @@
+### Please describe the problem.
+
+A readonly repository that I can add fine on the commandline (and sync content from) cannot be added through the webapp.
+
+### What steps will reproduce the problem?
+
+Say I have a readonly (owned by root) repository in `~/test/a` and I create a `~/test/b` (owned by my user). In the webapp, when to add `/home/anarcat/test/a` as a "local repository" (`Add another local repository`) to the `~/test/b` repo, it fails when i enter that path, with "Cannot write a repository there." I obviously can't sync content from there then.
+
+This works on the commandline, although with warnings.
+
+### What version of git-annex are you using? On what operating system?
+
+Version: 5.20140927
+Build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+
+Debian Jessie.
+
+### Please provide any additional information below.
+
+Here's the transcript of the commandline equivalent:
+
+~~~
+anarcat@marcos:test$ git init a
+Dépôt Git vide initialisé dans /home/anarcat/test/a/.git/
+anarcat@marcos:test$ git init b
+Dépôt Git vide initialisé dans /home/anarcat/test/b/.git/
+anarcat@marcos:test$ cd a
+anarcat@marcos:a$ git annex init
+init ok
+(Recording state in git...)
+anarcat@marcos:a$ echo hellow world > README
+anarcat@marcos:a$ git annex add README
+add README ok
+(Recording state in git...)
+anarcat@marcos:a$ git commit -m"test repo a"
+[master (commit racine) 3ece2a1] test repo a
+ 1 file changed, 1 insertion(+)
+ create mode 120000 README
+anarcat@marcos:a$ cd ../ ^C
+anarcat@marcos:a$ sudo chown -R root .
+[sudo] password for anarcat:
+Sorry, try again.
+[sudo] password for anarcat:
+anarcat@marcos:a$ cd ../b
+anarcat@marcos:b$ git annex init
+init ok
+(Recording state in git...)
+anarcat@marcos:b$ git remote add a ../a
+anarcat@marcos:b$ git annex sync a
+commit ok
+pull a
+warning: no common commits
+remote: Décompte des objets: 13, fait.
+remote: Compression des objets: 100% (9/9), fait.
+remote: Total 13 (delta 1), reused 0 (delta 0)
+Dépaquetage des objets: 100% (13/13), fait.
+Depuis ../a
+ * [nouvelle branche] git-annex -> a/git-annex
+ * [nouvelle branche] master -> a/master
+
+
+merge: refs/remotes/a/synced/master - not something we can merge
+failed
+(merging a/git-annex into git-annex...)
+(Recording state in git...)
+push a
+Décompte des objets: 8, fait.
+Delta compression using up to 2 threads.
+Compression des objets: 100% (6/6), fait.
+Écriture des objets: 100% (8/8), 819 bytes | 0 bytes/s, fait.
+Total 8 (delta 1), reused 0 (delta 0)
+remote: error: insufficient permission for adding an object to repository database objects
+remote: fatal: failed to write object
+error: unpack failed: unpack-objects abnormal exit
+To ../a
+ ! [remote rejected] git-annex -> synced/git-annex (unpacker error)
+ ! [remote rejected] master -> synced/master (unpacker error)
+error: impossible de pousser des références vers '../a'
+
+ Pushing to a failed.
+
+ (non-fast-forward problems can be solved by setting receive.denyNonFastforwards to false in the remote's git config)
+failed
+git-annex: sync: 2 failed
+anarcat@marcos:b$ ls
+README
+anarcat@marcos:b$ git annex copy --from a
+copy README (from a...) ok
+(Recording state in git...)
+anarcat@marcos:b$ ls -al
+total 16K
+drwxr-xr-x 3 anarcat anarcat 4096 oct. 20 15:36 .
+drwxr-xr-x 4 anarcat anarcat 4096 oct. 20 15:35 ..
+drwxr-xr-x 9 anarcat anarcat 4096 oct. 20 15:36 .git
+lrwxrwxrwx 1 anarcat anarcat 180 oct. 20 15:36 README -> .git/annex/objects/wz/Zq/SHA256E-s13--8c083c6897455257dfbace7a9012d92ca8ebfb6e6ebe8acddc6dfa8fc81226ed/SHA256E-s13--8c083c6897455257dfbace7a9012d92ca8ebfb6e6ebe8acddc6dfa8fc81226ed
+~~~
+
+This is part of the [[todo/read-only_removable_drives/]] series. --[[anarcat]]
diff --git a/doc/bugs/cannot_connect_to_xmpp_server.mdwn b/doc/bugs/cannot_connect_to_xmpp_server.mdwn
deleted file mode 100644
index d64b64003..000000000
--- a/doc/bugs/cannot_connect_to_xmpp_server.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-I cannot get the assistant to connect to my jabber account, db48x@db48x.net. I get the message stating that it may take a minute, which is never updated. At the very least I would expect some sort of error message.
-
-I get the same symptoms if I connect to an account @gmail.com, but type in the wrong password. If I put in the correct password, it connects quite quickly.
-
-### What version of git-annex are you using? On what operating system?
-
-[[!format txt """
-[db48x@celebdil ~]$ git annex version
-git-annex version: 4.20130709
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS
-[db48x@celebdil ~]$ uname -a
-Linux celebdil 3.9.9-201.fc18.x86_64 #1 SMP Fri Jul 5 16:42:02 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
-"""]]
-
-(Fedora 18)
-
-I get exactly the same behavior on my phone, which is running Android 4.1.2
-
-
-### Please provide any additional information below.
-
-[[!format txt """
-[db48x@celebdil books]$ cat .git/annex/daemon.log
-[2013-07-20 16:21:28 PDT] main: starting assistant version 4.20130709
-(scanning...) [2013-07-20 16:21:28 PDT] Watcher: Performing startup scan
-(started...)
-"""]]
-
-> Closing this bug, since it's not something I can fix in git-annex,
-> but would have to be dealt with in the haskell XMPP library.
-> Which seems unlikely given John's reply, but you never know --
-> and the bug I filed is still open ;) [[done]] --[[Joey]]
diff --git a/doc/bugs/cannot_connect_to_xmpp_server/comment_10_5072de8fcca9fe70bc235ea8c8ee2877._comment b/doc/bugs/cannot_connect_to_xmpp_server/comment_10_5072de8fcca9fe70bc235ea8c8ee2877._comment
deleted file mode 100644
index 5e2839db2..000000000
--- a/doc/bugs/cannot_connect_to_xmpp_server/comment_10_5072de8fcca9fe70bc235ea8c8ee2877._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.140"
- subject="comment 10"
- date="2013-07-21T03:58:35Z"
- content="""
-Upstream bug report: <http://bugs.debian.org/717463>
-"""]]
diff --git a/doc/bugs/cannot_connect_to_xmpp_server/comment_11_dabd74bba1f38b326a2d0c86d3027cd9._comment b/doc/bugs/cannot_connect_to_xmpp_server/comment_11_dabd74bba1f38b326a2d0c86d3027cd9._comment
deleted file mode 100644
index 2ceb4c08f..000000000
--- a/doc/bugs/cannot_connect_to_xmpp_server/comment_11_dabd74bba1f38b326a2d0c86d3027cd9._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="https://john-millikin.com/"
- nickname="John Millikin"
- subject="comment 11"
- date="2013-07-22T01:52:41Z"
- content="""
-(I'm the author of the XMPP library git-annex uses)
-
-The biggest issue I can think of with continuing in the absence of a &lt;features&gt; element is authentication. Without &lt;features&gt; the client library is not able to know which SASL mechanisms are supported, so it can't authenticate.
-
-It is possible to modify the XMPP library such that it can work around the problems exibited by this server software (adding a timeout to receipt, hardcoding a fallback SASL list), but I very much do not want to do that because it would almost certainly cause unexpected behavior when used with properly working servers.
-
-According to <a href=\"http://www.mail-archive.com/jdev@jabber.org/msg10598.html\">http://www.mail-archive.com/jdev@jabber.org/msg10598.html</a> , jabberd-1.4.3 was released in 2003. Since its release, there have been multiple severe security issues discovered, including a remote crash (see <a href=\"http://mail.jabber.org/pipermail/jabberd/2004-September/002004.html\">http://mail.jabber.org/pipermail/jabberd/2004-September/002004.html</a> and <a href=\"http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2004-1378\">http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2004-1378</a>).
-
-In my opinion, the best course of action is for Daniel to switch to a different Jabber server software, preferably one that is still actively maintained.
-
-"""]]
diff --git a/doc/bugs/cannot_connect_to_xmpp_server/comment_12_0245b426cc0ab64f8c167b8806b03f5d._comment b/doc/bugs/cannot_connect_to_xmpp_server/comment_12_0245b426cc0ab64f8c167b8806b03f5d._comment
deleted file mode 100644
index 18f956c3e..000000000
--- a/doc/bugs/cannot_connect_to_xmpp_server/comment_12_0245b426cc0ab64f8c167b8806b03f5d._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm5WyknJirJJridJjiPNgrlYxGG9xrZBvA"
- nickname="Daniel"
- subject="comment 12"
- date="2013-07-23T00:59:33Z"
- content="""
-oh, I agree that upgrading is sensible, but I don't actually control the server. Also, I don't see anything in the changelog that indicates that this bug has been fixed. The bug database is out of action as well. A brief examination of the source didn't answer any questions either. Very annoying all around.
-
-Just think of it as adding robustness in the face of a misbehaving server.
-"""]]
diff --git a/doc/bugs/cannot_connect_to_xmpp_server/comment_1_307df11b5bcf289d7999e1e7f7c461c9._comment b/doc/bugs/cannot_connect_to_xmpp_server/comment_1_307df11b5bcf289d7999e1e7f7c461c9._comment
deleted file mode 100644
index 1ad583ec7..000000000
--- a/doc/bugs/cannot_connect_to_xmpp_server/comment_1_307df11b5bcf289d7999e1e7f7c461c9._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.140"
- subject="comment 1"
- date="2013-07-21T01:20:32Z"
- content="""
-I've fixed the gmail.com problem. It was trying all the servers returned by the SRV query, which all failed due to the bad password, and then fell back to trying gmail.com directly. For whatever reason, gmail.com will accept XMPP connections, but never responds to traffic, so it hung.
-
-The hang with your own XMPP server does not seem related to that.
-"""]]
diff --git a/doc/bugs/cannot_connect_to_xmpp_server/comment_2_f24378cf30a7d32594da90749fabec3c._comment b/doc/bugs/cannot_connect_to_xmpp_server/comment_2_f24378cf30a7d32594da90749fabec3c._comment
deleted file mode 100644
index 39c69b5ea..000000000
--- a/doc/bugs/cannot_connect_to_xmpp_server/comment_2_f24378cf30a7d32594da90749fabec3c._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.140"
- subject="comment 2"
- date="2013-07-21T01:26:49Z"
- content="""
-It seems to start to connect to db48x.net, and hang. It may be failing to parse the response about the password being bad, or something like that, and be sitting around waiting for a response. I'm not sure.
-
-What XMPP server software are you using?
-
-The next step would probably be to get a tcpdump of the XMPP connection, ideally with SSL disabled. (Assuming the hang is not occuring during the SSL setup.)
-"""]]
diff --git a/doc/bugs/cannot_connect_to_xmpp_server/comment_3_4b07093be844ac62b611cee1dfde5aa7._comment b/doc/bugs/cannot_connect_to_xmpp_server/comment_3_4b07093be844ac62b611cee1dfde5aa7._comment
deleted file mode 100644
index b396e97a1..000000000
--- a/doc/bugs/cannot_connect_to_xmpp_server/comment_3_4b07093be844ac62b611cee1dfde5aa7._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm5WyknJirJJridJjiPNgrlYxGG9xrZBvA"
- nickname="Daniel"
- subject="comment 3"
- date="2013-07-21T02:26:38Z"
- content="""
-I captured the connection attempt; the trace is at <http://db48x.net/temp/annex-xmpp-connection.pcap.gz>
-"""]]
diff --git a/doc/bugs/cannot_connect_to_xmpp_server/comment_4_fe1ed152a485c4aebfa9b9f300101835._comment b/doc/bugs/cannot_connect_to_xmpp_server/comment_4_fe1ed152a485c4aebfa9b9f300101835._comment
deleted file mode 100644
index 89c66d173..000000000
--- a/doc/bugs/cannot_connect_to_xmpp_server/comment_4_fe1ed152a485c4aebfa9b9f300101835._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm5WyknJirJJridJjiPNgrlYxGG9xrZBvA"
- nickname="Daniel"
- subject="comment 4"
- date="2013-07-21T02:45:52Z"
- content="""
-Comparing that to when I connect to gmail, I see that my server isn't sending any stream features; my server doesn't support TLS.
-"""]]
diff --git a/doc/bugs/cannot_connect_to_xmpp_server/comment_5_2d311f520aee04287df6bddfd8535734._comment b/doc/bugs/cannot_connect_to_xmpp_server/comment_5_2d311f520aee04287df6bddfd8535734._comment
deleted file mode 100644
index 62e038941..000000000
--- a/doc/bugs/cannot_connect_to_xmpp_server/comment_5_2d311f520aee04287df6bddfd8535734._comment
+++ /dev/null
@@ -1,28 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.140"
- subject="comment 5"
- date="2013-07-21T02:55:36Z"
- content="""
-Great. We can see git-annex opens the XMPP stream tag, and your server responds by opening its own tag.
-
-Compare with this similar conversation:
-
- joey@gnu:~>telnet kite 5222
- Trying 80.68.85.49...
- Connected to wren.kitenet.net.
- Escape character is '^]'.
- <?xml version='1.0'?>
- <stream:stream xmlns=\"jabber:client\" to=\"kitenet.net\" version=\"1.0\" xmlns:stream=\"http://etherx.jabber.org/streams\">
- <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='e7d73883-a362-4923-89f8-0531eb9d16a0' from='kitenet.net' version='1.0' xml:lang='en'><stream:features>
-
-So far it's the same as the conversation with your server, but now my server goes on to send another line:
-
- <stream:features><starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'> <mechanism>SCRAM-SHA-1</mechanism><mechanism>DIGEST-MD5</mechanism></mechanisms></stream:features>
-
-While your server does not send anything.
-
-I see that my XMPP client library expects to receive a features tag at this point. Until it does, it won't continue. It may be that your server is not sending the features because it does not implement TLS or any of the other features that need to be advertised.
-
-I think I need to report this to the author of the XMPP client library. It would help to know what XMPP server software you're using, and if it has TLS support enabled.
-"""]]
diff --git a/doc/bugs/cannot_connect_to_xmpp_server/comment_6_d9f916f012184738446c5996ee9d2270._comment b/doc/bugs/cannot_connect_to_xmpp_server/comment_6_d9f916f012184738446c5996ee9d2270._comment
deleted file mode 100644
index 5bcc63d20..000000000
--- a/doc/bugs/cannot_connect_to_xmpp_server/comment_6_d9f916f012184738446c5996ee9d2270._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.140"
- subject="comment 6"
- date="2013-07-21T03:07:41Z"
- content="""
-If the initiating entity includes in the initial stream header the 'version' attribute set to a value of at least \"1.0\" (see Section 4.7.5), after sending the response stream header the receiving entity MUST send a <features/> child element
-
--- <http://xmpp.org/rfcs/rfc6120.html#streams-negotiation>\"
-
-By my reading this XMPP server is not RFC compliant. It's not clear to me if there's a good way for the XMPP client
-to cater to XMPP servers that neglect to send at least an empty features tag.
-"""]]
diff --git a/doc/bugs/cannot_connect_to_xmpp_server/comment_7_0b5f9350e2367301241c7668a15815ef._comment b/doc/bugs/cannot_connect_to_xmpp_server/comment_7_0b5f9350e2367301241c7668a15815ef._comment
deleted file mode 100644
index bcb47e20a..000000000
--- a/doc/bugs/cannot_connect_to_xmpp_server/comment_7_0b5f9350e2367301241c7668a15815ef._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm5WyknJirJJridJjiPNgrlYxGG9xrZBvA"
- nickname="Daniel"
- subject="comment 7"
- date="2013-07-21T03:08:52Z"
- content="""
-My server doesn't support TLS at all, and I don't really know what software it is (It's just a freebie that comes with the webhosting for the domain, I don't actually administer it myself). I'll try to find out, perhaps it's something an upgrade can fix.
-"""]]
diff --git a/doc/bugs/cannot_connect_to_xmpp_server/comment_8_f00b6ae154004e405f0bd23b7359962e._comment b/doc/bugs/cannot_connect_to_xmpp_server/comment_8_f00b6ae154004e405f0bd23b7359962e._comment
deleted file mode 100644
index 06311fb13..000000000
--- a/doc/bugs/cannot_connect_to_xmpp_server/comment_8_f00b6ae154004e405f0bd23b7359962e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm5WyknJirJJridJjiPNgrlYxGG9xrZBvA"
- nickname="Daniel"
- subject="comment 8"
- date="2013-07-21T03:10:25Z"
- content="""
-Oh, and I agree with your reading of the spec; I was just looking that up myself. I will point out that most other software apparently treats a missing features tag as if it were an empty one, so it's certainly doable :)
-"""]]
diff --git a/doc/bugs/cannot_connect_to_xmpp_server/comment_9_41b86468013da15f46be29da520afa10._comment b/doc/bugs/cannot_connect_to_xmpp_server/comment_9_41b86468013da15f46be29da520afa10._comment
deleted file mode 100644
index 67bec739e..000000000
--- a/doc/bugs/cannot_connect_to_xmpp_server/comment_9_41b86468013da15f46be29da520afa10._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm5WyknJirJJridJjiPNgrlYxGG9xrZBvA"
- nickname="Daniel"
- subject="comment 9"
- date="2013-07-21T03:24:03Z"
- content="""
-It's jabberd 1.4.3. Unfortunately the jabberd14 webpage is rather broken; I can't get to the bugzilla or even the svn or downloads page so I don't know if this is a known bug, something that's been fixed in a newer version, or anything.
-"""]]
diff --git a/doc/bugs/cannot_determine_uuid_for_origin.mdwn b/doc/bugs/cannot_determine_uuid_for_origin.mdwn
deleted file mode 100644
index 611a0f236..000000000
--- a/doc/bugs/cannot_determine_uuid_for_origin.mdwn
+++ /dev/null
@@ -1,135 +0,0 @@
-[[!toc]]
-
-### Please describe the problem.
-
-I get this error when trying to copy annexed files from my laptop to the bare repository on my server:
-
- anarcat@angela:ohm2013$ git annex copy -t origin .
- git-annex: cannot determine uuid for origin
-
-### What steps will reproduce the problem?
-
-Here's my setup:
-
- * `angela`: regular git repository on my laptop (`angela`) where i ran `git annex init` and `git annex add`ed 4 big files (in `~anarcat/presentations/ohm2013`)
- * `marcos-bare`: a bare git repository where i ran `git annex init` on a different server (`marcos`) (in `~anarcat/repos/presentations/ohm2013.git`)
- * `marcos-checkout`: a checkout of the above repository on marcos (in `~anarcat/presentations/ohm2013`)
-
-I ran `git pull/push` everwhere in there, and still get the error.
-
-Remotes on all repos:
-
- * `angela`: `origin anarcat.ath.cx:repos/presentations/ohm2013.git`
- * `marcos-bare`: no remote
- * `marcos-checkout`: `origin /home/anarcat/repos/presentations/ohm2013.git`
-
-Note that file added with `git annex addurl` on `marcos-checkout` properly gets propagated on `angela` once i do `git annex get` there.
-
-### What version of git-annex are you using? On what operating system?
-
-`angela` runs:
-
-[[!format txt """
-git-annex version: 4.20130730-ge59a8c6
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS
-local repository version: 3
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-"""]]
-
-I was able to reproduce with the backport version too.
-
-I compiled it by hand from git.
-
-`marcos` runs:
-
-[[!format txt """
-git-annex version: 3.20120629
-local repository version: unknown
-default repository version: 3
-supported repository versions: 3
-upgrade supported from repository versions: 0 1 2
-"""]]
-
-### Please provide any additional information below.
-
-In addition, there's this error on `marcos-bare`:
-
-[[!format sh """
-anarcat@marcos:ohm2013.git$ git annex status -d
-supported backends: SHA256 SHA1 SHA512 SHA224 SHA384 SHA256E SHA1E SHA512E SHA224E SHA384E WORM URL
-supported remote types: git S3 bup directory rsync web hook
-trusted repositories: git ["--git-dir=/home/anarcat/repos/presentations/ohm2013.git","show-ref","git-annex"]
-git ["--git-dir=/home/anarcat/repos/presentations/ohm2013.git","show-ref","--hash","refs/heads/git-annex"]
-git ["--git-dir=/home/anarcat/repos/presentations/ohm2013.git","log","refs/heads/git-annex..6063e958c02259a39b87d0f1dc44c9272c52df3f","--oneline","-n1"]
-git ["--git-dir=/home/anarcat/repos/presentations/ohm2013.git","cat-file","--batch"]
-0
-semitrusted repositories: 4
- 00000000-0000-0000-0000-000000000001 -- web
- 5868f840-02e7-11e3-94e9-9b3701bd28bb -- marcos-checkout
- aafdd242-02e7-11e3-bb6a-6f16a5c6103e -- here (marcos-bare)
- befc3057-d23d-4312-843a-0645e93107d8 -- angela
-untrusted repositories: 0
-dead repositories: 0
-available local disk space: 14 gigabytes (+1 megabyte reserved)
-local annex keys: 0
-local annex size: 0 bytes
-known annex keys: git ["--git-dir=/home/anarcat/repos/presentations/ohm2013.git","ls-files","--cached","-z","--","/home/anarcat/repos/presentations/ohm2013.git"]
-fatal: '/home/anarcat/repos/presentations/ohm2013.git' is outside repository
-0
-known annex size: 0 bytes
-bloom filter size: 16 mebibytes (0% full)
-backend usage:
-"""]]
-
-### Workaround!
-
-I found that I could succesfully push to the non-bare repo, like this:
-
-[[!format txt """
-anarcat@angela:ohm2013$ git remote add marcos-checkout ssh://anarcat.ath.cx/~/presentations/ohm2013
-anarcat@angela:ohm2013$ git fetch marcos-checkout
-From ssh://anarcat.ath.cx/~/presentations/ohm2013
- * [new branch] git-annex -> marcos-checkout/git-annex
- * [new branch] master -> marcos-checkout/master
-anarcat@angela:ohm2013$ git annex copy AlerteRouge.webm --to marcos-checkout
-copy AlerteRouge.webm (checking marcos-checkout...) (to marcos-checkout...)
-SHA256E-s138903105--a69db8d4c3835b03bdb08cb1cccfde5c76f586f934d63283694e7101b25352a8.webm
-[...]
-"""]]
-
-It seems that git-annex doesn't like bare repos at all...
-
-### Fix
-
-It seems that my problem was specifically related to [[bare repositories]], which are not well supported historically. There has been other reports of problems in the past, which I missed in my search because symptoms were different:
-
- * [[bugs/bare git repos]]
- * [[forum/get and copy with bare repositories]]
-
-Yet while I was able to do `git annex get --all` *from* the `marcos-bare` repository, I still get the original error message while trying to `git annex copy -t marcos-bare`, which is pretty annoying considering the original files are on my laptop, which is not publicly accessible. So I basically need to add the `marcos-checkout` as a remote, copy there, then get from the bare repo to make this work, which is a rather convoluted way of doing things. :)
-
-It seems to me a proper fix would be to be able to `git annex copy --to marcos-bare`. Thanks!
-
-Update: it seems te problem was that I had the following in my `.git/config`:
-
- [remote "marcos-bare"]
- url = ssh://anarcat.ath.cx/~/repos/presentations/ohm2013.git
- annex-ignore = true
- fetch = +refs/heads/*:refs/remotes/marcos-bare/*
-
-I have *no* idea how that `annex-ignore` got there, but that was the root of my problem. Removing it it allowed my to do `git annex copy`. I really don't know how this happened, but I guess this is [[done]], although I believe this error message is really confusing and could be improved. --[[anarcat]]
-
-> `annex-ignore` is set automatically by git-annex if it fails to query
-> the uuid of a remote the first time it tries to use it. It will say
-> when it does that. The assumption
-> is that a remote whose uuid cannot be looked up is a git remote
-> on a server w/o git-annex support (like github) and it would be annoying
-> to constantly be trying and failing to get that uuid.
->
-> So, I've improved the error message. Now when annex-ignore is set
-> for a remote, the error you got will mention that.
->
-> (Also, there is not currently anything lacking in git-annex's support
-> for bare repositories.) --[[Joey]]
diff --git a/doc/bugs/case_sensitivity_on_FAT.mdwn b/doc/bugs/case_sensitivity_on_FAT.mdwn
deleted file mode 100644
index 682acc71d..000000000
--- a/doc/bugs/case_sensitivity_on_FAT.mdwn
+++ /dev/null
@@ -1,49 +0,0 @@
-I was copying files to a directory remote with `git annex copy`. Out of 114 files, 9 of them failed with no message, just:
-
- copy data/foo.dat (to usbdrive...) failed
- copy data/bar.dat (to usbdrive...) failed
-
-According to strace:
-
- 31338 mkdir("/media/annex/Zp/9v/SHA256-s1362999320--d650297c8cf8c2dc0575110a52d0c5cc0ff266f294a0599f85796a6b44b23492", 0777) = -1 ENOENT (No such file or directory)
- 31338 mkdir("/media/annex/Zp/9v", 0777) = -1 ENOENT (No such file or directory)
- 31338 mkdir("/media/annex/Zp", 0777) = -1 EEXIST (File exists)
- 31338 stat("/media/annex/Zp", 0x7f8449f170d0) = -1 ENOENT (No such file or directory)
-
-The filesystem is FAT32 and has weird case semantics. This was mounted by udisks with its default options:
-
- /dev/sdb1 on /media/annex type vfat (rw,nosuid,nodev,uhelper=udisks,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec)
-
-I wonder if the directory remote should use hashDirLower instead of hashDirMixed?
-
-> git-annex intentionally uses the same layout for directory and rsync
-> special remotes as it does for the .git/annex directory. As far
-> as I know it works ok on (truely) case-insensative filesystems.
->
-> Based on your strace, if you `ls /media/annex/Zp`, you will see
-> "No such file or directory", but if you `mkdir /media/annex/Zp` it will
-> fail with "File exists". Doesn't make much sense to me.
->
-> The (default) VFAT mount option shortname=mixed causes this behavior.
-> With shortname=lower it works ok. --[[Joey]]
->
->> So, the options for fixing this bug seem to be to fix Linux (which would
->> be a good idea IMHO but I don't really want to go there), or generally
->> convert git-annex to using lowercase for its hashing (which would be a
->> large amount of pain to rewrite all the symlinks in every git repo),
->> or some special hack around this problem.
->>
->> I've put in a workaround for the problem in the directory special
->> remote; it will use mixed case but fall-back to lowercase as necessary.
->>
->> That does leave the case of a bare git repository with annexed content
->> stored on VFAT. More special casing could fix it, but that is, I
->> think, an unusual configuration. Leaving the bug open for that case,
->> and for the even more unlikely configuration of a rsync special remote
->> stored on VFAT. --[[Joey]]
-
->>> Bare repositories now use lowercase. rsync is the only remaining
->>> unsupported possibility. --[[Joey]]
->>>> Everything now uses lowercase, with the exception of non-bare
->>>> repos, which cannot be on FAT anyway due to using symlinks. [[done]]
->>>> --[[Joey]]
diff --git a/doc/bugs/check_for_curl_in_configure.hs.mdwn b/doc/bugs/check_for_curl_in_configure.hs.mdwn
deleted file mode 100644
index a880392bf..000000000
--- a/doc/bugs/check_for_curl_in_configure.hs.mdwn
+++ /dev/null
@@ -1,92 +0,0 @@
-[[!meta title="arbitrary/configurable backends"]]
-
-(Retitling as this has drifted..)
-
----
-
-I thought this might be useful, since curl is being used for the URL backend, it might be worth checking for it's existence.
-
-<pre>
-diff --git a/configure.hs b/configure.hs
-index 772ba54..1a563e0 100644
---- a/configure.hs
-+++ b/configure.hs
-@@ -13,6 +13,7 @@ tests = [
- , TestCase "uuid generator" $ selectCmd "uuid" ["uuid", "uuidgen"]
- , TestCase "xargs -0" $ requireCmd "xargs_0" "xargs -0 </dev/null"
- , TestCase "rsync" $ requireCmd "rsync" "rsync --version >/dev/null"
-+ , TestCase "curl" $ requireCmd "curl" "curl --version >/dev/null"
- , TestCase "unicode FilePath support" $ unicodeFilePath
- ] ++ shaTestCases [1, 256, 512, 224, 384]
-</pre>
-
-> Well, curl is an optional extra, so requireCmd is too strong. Changed
-> to testCmd and applied, thank you!
->
-> I thought about actually *using* the resulting SysConfig.curl
-> to disable the URL backend if False.. but probably it's better
-> to just let it fail if curl is not available. Although, if we wanted
-> to add a check for wget or something and use it when curl was not
-> available, that might be worth doing. --[[Joey]]
-
->> I was thinking that is it worth doing a generic "stat", "delete", "get"
->> and "put" options, I do like the idea of having the possibility of
->> being about to use completely arbitrary storage systems or arbitrary
->> transfer systems. If there was the capability of doing so it would be
->> interesting to see possibilities of using aria2 for using something
->> like bittorrent as backend, or using something like irods or some
->> grid storage system as the storage archive. It's just an idea as
->> I have seen it implemented quite well in irods.
-
->>> I'm unsure about the idea of having a backend where that is
->>> parameterized. It would mean that one annex's GENERIC-foo key
->>> might be entirely different from another's key with the same backend
->>> and details. And a misconfiguration could get data the wrong
->>> way and get the wrong data, etc.
->>>
->>> I mostly look at the URL backend as an example that can be modified to
->>> make this kind of custom backend. You already probably know enough to
->>> make a TORRENT backend where keys are the urls to torrents to download
->>> with `aria2c --follow-torrent=mem`.
->>>
->>> I am also interested in doing backends that use eg, cloud storage.
->>> A S3 backend that could upload files to S3 in addition to downloading
->>> them, for example, would be handy. --[[Joey]]
-
->>>> So, rather than use backends to do this, it instead made more sense
->>>> to make them [[special_remotes]]. The URL backend remains a bit
->>>> of a special case, and a bittorrent backend that downloaded a file
->>>> from a bittorrent url would still be a good use of backend, but for
->>>> storing files in external data stores like S3, making it a remote
->>>> makes better sense. I think I can close this bug now, [[done]]
->>>> --[[Joey]]
-
-also in Backend/URL.hs is it worth making a minor change to the way curl is called (I'm not sure if the following is correct or not)
-
-> It's correct, typewise, but I don't see any real reason to bother
-> with the change. But I do appreciate patches, which have been rare
-> so far, probaby because of Haskell.. :) --[[Joey]]
-
->> heh agreed
-
-<pre>
-diff --git a/Backend/URL.hs b/Backend/URL.hs
-index 29dc8fe..4afcf86 100644
---- a/Backend/URL.hs
-+++ b/Backend/URL.hs
-@@ -50,10 +50,13 @@ dummyFsck _ _ _ = return True
- dummyOk :: Key -> Annex Bool
- dummyOk _ = return True
-
-+curl :: [CommandParam] -> IO Bool
-+curl = boolSystem "curl"
-+
- downloadUrl :: Key -> FilePath -> Annex Bool
- downloadUrl key file = do
- showNote "downloading"
- showProgress -- make way for curl progress bar
-- liftIO $ boolSystem "curl" [Params "-# -o", File file, File url]
-+ liftIO $ curl [Params "-# -o", File file, File url]
- where
- url = join ":" $ drop 1 $ split ":" $ show key
-</pre>
diff --git a/doc/bugs/clicking_back_in_the_web_browser_crashes.mdwn b/doc/bugs/clicking_back_in_the_web_browser_crashes.mdwn
deleted file mode 100644
index 1b7e2ec71..000000000
--- a/doc/bugs/clicking_back_in_the_web_browser_crashes.mdwn
+++ /dev/null
@@ -1,23 +0,0 @@
-### Please describe the problem.
-
-When I click on the "back" button in my web browser, I get the following error message:
-
- git-annex has shut down
-
- You can now close this browser window.
-
-### What steps will reproduce the problem?
-
- 1. git annex webapp
- 2. click on "configuration" (or whatever)
- 3. click on the back button of your web browser
-
-### What version of git-annex are you using? On what operating system?
-
-4.20130815~bpo70+1 on Debian Wheezy, with Chromium Version 29.0.1547.57 Debian 7.1 (217859)
-
-### Please provide any additional information below.
-
-Click "forward" actually brings us back to sanity, and the webapp doesn't actually *crash*. -- [[anarcat]]
-
-> I have applied the page reload fix/hack. [[done]] --[[Joey]]
diff --git a/doc/bugs/clicking_back_in_the_web_browser_crashes/comment_1_c962218657a28494ff837a471d71b43f._comment b/doc/bugs/clicking_back_in_the_web_browser_crashes/comment_1_c962218657a28494ff837a471d71b43f._comment
deleted file mode 100644
index ece6ce0e3..000000000
--- a/doc/bugs/clicking_back_in_the_web_browser_crashes/comment_1_c962218657a28494ff837a471d71b43f._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.255.110"
- subject="comment 1"
- date="2013-09-09T04:23:36Z"
- content="""
-This occurs when the javascript long polling code fails 4 times in a row attempting to communicate with git-annex's web server. Normally this will mean that the assistant has been stopped. I have seen it once or twice happen while the web server is still running -- possibly due to the browser killing the connection? I have never seen it happen when navigating between pages in the webapp, which is designed to allow use of back button etc. If you can reproduce it reliably, using the chromium inspector to modify the javascript code (look for \"longpoll\") and perhaps add some debug prints might track down what is going on.
-"""]]
diff --git a/doc/bugs/clicking_back_in_the_web_browser_crashes/comment_2_643b2c99ecfe851c576a023ce4385dbb._comment b/doc/bugs/clicking_back_in_the_web_browser_crashes/comment_2_643b2c99ecfe851c576a023ce4385dbb._comment
deleted file mode 100644
index feac21ffe..000000000
--- a/doc/bugs/clicking_back_in_the_web_browser_crashes/comment_2_643b2c99ecfe851c576a023ce4385dbb._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://id.koumbit.net/anarcat"
- ip="2001:1928:1:9::1"
- subject="comment 2"
- date="2013-09-09T04:31:30Z"
- content="""
-i can reproduce reliably alright. It's quite systematic. I have found the `longpolling.js` file in the inspector, but I am not very familiar with in-browser javascript debugging, so I am not sure where to go from here.
-
-Note that the assistant doesn't actually crash. This is also reproducable in Debian sid.
-"""]]
diff --git a/doc/bugs/clicking_back_in_the_web_browser_crashes/comment_3_6e85c50439da81212f4239c74947b75e._comment b/doc/bugs/clicking_back_in_the_web_browser_crashes/comment_3_6e85c50439da81212f4239c74947b75e._comment
deleted file mode 100644
index a3dee1d52..000000000
--- a/doc/bugs/clicking_back_in_the_web_browser_crashes/comment_3_6e85c50439da81212f4239c74947b75e._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.255.110"
- subject="comment 3"
- date="2013-09-09T05:22:49Z"
- content="""
-Actually I am able to reproduce it. One thing I can see is that git-annex does not see any connection attempts from the browser when these longpolling attempts are made and fail. So this is all failing on the javascript side. Increasing the connection failure counter does not help. Every ajax request fails, no matter how many times it tries. Chromium has apparently decided that, because we've navigated back to a page, it should not be allowed to load any new resources. This seems to be new, buggy behavior.
-
-It seems the only way out of this bad state would be for the javacript to force a reload of the page. Of course, if git-annex has legitimately exited, that would fail to reload. I suppose the chromium \"this webpage is not available\" that would result is at least accurate...
-
-(At some point, I should probably try to add support for something more modern than long polling.)
-"""]]
diff --git a/doc/bugs/com.branchable.git-annex.assistant.plist_is_invalid.mdwn b/doc/bugs/com.branchable.git-annex.assistant.plist_is_invalid.mdwn
deleted file mode 100644
index d67cdcd40..000000000
--- a/doc/bugs/com.branchable.git-annex.assistant.plist_is_invalid.mdwn
+++ /dev/null
@@ -1,15 +0,0 @@
-What steps will reproduce the problem?
-`cat com.branchable.git-annex.assistant`
-
-What version of git-annex are you using? On what operating system?
- git-annex version: 3.20121112 on OS X Mountain Lion
-
-Please provide any additional information below.
-The '`RunAtLoad`' key is missing a value.
-
-It should say:
-
-`<key>RunAtLoad</key>`<br>
-`<true/>`
-
-> Fixed in git. [[done]] --[[Joey]]
diff --git a/doc/bugs/commit_f20a40f_breaks_on_OSX_as_mntent.h_doesn__39__t_exist.mdwn b/doc/bugs/commit_f20a40f_breaks_on_OSX_as_mntent.h_doesn__39__t_exist.mdwn
deleted file mode 100644
index dfd3ffb82..000000000
--- a/doc/bugs/commit_f20a40f_breaks_on_OSX_as_mntent.h_doesn__39__t_exist.mdwn
+++ /dev/null
@@ -1,8 +0,0 @@
-commit f20a40f breaks on OSX as mntent.h doesn't exist, the closet thing available to what mntent.h provides is getmntinfo(), it looks yet another bunch of ifdef's might be needed to work around OSX. This problem maybe similarly true with FreeBSD, libfam seems to have worked around the issue - <http://oss.sgi.com/projects/fam/download/contrib/freebsd-mntent.patch>
-
-hope the above report helps.
-
-> Thanks, that was a very useful pointer. I couldn't figure out how to
-> use Haskell's FFI to loop over the list of statfs structs returned by
-> getmntinfo, so I incorporated that C code into a little library,
-> and it seems to work ok. [[done]] --[[Joey]]
diff --git a/doc/bugs/configurable_path_to_git-annex-shell/comment_5_178452f3c2671830d1a9f5e1d11accb4._comment b/doc/bugs/configurable_path_to_git-annex-shell/comment_5_178452f3c2671830d1a9f5e1d11accb4._comment
new file mode 100644
index 000000000..cc4742587
--- /dev/null
+++ b/doc/bugs/configurable_path_to_git-annex-shell/comment_5_178452f3c2671830d1a9f5e1d11accb4._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 5"
+ date="2014-05-27T16:13:09Z"
+ content="""
+See [[devblog/day_166__catching_up]]
+"""]]
diff --git a/doc/bugs/configurable_path_to_git-annex-shell/comment_5_77b2269936f740cacbc955b95f9da51d._comment b/doc/bugs/configurable_path_to_git-annex-shell/comment_5_77b2269936f740cacbc955b95f9da51d._comment
new file mode 100644
index 000000000..a30f2fff9
--- /dev/null
+++ b/doc/bugs/configurable_path_to_git-annex-shell/comment_5_77b2269936f740cacbc955b95f9da51d._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmZilYULa6CDEGfuagoDlesyakBgnf-dF8"
+ nickname="Maarten"
+ subject="comment 5"
+ date="2014-05-26T11:52:27Z"
+ content="""
+when doing ssh host 'echo $PATH', the remote shell running the command is not an interactive shell and thus does NOT source .bashrc, neither is it a login shell and as such does not source .profile or .bash_profile. Which leaves me wondering: how does git annex log in to the remote machine to run git-annex-shell? Does it do so via an interactive shell, a login shell, or neither? Because if it does it via ssh host 'git-annex-shell', then neither .bashrc or .profile can configure its PATH.
+"""]]
diff --git a/doc/bugs/configure_mistakes_hashalot_bins_for_sha__63____63____63__sum_and_builds_a_broken_git-annex_executable.mdwn b/doc/bugs/configure_mistakes_hashalot_bins_for_sha__63____63____63__sum_and_builds_a_broken_git-annex_executable.mdwn
deleted file mode 100644
index b71f39e5a..000000000
--- a/doc/bugs/configure_mistakes_hashalot_bins_for_sha__63____63____63__sum_and_builds_a_broken_git-annex_executable.mdwn
+++ /dev/null
@@ -1,57 +0,0 @@
-git-annex's configure step finds hashalot's /usr/sbin/sha256, /usr/sbin/sha384, and /usr/sbin/sha512 executables and mistakes them for sha256sum, sha384sum, and sha512sum and prefers them over the correct executables. Hashalot is not compatible, but the build does not fail producing a broken git-annex executable which tries to use hashalot's programs instead of the appropriate shaXXXsum program and is non-functional.
-
-Hashalot can be found at: <http://www.paranoiacs.org/~sluskyb/hacks/hashalot/>
-
-
-What steps will reproduce the problem?
-
-Compile with hashalot's programs in the path.
-
-
-What is the expected output? What do you see instead?
-
-Expect to see configure output:
-
-[...]
-<pre>
- checking sha1... sha1sum
- checking sha512... sha512sum
- checking sha224... sha224sum
- checking sha384... sha384sum
- checking sha256... sha256sum
-</pre>
-[...]
-
-
-Instead I see configure output:
-
-[...]
-<pre>
- checking sha1... sha1sum
- checking sha512... sha512
- checking sha224... sha224sum
- checking sha384... sha384
- checking sha256... sha256
-</pre>
-[...]
-
-
-What version of git-annex are you using? On what operating system?
-
-I am using 3.20120605, but have checked out the latest GIT and confirmed the bug is still there.
-
-
-Please provide any additional information below.
-
-This is not a runtime bug, only compile time. Uninstalling Hashalot or simply removing it from the PATH is enough to work around this bug. The bug is, however, frustrating because at first glance there appears to be no problem. However any functions of git-annex which use the affected SHA hash functions will fail with the resulting executable and the failure gives no clear indication of why.
-
-I found this bug on Gentoo when I installed git-annex on a system which already had hashalot installed. In the case of Gentoo, git-annex is compiled with hashalot's executables in the path, but normal users don't have /usr/sbin/ in their path so git-annex just fails to find the executable. If you put hashalot in the path, then git annex still fails to work as hashalot is not a replacement for sha1sum and friends.
-
-It may be enough to just prefer sha???sum over sha??? if they both exist.
-
-> Grr. There is no consistency across unixes as to the names of these
-> programs and now something is installing shaN commands that don't
-> generate a checksum?!
->
-> Ok, fine, configure now checks that the program it finds outputs a known
-> good checksum. [[done]] --[[Joey]]
diff --git a/doc/bugs/configure_script_should_detect_uuidgen_instead_of_just_uuid.mdwn b/doc/bugs/configure_script_should_detect_uuidgen_instead_of_just_uuid.mdwn
deleted file mode 100644
index 2b9c77367..000000000
--- a/doc/bugs/configure_script_should_detect_uuidgen_instead_of_just_uuid.mdwn
+++ /dev/null
@@ -1,6 +0,0 @@
-On RHEL5 (and clones) systems uuidgen is available as an alternative to
-uuid, the configure script fails, it should probably detect either uuid or
-uuidgen, or let the user decide? - also uuidgen behaves differently from
-uuid on debian.
-
-> uuidgen is now supported. --[[Joey]] [[done]]
diff --git a/doc/bugs/confirmed.mdwn b/doc/bugs/confirmed.mdwn
new file mode 100644
index 000000000..1bb3c864f
--- /dev/null
+++ b/doc/bugs/confirmed.mdwn
@@ -0,0 +1,5 @@
+This tag is for bugs that have been confirmed to be real bugs, and so are likely
+to be the next bugs fixed.
+
+If your bug report is not tagged as confirmed, you probably need to provide more
+information so that the bug can be reproduced.
diff --git a/doc/bugs/conflicting_haskell_packages.mdwn b/doc/bugs/conflicting_haskell_packages.mdwn
deleted file mode 100644
index 5528fad82..000000000
--- a/doc/bugs/conflicting_haskell_packages.mdwn
+++ /dev/null
@@ -1,17 +0,0 @@
-The compilation command should states which packages are used and avoid the default mechnasim that automatically search for them.
-
-This can be done by the flags -hide-packages and then -package foo
-
-> My ghc does not have a `--hide-packages` option.
->
-> Could you just show the build problem that you are suggesting I work
-> around? --[[Joey]]
-
-
-> Thanks npouillard, I see the problem now.
-> <http://stackoverflow.com/questions/2048953/control-monad-state-found-in-multiple-packages-haskell>
->
-> I've added "-ignore-package monads-fd" to GHCFLAGS. I hope I don't
-> really have to hide all packages and individually turn them back on;
-> surely this monads-fd/mtl conflict is an exception, and Haskell's module
-> system is not a mess of conflicting modules? --[[Joey]] [[done]]
diff --git a/doc/bugs/conflicting_haskell_packages/comment_1_e552a6cc6d7d1882e14130edfc2d6b3b._comment b/doc/bugs/conflicting_haskell_packages/comment_1_e552a6cc6d7d1882e14130edfc2d6b3b._comment
deleted file mode 100644
index 42f44bf9c..000000000
--- a/doc/bugs/conflicting_haskell_packages/comment_1_e552a6cc6d7d1882e14130edfc2d6b3b._comment
+++ /dev/null
@@ -1,24 +0,0 @@
-[[!comment format=mdwn
- username="http://ertai.myopenid.com/"
- nickname="npouillard"
- subject="how to reproduce the package conflict issue"
- date="2011-02-07T14:12:43Z"
- content="""
-If you install the monads-fd package (with cabal install for instance), then you can no longer build git-annex:
-
-<pre>
-./configure
- checking cp -a... yes
- checking cp -p... yes
- checking cp --reflink=auto... yes
- checking uuid generator... uuid
- checking xargs -0... yes
- checking rsync... yes
-ghc -O2 -Wall --make git-annex
-
-Annex.hs:22:7:
- Ambiguous module name `Control.Monad.State':
- it was found in multiple packages: monads-fd-0.2.0.0 mtl-2.0.1.0
-make: *** [git-annex] Error 1
-</pre>
-"""]]
diff --git a/doc/bugs/conq:_invalid_command_syntax.mdwn b/doc/bugs/conq:_invalid_command_syntax.mdwn
deleted file mode 100644
index 82cd51d8d..000000000
--- a/doc/bugs/conq:_invalid_command_syntax.mdwn
+++ /dev/null
@@ -1,30 +0,0 @@
-I've been getting an occasional error from git-annex.
-
-The error is: 'conq: invalid command syntax.'
-
-For example, the last two commands I ran are:
-
- $ git annex unused
- unused . (checking for unused data...) (checking master...) (checking origin/master...)
- Some annexed data is no longer used by any files:
- NUMBER KEY
- 1 SHA256-s.....
- (To see where data was previously used, try: git log --stat -S'KEY')
-
- To remove unwanted data: git-annex dropunused NUMBER
-
- ok
-
- $ git annex dropunused 1
- dropunused 1 conq: invalid command syntax.
- ok
-
-
-
-*OS:* OSX + port installs of the GNU tools
-
-*git-annex-version:* 3.20111211
-
-*git-version:* 1.7.7.4
-
-> [[done]], apparently not a git-annex bug --[[Joey]]
diff --git a/doc/bugs/conq:_invalid_command_syntax/comment_1_f33b83025ce974e496f83f248275a66a._comment b/doc/bugs/conq:_invalid_command_syntax/comment_1_f33b83025ce974e496f83f248275a66a._comment
deleted file mode 100644
index 62881bfc7..000000000
--- a/doc/bugs/conq:_invalid_command_syntax/comment_1_f33b83025ce974e496f83f248275a66a._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 1"
- date="2012-01-03T00:34:59Z"
- content="""
-AFAICs, you probably just have a \"conq\" program that is running in the background and emitted this error.
-
-The error message is not part of git-annex; it does not run any \"conq\" thing itself. Although you could try passing the --debug parameter to check the commands it does run to see if one of them somehow causes this conq thing.
-"""]]
diff --git a/doc/bugs/conq:_invalid_command_syntax/comment_2_195106ca8dedad5f4d755f625e38e8af._comment b/doc/bugs/conq:_invalid_command_syntax/comment_2_195106ca8dedad5f4d755f625e38e8af._comment
deleted file mode 100644
index 39ece1eca..000000000
--- a/doc/bugs/conq:_invalid_command_syntax/comment_2_195106ca8dedad5f4d755f625e38e8af._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 2"
- date="2012-01-03T00:41:08Z"
- content="""
-A google search <http://www.google.com/search?hl=en&sclient=psy-ab&q=conq%3A+invalid+command+syntax&btnG=>
-finds other examples of this error message related to ssh, mercurial, and bitbucket. What that has to do with git is anyone's guess, but I'm pretty sure git-annex is not related to it at all.
-"""]]
diff --git a/doc/bugs/conq:_invalid_command_syntax/comment_3_55af43e2f43a4c373f7a0a33678d0b1c._comment b/doc/bugs/conq:_invalid_command_syntax/comment_3_55af43e2f43a4c373f7a0a33678d0b1c._comment
deleted file mode 100644
index 75132c1d6..000000000
--- a/doc/bugs/conq:_invalid_command_syntax/comment_3_55af43e2f43a4c373f7a0a33678d0b1c._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="http://a-or-b.myopenid.com/"
- ip="203.45.2.230"
- subject="comment 3"
- date="2012-01-03T00:49:41Z"
- content="""
-Yeah, I saw those google links myself, but couldn't see why the bitbucket/ssh would be relevant.
-
-The strange thing is that I *only* get this message when running git-annex.
-
-I also don't have a conq in my path so I don't know where it is running from.
-
-
-Oh well, if I ever sort it out I'll post back here.
-"""]]
diff --git a/doc/bugs/copy_doesn__39__t_scale.mdwn b/doc/bugs/copy_doesn__39__t_scale.mdwn
deleted file mode 100644
index a5ca9d9ee..000000000
--- a/doc/bugs/copy_doesn__39__t_scale.mdwn
+++ /dev/null
@@ -1,38 +0,0 @@
-It seems that git-annex copies every individual file in a separate
-transaction. This is quite costly for mass transfers: each file involves a
-separate rsync invocation and the creation of a new commit. Even with a
-meager thousand files or so in the annex, I have to wait for fifteen
-minutes to copy the contents to another disk, simply because every
-individual file involves some disk thrashing. Also, it seems suspicious
-that the git-annex branch would get a thousands commits of history from the
-simple procedure of copying everything to a new repository. Surely it would
-be better to first copy everything and then create only a single commit
-that registers the changes to the files' availability?
-
-> git-annex is very careful to commit as infrequently as possible,
-> and the current version makes *1* commit after all the copies are
-> complete, even if it transferred a billion files. The only overhead
-> incurred for each file is writing a journal file.
-> You must have an old version.
-> --[[Joey]]
-
-(I'm also not quite clear on why rsync is being used when both repositories
-are local. It seems to be just overhead.)
-
-> Even when copying to another disk it's often on
-> some slow bus, and the file is by definition large. So it's
-> nice to support resumes of interrupted transfers of files.
-> Also because rsync has a handy progress display that is hard to get with cp.
->
-> (However, if the copy is to another directory in the same disk, it does
-> use cp, and even supports really fast copies on COW filesystems.)
-> --[[Joey]]
-
----
-
-Oneshot mode is now implemented, making git-annex-shell and other
-short lifetime processes not bother with committing changes.
-[[done]] --[[Joey]]
-
-Update: Now it makes one commit at the very end of such a mass transfer.
---[[Joey]]
diff --git a/doc/bugs/copy_doesn__39__t_scale/comment_1_7c12499c9ac28a9883c029f8c659eb57._comment b/doc/bugs/copy_doesn__39__t_scale/comment_1_7c12499c9ac28a9883c029f8c659eb57._comment
deleted file mode 100644
index 749b3ba10..000000000
--- a/doc/bugs/copy_doesn__39__t_scale/comment_1_7c12499c9ac28a9883c029f8c659eb57._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawk6QAwUsFHpr3Km1yQbg8hf3S7RDYf7hX4"
- nickname="Lauri"
- subject="comment 1"
- date="2012-01-28T00:17:37Z"
- content="""
-To me it very much seems that a commit per file is indeed created at the remote end, although not at the local end. See the following transcript: <https://gist.github.com/1691714>.
-
-
-"""]]
diff --git a/doc/bugs/copy_doesn__39__t_scale/comment_2_f85d8023cdbc203bb439644cf7245d4e._comment b/doc/bugs/copy_doesn__39__t_scale/comment_2_f85d8023cdbc203bb439644cf7245d4e._comment
deleted file mode 100644
index 9a2bd92fa..000000000
--- a/doc/bugs/copy_doesn__39__t_scale/comment_2_f85d8023cdbc203bb439644cf7245d4e._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 2"
- date="2012-01-28T19:32:36Z"
- content="""
-Ah, I see, I was not thinking about the location log update that's done on the remote side.
-
-For transfers over ssh, that's a separate git-annex-shell invoked per change. For local-local transfers, it's all done in a single process but it spins up a state to handle the remote and then immediately shuts it down, also generating a commit.
-
-In either case, I think there is a nice fix. Since git-annex *does* have a journal nowadays, and goes to all the bother to
-support recovery if a process was interrupted and journalled changes that did not get committed, there's really no reason in either of these cases for the remote end to do anything more than journal the change. The next time git-annex is actually run on the remote, and needs to look up location information, it will merge the journalled changes into the branch, in a single commit.
-
-My only real concern is that some remotes might *never* have git-annex run in them directly, and would just continue to accumulate journal files forever. Although due to the way the journal is structured, it can have, at a maximum, the number of files in the git-annex branch. However, the number of files in it is expected to be relatively smal and it might get a trifle innefficient, as it lacks directory hashing. These performance problems could certainly be dealt with if they do turn out to be a problem.
-"""]]
diff --git a/doc/bugs/copy_doesn__39__t_scale/comment_3_4592765c3d77bb5664b8d16867e9d79c._comment b/doc/bugs/copy_doesn__39__t_scale/comment_3_4592765c3d77bb5664b8d16867e9d79c._comment
deleted file mode 100644
index aa9bf1e45..000000000
--- a/doc/bugs/copy_doesn__39__t_scale/comment_3_4592765c3d77bb5664b8d16867e9d79c._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawk6QAwUsFHpr3Km1yQbg8hf3S7RDYf7hX4"
- nickname="Lauri"
- subject="comment 3"
- date="2012-01-29T01:51:35Z"
- content="""
-That sounds just fine, but indeed my use case was a bare backup/transfer repository that is meant to always be only at the remote end of git-annex operations. So why not as well do a single commit after everything has been copied and journaled? That's what's done at the other end too, after all. Or, if commits are to be minimized, just stage the journal into the index before finishing, but don't commit it yet?
-
-(I would actually prefer this mode of usage for other git-annex operations, too. In git you can add stuff little by little and commit them all in one go. In git-annex the add immediately creates a commit, which is unexpected and a bit annoying.)
-
-"""]]
diff --git a/doc/bugs/copy_fast_confusing_with_broken_locationlog.mdwn b/doc/bugs/copy_fast_confusing_with_broken_locationlog.mdwn
deleted file mode 100644
index 69fbc816f..000000000
--- a/doc/bugs/copy_fast_confusing_with_broken_locationlog.mdwn
+++ /dev/null
@@ -1,6 +0,0 @@
-Conversation moved from [[tips/recover_data_from_lost+found]]
-to a proper bug. --[[Joey]]
-
-(Unfortunatly that scrambled the comment creation times and thus order.)
-
-> Added a message [[done]] --[[Joey]]
diff --git a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_10_435f87d54052f264096a8f23e99eae06._comment b/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_10_435f87d54052f264096a8f23e99eae06._comment
deleted file mode 100644
index ec24c478d..000000000
--- a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_10_435f87d54052f264096a8f23e99eae06._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 10"
- date="2011-05-15T16:47:53Z"
- content="""
-The key is the basename of the symlink target.
-"""]]
diff --git a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_11_9be0aef403a002c1706d17deee45763c._comment b/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_11_9be0aef403a002c1706d17deee45763c._comment
deleted file mode 100644
index 7bc54573e..000000000
--- a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_11_9be0aef403a002c1706d17deee45763c._comment
+++ /dev/null
@@ -1,24 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 11"
- date="2011-05-15T18:53:26Z"
- content="""
-It seems the objects are in the remote after all, but the remote is unaware of this fact. No idea where/why the remote lost that info, but.. Anyway, with the SHA backends, wouldn't it make sense to simply return \"OK\" and update the annex logs accordingly, no?
-
-Local:
-
- % ls -l foo
- lrwxrwxrwx 1 richih richih 312 Apr 3 01:18 foo -> .git/annex/objects/gG/VW/SHA512-s80781--cef3966a19c7435acceb8fbfbff1feebe6decab7c81a0c197f00932cf9ef0eac330784cc3f0d211bd4acf56a6d16daaebe9b598aa4dfd5bfec73f4e6df3f0491/SHA512-s80781--cef3966a19c7435acceb8fbfbff1feebe6decab7c81a0c197f00932cf9ef0eac330784cc3f0d211bd4acf56a6d16daaebe9b598aa4dfd5bfec73f4e6df3f0491
- %
-
-Remote:
-
- % git-annex-shell recvkey <remote> SHA512-s80781--cef3966a19c7435acceb8fbfbff1feebe6decab7c81a0c197f00932cf9ef0eac330784cc3f0d211bd4acf56a6d16daaebe9b598aa4dfd5bfec73f4e6df3f0491
- git-annex-shell: key is already present in annex
- % strace git-annex-shell recvkey /base/git-annex/fun SHA512-s80781--cef3966a19c7435acceb8fbfbff1feebe6decab7c81a0c197f00932cf9ef0eac330784cc3f0d211bd4acf56a6d16daaebe9b598aa4dfd5bfec73f4e6df3f0491 2>&1 | grep SHA512-s80781--cef3966a19c7435acceb8fbfbff1feebe6decab7c81a0c197f00932cf9ef0eac330784cc3f0d211bd4acf56a6d16daaebe9b598aa4dfd5bfec73f4e6df3f0491
- stat64(\"/base/git-annex/fun/annex/objects/gG/VW/SHA512-s80781--cef3966a19c7435acceb8fbfbff1feebe6decab7c81a0c197f00932cf9ef0eac330784cc3f0d211bd4acf56a6d16daaebe9b598aa4dfd5bfec73f4e6df3f0491/SHA512-s80781--cef3966a19c7435acceb8fbfbff1feebe6decab7c81a0c197f00932cf9ef0eac330784cc3f0d211bd4acf56a6d16daaebe9b598aa4dfd5bfec73f4e6df3f0491\", {st_mode=S_IFREG|0444, st_size=80781, ...}) = 0
- % ls -l /base/git-annex/fun/annex/objects/gG/VW/SHA512-s80781--cef3966a19c7435acceb8fbfbff1feebe6decab7c81a0c197f00932cf9ef0eac330784cc3f0d211bd4acf56a6d16daaebe9b598aa4dfd5bfec73f4e6df3f0491/SHA512-s80781--cef3966a19c7435acceb8fbfbff1feebe6decab7c81a0c197f00932cf9ef0eac330784cc3f0d211bd4acf56a6d16daaebe9b598aa4dfd5bfec73f4e6df3f0491
- -r--r--r-- 1 richih richih 80781 2011-04-01 12:44 /base/git-annex/fun/annex/objects/gG/VW/SHA512-s80781--cef3966a19c7435acceb8fbfbff1feebe6decab7c81a0c197f00932cf9ef0eac330784cc3f0d211bd4acf56a6d16daaebe9b598aa4dfd5bfec73f4e6df3f0491/SHA512-s80781--cef3966a19c7435acceb8fbfbff1feebe6decab7c81a0c197f00932cf9ef0eac330784cc3f0d211bd4acf56a6d16daaebe9b598aa4dfd5bfec73f4e6df3f0491
- %
-"""]]
diff --git a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_12_26d60661196f63fd01ee4fbb6e2340e7._comment b/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_12_26d60661196f63fd01ee4fbb6e2340e7._comment
deleted file mode 100644
index b458a37b6..000000000
--- a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_12_26d60661196f63fd01ee4fbb6e2340e7._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 12"
- date="2011-05-15T19:40:47Z"
- content="""
-So, it appears that you're using git annex copy --fast. As documented that assumes the location log is correct. So it avoids directly checking if the bare repo contains the file, and tries to upload it, and the bare repo is all like \"but I've already got this file!\". The only way to improve that behavior might be to let rsync go ahead and retransfer the file, which, with recovery, should require sending little data etc. But I can't say I like the idea much, as the repo already has the content, so unlocking it and letting rsync mess with it is an unnecessary risk. I think it's ok for --force to blow up
-if its assumptions turn out to be wrong.
-
-If you use git annex copy without --fast in this situation, it will do the right thing.
-"""]]
diff --git a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_13_ead55b915d3b92a62549b2957ad211c8._comment b/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_13_ead55b915d3b92a62549b2957ad211c8._comment
deleted file mode 100644
index d92ecbba0..000000000
--- a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_13_ead55b915d3b92a62549b2957ad211c8._comment
+++ /dev/null
@@ -1,35 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 13"
- date="2011-05-15T20:25:25Z"
- content="""
-Yes, makes sense. I am so used to using --fast, I forgot a non-fast mode existed. I still think it would be a good idea to fall back to non-fast mode if --fast runs into an error from the remote, but as that is well without my abilities how about this patch?
-
-
- From 4855510c7a84eb5d28fdada429580a8a42b7112a Mon Sep 17 00:00:00 2001
- From: Richard Hartmann <richih.mailinglist@gmail.com>
- Date: Sun, 15 May 2011 22:20:42 +0200
- Subject: [PATCH] Make error in RecvKey.hs suggest possible solution
-
- ---
- Command/RecvKey.hs | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
- diff --git a/Command/RecvKey.hs b/Command/RecvKey.hs
- index 126608f..b917a1c 100644
- --- a/Command/RecvKey.hs
- +++ b/Command/RecvKey.hs
- @@ -27,7 +27,7 @@ start :: CommandStartKey
- start key = do
- present <- inAnnex key
- when present $
- - error \"key is already present in annex\"
- + error \"key is already present in annex. If you are running copy, try without '--fast'\"
-
- ok <- getViaTmp key (liftIO . rsyncServerReceive)
- if ok
- --
- 1.7.4.4
-
-"""]]
diff --git a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_14_191de89d3988083d9cf001799818ff4a._comment b/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_14_191de89d3988083d9cf001799818ff4a._comment
deleted file mode 100644
index f45bd7046..000000000
--- a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_14_191de89d3988083d9cf001799818ff4a._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 14"
- date="2011-05-15T20:50:26Z"
- content="""
-Or, even better, wouldn't it make sense to have SHA backends always default to --fast and only use non-fast when any snags are hit, use non-fast mode for that file.
-
-Though if we continue here, we should probably move this to its own page.
-"""]]
diff --git a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_15_b3e3b338ccfa0a32510c78ba1b1bb617._comment b/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_15_b3e3b338ccfa0a32510c78ba1b1bb617._comment
deleted file mode 100644
index b4a00bd7e..000000000
--- a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_15_b3e3b338ccfa0a32510c78ba1b1bb617._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 15"
- date="2011-05-15T21:38:47Z"
- content="""
-PS: Just to make this clear, I am using a custom alias for all my copying needs and thus didn't even see that I used --fast. :p
-"""]]
diff --git a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_16_04a9f4468c3246c8eff3dbe21dd90101._comment b/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_16_04a9f4468c3246c8eff3dbe21dd90101._comment
deleted file mode 100644
index 6d3dabb92..000000000
--- a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_16_04a9f4468c3246c8eff3dbe21dd90101._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 16"
- date="2011-05-16T20:01:28Z"
- content="""
-Thanks.
-"""]]
diff --git a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_1_6a41bf7e2db83db3a01722b516fb6886._comment b/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_1_6a41bf7e2db83db3a01722b516fb6886._comment
deleted file mode 100644
index 59c30de53..000000000
--- a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_1_6a41bf7e2db83db3a01722b516fb6886._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 1"
- date="2011-05-12T00:07:29Z"
- content="""
-I followed this to re-inject files which git annex fsck listed as missing.
-
-For everyone of those files, I get
-
- git-annex-shell: key is already present in annex
- rsync: connection unexpectedly closed (0 bytes received so far) [sender]
- rsync error: error in rsync protocol data stream (code 12) at io.c(601) [sender=3.0.8]
-
-when trying to copy the files to the remote.
-
--- Richard
-"""]]
diff --git a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_2_9f5f1dbffb2dd24f4fcf8c2027bf0384._comment b/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_2_9f5f1dbffb2dd24f4fcf8c2027bf0384._comment
deleted file mode 100644
index 44aab3baa..000000000
--- a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_2_9f5f1dbffb2dd24f4fcf8c2027bf0384._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 2"
- date="2011-05-12T01:01:34Z"
- content="""
-Sounds like you probably didn't commit after the fsck, or didn't push so the other repository did not know the first had the content again -- but I'm not 100% sure.
-"""]]
diff --git a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_3_b596b5cfd3377e58dbbb5d509d026b90._comment b/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_3_b596b5cfd3377e58dbbb5d509d026b90._comment
deleted file mode 100644
index 4744db995..000000000
--- a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_3_b596b5cfd3377e58dbbb5d509d026b90._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 3"
- date="2011-05-14T09:06:54Z"
- content="""
-As my comment from work is stuck in moderation:
-
-I ran this twice:
-
- git pull && git annex add . && git annex copy . --to <remote> --fast --quiet && git commit -a -m \"$HOST $(date +%F--%H-%M-%S-%Z)\" && git push
-
-but nothing changed
-"""]]
diff --git a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_4_d7112c315fb016a8a399e24e9b6461d8._comment b/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_4_d7112c315fb016a8a399e24e9b6461d8._comment
deleted file mode 100644
index 1fb19ab19..000000000
--- a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_4_d7112c315fb016a8a399e24e9b6461d8._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 4"
- date="2011-05-14T16:13:58Z"
- content="""
-Hmm. Old versions may have forgotten to git add a .git-annex location log file when recovering content with fsck. That could be another reason things are out of sync.
-
-But I'm not clear on which repo is trying to copy files to which.
-
-(NB: If the files were recovered on a bare git repo, fsck cannot update the location log there, which could also explain this.)
-"""]]
diff --git a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_5_4ea29a6f8152eddf806c536de33ef162._comment b/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_5_4ea29a6f8152eddf806c536de33ef162._comment
deleted file mode 100644
index 0a546bd88..000000000
--- a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_5_4ea29a6f8152eddf806c536de33ef162._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 5"
- date="2011-05-14T19:03:43Z"
- content="""
-Version: 0.20110503
-
-My local non-bare repo is copying to a remote bare repo.
-
-I have been recovering in a non-bare repo.
-
-If there is anything I can send you to help... If I removed said files and went through http://git-annex.branchable.com/bugs/No_easy_way_to_re-inject_a_file_into_an_annex/ -- would that help?
-"""]]
diff --git a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_6_0d85f114a103bd6532a3b3b24466012e._comment b/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_6_0d85f114a103bd6532a3b3b24466012e._comment
deleted file mode 100644
index 1e3f32531..000000000
--- a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_6_0d85f114a103bd6532a3b3b24466012e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 6"
- date="2011-05-14T19:23:45Z"
- content="""
-Well, focus on a specific file that exhibits the problem. What does `git annex whereis` say about it? Is the content actually present in annex/objects/ on the bare repository? Does that contradict whereis?
-"""]]
diff --git a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_7_d38d5bee6d360b0ea852f39e3a7b1bc6._comment b/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_7_d38d5bee6d360b0ea852f39e3a7b1bc6._comment
deleted file mode 100644
index f7dfad68c..000000000
--- a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_7_d38d5bee6d360b0ea852f39e3a7b1bc6._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 7"
- date="2011-05-14T23:13:15Z"
- content="""
-It exists locally, whereis tells me it exists locally and locally, only.
-
-The object is _not_ in the bare repo.
-
-The file _might_ have gone missing before I upgraded my annex backend version to 2. Could this be a factor?
-"""]]
diff --git a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_8_29c3de4bf5fbd990b230c443c0303cbe._comment b/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_8_29c3de4bf5fbd990b230c443c0303cbe._comment
deleted file mode 100644
index 01248914c..000000000
--- a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_8_29c3de4bf5fbd990b230c443c0303cbe._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 8"
- date="2011-05-15T00:09:34Z"
- content="""
-What you're describing should be impossible; the error message shown can only occur if the object is present in the annex where `git-annex-shell recvkey` is run. So something strange is going on.
-
-Try reproducing it by running on the remote system, `git-annex-shell recvkey /remote/repo.git $key` .. if you can reproduce it, I guess the next thing to do will be to strace the command and see why it's thinking the object is there.
-"""]]
diff --git a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_9_2cee4f6bd6db7518fd61453c595162c6._comment b/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_9_2cee4f6bd6db7518fd61453c595162c6._comment
deleted file mode 100644
index 2755cf331..000000000
--- a/doc/bugs/copy_fast_confusing_with_broken_locationlog/comment_9_2cee4f6bd6db7518fd61453c595162c6._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 9"
- date="2011-05-15T09:16:49Z"
- content="""
-Just to make sure: How do I get $key? What I did was look at the path in the object store of the local repo and see if that exact same path & file existed in the remote.
-"""]]
diff --git a/doc/bugs/copy_to_webdav_sometimes_doesn__39__t_work.mdwn b/doc/bugs/copy_to_webdav_sometimes_doesn__39__t_work.mdwn
deleted file mode 100644
index 190f3bb3b..000000000
--- a/doc/bugs/copy_to_webdav_sometimes_doesn__39__t_work.mdwn
+++ /dev/null
@@ -1,74 +0,0 @@
-### Please describe the problem.
-Copying to a gpg encrypted webdav remote (with davfs) seems to work, but fails.
-The command "git annex copy --to 1und1 some/file" returns ok, but a fsck fails and running
-the copy again copies the file again to the remote.
-
-### What steps will reproduce the problem?
-[[!format sh """
-git annex copy --to 1und1 some/file # seems ok
-git annex copy --to 1und1 some/file # copies again
-git annex fsck --from 1und1 some/file # fails
-"""]]
-
-### What version of git-annex are you using? On what operating system?
-4.20131002 on debian (mostly stable), armel.
-
-### Please provide any additional information below.
-
-I used strace to see what is going on. It seems the chunkcount file is not written. When I create that file by hand fsck is happy.
-(git annex seems to have two different locations for that file (dcf/85a and 3W/Qm). The second (3W/Qm) doesn't exist.)
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-copy to webdav (git annex copy --to 1und1 some/file)
-output of basically "strace git annex ... | grep media":
-
-9871 stat64("/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33.chunkcount", <unfinished ...>
-9871 stat64("/media/1und1/git-annex/3W/Qm/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33.chunkcount", 0xb65145d0) = -1 ENOENT (No such file or directory)
-9871 mkdir("/media/1und1/git-annex/tmp/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33", 0777 <unfinished ...>
-9871 statfs("/media/1und1/git-annex/tmp/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/", <unfinished ...>
-9871 stat64("/media/1und1/git-annex/tmp/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
-9871 open("/media/1und1/git-annex/tmp/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33.chunk1", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK|O_LARGEFILE, 0666 <unfinished ...>
-9871 stat64("/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/", <unfinished ...>
-9871 chmod("/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/", 040755 <unfinished ...>
-9871 openat(AT_FDCWD, "/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 15
-9871 unlink("/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33.chunk1" <unfinished ...>
-9871 rmdir("/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/" <unfinished ...>
-9871 mkdir("/media/1und1/git-annex/dcf/85a", 0777) = -1 EEXIST (File exists)
-9871 stat64("/media/1und1/git-annex/dcf/85a", {st_mode=S_IFDIR|0755, st_size=64, ...}) = 0
-9871 stat64("/media/1und1/git-annex/tmp/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
-9871 rename("/media/1und1/git-annex/tmp/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/", "/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/" <unfinished ...>
-9871 openat(AT_FDCWD, "/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 15
-9871 stat64("/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33.chunk1", {st_mode=S_IFREG|0644, st_size=11705, ...}) = 0
-9871 chmod("/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33.chunk1", 0100444) = 0
-9871 stat64("/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/", {st_mode=S_IFDIR|0755, st_size=152, ...}) = 0
-9871 chmod("/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/", 040555 <unfinished ...>
-
-fsck webdav, but fails (git annex fsck --from 1und1 some/file):
-
-10208 stat64("/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33.chunkcount", <unfinished ...>
-10208 stat64("/media/1und1/git-annex/3W/Qm/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33.chunkcount", 0xb6428160) = -1 ENOENT (No such file or directory)
-
-
-manual file creation:
-chmod u+w ...
-echo -n 1 > /media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33.chunkcount
-chmod u-w ...
-
-
-fsck webdav again, now all is fine ("fixing location log"):
-10670 stat64("/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33.chunkcount", {st_mode=S_IFREG|0444, st_size=1, ...}) = 0
-10670 open("/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33.chunkcount", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_LARGEFILE) = 14
-10670 stat64("/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33.chunk1", {st_mode=S_IFREG|0444, st_size=11705, ...}) = 0
-10670 stat64("/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33.chunkcount", {st_mode=S_IFREG|0444, st_size=1, ...}) = 0
-10670 open("/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33.chunkcount", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_LARGEFILE) = 14
-10670 stat64("/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33.chunk1", {st_mode=S_IFREG|0444, st_size=11705, ...}) = 0
-10672 open("/media/1und1/git-annex/dcf/85a/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33/GPGHMACSHA1--10ff9e1cc8191235670c2fd95375bccf62004f33.chunk1", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_LARGEFILE) = 20
-# End of transcript or log.
-"""]]
-
-> There was a bug that caused it not to write the chunkcount file.
-> I have fixed it, and put in a workaround so fsck, etc, will
-> see that the file is stored on the remote despite there being no
-> chunkcount file present. [[done]] --[[Joey]]
diff --git a/doc/bugs/copy_to_webdav_sometimes_doesn__39__t_work/comment_1_77629f620b28ac62364de44b41fa539d._comment b/doc/bugs/copy_to_webdav_sometimes_doesn__39__t_work/comment_1_77629f620b28ac62364de44b41fa539d._comment
deleted file mode 100644
index d5ad2d88d..000000000
--- a/doc/bugs/copy_to_webdav_sometimes_doesn__39__t_work/comment_1_77629f620b28ac62364de44b41fa539d._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlqOu7P4tb4D-Xo2pYrjln2NsAObtErliM"
- nickname="Alexander"
- subject="comment 1"
- date="2013-10-27T07:00:01Z"
- content="""
-thanks!
-"""]]
diff --git a/doc/bugs/cotinually_prompting_for_gpg_passphrase.mdwn b/doc/bugs/cotinually_prompting_for_gpg_passphrase.mdwn
new file mode 100644
index 000000000..c017cf1a6
--- /dev/null
+++ b/doc/bugs/cotinually_prompting_for_gpg_passphrase.mdwn
@@ -0,0 +1,77 @@
+### Please describe the problem.
+
+While the assistant is synchronizing (to local USB backup disks or remote repositories) I am continually prompted for GPG passphrase when it is most definitely already in the gpg-agent.
+
+### What steps will reproduce the problem?
+
+Set up some remote gcrypt repositores using an existing GPG key, add some files, use the system, you are prompted for the passphrase far more often than the timeout of the passphrase in the agent (every few minutes). The number of times you are prompted also seems to increase linearly with the number of repositories - I am guessing they all exhibit the same need for the passphrase and all request at once, resulting in a string of 10+ pinentry popups.
+
+I am wondering if there is something specific in my gpg setup that git annex isn't expecting. Always encrypt to self? Signing subkeys? Either way, standard tools manage to call gpg to encrypt/decrypt using gpg-agent and not prompting for the passphrase, so git annex should be able to as well.
+
+### What version of git-annex are you using? On what operating system?
+
+Arch Linux, 5.20140831-g62e6ad8
+
+### Please provide any additional information below.
+
+I have read the various discussions about using -R or -r for the recipients, and I can see in the logs that -r is being used, but there is definitely something not working correctly. At the same time that git annex is making a gpg-agent request that results in a passphrase request, I can encrypt and decrypt whatever files I want manually with no prompting.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Decrypting manifest
+gcrypt: Decrypting manifest
+gpg: anonymous recipient; trying secret key 7426266D ...
+gpg: anonymous recipient; trying secret key 7426266D ...
+gpg: okay, we are the anonymous recipient.
+gpg: Signature made Thu 11 Sep 2014 06:21:58 BST using RSA key ID AC305414
+gpg: Good signature from "user <XXXXXX>" [ultimate]
+gpg: aka "[jpeg image of size 2004]" [ultimate]
+gpg: okay, we are the anonymous recipient.
+gpg: Signature made Thu 11 Sep 2014 06:21:58 BST using RSA key ID AC305414
+gpg: Good signature from "user <XXXXXX>" [ultimate]
+gpg: aka "[jpeg image of size 2004]" [ultimate]
+gcrypt: WARNING:
+gcrypt: WARNING: Remote ID has changed!
+gcrypt: WARNING: from :id:QydYJR8dPq7y7kMUQDG1
+gcrypt: WARNING: to :id:gU3sc34/rhmta4xfSm3O
+gcrypt: WARNING:
+gcrypt: Encrypting to: -r 49AFD42BB9E8CD9D
+gcrypt: Requesting manifest signature
+gcrypt: Encrypting to: -r 49AFD42BB9E8CD9D
+gcrypt: Requesting manifest signature
+gcrypt: Decrypting manifest
+gpg: anonymous recipient; trying secret key 7426266D ...
+gpg: okay, we are the anonymous recipient.
+gpg: Signature made Thu 11 Sep 2014 06:22:58 BST using RSA key ID AC305414
+gpg: Good signature from "user <XXXXXXX>" [ultimate]
+gpg: aka "[jpeg image of size 2004]" [ultimate]
+gcrypt: Encrypting to: -r 49AFD42BB9E8CD9D
+gcrypt: Requesting manifest signature
+gpg: cancelled by user
+gpg: skipped "49AFD42BB9E8CD9D": Operation cancelled
+gpg: [stdin]: sign+encrypt failed: Operation cancelled
+error: failed to push some refs to 'gcrypt::/autofs/ext/wdpassport0/annexes/user/docs'
+[2014-09-11 06:36:18 BST] read: git ["--git-dir=/home/user/docs/.git","--work-tree=/home/user/docs","-c","core.bare=false","push","wdpassport0","master"]
+...
+
+# End of transcript or log.
+"""]]
+
+The section above I clicked cancel on the pinentry dialog as can be seen. The question is, why was it asking me anyway?
+
+> gpg: anonymous recipient; trying secret key 7426266D ...
+>
+> That means that you have git-remote-gcrypt configured to use anonymous
+> recipients. This causes gpg to try a bunch of gpg keys until it finds one
+> that works, rather than immediately trying the right key.
+>
+> I modified git-remote-gcrypt in July so you can configure
+> gcrypt.publish-participants to avoid this problem.
+>
+> There may also be a local confguration problem; I don't know. In any
+> case, it's not git-annex responsible, but git-remote-gcrypt. [[done]] --[[Joey]]
diff --git a/doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been.mdwn b/doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been.mdwn
index 6f0947eef..05f3f5b7d 100644
--- a/doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been.mdwn
+++ b/doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been.mdwn
@@ -25,3 +25,5 @@ OS X lion (10.7)
I wasn't logging when this happened.
Again, just a heads-up; I'll keep my eye open for this happening again and post more info if it does.
+
+[[!tag confirmed]]
diff --git a/doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been/comment_5_64bf56f2b0ff206c3caf5cadebfd0cda._comment b/doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been/comment_5_64bf56f2b0ff206c3caf5cadebfd0cda._comment
new file mode 100644
index 000000000..49ab80ed4
--- /dev/null
+++ b/doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been/comment_5_64bf56f2b0ff206c3caf5cadebfd0cda._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmTNrhkVQ26GBLaLD5-zNuEiR8syTj4mI8"
+ nickname="Juan"
+ subject="Same happening here"
+ date="2014-07-09T14:45:32Z"
+ content="""
+Any hint about how to stop this from happening again? This time I think I was careful and tried to stop git-annex, however I got ghosts.
+Whats the correct way to unplug the drive?
+
+My scenario is the following, I have two repos on HDD synced with a USB drive. I want to sync them to the USB drive from time to time when I plug it. I want a safe way to unplug drive without getting these ghost directories.
+
+This time, I entered both directories in the HDD and made a git-annex assistant --stop, but after doing a ps aux | grep git-annex I still see many processes running so I'm not sure if I truly stopped it.
+The webapp gives me the impression of working on a per-repo basis, so I miss having some sort of general feedback about git-annex. Something like: \"at the moment you are syncing repos A and B\" or \"idle\".
+So I never have a clue about whats going on.
+I'm trying to set up this since long time, and I'm a very capable unix guy, and I still have the feeling that I can't trust git-annex.
+I really like the tool but I'm not sure how to use it properly.
+Thanks in advance.
+
+
+"""]]
diff --git a/doc/bugs/cross_platform_permissions_woes.mdwn b/doc/bugs/cross_platform_permissions_woes.mdwn
deleted file mode 100644
index d67ca4ae0..000000000
--- a/doc/bugs/cross_platform_permissions_woes.mdwn
+++ /dev/null
@@ -1,36 +0,0 @@
-a little introduction:
-i am forced to use windows on my work laptop and workstation, also my wife needs windows.
-my "servers" would be linux, i am actually using fedora and i upgraded from fc17 since i was not able to get a recent version of git annex to compile there.
-
-what happens, is that once i try to copy from the windows machine where the file is to the linux through ssh+rsync, i receive this error - as long as the user owning the linux repository isn't root:
-
- c:\locale>git annex copy --to linux myfile
- copy myfile (checking linux...) (to linux...)
- rsync: failed to open "/linux/annex/tmp/SHA256E-s10--937a89b559820f8658892"
- myfile
- 10 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
- rsync error: syntax or usage error (code 1) at /home/lapo/package/rsync-3.0.9-1/src/rsyn
- total size is 10 speedup is 0.09
- failed
- git-annex: copy: 1 failed
-
-the file in tmp has no permissions at all:
-
- me@linux annex]$ ls -lart tmp/SHA256E-s10--937a89b559820f86588921ef3eb12c13074d078b62ef205bb597bf2e895408c3
- ----------. 1 me me 10 Oct 13 22:50 tmp/SHA256Es10--937a89b559820f86588921ef3eb12c13074d078b62ef205bb597bf2e895408c3
-
-(just consider the following if the above makes any sense:) in another case (i cannot reproduce it now, possibly due to having upgraded git annex from some 2012 release), it happened that a failed download via copy/move from linux to windows (failed for permissions) would not be recorded as failed (on windows side), causing files to possibly be killed at the first subsequent drop command.
-
-my question is: are these 0-permissions on tmp files a bug or just due to some ignorance i did put in setting up the git/annex repo ? is a git/annex repo to be run solely as root/sudoer ? or shall i take any other step in configuring it ?
-
-technicalities:
-
-"client": windows version:
-
- git-annex version: 4.20131002-gf25991c
-
-"server": linux version:
-
- git-annex version: 3.20130207
-
-> [[done]]; fixed in newer git-annex versions. --[[Joey]]
diff --git a/doc/bugs/cross_platform_permissions_woes/comment_1_7f01104de38a6a319a8f36aa1dc8b4b3._comment b/doc/bugs/cross_platform_permissions_woes/comment_1_7f01104de38a6a319a8f36aa1dc8b4b3._comment
deleted file mode 100644
index a3116cdcf..000000000
--- a/doc/bugs/cross_platform_permissions_woes/comment_1_7f01104de38a6a319a8f36aa1dc8b4b3._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="64.134.31.139"
- subject="comment 1"
- date="2013-10-15T18:29:10Z"
- content="""
-Based on the '/linux/annex/' path, your \"linux\" git remote is set up using some sort of network mount of your Linux box to Windows.
-
-If that's the case, then rsync is running on Windows and probably doesn't know anything about permissions, to probably does something horrible when it's told to write a file to the linux filesystem.
-
-If I'm right about that, I can easily fix it, by making git-annex on Windows not use rsync for such file to file copies. But I first need you to verify if I'm right about how your \"linux\" git remote is configured.
-
-(Also, you should be able to work around the problem by changing the git remote to use a ssh:// url to the linux system.)
-"""]]
diff --git a/doc/bugs/cross_platform_permissions_woes/comment_2_0a34e11b466fad287325425e76487fa1._comment b/doc/bugs/cross_platform_permissions_woes/comment_2_0a34e11b466fad287325425e76487fa1._comment
deleted file mode 100644
index 8ee7c18a5..000000000
--- a/doc/bugs/cross_platform_permissions_woes/comment_2_0a34e11b466fad287325425e76487fa1._comment
+++ /dev/null
@@ -1,73 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmCzVCPjgg_Un_114P8iiSwExms0G2csCA"
- nickname="Michele"
- subject="details about my problem"
- date="2013-10-15T23:30:26Z"
- content="""
-Thank for your answer, but unfortunately the remote is already an ssh (although i agree it should happen most certainly also via samba/cifs mount).
-it happens as long as the remote is NOT defined as root login.
-I suppose it could as well be something with my setup (although i've tried different windows/linux hosts) and I have no idea how to debug it.
-
-this is a transcript of recreating the problem (i've just edited user/hostname):
-
- Microsoft Windows [Version 6.1.7601]
- C:\>git init wintest
- Initialized empty Git repository in C:/wintest/.git/
- C:\>cd wintest
- C:\wintest>git annex init wintest
- init wintest
- Detected a crippled filesystem.
- Enabling direct mode.
- Detected a filesystem without fifo support.
- Disabling ssh connection caching.
- ok
- (Recording state in git...)
- C:\wintest>echo \"thisisatest\">wintest
- C:\wintest>git annex add wintest
- add wintest (checksum...) ok
- (Recording state in git...)
- C:\wintest>git remote add remote ssh://me@linuxbox/home/me/testlinux
- C:\wintest>ssh me@linuxbox
- [me@home ~]$ git init --bare testlinux
- Initialized empty Git repository in /home/me/testlinux/
- [me@home ~]$ cd testlinux/
- [me@home testlinux]$ git annex init linux
- init linux ok
- (Recording state in git...)
- [me@home testlinux]$ exit
- C:\wintest>git annex sync
- commit
- ok
- pull remote
- warning: no common commits
- remote: Counting objects: 5, done.
- remote: Compressing objects: 100% (3/3), done.
- remote: Total 5 (delta 1), reused 0 (delta 0)
- Unpacking objects: 100% (5/5), done.
- From ssh://linux/home/me/testlinux
- * [new branch] git-annex -> remote/git-annex
- ok
- (merging remote/git-annex into git-annex...)
- (Recording state in git...)
- push remote
- Counting objects: 18, done.
- Delta compression using up to 2 threads.
- Compressing objects: 100% (12/12), done.
- Writing objects: 100% (16/16), 1.45 KiB, done.
- Total 16 (delta 2), reused 0 (delta 0)
- To ssh://me@linux/home/michele/testlinux
- * [new branch] git-annex -> synced/git-annex
- * [new branch] master -> synced/master
- ok
- C:\wintest>git annex copy --to remote wintest
- copy wintest (checking remote...) (to remote...)
- wintest
- 15 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-
- rsync error: syntax or usage error (code 1) at /home/lapo/package/rsync-3.0.9-1/src/rsync-3.0.9/main.c(1052) [sender=
- total size is 15 speedup is 0.13
- failed
- git-annex: copy: 1 failed
-
- C:\wintest>
-"""]]
diff --git a/doc/bugs/cross_platform_permissions_woes/comment_3_278f91b4bc4c32717ab1c39c2abf9305._comment b/doc/bugs/cross_platform_permissions_woes/comment_3_278f91b4bc4c32717ab1c39c2abf9305._comment
deleted file mode 100644
index 1cfed0a90..000000000
--- a/doc/bugs/cross_platform_permissions_woes/comment_3_278f91b4bc4c32717ab1c39c2abf9305._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="64.134.31.139"
- subject="comment 3"
- date="2013-10-16T15:47:38Z"
- content="""
-I think you will have better luck if you upgrade your server's git-annex version. I checked and some fixes for exactly this problem went in around May. Also, testing with the current version, I followed your procedure exactly and did not see the problem.
-"""]]
diff --git a/doc/bugs/cross_platform_permissions_woes/comment_4_eb6a271cb63c71341469c9ff89dc0eb9._comment b/doc/bugs/cross_platform_permissions_woes/comment_4_eb6a271cb63c71341469c9ff89dc0eb9._comment
deleted file mode 100644
index 08ebe1e6d..000000000
--- a/doc/bugs/cross_platform_permissions_woes/comment_4_eb6a271cb63c71341469c9ff89dc0eb9._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmCzVCPjgg_Un_114P8iiSwExms0G2csCA"
- nickname="Michele"
- subject="solved"
- date="2013-10-18T21:00:38Z"
- content="""
-installing very recent version on linux solved the problem !!! indeed a bug, but an old one! (quite difficult to get an updated version with cabal on fc19 and so forth, i would add a couple suggestion to share in the fedora install page)
-thank you
-"""]]
diff --git a/doc/bugs/cyclic_drop.mdwn b/doc/bugs/cyclic_drop.mdwn
deleted file mode 100644
index 296d61aac..000000000
--- a/doc/bugs/cyclic_drop.mdwn
+++ /dev/null
@@ -1,104 +0,0 @@
-drop's verification that a remote still has content can fail
-if the remote is also dropping the content at the same time. Each
-repository checks that the other still has the content, and then both
-drop it. Could also happen with larger cycles of repositories.
-
-> Confirmed fixed now. All cases tested. [[done]]
-
----
-
-Fixing this requires locking. (Well, there are other ways, like moving the
-content to a holding area when checking if it's safe to drop, but they
-seem complicated, and would be hard to implement for move --from.)
-
-Add per-content lock files. An exclusive lock is held on content when
-it's in the process of being dropped, or moved. The lock is taken
-nonblocking; if it cannot be obtained, something else is acting on the
-content and git-annex should refuse to do anything.
-
-Then when checking inannex, try to take a shared lock. Note that to avoid
-deadlock, this must be a nonblocking lock. (Actually, with fcntl locking,
-can just check if there is a lock, without needing to take one.)
-If it fails, the status of the content is unknown, so inannex should fail.
-Note that this failure needs to be distinguishable from "not in annex".
-
-> Thinking about these lock files, this would be a lot more files,
-> and would possibly break some assumptions that everything in
-> `.git/annex/objects` is a key's content. (Or would need lots more
-> directories to put the lock files elsewhere.) There would be more
-> overhead to manage these and have them on disk.
->
-> What if it just locked the actual content file? The obvious limitation
-> is only content that was already inannex could be locked, but that
-> happens to be exactly what's needed here; if content is not present,
-> it's not going to get dropped or moved.
->
-> Of course, if some consumer of a file locked it, then it could prevent it
-> from being dropped or moved. This could be considered a bug, or a feature. :)
->
-> However, this would mean that such a hypothetical consumer could also
-> make inannex checks fail.
->
-> The other downside is that, for fcntl exclusive locking, the file has to
-> be opened for write. Normally the modes of content files are locked down
-> to prevent modifcation. Dealt with, but oh so nasty. Almost makes flock
-> locking seem worth using.
-
----
-
-drop --from could also cycle. Locking should fix.
-
-> Confirmed fixed now.
-
----
-
-move --to can also be included in the cycle, since it can drop data.
-
-Consider move to a remote that already has the content and
-is at the same time doing a drop (or a move). The remote
-verifies the content is present on the movee, and removes its copy.
-The movee removes its copy.
-
-So move --to needs to take the content lock on start. Then the inannex
-will fail.
-
-This is why it's important for inannex to fail in a way that is
-distinguishable from "not in annex". Otherwise, move --to
-would see the cycle as the remote not having content, and try to
-redundantly send it, drop it locally, and still race.
-
-> Confirmed fixed now.
-
---
-
-move --from is similar. Consider a case where both the local and the remote
-are doing a move --from. Both have the content, and confirm the other does,
-via inannex checks. Then both run git-annex-shell dropkey, removing both
-copies.
-
-So move --from needs to take the content lock on start, so the inannex will
-fail. NB: If the content is not locally present, don't take the lock.
-
-> Confirmed fixed now.
-
----
-
-Another cycle might be running move --to and move --from on the same file,
-locally. The exclusivity of the content lock solves this, as only one can
-run at a time.
-
-Would it work with a shared lock? The --to would run git-annex-shell
-inannex. The --from would also be running, and would run git-annex-shell
-dropkey. So inannex and dropkey would end up running on the remote
-at the same time. Dropkey takes the content lock, and inannex checks it,
-but what if inannex runs first? Then it returns true, and then the content
-is removed, so both the --to and --from see success and the --to proceeds
-to remove the local content that the --from already caused to be removed
-from the remote. So, no, the nasty exclusive lock is needed.
-
-> Confirmed fixed now.
-
----
-
-Another cycle might involve move --from and drop, both run on the same
-file, locally. Again, the exclusive lock solves this.
diff --git a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos.mdwn b/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos.mdwn
deleted file mode 100644
index 8007ae11f..000000000
--- a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos.mdwn
+++ /dev/null
@@ -1,199 +0,0 @@
-### Please describe the problem.
-Data loss due to incorrect merge of repos in direct mode. (I tested the same scenario in indirect mode and it worked fine there)
-
-Given 2 repos A and B, in direct mode:
-
-1. in A: mkdir f, with a file f in it
-2. in B: touch f
-3. in B: sync
-
-Result: Only an f.variant-f###remains, which is file f of B, and the merge conflict has already been automatically resolved. I.e. Directory f containing file f, is lost.
-
-Expected result: remaining contents: f.variant-AAA which is file f of B, f.variant-BBB which is directory f of A, containing a file f. Merge conflict marked resolved.
-
-### What steps will reproduce the problem?
-Execute the script given below in additional information.
-
-### What version of git-annex are you using?
-git-annex version: 4.20130911-g6625d0e
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP Feeds Quvi
-
-### On what operating system?
-Linux basementcat 3.10.10-1-ARCH #1 SMP PREEMPT Fri Aug 30 11:30:06 CEST 2013 x86_64 GNU/Linux
-
-### Please provide any additional information below.
-
-[[!format sh """
-[~]$ mkdir test
-[~/test]$ mkdir a
-[~/test/a]$ git init
-Initialized empty Git repository in /home/limyreth/test/a/.git/
-[~/test/a]$ git annex init test
-init test ok
-(Recording state in git...)
-[~/test/a]$ touch firstfile
-[~/test/a]$ git annex add firstfile
-add firstfile (checksum...) ok
-(Recording state in git...)
-[~/test/a]$ git annex sync
-commit
-ok
-git-annex: no branch is checked out
-[~]$ git clone test/a
-Cloning into 'a'...
-done.
-[~]$ mv a test/b
-[~/test/a]$ git annex direct
-commit
-# On branch master
-nothing to commit, working directory clean
-ok
-direct firstfile ok
-direct ok
-[~/test/a]$ ls -l
-total 0
--rw-r--r-- 1 limyreth users 0 Oct 12 15:09 firstfile
-[~/test/a]$ mkdir f
-[~/test/a]$ touch f/f
-[~/test/a]$ git annex add f/f
-add f/f (checksum...) ok
-(Recording state in git...)
-[~/test/a]$ git annex sync
-commit
-ok
-[~/test/b]$ git remote -v
-origin /home/limyreth/test/a (fetch)
-origin /home/limyreth/test/a (push)
-[~/test/b]$ ls
-firstfile
-[~/test/b]$ git annex direct
-commit
-(Recording state in git...)
-# On branch master
-nothing to commit, working directory clean
-ok
-direct ok
-[~/test/b]$ touch f
-[~/test/b]$ git annex add f
-add f (checksum...) ok
-(Recording state in git...)
-[~/test/b]$ git annex sync
-(merging origin/git-annex into git-annex...)
-(Recording state in git...)
-commit
-ok
-pull origin
-remote: Counting objects: 14, done.
-remote: Compressing objects: 100% (7/7), done.
-remote: Total 9 (delta 1), reused 0 (delta 0)
-Unpacking objects: 100% (9/9), done.
-From /home/limyreth/test/a
- 2a8fa45..ad6802d master -> origin/master
- 1f39016..19e3e12 git-annex -> origin/git-annex
- * [new branch] synced/master -> origin/synced/master
-
-Adding f/f
-CONFLICT (file/directory): There is a directory with name f in refs/remotes/origin/master. Adding f as f~HEAD
-Automatic merge failed; fix conflicts and then commit the result.
-f: needs merge
-(Recording state in git...)
-ok
-[master 37a8019] git-annex automatic merge conflict fix
-
-Already up-to-date.
-ok
-(merging origin/git-annex into git-annex...)
-(Recording state in git...)
-push origin
-Counting objects: 36, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (20/20), done.
-Writing objects: 100% (25/25), 2.16 KiB | 0 bytes/s, done.
-Total 25 (delta 5), reused 0 (delta 0)
-To /home/limyreth/test/a
- ad6802d..37a8019 master -> synced/master
- * [new branch] git-annex -> synced/git-annex
-ok
-[~/test/b]$ ls -l
-total 0
--rw-r--r-- 1 limyreth users 0 Oct 12 15:11 firstfile
--rw-r--r-- 1 limyreth users 0 Oct 12 15:11 f.variant-f874
-[~/test/b]$ git log --summary
-commit 37a80199abe3cf82100bbdb5dd2217ed6bcb4b62
-Merge: 5a8942a ad6802d
-Author: timdiels <timdiels.m@gmail.com>
-Date: Sat Oct 12 15:11:47 2013 +0200
-
- git-annex automatic merge conflict fix
-
-commit 5a8942a9a1735cb313c1f6624cbd3f48b252d9d9
-Author: timdiels <timdiels.m@gmail.com>
-Date: Sat Oct 12 15:11:47 2013 +0200
-
- git-annex automatic sync
-
- create mode 120000 f
-
-commit ad6802dc231d389b86154e2df900a70b18e17b29
-Author: timdiels <timdiels.m@gmail.com>
-Date: Sat Oct 12 15:11:40 2013 +0200
-
- git-annex automatic sync
-
- create mode 120000 f/f
-
-commit 2a8fa45bea996ab5ae219a017d4b642153e6d9c9
-Author: timdiels <timdiels.m@gmail.com>
-Date: Sat Oct 12 15:09:40 2013 +0200
-
- git-annex automatic sync
-
- create mode 120000 firstfile
-[~/test/a]$ git annex sync
-(merging synced/git-annex into git-annex...)
-commit
-ok
-merge synced/master
-Updating ad6802d..37a8019
-Fast-forward
- f.variant-f874 | 1 +
- f/f | 1 -
- 2 files changed, 1 insertion(+), 1 deletion(-)
- create mode 120000 f.variant-f874
- delete mode 120000 f/f
-ok
-[~/test/a]$ git log --summary
-commit 37a80199abe3cf82100bbdb5dd2217ed6bcb4b62
-Merge: 5a8942a ad6802d
-Author: timdiels <timdiels.m@gmail.com>
-Date: Sat Oct 12 15:11:47 2013 +0200
-
- git-annex automatic merge conflict fix
-
-commit 5a8942a9a1735cb313c1f6624cbd3f48b252d9d9
-Author: timdiels <timdiels.m@gmail.com>
-Date: Sat Oct 12 15:11:47 2013 +0200
-
- git-annex automatic sync
-
- create mode 120000 f
-
-commit ad6802dc231d389b86154e2df900a70b18e17b29
-Author: timdiels <timdiels.m@gmail.com>
-Date: Sat Oct 12 15:11:40 2013 +0200
-
- git-annex automatic sync
-
- create mode 120000 f/f
-
-commit 2a8fa45bea996ab5ae219a017d4b642153e6d9c9
-Author: timdiels <timdiels.m@gmail.com>
-Date: Sat Oct 12 15:09:40 2013 +0200
-
- git-annex automatic sync
-
- create mode 120000 firstfile
-
-"""]]
-
-> Bug fixed; test case added; [[done]] --[[Joey]]
diff --git a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_1_294c33af08649256908a97894f93c05d._comment b/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_1_294c33af08649256908a97894f93c05d._comment
deleted file mode 100644
index 1b22d2ce5..000000000
--- a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_1_294c33af08649256908a97894f93c05d._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlWskoNgUB7r70OXglR-4iKI4bOuPJb-xg"
- nickname="Tim"
- subject="comment 1"
- date="2013-10-13T12:35:47Z"
- content="""
-I've just tested a similar scenario with 2 conflicting files, a file-file conflict, and then it works fine. That makes sense, as there's a test written for that.
-
-So the specific bits are: directory-file conflict of repos in direct mode.
-"""]]
diff --git a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_2_02a2b69adbb04b557146e713b70b34d2._comment b/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_2_02a2b69adbb04b557146e713b70b34d2._comment
deleted file mode 100644
index 7df35b33d..000000000
--- a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_2_02a2b69adbb04b557146e713b70b34d2._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="64.134.31.139"
- subject="comment 2"
- date="2013-10-16T18:04:27Z"
- content="""
-I can confirm this bug, thanks for a good reproduction recipe.
-
-However, there is no actual data loss. If you switch to repo to indirect mode, you can use `git checkout` to check out the past versions from before the botched merge. When you do, you'll find that the files that the merge seemingly deleted in fact still have their contents present. It is preserved in `.git/annex/objects` by the automatic merge conflict resolution code, which does that whenever it deletes a file, whether for good reasons or for buggy reasons.
-
-So if you feel you lost data due to this, you can almost certainly get it back and I'm happy to help with that.
-
-
-"""]]
diff --git a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_3_d296ef26fc90f4e3166bba6d2de0a1ee._comment b/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_3_d296ef26fc90f4e3166bba6d2de0a1ee._comment
deleted file mode 100644
index 4adee73bd..000000000
--- a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_3_d296ef26fc90f4e3166bba6d2de0a1ee._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlWskoNgUB7r70OXglR-4iKI4bOuPJb-xg"
- nickname="Tim"
- subject="comment 3"
- date="2013-10-17T16:04:03Z"
- content="""
-I had a recent backup of the data so no real harm was done.
-"""]]
diff --git a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_4_33ba2c890c962a71ae9fadc417359f8e._comment b/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_4_33ba2c890c962a71ae9fadc417359f8e._comment
deleted file mode 100644
index bff93623c..000000000
--- a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_4_33ba2c890c962a71ae9fadc417359f8e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlWskoNgUB7r70OXglR-4iKI4bOuPJb-xg"
- nickname="Tim"
- subject="comment 4"
- date="2013-10-31T19:44:34Z"
- content="""
-Has this issue been fixed? I checked out the repository today and compiled with cabal, but I don't see a f.variant-A and a f.variant-B pop up after sync.
-"""]]
diff --git a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_5_39eb0bb96fd271bd0de4a3a40814ae1b._comment b/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_5_39eb0bb96fd271bd0de4a3a40814ae1b._comment
deleted file mode 100644
index 0e5d67f74..000000000
--- a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_5_39eb0bb96fd271bd0de4a3a40814ae1b._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.47"
- subject="comment 5"
- date="2013-11-01T15:48:21Z"
- content="""
-AFAIK this bug is fixed, which is why I wrote above, \"Bug fixed; test case added; done\"
-
-If you have reason to think otherwise, better follow up.
-
-"""]]
diff --git a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_6_d80c4b631bdf58901a06f29a2c5682e2._comment b/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_6_d80c4b631bdf58901a06f29a2c5682e2._comment
deleted file mode 100644
index 29457da8a..000000000
--- a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_6_d80c4b631bdf58901a06f29a2c5682e2._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlWskoNgUB7r70OXglR-4iKI4bOuPJb-xg"
- nickname="Tim"
- subject="comment 6"
- date="2013-11-14T14:58:10Z"
- content="""
-Ah indeed, tried it again and it's indeed fixed. Tried some other things as well, and conflict resolution ended up doing just fine.
-"""]]
diff --git a/doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_.mdwn b/doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_.mdwn
deleted file mode 100644
index 65560f245..000000000
--- a/doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_.mdwn
+++ /dev/null
@@ -1,19 +0,0 @@
-**What steps will reproduce the problem?**
-
-> git annex add .
-
-**What is the expected output? What do you see instead?**
-
-This was with direct mode turned on. Distinct files should remain distinct. Instead, many of the original files were overwritten and became copies of one of the other files.
-
-**What version of git-annex are you using? On what operating system?**
-
-Running rooted android on a Samsung Galaxy Nexus. Working in a system directory which is not "crippled".
-The git-annex package was dated 2013-03-23 and downloaded from
-> https://downloads.kitenet.net/git-annex/android/current/
-
-**Please provide any additional information below.**
-
-I wish I could provide files that became duplicates, but I didn't make copies before adding them... Did this twice, first adding JPG and MP4 files, then adding WAVs. After that, I saw that of 100 JPGs and 8 MP4s, about half the JPGs and all of the MP4s had become copies of a single JPG. Of 11 WAV files, two had been replaced with copies of one of the others.
-
-> [[done]]; turned out to be Android bug unrelated to git-annex. --[[Joey]]
diff --git a/doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_1_eb6db7f6a156a065e2724c2de5fc4366._comment b/doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_1_eb6db7f6a156a065e2724c2de5fc4366._comment
deleted file mode 100644
index a0af0bc8f..000000000
--- a/doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_1_eb6db7f6a156a065e2724c2de5fc4366._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-04-01T18:28:21Z"
- content="""
-Are you sure these files did not already have the same content before you ran git-annex on them?
-
-Can you show me the output of `git show` when run on some of these files?
-"""]]
diff --git a/doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_2_59a96cade9e4881767562a139fc7fb4b._comment b/doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_2_59a96cade9e4881767562a139fc7fb4b._comment
deleted file mode 100644
index f62c2e69e..000000000
--- a/doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_2_59a96cade9e4881767562a139fc7fb4b._comment
+++ /dev/null
@@ -1,40 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawn26WQjIP5fnMgQF_L_k3Q3UrR5v8mjRTY"
- nickname="Ellis"
- subject="comment 2"
- date="2013-04-02T20:18:05Z"
- content="""
-*Are you sure these files did not already have the same content before you ran git-annex on them?*
-
-Yes, each one was a distinct photo, video, or audio recording. The only operation performed between creation and ``git annex add`` was moving them into the import directory from the command line via e.g. ``mv /sdcard/DCIM/Camera/* .``.
-
-If you'd like, I'll try to find a set of files to reproduce the problem with.
-
-*Can you show me the output of git show when run on some of these files?*
-
-Sure. Here are two WAV files. The first one was correctly stored, and the second one is now a duplicate of the first.
-
- commit bb282af90745c8a50e74c1f724e6cc708bfa9591
- Author: Ellis Whitehead <ellis@****>
- Date: Mon Apr 1 17:05:19 2013 +0200
-
- git-annex automatic sync
-
- diff --git a/import/2013-03-02_13-57-08_jeromin.wav b/import/2013-03-02_13-57-08_jeromin.wav
- new file mode 120000
- index 0000000..55a8cf1
- --- /dev/null
- +++ b/import/2013-03-02_13-57-08_jeromin.wav
- @@ -0,0 +1 @@
- +../.git/annex/objects/VG/vf/SHA256E-s49222316--acd9b8f94981543c601461c4cb602dae4e7d9d9a72654a3915c6e9d0221791b7.wav/SHA256E-s49222316--acd9b8f94981543c601461c4cb602dae4e7d9d9a72654a3915c6e9d0221791b7.wav
- \ No newline at end of file
- diff --git a/import/2013-03-02_14-06-11_karina.wav b/import/2013-03-02_14-06-11_karina.wav
- new file mode 120000
- index 0000000..55a8cf1
- --- /dev/null
- +++ b/import/2013-03-02_14-06-11_karina.wav
- @@ -0,0 +1 @@
- +../.git/annex/objects/VG/vf/SHA256E-s49222316--acd9b8f94981543c601461c4cb602dae4e7d9d9a72654a3915c6e9d0221791b7.wav/SHA256E-s49222316--acd9b8f94981543c601461c4cb602dae4e7d9d9a72654a3915c6e9d0221791b7.wav
- \ No newline at end of file
-
-"""]]
diff --git a/doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_3_bf9d2562d66f0f6a9478ac178606cf4e._comment b/doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_3_bf9d2562d66f0f6a9478ac178606cf4e._comment
deleted file mode 100644
index 2cc257839..000000000
--- a/doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_3_bf9d2562d66f0f6a9478ac178606cf4e._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-04-02T21:34:50Z"
- content="""
-The truely odd thing about this is that when git-annex adds a direct mode file, it does *not* touch the file at all. The file is left right where it is.
-
-This is even the case if two files have the same SHA checksum. I have just verified that even in this case; neither file is touched in any way by `git annex add`.
-
-(Obviously, I never saw anything like this when working with git-annex on Android. I hope this is not some evil April Fools prank.)
-"""]]
diff --git a/doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_4_ad0dbdc448fff2e126ffec9aac6d7463._comment b/doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_4_ad0dbdc448fff2e126ffec9aac6d7463._comment
deleted file mode 100644
index 47c53ac84..000000000
--- a/doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_4_ad0dbdc448fff2e126ffec9aac6d7463._comment
+++ /dev/null
@@ -1,23 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawn26WQjIP5fnMgQF_L_k3Q3UrR5v8mjRTY"
- nickname="Ellis"
- subject="comment 4"
- date="2013-04-03T09:02:44Z"
- content="""
-*The truely odd thing about this is that when git-annex adds a direct mode file, it does not touch the file at all. The file is left right where it is.*
-
-After further investigation, I've managed to reproduce the error, and it is **not** caused by git-annex, but by a limitation in my device's sdcard overlay (I can now see that I was using it in an unintended fashion). Sorry to have taken your time with this. However, the following information may be useful for others who might also want to use git-annex from the android console to manager their media.
-
-Some android devices don't have sdcards (they are the ones which want you to use MTP (Media Transfer Protocol) to transfer data via a USB cable). These devices emulate an sdcard for use by apps. On my Samsung Galaxy Nexus, the emulated sdcard is at ``/sdcard``. If your device is rooted, you will find the equivalent \"real\" filesystem at ``/data/media/0``. There is apparently a limitation in the sdcard emulator which causes ``mv`` commands involving multiple files to semi-randomly fail when moving files from ``/sdcard`` to ``/data/media/0``. What happens is that the command will randomly tend to replace some of the files in the move with a hardlink to another one of the files. I have encountered no problems when moving files from ``/sdcard`` any other destination.
-
-So **don't do this** (or variants of it):
-
- $ mv /sdcard/DCIM/Camera/* /data/media/0/annex-on-a-good-fs/import
-
-My reason for placing the repository under ``/data/media/0/`` is so that git-annex can use a non-crippled filesystem, but at the same time other apps can access the data under ``/sdcard``. To get around the above problem, either of these two commands can be used:
-
- $ mv /sdcard/DCIM/Camera/* /sdcard/annex-on-a-good-fs/import
- $ mv /data/media/0/DCIM/Camera/* /data/media/0/annex-on-a-good-fs/import
-
-@joey: the instructions say to link this bug to ``done`` when it's closed, but I don't see how to do that? Or should it be deleted, since it wasn't a git-annex bug at all?
-"""]]
diff --git a/doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_5_e828585e56b10710598143483ce362b6._comment b/doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_5_e828585e56b10710598143483ce362b6._comment
deleted file mode 100644
index 847226699..000000000
--- a/doc/bugs/data_loss_with___34__git_annex_add__34___on_android_in_direct_mode_/comment_5_e828585e56b10710598143483ce362b6._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 5"
- date="2013-04-04T16:03:50Z"
- content="""
-I'll close the bug.
-
-FWIW, I developed git-annex on an Android device with such an emulated filesystem for /sdcard. It's a FUSE filesystem with a terrible implementation. I found multiple syscalls that just failed, and was careful to avoid using them.
-
-Personally, the benefits of non-crippled filesystem do not seem worth the bother of doing what you're doing..
-"""]]
diff --git a/doc/bugs/detected_bad_bare_repository_with___60__SCREECH__62___files.mdwn b/doc/bugs/detected_bad_bare_repository_with___60__SCREECH__62___files.mdwn
deleted file mode 100644
index 0bd01056a..000000000
--- a/doc/bugs/detected_bad_bare_repository_with___60__SCREECH__62___files.mdwn
+++ /dev/null
@@ -1,73 +0,0 @@
-### Please describe the problem.
-
-Fun one: I have a backup repository created with the assistant. For some reason it's a bare repository, not sure why. It makes my hard drive scream with pain.
-
-### What steps will reproduce the problem?
-
-When I tried `git annex copy --to backup`, I saw this:
-
-[[!format sh """
-[2014-01-29 23:46:03 EST] read: git ["--git-dir=/srv/mp3/.git","--work-tree=/srv/mp3","show-ref","git-annex"]
-[2014-01-29 23:46:04 EST] read: git ["--git-dir=/srv/mp3/.git","--work-tree=/srv/mp3","show-ref","--hash","refs/heads/g
-[2014-01-29 23:46:11 EST] read: git ["--git-dir=/srv/mp3/.git","--work-tree=/srv/mp3","log","refs/heads/git-annex..ac42
-[2014-01-29 23:46:12 EST] read: git ["--git-dir=/srv/mp3/.git","--work-tree=/srv/mp3","log","refs/heads/git-annex..9ab4
-[2014-01-29 23:46:22 EST] read: git ["--git-dir=/srv/mp3/.git","--work-tree=/srv/mp3","log","refs/heads/git-annex..5795
-[2014-01-29 23:46:22 EST] read: git ["--git-dir=/srv/mp3/.git","--work-tree=/srv/mp3","log","refs/heads/git-annex..8006
-[2014-01-29 23:46:22 EST] read: git ["--git-dir=/srv/mp3/.git","--work-tree=/srv/mp3","log","refs/heads/git-annex..320e
-[2014-01-29 23:46:22 EST] chat: git ["--git-dir=/srv/mp3/.git","--work-tree=/srv/mp3","cat-file","--batch"]
-[2014-01-29 23:46:22 EST] read: git ["config","--null","--list"]
-[2014-01-29 23:46:22 EST] call: git ["--git-dir=/media/c7a29cf9-ad3e-42a8-8dd5-0f5618c218ee/mp3/.git","--work-tree=/med
-[2014-01-29 23:46:22 EST] read: git ["config","--null","--list"]
-[2014-01-29 23:46:22 EST] Detected bad bare repository with
-"""]]
-
-Then this stopped and my hard drive started scratching. It makes this horrible screeching sound because it's quite old, hence the bug title.
-
-It seems that this debug message tries to list all the objects in the filesystem, which in this case is quite large:
-
-[[!format haskell """
-fixBadBare :: Annex ()
-fixBadBare = whenM checkBadBare $ do
- ks <- getKeysPresent
- liftIO $ debugM "Init" $ unwords
- [ "Detected bad bare repository with"
- , show (length ks)
- , "objects; fixing"
- ]
-"""]]
-
-Maybe this could be skipped? It takes forever (7 minutes) to compute that length (21353 objects)...
-
-### What version of git-annex are you using? On what operating system?
-
-5.20140102-gd93f946, provided by joeyh as part of [[bugs/assistant_eats_all_CPU/]].
-
-### Please provide any additional information below.
-
-Here's the complete transcript of that copy:
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-[2014-01-29 23:46:03 EST] read: git ["--git-dir=/srv/mp3/.git","--work-tree=/srv/mp3","show-ref","git-annex"]
-[2014-01-29 23:46:04 EST] read: git ["--git-dir=/srv/mp3/.git","--work-tree=/srv/mp3","show-ref","--hash","refs/heads/g
-[2014-01-29 23:46:11 EST] read: git ["--git-dir=/srv/mp3/.git","--work-tree=/srv/mp3","log","refs/heads/git-annex..ac42
-[2014-01-29 23:46:12 EST] read: git ["--git-dir=/srv/mp3/.git","--work-tree=/srv/mp3","log","refs/heads/git-annex..9ab4
-[2014-01-29 23:46:22 EST] read: git ["--git-dir=/srv/mp3/.git","--work-tree=/srv/mp3","log","refs/heads/git-annex..5795
-[2014-01-29 23:46:22 EST] read: git ["--git-dir=/srv/mp3/.git","--work-tree=/srv/mp3","log","refs/heads/git-annex..8006
-[2014-01-29 23:46:22 EST] read: git ["--git-dir=/srv/mp3/.git","--work-tree=/srv/mp3","log","refs/heads/git-annex..320e
-[2014-01-29 23:46:22 EST] chat: git ["--git-dir=/srv/mp3/.git","--work-tree=/srv/mp3","cat-file","--batch"]
-[2014-01-29 23:46:22 EST] read: git ["config","--null","--list"]
-[2014-01-29 23:46:22 EST] call: git ["--git-dir=/media/c7a29cf9-ad3e-42a8-8dd5-0f5618c218ee/mp3/.git","--work-tree=/med
-[2014-01-29 23:46:22 EST] read: git ["config","--null","--list"]
-[2014-01-29 23:46:22 EST] Detected bad bare repository with 21353 objects; fixing
-[2014-01-29 23:53:06 EST] call: git ["--git-dir=/media/c7a29cf9-ad3e-42a8-8dd5-0f5618c218ee/mp3","config","core.bare","true"]
-[2014-01-29 23:53:06 EST] read: git ["config","--null","--list"]
-[2014-01-29 23:53:06 EST] chat: git ["--git-dir=/media/c7a29cf9-ad3e-42a8-8dd5-0f5618c218ee/mp3","cat-file","--batch"]
-[2014-01-29 23:57:22 EST] call: git ["--git-dir=/srv/mp3/.git","--work-tree=/srv/mp3","config","remote..annex-uuid","c32322fa-8873-4635-8d4c-1dc27977eb6f"]
-[2014-01-29 23:57:22 EST] read: git ["config","--null","--list"]
-# End of transcript or log.
-"""]]
-
-> [[done]] per my comment --[[Joey]]
diff --git a/doc/bugs/detected_bad_bare_repository_with___60__SCREECH__62___files/comment_1_523b80ad81ad49bddfb8855d12d5561d._comment b/doc/bugs/detected_bad_bare_repository_with___60__SCREECH__62___files/comment_1_523b80ad81ad49bddfb8855d12d5561d._comment
deleted file mode 100644
index a1d853275..000000000
--- a/doc/bugs/detected_bad_bare_repository_with___60__SCREECH__62___files/comment_1_523b80ad81ad49bddfb8855d12d5561d._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.199"
- subject="comment 1"
- date="2014-01-30T18:33:22Z"
- content="""
-To fix this problem, git-annex has to find all the keys in the repository. This is necessarily an expensive operation when the repository is that large. Printing out the count of them does not take any appreciable additional time.
-
-This is a one-time fix up. Once you let git-annex run and fix your repository, you should not be bothered by it again.
-"""]]
diff --git a/doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted.mdwn b/doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted.mdwn
new file mode 100644
index 000000000..c19db9727
--- /dev/null
+++ b/doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted.mdwn
@@ -0,0 +1,45 @@
+### Please describe the problem.
+
+When `git annex direct` is interrupted (either through a power outage or deliberate `control-c`) it may leave the repository in an inconsistent state.
+
+A typical situation is `git-annex` believing that the repo is in `indirect` mode while the files are not symlinks anymore.
+
+I believe I have described this problem here before, but the bug report was deleted as part of the may 29th purge (222f78e9eadd3d2cc40ec94ab22241823a7d50d9, [[bugs/git_annex_indirect_can_fail_catastrophically]]).
+
+### What steps will reproduce the problem?
+
+`git annex direct` on a large repository, `control-c` before it finishes.
+
+Observe how a lot of files are now considered to be in the famous [[typechange status|forum/git-status_typechange_in_direct_mode/]] in git.
+
+### What version of git-annex are you using? On what operating system?
+
+5.20140717 on Debian Jessie, ext4 filesystem.
+
+### Please provide any additional information below.
+
+I wish i could resume the `git annex direct` command, but this will do a `git commit -a` and therefore commit all those files to git directly. It still seems to me that `git annex` should never run `git commit -a` for exactly that kind of situations.
+
+I think that's it for now. -- [[anarcat]]
+
+Update: i was able to get rid of the `typechange` situation by running `git annex lock` on the repository, but then all files are found to be missing by `git annex fsck`:
+
+[[!format txt """
+fsck films/God Hates Cartoons/VIDEO_TS/VTS_15_0.BUP (fixing location log)
+ ** Based on the location log, films/God Hates Cartoons/VIDEO_TS/VTS_15_0.BUP
+ ** was expected to be present, but its content is missing.
+
+ Only 1 of 2 trustworthy copies exist of films/God Hates Cartoons/VIDEO_TS/VTS_15_0.BUP
+ Back it up with git-annex copy.
+"""]]
+
+Oddly enough, the repo still uses hundreds of gigs, because all the files ended up in `.git/annex/misctmp`. Not sure I remember what happened there.
+
+Similar issues and discussions:
+
+* [[bugs/direct_mode_merge_interrupt/]]
+* [[forum/Cleaning_up_after_aborted_sync_in_direct_mode/]]
+* [[bugs/failure_to_return_to_indirect_mode_on_usb/]]
+* [[forum/git-status_typechange_in_direct_mode/]]
+
+[[!meta title="git annex lock --force deletes only copy of content after interrupted switch to direct mode"]
diff --git a/doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted/comment_1_770e6ed8556fa6b259f517d5c398271f._comment b/doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted/comment_1_770e6ed8556fa6b259f517d5c398271f._comment
new file mode 100644
index 000000000..4d7246eda
--- /dev/null
+++ b/doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted/comment_1_770e6ed8556fa6b259f517d5c398271f._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 1"
+ date="2014-08-12T17:26:46Z"
+ content="""
+The way it's supposed to work is that `git annex direct` does not set the repository into direct mode until it's entirely done moving files around. So, if it is interrupted at any point, you are left with an indirect mode repository, with some unlocked files. Which can be put back to indirect by `git annex add`, or the conversion restarted with `git annex direct`.
+
+That seems to work in my tests; I can interrupt `git annex direct` and resume with `git annex direct` with a good result; `git annex add` reverts back to indirect mode. Even `git commit -a` reverts back to indirect mode, thanks to the pre-commit hook. I have tested that all these recovery methods work as intended.
+
+That leaves `git annex lock --force` (it has to be forced) after an interrupted switch to direct mode. I have reproduced that in this situation, that will delete your file's contents (I cannot reproduce them ending up in misctmp, but [[!commit d8be828734704c78f91029263b59eed75174e665]] may have had something to do with that). In a sense, `git annex lock --force` is doing what you told it to -- git-annex lock throws unlocked file contents away, under the assumption that they might contain modified changes. Since normally, `git annex unlock` makes a copy of the file, there is not normally data loss, unless the unlocked files got modified. But that's why it requires the --force; it can result in data loss.
+
+I a having a hard time thinking of a modification to `git annex lock` that would make sense. The best I can come up with is, if the file's content is not present in the annex, it could switch to what `git annex add` does, and re-add the file content to the annex if it's unchanged. While, I guess, throwing away the content if it is changed. That seems a bit complicated.
+
+(BTW, if you do still have the files in misctmp, you can `git annex import` their content back into the repository.)
+"""]]
diff --git a/doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted/comment_2_2f3fb399f976d96aa66310f11365207c._comment b/doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted/comment_2_2f3fb399f976d96aa66310f11365207c._comment
new file mode 100644
index 000000000..b55e3c2a3
--- /dev/null
+++ b/doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted/comment_2_2f3fb399f976d96aa66310f11365207c._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 2"
+ date="2014-08-15T17:39:14Z"
+ content="""
+I still cannot see a way that more than one file's content could end up in misctemp, since `git annex direct` moves just one file there at a time, so max of one should be there if interrupted. However, there was really no reason to be moving files through misctemp at all, so `git annex direct` now moves them into place completely atomically.
+
+Bug report retitled appropriatly for the `git annex lock --force` suprise.
+"""]]
diff --git a/doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted/comment_3_2acff7b667e8618251075031cbef6b9a._comment b/doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted/comment_3_2acff7b667e8618251075031cbef6b9a._comment
new file mode 100644
index 000000000..5de6726aa
--- /dev/null
+++ b/doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted/comment_3_2acff7b667e8618251075031cbef6b9a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="131.252.200.111"
+ subject="comment 3"
+ date="2014-08-31T22:29:44Z"
+ content="""
+Occurs to me that your repo may not have a pre-commit hook; if not then `git commit -a` would not behave as I described..
+"""]]
diff --git a/doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted/comment_4_c3a4a1ce24fcbe1087041850f490a58a._comment b/doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted/comment_4_c3a4a1ce24fcbe1087041850f490a58a._comment
new file mode 100644
index 000000000..82b77f78b
--- /dev/null
+++ b/doc/bugs/direct_command_leaves_repository_inconsistent_if_interrupted/comment_4_c3a4a1ce24fcbe1087041850f490a58a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://andrew.aylett.co.uk/"
+ nickname="andrew"
+ subject="comment 4"
+ date="2014-09-07T18:41:28Z"
+ content="""
+I, too, have seen this issue -- took me a while to recover from it. I do (now, at least) have a pre-commit hook that calls git annex pre-commit; I didn't set that up myself.
+"""]]
diff --git a/doc/bugs/direct_mode_fails__44___left_in_an_inconsistent_state.mdwn b/doc/bugs/direct_mode_fails__44___left_in_an_inconsistent_state.mdwn
new file mode 100644
index 000000000..664511b6c
--- /dev/null
+++ b/doc/bugs/direct_mode_fails__44___left_in_an_inconsistent_state.mdwn
@@ -0,0 +1,60 @@
+### Please describe the problem.
+
+Running `git annex direct` in a repository may results with the following error message:
+
+ git-annex: /home/mildred/Music/.git/annex/objects/2K/49/SHA256-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/SHA256-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.map898.tmp: rename: permission denied (Permission denied)
+failed
+ git-annex: direct: 1 failed
+
+
+The major problem is that git-annex doesn't roll back the changes it did for the files it could successfully put in direct mode. Running git status show many files with typechange. The solution was to run `git add` on those files (although the hashing backend changed, so a commit must be created)
+
+### What steps will reproduce the problem?
+
+Don't know yet why the rename failed, but the direct mode should be rolled back if there is a problem. Restarting `git-annex direct` didn't result in an error.
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex 5.20140405-g8729abc
+arch-linux Linux moiraine 3.15.3-1-ARCH #1 SMP PREEMPT Tue Jul 1 07:32:45 CEST 2014 x86_64 GNU/Linux
+
+### Please provide any additional information below.
+
+[[!format sh """
+
+$ git annex direct
+commit
+(Recording state in git...)
+On branch master
+nothing to commit, working directory clean
+ok
+direct .gitrefs/heads/annex/direct/master ok
+direct .gitrefs/heads/git-annex ok
+direct .gitrefs/heads/master ok
+direct .gitrefs/heads/synced/master ok
+direct .gitrefs/remotes/ashley/git-annex ok
+direct .gitrefs/remotes/ashley/master ok
+direct .gitrefs/remotes/ashley/synced/git-annex ok
+direct .gitrefs/remotes/ashley/synced/master ok
+direct .gitrefs/remotes/kylae/git-annex ok
+direct .gitrefs/remotes/kylae/master ok
+direct .gitrefs/remotes/kylae/synced/git-annex ok
+direct ... ok
+direct ... ok
+direct ... ok
+ /home/mildred/Music/.git/annex/objects/2K/49/SHA256-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/SHA256-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.map897.tmp: rename: permission denied (Permission denied)
+
+ leaving this file as-is; correct this problem and run git annex fsck on it
+direct ... ok
+direct ... ok
+direct ... ok
+direct ... ok
+direct ... ok
+
+git-annex: /home/mildred/Music/.git/annex/objects/2K/49/SHA256-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/SHA256-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.map898.tmp: rename: permission denied (Permission denied)
+failed
+git-annex: direct: 1 failed
+
+"""]]
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/direct_mode_fails__44___left_in_an_inconsistent_state/comment_1_be1302a006a66e501fe543f3af191fea._comment b/doc/bugs/direct_mode_fails__44___left_in_an_inconsistent_state/comment_1_be1302a006a66e501fe543f3af191fea._comment
new file mode 100644
index 000000000..c0455b992
--- /dev/null
+++ b/doc/bugs/direct_mode_fails__44___left_in_an_inconsistent_state/comment_1_be1302a006a66e501fe543f3af191fea._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-10T18:11:22Z"
+ content="""
+The most likely problem would be if your repository contained annexed objects owned by different user than the one running `git annex direct`.
+
+However, I cannot reproduce this problem:
+
+<pre>
+direct foo
+ /home/joey/tmp/r/.git/annex/objects/pV/7j/SHA256E-s30--2754b7f82f6994005b97256273756f14d4abc17165c8819c06c07340d03351fa: setFileMode: permission denied (Operation not permitted)
+
+ leaving this file as-is; correct this problem and run git annex fsck on it
+direct ok
+</pre>
+
+Since version 4.20130921, any exception when moving a file to direct mode should be caught like that.
+
+I will need more information to reproduce your bug. Or are you sure you wrote down the right version of git-annex?
+"""]]
diff --git a/doc/bugs/direct_mode_merge_interrupt.mdwn b/doc/bugs/direct_mode_merge_interrupt.mdwn
new file mode 100644
index 000000000..7cbb44208
--- /dev/null
+++ b/doc/bugs/direct_mode_merge_interrupt.mdwn
@@ -0,0 +1,54 @@
+Seems to me there is a bug in how merges are done in direct mode. This is
+done in two steps:
+
+1. Merge the remote branch into the local branch, with work tree directed
+ to a temp dir.
+2. Use the temp dir and the newly merged branch to update the work tree.
+
+If this is interrupted between 1 and 2, by eg the user ctrl-Cing or power
+being lost, the result is a repository that thinks the current branch has
+been merged, but does not have an updated work tree. The next sync in that
+repository will see the files as deleted (or as being an old version), and
+commit the current work tree state to the branch.
+
+Result is files appear to be lost, although `git revert` in an indirect
+mode repo can get them back.
+
+To fix this, direct mode merge would need to avoid updating the current
+branch when merging the remote branch into it (how?). It should first
+update the whole work tree, and only after it's updated should it update
+the index and the current branch to reflect the merge.
+
+This way, if the merge is interrupted, the work tree may have uncommitted
+changed -- but it's fine if they get accidentially committed, since when
+the merge is re-done, those changes will by the same ones made by the
+merge. (I assume this is how `git merge` normally works.) --[[Joey]]
+
+> Implemented that. And then realized that even updating the index
+> as part of a merge results in the work tree being out of sync with the
+> index. Which will cause the next sync to again delete any files that
+> are in the index but not the work tree. Urgh.
+>
+> Seems that a direct mode
+> merge also needs to use a different index file to stage its changes?
+> (Ugh)
+> > done --[[Joey]]
+
+> > > I had to revert the fix on FAT/Windows due to
+> > > a git bug: <http://marc.info/?l=git&m=140262402204212&w=2>
+> > > Once that bug's fixed, I can revisit this. --[[Joey]]
+
+[[!meta title="direct mode merge interrupt (fixed for all except FAT, Windows)"]]
+
+## other options
+
+> Or could perhaps use `git-merge-tree`
+> and avoid staging the merge in the index until the work-tree is updated.
+>
+> Alternatively, could use another strategy.. Add a lock file which is held while
+> the merge is in progress and contains the pre-merge sha.
+> If the lock file is present but not held, state is inconsistent.
+> `git-annex sync` and the SanityChecker should
+> then run mergeDirectCleanup to recover, before any commits can be made
+> from the inconsistent state. This approach seems to get complicated
+> quickly.. --[[Joey]]
diff --git a/doc/bugs/direct_mode_renames.mdwn b/doc/bugs/direct_mode_renames.mdwn
deleted file mode 100644
index 60f449300..000000000
--- a/doc/bugs/direct_mode_renames.mdwn
+++ /dev/null
@@ -1,15 +0,0 @@
-When in direct mode, renaming a file with `git mv` does not update the
-direct mode mapping to use the new filename. --[[Joey]]
-
-Consistency checks now prevent anything bad happening when the mapping file
-contains old filenames. Still, missing the new filename will prevent that
-file working properly in direct mode.
-
-Perhaps the pre-commit hook needs to update the mapping for files that were
-deleted or added.
-
-This also affects moves of files when the assistant is being used.
-In this case, the assistant updates the mapping to add the new name,
-but does not delete the old name from the mapping.
-
-> [[done]]; the pre-commit hook now updates the mappings. --[[Joey]]
diff --git a/doc/bugs/direct_mode_renames/comment_1_f18c335e0d6f4259d2470935ef391cb8._comment b/doc/bugs/direct_mode_renames/comment_1_f18c335e0d6f4259d2470935ef391cb8._comment
deleted file mode 100644
index aaf43a24e..000000000
--- a/doc/bugs/direct_mode_renames/comment_1_f18c335e0d6f4259d2470935ef391cb8._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkZktNHFhxC1kYA9KKdKpYJO4clq9WDsjE"
- nickname="Jason"
- subject="comment 1"
- date="2013-02-06T06:35:21Z"
- content="""
-I'm not sure if this matters, but in my case I wasn't even using `git mv`, I was just using `mv`.
-"""]]
diff --git a/doc/bugs/direct_mode_should_refuse_to_merge_with_illegal_filenames.mdwn b/doc/bugs/direct_mode_should_refuse_to_merge_with_illegal_filenames.mdwn
new file mode 100644
index 000000000..102404be4
--- /dev/null
+++ b/doc/bugs/direct_mode_should_refuse_to_merge_with_illegal_filenames.mdwn
@@ -0,0 +1,38 @@
+Some filesystems have stupid rules about characters not allowed in filenames. For example, FAT doesn't allow '?' '*' ':' etc.
+
+The direct mode merge code lets `git merge` update a temp directory with the new files from the merge, before doing its work tree update and committing. This can fail:
+
+<pre>
+error: unable to create file non-rus/Dance/Dream_Dance_Vol15/CD1/09-??.mp3 (Invalid argument)
+</pre>
+
+This leaves the work tree without the file, and the index knows about the file. Result is that the next time a commit is done, this file appears to have been deleted, and that is committed and propigates out. Which can be surprising.
+
+----
+
+It would probably be better if, when the working tree cannot be updated, it left the repository in some state that would not make the next commit remove anything.
+
+Ie, direct mode should replicate this behavior:
+
+<pre>
+root@darkstar:/home/joey/mnt>git init
+root@darkstar:/home/joey/mnt>git merge FETCH_HEAD
+error: unable to create file foo? (Invalid argument)
+fatal: read-tree failed
+root@darkstar:/home/joey/mnt>git status
+On branch master
+
+Initial commit
+
+nothing to commit (create/copy files and use "git add" to track)
+</pre>
+
+Problem is, the call to `git merge` can also fail due to a conflict. In that case, git-annex wants to continue with automatic conflict resolution.
+So, how to detect when `git merge` has skipped creating illegal filenames?
+
+----
+
+Alternatively, git-annex could learn/probe the full set of characters not allowed in filenames, and examine merges before performing them, and refuse to do anything if the merge added an illegal filename.a
+
+[[!tag confirmed]]
+
diff --git a/doc/bugs/direct_mode_sync_should_avoid_git_commit.mdwn b/doc/bugs/direct_mode_sync_should_avoid_git_commit.mdwn
deleted file mode 100644
index 498c4d000..000000000
--- a/doc/bugs/direct_mode_sync_should_avoid_git_commit.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-Per forum post linking to this bug, git commit can be very slow when run in a filesystem without symlink support, and seems to be reading the content of files just in order to show typechanged messages in the status.
-
-So, git annex sync should stop using git commit when in direct mode, and instead manually make its own commit. Git.Branch.commit and Git.Branch.update should be able to easily be used for this.
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/direct_mode_sync_should_avoid_git_commit/comment_1_d286800081f019651cd40355b7d5518a._comment b/doc/bugs/direct_mode_sync_should_avoid_git_commit/comment_1_d286800081f019651cd40355b7d5518a._comment
deleted file mode 100644
index 98897593c..000000000
--- a/doc/bugs/direct_mode_sync_should_avoid_git_commit/comment_1_d286800081f019651cd40355b7d5518a._comment
+++ /dev/null
@@ -1,27 +0,0 @@
-[[!comment format=mdwn
- username="TroisSinges"
- ip="82.227.207.5"
- subject="Almost done"
- date="2013-12-15T10:13:50Z"
- content="""
-Hi!
-
-Thank you for the fix, it's much better now. However, in some case, it doesn't work. For example, when I try to add inject a file in the direct repository (rm symlinkedFile ; mv /tmp/myFile symlinkedFile ; git annex add symlinkedFile), it tries to map each file in memory (which takes a very long time through the network).
-
- # git annex add bigFile --debug
- [2013-12-15 11:00:00 CET] read: git [\"--git-dir=/Volumes/Video/Annex/.git\",\"--work-tree=/Volumes/Video/Annex\",\"-c\",\"core.bare=false\",\"ls-files\",\"--others\",\"--exclude-standard\",\"-z\",\"--\",\"bigFile\"]
- [2013-12-15 11:00:00 CET] read: git [\"--git-dir=/Volumes/Video/Annex/.git\",\"--work-tree=/Volumes/Video/Annex\",\"-c\",\"core.bare=false\",\"ls-files\",\"--modified\",\"-z\",\"--\",\"bigFile\"]
-
-If I use lsof, each another file in repository is mapped in memory:
-
- # lsof -p 30130
- git 30130 troissinges 3r REG 46,11 4519526640 3093837953332665982 /Volumes/Video/Annex/AnotherBigFile
-
-My version of software:
-
- git annex version
- git-annex version: 5.20131213
- build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
- key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
- remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
-"""]]
diff --git a/doc/bugs/direct_mode_sync_should_avoid_git_commit/comment_2_4e23201d1d1d549f72eec75987601a73._comment b/doc/bugs/direct_mode_sync_should_avoid_git_commit/comment_2_4e23201d1d1d549f72eec75987601a73._comment
deleted file mode 100644
index 5b1f7ab75..000000000
--- a/doc/bugs/direct_mode_sync_should_avoid_git_commit/comment_2_4e23201d1d1d549f72eec75987601a73._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.87"
- subject="comment 2"
- date="2013-12-16T17:14:06Z"
- content="""
-It seems that `ls-files --modified` runs the same code path that commit did to see if the file is changed, which here is a cheap
-stat, and on your system mmaps and downloads it all.
-
-I cannot see a good way to avoid using `ls-files --modified`.
-
-I think it would be better to fix git.
-"""]]
diff --git a/doc/bugs/directory_remote_+_shared_encryption_+_chunk_size___61___lost_files__63__.mdwn b/doc/bugs/directory_remote_+_shared_encryption_+_chunk_size___61___lost_files__63__.mdwn
deleted file mode 100644
index 8ee66da19..000000000
--- a/doc/bugs/directory_remote_+_shared_encryption_+_chunk_size___61___lost_files__63__.mdwn
+++ /dev/null
@@ -1,51 +0,0 @@
-### Please describe the problem.
-
-When I create a directory special remote, with encryption enabled (shared) and a chunk size restriction (any), I can copy files *to* the remote, but git annex can't find/access them afterwards.
-
-If I do the same, just without specifying chunk size, it works fine. Restricting chunk size on FAT filesystems to something less that 4GB is necessary (otherwise storing bigger files will just fail).
-
-### What steps will reproduce the problem?
-
-Assume `~/annex` is a normal git annex repository and it contains a file `data.file`.
-
- # cd ~/annex
- # mkdir /tmp/remote
- # git annex initremote dirremote type=directory directory=/tmp/remote encryption=shared chunksize="300 megabytes"
- initremote dirremote (encryption setup) (shared cipher) ok
- (Recording state in git...)
- # git annex copy --to dirremote data.file
- copy data.file (gpg) (to dirremote...)
- ok
- (Recording state in git...)
- # git annex fsck --from dirremote
- fsck data.file (gpg) (fixing location log)
- ** Based on the location log, data.file
- ** was expected to be present, but its content is missing.
- failed
- (Recording state in git...)
- git-annex: fsck: 1 failed
-
-The file is actually in the remote, e.g. `ls -R /tmp/remote` (shortened output):
-
- /tmp/remote/be5/af7/GPGHMACSHA1--cb23b50579bf69be9cdc0243b6fda1f66218eb43:
- GPGHMACSHA1--cb23b50579bf69be9cdc0243b6fda1f66218eb43
- GPGHMACSHA1--cb23b50579bf69be9cdc0243b6fda1f66218eb43.chunkcount
-
-### What version of git-annex are you using? On what operating system?
-
-- mac OS X (10.8.5)
-- git-annex version: 4.20131002-gf25991c
-- `PATH` variable has `/Applications/git-annex.app/Contents/MacOS/bundle` at the front, so if git-annex comes with a binary, it is used
-
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> [[done]]; see my comment. --[[Joey]]
diff --git a/doc/bugs/directory_remote_+_shared_encryption_+_chunk_size___61___lost_files__63__/comment_1_69dfbf566c75396cdaaf5ad70f1a94a8._comment b/doc/bugs/directory_remote_+_shared_encryption_+_chunk_size___61___lost_files__63__/comment_1_69dfbf566c75396cdaaf5ad70f1a94a8._comment
deleted file mode 100644
index e068501ad..000000000
--- a/doc/bugs/directory_remote_+_shared_encryption_+_chunk_size___61___lost_files__63__/comment_1_69dfbf566c75396cdaaf5ad70f1a94a8._comment
+++ /dev/null
@@ -1,19 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.47"
- subject="comment 1"
- date="2013-10-26T19:06:38Z"
- content="""
-There was a bug that caused it not to write the chunkcount file.
-I have fixed it, and put in a workaround so fsck, etc, will
-see that the file is stored on the remote despite there being no
-chunkcount file present.
-
-I was initially puzzled by your output showing the chunkcount file being present.
-However, the bug also caused it to write a chunkcount file when chunking was disabled (ie, the logic for when to write the file was inverted).
-So, I think that the ls you show is after you set up the remote without specifying chunk size, and copied a file to it.
-
-Please test with the next autobuild of git-annex (should be one within an hour my my posting this comment) and verify it can now see the files you stored on the remote with chunking.
-
-
-"""]]
diff --git a/doc/bugs/directory_remote_+_shared_encryption_+_chunk_size___61___lost_files__63__/comment_2_8d09cc0e06548c4ebde7956edd1b5d85._comment b/doc/bugs/directory_remote_+_shared_encryption_+_chunk_size___61___lost_files__63__/comment_2_8d09cc0e06548c4ebde7956edd1b5d85._comment
deleted file mode 100644
index 81d6b35a3..000000000
--- a/doc/bugs/directory_remote_+_shared_encryption_+_chunk_size___61___lost_files__63__/comment_2_8d09cc0e06548c4ebde7956edd1b5d85._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://jspk.clavid.com/"
- nickname="flabbergast"
- subject="comment 2"
- date="2013-10-28T09:36:19Z"
- content="""
-Thanks! I've checked now and the problem is gone.
-"""]]
diff --git a/doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_1_bcac9fd7b3f4a2ac28bee59bae674fa0._comment b/doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_1_bcac9fd7b3f4a2ac28bee59bae674fa0._comment
deleted file mode 100644
index be8b8b0a7..000000000
--- a/doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_1_bcac9fd7b3f4a2ac28bee59bae674fa0._comment
+++ /dev/null
@@ -1,79 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnBJ6Dv1glxzzi4qIzGFNa6F-mfHIvv9Ck"
- nickname="Jim"
- subject="Case sensitivity"
- date="2011-11-22T18:51:03Z"
- content="""
-I agree, it's weird, but that's what I'm seeing:
-
- #!/bin/sh
-
- if [ $UID != 0 ] ; then echo \"need root\" ; exit 1 ; fi
-
- set -x
-
- # make image
- cd /tmp
- dd if=/dev/zero of=diskimage bs=1M count=40
- DEV=$(losetup --find --show diskimage)
-
- # make FAT32 fs
- mkfs.vfat -F 32 $DEV
-
- # mount it
- mkdir annex
- mount -o shortname=mixed,utf8=1 $DEV annex
-
- # show bug
- (
- cd annex
- mkdir zP
- mkdir Zp
- ls Zp
- ls
- touch zP
- touch Zp
- )
-
- # cleanup
- umount annex
- rm -r annex
- losetup -d $DEV
- rm diskimage
-
- # info
- uname -a
-
-Output:
-
- + cd /tmp
- + dd if=/dev/zero of=diskimage bs=1M count=40
- 40+0 records in
- 40+0 records out
- 41943040 bytes (42 MB) copied, 0.0847729 s, 495 MB/s
- ++ losetup --find --show diskimage
- + DEV=/dev/loop0
- + mkfs.vfat -F 32 /dev/loop0
- mkfs.vfat 3.0.9 (31 Jan 2010)
- Loop device does not match a floppy size, using default hd params
- + mkdir annex
- + mount -o shortname=mixed,utf8=1 /dev/loop0 annex
- + cd annex
- + mkdir zP
- + mkdir Zp
- mkdir: cannot create directory `Zp': File exists
- + ls Zp
- ls: cannot access Zp: No such file or directory
- + ls
- zP
- + touch zP
- + touch Zp
- touch: cannot touch `Zp': File exists
- + umount annex
- + rm -r annex
- + losetup -d /dev/loop0
- + rm diskimage
- + uname -a
- Linux pilot 3.0.3+ #1 SMP Mon Aug 29 15:21:18 EDT 2011 x86_64 GNU/Linux
-
-"""]]
diff --git a/doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_2_c9088060fb9133b66951f1a3075981e8._comment b/doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_2_c9088060fb9133b66951f1a3075981e8._comment
deleted file mode 100644
index 5040b3120..000000000
--- a/doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_2_c9088060fb9133b66951f1a3075981e8._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 2"
- date="2011-11-22T19:56:55Z"
- content="""
-All right, I see the same thing with linux 3.1.0. It seems this behavior has changed since linux 3.0.0. Mounting with shortname=lower avoids the problem.
-
-I feel a good case could be made that this new behavior is a linux bug. Your example with touch particularly shows how weird it is.
-
-<pre>
-$ touch Foo
-$ echo hi > foo
-sh: cannot create foo: File exists
-$ rm foo
-rm: cannot remove `foo': No such file or directory
-</pre>
-"""]]
diff --git a/doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_3_5bf34466187cfc9b34bd3ca8c89a07c6._comment b/doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_3_5bf34466187cfc9b34bd3ca8c89a07c6._comment
deleted file mode 100644
index 54d6ff50a..000000000
--- a/doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_3_5bf34466187cfc9b34bd3ca8c89a07c6._comment
+++ /dev/null
@@ -1,20 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnBJ6Dv1glxzzi4qIzGFNa6F-mfHIvv9Ck"
- nickname="Jim"
- subject="comment 3"
- date="2011-11-22T20:35:01Z"
- content="""
-I see the same results (\"`touch: cannot touch 'Zp': File exists`\") on these Debian systems:
-
- Linux pilot 3.0.3+ #1 SMP Mon Aug 29 15:21:18 EDT 2011 x86_64 GNU/Linux
- Linux neurosis 3.0.0-1-amd64 #1 SMP Sun Jul 24 02:24:44 UTC 2011 x86_64 GNU/Linux
- Linux bucket 2.6.39-2-amd64 #1 SMP Tue Jul 5 02:51:22 UTC 2011 x86_64 GNU/Linux
- Linux psychosis 2.6.37-trunk-amd64 #1 SMP Thu Jan 6 14:13:28 UTC 2011 x86_64 GNU/Linux
- Linux bacon 2.6.32-5-amd64 #1 SMP Thu Aug 12 13:01:50 UTC 2010 x86_64 GNU/Linux
-
-It does NOT happen on this Ubuntu system:
-
- Linux esensor 3.0.0-12-generic #20-Ubuntu SMP Fri Oct 7 14:56:25 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
-
-So really it seems like only the Ubuntu kernel is the outlier here? Maybe it has something to do with charsets or something; I think FAT is a mess in that regard and even long versus short filenames can behave differently.
-"""]]
diff --git a/doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_4_d6201f2d86d5b44051a7fd7a8c9de583._comment b/doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_4_d6201f2d86d5b44051a7fd7a8c9de583._comment
deleted file mode 100644
index 406a6b18e..000000000
--- a/doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_4_d6201f2d86d5b44051a7fd7a8c9de583._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 4"
- date="2011-11-22T20:59:55Z"
- content="""
-Your ubuntu system has 3.0.0 which as noted does not have the problem.
-"""]]
diff --git a/doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_5_61c5f0889f30a68ac3b57c4ea564ee0e._comment b/doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_5_61c5f0889f30a68ac3b57c4ea564ee0e._comment
deleted file mode 100644
index 1656ff207..000000000
--- a/doc/bugs/directory_remote_and_case_sensitivity_on_FAT/comment_5_61c5f0889f30a68ac3b57c4ea564ee0e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 5"
- date="2011-11-22T21:01:14Z"
- content="""
-I am surprised if it happens on 2.6.x though. Debian 3.0.0 seemed to not have the problem but perhaps my test was bad.
-"""]]
diff --git a/doc/bugs/dotdot_problem.mdwn b/doc/bugs/dotdot_problem.mdwn
deleted file mode 100644
index cbefd5dae..000000000
--- a/doc/bugs/dotdot_problem.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-cannot "git annex ../foo" (GitRepo.relative is buggy and
-git-ls-files also refuses w/o --full-name, which would need other changes)
-
-[[done]]
diff --git a/doc/bugs/drop_fails_to_see_copies_that_whereis_sees.mdwn b/doc/bugs/drop_fails_to_see_copies_that_whereis_sees.mdwn
deleted file mode 100644
index 59b76c92b..000000000
--- a/doc/bugs/drop_fails_to_see_copies_that_whereis_sees.mdwn
+++ /dev/null
@@ -1,69 +0,0 @@
-What steps will reproduce the problem?
-------------------------------------------------------
-
-I haven't tried doing this again, but here's what I did:
-
-I was copying files to my usb drive (hugex) with probably this command:
-
- git annex copy --to=hugex .
-
-While doing that, I did something stupid in another window, and filled my local hard drive (the one I was copying from) and git annex spit out some errors about not being able to write to log files (because my local drive was full.)
-
-I suspended (^Z) git annex, made some hard drive space, then resumed (fg).
-
-At first, git annex whereis didn't see the copies of some of the files in hugex (apparently the ones where git annex had trouble writing the local log files). After a "git remote update hugex" and I think a ``git annex merge``, whereis was able to see both copies.
-
-But git drop can't see both copies, and won't let me drop my local copy. I ran ``git annex fsck .`` on the directory with the now files I was copying above, and that didn't seem to change anything (or report errors.)
-
-Here's a terminal session where I'm showing the problem and some hopefully useful text:
-
- compy compy compy ~/video/tv/keen-eddie> git annex whereis 02-horse-heir.avi
- whereis 02-horse-heir.avi (2 copies)
- 5bfe091c-ed07-11df-842e-eb791a485889 -- here (compy)
- e15161ec-f1bf-11df-a7b5-eb1f0e6921ee -- hugex
- ok
- compy compy compy ~/video/tv/keen-eddie> git annex drop 02-horse-heir.avi
- drop 02-horse-heir.avi (unsafe)
- Could only verify the existence of 1 out of 2 necessary copies
-
- No other repository is known to contain the file.
-
- (Use --force to override this check, or adjust annex.numcopies.)
- failed
- git-annex: drop: 1 failed
- zsh: exit 1 git annex drop 02-horse-heir.avi
- compy compy compy ~/video/tv/keen-eddie> ls -lh 02-horse-heir.avi
- lrwxrwxrwx 1 jasonwoof jasonwoof 149 Nov 15 04:19 02-horse-heir.avi -> ../../../.git/annex/objects/KV/8G/SHA1-s358316330--7fcbf33b711e41def269f042842212d0bf3736a7/SHA1-s358316330--7fcbf33b711e41def269f042842212d0bf3736a7
- compy compy compy ~/video/tv/keen-eddie> ls --dereference -lh 02-horse-heir.avi
- -r--r--r-- 1 jasonwoof jasonwoof 342M Nov 15 04:19 02-horse-heir.avi
- compy compy compy ~/video/tv/keen-eddie> ls -lh ../../../.git/annex/objects/KV/8G/SHA1-s358316330--7fcbf33b711e41def269f042842212d0bf3736a7/SHA1-s358316330--7fcbf33b711e41def269f042842212d0bf3736a7
- -r--r--r-- 1 jasonwoof jasonwoof 342M Nov 15 04:19 ../../../.git/annex/objects/KV/8G/SHA1-s358316330--7fcbf33b711e41def269f042842212d0bf3736a7/SHA1-s358316330--7fcbf33b711e41def269f042842212d0bf3736a7
- compy compy compy ~/video/tv/keen-eddie> ls -lh /media/hugex/jason/home.git/annex/objects/5bd/6a1/SHA1-s358316330--7fcbf33b711e41def269f042842212d0bf3736a7/SHA1-s358316330--7fcbf33b711e41def269f042842212d0bf3736a7
- -r--r--r-- 1 jasonwoof jasonwoof 342M Jan 7 16:27 /media/hugex/jason/home.git/annex/objects/5bd/6a1/SHA1-s358316330--7fcbf33b711e41def269f042842212d0bf3736a7/SHA1-s358316330--7fcbf33b711e41def269f042842212d0bf3736a7
-
-That last command is showing that the file is indeed in hugex's annex/objects
-
-
-Oh, and another wrinkle. hugex is a bare repo. I tried to fsck hugex's video/tv directory, but it said that directory doesn't exist (I assume because there's no working copy.)
-
-
-What is the expected output? What do you see instead?
-------------------------------------------------------------------------------
-
-I'd like ``git annex drop`` to have the same kind of confidence in the copies of these files on hugex.
-
-How can I resolve this. I tried ``git annex copy --to=hugex .`` again, but that command knows that these files are already copied to hugex.
-
-What version of git-annex are you using? On what operating system?
-
-3.20130102 on debian unstable (thanks for packaging!)
-
-Please provide any additional information below.
-------------------------------------------------------------------
-
-You can also reach me at ``jason@jasonwoof.com``
-
-> [[done]]; the confusing message has been improved.
->
-> BTW, you can use `git annex move` to ensure a file is on another repo and
-> drop it locally. --[[Joey]]
diff --git a/doc/bugs/drop_fails_to_see_copies_that_whereis_sees/comment_1_f5a9d99d90daf5eba4773d361fa1807a._comment b/doc/bugs/drop_fails_to_see_copies_that_whereis_sees/comment_1_f5a9d99d90daf5eba4773d361fa1807a._comment
deleted file mode 100644
index 647c6db3a..000000000
--- a/doc/bugs/drop_fails_to_see_copies_that_whereis_sees/comment_1_f5a9d99d90daf5eba4773d361fa1807a._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.211"
- subject="comment 1"
- date="2013-01-08T18:43:33Z"
- content="""
-So, the first part of this is git-annex behaving as designed. When there's a fatal disk problem and it cannot update its local location log, only the remote's location log gets updated. After a `git annex sync` (or your manual equivilant), the location log changes get propigated from the remote, and the local repository returns to a consistent state.
-
-As to the drop problem, look at it again. You have numcopies configured to 2, and there are currently 2 copies of the file. So dropping 1 would leave the numcopies constraint unsatisfied, and so it doesn't. You can override --numcopies 1 or --force the drop, but I don't see a bug here.
-
-(Perhaps the \"No other repository is known to contain the file.\" message is confusing in this context? It doesn't mean that no other repo has the file at all, but that there are no other repositories, that it was not able to check, that might have the file. If you had another removable drive with the file, and the drive was detached, this message would instead say \"Try making some of these repositories available: otherdrive\")
-
-(Re fscking in a bare repo, in a bare repository, you cannot fsck specific files/directories; fsck just checks every single key that git-annex knows about.)
-"""]]
diff --git a/doc/bugs/drop_fails_to_see_copies_that_whereis_sees/comment_2_040aa454cd8acd2857ef36884465576f._comment b/doc/bugs/drop_fails_to_see_copies_that_whereis_sees/comment_2_040aa454cd8acd2857ef36884465576f._comment
deleted file mode 100644
index 58f69646b..000000000
--- a/doc/bugs/drop_fails_to_see_copies_that_whereis_sees/comment_2_040aa454cd8acd2857ef36884465576f._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://jasonwoof.com/"
- nickname="JasonWoof"
- subject="Thank you."
- date="2013-01-08T23:02:33Z"
- content="""
-First off, awesome that git annex auto-fixes itself after I make hard drive space and merge.
-
-The problem was that I didn't realize that my .gitattributes that were supposed to set numcopies to 1 didn't work. (Because I didn't realize that they don't apply recursively.) I fixed my .gitattributes, and then was able to drop those files.
-
-And you are right that the text \"No other repository is known to contain the file\" threw me off. Perhaps when numcopies > 1 you could change that message to \"Not enough other repositories are known to contain the file\".
-
-Thank you.
-
--- Jason
-"""]]
diff --git a/doc/bugs/drop_fails_to_see_copies_that_whereis_sees/comment_3_f5d8faab325ee26800ecad5aba49b54b._comment b/doc/bugs/drop_fails_to_see_copies_that_whereis_sees/comment_3_f5d8faab325ee26800ecad5aba49b54b._comment
deleted file mode 100644
index ca6287dd6..000000000
--- a/doc/bugs/drop_fails_to_see_copies_that_whereis_sees/comment_3_f5d8faab325ee26800ecad5aba49b54b._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://jasonwoof.com/"
- nickname="JasonWoof"
- subject="language suggestions"
- date="2013-01-09T04:31:40Z"
- content="""
-Maybe it could read \"Could not verify that enough copies of the file exist to safely drop it\". Or \"Could not verify that enough other repositories contain this file to safely drop it.\"
-
-It might be cool (if this isn't supported already) if there was a command to drop a file that would automatically copy it to another repo first if needed to satisfy numcopies.
-"""]]
diff --git a/doc/bugs/dropping_and_re-adding_from_web_remotes_doesn__39__t_work.mdwn b/doc/bugs/dropping_and_re-adding_from_web_remotes_doesn__39__t_work.mdwn
deleted file mode 100644
index 30327ba1f..000000000
--- a/doc/bugs/dropping_and_re-adding_from_web_remotes_doesn__39__t_work.mdwn
+++ /dev/null
@@ -1,139 +0,0 @@
-In experimenting with the web remote, I found that dropping a URL gave an error, but still succeeded, while re-adding the same URL fails to work correctly.
-
-#What steps will reproduce the problem?
-
-<pre>
-/tmp $ dd if=/dev/zero of=/tmp/file.bin count=1024
-1024+0 records in
-1024+0 records out
-524288 bytes (524 kB) copied, 0.0135652 s, 38.6 MB/s
-/tmp $ mkdir /tmp/repo
-/tmp $ cd /tmp/repo
-/tmp/repo $ git init
-Initialized empty Git repository in /tmp/repo/.git/
-/tmp/repo $ git annex init "test"
-init test ok
-(Recording state in git...)
-/tmp/repo $ git annex addurl file:///tmp/file.bin --file annexed.bin
-######################################################################## 100.0%
-(checksum...) ok
-(Recording state in git...)
-/tmp/repo $ git annex drop annexed.bin
-drop annexed.bin (checking file:///tmp/file.bin...) ok
-(Recording state in git...)
-/tmp/repo $ mv /tmp/file.bin /tmp/file2.bin
-/tmp/repo $ git annex get annexed.bin
-get annexed.bin (from web...)
-curl: (37) Couldn't open file /tmp/file.bin
-
- Unable to access these remotes: web
-
- Try making some of these repositories available:
- 00000000-0000-0000-0000-000000000001 -- web
-failed
-git-annex: get: 1 failed
-/tmp/repo $ git annex drop --from web annexed.bin --force
-drop web annexed.bin
- removal from web not supported
-failed
-(Recording state in git...)
-git-annex: drop: 1 failed
-/tmp/repo $ git annex get annexed.bin
-get annexed.bin (not available)
- No other repository is known to contain the file.
-failed
-git-annex: get: 1 failed
-/tmp/repo $ mv /tmp/file2.bin /tmp/file.bin
-/tmp/repo $ git annex addurl file:///tmp/file.bin --file annexed.bin
-addurl annexed.bin ok
-/tmp/repo $ git annex whereis annexed.bin
-whereis annexed.bin (0 copies) failed
-git-annex: whereis: 1 failed
-/tmp/repo $ git annex addurl file:///tmp/file.bin --file annexed2.bin
-######################################################################## 100.0%
-(checksum...) ok
-(Recording state in git...)
-/tmp/repo $ git annex whereis annexed.bin
-whereis annexed.bin (1 copy)
- e2418e81-ec04-4091-aabe-ed75d65f93fa -- here (test)
-ok
-/tmp/repo $ git annex whereis annexed2.bin
-whereis annexed2.bin (1 copy)
- e2418e81-ec04-4091-aabe-ed75d65f93fa -- here (test)
-ok
-/tmp/repo $ git annex drop annexed.bin
-drop annexed.bin (unsafe)
- Could only verify the existence of 0 out of 1 necessary copies
-
- No other repository is known to contain the file.
-
- (Use --force to override this check, or adjust annex.numcopies.)
-failed
-git-annex: drop: 1 failed
-/tmp/repo $ git annex drop annexed2.bin
-drop annexed2.bin (unsafe)
- Could only verify the existence of 0 out of 1 necessary copies
-
- No other repository is known to contain the file.
-
- (Use --force to override this check, or adjust annex.numcopies.)
-failed
-git-annex: drop: 1 failed
-/tmp/repo $ mv /tmp/file.bin /tmp/file2.bin
-/tmp/repo $ git annex addurl file:///tmp/file2.bin --file annexed.bin
-addurl annexed.bin ok
-(Recording state in git...)
-/tmp/repo $ git annex whereis annexed2.bin
-whereis annexed2.bin (2 copies)
- 00000000-0000-0000-0000-000000000001 -- web
- e2418e81-ec04-4091-aabe-ed75d65f93fa -- here (test)
-
- web: file:///tmp/file.bin
- web: file:///tmp/file2.bin
-ok
-/tmp/repo $ mv /tmp/file2.bin /tmp/file.bin
-/tmp/repo $ git annex drop annexed.bin
-drop annexed.bin (checking file:///tmp/file.bin...) ok
-(Recording state in git...)
-/tmp/repo $ git annex get annexed.bin
-get annexed.bin (from web...)
-######################################################################## 100.0%
-ok
-(Recording state in git...)
-/tmp/repo $ git annex drop annexed.bin
-drop annexed.bin (checking file:///tmp/file.bin...) ok
-(Recording state in git...)
-/tmp/repo $ mv /tmp/file.bin /tmp/file2.bin
-/tmp/repo $ git annex get annexed.bin
-get annexed.bin (from web...)
-curl: (37) Couldn't open file /tmp/file.bin
-######################################################################## 100.0%
-ok
-(Recording state in git...)
-</pre>
-
-#What is the expected output? What do you see inst
-
-
-When dropping one file and I see "git-annex: drop: 1 failed" I would expect the file to still be in the remote as far as git-annex is concerned.
-
-When re-adding the URL, I expect the file to be re-added to the web remote. (note that it re-appears after adding the same file via a different URL)
-
-
-#What version of git-annex are you using? On what operating system?
-
-
-3.20121112 on Gentoo Linux
-
-
-#Please provide any additional information below.
-
-This seems to be a corner case, and would probably have minimal impact on most people.
-
-> Yeah, dropping from the web is pretty weird.
->
-> I guess it makes sense to do if a website stops having a file and you don't
-> want git-annex to try to download from it anymore. So, I've made dropping
-> from the web remove all urls associated with the file, rather than failing.
->
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/dropunused_doesn__39__t_handle_double_spaces_in_filename.mdwn b/doc/bugs/dropunused_doesn__39__t_handle_double_spaces_in_filename.mdwn
deleted file mode 100644
index a6b44cd2a..000000000
--- a/doc/bugs/dropunused_doesn__39__t_handle_double_spaces_in_filename.mdwn
+++ /dev/null
@@ -1,87 +0,0 @@
-Unused files with double spaces in their name are not removed by `dropunused`:
-
-Script:
-
- #!/bin/bash
-
- BASE=/tmp/unused-bug
-
- # setup
- set -x
- chmod -R +w $BASE
- rm -rf $BASE
- mkdir -p $BASE
- cd $BASE
-
- # create annex
- git init .
- git annex init
-
- # make a file with two spaces
- echo hello > 'foo bar'
-
- # add it
- git annex add --backend WORM 'foo bar'
- git commit -m 'add'
-
- # remove it
- git rm 'foo bar'
- git commit -m 'remove'
-
- # unused
- git annex unused
- git annex dropunused 1
- git annex unused
-
-Output:
-
- + chmod -R +w /tmp/unused-bug
- + rm -rf /tmp/unused-bug
- + mkdir -p /tmp/unused-bug
- + cd /tmp/unused-bug
- + git init .
- Initialized empty Git repository in /tmp/unused-bug/.git/
- + git annex init
- init ok
- + echo hello
- + git annex add --backend WORM 'foo bar'
- add foo bar ok
- (Recording state in git...)
- + git commit -m add
- [master (root-commit) 926f7f5] add
- 1 files changed, 1 insertions(+), 0 deletions(-)
- create mode 120000 foo bar
- + git rm 'foo bar'
- rm 'foo bar'
- + git commit -m remove
- [master d025e3f] remove
- 1 files changed, 0 insertions(+), 1 deletions(-)
- delete mode 120000 foo bar
- + git annex unused
- unused . (checking for unused data...) (checking master...)
- Some annexed data is no longer used by any files:
- NUMBER KEY
- 1 WORM-s6-m1322200438--foo bar
- (To see where data was previously used, try: git log --stat -S'KEY')
-
- To remove unwanted data: git-annex dropunused NUMBER
-
- ok
- + git annex dropunused 1
- dropunused 1 ok
- + git annex unused
- unused . (checking for unused data...) (checking master...)
- Some annexed data is no longer used by any files:
- NUMBER KEY
- 1 WORM-s6-m1322200438--foo bar
- (To see where data was previously used, try: git log --stat -S'KEY')
-
- To remove unwanted data: git-annex dropunused NUMBER
-
- ok
-
-Strange that `dropunused` still said "ok" when it didn't succeed at removing the file.
-
-> It was misparsing the unused file, so it thought you'd asked it to drop a
-> key that didn't exist (which means already dropped) so no error. I've
-> fixed the bug. [[done]] --[[Joey]]
diff --git a/doc/bugs/dropunused_doesn__39__t_work_in_my_case__63__.mdwn b/doc/bugs/dropunused_doesn__39__t_work_in_my_case__63__.mdwn
deleted file mode 100644
index 7428b091a..000000000
--- a/doc/bugs/dropunused_doesn__39__t_work_in_my_case__63__.mdwn
+++ /dev/null
@@ -1,70 +0,0 @@
-What steps will reproduce the problem?
-
-I am unable to create a minimal setup to reproduce this unfortunately. But my case is the following:
-
-* Two synced repos, I have switched between direct and indirect in both, currently they are indirect
-* I have two submodules in the repos (not related to the unuesd files)
-
-* I used "git rm -r" to remove a bunch of files along with "git mv" to move some
-* I have three commits of actions like this
-
-* In one repo, the one where I did the deletions, I have 172 unused files, and all seem to come from the first of the three commits
-* In the second repo, to which I synced, I have 188 unused files, which includes a couple of files from the third commit as well
-
-* If I try to dropunused either a single file or the whole range of the files, from either repo, I get git-annex telling me "ok, recording state" but when I run unused again the files are still there. And looking into .git/objects/annex/ the file is still present
-
-This is the debug from the drop command:
-
- dropunused 9 [2013-02-07 12:47:24 CET] read: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","show-ref","git-annex"]
- [2013-02-07 12:47:24 CET] read: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","show-ref","--hash","refs/heads/git-annex"]
- [2013-02-07 12:47:24 CET] read: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","log","refs/heads/git-annex..5f3fc9db5c7badb5fb25c3159c20584f11dadaf9","--oneline","-n1"]
- [2013-02-07 12:47:24 CET] read: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","log","refs/heads/git-annex..8e5674078706864f2eade86d8aa43027e05afc1d","--oneline","-n1"]
- [2013-02-07 12:47:24 CET] read: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","log","refs/heads/git-annex..cbe492cfa79728698f5d891d7f716fbcd9fc29e2","--oneline","-n1"]
- [2013-02-07 12:47:24 CET] read: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","log","refs/heads/git-annex..48a1bdf98a10ad9a81c0587f8909e94c1c0dccc4","--oneline","-n1"]
- [2013-02-07 12:47:24 CET] chat: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","cat-file","--batch"]
- [2013-02-07 12:47:24 CET] read: git ["config","--null","--list"]
- [2013-02-07 12:47:24 CET] chat: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","hash-object","-w","--stdin-paths"]
- [2013-02-07 12:47:24 CET] feed: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","update-index","-z","--index-info"]
- [2013-02-07 12:47:24 CET] read: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","show-ref","--hash","refs/heads/git-annex"]
- [2013-02-07 12:47:24 CET] read: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","write-tree"]
- [2013-02-07 12:47:24 CET] chat: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","commit-tree","76f5041bc6e8a109e0309a09b5f36cd0da8b204a","-p","refs/heads/git-annex"]
- [2013-02-07 12:47:24 CET] call: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","update-ref","refs/heads/git-annex","96de755475bdd8f0f948dd6421c3956803a63e66"]
- ok
- (Recording state in git...)
-
-If I run it again, I get:
-
- dropunused 9 [2013-02-07 12:47:47 CET] read: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","show-ref","git-annex"]
- [2013-02-07 12:47:47 CET] read: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","show-ref","--hash","refs/heads/git-annex"]
- [2013-02-07 12:47:47 CET] read: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","log","refs/heads/git-annex..96de755475bdd8f0f948dd6421c3956803a63e66","--oneline","-n1"]
- [2013-02-07 12:47:48 CET] read: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","log","refs/heads/git-annex..8e5674078706864f2eade86d8aa43027e05afc1d","--oneline","-n1"]
- [2013-02-07 12:47:48 CET] read: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","log","refs/heads/git-annex..cbe492cfa79728698f5d891d7f716fbcd9fc29e2","--oneline","-n1"]
- [2013-02-07 12:47:48 CET] read: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","log","refs/heads/git-annex..48a1bdf98a10ad9a81c0587f8909e94c1c0dccc4","--oneline","-n1"]
- [2013-02-07 12:47:48 CET] chat: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","cat-file","--batch"]
- [2013-02-07 12:47:48 CET] read: git ["config","--null","--list"]
- [2013-02-07 12:47:48 CET] chat: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","hash-object","-w","--stdin-paths"]
- [2013-02-07 12:47:48 CET] feed: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","update-index","-z","--index-info"]
- [2013-02-07 12:47:48 CET] read: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","show-ref","--hash","refs/heads/git-annex"]
- [2013-02-07 12:47:48 CET] read: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","write-tree"]
- [2013-02-07 12:47:48 CET] chat: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","commit-tree","e40d82db10c60519f6a3a72055e9577850972fdf","-p","refs/heads/git-annex"]
- [2013-02-07 12:47:48 CET] call: git ["--git-dir=/home/arand/.git","--work-tree=/home/arand","update-ref","refs/heads/git-annex","6cf49f629251f9b39fa8b457cf6590c71c1d509b"]
- ok
- (Recording state in git...)
-
-
-What version of git-annex are you using? On what operating system?
-
-git-annex: 3.20130124
-Debian: sid 2013-02-01
-
-> I put a fix in for this in 57780cb3a4dfe1292b72e1412ec4d2a70b6d04ce
-> but it was buggy and I had to revert it.
->
-> The bug is caused by direct mode cache and mapping info.
-> This makes getKeysPresent find keys that are not present.
-> It would be expensive to make getKeysPresent check that the
-> actual key files are present (it just lists the directories).
-> But this seems to be needed, since direct mode can leave
-> cache and mapping files behind. --[[Joey]]
-
->> Now fixed properly. [[done]] --[[Joey]]
diff --git a/doc/bugs/enableremote_broken_with_direct_mode__63__.mdwn b/doc/bugs/enableremote_broken_with_direct_mode__63__.mdwn
deleted file mode 100644
index a44cef431..000000000
--- a/doc/bugs/enableremote_broken_with_direct_mode__63__.mdwn
+++ /dev/null
@@ -1,41 +0,0 @@
-### Please describe the problem.
-I have 2 regular annex locations plus one on glacier. I recently cloned one location, converted it to direct mode, then tried to enableremote glacier.
-
-When I ran the webapp everything seemed to be ok, it showed file transfers to glacier which appeared to be completing very quickly. When I looked in the log file however, I saw the files weren't actually transferring and I was getting lots of errors:
-
- Set both AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY to use glacier
-
-In order to get glacier working I had to manually copy the creds file to the new repo. The transfer errors should also made obvious in the webapp.
-
-### What steps will reproduce the problem?
-[[!format sh """
-git clone server:/location
-git annex init "laptop"
-git remote add "server" server:/location
-git annex direct
-
-Then I ran:
-git annex enableremote glacier
-Which prints:
-(merging origin/git-annex origin/synced/git-annex into git-annex...)
-(Recording state in git...)
-enableremote glacier (gpg) ok
-(Recording state in git...)
-"""]]
-But in fact it hasn't actually copied the creds to use it.
-
-
-### What version of git-annex are you using? On what operating system?
-5.20140221, debian.
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> Should be fixed in 5.20140227. [[done]] --[[Joey]]
diff --git a/doc/bugs/enableremote_broken_with_direct_mode__63__/comment_1_a2e61f5de7a28498de0c2d5e3d51eab4._comment b/doc/bugs/enableremote_broken_with_direct_mode__63__/comment_1_a2e61f5de7a28498de0c2d5e3d51eab4._comment
deleted file mode 100644
index 84cf2d4bf..000000000
--- a/doc/bugs/enableremote_broken_with_direct_mode__63__/comment_1_a2e61f5de7a28498de0c2d5e3d51eab4._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.146"
- subject="comment 1"
- date="2014-02-27T15:35:28Z"
- content="""
-5.20140221 had a bug in passing the creds on when setting up remotes in the webapp. This is fixed in 5.20140227.
-"""]]
diff --git a/doc/bugs/encrypted_S3_stalls.mdwn b/doc/bugs/encrypted_S3_stalls.mdwn
deleted file mode 100644
index 109e6e793..000000000
--- a/doc/bugs/encrypted_S3_stalls.mdwn
+++ /dev/null
@@ -1,9 +0,0 @@
-Sending large-ish (few megabytes) files to encrypted S3 remotes stalls out.
-It works for the tiny files I was using to test while developing it, on
-dialup.
-
-There was a similar issue with bup, which I fixed by forking a process
-rather than using a thread to do some IO. Probably need the same here.
---[[Joey]]
-
-[[done]] --[[Joey]]
diff --git a/doc/bugs/encryption_given_a_gpg_keyid_still_uses_symmetric_encryption.mdwn b/doc/bugs/encryption_given_a_gpg_keyid_still_uses_symmetric_encryption.mdwn
deleted file mode 100644
index 15bc95f27..000000000
--- a/doc/bugs/encryption_given_a_gpg_keyid_still_uses_symmetric_encryption.mdwn
+++ /dev/null
@@ -1,46 +0,0 @@
-What steps will reproduce the problem?
- % > git annex initremote glacier type=glacier encryption=E9053BDA
- -- SNIP --
- initremote glacier [2013-01-10 14:50:12 PST] read: gpg ["--quiet","--trust-model","always","--with-colons","--list-public-keys","E9053BDA"]
- [2013-01-10 14:50:12 PST] chat: gpg ["--quiet","--trust-model","always","--decrypt"]
-
- You need a passphrase to unlock the secret key for
- user: "Andrew Mark Kraut <akraut@gmail.com>"
- 4096-bit ELG key, ID 353E49B9, created 2008-11-11 (main key ID E9053BDA)
-
- [2013-01-10 14:50:13 PST] chat: gpg ["--quiet","--trust-model","always","--encrypt","--no-encrypt-to","--no-default-recipient","--recipient","B608B8F6E9053BDA"]
- (encryption updated with gpg key B608B8F6E9053BDA) [2013-01-10 14:50:13 PST] call: glacier ["--region=us-west-1","vault","create","glacier-06D927EC-5761-447B-86AC-CA66040BAC25"]
- [2013-01-10 14:50:13 PST] call: git ["--git-dir=/Users/akraut/Desktop/annex/.git","--work-tree=/Users/akraut/Desktop/annex","config","remote.glacier.annex-glacier","true"]
- [2013-01-10 14:50:13 PST] call: git ["--git-dir=/Users/akraut/Desktop/annex/.git","--work-tree=/Users/akraut/Desktop/annex","config","remote.glacier.annex-uuid","06D927EC-5761-447B-86AC-CA66040BAC25"]
- (gpg) [2013-01-10 14:50:13 PST] chat: gpg ["--quiet","--trust-model","always","--decrypt"]
-
- You need a passphrase to unlock the secret key for
- user: "Andrew Mark Kraut <akraut@gmail.com>"
- 4096-bit ELG key, ID 353E49B9, created 2008-11-11 (main key ID E9053BDA)
-
- [2013-01-10 14:50:14 PST] chat: gpg ["--quiet","--trust-model","always","--passphrase-fd","8","--symmetric","--force-mdc"]
- ok
-
-What is the expected output? What do you see instead?
-
-> I expect any transfers to this remote (glacier) to use the given gpg key, but instead it uses --symmetric, as you can see above.
-
-What version of git-annex are you using? On what operating system?
-
- git-annex version: 3.20130107
- local repository version: 3
- default repository version: 3
- supported repository versions: 3
- upgrade supported from repository versions: 0 1 2
-
-
-Please provide any additional information below.
-
-> Symmetric encryption is used as described in [[design/encryption]],
-> with the symmetric key stored encrypted using your gpg key.
->
-> The extra prompting described in the comments in the bug.
->
-> I've reproduced this with gpg 2.0.19. It is a documented incompatability
-> between gpg 1.x and 2.x; the latter needs --batch included in its
-> parameters. I've put in a fix. [[done]]
diff --git a/doc/bugs/encryption_given_a_gpg_keyid_still_uses_symmetric_encryption/comment_1_2f4ec4b7b92a0f0a0c4c0758da4a05a5._comment b/doc/bugs/encryption_given_a_gpg_keyid_still_uses_symmetric_encryption/comment_1_2f4ec4b7b92a0f0a0c4c0758da4a05a5._comment
deleted file mode 100644
index d4c537ed9..000000000
--- a/doc/bugs/encryption_given_a_gpg_keyid_still_uses_symmetric_encryption/comment_1_2f4ec4b7b92a0f0a0c4c0758da4a05a5._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmRFKwny4rArBaz-36xTcsJYqKIgdDaw5Q"
- nickname="Andrew"
- subject="comment 1"
- date="2013-01-11T00:01:08Z"
- content="""
-Ok, I just reread [[design/encryption]] and perhaps this isn't a bug after all.
-Though, the annoyance I experience that made me dig into this a bit perhaps is a bug.
-
-In my example output above, if I 'git annex copy dir_full_of_files --to=glacier', I will get the GPG agent's passphrase prompt for each file, even if I have passphrase caching turned on and (on my mac) even if I have the passphrase saved in the keychain. Additionally, GPG will successfully encrypt the file if I enter anything at all into the passphrase prompt as long as I enter something. This leads me to believe that it either doesn't actually need to decrypt my GPG private key or it's using what I enter as the symmetric encryption key.
-
-Ideas?
-"""]]
diff --git a/doc/bugs/encryption_given_a_gpg_keyid_still_uses_symmetric_encryption/comment_2_7c0aeae6b1b2b0338735b0231c5db7d4._comment b/doc/bugs/encryption_given_a_gpg_keyid_still_uses_symmetric_encryption/comment_2_7c0aeae6b1b2b0338735b0231c5db7d4._comment
deleted file mode 100644
index 86dc2aa71..000000000
--- a/doc/bugs/encryption_given_a_gpg_keyid_still_uses_symmetric_encryption/comment_2_7c0aeae6b1b2b0338735b0231c5db7d4._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="comment 2"
- date="2013-01-16T02:17:44Z"
- content="""
-What operating system is this?
-
-How did you install git-annex?
-
-Can you still reproduce the bug?
-
-What happens if you run this command; does it prompt for a passphrase?
-
-touch foo; echo foo| gpg --symmetric --passphrase-fd=0 foo
-"""]]
diff --git a/doc/bugs/encryption_key_is_surprising.mdwn b/doc/bugs/encryption_key_is_surprising.mdwn
deleted file mode 100644
index 5b18610b5..000000000
--- a/doc/bugs/encryption_key_is_surprising.mdwn
+++ /dev/null
@@ -1,24 +0,0 @@
-Crypto.hs seems to imply that the cipher key it's acting upon is 512 bytes long. Because of a probable programming mistake the key that's actually used is a bit surprising. The random key is generated by this snippet in Utility/Gpg.hs:
-
- {- Creates a block of high-quality random data suitable to use as a cipher.
- - It is armored, to avoid newlines, since gpg only reads ciphers up to the
- - first newline. -}
- genRandom :: Int -> IO String
- genRandom size = readStrict
- [ Params "--gen-random --armor"
- , Param $ show randomquality
- , Param $ show size
- ]
- where
- -- 1 is /dev/urandom; 2 is /dev/random
- randomquality = 1 :: Int
-
-This lets GPG generate the randomness and by passing armor, it avoids newlines. However, this base64 encoding is never undone on the way to Crypto.hs. Hence what cipherPassphrase and cipherHmac do is dropping or skipping the first 256 bytes of the base64 value. Base64, with its 6 bit per byte encoding, causes the Hmac function to operate on 192 bytes instead of 256 bytes. The key used by GPG will be larger. Some assertions that the resulting functions really operate on strings of the right length would've been helpful. Also GPG and HMAC get tested, the encryption/decryption part are not tested AFAICS.
-
-The encryption wiki page could have had more information. Enough code (sadly in Python, not reusing the Haskell code) to operate on the resulting files can be found in [this Gist](https://gist.github.com/pkern/5078559).
-
--- Philipp Kern
-
-> In addition to the comment below, I have added a check that gpg outputs
-> the expected quantity of data, and the storage of the cipher is now
-> documented in [[internals]]. Think I can call this [[done]]. --[[Joey]]
diff --git a/doc/bugs/encryption_key_is_surprising/comment_1_5b172830ac31d51a1687bc8b1db489f9._comment b/doc/bugs/encryption_key_is_surprising/comment_1_5b172830ac31d51a1687bc8b1db489f9._comment
deleted file mode 100644
index 04854b3a4..000000000
--- a/doc/bugs/encryption_key_is_surprising/comment_1_5b172830ac31d51a1687bc8b1db489f9._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-03-04T00:04:53Z"
- content="""
-My first concern is if this means it's insecure. Luckily it seems not; HMAC SHA1 needs only 64 bytes of entropy, which are more than provided in the 256 bytes of base64 provided. As long as both gpg and the HMAC code use the full provided key (and not just the first 64 bytes of it, say), we're ok. And as far as I can tell, both do fully consume and use the key.
-
-So, I don't feel the need to change the code, aside from some minor improvements to variable names.
-"""]]
diff --git a/doc/bugs/encryption_key_is_surprising/comment_2_5b7e6bb36c3333dfd71808e8b4544746._comment b/doc/bugs/encryption_key_is_surprising/comment_2_5b7e6bb36c3333dfd71808e8b4544746._comment
deleted file mode 100644
index 24f8452c3..000000000
--- a/doc/bugs/encryption_key_is_surprising/comment_2_5b7e6bb36c3333dfd71808e8b4544746._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://phil.0x539.de/"
- nickname="Philipp Kern"
- subject="comment 2"
- date="2013-03-04T07:36:55Z"
- content="""
-GPG also reduces the key material to the size of a SHA1 hash (because we're using the default option for s2k-digest-algo) to generate the symmetric key used with CAST5. So I wonder a bit why we bother with 512 bytes in the first place. Also they come from urandom (even on Linux), despite being generated once per remote. So maybe the strongness of the weakest link should be written down somewhere.
-"""]]
diff --git a/doc/bugs/encryption_key_is_surprising/comment_4_8ec86b8c35bce15337a143e275961cd5._comment b/doc/bugs/encryption_key_is_surprising/comment_4_8ec86b8c35bce15337a143e275961cd5._comment
deleted file mode 100644
index ba5be68d4..000000000
--- a/doc/bugs/encryption_key_is_surprising/comment_4_8ec86b8c35bce15337a143e275961cd5._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://phil.0x539.de/"
- nickname="Philipp Kern"
- subject="comment 4"
- date="2013-03-05T07:17:08Z"
- content="""
-You (presumably) hand over 320 bytes of entropy to GPG, but you don't control the encryption key directly. GPG assumes that what it's given as a symmetric key is not at all random. Hence, with the default options (for OpenPGP interop, apparently) it will derive a 128 bit from the given passphrase. For this it uses (again, by default) salted SHA1 on the whole passphrase. So the strength of the cipher is 128 bit CAST5 or an attack on salted SHA1 with a mostly known input length (but this does seem large).
-"""]]
diff --git a/doc/bugs/encryption_key_is_surprising/comment_4_c5e49b3a0eceabe6d14f5226d7ba4c7a._comment b/doc/bugs/encryption_key_is_surprising/comment_4_c5e49b3a0eceabe6d14f5226d7ba4c7a._comment
deleted file mode 100644
index a685626e5..000000000
--- a/doc/bugs/encryption_key_is_surprising/comment_4_c5e49b3a0eceabe6d14f5226d7ba4c7a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 4"
- date="2013-03-04T17:29:28Z"
- content="""
-What do you mean by \"reduces\"? I assume it doesn't just take the first N bytes?
-"""]]
diff --git a/doc/bugs/encryption_key_is_surprising/comment_5_cd7cbf0c0ee9cafec344dfbf1acd9590._comment b/doc/bugs/encryption_key_is_surprising/comment_5_cd7cbf0c0ee9cafec344dfbf1acd9590._comment
deleted file mode 100644
index 4e7635402..000000000
--- a/doc/bugs/encryption_key_is_surprising/comment_5_cd7cbf0c0ee9cafec344dfbf1acd9590._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://kaizer.se/"
- nickname="ulrik.sverdrup"
- subject="GPG Cipher Algo"
- date="2013-03-06T04:53:06Z"
- content="""
-The GPG cipher algorithm is user configurable (unless annex overrides it) the best way to set it is personal-cipher-preferences. Annex' job is simply to provide enough key material for any viable GPG option (so 256 bits of random data). Also note that GPG's string-to-key \"s2k\" algorithm is an iterated application SHA-1 (also this can be configured). For a quick context, it will use a strength number (for example count=128*1024) and it will hash as many iterations as [count]/[key byte length].
-"""]]
diff --git a/doc/bugs/encryption_key_is_surprising/comment_6_01381524114d885961704acc3f172536._comment b/doc/bugs/encryption_key_is_surprising/comment_6_01381524114d885961704acc3f172536._comment
deleted file mode 100644
index 21898b522..000000000
--- a/doc/bugs/encryption_key_is_surprising/comment_6_01381524114d885961704acc3f172536._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://kaizer.se/"
- nickname="ulrik.sverdrup"
- subject="comment 6"
- date="2013-03-06T05:30:16Z"
- content="""
-I'm not very clear, sorry. S2K is not iterative in the way for example PBKDF2 is. It will hash a very long repetition of salt + passphrase + salt + passphrase etc in one go. The repetition of this happens if more key bits than the hash digest size are needed.
-"""]]
diff --git a/doc/bugs/encryption_key_is_surprising/comment_7_c1eb59e1c5f583dcef7cea17623a2435._comment b/doc/bugs/encryption_key_is_surprising/comment_7_c1eb59e1c5f583dcef7cea17623a2435._comment
deleted file mode 100644
index 19863e8f8..000000000
--- a/doc/bugs/encryption_key_is_surprising/comment_7_c1eb59e1c5f583dcef7cea17623a2435._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://phil.0x539.de/"
- nickname="Philipp Kern"
- subject="comment 7"
- date="2013-03-07T15:21:55Z"
- content="""
-For the default git-annex will pass plenty of key bytes to make this unnecessary. True, one could adjust <code>$HOME/.gnupg/gpg.conf</code> to select another s2k algorithm and another cipher for the data (the two relevant options being <code>s2k-digest-algo</code> and <code>cipher-algo</code>). To be honest, I'd also like a per-repository gpg options setting for the symmetric cipher. For instance I know that I always want compression with gpg unless I use it with annexed data (at least in certain repositories).
-"""]]
diff --git a/doc/bugs/error_building_git-annex_3.20120624_using_cabal.mdwn b/doc/bugs/error_building_git-annex_3.20120624_using_cabal.mdwn
deleted file mode 100644
index df83f4e4e..000000000
--- a/doc/bugs/error_building_git-annex_3.20120624_using_cabal.mdwn
+++ /dev/null
@@ -1,159 +0,0 @@
-I am trying to install git-annex 3.20120624 using cabal. My currently installed version of git-annex is 3.20120615. After a "cabal update", the build of git-annex fails:
-
- bram@falafel% cabal install git-annex
- Resolving dependencies...
- [1 of 4] Compiling Utility.SafeCommand ( /tmp/git-annex-3.20120624-4173/git-annex-3.20120624/Utility/SafeCommand.hs, /tmp/git-annex-3.20120624-4173/git-annex-3.20120624/dist/setup/Utility/SafeCommand.o )
- [2 of 4] Compiling Build.TestConfig ( /tmp/git-annex-3.20120624-4173/git-annex-3.20120624/Build/TestConfig.hs, /tmp/git-annex-3.20120624-4173/git-annex-3.20120624/dist/setup/Build/TestConfig.o )
- [3 of 4] Compiling Build.Configure ( /tmp/git-annex-3.20120624-4173/git-annex-3.20120624/Build/Configure.hs, /tmp/git-annex-3.20120624-4173/git-annex-3.20120624/dist/setup/Build/Configure.o )
- [4 of 4] Compiling Main ( /tmp/git-annex-3.20120624-4173/git-annex-3.20120624/Setup.hs, /tmp/git-annex-3.20120624-4173/git-annex-3.20120624/dist/setup/Main.o )
- Linking /tmp/git-annex-3.20120624-4173/git-annex-3.20120624/dist/setup/setup ...
- checking version... 3.20120624
- checking git... yes
- checking git version... 1.7.9.5
- checking cp -a... yes
- checking cp -p... yes
- checking cp --reflink=auto... yes
- checking uuid generator... uuid
- checking xargs -0... yes
- checking rsync... yes
- checking curl... no
- checking wget... yes
- checking bup... no
- checking gpg... yes
- checking lsof... yes
- checking ssh connection caching... yes
- checking sha1... sha1sum
- checking sha512... sha512sum
- checking sha224... sha224sum
- checking sha384... sha384sum
- checking sha256... sha256sum
- Configuring git-annex-3.20120624...
- Building git-annex-3.20120624...
- Preprocessing executable 'git-annex' for git-annex-3.20120624...
- [ 1 of 183] Compiling Utility.Percentage ( Utility/Percentage.hs, dist/build/git-annex/git-annex-tmp/Utility/Percentage.o )
- [ 2 of 183] Compiling Utility.Dot ( Utility/Dot.hs, dist/build/git-annex/git-annex-tmp/Utility/Dot.o )
- [ 3 of 183] Compiling Utility.ThreadLock ( Utility/ThreadLock.hs, dist/build/git-annex/git-annex-tmp/Utility/ThreadLock.o )
- [ 4 of 183] Compiling Utility.Base64 ( Utility/Base64.hs, dist/build/git-annex/git-annex-tmp/Utility/Base64.o )
- [ 5 of 183] Compiling Utility.DataUnits ( Utility/DataUnits.hs, dist/build/git-annex/git-annex-tmp/Utility/DataUnits.o )
- [ 6 of 183] Compiling Utility.JSONStream ( Utility/JSONStream.hs, dist/build/git-annex/git-annex-tmp/Utility/JSONStream.o )
- [ 7 of 183] Compiling Messages.JSON ( Messages/JSON.hs, dist/build/git-annex/git-annex-tmp/Messages/JSON.o )
- [ 8 of 183] Compiling Build.SysConfig ( Build/SysConfig.hs, dist/build/git-annex/git-annex-tmp/Build/SysConfig.o )
- [ 9 of 183] Compiling Types.KeySource ( Types/KeySource.hs, dist/build/git-annex/git-annex-tmp/Types/KeySource.o )
- [ 10 of 183] Compiling Types.UUID ( Types/UUID.hs, dist/build/git-annex/git-annex-tmp/Types/UUID.o )
- [ 11 of 183] Compiling Utility.State ( Utility/State.hs, dist/build/git-annex/git-annex-tmp/Utility/State.o )
- [ 12 of 183] Compiling Types.Messages ( Types/Messages.hs, dist/build/git-annex/git-annex-tmp/Types/Messages.o )
- [ 13 of 183] Compiling Types.TrustLevel ( Types/TrustLevel.hs, dist/build/git-annex/git-annex-tmp/Types/TrustLevel.o )
- [ 14 of 183] Compiling Types.BranchState ( Types/BranchState.hs, dist/build/git-annex/git-annex-tmp/Types/BranchState.o )
- [ 15 of 183] Compiling Git.Index ( Git/Index.hs, dist/build/git-annex/git-annex-tmp/Git/Index.o )
- [ 16 of 183] Compiling Utility.PartialPrelude ( Utility/PartialPrelude.hs, dist/build/git-annex/git-annex-tmp/Utility/PartialPrelude.o )
- [ 17 of 183] Compiling Utility.Format ( Utility/Format.hs, dist/build/git-annex/git-annex-tmp/Utility/Format.o )
- [ 18 of 183] Compiling Utility.FileSystemEncoding ( Utility/FileSystemEncoding.hs, dist/build/git-annex/git-annex-tmp/Utility/FileSystemEncoding.o )
- [ 19 of 183] Compiling Utility.Touch ( dist/build/git-annex/git-annex-tmp/Utility/Touch.hs, dist/build/git-annex/git-annex-tmp/Utility/Touch.o )
- [ 20 of 183] Compiling Utility.Monad ( Utility/Monad.hs, dist/build/git-annex/git-annex-tmp/Utility/Monad.o )
- [ 21 of 183] Compiling Utility.Path ( Utility/Path.hs, dist/build/git-annex/git-annex-tmp/Utility/Path.o )
- [ 22 of 183] Compiling Utility.SafeCommand ( Utility/SafeCommand.hs, dist/build/git-annex/git-annex-tmp/Utility/SafeCommand.o )
- [ 23 of 183] Compiling Utility.RsyncFile ( Utility/RsyncFile.hs, dist/build/git-annex/git-annex-tmp/Utility/RsyncFile.o )
- [ 24 of 183] Compiling Utility.Exception ( Utility/Exception.hs, dist/build/git-annex/git-annex-tmp/Utility/Exception.o )
- [ 25 of 183] Compiling Utility.TempFile ( Utility/TempFile.hs, dist/build/git-annex/git-annex-tmp/Utility/TempFile.o )
- [ 26 of 183] Compiling Utility.Directory ( Utility/Directory.hs, dist/build/git-annex/git-annex-tmp/Utility/Directory.o )
- [ 27 of 183] Compiling Utility.Misc ( Utility/Misc.hs, dist/build/git-annex/git-annex-tmp/Utility/Misc.o )
- [ 28 of 183] Compiling Git.Types ( Git/Types.hs, dist/build/git-annex/git-annex-tmp/Git/Types.o )
- [ 29 of 183] Compiling Common ( Common.hs, dist/build/git-annex/git-annex-tmp/Common.o )
- [ 30 of 183] Compiling Utility.FileMode ( Utility/FileMode.hs, dist/build/git-annex/git-annex-tmp/Utility/FileMode.o )
- [ 31 of 183] Compiling Git ( Git.hs, dist/build/git-annex/git-annex-tmp/Git.o )
- [ 32 of 183] Compiling Git.Command ( Git/Command.hs, dist/build/git-annex/git-annex-tmp/Git/Command.o )
- [ 33 of 183] Compiling Git.Ref ( Git/Ref.hs, dist/build/git-annex/git-annex-tmp/Git/Ref.o )
- [ 34 of 183] Compiling Git.FilePath ( Git/FilePath.hs, dist/build/git-annex/git-annex-tmp/Git/FilePath.o )
- [ 35 of 183] Compiling Utility.Matcher ( Utility/Matcher.hs, dist/build/git-annex/git-annex-tmp/Utility/Matcher.o )
- [ 36 of 183] Compiling Utility.Gpg ( Utility/Gpg.hs, dist/build/git-annex/git-annex-tmp/Utility/Gpg.o )
- [ 37 of 183] Compiling Types.Crypto ( Types/Crypto.hs, dist/build/git-annex/git-annex-tmp/Types/Crypto.o )
- [ 38 of 183] Compiling Types.Key ( Types/Key.hs, dist/build/git-annex/git-annex-tmp/Types/Key.o )
- [ 39 of 183] Compiling Types.Backend ( Types/Backend.hs, dist/build/git-annex/git-annex-tmp/Types/Backend.o )
- [ 40 of 183] Compiling Types.Remote ( Types/Remote.hs, dist/build/git-annex/git-annex-tmp/Types/Remote.o )
- [ 41 of 183] Compiling Git.Sha ( Git/Sha.hs, dist/build/git-annex/git-annex-tmp/Git/Sha.o )
- [ 42 of 183] Compiling Git.Branch ( Git/Branch.hs, dist/build/git-annex/git-annex-tmp/Git/Branch.o )
- [ 43 of 183] Compiling Git.UpdateIndex ( Git/UpdateIndex.hs, dist/build/git-annex/git-annex-tmp/Git/UpdateIndex.o )
- [ 44 of 183] Compiling Git.Queue ( Git/Queue.hs, dist/build/git-annex/git-annex-tmp/Git/Queue.o )
- [ 45 of 183] Compiling Git.Url ( Git/Url.hs, dist/build/git-annex/git-annex-tmp/Git/Url.o )
- [ 46 of 183] Compiling Git.Construct ( Git/Construct.hs, dist/build/git-annex/git-annex-tmp/Git/Construct.o )
- [ 47 of 183] Compiling Git.Config ( Git/Config.hs, dist/build/git-annex/git-annex-tmp/Git/Config.o )
- [ 48 of 183] Compiling Git.SharedRepository ( Git/SharedRepository.hs, dist/build/git-annex/git-annex-tmp/Git/SharedRepository.o )
- [ 49 of 183] Compiling Git.Version ( Git/Version.hs, dist/build/git-annex/git-annex-tmp/Git/Version.o )
- [ 50 of 183] Compiling Utility.CoProcess ( Utility/CoProcess.hs, dist/build/git-annex/git-annex-tmp/Utility/CoProcess.o )
- [ 51 of 183] Compiling Git.HashObject ( Git/HashObject.hs, dist/build/git-annex/git-annex-tmp/Git/HashObject.o )
- [ 52 of 183] Compiling Git.CatFile ( Git/CatFile.hs, dist/build/git-annex/git-annex-tmp/Git/CatFile.o )
- [ 53 of 183] Compiling Git.UnionMerge ( Git/UnionMerge.hs, dist/build/git-annex/git-annex-tmp/Git/UnionMerge.o )
- [ 54 of 183] Compiling Git.CheckAttr ( Git/CheckAttr.hs, dist/build/git-annex/git-annex-tmp/Git/CheckAttr.o )
- [ 55 of 183] Compiling Annex ( Annex.hs, dist/build/git-annex/git-annex-tmp/Annex.o )
- [ 56 of 183] Compiling Types.Option ( Types/Option.hs, dist/build/git-annex/git-annex-tmp/Types/Option.o )
- [ 57 of 183] Compiling Types ( Types.hs, dist/build/git-annex/git-annex-tmp/Types.o )
- [ 58 of 183] Compiling Messages ( Messages.hs, dist/build/git-annex/git-annex-tmp/Messages.o )
- [ 59 of 183] Compiling Types.Command ( Types/Command.hs, dist/build/git-annex/git-annex-tmp/Types/Command.o )
- [ 60 of 183] Compiling Locations ( Locations.hs, dist/build/git-annex/git-annex-tmp/Locations.o )
- [ 61 of 183] Compiling Common.Annex ( Common/Annex.hs, dist/build/git-annex/git-annex-tmp/Common/Annex.o )
- [ 62 of 183] Compiling Annex.Exception ( Annex/Exception.hs, dist/build/git-annex/git-annex-tmp/Annex/Exception.o )
- [ 63 of 183] Compiling Annex.BranchState ( Annex/BranchState.hs, dist/build/git-annex/git-annex-tmp/Annex/BranchState.o )
- [ 64 of 183] Compiling Annex.CatFile ( Annex/CatFile.hs, dist/build/git-annex/git-annex-tmp/Annex/CatFile.o )
- [ 65 of 183] Compiling Annex.Perms ( Annex/Perms.hs, dist/build/git-annex/git-annex-tmp/Annex/Perms.o )
- [ 66 of 183] Compiling Annex.Journal ( Annex/Journal.hs, dist/build/git-annex/git-annex-tmp/Annex/Journal.o )
- [ 67 of 183] Compiling Annex.Branch ( Annex/Branch.hs, dist/build/git-annex/git-annex-tmp/Annex/Branch.o )
- [ 68 of 183] Compiling Crypto ( Crypto.hs, dist/build/git-annex/git-annex-tmp/Crypto.o )
- [ 69 of 183] Compiling Usage ( Usage.hs, dist/build/git-annex/git-annex-tmp/Usage.o )
- [ 70 of 183] Compiling Annex.CheckAttr ( Annex/CheckAttr.hs, dist/build/git-annex/git-annex-tmp/Annex/CheckAttr.o )
- [ 71 of 183] Compiling Remote.Helper.Special ( Remote/Helper/Special.hs, dist/build/git-annex/git-annex-tmp/Remote/Helper/Special.o )
- [ 72 of 183] Compiling Logs.Presence ( Logs/Presence.hs, dist/build/git-annex/git-annex-tmp/Logs/Presence.o )
- [ 73 of 183] Compiling Logs.Location ( Logs/Location.hs, dist/build/git-annex/git-annex-tmp/Logs/Location.o )
- [ 74 of 183] Compiling Logs.Web ( Logs/Web.hs, dist/build/git-annex/git-annex-tmp/Logs/Web.o )
- [ 75 of 183] Compiling Annex.LockPool ( Annex/LockPool.hs, dist/build/git-annex/git-annex-tmp/Annex/LockPool.o )
- [ 76 of 183] Compiling Backend.SHA ( Backend/SHA.hs, dist/build/git-annex/git-annex-tmp/Backend/SHA.o )
- [ 77 of 183] Compiling Backend.WORM ( Backend/WORM.hs, dist/build/git-annex/git-annex-tmp/Backend/WORM.o )
- [ 78 of 183] Compiling Backend.URL ( Backend/URL.hs, dist/build/git-annex/git-annex-tmp/Backend/URL.o )
- [ 79 of 183] Compiling Assistant.ThreadedMonad ( Assistant/ThreadedMonad.hs, dist/build/git-annex/git-annex-tmp/Assistant/ThreadedMonad.o )
- [ 80 of 183] Compiling Logs.UUIDBased ( Logs/UUIDBased.hs, dist/build/git-annex/git-annex-tmp/Logs/UUIDBased.o )
- [ 81 of 183] Compiling Logs.Remote ( Logs/Remote.hs, dist/build/git-annex/git-annex-tmp/Logs/Remote.o )
- [ 82 of 183] Compiling Utility.DiskFree ( Utility/DiskFree.hs, dist/build/git-annex/git-annex-tmp/Utility/DiskFree.o )
- [ 83 of 183] Compiling Utility.Url ( Utility/Url.hs, dist/build/git-annex/git-annex-tmp/Utility/Url.o )
- [ 84 of 183] Compiling Utility.CopyFile ( Utility/CopyFile.hs, dist/build/git-annex/git-annex-tmp/Utility/CopyFile.o )
- [ 85 of 183] Compiling Git.LsFiles ( Git/LsFiles.hs, dist/build/git-annex/git-annex-tmp/Git/LsFiles.o )
- [ 86 of 183] Compiling Git.AutoCorrect ( Git/AutoCorrect.hs, dist/build/git-annex/git-annex-tmp/Git/AutoCorrect.o )
- [ 87 of 183] Compiling Git.CurrentRepo ( Git/CurrentRepo.hs, dist/build/git-annex/git-annex-tmp/Git/CurrentRepo.o )
- [ 88 of 183] Compiling Utility.Daemon ( Utility/Daemon.hs, dist/build/git-annex/git-annex-tmp/Utility/Daemon.o )
- [ 89 of 183] Compiling Utility.LogFile ( Utility/LogFile.hs, dist/build/git-annex/git-annex-tmp/Utility/LogFile.o )
- [ 90 of 183] Compiling Utility.ThreadScheduler ( Utility/ThreadScheduler.hs, dist/build/git-annex/git-annex-tmp/Utility/ThreadScheduler.o )
- [ 91 of 183] Compiling Assistant.DaemonStatus ( Assistant/DaemonStatus.hs, dist/build/git-annex/git-annex-tmp/Assistant/DaemonStatus.o )
- [ 92 of 183] Compiling Utility.Types.DirWatcher ( Utility/Types/DirWatcher.hs, dist/build/git-annex/git-annex-tmp/Utility/Types/DirWatcher.o )
- [ 93 of 183] Compiling Utility.INotify ( Utility/INotify.hs, dist/build/git-annex/git-annex-tmp/Utility/INotify.o )
- [ 94 of 183] Compiling Utility.DirWatcher ( Utility/DirWatcher.hs, dist/build/git-annex/git-annex-tmp/Utility/DirWatcher.o )
- [ 95 of 183] Compiling Utility.Lsof ( Utility/Lsof.hs, dist/build/git-annex/git-annex-tmp/Utility/Lsof.o )
- [ 96 of 183] Compiling Git.Merge ( Git/Merge.hs, dist/build/git-annex/git-annex-tmp/Git/Merge.o )
- [ 97 of 183] Compiling Git.Filename ( Git/Filename.hs, dist/build/git-annex/git-annex-tmp/Git/Filename.o )
- [ 98 of 183] Compiling Git.LsTree ( Git/LsTree.hs, dist/build/git-annex/git-annex-tmp/Git/LsTree.o )
- [ 99 of 183] Compiling Config ( Config.hs, dist/build/git-annex/git-annex-tmp/Config.o )
- [100 of 183] Compiling Annex.UUID ( Annex/UUID.hs, dist/build/git-annex/git-annex-tmp/Annex/UUID.o )
- [101 of 183] Compiling Logs.UUID ( Logs/UUID.hs, dist/build/git-annex/git-annex-tmp/Logs/UUID.o )
- [102 of 183] Compiling Backend ( Backend.hs, dist/build/git-annex/git-annex-tmp/Backend.o )
- [103 of 183] Compiling Remote.Helper.Hooks ( Remote/Helper/Hooks.hs, dist/build/git-annex/git-annex-tmp/Remote/Helper/Hooks.o )
- [104 of 183] Compiling Remote.Helper.Encryptable ( Remote/Helper/Encryptable.hs, dist/build/git-annex/git-annex-tmp/Remote/Helper/Encryptable.o )
- [105 of 183] Compiling Annex.Queue ( Annex/Queue.hs, dist/build/git-annex/git-annex-tmp/Annex/Queue.o )
- [106 of 183] Compiling Annex.Content ( Annex/Content.hs, dist/build/git-annex/git-annex-tmp/Annex/Content.o )
- [107 of 183] Compiling Remote.S3 ( Remote/S3.hs, dist/build/git-annex/git-annex-tmp/Remote/S3.o )
- [108 of 183] Compiling Remote.Directory ( Remote/Directory.hs, dist/build/git-annex/git-annex-tmp/Remote/Directory.o )
- [109 of 183] Compiling Remote.Rsync ( Remote/Rsync.hs, dist/build/git-annex/git-annex-tmp/Remote/Rsync.o )
- [110 of 183] Compiling Remote.Web ( Remote/Web.hs, dist/build/git-annex/git-annex-tmp/Remote/Web.o )
- [111 of 183] Compiling Remote.Hook ( Remote/Hook.hs, dist/build/git-annex/git-annex-tmp/Remote/Hook.o )
- [112 of 183] Compiling Upgrade.V2 ( Upgrade/V2.hs, dist/build/git-annex/git-annex-tmp/Upgrade/V2.o )
- [113 of 183] Compiling Assistant.Changes ( Assistant/Changes.hs, dist/build/git-annex/git-annex-tmp/Assistant/Changes.o )
-
- Assistant/Changes.hs:73:30:
- Not in scope: `tryReadTChan'
- Perhaps you meant `readTChan' (imported from Control.Concurrent.STM)
- cabal: Error: some packages failed to install:
- git-annex-3.20120624 failed during the building phase. The exception was:
- ExitFailure 1
-
-This is using haskell-platform 2012.1.0.0~debian1 on Ubuntu 12.04.
-
-> Turns out it needs version 2.3 of the STM library. (libghc-stm-dev
-> package). I've made cabal detect an older version and skip building
-> the new `git annex watch` command, so you'll be able to build the next
-> release. [[done]] --[[Joey]]
diff --git a/doc/bugs/error_compiling_network-info_when_compiling_git-annex.mdwn b/doc/bugs/error_compiling_network-info_when_compiling_git-annex.mdwn
new file mode 100644
index 000000000..99f480e70
--- /dev/null
+++ b/doc/bugs/error_compiling_network-info_when_compiling_git-annex.mdwn
@@ -0,0 +1,12 @@
+### Please describe the problem.
+I'm not sure if you'll consider this a bug, or if I'm just doing something wrong, but I'm having trouble compiling git-annex on OmniOS (a derivative of OpenSolaris). I've got GHC 7.6.3 built and installed (bootstrapped using the Solaris binaries for GHC 7.0.3). I used it to build haskell-platform (although I had to disable the OpenGL-related packages to do so), and now I'm trying to use cabal to build git-annex and its dependencies. I've started with a minimal build; this will end up as an archive remote so it should be sufficient. The instructions <http://git-annex.branchable.com/install/cabal/> say to run
+
+ cabal install git-annex --bindir=$HOME/bin -f"-assistant -webapp -webdav -pairing -xmpp -dns"
+
+This builds a bunch of stuff but then fails to compile the network-info package. As I understand it, the git-annex package only needs network-info if it's compiled with pairing supoort (I'm looking at <https://github.com/joeyh/git-annex/blob/master/git-annex.cabal>), and this command is telling it to disable pairing.
+
+Is there some other dependency that needs network-info? Is there a way to find out?
+
+Thanks
+
+> fowarded 2 ways; [[done]] --[[Joey]]
diff --git a/doc/bugs/error_compiling_network-info_when_compiling_git-annex/comment_1_1b5d236567123300924427624e0e48c8._comment b/doc/bugs/error_compiling_network-info_when_compiling_git-annex/comment_1_1b5d236567123300924427624e0e48c8._comment
new file mode 100644
index 000000000..8ee7885a6
--- /dev/null
+++ b/doc/bugs/error_compiling_network-info_when_compiling_git-annex/comment_1_1b5d236567123300924427624e0e48c8._comment
@@ -0,0 +1,53 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-06-06T16:53:21Z"
+ content="""
+http://packdeps.haskellers.com/reverse/network-info
+
+It's uuid which needs network-info -- but not for the parts of uuid which git-annex uses. (git-annex does not use the uuids that include the MAC address).
+
+It's not hard to avoid that dependency. The attached patch will do. I've forwarded this to the author of uuid.
+
+<pre>
+diff --git a/uuid.cabal b/uuid.cabal
+index 0a53059..f00e887 100644
+--- a/uuid.cabal
++++ b/uuid.cabal
+@@ -24,6 +24,9 @@ Extra-Source-Files:
+ CHANGES
+ CONTRIBUTORS
+
++Flag NetworkInfo
++ Description: Enable UUIDs that need network-info
++ Default: True
+
+ Library
+ Build-Depends: base >=3 && < 5,
+@@ -32,17 +35,20 @@ Library
+ cryptohash >= 0.7 && < 0.12,
+ deepseq == 1.3.*,
+ hashable (>= 1.1.1.0 && < 1.2.0) || (>= 1.2.1 && < 1.3),
+- network-info == 0.2.*,
+ random >= 1.0.1 && < 1.1,
+ time >= 1.1 && < 1.5
++ if flag(NetworkInfo)
++ Build-Depends: network-info == 0.2.*
+
+ Exposed-Modules:
+ Data.UUID
+- Data.UUID.Util
+- Data.UUID.V1
+ Data.UUID.V3
+ Data.UUID.V4
+ Data.UUID.V5
++ if flag(NetworkInfo)
++ Exposed-Modules:
++ Data.UUID.Util
++ Data.UUID.V1
+
+ Other-Modules:
+ Data.UUID.Builder
+</pre>
+"""]]
diff --git a/doc/bugs/error_compiling_network-info_when_compiling_git-annex/comment_2_4e5ffd0d5b965b9429b937610b7998d5._comment b/doc/bugs/error_compiling_network-info_when_compiling_git-annex/comment_2_4e5ffd0d5b965b9429b937610b7998d5._comment
new file mode 100644
index 000000000..8e631a115
--- /dev/null
+++ b/doc/bugs/error_compiling_network-info_when_compiling_git-annex/comment_2_4e5ffd0d5b965b9429b937610b7998d5._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm5WyknJirJJridJjiPNgrlYxGG9xrZBvA"
+ nickname="Daniel"
+ subject="a different fix"
+ date="2014-06-07T04:27:47Z"
+ content="""
+Thanks. I also went back and took a closer look at the error; it looks like fixing network-info is pretty easy as well. <https://github.com/jystic/network-info/pull/10>
+"""]]
diff --git a/doc/bugs/error_propigation.mdwn b/doc/bugs/error_propigation.mdwn
deleted file mode 100644
index 25998907e..000000000
--- a/doc/bugs/error_propigation.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-If a subcommand fails w/o throwing an error, no error is propigated to the
-git-annex exit code. With --quiet, this makes it look like the command
-succeeded. [[done]]
diff --git a/doc/bugs/error_when_using_repositories_with_non-ASCII_characters.mdwn b/doc/bugs/error_when_using_repositories_with_non-ASCII_characters.mdwn
deleted file mode 100644
index d88b86b44..000000000
--- a/doc/bugs/error_when_using_repositories_with_non-ASCII_characters.mdwn
+++ /dev/null
@@ -1,62 +0,0 @@
-*What steps will reproduce the problem?*
-
- hactar% mkdir demonstração
- hactar% cd demonstração
- hactar% cp ~/tmp/*(.) .
- hactar% git init
- Initialized empty Git repository in /tmp/demonstração/.git/
- hactar% git annex init
- init ok
- (Recording state in git...)
- hactar% git annex add .
- add Equipment Consumption.ods (checksum...) ok
- add Personal.vcard (checksum...) ok
- add Trampo.vcard (checksum...) ok
- add blah.txt (checksum...) ok
- [ more git output ]
- hactar% git commit -m initial
- [master (root-commit) d16bafb] initial
- 42 files changed, 42 insertions(+)
- [ more git output ]
- hactar% cd /var/tmp
- hactar% git clone ssh://localhost//tmp/demonstração demonstração
- Cloning into 'demonstração'...
- remote: Counting objects: 176, done.
- remote: Compressing objects: 100% (134/134), done.
- remote: Total 176 (delta 1), reused 0 (delta 0)
- Receiving objects: 100% (176/176), 17.23 KiB, done.
- Resolving deltas: 100% (1/1), done.
- hactar% cd demonstração
- hactar% git annex init
- init ok
- (Recording state in git...)
- hactar% git annex status
- supported backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
- supported remote types: git S3 bup directory rsync web hook
- trusted repositories: (merging origin/git-annex into git-annex...)
-
- git-annex: fd:14: commitBuffer: invalid argument (invalid character)
- failed
- git-annex: status: 1 failed
-
-*What is the expected output? What do you see instead?*
-
-I expect that "git annex status" will complete successfuly and show information about all repositories.
-Instead of that I get the "git-annex: fd:14: commitBuffer: invalid argument (invalid character)" error above.
-
-*What version of git-annex are you using? On what operating system?*
-
-This is with Debian's git-annex_3.20121001_i386.deb installed on an Ubuntu 12.04 system.
-Using Ubuntu's original version (3.20120406) the error message is a bit different (here I used the name acentuação instead of demonstração):
-
- trusted repositories: git-annex-shell: //tmp/acentuação: changeWorkingDirectory: does not exist (No such file or directory)
- Command ssh ["-S","/var/tmp/acentua\231\227o/.git/annex/ssh/localhost","-o","ControlMaster=auto","-o","ControlPersist=yes","localhost","git-annex-shell 'configlist' '//tmp/acentua\195\167\195\163o'"] failed; exit code 1
-
-> I think this is the last unvalid utf-8 bug in git-annex. At least,
-> the last one I hypothesized exists. It's in the union merge code. I will
-> try to look at it again soon; the last 2 times I looked at that code
-> I could not see an easy way to make it allow invalid utf-8 encoded data.
-> --[[Joey]]
-
->> [[done]], although I am no longer so sure this was the last utf-8
->> encoding bug.. --[[Joey]]
diff --git a/doc/bugs/error_when_using_repositories_with_non-ASCII_characters/comment_1_38cc2d2ed907649df085de8ad83cb9dd._comment b/doc/bugs/error_when_using_repositories_with_non-ASCII_characters/comment_1_38cc2d2ed907649df085de8ad83cb9dd._comment
deleted file mode 100644
index 69d7f1da1..000000000
--- a/doc/bugs/error_when_using_repositories_with_non-ASCII_characters/comment_1_38cc2d2ed907649df085de8ad83cb9dd._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmcYryijvlF8bJvM_eZNSrUPEkMlxMDGTQ"
- nickname="Thiago"
- subject="The bug is actually something completely different!"
- date="2012-10-04T03:53:57Z"
- content="""
-Ok, this is a mix of luser error and a bug.
-
-I noticed that I wasn't providing a description in git annex init. So if I do \"git annex init foo\" in the first repository and \"git annex init bar\" in the clone, then git annex status works!
-
-So the bug is actually that you need to provide a description in git annex init, even though the man page says a description will be generated otherwise.
-
-(In my defense I hit the non-ACII characters bug with the git annex version in Ubuntu, and that one still has the same error even if a description is provided so this was fixed later).
-"""]]
diff --git a/doc/bugs/error_with_file_names_starting_with_dash.mdwn b/doc/bugs/error_with_file_names_starting_with_dash.mdwn
deleted file mode 100644
index 84bf1cfa0..000000000
--- a/doc/bugs/error_with_file_names_starting_with_dash.mdwn
+++ /dev/null
@@ -1,15 +0,0 @@
-git annex add has problems if items start with dashes, example:
-
--wut-a-directory-name-/file1
-
-leads to
-
-[[!format bash """
-add -wut-a-directory-name-/file1 (checksum...) sha1sum: invalid option -- 'u'
-„sha1sum --help“ gibt weitere Informationen.
-
- git-annex: <file descriptor: 15>: hGetLine: end of file
-"""]]
-
-> This is fixed in git, at least I think I've found all cases where
-> filenames are passed to programs and escaped them. --[[Joey]] [[done]]
diff --git a/doc/bugs/failed_sync_with_direct_mode_repo.mdwn b/doc/bugs/failed_sync_with_direct_mode_repo.mdwn
new file mode 100644
index 000000000..879146deb
--- /dev/null
+++ b/doc/bugs/failed_sync_with_direct_mode_repo.mdwn
@@ -0,0 +1,9 @@
+Two clients, both in direct mode, both running assistant.
+
+When a change is made on A, the assistant commits it to annex/direct/master. But, the master branch is not changed.
+
+B notices there is a change, pulls from A. Gets annex/direct/master, but does not merge it into its local branch at all.
+
+[[!tag confirmed]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/failed_sync_with_direct_mode_repo/comment_1_fb4026cc81eb0ec1e656e4a81ffacc4f._comment b/doc/bugs/failed_sync_with_direct_mode_repo/comment_1_fb4026cc81eb0ec1e656e4a81ffacc4f._comment
new file mode 100644
index 000000000..8b75fa67c
--- /dev/null
+++ b/doc/bugs/failed_sync_with_direct_mode_repo/comment_1_fb4026cc81eb0ec1e656e4a81ffacc4f._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-06-16T15:10:42Z"
+ content="""
+Reproduced this as described.
+
+Only happens when using the assistant in the second repository, which is a ssh remote of the first, and when there is not also a remote going the other way (so does not affect pairing).
+
+As I thought, the problem is that the master branch is not updated by the assistant when in direct mode, and while annex/direct/master is pulled by the other assistant, it does not merge it.
+
+"""]]
diff --git a/doc/bugs/fails_to_get_content_from_bare_repo_on_windows.mdwn b/doc/bugs/fails_to_get_content_from_bare_repo_on_windows.mdwn
new file mode 100644
index 000000000..b54cbb444
--- /dev/null
+++ b/doc/bugs/fails_to_get_content_from_bare_repo_on_windows.mdwn
@@ -0,0 +1,143 @@
+### Please describe the problem.
+
+I have a annex repo in external drive (a bare repo), usually synced with a macbook. When I'm trying to sync the drive over to a Windows machine, all contents fail to sync over. I managed to reproduce the problem with a set of instructions locally:
+
+ C:\Temp\test>dir
+ Volume in drive C is Windows
+ Volume Serial Number is 6839-6E71
+
+ Directory of C:\Temp\test
+
+ 2014/05/08 23:08 <DIR> .
+ 2014/05/08 23:08 <DIR> ..
+ 2014/05/08 23:08 14 file.txt
+ 1 File(s) 14 bytes
+ 2 Dir(s) 164,943,056,896 bytes free
+
+ C:\Temp\test>git init
+ Initialized empty Git repository in C:/Temp/test/.git/
+
+ C:\Temp\test>git annex init
+ init
+ Detected a filesystem without fifo support.
+
+ Disabling ssh connection caching.
+
+ Detected a crippled filesystem.
+
+ Enabling direct mode.
+ ok
+ (Recording state in git...)
+
+ C:\Temp\test>git annex add .
+ add file.txt ok
+ (Recording state in git...)
+
+ C:\Temp\test>cd ..
+
+ C:\Temp>mkdir bare
+
+ C:\Temp>cd bare
+
+ C:\Temp\bare>git init --bare
+ Initialized empty Git repository in C:/Temp/bare/
+ C:\Temp\bare>git annex init
+ init
+ Detected a filesystem without fifo support.
+
+ Disabling ssh connection caching.
+
+ Detected a crippled filesystem.
+ ok
+ (Recording state in git...)
+
+ C:\Temp\bare>cd ../test
+
+ C:\Temp\test>git remote add mybare C:\Temp\bare
+
+ C:\Temp\test>git annex sync --content mybare
+ commit ok
+ pull mybare
+ warning: no common commits
+ remote: Counting objects: 5, done.
+ remote: Compressing objects: 100% (3/3), done.
+ remote: Total 5 (delta 0), reused 0 (delta 0)
+ Unpacking objects: 100% (5/5), done.
+ From C:\Temp\bare
+ * [new branch] git-annex -> mybare/git-annex
+ ok
+ (merging mybare/git-annex into git-annex...)
+ (Recording state in git...)
+ copy file.txt copy file.txt (to mybare...)
+ file.txt
+ 14 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
+
+ sent 86 bytes received 31 bytes 234.00 bytes/sec
+ total size is 14 speedup is 0.12
+ ok
+ pull mybare
+ ok
+ (Recording state in git...)
+ push mybare
+ Counting objects: 23, done.
+ Delta compression using up to 4 threads.
+ Compressing objects: 100% (16/16), done.
+ Writing objects: 100% (21/21), 1.94 KiB | 0 bytes/s, done.
+ Total 21 (delta 1), reused 0 (delta 0)
+ To C:\Temp\bare
+ * [new branch] git-annex -> synced/git-annex
+ * [new branch] annex/direct/master -> synced/master
+ ok
+
+ C:\Temp\test>cd ..
+
+ C:\Temp>git clone C:\Temp\bare test2
+ Cloning into 'test2'...
+ done.
+
+ C:\Temp>cd test2
+
+ C:\Temp\test2>ls -l
+ total 1
+ ----------+ 1 Ruo None 188 May 8 23:10 file.txt
+
+ C:\Temp\test2>git annex init
+ init
+ Detected a filesystem without fifo support.
+
+ Disabling ssh connection caching.
+
+ Detected a crippled filesystem.
+
+ Enabling direct mode.
+ ok
+ (Recording state in git...)
+
+ C:\Temp\test2>git annex get file.txt
+ get file.txt (merging origin/git-annex origin/synced/git-annex into git-annex...)
+ (Recording state in git...)
+
+ Unable to access these remotes: origin
+
+ Try making some of these repositories available:
+ f2af6f52-18d5-4a54-ae5c-c4bef5fab00c -- origin (MY-PC:C:\Temp\bare)
+ fc00306a-157c-439b-a5c3-37aabf9d61fb -- MY-PC:C:\Temp\test
+ failed
+ git-annex: get: 1 failed
+
+
+ C:\Temp\test2>git version
+ git version 1.9.2.msysgit.0
+
+ C:\Temp\test2>git annex version
+ git-annex version: 5.20140421-g78d6aa1
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 2 3 4
+
+[[!tag confirmed]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/fails_to_get_content_from_bare_repo_on_windows/comment_1_31cf32ef2d597573ed3c5f06a1b40a1c._comment b/doc/bugs/fails_to_get_content_from_bare_repo_on_windows/comment_1_31cf32ef2d597573ed3c5f06a1b40a1c._comment
new file mode 100644
index 000000000..b57af9b17
--- /dev/null
+++ b/doc/bugs/fails_to_get_content_from_bare_repo_on_windows/comment_1_31cf32ef2d597573ed3c5f06a1b40a1c._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-06-05T17:37:08Z"
+ content="""
+I've reproduced this.
+
+More simply: git annex move --to mybare and then git annex get will fail
+"""]]
diff --git a/doc/bugs/fails_to_get_content_from_bare_repo_on_windows/comment_2_7d64382c66555ec9c5531840aa19e809._comment b/doc/bugs/fails_to_get_content_from_bare_repo_on_windows/comment_2_7d64382c66555ec9c5531840aa19e809._comment
new file mode 100644
index 000000000..fc978e28d
--- /dev/null
+++ b/doc/bugs/fails_to_get_content_from_bare_repo_on_windows/comment_2_7d64382c66555ec9c5531840aa19e809._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 2"
+ date="2014-06-05T18:29:15Z"
+ content="""
+Appears to be a corrupt uuid log issue. At least, the bug I am seeing is. When retriving the uuid of the remote that has the key from the location log, it seems to get a uuid with one or more \r appended to it. Which smells of windows.
+
+However, the bug I am seeing makes `git annex get` print out the uuids of the remotes without the description it normally shows (because these are not really the same uuids due to the \r). In the example above, this is not the case; the description is shown. I don't understand that.
+"""]]
diff --git a/doc/bugs/fails_to_get_content_from_bare_repo_on_windows/comment_3_850a917a3d1ae50ba8f0e81a64168268._comment b/doc/bugs/fails_to_get_content_from_bare_repo_on_windows/comment_3_850a917a3d1ae50ba8f0e81a64168268._comment
new file mode 100644
index 000000000..d44825324
--- /dev/null
+++ b/doc/bugs/fails_to_get_content_from_bare_repo_on_windows/comment_3_850a917a3d1ae50ba8f0e81a64168268._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 3"
+ date="2014-06-05T19:06:36Z"
+ content="""
+The bug I was seeing with the \r was a recent reversion caused by [[!commit 95ca3bb02215744f3dbcaebd48844e1909c577f3]]. So, not related to original bug report. (And fixed now!)
+
+I can now reproduce the original bug, including seeing the description of the bare repo when it says it cannot get the file from it.
+"""]]
diff --git a/doc/bugs/fails_to_get_content_from_bare_repo_on_windows/comment_4_7c4660ea44178cba7f7a4cc5f1bebae4._comment b/doc/bugs/fails_to_get_content_from_bare_repo_on_windows/comment_4_7c4660ea44178cba7f7a4cc5f1bebae4._comment
new file mode 100644
index 000000000..5d8b4d978
--- /dev/null
+++ b/doc/bugs/fails_to_get_content_from_bare_repo_on_windows/comment_4_7c4660ea44178cba7f7a4cc5f1bebae4._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 4"
+ date="2014-06-05T19:20:20Z"
+ content="""
+Analysis: inAnnexSafe on Windows simply does not have indirect mode checking enabled. Bare repositories use indirect mode (essentially; same storage). So it fails.
+"""]]
diff --git a/doc/bugs/fails_to_handle_lot_of_files.mdwn b/doc/bugs/fails_to_handle_lot_of_files.mdwn
deleted file mode 100644
index 470a5180f..000000000
--- a/doc/bugs/fails_to_handle_lot_of_files.mdwn
+++ /dev/null
@@ -1,445 +0,0 @@
- git-annex version: 3.20111011
- local repository version: 3
- default repository version: 3
- supported repository versions: 3
- upgrade supported from repository versions: 0 1 2
-
-I just created a new remote on a USB drive and wanted to copy my files over. git-annex wasn't too happy about that ;)
-I included a few OK transfers as there was an error before git-annex ran into a wall. As I could easily access that temp file after it aborted, I suspect something went wrong internally before git-annex started to throw those errors.
-
-Please note the "_n TIMES_" comments. It's how often I got the same error message...
-
-
-
- git annex copy . --to USB --fast
-
- copy redacted.JPG (to USB...)
- redacted
- 4035668 100% 77.91MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4036374 bytes received 31 bytes 8072810.00 bytes/sec
- total size is 4035668 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 18002094 100% 74.19MB/s 0:00:00 (xfer#1, to-check=0/1)
- WARNING: redacted failed verification -- update retained (will try again).
- redacted
- 18002094 100% 19.60MB/s 0:00:00 (xfer#2, to-check=0/1)
- rsync: open "copy_target/.git/annex/tmp/redacted_E13" failed: Permission denied (13)
-
- sent 36008841 bytes received 52 bytes 24005928.67 bytes/sec
- total size is 18002094 speedup is 0.50
- rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1070) [sender=3.0.8]
-
- rsync failed -- run git annex again to resume file transfer
- failed
- copy redacted.JPG (to USB...)
- redacted
- 3687111 100% 39.16MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 3687773 bytes received 31 bytes 2458536.00 bytes/sec
- total size is 3687111 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 17877177 100% 79.15MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 17879573 bytes received 31 bytes 11919736.00 bytes/sec
- total size is 17877177 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 3694921 100% 40.14MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 3695583 bytes received 31 bytes 2463742.67 bytes/sec
- total size is 3694921 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 17875448 100% 71.20MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 17877844 bytes received 31 bytes 11918583.33 bytes/sec
- total size is 17875448 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 3833377 100% 62.49MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 3834055 bytes received 31 bytes 2556057.33 bytes/sec
- total size is 3833377 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 17938200 100% 65.43MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 17940604 bytes received 31 bytes 11960423.33 bytes/sec
- total size is 17938200 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 4512557 100% 83.77MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4513319 bytes received 31 bytes 3008900.00 bytes/sec
- total size is 4512557 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 18001641 100% 76.16MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 18004053 bytes received 31 bytes 12002722.67 bytes/sec
- total size is 18001641 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 4394272 100% 50.11MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4395022 bytes received 31 bytes 8790106.00 bytes/sec
- total size is 4394272 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 18095781 100% 73.30MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 18098205 bytes received 31 bytes 12065490.67 bytes/sec
- total size is 18095781 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 4683795 100% 65.23MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4684577 bytes received 31 bytes 9369216.00 bytes/sec
- total size is 4683795 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 18172801 100% 74.25MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 18175233 bytes received 31 bytes 36350528.00 bytes/sec
- total size is 18172801 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 4486231 100% 77.22MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4486989 bytes received 31 bytes 8974040.00 bytes/sec
- total size is 4486231 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 17860427 100% 68.56MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 17862823 bytes received 31 bytes 35725708.00 bytes/sec
- total size is 17860427 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 4499768 100% 36.41MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4500530 bytes received 31 bytes 9001122.00 bytes/sec
- total size is 4499768 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 17840132 100% 74.48MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 17842524 bytes received 31 bytes 11895036.67 bytes/sec
- total size is 17840132 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 4358032 100% 75.00MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4358774 bytes received 31 bytes 8717610.00 bytes/sec
- total size is 4358032 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 18084753 100% 61.48MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 18087173 bytes received 31 bytes 12058136.00 bytes/sec
- total size is 18084753 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 4270213 100% 68.49MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4270947 bytes received 31 bytes 2847318.67 bytes/sec
- total size is 4270213 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 17661246 100% 68.34MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 17663614 bytes received 31 bytes 11775763.33 bytes/sec
- total size is 17661246 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 4538305 100% 63.19MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4539071 bytes received 31 bytes 9078204.00 bytes/sec
- total size is 4538305 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 18672466 100% 68.90MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 18674958 bytes received 31 bytes 12449992.67 bytes/sec
- total size is 18672466 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 4453445 100% 73.96MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4454199 bytes received 31 bytes 8908460.00 bytes/sec
- total size is 4453445 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 18495494 100% 59.28MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 18497966 bytes received 31 bytes 12331998.00 bytes/sec
- total size is 18495494 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 4255858 100% 70.66MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4256588 bytes received 31 bytes 1702647.60 bytes/sec
- total size is 4255858 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 18376531 100% 69.15MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 18378987 bytes received 31 bytes 36758036.00 bytes/sec
- total size is 18376531 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 4013365 100% 48.67MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4014067 bytes received 31 bytes 8028196.00 bytes/sec
- total size is 4013365 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 17606341 100% 51.73MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 17608705 bytes received 31 bytes 11739157.33 bytes/sec
- total size is 17606341 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 4179869 100% 74.62MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4180591 bytes received 31 bytes 8361244.00 bytes/sec
- total size is 4179869 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 18382569 100% 67.05MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 18385025 bytes received 31 bytes 12256704.00 bytes/sec
- total size is 18382569 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 4318363 100% 44.91MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4319101 bytes received 31 bytes 8638264.00 bytes/sec
- total size is 4318363 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 17715958 100% 72.69MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 17718334 bytes received 31 bytes 11812243.33 bytes/sec
- total size is 17715958 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 4241893 100% 65.81MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4242623 bytes received 31 bytes 8485308.00 bytes/sec
- total size is 4241893 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 17717287 100% 71.77MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 17719663 bytes received 31 bytes 11813129.33 bytes/sec
- total size is 17717287 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 4488380 100% 49.99MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4489138 bytes received 31 bytes 2992779.33 bytes/sec
- total size is 4488380 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 17770208 100% 38.80MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 17772592 bytes received 31 bytes 11848415.33 bytes/sec
- total size is 17770208 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 4603958 100% 76.48MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4604732 bytes received 31 bytes 9209526.00 bytes/sec
- total size is 4603958 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 18744380 100% 74.66MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 18746884 bytes received 31 bytes 12497943.33 bytes/sec
- total size is 18744380 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 4592098 100% 79.06MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4592872 bytes received 31 bytes 3061935.33 bytes/sec
- total size is 4592098 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 18746205 100% 43.00MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 18748709 bytes received 31 bytes 12499160.00 bytes/sec
- total size is 18746205 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 7493353 100% 80.85MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 7494479 bytes received 31 bytes 14989020.00 bytes/sec
- total size is 7493353 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 19496768 100% 81.77MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 19499360 bytes received 31 bytes 12999594.00 bytes/sec
- total size is 19496768 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 5462482 100% 82.19MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 5463360 bytes received 31 bytes 10926782.00 bytes/sec
- total size is 5462482 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 19669815 100% 80.37MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 19672431 bytes received 31 bytes 13114974.67 bytes/sec
- total size is 19669815 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 5449487 100% 57.40MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 5450365 bytes received 31 bytes 3633597.33 bytes/sec
- total size is 5449487 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 19633259 100% 74.18MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 19635871 bytes received 31 bytes 13090601.33 bytes/sec
- total size is 19633259 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 5392184 100% 62.33MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 5393054 bytes received 31 bytes 3595390.00 bytes/sec
- total size is 5392184 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 18912104 100% 65.00MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 18914628 bytes received 31 bytes 12609772.67 bytes/sec
- total size is 18912104 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 4869300 100% 80.92MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4870106 bytes received 31 bytes 9740274.00 bytes/sec
- total size is 4869300 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 20178932 100% 68.13MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 20181608 bytes received 31 bytes 13454426.00 bytes/sec
- total size is 20178932 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 4995425 100% 86.05MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 4996247 bytes received 31 bytes 9992556.00 bytes/sec
- total size is 4995425 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 19970679 100% 76.36MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 19973331 bytes received 31 bytes 13315574.67 bytes/sec
- total size is 19970679 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 7905795 100% 66.45MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 7906973 bytes received 31 bytes 15814008.00 bytes/sec
- total size is 7905795 speedup is 1.00
- ok
- copy redacted.NEF (to USB...)
- redacted
- 21234069 100% 78.07MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 21236877 bytes received 31 bytes 8494763.20 bytes/sec
- total size is 21234069 speedup is 1.00
- ok
- copy redacted.JPG (to USB...)
- redacted
- 7963979 100% 62.51MB/s 0:00:00 (xfer#1, to-check=0/1)
-
- sent 7965165 bytes received 31 bytes 5310130.67 bytes/sec
- total size is 7963979 speedup is 1.00
- git ["--git-dir=copy_target/.git","--work-tree=copy_target","update-index","-z","--index-info"]: Error in fork: forkProcess: resource exhausted (Resource temporarily unavailable)
-
- git-annex: user error (git ["--git-dir=copy_target/.git","--work-tree=copy_target","update-index","-z","--index-info"]: Error in fork: forkProcess: resource exhausted (Resource temporarily unavailable))
- failed
- _506 TIMES_ (user error (Error in fork: forkProcess: resource exhausted (Resource temporarily unavailable))) failed
- _11 TIMES_ copy foo (createPipe: resource exhausted (Too many open files)) failed
- _2 TIMES_ (user error (Error in fork: forkProcess: resource exhausted (Resource temporarily unavailable))) failed
- _8574 TIMES_: copy foo (createPipe: resource exhausted (Too many open files)) failed
- git-annex: createPipe: resource exhausted (Too many open files)
- failed
- git-annex: 9101 failed
-
- % ls copy_target/.git/annex/tmp/redacted_E13 copy_target/.git/annex/tmp/SHA512E-redacted_E13 # works
- % find source -type l | wc -l
- 13554
- % find copy_target -type l | wc -l
- 13554
- % find copy_target/.git/annex/objects -type f | wc -l
- 4455
- % find source -type f | wc -l
- 13554
-
-> Fixed unreaped process leak.
-> (This has nothing to do with NTFS). Ran test with 10k files
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/fails_to_handle_lot_of_files/comment_1_09d8e4e66d8273fab611bd29e82dc7fc._comment b/doc/bugs/fails_to_handle_lot_of_files/comment_1_09d8e4e66d8273fab611bd29e82dc7fc._comment
deleted file mode 100644
index 587b1fd97..000000000
--- a/doc/bugs/fails_to_handle_lot_of_files/comment_1_09d8e4e66d8273fab611bd29e82dc7fc._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 1"
- date="2011-10-26T17:16:52Z"
- content="""
-After another run, i am at 8909 files in the remote, now.
-"""]]
diff --git a/doc/bugs/fails_to_handle_lot_of_files/comment_2_fd2ec05f4b5a7a6ae6bd9f5dbc3156de._comment b/doc/bugs/fails_to_handle_lot_of_files/comment_2_fd2ec05f4b5a7a6ae6bd9f5dbc3156de._comment
deleted file mode 100644
index 8e83fc19f..000000000
--- a/doc/bugs/fails_to_handle_lot_of_files/comment_2_fd2ec05f4b5a7a6ae6bd9f5dbc3156de._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 2"
- date="2011-10-26T18:22:34Z"
- content="""
-In case this matters, I just realized that this disk has been formatted with NTFS instead of a sane FS.
-"""]]
diff --git a/doc/bugs/fatal:_Cannot_handle_files_this_big.mdwn b/doc/bugs/fatal:_Cannot_handle_files_this_big.mdwn
new file mode 100644
index 000000000..f4e8b7f91
--- /dev/null
+++ b/doc/bugs/fatal:_Cannot_handle_files_this_big.mdwn
@@ -0,0 +1,98 @@
+### Please describe the problem.
+
+Syncing a 20GB video file causes this error. I have no problems with 8GB files.
+
+### What steps will reproduce the problem?
+
+See additional info
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex version: 5.20140920-gb0c4300
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 2 3 4
+
+git version 1.9.4.msysgit.2
+
+Windows 7 64bit
+
+### Please provide any additional information below.
+
+[[!format sh """
+
+Z:\>git clone L:\repositories\bigFilesTest.git-annex
+Cloning into 'bigFilesTest.git-annex'...
+done.
+
+Z:\>cd bigFilesTest.git-annex
+
+Z:\bigFilesTest.git-annex>git annex init "cloned"
+init cloned
+ Detected a filesystem without fifo support.
+
+ Disabling ssh connection caching.
+
+ Detected a crippled filesystem.
+
+ Enabling direct mode.
+ok
+(Recording state in git...)
+
+Z:\bigFilesTest.git-annex>git annex add test20GBVideo.mkv
+add test20GBVideo.mkv ok
+(Recording state in git...)
+
+Z:\bigFilesTest.git-annex>git annex sync --debug
+[2014-10-18 15:39:02 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","show-ref","git-annex"]
+[2014-10-18 15:39:02 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","show-ref","--hash","refs/heads/git-annex"]
+[2014-10-18 15:39:02 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","log","refs/heads/git-annex..54de336a3423f7f8f72f897effd29f952534c24e","-n1","--pretty=%H"]
+[2014-10-18 15:39:02 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","log","refs/heads/git-annex..53cfcf38b40247b3992b6007336b2c915a945ad4","-n1","--pretty=%H"]
+[2014-10-18 15:39:02 Mitteleuropäische Sommerzeit] chat: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","cat-file","--batch"]
+[2014-10-18 15:39:02 Mitteleuropäische Sommerzeit] read: git ["config","--null","--list"]
+commit [2014-10-18 15:39:02 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","ls-files","--stage","-z","--others","--exclude-standard","--","Z:\\bigFilesTest.git-annex"]
+[2014-10-18 15:39:02 Mitteleuropäische Sommerzeit] chat: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","cat-file","--batch"]
+(Recording state in git...)
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","add","-f","test20GBVideo.mkv"]
+fatal: Cannot handle files this big
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","show-ref","--head"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","diff-index","-z","--raw","--no-renames","-l0","--cached","HEAD"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","symbolic-ref","HEAD"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","show-ref","--hash","refs/heads/annex/direct/master"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","write-tree"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","rev-parse","b12e8477242df97be13c1395db143f860ce8e895:"]
+ok
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","symbolic-ref","HEAD"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","show-ref","refs/heads/annex/direct/master"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","show-ref","--verify","-q","refs/heads/synced/master"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","log","refs/heads/annex/direct/master..refs/heads/synced/master","-n1","--pretty=%H"]
+pull origin
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","fetch","origin"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","show-ref","--verify","-q","refs/remotes/origin/annex/direct/master"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","show-ref","--verify","-q","refs/remotes/origin/synced/master"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","log","refs/heads/synced/master..refs/remotes/origin/synced/master","-n1","--pretty=%H"]
+ok
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","show-ref","git-annex"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","show-ref","--hash","refs/heads/git-annex"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","log","refs/heads/git-annex..54de336a3423f7f8f72f897effd29f952534c24e","-n1","--pretty=%H"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","log","refs/heads/git-annex..53cfcf38b40247b3992b6007336b2c915a945ad4","-n1","--pretty=%H"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","branch","-f","synced/master"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","branch","-f","master"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","show-ref","--verify","-q","refs/remotes/origin/synced/master"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","log","refs/remotes/origin/synced/master..refs/heads/synced/master","-n1","--pretty=%H"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","show-ref","--verify","-q","refs/remotes/origin/git-annex"]
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","log","refs/remotes/origin/git-annex..git-annex","-n1","--pretty=%H"]
+push origin
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","push","origin","+git-annex:synced/git-annex","annex/direct/master:synced/master"]
+Everything up-to-date
+[2014-10-18 15:39:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=Z:\\bigFilesTest.git-annex\\.git","--work-tree=Z:\\bigFilesTest.git-annex","-c","core.bare=false","push","origin","master"]
+ok
+
+
+
+"""]]
+
+> provisionally [[done]]. --[[Joey]]
diff --git a/doc/bugs/fatal:_Cannot_handle_files_this_big/comment_1_e4f03a86a7adc6c5421d1e70c37659e0._comment b/doc/bugs/fatal:_Cannot_handle_files_this_big/comment_1_e4f03a86a7adc6c5421d1e70c37659e0._comment
new file mode 100644
index 000000000..b580cdbe6
--- /dev/null
+++ b/doc/bugs/fatal:_Cannot_handle_files_this_big/comment_1_e4f03a86a7adc6c5421d1e70c37659e0._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-10T17:29:44Z"
+ content="""
+I recently fixed a bug that would
+likewise cause git-annex to fail on windows with a large file, although I
+didn't see it failing with this message.
+
+There's a good chance that git-annex version 5.20150205 might fix this
+problem.
+
+I was able to successfully use git-annex with a 6 gb file, after the fixes.
+
+Please check, and followup. I'm closing this bug provisionally in the
+meantime.
+"""]]
diff --git a/doc/bugs/fatal:_empty_ident_name.mdwn b/doc/bugs/fatal:_empty_ident_name.mdwn
deleted file mode 100644
index 241477287..000000000
--- a/doc/bugs/fatal:_empty_ident_name.mdwn
+++ /dev/null
@@ -1,51 +0,0 @@
-**What steps will reproduce the problem?**
-
- stone@skynet ~/annex $ git init
- Initialized empty Git repository in /home/stone/annex/.git/
- stone@skynet ~/annex $ git annex init "work"
- init work
- *** Please tell me who you are.
-
- Run
-
- git config --global user.email "you@example.com"
- git config --global user.name "Your Name"
-
- to set your account's default identity.
- Omit --global to set the identity only in this repository.
-
- fatal: empty ident name (for <stone@skynet>) not allowed
- git-annex: git ["--git-dir=/home/stone/annex/.git","--work-tree=/home/stone/annex","commit-tree","4b825dc652cb6eb9a060e64bf8d69288fbee4904"] exited 128
- stone@skynet ~/annex $ git config -l
- user.email=stone@nospam.hu
- user.name=Stone
- core.editor=nano
- color.ui=auto
- core.repositoryformatversion=0
- core.filemode=true
- core.bare=false
- core.logallrefupdates=true
- annex.uuid=499fb545-0b98-4bfc-816c-fb3704f3aaa0
- stone@skynet ~/annex $ cat ~/.gitconfig
- [user]
- email = stone@nospam.hu
- name = Stone
- [core]
- editor = nano
- [color]
- ui = auto
- stone@skynet ~/annex $
-
-**What is the expected output? What do you see instead?**
-
-
-**What version of git-annex are you using? On what operating system?**
-
-commit 56c037c69e75def74d6ea90de8aa8a1954c52178 Arch Linux
-
-**Please provide any additional information below.**
-
-> [[done]] by adding name to the user, in /etc/passwd. --Stone
-
->> Actually, [[done]] by avoiding clobbering HOME when running some git
->> commands. --[[Joey]]
diff --git a/doc/bugs/fatal:_empty_ident_name/comment_1_ceae87308fb75a1f79c7c8d63ec47226._comment b/doc/bugs/fatal:_empty_ident_name/comment_1_ceae87308fb75a1f79c7c8d63ec47226._comment
deleted file mode 100644
index 798658a46..000000000
--- a/doc/bugs/fatal:_empty_ident_name/comment_1_ceae87308fb75a1f79c7c8d63ec47226._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.246.16"
- subject="comment 1"
- date="2012-08-31T15:04:09Z"
- content="""
-This is an error message from git. [Git faq](https://git.wiki.kernel.org/index.php/GitFaq#Git_commit_is_dying_telling_me_.22fatal:_empty_ident_.3Cuser.40myhost.3E_not_allowed.22.2C_what.27s_wrong.3F). I don't understand why git is doing it given the configuration shown, but I suppose it would do the same thing if you run git commit by hand.
-"""]]
diff --git a/doc/bugs/fatal:_empty_ident_name/comment_2_68832ee3e0e7244ce62bccabe2e52630._comment b/doc/bugs/fatal:_empty_ident_name/comment_2_68832ee3e0e7244ce62bccabe2e52630._comment
deleted file mode 100644
index 934fcdfaf..000000000
--- a/doc/bugs/fatal:_empty_ident_name/comment_2_68832ee3e0e7244ce62bccabe2e52630._comment
+++ /dev/null
@@ -1,25 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl1yBP_JDsO1TWSC1usoHXpfDRU01u_GXY"
- nickname="Péter Károly"
- subject="comment 2"
- date="2012-08-31T18:30:15Z"
- content="""
-I use git on the same machine nearly every day, it does not complain on commit.
-
-(On the same session after \"git annex init\" failed...)
-
- stone@skynet ~/annex $ echo stone > bu
- stone@skynet ~/annex $ git add bu
- stone@skynet ~/annex $ git commit -a
- [master (root-commit) ae5d41f] ds
- 1 file changed, 1 insertion(+)
- create mode 100644 bu
- stone@skynet ~/annex $ git log
- commit ae5d41fdd0b7082740633cf7931bb5a07be0fc5e
- Author: Stone <stone@nospam.hu>
- Date: Fri Aug 31 20:26:45 2012 +0200
-
- ds
- stone@skynet ~/annex $
-
-"""]]
diff --git a/doc/bugs/fatal:_empty_ident_name/comment_3_ed31ad316747343d7730e4c2d7dacd24._comment b/doc/bugs/fatal:_empty_ident_name/comment_3_ed31ad316747343d7730e4c2d7dacd24._comment
deleted file mode 100644
index ff7f39e44..000000000
--- a/doc/bugs/fatal:_empty_ident_name/comment_3_ed31ad316747343d7730e4c2d7dacd24._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.246.16"
- subject="comment 3"
- date="2012-08-31T18:52:53Z"
- content="""
-Why don't you try the identical command that git-annex is running that fails:
-
-`git --git-dir=/home/stone/annex/.git --work-tree=/home/stone/annex commit-tree 4b825dc652cb6eb9a060e64bf8d69288fbee4904`
-"""]]
diff --git a/doc/bugs/fatal:_empty_ident_name/comment_4_b812d6f30e8a866bce7260a9ee3218e3._comment b/doc/bugs/fatal:_empty_ident_name/comment_4_b812d6f30e8a866bce7260a9ee3218e3._comment
deleted file mode 100644
index 9e8a1900e..000000000
--- a/doc/bugs/fatal:_empty_ident_name/comment_4_b812d6f30e8a866bce7260a9ee3218e3._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl1yBP_JDsO1TWSC1usoHXpfDRU01u_GXY"
- nickname="Péter Károly"
- subject="comment 4"
- date="2012-09-01T15:05:52Z"
- content="""
-Finally I managed to get it working.
-
-My use on the computer didn't had name, so the 5th colum of my /etc/password file was empty. After I filled in my name everything worked like charm.
-
-Interesting that not my user's name from /etc/passwd get into the git log but the one that was in my ~/.gitconfig.
-
-"""]]
diff --git a/doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__.mdwn b/doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__.mdwn
deleted file mode 100644
index f81abb9d5..000000000
--- a/doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__.mdwn
+++ /dev/null
@@ -1,52 +0,0 @@
-### Please describe the problem.
-git annex status returns:
-
-annexed files in working tree: fatal: git ls-files: cannot generate relative filenames containing '..'
-
-There are unlocked files mixed with locked (symlinked) throughout the repository after a commit.
-Perhaps my repo is in an inconsistent state?
-
-### What steps will reproduce the problem?
-Run git annex status
-
-### What version of git-annex are you using? On what operating system?
-git-annex version: 4.20131106. Redhat EL6 running on KVM.
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-[username@box pnt]$ git annex status
-repository mode: indirect
-trusted repositories: 0
-semitrusted repositories: 2
- 00000000-0000-0000-0000-000000000001 -- web
- 1ff41d2d-02bd-4795-88b9-bf3fbbeabef7 -- here
-untrusted repositories: 0
-transfers in progress: none
-available local disk space: 36.86 terabytes (+1 megabyte reserved)
-local annex keys: 35750
-local annex size: 251.11 gigabytes
-annexed files in working tree: fatal: git ls-files: cannot generate relative filenames containing '..'
-0
-size of annexed files in working tree: 0 bytes
-bloom filter size: 16 mebibytes (7.2% full)
-backend usage:
- SHA256: 18471
- SHA256E: 17279
-[username@box pnt]$ git annex version
-git-annex version: 4.20131106
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS Feeds Quvi TDFA CryptoHash
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
-remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
-local repository version: 3
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-
-# End of transcript or log.
-"""]]
-
-> Added note about git version to from scratch installation instructions.
-> Debian package already depends on a newer version. [[done]] --[[Joey]]
diff --git a/doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__/comment_1_8a4045634bffc29c8147056096b7089d._comment b/doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__/comment_1_8a4045634bffc29c8147056096b7089d._comment
deleted file mode 100644
index d5bda1344..000000000
--- a/doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__/comment_1_8a4045634bffc29c8147056096b7089d._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.87"
- subject="comment 1"
- date="2013-12-16T16:05:38Z"
- content="""
-Do you get the same error message if you run:
-
-git -c core.bare=false ls-files --cached --others
-
-What version of git? I cannot find that error message anywhere in the current version.
-
-"""]]
diff --git a/doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__/comment_2_a1539aaec74074b4667ac27cfcfcccd6._comment b/doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__/comment_2_a1539aaec74074b4667ac27cfcfcccd6._comment
deleted file mode 100644
index a73bc78e3..000000000
--- a/doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__/comment_2_a1539aaec74074b4667ac27cfcfcccd6._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnWaZGX4m5Oic-vvIKUJHZLrY5W1G7mtQ4"
- nickname="Andrew"
- subject="comment 2"
- date="2013-12-16T16:11:24Z"
- content="""
-[username@box pnt]$ git -c core.bare=false ls-files --cached --others
-Unknown option: -c
-usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path]
- [-p|--paginate|--no-pager] [--no-replace-objects]
- [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE]
- [--help] COMMAND [ARGS]
-
-[username@box pnt]$ git --version
-git version 1.7.1
-"""]]
diff --git a/doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__/comment_3_d252f39ddb9c9c14784c85a8b850a4ec._comment b/doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__/comment_3_d252f39ddb9c9c14784c85a8b850a4ec._comment
deleted file mode 100644
index 33514aa1c..000000000
--- a/doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__/comment_3_d252f39ddb9c9c14784c85a8b850a4ec._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.87"
- subject="comment 3"
- date="2013-12-16T16:27:28Z"
- content="""
-You can leave off the -c core.bare=false, if your git does not support it.
-
-That is an exceptionally old version of git. I'm sure it's the problem, so you should upgrade.
-"""]]
diff --git a/doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__/comment_4_eb07c84dc0b15b68c99d0ef4144f82f5._comment b/doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__/comment_4_eb07c84dc0b15b68c99d0ef4144f82f5._comment
deleted file mode 100644
index 4791d9dc4..000000000
--- a/doc/bugs/fatal:_git_ls-files:_cannot_generate_relative_filenames_containing___39__..__39__/comment_4_eb07c84dc0b15b68c99d0ef4144f82f5._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnWaZGX4m5Oic-vvIKUJHZLrY5W1G7mtQ4"
- nickname="Andrew"
- subject="comment 4"
- date="2013-12-16T20:16:26Z"
- content="""
-Built and installed Git 1.8.5 from source and the problem went away.
-
-Thanks!
-"""]]
diff --git a/doc/bugs/feature_request:_addhash.mdwn b/doc/bugs/feature_request:_addhash.mdwn
deleted file mode 100644
index e818a3327..000000000
--- a/doc/bugs/feature_request:_addhash.mdwn
+++ /dev/null
@@ -1,29 +0,0 @@
-### Use case 1
-
-I have a big repo using a SHA256E back-end. Along comes a new shiny SKEIN512E back-end and I would like to transition to using that, because it's faster and moves from ridiculously to ludicrously low risk of collisions.
-
-I can set `.gitattributes` to use the new back-end for any new files added, but then I when I import some arbitrary mix of existing and new files to the repo it will not deduplicate any more, it will add all the files under the new hash scheme.
-
-### Use case 2
-
-I have a big repo of files I have added using `addurl --fast`. I download the files, and they are in the repo.
-
- - I cannot verify later that none of them have been damaged.
- - If I come across an offline collection of some of the files, I cannot easily get them into the annex by a simple import.
-
-### Workaround
-
-In both these cases, what I can do is <del>unlock (maybe?) or unannex (definitely) all of the files, and then re-add them using the new hash</del> <em>use `migrate` to relink the files using the new scheme</em>. In both use cases this means I now risk having duplicates in various clones of the repo, and would have to clean them up with `drop-unused` -- after first having re-copied them from a repo that has them under the new hash <em>or `migrate`d them in each clone using the pre-migration commit; Either way is problematic for special remotes, in particular glacier</em>. I also lose the continuity of the history of that object.
-
-<del>In use case 2 I also lose the URLs of the files and would have to re-add them using `addurl`.</del> <em>This is probably not true when using `migrate`.</em>
-
-... which brings me to the proposed feature.
-
-### addhash
-
-Symmetrical to `addurl`, which in one form can take an existing hashed (or URL-sourced) file and add an URL source to it, `addhash` can take an existing URL-sourced (or hashed) file and add a hash reference to it (given that the file is in the annex so that the hash may be calculated) -- an alias under which it may also be identified, in addition to the existing URL or hash.
-
- - Any file added to the annex after `addhash` will use the symlink name of the original hash if their hash matches the `addhash`ed one.
- - An `fsck` run will use one of the available hashes to verify the integrity of the file, maybe according to some internal order of preference, or possibly a configurable one.
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/feature_request:_addhash/comment_1_064e963adb6834813380fd836bb58566._comment b/doc/bugs/feature_request:_addhash/comment_1_064e963adb6834813380fd836bb58566._comment
deleted file mode 100644
index 60757d7ba..000000000
--- a/doc/bugs/feature_request:_addhash/comment_1_064e963adb6834813380fd836bb58566._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.87"
- subject="comment 1"
- date="2013-12-15T19:45:25Z"
- content="""
-This exists, it's `git annex migrate`
-"""]]
diff --git a/doc/bugs/feature_request:_addhash/comment_2_7b712786c580dd1ca24479664c31eed6._comment b/doc/bugs/feature_request:_addhash/comment_2_7b712786c580dd1ca24479664c31eed6._comment
deleted file mode 100644
index fde99e889..000000000
--- a/doc/bugs/feature_request:_addhash/comment_2_7b712786c580dd1ca24479664c31eed6._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://id.clacke.se/"
- nickname="clacke"
- subject="Re: git annex migrate"
- date="2013-12-17T22:04:09Z"
- content="""
-`migrate` replaces the manual work described in \"Workaround\", but has the drawback described in its own manual -- the content is now available under two keys in the annex. This proposal adds one layer of abstraction to avoid that duplication. It's entirely possible that this layer of abstraction is a bad idea with horrible complexity and/or performance issues, but I wanted to put this idea out there.
-"""]]
diff --git a/doc/bugs/file_access__47__locking_issues_with_the_assitant.mdwn b/doc/bugs/file_access__47__locking_issues_with_the_assitant.mdwn
deleted file mode 100644
index 701536844..000000000
--- a/doc/bugs/file_access__47__locking_issues_with_the_assitant.mdwn
+++ /dev/null
@@ -1,54 +0,0 @@
-### Please describe the problem.
-
-I have a latex file which takes two passes to build. It is in a directory managed by git-annex assistant and configured to use a remote SSH server as a transfer back-end.
-
-If I use latexmk to build the file with the git-assistant on then the build fails. If I turn off the git-assistant it succeeds.
-
-### What steps will reproduce the problem?
-
-[[!format sh """
-~/current/www.cmt.mhs.man.ac.uk $ git-annex assistant --autostart
-~/current/www.cmt.mhs.man.ac.uk $ latexmk -c admin_guide_cmt.tex
-~/current/www.cmt.mhs.man.ac.uk $ latexmk -pdf -silent admin_guide_cmt.tex
-
-Latexmk: Run number 1 of rule 'pdflatex'
-This is pdfTeX, Version 3.1415926-2.5-1.40.13 (TeX Live 2013/dev)
- restricted \write18 enabled.
-entering extended mode
-print() on closed filehandle GEN32 at /usr/bin/latexmk line 4742.
-print() on closed filehandle GEN32 at /usr/bin/latexmk line 4759.
-print() on closed filehandle GEN32 at /usr/bin/latexmk line 4761.
-"""]]
-
-Dropping the silent option shows that the admin_guide_cmt.aux file is not available for writing - despite being created. I suspect that the assistant is somehow locking the file, or using it between passes of latex. If the auxillary files all ready exist then there is no problem (i.e., don't do the cleanup via latexmk -c)
-
-Disabling the assistant makes everything work. Latexmk is doing something odd - I can't replicate with the native latex build commands.
-
-### What version of git-annex are you using? On what operating system?
-
-Latest version, via cabal, on Fedora 18.
-
-### Please provide any additional information below.
-
-Nothing appears wrong with the assistant transfer wise.
-[[!format sh """
-add www.cmt.mhs.man.ac.uk/admin_guide_cmt.aux (checksum...) ok
-add www.cmt.mhs.man.ac.uk/admin_guide_cmt.fdb_latexmk (checksum...) [2013-06-11 14:42:17 BST] Committer: Committing changes to g
-it
-admin_guide_cmt.fdb_latexmk
- 264 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 372 bytes received 42 bytes 828.00 bytes/sec
-total size is 264 speedup is 0.64
-[2013-06-11 14:42:17 BST] Transferrer: Uploaded admin_gui..b_latexmk
-[2013-06-11 14:42:18 BST] Committer: Adding 3 files
-ok
-(Recording state in git...)
-add www.cmt.mhs.man.ac.uk/admin_guide_cmt.fls (checksum...) ok
-add www.cmt.mhs.man.ac.uk/admin_guide_cmt.log (checksum...) ok
-
-# End of transcript or log.
-"""]]
-
-> Ok, I was able to remove the write bit fiddling in direct mode. [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_10_fadf06f5ab34e36ab130536ec55afc8e._comment b/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_10_fadf06f5ab34e36ab130536ec55afc8e._comment
deleted file mode 100644
index 79cfafa17..000000000
--- a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_10_fadf06f5ab34e36ab130536ec55afc8e._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnXybLxkPMYpP3yw4b_I6IdC3cKTD-xEdU"
- nickname="Matt"
- subject="comment 10"
- date="2013-06-11T19:27:04Z"
- content="""
-First off, I really like git-annex :-)
-
-Secondly, if I make the change as suggested, what are the consequences? When you add files to the annex back-end it may still be open and being written to? But then the next hash-function will reveal the differences of an incomplete upload and fix things.... But it may be too late as it's sent to other repositories...hmmmmm...I guess I want to know if I do this will my data be safe? I suspect not.
-
-Perhaps the race condition could be mitigated against (not solved) by simply introducing a slight delay? If only 5 secs it will catch many of these cases. And longer would prevent git committing files that I save, realize I've slightly got wrong, tweak and save again.
-"""]]
diff --git a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_11_4a337f7b1140c45e5dd660b40202f696._comment b/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_11_4a337f7b1140c45e5dd660b40202f696._comment
deleted file mode 100644
index 99787d4c6..000000000
--- a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_11_4a337f7b1140c45e5dd660b40202f696._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 11"
- date="2013-06-12T17:03:07Z"
- content="""
-There's an annex.delayadd git config setting you can use that makes it wait a specified number of seconds before committing. So it would indeed be a workaround to set: `git config annex.delayadd 2`
-
-However, I'm pretty confident I can entirely avoid this problem, safely.
-"""]]
diff --git a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_1_05e1398e78218ced9c2da6a2510949e8._comment b/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_1_05e1398e78218ced9c2da6a2510949e8._comment
deleted file mode 100644
index 8adb71b38..000000000
--- a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_1_05e1398e78218ced9c2da6a2510949e8._comment
+++ /dev/null
@@ -1,21 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnXybLxkPMYpP3yw4b_I6IdC3cKTD-xEdU"
- nickname="Matt"
- subject="comment 1"
- date="2013-06-11T13:59:53Z"
- content="""
-Here's a sample latex document
-
- \documentclass[twocolumn,a4paper]{article}
- \title{Test}
- \begin{document}
- \maketitle
- \begin{abstract}
- Test
- \end{abstract}
-
- Some unresolved refs for two passes:
- \ref{one:a} and \ref{two:b}
-
- \end{document}
-"""]]
diff --git a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_2_9226f0adf091154c0d8a08b340b71869._comment b/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_2_9226f0adf091154c0d8a08b340b71869._comment
deleted file mode 100644
index c30d751a8..000000000
--- a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_2_9226f0adf091154c0d8a08b340b71869._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnXybLxkPMYpP3yw4b_I6IdC3cKTD-xEdU"
- nickname="Matt"
- subject="comment 2"
- date="2013-06-11T14:13:22Z"
- content="""
-My temporary work around so that I may continue to use the assistant is to touch an appropriate test.aux before running latexmk.
-"""]]
diff --git a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_3_44d3e2096b7d45a1062222bee83a346d._comment b/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_3_44d3e2096b7d45a1062222bee83a346d._comment
deleted file mode 100644
index d12a09421..000000000
--- a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_3_44d3e2096b7d45a1062222bee83a346d._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnXybLxkPMYpP3yw4b_I6IdC3cKTD-xEdU"
- nickname="Matt"
- subject="comment 3"
- date="2013-06-11T14:23:50Z"
- content="""
-FYI - I replicated this bug on an OSX system using the latest pre-packaged build of git-annex and TexLive.
-"""]]
diff --git a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_4_f2e1d188b7b2d2daf0d832c59a68583e._comment b/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_4_f2e1d188b7b2d2daf0d832c59a68583e._comment
deleted file mode 100644
index 438036e70..000000000
--- a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_4_f2e1d188b7b2d2daf0d832c59a68583e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 4"
- date="2013-06-11T14:42:09Z"
- content="""
-Are you using direct mode in your repository?
-"""]]
diff --git a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_5_998fe58994ecf855310e4b8e6cce9e18._comment b/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_5_998fe58994ecf855310e4b8e6cce9e18._comment
deleted file mode 100644
index 8d27f6b5e..000000000
--- a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_5_998fe58994ecf855310e4b8e6cce9e18._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnXybLxkPMYpP3yw4b_I6IdC3cKTD-xEdU"
- nickname="Matt"
- subject="comment 5"
- date="2013-06-11T14:47:40Z"
- content="""
-hi, yes I am. Is this bad?
-"""]]
diff --git a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_6_4ce243cb0ea8ff810a4949a5320e4afc._comment b/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_6_4ce243cb0ea8ff810a4949a5320e4afc._comment
deleted file mode 100644
index 54f533a92..000000000
--- a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_6_4ce243cb0ea8ff810a4949a5320e4afc._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 6"
- date="2013-06-11T15:09:44Z"
- content="""
-No. Direct mode makes this kind of problem less likely to occur.
-
-Are you only seeing this problem on OSX?
-
-My guess, which is only a guess at this point is that while direct mode leaves files in-place etc, which should avoid this kind of problem, it does mess with their permissions berifly when ingesting them into the annex. The write bit is breifly turned off,
-while it checks that nothing currently has the file open to be written.
-"""]]
diff --git a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_7_c713f6316d889c8fc52326f21375c1c4._comment b/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_7_c713f6316d889c8fc52326f21375c1c4._comment
deleted file mode 100644
index 754ffe774..000000000
--- a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_7_c713f6316d889c8fc52326f21375c1c4._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 7"
- date="2013-06-11T15:14:44Z"
- content="""
-Re-reading, I see you're using Fedora and OSX.
-"""]]
diff --git a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_8_6dd23bab7983b8b1f938dd4f21a16f5a._comment b/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_8_6dd23bab7983b8b1f938dd4f21a16f5a._comment
deleted file mode 100644
index 400f7597f..000000000
--- a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_8_6dd23bab7983b8b1f938dd4f21a16f5a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 8"
- date="2013-06-11T15:17:56Z"
- content="""
-I can reproduce the bug. Doesn't look likely to involve a race, since it happens every time.
-"""]]
diff --git a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_9_961c8f968eff0b39a85b607ee3f7630d._comment b/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_9_961c8f968eff0b39a85b607ee3f7630d._comment
deleted file mode 100644
index 419abf698..000000000
--- a/doc/bugs/file_access__47__locking_issues_with_the_assitant/comment_9_961c8f968eff0b39a85b607ee3f7630d._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 9"
- date="2013-06-11T15:30:14Z"
- content="""
-My guess about the write bit seems to be spot on. Which does mean it's a race, just one that happens to be easy to reproduce. It does not happen every time, but 1 time out of 10 or more often.
-
-You can try commenting out the `preventWrite` line in `Command/Add.hs` and rebuilding to see it fix it for you too. I will need to think long and hard about how to make files be ingested safely without turning off the write bit. But, I had been meaning to work on that at some point anyway, so good to have this bug to make it happen.
-
-I instrumented latexmk's call to `$out_handle->open` to see how it's failing:
-
-open failed: Permission denied 256
-
-Which confirms the problem. It seems that it first creates the file, and then closes it, and then re-opens it to write to it some more. git-annex gets in between these two calls and messes up the permissions behind its back.
-"""]]
diff --git a/doc/bugs/file_in_manual_mode_repository_is_dropped_when_it_is_copied_to_another_manual_mode_repository.mdwn b/doc/bugs/file_in_manual_mode_repository_is_dropped_when_it_is_copied_to_another_manual_mode_repository.mdwn
new file mode 100644
index 000000000..454c9f038
--- /dev/null
+++ b/doc/bugs/file_in_manual_mode_repository_is_dropped_when_it_is_copied_to_another_manual_mode_repository.mdwn
@@ -0,0 +1,35 @@
+Hi,
+
+### Please describe the problem.
+I have a distant repository in backup mode acting as origin and 2 computers at home containing that repository in manual mode. Everything is in indirect mode and watched by git annex assistant.
+If I get a file on one local computer from origin, everything act as expected, I have a copy on that file on origin and on the local computer.
+But, if I then want to copy the file over to the other local computer by issuing a git annex get on the second computer with a --from option specifying the first local computer, the file is transferred but when the transfer is completed the file is dropped on the first local computer.
+
+If I try and retrieve the file from origin, I don't have that problem and the file is kept on every repository I issued the git annex get command.
+
+A bigger problem is that if, still on the second local computer, I start transferring a file from the first local computer and I interrupt the rsync process, the file is still dropped by the first local computer although it is not yet on the second.
+It is still on the origin so no data is lost but I don't think this behavior is really intended.
+
+The version of git-annex I use is as follows:
+
+On the two local computers (from the ArchLinux aur):
+git-annex version: 5.20140716-g8c14ba8
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+
+On the server (debian stable, standalone git-annex archive):
+git-annex version: 5.20140716-g8c14ba8
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+
+It should be the same version everywhere.
+
+Please ask me if you need more information.
diff --git a/doc/bugs/file_modification_times.mdwn b/doc/bugs/file_modification_times.mdwn
deleted file mode 100644
index 2f75dcab7..000000000
--- a/doc/bugs/file_modification_times.mdwn
+++ /dev/null
@@ -1,13 +0,0 @@
-### Please describe the problem.
-The files created in another remote when syncing is "now" rather than keeping the modification time of the source file. As such, git-annex assistant is removing an important bit of information about the file.
-
-### What steps will reproduce the problem?
-1) create two repositories in your computer using webapp
-2) add files to RepoA, see that they are synced to the RepoB.
-3) check the file modification times from any file manager. you will see that while files in RepoA carry correct modification time, synced file in RepoB carries current time.
-
-### What version of git-annex are you using? On what operating system?
-Ubuntu 13.10 32bit version 4.20130815 from apt-get.
-
-> duplicate of [[todo/add_metadata_to_annexed_files]] --[[Joey]]
-> [[done]]
diff --git a/doc/bugs/file_permissions_on___126____47__.ssh__47__config___40__windows__41__.mdwn b/doc/bugs/file_permissions_on___126____47__.ssh__47__config___40__windows__41__.mdwn
deleted file mode 100644
index 9b2e89ca2..000000000
--- a/doc/bugs/file_permissions_on___126____47__.ssh__47__config___40__windows__41__.mdwn
+++ /dev/null
@@ -1,20 +0,0 @@
-### Please describe the problem.
-The log doesn't say what the webapp is running (probably ssh or similar), but it complains that ~/.ssh/config has the wrong permissions. This being cygwin, I'm not sure I can even change them; I'll poke around and see. Currently they're 0644.
-
-### What steps will reproduce the problem?
-Create a remote repository
-
-### What version of git-annex are you using? On what operating system?
-Windows 7, git-annex version 5.20131230-g192d991
-
-### Please provide any additional information below.
-I have no daemon.log, and the console log isn't particularly detailed today; it had just created an ssh key and shown it's fingerprint.
-
-> Ok, I guess this is ssh refusing to use a file that has a group
-> write bit set (when the owner is not the only member of its group),
-> or perhaps that has the world write bit set.
->
-> I have made the assistant unset those modes when creating and modifying
-> ssh config files. Hopefully that is enough for Windows too.. I can't
-> really test it there, but am calling this provisionally [[done]].
-> --[[Joey]]
diff --git a/doc/bugs/file_permissions_on___126____47__.ssh__47__config___40__windows__41__/comment_1_a04b71f4f81c477d18f14d8dfe8b378f._comment b/doc/bugs/file_permissions_on___126____47__.ssh__47__config___40__windows__41__/comment_1_a04b71f4f81c477d18f14d8dfe8b378f._comment
deleted file mode 100644
index a01f4be80..000000000
--- a/doc/bugs/file_permissions_on___126____47__.ssh__47__config___40__windows__41__/comment_1_a04b71f4f81c477d18f14d8dfe8b378f._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm5WyknJirJJridJjiPNgrlYxGG9xrZBvA"
- nickname="Daniel"
- subject="comment 1"
- date="2014-01-01T09:50:27Z"
- content="""
-So I can get around this by manually changing the permissions on this directory and it's files (using the windows permissions editor) so that only the user has access to it, and no other groups do (including Administrators). This seems like something the assistant should handle.
-"""]]
diff --git a/doc/bugs/file_permissions_on___126____47__.ssh__47__config___40__windows__41__/comment_2_0dbc908984b4b5bcc1283db807e058cb._comment b/doc/bugs/file_permissions_on___126____47__.ssh__47__config___40__windows__41__/comment_2_0dbc908984b4b5bcc1283db807e058cb._comment
deleted file mode 100644
index 3cae49416..000000000
--- a/doc/bugs/file_permissions_on___126____47__.ssh__47__config___40__windows__41__/comment_2_0dbc908984b4b5bcc1283db807e058cb._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.227"
- subject="comment 2"
- date="2014-01-01T21:03:31Z"
- content="""
-Did you say you're using cygwin? That would suggest that you have a ~/.ssh/config that might have been set up before you started using git-annex.
-
-When I run the git-annex webapp at the DOS prompt, it sets up a .ssh/config with permissions that ssh doesn't dislike.
-"""]]
diff --git a/doc/bugs/file_permissions_on___126____47__.ssh__47__config___40__windows__41__/comment_3_ff6cd2bb007d41284a09e470e060c32d._comment b/doc/bugs/file_permissions_on___126____47__.ssh__47__config___40__windows__41__/comment_3_ff6cd2bb007d41284a09e470e060c32d._comment
deleted file mode 100644
index 6940a80f6..000000000
--- a/doc/bugs/file_permissions_on___126____47__.ssh__47__config___40__windows__41__/comment_3_ff6cd2bb007d41284a09e470e060c32d._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm5WyknJirJJridJjiPNgrlYxGG9xrZBvA"
- nickname="Daniel"
- subject="comment 3"
- date="2014-01-01T23:52:32Z"
- content="""
-No, ~/.ssh/config is fresh. I'm running git annex webapp from the git bash prompt, which is some unholy combination of msys and cygwin.
-"""]]
diff --git a/doc/bugs/files_lost_during_upgrade.mdwn b/doc/bugs/files_lost_during_upgrade.mdwn
new file mode 100644
index 000000000..afab38d81
--- /dev/null
+++ b/doc/bugs/files_lost_during_upgrade.mdwn
@@ -0,0 +1,2191 @@
+### Please describe the problem.
+I'm running git annex on two laptops sharing data with a shared server all running ubuntu and the binary distributions of git annex (different versions the server seems to be running 5.20140529-gb71f9bf right now). One of the laptops tried to upgrade to 5.20140613 (something) from 5.20140610-g5ec8bcf, which kind of fails since that version does not exist on the site, only the signature making it download and upgrade and then decide it still needs to upgrade, took a few times before I figured this out.
+
+During one of the upgrades I guess something died and it started to complain about an index.lock file that should be removed after all git instances were dead, so I killed git annex and removed the file (a few times maybe) just to get the upgrade through. After realizing it was trying to upgrade to the same version over and over again I realized it had somehow managed merge away all files and the git history looked like crazy.
+
+Had to "git annex indirect; git annex checkout GOODVERSION . ; git annex direct ; git annex assistant" to get the files back (I think that did it, I'm a little unsure what the best way to restore files are).
+
+### What steps will reproduce the problem?
+
+I don't know. Just posting this in case someone else can figure it out.
+
+Might be relevant that upgrade never works out of the box, it removes the old version of git annex and untars the new version in my home directory (which isn't on the path), so I can't use it from the command line. So I shut it down, copy it back to where it should go, and then update the .config/git-annex/program to point to the correct location.
+
+### What version of git-annex are you using? On what operating system?
+
+5.20140610-g5ec8bcf (maybe, I'm not sure if that was the one I upgraded from initially).
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+I think this is the log from before the files where removed
+
+[2014-06-18 13:41:14 CEST] main: starting assistant version 5.20140610-g5ec8bcf
+[2014-06-18 13:41:14 CEST] UpgradeWatcher: Finished upgrading git-annex to version 5.20140610-g5ec8bcf
+[2014-06-18 13:41:14 CEST] TransferScanner: Syncing with born
+
+(scanning...) [2014-06-18 13:41:14 CEST] Watcher: Performing startup scan
+
+(started...) fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+To ssh://jwiklund@born/store/backup/Documents.annex.1/
+ f8f8217..ff8ecb1 git-annex -> synced/git-annex
+ bd2e43b..e88b148 annex/direct/master -> synced/master
+fatal: pathspec 'music.txt' did not match any files
+fatal: Unable to create '/home/jwiklund/Documents/.git/index.lock': File exists.
+
+If no other git process is currently running, this probably means a
+git process crashed in this repository earlier. Make sure no other git
+process is running and remove the file manually to continue.
+fatal: Unable to create '/home/jwiklund/Documents/.git/index.lock': File exists.
+
+If no other git process is currently running, this probably means a
+git process crashed in this repository earlier. Make sure no other git
+process is running and remove the file manually to continue.
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+
+(Recording state in git...)
+
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+ufatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+ser error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+[2014-06-18 13:41:16 CEST] Committer: Committing changesfatal: pathspec 'music.txt' did not match any files
+ to git
+fatal: pathspec 'music.txt' did not match any files
+[2014-06-18 13:41:16 CEST] Pusher: Syncing with born
+fatal: Unable to create '/home/jwiklund/Documents/.git/index.lock': File exists.
+
+If no other git process is currently running, this probably means a
+git process crashed in this repository earlier. Make sure no other git
+process is running and remove the file manually to continue.
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+(Recording state in git...)
+(Recording state in git...)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user error (xargs ["-0","git","--git-dir=/home/jwiklund/Documents/.git","--work-tree=/home/jwiklund/Documents","-c","core.bare=false","add","--force","--"] exited 123)
+user errfatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+fatal: pathspec 'music.txt' did not match any files
+To ssh://jwiklund@born/store/backup/Documents.annex.1/
+ ff8ecb1..c93e415 git-annex -> synced/git-annex
+ e88b148..220161f annex/direct/master -> synced/master
+
+
+This is what it said when it wanted me to remove the index file after a failed upgrade
+
+[2014-06-18 13:38:31 CEST] main: starting assistant version 5.20140610-g5ec8bcf
+[2014-06-18 13:38:31 CEST] UpgradeWatcher: Finished upgrading git-annex to version 5.20140610-g5ec8bcf
+[2014-06-18 13:38:31 CEST] TransferScanner: Syncing with born
+error: duplicate parent 294b61a3dce1e87a62e4d675deac2a9130b819e6 ignored
+
+(scanning...) [2014-06-18 13:38:31 CEST] Watcher: Performing startup scan
+
+(started...) error: duplicate parent 76407052287ba54b350e56e36353a53a3dbc5d4f ignored
+To ssh://jwiklund@born/store/backup/Documents.annex.1/
+ fdae080..cf9f2a9 git-annex -> synced/git-annex
+ 294b61a..7640705 annex/direct/master -> synced/master
+fatal: Could not switch to '/home/jwiklund/Documents/.git/annex/merge/': No such file or directory
+[2014-06-18 13:38:33 CEST] Committer: Committing changes to git
+fatal: Unable to create '/home/jwiklund/Documents/.git/index.lock': File exists.
+
+If no other git process is currently running, this probably means a
+git process crashed in this repository earlier. Make sure no other git
+process is running and remove the file manually to continue.
+[2014-06-18 13:38:33 CEST] Pusher: Syncing with born
+fatal: Could not switch to '/home/jwiklund/Documents/.git/annex/merge/': No such file or directory
+To ssh://jwiklund@born/store/backup/Documents.annex.1/
+ 7640705..6b9d33e annex/direct/master -> synced/master
+fatal: Could not switch to '/home/jwiklund/Documents/.git/annex/merge/': No such file or directory
+[2014-06-18 13:39:20 CEST] main: warning git-annex has been shut down
+
+Here is the upgrade
+
+error: duplicate parent 6b9d33ef3a16e6245f21f3948aa96691c2b8453b ignored
+(scanning...) [2014
+-06-18 13:40:55 CEST] Watcher: Performing startup scan
+(started...)
+
+error: duplicate parent 80254c9c048a35064ba42ae6a79610da6deac0ae ignored
+gpg: WARNING: unsafe permissions on homedir `/tmp/git-annex-gpg.tmp.0'
+gpg: Signature made fre 13 jun 2014 17:28:22 CEST using DSA key ID 89C809CB
+gpg: /tmp/git-annex-gpg.tmp.0/trustdb.gpg: trustdb created
+gpg: Good signature from "git-annex distribution signing key (for Joey Hess) <id@joeyh.name>"
+gpg: WARNING: This key is not certified with a trusted signature!
+gpg: There is no indication that the signature belongs to the owner.
+Primary key fingerprint: 4005 5C6A FD2D 526B 2961 E78F 5EE1 DBA7 89C8 09CB
+[2014-06-18 13:40:56 CEST] Upgrader: An upgrade of git-annex is available. (version 5.20140613)
+To ssh://jwiklund@born/store/backup/Documents.annex.1/
+ 6b9d33e..80254c9 annex/direct/master -> synced/master
+
+[2014-06-18 13:40:57 CEST] Committer: Committing changes to git
+(Recording state in git...)
+[2014-06-18 13:40:57 CEST] Pusher: Syncing with born
+
+error: duplicate parent 6be6bb32164e7103c44077ce6fa450b7c0d36e0c ignored
+To ssh://jwiklund@born/store/backup/Documents.annex.1/
+ 80254c9..6be6bb3 annex/direct/master -> synced/master
+
+--2014-06-18 13:41:07-- https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz
+Resolving downloads.kitenet.net (downloads.kitenet.net)... 107.170.31.195
+Connecting to downloads.kitenet.net (downloads.kitenet.net)|107.170.31.195|:443... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: 42645638 (41M) [application/x-gzip]
+Saving to: ‘/home/jwiklund/Documents/.git/annex/tmp/SHA256E-s42645638--4ae41fb29bd26339ea10f53ea2b7cf3132e53d5e8fbfde7b43b912aa52b3d319.tar.gz’
+
+ 0K .......... .......... .......... .......... .......... 0% 171K 4m3s
+ 50K .......... .......... .......... .......... .......... 0% 505K 2m43s
+ 100K .......... .......... .......... .......... .......... 0% 258K 2m42s
+ 150K .......... .......... .......... .......... .......... 0% 510K 2m22s
+ 200K .......... .......... .......... .......... .......... 0% 505K 2m10s
+ 250K .......... .......... .......... .......... .......... 0% 516K 2m1s
+ 300K .......... .......... .......... .......... .......... 0% 512K 1m55s
+ 350K .......... .......... .......... .......... .......... 0% 31,1M 1m41s
+ 400K .......... .......... .......... .......... .......... 1% 512K 99s
+ 450K .......... .......... .......... .......... .......... 1% 515K 97s
+ 500K .......... .......... .......... .......... .......... 1% 1,25M 91s
+ 550K .......... .......... .......... .......... .......... 1% 843K 87s
+ 600K .......... .......... .......... .......... .......... 1% 1,25M 83s
+ 650K .......... .......... .......... .......... .......... 1% 858K 80s
+ 700K .......... .......... .......... .......... .......... 1% 1,25M 77s
+ 750K .......... .......... .......... .......... .......... 1% 840K 75s
+ 800K .......... .......... .......... .......... .......... 2% 59,4M 70s
+ 850K .......... .......... .......... .......... .......... 2% 518K 71s
+ 900K .......... .......... .......... .......... .......... 2% 39,5M 67s
+ 950K .......... .......... .......... .......... .......... 2% 74,5M 64s
+ 1000K .......... .......... .......... .......... .......... 2% 520K 64s
+ 1050K .......... .......... .......... .......... .......... 2% 57,3M 61s
+ 1100K .......... .......... .......... .......... .......... 2% 1,31M 60s
+ 1150K .......... .......... .......... .......... .......... 2% 855K 59s
+ 1200K .......... .......... .......... .......... .......... 3% 22,5M 57s
+ 1250K .......... .......... .......... .......... .......... 3% 1,33M 56s
+ 1300K .......... .......... .......... .......... .......... 3% 848K 55s
+ 1350K .......... .......... .......... .......... .......... 3% 9,76M 54s
+ 1400K .......... .......... .......... .......... .......... 3% 48,8M 52s
+ 1450K .......... .......... .......... .......... .......... 3% 1,45M 51s
+ 1500K .......... .......... .......... .......... .......... 3% 837K 51s
+ 1550K .......... .......... .......... .......... .......... 3% 13,4M 49s
+ 1600K .......... .......... .......... .......... .......... 3% 1,47M 48s
+ 1650K .......... .......... .......... .......... .......... 4% 861K 48s
+ 1700K .......... .......... .......... .......... .......... 4% 14,3M 47s
+ 1750K .......... .......... .......... .......... .......... 4% 13,0M 46s
+ 1800K .......... .......... .......... .......... .......... 4% 1,49M 45s
+ 1850K .......... .......... .......... .......... .......... 4% 863K 45s
+ 1900K .......... .......... .......... .......... .......... 4% 62,3M 44s
+ 1950K .......... .......... .......... .......... .......... 4% 7,64M 43s
+ 2000K .......... .......... .......... .......... .......... 4% 10,3M 42s
+ 2050K .......... .......... .......... .......... .......... 5% 582K 42s
+ 2100K .......... .......... .......... .......... .......... 5% 8,34M 41s
+ 2150K .......... .......... .......... .......... .......... 5% 48,7M 40s
+ 2200K .......... .......... .......... .......... .......... 5% 61,6M 39s
+ 2250K .......... .......... .......... .......... .......... 5% 1,52M 39s
+ 2300K .......... .......... .......... .......... .......... 5% 860K 39s
+ 2350K .......... .......... .......... .......... .......... 5% 60,4M 38s
+ 2400K .......... .......... .......... .......... .......... 5% 8,20M 38s
+ 2450K .......... .......... .......... .......... .......... 6% 87,7M 37s
+ 2500K .......... .......... .......... .......... .......... 6% 1,54M 37s
+ 2550K .......... .......... .......... .......... .......... 6% 855K 37s
+ 2600K .......... .......... .......... .......... .......... 6% 89,2M 36s
+ 2650K .......... .......... .......... .......... .......... 6% 7,38M 35s
+ 2700K .......... .......... .......... .......... .......... 6% 168M 35s
+ 2750K .......... .......... .......... .......... .......... 6% 1,44M 34s
+ 2800K .......... .......... .......... .......... .......... 6% 1,37M 34s
+ 2850K .......... .......... .......... .......... .......... 6% 2,21M 34s
+ 2900K .......... .......... .......... .......... .......... 7% 6,19M 33s
+ 2950K .......... .......... .......... .......... .......... 7% 174M 33s
+ 3000K .......... .......... .......... .......... .......... 7% 174M 32s
+ 3050K .......... .......... .......... .......... .......... 7% 196M 32s
+ 3100K .......... .......... .......... .......... .......... 7% 1,57M 32s
+ 3150K .......... .......... .......... .......... .......... 7% 1,36M 31s
+ 3200K .......... .......... .......... .......... .......... 7% 1,67M 31s
+ 3250K .......... .......... .......... .......... .......... 7% 70,5M 31s
+ 3300K .......... .......... .......... .......... .......... 8% 109M 30s
+ 3350K .......... .......... .......... .......... .......... 8% 84,8M 30s
+ 3400K .......... .......... .......... .......... .......... 8% 1,61M 30s
+ 3450K .......... .......... .......... .......... .......... 8% 8,23M 29s
+ 3500K .......... .......... .......... .......... .......... 8% 1,47M 29s
+ 3550K .......... .......... .......... .......... .......... 8% 2,77M 29s
+ 3600K .......... .......... .......... .......... .......... 8% 5,14M 29s
+ 3650K .......... .......... .......... .......... .......... 8% 28,0M 28s
+ 3700K .......... .......... .......... .......... .......... 9% 169M 28s
+ 3750K .......... .......... .......... .......... .......... 9% 1,85M 28s
+ 3800K .......... .......... .......... .......... .......... 9% 86,5M 27s
+ 3850K .......... .......... .......... .......... .......... 9% 7,14M 27s
+ 3900K .......... .......... .......... .......... .......... 9% 1,55M 27s
+ 3950K .......... .......... .......... .......... .......... 9% 2,53M 27s
+ 4000K .......... .......... .......... .......... .......... 9% 5,08M 26s
+ 4050K .......... .......... .......... .......... .......... 9% 37,6M 26s
+ 4100K .......... .......... .......... .......... .......... 9% 45,6M 26s
+ 4150K .......... .......... .......... .......... .......... 10% 86,2M 25s
+ 4200K .......... .......... .......... .......... .......... 10% 1,80M 25s
+ 4250K .......... .......... .......... .......... .......... 10% 99,6M 25s
+ 4300K .......... .......... .......... .......... .......... 10% 171M 25s
+ 4350K .......... .......... .......... .......... .......... 10% 7,41M 24s
+ 4400K .......... .......... .......... .......... .......... 10% 1,55M 24s
+ 4450K .......... .......... .......... .......... .......... 10% 2,53M 24s
+ 4500K .......... .......... .......... .......... .......... 10% 59,5M 24s
+ 4550K .......... .......... .......... .......... .......... 11% 5,43M 24s
+ 4600K .......... .......... .......... .......... .......... 11% 25,3M 23s
+ 4650K .......... .......... .......... .......... .......... 11% 138M 23s
+ 4700K .......... .......... .......... .......... .......... 11% 90,7M 23s
+ 4750K .......... .......... .......... .......... .......... 11% 116M 23s
+ 4800K .......... .......... .......... .......... .......... 11% 1,81M 23s
+ 4850K .......... .......... .......... .......... .......... 11% 64,4M 22s
+ 4900K .......... .......... .......... .......... .......... 11% 7,76M 22s
+ 4950K .......... .......... .......... .......... .......... 12% 67,2M 22s
+ 5000K .......... .......... .......... .......... .......... 12% 1,60M 22s
+ 5050K .......... .......... .......... .......... .......... 12% 2,53M 22s
+ 5100K .......... .......... .......... .......... .......... 12% 5,14M 22s
+ 5150K .......... .......... .......... .......... .......... 12% 90,4M 21s
+ 5200K .......... .......... .......... .......... .......... 12% 27,7M 21s
+ 5250K .......... .......... .......... .......... .......... 12% 41,7M 21s
+ 5300K .......... .......... .......... .......... .......... 12% 91,5M 21s
+ 5350K .......... .......... .......... .......... .......... 12% 1,85M 21s
+ 5400K .......... .......... .......... .......... .......... 13% 109M 20s
+ 5450K .......... .......... .......... .......... .......... 13% 79,2M 20s
+ 5500K .......... .......... .......... .......... .......... 13% 6,84M 20s
+ 5550K .......... .......... .......... .......... .......... 13% 32,4M 20s
+ 5600K .......... .......... .......... .......... .......... 13% 5,70M 20s
+ 5650K .......... .......... .......... .......... .......... 13% 2,36M 20s
+ 5700K .......... .......... .......... .......... .......... 13% 2,53M 20s
+ 5750K .......... .......... .......... .......... .......... 13% 5,15M 19s
+ 5800K .......... .......... .......... .......... .......... 14% 31,1M 19s
+ 5850K .......... .......... .......... .......... .......... 14% 23,0M 19s
+ 5900K .......... .......... .......... .......... .......... 14% 45,3M 19s
+ 5950K .......... .......... .......... .......... .......... 14% 73,7M 19s
+ 6000K .......... .......... .......... .......... .......... 14% 1,96M 19s
+ 6050K .......... .......... .......... .......... .......... 14% 51,7M 18s
+ 6100K .......... .......... .......... .......... .......... 14% 8,10M 18s
+ 6150K .......... .......... .......... .......... .......... 14% 45,9M 18s
+ 6200K .......... .......... .......... .......... .......... 15% 23,5M 18s
+ 6250K .......... .......... .......... .......... .......... 15% 7,66M 18s
+ 6300K .......... .......... .......... .......... .......... 15% 2,29M 18s
+ 6350K .......... .......... .......... .......... .......... 15% 2,46M 18s
+ 6400K .......... .......... .......... .......... .......... 15% 46,8M 18s
+ 6450K .......... .......... .......... .......... .......... 15% 5,73M 17s
+ 6500K .......... .......... .......... .......... .......... 15% 23,0M 17s
+ 6550K .......... .......... .......... .......... .......... 15% 21,1M 17s
+ 6600K .......... .......... .......... .......... .......... 15% 48,4M 17s
+ 6650K .......... .......... .......... .......... .......... 16% 74,1M 17s
+ 6700K .......... .......... .......... .......... .......... 16% 2,07M 17s
+ 6750K .......... .......... .......... .......... .......... 16% 30,3M 17s
+ 6800K .......... .......... .......... .......... .......... 16% 7,81M 17s
+ 6850K .......... .......... .......... .......... .......... 16% 59,1M 16s
+ 6900K .......... .......... .......... .......... .......... 16% 24,6M 16s
+ 6950K .......... .......... .......... .......... .......... 16% 8,11M 16s
+ 7000K .......... .......... .......... .......... .......... 16% 7,57M 16s
+ 7050K .......... .......... .......... .......... .......... 17% 3,19M 16s
+ 7100K .......... .......... .......... .......... .......... 17% 2,35M 16s
+ 7150K .......... .......... .......... .......... .......... 17% 5,56M 16s
+ 7200K .......... .......... .......... .......... .......... 17% 51,4M 16s
+ 7250K .......... .......... .......... .......... .......... 17% 45,5M 16s
+ 7300K .......... .......... .......... .......... .......... 17% 61,6M 16s
+ 7350K .......... .......... .......... .......... .......... 17% 22,7M 15s
+ 7400K .......... .......... .......... .......... .......... 17% 53,6M 15s
+ 7450K .......... .......... .......... .......... .......... 18% 2,12M 15s
+ 7500K .......... .......... .......... .......... .......... 18% 32,2M 15s
+ 7550K .......... .......... .......... .......... .......... 18% 61,0M 15s
+ 7600K .......... .......... .......... .......... .......... 18% 7,22M 15s
+ 7650K .......... .......... .......... .......... .......... 18% 23,6M 15s
+ 7700K .......... .......... .......... .......... .......... 18% 7,39M 15s
+ 7750K .......... .......... .......... .......... .......... 18% 53,7M 15s
+ 7800K .......... .......... .......... .......... .......... 18% 8,51M 15s
+ 7850K .......... .......... .......... .......... .......... 18% 8,28M 14s
+ 7900K .......... .......... .......... .......... .......... 19% 1,26M 15s
+ 7950K .......... .......... .......... .......... .......... 19% 59,8M 14s
+ 8000K .......... .......... .......... .......... .......... 19% 58,8M 14s
+ 8050K .......... .......... .......... .......... .......... 19% 54,2M 14s
+ 8100K .......... .......... .......... .......... .......... 19% 70,3M 14s
+ 8150K .......... .......... .......... .......... .......... 19% 26,5M 14s
+ 8200K .......... .......... .......... .......... .......... 19% 54,8M 14s
+ 8250K .......... .......... .......... .......... .......... 19% 73,9M 14s
+ 8300K .......... .......... .......... .......... .......... 20% 2,11M 14s
+ 8350K .......... .......... .......... .......... .......... 20% 21,6M 14s
+ 8400K .......... .......... .......... .......... .......... 20% 8,29M 14s
+ 8450K .......... .......... .......... .......... .......... 20% 29,6M 14s
+ 8500K .......... .......... .......... .......... .......... 20% 59,6M 13s
+ 8550K .......... .......... .......... .......... .......... 20% 6,65M 13s
+ 8600K .......... .......... .......... .......... .......... 20% 8,50M 13s
+ 8650K .......... .......... .......... .......... .......... 20% 10,1M 13s
+ 8700K .......... .......... .......... .......... .......... 21% 44,0M 13s
+ 8750K .......... .......... .......... .......... .......... 21% 1,42M 13s
+ 8800K .......... .......... .......... .......... .......... 21% 11,1M 13s
+ 8850K .......... .......... .......... .......... .......... 21% 78,9M 13s
+ 8900K .......... .......... .......... .......... .......... 21% 50,5M 13s
+ 8950K .......... .......... .......... .......... .......... 21% 73,1M 13s
+ 9000K .......... .......... .......... .......... .......... 21% 77,6M 13s
+ 9050K .......... .......... .......... .......... .......... 21% 20,2M 13s
+ 9100K .......... .......... .......... .......... .......... 21% 25,2M 13s
+ 9150K .......... .......... .......... .......... .......... 22% 117M 12s
+ 9200K .......... .......... .......... .......... .......... 22% 2,23M 12s
+ 9250K .......... .......... .......... .......... .......... 22% 22,4M 12s
+ 9300K .......... .......... .......... .......... .......... 22% 8,59M 12s
+ 9350K .......... .......... .......... .......... .......... 22% 24,5M 12s
+ 9400K .......... .......... .......... .......... .......... 22% 79,6M 12s
+ 9450K .......... .......... .......... .......... .......... 22% 7,10M 12s
+ 9500K .......... .......... .......... .......... .......... 22% 8,02M 12s
+ 9550K .......... .......... .......... .......... .......... 23% 8,69M 12s
+ 9600K .......... .......... .......... .......... .......... 23% 8,16M 12s
+ 9650K .......... .......... .......... .......... .......... 23% 63,0M 12s
+ 9700K .......... .......... .......... .......... .......... 23% 1,72M 12s
+ 9750K .......... .......... .......... .......... .......... 23% 10,1M 12s
+ 9800K .......... .......... .......... .......... .......... 23% 60,2M 12s
+ 9850K .......... .......... .......... .......... .......... 23% 61,9M 12s
+ 9900K .......... .......... .......... .......... .......... 23% 62,9M 12s
+ 9950K .......... .......... .......... .......... .......... 24% 76,6M 11s
+ 10000K .......... .......... .......... .......... .......... 24% 23,8M 11s
+ 10050K .......... .......... .......... .......... .......... 24% 30,4M 11s
+ 10100K .......... .......... .......... .......... .......... 24% 3,50M 11s
+ 10150K .......... .......... .......... .......... .......... 24% 6,05M 11s
+ 10200K .......... .......... .......... .......... .......... 24% 14,9M 11s
+ 10250K .......... .......... .......... .......... .......... 24% 10,5M 11s
+ 10300K .......... .......... .......... .......... .......... 24% 21,5M 11s
+ 10350K .......... .......... .......... .......... .......... 24% 79,7M 11s
+ 10400K .......... .......... .......... .......... .......... 25% 8,60M 11s
+ 10450K .......... .......... .......... .......... .......... 25% 6,92M 11s
+ 10500K .......... .......... .......... .......... .......... 25% 11,0M 11s
+ 10550K .......... .......... .......... .......... .......... 25% 6,96M 11s
+ 10600K .......... .......... .......... .......... .......... 25% 66,9M 11s
+ 10650K .......... .......... .......... .......... .......... 25% 10,9M 11s
+ 10700K .......... .......... .......... .......... .......... 25% 1,71M 11s
+ 10750K .......... .......... .......... .......... .......... 25% 60,4M 11s
+ 10800K .......... .......... .......... .......... .......... 26% 39,6M 11s
+ 10850K .......... .......... .......... .......... .......... 26% 62,6M 11s
+ 10900K .......... .......... .......... .......... .......... 26% 65,0M 10s
+ 10950K .......... .......... .......... .......... .......... 26% 137M 10s
+ 11000K .......... .......... .......... .......... .......... 26% 37,8M 10s
+ 11050K .......... .......... .......... .......... .......... 26% 82,1M 10s
+ 11100K .......... .......... .......... .......... .......... 26% 36,9M 10s
+ 11150K .......... .......... .......... .......... .......... 26% 3,47M 10s
+ 11200K .......... .......... .......... .......... .......... 27% 4,59M 10s
+ 11250K .......... .......... .......... .......... .......... 27% 10,3M 10s
+ 11300K .......... .......... .......... .......... .......... 27% 105M 10s
+ 11350K .......... .......... .......... .......... .......... 27% 21,8M 10s
+ 11400K .......... .......... .......... .......... .......... 27% 8,57M 10s
+ 11450K .......... .......... .......... .......... .......... 27% 6,57M 10s
+ 11500K .......... .......... .......... .......... .......... 27% 60,3M 10s
+ 11550K .......... .......... .......... .......... .......... 27% 11,5M 10s
+ 11600K .......... .......... .......... .......... .......... 27% 7,50M 10s
+ 11650K .......... .......... .......... .......... .......... 28% 72,7M 10s
+ 11700K .......... .......... .......... .......... .......... 28% 7,61M 10s
+ 11750K .......... .......... .......... .......... .......... 28% 2,31M 10s
+ 11800K .......... .......... .......... .......... .......... 28% 6,77M 10s
+ 11850K .......... .......... .......... .......... .......... 28% 66,3M 10s
+ 11900K .......... .......... .......... .......... .......... 28% 69,9M 10s
+ 11950K .......... .......... .......... .......... .......... 28% 73,3M 9s
+ 12000K .......... .......... .......... .......... .......... 28% 59,8M 9s
+ 12050K .......... .......... .......... .......... .......... 29% 62,8M 9s
+ 12100K .......... .......... .......... .......... .......... 29% 72,4M 9s
+ 12150K .......... .......... .......... .......... .......... 29% 38,9M 9s
+ 12200K .......... .......... .......... .......... .......... 29% 8,31M 9s
+ 12250K .......... .......... .......... .......... .......... 29% 6,24M 9s
+ 12300K .......... .......... .......... .......... .......... 29% 4,90M 9s
+ 12350K .......... .......... .......... .......... .......... 29% 8,21M 9s
+ 12400K .......... .......... .......... .......... .......... 29% 20,0M 9s
+ 12450K .......... .......... .......... .......... .......... 30% 9,55M 9s
+ 12500K .......... .......... .......... .......... .......... 30% 49,5M 9s
+ 12550K .......... .......... .......... .......... .......... 30% 6,87M 9s
+ 12600K .......... .......... .......... .......... .......... 30% 60,8M 9s
+ 12650K .......... .......... .......... .......... .......... 30% 11,6M 9s
+ 12700K .......... .......... .......... .......... .......... 30% 68,3M 9s
+ 12750K .......... .......... .......... .......... .......... 30% 7,84M 9s
+ 12800K .......... .......... .......... .......... .......... 30% 41,8M 9s
+ 12850K .......... .......... .......... .......... .......... 30% 8,13M 9s
+ 12900K .......... .......... .......... .......... .......... 31% 2,43M 9s
+ 12950K .......... .......... .......... .......... .......... 31% 6,04M 9s
+ 13000K .......... .......... .......... .......... .......... 31% 47,7M 9s
+ 13050K .......... .......... .......... .......... .......... 31% 56,9M 9s
+ 13100K .......... .......... .......... .......... .......... 31% 59,0M 9s
+ 13150K .......... .......... .......... .......... .......... 31% 49,4M 8s
+ 13200K .......... .......... .......... .......... .......... 31% 61,2M 8s
+ 13250K .......... .......... .......... .......... .......... 31% 56,6M 8s
+ 13300K .......... .......... .......... .......... .......... 32% 69,6M 8s
+ 13350K .......... .......... .......... .......... .......... 32% 9,89M 8s
+ 13400K .......... .......... .......... .......... .......... 32% 51,2M 8s
+ 13450K .......... .......... .......... .......... .......... 32% 3,68M 8s
+ 13500K .......... .......... .......... .......... .......... 32% 10,9M 8s
+ 13550K .......... .......... .......... .......... .......... 32% 9,06M 8s
+ 13600K .......... .......... .......... .......... .......... 32% 22,0M 8s
+ 13650K .......... .......... .......... .......... .......... 32% 56,2M 8s
+ 13700K .......... .......... .......... .......... .......... 33% 8,24M 8s
+ 13750K .......... .......... .......... .......... .......... 33% 7,93M 8s
+ 13800K .......... .......... .......... .......... .......... 33% 46,0M 8s
+ 13850K .......... .......... .......... .......... .......... 33% 140M 8s
+ 13900K .......... .......... .......... .......... .......... 33% 12,6M 8s
+ 13950K .......... .......... .......... .......... .......... 33% 8,45M 8s
+ 14000K .......... .......... .......... .......... .......... 33% 25,4M 8s
+ 14050K .......... .......... .......... .......... .......... 33% 8,48M 8s
+ 14100K .......... .......... .......... .......... .......... 33% 115M 8s
+ 14150K .......... .......... .......... .......... .......... 34% 2,37M 8s
+ 14200K .......... .......... .......... .......... .......... 34% 6,80M 8s
+ 14250K .......... .......... .......... .......... .......... 34% 41,9M 8s
+ 14300K .......... .......... .......... .......... .......... 34% 59,1M 8s
+ 14350K .......... .......... .......... .......... .......... 34% 134M 8s
+ 14400K .......... .......... .......... .......... .......... 34% 181M 8s
+ 14450K .......... .......... .......... .......... .......... 34% 107M 8s
+ 14500K .......... .......... .......... .......... .......... 34% 61,9M 7s
+ 14550K .......... .......... .......... .......... .......... 35% 24,4M 7s
+ 14600K .......... .......... .......... .......... .......... 35% 148M 7s
+ 14650K .......... .......... .......... .......... .......... 35% 8,76M 7s
+ 14700K .......... .......... .......... .......... .......... 35% 8,29M 7s
+ 14750K .......... .......... .......... .......... .......... 35% 3,92M 7s
+ 14800K .......... .......... .......... .......... .......... 35% 9,53M 7s
+ 14850K .......... .......... .......... .......... .......... 35% 143M 7s
+ 14900K .......... .......... .......... .......... .......... 35% 19,0M 7s
+ 14950K .......... .......... .......... .......... .......... 36% 7,80M 7s
+ 15000K .......... .......... .......... .......... .......... 36% 7,87M 7s
+ 15050K .......... .......... .......... .......... .......... 36% 60,1M 7s
+ 15100K .......... .......... .......... .......... .......... 36% 55,7M 7s
+ 15150K .......... .......... .......... .......... .......... 36% 12,2M 7s
+ 15200K .......... .......... .......... .......... .......... 36% 11,5M 7s
+ 15250K .......... .......... .......... .......... .......... 36% 23,0M 7s
+ 15300K .......... .......... .......... .......... .......... 36% 50,4M 7s
+ 15350K .......... .......... .......... .......... .......... 36% 51,4M 7s
+ 15400K .......... .......... .......... .......... .......... 37% 9,26M 7s
+ 15450K .......... .......... .......... .......... .......... 37% 7,03M 7s
+ 15500K .......... .......... .......... .......... .......... 37% 3,39M 7s
+ 15550K .......... .......... .......... .......... .......... 37% 6,82M 7s
+ 15600K .......... .......... .......... .......... .......... 37% 33,2M 7s
+ 15650K .......... .......... .......... .......... .......... 37% 56,0M 7s
+ 15700K .......... .......... .......... .......... .......... 37% 52,0M 7s
+ 15750K .......... .......... .......... .......... .......... 37% 55,0M 7s
+ 15800K .......... .......... .......... .......... .......... 38% 66,8M 7s
+ 15850K .......... .......... .......... .......... .......... 38% 62,0M 7s
+ 15900K .......... .......... .......... .......... .......... 38% 62,8M 7s
+ 15950K .......... .......... .......... .......... .......... 38% 192M 7s
+ 16000K .......... .......... .......... .......... .......... 38% 164M 7s
+ 16050K .......... .......... .......... .......... .......... 38% 16,4M 7s
+ 16100K .......... .......... .......... .......... .......... 38% 28,9M 7s
+ 16150K .......... .......... .......... .......... .......... 38% 8,73M 6s
+ 16200K .......... .......... .......... .......... .......... 39% 51,7M 6s
+ 16250K .......... .......... .......... .......... .......... 39% 4,07M 6s
+ 16300K .......... .......... .......... .......... .......... 39% 8,88M 6s
+ 16350K .......... .......... .......... .......... .......... 39% 30,0M 6s
+ 16400K .......... .......... .......... .......... .......... 39% 10,2M 6s
+ 16450K .......... .......... .......... .......... .......... 39% 6,47M 6s
+ 16500K .......... .......... .......... .......... .......... 39% 49,7M 6s
+ 16550K .......... .......... .......... .......... .......... 39% 57,1M 6s
+ 16600K .......... .......... .......... .......... .......... 39% 5,99M 6s
+ 16650K .......... .......... .......... .......... .......... 40% 47,3M 6s
+ 16700K .......... .......... .......... .......... .......... 40% 50,5M 6s
+ 16750K .......... .......... .......... .......... .......... 40% 80,4M 6s
+ 16800K .......... .......... .......... .......... .......... 40% 49,6M 6s
+ 16850K .......... .......... .......... .......... .......... 40% 61,4M 6s
+ 16900K .......... .......... .......... .......... .......... 40% 9,92M 6s
+ 16950K .......... .......... .......... .......... .......... 40% 97,6M 6s
+ 17000K .......... .......... .......... .......... .......... 40% 2,35M 6s
+ 17050K .......... .......... .......... .......... .......... 41% 6,43M 6s
+ 17100K .......... .......... .......... .......... .......... 41% 41,0M 6s
+ 17150K .......... .......... .......... .......... .......... 41% 56,3M 6s
+ 17200K .......... .......... .......... .......... .......... 41% 46,3M 6s
+ 17250K .......... .......... .......... .......... .......... 41% 59,6M 6s
+ 17300K .......... .......... .......... .......... .......... 41% 51,6M 6s
+ 17350K .......... .......... .......... .......... .......... 41% 84,3M 6s
+ 17400K .......... .......... .......... .......... .......... 41% 62,6M 6s
+ 17450K .......... .......... .......... .......... .......... 42% 81,4M 6s
+ 17500K .......... .......... .......... .......... .......... 42% 80,4M 6s
+ 17550K .......... .......... .......... .......... .......... 42% 20,1M 6s
+ 17600K .......... .......... .......... .......... .......... 42% 26,4M 6s
+ 17650K .......... .......... .......... .......... .......... 42% 68,5M 6s
+ 17700K .......... .......... .......... .......... .......... 42% 12,3M 6s
+ 17750K .......... .......... .......... .......... .......... 42% 30,3M 6s
+ 17800K .......... .......... .......... .......... .......... 42% 3,98M 6s
+ 17850K .......... .......... .......... .......... .......... 42% 89,6M 6s
+ 17900K .......... .......... .......... .......... .......... 43% 9,68M 6s
+ 17950K .......... .......... .......... .......... .......... 43% 34,4M 6s
+ 18000K .......... .......... .......... .......... .......... 43% 7,09M 6s
+ 18050K .......... .......... .......... .......... .......... 43% 9,29M 6s
+ 18100K .......... .......... .......... .......... .......... 43% 88,7M 6s
+ 18150K .......... .......... .......... .......... .......... 43% 43,6M 5s
+ 18200K .......... .......... .......... .......... .......... 43% 10,3M 5s
+ 18250K .......... .......... .......... .......... .......... 43% 12,4M 5s
+ 18300K .......... .......... .......... .......... .......... 44% 113M 5s
+ 18350K .......... .......... .......... .......... .......... 44% 23,2M 5s
+ 18400K .......... .......... .......... .......... .......... 44% 96,5M 5s
+ 18450K .......... .......... .......... .......... .......... 44% 119M 5s
+ 18500K .......... .......... .......... .......... .......... 44% 70,8M 5s
+ 18550K .......... .......... .......... .......... .......... 44% 9,12M 5s
+ 18600K .......... .......... .......... .......... .......... 44% 66,7M 5s
+ 18650K .......... .......... .......... .......... .......... 44% 7,63M 5s
+ 18700K .......... .......... .......... .......... .......... 45% 2,25M 5s
+ 18750K .......... .......... .......... .......... .......... 45% 112M 5s
+ 18800K .......... .......... .......... .......... .......... 45% 61,9M 5s
+ 18850K .......... .......... .......... .......... .......... 45% 79,6M 5s
+ 18900K .......... .......... .......... .......... .......... 45% 60,4M 5s
+ 18950K .......... .......... .......... .......... .......... 45% 110M 5s
+ 19000K .......... .......... .......... .......... .......... 45% 81,0M 5s
+ 19050K .......... .......... .......... .......... .......... 45% 77,1M 5s
+ 19100K .......... .......... .......... .......... .......... 45% 107M 5s
+ 19150K .......... .......... .......... .......... .......... 46% 59,2M 5s
+ 19200K .......... .......... .......... .......... .......... 46% 12,9M 5s
+ 19250K .......... .......... .......... .......... .......... 46% 31,5M 5s
+ 19300K .......... .......... .......... .......... .......... 46% 59,1M 5s
+ 19350K .......... .......... .......... .......... .......... 46% 8,48M 5s
+ 19400K .......... .......... .......... .......... .......... 46% 70,5M 5s
+ 19450K .......... .......... .......... .......... .......... 46% 6,40M 5s
+ 19500K .......... .......... .......... .......... .......... 46% 47,7M 5s
+ 19550K .......... .......... .......... .......... .......... 47% 5,84M 5s
+ 19600K .......... .......... .......... .......... .......... 47% 54,2M 5s
+ 19650K .......... .......... .......... .......... .......... 47% 34,6M 5s
+ 19700K .......... .......... .......... .......... .......... 47% 8,77M 5s
+ 19750K .......... .......... .......... .......... .......... 47% 45,6M 5s
+ 19800K .......... .......... .......... .......... .......... 47% 8,46M 5s
+ 19850K .......... .......... .......... .......... .......... 47% 53,9M 5s
+ 19900K .......... .......... .......... .......... .......... 47% 10,0M 5s
+ 19950K .......... .......... .......... .......... .......... 48% 41,3M 5s
+ 20000K .......... .......... .......... .......... .......... 48% 15,0M 5s
+ 20050K .......... .......... .......... .......... .......... 48% 25,6M 5s
+ 20100K .......... .......... .......... .......... .......... 48% 75,2M 5s
+ 20150K .......... .......... .......... .......... .......... 48% 118M 5s
+ 20200K .......... .......... .......... .......... .......... 48% 106M 5s
+ 20250K .......... .......... .......... .......... .......... 48% 122M 5s
+ 20300K .......... .......... .......... .......... .......... 48% 9,40M 5s
+ 20350K .......... .......... .......... .......... .......... 48% 82,8M 5s
+ 20400K .......... .......... .......... .......... .......... 49% 2,31M 5s
+ 20450K .......... .......... .......... .......... .......... 49% 102M 5s
+ 20500K .......... .......... .......... .......... .......... 49% 7,52M 5s
+ 20550K .......... .......... .......... .......... .......... 49% 59,3M 5s
+ 20600K .......... .......... .......... .......... .......... 49% 108M 4s
+ 20650K .......... .......... .......... .......... .......... 49% 37,9M 4s
+ 20700K .......... .......... .......... .......... .......... 49% 120M 4s
+ 20750K .......... .......... .......... .......... .......... 49% 84,2M 4s
+ 20800K .......... .......... .......... .......... .......... 50% 67,8M 4s
+ 20850K .......... .......... .......... .......... .......... 50% 100M 4s
+ 20900K .......... .......... .......... .......... .......... 50% 71,7M 4s
+ 20950K .......... .......... .......... .......... .......... 50% 73,8M 4s
+ 21000K .......... .......... .......... .......... .......... 50% 15,5M 4s
+ 21050K .......... .......... .......... .......... .......... 50% 21,8M 4s
+ 21100K .......... .......... .......... .......... .......... 50% 11,0M 4s
+ 21150K .......... .......... .......... .......... .......... 50% 64,5M 4s
+ 21200K .......... .......... .......... .......... .......... 51% 29,8M 4s
+ 21250K .......... .......... .......... .......... .......... 51% 8,28M 4s
+ 21300K .......... .......... .......... .......... .......... 51% 9,12M 4s
+ 21350K .......... .......... .......... .......... .......... 51% 9,08M 4s
+ 21400K .......... .......... .......... .......... .......... 51% 42,5M 4s
+ 21450K .......... .......... .......... .......... .......... 51% 67,7M 4s
+ 21500K .......... .......... .......... .......... .......... 51% 37,9M 4s
+ 21550K .......... .......... .......... .......... .......... 51% 9,20M 4s
+ 21600K .......... .......... .......... .......... .......... 51% 11,2M 4s
+ 21650K .......... .......... .......... .......... .......... 52% 21,7M 4s
+ 21700K .......... .......... .......... .......... .......... 52% 71,1M 4s
+ 21750K .......... .......... .......... .......... .......... 52% 8,58M 4s
+ 21800K .......... .......... .......... .......... .......... 52% 15,8M 4s
+ 21850K .......... .......... .......... .......... .......... 52% 49,8M 4s
+ 21900K .......... .......... .......... .......... .......... 52% 26,0M 4s
+ 21950K .......... .......... .......... .......... .......... 52% 84,1M 4s
+ 22000K .......... .......... .......... .......... .......... 52% 75,1M 4s
+ 22050K .......... .......... .......... .......... .......... 53% 91,9M 4s
+ 22100K .......... .......... .......... .......... .......... 53% 90,4M 4s
+ 22150K .......... .......... .......... .......... .......... 53% 11,7M 4s
+ 22200K .......... .......... .......... .......... .......... 53% 40,0M 4s
+ 22250K .......... .......... .......... .......... .......... 53% 86,5M 4s
+ 22300K .......... .......... .......... .......... .......... 53% 80,8M 4s
+ 22350K .......... .......... .......... .......... .......... 53% 2,36M 4s
+ 22400K .......... .......... .......... .......... .......... 53% 8,03M 4s
+ 22450K .......... .......... .......... .......... .......... 54% 44,6M 4s
+ 22500K .......... .......... .......... .......... .......... 54% 44,3M 4s
+ 22550K .......... .......... .......... .......... .......... 54% 46,1M 4s
+ 22600K .......... .......... .......... .......... .......... 54% 59,6M 4s
+ 22650K .......... .......... .......... .......... .......... 54% 64,5M 4s
+ 22700K .......... .......... .......... .......... .......... 54% 52,4M 4s
+ 22750K .......... .......... .......... .......... .......... 54% 64,6M 4s
+ 22800K .......... .......... .......... .......... .......... 54% 56,7M 4s
+ 22850K .......... .......... .......... .......... .......... 54% 75,7M 4s
+ 22900K .......... .......... .......... .......... .......... 55% 35,7M 4s
+ 22950K .......... .......... .......... .......... .......... 55% 30,3M 4s
+ 23000K .......... .......... .......... .......... .......... 55% 11,0M 4s
+ 23050K .......... .......... .......... .......... .......... 55% 102M 4s
+ 23100K .......... .......... .......... .......... .......... 55% 25,4M 4s
+ 23150K .......... .......... .......... .......... .......... 55% 8,53M 4s
+ 23200K .......... .......... .......... .......... .......... 55% 29,8M 4s
+ 23250K .......... .......... .......... .......... .......... 55% 11,5M 4s
+ 23300K .......... .......... .......... .......... .......... 56% 93,9M 4s
+ 23350K .......... .......... .......... .......... .......... 56% 8,20M 4s
+ 23400K .......... .......... .......... .......... .......... 56% 83,3M 4s
+ 23450K .......... .......... .......... .......... .......... 56% 32,7M 4s
+ 23500K .......... .......... .......... .......... .......... 56% 103M 3s
+ 23550K .......... .......... .......... .......... .......... 56% 9,54M 3s
+ 23600K .......... .......... .......... .......... .......... 56% 8,14M 3s
+ 23650K .......... .......... .......... .......... .......... 56% 76,8M 3s
+ 23700K .......... .......... .......... .......... .......... 57% 8,68M 3s
+ 23750K .......... .......... .......... .......... .......... 57% 63,7M 3s
+ 23800K .......... .......... .......... .......... .......... 57% 13,3M 3s
+ 23850K .......... .......... .......... .......... .......... 57% 29,7M 3s
+ 23900K .......... .......... .......... .......... .......... 57% 61,6M 3s
+ 23950K .......... .......... .......... .......... .......... 57% 71,7M 3s
+ 24000K .......... .......... .......... .......... .......... 57% 62,1M 3s
+ 24050K .......... .......... .......... .......... .......... 57% 75,3M 3s
+ 24100K .......... .......... .......... .......... .......... 57% 14,1M 3s
+ 24150K .......... .......... .......... .......... .......... 58% 48,4M 3s
+ 24200K .......... .......... .......... .......... .......... 58% 43,5M 3s
+ 24250K .......... .......... .......... .......... .......... 58% 91,5M 3s
+ 24300K .......... .......... .......... .......... .......... 58% 117M 3s
+ 24350K .......... .......... .......... .......... .......... 58% 2,39M 3s
+ 24400K .......... .......... .......... .......... .......... 58% 8,97M 3s
+ 24450K .......... .......... .......... .......... .......... 58% 102M 3s
+ 24500K .......... .......... .......... .......... .......... 58% 42,4M 3s
+ 24550K .......... .......... .......... .......... .......... 59% 64,6M 3s
+ 24600K .......... .......... .......... .......... .......... 59% 35,3M 3s
+ 24650K .......... .......... .......... .......... .......... 59% 113M 3s
+ 24700K .......... .......... .......... .......... .......... 59% 120M 3s
+ 24750K .......... .......... .......... .......... .......... 59% 38,7M 3s
+ 24800K .......... .......... .......... .......... .......... 59% 58,8M 3s
+ 24850K .......... .......... .......... .......... .......... 59% 73,9M 3s
+ 24900K .......... .......... .......... .......... .......... 59% 24,8M 3s
+ 24950K .......... .......... .......... .......... .......... 60% 63,1M 3s
+ 25000K .......... .......... .......... .......... .......... 60% 32,9M 3s
+ 25050K .......... .......... .......... .......... .......... 60% 11,0M 3s
+ 25100K .......... .......... .......... .......... .......... 60% 24,1M 3s
+ 25150K .......... .......... .......... .......... .......... 60% 85,0M 3s
+ 25200K .......... .......... .......... .......... .......... 60% 9,09M 3s
+ 25250K .......... .......... .......... .......... .......... 60% 122M 3s
+ 25300K .......... .......... .......... .......... .......... 60% 30,1M 3s
+ 25350K .......... .......... .......... .......... .......... 60% 11,4M 3s
+ 25400K .......... .......... .......... .......... .......... 61% 95,0M 3s
+ 25450K .......... .......... .......... .......... .......... 61% 7,94M 3s
+ 25500K .......... .......... .......... .......... .......... 61% 125M 3s
+ 25550K .......... .......... .......... .......... .......... 61% 42,5M 3s
+ 25600K .......... .......... .......... .......... .......... 61% 9,23M 3s
+ 25650K .......... .......... .......... .......... .......... 61% 66,0M 3s
+ 25700K .......... .......... .......... .......... .......... 61% 8,38M 3s
+ 25750K .......... .......... .......... .......... .......... 61% 70,8M 3s
+ 25800K .......... .......... .......... .......... .......... 62% 8,71M 3s
+ 25850K .......... .......... .......... .......... .......... 62% 69,5M 3s
+ 25900K .......... .......... .......... .......... .......... 62% 15,6M 3s
+ 25950K .......... .......... .......... .......... .......... 62% 26,2M 3s
+ 26000K .......... .......... .......... .......... .......... 62% 60,0M 3s
+ 26050K .......... .......... .......... .......... .......... 62% 71,0M 3s
+ 26100K .......... .......... .......... .......... .......... 62% 73,0M 3s
+ 26150K .......... .......... .......... .......... .......... 62% 71,9M 3s
+ 26200K .......... .......... .......... .......... .......... 63% 64,3M 3s
+ 26250K .......... .......... .......... .......... .......... 63% 17,0M 3s
+ 26300K .......... .......... .......... .......... .......... 63% 67,3M 3s
+ 26350K .......... .......... .......... .......... .......... 63% 35,5M 3s
+ 26400K .......... .......... .......... .......... .......... 63% 80,0M 3s
+ 26450K .......... .......... .......... .......... .......... 63% 110M 3s
+ 26500K .......... .......... .......... .......... .......... 63% 10,7M 3s
+ 26550K .......... .......... .......... .......... .......... 63% 3,01M 3s
+ 26600K .......... .......... .......... .......... .......... 63% 8,05M 3s
+ 26650K .......... .......... .......... .......... .......... 64% 107M 3s
+ 26700K .......... .......... .......... .......... .......... 64% 70,1M 3s
+ 26750K .......... .......... .......... .......... .......... 64% 71,8M 3s
+ 26800K .......... .......... .......... .......... .......... 64% 30,4M 3s
+ 26850K .......... .......... .......... .......... .......... 64% 109M 3s
+ 26900K .......... .......... .......... .......... .......... 64% 57,8M 3s
+ 26950K .......... .......... .......... .......... .......... 64% 47,2M 3s
+ 27000K .......... .......... .......... .......... .......... 64% 81,2M 3s
+ 27050K .......... .......... .......... .......... .......... 65% 74,9M 3s
+ 27100K .......... .......... .......... .......... .......... 65% 72,4M 3s
+ 27150K .......... .......... .......... .......... .......... 65% 32,0M 3s
+ 27200K .......... .......... .......... .......... .......... 65% 34,8M 2s
+ 27250K .......... .......... .......... .......... .......... 65% 10,5M 2s
+ 27300K .......... .......... .......... .......... .......... 65% 65,5M 2s
+ 27350K .......... .......... .......... .......... .......... 65% 27,9M 2s
+ 27400K .......... .......... .......... .......... .......... 65% 9,96M 2s
+ 27450K .......... .......... .......... .......... .......... 66% 58,0M 2s
+ 27500K .......... .......... .......... .......... .......... 66% 97,2M 2s
+ 27550K .......... .......... .......... .......... .......... 66% 30,3M 2s
+ 27600K .......... .......... .......... .......... .......... 66% 11,2M 2s
+ 27650K .......... .......... .......... .......... .......... 66% 8,92M 2s
+ 27700K .......... .......... .......... .......... .......... 66% 49,0M 2s
+ 27750K .......... .......... .......... .......... .......... 66% 65,0M 2s
+ 27800K .......... .......... .......... .......... .......... 66% 65,9M 2s
+ 27850K .......... .......... .......... .......... .......... 66% 9,76M 2s
+ 27900K .......... .......... .......... .......... .......... 67% 8,10M 2s
+ 27950K .......... .......... .......... .......... .......... 67% 68,7M 2s
+ 28000K .......... .......... .......... .......... .......... 67% 60,7M 2s
+ 28050K .......... .......... .......... .......... .......... 67% 71,4M 2s
+ 28100K .......... .......... .......... .......... .......... 67% 9,13M 2s
+ 28150K .......... .......... .......... .......... .......... 67% 17,5M 2s
+ 28200K .......... .......... .......... .......... .......... 67% 59,7M 2s
+ 28250K .......... .......... .......... .......... .......... 67% 25,1M 2s
+ 28300K .......... .......... .......... .......... .......... 68% 67,3M 2s
+ 28350K .......... .......... .......... .......... .......... 68% 70,4M 2s
+ 28400K .......... .......... .......... .......... .......... 68% 60,6M 2s
+ 28450K .......... .......... .......... .......... .......... 68% 74,6M 2s
+ 28500K .......... .......... .......... .......... .......... 68% 74,9M 2s
+ 28550K .......... .......... .......... .......... .......... 68% 19,6M 2s
+ 28600K .......... .......... .......... .......... .......... 68% 29,3M 2s
+ 28650K .......... .......... .......... .......... .......... 68% 67,6M 2s
+ 28700K .......... .......... .......... .......... .......... 69% 93,7M 2s
+ 28750K .......... .......... .......... .......... .......... 69% 140M 2s
+ 28800K .......... .......... .......... .......... .......... 69% 11,5M 2s
+ 28850K .......... .......... .......... .......... .......... 69% 6,48M 2s
+ 28900K .......... .......... .......... .......... .......... 69% 3,54M 2s
+ 28950K .......... .......... .......... .......... .......... 69% 33,1M 2s
+ 29000K .......... .......... .......... .......... .......... 69% 83,1M 2s
+ 29050K .......... .......... .......... .......... .......... 69% 59,5M 2s
+ 29100K .......... .......... .......... .......... .......... 69% 31,8M 2s
+ 29150K .......... .......... .......... .......... .......... 70% 129M 2s
+ 29200K .......... .......... .......... .......... .......... 70% 117M 2s
+ 29250K .......... .......... .......... .......... .......... 70% 69,8M 2s
+ 29300K .......... .......... .......... .......... .......... 70% 56,8M 2s
+ 29350K .......... .......... .......... .......... .......... 70% 89,9M 2s
+ 29400K .......... .......... .......... .......... .......... 70% 81,7M 2s
+ 29450K .......... .......... .......... .......... .......... 70% 102M 2s
+ 29500K .......... .......... .......... .......... .......... 70% 32,2M 2s
+ 29550K .......... .......... .......... .......... .......... 71% 62,2M 2s
+ 29600K .......... .......... .......... .......... .......... 71% 9,95M 2s
+ 29650K .......... .......... .......... .......... .......... 71% 61,8M 2s
+ 29700K .......... .......... .......... .......... .......... 71% 27,6M 2s
+ 29750K .......... .......... .......... .......... .......... 71% 9,47M 2s
+ 29800K .......... .......... .......... .......... .......... 71% 49,6M 2s
+ 29850K .......... .......... .......... .......... .......... 71% 61,8M 2s
+ 29900K .......... .......... .......... .......... .......... 71% 79,8M 2s
+ 29950K .......... .......... .......... .......... .......... 72% 43,6M 2s
+ 30000K .......... .......... .......... .......... .......... 72% 12,1M 2s
+ 30050K .......... .......... .......... .......... .......... 72% 9,44M 2s
+ 30100K .......... .......... .......... .......... .......... 72% 62,0M 2s
+ 30150K .......... .......... .......... .......... .......... 72% 34,3M 2s
+ 30200K .......... .......... .......... .......... .......... 72% 85,1M 2s
+ 30250K .......... .......... .......... .......... .......... 72% 10,4M 2s
+ 30300K .......... .......... .......... .......... .......... 72% 60,9M 2s
+ 30350K .......... .......... .......... .......... .......... 72% 8,51M 2s
+ 30400K .......... .......... .......... .......... .......... 73% 52,0M 2s
+ 30450K .......... .......... .......... .......... .......... 73% 121M 2s
+ 30500K .......... .......... .......... .......... .......... 73% 9,72M 2s
+ 30550K .......... .......... .......... .......... .......... 73% 66,8M 2s
+ 30600K .......... .......... .......... .......... .......... 73% 15,5M 2s
+ 30650K .......... .......... .......... .......... .......... 73% 27,7M 2s
+ 30700K .......... .......... .......... .......... .......... 73% 43,3M 2s
+ 30750K .......... .......... .......... .......... .......... 73% 122M 2s
+ 30800K .......... .......... .......... .......... .......... 74% 95,3M 2s
+ 30850K .......... .......... .......... .......... .......... 74% 75,0M 2s
+ 30900K .......... .......... .......... .......... .......... 74% 137M 2s
+ 30950K .......... .......... .......... .......... .......... 74% 14,7M 2s
+ 31000K .......... .......... .......... .......... .......... 74% 78,5M 2s
+ 31050K .......... .......... .......... .......... .......... 74% 139M 2s
+ 31100K .......... .......... .......... .......... .......... 74% 27,4M 2s
+ 31150K .......... .......... .......... .......... .......... 74% 86,3M 2s
+ 31200K .......... .......... .......... .......... .......... 75% 106M 2s
+ 31250K .......... .......... .......... .......... .......... 75% 12,0M 2s
+ 31300K .......... .......... .......... .......... .......... 75% 61,8M 2s
+ 31350K .......... .......... .......... .......... .......... 75% 2,48M 2s
+ 31400K .......... .......... .......... .......... .......... 75% 19,5M 2s
+ 31450K .......... .......... .......... .......... .......... 75% 110M 2s
+ 31500K .......... .......... .......... .......... .......... 75% 122M 2s
+ 31550K .......... .......... .......... .......... .......... 75% 126M 2s
+ 31600K .......... .......... .......... .......... .......... 75% 28,2M 2s
+ 31650K .......... .......... .......... .......... .......... 76% 83,6M 2s
+ 31700K .......... .......... .......... .......... .......... 76% 81,5M 2s
+ 31750K .......... .......... .......... .......... .......... 76% 94,8M 2s
+ 31800K .......... .......... .......... .......... .......... 76% 83,4M 2s
+ 31850K .......... .......... .......... .......... .......... 76% 100M 1s
+ 31900K .......... .......... .......... .......... .......... 76% 70,2M 1s
+ 31950K .......... .......... .......... .......... .......... 76% 121M 1s
+ 32000K .......... .......... .......... .......... .......... 76% 61,4M 1s
+ 32050K .......... .......... .......... .......... .......... 77% 43,4M 1s
+ 32100K .......... .......... .......... .......... .......... 77% 37,1M 1s
+ 32150K .......... .......... .......... .......... .......... 77% 11,7M 1s
+ 32200K .......... .......... .......... .......... .......... 77% 83,8M 1s
+ 32250K .......... .......... .......... .......... .......... 77% 22,5M 1s
+ 32300K .......... .......... .......... .......... .......... 77% 9,99M 1s
+ 32350K .......... .......... .......... .......... .......... 77% 39,0M 1s
+ 32400K .......... .......... .......... .......... .......... 77% 62,6M 1s
+ 32450K .......... .......... .......... .......... .......... 78% 117M 1s
+ 32500K .......... .......... .......... .......... .......... 78% 44,7M 1s
+ 32550K .......... .......... .......... .......... .......... 78% 14,5M 1s
+ 32600K .......... .......... .......... .......... .......... 78% 8,11M 1s
+ 32650K .......... .......... .......... .......... .......... 78% 61,7M 1s
+ 32700K .......... .......... .......... .......... .......... 78% 31,2M 1s
+ 32750K .......... .......... .......... .......... .......... 78% 57,9M 1s
+ 32800K .......... .......... .......... .......... .......... 78% 54,3M 1s
+ 32850K .......... .......... .......... .......... .......... 78% 13,1M 1s
+ 32900K .......... .......... .......... .......... .......... 79% 54,3M 1s
+ 32950K .......... .......... .......... .......... .......... 79% 8,54M 1s
+ 33000K .......... .......... .......... .......... .......... 79% 46,9M 1s
+ 33050K .......... .......... .......... .......... .......... 79% 71,3M 1s
+ 33100K .......... .......... .......... .......... .......... 79% 94,1M 1s
+ 33150K .......... .......... .......... .......... .......... 79% 11,0M 1s
+ 33200K .......... .......... .......... .......... .......... 79% 14,1M 1s
+ 33250K .......... .......... .......... .......... .......... 79% 26,0M 1s
+ 33300K .......... .......... .......... .......... .......... 80% 71,5M 1s
+ 33350K .......... .......... .......... .......... .......... 80% 70,9M 1s
+ 33400K .......... .......... .......... .......... .......... 80% 66,6M 1s
+ 33450K .......... .......... .......... .......... .......... 80% 72,1M 1s
+ 33500K .......... .......... .......... .......... .......... 80% 88,0M 1s
+ 33550K .......... .......... .......... .......... .......... 80% 17,3M 1s
+ 33600K .......... .......... .......... .......... .......... 80% 52,4M 1s
+ 33650K .......... .......... .......... .......... .......... 80% 70,5M 1s
+ 33700K .......... .......... .......... .......... .......... 81% 81,7M 1s
+ 33750K .......... .......... .......... .......... .......... 81% 77,3M 1s
+ 33800K .......... .......... .......... .......... .......... 81% 67,6M 1s
+ 33850K .......... .......... .......... .......... .......... 81% 69,8M 1s
+ 33900K .......... .......... .......... .......... .......... 81% 91,4M 1s
+ 33950K .......... .......... .......... .......... .......... 81% 15,6M 1s
+ 34000K .......... .......... .......... .......... .......... 81% 3,40M 1s
+ 34050K .......... .......... .......... .......... .......... 81% 6,13M 1s
+ 34100K .......... .......... .......... .......... .......... 82% 73,9M 1s
+ 34150K .......... .......... .......... .......... .......... 82% 46,6M 1s
+ 34200K .......... .......... .......... .......... .......... 82% 51,9M 1s
+ 34250K .......... .......... .......... .......... .......... 82% 51,7M 1s
+ 34300K .......... .......... .......... .......... .......... 82% 53,6M 1s
+ 34350K .......... .......... .......... .......... .......... 82% 44,7M 1s
+ 34400K .......... .......... .......... .......... .......... 82% 41,9M 1s
+ 34450K .......... .......... .......... .......... .......... 82% 44,0M 1s
+ 34500K .......... .......... .......... .......... .......... 82% 43,0M 1s
+ 34550K .......... .......... .......... .......... .......... 83% 74,0M 1s
+ 34600K .......... .......... .......... .......... .......... 83% 51,1M 1s
+ 34650K .......... .......... .......... .......... .......... 83% 54,0M 1s
+ 34700K .......... .......... .......... .......... .......... 83% 62,2M 1s
+ 34750K .......... .......... .......... .......... .......... 83% 74,9M 1s
+ 34800K .......... .......... .......... .......... .......... 83% 119M 1s
+ 34850K .......... .......... .......... .......... .......... 83% 136M 1s
+ 34900K .......... .......... .......... .......... .......... 83% 62,2M 1s
+ 34950K .......... .......... .......... .......... .......... 84% 20,3M 1s
+ 35000K .......... .......... .......... .......... .......... 84% 54,3M 1s
+ 35050K .......... .......... .......... .......... .......... 84% 11,2M 1s
+ 35100K .......... .......... .......... .......... .......... 84% 28,9M 1s
+ 35150K .......... .......... .......... .......... .......... 84% 54,5M 1s
+ 35200K .......... .......... .......... .......... .......... 84% 99,8M 1s
+ 35250K .......... .......... .......... .......... .......... 84% 169M 1s
+ 35300K .......... .......... .......... .......... .......... 84% 13,1M 1s
+ 35350K .......... .......... .......... .......... .......... 85% 7,96M 1s
+ 35400K .......... .......... .......... .......... .......... 85% 50,9M 1s
+ 35450K .......... .......... .......... .......... .......... 85% 47,9M 1s
+ 35500K .......... .......... .......... .......... .......... 85% 52,4M 1s
+ 35550K .......... .......... .......... .......... .......... 85% 57,5M 1s
+ 35600K .......... .......... .......... .......... .......... 85% 70,1M 1s
+ 35650K .......... .......... .......... .......... .......... 85% 14,8M 1s
+ 35700K .......... .......... .......... .......... .......... 85% 11,2M 1s
+ 35750K .......... .......... .......... .......... .......... 85% 10,8M 1s
+ 35800K .......... .......... .......... .......... .......... 86% 90,7M 1s
+ 35850K .......... .......... .......... .......... .......... 86% 68,4M 1s
+ 35900K .......... .......... .......... .......... .......... 86% 22,4M 1s
+ 35950K .......... .......... .......... .......... .......... 86% 62,0M 1s
+ 36000K .......... .......... .......... .......... .......... 86% 15,4M 1s
+ 36050K .......... .......... .......... .......... .......... 86% 26,6M 1s
+ 36100K .......... .......... .......... .......... .......... 86% 86,4M 1s
+ 36150K .......... .......... .......... .......... .......... 86% 43,3M 1s
+ 36200K .......... .......... .......... .......... .......... 87% 89,9M 1s
+ 36250K .......... .......... .......... .......... .......... 87% 100M 1s
+ 36300K .......... .......... .......... .......... .......... 87% 84,9M 1s
+ 36350K .......... .......... .......... .......... .......... 87% 16,9M 1s
+ 36400K .......... .......... .......... .......... .......... 87% 75,4M 1s
+ 36450K .......... .......... .......... .......... .......... 87% 98,4M 1s
+ 36500K .......... .......... .......... .......... .......... 87% 94,8M 1s
+ 36550K .......... .......... .......... .......... .......... 87% 4,17M 1s
+ 36600K .......... .......... .......... .......... .......... 88% 236M 1s
+ 36650K .......... .......... .......... .......... .......... 88% 271M 1s
+ 36700K .......... .......... .......... .......... .......... 88% 263M 1s
+ 36750K .......... .......... .......... .......... .......... 88% 273M 1s
+ 36800K .......... .......... .......... .......... .......... 88% 220M 1s
+ 36850K .......... .......... .......... .......... .......... 88% 26,3M 1s
+ 36900K .......... .......... .......... .......... .......... 88% 4,03M 1s
+ 36950K .......... .......... .......... .......... .......... 88% 15,4M 1s
+ 37000K .......... .......... .......... .......... .......... 88% 87,5M 1s
+ 37050K .......... .......... .......... .......... .......... 89% 96,7M 1s
+ 37100K .......... .......... .......... .......... .......... 89% 103M 1s
+ 37150K .......... .......... .......... .......... .......... 89% 82,8M 1s
+ 37200K .......... .......... .......... .......... .......... 89% 76,2M 1s
+ 37250K .......... .......... .......... .......... .......... 89% 145M 1s
+ 37300K .......... .......... .......... .......... .......... 89% 36,0M 1s
+ 37350K .......... .......... .......... .......... .......... 89% 98,7M 1s
+ 37400K .......... .......... .......... .......... .......... 89% 90,8M 1s
+ 37450K .......... .......... .......... .......... .......... 90% 99,7M 1s
+ 37500K .......... .......... .......... .......... .......... 90% 145M 1s
+ 37550K .......... .......... .......... .......... .......... 90% 99,3M 1s
+ 37600K .......... .......... .......... .......... .......... 90% 30,2M 1s
+ 37650K .......... .......... .......... .......... .......... 90% 149M 1s
+ 37700K .......... .......... .......... .......... .......... 90% 69,9M 1s
+ 37750K .......... .......... .......... .......... .......... 90% 12,5M 1s
+ 37800K .......... .......... .......... .......... .......... 90% 66,3M 1s
+ 37850K .......... .......... .......... .......... .......... 91% 88,5M 1s
+ 37900K .......... .......... .......... .......... .......... 91% 24,3M 0s
+ 37950K .......... .......... .......... .......... .......... 91% 11,8M 0s
+ 38000K .......... .......... .......... .......... .......... 91% 20,9M 0s
+ 38050K .......... .......... .......... .......... .......... 91% 60,5M 0s
+ 38100K .......... .......... .......... .......... .......... 91% 118M 0s
+ 38150K .......... .......... .......... .......... .......... 91% 114M 0s
+ 38200K .......... .......... .......... .......... .......... 91% 17,3M 0s
+ 38250K .......... .......... .......... .......... .......... 91% 8,87M 0s
+ 38300K .......... .......... .......... .......... .......... 92% 70,9M 0s
+ 38350K .......... .......... .......... .......... .......... 92% 26,9M 0s
+ 38400K .......... .......... .......... .......... .......... 92% 94,6M 0s
+ 38450K .......... .......... .......... .......... .......... 92% 99,7M 0s
+ 38500K .......... .......... .......... .......... .......... 92% 97,3M 0s
+ 38550K .......... .......... .......... .......... .......... 92% 96,8M 0s
+ 38600K .......... .......... .......... .......... .......... 92% 12,2M 0s
+ 38650K .......... .......... .......... .......... .......... 92% 52,0M 0s
+ 38700K .......... .......... .......... .......... .......... 93% 6,15M 0s
+ 38750K .......... .......... .......... .......... .......... 93% 68,5M 0s
+ 38800K .......... .......... .......... .......... .......... 93% 82,7M 0s
+ 38850K .......... .......... .......... .......... .......... 93% 16,7M 0s
+ 38900K .......... .......... .......... .......... .......... 93% 117M 0s
+ 38950K .......... .......... .......... .......... .......... 93% 20,1M 0s
+ 39000K .......... .......... .......... .......... .......... 93% 71,4M 0s
+ 39050K .......... .......... .......... .......... .......... 93% 19,6M 0s
+ 39100K .......... .......... .......... .......... .......... 94% 131M 0s
+ 39150K .......... .......... .......... .......... .......... 94% 48,5M 0s
+ 39200K .......... .......... .......... .......... .......... 94% 36,2M 0s
+ 39250K .......... .......... .......... .......... .......... 94% 65,7M 0s
+ 39300K .......... .......... .......... .......... .......... 94% 136M 0s
+ 39350K .......... .......... .......... .......... .......... 94% 24,8M 0s
+ 39400K .......... .......... .......... .......... .......... 94% 63,1M 0s
+ 39450K .......... .......... .......... .......... .......... 94% 79,9M 0s
+ 39500K .......... .......... .......... .......... .......... 94% 123M 0s
+ 39550K .......... .......... .......... .......... .......... 95% 6,16M 0s
+ 39600K .......... .......... .......... .......... .......... 95% 14,5M 0s
+ 39650K .......... .......... .......... .......... .......... 95% 19,8M 0s
+ 39700K .......... .......... .......... .......... .......... 95% 103M 0s
+ 39750K .......... .......... .......... .......... .......... 95% 104M 0s
+ 39800K .......... .......... .......... .......... .......... 95% 98,2M 0s
+ 39850K .......... .......... .......... .......... .......... 95% 91,2M 0s
+ 39900K .......... .......... .......... .......... .......... 95% 4,90M 0s
+ 39950K .......... .......... .......... .......... .......... 96% 116M 0s
+ 40000K .......... .......... .......... .......... .......... 96% 9,96M 0s
+ 40050K .......... .......... .......... .......... .......... 96% 93,2M 0s
+ 40100K .......... .......... .......... .......... .......... 96% 100M 0s
+ 40150K .......... .......... .......... .......... .......... 96% 147M 0s
+ 40200K .......... .......... .......... .......... .......... 96% 114M 0s
+ 40250K .......... .......... .......... .......... .......... 96% 99,1M 0s
+ 40300K .......... .......... .......... .......... .......... 96% 92,2M 0s
+ 40350K .......... .......... .......... .......... .......... 97% 98,0M 0s
+ 40400K .......... .......... .......... .......... .......... 97% 71,4M 0s
+ 40450K .......... .......... .......... .......... .......... 97% 96,9M 0s
+ 40500K .......... .......... .......... .......... .......... 97% 96,5M 0s
+ 40550K .......... .......... .......... .......... .......... 97% 92,0M 0s
+ 40600K .......... .......... .......... .......... .......... 97% 88,5M 0s
+ 40650K .......... .......... .......... .......... .......... 97% 96,6M 0s
+ 40700K .......... .......... .......... .......... .......... 97% 43,2M 0s
+ 40750K .......... .......... .......... .......... .......... 97% 81,9M 0s
+ 40800K .......... .......... .......... .......... .......... 98% 11,4M 0s
+ 40850K .......... .......... .......... .......... .......... 98% 25,4M 0s
+ 40900K .......... .......... .......... .......... .......... 98% 79,8M 0s
+ 40950K .......... .......... .......... .......... .......... 98% 11,8M 0s
+ 41000K .......... .......... .......... .......... .......... 98% 25,7M 0s
+ 41050K .......... .......... .......... .......... .......... 98% 57,9M 0s
+ 41100K .......... .......... .......... .......... .......... 98% 103M 0s
+ 41150K .......... .......... .......... .......... .......... 98% 41,8M 0s
+ 41200K .......... .......... .......... .......... .......... 99% 50,4M 0s
+ 41250K .......... .......... .......... .......... .......... 99% 6,45M 0s
+ 41300K .......... .......... .......... .......... .......... 99% 43,8M 0s
+ 41350K .......... .......... .......... .......... .......... 99% 65,6M 0s
+ 41400K .......... .......... .......... .......... .......... 99% 39,4M 0s
+ 41450K .......... .......... .......... .......... .......... 99% 48,9M 0s
+ 41500K .......... .......... .......... .......... .......... 99% 64,9M 0s
+ 41550K .......... .......... .......... .......... .......... 99% 74,2M 0s
+ 41600K .......... .......... .......... .......... ...... 100% 69,8M=5,2s
+
+2014-06-18 13:41:12 (7,77 MB/s) - ‘/home/jwiklund/Documents/.git/annex/tmp/SHA256E-s42645638--4ae41fb29bd26339ea10f53ea2b7cf3132e53d5e8fbfde7b43b912aa52b3d319.tar.gz’ saved [42645638/42645638]
+
+[2014-06-18 13:41:12 CEST] main(checksum...)
+: Downloaded git-annex.. upgrade)
+[2014-06-18 13:41:12 CEST] Pusher: Syncing with born
+(Recording state in git...)
+
+error: duplicate parent bd2e43b03fcc307166df1ab23cecb0eafe9ca3a5 ignored
+To ssh://jwiklund@born/store/backup/Documents.annex.1/
+ cf9f2a9..f8f8217 git-annex -> synced/git-annex
+ 6be6bb3..bd2e43b annex/direct/master -> synced/master
+
+git-annex version: 5.20140610-g5ec8bcf
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+[2014-06-18 13:41:14 CEST] main: Upgrading git-annex
+[2014-06-18 13:41:14 CEST] UpgradeWatcher: A new version of git-annex has been installed.
+
+error: duplicate parent e88b1485767e39ac05de700219d31011b7ac7022 ignored
+
+
+error: duplicate parent 220161f6ad836cfc581a9dd575d76c0d9e814826 ignored
+
+
+Another upgrade
+
+[2014-06-18 13:38:15 CEST] main: starting assistant version 5.20140606-g48793b6
+[2014-06-18 13:38:16 CEST] TransferScanner: Syncing with born
+
+Already up-to-date.
+(scanning...) [20
+14-06-18 13:38:16 CEST] Watcher: Performing startup scan
+Already up-to-date.
+(started...)
+gpg: WARNING: unsafe permissions on homedir `/tmp/git-annex-gpg.tmp.0'
+gpg: Signature made fre 13 jun 2014 17:28:22 CEST using DSA key ID 89C809CB
+gpg: /tmp/git-annex-gpg.tmp.0/trustdb.gpg: trustdb created
+gpg: Good signature from "git-annex distribution signing key (for Joey Hess) <id@joeyh.name>"
+gpg: WARNING: This key is not certified with a trusted signature!
+gpg: There is no indication that the signature belongs to the owner.
+Primary key fingerprint: 4005 5C6A FD2D 526B 2961 E78F 5EE1 DBA7 89C8 09CB
+[2014-06-18 13:38:17 CEST] Upgrader: An upgrade of git-annex is available. (version 5.20140613)
+To ssh://jwiklund@born/store/backup/Documents.annex.1/
+ 9537540..38006f5 git-annex -> synced/git-annex
+[2014-06-18 13:38:18 CEST] Committer: Committing changes to git
+(Recording state in git...)
+[2014-06-18 13:38:18 CEST] Pusher: Syncing with born
+Everything up-to-date
+--2014-06-18 13:38:22-- https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz
+Resolving downloads.kitenet.net (downloads.kitenet.net)... 107.170.31.195
+Connecting to downloads.kitenet.net (downloads.kitenet.net)|107.170.31.195|:443... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: 42645638 (41M) [application/x-gzip]
+Saving to: ‘/home/jwiklund/Documents/.git/annex/tmp/SHA256E-s42645638--4ae41fb29bd26339ea10f53ea2b7cf3132e53d5e8fbfde7b43b912aa52b3d319.tar.gz’
+
+ 0K .......... .......... .......... .......... .......... 0% 165K 4m12s
+ 50K .......... .......... .......... .......... .......... 0% 165K 4m12s
+ 100K .......... .......... .......... .......... .......... 0% 248K 3m43s
+ 150K .......... .......... .......... .......... .......... 0% 247K 3m29s
+ 200K .......... .......... .......... .......... .......... 0% 493K 3m4s
+ 250K .......... .......... .......... .......... .......... 0% 248K 3m1s
+ 300K .......... .......... .......... .......... .......... 0% 493K 2m47s
+ 350K .......... .......... .......... .......... .......... 0% 495K 2m36s
+ 400K .......... .......... .......... .......... .......... 1% 248K 2m37s
+ 450K .......... .......... .......... .......... .......... 1% 494K 2m30s
+ 500K .......... .......... .......... .......... .......... 1% 147M 2m16s
+ 550K .......... .......... .......... .......... .......... 1% 493K 2m11s
+ 600K .......... .......... .......... .......... .......... 1% 495K 2m7s
+ 650K .......... .......... .......... .......... .......... 1% 494K 2m4s
+ 700K .......... .......... .......... .......... .......... 1% 495K 2m1s
+ 750K .......... .......... .......... .......... .......... 1% 1,30M 1m55s
+ 800K .......... .......... .......... .......... .......... 2% 497K 1m53s
+ 850K .......... .......... .......... .......... .......... 2% 779K 1m50s
+ 900K .......... .......... .......... .......... .......... 2% 1,32M 1m45s
+ 950K .......... .......... .......... .......... .......... 2% 495K 1m44s
+ 1000K .......... .......... .......... .......... .......... 2% 48,8M 99s
+ 1050K .......... .......... .......... .......... .......... 2% 497K 98s
+ 1100K .......... .......... .......... .......... .......... 2% 8,40M 94s
+ 1150K .......... .......... .......... .......... .......... 2% 524K 93s
+ 1200K .......... .......... .......... .......... .......... 3% 786K 91s
+ 1250K .......... .......... .......... .......... .......... 3% 1,31M 89s
+ 1300K .......... .......... .......... .......... .......... 3% 8,46M 86s
+ 1350K .......... .......... .......... .......... .......... 3% 526K 85s
+ 1400K .......... .......... .......... .......... .......... 3% 8,23M 82s
+ 1450K .......... .......... .......... .......... .......... 3% 53,9M 80s
+ 1500K .......... .......... .......... .......... .......... 3% 523K 79s
+ 1550K .......... .......... .......... .......... .......... 3% 10,7M 77s
+ 1600K .......... .......... .......... .......... .......... 3% 865K 76s
+ 1650K .......... .......... .......... .......... .......... 4% 1,12M 75s
+ 1700K .......... .......... .......... .......... .......... 4% 59,8M 72s
+ 1750K .......... .......... .......... .......... .......... 4% 875K 72s
+ 1800K .......... .......... .......... .......... .......... 4% 1,26M 70s
+ 1850K .......... .......... .......... .......... .......... 4% 5,14M 69s
+ 1900K .......... .......... .......... .......... .......... 4% 968K 68s
+ 1950K .......... .......... .......... .......... .......... 4% 1,24M 67s
+ 2000K .......... .......... .......... .......... .......... 4% 4,91M 65s
+ 2050K .......... .......... .......... .......... .......... 5% 969K 65s
+ 2100K .......... .......... .......... .......... .......... 5% 1,13M 64s
+ 2150K .......... .......... .......... .......... .......... 5% 38,0M 62s
+ 2200K .......... .......... .......... .......... .......... 5% 9,06M 61s
+ 2250K .......... .......... .......... .......... .......... 5% 525K 61s
+ 2300K .......... .......... .......... .......... .......... 5% 72,7M 60s
+ 2350K .......... .......... .......... .......... .......... 5% 70,4M 59s
+ 2400K .......... .......... .......... .......... .......... 5% 9,59M 57s
+ 2450K .......... .......... .......... .......... .......... 6% 528K 58s
+ 2500K .......... .......... .......... .......... .......... 6% 62,6M 56s
+ 2550K .......... .......... .......... .......... .......... 6% 10,0M 55s
+ 2600K .......... .......... .......... .......... .......... 6% 88,8M 54s
+ 2650K .......... .......... .......... .......... .......... 6% 521K 55s
+ 2700K .......... .......... .......... .......... .......... 6% 133M 54s
+ 2750K .......... .......... .......... .......... .......... 6% 11,6M 53s
+ 2800K .......... .......... .......... .......... .......... 6% 7,35M 52s
+ 2850K .......... .......... .......... .......... .......... 6% 554K 52s
+ 2900K .......... .......... .......... .......... .......... 7% 22,5M 51s
+ 2950K .......... .......... .......... .......... .......... 7% 18,7M 50s
+ 3000K .......... .......... .......... .......... .......... 7% 8,07M 49s
+ 3050K .......... .......... .......... .......... .......... 7% 548K 50s
+ 3100K .......... .......... .......... .......... .......... 7% 56,1M 49s
+ 3150K .......... .......... .......... .......... .......... 7% 38,2M 48s
+ 3200K .......... .......... .......... .......... .......... 7% 25,9M 47s
+ 3250K .......... .......... .......... .......... .......... 7% 8,37M 46s
+ 3300K .......... .......... .......... .......... .......... 8% 7,57M 46s
+ 3350K .......... .......... .......... .......... .......... 8% 585K 46s
+ 3400K .......... .......... .......... .......... .......... 8% 28,9M 45s
+ 3450K .......... .......... .......... .......... .......... 8% 35,6M 45s
+ 3500K .......... .......... .......... .......... .......... 8% 8,14M 44s
+ 3550K .......... .......... .......... .......... .......... 8% 72,0M 43s
+ 3600K .......... .......... .......... .......... .......... 8% 4,17M 43s
+ 3650K .......... .......... .......... .......... .......... 8% 619K 43s
+ 3700K .......... .......... .......... .......... .......... 9% 28,8M 42s
+ 3750K .......... .......... .......... .......... .......... 9% 8,04M 42s
+ 3800K .......... .......... .......... .......... .......... 9% 57,3M 41s
+ 3850K .......... .......... .......... .......... .......... 9% 12,1M 41s
+ 3900K .......... .......... .......... .......... .......... 9% 6,22M 40s
+ 3950K .......... .......... .......... .......... .......... 9% 620K 40s
+ 4000K .......... .......... .......... .......... .......... 9% 19,1M 40s
+ 4050K .......... .......... .......... .......... .......... 9% 55,1M 39s
+ 4100K .......... .......... .......... .......... .......... 9% 9,63M 39s
+ 4150K .......... .......... .......... .......... .......... 10% 12,0M 38s
+ 4200K .......... .......... .......... .......... .......... 10% 8,14M 38s
+ 4250K .......... .......... .......... .......... .......... 10% 15,8M 37s
+ 4300K .......... .......... .......... .......... .......... 10% 625K 38s
+ 4350K .......... .......... .......... .......... .......... 10% 24,5M 37s
+ 4400K .......... .......... .......... .......... .......... 10% 8,66M 37s
+ 4450K .......... .......... .......... .......... .......... 10% 13,0M 36s
+ 4500K .......... .......... .......... .......... .......... 10% 71,5M 36s
+ 4550K .......... .......... .......... .......... .......... 11% 8,28M 36s
+ 4600K .......... .......... .......... .......... .......... 11% 6,10M 35s
+ 4650K .......... .......... .......... .......... .......... 11% 653K 35s
+ 4700K .......... .......... .......... .......... .......... 11% 50,6M 35s
+ 4750K .......... .......... .......... .......... .......... 11% 8,95M 35s
+ 4800K .......... .......... .......... .......... .......... 11% 11,5M 34s
+ 4850K .......... .......... .......... .......... .......... 11% 8,84M 34s
+ 4900K .......... .......... .......... .......... .......... 11% 53,4M 33s
+ 4950K .......... .......... .......... .......... .......... 12% 7,17M 33s
+ 5000K .......... .......... .......... .......... .......... 12% 53,7M 33s
+ 5050K .......... .......... .......... .......... .......... 12% 649K 33s
+ 5100K .......... .......... .......... .......... .......... 12% 9,07M 33s
+ 5150K .......... .......... .......... .......... .......... 12% 10,7M 32s
+ 5200K .......... .......... .......... .......... .......... 12% 9,40M 32s
+ 5250K .......... .......... .......... .......... .......... 12% 47,5M 32s
+ 5300K .......... .......... .......... .......... .......... 12% 68,6M 31s
+ 5350K .......... .......... .......... .......... .......... 12% 7,06M 31s
+ 5400K .......... .......... .......... .......... .......... 13% 11,4M 31s
+ 5450K .......... .......... .......... .......... .......... 13% 688K 31s
+ 5500K .......... .......... .......... .......... .......... 13% 8,70M 31s
+ 5550K .......... .......... .......... .......... .......... 13% 11,1M 30s
+ 5600K .......... .......... .......... .......... .......... 13% 8,83M 30s
+ 5650K .......... .......... .......... .......... .......... 13% 58,9M 30s
+ 5700K .......... .......... .......... .......... .......... 13% 83,1M 29s
+ 5750K .......... .......... .......... .......... .......... 13% 7,21M 29s
+ 5800K .......... .......... .......... .......... .......... 14% 66,1M 29s
+ 5850K .......... .......... .......... .......... .......... 14% 4,65M 29s
+ 5900K .......... .......... .......... .......... .......... 14% 757K 29s
+ 5950K .......... .......... .......... .......... .......... 14% 7,62M 29s
+ 6000K .......... .......... .......... .......... .......... 14% 10,4M 28s
+ 6050K .......... .......... .......... .......... .......... 14% 8,59M 28s
+ 6100K .......... .......... .......... .......... .......... 14% 51,4M 28s
+ 6150K .......... .......... .......... .......... .......... 14% 74,5M 28s
+ 6200K .......... .......... .......... .......... .......... 15% 6,84M 27s
+ 6250K .......... .......... .......... .......... .......... 15% 67,2M 27s
+ 6300K .......... .......... .......... .......... .......... 15% 5,40M 27s
+ 6350K .......... .......... .......... .......... .......... 15% 63,4M 27s
+ 6400K .......... .......... .......... .......... .......... 15% 706K 27s
+ 6450K .......... .......... .......... .......... .......... 15% 9,08M 27s
+ 6500K .......... .......... .......... .......... .......... 15% 9,43M 26s
+ 6550K .......... .......... .......... .......... .......... 15% 70,0M 26s
+ 6600K .......... .......... .......... .......... .......... 15% 65,4M 26s
+ 6650K .......... .......... .......... .......... .......... 16% 67,7M 26s
+ 6700K .......... .......... .......... .......... .......... 16% 7,02M 25s
+ 6750K .......... .......... .......... .......... .......... 16% 65,8M 25s
+ 6800K .......... .......... .......... .......... .......... 16% 4,77M 25s
+ 6850K .......... .......... .......... .......... .......... 16% 64,7M 25s
+ 6900K .......... .......... .......... .......... .......... 16% 783K 25s
+ 6950K .......... .......... .......... .......... .......... 16% 4,63M 25s
+ 7000K .......... .......... .......... .......... .......... 16% 9,00M 25s
+ 7050K .......... .......... .......... .......... .......... 17% 69,7M 24s
+ 7100K .......... .......... .......... .......... .......... 17% 64,8M 24s
+ 7150K .......... .......... .......... .......... .......... 17% 53,1M 24s
+ 7200K .......... .......... .......... .......... .......... 17% 6,69M 24s
+ 7250K .......... .......... .......... .......... .......... 17% 70,3M 24s
+ 7300K .......... .......... .......... .......... .......... 17% 8,28M 23s
+ 7350K .......... .......... .......... .......... .......... 17% 12,7M 23s
+ 7400K .......... .......... .......... .......... .......... 17% 765K 23s
+ 7450K .......... .......... .......... .......... .......... 18% 9,09M 23s
+ 7500K .......... .......... .......... .......... .......... 18% 4,85M 23s
+ 7550K .......... .......... .......... .......... .......... 18% 61,3M 23s
+ 7600K .......... .......... .......... .......... .......... 18% 61,6M 23s
+ 7650K .......... .......... .......... .......... .......... 18% 74,1M 23s
+ 7700K .......... .......... .......... .......... .......... 18% 73,6M 22s
+ 7750K .......... .......... .......... .......... .......... 18% 7,79M 22s
+ 7800K .......... .......... .......... .......... .......... 18% 49,1M 22s
+ 7850K .......... .......... .......... .......... .......... 18% 72,2M 22s
+ 7900K .......... .......... .......... .......... .......... 19% 8,42M 22s
+ 7950K .......... .......... .......... .......... .......... 19% 732K 22s
+ 8000K .......... .......... .......... .......... .......... 19% 8,99M 22s
+ 8050K .......... .......... .......... .......... .......... 19% 50,7M 22s
+ 8100K .......... .......... .......... .......... .......... 19% 5,19M 21s
+ 8150K .......... .......... .......... .......... .......... 19% 47,4M 21s
+ 8200K .......... .......... .......... .......... .......... 19% 48,4M 21s
+ 8250K .......... .......... .......... .......... .......... 19% 52,5M 21s
+ 8300K .......... .......... .......... .......... .......... 20% 80,5M 21s
+ 8350K .......... .......... .......... .......... .......... 20% 8,32M 21s
+ 8400K .......... .......... .......... .......... .......... 20% 40,0M 21s
+ 8450K .......... .......... .......... .......... .......... 20% 8,81M 20s
+ 8500K .......... .......... .......... .......... .......... 20% 75,7M 20s
+ 8550K .......... .......... .......... .......... .......... 20% 718K 20s
+ 8600K .......... .......... .......... .......... .......... 20% 46,3M 20s
+ 8650K .......... .......... .......... .......... .......... 20% 15,7M 20s
+ 8700K .......... .......... .......... .......... .......... 21% 81,4M 20s
+ 8750K .......... .......... .......... .......... .......... 21% 4,92M 20s
+ 8800K .......... .......... .......... .......... .......... 21% 44,6M 20s
+ 8850K .......... .......... .......... .......... .......... 21% 32,6M 20s
+ 8900K .......... .......... .......... .......... .......... 21% 94,8M 19s
+ 8950K .......... .......... .......... .......... .......... 21% 104M 19s
+ 9000K .......... .......... .......... .......... .......... 21% 8,37M 19s
+ 9050K .......... .......... .......... .......... .......... 21% 77,8M 19s
+ 9100K .......... .......... .......... .......... .......... 21% 76,5M 19s
+ 9150K .......... .......... .......... .......... .......... 22% 88,5M 19s
+ 9200K .......... .......... .......... .......... .......... 22% 4,91M 19s
+ 9250K .......... .......... .......... .......... .......... 22% 762K 19s
+ 9300K .......... .......... .......... .......... .......... 22% 57,2M 19s
+ 9350K .......... .......... .......... .......... .......... 22% 15,2M 19s
+ 9400K .......... .......... .......... .......... .......... 22% 4,79M 18s
+ 9450K .......... .......... .......... .......... .......... 22% 69,4M 18s
+ 9500K .......... .......... .......... .......... .......... 22% 66,2M 18s
+ 9550K .......... .......... .......... .......... .......... 23% 29,9M 18s
+ 9600K .......... .......... .......... .......... .......... 23% 58,8M 18s
+ 9650K .......... .......... .......... .......... .......... 23% 9,77M 18s
+ 9700K .......... .......... .......... .......... .......... 23% 45,1M 18s
+ 9750K .......... .......... .......... .......... .......... 23% 64,3M 18s
+ 9800K .......... .......... .......... .......... .......... 23% 59,4M 18s
+ 9850K .......... .......... .......... .......... .......... 23% 10,2M 17s
+ 9900K .......... .......... .......... .......... .......... 23% 55,9M 17s
+ 9950K .......... .......... .......... .......... .......... 24% 93,7M 17s
+ 10000K .......... .......... .......... .......... .......... 24% 730K 17s
+ 10050K .......... .......... .......... .......... .......... 24% 66,3M 17s
+ 10100K .......... .......... .......... .......... .......... 24% 13,6M 17s
+ 10150K .......... .......... .......... .......... .......... 24% 86,6M 17s
+ 10200K .......... .......... .......... .......... .......... 24% 4,97M 17s
+ 10250K .......... .......... .......... .......... .......... 24% 33,2M 17s
+ 10300K .......... .......... .......... .......... .......... 24% 34,1M 17s
+ 10350K .......... .......... .......... .......... .......... 24% 158M 17s
+ 10400K .......... .......... .......... .......... .......... 25% 65,6M 16s
+ 10450K .......... .......... .......... .......... .......... 25% 9,12M 16s
+ 10500K .......... .......... .......... .......... .......... 25% 101M 16s
+ 10550K .......... .......... .......... .......... .......... 25% 65,6M 16s
+ 10600K .......... .......... .......... .......... .......... 25% 44,4M 16s
+ 10650K .......... .......... .......... .......... .......... 25% 8,78M 16s
+ 10700K .......... .......... .......... .......... .......... 25% 97,5M 16s
+ 10750K .......... .......... .......... .......... .......... 25% 7,92M 16s
+ 10800K .......... .......... .......... .......... .......... 26% 6,88M 16s
+ 10850K .......... .......... .......... .......... .......... 26% 886K 16s
+ 10900K .......... .......... .......... .......... .......... 26% 66,7M 16s
+ 10950K .......... .......... .......... .......... .......... 26% 12,5M 16s
+ 11000K .......... .......... .......... .......... .......... 26% 5,70M 16s
+ 11050K .......... .......... .......... .......... .......... 26% 65,8M 15s
+ 11100K .......... .......... .......... .......... .......... 26% 25,5M 15s
+ 11150K .......... .......... .......... .......... .......... 26% 35,3M 15s
+ 11200K .......... .......... .......... .......... .......... 27% 55,0M 15s
+ 11250K .......... .......... .......... .......... .......... 27% 9,19M 15s
+ 11300K .......... .......... .......... .......... .......... 27% 58,9M 15s
+ 11350K .......... .......... .......... .......... .......... 27% 64,1M 15s
+ 11400K .......... .......... .......... .......... .......... 27% 57,1M 15s
+ 11450K .......... .......... .......... .......... .......... 27% 9,39M 15s
+ 11500K .......... .......... .......... .......... .......... 27% 84,9M 15s
+ 11550K .......... .......... .......... .......... .......... 27% 89,1M 15s
+ 11600K .......... .......... .......... .......... .......... 27% 8,04M 15s
+ 11650K .......... .......... .......... .......... .......... 28% 85,4M 14s
+ 11700K .......... .......... .......... .......... .......... 28% 815K 15s
+ 11750K .......... .......... .......... .......... .......... 28% 44,9M 14s
+ 11800K .......... .......... .......... .......... .......... 28% 131M 14s
+ 11850K .......... .......... .......... .......... .......... 28% 12,7M 14s
+ 11900K .......... .......... .......... .......... .......... 28% 5,71M 14s
+ 11950K .......... .......... .......... .......... .......... 28% 19,3M 14s
+ 12000K .......... .......... .......... .......... .......... 28% 22,0M 14s
+ 12050K .......... .......... .......... .......... .......... 29% 111M 14s
+ 12100K .......... .......... .......... .......... .......... 29% 44,5M 14s
+ 12150K .......... .......... .......... .......... .......... 29% 10,8M 14s
+ 12200K .......... .......... .......... .......... .......... 29% 169M 14s
+ 12250K .......... .......... .......... .......... .......... 29% 102M 14s
+ 12300K .......... .......... .......... .......... .......... 29% 97,9M 14s
+ 12350K .......... .......... .......... .......... .......... 29% 8,70M 14s
+ 12400K .......... .......... .......... .......... .......... 29% 47,2M 13s
+ 12450K .......... .......... .......... .......... .......... 30% 9,37M 13s
+ 12500K .......... .......... .......... .......... .......... 30% 77,2M 13s
+ 12550K .......... .......... .......... .......... .......... 30% 44,6M 13s
+ 12600K .......... .......... .......... .......... .......... 30% 84,0M 13s
+ 12650K .......... .......... .......... .......... .......... 30% 2,51M 13s
+ 12700K .......... .......... .......... .......... .......... 30% 1,15M 13s
+ 12750K .......... .......... .......... .......... .......... 30% 60,1M 13s
+ 12800K .......... .......... .......... .......... .......... 30% 12,1M 13s
+ 12850K .......... .......... .......... .......... .......... 30% 5,66M 13s
+ 12900K .......... .......... .......... .......... .......... 31% 22,1M 13s
+ 12950K .......... .......... .......... .......... .......... 31% 56,1M 13s
+ 13000K .......... .......... .......... .......... .......... 31% 27,4M 13s
+ 13050K .......... .......... .......... .......... .......... 31% 45,7M 13s
+ 13100K .......... .......... .......... .......... .......... 31% 10,4M 13s
+ 13150K .......... .......... .......... .......... .......... 31% 69,7M 13s
+ 13200K .......... .......... .......... .......... .......... 31% 60,2M 13s
+ 13250K .......... .......... .......... .......... .......... 31% 39,8M 12s
+ 13300K .......... .......... .......... .......... .......... 32% 11,8M 12s
+ 13350K .......... .......... .......... .......... .......... 32% 66,0M 12s
+ 13400K .......... .......... .......... .......... .......... 32% 48,4M 12s
+ 13450K .......... .......... .......... .......... .......... 32% 9,81M 12s
+ 13500K .......... .......... .......... .......... .......... 32% 23,9M 12s
+ 13550K .......... .......... .......... .......... .......... 32% 54,2M 12s
+ 13600K .......... .......... .......... .......... .......... 32% 54,2M 12s
+ 13650K .......... .......... .......... .......... .......... 32% 10,8M 12s
+ 13700K .......... .......... .......... .......... .......... 33% 908K 12s
+ 13750K .......... .......... .......... .......... .......... 33% 34,0M 12s
+ 13800K .......... .......... .......... .......... .......... 33% 14,8M 12s
+ 13850K .......... .......... .......... .......... .......... 33% 5,88M 12s
+ 13900K .......... .......... .......... .......... .......... 33% 44,5M 12s
+ 13950K .......... .......... .......... .......... .......... 33% 22,8M 12s
+ 14000K .......... .......... .......... .......... .......... 33% 22,8M 12s
+ 14050K .......... .......... .......... .......... .......... 33% 60,0M 12s
+ 14100K .......... .......... .......... .......... .......... 33% 10,5M 12s
+ 14150K .......... .......... .......... .......... .......... 34% 66,9M 11s
+ 14200K .......... .......... .......... .......... .......... 34% 63,9M 11s
+ 14250K .......... .......... .......... .......... .......... 34% 68,9M 11s
+ 14300K .......... .......... .......... .......... .......... 34% 11,4M 11s
+ 14350K .......... .......... .......... .......... .......... 34% 50,6M 11s
+ 14400K .......... .......... .......... .......... .......... 34% 54,7M 11s
+ 14450K .......... .......... .......... .......... .......... 34% 74,5M 11s
+ 14500K .......... .......... .......... .......... .......... 34% 10,4M 11s
+ 14550K .......... .......... .......... .......... .......... 35% 33,4M 11s
+ 14600K .......... .......... .......... .......... .......... 35% 62,0M 11s
+ 14650K .......... .......... .......... .......... .......... 35% 35,2M 11s
+ 14700K .......... .......... .......... .......... .......... 35% 75,6M 11s
+ 14750K .......... .......... .......... .......... .......... 35% 11,9M 11s
+ 14800K .......... .......... .......... .......... .......... 35% 908K 11s
+ 14850K .......... .......... .......... .......... .......... 35% 37,1M 11s
+ 14900K .......... .......... .......... .......... .......... 35% 12,6M 11s
+ 14950K .......... .......... .......... .......... .......... 36% 7,11M 11s
+ 15000K .......... .......... .......... .......... .......... 36% 13,5M 11s
+ 15050K .......... .......... .......... .......... .......... 36% 71,6M 11s
+ 15100K .......... .......... .......... .......... .......... 36% 24,4M 11s
+ 15150K .......... .......... .......... .......... .......... 36% 69,1M 10s
+ 15200K .......... .......... .......... .......... .......... 36% 63,0M 10s
+ 15250K .......... .......... .......... .......... .......... 36% 10,1M 10s
+ 15300K .......... .......... .......... .......... .......... 36% 37,9M 10s
+ 15350K .......... .......... .......... .......... .......... 36% 69,2M 10s
+ 15400K .......... .......... .......... .......... .......... 37% 68,1M 10s
+ 15450K .......... .......... .......... .......... .......... 37% 10,4M 10s
+ 15500K .......... .......... .......... .......... .......... 37% 64,3M 10s
+ 15550K .......... .......... .......... .......... .......... 37% 81,2M 10s
+ 15600K .......... .......... .......... .......... .......... 37% 71,2M 10s
+ 15650K .......... .......... .......... .......... .......... 37% 13,3M 10s
+ 15700K .......... .......... .......... .......... .......... 37% 43,7M 10s
+ 15750K .......... .......... .......... .......... .......... 37% 28,3M 10s
+ 15800K .......... .......... .......... .......... .......... 38% 59,9M 10s
+ 15850K .......... .......... .......... .......... .......... 38% 84,3M 10s
+ 15900K .......... .......... .......... .......... .......... 38% 12,2M 10s
+ 15950K .......... .......... .......... .......... .......... 38% 8,59M 10s
+ 16000K .......... .......... .......... .......... .......... 38% 926K 10s
+ 16050K .......... .......... .......... .......... .......... 38% 65,0M 10s
+ 16100K .......... .......... .......... .......... .......... 38% 70,3M 10s
+ 16150K .......... .......... .......... .......... .......... 38% 7,79M 10s
+ 16200K .......... .......... .......... .......... .......... 39% 14,6M 10s
+ 16250K .......... .......... .......... .......... .......... 39% 71,5M 10s
+ 16300K .......... .......... .......... .......... .......... 39% 21,6M 9s
+ 16350K .......... .......... .......... .......... .......... 39% 73,9M 9s
+ 16400K .......... .......... .......... .......... .......... 39% 56,4M 9s
+ 16450K .......... .......... .......... .......... .......... 39% 9,36M 9s
+ 16500K .......... .......... .......... .......... .......... 39% 69,8M 9s
+ 16550K .......... .......... .......... .......... .......... 39% 67,0M 9s
+ 16600K .......... .......... .......... .......... .......... 39% 58,4M 9s
+ 16650K .......... .......... .......... .......... .......... 40% 9,56M 9s
+ 16700K .......... .......... .......... .......... .......... 40% 71,2M 9s
+ 16750K .......... .......... .......... .......... .......... 40% 74,3M 9s
+ 16800K .......... .......... .......... .......... .......... 40% 63,4M 9s
+ 16850K .......... .......... .......... .......... .......... 40% 17,3M 9s
+ 16900K .......... .......... .......... .......... .......... 40% 60,6M 9s
+ 16950K .......... .......... .......... .......... .......... 40% 67,8M 9s
+ 17000K .......... .......... .......... .......... .......... 40% 30,6M 9s
+ 17050K .......... .......... .......... .......... .......... 41% 44,2M 9s
+ 17100K .......... .......... .......... .......... .......... 41% 92,3M 9s
+ 17150K .......... .......... .......... .......... .......... 41% 87,8M 9s
+ 17200K .......... .......... .......... .......... .......... 41% 14,1M 9s
+ 17250K .......... .......... .......... .......... .......... 41% 1,92M 9s
+ 17300K .......... .......... .......... .......... .......... 41% 1,41M 9s
+ 17350K .......... .......... .......... .......... .......... 41% 72,0M 9s
+ 17400K .......... .......... .......... .......... .......... 41% 61,9M 9s
+ 17450K .......... .......... .......... .......... .......... 42% 7,98M 9s
+ 17500K .......... .......... .......... .......... .......... 42% 18,0M 9s
+ 17550K .......... .......... .......... .......... .......... 42% 18,5M 9s
+ 17600K .......... .......... .......... .......... .......... 42% 60,6M 8s
+ 17650K .......... .......... .......... .......... .......... 42% 74,3M 8s
+ 17700K .......... .......... .......... .......... .......... 42% 71,4M 8s
+ 17750K .......... .......... .......... .......... .......... 42% 9,08M 8s
+ 17800K .......... .......... .......... .......... .......... 42% 67,1M 8s
+ 17850K .......... .......... .......... .......... .......... 42% 88,4M 8s
+ 17900K .......... .......... .......... .......... .......... 43% 63,0M 8s
+ 17950K .......... .......... .......... .......... .......... 43% 90,2M 8s
+ 18000K .......... .......... .......... .......... .......... 43% 9,69M 8s
+ 18050K .......... .......... .......... .......... .......... 43% 90,6M 8s
+ 18100K .......... .......... .......... .......... .......... 43% 88,4M 8s
+ 18150K .......... .......... .......... .......... .......... 43% 83,2M 8s
+ 18200K .......... .......... .......... .......... .......... 43% 20,2M 8s
+ 18250K .......... .......... .......... .......... .......... 43% 55,5M 8s
+ 18300K .......... .......... .......... .......... .......... 44% 24,3M 8s
+ 18350K .......... .......... .......... .......... .......... 44% 100M 8s
+ 18400K .......... .......... .......... .......... .......... 44% 31,8M 8s
+ 18450K .......... .......... .......... .......... .......... 44% 90,8M 8s
+ 18500K .......... .......... .......... .......... .......... 44% 16,1M 8s
+ 18550K .......... .......... .......... .......... .......... 44% 4,01M 8s
+ 18600K .......... .......... .......... .......... .......... 44% 60,9M 8s
+ 18650K .......... .......... .......... .......... .......... 44% 3,78M 8s
+ 18700K .......... .......... .......... .......... .......... 45% 1,39M 8s
+ 18750K .......... .......... .......... .......... .......... 45% 8,10M 8s
+ 18800K .......... .......... .......... .......... .......... 45% 60,9M 8s
+ 18850K .......... .......... .......... .......... .......... 45% 69,6M 8s
+ 18900K .......... .......... .......... .......... .......... 45% 15,8M 8s
+ 18950K .......... .......... .......... .......... .......... 45% 22,2M 8s
+ 19000K .......... .......... .......... .......... .......... 45% 63,8M 8s
+ 19050K .......... .......... .......... .......... .......... 45% 73,8M 7s
+ 19100K .......... .......... .......... .......... .......... 45% 75,6M 7s
+ 19150K .......... .......... .......... .......... .......... 46% 10,4M 7s
+ 19200K .......... .......... .......... .......... .......... 46% 48,1M 7s
+ 19250K .......... .......... .......... .......... .......... 46% 34,6M 7s
+ 19300K .......... .......... .......... .......... .......... 46% 108M 7s
+ 19350K .......... .......... .......... .......... .......... 46% 121M 7s
+ 19400K .......... .......... .......... .......... .......... 46% 10,9M 7s
+ 19450K .......... .......... .......... .......... .......... 46% 42,3M 7s
+ 19500K .......... .......... .......... .......... .......... 46% 63,6M 7s
+ 19550K .......... .......... .......... .......... .......... 47% 73,5M 7s
+ 19600K .......... .......... .......... .......... .......... 47% 25,8M 7s
+ 19650K .......... .......... .......... .......... .......... 47% 56,0M 7s
+ 19700K .......... .......... .......... .......... .......... 47% 49,8M 7s
+ 19750K .......... .......... .......... .......... .......... 47% 52,2M 7s
+ 19800K .......... .......... .......... .......... .......... 47% 61,9M 7s
+ 19850K .......... .......... .......... .......... .......... 47% 34,3M 7s
+ 19900K .......... .......... .......... .......... .......... 47% 50,3M 7s
+ 19950K .......... .......... .......... .......... .......... 48% 25,2M 7s
+ 20000K .......... .......... .......... .......... .......... 48% 7,45M 7s
+ 20050K .......... .......... .......... .......... .......... 48% 8,22M 7s
+ 20100K .......... .......... .......... .......... .......... 48% 3,67M 7s
+ 20150K .......... .......... .......... .......... .......... 48% 3,41M 7s
+ 20200K .......... .......... .......... .......... .......... 48% 1,78M 7s
+ 20250K .......... .......... .......... .......... .......... 48% 66,9M 7s
+ 20300K .......... .......... .......... .......... .......... 48% 74,2M 7s
+ 20350K .......... .......... .......... .......... .......... 48% 12,8M 7s
+ 20400K .......... .......... .......... .......... .......... 49% 29,9M 7s
+ 20450K .......... .......... .......... .......... .......... 49% 50,4M 7s
+ 20500K .......... .......... .......... .......... .......... 49% 63,1M 7s
+ 20550K .......... .......... .......... .......... .......... 49% 63,9M 7s
+ 20600K .......... .......... .......... .......... .......... 49% 15,6M 7s
+ 20650K .......... .......... .......... .......... .......... 49% 21,4M 7s
+ 20700K .......... .......... .......... .......... .......... 49% 54,6M 6s
+ 20750K .......... .......... .......... .......... .......... 49% 78,0M 6s
+ 20800K .......... .......... .......... .......... .......... 50% 93,0M 6s
+ 20850K .......... .......... .......... .......... .......... 50% 115M 6s
+ 20900K .......... .......... .......... .......... .......... 50% 13,9M 6s
+ 20950K .......... .......... .......... .......... .......... 50% 91,8M 6s
+ 21000K .......... .......... .......... .......... .......... 50% 33,4M 6s
+ 21050K .......... .......... .......... .......... .......... 50% 116M 6s
+ 21100K .......... .......... .......... .......... .......... 50% 28,1M 6s
+ 21150K .......... .......... .......... .......... .......... 50% 113M 6s
+ 21200K .......... .......... .......... .......... .......... 51% 39,4M 6s
+ 21250K .......... .......... .......... .......... .......... 51% 108M 6s
+ 21300K .......... .......... .......... .......... .......... 51% 30,8M 6s
+ 21350K .......... .......... .......... .......... .......... 51% 64,5M 6s
+ 21400K .......... .......... .......... .......... .......... 51% 75,7M 6s
+ 21450K .......... .......... .......... .......... .......... 51% 81,5M 6s
+ 21500K .......... .......... .......... .......... .......... 51% 16,2M 6s
+ 21550K .......... .......... .......... .......... .......... 51% 107M 6s
+ 21600K .......... .......... .......... .......... .......... 51% 4,12M 6s
+ 21650K .......... .......... .......... .......... .......... 52% 80,1M 6s
+ 21700K .......... .......... .......... .......... .......... 52% 3,73M 6s
+ 21750K .......... .......... .......... .......... .......... 52% 5,47M 6s
+ 21800K .......... .......... .......... .......... .......... 52% 1,50M 6s
+ 21850K .......... .......... .......... .......... .......... 52% 48,4M 6s
+ 21900K .......... .......... .......... .......... .......... 52% 65,3M 6s
+ 21950K .......... .......... .......... .......... .......... 52% 12,9M 6s
+ 22000K .......... .......... .......... .......... .......... 52% 34,5M 6s
+ 22050K .......... .......... .......... .......... .......... 53% 79,9M 6s
+ 22100K .......... .......... .......... .......... .......... 53% 75,7M 6s
+ 22150K .......... .......... .......... .......... .......... 53% 92,5M 6s
+ 22200K .......... .......... .......... .......... .......... 53% 14,2M 6s
+ 22250K .......... .......... .......... .......... .......... 53% 78,3M 6s
+ 22300K .......... .......... .......... .......... .......... 53% 23,3M 6s
+ 22350K .......... .......... .......... .......... .......... 53% 51,2M 6s
+ 22400K .......... .......... .......... .......... .......... 53% 35,1M 6s
+ 22450K .......... .......... .......... .......... .......... 54% 59,3M 6s
+ 22500K .......... .......... .......... .......... .......... 54% 84,3M 6s
+ 22550K .......... .......... .......... .......... .......... 54% 22,4M 6s
+ 22600K .......... .......... .......... .......... .......... 54% 66,5M 5s
+ 22650K .......... .......... .......... .......... .......... 54% 37,8M 5s
+ 22700K .......... .......... .......... .......... .......... 54% 81,6M 5s
+ 22750K .......... .......... .......... .......... .......... 54% 68,9M 5s
+ 22800K .......... .......... .......... .......... .......... 54% 29,8M 5s
+ 22850K .......... .......... .......... .......... .......... 54% 49,7M 5s
+ 22900K .......... .......... .......... .......... .......... 55% 68,8M 5s
+ 22950K .......... .......... .......... .......... .......... 55% 44,2M 5s
+ 23000K .......... .......... .......... .......... .......... 55% 56,1M 5s
+ 23050K .......... .......... .......... .......... .......... 55% 88,3M 5s
+ 23100K .......... .......... .......... .......... .......... 55% 87,2M 5s
+ 23150K .......... .......... .......... .......... .......... 55% 75,9M 5s
+ 23200K .......... .......... .......... .......... .......... 55% 20,9M 5s
+ 23250K .......... .......... .......... .......... .......... 55% 65,3M 5s
+ 23300K .......... .......... .......... .......... .......... 56% 99,4M 5s
+ 23350K .......... .......... .......... .......... .......... 56% 4,19M 5s
+ 23400K .......... .......... .......... .......... .......... 56% 6,24M 5s
+ 23450K .......... .......... .......... .......... .......... 56% 2,81M 5s
+ 23500K .......... .......... .......... .......... .......... 56% 6,61M 5s
+ 23550K .......... .......... .......... .......... .......... 56% 2,22M 5s
+ 23600K .......... .......... .......... .......... .......... 56% 31,8M 5s
+ 23650K .......... .......... .......... .......... .......... 56% 13,2M 5s
+ 23700K .......... .......... .......... .......... .......... 57% 27,7M 5s
+ 23750K .......... .......... .......... .......... .......... 57% 38,7M 5s
+ 23800K .......... .......... .......... .......... .......... 57% 56,6M 5s
+ 23850K .......... .......... .......... .......... .......... 57% 71,8M 5s
+ 23900K .......... .......... .......... .......... .......... 57% 20,8M 5s
+ 23950K .......... .......... .......... .......... .......... 57% 42,8M 5s
+ 24000K .......... .......... .......... .......... .......... 57% 60,5M 5s
+ 24050K .......... .......... .......... .......... .......... 57% 58,8M 5s
+ 24100K .......... .......... .......... .......... .......... 57% 31,7M 5s
+ 24150K .......... .......... .......... .......... .......... 58% 56,4M 5s
+ 24200K .......... .......... .......... .......... .......... 58% 94,3M 5s
+ 24250K .......... .......... .......... .......... .......... 58% 154M 5s
+ 24300K .......... .......... .......... .......... .......... 58% 166M 5s
+ 24350K .......... .......... .......... .......... .......... 58% 21,3M 5s
+ 24400K .......... .......... .......... .......... .......... 58% 28,9M 5s
+ 24450K .......... .......... .......... .......... .......... 58% 60,2M 5s
+ 24500K .......... .......... .......... .......... .......... 58% 99,0M 5s
+ 24550K .......... .......... .......... .......... .......... 59% 51,9M 5s
+ 24600K .......... .......... .......... .......... .......... 59% 109M 5s
+ 24650K .......... .......... .......... .......... .......... 59% 24,6M 5s
+ 24700K .......... .......... .......... .......... .......... 59% 78,5M 5s
+ 24750K .......... .......... .......... .......... .......... 59% 150M 5s
+ 24800K .......... .......... .......... .......... .......... 59% 58,7M 5s
+ 24850K .......... .......... .......... .......... .......... 59% 60,5M 4s
+ 24900K .......... .......... .......... .......... .......... 59% 95,2M 4s
+ 24950K .......... .......... .......... .......... .......... 60% 98,6M 4s
+ 25000K .......... .......... .......... .......... .......... 60% 88,9M 4s
+ 25050K .......... .......... .......... .......... .......... 60% 23,0M 4s
+ 25100K .......... .......... .......... .......... .......... 60% 61,5M 4s
+ 25150K .......... .......... .......... .......... .......... 60% 105M 4s
+ 25200K .......... .......... .......... .......... .......... 60% 6,64M 4s
+ 25250K .......... .......... .......... .......... .......... 60% 7,11M 4s
+ 25300K .......... .......... .......... .......... .......... 60% 4,75M 4s
+ 25350K .......... .......... .......... .......... .......... 60% 2,81M 4s
+ 25400K .......... .......... .......... .......... .......... 61% 50,6M 4s
+ 25450K .......... .......... .......... .......... .......... 61% 2,10M 4s
+ 25500K .......... .......... .......... .......... .......... 61% 26,6M 4s
+ 25550K .......... .......... .......... .......... .......... 61% 13,6M 4s
+ 25600K .......... .......... .......... .......... .......... 61% 16,6M 4s
+ 25650K .......... .......... .......... .......... .......... 61% 37,4M 4s
+ 25700K .......... .......... .......... .......... .......... 61% 69,9M 4s
+ 25750K .......... .......... .......... .......... .......... 61% 75,8M 4s
+ 25800K .......... .......... .......... .......... .......... 62% 32,8M 4s
+ 25850K .......... .......... .......... .......... .......... 62% 92,0M 4s
+ 25900K .......... .......... .......... .......... .......... 62% 163M 4s
+ 25950K .......... .......... .......... .......... .......... 62% 30,3M 4s
+ 26000K .......... .......... .......... .......... .......... 62% 35,2M 4s
+ 26050K .......... .......... .......... .......... .......... 62% 95,9M 4s
+ 26100K .......... .......... .......... .......... .......... 62% 55,0M 4s
+ 26150K .......... .......... .......... .......... .......... 62% 105M 4s
+ 26200K .......... .......... .......... .......... .......... 63% 142M 4s
+ 26250K .......... .......... .......... .......... .......... 63% 111M 4s
+ 26300K .......... .......... .......... .......... .......... 63% 17,8M 4s
+ 26350K .......... .......... .......... .......... .......... 63% 150M 4s
+ 26400K .......... .......... .......... .......... .......... 63% 41,1M 4s
+ 26450K .......... .......... .......... .......... .......... 63% 40,0M 4s
+ 26500K .......... .......... .......... .......... .......... 63% 90,6M 4s
+ 26550K .......... .......... .......... .......... .......... 63% 91,6M 4s
+ 26600K .......... .......... .......... .......... .......... 63% 69,6M 4s
+ 26650K .......... .......... .......... .......... .......... 64% 24,8M 4s
+ 26700K .......... .......... .......... .......... .......... 64% 94,8M 4s
+ 26750K .......... .......... .......... .......... .......... 64% 83,2M 4s
+ 26800K .......... .......... .......... .......... .......... 64% 42,4M 4s
+ 26850K .......... .......... .......... .......... .......... 64% 88,3M 4s
+ 26900K .......... .......... .......... .......... .......... 64% 88,8M 4s
+ 26950K .......... .......... .......... .......... .......... 64% 91,1M 4s
+ 27000K .......... .......... .......... .......... .......... 64% 35,7M 4s
+ 27050K .......... .......... .......... .......... .......... 65% 88,5M 4s
+ 27100K .......... .......... .......... .......... .......... 65% 83,5M 4s
+ 27150K .......... .......... .......... .......... .......... 65% 84,8M 4s
+ 27200K .......... .......... .......... .......... .......... 65% 6,73M 4s
+ 27250K .......... .......... .......... .......... .......... 65% 9,14M 4s
+ 27300K .......... .......... .......... .......... .......... 65% 28,7M 4s
+ 27350K .......... .......... .......... .......... .......... 65% 4,70M 4s
+ 27400K .......... .......... .......... .......... .......... 65% 2,82M 4s
+ 27450K .......... .......... .......... .......... .......... 66% 6,37M 4s
+ 27500K .......... .......... .......... .......... .......... 66% 3,01M 3s
+ 27550K .......... .......... .......... .......... .......... 66% 21,2M 3s
+ 27600K .......... .......... .......... .......... .......... 66% 13,7M 3s
+ 27650K .......... .......... .......... .......... .......... 66% 14,9M 3s
+ 27700K .......... .......... .......... .......... .......... 66% 55,1M 3s
+ 27750K .......... .......... .......... .......... .......... 66% 55,6M 3s
+ 27800K .......... .......... .......... .......... .......... 66% 67,1M 3s
+ 27850K .......... .......... .......... .......... .......... 66% 88,1M 3s
+ 27900K .......... .......... .......... .......... .......... 67% 61,5M 3s
+ 27950K .......... .......... .......... .......... .......... 67% 78,6M 3s
+ 28000K .......... .......... .......... .......... .......... 67% 28,8M 3s
+ 28050K .......... .......... .......... .......... .......... 67% 42,3M 3s
+ 28100K .......... .......... .......... .......... .......... 67% 46,7M 3s
+ 28150K .......... .......... .......... .......... .......... 67% 97,7M 3s
+ 28200K .......... .......... .......... .......... .......... 67% 72,4M 3s
+ 28250K .......... .......... .......... .......... .......... 67% 101M 3s
+ 28300K .......... .......... .......... .......... .......... 68% 104M 3s
+ 28350K .......... .......... .......... .......... .......... 68% 121M 3s
+ 28400K .......... .......... .......... .......... .......... 68% 21,7M 3s
+ 28450K .......... .......... .......... .......... .......... 68% 92,8M 3s
+ 28500K .......... .......... .......... .......... .......... 68% 99,8M 3s
+ 28550K .......... .......... .......... .......... .......... 68% 33,8M 3s
+ 28600K .......... .......... .......... .......... .......... 68% 114M 3s
+ 28650K .......... .......... .......... .......... .......... 68% 83,6M 3s
+ 28700K .......... .......... .......... .......... .......... 69% 142M 3s
+ 28750K .......... .......... .......... .......... .......... 69% 126M 3s
+ 28800K .......... .......... .......... .......... .......... 69% 9,03M 3s
+ 28850K .......... .......... .......... .......... .......... 69% 115M 3s
+ 28900K .......... .......... .......... .......... .......... 69% 101M 3s
+ 28950K .......... .......... .......... .......... .......... 69% 83,4M 3s
+ 29000K .......... .......... .......... .......... .......... 69% 88,0M 3s
+ 29050K .......... .......... .......... .......... .......... 69% 94,5M 3s
+ 29100K .......... .......... .......... .......... .......... 69% 122M 3s
+ 29150K .......... .......... .......... .......... .......... 70% 97,3M 3s
+ 29200K .......... .......... .......... .......... .......... 70% 91,8M 3s
+ 29250K .......... .......... .......... .......... .......... 70% 113M 3s
+ 29300K .......... .......... .......... .......... .......... 70% 35,7M 3s
+ 29350K .......... .......... .......... .......... .......... 70% 19,6M 3s
+ 29400K .......... .......... .......... .......... .......... 70% 110M 3s
+ 29450K .......... .......... .......... .......... .......... 70% 22,9M 3s
+ 29500K .......... .......... .......... .......... .......... 70% 6,27M 3s
+ 29550K .......... .......... .......... .......... .......... 71% 5,42M 3s
+ 29600K .......... .......... .......... .......... .......... 71% 5,40M 3s
+ 29650K .......... .......... .......... .......... .......... 71% 5,61M 3s
+ 29700K .......... .......... .......... .......... .......... 71% 3,47M 3s
+ 29750K .......... .......... .......... .......... .......... 71% 3,94M 3s
+ 29800K .......... .......... .......... .......... .......... 71% 17,8M 3s
+ 29850K .......... .......... .......... .......... .......... 71% 50,3M 3s
+ 29900K .......... .......... .......... .......... .......... 71% 15,4M 3s
+ 29950K .......... .......... .......... .......... .......... 72% 56,6M 3s
+ 30000K .......... .......... .......... .......... .......... 72% 39,4M 3s
+ 30050K .......... .......... .......... .......... .......... 72% 62,8M 3s
+ 30100K .......... .......... .......... .......... .......... 72% 49,8M 3s
+ 30150K .......... .......... .......... .......... .......... 72% 75,4M 3s
+ 30200K .......... .......... .......... .......... .......... 72% 63,8M 3s
+ 30250K .......... .......... .......... .......... .......... 72% 102M 3s
+ 30300K .......... .......... .......... .......... .......... 72% 79,7M 3s
+ 30350K .......... .......... .......... .......... .......... 72% 58,3M 3s
+ 30400K .......... .......... .......... .......... .......... 73% 36,5M 3s
+ 30450K .......... .......... .......... .......... .......... 73% 123M 3s
+ 30500K .......... .......... .......... .......... .......... 73% 21,5M 3s
+ 30550K .......... .......... .......... .......... .......... 73% 122M 3s
+ 30600K .......... .......... .......... .......... .......... 73% 121M 2s
+ 30650K .......... .......... .......... .......... .......... 73% 83,1M 2s
+ 30700K .......... .......... .......... .......... .......... 73% 122M 2s
+ 30750K .......... .......... .......... .......... .......... 73% 71,4M 2s
+ 30800K .......... .......... .......... .......... .......... 74% 30,6M 2s
+ 30850K .......... .......... .......... .......... .......... 74% 132M 2s
+ 30900K .......... .......... .......... .......... .......... 74% 89,6M 2s
+ 30950K .......... .......... .......... .......... .......... 74% 115M 2s
+ 31000K .......... .......... .......... .......... .......... 74% 117M 2s
+ 31050K .......... .......... .......... .......... .......... 74% 90,4M 2s
+ 31100K .......... .......... .......... .......... .......... 74% 9,46M 2s
+ 31150K .......... .......... .......... .......... .......... 74% 108M 2s
+ 31200K .......... .......... .......... .......... .......... 75% 51,7M 2s
+ 31250K .......... .......... .......... .......... .......... 75% 74,9M 2s
+ 31300K .......... .......... .......... .......... .......... 75% 104M 2s
+ 31350K .......... .......... .......... .......... .......... 75% 111M 2s
+ 31400K .......... .......... .......... .......... .......... 75% 102M 2s
+ 31450K .......... .......... .......... .......... .......... 75% 77,7M 2s
+ 31500K .......... .......... .......... .......... .......... 75% 104M 2s
+ 31550K .......... .......... .......... .......... .......... 75% 92,5M 2s
+ 31600K .......... .......... .......... .......... .......... 75% 94,8M 2s
+ 31650K .......... .......... .......... .......... .......... 76% 112M 2s
+ 31700K .......... .......... .......... .......... .......... 76% 23,4M 2s
+ 31750K .......... .......... .......... .......... .......... 76% 95,5M 2s
+ 31800K .......... .......... .......... .......... .......... 76% 21,2M 2s
+ 31850K .......... .......... .......... .......... .......... 76% 7,00M 2s
+ 31900K .......... .......... .......... .......... .......... 76% 5,33M 2s
+ 31950K .......... .......... .......... .......... .......... 76% 98,7M 2s
+ 32000K .......... .......... .......... .......... .......... 76% 5,87M 2s
+ 32050K .......... .......... .......... .......... .......... 77% 3,46M 2s
+ 32100K .......... .......... .......... .......... .......... 77% 3,11M 2s
+ 32150K .......... .......... .......... .......... .......... 77% 8,76M 2s
+ 32200K .......... .......... .......... .......... .......... 77% 47,3M 2s
+ 32250K .......... .......... .......... .......... .......... 77% 17,2M 2s
+ 32300K .......... .......... .......... .......... .......... 77% 13,4M 2s
+ 32350K .......... .......... .......... .......... .......... 77% 80,2M 2s
+ 32400K .......... .......... .......... .......... .......... 77% 75,5M 2s
+ 32450K .......... .......... .......... .......... .......... 78% 96,5M 2s
+ 32500K .......... .......... .......... .......... .......... 78% 63,6M 2s
+ 32550K .......... .......... .......... .......... .......... 78% 100M 2s
+ 32600K .......... .......... .......... .......... .......... 78% 30,2M 2s
+ 32650K .......... .......... .......... .......... .......... 78% 79,5M 2s
+ 32700K .......... .......... .......... .......... .......... 78% 91,0M 2s
+ 32750K .......... .......... .......... .......... .......... 78% 44,3M 2s
+ 32800K .......... .......... .......... .......... .......... 78% 49,2M 2s
+ 32850K .......... .......... .......... .......... .......... 78% 86,4M 2s
+ 32900K .......... .......... .......... .......... .......... 79% 20,8M 2s
+ 32950K .......... .......... .......... .......... .......... 79% 50,1M 2s
+ 33000K .......... .......... .......... .......... .......... 79% 86,0M 2s
+ 33050K .......... .......... .......... .......... .......... 79% 118M 2s
+ 33100K .......... .......... .......... .......... .......... 79% 121M 2s
+ 33150K .......... .......... .......... .......... .......... 79% 128M 2s
+ 33200K .......... .......... .......... .......... .......... 79% 103M 2s
+ 33250K .......... .......... .......... .......... .......... 79% 121M 2s
+ 33300K .......... .......... .......... .......... .......... 80% 39,0M 2s
+ 33350K .......... .......... .......... .......... .......... 80% 114M 2s
+ 33400K .......... .......... .......... .......... .......... 80% 95,3M 2s
+ 33450K .......... .......... .......... .......... .......... 80% 86,6M 2s
+ 33500K .......... .......... .......... .......... .......... 80% 116M 2s
+ 33550K .......... .......... .......... .......... .......... 80% 11,0M 2s
+ 33600K .......... .......... .......... .......... .......... 80% 76,4M 2s
+ 33650K .......... .......... .......... .......... .......... 80% 124M 2s
+ 33700K .......... .......... .......... .......... .......... 81% 43,7M 2s
+ 33750K .......... .......... .......... .......... .......... 81% 103M 2s
+ 33800K .......... .......... .......... .......... .......... 81% 86,7M 2s
+ 33850K .......... .......... .......... .......... .......... 81% 90,0M 2s
+ 33900K .......... .......... .......... .......... .......... 81% 47,6M 2s
+ 33950K .......... .......... .......... .......... .......... 81% 98,9M 2s
+ 34000K .......... .......... .......... .......... .......... 81% 79,3M 2s
+ 34050K .......... .......... .......... .......... .......... 81% 93,2M 2s
+ 34100K .......... .......... .......... .......... .......... 82% 96,5M 2s
+ 34150K .......... .......... .......... .......... .......... 82% 95,0M 2s
+ 34200K .......... .......... .......... .......... .......... 82% 52,0M 2s
+ 34250K .......... .......... .......... .......... .......... 82% 104M 2s
+ 34300K .......... .......... .......... .......... .......... 82% 93,2M 2s
+ 34350K .......... .......... .......... .......... .......... 82% 25,0M 1s
+ 34400K .......... .......... .......... .......... .......... 82% 7,35M 1s
+ 34450K .......... .......... .......... .......... .......... 82% 5,23M 1s
+ 34500K .......... .......... .......... .......... .......... 82% 6,79M 1s
+ 34550K .......... .......... .......... .......... .......... 83% 99,1M 1s
+ 34600K .......... .......... .......... .......... .......... 83% 3,23M 1s
+ 34650K .......... .......... .......... .......... .......... 83% 3,34M 1s
+ 34700K .......... .......... .......... .......... .......... 83% 6,32M 1s
+ 34750K .......... .......... .......... .......... .......... 83% 18,3M 1s
+ 34800K .......... .......... .......... .......... .......... 83% 12,6M 1s
+ 34850K .......... .......... .......... .......... .......... 83% 40,4M 1s
+ 34900K .......... .......... .......... .......... .......... 83% 68,0M 1s
+ 34950K .......... .......... .......... .......... .......... 84% 58,3M 1s
+ 35000K .......... .......... .......... .......... .......... 84% 45,2M 1s
+ 35050K .......... .......... .......... .......... .......... 84% 63,1M 1s
+ 35100K .......... .......... .......... .......... .......... 84% 54,5M 1s
+ 35150K .......... .......... .......... .......... .......... 84% 64,2M 1s
+ 35200K .......... .......... .......... .......... .......... 84% 74,6M 1s
+ 35250K .......... .......... .......... .......... .......... 84% 120M 1s
+ 35300K .......... .......... .......... .......... .......... 84% 95,9M 1s
+ 35350K .......... .......... .......... .......... .......... 85% 102M 1s
+ 35400K .......... .......... .......... .......... .......... 85% 117M 1s
+ 35450K .......... .......... .......... .......... .......... 85% 124M 1s
+ 35500K .......... .......... .......... .......... .......... 85% 139M 1s
+ 35550K .......... .......... .......... .......... .......... 85% 18,0M 1s
+ 35600K .......... .......... .......... .......... .......... 85% 98,5M 1s
+ 35650K .......... .......... .......... .......... .......... 85% 91,6M 1s
+ 35700K .......... .......... .......... .......... .......... 85% 120M 1s
+ 35750K .......... .......... .......... .......... .......... 85% 120M 1s
+ 35800K .......... .......... .......... .......... .......... 86% 107M 1s
+ 35850K .......... .......... .......... .......... .......... 86% 118M 1s
+ 35900K .......... .......... .......... .......... .......... 86% 83,0M 1s
+ 35950K .......... .......... .......... .......... .......... 86% 94,1M 1s
+ 36000K .......... .......... .......... .......... .......... 86% 69,9M 1s
+ 36050K .......... .......... .......... .......... .......... 86% 81,4M 1s
+ 36100K .......... .......... .......... .......... .......... 86% 117M 1s
+ 36150K .......... .......... .......... .......... .......... 86% 89,9M 1s
+ 36200K .......... .......... .......... .......... .......... 87% 83,4M 1s
+ 36250K .......... .......... .......... .......... .......... 87% 14,0M 1s
+ 36300K .......... .......... .......... .......... .......... 87% 84,0M 1s
+ 36350K .......... .......... .......... .......... .......... 87% 27,5M 1s
+ 36400K .......... .......... .......... .......... .......... 87% 94,0M 1s
+ 36450K .......... .......... .......... .......... .......... 87% 91,9M 1s
+ 36500K .......... .......... .......... .......... .......... 87% 47,3M 1s
+ 36550K .......... .......... .......... .......... .......... 87% 98,3M 1s
+ 36600K .......... .......... .......... .......... .......... 88% 88,5M 1s
+ 36650K .......... .......... .......... .......... .......... 88% 102M 1s
+ 36700K .......... .......... .......... .......... .......... 88% 97,9M 1s
+ 36750K .......... .......... .......... .......... .......... 88% 127M 1s
+ 36800K .......... .......... .......... .......... .......... 88% 57,2M 1s
+ 36850K .......... .......... .......... .......... .......... 88% 95,7M 1s
+ 36900K .......... .......... .......... .......... .......... 88% 88,0M 1s
+ 36950K .......... .......... .......... .......... .......... 88% 84,0M 1s
+ 37000K .......... .......... .......... .......... .......... 88% 38,4M 1s
+ 37050K .......... .......... .......... .......... .......... 89% 96,2M 1s
+ 37100K .......... .......... .......... .......... .......... 89% 10,9M 1s
+ 37150K .......... .......... .......... .......... .......... 89% 19,7M 1s
+ 37200K .......... .......... .......... .......... .......... 89% 5,09M 1s
+ 37250K .......... .......... .......... .......... .......... 89% 7,41M 1s
+ 37300K .......... .......... .......... .......... .......... 89% 3,85M 1s
+ 37350K .......... .......... .......... .......... .......... 89% 4,88M 1s
+ 37400K .......... .......... .......... .......... .......... 89% 133M 1s
+ 37450K .......... .......... .......... .......... .......... 90% 3,40M 1s
+ 37500K .......... .......... .......... .......... .......... 90% 17,3M 1s
+ 37550K .......... .......... .......... .......... .......... 90% 11,2M 1s
+ 37600K .......... .......... .......... .......... .......... 90% 123M 1s
+ 37650K .......... .......... .......... .......... .......... 90% 92,4M 1s
+ 37700K .......... .......... .......... .......... .......... 90% 68,4M 1s
+ 37750K .......... .......... .......... .......... .......... 90% 62,4M 1s
+ 37800K .......... .......... .......... .......... .......... 90% 59,1M 1s
+ 37850K .......... .......... .......... .......... .......... 91% 65,5M 1s
+ 37900K .......... .......... .......... .......... .......... 91% 55,8M 1s
+ 37950K .......... .......... .......... .......... .......... 91% 66,4M 1s
+ 38000K .......... .......... .......... .......... .......... 91% 56,0M 1s
+ 38050K .......... .......... .......... .......... .......... 91% 61,3M 1s
+ 38100K .......... .......... .......... .......... .......... 91% 60,9M 1s
+ 38150K .......... .......... .......... .......... .......... 91% 65,8M 1s
+ 38200K .......... .......... .......... .......... .......... 91% 57,1M 1s
+ 38250K .......... .......... .......... .......... .......... 91% 67,8M 1s
+ 38300K .......... .......... .......... .......... .......... 92% 74,7M 1s
+ 38350K .......... .......... .......... .......... .......... 92% 26,4M 1s
+ 38400K .......... .......... .......... .......... .......... 92% 70,8M 1s
+ 38450K .......... .......... .......... .......... .......... 92% 177M 1s
+ 38500K .......... .......... .......... .......... .......... 92% 103M 1s
+ 38550K .......... .......... .......... .......... .......... 92% 96,5M 1s
+ 38600K .......... .......... .......... .......... .......... 92% 92,9M 1s
+ 38650K .......... .......... .......... .......... .......... 92% 179M 1s
+ 38700K .......... .......... .......... .......... .......... 93% 64,0M 1s
+ 38750K .......... .......... .......... .......... .......... 93% 95,7M 1s
+ 38800K .......... .......... .......... .......... .......... 93% 69,1M 1s
+ 38850K .......... .......... .......... .......... .......... 93% 92,3M 1s
+ 38900K .......... .......... .......... .......... .......... 93% 97,2M 1s
+ 38950K .......... .......... .......... .......... .......... 93% 80,6M 0s
+ 39000K .......... .......... .......... .......... .......... 93% 89,0M 0s
+ 39050K .......... .......... .......... .......... .......... 93% 118M 0s
+ 39100K .......... .......... .......... .......... .......... 94% 21,5M 0s
+ 39150K .......... .......... .......... .......... .......... 94% 98,3M 0s
+ 39200K .......... .......... .......... .......... .......... 94% 25,7M 0s
+ 39250K .......... .......... .......... .......... .......... 94% 111M 0s
+ 39300K .......... .......... .......... .......... .......... 94% 64,2M 0s
+ 39350K .......... .......... .......... .......... .......... 94% 75,8M 0s
+ 39400K .......... .......... .......... .......... .......... 94% 64,2M 0s
+ 39450K .......... .......... .......... .......... .......... 94% 72,3M 0s
+ 39500K .......... .......... .......... .......... .......... 94% 72,0M 0s
+ 39550K .......... .......... .......... .......... .......... 95% 69,6M 0s
+ 39600K .......... .......... .......... .......... .......... 95% 75,7M 0s
+ 39650K .......... .......... .......... .......... .......... 95% 72,5M 0s
+ 39700K .......... .......... .......... .......... .......... 95% 74,1M 0s
+ 39750K .......... .......... .......... .......... .......... 95% 69,4M 0s
+ 39800K .......... .......... .......... .......... .......... 95% 61,5M 0s
+ 39850K .......... .......... .......... .......... .......... 95% 70,3M 0s
+ 39900K .......... .......... .......... .......... .......... 95% 76,4M 0s
+ 39950K .......... .......... .......... .......... .......... 96% 93,7M 0s
+ 40000K .......... .......... .......... .......... .......... 96% 73,8M 0s
+ 40050K .......... .......... .......... .......... .......... 96% 11,3M 0s
+ 40100K .......... .......... .......... .......... .......... 96% 5,42M 0s
+ 40150K .......... .......... .......... .......... .......... 96% 6,38M 0s
+ 40200K .......... .......... .......... .......... .......... 96% 37,9M 0s
+ 40250K .......... .......... .......... .......... .......... 96% 4,09M 0s
+ 40300K .......... .......... .......... .......... .......... 96% 4,75M 0s
+ 40350K .......... .......... .......... .......... .......... 97% 3,60M 0s
+ 40400K .......... .......... .......... .......... .......... 97% 16,7M 0s
+ 40450K .......... .......... .......... .......... .......... 97% 78,3M 0s
+ 40500K .......... .......... .......... .......... .......... 97% 10,4M 0s
+ 40550K .......... .......... .......... .......... .......... 97% 50,6M 0s
+ 40600K .......... .......... .......... .......... .......... 97% 96,0M 0s
+ 40650K .......... .......... .......... .......... .......... 97% 101M 0s
+ 40700K .......... .......... .......... .......... .......... 97% 114M 0s
+ 40750K .......... .......... .......... .......... .......... 97% 125M 0s
+ 40800K .......... .......... .......... .......... .......... 98% 81,4M 0s
+ 40850K .......... .......... .......... .......... .......... 98% 107M 0s
+ 40900K .......... .......... .......... .......... .......... 98% 107M 0s
+ 40950K .......... .......... .......... .......... .......... 98% 75,1M 0s
+ 41000K .......... .......... .......... .......... .......... 98% 108M 0s
+ 41050K .......... .......... .......... .......... .......... 98% 62,9M 0s
+ 41100K .......... .......... .......... .......... .......... 98% 51,6M 0s
+ 41150K .......... .......... .......... .......... .......... 98% 73,4M 0s
+ 41200K .......... .......... .......... .......... .......... 99% 47,4M 0s
+ 41250K .......... .......... .......... .......... .......... 99% 87,9M 0s
+ 41300K .......... .......... .......... .......... .......... 99% 18,0M 0s
+ 41350K .......... .......... .......... .......... .......... 99% 78,5M 0s
+ 41400K .......... .......... .......... .......... .......... 99% 78,3M 0s
+ 41450K .......... .......... .......... .......... .......... 99% 107M 0s
+ 41500K .......... .......... .......... .......... .......... 99% 73,6M 0s
+ 41550K .......... .......... .......... .......... .......... 99% 50,9M 0s
+ 41600K .......... .......... .......... .......... ...... 100% 122M=7,4s
+
+2014-06-18 13:38:29 (5,52 MB/s) - ‘/home/jwiklund/Documents/.git/annex/tmp/SHA256E-s42645638--4ae41fb29bd26339ea10f53ea2b7cf3132e53d5e8fbfde7b43b912aa52b3d319.tar.gz’ saved [42645638/42645638]
+
+[2014-06-18 13:38:29 CEST] main: Downloaded git-annex.. upgrade)
+(checksum...)
+[2014-06-18 13:38:29 CEST] Pusher: Syncing with born
+(Recording state in git...)
+To ssh://jwiklund@born/store/backup/Documents.annex.1/
+ 38006f5..fdae080 git-annex -> synced/git-annex
+git-annex version: 5.20140610-g5ec8bcf
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+[2014-06-18 13:38:31 CEST] main: Upgrading git-annex
+[2014-06-18 13:38:31 CEST] UpgradeWatcher: A new version of git-annex has been installed.
+
+Already up-to-date.
+
+Already up-to-date.
+
+Already up-to-date.
+
+Already up-to-date.
+channel 4: bad ext data
+channel 4: bad ext data
+channel 4: bad ext data
+channel 4: bad ext data
+channel 4: bad ext data
+channel 4: bad ext data
+channel 4: bad ext data
+channel 4: bad ext data
+channel 4: bad ext data
+channel 4: bad ext data
+channel 4: bad ext data
+channel 4: bad ext data
+channel 4: bad ext data
+
+# End of transcript or log.
+"""]]
+
+> [[fixed|done]]; the merge race has been fixed. The upgrade loop has also
+> been dealt with. --[[Joey]]
diff --git a/doc/bugs/files_lost_during_upgrade/comment_1_3f779c4d0c9fb27532b2981bd3ad4eee._comment b/doc/bugs/files_lost_during_upgrade/comment_1_3f779c4d0c9fb27532b2981bd3ad4eee._comment
new file mode 100644
index 000000000..b510d92c1
--- /dev/null
+++ b/doc/bugs/files_lost_during_upgrade/comment_1_3f779c4d0c9fb27532b2981bd3ad4eee._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.203"
+ subject="comment 1"
+ date="2014-06-18T18:12:47Z"
+ content="""
+So [[bugs/git-annex_auto_upgrade_is_redundant]] strikes again. I have fixed up the versions to avoid this upgrade loop again. I would rather discuss any problems with where the automatic upgrade code puts git-annex in a separate bug report than this one.. (If you're running git-annex as a user that is not allowed to write to the directory where you installed it in the first place then yes, it cannot write there and will instead unpack itself into the home directory.)
+
+There are many strange things in the log, but this is probably the strangest:
+
+> fatal: Could not switch to '/home/jwiklund/Documents/.git/annex/merge/': No such file or directory
+
+This is the gitAnnexMergeDir used for direct mode merges. Since git-annex always creates that directory before starting a merge, I don't know how it could fail to exist.
+
+Other strange things:
+
+* The assistant fixes stale index.lock files on startup. But the log shows the assistant starting up and shortly thereafter there's a stale index.lock file. All I can think is that perhaps two git processes are trying to commit at the same time.
+
+* \"fatal: pathspec 'music.txt' did not match any files\", apparently output by git-add.
+
+* \"error: duplicate parent 294b61a3dce1e87a62e4d675deac2a9130b819e6 ignored\", which would happen if git-commit-tree were passed duplicate parent refs. AFAICS, the only place in git-annex that might do that is when it commits the git-annex branch. (While this says it's an error, it really is ignored, and git-commit-tree continues and makes a valid commit.)
+"""]]
diff --git a/doc/bugs/files_lost_during_upgrade/comment_2_80ba8c217e83c9d44a9dc52f4028719d._comment b/doc/bugs/files_lost_during_upgrade/comment_2_80ba8c217e83c9d44a9dc52f4028719d._comment
new file mode 100644
index 000000000..b09df4eeb
--- /dev/null
+++ b/doc/bugs/files_lost_during_upgrade/comment_2_80ba8c217e83c9d44a9dc52f4028719d._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 2"
+ date="2014-07-10T19:10:15Z"
+ content="""
+Looking back at this bug, it's clearly the same race that I later
+debugged and fixed in [[bad_merge_commit_deleting_all_files]]. There are instructions in that bug for recovering it.
+
+In particular, the \"fatal: Could not switch to '/home/jwiklund/Documents/.git/annex/merge/': No such file or directory\" is because of the race; the merge directory is being created and deleted by two contending threads.
+"""]]
diff --git a/doc/bugs/fix_for_makefile_to_check_if_OS_is_linux_or_not___40__relates_to_the_new_inotify_flag__41__.mdwn b/doc/bugs/fix_for_makefile_to_check_if_OS_is_linux_or_not___40__relates_to_the_new_inotify_flag__41__.mdwn
deleted file mode 100644
index fee00855e..000000000
--- a/doc/bugs/fix_for_makefile_to_check_if_OS_is_linux_or_not___40__relates_to_the_new_inotify_flag__41__.mdwn
+++ /dev/null
@@ -1,36 +0,0 @@
-Since the watch branch is now merged into master, it doesn't quite build cleanly on non-linux systems anymore. So here's a small change to the Makefile to work around the problem for now.
-
-<pre>
-From 707cb47744775c324060febe11987db5f10ed9ff Mon Sep 17 00:00:00 2001
-From: Jimmy Tang <jtang@tchpc.tcd.ie>
-Date: Mon, 18 Jun 2012 09:20:35 +0100
-Subject: [PATCH] Teach _Makefile_ to only do _-DWITH_INOTIFY_ when on a Linux
- machine.
-
----
- Makefile | 8 +++++++-
- 1 file changed, 7 insertions(+), 1 deletion(-)
-
-diff --git a/Makefile b/Makefile
-index 6d36e8b..8884b5c 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1,6 +1,12 @@
-+OS:=$(shell uname | sed 's/[-_].*//')
-+
-+ifeq ($(OS),Linux)
-+BASEFLAGS_OPTS+=-DWITH_INOTIFY
-+endif
-+
- PREFIX=/usr
- IGNORE=-ignore-package monads-fd -ignore-package monads-tf
--BASEFLAGS=-Wall $(IGNORE) -outputdir tmp -IUtility -DWITH_S3 -DWITH_INOTIFY
-+BASEFLAGS=-Wall $(IGNORE) -outputdir tmp -IUtility -DWITH_S3 $(BASEFLAGS_OPTS)
- GHCFLAGS=-O2 $(BASEFLAGS)
-
- ifdef PROFILE
---
-1.7.10.4
-</pre>
-
-[[done]], thanks --[[Joey]]
diff --git a/doc/bugs/flooding_me_with_ssh_password_prompts.mdwn b/doc/bugs/flooding_me_with_ssh_password_prompts.mdwn
new file mode 100644
index 000000000..191ad0250
--- /dev/null
+++ b/doc/bugs/flooding_me_with_ssh_password_prompts.mdwn
@@ -0,0 +1,42 @@
+### Please describe the problem.
+
+When I login to my session, git-annex starts a few daemons, which is fine, but then it prompts me for tons of passwords, which is really annoying.
+
+It is strange because one of the things I do when I start my session is to input my keys in the SSH agent. But then git-annex still prompts me:
+
+~~~~
+21503 ? Sl 3:04 git-annex assistant --startdelay=5s
+21517 ? S 0:03 \_ git --git-dir=/srv/musique/anarcat/books/.git --work-tree=/srv/musique/anarcat/books cat-file --batch
+21612 ? SNl 0:00 \_ git-annex remotedaemon
+21706 ? S 0:00 \_ git --git-dir=/srv/musique/anarcat/books/.git --work-tree=/srv/musique/anarcat/books check-ignore -z --stdin --verbose --non-matching
+21898 ? SN 0:00 \_ git --git-dir=/srv/musique/anarcat/books/.git --work-tree=/srv/musique/anarcat/books check-attr -z --stdin annex.backend annex.numcopies --
+ 6712 ? SNl 0:00 \_ git-annex transferkeys
+ 6719 ? SN 0:00 \_ git --git-dir=/srv/musique/anarcat/books/.git --work-tree=/srv/musique/anarcat/books cat-file --batch
+ 6720 ? SN 0:00 \_ rsync --progress --inplace --perms -e 'ssh' '-S' '.git/annex/ssh/anarc.at' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=yes' '-T' 'anarc.at' 'git-annex-shell ''sendkey'' ''/srv/books'' ''SHA256E-s17781587--f204e6ef1f14b624e222d6ad73ed41edf65c29c93afad9a1e4e1954ad68d1753.pdf'' --uuid a75cbbf7-e055-423e-b375-443e0552c9e2 ''--'' ''remoteuuid=aa500f29-42d9-4777-ae02-4a2c3d47db44'' ''direct='' ''associatedfile=Garde cotiere canadienne/Navigation dans les glaces en eaux Canadiennes (1112)/Navigation dans les glaces en eaux Canadie - Garde cotiere canadienne.pdf'' ''--''' -- dummy: /srv/musique/anarcat/books/.git/annex/tmp/SHA256E-s17781587--f204e6ef1f14b624e222d6ad73ed41edf65c29c93afad9a1e4e1954ad68d1753.pdf
+ 6721 ? SN 0:00 \_ ssh -S .git/annex/ssh/anarc.at -o ControlMaster=auto -o ControlPersist=yes -T anarc.at git-annex-shell 'sendkey' '/srv/books' 'SHA256E-s17781587--f204e6ef1f14b624e222d6ad73ed41edf65c29c93afad9a1e4e1954ad68d1753.pdf' --uuid a75cbbf7-e055-423e-b375-443e0552c9e2 '--' 'remoteuuid=aa500f29-42d9-4777-ae02-4a2c3d47db44' 'direct=' 'associatedfile=Garde cotiere canadienne/Navigation dans les glaces en eaux Canadiennes (1112)/Navigation dans les glaces en eaux Canadie - Garde cotiere canadienne.pdf' '--' dummy rsync --server --sender -vpe.Lsf --inplace .
+ 6722 ? SN 0:00 \_ /usr/bin/ssh-askpass anarcat@anarc.at's password:
+~~~~
+
+Yet I can login to `shell.anarc.at` without a passphrase without problems.
+
+Interestingly enough, my main session and git-annex do not seem to share the same `SSH_AGENT` environment variable. It's unclear to me why. git-annex's SSH_AGENT environment variable seems to refer to a process that disappeared, actually. So it could be there's something wrong with my session.
+
+Still, when a situation like this occurs, it seems to me that it should generate in this noisy concert of ssh prompts that basically blocks all work until i hit "escape" often enough. In fact, that it is rather problematic to have random password prompts show up like this without an explanation: git-annex should tell me it's the source of this password prompt or not prompt at all, because there's no way i'll start entering random passphrases into random pinentry dialogs that show up...
+
+Doesn't git-annex deploy its own ssh keys once it has established a connexion with an SSH remote?
+
+> After more investigation, it turns out this peculiar git-annex daemon was some left-overs from a previous session i had logged out of. It is unclear why git-annex was still running, but there were also pulseaudio and redshift programs lying around so I suspect it wasn't git-annex specific.
+>
+> However, this problem remains on login. When I start a new session, there's a race condition between git-annex asking passwords and ssh-add asking me to unlock my private key. It's a nice festival of password prompts as I struggle to type in my ssh key faster than git-annex asks me for the remote host's password.
+>
+> In general, I think git-annex should set `PasswordAuthentication=no` (or allow me to configure it as such), especially if it knows it was able to login without a password at some point. It should especially do that if there's no UI attached informing the user it will be prompting for a password. `NumberOfPasswordPrompts=1` would also be a welcome improvement, but I really don't think I should be seeing those password prompts, especially since I *can* login to the server with my existing SSH key.
+>
+> Also note that I use Monkeysphere to input my private key into the SSH agent so it could explain why this doesn't usually happen to other people: Monkeysphere doesn't automatically get started from `ssh` if the key is missing, and instead `ssh` will revert to a regular password-based authentication which competes with the Monkeysphere password prompt.
+
+### What steps will reproduce the problem?
+
+It's unclear - i guess you need to setup git-annex to autostart and sync with remote ssh annexes. You may also need to have to use XFCE with Awesome to reproduce the problem. I can provide more details on my session setup on request. --[[anarcat]]
+
+### What version of git-annex are you using? On what operating system?
+
+5.20140927~bpo70+3 on debian wheezy.
diff --git a/doc/bugs/flooding_me_with_ssh_password_prompts/comment_1_dba769cf0fca540f50f5e4b732a7e353._comment b/doc/bugs/flooding_me_with_ssh_password_prompts/comment_1_dba769cf0fca540f50f5e4b732a7e353._comment
new file mode 100644
index 000000000..1cfa8763c
--- /dev/null
+++ b/doc/bugs/flooding_me_with_ssh_password_prompts/comment_1_dba769cf0fca540f50f5e4b732a7e353._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
+ nickname="Justin"
+ subject="comment 1"
+ date="2014-10-30T18:07:28Z"
+ content="""
+I've ran into this as well using wheezy+awesome. It definitely looks like a race condition, I ended up doing a
+
+ killall git-annex
+ ssh-add
+ git-annex webapp
+
+to get things going again.
+"""]]
diff --git a/doc/bugs/flooding_me_with_ssh_password_prompts/comment_2_4a283ef50351e8c604a1f87aaaee1bb0._comment b/doc/bugs/flooding_me_with_ssh_password_prompts/comment_2_4a283ef50351e8c604a1f87aaaee1bb0._comment
new file mode 100644
index 000000000..2f9fe10ae
--- /dev/null
+++ b/doc/bugs/flooding_me_with_ssh_password_prompts/comment_2_4a283ef50351e8c604a1f87aaaee1bb0._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="anarcat"
+ subject="still an issue"
+ date="2015-01-26T17:27:25Z"
+ content="""
+this is still a major annoyance here. so much so that i disabled the assistant completely here. i ended up blacklisting myself from my own server... repeatedly.
+"""]]
diff --git a/doc/bugs/forget_corrupts_non-ascii_chars.mdwn b/doc/bugs/forget_corrupts_non-ascii_chars.mdwn
new file mode 100644
index 000000000..f4506c228
--- /dev/null
+++ b/doc/bugs/forget_corrupts_non-ascii_chars.mdwn
@@ -0,0 +1,78 @@
+### Please describe the problem.
+
+it seems that `git annex forget --drop-dead --force` will double-encode UTF-8 characters.
+
+### What steps will reproduce the problem?
+
+Have a remote with an accent in the description.
+
+### What version of git-annex are you using? On what operating system?
+
+5.20140412 on debian jessie amd64.
+
+### Please provide any additional information below.
+
+[[!format sh """
+anarcat@marcos:video$ git annex info
+repository mode: indirect
+trusted repositories: 1
+ 5adbab10-0f7a-467b-b0d8-5d7af2223103 -- here (backup (anarcat@marcos:/srv/video))
+semitrusted repositories: 5
+ 00000000-0000-0000-0000-000000000001 -- web
+ 2d594c02-9164-4ebd-ac47-f8cdc9c16e2f -- rachel@topcrapn:~/Vidéos/anarcat
+ 2f90b958-95e4-44e3-8d3b-e780b63936d1 -- portable (300GB drive labeled VHS)
+ 96365189-a0b9-4c33-865f-b573d98572dc -- trouneslo@ifuckinglovecumputers:~/video-anarcat
+ ae3d62e6-49be-4340-ba25-c8736a1637c4 -- anarcat@angela:~/video
+untrusted repositories: 1
+ f6a70cfe-0ee4-4762-9f1d-b7b545fbd856 -- External hard drive labeled VHS
+transfers in progress: none
+available local disk space: 14.29 gigabytes (+10 gigabytes reserved)
+local annex keys: 4110
+local annex size: 991.85 gigabytes (+ 2 unknown size)
+annexed files in working tree: 4108
+size of annexed files in working tree: 1.01 terabytes (+ 2 unknown size)
+bloom filter size: 16 mebibytes (0.8% full)
+backend usage:
+ SHA256E: 8214
+ URL: 4
+anarcat@marcos:video$ git annex dead f6a70cfe-0ee4-4762-9f1d-b7b545fbd856
+dead f6a70cfe-0ee4-4762-9f1d-b7b545fbd856 ok
+(Recording state in git...)
+anarcat@marcos:video$ git annex unused
+unused . (checking for unused data...) (checking HEAD...) (checking synced/master...) (checking backup/master...) (checking portable/annex/direct/master...) (checking portable/master...) (checking portable/synced/master...) (checking steph/master...) (checking steph/synced/master...) (checking video/synced/master...) ok
+anarcat@marcos:video$ git annex forget --drop-dead --force
+forget git-annex (Recording state in git...)
+ok
+(Recording state in git...)
+anarcat@marcos:video$ git annex info
+repository mode: indirect
+trusted repositories: (merging synced/git-annex backup/git-annex backup/synced/git-annex portable/git-annex portable/synced/git-annex steph/git-annex video/synced/git-annex into git-annex...)
+(Recording state in git...)
+(Recording state in git...)
+1
+ 5adbab10-0f7a-467b-b0d8-5d7af2223103 -- here (backup (anarcat@marcos:/srv/video))
+semitrusted repositories: 5
+ 00000000-0000-0000-0000-000000000001 -- web
+ 2d594c02-9164-4ebd-ac47-f8cdc9c16e2f -- rachel@topcrapn:~/Vidéos/anarcat
+ 2f90b958-95e4-44e3-8d3b-e780b63936d1 -- portable (300GB drive labeled VHS)
+ 96365189-a0b9-4c33-865f-b573d98572dc -- trouneslo@ifuckinglovecumputers:~/video-anarcat
+ ae3d62e6-49be-4340-ba25-c8736a1637c4 -- anarcat@angela:~/video
+untrusted repositories: 0
+transfers in progress: none
+available local disk space: 14.25 gigabytes (+10 gigabytes reserved)
+local annex keys: 4110
+local annex size: 991.85 gigabytes (+ 2 unknown size)
+annexed files in working tree: 4108
+size of annexed files in working tree: 1.01 terabytes (+ 2 unknown size)
+bloom filter size: 16 mebibytes (0.8% full)
+backend usage:
+ SHA256E: 8214
+ URL: 4
+# End of transcript or log.
+"""]]
+
+well that's interesting - the above paste is broken by ikiwiki as well... in the text area where i paste it, "rachel@topcrapn:~/Vidéos/anarcat" shows up as "rachel@topcrapn:~/Vidéos/anarcat" but when i preview, the character gets corrupted. and obviously, the second instance then gets *double* corrupted - wheepee. the original paste has "rachel@topcrapn:~/Vidéos/anarcat". --[[anarcat]]
+
+> [[fixed|done]]; writes to git-annex branch now preserve the original
+> encoding, and I've tested that lots of interesting unicode is preserved
+> across a forget run. --[[Joey]]
diff --git a/doc/bugs/forget_corrupts_non-ascii_chars/comment_1_fc8a4a93be2c234567836a4acee90957._comment b/doc/bugs/forget_corrupts_non-ascii_chars/comment_1_fc8a4a93be2c234567836a4acee90957._comment
new file mode 100644
index 000000000..1431f85bb
--- /dev/null
+++ b/doc/bugs/forget_corrupts_non-ascii_chars/comment_1_fc8a4a93be2c234567836a4acee90957._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="72.0.72.144"
+ subject="comment 1"
+ date="2014-05-16T14:36:09Z"
+ content="""
+this eventually completely breaks with:
+
+[[!format txt \"\"\"
+anarcat@marcos:video$ git annex info --fast
+repository mode: indirect
+trusted repositories: 2
+ 31912b57-62a5-475c-87a7-582b5492a216 -- WD green 1.5TB backup drive
+ 5adbab10-0f7a-467b-b0d8-5d7af2223103 -- here (main (anarcat@marcos:/srv/video))
+semitrusted repositories: 5
+ 00000000-0000-0000-0000-000000000001 -- web
+ 2d594c02-9164-4ebd-ac47-f8cdc9c16e2f -- rachel@topcrapn:~/Vid
+git-annex: <stdout>: commitBuffer: invalid argument (invalid character)
+failed
+git-annex: info: 1 failed
+\"\"\"]]
+"""]]
diff --git a/doc/bugs/forget_corrupts_non-ascii_chars/comment_2_31f9362619dee0b8ebae80694ae1b2d0._comment b/doc/bugs/forget_corrupts_non-ascii_chars/comment_2_31f9362619dee0b8ebae80694ae1b2d0._comment
new file mode 100644
index 000000000..6c62a91cb
--- /dev/null
+++ b/doc/bugs/forget_corrupts_non-ascii_chars/comment_2_31f9362619dee0b8ebae80694ae1b2d0._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 2"
+ date="2014-05-27T17:58:35Z"
+ content="""
+Notice that the filename is corrupted from the beginning; all writes to the git-annex branch truncated characters to 8 bits. The rest just followed from that.
+"""]]
diff --git a/doc/bugs/forget_corrupts_non-ascii_chars/comment_3_6310ae21036582688881f1890a5c4643._comment b/doc/bugs/forget_corrupts_non-ascii_chars/comment_3_6310ae21036582688881f1890a5c4643._comment
new file mode 100644
index 000000000..de949dc30
--- /dev/null
+++ b/doc/bugs/forget_corrupts_non-ascii_chars/comment_3_6310ae21036582688881f1890a5c4643._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="72.0.72.144"
+ subject="comment 3"
+ date="2014-05-29T16:09:38Z"
+ content="""
+awesome, thanks!
+"""]]
diff --git a/doc/bugs/forwarded.mdwn b/doc/bugs/forwarded.mdwn
new file mode 100644
index 000000000..1a544a4f7
--- /dev/null
+++ b/doc/bugs/forwarded.mdwn
@@ -0,0 +1,2 @@
+This tag is for bugs that have been forwarded from git-annex to some other
+software, such as a library it uses.
diff --git a/doc/bugs/free_space_checking.mdwn b/doc/bugs/free_space_checking.mdwn
deleted file mode 100644
index 92e8be40d..000000000
--- a/doc/bugs/free_space_checking.mdwn
+++ /dev/null
@@ -1,21 +0,0 @@
-Should check that there is enough free space before trying to copy a
-file around.
-
-* Need a way to tell how much free space is available on the disk containing
- a given repository.
-
-* And, need a way to tell the size of a file before copying it from
- a remote, to check local disk space.
-
- As of annex.version 2, this metadata can be available for any type
- of backend. Newly added files will always have file size metadata,
- while files that used a SHA backend and were added before the upgrade
- won't.
-
- So, need a migration process from eg SHA1 to SHA1+filesize. It will
- find files that lack size info, and rename their keys to add the size
- info. Users with old repos can run this on them, to get the missing
- info recorded.
-
-> [[done]]; no migtation process for old SHA1 keys from v1 repo though.
-> --[[Joey]]
diff --git a/doc/bugs/free_space_checking/comment_1_a868e805be43c5a7c19c41f1af8e41e6._comment b/doc/bugs/free_space_checking/comment_1_a868e805be43c5a7c19c41f1af8e41e6._comment
deleted file mode 100644
index 954433deb..000000000
--- a/doc/bugs/free_space_checking/comment_1_a868e805be43c5a7c19c41f1af8e41e6._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 1"
- date="2011-03-15T14:11:27Z"
- content="""
-Keep in mind that lots of small files may have significant overhead, so a warning that it's not possible to make sure there's enough space would make sense for certain corner cases. Actually finding out the exact overhead is beyond git-annex' scope and, given transparent compression etc, ability, but a warning, optionally with a \"do you want to continue\" prompt can't hurt.
-
--- RichiH
-"""]]
diff --git a/doc/bugs/free_space_checking/comment_2_8a65f6d3dcf5baa3f7f2dbe1346e2615._comment b/doc/bugs/free_space_checking/comment_2_8a65f6d3dcf5baa3f7f2dbe1346e2615._comment
deleted file mode 100644
index 9a43fe3f2..000000000
--- a/doc/bugs/free_space_checking/comment_2_8a65f6d3dcf5baa3f7f2dbe1346e2615._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 2"
- date="2011-03-16T03:04:50Z"
- content="""
-Right. You probably don't want git-annex to fill up your entire drive anyway, so if it tries to reseve 10 mb or 1% or whatever (probably configurable) for overhead, that should be good enough.
-"""]]
diff --git a/doc/bugs/free_space_checking/comment_3_0fc6ff79a357b1619d13018ccacc7c10._comment b/doc/bugs/free_space_checking/comment_3_0fc6ff79a357b1619d13018ccacc7c10._comment
deleted file mode 100644
index ea4fb6c23..000000000
--- a/doc/bugs/free_space_checking/comment_3_0fc6ff79a357b1619d13018ccacc7c10._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 3"
- date="2011-03-16T15:40:56Z"
- content="""
-Sometimes, I might want to fill up the disk as much as possible. Thus, a warning is preferable to erroring out too early, imo -- Richard
-"""]]
diff --git a/doc/bugs/fsck__47__fix_should_check__47__fix_the_permissions_of_.git__47__annex.mdwn b/doc/bugs/fsck__47__fix_should_check__47__fix_the_permissions_of_.git__47__annex.mdwn
deleted file mode 100644
index c649ff9f7..000000000
--- a/doc/bugs/fsck__47__fix_should_check__47__fix_the_permissions_of_.git__47__annex.mdwn
+++ /dev/null
@@ -1,8 +0,0 @@
-git annex carefully setup restrictive permissions of .git/annex directories and files.
-
-The fsck command should check that they are still correct.
-The fix command should fix them.
-
-PS: Thanks for this nice tool!
-
-> Good idea, [[done]] (actually, fsck just fixes them too)! --[[Joey]]
diff --git a/doc/bugs/fsck_claims_failed_checksum_when_less_copies_than_required_are_found.mdwn b/doc/bugs/fsck_claims_failed_checksum_when_less_copies_than_required_are_found.mdwn
deleted file mode 100644
index fe6536b6a..000000000
--- a/doc/bugs/fsck_claims_failed_checksum_when_less_copies_than_required_are_found.mdwn
+++ /dev/null
@@ -1,57 +0,0 @@
- (checksum...) failed
- fsck foo (fixing location log)
- Only 1 of 2 trustworthy copies exist of foo
- Back it up with git-annex copy.
-
-> You've given me severely partial output, and no test case, but until
-> it says "fsck foo", the output is pertaining to some other file than foo.
-> As far as I can see, there is no bug here. --[[Joey]]
-
->> Sorry, I thought it would be obvious, but that's no excuse for not
->> providing additional explanation. The problem is that fsck tells me a
->> file's fsck has failed without printing extra details. In this case, the
->> checksum is OK while I don't have enough copies to satisfy the fsck. The
->> fact that I don't have enough copies is obviously relevant, but I would
->> still like to know if the checksums are OK. -- Richard
-
->>> I think you're misreading the truncated output you posted. The actual,
->>> full output would make much more sense. --[[Joey]]
-
->>>> No. I have a total of 14908 annex keys, 3333 of which are on a remote. The only message other than 'checksum OK' and the above is 'git-annex: 11577 failed'.
->>>> I checked several files manually, their checksums are OK so `git annex
->>>> fsck` is reporting those files as completely failed when they "only" miss copies. -- Richard
-
->>>>> fsck considers not enough copies to be a failure condition; it prints
->>>>> error messages about it etc. That has nothing to do with checksums.
->>>>> --[[Joey]]
-
->>>>>> I get that. Still, I think it would be _extremely_ useful to know what failures occurred, exactly. Not having enough copies is Not Good, yet not having enough copies and a locally correct file is _lot_ better than having not enough copies and a broken file. I.e. I would prefer:
-
- (checksum...) OK
- Not enough copies: Only 1 of 2 trustworthy copies exist of foo
-
->>>>>> or similar and at the end
-
- git-annex: 0 wrong checksums
- git-annex: 11577 with too few copies
-
->>>>>> In the end, it comes down to the distinction of different failure classes. -- Richard
-
->>>>>>> For the third, and final time:
->>>>>>> # You are misreading the truncated output you posted
->>>>>>> The "checksum" line is regarding **different** file than the
->>>>>>> not enough copies message. fsck does not attempt to checksum a file
->>>>>>> that is not present. [[done]] --[[Joey]]
-
-
->>>>>>>> I realized early on that I pasted the wrong cross-passage, but as there is a ton of the same output, I didn't think it would matter. I wasn't aware that it does not try to checksum when there aren't enough copies. To be fair, you only just mentioned that.
->>>>>>>> Personally, I think that's a bug as it makes ensuring local correctness before copying a file to remotes impossible.
->>>>>>>> Either way, I really didn't know it actually _skipped_ checksumming; that part was missing.
->>>>>>>> For the benefit of anyone else who might read this, this is the correct order:
-
- fsck foo (fixing location log)
- Only 1 of 2 trustworthy copies exist of foo
- Back it up with git-annex copy.
- (checksum...) failed
-
->>>>>>>> If you would like to keep things this way, fine. I think it's less than ideal, but I don't want to argue, either. -- Richard
diff --git a/doc/bugs/fsck_of_special_remotes_incorrectly_reports_ok.mdwn b/doc/bugs/fsck_of_special_remotes_incorrectly_reports_ok.mdwn
new file mode 100644
index 000000000..fb0f84150
--- /dev/null
+++ b/doc/bugs/fsck_of_special_remotes_incorrectly_reports_ok.mdwn
@@ -0,0 +1,36 @@
+### Please describe the problem.
+
+I am trying to verify that my files are where they should after having updated my remotes to use chunking. I do get the following two error messages, but then git-annex reports that everything is Ok. I find it slightly scary and thus wonder if the fsck command in all cases do a conservative enough check. All other files (except two other ones where it noticed that they where in fact not on the remote do not report any errors.)
+
+When running the fsck command for all files I got the following slightly worring message for one file.
+
+ fsck Ekonomi/2014-06-02_Elavräkning.pdf (checking box.com5...) (checking box.com5...) (checking box.com5...)
+ 79% 23.2KB/s 26s
+ Error_Packet "partial packet: expecting 16448 bytes, got: 891"
+ ok
+
+Reading the message it seems that the file was not correctly downloaded, but still deemed Ok enough by git-annex.
+
+Further while writing this report I get the following message from a remote using the external protocol:
+
+ fsck Deklaration/archive/2012/DE/Steuerklärung Formular.pdf
+ 93% 221.9KB/s 12s
+ /Users/carlmod/Annex/.git/annex/tmp/GPGHMACSHA1--0e7e4951e2650ac636bc3fc17c673f1f2dfb3071: openBinaryFile: does not exist (No such file or directory)
+ ok
+
+Source code for this remote is not yet published online, as i would want to build it slightly more reliable before releasing it. It however passes the remote test suite without any problem.
+### What steps will reproduce the problem?
+
+Not really sure, but rerunning the commands show that the openBinaryFile happens here for this particular file.
+
+### What version of git-annex are you using? On what operating system?
+
+ $ git annex version
+ git-annex version: 5.20141125
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+
+built using Homebrew (i.e. in a cabal sandbox) on OS X Yosemite 10.10.1
+
+> [[fixed|done]] as described in comment --[[Joey]]
diff --git a/doc/bugs/fsck_of_special_remotes_incorrectly_reports_ok/comment_1_b76598aebcaccf1e1065dc6372a333ab._comment b/doc/bugs/fsck_of_special_remotes_incorrectly_reports_ok/comment_1_b76598aebcaccf1e1065dc6372a333ab._comment
new file mode 100644
index 000000000..52f42ba89
--- /dev/null
+++ b/doc/bugs/fsck_of_special_remotes_incorrectly_reports_ok/comment_1_b76598aebcaccf1e1065dc6372a333ab._comment
@@ -0,0 +1,26 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-10T17:04:10Z"
+ content="""
+So, what's going on here is:
+
+* fsck first calls hasKey to check if the remote has the key
+* It does, so it proceeds to try to download the file
+* This fails for whatever reason (probably a transient network error
+ in the first example, and a bug in your code in the second)
+* So, fsck bypasses checking the checksum, and just assumes that
+ hasKey was right, the key is present in the remote.
+
+Question is, should it instead assume hasKey is innaccurate,
+and mark the remote as no longer containing the file jut because
+it failed to download it once?
+
+I don't think so. This would mean that fsck --from networkremote
+and then dropping network connection in the middle of the file
+download would mark the file as not present on the remote any longer.
+
+I think though, that it would make sense for fsck to propigate an
+error in this case. It can leave the location log as-is, but not
+assume "ok".
+"""]]
diff --git a/doc/bugs/fsck_output.mdwn b/doc/bugs/fsck_output.mdwn
deleted file mode 100644
index 1b00dd7b3..000000000
--- a/doc/bugs/fsck_output.mdwn
+++ /dev/null
@@ -1,46 +0,0 @@
-When you check several files and the fsck fails, you get confusing output:
-
-<pre>
-O fsck test1 (checksum...)
-E Only 1 of 2 trustworthy copies of test1 exist.
-E Back it up with git-annex copy.
-O
-O failed
-O fsck test2 (checksum...)
-E Only 1 of 2 trustworthy copies of test2 exist.
-E Back it up with git-annex copy.
-O
-O failed
-</pre>
-
-The newline is in the wrong place and confuses the user. It should be printed _after_ "failed".
-
-> This is a consequence of part of the output being printed to stderr, and
-> part to stdout. I've marked the lines above with E and O.
->
-> Normally a "failed" is preceeded by a message output to stdout desribing
-> the problem; such a message will not be "\n" terminated, so a newline
-> is always displayed before "failed". In this case, since the message
-> is sent to stderr, it is newline terminated.
->
-> Fixing this properly would involve storing state, or rethinking
-> when git-annex displays newlines (and I rather like its behavior
-> otherwise).
->
-> A related problem occurs if an error message is unexpetedly printed.
-> Dummying up an example:
->
-> O get test1 (from foo...) E git-annex: failed to run ssh
-> failed
->
-> --[[Joey]]
-
->> Well, I fixed this in all cases except a thrown non-IO error (last
->> example aboce), which output is printed by haskell's runtime. I'd
->> have to add a second error handler to handle those, and it's not
->> clear what it would do. Often an error will occur before anything
->> else is printed, and then the current behavior is right; if something
->> has been printed it would be nice to have a newline before the error,
->> but by the time the error is caught we'd be out of the annex monad
->> and not really have any way to know if something has been printed.
->> I think my fix is good enough [[done]] --[[Joey]]
diff --git a/doc/bugs/fsck_should_double-check_when_a_content-check_fails.mdwn b/doc/bugs/fsck_should_double-check_when_a_content-check_fails.mdwn
deleted file mode 100644
index dba775d37..000000000
--- a/doc/bugs/fsck_should_double-check_when_a_content-check_fails.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-git annex fsck marks files as bad when the checksumming fails. But this could also be due to a read error when the actual data stored is correct. So, fsck should check twice when a checksum fails.
-
-> [[done]]; apparently problem was caused by bad RAM. --[[Joey]]
diff --git a/doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_1_03af24b70adbcd9f4b94d009f6b71d0a._comment b/doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_1_03af24b70adbcd9f4b94d009f6b71d0a._comment
deleted file mode 100644
index 543777e26..000000000
--- a/doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_1_03af24b70adbcd9f4b94d009f6b71d0a._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="comment 1"
- date="2013-01-14T16:26:59Z"
- content="""
-Why stop at checking twice? The second check could also fail with a read error, and perhaps the third one would succeed. :P
-
-Seriously, I doubt that this is likely to be a benefit with a modern drive. If the file has a read error once, then error correction has already failed, and it's likely to fail again. Even if it managed to succeed the second time, you have a file that is being read wrong some of the time, which is not a good thing for fsck to leave unnoticed.
-
-Fsck moves bad files to `.git/annex/bad`, so the data in them can be recovered if it comes to that. Hopefully
-though, there's a copy of the file in another repository, so git-annex can just get it from there instead.
-"""]]
diff --git a/doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_2_41214a7d18c66b694645248d6ebeadbf._comment b/doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_2_41214a7d18c66b694645248d6ebeadbf._comment
deleted file mode 100644
index ea9518cb6..000000000
--- a/doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_2_41214a7d18c66b694645248d6ebeadbf._comment
+++ /dev/null
@@ -1,25 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkHDm_DOFRcHYebCnnYKKyIwiPD4iOiiIU"
- nickname="Jörn"
- subject="comment 2"
- date="2013-01-14T17:37:45Z"
- content="""
-Maybe I was too quick in blaming the hard drive. It might be my problem is somewhere else. Let me do what I should have done in the first place and give you a detailed problem description:
-
-I have got three hard drives, two internal, one external connected via USB. I have got a couple of repositories with small files (mp3, JPEGs and so on). Those are fine, fsck never complains about them.
-But in one repository with video files (i.e. much bigger files than in the other repos), git-annex fsck will always find some broken files. I run git-annex get to retrieve the broken files from other sources. Then I run
-fsck again - and it complains about some other files. This happens on all drives.
-
-This could mean:
-
-- all my drives are broken. However, SMART data are unsuspicious, and one of the drives is just a couple of days old.
-- git-annex fsck is broken
-- read errors like I mentioned in my first post
-- some process actually _altering_ the files (should not happen when the files are locked, right?)
-- something completely different? Some possibly dangerous source of radiation? :)
-
-Any ideas on this? Maybe I should hash the data in .git/annex/bad and check which value I get - can I tell git-annex to do so?
-
-Thanks,
-Jörn
-"""]]
diff --git a/doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_3_e7ddd77ea35994f2051f840e9b4c7e0c._comment b/doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_3_e7ddd77ea35994f2051f840e9b4c7e0c._comment
deleted file mode 100644
index f7d6221de..000000000
--- a/doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_3_e7ddd77ea35994f2051f840e9b4c7e0c._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="comment 3"
- date="2013-01-14T19:06:37Z"
- content="""
-I would doubt you'd have three broken drives, or read errors from 3 drives.
-
-You can use `sha256sum` to checksum the files in `bad` yourself, and compare the results with their names.
-If it matches, that would point to some kind of bug in fsck.
-"""]]
diff --git a/doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_4_36a70d5a378983a76fcdbb7fba044044._comment b/doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_4_36a70d5a378983a76fcdbb7fba044044._comment
deleted file mode 100644
index 64df24bdb..000000000
--- a/doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_4_36a70d5a378983a76fcdbb7fba044044._comment
+++ /dev/null
@@ -1,32 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkHDm_DOFRcHYebCnnYKKyIwiPD4iOiiIU"
- nickname="Jörn"
- subject="comment 4"
- date="2013-01-14T20:04:48Z"
- content="""
-On the internal disk some files match, others don't:
-
- 42c95aee60c41157ee6d092eeea7fab73dff7b45a6e16ba77a02e2a6fec01c15 SHA256-s1099424853--42c95aee60c41157ee6d092eeea7fab73dff7b45a6e16ba77a02e2a6fec01c15
- 44c4d3b0f29d86597ae09cf52563e0a2adec7074f5359901fde8dbf88f9bc8ad SHA256-s1173029201--bb981fddd750db1255cc1fda1f9612250f766e4da946eac4c294d8071196615c
- a9d804fe633ae69d0c926dea41059c211f78cf891abfa275c579bcc8e12fa700 SHA256-s1363601770--a9d804fe633ae69d0c926dea41059c211f78cf891abfa275c579bcc8e12fa700
- bac5f30b696b643c76a456e3018214ce64be7d289afaac96a7fdba03eccf73fd SHA256-s1422005768--5754211ac3e7e6314de9aa34f7b1cfd3c9aed432f52b26189c4587dc505a30e8
- be953e962d9c6a2699f361e468023aae34b1f7c66ad93852d8f88846b60ecbcc SHA256-s1424026123--258dbe5704a46ecd3190d278efdd2adfeee9ad81843bfaa0ed7adbc10ccd5362
- b9f06383c76a0161312aaf6298eb764dbfb8e1e51555ec06d8c85c9f5df9fe20 SHA256-s1448369674--a703dfd46c147396def6e1db22c7917dbdf010658aa32df1cf598e37a04d5897
- e2d748ee5c5098316bbe20c3f771f7f552b07c394a1e9932cba2a90883b6fb5c SHA256-s1480008949--505c7d2685290069140b2f03fa72a5b5e3f59c14961c60c5fd6532be05ad1c84
- ac0d49461ca67ca2de0588491c39089634ae194870594dd869fbc84d42831baa SHA256-s1489602933--f3ff3fc71b4f5493db476f29f373a4b3bf8808e9a7487589fee632ea58a415af
- b9b1d133772c88a1c5f856e2d4bcb696a453c795337b9f97cfa4c00876f49b88 SHA256-s1512599506--78dc0bdf0b4e382283a770a36c7f699c83611a0436059e6bb44c8e94d26cca5f
- 497af65e2d400e5651d9b850bc5efbaa006cec08f3f0dfce5d09b8e3f994a80b SHA256-s1524648153--85548bcb693491eeae1d1315a6037d5a9a15d2a10066f04f6e7ce75b6eb1ca47
- cb793e7ac6df827e96f7dfa34a10f13a899140372c4db58b08650314596d30fa SHA256-s1541427964--16b8f7d5e5e12af88e947b26ca4d38d6b6692de92a77d9ffef0c8c1d560db727
- 27ea446f928239ade9c3c1f38119fa38da50a74036f9987d57cce3b52ae632e9 SHA256-s1561020163--cfce86c309d16af772e68527ba365ceac5db447d5bbfc335e063a2a4e9d513d6
- 940d2c7ff3bde5662d71a1a463f6949c6dd6cf244d43ab7d48014a10d0fa5d6a SHA256-s1562397113--a057d447b5b32d2f1a440247d9dc3c3ca697798d73dd740670a3033dd0fcbb68
- [...]
-
-
-On the usb drive, hashes match:
-
- [joern@heracles bad]$ sha256sum *
- e306e07a09af9be9a974632c777935ddd0f5333b603b5f205dba03753619d682 SHA256-s1564783770--e306e07a09af9be9a974632c777935ddd0f5333b603b5f205dba03753619d682
- 8fe78a325a08099e56df44ff46d482607723dfc9402bcd8f4850907327603f05 SHA256-s207925248--8fe78a325a08099e56df44ff46d482607723dfc9402bcd8f4850907327603f05
- 8823bd4ccf5f6ff2fe0976de6a856490ef3de0ab1c1e128bde770b732e86d94c SHA256-s923668098--8823bd4ccf5f6ff2fe0976de6a856490ef3de0ab1c1e128bde770b732e86d94c
-
-"""]]
diff --git a/doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_5_899c4afbc988d81984c5c3397285bb01._comment b/doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_5_899c4afbc988d81984c5c3397285bb01._comment
deleted file mode 100644
index fb3838511..000000000
--- a/doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_5_899c4afbc988d81984c5c3397285bb01._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
- nickname="Justin"
- subject="comment 5"
- date="2013-01-14T21:57:30Z"
- content="""
-If you have both the corrupted file and the good file you can use the `cmp` command to show exactly how they differ:
-
- cmp -l file1 file2
-
-If files are regularly marked as corrupted you might have bad ram.
-"""]]
diff --git a/doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_6_dbff51d00c5645eb1832aa4644889c5e._comment b/doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_6_dbff51d00c5645eb1832aa4644889c5e._comment
deleted file mode 100644
index 724be0df0..000000000
--- a/doc/bugs/fsck_should_double-check_when_a_content-check_fails/comment_6_dbff51d00c5645eb1832aa4644889c5e._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkHDm_DOFRcHYebCnnYKKyIwiPD4iOiiIU"
- nickname="Jörn"
- subject="comment 6"
- date="2013-01-15T09:38:34Z"
- content="""
-That was a good advice. I have just run memtest, and it seems my memory is broken. So this was probably the cause for all this trouble.
-
-Thanks!
-"""]]
diff --git a/doc/bugs/fsck_thinks_file_content_is_bad_when_it_isn__39__t.mdwn b/doc/bugs/fsck_thinks_file_content_is_bad_when_it_isn__39__t.mdwn
deleted file mode 100644
index e9051f9f3..000000000
--- a/doc/bugs/fsck_thinks_file_content_is_bad_when_it_isn__39__t.mdwn
+++ /dev/null
@@ -1,35 +0,0 @@
-What steps will reproduce the problem?
-What is the expected output? What do you see instead?
-
-I can reproduce it locally, but don't know what's causing it. The file content is the same, I checked with md5sum and sha512sum. But fsck still thinks the content is different. Are there other factors I could check which fsck looks at? I'm using SHA512E backend.
-
-What version of git-annex are you using? On what operating system?
-
-git-annex version: 3.20120807 Ubuntu 12.04 updated on Aug 20th annex was installed via cabal on Aug 20th, all other packages are from ubuntu.
-
-> What is the error message from fsck? --[[Joey]]
-
-This is the output:
-
-> reinject ....Moon.avi (checksum...)
-> Bad file content; moved to /mnt/.../.git/annex/bad/SHA512E-s94402560--ead9db1f34739014a216239d9624bce74d92fe723de06505f9b94cb4c063142ba42b04546f11d3d33869b736e40ded2ff779cb32b26aa10482f09407df0f3c8d.Moon.avi
-failed
-> (Recording state in git...)
-> git-annex: reinject: 1 failed
-
-The original file also has sha512 ead9db1f34739014a216239d9624bce74d92fe723de06505f9b94cb4c063142ba42b04546f11d3d33869b736e40ded2ff779cb32b26aa10482f09407df0f3c8d
-
->> And what sha512 does the file in .git/annex/bad have **now**? (fsck
->> preserves the original filename; this says nothing about what the
->> current checksum is, if the file has been corrupted). --[[Joey]]
-
-The same, as it's the file I was trying to inject:
-
-ead9db1f34739014a216239d9624bce74d92fe723de06505f9b94cb4c063142ba42b04546f11d3d33869b736e40ded2ff779cb32b26aa10482f09407df0f3c8d .git/annex/bad/SHA512E-s94402560--ead9db1f34739014a216239d9624bce74d92fe723de06505f9b94cb4c063142ba42b04546f11d3d33869b736e40ded2ff779cb32b26aa10482f09407df0f3c8d.Moon.avi
-
-That's what puzzles me, it is the same file, but for some weird reason git annex thinks it's not.
-
-> Ok, reproduced and fixed the bug. The "E" backends recently got support
-> for 2 levels of filename extensions, but were not made to drop them both
-> when fscking. [[done]] (I'll release a fixed version probably tomorrow;
-> fix is in git now.) --[[Joey]]
diff --git a/doc/bugs/fsck_thinks_file_content_is_bad_when_it_isn__39__t/comment_1_cafb58eca97a0a66110ac39b169d8de3._comment b/doc/bugs/fsck_thinks_file_content_is_bad_when_it_isn__39__t/comment_1_cafb58eca97a0a66110ac39b169d8de3._comment
deleted file mode 100644
index 9f63dbfa9..000000000
--- a/doc/bugs/fsck_thinks_file_content_is_bad_when_it_isn__39__t/comment_1_cafb58eca97a0a66110ac39b169d8de3._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawla3gLc6_rHuggFfy7o7eGMPvPztFZTrUQ"
- nickname="Florian"
- subject="comment 1"
- date="2012-08-27T08:59:23Z"
- content="""
-Works!
-"""]]
diff --git a/doc/bugs/gcrypt_initremote_pushes_git-annex_but_not_master.mdwn b/doc/bugs/gcrypt_initremote_pushes_git-annex_but_not_master.mdwn
deleted file mode 100644
index c256778c8..000000000
--- a/doc/bugs/gcrypt_initremote_pushes_git-annex_but_not_master.mdwn
+++ /dev/null
@@ -1,19 +0,0 @@
-git-annex 4.20130911 on Debian Wheezy.
-
-Using `git annex initremote type=gcrypt` as described [here](http://git-annex.branchable.com/tips/fully_encrypted_git_repositories_with_gcrypt/) creates the repository and pushes the `git-annex` branch to it. It doesn't push `master` (or more generally: the currently checked out branch), as I have verified using `git remote show`.
-
-Manually pushing the branch makes `git annex sync` sync both branches with the gcrypt remote.
-
-I think that it should push the current branch upon creation of the special remote, since for at least me, the whole reason for wanting `git-remote-gcrypt` is that metadata as well as data can be stored encrypted on an SSH server.
-
-Thanks for considering this.
-
-> The git-annex branch is pushed by initremote because I have to push
-> *something* to determine the gcrypt-id. However, this is an implementation
-> detail, and not a feature of initremote. (It's more like a bug of
-> git-remote-gcrypt.)
->
-> `git annex sync` will always push your currently checked out branch,
-> as well as the git-annex branch, no matter what `initremote` has done.
->
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/getEffectiveUserID_not_supported_on_Windows.mdwn b/doc/bugs/getEffectiveUserID_not_supported_on_Windows.mdwn
new file mode 100644
index 000000000..e8271ff94
--- /dev/null
+++ b/doc/bugs/getEffectiveUserID_not_supported_on_Windows.mdwn
@@ -0,0 +1,28 @@
+### Please describe the problem.
+After a clean install of the latest git-annex for Windows (https://downloads.kitenet.net/git-annex/windows/current/), most git-annex commands fail with the following error message:
+
+ git-annex: System.PosixCompat.User.getEffectiveUserID: not supported: illegal operation
+
+### What steps will reproduce the problem?
+
+ git init
+ git annex init
+
+Running for example `git annex version` or `git annex info` gives the same error message.
+
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex version should be 5.20141024, but the installer does not specify version and `git annex info` does not work, so it is hard to tell for sure.
+Running Windows 7, x64. Also tried running as administrator and in a cmd.exe shell as well as Powershell.
+
+
+### Please provide any additional information below.
+
+The `git annex test` command does work, and all 84 tests passes.
+
+> [[fixed|done]]; I was able to reproduce this bug, and it was crashing
+> trying to look up the geckos username. I don't understand why this worked
+> before; some change exposed this code path on Windows. In any case, I've
+> fixed the crash, and I will be updating the windows builds with this bug
+> fix. --[[Joey]]
diff --git a/doc/bugs/get_failed__44___but_remote_has_the_file.mdwn b/doc/bugs/get_failed__44___but_remote_has_the_file.mdwn
deleted file mode 100644
index 254e3d820..000000000
--- a/doc/bugs/get_failed__44___but_remote_has_the_file.mdwn
+++ /dev/null
@@ -1,40 +0,0 @@
-Not sure what caused this, but I have a file that exists on two remotes, but I can only get it from one of them. If I try to get it from the other, it fails immediately (without even connecting):
-
- pilot:~/vid/tv/Show$ git annex whereis Show\ -\ S03E08.mp4
- whereis Show - S03E08.mp4 (2 copies)
- 09c0b436-f8de-11e0-842f-b7644539d57f -- psychosis
- 82814942-f8e0-11e0-b053-e70a61e98e19 -- bucket
- ok
-
- pilot:~/vid/tv/Show$ git annex fsck Show\ -\ S03E08.mp4
- fsck Show - S03E08.mp4 ok
-
- pilot:~/vid/tv/Show$ git annex get --from bucket Show\ -\ S03E08.mp4
- get Show - S03E08.mp4 failed
- git-annex: get: 1 failed
-
- pilot:~/vid/tv/Show$ git annex get --debug --from bucket Show\ -\ S03E08.mp4
- [2013-01-17 19:05:13 EST] read: git ["--git-dir=/home/jim/vid/.git","--work-tree=/home/jim/vid","show-ref","git-annex"]
- [2013-01-17 19:05:13 EST] read: git ["--git-dir=/home/jim/vid/.git","--work-tree=/home/jim/vid","show-ref","--hash","refs/heads/git-annex"]
- [2013-01-17 19:05:13 EST] read: git ["--git-dir=/home/jim/vid/.git","--work-tree=/home/jim/vid","log","refs/heads/git-annex..e41c3b1ee9127129f2c9fc3fa5d4771afcb5ffd7","--oneline","-n1"]
- [2013-01-17 19:05:13 EST] read: git ["--git-dir=/home/jim/vid/.git","--work-tree=/home/jim/vid","log","refs/heads/git-annex..a7ae08bccede282f46c2073f6c3e52685a593482","--oneline","-n1"]
- [2013-01-17 19:05:13 EST] read: git ["--git-dir=/home/jim/vid/.git","--work-tree=/home/jim/vid","log","refs/heads/git-annex..ae0f84e906423f4da465e3d3df9d46545684d3f5","--oneline","-n1"]
- [2013-01-17 19:05:13 EST] chat: git ["--git-dir=/home/jim/vid/.git","--work-tree=/home/jim/vid","cat-file","--batch"]
- [2013-01-17 19:05:13 EST] read: git ["--git-dir=/home/jim/vid/.git","--work-tree=/home/jim/vid","ls-files","--cached","-z","--","Show - S03E08.mp4"]
- get Show - S03E08.mp4 failed
- git-annex: get: 1 failed
-
-Same `git annex version` on both `pilot` and `bucket`, and I ran `git annex sync` on both.
-
- git-annex version: 3.20130114
- local repository version: 3
- default repository version: 3
- supported repository versions: 3
- upgrade supported from repository versions: 0 1 2
-
-How should I debug this?
-
-> [[done]], in c6fbed48 I had made some changes to allow transfers
-> to work from readonly filesystems, but a too broad error trapping
-> hid the "transfer already in progress" error it is supposed to display
-> in this case. --[[Joey]]
diff --git a/doc/bugs/get_failed__44___but_remote_has_the_file/comment_1_55c8b73ce05dfca11a393bb296b99b9a._comment b/doc/bugs/get_failed__44___but_remote_has_the_file/comment_1_55c8b73ce05dfca11a393bb296b99b9a._comment
deleted file mode 100644
index 24825b2eb..000000000
--- a/doc/bugs/get_failed__44___but_remote_has_the_file/comment_1_55c8b73ce05dfca11a393bb296b99b9a._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.3.194"
- subject="comment 1"
- date="2013-01-18T20:25:01Z"
- content="""
-One completely legitimate way for this to happen would be if bucket is a removable drive or other filesystem, and it is not mounted (or its directory doesn't contain a git repo for whatever reason). It would look identical to what you showed happening.
-
-Otherwise, what kind of remote is bucket? Special remote or git remote?
-"""]]
diff --git a/doc/bugs/get_failed__44___but_remote_has_the_file/comment_2_474c67a421dca4c245e7bfe495d3f6d3._comment b/doc/bugs/get_failed__44___but_remote_has_the_file/comment_2_474c67a421dca4c245e7bfe495d3f6d3._comment
deleted file mode 100644
index a7e3d6b17..000000000
--- a/doc/bugs/get_failed__44___but_remote_has_the_file/comment_2_474c67a421dca4c245e7bfe495d3f6d3._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnBJ6Dv1glxzzi4qIzGFNa6F-mfHIvv9Ck"
- nickname="Jim"
- subject="comment 2"
- date="2013-01-19T21:40:14Z"
- content="""
-They're all git remotes:
-
- pilot:~/vid/tv$ git remote -v show
- bucket ssh://bucket/home/jim/private/vid (fetch)
- bucket ssh://bucket/home/jim/private/vid (push)
- origin https://git/jim/annex.git (fetch)
- origin https://git/jim/annex.git (push)
- psychosis ssh://psychosis/vid/annex (fetch)
- psychosis ssh://psychosis/vid/annex (push)
-
-And it never even attempts a ssh connection to bucket.
-"""]]
diff --git a/doc/bugs/get_failed__44___but_remote_has_the_file/comment_3_845e8a23d63fb0b071c63ee736697d26._comment b/doc/bugs/get_failed__44___but_remote_has_the_file/comment_3_845e8a23d63fb0b071c63ee736697d26._comment
deleted file mode 100644
index 0ddbe14bf..000000000
--- a/doc/bugs/get_failed__44___but_remote_has_the_file/comment_3_845e8a23d63fb0b071c63ee736697d26._comment
+++ /dev/null
@@ -1,20 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnBJ6Dv1glxzzi4qIzGFNa6F-mfHIvv9Ck"
- nickname="Jim"
- subject="comment 3"
- date="2013-01-19T22:21:04Z"
- content="""
-Wait, that's weird, it works today. I'm thinking that maybe there was another copy of `git-annex` backgrounded and holding a lock, since that reproduces this behavior:
-
- pilot:~/vid/tv/Show$ git annex get --from bucket Show\ -\ S03E08.mp4
- get Show - S03E08.mp4 (from bucket...)
- Enter passphrase for key '/home/jim/.ssh/id_rsa':
- SHA256E-s358393024--efda17d23d68b85d47ad342f8e41f79ac04d4a65d7ef654b4838b995b86bdefe.mp4
- 96043008 26% 10.27MB/s 0:00:24 ^Z
- [1]+ Stopped git annex get --from bucket Show\ -\ S03E08.mp4
- pilot:~/vid/tv/Show$ git annex get --from bucket Show\ -\ S03E08.mp4
- get Show - S03E08.mp4 failed
- git-annex: get: 1 failed
-
-So, I guess this is probably \"not a bug\", but having a more specific error would be really helpful.
-"""]]
diff --git a/doc/bugs/get_failed__44___but_remote_has_the_file/comment_4_7dec21cb67e7f4dbdb49da97f2443e8f._comment b/doc/bugs/get_failed__44___but_remote_has_the_file/comment_4_7dec21cb67e7f4dbdb49da97f2443e8f._comment
deleted file mode 100644
index fd9a1f6d3..000000000
--- a/doc/bugs/get_failed__44___but_remote_has_the_file/comment_4_7dec21cb67e7f4dbdb49da97f2443e8f._comment
+++ /dev/null
@@ -1,35 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawla7u6eLKNYZ09Z7xwBffqLaXquMQC07fU"
- nickname="Matthias"
- subject="ssh stall triggers this"
- date="2013-03-14T22:55:11Z"
- content="""
-I experienced a very similar bug today.
-
-While retrieving a rather large file from a remote git repository my internet connection broke down such that the ssh connection stalled. I noticed this and killed the transfer on my side. After the connection was up again I restarted the transfer and got the following output:
-
-git annex get --debug backup.iso
-[2013-03-14 23:30:26 CET] read: git [\"--git-dir=/home/user/annex/.git\",\"--work-tree=/home/user/annex\",\"ls-files\",\"--cached\",\"-z\",\"--\",\"backup.iso\"]
-get backup.iso [2013-03-14 23:30:26 CET] read: git [\"--git-dir=/home/user/annex/.git\",\"--work-tree=/home/user/annex\",\"show-ref\",\"git-annex\"]
-[2013-03-14 23:30:26 CET] read: git [\"--git-dir=/home/user/annex/.git\",\"--work-tree=/home/user/annex\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
-[2013-03-14 23:30:26 CET] read: git [\"--git-dir=/home/user/annex/.git\",\"--work-tree=/home/user/annex\",\"log\",\"refs/heads/git-annex..7a133679de4f30a0c9cc552b6c9c85e8120e88e6\",\"--oneline\",\"-n1\"]
-[2013-03-14 23:30:26 CET] read: git [\"--git-dir=/home/user/annex/.git\",\"--work-tree=/home/user/annex\",\"log\",\"refs/heads/git-annex..715af259c233713a420f670a134f4550ba67832a\",\"--oneline\",\"-n1\"]
-[2013-03-14 23:30:26 CET] read: git [\"--git-dir=/home/user/annex/.git\",\"--work-tree=/home/user/annex\",\"log\",\"refs/heads/git-annex..7a905bff06ee702886829ca4482330071549994d\",\"--oneline\",\"-n1\"]
-[2013-03-14 23:30:26 CET] read: git [\"--git-dir=/home/user/annex/.git\",\"--work-tree=/home/user/annex\",\"log\",\"refs/heads/git-annex..51ca0f25220b216b12a236c05d2e2a5c121a99b7\",\"--oneline\",\"-n1\"]
-[2013-03-14 23:30:26 CET] read: git [\"--git-dir=/home/user/annex/.git\",\"--work-tree=/home/user/annex\",\"log\",\"refs/heads/git-annex..02f889b99107ddc699f204f4628539112dd90b81\",\"--oneline\",\"-n1\"]
-[2013-03-14 23:30:26 CET] read: git [\"--git-dir=/home/user/annex/.git\",\"--work-tree=/home/user/annex\",\"log\",\"refs/heads/git-annex..01da68a6d86554532701fafb46242dd706e25499\",\"--oneline\",\"-n1\"]
-[2013-03-14 23:30:26 CET] chat: git [\"--git-dir=/home/user/annex/.git\",\"--work-tree=/home/user/annex\",\"cat-file\",\"--batch\"]
-(from origin...)
-[2013-03-14 23:30:26 CET] read: rsync [\"--progress\",\"--inplace\",\"-e\",\"'ssh' '-S' '/home/user/annex/.git/annex/ssh/server.com' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=yes' 'server.com' 'git-annex-shell ''sendkey'' ''/~/annex'' ''SHA256E-s4628086525--9d8a04ebcfabbda5baa29dbd834cc7e4c3ac5d7b74fec7a23023025952e78686.iso'' --uuid a3b225c4-d832-11e0-b8a3-cbd1782bb1f4 ''--'' ''remoteuuid=e4e649ca-16f9-11e1-ac1d-5f8104ffa876'' ''direct='' ''associatedfile=backup.iso'' ''--'''\",\"--\",\"dummy:\",\"/home/user/annex/.git/annex/tmp/SHA256E-s4628086525--9d8a04ebcfabbda5baa29dbd834cc7e4c3ac5d7b74fec7a23023025952e78686.iso\"]
-rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
-rsync error: error in rsync protocol data stream (code 12) at io.c(605) [Receiver=3.0.9]
-
- Unable to access these remotes: origin
-
-However, I could retrieve any other file from origin. The problem was that git-annex-shell was still running on the remote side and therefore preventing me from fetching the file and only this file. Once I logged into the remote server, killed the still running git-annex-shell, \"git annex get\" behaved as it should and fetched the file.
-
-However, there is definitely room for an improved error message which at least gives a hint what the problem could be. Of course, the best solution would be if the file was simply transfered.
-
-
-
-"""]]
diff --git a/doc/bugs/get_fails_for_file:__47____47___web_remotes_if_the_file_is_empty.mdwn b/doc/bugs/get_fails_for_file:__47____47___web_remotes_if_the_file_is_empty.mdwn
deleted file mode 100644
index bb943fa86..000000000
--- a/doc/bugs/get_fails_for_file:__47____47___web_remotes_if_the_file_is_empty.mdwn
+++ /dev/null
@@ -1,26 +0,0 @@
-###What steps will reproduce the problem?
- $ touch /home/arand/empty
- $ git annex addurl 'file:///home/arand/empty'
- addurl _home_arand_empty (downloading file:///home/arand/empty ...)
-
- git-annex: /home/arand/tmp/c/.git/annex/tmp/URL--file&c%%%home%arand%empty: getFileStatus: does not exist (No such file or directory)
- failed
- git-annex: addurl: 1 failed
-
-###What is the expected output? What do you see instead?
-If it is possible to distinguish between empty files and files that just fail to open, it would be nice if Annex were able to handle it, or at least give a more obvious error message.
-
-###What version of git-annex are you using? On what operating system?
-
-Debian sid/experimental
-
- git-annex version: 4.20130227
- local repository version: 4
- default repository version: 3
- supported repository versions: 3 4
- upgrade supported from repository versions: 0 1 2
-
-> Seems that curl doesn't write the file it was asked to
-> output to in this case. Crazy. Does not affect empty
-> http urls. Switched to using just cp for file://
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/get_from_bup-remote_with_pubkey_failing.mdwn b/doc/bugs/get_from_bup-remote_with_pubkey_failing.mdwn
deleted file mode 100644
index 5ec1aa9aa..000000000
--- a/doc/bugs/get_from_bup-remote_with_pubkey_failing.mdwn
+++ /dev/null
@@ -1,93 +0,0 @@
-### Please describe the problem.
-
-I'm unable to 'git annex get' a file from a bup-remote with encryption set to 'pubkey'.
-
-### What steps will reproduce the problem?
-
-I added a bup-remote using [these instructions](http://git-annex.branchable.com/walkthrough/using_bup/):
-
- bash-3.2$ git annex initremote mybup type=bup encryption=pubkey keyid=0xABE8244505D63E81 buprepo=gumdrop:/home/gert/.bup
-
- # now adding files and moving them:
- bash-3.2$ mkdir orgmode && touch orgmode/some.org
- bash-3.2$ git annex add orgmode/some.org
- add orgmode/some.org (checksum...) ok
- (Recording state in git...)
- bash-3.2$ git commit
- [master bce8c83] Some.org
- 1 file changed, 1 insertion(+)
- create mode 120000 orgmode/some.org
- bash-3.2$ git annex move orgmode/ --to=mybup
- move orgmode/another.org (gpg)
- U moet een geheime zin opgeven om de geheime sleutel te gebruiken
- van: “email”
- 4096-bit RSA key, ID 0xFF8DE378DE223820, created 2013-11-10
- (sub-sleutel bij hoofd sleutel ID 0xE9B90528FDA4E1E6)
-
- (checking mybup...) ok
- (Recording state in git...)
- bash-3.2$ less orgmode/another.org
- orgmode/another.org: No such file or directory
- bash-3.2$ git annex get orgmode/another.org --debug
- [2013-11-13 16:18:07 CET] read: git ["--git-dir=/Users/gert/annex/.git","--work-tree=/Users/gert/annex","ls-files","--cached","-z","--","orgmode/another.org"]
- get orgmode/another.org [2013-11-13 16:18:08 CET] read: git ["--git-dir=/Users/gert/annex/.git","--work-tree=/Users/gert/annex","show-ref","git-annex"]
- [2013-11-13 16:18:08 CET] read: git ["--git-dir=/Users/gert/annex/.git","--work-tree=/Users/gert/annex","show-ref","--hash","refs/heads/git-annex"]
- [2013-11-13 16:18:08 CET] read: git ["--git-dir=/Users/gert/annex/.git","--work-tree=/Users/gert/annex","log","refs/heads/git-annex..f25f9bb2b78a8b9c4b64087f1378c68fb5c0a2f1","--oneline","-n1"]
- [2013-11-13 16:18:08 CET] read: git ["--git-dir=/Users/gert/annex/.git","--work-tree=/Users/gert/annex","log","refs/heads/git-annex..1b0a3dd72be437d800e58d659837d6e528cbbc39","--oneline","-n1"]
- [2013-11-13 16:18:08 CET] read: git ["--git-dir=/Users/gert/annex/.git","--work-tree=/Users/gert/annex","log","refs/heads/git-annex..f62419efea58245d232a52ceaf0eaefe3b0fdced","--oneline","-n1"]
- [2013-11-13 16:18:08 CET] read: git ["--git-dir=/Users/gert/annex/.git","--work-tree=/Users/gert/annex","log","refs/heads/git-annex..eb6f0cd983d9a3637e984aa815537fe20a5c2a69","--oneline","-n1"]
- [2013-11-13 16:18:08 CET] read: git ["--git-dir=/Users/gert/annex/.git","--work-tree=/Users/gert/annex","log","refs/heads/git-annex..5362118e643462a0875bfe31d493ffe64413f2d8","--oneline","-n1"]
- [2013-11-13 16:18:08 CET] read: git ["--git-dir=/Users/gert/annex/.git","--work-tree=/Users/gert/annex","log","refs/heads/git-annex..e5afaf82ce25f60a108c0ae873b6fd57c5d28ca7","--oneline","-n1"]
- [2013-11-13 16:18:08 CET] chat: git ["--git-dir=/Users/gert/annex/.git","--work-tree=/Users/gert/annex","cat-file","--batch"]
- [2013-11-13 16:18:08 CET] read: git ["config","--null","--list"]
- (from mybup...) (gpg) [2013-11-13 16:18:08 CET] chat: gpg ["--quiet","--trust-model","always","--decrypt"]
-
- U moet een geheime zin opgeven om de geheime sleutel te gebruiken
- van: “<email>”
- 4096-bit RSA key, ID 0xFF8DE378DE223820, created 2013-11-10
- (sub-sleutel bij hoofd sleutel ID 0xE9B90528FDA4E1E6)
-
- [2013-11-13 16:18:15 CET] read: bup ["join","-r","gumdrop:/home/gert/.bup","GPGHMACSHA1--67aec1b62d05d000442cf8e7d9df8d327eaf26d5"]
- [2013-11-13 16:18:15 CET] chat: gpg ["--quiet","--trust-model","always","--batch","--decrypt"]
- gpg: kan geheime zin niet opvragen in batch modus
- gpg: decoderen mislukt: secret key not available
-
- Unable to access these remotes: mybup
-
- Try making some of these repositories available:
- 080e97d2-4f82-4292-acb7-a48d82009258 -- mybup (mybupmy bup repository at gumdrop)
-
- (Note that these git remotes have annex-ignore set: origin)
- failed
- git-annex: get: 1 failed
-
-### What version of git-annex are you using? On what operating system?
-
-Running git-annex version 4.20131105-g136b030 on OSX 10.8.5.
-
-### Please provide any additional information below.
-
-My ideas:
-
-"Unable to access these remotes: mybup" is weird, I just moved files there.
-
-"secret key not available" makes me think it's looking for the primary secret key (which is indeed offline).
-When I encrypt a file with the same key I used to create the remote it just works:
-
- $ gpg --armor --recipient 0xABE8244505D63E81 --encrypt file.txt
- $ gpg --decrypt file.txt.asc
-
-When prompting for my passphrase it states "4096-bit RSA key, ID 0xFF8DE378DE223820, created 2013-11-10".
-That is a different subkey than what I entered when I setting up the remote.
-
-My keys/subkeys:
-
- pub 4096R/0xE9B90528FDA4E1E6 aangemaakt: 2013-11-10 vervaldatum: 2014-11-10 gebruik: SC
- vertrouwen: ultimate geldigheid: ultimate
- sub 4096R/0x98816CFB398B4666 aangemaakt: 2013-11-10 vervaldatum: 2014-11-10 gebruik: E
- sub 4096R/0x91951718D5F11CDD aangemaakt: 2013-11-10 vervaldatum: 2014-11-10 gebruik: S
- sub 4096R/0xABE8244505D63E81 aangemaakt: 2013-11-10 vervaldatum: 2014-11-10 gebruik: E
- sub 4096R/0xB44520A46B27144D aangemaakt: 2013-11-10 vervaldatum: 2014-11-10 gebruik: S
- sub 4096R/0xFF8DE378DE223820 aangemaakt: 2013-11-10 vervaldatum: 2014-11-10 gebruik: E
-
-> This was already fixed in version 4.20131106. [[done]] --[[Joey]]
diff --git a/doc/bugs/get_from_glacier_fails_too_early.mdwn b/doc/bugs/get_from_glacier_fails_too_early.mdwn
new file mode 100644
index 000000000..489240330
--- /dev/null
+++ b/doc/bugs/get_from_glacier_fails_too_early.mdwn
@@ -0,0 +1,72 @@
+### Please describe the problem.
+
+In order to test the integrity of my file backup on glacier,
+I initiated get of a single file from glacier via:
+
+ $ git annex get --from=glacier localdir/myfile.jpg
+
+A check with
+
+ $ glacier job list
+
+confirmed, that a job was in progress.
+
+Then after a couple hours wait the job is complete
+[[!format sh """
+[ben@voyagerS9 annex]$ glacier job list
+i/d 2014-10-16T20:25:23.068Z glacier-bbbbbbbb-bbbb-bbbb-bbbb-MYVAULTbbbbb
+a/d 2014-10-16T20:30:13.086Z glacier-bbbbbbbb-bbbb-bbbb-bbbb-MYVAULTbbbbb GPGHMACSHA1--cccccccccccc
+"""]]
+
+So, again I enter the get command:
+[[!format sh """
+[ben@voyagerS9 annex]$ git annex get --from=glacier localdir/myfile.jpg
+get localdir/myfile.jpg (from glacier...) (gpg)
+failed
+git-annex: get: 1 failed
+[ben@voyagerS9 annex]$
+"""]]
+
+The command immediately fails after entering the gpg passphrase, releasing the shell.
+But in the background the glacier-cli is still running, downloads the file from Amazon
+and then dumps the gpg encrypted file content into the terminal.
+(4 MB of binary character garbage on the screen)
+
+git annex should not fail so early and wait until the data is coming in order to pipe it into gpg.
+
+### What version of git-annex are you using? On what operating system?
+Arch Linux git-annex-bin package.
+[[!format sh """
+[ben@voyagerS9 annex]$ git annex version
+git-annex version: 5.20140920-gb0c4300
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+[ben@voyagerS9 annex]$ gpg --version
+gpg (GnuPG) 2.0.26
+libgcrypt 1.6.2
+"""]]
+
+### Possibly related information about the annexed repo and its history
+The file was uploaded sometime earlier this year with a different version of git annex: Older source package for Arch Linux with Haskell packages from the Arch haskell repos.
+
+The special glacier remote was initially set up with an old gpg key (hybrid encryption), which is still in my keychain but has expired. I exchanged the key with a new one by
+
+ $ git annex enableremote glacier keyid+=NEWKEY keyid-=OLDKEY
+
+I don't know why, but my AWS credentials seem no longer be embedded into the git repo. glacier upload (copy --to=) only succeeds with explicitly set AWS credential environment variables
+
+I tried
+
+ $ git annex enableremote embedcreds=yes
+
+with no noticeable change.
+I had changed the AWS credentials a while ago.
+
+Tomorrow I will try to download a just recently uploaded file with the current credentials and keys.
+
+> [[done]]; I am not confident that I understand this failure on retrival,
+> and that I've fixed it. --[[Joey]]
diff --git a/doc/bugs/get_from_glacier_fails_too_early/comment_1_5a4e37fef629e07dce6b83ae311d1b03._comment b/doc/bugs/get_from_glacier_fails_too_early/comment_1_5a4e37fef629e07dce6b83ae311d1b03._comment
new file mode 100644
index 000000000..736457f2a
--- /dev/null
+++ b/doc/bugs/get_from_glacier_fails_too_early/comment_1_5a4e37fef629e07dce6b83ae311d1b03._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-20T18:54:43Z"
+ content="""
+Wow, the code seems to neglect to actually set up a pipe from glacier-cli's
+stdout. It seems this broke quite a while ago, in
+[[!commit fb19d56476bb6eb5aa4d794a10199adb267d5870]] and nobody noticed.
+
+I have committed what should be a fix, but it's pretty hard for me to test
+this. Can you please either test the current daily autobuild for linux
+amd64 (should be ready about 15 minutes after I post this comment), or
+build git-annex from master and test?
+"""]]
diff --git a/doc/bugs/get_from_glacier_fails_too_early/comment_2_da065d367d0a3c91e4957f588f36dc67._comment b/doc/bugs/get_from_glacier_fails_too_early/comment_2_da065d367d0a3c91e4957f588f36dc67._comment
new file mode 100644
index 000000000..2afe60195
--- /dev/null
+++ b/doc/bugs/get_from_glacier_fails_too_early/comment_2_da065d367d0a3c91e4957f588f36dc67._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""creds"""
+ date="2014-10-20T19:09:28Z"
+ content="""
+Since you are using gpg encryption, your repository may have
+[[upgrades/insecure_embedded_creds]]. Strongly suggest you check if it
+does.
+"""]]
diff --git a/doc/bugs/get_from_glacier_fails_too_early/comment_3_1b49cd66a612bb46da5b73c83ab14688._comment b/doc/bugs/get_from_glacier_fails_too_early/comment_3_1b49cd66a612bb46da5b73c83ab14688._comment
new file mode 100644
index 000000000..ccdd94848
--- /dev/null
+++ b/doc/bugs/get_from_glacier_fails_too_early/comment_3_1b49cd66a612bb46da5b73c83ab14688._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkck-Tokgfh_1Fwh6pkl69xPA_dYUgA4Tg"
+ nickname="Benjamin"
+ subject="autobuild"
+ date="2014-10-20T22:39:25Z"
+ content="""
+Okay, where do I get the newest build? I cannot find a link to a packaged file at http://downloads.kitenet.net/git-annex/autobuild/amd64/
+
+I'd rather not build it from master myself, as all the Haskell dependencies are not well supported on Arch linux. Thats why I switched from the git-annex package to the git-annex-bin package in AUR in the first place.
+
+"""]]
diff --git a/doc/bugs/get_from_glacier_fails_too_early/comment_4_a20b46a5e9c1c72a484962f3539d3b3e._comment b/doc/bugs/get_from_glacier_fails_too_early/comment_4_a20b46a5e9c1c72a484962f3539d3b3e._comment
new file mode 100644
index 000000000..c46042d4e
--- /dev/null
+++ b/doc/bugs/get_from_glacier_fails_too_early/comment_4_a20b46a5e9c1c72a484962f3539d3b3e._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2014-10-21T16:31:33Z"
+ content="""
+http://git-annex.branchable.com/install/Linux_standalone/
+"""]]
diff --git a/doc/bugs/get_from_glacier_fails_too_early/comment_5_488bb44796e6a4e16f7bfc1f229233e7._comment b/doc/bugs/get_from_glacier_fails_too_early/comment_5_488bb44796e6a4e16f7bfc1f229233e7._comment
new file mode 100644
index 000000000..c67f60288
--- /dev/null
+++ b/doc/bugs/get_from_glacier_fails_too_early/comment_5_488bb44796e6a4e16f7bfc1f229233e7._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 5"
+ date="2014-10-21T19:59:06Z"
+ content="""
+Recent autobuilds will also print out some useful info when you run `git annex info glacier`, including where it's getting the AWS credentials from.
+"""]]
diff --git a/doc/bugs/get_from_glacier_fails_too_early/comment_6_9c8f262b3d8b37f2e68108337acbd303._comment b/doc/bugs/get_from_glacier_fails_too_early/comment_6_9c8f262b3d8b37f2e68108337acbd303._comment
new file mode 100644
index 000000000..48e9f5335
--- /dev/null
+++ b/doc/bugs/get_from_glacier_fails_too_early/comment_6_9c8f262b3d8b37f2e68108337acbd303._comment
@@ -0,0 +1,48 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkck-Tokgfh_1Fwh6pkl69xPA_dYUgA4Tg"
+ nickname="Benjamin"
+ subject="autobuild test"
+ date="2014-10-21T22:09:47Z"
+ content="""
+Okay I managed to package the autobuild for my Arch system and installed. Here is what I get, retrieving finished glacier retrieval jobs which was started yesterday:
+
+Without AWS credentials as environment variables, the call fails:
+[[!format sh \"\"\"
+[ben@voyagerS9 annextest]$ git annex get --from=glacier mydir/myfile1
+get mydir/myfile (from glacier...) (gpg)
+['/usr/local/bin/glacier', '--region=us-east-1', 'archive', 'retrieve', '-o-', 'glacier-myvault', 'GPGHMACSHA1--4286b1a121892c9e64de436725478b0bc5038e67']
+glacier: archive 'GPGHMACSHA1--4286b1a121892c9e64de436725478b0bc5038e67' not found
+failed
+git-annex: get: 1 failed
+\"\"\"]]
+
+I patched the glacier-cli Python source so that it prints out the command arguments argv.
+The archive _does_ exist. Executing the glacier-cli command manually is successful. So is calling
+git-annex with AWS credentials exported into env:
+
+[[!format sh \"\"\"
+[ben@voyagerS9 annextest]$ git annex get --from=glacier mydir/myfile2
+get mydir/myfile2 (from glacier...) (gpg)
+['/usr/local/bin/glacier', '--region=us-east-1', 'archive', 'retrieve', '-o-', 'glacier-myvault', 'GPGHMACSHA1--c3827c03d48b4829c7cc584778652c66e2784b0f']
+ok
+(Recording state in git...)
+\"\"\"]]
+
+So I guess one bug is fixed, although I think there is a wrong error message.
+
+Regarding AWS credentials, I have no success in updating credentials or finding out which if any are embedded:
+[[!format sh \"\"\"
+[ben@voyagerS9 annextest]$ git annex info glacier
+remote: glacier
+description: [glacier]
+uuid: b4dcf525-40c7-4f04-86cc-3850d1260680
+cost: 1050.0
+type: glacier
+glacier vault: glacier-myvault
+encryption: encrypted (to gpg keys: MYKEY)
+chunking: none
+\"\"\"]]
+
+When I checkout the git-annex branch and look into the remote.log I see fields for cipher, cipherkeys, datacenter, embedcreds=yes, name, s3creds, type, vault, timestamp.
+The s3creds field does not look like my current AWS credentials, at least not in plaintext.
+"""]]
diff --git a/doc/bugs/get_from_glacier_fails_too_early/comment_7_c96b71759fe0d2af450e321ca57edb46._comment b/doc/bugs/get_from_glacier_fails_too_early/comment_7_c96b71759fe0d2af450e321ca57edb46._comment
new file mode 100644
index 000000000..0cdef26b5
--- /dev/null
+++ b/doc/bugs/get_from_glacier_fails_too_early/comment_7_c96b71759fe0d2af450e321ca57edb46._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 7"
+ date="2014-10-22T18:30:29Z"
+ content="""
+I forgot to include the creds in `git annex info` for glacier; fixed that now.
+
+It seems that changing the creds with `enableremote` did embed them into your git repository, but it neglected to update the .git/annex/creds/$remoteuuid file that caches the creds locally. So I think that your old creds are still cached there, and still being used, and this explains why the file is not found in glacier; the wrong creds are being used to access it! You can work around this by deleting the .git/annex/creds/$remoteuuid file correspnding to the uuid of the glacier remote. (You can also look at that file and compare it with what the creds are supposed to be.) I have fixed git-annex enableremote to update that creds file.
+
+Also, it looks like you did not fall afoul of the [[upgrades/insecure_embedded_creds]] problem! If you had, this new version of git-annex would be complaining that it had detected that problem. If you want to double-check that, the s3creds= value is base64 encoded, and when run through `base64 -d`, it should yield a gpg encrypted file. If your repo did have that problem, it would instead decode to the creds in clear text.
+"""]]
diff --git a/doc/bugs/get_from_glacier_fails_too_early/comment_8_1267236ae339d1affd46edb5cf5f4ac5._comment b/doc/bugs/get_from_glacier_fails_too_early/comment_8_1267236ae339d1affd46edb5cf5f4ac5._comment
new file mode 100644
index 000000000..5265d7cfb
--- /dev/null
+++ b/doc/bugs/get_from_glacier_fails_too_early/comment_8_1267236ae339d1affd46edb5cf5f4ac5._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkck-Tokgfh_1Fwh6pkl69xPA_dYUgA4Tg"
+ nickname="Benjamin"
+ subject="comment 8"
+ date="2014-10-22T19:56:23Z"
+ content="""
+Thanks, deleting the cached file fixed it.
+"""]]
diff --git a/doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799.mdwn b/doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799.mdwn
deleted file mode 100644
index f9a61a859..000000000
--- a/doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799.mdwn
+++ /dev/null
@@ -1,75 +0,0 @@
-I ran git-annex (git version) on three machines with ghc-7.0.2 for about a month, but recently (no more than a week ago) I've started getting this error for every file on "git annex get":
-
- git-annex-shell: internal error: evacuate(static): strange closure type 30799
- (GHC version 7.0.2 for i386_unknown_linux)
- Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
-
-There were no changes to ghc or it's modules, so I assume something has changed in git-annex itself.
-
-strace shows "git annnex get" (on "host1") performing following exec's:
-
- [pid 9481] execve("/usr/bin/rsync", ["rsync", "-p", "--progress", "--inplace", "-e", "'ssh' 'user@host2' 'git-annex-shell ''sendkey'' ''/remote/path'' ''SHA1-s6654080--abd8edec20648ade69351d68ae1c64c8074a6f0b'' ''--'''", ":", "/local/path/.git/annex/tmp/SHA1-s6654080--abd8edec20648ade69351d68ae1c64c8074a6f0b"], [/* 41 vars */]) = 0
- [pid 9482] execve("/usr/bin/ssh", ["ssh", "user@host2", "git-annex-shell 'sendkey' '/remote/path' 'SHA1-s6654080--abd8edec20648ade69351d68ae1c64c8074a6f0b' '--'", "", "rsync", "--server", "--sender", "-vpe.Lsf", "--inplace", ".", ""], [/* 41 vars */] <unfinished ...>
-
-I've tried running the second command directly from the shell and got the same error message from a remote GHC.
-Adding strace before git-annex-shell to remote command yielded something like this in the end:
-
- stat64("/local/path.git", 0xb727d610) = -1 ENOENT (No such file or directory)
- stat64("/local/path.git", 0xb727d6b0) = -1 ENOENT (No such file or directory)
- waitpid(7525, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 7525
- chdir("/home/user") = 0
- rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
- write(2, "git-annex-shell: internal error: ", 33git-annex-shell: internal error: ) = 33
- ...
-
-Note that "/local/path" here is not what's specified in rsync arguments at all, and git repo with files-to-be-fetched on "host2" is in "/remote/path", but "/local/path" is present in git remotes there since I mount it via nfs from "host1" (yes, to the same path as it's there):
-
- [remote "nfs"]
- url = /local/path
- fetch = +refs/heads/*:refs/remotes/nfs/*
- push = refs/heads/*:refs/remotes/host2/*
- annex-uuid = 0a4e14ba-5236-11e0-9004-7f24452c0f05
-
-If I comment that remote out from "/remote/path/.git/config", "git annex get" works fine.
-The only git-command git-annex-shell seem to exec there (on "host2") is "git config --list", so it's shouldn't be git trying to do something with it's remotes - it's git-annex itself, right?
-
-Anyways, looks like a simple path-joining error, if "/local/path.git" should be "/local/path/.git" there.
-
-I'm actually quite confused about what it's trying to do with that path.
-Connect from "host1" to "host2" just to connect back to "host1"?
-What for, when it should just fetch files from "host2"?
-
-> git-annex (and git-annex shell) always start up by learning what git
-> remotes are locally configured, and this includes checking them to
-> try to look up their annex.uuid setting.
->
-> Since git will, given a remote like "url = /foo", first look in
-> "/foo.git" for a bare git repository, so too does git-annex.
-> I do not think this is a path joining error. That seems likely to
-> be a red herring. --[[Joey]]
-
-Not sure if it's a bug or I'm doing something wrong, but if git-annex really need to check something in git remotes' paths, error message (the one at the top of this post) can be a more descriptive, I guess.
-Something like "error: failed to do something with git remote X on a remote host" would've been a lot less confusing than that GHC thing.
-
-Thanks!
-
-> I've never seen anything like this error message. I don't know if the
-> problem is caused by building with GHC 7, or what. You didn't say what
-> OS you're using. Searching for the error message, it seems to involve
-> Mac OS X.
-
-> For example: <http://hackage.haskell.org/trac/ghc/ticket/3771>
->> The error "strange closure type" indicates some kind of memory corruption, which can have many different causes, from bugs in the GC to hardware failures.
->
-> You said that you'd been using git-annex built with that version of GHC
-> successfully before. Perhaps you could use `git bisect` to see if you can
-> identify a point in git-annex's history where this started happening?
-> Since you can reproduce the problem by just running git-annex-shell at
-> the command line with the right parameters, it should be easy to bisect it.
->
-> Probably your best bet will be changing to a different version or build of
-> GHC.. --[[Joey]]
-
----
-
-forwarded to GHC upstream; closing [[done]] --[[Joey]]
diff --git a/doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_1_1c19e716069911f17bbebd196d9e4b61._comment b/doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_1_1c19e716069911f17bbebd196d9e4b61._comment
deleted file mode 100644
index 98f0adc3d..000000000
--- a/doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_1_1c19e716069911f17bbebd196d9e4b61._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://fraggod.pip.verisignlabs.com.pip.verisignlabs.com/"
- subject="Bisect it is, then"
- date="2011-04-03T04:45:49Z"
- content="""
-Hm, if path's ok, guess there's no way around git-bisect indeed. Wonder if there's some kind of ccache for haskell...
-
-OS is linux, amd64 on \"host1\" and i386 on \"host2\" where git-annex-shell is crashing.
-I'll try to come up with a commit, thanks for clarifications.
-"""]]
diff --git a/doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_2_a4d66f29d257044e548313e014ca3dc3._comment b/doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_2_a4d66f29d257044e548313e014ca3dc3._comment
deleted file mode 100644
index fb3658191..000000000
--- a/doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_2_a4d66f29d257044e548313e014ca3dc3._comment
+++ /dev/null
@@ -1,66 +0,0 @@
-[[!comment format=mdwn
- username="http://fraggod.pip.verisignlabs.com.pip.verisignlabs.com/"
- subject="Bisect results"
- date="2011-04-03T06:22:15Z"
- content="""
-Completed git-bisect twice, getting roughly the same results:
-
- 828a84ba3341d4b7a84292d8b9002a8095dd2382 is the first bad commit
- commit 828a84ba3341d4b7a84292d8b9002a8095dd2382
- Author: Joey Hess <joey@kitenet.net>
- Date: Sat Mar 19 14:33:24 2011 -0400
-
- Add version command to show git-annex version as well as repository version information.
-
- :040000 040000 ed849b7b6e9b177d6887ecebd6a0f146357824f3 1c98699dfd3fc3a3e2ce6b55150c4ef917de96e9 M Command
- :100644 100644 b9c22bdfb403b0bdb1999411ccfd34e934f45f5c adf07e5b3e6260b296c982a01a73116b8a9a023c M GitAnnex.hs
- :100644 100644 76dd156f83f3d757e1c20c80d689d24d0c533e16 d201cc73edb31f833b6d00edcbe4cf3f48eaecb0 M Upgrade.hs
- :100644 100644 5f414e93b84589473af5b093381694090c278e50 d4a58d77a29a6a02daf13cec0df08b5aab74f65e M Version.hs
- :100644 100644 f5c2956488a7afafd20374873d79579fb09b1677 f8cd577e992d38c7ec1438ce5c141eb0eb410243 M configure.hs
- :040000 040000 f9b7295e997c0a5b1dda352f151417564458bd6e a30008475c1889f4fd8d60d4d9c982563380a692 M debian
- :040000 040000 9d87a5d8b9b9fe7b722df303252ffd5760d66f75 08834f61a10d36651b3cdcc38389f45991acdf5e M doc
-
-contents of final refs/bisect:
-
- bad (828a84ba3341d4b7a84292d8b9002a8095dd2382)
- good-33cb114be5135ce02671d8ce80440d40e97ca824
- good-942480c47f69e13cf053b8f50c98c2ce4eaa256e
- good-ca48255495e1b8ef4bda5f7f019c482d2a59b431
-
-\"roughly\" because second bisect gave two commits as a result, failing to build one of them (missing .o file on link, guess it's because of -j4 and bad deps in that version's build system):
-
- There are only 'skip'ped commits left to test.
- The first bad commit could be any of:
- 828a84ba3341d4b7a84292d8b9002a8095dd2382
- 5022a69e45a073046a2b14b6a4e798910c920ee9
- We cannot bisect more!
-
-Also noticed that \"git-annex-shell ...\" command succeeds if ran as root user, while failing from unprivileged one.
-There are no permission/access errors in \"strace -f git-annex-shell ...\", so I guess it could be some bug in the GHC indeed.
-
-JIC, logged a whole second bisect operation.
-Resulting log: [http://fraggod.net/static/share/git-annex-bisect.log](http://fraggod.net/static/share/git-annex-bisect.log)
-
-Bisect script I've used (git-annex-shell dies with error code 134 - SIGABRT on GHC error):
-
- res=
- while true; do
- if [[ -n \"$res\" ]]; then
- cd /var/tmp/paludis/build/dev-scm-git-annex-scm.bak/work/git-annex-scm
- echo \"---=== BISECT ($res) ===---\"; git bisect \"$res\" 2>&1; echo '---=== /BISECT ===---'
- cd
- rm -Rf /var/tmp/paludis/build/dev-scm-git-annex-scm
- cp -a --reflink=auto /var/tmp/paludis/build/dev-scm-git-annex-scm{.bak,}
- chown -R paludisbuild: /var/tmp/paludis/build/dev-scm-git-annex-scm
- fi
- res=
- cave resolve -zx1 git-annex --skip-until-phase configure || res=skip
- if [[ -z \"$res\" ]]; then
- cd /remote/path
- sudo -u user git-annex-shell 'sendkey' '/remote/path' 'SHA1-s6654080--abd8edec20648ade69351d68ae1c64c8074a6f0b' '--' rsync --server --sender -vpe.Lsf --inplace . ''
- if [[ $? -eq 134 ]]; then res=bad; else res=good; fi
- cd
- fi
- done 2>&1 | tee ~/git-annex-bisect.log
-
-"""]]
diff --git a/doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_3_f5f1081eb18143383b2fb1f57d8640f5._comment b/doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_3_f5f1081eb18143383b2fb1f57d8640f5._comment
deleted file mode 100644
index 491b53786..000000000
--- a/doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_3_f5f1081eb18143383b2fb1f57d8640f5._comment
+++ /dev/null
@@ -1,38 +0,0 @@
-[[!comment format=mdwn
- username="http://fraggod.pip.verisignlabs.com.pip.verisignlabs.com/"
- subject="comment 3"
- date="2011-04-03T06:57:02Z"
- content="""
-Repeated bisect with -j1, just to be sure it's not a random error, and it gave me 828a84ba3341d4b7a84292d8b9002a8095dd2382 again.
-Guess I'll look through the changes there a bit later and try to revert these until it works.
-
-Not sure if it's repeatable by anyone but me (and hence worth fixing), but here's a bit more of info about the system:
-
- Exherbo linux
- Linux sacrilege 2.6.38.2-fg.roam #4 SMP PREEMPT Mon Mar 28 21:08:47 YEKST 2011 i686 GNU/Linux
-
- dev-lang/ghc-7.0.2:7.0.2::installed
- dev-haskell/HUnit-1.2.2.3:1.2.2.3::installed
- dev-haskell/MissingH-1.1.0.3:1.1.0.3::installed
- dev-haskell/QuickCheck-2.4.0.1:2.4.0.1::installed
- dev-haskell/array-0.3.0.2:0.3.0.2::installed
- dev-haskell/bytestring-0.9.1.7:0.9.1.7::installed
- dev-haskell/containers-0.4.0.0:0.4.0.0::installed
- dev-haskell/extensible-exceptions-0.1.1.2:0.1.1.2::installed
- dev-haskell/filepath-1.2.0.0:1.2.0.0::installed
- dev-haskell/hslogger-1.1.3:0::installed
- dev-haskell/mtl-2.0.1.0:2.0.1.0::installed
- dev-haskell/network-2.3.0.1:2.3.0.1::installed
- dev-haskell/old-locale-1.0.0.2:1.0.0.2::installed
- dev-haskell/parsec-3.1.0:3.1.0::installed
- dev-haskell/pcre-light-0.4:0::installed
- dev-haskell/regex-base-0.93.2:0.93.2::installed
- dev-haskell/regex-compat-0.93.1:0.93.1::installed
- dev-haskell/regex-posix-0.94.4:0.94.4::installed
- dev-haskell/syb-0.3:0.3::installed
- dev-haskell/transformers-0.2.2.0:0.2.2.0::installed
- dev-haskell/utf8-string-0.3.6:0.3.6::installed
-
-(some stuff listed here as ::installed, but contains no files, since these packages detect whether ghc-7.0.2 already comes with the same/newer package version)
-
-"""]]
diff --git a/doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_4_b1f818b85c3540591c48e7ba8560d070._comment b/doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_4_b1f818b85c3540591c48e7ba8560d070._comment
deleted file mode 100644
index 45d3d8bac..000000000
--- a/doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_4_b1f818b85c3540591c48e7ba8560d070._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 4"
- date="2011-04-03T16:06:34Z"
- content="""
-Nice work on the bisection. It's obviously a compiler bug. Having two test cases that differ in only as trivial and innocous a commit as 828a84ba3341d4b7a84292d8b9002a8095dd2382 might help a GHC developer track it down.
-
-We should probably forward this as a GHC bug. I hope you can find a different version or build of GHC to build git-annex with.
-"""]]
diff --git a/doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_5_67406dd8d9bd4944202353508468c907._comment b/doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_5_67406dd8d9bd4944202353508468c907._comment
deleted file mode 100644
index bffa9bb86..000000000
--- a/doc/bugs/git-annex-shell:_internal_error:_evacuate__40__static__41__:_strange_closure_type_30799/comment_5_67406dd8d9bd4944202353508468c907._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://fraggod.pip.verisignlabs.com.pip.verisignlabs.com/"
- subject="Reported the issue to GHC"
- date="2011-04-07T13:44:36Z"
- content="""
-Finally got around to [report the issue to GHC tracker](http://hackage.haskell.org/trac/ghc/ticket/5085#comment:7).
-
-Looks quite alike (at least to the haskell-illiterate person like me) to a highest-priority issue that's hanging right at the top of the list.
-There are other similar reports, but they seem to be either related to PowerPC Macs, closed as invalid or due to needinfo inactivity.
-
-Guess any further discussion belongs there, unless ghc developers will bounce it back.
-Thanks a lot for your help, Joey, and for sharing a great thing that git-annex is.
-"""]]
diff --git a/doc/bugs/git-annex-shell:_user_error___40__unrecognized_option___96__--uuid__39__.mdwn b/doc/bugs/git-annex-shell:_user_error___40__unrecognized_option___96__--uuid__39__.mdwn
deleted file mode 100644
index 174e8082a..000000000
--- a/doc/bugs/git-annex-shell:_user_error___40__unrecognized_option___96__--uuid__39__.mdwn
+++ /dev/null
@@ -1,53 +0,0 @@
-What steps will reproduce the problem?
-On Arch Linux, using a cabal installation or prebuilt binaries:
-
- git-annex get foobar
-
-The remote is an ssh URL: ssh://user@host/path/to/repo.git. Fetching the URL worked just fine.
-
-
-What is the expected output? What do you see instead?
-I expect git-annex to retrieve the file from the remote.
-Insted I see this:
-
- get foobar (from origin...)
- git-annex-shell: user error (unrecognized option `--uuid'
-
- Usage: git-annex-shell [-c] command [parameters ...] [option ..]
-
- Options:
- --force allow actions that may lose annexed data
- -F --fast avoid slow operations
- -q --quiet avoid verbose output
- -v --verbose allow verbose output (default)
- -d --debug show debug messages
- -b NAME --backend=NAME specify key-value backend to use
-
- Commands:
- configlist DIRECTORY outputs relevant git configuration
- inannex DIRECTORY KEY ... checks if keys are present in the annex
- dropkey DIRECTORY KEY ... drops annexed content for specified keys
- recvkey DIRECTORY KEY runs rsync in server mode to receive content
- sendkey DIRECTORY KEY runs rsync in server mode to send content
- )
- rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
- rsync error: error in rsync protocol data stream (code 12) at io.c(605) [Receiver=3.0.9]
-
- Unable to access these remotes: origin
-
- Try making some of these repositories available:
- 5afcfc68-aa55-11e2-b5aa-73eac1531269 -- origin (my_remote)
- failed
- git-annex: get: 1 failed
-
-
-What version of git-annex are you using? On what operating system?
-git-annex does not understand a '--version' switch and I cannot find another option to print the version. It's the latest I just installed via cabal.
-OS is Arch Linux on kernel 3.8.8
-
-> This happens if the remote server has a very old version of
-> git-annex-shell. While I would not, today, add a new option like
-> --uuid that breaks backwards compatability as happened here,
-> I don't intend to try to make git-annex backwards compatible
-> with that old version. Not even Debian stable has such an old version of
-> git-annex anymore, so there's no excuse not to upgrade. [[done]]
diff --git a/doc/bugs/git-annex-shell:_user_error___40__unrecognized_option___96__--uuid__39__/comment_1_13510e954e36484e196e7395a3a9bf1f._comment b/doc/bugs/git-annex-shell:_user_error___40__unrecognized_option___96__--uuid__39__/comment_1_13510e954e36484e196e7395a3a9bf1f._comment
deleted file mode 100644
index 639e364d8..000000000
--- a/doc/bugs/git-annex-shell:_user_error___40__unrecognized_option___96__--uuid__39__/comment_1_13510e954e36484e196e7395a3a9bf1f._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-04-23T17:57:10Z"
- content="""
-`git annex version` is how you tell git-annex to print its version.
-
-The problem is not with the locally installed version of git-annex. You have a *very* old version of git-annex-shell installed on the server you're using as a remote. The last version of git-annex that did not support `git-annex-shell --uuid` was 3.20110928. You need to upgrade it to make it work with modern git-annex.
-"""]]
diff --git a/doc/bugs/git-annex-shell:_user_error___40__unrecognized_option___96__--uuid__39__/comment_2_7edc478a76983a3b3c68d01f24dce613._comment b/doc/bugs/git-annex-shell:_user_error___40__unrecognized_option___96__--uuid__39__/comment_2_7edc478a76983a3b3c68d01f24dce613._comment
deleted file mode 100644
index 86faca325..000000000
--- a/doc/bugs/git-annex-shell:_user_error___40__unrecognized_option___96__--uuid__39__/comment_2_7edc478a76983a3b3c68d01f24dce613._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawn8nmg2ti0tVOD215PNBmLKvf2S4kXkQAY"
- nickname="Sören"
- subject="comment 2"
- date="2013-04-24T05:39:09Z"
- content="""
-Thanks, for the response. You're correct.
-I finally have it working. But it's not really easy, dealing with Arch Linux and Ubuntu 11.10 and make them talk to each other.
-"""]]
diff --git a/doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option.mdwn b/doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option.mdwn
deleted file mode 100644
index 8d4a7c512..000000000
--- a/doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option.mdwn
+++ /dev/null
@@ -1,37 +0,0 @@
-<h4>What steps will reproduce the problem?</h4>
-
-On <tt>host1.example.tld</tt>:
-<pre><code> git init /tmp/annex
- cd /tmp/annex
- git annex init
- git config annex.rsync-options '--bwlimit=100'
- dd if=/dev/urandom of=bigfile bs=1024 count=102400
- git annex add bigfile
- git commit -am bigfile
-</code></pre>
-
-On <tt>host2.example.tld</tt>:
-<pre><code> git clone ssh://host1.example.tld/tmp/annex /tmp/annex
- cd /tmp/annex
- git annex init
- git config annex.rsync-options '--bwlimit=100'
- git annex get --from=origin bigfile
-</code></pre>
-
-<h4>What is the expected output? What do you see instead?</h4>
-<tt>bigfile</tt> is retrieved full speed, despite the <tt>bwlimit</tt> option. In fact on the origin <tt>host1.example.tld</tt>, <tt>ps x | grep rsync</tt> shows:
-<pre><code>
- 21386 ? Ssl 0:00 git-annex-shell sendkey /tmp/annex SHA256E-s104857600--3e87b769b88db67c56f8c8a0245203a1c22cdb027f0a1230dac8309b1a9fded0 --uuid 7002cb3d-2205-4
-f8d-892b-5c35c693d76c -- remoteuuid=67263f47-7a5f-4a75-937b-7cffafa85f56 direct= associatedfile=bigfile -- dummy rsync --server --sender -ve.Lsf --bwlimit=100 --inplace .
- 21390 ? S 0:01 rsync --server -t --inplace -e.Lsf . --sender /tmp/annex/.git/annex/objects/jX/3W/SHA256E-s104857600--3e87b769b88db67c56f8c8a0245203a1c22cdb02
-7f0a1230dac8309b1a9fded0/SHA256E-s104857600--3e87b769b88db67c56f8c8a0245203a1c22cdb027f0a1230dac8309b1a9fded0
-</code></pre>
-
-On the first line the option is indeed there, but it's somehow not forwarded to the actual rsync command. (On the client <tt>host2.example.tld</tt> the option shows up, but the sender's bandwidth seems to take precedence.)
-
-<h4>What version of git-annex are you using? On what operating system?</h4>
-
-git-annex 4.20130227, on Debian GNU/Linux (sid, i386).
-
-> [[done]], --bwlimit is now passed through from the caller.
-> Thanks, guilhem
diff --git a/doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option/comment_1_8cda861c11ef2fff3442e5a0df741939._comment b/doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option/comment_1_8cda861c11ef2fff3442e5a0df741939._comment
deleted file mode 100644
index 8c82c7e36..000000000
--- a/doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option/comment_1_8cda861c11ef2fff3442e5a0df741939._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-03-09T06:13:17Z"
- content="""
-git-annex-shell cannot pass arbitrary rsync parameters through as specified by the client, because this would be a security hole (eg, allows overwriting or exposing arbitrary files). I'd have to pick out and whitelist safe parameters to make that work.
-
-I'm also not sure if rsync --server does anything with --bwlimit, it's more of a client side option. When rsync is connecting to a rsync:// server, it can't tell the server to run with --bwlimit, AFAIK.
-
-Also, the bwlimit option works by stalling the connection occasionally, it's hardly very good and you'll sometime see it ramp back to full speed in between stalls.
-"""]]
diff --git a/doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option/comment_2_15e06f6db9a14a8217dea25e24ddc23a._comment b/doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option/comment_2_15e06f6db9a14a8217dea25e24ddc23a._comment
deleted file mode 100644
index 8c41b51f0..000000000
--- a/doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option/comment_2_15e06f6db9a14a8217dea25e24ddc23a._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="guilhem"
- ip="46.239.117.180"
- subject="comment 2"
- date="2013-03-10T03:06:55Z"
- content="""
-From my tests, Rsync actually seems to honor the bandwidth limit that's in the sender's options. In particular, a dirty hard-coding of the limit in <tt>Utility.Rsync.rsyncServerParams</tt> (forwarding the option from <tt>git-annex-shell</tt> to the actuall rsync command, and) did the trick for me.
-
-I know Rsync merely tries to respect <tt>bwlimit</tt> on average, but for large files it's good enough I think. And for those like me who have a volume quota on their connection, it'd a plus to make <tt>git-annex-shell</tt> respect that limit. Well of course I could ask my users to use something like <tt>trickle</tt>, but external commands are more likely to be forgotten than a config option ;-)
-
-I couldn't see where in the code you whitelist the list of safe commands; Did you mean there is already such a thing, or is it empty right now? In any case, my wish doesn't seem to be hard to implement, and I'd be happy to try to provide a patch in the next few days.
-"""]]
diff --git a/doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option/comment_3_d36045e2b466882108c5bf09580755fa._comment b/doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option/comment_3_d36045e2b466882108c5bf09580755fa._comment
deleted file mode 100644
index 2b39d4bfa..000000000
--- a/doc/bugs/git-annex-shell_doesn__39__t_honour_Rsync__39__s_bwlimit_option/comment_3_d36045e2b466882108c5bf09580755fa._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-03-10T16:58:44Z"
- content="""
-There is not yet a white list, no. Patch would be appreciated.
-"""]]
diff --git a/doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git.mdwn b/doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git.mdwn
new file mode 100644
index 000000000..47ee6ed81
--- /dev/null
+++ b/doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git.mdwn
@@ -0,0 +1,50 @@
+### Please describe the problem.
+
+When trying to create a repository—i.e., running it for the first time—I get this error message:
+
+> user error (git ["--git-dir=(path)/.git","--work-tree=(path)","commit-tree","4b825dc642cb6eb9a060e54bf8d69288fbee4904","--no-gpg-sign"] exited 128)
+
+It _seems_ that it's because the bundled `git` executable isn't used, and instead `/usr/bin/git` is; and it's too old to support the `--no-gpg-sign` flag.
+
+
+### What steps will reproduce the problem?
+
+Run `git-annex.app` for the first time and give it a path.
+
+
+### What version of git-annex are you using? On what operating system?
+
+ $ /Applications/Git-Annex.app/Contents/MacOS/git-annex version
+ git-annex version: 5.20140707-gf0c48e8
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+
+
+### Please provide any additional information below.
+
+`…/.git/annex/daemon.log` doesn't exist
+
+ $ tree -a
+ .
+ ├── .DS_Store
+ └── .git
+ ├── HEAD
+ ├── annex
+ │   ├── index
+ │   ├── misctmp
+ │   ├── sentinal
+ │   └── sentinal.cache
+ ├── config
+ ├── hooks
+ │   └── pre-commit
+ ├── objects
+ │   ├── 4b
+ │   │   └── 825dc642cb6eb9a060e54bf8d69288fbee4904
+ │   ├── info
+ │   └── pack
+ └── refs
+ ├── heads
+ └── tags
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git/comment_1_73924adc1c3c0dca5adce9a5e1740e48._comment b/doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git/comment_1_73924adc1c3c0dca5adce9a5e1740e48._comment
new file mode 100644
index 000000000..888ef1e4a
--- /dev/null
+++ b/doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git/comment_1_73924adc1c3c0dca5adce9a5e1740e48._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 1"
+ date="2014-07-08T16:44:32Z"
+ content="""
+No, it's using it, it seems the version of git in the OSX build does not support that option.
+
+I am going to fix the version problem, and update yesterday's OSX release with the fix.
+"""]]
diff --git a/doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git/comment_2_81c2896c9dfe5d96ad5a8f40cb312790._comment b/doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git/comment_2_81c2896c9dfe5d96ad5a8f40cb312790._comment
new file mode 100644
index 000000000..fef971218
--- /dev/null
+++ b/doc/bugs/git-annex.app_doesn__39__t_seem_to_use_the_bundled_git/comment_2_81c2896c9dfe5d96ad5a8f40cb312790._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn0aWOz5xMj5VuexPl55h7IasQnsh7sVwE"
+ nickname="Andy"
+ subject="It works now"
+ date="2014-07-08T22:47:07Z"
+ content="""
+You were right, it was an old git. I could have sworn it worked, but I must've got the versions mixed up because it didn't earlier.
+
+Anyway, after updating, everything works fine. Thankyou!
+"""]]
diff --git a/doc/bugs/git-annex:_Argument_list_too_long.mdwn b/doc/bugs/git-annex:_Argument_list_too_long.mdwn
deleted file mode 100644
index f12d5da65..000000000
--- a/doc/bugs/git-annex:_Argument_list_too_long.mdwn
+++ /dev/null
@@ -1,40 +0,0 @@
-### Please describe the problem.
-
-Creating a SSH remote git-annex repository using the assisstant gives transcript:
-
-Initialized empty shared Git repository in /home/flindner/annex2/
-exec: 76: git-annex: Argument list too long
-
-### What steps will reproduce the problem?
-
-Using assistent: Creating a new empty local repository. Next, add another remote server repository using SSH. Checking the server went fine. I choose creating git repository. After about 5 minutes the error message above appears. In that time on the server runshell and git take plenty of CPU power but almost no memory. The directory on the server is created, but pairing was not successfull.
-
-### What version of git-annex are you using? On what operating system?
-
-Local: git-annex-standalone 4.20130909-1 from Archlinux AUR
-Remote: git-annex-standalone-i386.tar.gz as of 13. sept. 13. on Debian Squeeze.
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-daemon.log is empty.
-
-Log from the web GUI:
-
-[2013-09-13 12:34:11 CEST] main: starting assistant version 4.20130827-g4f18612
-
- No known network monitor available through dbus; falling back to polling
-(scanning...) [2013-09-13 12:34:11 CEST] Watcher: Performing startup scan
-(started...)
-
-
-# End of transcript or log.
-"""]]
-
-> [[done]]; I have added a guard to runshell to detect when it has
-> started to loop. Although I don't understand how a system could be
-> misconfigured to let that happen, without going far out of your way to
-> mess it up, it's a failure mode that's worth guarding against. --[[Joey]]
diff --git a/doc/bugs/git-annex:_Argument_list_too_long/comment_1_3f83ea525436b2379ab29a0f860c4669._comment b/doc/bugs/git-annex:_Argument_list_too_long/comment_1_3f83ea525436b2379ab29a0f860c4669._comment
deleted file mode 100644
index 43f4aa98b..000000000
--- a/doc/bugs/git-annex:_Argument_list_too_long/comment_1_3f83ea525436b2379ab29a0f860c4669._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.2.134"
- subject="comment 1"
- date="2013-09-13T15:31:35Z"
- content="""
-Can you add set -x near the top of the server's runshell script and run this again also with debugging enabled in the local assistant, and post the log, please.
-"""]]
diff --git a/doc/bugs/git-annex:_Argument_list_too_long/comment_2_b417c94169378ef7d0d278ebae517fa1._comment b/doc/bugs/git-annex:_Argument_list_too_long/comment_2_b417c94169378ef7d0d278ebae517fa1._comment
deleted file mode 100644
index cd90d9c3b..000000000
--- a/doc/bugs/git-annex:_Argument_list_too_long/comment_2_b417c94169378ef7d0d278ebae517fa1._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnsuhFUIfWNT-Q-C02FDaSQqceFDge5M9w"
- nickname="Florian"
- subject="comment 2"
- date="2013-09-14T08:49:23Z"
- content="""
-Is there any way to get the transcript from a log file, not from the web page? The output is so enormous that it crashed my browser out of memory (which is 16 GiB) when I tried to paste it. daemon.log contains no interesting output.
-"""]]
diff --git a/doc/bugs/git-annex:_Argument_list_too_long/comment_3_fa925cca216cb810ad80482b19fc6053._comment b/doc/bugs/git-annex:_Argument_list_too_long/comment_3_fa925cca216cb810ad80482b19fc6053._comment
deleted file mode 100644
index e182ca2c3..000000000
--- a/doc/bugs/git-annex:_Argument_list_too_long/comment_3_fa925cca216cb810ad80482b19fc6053._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnsuhFUIfWNT-Q-C02FDaSQqceFDge5M9w"
- nickname="Florian"
- subject="comment 3"
- date="2013-09-15T23:08:48Z"
- content="""
-Ok, I managed to get the transcript. It is located at <http://xgm.de/upload/transcript.log> (partly) resp. <http://xgm.de/upload/transcript.log.gz> (complete). Looks like the same script is executed again and again with an ever growing LD_LIBRARY_PATH argument list. The same happens when I simply run \"git-annex\" on the shell of the server. \"runshell\" standalone works fine.
-"""]]
diff --git a/doc/bugs/git-annex:_Argument_list_too_long/comment_4_8bd2996107b2d272c32810658e07e715._comment b/doc/bugs/git-annex:_Argument_list_too_long/comment_4_8bd2996107b2d272c32810658e07e715._comment
deleted file mode 100644
index 033e695f5..000000000
--- a/doc/bugs/git-annex:_Argument_list_too_long/comment_4_8bd2996107b2d272c32810658e07e715._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnsuhFUIfWNT-Q-C02FDaSQqceFDge5M9w"
- nickname="Florian"
- subject="comment 4"
- date="2013-09-15T23:10:38Z"
- content="""
-Addendum: git inside runshells works, git-annex not.
-"""]]
diff --git a/doc/bugs/git-annex:_Argument_list_too_long/comment_5_378de7d7503a64611eab62f2f5cffef3._comment b/doc/bugs/git-annex:_Argument_list_too_long/comment_5_378de7d7503a64611eab62f2f5cffef3._comment
deleted file mode 100644
index b10c66c81..000000000
--- a/doc/bugs/git-annex:_Argument_list_too_long/comment_5_378de7d7503a64611eab62f2f5cffef3._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnsuhFUIfWNT-Q-C02FDaSQqceFDge5M9w"
- nickname="Florian"
- subject="comment 5"
- date="2013-09-16T09:00:34Z"
- content="""
-Ok, bug can be closed, it was never a bug (at least not in git-annex). I was using the i386 build on a x86_64 machine.
-
-Server is virtual machine from Strato.
-
-$ uname -a
-Linux h1774498.stratoserver.net 2.6.32-042stab078.27 #1 SMP Mon Jul 1 20:48:07 MSK 2013 i686 GNU/Linux
-
-Since there was no x86_64 in the uname output, I thought it was a i386 machine. The git-annex binaries gave a \"File not found\" error message, the git binaries worked. Nothing I connected to a wrong architecture... Sorry for the hassle!
-"""]]
diff --git a/doc/bugs/git-annex:_Argument_list_too_long/comment_6_a94e17151348d02999442dd1219babfb._comment b/doc/bugs/git-annex:_Argument_list_too_long/comment_6_a94e17151348d02999442dd1219babfb._comment
deleted file mode 100644
index a788f2c8e..000000000
--- a/doc/bugs/git-annex:_Argument_list_too_long/comment_6_a94e17151348d02999442dd1219babfb._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.14.105"
- subject="comment 6"
- date="2013-09-19T17:31:46Z"
- content="""
-I have tried to reproduce this bug, running the amd64 build on i386, and cannot. When I run the git-annex shell script included in the standalone bundle, it runs runshell, which in turn tries to run bin/git-annex. Since the architecture is wrong, that fails.
-
-I suppose your shell could instead, if presented with a binary of the wrong architecture, skip it and keep searching PATH for another one. That would be a most odd behavior, but if that were the case and you put the git-annex script into PATH, it would lead to what you describe.
-"""]]
diff --git a/doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__.mdwn b/doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__.mdwn
deleted file mode 100644
index 862259422..000000000
--- a/doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__.mdwn
+++ /dev/null
@@ -1,34 +0,0 @@
-What steps will reproduce the problem?
-
- alip@hayalet /tmp/aaa (git)-[master] % git annex init aaa
- init aaa ok
- (Recording state in git...)
- alip@hayalet /tmp/aaa (git)-[master] % git remote add çüş /tmp/çüş
- alip@hayalet /tmp/aaa (git)-[master] % git annex sync --debug
- git ["--git-dir=/tmp/aaa/.git","--work-tree=/tmp/aaa","symbolic-ref","HEAD"]
- git ["--git-dir=/tmp/aaa/.git","--work-tree=/tmp/aaa","show-ref","git-annex"]
- git ["--git-dir=/tmp/aaa/.git","--work-tree=/tmp/aaa","show-ref","--hash","refs/heads/git-annex"]
- git ["--git-dir=/tmp/aaa/.git","--work-tree=/tmp/aaa","log","refs/heads/git-annex..bc45cd9c2cb7c9b0c7a12a4c0210fe6a262abac9","--oneline","-n1"]
- git ["--git-dir=/tmp/aaa/.git","--work-tree=/tmp/aaa","log","refs/heads/git-annex..9220bfedd1e13b2d791c918e2d59901af353825f","--oneline","-n1"]
- (merging origin/git-annex into git-annex...)
- git ["--git-dir=/tmp/aaa/.git","--work-tree=/tmp/aaa","cat-file","--batch"]
- git ["--git-dir=/tmp/aaa/.git","--work-tree=/tmp/aaa","update-index","-z","--index-info"]
- git ["--git-dir=/tmp/aaa/.git","--work-tree=/tmp/aaa","diff-index","--raw","-z","-r","--no-renames","-l0","--cached","9220bfedd1e13b2d791c918e2d59901af353825f"]
- git-annex: Cannot decode byte '\xfc': Data.Text.Encoding.decodeUtf8: Invalid UTF-8 stream
- 1 alip@hayalet /tmp/aaa (git)-[master] %
-
-What is the expected output? What do you see instead?
-
-Syncing a repository under a path with utf-8 characters in its name fails.
-
-What version of git-annex are you using? On what operating system?
-
-git-annex version: 3.20120624
-
-On Exherbo, linux-3.4
-
-Please provide any additional information below.
-
-'\xfc' is valid UTF-8: 'LATIN SMALL LETTER U WITH DIAERESIS'
-
-> closing as non-reproducible and presumably fixed. [[done]] --[[Joey]]
diff --git a/doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__/comment_1_f1a7352b04f395e06e0094c1f51b6fff._comment b/doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__/comment_1_f1a7352b04f395e06e0094c1f51b6fff._comment
deleted file mode 100644
index 28faa7b45..000000000
--- a/doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__/comment_1_f1a7352b04f395e06e0094c1f51b6fff._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.2.25"
- subject="comment 1"
- date="2012-06-27T02:48:31Z"
- content="""
-I don't think this has to do with the path name of the repository containing utf-8 at all.
-
-Your recipe for reproducing this depends on some pre-existing repository that I don't know how to set up to reproduce this bug. All I can guess is that, based on the \"decodeUtf8\" in the error message, it's coming from the one part of the code that still uses that, the union merger.
-
-
-"""]]
diff --git a/doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__/comment_2_c1890067079cd99667f31cbb4d2e4545._comment b/doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__/comment_2_c1890067079cd99667f31cbb4d2e4545._comment
deleted file mode 100644
index 3486be733..000000000
--- a/doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__/comment_2_c1890067079cd99667f31cbb4d2e4545._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.2.25"
- subject="comment 2"
- date="2012-06-27T03:08:13Z"
- content="""
-Since I can't reproduce it I am not sure, but it may be fixed by the commits I've just made.
-"""]]
diff --git a/doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__/comment_3_213c96085c60c8e52cd803df07240158._comment b/doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__/comment_3_213c96085c60c8e52cd803df07240158._comment
deleted file mode 100644
index 48a382029..000000000
--- a/doc/bugs/git-annex:_Cannot_decode_byte___39____92__xfc__39__/comment_3_213c96085c60c8e52cd803df07240158._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkWzAq6TusMi9zI3FLkDOETRIAUTtmGZVg"
- nickname="Ali"
- subject="comment 3"
- date="2012-06-27T12:56:37Z"
- content="""
-Yes, the problem is fixed.
-
-The repository was a normal git repository with path /tmp/çüş (git init)
-and with annex description \"çüş\" (git annex init çüş)
-
-afaict, i can't reproduce the problem anymore either :-)
-"""]]
diff --git a/doc/bugs/git-annex:_Not_in_a_git_repository._.mdwn b/doc/bugs/git-annex:_Not_in_a_git_repository._.mdwn
deleted file mode 100644
index a2817661e..000000000
--- a/doc/bugs/git-annex:_Not_in_a_git_repository._.mdwn
+++ /dev/null
@@ -1,22 +0,0 @@
-What steps will reproduce the problem?
-
-As a default user i want to start git-annex assistent with
-
-`$ git-annex webapp`
-
-`git-annex: Not in a git repository.`
-
-What is the expected output? What do you see instead?
-
-I would expect the assistent to popup in a opened browser window.
-
-What version of git-annex are you using? On what operating system?
-
-Debian wheezy with git-annex version: 3.20130114
-
-Please provide any additional information below.
-
-Its working if i start `git-annex webapp` as root. I had the same error on previous version.
-
-> I've made some improvements. Think this was user error. [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/git-annex:_Not_in_a_git_repository._/comment_1_e10363a912953a646b87c824d1c6e5d4._comment b/doc/bugs/git-annex:_Not_in_a_git_repository._/comment_1_e10363a912953a646b87c824d1c6e5d4._comment
deleted file mode 100644
index ea2b1fbf3..000000000
--- a/doc/bugs/git-annex:_Not_in_a_git_repository._/comment_1_e10363a912953a646b87c824d1c6e5d4._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="comment 1"
- date="2013-01-15T20:20:22Z"
- content="""
-Sounds like a permissions error. Take a look at the repository in `~/Desktop/annex/` or `~/annex/` , and see if it contains files owned by root, or has bad directory permissions that would prevent your normal user from accessing it. Don't forget to check in its `.git` directory.
-
-I'd recommend not running the git-annex webapp as root. (There may be valid use cases for root to use git-annex in command-line mode.)
-"""]]
diff --git a/doc/bugs/git-annex:_Not_in_a_git_repository._/comment_2_9e96063a664b2be8a36d7940e7632d3f._comment b/doc/bugs/git-annex:_Not_in_a_git_repository._/comment_2_9e96063a664b2be8a36d7940e7632d3f._comment
deleted file mode 100644
index 4b054b120..000000000
--- a/doc/bugs/git-annex:_Not_in_a_git_repository._/comment_2_9e96063a664b2be8a36d7940e7632d3f._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmaMxYm33s0H-nxBo5uzYUzdIECoyR8Ug8"
- nickname="Stefan"
- subject="removing config"
- date="2013-02-11T20:42:29Z"
- content="""
-What fixed this for me was to remove .config/git-annex.
-"""]]
diff --git a/doc/bugs/git-annex:_Not_in_a_git_repository._/comment_3_8c9bd76b0e1200723ec13fbef943a2cc._comment b/doc/bugs/git-annex:_Not_in_a_git_repository._/comment_3_8c9bd76b0e1200723ec13fbef943a2cc._comment
deleted file mode 100644
index 403933886..000000000
--- a/doc/bugs/git-annex:_Not_in_a_git_repository._/comment_3_8c9bd76b0e1200723ec13fbef943a2cc._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.183"
- subject="comment 3"
- date="2013-02-12T15:42:57Z"
- content="""
-What can happen is that `.config/git-annex/autostart` can list a repository that is somehow trashed. For example, I've seen this when I let the webapp make a repository, and then manually deleted the directory, while the webapp was running. The webapp then re-creates the directory, but it's not a valid git repo, just a mostly empty directory.
-
-Tend to see this as user error though..
-"""]]
diff --git a/doc/bugs/git-annex:_Not_in_a_git_repository._/comment_4_8c49979b8a815f0d6f9de39ee9a88730._comment b/doc/bugs/git-annex:_Not_in_a_git_repository._/comment_4_8c49979b8a815f0d6f9de39ee9a88730._comment
deleted file mode 100644
index 3b7fee676..000000000
--- a/doc/bugs/git-annex:_Not_in_a_git_repository._/comment_4_8c49979b8a815f0d6f9de39ee9a88730._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="modules"
- ip="2.206.0.102"
- subject="comment 4"
- date="2013-04-03T07:45:53Z"
- content="""
-Seems like a user error from my side. I removed repos while webapp was still running. Removing ~/.config/git-annex solved my problem. Thanks.
-"""]]
diff --git a/doc/bugs/git-annex:_WebDAV_failed_to_write_file:_TlsNotSupported:_user_error.mdwn b/doc/bugs/git-annex:_WebDAV_failed_to_write_file:_TlsNotSupported:_user_error.mdwn
deleted file mode 100644
index b7c67e398..000000000
--- a/doc/bugs/git-annex:_WebDAV_failed_to_write_file:_TlsNotSupported:_user_error.mdwn
+++ /dev/null
@@ -1,35 +0,0 @@
-### Please describe the problem.
-$ WEBDAV_USERNAME=xxx@gmail.com WEBDAV_PASSWORD=xxx git annex initremote box.com type=webdav url=https://dav.box.com/dav/git-annex-Pictures chunksize=75mb encryption=shared
-initremote box.com (encryption setup) (shared cipher) (testing WebDAV server...)
-
-git-annex: WebDAV failed to write file: TlsNotSupported: user error
-failed
-git-annex: initremote: 1 failed
-
-
-### What steps will reproduce the problem?
-Compiled with cabal.
-
-### What version of git-annex are you using? On what operating system?
-git-annex version: 5.20131213
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS Feeds Quvi TDFA CryptoHash
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
-remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
-local repository version: 3
-default repository version: 3
-supported repository versions: 3 5
-upgrade supported from repository versions: 0 1 2 4
-
-ArchLinux
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/git-annex:_WebDAV_failed_to_write_file:_TlsNotSupported:_user_error/comment_1_2c54c57f456e4570666fd7a5731dcd27._comment b/doc/bugs/git-annex:_WebDAV_failed_to_write_file:_TlsNotSupported:_user_error/comment_1_2c54c57f456e4570666fd7a5731dcd27._comment
deleted file mode 100644
index cf649c1dd..000000000
--- a/doc/bugs/git-annex:_WebDAV_failed_to_write_file:_TlsNotSupported:_user_error/comment_1_2c54c57f456e4570666fd7a5731dcd27._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.87"
- subject="comment 1"
- date="2013-12-16T16:06:26Z"
- content="""
-Tested this with the Debian build and it works ok.
-
-TlsNotSupported is a new exception thrown by http-client, which is a very new library. Using an older version of http-conduit should avoid whatever the bug is.
-Probably something to do with http-conduit not using http-client-tls, so http-client is left with no way to handle TLS connections.
-"""]]
diff --git a/doc/bugs/git-annex:_WebDAV_failed_to_write_file:_TlsNotSupported:_user_error/comment_2_c9a9f070b2eaff9f68f603ca1defec81._comment b/doc/bugs/git-annex:_WebDAV_failed_to_write_file:_TlsNotSupported:_user_error/comment_2_c9a9f070b2eaff9f68f603ca1defec81._comment
deleted file mode 100644
index 95f611593..000000000
--- a/doc/bugs/git-annex:_WebDAV_failed_to_write_file:_TlsNotSupported:_user_error/comment_2_c9a9f070b2eaff9f68f603ca1defec81._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.87"
- subject="comment 2"
- date="2013-12-16T16:23:10Z"
- content="""
-This turns out to have been a bug in version 0.5 of the haskell DAV library, and was fixed already in a newer version. So cabal update; cabal install DAV; cabal install git-annex
-"""]]
diff --git a/doc/bugs/git-annex:_WebDAV_failed_to_write_file:_TlsNotSupported:_user_error/comment_3_62ff37a8429cfb3577d4250c701811d0._comment b/doc/bugs/git-annex:_WebDAV_failed_to_write_file:_TlsNotSupported:_user_error/comment_3_62ff37a8429cfb3577d4250c701811d0._comment
deleted file mode 100644
index 304d85901..000000000
--- a/doc/bugs/git-annex:_WebDAV_failed_to_write_file:_TlsNotSupported:_user_error/comment_3_62ff37a8429cfb3577d4250c701811d0._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawleVyKk2kQsB_HgEdS7w1s0BmgRGy1aay0"
- nickname="Milan"
- subject="comment 3"
- date="2013-12-16T16:41:08Z"
- content="""
-Thanks, after the update it works.
-"""]]
diff --git a/doc/bugs/git-annex:___60__socket:_16__62__:_hPutBuf:_resource_vanished___40__Broken_pipe__41__.mdwn b/doc/bugs/git-annex:___60__socket:_16__62__:_hPutBuf:_resource_vanished___40__Broken_pipe__41__.mdwn
index ac44498a0..6374844a1 100644
--- a/doc/bugs/git-annex:___60__socket:_16__62__:_hPutBuf:_resource_vanished___40__Broken_pipe__41__.mdwn
+++ b/doc/bugs/git-annex:___60__socket:_16__62__:_hPutBuf:_resource_vanished___40__Broken_pipe__41__.mdwn
@@ -13,4 +13,6 @@ git-annex version: 4.20130521-g20710d4 (And multiple prior versions)
I could find no debug.log?
-> [[moreinfo]] until it's reproduced with a current version.. --[[Joey]]
+> [[!taglink moreinfo]] until it's reproduced with a current version.. --[[Joey]]
+
+>> Note that this seems like a similar untrappable crash as [[git_annex_daemon_crashes_when_authenticating_with_jabber.de]]. --[[Joey]]
diff --git a/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__.mdwn b/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__.mdwn
new file mode 100644
index 000000000..279ca3a3b
--- /dev/null
+++ b/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__.mdwn
@@ -0,0 +1,33 @@
+### Please describe the problem.
+git-annex crashes with "git-annex: createSession: permission denied (Operation not permitted)" when creating the first repository. Trying to start git-annex webapp after that crashes again.
+
+### What steps will reproduce the problem?
+* Download standalone tarball
+* Unpack
+* Go to new folder, call "git-annex webapp"
+* Click Make repository
+
+### What version of git-annex are you using? On what operating system?
+git-annex version: 5.20140606-g48793b6
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+
+Ubuntu 14.04 LTS
+
+Linux eee 3.13.0-29-generic #53-Ubuntu SMP Wed Jun 4 21:02:19 UTC 2014 i686 i686 i686 GNU/Linux
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+$ git-annex webapp
+Launching web browser on file:///tmp/webapp3414.html
+git-annex: createSession: permission denied (Operation not permitted)
+WebApp crashed: createSession: permission denied (Operation not permitted)
+$
+# End of transcript or log.
+"""]]
+
+> provisionally fixed; [[done]] --[[Joey]]
diff --git a/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_1_b7a327b668e2ca053713bec1dc4e6314._comment b/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_1_b7a327b668e2ca053713bec1dc4e6314._comment
new file mode 100644
index 000000000..abd79e0f7
--- /dev/null
+++ b/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_1_b7a327b668e2ca053713bec1dc4e6314._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-06-09T18:46:01Z"
+ content="""
+createSession just calls the unix `setsid` system call.
+
+I have not been able to reproduce this problem using git-annex here. I suspect setsid is probably failing because git-annex is already a process group leader due to the way it was run. In this case, it should just ignore the setsid failure, which I've made it do.
+
+This change will be available in the standalone tarball within an hour if you want to test it.
+
+
+"""]]
diff --git a/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_2_8864149bd87f7956143109ab591afe4f._comment b/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_2_8864149bd87f7956143109ab591afe4f._comment
new file mode 100644
index 000000000..a4cdf367f
--- /dev/null
+++ b/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_2_8864149bd87f7956143109ab591afe4f._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk7iPiqWr3BVPLWEDvJhSSvcOqheLEbLNo"
+ nickname="Dirk"
+ subject="comment 2"
+ date="2014-06-09T21:16:36Z"
+ content="""
+Thanks for the fix. The new tarball does not show the issue anymore.
+
+Regarding \"due to the way it is run\":
+
+* I use Konsole as my terminal under xfce, inside of that is bash
+* I made sure that I removed old stuff beforehand \"rm -rf .config/git-annex/ Desktop/annex/ .ssh/git-annex-*\"
+* I went to the directory in the tarball \"git-annex.linux\" and called \"./git-annex webapp\"
+* Browser used is firefox
+
+I guess I should setup the PATH properly. This was just meant as a test for the tarball given that there is no up to date package for ubuntu available anymore.
+
+Not sure if there is other information that would help you determine if I run this in a special way.
+"""]]
diff --git a/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_3_1229d5ea8799f0a744b3f03f620df1ec._comment b/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_3_1229d5ea8799f0a744b3f03f620df1ec._comment
new file mode 100644
index 000000000..08e5d21e7
--- /dev/null
+++ b/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_3_1229d5ea8799f0a744b3f03f620df1ec._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk9SYh6N-JUMkYkW4aOk55zC3Vr9KonDV4"
+ nickname="Florian"
+ subject="comment 3"
+ date="2014-06-11T18:29:38Z"
+ content="""
+I'm having the exact same issue on Arch.
+
+You said this fix was in the tarballs in one hour, which was almost two days ago. Are you refering to these downloads: http://downloads.kitenet.net/git-annex/linux/current/ I just wonder, because these show mtime of 5 days ago.
+
+Thx!
+"""]]
diff --git a/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_4_975d2631faa17d257a6fce40e24a6e3b._comment b/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_4_975d2631faa17d257a6fce40e24a6e3b._comment
new file mode 100644
index 000000000..5048cad9b
--- /dev/null
+++ b/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_4_975d2631faa17d257a6fce40e24a6e3b._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk7iPiqWr3BVPLWEDvJhSSvcOqheLEbLNo"
+ nickname="Dirk"
+ subject="comment 4"
+ date="2014-06-11T19:47:35Z"
+ content="""
+For me the autobuilt tarball works. Go to this page: http://git-annex.branchable.com/install/Linux_standalone/. Right before the comments start is a list of the different autobuilt tar balls.
+
+I assume that this fix will appear in the regular tarballs with the next release.
+
+Dirk
+
+
+"""]]
diff --git a/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_5_013be36151fc710ec30756b0f68f43dc._comment b/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_5_013be36151fc710ec30756b0f68f43dc._comment
new file mode 100644
index 000000000..358a820bf
--- /dev/null
+++ b/doc/bugs/git-annex:_createSession:_permission_denied___40__Operation_not_permitted__41__/comment_5_013be36151fc710ec30756b0f68f43dc._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnNqLKszWk9EoD4CDCqNXJRIklKFBCN1Ao"
+ nickname="maurizio"
+ subject="package in debian backports shows the same error mesage"
+ date="2014-07-08T19:25:19Z"
+ content="""
+I upgraded recently (on wheezy) to package 5.20140529~bpo70+2 and when I to access the webapp I get:
+
+ mezzo:~$ git-annex webapp
+ git-annex: createSession: permission denied (Operation not permitted)
+
+"""]]
diff --git a/doc/bugs/git-annex:_status:_1_failed.mdwn b/doc/bugs/git-annex:_status:_1_failed.mdwn
deleted file mode 100644
index 65f00469c..000000000
--- a/doc/bugs/git-annex:_status:_1_failed.mdwn
+++ /dev/null
@@ -1,25 +0,0 @@
-Hi
-
-I have a 1 To repository on my local linux box
-
-when i try :
-
- git annex status
-
-i get :
-
- git-annex: /media/malima/nazare/.git/annex/tmp/0723300. Everywhere I Dub --: getFileStatus: does not exist (No such file or directory)
- failed
-
-how could i fix this issue ?
-
-many thanks for help
-
-> [[done]]; I managed to reproduce this bug by making a temp file named
-> ".git/annex/tmp/foo-", or indeed with any dash in it. This is enough
-> to make git-annex think it's a key, but badly formed enough that
-> it fails trying to use that key. Fixed to ignore such non-key files.
->
-> I'm unsure why `.git/annex/tmp` would have such files in it.
-> Perhaps the assistant was running, but crashed while adding files?
-> --[[Joey]]
diff --git a/doc/bugs/git-annex:_status:_1_failed/comment_10_7cd9de88e55633fc75460f4fe0400f09._comment b/doc/bugs/git-annex:_status:_1_failed/comment_10_7cd9de88e55633fc75460f4fe0400f09._comment
deleted file mode 100644
index 556982e34..000000000
--- a/doc/bugs/git-annex:_status:_1_failed/comment_10_7cd9de88e55633fc75460f4fe0400f09._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="RaspberryPie"
- ip="204.8.156.142"
- subject="comment 10"
- date="2013-10-15T18:49:26Z"
- content="""
-`git annex status` complains about `.git/annex/tmp/problematic_file--`. That file doesn't exist, but `.git/annex/tmp/problematic_file-` (with one dash) does. And the file itself (no dashes) does exist in a subdir of the annex.
-"""]]
diff --git a/doc/bugs/git-annex:_status:_1_failed/comment_11_504a944aab34155046f2fd82c2878f3e._comment b/doc/bugs/git-annex:_status:_1_failed/comment_11_504a944aab34155046f2fd82c2878f3e._comment
deleted file mode 100644
index 45ee3a050..000000000
--- a/doc/bugs/git-annex:_status:_1_failed/comment_11_504a944aab34155046f2fd82c2878f3e._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="RaspberryPie"
- ip="96.44.189.101"
- subject="comment 11"
- date="2013-10-27T00:59:56Z"
- content="""
-I've tried a few things and found a workaround for the problem. TL;DR: `git annex dropunused`
-
-First I created a new annex with the same data. This time I used `git annex add` instead of having the assistant add the files. Adding went fine (no status error). Only when I started the assistant I got the error right away, with exactly the same file as the last time.
-
-When I removed the file from the annex, the error remained, but this time with a different problematic file in the same directory.
-
-Then I stumbled upon [this forum post](http://git-annex.branchable.com/forum/dot_git_slash_annex_slash_tmp/). It relates to this bug in that the files git-annex is complaining about are located in .git/annex/tmp. `git annex unused` returned about 130 entries (of about 1,200 files total). The last entry was my problematic file. The second-to-last entry was the file that gave me the same error when I removed the original problematic file. This lets me assume that the bug causes `git annex status' to produce 130 errors, of which only the last one gets displayed.
-
-So I ran `git annex dropunused 1-130 --force`. (The command wouldn't run without `--force`, saying that it couldn't make sure if numcopies were being met. This may or may not be related to network problems I'm having lately.) Anyway, now the error was finally gone and the status output didn't complain anymore.
-
-Weird stuff.
-"""]]
diff --git a/doc/bugs/git-annex:_status:_1_failed/comment_1_c235cc83c75474e6393e08d2d94b119d._comment b/doc/bugs/git-annex:_status:_1_failed/comment_1_c235cc83c75474e6393e08d2d94b119d._comment
deleted file mode 100644
index a5a378c99..000000000
--- a/doc/bugs/git-annex:_status:_1_failed/comment_1_c235cc83c75474e6393e08d2d94b119d._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.255.110"
- subject="comment 1"
- date="2013-09-09T19:38:50Z"
- content="""
-You might try moving the .git/annex/transfer/ directory out of the way.
-
-What version of git-annex do you have installed?
-"""]]
diff --git a/doc/bugs/git-annex:_status:_1_failed/comment_2_932f6aaa712298a47868002872e16310._comment b/doc/bugs/git-annex:_status:_1_failed/comment_2_932f6aaa712298a47868002872e16310._comment
deleted file mode 100644
index 98fb1d805..000000000
--- a/doc/bugs/git-annex:_status:_1_failed/comment_2_932f6aaa712298a47868002872e16310._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="eezec"
- ip="93.21.246.236"
- subject="comment 2"
- date="2013-09-10T06:05:32Z"
- content="""
-i have
- git-annex version: 4.20130815
-
-"""]]
diff --git a/doc/bugs/git-annex:_status:_1_failed/comment_3_4bf55320439de152a65e2f21d4a0604b._comment b/doc/bugs/git-annex:_status:_1_failed/comment_3_4bf55320439de152a65e2f21d4a0604b._comment
deleted file mode 100644
index 0c3604ad6..000000000
--- a/doc/bugs/git-annex:_status:_1_failed/comment_3_4bf55320439de152a65e2f21d4a0604b._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="eezec"
- ip="93.21.246.236"
- subject="comment 3"
- date="2013-09-11T06:12:20Z"
- content="""
-Joey .. moving transfer didn't work .. i have the same message when doing
-
- git annex status
- ....
- getFileStatus: does not exist (No such file or directory)
- ....
- git-annex: status: 1 failed
-"""]]
diff --git a/doc/bugs/git-annex:_status:_1_failed/comment_4_cb2cfb798c6171f77eb7c4c4061c0f0c._comment b/doc/bugs/git-annex:_status:_1_failed/comment_4_cb2cfb798c6171f77eb7c4c4061c0f0c._comment
deleted file mode 100644
index 3e4ecb82f..000000000
--- a/doc/bugs/git-annex:_status:_1_failed/comment_4_cb2cfb798c6171f77eb7c4c4061c0f0c._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.51"
- subject="comment 4"
- date="2013-09-12T21:10:12Z"
- content="""
-can you `strace git-annex status` ?
-"""]]
diff --git a/doc/bugs/git-annex:_status:_1_failed/comment_5_05c84dde377298adfd3fc20749b3108f._comment b/doc/bugs/git-annex:_status:_1_failed/comment_5_05c84dde377298adfd3fc20749b3108f._comment
deleted file mode 100644
index 61af9e9df..000000000
--- a/doc/bugs/git-annex:_status:_1_failed/comment_5_05c84dde377298adfd3fc20749b3108f._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="RaspberryPie"
- ip="213.61.149.100"
- subject="comment 5"
- date="2013-10-13T06:33:24Z"
- content="""
-I use v4.20130909 and get the same error when running `git-annex status`. Does it matter that my filename in question is shown to have two dashes (--) at the end, just as in OP's case? Other files in .git/annex/tmp only have one dash at the end.
-
-Joey, I straced the command and sent the output to your kitenet e-mail address. Hope it helps.
-"""]]
diff --git a/doc/bugs/git-annex:_status:_1_failed/comment_6_bb5141e29c665bc0bb82611ea27d4be8._comment b/doc/bugs/git-annex:_status:_1_failed/comment_6_bb5141e29c665bc0bb82611ea27d4be8._comment
deleted file mode 100644
index ab720b6ce..000000000
--- a/doc/bugs/git-annex:_status:_1_failed/comment_6_bb5141e29c665bc0bb82611ea27d4be8._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.22"
- subject="comment 6"
- date="2013-10-13T17:35:20Z"
- content="""
-What is the last line printed before this error message?
-
-My preliminary analysis is that it is checking the sizes of stale files in .git/annex/tmp, and could fail if a temp file was deleted just as it was running.
-But if so it would be unlikely to happen every time `git annex status` is run. Or even if it did happen every time (perhaps because you appear to be running the git-annex assistant and it might be adding a lot of files in the background), the filename in the error message would be different every time. I have just committed a fix for that problem to git, but am not 100% sure it's really the problem that you're seeing.
-"""]]
diff --git a/doc/bugs/git-annex:_status:_1_failed/comment_7_5fd39168c9e1bf43909ee0ab3c75c40c._comment b/doc/bugs/git-annex:_status:_1_failed/comment_7_5fd39168c9e1bf43909ee0ab3c75c40c._comment
deleted file mode 100644
index 54f87581c..000000000
--- a/doc/bugs/git-annex:_status:_1_failed/comment_7_5fd39168c9e1bf43909ee0ab3c75c40c._comment
+++ /dev/null
@@ -1,35 +0,0 @@
-[[!comment format=mdwn
- username="RaspberryPie"
- ip="37.130.227.133"
- subject="comment 7"
- date="2013-10-13T22:14:05Z"
- content="""
-Yes, I run the assistant in the background. The error came up after I ran
-
- git init
- git annex init
- git annex direct
- git annex assistant
-
-in a directory containing a lot of files (around 80G). Right away, `git annex status` gave me the error below. The file name in question never changed during the process of adding files and hasn't changed after all files have been added.
-
-Here's the complete command line output:
-
- $ git annex status
- supported backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
- supported remote types: git gcrypt S3 bup directory rsync web glacier hook
- repository mode: direct
- trusted repositories: 0
- semitrusted repositories: 2
- 00000000-0000-0000-0000-000000000001 -- web
- c1bb8eb9-fb0c-4bac-b0df-37df25b2d1e7 -- here
- untrusted repositories: 0
- transfers in progress: none
- available local disk space: 1.74 terabytes (+10 gigabytes reserved)
-
- git-annex: /storage/media/.git/annex/tmp/problematic_file--: getFileStatus: does not exist (No such file or directory)
- failed
- git-annex: status: 1 failed
-
-
-"""]]
diff --git a/doc/bugs/git-annex:_status:_1_failed/comment_8_e493f6bddb0bfcd9478d5f4d9fc170e0._comment b/doc/bugs/git-annex:_status:_1_failed/comment_8_e493f6bddb0bfcd9478d5f4d9fc170e0._comment
deleted file mode 100644
index e4fae1f31..000000000
--- a/doc/bugs/git-annex:_status:_1_failed/comment_8_e493f6bddb0bfcd9478d5f4d9fc170e0._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="RaspberryPie"
- ip="204.8.156.142"
- subject="comment 8"
- date="2013-10-14T17:49:05Z"
- content="""
-Quick question: Is there any way to get rid of the error in the existing repository (e.g. remove the problematic tmp file entry) so I can get a complete status output? Bonus points if I don't have to annex every single file anew. `git annex fsck` doesn't work, as doesn't `git annex fix` (it's a direct repo).
-"""]]
diff --git a/doc/bugs/git-annex:_status:_1_failed/comment_9_573377d444aee0895b231082bc6839a4._comment b/doc/bugs/git-annex:_status:_1_failed/comment_9_573377d444aee0895b231082bc6839a4._comment
deleted file mode 100644
index 208f178a3..000000000
--- a/doc/bugs/git-annex:_status:_1_failed/comment_9_573377d444aee0895b231082bc6839a4._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="64.134.31.139"
- subject="comment 9"
- date="2013-10-15T17:51:04Z"
- content="""
-Does the file that it's complaining about exist?
-"""]]
diff --git a/doc/bugs/git-annex_3.20130216.1_tests_are_broken.mdwn b/doc/bugs/git-annex_3.20130216.1_tests_are_broken.mdwn
deleted file mode 100644
index 6df6bf489..000000000
--- a/doc/bugs/git-annex_3.20130216.1_tests_are_broken.mdwn
+++ /dev/null
@@ -1,43 +0,0 @@
- $ pwd
- [bla]/git-annex-3.20130216.1
- $ runhaskell Setup configure --prefix=/usr --libdir=/usr/lib64 --docdir=/usr/share/doc/git-annex-3.20130216.1-r2 \
- --htmldir=/usr/share/doc/git-annex-3.20130216.1-r2/html --with-compiler=ghc-7.6.2 --enable-shared \
- --disable-executable-stripping --global --verbose --enable-tests --flags=S3 --flags=-WebDAV --flags=-Inotify \
- --flags=Dbus --flags=-Assistant --flags=-Webapp --flags=-Pairing --flags=-XMPP --flags=-DNS
- $ runhaskell Setup.hs build
- Building git-annex-3.20130217...
- Preprocessing test suite 'test' for git-annex-3.20130217...
-
- Annex/UUID.hs:30:8:
- Could not find module `System.Random'
- It is a member of the hidden package `random-1.0.1.1'.
- Perhaps you need to add `random' to the build-depends in your .cabal file.
- Use -v to see a list of the files searched for.
-
-Adding `random` to the dependencies of the test suite results in:
-
- $ runhaskell Setup.hs build
- Building git-annex-3.20130217...
- Preprocessing test suite 'test' for git-annex-3.20130217...
-
- Annex/UUID.hs:29:18:
- Could not find module `Data.UUID'
- It is a member of the hidden package `uuid-1.2.9'.
- Perhaps you need to add `uuid' to the build-depends in your .cabal file.
- Use -v to see a list of the files searched for.
-
-Adding `uuid` results in:
-
- $ runhaskell Setup.hs build
- Building git-annex-3.20130217...
- Preprocessing test suite 'test' for git-annex-3.20130217...
-
- Command/Add.hs:25:8:
- Could not find module `Utility.Touch'
- Use -v to see a list of the files searched for.
-
-
-Also: you included ".git-annex.cabal.swp" in the tarball.
-
-> These problems in the cabal file were fixed the other day. [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/git-annex___38___rsync_can__39__t_copy_files_with___39__:__39___in_their_names.mdwn b/doc/bugs/git-annex___38___rsync_can__39__t_copy_files_with___39__:__39___in_their_names.mdwn
deleted file mode 100644
index b55493dc4..000000000
--- a/doc/bugs/git-annex___38___rsync_can__39__t_copy_files_with___39__:__39___in_their_names.mdwn
+++ /dev/null
@@ -1,38 +0,0 @@
-What steps will reproduce the problem?
-
-Send a file with the character ':' in it. rsync fails to send those files from the command line as well
-confusing them with hostnames. As far as I know a workaround is prepending the pathname with './'
-(for rsync commandline invocation that is)
-
-What is the expected output? What do you see instead?
-
- copy müzik/Mixxx/Recordings/2013-01-15_16h:13m:03s.mp3 (checking kaotik...) (to kaotik...)
- git-annex: //home/alip/kaotika/.git/annex/transfer/download/effe4eef-926f-494c-a3b6-eeecdc208fb9/SHA256-s36349200--ce51eaf316b19c61831
- 41f0bda1c54be7e590e5999753a4b1c16bafab93a3fc1: commitBuffer: invalid argument (invalid character)
- git-annex-shell: recvkey: 1 failed
- protocol version mismatch -- is your shell clean?
- (see the rsync man page for an explanation)
- rsync error: protocol incompatibility (code 2) at compat.c(174) [sender=3.0.9]
-
-
-What version of git-annex are you using? On what operating system?
-
- git-annex version: 3.20120807
- local repository version: 3
- default repository version: 3
- supported repository versions: 3
- upgrade supported from repository versions: 0 1 2
-
-Operating system is Linux (Exherbo) although this isn't a packaged installation.
-I installed it by hand from git sources.
-
-Please provide any additional information below.
-
-Thanks for the wonderful tool!
-
-> This is a duplicate of
-> [[bugs/commitBuffer:_invalid_argument___40__invalid_character__41__]],
-> which was fixed in version 3.20120924. You need to upgrade the git-annex
-> on kaotik. [[done]]
->
-> (It has nothing to do with rsync or colon in filenames.) --[[Joey]]
diff --git a/doc/bugs/git-annex_add_hangs_indefinitely_on_all_files.mdwn b/doc/bugs/git-annex_add_hangs_indefinitely_on_all_files.mdwn
deleted file mode 100644
index 24fcac89e..000000000
--- a/doc/bugs/git-annex_add_hangs_indefinitely_on_all_files.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-### Please describe the problem.
-
-Running "git annex add" on a file of any size (whether 10KB or 1GB) hangs forever, must be killed with ^C, and does not add the file.
-
-"git annex unannex" still works, as do other commands like "git annex status", "git annex whereis", etc.
-
-### What steps will reproduce the problem?
-
-Running "git annex add" from this computer on any git annex repository on any hard drive.
-
-### What version of git-annex are you using? On what operating system?
-
-I am using 3.20121127 on Arch Linux with git version 1.8.5.2.
-
-My hard drive has several gigabytes of free space, and I have no trouble using git itself for development in other repositories.
-
-I have been using this for over a year with no problem; I first noticed this about a week ago, and it must have started within the last ~3 weeks at most.
-
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-$git annex add test.txt
-add test.txt
-
-# End of transcript or log.
-"""]]
-
-> [[done]]
diff --git a/doc/bugs/git-annex_add_hangs_indefinitely_on_all_files/comment_1_f787155da9a4d92c41546c35f3bd6a08._comment b/doc/bugs/git-annex_add_hangs_indefinitely_on_all_files/comment_1_f787155da9a4d92c41546c35f3bd6a08._comment
deleted file mode 100644
index f22fd23ea..000000000
--- a/doc/bugs/git-annex_add_hangs_indefinitely_on_all_files/comment_1_f787155da9a4d92c41546c35f3bd6a08._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.35"
- subject="comment 1"
- date="2014-01-07T03:40:01Z"
- content="""
-3.20121127 is over a year out of date. You need to upgrade to a current version. I'd not be surprised if this is some incompatability with such an old git-annex and the rather new version of git you have installed.
-
-Assuming a current version of git-annex still has the problem (which seems unlikely), run the command again with --debug and paste the full output.
-
-
-"""]]
diff --git a/doc/bugs/git-annex_add_hangs_indefinitely_on_all_files/comment_2_66ad95d98c12b4b26e06e3fe28f0ed01._comment b/doc/bugs/git-annex_add_hangs_indefinitely_on_all_files/comment_2_66ad95d98c12b4b26e06e3fe28f0ed01._comment
deleted file mode 100644
index a4387e669..000000000
--- a/doc/bugs/git-annex_add_hangs_indefinitely_on_all_files/comment_2_66ad95d98c12b4b26e06e3fe28f0ed01._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmi5n3M8NMWsDYth_TGGRuJ4_CM2tPQfwg"
- nickname="Aditya"
- subject="comment 2"
- date="2014-01-07T04:54:40Z"
- content="""
-Wow, I did not realize how horribly out-of-date the Arch AUR package for this was - I've fixed it: https://aur.archlinux.org/packages/git-annex-bin/
-
-Thanks for the help - it seems to be working now.
-"""]]
diff --git a/doc/bugs/git-annex_add_should_repack_as_it_goes.mdwn b/doc/bugs/git-annex_add_should_repack_as_it_goes.mdwn
deleted file mode 100644
index e9c444857..000000000
--- a/doc/bugs/git-annex_add_should_repack_as_it_goes.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-What steps will reproduce the problem?
-
-1. Create a fresh git-annex repository
-2. Add a directory tree to it with about 300,000 files in it
-3. wait
-4. change the tree; attempt a git commit
-
-What is the expected output? What do you see instead?
-
-git commit hangs due to the large number of loose objects created during the git annex add. If git annex had stopped to repack the git repo a few times along the way, I think this might have been avoided.
-
-What version of git-annex are you using? On what operating system?
-
-git-annex version: 4.20130323
-local repository version: 3
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS
-
-Darwin pluto.local 12.3.0 Darwin Kernel Version 12.3.0: Sun Jan 6 22:37:10 PST 2013; root:xnu-2050.22.13~1/RELEASE_X86_64 x86_64
-(Mac OS 10.8.3)
-
-git version 1.8.2
-
-> Based on the benchmarks below, repacking even once does not speed things
-> up; repacking repeatedly as `git annex add` runs would slow things down.
->
-> It might be worth following up with the git developers why `git commit`
-> scans loose objects after it has already output the commit sha1sum.
->
-> Don't see any improvements git-annex can make. [[done]] --[[Joey]]
diff --git a/doc/bugs/git-annex_add_should_repack_as_it_goes/comment_1_dbcaa0be4cd764128fb7263a95f73a32._comment b/doc/bugs/git-annex_add_should_repack_as_it_goes/comment_1_dbcaa0be4cd764128fb7263a95f73a32._comment
deleted file mode 100644
index bdbeec108..000000000
--- a/doc/bugs/git-annex_add_should_repack_as_it_goes/comment_1_dbcaa0be4cd764128fb7263a95f73a32._comment
+++ /dev/null
@@ -1,22 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-04-05T02:31:08Z"
- content="""
-I created 300,000 files and added them. I found the following main cost centers:
-
-* Checksumming all those files has overhead. Can be avoided by using `--backend=WORM`
-* git-annex runs `git add` after every 10k files it processes. As the index file grows in size, `git add` gets slower (git has to rewrite the index file each time; which really needs to be improved on the git side in order for git to scale better to lots of files). Can be avoided by setting `annex.queuesize` to a larger value. If you have enough memory, git-annex can buffer all 300,000 files and only run `git add` once.
-* At the end of `git annex add`, it has to stage location logs for all files. This takes a few minutes; it probably on a par with the overhead of running `git add` once with an equal number of files.
-
-After `git annex add`, I ran `git commit -m add`. This commit took only 11 minutes. (5 year old netbook with a SSD.) That may seem like a long time, but the (un-optimised) `git annex add` took 4 hours or so.
-
-In that commit, I saw these cost centers:
-
-* The `pre-commit` hooks runs `git annex pre-commit`, which scans all 300,000 symlinks to make sure they don't need fixing. That took around 5 seconds. Can be disabled if you don't mind manually running `git annex fix` when moving files.
-* Calculating the commit took a while.
-* `git commit` did process all the loose object files. It did not create a pack, and I am not sure why it needed to look at them, especially since it had already printed the sha of the commit, and so had already created all the objects it needed to at that point.
-
-Next I will try again, and first run `git gc` before `git commit` ....
-"""]]
diff --git a/doc/bugs/git-annex_add_should_repack_as_it_goes/comment_2_6a27551c4fb7f62ed9f627134c755d01._comment b/doc/bugs/git-annex_add_should_repack_as_it_goes/comment_2_6a27551c4fb7f62ed9f627134c755d01._comment
deleted file mode 100644
index 6f2207a6a..000000000
--- a/doc/bugs/git-annex_add_should_repack_as_it_goes/comment_2_6a27551c4fb7f62ed9f627134c755d01._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 2"
- date="2013-04-05T06:33:54Z"
- content="""
-`git repack` took 18 minutes. However, it actually only packed the objects for the commit `git annex add` makes to the git-annex branch. Objects for the staged symlinks are left loose, presumably because no commit refers to them.
-
-Unsurprisingly, then, `git commit` still took as long as before.
-
-I then ran `git repack` again. It packed all the loose objects this time. After this, `git commit` only takes 11 seconds. If I remove the `pre-commit` hook, it drops to a respectable 5 seconds.
-
-
-"""]]
diff --git a/doc/bugs/git-annex_add_should_repack_as_it_goes/comment_3_ff8b589fbcf25c98abd1c58830074650._comment b/doc/bugs/git-annex_add_should_repack_as_it_goes/comment_3_ff8b589fbcf25c98abd1c58830074650._comment
deleted file mode 100644
index e60460443..000000000
--- a/doc/bugs/git-annex_add_should_repack_as_it_goes/comment_3_ff8b589fbcf25c98abd1c58830074650._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-04-06T06:32:56Z"
- content="""
-More testing shows that only the first git commit is slow. A second commit will be fast whether or not `git-repack` has been run in between.
-"""]]
diff --git a/doc/bugs/git-annex_annex_repo_not_found.mdwn b/doc/bugs/git-annex_annex_repo_not_found.mdwn
new file mode 100644
index 000000000..1a2998f05
--- /dev/null
+++ b/doc/bugs/git-annex_annex_repo_not_found.mdwn
@@ -0,0 +1,23 @@
+### Please describe the problem.
+
+The git-annex annex repo at <https://downloads.kitenet.net/.git/> is not available. This is the address mentioned at <http://git-annex.branchable.com/publicrepos/>.
+
+### What steps will reproduce the problem?
+
+ $ git clone https://downloads.kitenet.net/.git/
+ Cloning into 'downloads.kitenet.net'...
+ fatal: repository 'https://downloads.kitenet.net/.git/' not found
+
+### Please provide any additional information below.
+
+Have tried various combinations of the URL, but nothing works. It was like this a week ago too, but I didn't report it because I thought it was a temporary error due to some server reconfiguration or something.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/git-annex_assistant_not_working_with_nested_git_repos.mdwn b/doc/bugs/git-annex_assistant_not_working_with_nested_git_repos.mdwn
new file mode 100644
index 000000000..af9a4a1e5
--- /dev/null
+++ b/doc/bugs/git-annex_assistant_not_working_with_nested_git_repos.mdwn
@@ -0,0 +1,22 @@
+### Please describe the problem.
+When using git-annex in indirect mode (or even in direct mode I think, although this is not to be very reliable in this context), git repos inside a git-annex are ignored. This is due to the fact that git is ignoring nested .git folders, and then, we can safely work with git-annex and nested git repos without conflicts.
+
+Using a tool such as my-repos, one can then sync its entire home directory, containing folders and git repos, syncing the normal folders thanks to git-annex, and storing the git repos metadata for easy cloning using my-repos.
+
+However, when using the git-annex assistant (or the daemon to have automatic background sync), this is no longer the case.
+
+After discussion on IRC, we thought this could be due to the fact that files are copied sequentially and that the .git folder is not yet present when it starts copying. However, disabling the daemon, copying the files and reenabling it then leads to the same behaviour.
+
+Thanks!
+
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex-bin on AUR.
+
+> Many people have reported this as a bug, see
+> <http://git-annex.branchable.com/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X/>
+>
+> But git simply does not allow
+> storing .git in .git. With good reason IMHO. So this is a duplicate
+> bug report, and I can't fix it. [[done]]. --[[Joey]]
diff --git a/doc/bugs/git-annex_auto_upgrade_is_redundant.mdwn b/doc/bugs/git-annex_auto_upgrade_is_redundant.mdwn
new file mode 100644
index 000000000..582a8edee
--- /dev/null
+++ b/doc/bugs/git-annex_auto_upgrade_is_redundant.mdwn
@@ -0,0 +1,34 @@
+### Please describe the problem.
+
+Hi,
+
+On OSX the web-app keeps notifying me of an upgrade, I choose to run it but nothing seems to happen.
+
+The debug logs show that the upgrade is skipped as it's redundant.
+
+### What steps will reproduce the problem?
+
+Have upgrades set to notify.
+
+### What version of git-annex are you using? On what operating system?
+
+Current.
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+[2014-04-25 08:26:30 BST] Upgrader: An upgrade of git-annex is available. (version 5.20140421)
+[2014-04-25 08:27:02 BST] main: Skipping redundant upgrade
+
+# End of transcript or log.
+"""]]
+
+[[!meta title="upgrade loop when info file contains newer version than distributed version of git-annex"]]
+
+[[!tag confirmed]]
+
+> [[fixed|done]]; the release process now uses versions from build-version
+> files that are created by the autobuilders, so should always be accurate.
+> --[[Joey]]
diff --git a/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_1_67cdbedc70695d1e4be81e59ab9b87bd._comment b/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_1_67cdbedc70695d1e4be81e59ab9b87bd._comment
new file mode 100644
index 000000000..be27aa0d9
--- /dev/null
+++ b/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_1_67cdbedc70695d1e4be81e59ab9b87bd._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnXybLxkPMYpP3yw4b_I6IdC3cKTD-xEdU"
+ nickname="Matt"
+ subject="comment 1"
+ date="2014-04-25T07:36:09Z"
+ content="""
+The upgrade notifications seem to appear when switching between repositories in the web-app - are repositories treated separately? Or perhaps notifications sent per repo?
+
+"""]]
diff --git a/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_2_3a8041ce622b9288261fab57ecb87c28._comment b/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_2_3a8041ce622b9288261fab57ecb87c28._comment
new file mode 100644
index 000000000..1b4c0505d
--- /dev/null
+++ b/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_2_3a8041ce622b9288261fab57ecb87c28._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="72.0.72.144"
+ subject="comment 2"
+ date="2014-04-25T13:25:43Z"
+ content="""
+i think this problem was quickly mentionned in [[devblog/day_157__upgrade_checking]], can you provide a full debug log?
+"""]]
diff --git a/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_3_2597b2008557b80f4b71630c5c4a4241._comment b/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_3_2597b2008557b80f4b71630c5c4a4241._comment
new file mode 100644
index 000000000..22c8986b7
--- /dev/null
+++ b/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_3_2597b2008557b80f4b71630c5c4a4241._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnXybLxkPMYpP3yw4b_I6IdC3cKTD-xEdU"
+ nickname="Matt"
+ subject="comment 3"
+ date="2014-04-26T20:26:35Z"
+ content="""
+I'm pretty sure that was the sum total of the log (even with debug on). Only the brevity of it makes me doubt myself.
+"""]]
diff --git a/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_4_5dc46103994f064f5b9e120a16317dbd._comment b/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_4_5dc46103994f064f5b9e120a16317dbd._comment
new file mode 100644
index 000000000..7bd1ec883
--- /dev/null
+++ b/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_4_5dc46103994f064f5b9e120a16317dbd._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.114"
+ subject="comment 4"
+ date="2014-04-27T00:02:41Z"
+ content="""
+What version of git-annex do you have running?
+
+I suspect that if you look around, you will find you have a git-annex-5.20140421 directory in either your home directory or next to where you installed the DMG.
+"""]]
diff --git a/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_5_e26cf6fa6358c8d53c0b16206d0d0ca6._comment b/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_5_e26cf6fa6358c8d53c0b16206d0d0ca6._comment
new file mode 100644
index 000000000..65c6b05c6
--- /dev/null
+++ b/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_5_e26cf6fa6358c8d53c0b16206d0d0ca6._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnXybLxkPMYpP3yw4b_I6IdC3cKTD-xEdU"
+ nickname="Matt"
+ subject="comment 5"
+ date="2014-04-27T11:10:49Z"
+ content="""
+Hi,
+
+Yes there is a git-annex.app.5.20140421 directory in $HOME. And it looks as though I'm running git-annex.app.5.20140420 - even though I manually tried to upgrade by downloading
+
+https://downloads.kitenet.net/git-annex/OSX/current/10.9_Mavericks/git-annex.dmg
+
+Running `$HOME/git-annex.app.5.20140421/.../git-annex` gives me `5.20140420-ga25b8bb`. So the downloaded version even though labeled 5.20140421 contains 5.20140420.
+"""]]
diff --git a/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_6_c2c7c071fc5b1d3a55254d01a287c9f8._comment b/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_6_c2c7c071fc5b1d3a55254d01a287c9f8._comment
new file mode 100644
index 000000000..3092626e6
--- /dev/null
+++ b/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_6_c2c7c071fc5b1d3a55254d01a287c9f8._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnXybLxkPMYpP3yw4b_I6IdC3cKTD-xEdU"
+ nickname="Matt"
+ subject="comment 6"
+ date="2014-04-27T11:14:40Z"
+ content="""
+And I still think there is a slight bug in there somewhere. If due to packaging errors an upgrade doesn't apply and the logs are smart enough to notice it's redundant then there shouldn't be continued notifications of an available upgrade...
+"""]]
diff --git a/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_7_85e8a286d6b1ec5212614c36bf54addb._comment b/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_7_85e8a286d6b1ec5212614c36bf54addb._comment
new file mode 100644
index 000000000..3586aca7f
--- /dev/null
+++ b/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_7_85e8a286d6b1ec5212614c36bf54addb._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 7"
+ date="2014-05-16T17:54:38Z"
+ content="""
+I've temporarily worked around this by updating the .info file for OSX to have the right version number.
+
+I think that my release process generally manages to avoid version skew, but not always. And it's most likely to happen for OSX since that autobuilder only runs once per day.
+"""]]
diff --git a/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_8_2b2152844612d83f295a5de02f6ed3e7._comment b/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_8_2b2152844612d83f295a5de02f6ed3e7._comment
new file mode 100644
index 000000000..9dc7257fa
--- /dev/null
+++ b/doc/bugs/git-annex_auto_upgrade_is_redundant/comment_8_2b2152844612d83f295a5de02f6ed3e7._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="comment 8"
+ date="2014-05-16T18:00:18Z"
+ content="""
+So what do we as end-users do to get the latest version now? Re-download?
+"""]]
diff --git a/doc/bugs/git-annex_branch_corruption.mdwn b/doc/bugs/git-annex_branch_corruption.mdwn
deleted file mode 100644
index 9c864d85f..000000000
--- a/doc/bugs/git-annex_branch_corruption.mdwn
+++ /dev/null
@@ -1,95 +0,0 @@
-Below is a test case which shows a way that the git-annex branch
-can become corrupted and lose data, including location log records and
-uuid.log lines.
-
-At the end, a commit on the git-annex branch removes one of the 2 lines
-from the uuid.log; which should never happen.
-
-The actual problem occurs earlier, at the "push point". Here a repo is
-cloned from the main one, initialized (adding the last uuid.log line),
-and then pushed back to the main one. That push is a fast-forward, so is
-allowed to directly update the git-annex branch in the main repo:
-
- b884fe5..c497739 git-annex -> git-annex
-
-Now the git-annex branch has a change that is not reflected in
-`.git/annex/index`, so the next time a change is made, it's committed
-using the out of date index, which causes a reversion of the changes
-that were pushed to the branch.
-
----
-
-## Thoughts
-
-This is essentially the same reason why git blocks pushes to the checked-out
-branch of a non-bare repository.
-
-This problem only affects workflows that involve pushing. Pulling workflows
-do not directly update the local git-annex branch, so avoid the problem.
-
-And while bare repos are pushed to, they rarely have changes made directly
-to their git-annex branches, so while I think the same problem could
-happen with pushing to a bare repo, it's unlikely.
-
-None of which is to say this is not a bad bug that needs to be comprehensively
-fixed.
-
-Probably git-annex needs to record which ref of the git-annex branch
-corresponds to its index, and if the branch is at a different ref,
-merge it into the index.
-
-> And now that's [[done]]. I managed to do it with very little slowdown.
->
-> A side benefit is that users can now safely check out the git-annex
-> branch and commit changes to it, and git-annex will notice them.
-> Before, it was documented to ignore such changes.
-> --[[Joey]]
-
----
-
-## Workaround
-
-Users who want to prevent this bug from occuring when pushing to their
-non-bare repositories can install this script as `.git/hooks/update`
-
-<pre>
-#!/bin/sh
-if [ "$1" = refs/heads/git-annex ]; then
- exit 1
-fi
-</pre>
-
---[[Joey]]
-
----
-
-## Test Case
-<pre>
-#!/bin/sh
-mkdir annextest
-cd annextest
-
-git init dir1
-cd dir1
-git annex init
-touch foo
-echo hi > bar
-git annex add
-git commit -m add
-
-cd ..
-git clone dir1 dir2
-cd dir2
-git annex init otherdir
-git annex get
-# push point
-git push
-
-cd ..
-cd dir1
-echo "before"
-git show git-annex:uuid.log
-git annex drop foo --force
-echo "after"
-git show git-annex:uuid.log
-</pre>
diff --git a/doc/bugs/git-annex_branch_push_race.mdwn b/doc/bugs/git-annex_branch_push_race.mdwn
deleted file mode 100644
index 013ff70dd..000000000
--- a/doc/bugs/git-annex_branch_push_race.mdwn
+++ /dev/null
@@ -1,45 +0,0 @@
-The fix for the [[git-annex_branch_corruption]] bug is subject to a race.
-With that fix, git-annex does this when committing a change to the branch:
-
-1. lock the journal file (this avoids git-annex racing itself, FWIW)
-2. check what the head of the branch points to, to see if a newer branch
- has appeared
-3. if so, updates the index file from the branch
-4. stages changes in the index
-5. commits to the branch using the index file
-
-If a push to the branch comes in during 2-5, then
-[[git-annex_branch_corruption]] could still occur.
-
----
-
-## approach 1, using locking
-
-Add an update hook and a post-update hook. The update hook
-will use locking to ensure that no git-annex is currently running
-a commit, and block any git-annex's from starting one. It
-will background itself, and remain running during the push.
-The post-update hook will signal it to exit.
-
-I don't like this approach much, since it involves a daemon, two hooks,
-and lots of things to go wrong. And it blocks using git-annex during a
-push. This approach should be a last resort.
-
-## approach 2, lockless method
-
-After a commit is made to the branch, check to see if the parent of
-the commit is the same ref that the index file was last updated to. If it's
-not, then the race occurred.
-
-How to recover from the race? Well, just union merging the parent of the
-commit into the index file and re-committing should work, I think. When
-the race occurs, the commit reverts its parent's changes, and this will
-redo them.
-
-(Of course, this re-commit will also be subject to the race, and
-will need the same check for the race as the other commits. It won't loop
-forever, I hope.)
-
-> [[done]] and tested.
-
---[[Joey]]
diff --git a/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog.mdwn b/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog.mdwn
new file mode 100644
index 000000000..718170a98
--- /dev/null
+++ b/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog.mdwn
@@ -0,0 +1,74 @@
+### Please describe the problem.
+
+I have found a really weird commit in my git-annex branch:
+
+ * a59dd1c update (il y a 8 heures) <Antoine Beaupré>
+ * 57f887a update (recovery from race) (recovery from race) (recovery from race) [...]
+
+it repeats that for a looong time. about 12 000 times, to be more precise:
+
+[[!format sh """
+anarcat@marcos:video$ git show 57f887a | wc
+ 5 12686 88850
+"""]]
+
+### What steps will reproduce the problem?
+
+Now i have absolutely no idea how I managed that. I got through some pretty dark moments last night trying various levels of git-annex voodoo (including a duplicate repo which was rsync'd to a backup drive so the unique identifier applied to two distinct paths), so I have no idea exactly what happened here.
+
+### What version of git-annex are you using? On what operating system?
+
+debian jessie amd64 5.20140412
+
+### Please provide any additional information below.
+
+[[!format sh """
+anarcat@marcos:video$ git show 57f887a | tail -c 100
+very from race) (recovery from race) (recovery from race) (recovery from race) (recovery from race)
+anarcat@marcos:video$ git show 57f887a | head -c 512
+commit 57f887a9d766829d00832ad1ee23b2785212d055
+Author: Antoine Beaupré <anarcat@koumbit.org>
+Date: Sat Apr 19 01:48:18 2014 -0400
+
+ update (recovery from race) (recovery from race) (recovery from race) (recovery from race) (recovery from race) (recovery from race) (recovery from race) (recovery from race) (recovery from race) (recovery from race) (recovery from race) (recovery from race) (recovery from race) (recovery from race) (recovery from race) (recovery from race) (recovery from race) (recovery
+"""]]
+
+that's 80KB for only one commit here - maybe that should be cleaned up? --[[anarcat]]
+
+Ah! more information: it seems that 01:48 was the moment i shutdown the assistant in yet another panic...
+
+[[!format sh """
+anarcat@marcos:video$ ls -al .git/annex/daemon.log*
+-rw-r--r-- 1 anarcat anarcat 17075 avril 19 09:28 .git/annex/daemon.log
+-rw-r--r-- 1 anarcat anarcat 128367 avril 19 01:48 .git/annex/daemon.log.1
+"""]]
+
+an extract from that second logfile:
+
+[[!format sh """
+19/Apr/2014:01:31:38 -0400 [Error#yesod-core] unknown response from git cat-file ("9a73bf01-ed01-450d-a0ab-f20fff47ed32 encryption=none name=stephc rsyncurl=192.168.0.104:video/ type=rsync timestamp=1397865844.925354s","refs/heads/git-annex:remote.log") @(yesod-core-1.2.3:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:471:5)
+19/Apr/2014:01:31:50 -0400 [Error#yesod-core] unknown response from git cat-file ("fe428a7a-25a2-4c2e-b01f-315c490cbe45 encryption=none name=myrsync rsyncurl=/home/anarcat/video/ type=rsync timestamp=1397868063.038898s","refs/heads/git-annex:remote.log") @(yesod-core-1.2.3:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:471:5)
+19/Apr/2014:01:31:57 -0400 [Error#yesod-core] unknown response from git cat-file ("","refs/heads/git-annex:remote.log") @(yesod-core-1.2.3:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:471:5)
+[2014-04-19 01:32:03 EDT] TransferScanner: Syncing with test, mnt
+Depuis /mnt/video
+ * [nouvelle branche] synced/git-annex -> test/synced/git-annex
+ * [nouvelle branche] synced/master -> test/synced/master
+fatal: 'mnt' does not appear to be a git repository
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+Already up-to-date.
+[2014-04-19 01:32:21 EDT] main: warning git-annex has been shut down
+
+(Recording state in git...)
+(Recording state in git...)
+(Recording state in git...)
+(Recording state in git...)
+"""]]
+
+the last line repeats about 4000 times.
+
+i would love to paste the daemon.log.1 file, but it seems like it containts encryption credentials... which i have no idea how to get rid of or change.
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_1_b83888a98075125dd043f323c99da03b._comment b/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_1_b83888a98075125dd043f323c99da03b._comment
new file mode 100644
index 000000000..75bfd7368
--- /dev/null
+++ b/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_1_b83888a98075125dd043f323c99da03b._comment
@@ -0,0 +1,25 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 1"
+ date="2014-04-20T17:11:02Z"
+ content="""
+Is there one commit with this long message, or 12 thousand commits each adding another (recovery from race) to the pyramid?
+
+<pre>
+ - Also safely handles a race that can occur if a change is being pushed
+ - into the branch at the same time. When the race happens, the commit will
+ - be made on top of the newly pushed change, but without the index file
+ - being updated to include it. The result is that the newly pushed
+ - change is reverted. This race is detected and another commit made
+ - to fix it.
+</pre>
+
+If there is only one message, then it must have tried 12k times to commit to the git-annex branch and each time something else pushed or commited to the git-annex branch and overwrote its commit. This seems statistically unlikely. (Also there's locking to prevent multiple local git-annex processes from committing at the same time.)
+
+There have been a few other unexplained reports of this race detection code repeatedly triggering.
+
+> \"shutdown the assistant in yet another panic\"
+
+This implies some hasty, perhaps unusual shutdown method, and some unusual situation. I think you could tell me more about what was going on.
+"""]]
diff --git a/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_2_4a7d824b6e75693cf47f6efbf2c99e2e._comment b/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_2_4a7d824b6e75693cf47f6efbf2c99e2e._comment
new file mode 100644
index 000000000..0eeabf070
--- /dev/null
+++ b/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_2_4a7d824b6e75693cf47f6efbf2c99e2e._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="72.0.72.144"
+ subject="comment 2"
+ date="2014-04-20T23:58:00Z"
+ content="""
+this was a single commit.
+
+i am not sure i can extract much more information from my memory: details are hazy as i was working late on a problem that night... sorry!
+"""]]
diff --git a/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_3_cbbeaa691d102bd7d29f5e9bad9d6f53._comment b/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_3_cbbeaa691d102bd7d29f5e9bad9d6f53._comment
new file mode 100644
index 000000000..865140509
--- /dev/null
+++ b/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_3_cbbeaa691d102bd7d29f5e9bad9d6f53._comment
@@ -0,0 +1,32 @@
+[[!comment format=mdwn
+ username="Francois"
+ ip="2001:788:5:1:29c2:de49:9811:51c8"
+ subject="comment 3"
+ date="2014-08-15T20:45:38Z"
+ content="""
+I've been experiencing the exact same problem and searching for **recovery from race** lead me to this bug report. Thanks for reporting it!
+
+For a few months, a repo storing ~19'000 files (mostly immutable pictures) started to launch memory hungry \"git log\" processes. For example:
+
+ 4797 francois 20 0 8118296 7.719g 2032 D 22.3 50.2 0:11.61 git
+
+ 4797 pts/1 D+ 0:12 git --git-dir=~/Pictures/.git --work-tree=~/Pictures -c core.bare=false log refs/heads/git-annex..52e44b967ad5d316d832562be02c5555c1f6d2a4 --oneline -n1
+
+Thanks to the hints found in this report, I was able to find many huge commit messages such as this one:
+
+ $ git show 6357b208
+ commit 6357b2081e7c85dfe1ccc10824b75f3e212e6386
+ Author: Francois Deppierraz <francois@ctrlaltdel.ch>
+ Date: Sat Jun 14 10:38:46 2014 +0200
+
+ update (recovery from race) (recovery from race) (recovery from race) (recovery from race) (recovery from race) [...]
+
+ $ git show 6357b208 | wc
+ 5 444026 3108236
+
+There were probably many new files added on Jun 14th and looking for a way to increase to sync speed, especially to a S3-like remote, I found the solution on this wiki for [multiple concurrent transfers](https://git-annex.branchable.com/forum/Feature_request:_Multiple_concurrent_transfers/).
+
+This looks like a likely culprit for generating race conditions. What do you think?
+
+ git-annex version: 5.20140412ubuntu1
+"""]]
diff --git a/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_4_094191b806ac76b2aef325733fe37136._comment b/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_4_094191b806ac76b2aef325733fe37136._comment
new file mode 100644
index 000000000..e80d66b5a
--- /dev/null
+++ b/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_4_094191b806ac76b2aef325733fe37136._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Francois"
+ ip="2001:788:5:1:29c2:de49:9811:51c8"
+ subject="comment 4"
+ date="2014-08-15T20:51:12Z"
+ content="""
+Bonus question: is there any way to bring this repo back into a working state (for instance with git-filter-branch?) ?
+"""]]
diff --git a/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_5_c97926b15ba320f57a6441f9844cb139._comment b/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_5_c97926b15ba320f57a6441f9844cb139._comment
new file mode 100644
index 000000000..62903f1f1
--- /dev/null
+++ b/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_5_c97926b15ba320f57a6441f9844cb139._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 5"""
+ date="2015-02-09T21:10:58Z"
+ content="""
+I guess the thing to do in this case is to run `git annex forget`
+"""]]
diff --git a/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_6_3b70a60ef1c47871a3933176eac38174._comment b/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_6_3b70a60ef1c47871a3933176eac38174._comment
new file mode 100644
index 000000000..25e6059f1
--- /dev/null
+++ b/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_6_3b70a60ef1c47871a3933176eac38174._comment
@@ -0,0 +1,40 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 6"""
+ date="2015-02-09T21:59:31Z"
+ content="""
+[[forum/repair_stuck_on_ls-tree_command]] is another case of that, and I got ahold of
+that repository for analysis.
+
+In that case, there was indeed an inverse pyramid effect where each commit
+added one more " (recovery from race)" to its parent commit.
+
+The code can clearly loop
+if it keeps detecting a race and somehow fails to recover from it. Leading
+to a whole stack of commits with progressively longer messages.
+I don't see any way to get just one commit with a long message, which
+comment #1 seems to say happened.
+
+Apparently loops for a while and then succeeds in recovering from
+the race, since it then stops looping.
+
+I have added additional debug info to the commit message, in hopes of detecting
+what might be going wrong that causes it to loop.
+
+Seems to me there are two possibilities.
+
+One is that something else is continually changing the git-annex
+branch in a way that keeps triggering the race. If so, it might make
+sense for git-annex to do a brief random sleep (a few hundredths of a
+second) before recovering, to let whatever it is quiet down. I've done so.
+
+The other is some kind of bug where it detects a race when none
+occurred. Perhaps it's misparsing the commit or git cat-file is failing
+to output it, and so it's not finding the expected parent refs, for example.
+But in that case, why would it detect a race for many commits
+in a row, and then eventually not detect a race anymore?
+
+Also, I've made these messages no longer stack up even if it does go into a
+loop, which will at least help with the object size bloat, though not with the
+number of commits bloat.
+"""]]
diff --git a/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_7_fc56ec87725c7427794b70ee2ba2822a._comment b/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_7_fc56ec87725c7427794b70ee2ba2822a._comment
new file mode 100644
index 000000000..cd7510140
--- /dev/null
+++ b/doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_7_fc56ec87725c7427794b70ee2ba2822a._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 7"""
+ date="2015-02-09T22:44:50Z"
+ content="""
+The only other thing I can think to do about this is to make git-annex block
+direct pushes to the git-annex branch, by setting up a pre-receive hook.
+
+Then, there should be no way for the race to occur
+(except for a locking failure, or a pull into the branch?),
+and git-annex wouldn't need to check for it
+"""]]
diff --git a/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed.mdwn b/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed.mdwn
new file mode 100644
index 000000000..2e86f488d
--- /dev/null
+++ b/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed.mdwn
@@ -0,0 +1,47 @@
+### Please describe the problem.
+
+umask is 022 on both hosts
+If one does ls -lL on source repo, the files are shown 644.
+
+Now, "git annex get" from a clone done over ssh generally preserves 644 ... except if the transfer (rsync) is interrupted, and then resumed.
+In fact, looks like the temp files in .git/annex/tmp have the og+r bits cleared during the resumed transfer.
+
+So this is inconsistent: I don't see why permissions should be different, depending whether or not there was an interruption in the transfer.
+Plus, og+r permissions can actually be important for setups like serving contents using Samba.
+
+### What steps will reproduce the problem?
+
+ cd dir1
+ git init
+ git annex init
+ touch a
+ truncate -s 10G b
+ git annex add .
+ git commit -m 'new'
+
+ git clone localhost:/path/to/dir1 dir2
+ cd dir2
+ git annex get
+ ctrl^c
+ git annex get
+ ls -lL
+ ... see different perms
+
+
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex version: 5.20140411-gda795e0
+Linux
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> [[fixed|done]]; brought back -p on non-crippled file systems --[[Joey]]
diff --git a/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_1_0fc5c7251ead7a0fbbcd357a8bc53f05._comment b/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_1_0fc5c7251ead7a0fbbcd357a8bc53f05._comment
new file mode 100644
index 000000000..48069eebd
--- /dev/null
+++ b/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_1_0fc5c7251ead7a0fbbcd357a8bc53f05._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 1"
+ date="2014-04-17T18:32:40Z"
+ content="""
+(I think you forgot to mention you were using direct mode.)
+
+Like git, git-annex does not preserve file permissions. If you want to ensure that a group or everyone can read file in a git repository, you have to use the core.sharedRepository git configuration. git-annex will also honor that.
+
+git-annex will try to preserve the execute bit, since git does support that single permission bit. But even this cannot be guaranteed. (Eg, when using special remotes which have no concept of file permissions.)
+
+Interrupting rsync and resuming it does cause rsync to not transfer through permissions. This is rsync's normal behavior when not using -p. git-annex used to use rsync -p to preserve whatever file permissions there were. However, <http://bugs.debian.org/700282>, and then [[!commit f92eaf631509d02491c1b0ebfbb15145f80df797]].
+
+It looks like I could preserve the execute bit across interrupt and resume by using rsync's --executability option.
+
+Or, I could use the -p when git-annex is running in a non-crippled filesystem.
+"""]]
diff --git a/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_2_992c1a51d0300bd676cb431688efa524._comment b/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_2_992c1a51d0300bd676cb431688efa524._comment
new file mode 100644
index 000000000..f32a4a70f
--- /dev/null
+++ b/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_2_992c1a51d0300bd676cb431688efa524._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawln3ckqKx0x_xDZMYwa9Q1bn4I06oWjkog"
+ nickname="Michael"
+ subject="comment 2"
+ date="2014-04-17T21:19:10Z"
+ content="""
+Hi Joey,
+
+In fact, this is indirect mode on Linux, ext4.
+I'm less worried about preserving +x mode (though I can see why it would be useful). Here I'm referring to plain \"group\" and \"other\" read permissions being cleared.
+
+And I just did a test with a standalone rsync, using rsync -P localhost:file file2 and interrupting it, the partial (and final after resume) file2 still is 644 (and not 600 like in git-annex case).
+"""]]
diff --git a/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_3_3001a11839eff6a4c3a9f12096b29704._comment b/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_3_3001a11839eff6a4c3a9f12096b29704._comment
new file mode 100644
index 000000000..b365baa75
--- /dev/null
+++ b/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_3_3001a11839eff6a4c3a9f12096b29704._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawln3ckqKx0x_xDZMYwa9Q1bn4I06oWjkog"
+ nickname="Michael"
+ subject="comment 3"
+ date="2014-04-17T21:19:59Z"
+ content="""
+I think -p on non-crippled does make sense, and -E does too for crippled.
+"""]]
diff --git a/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_4_a13abb45b9a94d275177641db0538765._comment b/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_4_a13abb45b9a94d275177641db0538765._comment
new file mode 100644
index 000000000..919adc2e7
--- /dev/null
+++ b/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_4_a13abb45b9a94d275177641db0538765._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawln3ckqKx0x_xDZMYwa9Q1bn4I06oWjkog"
+ nickname="Michael"
+ subject="comment 4"
+ date="2014-04-17T21:22:16Z"
+ content="""
+s/and not 600/and not 400/
+
+In my ideal case I'd like to see indirect git-annex to set files to 444 (if umask in destination doesn't prevent that otherwise).
+"""]]
diff --git a/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_5_faac2d48950307ce245f0da501ace730._comment b/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_5_faac2d48950307ce245f0da501ace730._comment
new file mode 100644
index 000000000..57db29c8a
--- /dev/null
+++ b/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_5_faac2d48950307ce245f0da501ace730._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawln3ckqKx0x_xDZMYwa9Q1bn4I06oWjkog"
+ nickname="Michael"
+ subject="comment 5"
+ date="2014-04-17T21:32:35Z"
+ content="""
+core.sharedRepository does fix things here. Thanks Joey!
+I'm all set for my use case.
+"""]]
diff --git a/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_6_7df03eee7d5dc5a7ed0c9abef5053788._comment b/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_6_7df03eee7d5dc5a7ed0c9abef5053788._comment
new file mode 100644
index 000000000..bfed27fb4
--- /dev/null
+++ b/doc/bugs/git-annex_clears_files__39___og+r_permissions_when_rsync_transfer_is_interrupted_and_resumed/comment_6_7df03eee7d5dc5a7ed0c9abef5053788._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawln3ckqKx0x_xDZMYwa9Q1bn4I06oWjkog"
+ nickname="Michael"
+ subject="comment 6"
+ date="2014-04-18T18:32:22Z"
+ content="""
+One issue (bug) still remains: git annex does respect
+
+sharedRepository = world
+
+but not
+
+sharedRepository = 0644
+
+In the later case, with indirect mode, files end up with 400 permissions.
+
+"""]]
diff --git a/doc/bugs/git-annex_died_of_signal_11_when_syncing_content.mdwn b/doc/bugs/git-annex_died_of_signal_11_when_syncing_content.mdwn
new file mode 100644
index 000000000..d0781d281
--- /dev/null
+++ b/doc/bugs/git-annex_died_of_signal_11_when_syncing_content.mdwn
@@ -0,0 +1,30 @@
+### Please describe the problem.
+
+git-annex dies of signal 11 when syncing content with Box.
+
+I noticed that the assistant stopped syncing after a few files, so I tried to sync manually through the terminal and saw the error.
+
+### What steps will reproduce the problem?
+
+ $ git annex sync box.com --content
+ commit ok
+ copy myfile1 (checking box.com...) (to box.com...)
+ ok
+ copy myfile2 (checking box.com...) (to box.com...)
+ ok
+ copy myfile3 (checking box.com...) (to box.com...)
+ ok
+ copy myfile4 (checking box.com...) (to box.com...)
+ ok
+ copy myfile5 (checking box.com...) error: git-annex died of signal 11
+
+The number of files that are copied correctly is quite random, some times it syncs 200 files and other times only 2 or 3.
+
+
+### What version of git-annex are you using? On what operating system?
+
+5.20141125 on Debian Sid (everything install from official packages)
+
+### Please provide any additional information below.
+
+I don't know how to get more details of the problem, I haven't manage to get a more precise error activating logs or verbose mode, if there's anything I can do to debug the problem I'll be more than willing.
diff --git a/doc/bugs/git-annex_died_of_signal_11_when_syncing_content/comment_1_e982f985e5ca57454725e9e9a482e30c._comment b/doc/bugs/git-annex_died_of_signal_11_when_syncing_content/comment_1_e982f985e5ca57454725e9e9a482e30c._comment
new file mode 100644
index 000000000..f81f1d732
--- /dev/null
+++ b/doc/bugs/git-annex_died_of_signal_11_when_syncing_content/comment_1_e982f985e5ca57454725e9e9a482e30c._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-04T18:38:09Z"
+ content="""
+Well, a signal 11 can be caused by several different things, including
+some messed up pointer stuff in a C library, or just bad memory on your
+computer. I think a memory test would be a good first step.
+
+If the memory checks clean, running git-annex in gdb and getting a stack
+trace after a crash may help.
+"""]]
diff --git a/doc/bugs/git-annex_direct_fails_on_repositories_with_a_partial_set_of_files.mdwn b/doc/bugs/git-annex_direct_fails_on_repositories_with_a_partial_set_of_files.mdwn
deleted file mode 100644
index de88b0246..000000000
--- a/doc/bugs/git-annex_direct_fails_on_repositories_with_a_partial_set_of_files.mdwn
+++ /dev/null
@@ -1,29 +0,0 @@
-## What steps will reproduce the problem?
-
-Running the following in an annex with an archive directory with all the files dropped and located offsite
-
- git annex direct
-
-It seems that if not all the files are in the annex, then the direct mode files.
-
-## What is the expected output? What do you see instead?
-
-The expectation is that either direct mode reverts its changes if it fails instead of
-
- url: createLink: does not exist (No such file or directory)
- failed
- git-annex: direct: 1 failed
-
-It leaves the annex in the indirect mode, but there are a bunch of .map files lying around in git-annex's control directory.
-
-## What version of git-annex are you using? On what operating system?
-
-Running 3.20130102 on OSX
-
-## Please provide any additional information below.
-
-> More specifically, git annex direct fails, on OSX only, when there are two
-> files that both have the same content. Apparently OSX doesn't allow
-> hard linking two symbolic links together. There was no harm in it doing that
-> otherwise, but then again no reason for it to do so, so I've put in a fix.
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx.mdwn b/doc/bugs/git-annex_directory_hashing_problems_on_osx.mdwn
deleted file mode 100644
index db6a35293..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx.mdwn
+++ /dev/null
@@ -1,100 +0,0 @@
-Currently the hashed directories in .git-annex allow for upper and lower case directory names... on linux (or any case sensitive filesystem) the directory names such as 'Gg' and 'GG' are different and unique. However on systems like OSX (and probably windows if it is ever supported) the directory names 'Gg' is the same as 'GG'
-
-In one of the annex'd repos that I have this has occured...
-
-<pre>
-$ git add -i
- staged unstaged path
- 1: unchanged +1/-1 .git-annex/GM/GV/WORM-s183630166-m1301072171--somefile.log
- 2: unchanged +1/-1 .git-annex/Gm/GV/WORM-s183630166-m1301072171--somefile.log
-</pre>
-
-
-this has somewhat confused git when it tries to stage/merge files, I didn't notice this at first, but it is definately a problem for someone using case insensitive filesystems like the default OSX HFS+ formats or vfat/fat32.
-
-> I feel a bit stupid to not have considered case-insensative filesystems.
-> They are just so far from where I have lived for 20 years that it's hard
-> to keep them in mind.
->
-> I guess that
-> [[git-annex_has_issues_with_git_when_staging__47__commiting_logs]] is
-> somehow a consequence (or cause?) of this, but I don't quite understand
-> how this is causing git to fail to stage files, or stage the same file
-> twice under different capitalizations. git-annex always will run git add
-> on the path with the "correct" capitalization. So unless something else
-> has added the path with the other capitalization (perhaps git add
-> .git-annex manually?) I don't understand how you get to this state.
-> --[[Joey]]
-
->> I think I got myself into this situation when I copied some files over from a HFS+ partition to a GPFS network share (which is pretty posix compliant) over samba. It probably is related to the [[git-annex_has_issues_with_git_when_staging__47__commiting_logs]]. I thought they were unique enough to have two bug reports logged as one is a git behavioural thing and the other is git-annex specific.
-
->>> If you copied `.git/` over, perhaps you got a git repo without
->>> core.ignorecase set right for the filesystem it landed on?
-
->>>> I usually git clone or do a fresh repository and pull things in, I was also unaware of this ignorecase setting as well.
-
->>>
->>> Something like this might reproduce it:
-
-<pre>
-# mkdir test; cd test; git init
-# git config core.ignorecase false
-# mkdir Foo
-# touch Foo/bar
-# git add Foo/bar
-# git add foo/bar
-# git add fOo/bar
-# git status
-# touch foo/other
-# git add fOo/other
-# git status
-</pre>
-
->>>> And then either git commit or git clone would probably get confused
->>>> if it thought 3 distinct files had been committed.
->>>> --[[Joey]]
-
->>>>> Doing the above test on a HFS+ partition yields this
-
-<pre>
-## with ignorecase=false
-commit bb024c6fd7482b2d10f60ae899cb7a949aca1ad8
-Author: Jimmy Tang <jtang@exia>
-Date: Sun Mar 27 18:40:24 2011 +0100
-
- commit
-
-diff --git a/Foo/bar b/Foo/bar
-new file mode 100644
-index 0000000..e69de29
-diff --git a/fOo/bar b/fOo/bar
-new file mode 100644
-index 0000000..e69de29
-diff --git a/fOo/other b/fOo/other
-new file mode 100644
-index 0000000..e69de29
-diff --git a/foo/bar b/foo/bar
-new file mode 100644
-index 0000000..e69de29
-</pre>
-
->>>>> and without changing ignorecase
-
-<pre>
-commit 909a089158ffb98f8e91f98905e2bfdc7234666f
-Author: Jimmy Tang <jtang@exia>
-Date: Sun Mar 27 18:46:57 2011 +0100
-
- commit
-
-diff --git a/Foo/bar b/Foo/bar
-new file mode 100644
-index 0000000..e69de29
-diff --git a/Foo/other b/Foo/other
-new file mode 100644
-index 0000000..e69de29
-</pre>
-
-> Closing this bug, as it seems I have dealt with it adequately now.
-> [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_10_f3594de3ba2ab17771a4b116031511bb._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_10_f3594de3ba2ab17771a4b116031511bb._comment
deleted file mode 100644
index c3e6b5e59..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_10_f3594de3ba2ab17771a4b116031511bb._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 10"
- date="2011-04-01T16:11:52Z"
- content="""
-No, I don't need a copy of your repo now.
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_11_97de7252bf5d2a4f1381f4b2b4e24ef8._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_11_97de7252bf5d2a4f1381f4b2b4e24ef8._comment
deleted file mode 100644
index db605f965..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_11_97de7252bf5d2a4f1381f4b2b4e24ef8._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 11"
- date="2011-04-02T17:53:58Z"
- content="""
-I have pushed out a preliminary fix. The old mixed-case directories will be left where they are, and still read from by git-annex. New data will be written to new, lower-case directories. I think that once git stops seeing changes being made
-to mixed-case, colliding directories, the bugs you ran into won't manifest any more.
-
-You will need to find a way to get your git repository out of the state where it complains about uncommitted files (and won't let you commit them). I have not found a reliable way to do that; git reset --hard worked in one case but not in another. May need to clone a fresh git repository.
-
-Let me know how it works out.
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_12_f1c53c3058a587185e7a78d84987539d._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_12_f1c53c3058a587185e7a78d84987539d._comment
deleted file mode 100644
index 5f9a0ae27..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_12_f1c53c3058a587185e7a78d84987539d._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 12"
- date="2011-04-02T17:58:24Z"
- content="""
-Also, you can delete `.git-annex/??` if you want to, then running `git annex fsck --fast` in each of your clones would regenerate the data using only the lower-case hash directories.
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_13_4f56aea35effe5c10ef37d7ad7adb48c._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_13_4f56aea35effe5c10ef37d7ad7adb48c._comment
deleted file mode 100644
index b4a5a72d0..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_13_4f56aea35effe5c10ef37d7ad7adb48c._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 13"
- date="2011-04-03T07:43:37Z"
- content="""
-Ok, thanks for the fix. It seems the fix isn't too reliable with my repos, I get different numbers of \"** No known copies of...\" in the various cloned repos that I have. After all the \"messing\" that I have done to my repos I think git-annex has gotten very confused. I will just leave things as they are and let git-annex slowly migrate over to the new format or re-clone from a linux source and see how things go. I will report back on this issue in abit after I use it more to see.
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_14_cc2a53c31332fe4b828ef1e72c2a4d49._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_14_cc2a53c31332fe4b828ef1e72c2a4d49._comment
deleted file mode 100644
index b92c3ab4a..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_14_cc2a53c31332fe4b828ef1e72c2a4d49._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 14"
- date="2011-04-03T08:24:17Z"
- content="""
-I meant to say in it wasn't reliable when I was following the instructions for \"Comment 12\". I did find that just doing a \"git annex copy -t externalusb .\" then a \"git annex drop .\" from the root of my cloned and \"none trusted\" annexed repos to be more reliable, it just means I temporarily need a load of space to get myself out of my earlier mess.
-
-On testing this bug fix, I found a minor behavioural issue with [[git annex copy -f REMOTE . doesn't work as expected]]
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_15_37f1d669c1fa53ee371f781c7bb820ae._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_15_37f1d669c1fa53ee371f781c7bb820ae._comment
deleted file mode 100644
index d722d546a..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_15_37f1d669c1fa53ee371f781c7bb820ae._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="gernot"
- ip="213.168.117.192"
- subject="comment 15"
- date="2011-04-03T15:41:00Z"
- content="""
-I also ran into problems on a case-insensitive HFS+ file system, it seems. I
-tried following the instructions in comment 12:
-
- 1. Remove everything in .git-annex besides uuid.log and trust.log
- 2. git annex fsck --fast
- 3. Commit
-
-However, I still see upper and lower case directories in .git-annex. Did I
-misunderstand that they should all be lower case now?
-
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_16_8a4ab1af59098f4950726cf53636c2b3._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_16_8a4ab1af59098f4950726cf53636c2b3._comment
deleted file mode 100644
index 97eab78c9..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_16_8a4ab1af59098f4950726cf53636c2b3._comment
+++ /dev/null
@@ -1,22 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 16"
- date="2011-04-03T16:02:33Z"
- content="""
-I think the correct steps should be, make a backup first :) then ...
-
-1. git pull # update your clone, and commit everything so you don't lose anything
-2. git annex fsck --fast # check the repo first, just in case
-3. rm -rf .git-annex/?? # remove the old metadata
-4. git annex fsck --fast # get git annex to regenerate it all
-5. push your changes out to your other repos, you will need to make sure git-annex is updated everywhere if there are remotes in your setup.
-
-I eventually migrated all of my own annex'd repos and I no longer have the old hashed directories but the new ones in the form
-
- .git/annex/aaa/bbb/foo.log
-
-I did lose some tracking information but not data (as far as I can see for now), but that was quickly fixed by pushing and pulling to my bare repo which tracks most of my data.
-
-I also found that it worked a bit more reliably for me on the copies of repos that were located on case sensitive filesystems, but I guess that was expected.
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_17_515d5c5fbf5bd0c188a4f1e936d913e2._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_17_515d5c5fbf5bd0c188a4f1e936d913e2._comment
deleted file mode 100644
index f7feac67c..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_17_515d5c5fbf5bd0c188a4f1e936d913e2._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 17"
- date="2011-04-03T16:53:51Z"
- content="""
-@gernot step 0 is to upgrade git-annex to current git, on all systems where you use it, in case that wasn't clear.
-
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_18_db64c91dd1322a0ab168190686db494f._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_18_db64c91dd1322a0ab168190686db494f._comment
deleted file mode 100644
index 550558ec1..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_18_db64c91dd1322a0ab168190686db494f._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="gernot"
- ip="213.168.117.192"
- subject="comment 18"
- date="2011-04-03T19:46:16Z"
- content="""
-Joey, sorry, I got it wrong. I thought upgrading git didn't help and you
-adjusted things in git-annex instead.
-
-Anyway, can I get around upgrading on all hosts by reformatting the drive to
-case-sensitive HFS+? Or will I have to upgrade git (currently version 1.7.2.5)
-eventually anyway?
-
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_19_ff555c271637af065203ca99c9eeaf89._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_19_ff555c271637af065203ca99c9eeaf89._comment
deleted file mode 100644
index 2676b3589..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_19_ff555c271637af065203ca99c9eeaf89._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 19"
- date="2011-04-03T19:53:44Z"
- content="""
-Git does not need to be upgraded. Git-annex needs to be upgraded to git rev 616e6f8a840ef4d99632d12a2e7ea15c3cfb1805 or newer, on all machines.
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_1_9a7b09de132097100c1a68ea7b846727._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_1_9a7b09de132097100c1a68ea7b846727._comment
deleted file mode 100644
index aa5e46ca2..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_1_9a7b09de132097100c1a68ea7b846727._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 1"
- date="2011-03-28T07:23:41Z"
- content="""
-One possible work around is to just create a loopback file system with a case sensitive filesystem. I think I might do that for anything that I really care about for now.
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_20_7e328b970169fffb8bce373d1522743b._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_20_7e328b970169fffb8bce373d1522743b._comment
deleted file mode 100644
index 8f0f5ef18..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_20_7e328b970169fffb8bce373d1522743b._comment
+++ /dev/null
@@ -1,19 +0,0 @@
-[[!comment format=mdwn
- username="ssqq"
- ip="208.70.196.4"
- subject="Still a problem on 0.20110523"
- date="2011-06-02T20:31:55Z"
- content="""
-Hi,
-
-(I'm new to git and git annex, so please forgive any mistakes I make...)
-
-My repo is messed up right now. The fact that I copied the repo with rsync -a back and forth from a case insensitive filesystem to a case sensitive one, probably didn't help.
-
-I believe the annexed files in .git/annex/objects/ are still using a mixed case directory hashing scheme. That's the problem I'm having. The symlinks point to the wrong case and are now broken. I don't think the latest versions of git-annex changed that (it only changed the hashing under .git-annex, right?).
-
-Even if I clean up my repo, I think I'm still going to have a problem because I have one repo on an OS X case insensitive filesystem and my other repos on case sensitive Linux filesystems. Potentially the directory name under .git/annex/objects will have a different case. Then the symlink might have a different case than my Linux FS. Does git-annex track changes in git by the contents of the symlink? In which case the case difference would show up as a change even though there is no change?
-
-Is it possible to change the directory hashing scheme under .git/annex/objects to use lowercase names?
-
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_21_98f632652b0db9131b0173d3572f4d62._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_21_98f632652b0db9131b0173d3572f4d62._comment
deleted file mode 100644
index 453a8be11..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_21_98f632652b0db9131b0173d3572f4d62._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 21"
- date="2011-06-10T16:46:03Z"
- content="""
-@seqq git-annex always uses the same case when creating and accessing the files pointed to by the symlinks. So it will not matter if it's used on a case-insensative, or case-insensative but preserving system like OSX.
-
-You need to fix up the cases of the files in .git/annex/objects to what it expects. I'm not sure what would be the best way to do that. The method described in [[walkthrough/recover_data_from_lost+found]] might work well.
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_22_52d41afd7fd0b71a4c8e84ab1b4df5bd._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_22_52d41afd7fd0b71a4c8e84ab1b4df5bd._comment
deleted file mode 100644
index 7fa1e7468..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_22_52d41afd7fd0b71a4c8e84ab1b4df5bd._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawltmUlf_zHb-hDkjLLYeUxyd81YVoIgZew"
- nickname="Jaen"
- subject="Still somewhat broken"
- date="2012-12-25T17:58:53Z"
- content="""
-I moved an external HDD formatted with NTFS from Mac (case-insensitive) to Linux (case sensitive), and half of the links are broken now... What can I do to fix this?
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_23_c2cd8a69c37539c0511bae02016180ca._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_23_c2cd8a69c37539c0511bae02016180ca._comment
deleted file mode 100644
index 8ec1abd89..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_23_c2cd8a69c37539c0511bae02016180ca._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawltmUlf_zHb-hDkjLLYeUxyd81YVoIgZew"
- nickname="Jaen"
- subject="comment 23"
- date="2012-12-25T20:21:15Z"
- content="""
-(to be clear, Mac put eg. hashes \"Gg\" and \"gg\" into the same directory, while Linux expects them to be in separate dirs)
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_2_174952fc3e3be12912e5fcfe78f2dd13._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_2_174952fc3e3be12912e5fcfe78f2dd13._comment
deleted file mode 100644
index 6e6e5dc6b..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_2_174952fc3e3be12912e5fcfe78f2dd13._comment
+++ /dev/null
@@ -1,185 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 2"
- date="2011-03-28T15:09:45Z"
- content="""
-I think I know how I got myself into this mess... I was on my mac workstation and I had just pulled in a change set from another repo on a linux workstation after I had a made a bunch of moves. here's a bit of a log of what happened...
-
-
-<pre>
-jtang@x00:~/sources $ git pull cports-devel master
-Warning: untrusted X11 forwarding setup failed: xauth key data not generated
-Warning: No xauth data; using fake authentication data for X11 forwarding.
-remote: Counting objects: 4195, done.
-remote: Compressing objects: 100% (1135/1135), done.
-remote: Total 2582 (delta 866), reused 2576 (delta 860)
-Receiving objects: 100% (2582/2582), 229.42 KiB | 111 KiB/s, done.
-Resolving deltas: 100% (866/866), completed with 9 local objects.
-From cports-devel:/home/people/jtang/sources
- * branch master -> FETCH_HEAD
-Updating 319df99..ab0a98c
-error: Your local changes to the following files would be overwritten by merge:
- .git-annex/09/5X/WORM-s361516678-m1301310614--l_fcompxe_intel64_2011.2.137.tgz.log
- .git-annex/43/2g/WORM-s19509673-m1301310496--l_fcompxe_2011.2.137_redist.tgz.log
- .git-annex/4J/qF/WORM-s18891115-m1301310934--w_flm_p_1.0.011_ia64.zip.log
- .git-annex/87/w1/WORM-s12212473-m1301310909--w_flm_p_1.0.011_ia32.zip.log
- .git-annex/99/Jq/WORM-s194345957-m1301310926--l_mkl_10.3.2.137_ia32.log
- .git-annex/99/kf/WORM-s9784531-m1301311680--l_ccompxe_2011.2.137_redist.log
- .git-annex/FF/f3/WORM-s93033394-m1301311706--l_gen_ipp_7.0.2.137.log
- .git-annex/MF/xZ/WORM-s515140733-m1301310936--l_cprof_p_11.1.075.log
- .git-annex/XW/X8/WORM-s355559731-m1301310797--l_mkl_10.3.2.137.log
- .git-annex/fJ/mZ/WORM-s1372886477-m1301313368--l_cproc_p_11.1.075.log
- .git-annex/j7/Q9/WORM-s44423202-m1301310622--l_cprof_p_11.1.075_redist.log
- .git-annex/k4/K7/WORM-s239539070-m1301310760--l_mkl_10.3.2.137_intel64.log
- .git-annex/kz/01/WORM-s279573314-m1301310783--l_cprof_p_11.1.075_ia32.log
- .git-annex/p6/Kq/WORM-s31199343-m1301311829--l_cproc_p_11.1.075_redist.log
- .git-annex/pz/J5/WORM-s626995277-m1301312301--l_ccompxe_ia32_2011.2.137.log
- .git-annex/v3/kX/WORM-s339693045-m1301310851--l_cprof_p_11.1.075_intel64.log
-Please, commit your changes or stash them before you can merge.
-error: Your local changes to the following files would be overwritten by merge:
- .git-annex/12/3W/WORM-s3058814-m1276699694--Botan-1.8.9.tgz.log
- .git-annex/1G/qV/WORM-s9122-m1251558854--Array-Compare-2.01.tar.gz.log
- .git-annex/3W/W5/WORM-s231523-m1270740744--DBD-Pg-2.17.1.tar.gz.log
- .git-annex/3x/PX/WORM-s380310-m1293025187--HTSeq-0.4.7.tar.gz.log
- .git-annex/45/gk/WORM-s67337-m1248732018--ExtUtils-Install-1.54.tar.gz.log
- .git-annex/4J/7Q/WORM-s8608-m1224694862--Algorithm-Munkres-0.08.tar.gz.log
- .git-annex/4g/XQ/WORM-s89208-m1278682033--HTML-Parser-3.66.tar.gz.log
- .git-annex/54/jw/WORM-s300163-m1226422051--AcePerl-1.92.tar.gz.log
- .git-annex/63/kj/WORM-s1213460-m1262942058--DBD-SQLite-1.29.tar.gz.log
- .git-annex/6Z/42/WORM-s4074-m943766010--File-Sync-0.09.tar.gz.log
- .git-annex/8F/M5/WORM-s6989-m1263161127--Digest-HMAC-1.02.tar.gz.log
- .git-annex/G2/FK/WORM-s3309-m1163872981--Bundle-BioPerl-2.1.8.tar.gz.log
- .git-annex/Gk/XF/WORM-s23572243-m1279546902--EMBOSS-6.3.1.tar.gz.log
- .git-annex/Jk/X6/WORM-s566429-m1279309002--DBI-1.612.tar.gz.log
- .git-annex/K6/fV/WORM-s1561451-m1240055295--Convert-Binary-C-0.74.tar.gz.log
- .git-annex/KM/4q/WORM-s146959-m1268515086--Graph-0.94.tar.gz.log
- .git-annex/MF/m2/WORM-s425766-m1212514609--Data-Stag-0.11.tar.gz.log
- .git-annex/QJ/P6/WORM-s1045868-m1282215033--9base-6.tar.gz.log
- .git-annex/Qm/WG/WORM-s39078-m1278163547--Digest-SHA1-2.13.tar.gz.log
- .git-annex/Wq/Fj/WORM-s45680640-m1297862101--BclConverter-1.7.1.tar.log
- .git-annex/Wq/Wm/WORM-s263536640-m1295025537--CASAVA_v1.7.0.tar.log
- .git-annex/XW/qm/WORM-s36609-m1276050470--Bio-ASN1-EntrezGene-1.10-withoutworldwriteables.tar.gz.log
- .git-annex/f7/g0/WORM-s40872-m1278273227--ExtUtils-ParseXS-2.2206.tar.gz.log
- .git-annex/j3/JF/WORM-s11753-m1232427595--Clone-0.31.tar.gz.log
- .git-annex/kX/9g/WORM-s84690-m1229117599--GraphViz-2.04.tar.gz.log
- .git-annex/km/z5/WORM-s44634-m1275505134--Authen-SASL-2.15.tar.gz.log
- .git-annex/kw/J3/WORM-s132396-m1278780649--DBD-mysql-4.016.tar.gz.log
- .git-annex/p5/1P/WORM-s53736-m1278673485--Archive-Tar-1.64.tar.gz.log
- .git-annex/wv/zG/WORM-s30584-m1268774021--ExtUtils-CBuilder-0.2703.tar.gz.log
- .git-annex/x5/7v/WORM-s10462526-m1254242591--BioPerl-1.6.1.tar.gz.log
-Please, commit your changes or stash them before you can merge.
-error: The following untracked working tree files would be overwritten by merge:
- .git-annex/1g/X3/WORM-s309910751-m1301311322--l_fcompxe_ia32_2011.2.137.tgz.log
- .git-annex/3w/Xf/WORM-s805764902-m1301312756--l_cproc_p_11.1.075_intel64.log
- .git-annex/9Q/Wz/WORM-s1234430253-m1301311891--l_ccompxe_2011.2.137.log
- .git-annex/FQ/4z/WORM-s318168323-m1301310848--l_cprof_p_11.1.075_ia64.log
- .git-annex/FV/0P/WORM-s710135470-m1301311835--l_ccompxe_intel64_2011.2.137.log
- .git-annex/Jx/qM/WORM-s599386592-m1301310731--l_fcompxe_2011.2.137.tgz.log
- .git-annex/KX/w1/WORM-s35976002-m1301312193--l_tbb_3.0.6.174.log
- .git-annex/Vw/jK/WORM-s15795178-m1301310913--w_flm_p_1.0.011_intel64.zip.log
- .git-annex/jK/zK/WORM-s374617670-m1301312705--l_ipp_7.0.2.137_intel64.log
- .git-annex/vK/kv/WORM-s584342291-m1301312669--l_cproc_p_11.1.075_ia64.log
- .git-annex/vw/v1/WORM-s736986678-m1301312794--l_cproc_p_11.1.075_ia32.log
- .git-annex/zq/7X/WORM-s343075585-m1301312233--l_ipp_7.0.2.137_ia32.log
-Please move or remove them before you can merge.
-Aborting
-1|jtang@x00:~/sources $ git status
-# On branch master
-# Your branch is ahead of 'origin/master' by 2 commits.
-#
-# Changes to be committed:
-# (use \"git reset HEAD <file>...\" to unstage)
-#
-# modified: .git-annex/09/5X/WORM-s361516678-m1301310614--l_fcompxe_intel64_2011.2.137.tgz.log
-# modified: .git-annex/43/2g/WORM-s19509673-m1301310496--l_fcompxe_2011.2.137_redist.tgz.log
-# modified: .git-annex/4J/qF/WORM-s18891115-m1301310934--w_flm_p_1.0.011_ia64.zip.log
-# modified: .git-annex/87/w1/WORM-s12212473-m1301310909--w_flm_p_1.0.011_ia32.zip.log
-# modified: .git-annex/99/Jq/WORM-s194345957-m1301310926--l_mkl_10.3.2.137_ia32.log
-# modified: .git-annex/99/kf/WORM-s9784531-m1301311680--l_ccompxe_2011.2.137_redist.log
-# modified: .git-annex/FF/f3/WORM-s93033394-m1301311706--l_gen_ipp_7.0.2.137.log
-# modified: .git-annex/MF/xZ/WORM-s515140733-m1301310936--l_cprof_p_11.1.075.log
-# modified: .git-annex/XW/X8/WORM-s355559731-m1301310797--l_mkl_10.3.2.137.log
-# modified: .git-annex/fJ/mZ/WORM-s1372886477-m1301313368--l_cproc_p_11.1.075.log
-# modified: .git-annex/j7/Q9/WORM-s44423202-m1301310622--l_cprof_p_11.1.075_redist.log
-# modified: .git-annex/k4/K7/WORM-s239539070-m1301310760--l_mkl_10.3.2.137_intel64.log
-# modified: .git-annex/kz/01/WORM-s279573314-m1301310783--l_cprof_p_11.1.075_ia32.log
-# modified: .git-annex/p6/Kq/WORM-s31199343-m1301311829--l_cproc_p_11.1.075_redist.log
-# modified: .git-annex/pz/J5/WORM-s626995277-m1301312301--l_ccompxe_ia32_2011.2.137.log
-# modified: .git-annex/v3/kX/WORM-s339693045-m1301310851--l_cprof_p_11.1.075_intel64.log
-#
-# Changes not staged for commit:
-# (use \"git add <file>...\" to update what will be committed)
-# (use \"git checkout -- <file>...\" to discard changes in working directory)
-#
-# modified: .git-annex/12/3W/WORM-s3058814-m1276699694--Botan-1.8.9.tgz.log
-# modified: .git-annex/1G/qV/WORM-s9122-m1251558854--Array-Compare-2.01.tar.gz.log
-# modified: .git-annex/3W/W5/WORM-s231523-m1270740744--DBD-Pg-2.17.1.tar.gz.log
-# modified: .git-annex/3x/PX/WORM-s380310-m1293025187--HTSeq-0.4.7.tar.gz.log
-# modified: .git-annex/45/gk/WORM-s67337-m1248732018--ExtUtils-Install-1.54.tar.gz.log
-# modified: .git-annex/4J/7Q/WORM-s8608-m1224694862--Algorithm-Munkres-0.08.tar.gz.log
-# modified: .git-annex/4g/XQ/WORM-s89208-m1278682033--HTML-Parser-3.66.tar.gz.log
-# modified: .git-annex/54/jw/WORM-s300163-m1226422051--AcePerl-1.92.tar.gz.log
-# modified: .git-annex/63/kj/WORM-s1213460-m1262942058--DBD-SQLite-1.29.tar.gz.log
-# modified: .git-annex/6Z/42/WORM-s4074-m943766010--File-Sync-0.09.tar.gz.log
-# modified: .git-annex/8F/M5/WORM-s6989-m1263161127--Digest-HMAC-1.02.tar.gz.log
-# modified: .git-annex/G2/FK/WORM-s3309-m1163872981--Bundle-BioPerl-2.1.8.tar.gz.log
-# modified: .git-annex/Gk/XF/WORM-s23572243-m1279546902--EMBOSS-6.3.1.tar.gz.log
-# modified: .git-annex/Jk/X6/WORM-s566429-m1279309002--DBI-1.612.tar.gz.log
-# modified: .git-annex/K6/fV/WORM-s1561451-m1240055295--Convert-Binary-C-0.74.tar.gz.log
-# modified: .git-annex/KM/4q/WORM-s146959-m1268515086--Graph-0.94.tar.gz.log
-# modified: .git-annex/MF/m2/WORM-s425766-m1212514609--Data-Stag-0.11.tar.gz.log
-# modified: .git-annex/QJ/P6/WORM-s1045868-m1282215033--9base-6.tar.gz.log
-# modified: .git-annex/Qm/WG/WORM-s39078-m1278163547--Digest-SHA1-2.13.tar.gz.log
-# modified: .git-annex/Wq/Fj/WORM-s45680640-m1297862101--BclConverter-1.7.1.tar.log
-# modified: .git-annex/Wq/Wm/WORM-s263536640-m1295025537--CASAVA_v1.7.0.tar.log
-# modified: .git-annex/XW/qm/WORM-s36609-m1276050470--Bio-ASN1-EntrezGene-1.10-withoutworldwriteables.tar.gz.log
-# modified: .git-annex/Zq/7X/WORM-s343075585-m1301312233--l_ipp_7.0.2.137_ia32.log
-# modified: .git-annex/f7/g0/WORM-s40872-m1278273227--ExtUtils-ParseXS-2.2206.tar.gz.log
-# modified: .git-annex/j3/JF/WORM-s11753-m1232427595--Clone-0.31.tar.gz.log
-# modified: .git-annex/kX/9g/WORM-s84690-m1229117599--GraphViz-2.04.tar.gz.log
-# modified: .git-annex/km/z5/WORM-s44634-m1275505134--Authen-SASL-2.15.tar.gz.log
-# modified: .git-annex/kw/J3/WORM-s132396-m1278780649--DBD-mysql-4.016.tar.gz.log
-# modified: .git-annex/p5/1P/WORM-s53736-m1278673485--Archive-Tar-1.64.tar.gz.log
-# modified: .git-annex/wv/zG/WORM-s30584-m1268774021--ExtUtils-CBuilder-0.2703.tar.gz.log
-# modified: .git-annex/x5/7v/WORM-s10462526-m1254242591--BioPerl-1.6.1.tar.gz.log
-#
-# Untracked files:
-# (use \"git add <file>...\" to include in what will be committed)
-#
-# .git-annex/1G/X3/
-# .git-annex/3W/Xf/
-# .git-annex/9q/Wz/
-# .git-annex/Fq/4z/
-# .git-annex/Jk/zK/
-# .git-annex/Kx/w1/
-# .git-annex/VK/kv/
-# .git-annex/fv/0P/
-# .git-annex/jX/qM/
-# .git-annex/vW/jK/
-# .git-annex/vW/v1/
-jtang@x00:~/sources $ git commit -a -m \"snap\"
-[master 45f254a] snap
- 47 files changed, 64 insertions(+), 30 deletions(-)
-jtang@x00:~/sources $ git status
-# On branch master
-# Your branch is ahead of 'origin/master' by 3 commits.
-#
-# Untracked files:
-# (use \"git add <file>...\" to include in what will be committed)
-#
-# .git-annex/1G/X3/
-# .git-annex/3W/Xf/
-# .git-annex/9q/Wz/
-# .git-annex/Fq/4z/
-# .git-annex/Jk/zK/
-# .git-annex/Kx/w1/
-# .git-annex/VK/kv/
-# .git-annex/fv/0P/
-# .git-annex/jX/qM/
-# .git-annex/vW/jK/
-# .git-annex/vW/v1/
-nothing added to commit but untracked files present (use \"git add\" to track)
-jtang@x00:~/sources $ git pull
-</pre>
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_3_a18ada7ac74c63be5753fdb2fe68dae5._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_3_a18ada7ac74c63be5753fdb2fe68dae5._comment
deleted file mode 100644
index 00988ab58..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_3_a18ada7ac74c63be5753fdb2fe68dae5._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 3"
- date="2011-03-28T15:25:18Z"
- content="""
-So, there is evidence here of a circumstance caused by the [[other_bug|git-annex_has_issues_with_git_when_staging__47__commiting_logs]], as I suspected.
-
-I don't think that manual `git commit -a` caused the problem. I suspect it was a subsequent `git add` that caused git to follow the wrong case paths and add the files in the wrong place. Ie, when you run \"git add .git-annex\", it recurses into `.git-annex/Gm/`, and adds files using that case, that were previously added from `.git-annex/GM/`.
-
-For completeness, can you verify this repo's core.ignorecase setting?
-
----
-
-I hate that you are stuck using loop filesystems to work around this bug. If my guess is correct, you don't need to, as long as you avoid manually running \"git add .git-annex\". I take this bug seriously. While I'm currently very involved in adding Amazon S3 support to git-annex (which will take days more of solid work), I do plan to make a loop filesystem of my own, probably vfat, so I can try and reproduce this on a case-insensative filesystem. If you could confirm my above hypothesis, that would speed things up for me.
-
-It's possible I will have to tweak the hash directories. Hopefully if so, I will only tweak them for *new* keys; if I had to do a v3 backend just to fix this stupid thing, I'd be sad -- upgrading all my offline disks from v1 to v2 took me many days.
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_4_039e945617a6c1852c96974a402db29c._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_4_039e945617a6c1852c96974a402db29c._comment
deleted file mode 100644
index d045f7120..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_4_039e945617a6c1852c96974a402db29c._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 4"
- date="2011-03-28T15:41:56Z"
- content="""
-In my \"sources\" repo on x00, the current setting is this \"ignorecase = true\" it was the first repo that I created before I clone it elsewhere and pull my changes back, it is on a HFS+ partition which is case insensitive and it is replicated on a portable hdd with a bare repo on a exfat partition. I wonder if my portable disk has a partially borked repo :P
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_5_eacd0b18475c05ab9feed8cf7290b79a._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_5_eacd0b18475c05ab9feed8cf7290b79a._comment
deleted file mode 100644
index 7127a6eef..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_5_eacd0b18475c05ab9feed8cf7290b79a._comment
+++ /dev/null
@@ -1,37 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 5"
- date="2011-03-28T15:51:11Z"
- content="""
-I also failed to mention, that in the case when i have stray log files after what has happened in comment 2, I get this left over after a commit when git is confused...
-
-
-<pre>
-jtang@x00:~/sources $ git status
-# On branch master
-# Your branch is ahead of 'origin/master' by 1 commit.
-#
-# Changes not staged for commit:
-# (use \"git add <file>...\" to update what will be committed)
-# (use \"git checkout -- <file>...\" to discard changes in working directory)
-#
-# modified: .git-annex/1G/X3/WORM-s309910751-m1301311322--l_fcompxe_ia32_2011.2.137.tgz.log
-# modified: .git-annex/3W/Xf/WORM-s805764902-m1301312756--l_cproc_p_11.1.075_intel64.log
-# modified: .git-annex/9Q/Wz/WORM-s1234430253-m1301311891--l_ccompxe_2011.2.137.log
-# modified: .git-annex/FQ/4z/WORM-s318168323-m1301310848--l_cprof_p_11.1.075_ia64.log
-# modified: .git-annex/FV/0P/WORM-s710135470-m1301311835--l_ccompxe_intel64_2011.2.137.log
-# modified: .git-annex/Jk/zK/WORM-s374617670-m1301312705--l_ipp_7.0.2.137_intel64.log
-# modified: .git-annex/Jx/qM/WORM-s599386592-m1301310731--l_fcompxe_2011.2.137.tgz.log
-# modified: .git-annex/KX/w1/WORM-s35976002-m1301312193--l_tbb_3.0.6.174.log
-# modified: .git-annex/VK/kv/WORM-s584342291-m1301312669--l_cproc_p_11.1.075_ia64.log
-# modified: .git-annex/Vw/jK/WORM-s15795178-m1301310913--w_flm_p_1.0.011_intel64.zip.log
-# modified: .git-annex/Zq/7X/WORM-s343075585-m1301312233--l_ipp_7.0.2.137_ia32.log
-# modified: .git-annex/vW/v1/WORM-s736986678-m1301312794--l_cproc_p_11.1.075_ia32.log
-#
-no changes added to commit (use \"git add\" and/or \"git commit -a\")
-</pre>
-
-
-Up until now I have just been updating the status of the staged files by hand and commiting it on my mac x00, this probably isn't helping. I'd rather not lose the tracking information.
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_6_e55117cb628dc532e468519252571474._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_6_e55117cb628dc532e468519252571474._comment
deleted file mode 100644
index aae020972..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_6_e55117cb628dc532e468519252571474._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 6"
- date="2011-03-31T18:02:42Z"
- content="""
-Alright, I have created a case-insensative HFS+ filesystem here on my linux laptop.
-
-I have not been able to trick git into staging the same file with 2 different capitalizations yet.
-
-It might be helpful if you can send me a copy of a git repository where 'git add -i' shows the same file staged with two capitalizations. Leaving out .git/annex of course. (joey@kitenet.net; a tarball would probably work)
-
-It seems that `git add` only started properly working on case insensative filesystems quite recently. The commit in question is 5e738ae820ec53c45895b029baa3a1f63e654b1b, \"Support case folding for git add when core.ignorecase=true\", which was first released in git 1.7.4, January 30, 2011. If you don't yet have that version, that could explain the problem entirely. In about half an hour (dialup!) I will have downloaded an older git and will see if I can reproduce the problem with it.
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_7_0f4f471102e394ebb01da40e4d0fd9f6._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_7_0f4f471102e394ebb01da40e4d0fd9f6._comment
deleted file mode 100644
index 92b205bc3..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_7_0f4f471102e394ebb01da40e4d0fd9f6._comment
+++ /dev/null
@@ -1,68 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 7"
- date="2011-03-31T19:08:01Z"
- content="""
-git 1.7.4 does not make things better. With it, if I add first \"X/foo\" and then \"x/bar\", it commits \"X/bar\".
-
-That will *certainly* cause problems when interoperating with a repo clone on a case-sensative filesystem, since
-git-annex there will not see the location log that git committed to the wrong case directory.
-
-It's possible there is some interoperability problem when pulling from linux like you did, onto HFS+, too. I am not quite sure. Ah, I did find one.. if I clone the repo with \"X/foo\" in it to a case-sensative filesystem, and add a \"x/foo\" there,
-and pull that commit back to HFS+, git says:
-
-<pre>
- * branch master -> FETCH_HEAD
-Updating 8754149..e3d4640
-Fast-forward
- x/foo | 1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
- create mode 100644 x/foo
-joey@gnu:/mnt/r4>ls
-X/
-joey@gnu:/mnt/r4>git st
-# On branch master
-# Changes not staged for commit:
-# (use \"git add <file>...\" to update what will be committed)
-# (use \"git checkout -- <file>...\" to discard changes in working directory
-
-# modified: X/foo
-</pre>
-
-Aha -- that lets me reproduce your problem with the same file being staged twice with different capitalizations, too:
-
-<pre>
-joey@gnu:/mnt/r4>echo haaai >| x/foo
-joey@gnu:/mnt/r4>git st
-# On branch master
-# Changes not staged for commit:
-# (use \"git add <file>...\" to update what will be committed)
-# (use \"git checkout -- <file>...\" to discard changes in working directory)
-#
-# modified: X/bar
-# modified: X/foo
-# modified: x/foo
-#
-joey@gnu:/mnt/r4>git commit -a
-fatal: Will not add file alias 'X/Bar' ('x/Bar' already exists in index)
-</pre>
-
-And modified files that git refuses to commit, which entirely explains [[git-annex_has_issues_with_git_when_staging__47__commiting_logs]].
-
-<pre>
-joey@gnu:/mnt/r4>git add X/foo
-joey@gnu:/mnt/r4>git commit X/foo
-# On branch master
-# Changes not staged for commit:
-# (use \"git add <file>...\" to update what will be committed)
-# (use \"git checkout -- <file>...\" to discard changes in working directory)
-#
-# modified: X/bar
-# modified: X/foo
-#
-no changes added to commit (use \"git add\" and/or \"git commit -a\")
-</pre>
-
-I think git is frankly, buggy. It seems I will need to work around this by stopping using mixed case hashing for location logs.
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_8_68e2d6ccdb9622b879e4bc7005804623._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_8_68e2d6ccdb9622b879e4bc7005804623._comment
deleted file mode 100644
index 05fe4658d..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_8_68e2d6ccdb9622b879e4bc7005804623._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 8"
- date="2011-03-31T19:28:02Z"
- content="""
-I've posted about this on the git mailing list. It's possible that these bugs, which can be shown to affect things other than just git-annex, will be fixed in git.
-
-I will wait a while to see. But am considering making git-annex use all-lowercase hash dirs for the log files. Maybe it could first look for .git-annex/aaaa/bbbb/foo.log, but also look for, read, and merge in any info from
-.git-annex/Aa/Bb/foo.log. And always write to the new style filenames. This would avoid confusing git with changes to
-mixed-case files, and avoid another massive transition.
-"""]]
diff --git a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_9_45b11ddd200261115b653c7a14d28aa9._comment b/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_9_45b11ddd200261115b653c7a14d28aa9._comment
deleted file mode 100644
index 8dfe74642..000000000
--- a/doc/bugs/git-annex_directory_hashing_problems_on_osx/comment_9_45b11ddd200261115b653c7a14d28aa9._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 9"
- date="2011-03-31T21:32:10Z"
- content="""
-I'm was running git 1.7.4.1 at the time when I came across it, I have just upgraded to 1.7.4.2. I've also just moved to using a loopback fs for the stuff i care about. Do you still want a repo that exhibits the problem (excluding the .git/annex data) ??? I'm also not sure if 1.7.4.2 has corrected the problem yet as I haven't done much with my repos since. I suspect just making all the .git-annex hashed directories seems to be lower case might be better in the long run.
-"""]]
diff --git a/doc/bugs/git-annex_does_not_install_on_windows_without_admin_rights.mdwn b/doc/bugs/git-annex_does_not_install_on_windows_without_admin_rights.mdwn
index c1202f636..58b11deb3 100644
--- a/doc/bugs/git-annex_does_not_install_on_windows_without_admin_rights.mdwn
+++ b/doc/bugs/git-annex_does_not_install_on_windows_without_admin_rights.mdwn
@@ -20,3 +20,5 @@ Latest release on MS Windows.
Installing git creates read-only directories that cannot be used by the
git-annex install afterwards. Without admin rights, the read-only flag of
the git dir cannot be altered.
+
+[[!tag confirmed]]
diff --git a/doc/bugs/git-annex_doesn__39__t_list_files_containing_ISO8859-15_characters.mdwn b/doc/bugs/git-annex_doesn__39__t_list_files_containing_ISO8859-15_characters.mdwn
deleted file mode 100644
index 382ca9a0c..000000000
--- a/doc/bugs/git-annex_doesn__39__t_list_files_containing_ISO8859-15_characters.mdwn
+++ /dev/null
@@ -1,48 +0,0 @@
-<h4>What steps will reproduce the problem?</h4>
-<pre><code> git init /tmp/test
- cd /tmp/test
- git annex init
- touch òó ō
- git annex add òó ō
- git annex find --include='*'
-</code></pre>
-
-<h4>What is the expected output? What do you see instead?</h4>
-Only <tt>ō</tt> is listed. Files containing ISO8859-15 characters that are not in ASCII-7, such as <tt>òó</tt>, are not listed by
-<code>git annex find --include='*'</code>. On the other hand, <code>git annex find --in=here</code> lists both.
-
-<h4>What version of git-annex are you using? On what operating system?</h4>
-git-annex 4.20130227, on Debian GNU/Linux (sid, i386).
-
-<h4>Please provide any additional information below.</h4>
-<pre><code> ~$ locale
- LANG=en_US.UTF-8
- LANGUAGE=en
- LC_CTYPE="en_US.UTF-8"
- LC_NUMERIC=C
- LC_TIME=en_DK.UTF-8
- LC_COLLATE="en_US.UTF-8"
- LC_MONETARY="en_US.UTF-8"
- LC_MESSAGES="en_US.UTF-8"
- LC_PAPER=sv_SE.UTF-8
- LC_NAME=sv_SE.UTF-8
- LC_ADDRESS=sv_SE.UTF-8
- LC_TELEPHONE=sv_SE.UTF-8
- LC_MEASUREMENT=sv_SE.UTF-8
- LC_IDENTIFICATION="en_US.UTF-8"
- LC_ALL=
-</code></pre>
-
-> Tracked this back to a bug in either the C library or the haskell
-> regex-posix wrpaper around it. I'm not sure which, but I emailed the
-> maintainer of the haskell library. It just doesn't think these
-> things are characters; even `.` fails to match them! Everything should
-> match that...
->
-> There are apparently quite a lot of bugs on POSIX regex libraries
-> as implemented on different systems:
-> <http://www.haskell.org/haskellwiki/Regex_Posix>
->
-> It seemed best to jettison this dependency entirely; I've switched it to
-> haskell's pure regex-tdfa library, which works nicely. [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/git-annex_doesn__39__t_list_files_containing_ISO8859-15_characters/comment_1_b84e831298c03b12471fb75da597e365._comment b/doc/bugs/git-annex_doesn__39__t_list_files_containing_ISO8859-15_characters/comment_1_b84e831298c03b12471fb75da597e365._comment
deleted file mode 100644
index 17d3d398a..000000000
--- a/doc/bugs/git-annex_doesn__39__t_list_files_containing_ISO8859-15_characters/comment_1_b84e831298c03b12471fb75da597e365._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="guilhem"
- ip="129.16.20.212"
- subject="comment 1"
- date="2013-03-08T20:09:02Z"
- content="""
-Wow, that was fast :-) Many thanks!
-"""]]
diff --git a/doc/bugs/git-annex_dropunused_has_no_effect.mdwn b/doc/bugs/git-annex_dropunused_has_no_effect.mdwn
deleted file mode 100644
index b9b159e3d..000000000
--- a/doc/bugs/git-annex_dropunused_has_no_effect.mdwn
+++ /dev/null
@@ -1,12 +0,0 @@
-Hi Joey,
-
-I have a repository with many thousands of unused files. It's hard to know exactly how many because it takes up to 5 seconds to print the name of every single one, so I'm largely guessing based on my knowledge of what I've recently deleted.
-
-When I run `git annex dropunused FOO`, it doesn't matter what `FOO` is -- a number, a range, the word "foo" -- the `dropunused` command returns to the prompt instantly in all cases.
-
-What can I do to drop all these unused files eating up i-nodes? Is there a debug flag I can turn on?
-
-Thanks,
- John
-
-> added a message [[done]] --[[Joey]]
diff --git a/doc/bugs/git-annex_dropunused_has_no_effect/comment_1_66b581eb7111a9e98c6406ec75b899cf._comment b/doc/bugs/git-annex_dropunused_has_no_effect/comment_1_66b581eb7111a9e98c6406ec75b899cf._comment
deleted file mode 100644
index 0624eb27c..000000000
--- a/doc/bugs/git-annex_dropunused_has_no_effect/comment_1_66b581eb7111a9e98c6406ec75b899cf._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://launchpad.net/~arand"
- nickname="arand"
- subject="comment 1"
- date="2013-03-03T22:34:27Z"
- content="""
-Vhat kind of annex is this (direct/indirect, on what filesystem, etc.)?
-
-Also what version of git-annex?
-
-I know that direct mode didn't support dropunused, at least before, and on earlier versions of annex switching back to indirect after deleting things in direct didn't work either for dropunused, if I recall correctly.
-"""]]
diff --git a/doc/bugs/git-annex_dropunused_has_no_effect/comment_2_11c46cd2087511c3d22b7ce7c149b3e9._comment b/doc/bugs/git-annex_dropunused_has_no_effect/comment_2_11c46cd2087511c3d22b7ce7c149b3e9._comment
deleted file mode 100644
index 22a8a0c4f..000000000
--- a/doc/bugs/git-annex_dropunused_has_no_effect/comment_2_11c46cd2087511c3d22b7ce7c149b3e9._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="comment 2"
- date="2013-03-03T22:43:41Z"
- content="""
-It's a ZFS filesystem, using indirect mode. Here are my version numbers:
-
- Vulcan:~/src/fpco $ git annex version
- git-annex version: 4.20130227
- local repository version: 3
- default repository version: 3
- supported repository versions: 3 4
- upgrade supported from repository versions: 0 1 2
-
-"""]]
diff --git a/doc/bugs/git-annex_dropunused_has_no_effect/comment_3_b1c3d8c6ec4b20727aaa9c4b746531b0._comment b/doc/bugs/git-annex_dropunused_has_no_effect/comment_3_b1c3d8c6ec4b20727aaa9c4b746531b0._comment
deleted file mode 100644
index b1c2ce085..000000000
--- a/doc/bugs/git-annex_dropunused_has_no_effect/comment_3_b1c3d8c6ec4b20727aaa9c4b746531b0._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-03-03T23:56:17Z"
- content="""
-dropunused will do nothing if the number provided to drop is not listed in `.git/annex/unused`
-
-The file should be generated when you run `git annex unused`
-"""]]
diff --git a/doc/bugs/git-annex_dropunused_has_no_effect/comment_4_f05a9a3760858c5ee5c98dd8ab059c28._comment b/doc/bugs/git-annex_dropunused_has_no_effect/comment_4_f05a9a3760858c5ee5c98dd8ab059c28._comment
deleted file mode 100644
index 9e18696b1..000000000
--- a/doc/bugs/git-annex_dropunused_has_no_effect/comment_4_f05a9a3760858c5ee5c98dd8ab059c28._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="comment 4"
- date="2013-03-05T22:43:12Z"
- content="""
-Ah, thanks Joey, that explains it. An error message to that effect would be great!
-"""]]
diff --git a/doc/bugs/git-annex_fails_to_initialize_under_Windows_with_cygwin.mdwn b/doc/bugs/git-annex_fails_to_initialize_under_Windows_with_cygwin.mdwn
new file mode 100644
index 000000000..8e205e1e9
--- /dev/null
+++ b/doc/bugs/git-annex_fails_to_initialize_under_Windows_with_cygwin.mdwn
@@ -0,0 +1,40 @@
+### Please describe the problem.
+
+
+### What steps will reproduce the problem?
+
+$ git init
+Initialized empty Git repository in /cygdrive/c/Temp/.git/
+
+$ git-annex init
+init
+ Detected a filesystem without fifo support.
+
+ Disabling ssh connection caching.
+
+ Detected a crippled filesystem.
+
+ Disabling core.symlinks.
+
+ Enabling direct mode.
+fatal: You are on a branch yet to be born
+git-annex.exe: git [Param "checkout",Param "-q",Param "-B",Param "annex/direct/master"] failed
+
+$ git checkout -B annex/direct/master
+fatal: You are on a branch yet to be born
+
+### What version of git-annex are you using? On what operating system?
+
+Running under cygwin bash
+
+$ git --version
+git version 1.7.9
+
+$ git-annex version
+git-annex version: 5.20140421-g78d6aa1
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook external
+
+> [[fixed|done]]; documented the needed version of git on the windows
+> install page. --[[Joey]]
diff --git a/doc/bugs/git-annex_fails_to_initialize_under_Windows_with_cygwin/comment_1_24d626923403b097f57bc3d3a8c5befa._comment b/doc/bugs/git-annex_fails_to_initialize_under_Windows_with_cygwin/comment_1_24d626923403b097f57bc3d3a8c5befa._comment
new file mode 100644
index 000000000..8610061d5
--- /dev/null
+++ b/doc/bugs/git-annex_fails_to_initialize_under_Windows_with_cygwin/comment_1_24d626923403b097f57bc3d3a8c5befa._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.114"
+ subject="comment 1"
+ date="2014-04-27T00:13:49Z"
+ content="""
+This looks similar to [[bugs/git-annex_fails_to_initialize_under_Windows]], which was solved by upgrading to a newer version of msysgit.
+
+git 1.7.9 is extremely old (years). Probably the empty commit that is done when switching to direct mode, precisely to avoid this problem, fails, because the pre-built git-annex for windows is targeting a modern version of git, from msysgit.
+"""]]
diff --git a/doc/bugs/git-annex_fails_to_initialize_under_Windows_with_cygwin/comment_2_32a74f078f45ee069a7d386734e379e2._comment b/doc/bugs/git-annex_fails_to_initialize_under_Windows_with_cygwin/comment_2_32a74f078f45ee069a7d386734e379e2._comment
new file mode 100644
index 000000000..bafaaa3fd
--- /dev/null
+++ b/doc/bugs/git-annex_fails_to_initialize_under_Windows_with_cygwin/comment_2_32a74f078f45ee069a7d386734e379e2._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkYmMFDdf3GJ9Oba6NCVkzGc4JyB9WavMs"
+ nickname="Xinruo"
+ subject="comment 2"
+ date="2014-04-27T11:58:13Z"
+ content="""
+OK installing git 1.9.2 from msysgit solves the problem. I thought I have read somewhere that you used cygwin for Windows development and didn't know that git from cygwin is too old. Thanks for the help!
+"""]]
diff --git a/doc/bugs/git-annex_fails_to_start_when_nautilus_script_directory_is_missing.mdwn b/doc/bugs/git-annex_fails_to_start_when_nautilus_script_directory_is_missing.mdwn
new file mode 100644
index 000000000..e3441489d
--- /dev/null
+++ b/doc/bugs/git-annex_fails_to_start_when_nautilus_script_directory_is_missing.mdwn
@@ -0,0 +1,49 @@
+### Please describe the problem.
+Starting the webapp fails if the Nautilus scripts directory doesn't exist.
+
+### What steps will reproduce the problem?
+
+[[!format sh """
+$ mv ~/.local/share/nautilus ~/.local/share/nautilus.bak
+$ git-annex webapp
+
+git-annex: /home/brunksn/.local/share/nautilus/scripts/git-annex get: openFile: does not exist (No such file or directory)
+failed
+git-annex: webapp: 1 failed
+"""]]
+
+### What version of git-annex are you using? On what operating system?
+5.20140402, Debian testing
+
+### Please provide any additional information below.
+
+Workaround for users without Gnome/Nautilus:
+[[!format sh """
+$ mkdir -p ~/.local/share/nautilus
+"""]]
+
+It seems git-annex tries to create the scripts without checking if the actually directory exists. One solution would be to just create it if it doesn't exist or to only write the scripts if it exists already. Patch for the latter below. Works for me but my haskell knowledge is still very limited.
+
+By the way, what is the preferred way to contribute patches for git-annex? I couldn't find any information about that on the website.
+
+[[!format diff """
+diff --git a/Assistant/Install.hs b/Assistant/Install.hs
+index 4d02c0e..883ca48 100644
+--- a/Assistant/Install.hs
++++ b/Assistant/Install.hs
+@@ -87,8 +87,9 @@ installNautilus :: FilePath -> IO ()
+ #ifdef linux_HOST_OS
+ installNautilus program = do
+ scriptdir <- (\d -> d </> "nautilus" </> "scripts") <$> userDataDir
+- genscript scriptdir "get"
+- genscript scriptdir "drop"
++ whenM (doesDirectoryExist scriptdir) $ do
++ genscript scriptdir "get"
++ genscript scriptdir "drop"
+ where
+ genscript scriptdir action =
+ installscript (scriptdir </> scriptname action) $ unlines
+"""]]
+
+> [[applied|done]]. thanks! That's a fine way to send a small patch, or
+> make a git branch somewhere for a larger one. --[[Joey]]
diff --git a/doc/bugs/git-annex_fix_not_noticing_file_renames.mdwn b/doc/bugs/git-annex_fix_not_noticing_file_renames.mdwn
deleted file mode 100644
index a68533980..000000000
--- a/doc/bugs/git-annex_fix_not_noticing_file_renames.mdwn
+++ /dev/null
@@ -1,36 +0,0 @@
-What steps will reproduce the problem?
-
- ~$ mkdir testannex
- ~$ cd testannex/
- testannex$ git init
- Initialized empty Git repository in /Users/ed/testannex/.git/
- testannex$ git annex init "test annex"
- init test annex ok
- (Recording state in git...)
- testannex$ echo "file1" > file1
- testannex$ git annex add file1
- add file1 (checksum...) ok
- (Recording state in git...)
- testannex$ mkdir directory
- testannex$ mv file1 directory/
- testannex$ cat directory/file1
- cat: directory/file1: No such file or directory
- testannex$ git annex fix directory/file1
- git-annex: directory/file1 not found
-
-
-What is the expected output? What do you see instead?
-
- git annex fix should fix the symlink. It looks like maybe it's *following* the symlink?
-
-What version of git-annex are you using? On what operating system?
-
- checkout: 20d195f compiled on OS X 10.7 using cabal.
-
-Please provide any additional information below.
-
- git annex assistant is not noticing file renames either.
-
-> git-annex commands (other than `git annex add`) only operate on files
-> checked into git, which `directory/file1` is not, since you did not use
-> `git mv`. Once you `git add` the file, it'll work. [[done]] --[[Joey]]
diff --git a/doc/bugs/git-annex_fix_not_noticing_file_renames/comment_1_4edd95200d59ec5a5426167b8da8e3f9._comment b/doc/bugs/git-annex_fix_not_noticing_file_renames/comment_1_4edd95200d59ec5a5426167b8da8e3f9._comment
deleted file mode 100644
index 589dfbf06..000000000
--- a/doc/bugs/git-annex_fix_not_noticing_file_renames/comment_1_4edd95200d59ec5a5426167b8da8e3f9._comment
+++ /dev/null
@@ -1,24 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="173.162.44.162"
- subject="comment 1"
- date="2012-12-13T20:14:37Z"
- content="""
-Thanks for the response! It's good to know how it works right now.
-
-The reason I was expecting it to work on the files even if I moved them without git rename, is this:
-
-Imaginary use case:
-
-I am using git annex assistant, and not using the command line at all. Maybe I don't know anything about git. I am on a machine in the \"client\" group, so it drops content in \"archive\" subdirectories after storing it safely in a repository in the \"backup\" group.
-
-To add content to git annex, I drag and drop it into the git annex directory. Assistant notices, and it gets added to the annex (it is now a symlink). Yay!
-
-To archive content, I drag and drop the file (its symlink actually) from the git annex directory to an annex/archive directory, assistant notices, and it gets moved off to backup directories, and this symlink becomes dead. This doesn't work because git annex assistant doesn't notice renames.
-
-To retrieve content from an archive, I drag and drop the dead link in the archive directory to a parent directory, and git annex notices and grabs the content from a backup somewhere. This doesn't work, because git annex assistant doesn't notice renames.
-
-These kinds of operations are necessary if I'm going to archive and unarchive files, or otherwise move and manage them, while the assistant is running, without using git from the command line.
-
-
-"""]]
diff --git a/doc/bugs/git-annex_fix_not_noticing_file_renames/comment_2_a9a44debefb3bdd4b8ed2d1cf53f2338._comment b/doc/bugs/git-annex_fix_not_noticing_file_renames/comment_2_a9a44debefb3bdd4b8ed2d1cf53f2338._comment
deleted file mode 100644
index 33f05eac7..000000000
--- a/doc/bugs/git-annex_fix_not_noticing_file_renames/comment_2_a9a44debefb3bdd4b8ed2d1cf53f2338._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.8.117"
- subject="comment 2"
- date="2012-12-13T20:24:32Z"
- content="""
-The assistant does notice renames, and also automatically fixes links.
-"""]]
diff --git a/doc/bugs/git-annex_fix_not_noticing_file_renames/comment_3_0efb11f35b872b75a3fbc4ebb71ac827._comment b/doc/bugs/git-annex_fix_not_noticing_file_renames/comment_3_0efb11f35b872b75a3fbc4ebb71ac827._comment
deleted file mode 100644
index 75c02dda1..000000000
--- a/doc/bugs/git-annex_fix_not_noticing_file_renames/comment_3_0efb11f35b872b75a3fbc4ebb71ac827._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="173.162.44.162"
- subject="comment 3"
- date="2012-12-13T20:39:57Z"
- content="""
-The assistant doesn't seem to be noticing renames or fixing files anymore, for me; that was what got me started on this bug report, though it sounds like I took it in an irrelevant direction by focusing on the command line and \"git annex fix.\"
-
-I'll double check, and submit a new bug report if I can confirm that assistant isn't doing what it should.
-"""]]
diff --git a/doc/bugs/git-annex_get:_requested_key_is_not_present.mdwn b/doc/bugs/git-annex_get:_requested_key_is_not_present.mdwn
deleted file mode 100644
index f4c5b3d09..000000000
--- a/doc/bugs/git-annex_get:_requested_key_is_not_present.mdwn
+++ /dev/null
@@ -1,41 +0,0 @@
-### Please describe the problem.
-
-I setup 3 repositories on my laptop and 3 on my server using the webapp, see the following scheme:
-
-Laptop <- sync with -> Server
-
- /home/fabian/Dokumente (Client) <-> /mnt/raid/Dokumente (Full-Backup)
- /home/fabian/Bilder (Client) <-> /mnt/raid/Bilder (Full-Backup)
- /mnt/data-common/Audio (Manual) <-> /mnt/raid/Audio (Full-Backup)
-
-As you can see, the Audio folder is in manual mode on the laptop, so it does not get any files automatically.
-If I now want to get a folder with 'git-annex get' I get the following error:
-
- fabian@fabian-thinkpad /mnt/data-common/Audio $ git-annex get Musik
- get Musik/+⁄-/2003 - You Are Here (Bonus Disc)/01 - I've Been Lost.ogg (from eifel.fritz.box__mnt_raid_Audio...)
- requested key is not present
- rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
- rsync error: error in rsync protocol data stream (code 12) at io.c(605) [Receiver=3.0.9]
-
- Unable to access these remotes: eifel.fritz.box__mnt_raid_Audio
-
- Try making some of these repositories available:
- efe13d8c-2b02-455f-9874-b7043caa332f -- eifel.fritz.box__mnt_raid_Audio (fabian@eifel:/mnt/raid/Audio)
- failed
-
-### What steps will reproduce the problem?
-
-I do not really know the minimal setup to reproduce this problem.
-
-### What version of git-annex are you using? On what operating system?
-
-git-annex 4.20130417 on Gentoo Linux using Ebuilds from Haskell overlay
-
-> I suspect this was some kind of misconfiguration, or
-> one of the kinds of data corruption that git-annex can automatically heal from.
->
-> I am pretty sure I didn't make any changes to git-annex that caused
-> the problem to stop happening!
->
-> While it would be very good to get to the bottom of this, I don't see
-> any benefit to keeping this report open without more info. [[done]] --[[Joey]]
diff --git a/doc/bugs/git-annex_get:_requested_key_is_not_present/comment_1_d4baa6607a61d0e6a7cea1325a5ddf95._comment b/doc/bugs/git-annex_get:_requested_key_is_not_present/comment_1_d4baa6607a61d0e6a7cea1325a5ddf95._comment
deleted file mode 100644
index 70c3f77d0..000000000
--- a/doc/bugs/git-annex_get:_requested_key_is_not_present/comment_1_d4baa6607a61d0e6a7cea1325a5ddf95._comment
+++ /dev/null
@@ -1,26 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-04-27T19:54:42Z"
- content="""
-This error message means that the file's content is not present on your server.
-
-It seems like git-annex *thinks* the file is there, so it sent it there. But something appears to have happened to it.
-
-You can investigate like this:
-
-* Get the file's key, by running `basename $(git cat-file p 'HEAD:Musik/+⁄-/2003 - You Are Here (Bonus Disc)/01 - I've Been Lost.ogg')`
-* Run `find` in /mnt/raid/Audio on the server, and grep for that key.
-
-If that finds any files, we may have a git-annex bug of some kind.
-
-If it finds an empty directory, that's an indication that the file's content was sent to the server before, but has now somehow gotten deleted.
-
-----
-
-You may also want to run, on the client: `git annex fsck --fast --from eifel.fritz.box__mnt_raid_Audio`
-That will check that all the files it thinks should be on the server are still there. If it says \"fixing location log\",
-then it's found other files that were expected to be on the server but don't seem to be any longer.
-
-"""]]
diff --git a/doc/bugs/git-annex_get:_requested_key_is_not_present/comment_2_b49725488c3db5e00ede7b65ed9d62fa._comment b/doc/bugs/git-annex_get:_requested_key_is_not_present/comment_2_b49725488c3db5e00ede7b65ed9d62fa._comment
deleted file mode 100644
index 46a488c20..000000000
--- a/doc/bugs/git-annex_get:_requested_key_is_not_present/comment_2_b49725488c3db5e00ede7b65ed9d62fa._comment
+++ /dev/null
@@ -1,110 +0,0 @@
-[[!comment format=mdwn
- username="https://launchpad.net/~maestro-alubia"
- nickname="maestro-alubia"
- subject="comment 2"
- date="2013-04-29T21:04:30Z"
- content="""
-Thanks for explaining the error message.
-
-I did some investigation but I am not really understanding what is going on.
-
-But step by step, lets take a file without any confusing characters in filename (e.g. '/'), so we use the file \".directory\".
-
-1.) I run on the client:
-[[!format sh \"\"\"
-fabian@fabian-thinkpad /mnt/data-common/Audio $ ls -la .directory
-lrwxrwxrwx 1 fabian fabian 180 25. Apr 17:15 .directory -> .git/annex/objects/Ff/m9/SHA256E-s91--378daa8e2a232ae5a04d9f6c83003d8ccfe6c8b7547c1789a130ba94017283ed/SHA256E-s91--378daa8e2a232ae5a04d9f6c83003d8ccfe6c8b7547c1789a130ba94017283ed
-fabian@fabian-thinkpad /mnt/data-common/Audio $ basename $(git cat-file -p \"HEAD:.directory\")
-SHA256E-s91--378daa8e2a232ae5a04d9f6c83003d8ccfe6c8b7547c1789a130ba94017283ed
-\"\"\"]]
-
-2.) I run on the server:
-
-[[!format sh \"\"\"
-fabian@eifel:/mnt/raid/Audio$ ls -la .directory
--rw----r-x 1 fabian fabian 91 Dez 13 17:35 .directory
-fabian@eifel:/mnt/raid/Audio$ basename $(git cat-file -p \"HEAD:.directory\")
-SHA256E-s91--378daa8e2a232ae5a04d9f6c83003d8ccfe6c8b7547c1789a130ba94017283ed
-fabian@eifel:/mnt/raid/Audio$ git-annex fsck .directory
-fsck .directory (checksum...) ok
-\"\"\"]]
-
-So obviously the file is present on the server (it is using direct mode).
-
-3.) On the client again:
-
-[[!format sh \"\"\"
-fabian@fabian-thinkpad /mnt/data-common/Audio $ git-annex get .directory
-get .directory (from eifel.fritz.box__mnt_raid_Audio...)
- requested key is not present
-rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
-rsync error: error in rsync protocol data stream (code 12) at io.c(605) [Receiver=3.0.9]
-
- Unable to access these remotes: eifel.fritz.box__mnt_raid_Audio
-
- Try making some of these repositories available:
- efe13d8c-2b02-455f-9874-b7043caa332f -- eifel.fritz.box__mnt_raid_Audio (fabian@eifel:/mnt/raid/Audio)
-failed
-git-annex: get: 1 failed
-fsck .directory (checking eifel.fritz.box__mnt_raid_Audio...) (fixing location log)
- ** Based on the location log, .directory
- ** was expected to be present, but its content is missing.
-
- ** No known copies exist of .directory
-failed
-(Recording state in git...)
-git-annex: fsck: 1 failed
-fabian@fabian-thinkpad /mnt/data-common/Audio $ git-annex get .directory
-get .directory (not available)
- No other repository is known to contain the file.
-failed
-git-annex: get: 1 failed
-\"\"\"]]
-
-Also running \"git annex sync\" on both sides does not help.
-
-This is the configuration:
-
-Client:
-[[!format sh \"\"\"
-fabian@fabian-thinkpad /mnt/data-common/Audio $ cat .git/config
-[core]
- repositoryformatversion = 0
- filemode = true
- bare = false
- logallrefupdates = true
-[annex]
- uuid = a1f816fe-3fce-4887-a85c-b7b9e501a5d7
- version = 3
-[remote \"eifel.fritz.box__mnt_raid_Audio\"]
- url = ssh://fabian@git-annex-eifel.fritz.box-fabian_mntraidAudio/mnt/raid/Audio/
- fetch = +refs/heads/*:refs/remotes/eifel.fritz.box__mnt_raid_Audio/*
- annex-uuid = efe13d8c-2b02-455f-9874-b7043caa332f
- annex-cost = 175.0
-\"\"\"]]
-
-Server:
-[[!format sh \"\"\"
-fabian@eifel:/mnt/raid/Audio$ cat .git/config
-[core]
- repositoryformatversion = 0
- filemode = true
- bare = false
- logallrefupdates = true
-[annex]
- uuid = efe13d8c-2b02-455f-9874-b7043caa332f
- version = 3
- direct = true
-[gc]
- auto = 0
-[remote \"fabianthinkpad.fritz.box__mnt_datacommon_Audio\"]
- url = ssh://fabian@git-annex-fabian-thinkpad.fritz.box-fabian_mntdatacommonAudio/mnt/data-common/Audio/
- fetch = +refs/heads/*:refs/remotes/fabianthinkpad.fritz.box__mnt_datacommon_Audio/*
- annex-uuid = a1f816fe-3fce-4887-a85c-b7b9e501a5d7
- annex-cost = 175.0
-\"\"\"]]
-
-Please let me know if you need more information.
-
-Btw: I sent some money to my flattr account so I can support you soon. Thanks again for your work!
-"""]]
diff --git a/doc/bugs/git-annex_get:_requested_key_is_not_present/comment_3_c17a7138579b93c6f14e3444c11664ac._comment b/doc/bugs/git-annex_get:_requested_key_is_not_present/comment_3_c17a7138579b93c6f14e3444c11664ac._comment
deleted file mode 100644
index b43e2fbdc..000000000
--- a/doc/bugs/git-annex_get:_requested_key_is_not_present/comment_3_c17a7138579b93c6f14e3444c11664ac._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://launchpad.net/~maestro-alubia"
- nickname="maestro-alubia"
- subject="Fixed"
- date="2013-06-30T11:50:42Z"
- content="""
-The bug seems to be fixed in recent versions of git-annex (tested with 4.20130601 on \"client\" and 4.20130621 on \"server\"). Everything is now working as expected. Thank you very much for your work!
-"""]]
diff --git a/doc/bugs/git-annex_group_remote_allows_bad_settings_with_standard_groups.mdwn b/doc/bugs/git-annex_group_remote_allows_bad_settings_with_standard_groups.mdwn
new file mode 100644
index 000000000..5d8f863ec
--- /dev/null
+++ b/doc/bugs/git-annex_group_remote_allows_bad_settings_with_standard_groups.mdwn
@@ -0,0 +1,25 @@
+### Please describe the problem.
+
+Running `git annex group here manual` and `git annex group here client` results in the nonsensical group of "manual client". Should there be checking for the reserved "standard" group words?
+
+The intention from the webapp and docs reads as though these groups should be mutually exclusive.
+
+Also it would be nice if `git annex group here` returned the list of groups (I put this as a wishlist item but think it perhaps warrants a bug mention).
+
+### What steps will reproduce the problem?
+
+
+### What version of git-annex are you using? On what operating system?
+
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> [[done]] per my comment. (Please comment if you disagree!) --[[Joey]]
diff --git a/doc/bugs/git-annex_group_remote_allows_bad_settings_with_standard_groups/comment_1_b3090201e90a78e049cf299fc322d60e._comment b/doc/bugs/git-annex_group_remote_allows_bad_settings_with_standard_groups/comment_1_b3090201e90a78e049cf299fc322d60e._comment
new file mode 100644
index 000000000..154bcd12e
--- /dev/null
+++ b/doc/bugs/git-annex_group_remote_allows_bad_settings_with_standard_groups/comment_1_b3090201e90a78e049cf299fc322d60e._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-05-16T18:34:49Z"
+ content="""
+You can get the same effect by running `git annex vicfg` in 2 repositories at the same time, and adding different groups. When the repositories sync and merge, things end up in 2 groups.
+
+So, this is something that git-annex has to deal with being done, even if the configuration does not make sense. It deals with it by treating such a configuration the same as if the repository was in no groups, as far as preferred content is concerned.
+
+So, I don't see much point in adding configuration time checks, since they'd not catch all ways this can happen.
+"""]]
diff --git a/doc/bugs/git-annex_has_issues_with_git_when_staging__47__commiting_logs.mdwn b/doc/bugs/git-annex_has_issues_with_git_when_staging__47__commiting_logs.mdwn
deleted file mode 100644
index ed629c424..000000000
--- a/doc/bugs/git-annex_has_issues_with_git_when_staging__47__commiting_logs.mdwn
+++ /dev/null
@@ -1,34 +0,0 @@
-After a series of pretty convoluted copying files around between annex'd repos and pulling changes around between repos. I noticed that occassionally when git-annex tries to stage files (the `.git-annex/*/*/*logs`) git some times gets wedged and doing a "git commit -a" doesn't seem to work or files might not get added thus leaving a bunch of untracked files or modified files that aren't staged for a commit.
-
-I tried running a *`git rm --cached -f -r *`* then *git add -u .git-annex/* or the usual *git add* then a commit fixes things for me. If I don't do that then my subsequent merges/pulls will fail and result in *no known copies of files* I suspect git-annex might have just touched some file modes and git picked up the changes but got confused since there was no content change. It might also just be a git on OSX thing and it doesn't affect linux/bsd users.
-
-For now it's just a bit of extra work for me when it does occur but it does not seem to occur often.
-
-> What do you mean when you say that git "got wedged"? It hung somehow?
->
-> If git-annex runs concurrently with another git command that locks
-> the repository, its git add of log files can fail.
->
-> Update: Also, of course, if you are running a "got annex get" or
-> similar, and ctrl-c it after it has gotten some files, it can
-> end up with unstaged or in some cases un-added log files that git-annex
-> wrote -- since git-annex only stages log files in git on shutdown, and
-> ctrl-c bypasses that.
-> --[[Joey]]
-
->> It "got wedged" as in git doesn't let me commit anything, even though it tells me that there is stuff to be committed in the staging area.
-
->>> I've never seen git refuse to commit staged files. There would have to
->>> be some error message? --[[Joey]]
-
->>>> there were no error messages at all
-
->>>>> Can I see a transcript? I'm having difficulty getting my head around
->>>>> what git is doing. Sounds like the files could just not be `git
->>>>> added` yet, but I get the impression from other things that you say
->>>>> that it's not so simple. --[[Joey]]
-
-This turns out to be a bug in git, and I have posted a bug report on the mailing list.
-The git-annex behavior that causes this situation is being handled as
-another bug, [[git-annex directory hashing problems on osx]].
-So, closing this bug report. [[done]] --[[Joey]]
diff --git a/doc/bugs/git-annex_immediately_re-gets_dropped_files.mdwn b/doc/bugs/git-annex_immediately_re-gets_dropped_files.mdwn
deleted file mode 100644
index 2368df98d..000000000
--- a/doc/bugs/git-annex_immediately_re-gets_dropped_files.mdwn
+++ /dev/null
@@ -1,27 +0,0 @@
-### Please describe the problem.
-
-I have some files that I want to drop from my laptop. However, as soon as I drop them (git-annex drop), the assistant starts to download them again from another repository. At first glance, this seems like a variant of [[bugs/Handling_of_files_inside_and_outside_archive_directory_at_the_same_time]].
-
-I would expect that after an explicit drop command, the files would not be re-downloaded.
-
-The repository that this is happening on is a "client" type, direct-mode repository.
-
-### What steps will reproduce the problem?
-
- git annex drop drop-test/TestFile.data
-
-### What version of git-annex are you using? On what operating system?
- git-annex version: 4.20130618-g333cb8e
- build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS
- local repository version: 4
- default repository version: 3
- supported repository versions: 3 4
- upgrade supported from repository versions: 0 1 2
-
- I am running Ubuntu 13.04
-
-### Please provide any additional information below.
-
-log emailed.
-
-> [[done]]; not a bug, should use manual mode if manually deciding which files are in a repository --[[Joey]]
diff --git a/doc/bugs/git-annex_immediately_re-gets_dropped_files/comment_1_09e616a4866e726a48be4febe6375cc8._comment b/doc/bugs/git-annex_immediately_re-gets_dropped_files/comment_1_09e616a4866e726a48be4febe6375cc8._comment
deleted file mode 100644
index 3976f08fa..000000000
--- a/doc/bugs/git-annex_immediately_re-gets_dropped_files/comment_1_09e616a4866e726a48be4febe6375cc8._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-06-18T21:01:03Z"
- content="""
-The assistant does not have information to guess why a file has changed, it just sees it has, and takes appropriate action to get it in sync. If you want to manually manage which files are present, you should enable manual mode.
-"""]]
diff --git a/doc/bugs/git-annex_incorrectly_parses_bare_IPv6_addresses.mdwn b/doc/bugs/git-annex_incorrectly_parses_bare_IPv6_addresses.mdwn
deleted file mode 100644
index c94952b49..000000000
--- a/doc/bugs/git-annex_incorrectly_parses_bare_IPv6_addresses.mdwn
+++ /dev/null
@@ -1,59 +0,0 @@
-I have a git remote in a git-annex-enabled repository. Here's what it looks like in .git/config:
-
-<pre>
-[remote "renaissance"]
- url = ssh://[2001:0:53aa:64c:24ef:5ce4:2ef9:cdda]/home/paulproteus/Music/annex/
- fetch = +refs/heads/*:refs/remotes/renaissance/*
- annex-uuid = 2992752e-1a13-11e0-ba68-57d3c800da64
-</pre>
-
-I wanted to "git annex get" some data. git-annex appears to pass incorrectly-formatted IPv6 addresses to rsync:
-
-<pre>
-get primary/emusiq/Arab Strap/Monday At The Hug And Pint/01-The Shy Retirer.mp3 (copying from renaissance...)
-ssh: Could not resolve hostname [2001:0:53aa:64c:24ef:5ce4:2ef9:cdda]: Name or service not known
-rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
-rsync error: unexplained error (code 255) at io.c(601) [Receiver=3.0.7]
-
- rsync failed -- run git annex again to resume file transfer
- Unable to access these remotes: renaissance
- Try making some of these repositories available:
- 2992752e-1a13-11e0-ba68-57d3c800da64
-failed
-</pre>
-
-In this case, the square brackets should not be there.
-
-I tried changing the .git/config syntax slightly, and got a different, also-incorrect behavior:
-
-<pre>
-[remote "renaissance"]
- url = [2001:0:53aa:64c:24ef:5ce4:2ef9:cdda]:/home/paulproteus/Music/annex/
- fetch = +refs/heads/*:refs/remotes/renaissance/*
- annex-uuid = 2992752e-1a13-11e0-ba68-57d3c800da64
-</pre>
-
-<pre>
-paulproteus@pathi:~/Music/annex$ git annex get
-git-annex: bad url ssh://[2001/~/0:53aa:64c:24ef:5ce4:2ef9:cdda]:/home/paulproteus/Music/annex/
-</pre>
-
-(Note that both these .git/config entries work fine with "git fetch".)
-
--- Asheesh.
-
-> Technically, this seems to be a bug in the haskell URI library; it honors
-> the `[]` in parsing, but does not remove them when the URI is queried for
-> the host part.
-
-<pre>
-Prelude Network.URI> let (Just u) = parseURI "http://foo@[2001:0:53aa:64c:24ef:5ce4:2ef9:cdda]/bar"
-Prelude Network.URI> let (Just a) = uriAuthority u
-Prelude Network.URI> uriRegName a
-"[2001:0:53aa:64c:24ef:5ce4:2ef9:cdda]"
-Prelude Network.URI> isIPv6address $ uriRegName a
-False
-</pre>
-
-> I have filed a [bug upstream](http://trac.haskell.org/network/ticket/40), and put a workaround in git-annex. [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/git-annex_losing_rsync_remotes_with_encryption_enabled.mdwn b/doc/bugs/git-annex_losing_rsync_remotes_with_encryption_enabled.mdwn
deleted file mode 100644
index 8df3608db..000000000
--- a/doc/bugs/git-annex_losing_rsync_remotes_with_encryption_enabled.mdwn
+++ /dev/null
@@ -1,103 +0,0 @@
-Somehow git-annex has again lost a complete rsync remote with encryption enabled...
-
-git-annex version was 3.20111111
-
-> "once again" ? When did it do it before?
-
->> It's the second time i uploaded all the files to an encrypted rsync remote and git-annex is not able to find it anymore. --[[gebi]]
-
-> "lost" ? How is the remote lost?
-
->> git-annex is not able to find any files on the encrypted rsync remote anymore.
->> Copy does not copy the content again but drop doesn't find it, thus it's somehow "lost" and in an strange state.
->> I've also had the state where the content was already on the remote side but git-annex copy would copy it again,
->> ignoring all the data on the remote side. --[[gebi]]
-
-Both *remoteserver* and *localserver* are rsync remotes with enabled encryption.
-All commands are executed on the git repository on my laptop.
-Target of origin is a gitolite repository without annex support (thus the two rsync remotes).
-
-Is there a way in git-annex to verify that all files fullfill the numcopies, in my case
-numcopies=2, and can be read from the remotes their are on?
-I thought that *copy* would verify that, but seems not.
-
- % g a copy --to remoteserver tools
- copy tools/md5_sha1_utility.exe (gpg) (checking remoteserver...) ok
- copy tools/win32diskimager-RELEASE-0.2-r23-win32.zip (checking remoteserver...) ok
-
- % g a copy --to localserver tools
- copy tools/md5_sha1_utility.exe (gpg) (checking localserver...) ok
- copy tools/win32diskimager-RELEASE-0.2-r23-win32.zip (checking localserver...) ok
-
- % g a drop tools
- drop tools/md5_sha1_utility.exe (gpg) (checking localserver...) (checking remoteserver...) (unsafe)
- Could only verify the existence of 1 out of 2 necessary copies
-
- Try making some of these repositories available:
- 718a9b5c-1b4a-11e1-8211-6f094f20e050 -- remoteserver (remote backupserver)
-
- (Use --force to override this check, or adjust annex.numcopies.)
- failed
- drop tools/win32diskimager-RELEASE-0.2-r23-win32.zip (checking localserver...) (checking remoteserver...) (unsafe)
- Could only verify the existence of 1 out of 2 necessary copies
-
- Try making some of these repositories available:
- 718a9b5c-1b4a-11e1-8211-6f094f20e050 -- remoteserver (remote backupserver)
-
- (Use --force to override this check, or adjust annex.numcopies.)
- failed
- git-annex: drop: 2 failed
-
- % g a fsck tools
- fsck tools/md5_sha1_utility.exe (checksum...) ok
- fsck tools/win32diskimager-RELEASE-0.2-r23-win32.zip (checksum...) ok
-
-> Copy does do an explicit check that the content is present on remoteserver,
-> and based on the above, the content was found to be already there,
-> which is why it did not copy it again.
->
-> Drop does an indentical check that the content is present, and
-> since it failed to find it, I am left thinking something must have
-> happened to the remove in between the copy and the drop to cause the
-> content to go away.
->
-> What happens if you copy the data to remoteserver again? --[[Joey]]
-
-The commands above are executed within a few seconds and completely repeatable. --[[gebi]]
-
-> In that case, why don't you run the commands with `-d` to see the actual
-> rsync command it's running to check if the content is present.
-> Then you can try repeatedly running the command by hand and see why it
-> sometimes succeeds and sometimes fail.
-
-The commands fail and succeed consistently, not either or.
-git annex copy succeeds consistently with not copying the content to remote because it checks and it's already there.
-
-git annex drop fails consistently with error because content is missing on the exact same remote git annex copy checks
-and thinks the content is there. --[[gebi]]
-
-> The command will be something like this:
-> `rsync --quiet hostname:/dir/file 2>/dev/null`
->
-> The exit status is what's used to see if content is present -- and
-> currently any failure even a failure to connect is taken to mean it's not
-> present. --[[Joey]]
-
-hm... thats interesting, git annex drop and git annex copy check for different hashes on the same file at the same remote...
-
-git annex drop -d tools/md5_sha1_utility.exe
-> Running: sh ["-c","rsync --quiet 'REMOVED_HOST:annex/work/JF/z7/'\"'\"'GPGHMACSHA1--7ffb3840f0e37aee964352e98808403655e8473a/GPGHMACSHA1--7ffb3840f0e37aee964352e98808403655e8473a'\"'\"'' 2>/dev/null"]
-
-git annex copy --to remoteserver -d tools/md5_sha1_utility.exe
-> Running: sh ["-c","rsync --quiet 'REMOVED_HOST:annex/work/1F/PQ/'\"'\"'GPGHMACSHA1--ff075e57f649300c5698e346be74fb6e22d70e35/GPGHMACSHA1--ff075e57f649300c5698e346be74fb6e22d70e35'\"'\"'' 2>/dev/null"]
-
-And yes, only the hash *annex copy* is checking for exists on the remote side. --[[gebi]]
-
-> Ok, this is due to too aggressive caching of the decrypted cipher
-> for a remote. When dopping, it decrypts localserver's cipher,
-> caches it, and then when checking remoteserver it says hey,
-> here's an already decrypted cipher -- it must be the right one!
->
-> Problem reproduced here, and fixed. [[done]] --[[Joey]]
-
-THX Joey! -- [[gebi]]
diff --git a/doc/bugs/git-annex_merge_stalls.mdwn b/doc/bugs/git-annex_merge_stalls.mdwn
index 98615e352..80330a822 100644
--- a/doc/bugs/git-annex_merge_stalls.mdwn
+++ b/doc/bugs/git-annex_merge_stalls.mdwn
@@ -14,3 +14,5 @@ Running git-annex merge shows the output "git-annex merge ", followed by a blink
dtruss output at https://www.dropbox.com/s/4b3yqn7ajfz5el2/annex-merge.log
[[!meta title="no indication when git-annex is stuck waiting for a lock"]]
+
+[[!tag confirmed]]
diff --git a/doc/bugs/git-annex_on_NAS_eats_all_memory.mdwn b/doc/bugs/git-annex_on_NAS_eats_all_memory.mdwn
new file mode 100644
index 000000000..080291fc3
--- /dev/null
+++ b/doc/bugs/git-annex_on_NAS_eats_all_memory.mdwn
@@ -0,0 +1,35 @@
+### Please describe the problem.
+
+"Git annex sync" stopped working when syncing my NAS to my Laptop, it just eats up all the memory on the NAS without any result. When running the debug mode I found out that it stops working when it tries to run "git-annex-shell 'configlist' 'mygitannexfolder'".
+That's the first command to be run on the NAS over ssh.
+
+I traced the problem down and the following command also won't work without any output just eating up all memory:
+ssh myuser@mynas "git-annex-shell 'configlist' 'mygitannexfolder'"
+
+But when I log in to the NAS and run the git-annex-shell script inside the .ssh folder with exactly the same command, it works perfectly and returns the uuid and so on.
+
+### What steps will reproduce the problem?
+Execute on PC (doesn't work, just uses all memory and crashes): ssh myuser@mynas "git-annex-shell 'configlist' 'mygitannexfolder'"
+Execute on NAS (should work): ./.ssh/git-annex-shell "git-annex-shell 'configlist' 'mygitannexfolder'"
+
+
+### What version of git-annex are you using? On what operating system?
+git-annex version: 5.20140412ubuntu1
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+
+and the current bundle on the NAS
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
diff --git a/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_1_0201600e27f38c5d8ee3774a827cc7a9._comment b/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_1_0201600e27f38c5d8ee3774a827cc7a9._comment
new file mode 100644
index 000000000..7ef80df74
--- /dev/null
+++ b/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_1_0201600e27f38c5d8ee3774a827cc7a9._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-10T16:04:09Z"
+ content="""
+What kind of NAS is it, and how did you install git-annex? In particular,
+how did you arrange for git-annex-shell to be in PATH when sshing into the
+NAS?
+
+My guess is that you have done something that is causing git-annex-shell to
+not be run with the versions of libraries it needs. Normally its wrapper
+script sets this up.
+"""]]
diff --git a/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_3_70ae89522c001bbe2aa10531e66423be._comment b/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_3_70ae89522c001bbe2aa10531e66423be._comment
new file mode 100644
index 000000000..b1d810d58
--- /dev/null
+++ b/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_3_70ae89522c001bbe2aa10531e66423be._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlmLuHhscJsoAqb9q0N3LdtHum6LjY1LK4"
+ nickname="Markus"
+ subject="comment 3"
+ date="2015-02-11T16:22:58Z"
+ content="""
+git-annex-shell-cgit-annex-shell doesn't even exist in git-annex-shell
+
+when I run runshell directly being logged in per ssh, it's the same command but sh/sh is run instead of git-annex-shell/git-annex-shell-cgit-annex-shell but I don't know how the shell to be run is selected
+"""]]
diff --git a/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_4_3b226c7ce28f1caee2d5e568d91c96bc._comment b/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_4_3b226c7ce28f1caee2d5e568d91c96bc._comment
new file mode 100644
index 000000000..dc9c1ce1b
--- /dev/null
+++ b/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_4_3b226c7ce28f1caee2d5e568d91c96bc._comment
@@ -0,0 +1,24 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2015-02-11T16:48:58Z"
+ content="""
+You seem to have catted /proc/pid/cmdline, so the parameters are all
+mashed together without the separating `\0` being visible. Not the best way
+to examine a process. Use `ps`.
+
+It may be that the --library-path parameter is too long and is being
+truncated. That's what appears to be the case when it ends at
+"/shimmed/git-annex-shell/git-annex-shell-c".
+
+However, Linux's command-line length limits are much much longer than this
+command line, so it shouldn't be truncated. And, I don't know why it would
+only be truncated when the script is called by ssh.
+
+I suggest that you edit `git-annex.linux/git-annex-shell` and
+`git-annex.linux/runshell` and `git-annex.linux/bin/git-annex-shell` ; make
+the first line of each shell script be "#!/bin/sh -x".
+
+Then you can try running it again via ssh and on the NAS, and paste the
+debug output.
+"""]]
diff --git a/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_4_46d66ab3216594fbe808c95baddba02f._comment b/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_4_46d66ab3216594fbe808c95baddba02f._comment
new file mode 100644
index 000000000..3189c3f51
--- /dev/null
+++ b/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_4_46d66ab3216594fbe808c95baddba02f._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlmLuHhscJsoAqb9q0N3LdtHum6LjY1LK4"
+ nickname="Markus"
+ subject="cmdline of neverending process"
+ date="2015-02-11T11:17:03Z"
+ content="""
+It's a DS414 Synology NAS. I followed this tutorial:
+http://git-annex.branchable.com/tips/Synology_NAS_and_git_annex/ and I've run runshell to create those two scripts inside the .ssh folder.
+
+I'm using the pubkey authentication with separate keys (just as described). Thus git-annex-shell in the .ssh script is run, when git-annex on my laptop tries to connect by ssh.
+
+This is the cmdline argument of the process that eats up all memory without finishing:
+/volume1/homes/admin/git-annex.linux//lib/ld-linux.so.3--library-path/volume1/homes/admin/git-annex.linux//etc/ld.so.conf.d:/volume1/homes/admin/git-annex.linux//usr/lib/arm-linux-gnueabi/audit:/volume1/homes/admin/git-annex.linux//usr/lib/arm-linux-gnueabi/gconv:/volume1/homes/admin/git-annex.linux//usr/lib:/volume1/homes/admin/git-annex.linux//usr/lib/arm-linux-gnueabi:/volume1/homes/admin/git-annex.linux//lib:/volume1/homes/admin/git-annex.linux//lib/arm-linux-gnueabi:/volume1/homes/admin/git-annex.linux/shimmed/git-annex-shell/git-annex-shell-cgit-annex-shell 'configlist' '/volume1/homes/admin/GitAnnex'
+"""]]
diff --git a/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_5_cc24b3cc44e66c8dce7448daa2fa7682._comment b/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_5_cc24b3cc44e66c8dce7448daa2fa7682._comment
new file mode 100644
index 000000000..61082cfee
--- /dev/null
+++ b/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_5_cc24b3cc44e66c8dce7448daa2fa7682._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlmLuHhscJsoAqb9q0N3LdtHum6LjY1LK4"
+ nickname="Markus"
+ subject="comment 5"
+ date="2015-02-12T17:19:40Z"
+ content="""
+Running git annex sync on my Laptop:
++ cmd=git-annex-shell
++ shift 1
++ exec git-annex-shell -c \"git-annex-shell 'configlist' '/volume1/homes/admin/GitAnnex'\"
++ exec /volume1/homes/admin/git-annex.linux//lib/ld-linux.so.3 --library-path /volume1/homes/admin/git-annex.linux//etc/ld.so.conf.d:/volume1/homes/admin/git-annex.linux//usr/lib/arm-linux-gnueabi/audit:/volume1/homes/admin/git-annex.linux//usr/lib/arm-linux-gnueabi/gconv:/volume1/homes/admin/git-annex.linux//usr/lib:/volume1/homes/admin/git-annex.linux//usr/lib/arm-linux-gnueabi:/volume1/homes/admin/git-annex.linux//lib:/volume1/homes/admin/git-annex.linux//lib/arm-linux-gnueabi: /volume1/homes/admin/git-annex.linux/shimmed/git-annex-shell/git-annex-shell -c \"git-annex-shell 'configlist' '/volume1/homes/admin/GitAnnex'\"
+
+If I copy the last command and run it directly on the NAS it works like a charm. That's so ridiculous.
+"""]]
diff --git a/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_6_2ad3d0960929533fef8f827bbf06f085._comment b/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_6_2ad3d0960929533fef8f827bbf06f085._comment
new file mode 100644
index 000000000..01900e69f
--- /dev/null
+++ b/doc/bugs/git-annex_on_NAS_eats_all_memory/comment_6_2ad3d0960929533fef8f827bbf06f085._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 6"""
+ date="2015-02-12T18:20:39Z"
+ content="""
+Does it work if ssh allocates a pseudo-tty?
+
+ssh -t myuser@mynas "git-annex-shell 'configlist' 'mygitannexfolder'"
+
+There must be some fundamental difference in the environment between the
+same command being run over ssh and at the console that is making it behave
+differently one way than the other. It could be the pseudo-tty, or an
+environment variable, or a different user account, or whatever.
+
+I think that the only way to get to the bottom of this problem is going to be
+finding out what the difference is. (Or perhaps stracing it to see what
+it's doing when it uses so much memory.)
+"""]]
diff --git a/doc/bugs/git-annex_on_crippled_filesystem_can_still_failed_due_to_case_.mdwn b/doc/bugs/git-annex_on_crippled_filesystem_can_still_failed_due_to_case_.mdwn
deleted file mode 100644
index 53b993de2..000000000
--- a/doc/bugs/git-annex_on_crippled_filesystem_can_still_failed_due_to_case_.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-What steps will reproduce the problem?
-
- $ git clone ~/corbeau/travail/ travail
- Cloning into 'travail'...
- done.
- Checking out files: 100% (8670/8670), done.
- $ cd travail
- $ git annex init "portable USB drive"
- init portable USB drive
- Detected a crippled filesystem.
-
- Enabling direct mode.
-
- git-annex: /media/LACIE/travail/.git/annex/objects/k1: createDirectory: already exists (File exists)
- failed
- git-annex: init: 1 failed
-
-What version of git-annex are you using? On what operating system?
- $ apt-cache policy git-annex
- git-annex:
- Installé : 3.20130216
-
-This on a amd64 debian sid recently updated
-
-
-Please provide any additional information below.
-
-The problem is that git annex already created a /media/LACIE/travail/.git/annex/objects/K1 file (same name in uppercase) and FAT isn't realy case sensitive.
-
-
-> I *think* I've found the place that used createDirectory
-> rather than createDirectoryIfMissing and fixed it. [[done]] --[[Joey]]
diff --git a/doc/bugs/git-annex_on_crippled_filesystem_can_still_failed_due_to_case_/comment_1_850695231926dfe94f11342d3af7f63c._comment b/doc/bugs/git-annex_on_crippled_filesystem_can_still_failed_due_to_case_/comment_1_850695231926dfe94f11342d3af7f63c._comment
deleted file mode 100644
index a11bb3bf5..000000000
--- a/doc/bugs/git-annex_on_crippled_filesystem_can_still_failed_due_to_case_/comment_1_850695231926dfe94f11342d3af7f63c._comment
+++ /dev/null
@@ -1,54 +0,0 @@
-[[!comment format=mdwn
- username="http://hands.com/~phil/"
- nickname="fil"
- subject="still seems to be a problem with 4.20130323"
- date="2013-03-31T16:49:47Z"
- content="""
-Hi Joey,
-
-Seems that I can still get this to choke on a VFAT system:
-
- poker% sudo mount -o loop,gid=25,fmask=0117,dmask=0007 /home/phil/nobackup/annextest-image/vfat-annex-test.img /mnt
- poker% mount | grep /mnt
- /home/phil/nobackup/annextest-image/vfat-annex-test.img on /mnt type vfat (rw,relatime,gid=25,fmask=0117,dmask=0007,allow_utime=0020,codepage=cp437,iocharset=utf8,shortname=mixed,errors=remount-ro)
- poker% cd /mnt
- poker% git init
- Initialized empty Git repository in /mnt/.git/
- poker% git annex init simple\ test
- init simple test
- Detected a crippled filesystem.
-
- Enabling direct mode.
- ok
- (Recording state in git...)
- poker% for i in $(seq 1 42) ; do echo $i > $i.txt ; done
- poker% git annex add *.txt
- add 10.txt (checksum...) ok
- add 11.txt (checksum...) ok
- ...
- add 40.txt (checksum...) ok
- add 41.txt (checksum...) ok
- add 42.txt (checksum...)
- git-annex: /mnt/.git/annex/objects/Wj/56: createDirectory: does not exist (No such file or directory)
- failed
- add 4.txt (checksum...) ok
- add 5.txt (checksum...) ok
- add 6.txt (checksum...) ok
- add 7.txt (checksum...) ok
- add 8.txt (checksum...) ok
- add 9.txt (checksum...) ok
- (Recording state in git...)
- git-annex: add: 1 failed
- poker% ls -ld /mnt/.git/annex/objects/[wW][jJ]
- drwxrwx--- 3 root floppy 4096 Mar 31 17:21 /mnt/.git/annex/objects/wJ
- poker% git annex version
- git-annex version: 4.20130323
-
-perhaps I shouldn't be trying that anyway -- I was wanting to create a direct mode repo on each of my camera's SD cards, which the camera will happily ignore, but allows me to add new photos to the repo by plugging the card into my laptop, and then copy them elsewhere using git annex magic. I'm hoping that would allow me to leave favourite photos on the camera, for showing off photos when without my laptop, while not becoming confused about which photos I've already got copies of and can safely delete (with annex's drop telling me when I try to delete things I shouldn't).
-
-The reason not to use a special directory remote (at least I think this is right judging from the wiki info) is that the camera won't grok the filenames under .git/annex/... so the photos need to be left with their names as created by the camera.
-
-Anyway, while experimenting with that idea, I bumped into the above, which seems like a continuation of this bug.
-
-_Update:_ Just tried that again, having cloned the git and rebuilt locally, and I'm still seeing the same behaviour with the very latest (i.e. 11b3942ef2aa13fe38d79e91392fc43d65a7e019)
-"""]]
diff --git a/doc/bugs/git-annex_on_crippled_filesystem_can_still_failed_due_to_case_/comment_2_c2a2f801a3e18ad597ff0acf2f104557._comment b/doc/bugs/git-annex_on_crippled_filesystem_can_still_failed_due_to_case_/comment_2_c2a2f801a3e18ad597ff0acf2f104557._comment
deleted file mode 100644
index 8ab32ede2..000000000
--- a/doc/bugs/git-annex_on_crippled_filesystem_can_still_failed_due_to_case_/comment_2_c2a2f801a3e18ad597ff0acf2f104557._comment
+++ /dev/null
@@ -1,22 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 2"
- date="2013-04-04T19:47:50Z"
- content="""
-Whups, this bug report was closed; I almost missed this new bug and test case.
-
-So, on these filesystems that are horribly confused about case, it's possible for `mkdir FOO` to fail with \"already exists\", because there is a directory named `foo` ... but then `mkdir FOO/bar` fails with \"no such file or directory\".
-
-That is an intractable problem. It follows that it's simply not safe to use mixed case files on such a filesystem. You will always shoot your later self in the foot. (I personally think it's outright foolish to use a filesystem with such horrible semantics at all, but whatever.)
-
-So.. I took a good look at this, and it turns out that
-
-* since this is a crippled filesystem anyway, git-annex doesn't use symlinks on it
-* so there's no reason to use the mixed case hash directories that we're stuck using to avoid breaking everyone's symlinks to the content
-* so we can do what is already done for all bare repos, and make non-bare repos on crippled filesystems use the all-lower case hash directories
-* which are, happily, all 3 letters long, so they cannot conflict with mixed case hash directories
-* so I was able to 100% fix this and even resuming `git annex add` in the test case will recover and it will all just work.
-
-Yay!
-"""]]
diff --git a/doc/bugs/git-annex_quit_unexpectedly___40__macosx__41__.mdwn b/doc/bugs/git-annex_quit_unexpectedly___40__macosx__41__.mdwn
deleted file mode 100644
index a682c12cc..000000000
--- a/doc/bugs/git-annex_quit_unexpectedly___40__macosx__41__.mdwn
+++ /dev/null
@@ -1,358 +0,0 @@
-### Please describe the problem.
-
-I installed the git-annex app for MacOSX (10.8.4)
-
-### What steps will reproduce the problem?
-
-- Created a repository
-- In the configuration, entered my google username/password
-
-### What version of git-annex are you using? On what operating system?
-
-bundle version: 0.0.1
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-Process: git-annex [12934]
-Path: /Applications/git-annex.app/Contents/MacOS/bundle/git-annex
-Identifier: git-annex
-Version: 0
-Code Type: X86-64 (Native)
-Parent Process: ??? [1]
-User ID: 502
-
-Date/Time: 2013-08-17 12:27:12.495 -0700
-OS Version: Mac OS X 10.8.4 (12E55)
-Report Version: 10
-Sleep/Wake UUID: 6DB42174-0147-4C8B-B83E-F305823297CA
-
-Interval Since Last Report: 294009 sec
-Crashes Since Last Report: 4
-Per-App Crashes Since Last Report: 4
-Anonymous UUID: 0D492F72-DAE5-360C-A6D6-ECB38FD53115
-
-Crashed Thread: 3
-
-Exception Type: EXC_BAD_ACCESS (SIGSEGV)
-Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000
-
-VM Regions Near 0:
--->
- __TEXT 000000010b5e6000-000000010e08d000 [ 42.7M] r-x/rwx SM=COW /Applications/git-annex.app/Contents/MacOS/bundle/git-annex
-
-Thread 0:: Dispatch queue: com.apple.main-thread
-0 libsystem_kernel.dylib 0x00007fff931400fa __psynch_cvwait + 10
-1 libsystem_c.dylib 0x00007fff86adffe9 _pthread_cond_wait + 869
-2 git-annex 0x000000010df20179 0x10b5e6000 + 43229561
-3 git-annex 0x000000010defc8eb 0x10b5e6000 + 43084011
-4 git-annex 0x000000010df0bc86 0x10b5e6000 + 43146374
-5 git-annex 0x000000010df0c6fb 0x10b5e6000 + 43149051
-6 git-annex 0x000000010df07b46 0x10b5e6000 + 43129670
-7 git-annex 0x000000010df07c69 0x10b5e6000 + 43129961
-8 git-annex 0x000000010bcff518 0x10b5e6000 + 7443736
-9 libdyld.dylib 0x00007fff8c3e47e1 start + 1
-
-Thread 1:
-0 libsystem_kernel.dylib 0x00007fff931400fa __psynch_cvwait + 10
-1 libsystem_c.dylib 0x00007fff86adffe9 _pthread_cond_wait + 869
-2 git-annex 0x000000010df20179 0x10b5e6000 + 43229561
-3 git-annex 0x000000010defc8eb 0x10b5e6000 + 43084011
-4 git-annex 0x000000010df0bc86 0x10b5e6000 + 43146374
-5 git-annex 0x000000010df0c5e0 0x10b5e6000 + 43148768
-6 libsystem_c.dylib 0x00007fff86adb7a2 _pthread_start + 327
-7 libsystem_c.dylib 0x00007fff86ac81e1 thread_start + 13
-
-Thread 2:
-0 libsystem_kernel.dylib 0x00007fff931400fa __psynch_cvwait + 10
-1 libsystem_c.dylib 0x00007fff86adffe9 _pthread_cond_wait + 869
-2 git-annex 0x000000010df20179 0x10b5e6000 + 43229561
-3 git-annex 0x000000010defc8eb 0x10b5e6000 + 43084011
-4 git-annex 0x000000010df0bc86 0x10b5e6000 + 43146374
-5 git-annex 0x000000010df0c5e0 0x10b5e6000 + 43148768
-6 libsystem_c.dylib 0x00007fff86adb7a2 _pthread_start + 327
-7 libsystem_c.dylib 0x00007fff86ac81e1 thread_start + 13
-
-Thread 3 Crashed:
-0 libsystem_c.dylib 0x00007fff86ae0bf9 pthread_mutex_lock + 20
-1 H 0x000000010e9fd29f gnutls_system_mutex_lock + 12
-2 H 0x000000010ea7fa29 wrap_nettle_rnd_refresh + 20
-3 H 0x000000010e9fee89 gnutls_deinit + 42
-4 git-annex 0x000000010caf0a3a 0x10b5e6000 + 22063674
-
-Thread 4:
-0 libsystem_kernel.dylib 0x00007fff93140d2a kevent64 + 10
-1 git-annex 0x000000010deab5fa 0x10b5e6000 + 42751482
-
-Thread 5:
-0 libsystem_kernel.dylib 0x00007fff931400fa __psynch_cvwait + 10
-1 libsystem_c.dylib 0x00007fff86adffe9 _pthread_cond_wait + 869
-2 git-annex 0x000000010df20179 0x10b5e6000 + 43229561
-3 git-annex 0x000000010defc8eb 0x10b5e6000 + 43084011
-4 git-annex 0x000000010df0bc86 0x10b5e6000 + 43146374
-5 git-annex 0x000000010df0c5e0 0x10b5e6000 + 43148768
-6 libsystem_c.dylib 0x00007fff86adb7a2 _pthread_start + 327
-7 libsystem_c.dylib 0x00007fff86ac81e1 thread_start + 13
-
-Thread 6:: Dispatch queue: com.apple.libdispatch-manager
-0 libsystem_kernel.dylib 0x00007fff93140d16 kevent + 10
-1 libdispatch.dylib 0x00007fff8e6fedea _dispatch_mgr_invoke + 883
-2 libdispatch.dylib 0x00007fff8e6fe9ee _dispatch_mgr_thread + 54
-
-Thread 7:
-0 libsystem_kernel.dylib 0x00007fff9313e686 mach_msg_trap + 10
-1 libsystem_kernel.dylib 0x00007fff9313dc42 mach_msg + 70
-2 com.apple.CoreFoundation 0x00007fff8c1e2233 __CFRunLoopServiceMachPort + 195
-3 com.apple.CoreFoundation 0x00007fff8c1e7916 __CFRunLoopRun + 1078
-4 com.apple.CoreFoundation 0x00007fff8c1e70e2 CFRunLoopRunSpecific + 290
-5 com.apple.CoreFoundation 0x00007fff8c1f5dd1 CFRunLoopRun + 97
-6 git-annex 0x000000010c72b3ec 0x10b5e6000 + 18109420
-7 libsystem_c.dylib 0x00007fff86adb7a2 _pthread_start + 327
-8 libsystem_c.dylib 0x00007fff86ac81e1 thread_start + 13
-
-Thread 8:
-0 libsystem_kernel.dylib 0x00007fff9313e686 mach_msg_trap + 10
-1 libsystem_kernel.dylib 0x00007fff9313dc42 mach_msg + 70
-2 com.apple.CoreFoundation 0x00007fff8c1e2233 __CFRunLoopServiceMachPort + 195
-3 com.apple.CoreFoundation 0x00007fff8c1e7916 __CFRunLoopRun + 1078
-4 com.apple.CoreFoundation 0x00007fff8c1e70e2 CFRunLoopRunSpecific + 290
-5 com.apple.CoreFoundation 0x00007fff8c1f5dd1 CFRunLoopRun + 97
-6 git-annex 0x000000010c72b3ec 0x10b5e6000 + 18109420
-7 libsystem_c.dylib 0x00007fff86adb7a2 _pthread_start + 327
-8 libsystem_c.dylib 0x00007fff86ac81e1 thread_start + 13
-
-Thread 9:
-0 libsystem_kernel.dylib 0x00007fff9313e686 mach_msg_trap + 10
-1 libsystem_kernel.dylib 0x00007fff9313dc42 mach_msg + 70
-2 com.apple.CoreFoundation 0x00007fff8c1e2233 __CFRunLoopServiceMachPort + 195
-3 com.apple.CoreFoundation 0x00007fff8c1e7916 __CFRunLoopRun + 1078
-4 com.apple.CoreFoundation 0x00007fff8c1e70e2 CFRunLoopRunSpecific + 290
-5 com.apple.CoreFoundation 0x00007fff8c1f5dd1 CFRunLoopRun + 97
-6 git-annex 0x000000010c72b3ec 0x10b5e6000 + 18109420
-7 libsystem_c.dylib 0x00007fff86adb7a2 _pthread_start + 327
-8 libsystem_c.dylib 0x00007fff86ac81e1 thread_start + 13
-
-Thread 3 crashed with X86 Thread State (64-bit):
- rax: 0x000000010eaaca28 rbx: 0x00007f9dc38000c0 rcx: 0x000000010f87ce00 rdx: 0x000000010e3c28f0
- rdi: 0x0000000000000000 rsi: 0x001c4500001c4500 rbp: 0x000000010f87ce10 rsp: 0x000000010f87cdd0
- r8: 0x0000000000002060 r9: 0x000000010f87ce00 r10: 0x000000010eabf328 r11: 0x000000010e9fee5f
- r12: 0x000000010f5585d8 r13: 0x000000010e3c2798 r14: 0x0000000000000000 r15: 0x000000010f548140
- rip: 0x00007fff86ae0bf9 rfl: 0x0000000000010202 cr2: 0x0000000000000000
-Logical CPU: 0
-
-Binary Images:
- 0x10b5e6000 - 0x10e08cff7 +git-annex (0) <2C4C13B3-4830-322A-A144-9E51B386EB1E> /Applications/git-annex.app/Contents/MacOS/bundle/git-annex
- 0x10e85a000 - 0x10e957ff7 +E (22.3) <47B09CB2-C636-3024-8B55-6040F7829B4C> /Applications/git-annex.app/Contents/MacOS/bundle/E
- 0x10e990000 - 0x10e9a4fff +F (0) <FA90B1B1-A866-3A6C-BB97-06955F4C8C0B> /Applications/git-annex.app/Contents/MacOS/bundle/F
- 0x10e9ab000 - 0x10e9d8ff7 +G (0) <D80652C0-9A55-351C-8EAF-2364359BA0A2> /Applications/git-annex.app/Contents/MacOS/bundle/G
- 0x10e9de000 - 0x10eaabfdf +H (0) <29C3AFF5-8EFB-3A16-81F6-0DA6CF2675A6> /Applications/git-annex.app/Contents/MacOS/bundle/H
- 0x10eadd000 - 0x10eaefff7 +B (43) <2A1551E8-A272-3DE5-B692-955974FE1416> /Applications/git-annex.app/Contents/MacOS/bundle/B
- 0x10eaf7000 - 0x10ebecfff +D (34) <FEE8B996-EB44-37FA-B96E-D379664DEFE1> /Applications/git-annex.app/Contents/MacOS/bundle/D
- 0x10ec01000 - 0x10ed1992f +I (532.2) <90D31928-F48D-3E37-874F-220A51FD9E37> /Applications/git-annex.app/Contents/MacOS/bundle/I
- 0x10ed3d000 - 0x10ef3dfff +S (491.11.3) <5783D305-04E8-3D17-94F7-1CEAFA975240> /Applications/git-annex.app/Contents/MacOS/bundle/S
- 0x10f048000 - 0x10f06dff7 +Z (26) <D86169F3-9F31-377A-9AF3-DB17142052E4> /Applications/git-annex.app/Contents/MacOS/bundle/Z
- 0x10f0a1000 - 0x10f109ff7 +0A (65.1) <20E31B90-19B9-3C2A-A9EB-474E08F9FE05> /Applications/git-annex.app/Contents/MacOS/bundle/0A
- 0x10f163000 - 0x10f1ccfff +0B (56) <EAA2B53E-EADE-39CF-A0EF-FB9D4940672A> /Applications/git-annex.app/Contents/MacOS/bundle/0B
- 0x10f235000 - 0x10f248fff +T (0) <C8970714-4C86-3BE6-94D6-4835DCC8A003> /Applications/git-annex.app/Contents/MacOS/bundle/T
- 0x10f257000 - 0x10f264ff7 +U (0) <DCFF385A-090B-3407-868C-91544A2EFEE1> /Applications/git-annex.app/Contents/MacOS/bundle/U
- 0x10f26f000 - 0x10f291ff7 +V (0) <51B317C7-94CC-3C58-B515-924BB3AF0BCC> /Applications/git-annex.app/Contents/MacOS/bundle/V
- 0x10f29b000 - 0x10f2a8ff7 +W (0) <91CF16BE-027F-3FE6-B1EE-6B8BFD51FC1B> /Applications/git-annex.app/Contents/MacOS/bundle/W
- 0x10f2b4000 - 0x10f310fd7 +X (0) <84D934AF-A321-36C0-BBCF-CD3FDAEB0B95> /Applications/git-annex.app/Contents/MacOS/bundle/X
- 0x7fff6b1e6000 - 0x7fff6b21a93f dyld (210.2.3) <36CAA36E-72BC-3E48-96D9-B96A2DF77730> /usr/lib/dyld
- 0x7fff8652a000 - 0x7fff865d0ff7 com.apple.CoreServices.OSServices (557.6 - 557.6) <FFDDD2D8-690D-388F-A48F-4750A792D2CD> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices
- 0x7fff865d1000 - 0x7fff865e8fff libGL.dylib (8.9.2) <B8E5948D-BCF2-3727-B74E-D74B8EDC82D6> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
- 0x7fff865e9000 - 0x7fff86610fff com.apple.framework.familycontrols (4.1 - 410) <50F5A52C-8FB6-300A-977D-5CFDE4D5796B> /System/Library/PrivateFrameworks/FamilyControls.framework/Versions/A/FamilyControls
- 0x7fff86611000 - 0x7fff8663cfff libxslt.1.dylib (11.3) <441776B8-9130-3893-956F-39C85FFA644F> /usr/lib/libxslt.1.dylib
- 0x7fff86649000 - 0x7fff86698ff7 libcorecrypto.dylib (106.2) <CE0C29A3-C420-339B-ADAA-52F4683233CC> /usr/lib/system/libcorecrypto.dylib
- 0x7fff8669d000 - 0x7fff866a3fff com.apple.DiskArbitration (2.5.2 - 2.5.2) <C713A35A-360E-36CE-AC0A-25C86A3F50CA> /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration
- 0x7fff866a4000 - 0x7fff86ac1fff FaceCoreLight (2.4.1) <DDAFFD7A-D312-3407-A010-5AEF3E17831B> /System/Library/PrivateFrameworks/FaceCoreLight.framework/Versions/A/FaceCoreLight
- 0x7fff86ac7000 - 0x7fff86b93ff7 libsystem_c.dylib (825.26) <4C9EB006-FE1F-3F8F-8074-DFD94CF2CE7B> /usr/lib/system/libsystem_c.dylib
- 0x7fff86d50000 - 0x7fff86da1ff7 com.apple.SystemConfiguration (1.12.2 - 1.12.2) <581BF463-C15A-363B-999A-E830222FA925> /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration
- 0x7fff86dee000 - 0x7fff86deefff com.apple.Accelerate.vecLib (3.8 - vecLib 3.8) <B5A18EE8-DF81-38DD-ACAF-7076B2A26225> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib
- 0x7fff86def000 - 0x7fff86df4fff com.apple.OpenDirectory (10.8 - 151.10) <CF44120B-9B01-32DD-852E-C9C0E1243FC0> /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory
- 0x7fff86df5000 - 0x7fff86df6fff libDiagnosticMessagesClient.dylib (8) <8548E0DC-0D2F-30B6-B045-FE8A038E76D8> /usr/lib/libDiagnosticMessagesClient.dylib
- 0x7fff86e0a000 - 0x7fff87201fff libLAPACK.dylib (1073.4) <D632EC8B-2BA0-3853-800A-20DA00A1091C> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
- 0x7fff87622000 - 0x7fff87650ff7 libsystem_m.dylib (3022.6) <B434BE5C-25AB-3EBD-BAA7-5304B34E3441> /usr/lib/system/libsystem_m.dylib
- 0x7fff8766c000 - 0x7fff8769dff7 com.apple.DictionaryServices (1.2 - 184.4) <FB0540FF-5034-3591-A28D-6887FBC220F7> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices
- 0x7fff8769e000 - 0x7fff8769efff libkeymgr.dylib (25) <CC9E3394-BE16-397F-926B-E579B60EE429> /usr/lib/system/libkeymgr.dylib
- 0x7fff87732000 - 0x7fff87754ff7 libxpc.dylib (140.43) <70BC645B-6952-3264-930C-C835010CCEF9> /usr/lib/system/libxpc.dylib
- 0x7fff87755000 - 0x7fff877d7ff7 com.apple.Heimdal (3.0 - 2.0) <C94B0C6C-1320-35A1-8143-FE252E7B2A08> /System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal
- 0x7fff877d8000 - 0x7fff87859fff com.apple.Metadata (10.7.0 - 707.11) <2DD25313-420D-351A-90F1-300E95C970CA> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata
- 0x7fff87cbf000 - 0x7fff87d19fff com.apple.print.framework.PrintCore (8.3 - 387.2) <5BA0CBED-4D80-386A-9646-F835C9805B71> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore
- 0x7fff87e27000 - 0x7fff87e34ff7 com.apple.NetAuth (4.0 - 4.0) <F5BC7D7D-AF28-3C83-A674-DADA48FF7810> /System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth
- 0x7fff87f54000 - 0x7fff87f68fff com.apple.speech.synthesis.framework (4.1.12 - 4.1.12) <94EDF2AB-809C-3D15-BED5-7AD45B2A7C16> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis
- 0x7fff87f77000 - 0x7fff87f7dff7 libunwind.dylib (35.1) <21703D36-2DAB-3D8B-8442-EAAB23C060D3> /usr/lib/system/libunwind.dylib
- 0x7fff87fab000 - 0x7fff87fabfff com.apple.Accelerate (1.8 - Accelerate 1.8) <6AD48543-0864-3D40-80CE-01F184F24B45> /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate
- 0x7fff88161000 - 0x7fff88162ff7 libSystem.B.dylib (169.3) <9089D72D-E714-31E1-80C8-698A8E8B05AD> /usr/lib/libSystem.B.dylib
- 0x7fff88167000 - 0x7fff88205ff7 com.apple.ink.framework (10.8.2 - 150) <3D8D16A2-7E01-3EA1-B637-83A36D353308> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink
- 0x7fff88222000 - 0x7fff88223ff7 libsystem_sandbox.dylib (220.3) <B739DA63-B675-387A-AD84-412A651143C0> /usr/lib/system/libsystem_sandbox.dylib
- 0x7fff88224000 - 0x7fff88228ff7 com.apple.TCC (1.0 - 1) <F2F3B753-FC73-3543-8BBE-859FDBB4D6A6> /System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC
- 0x7fff88229000 - 0x7fff88230fff libcopyfile.dylib (89) <876573D0-E907-3566-A108-577EAD1B6182> /usr/lib/system/libcopyfile.dylib
- 0x7fff88a6e000 - 0x7fff88a8dff7 libresolv.9.dylib (51) <0882DC2D-A892-31FF-AD8C-0BB518C48B23> /usr/lib/libresolv.9.dylib
- 0x7fff88a8e000 - 0x7fff88aa1ff7 libbsm.0.dylib (32) <F497D3CE-40D9-3551-84B4-3D5E39600737> /usr/lib/libbsm.0.dylib
- 0x7fff88bbd000 - 0x7fff88bbdfff com.apple.ApplicationServices (45 - 45) <A3ABF20B-ED3A-32B5-830E-B37831A45A80> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
- 0x7fff88bce000 - 0x7fff88bf6fff libJPEG.dylib (850) <DC750E1E-BD07-339B-A4A6-D86BFE969F68> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib
- 0x7fff88bf7000 - 0x7fff88bf9fff libquarantine.dylib (52.1) <143B726E-DF47-37A8-90AA-F059CFD1A2E4> /usr/lib/system/libquarantine.dylib
- 0x7fff88fe0000 - 0x7fff8933ffff com.apple.Foundation (6.8 - 945.18) <1D7E58E6-FA3A-3CE8-AC85-B9D06B8C0AA0> /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
- 0x7fff89340000 - 0x7fff89575ff7 com.apple.CoreData (106.1 - 407.7) <A676E1A4-2144-376B-92B8-B450DD1D78E5> /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
- 0x7fff89576000 - 0x7fff8957dfff libGFXShared.dylib (8.9.2) <398F8D57-EC82-3E13-AC8E-470BE19237D7> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib
- 0x7fff895d4000 - 0x7fff8a201fff com.apple.AppKit (6.8 - 1187.39) <199962F0-B06B-3666-8FD5-5C90374BA16A> /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
- 0x7fff8a202000 - 0x7fff8a519ff7 com.apple.CoreServices.CarbonCore (1037.6 - 1037.6) <1E567A52-677F-3168-979F-5FBB0818D52B> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
- 0x7fff8a5e0000 - 0x7fff8a5e7fff com.apple.NetFS (5.0 - 4.0) <82E24B9A-7742-3DA3-9E99-ED267D98C05E> /System/Library/Frameworks/NetFS.framework/Versions/A/NetFS
- 0x7fff8a5e8000 - 0x7fff8a63fff7 com.apple.ScalableUserInterface (1.0 - 1) <F1D43DFB-1796-361B-AD4B-39F1EED3BE19> /System/Library/Frameworks/QuartzCore.framework/Versions/A/Frameworks/ScalableUserInterface.framework/Versions/A/ScalableUserInterface
- 0x7fff8a71b000 - 0x7fff8a767ff7 libauto.dylib (185.4) <AD5A4CE7-CB53-313C-9FAE-673303CC2D35> /usr/lib/libauto.dylib
- 0x7fff8a768000 - 0x7fff8a768fff libOpenScriptingUtil.dylib (148.3) <F8681222-0969-3B10-8BCE-C55A4B9C520C> /usr/lib/libOpenScriptingUtil.dylib
- 0x7fff8a7e7000 - 0x7fff8a808ff7 libCRFSuite.dylib (33) <736ABE58-8DED-3289-A042-C25AF7AE5B23> /usr/lib/libCRFSuite.dylib
- 0x7fff8a809000 - 0x7fff8a815fff com.apple.CrashReporterSupport (10.8.3 - 418) <DE6AFE16-D97E-399D-82ED-3522C773C36E> /System/Library/PrivateFrameworks/CrashReporterSupport.framework/Versions/A/CrashReporterSupport
- 0x7fff8a816000 - 0x7fff8b1a64af com.apple.CoreGraphics (1.600.0 - 332) <5AB32E51-9154-3733-B83B-A9A748652847> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
- 0x7fff8b1a7000 - 0x7fff8b1befff com.apple.CFOpenDirectory (10.8 - 151.10) <10F41DA4-AD54-3F52-B898-588D9A117171> /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory
- 0x7fff8b242000 - 0x7fff8b285ff7 com.apple.bom (12.0 - 192) <0BF1F2D2-3648-36B7-BE4B-551A0173209B> /System/Library/PrivateFrameworks/Bom.framework/Versions/A/Bom
- 0x7fff8b286000 - 0x7fff8b2c3fef libGLImage.dylib (8.9.2) <C38649ED-E1C9-315E-9953-F33E8C6A3C89> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib
- 0x7fff8b2c4000 - 0x7fff8b303ff7 com.apple.QD (3.42.1 - 285.1) <77A20C25-EBB5-341C-A05C-5D458B97AD5C> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD
- 0x7fff8b304000 - 0x7fff8b39efff libvMisc.dylib (380.6) <714336EA-1C0E-3735-B31C-19DFDAAF6221> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib
- 0x7fff8b3b8000 - 0x7fff8b566fff com.apple.QuartzCore (1.8 - 304.3) <F450F2DE-2F24-3557-98B6-310E05DAC17F> /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore
- 0x7fff8ba39000 - 0x7fff8ba4cff7 com.apple.LangAnalysis (1.7.0 - 1.7.0) <2F2694E9-A7BC-33C7-B4CF-8EC907DF0FEB> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis
- 0x7fff8bd12000 - 0x7fff8bd1cfff com.apple.speech.recognition.framework (4.1.5 - 4.1.5) <D803919C-3102-3515-A178-61E9C86C46A1> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition
- 0x7fff8c0d6000 - 0x7fff8c0d7ff7 libdnsinfo.dylib (453.19) <14202FFB-C3CA-3FCC-94B0-14611BF8692D> /usr/lib/system/libdnsinfo.dylib
- 0x7fff8c179000 - 0x7fff8c17efff libcompiler_rt.dylib (30) <08F8731D-5961-39F1-AD00-4590321D24A9> /usr/lib/system/libcompiler_rt.dylib
- 0x7fff8c1b2000 - 0x7fff8c39cff7 com.apple.CoreFoundation (6.8 - 744.19) <0F7403CA-2CB8-3D0A-992B-679701DF27CA> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
- 0x7fff8c39d000 - 0x7fff8c3c4ff7 com.apple.PerformanceAnalysis (1.16 - 16) <E4888388-F41B-313E-9CBB-5807D077BDA9> /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/PerformanceAnalysis
- 0x7fff8c3e2000 - 0x7fff8c3e5ff7 libdyld.dylib (210.2.3) <F59367C9-C110-382B-A695-9035A6DD387E> /usr/lib/system/libdyld.dylib
- 0x7fff8c3e6000 - 0x7fff8c3e8fff libCVMSPluginSupport.dylib (8.9.2) <EF1192AC-3357-3A0B-BFAF-6594D7737892> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib
- 0x7fff8c3e9000 - 0x7fff8c484fff com.apple.CoreSymbolication (3.0 - 117) <50716F74-41C2-3BB9-AC16-12C4D4C2DD1E> /System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/CoreSymbolication
- 0x7fff8c75b000 - 0x7fff8c75bfff com.apple.CoreServices (57 - 57) <9DD44CB0-C644-35C3-8F57-0B41B3EC147D> /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
- 0x7fff8cf1f000 - 0x7fff8d094ff7 com.apple.CFNetwork (596.4.3 - 596.4.3) <A57B3308-2F08-3EC3-B4AC-39A3D9F0B9F7> /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
- 0x7fff8d0ae000 - 0x7fff8d0e4fff libsystem_info.dylib (406.17) <4FFCA242-7F04-365F-87A6-D4EFB89503C1> /usr/lib/system/libsystem_info.dylib
- 0x7fff8d0e5000 - 0x7fff8d148ff7 com.apple.audio.CoreAudio (4.1.1 - 4.1.1) <9ACD3AED-6C04-3BBB-AB2A-FC253B16D093> /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio
- 0x7fff8d156000 - 0x7fff8d16cfff com.apple.MultitouchSupport.framework (235.29 - 235.29) <617EC8F1-BCE7-3553-86DD-F857866E1257> /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport
- 0x7fff8d16d000 - 0x7fff8d171fff libGIF.dylib (850) <D4525F87-759C-338C-B283-BB8DE815D3D5> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib
- 0x7fff8d264000 - 0x7fff8d2aeff7 libGLU.dylib (8.9.2) <1B5511FF-1064-3004-A245-972CE5687D37> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib
- 0x7fff8d2b2000 - 0x7fff8d2dcff7 com.apple.CoreVideo (1.8 - 99.4) <E5082966-6D81-3973-A05A-38AA5B85F886> /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo
- 0x7fff8d58d000 - 0x7fff8d591fff com.apple.IOSurface (86.0.4 - 86.0.4) <26F01CD4-B76B-37A3-989D-66E8140542B3> /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface
- 0x7fff8d6de000 - 0x7fff8d78ffff com.apple.LaunchServices (539.9 - 539.9) <07FC6766-778E-3479-8F28-D2C9917E1DD1> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices
- 0x7fff8d7bf000 - 0x7fff8d80eff7 libFontRegistry.dylib (100) <2E03D7DA-9B8F-31BB-8FB5-3D3B6272127F> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib
- 0x7fff8d80f000 - 0x7fff8d88fff7 com.apple.ApplicationServices.ATS (332 - 341.1) <39B53565-FA31-3F61-B090-C787C983142E> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS
- 0x7fff8d94e000 - 0x7fff8d95bfff com.apple.AppleFSCompression (49 - 1.0) <5508344A-2A7E-3122-9562-6F363910A80E> /System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression
- 0x7fff8d95c000 - 0x7fff8d99fff7 com.apple.RemoteViewServices (2.0 - 80.6) <5CFA361D-4853-3ACC-9EFC-A2AC1F43BA4B> /System/Library/PrivateFrameworks/RemoteViewServices.framework/Versions/A/RemoteViewServices
- 0x7fff8dac2000 - 0x7fff8dac8fff libmacho.dylib (829) <BF332AD9-E89F-387E-92A4-6E1AB74BD4D9> /usr/lib/system/libmacho.dylib
- 0x7fff8dac9000 - 0x7fff8db03ff7 com.apple.GSS (3.0 - 2.0) <970CAE00-1437-3F4E-B677-0FDB3714C08C> /System/Library/Frameworks/GSS.framework/Versions/A/GSS
- 0x7fff8db09000 - 0x7fff8db12ff7 com.apple.CommerceCore (1.0 - 26.1) <40A129A8-4E5D-3C7A-B299-8CB203C4C65D> /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Frameworks/CommerceCore.framework/Versions/A/CommerceCore
- 0x7fff8db13000 - 0x7fff8db15fff com.apple.TrustEvaluationAgent (2.0 - 23) <A97D348B-32BF-3E52-8DF2-59BFAD21E1A3> /System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent
- 0x7fff8de6c000 - 0x7fff8de6eff7 libunc.dylib (25) <92805328-CD36-34FF-9436-571AB0485072> /usr/lib/system/libunc.dylib
- 0x7fff8de6f000 - 0x7fff8de8eff7 com.apple.ChunkingLibrary (2.0 - 133.3) <8BEC9AFB-DCAA-37E8-A5AB-24422B234ECF> /System/Library/PrivateFrameworks/ChunkingLibrary.framework/Versions/A/ChunkingLibrary
- 0x7fff8de8f000 - 0x7fff8deeefff com.apple.AE (645.6 - 645.6) <44F403C1-660A-3543-AB9C-3902E02F936F> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE
- 0x7fff8deef000 - 0x7fff8dfecfff libsqlite3.dylib (138.1) <ADE9CB98-D77D-300C-A32A-556B7440769F> /usr/lib/libsqlite3.dylib
- 0x7fff8e06b000 - 0x7fff8e076ff7 com.apple.bsd.ServiceManagement (2.0 - 2.0) <C12962D5-85FB-349E-AA56-64F4F487F219> /System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement
- 0x7fff8e077000 - 0x7fff8e086fff com.apple.opengl (1.8.9 - 1.8.9) <6FD163A7-16CC-3D1F-B4B5-B0FDC4ADBF79> /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
- 0x7fff8e087000 - 0x7fff8e092fff com.apple.CommonAuth (3.0 - 2.0) <7A953C1F-8B18-3E46-9BEA-26D9B5B7745D> /System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth
- 0x7fff8e093000 - 0x7fff8e093fff com.apple.Cocoa (6.7 - 19) <1F77945C-F37A-3171-B22E-F7AB0FCBB4D4> /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
- 0x7fff8e1f3000 - 0x7fff8e1f4fff libsystem_blocks.dylib (59) <D92DCBC3-541C-37BD-AADE-ACC75A0C59C8> /usr/lib/system/libsystem_blocks.dylib
- 0x7fff8e23c000 - 0x7fff8e23cffd com.apple.audio.units.AudioUnit (1.9 - 1.9) <EC55FB59-2443-3F08-9142-7BCC93C76E4E> /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit
- 0x7fff8e23d000 - 0x7fff8e30fff7 com.apple.CoreText (260.0 - 275.16) <5BFC1D67-6A6F-38BC-9D90-9C712684EDAC> /System/Library/Frameworks/CoreText.framework/Versions/A/CoreText
- 0x7fff8e310000 - 0x7fff8e31eff7 libkxld.dylib (2050.24.15) <A619A9AC-09AF-3FF3-95BF-F07CC530EC31> /usr/lib/system/libkxld.dylib
- 0x7fff8e31f000 - 0x7fff8e38dff7 com.apple.framework.IOKit (2.0.1 - 755.24.1) <04BFB138-8AF4-310A-8E8C-045D8A239654> /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
- 0x7fff8e39f000 - 0x7fff8e525fff libBLAS.dylib (1073.4) <C102C0F6-8CB6-3B49-BA6B-2EB61F0B2784> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
- 0x7fff8e553000 - 0x7fff8e597fff libcups.2.dylib (327.6) <9C01D012-6F4C-3B69-B614-1B408B0ED4E3> /usr/lib/libcups.2.dylib
- 0x7fff8e598000 - 0x7fff8e5a6fff libcommonCrypto.dylib (60027) <BAAFE0C9-BB86-3CA7-88C0-E3CBA98DA06F> /usr/lib/system/libcommonCrypto.dylib
- 0x7fff8e6fa000 - 0x7fff8e70fff7 libdispatch.dylib (228.23) <D26996BF-FC57-39EB-8829-F63585561E09> /usr/lib/system/libdispatch.dylib
- 0x7fff8e710000 - 0x7fff8e71eff7 libsystem_network.dylib (77.10) <0D99F24E-56FE-380F-B81B-4A4C630EE587> /usr/lib/system/libsystem_network.dylib
- 0x7fff8e71f000 - 0x7fff8e741ff7 com.apple.Kerberos (2.0 - 1) <C49B8820-34ED-39D7-A407-A3E854153556> /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos
- 0x7fff8e788000 - 0x7fff8e797ff7 libxar.1.dylib (105) <370ED355-E516-311E-BAFD-D80633A84BE1> /usr/lib/libxar.1.dylib
- 0x7fff8f144000 - 0x7fff8f1d1ff7 com.apple.SearchKit (1.4.0 - 1.4.0) <C7F43889-F8BF-3CB9-AD66-11AEFCBCEDE7> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit
- 0x7fff8f24c000 - 0x7fff8f24ffff libRadiance.dylib (850) <62E3F7FB-03E3-3937-A857-AF57A75EAF09> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib
- 0x7fff8f533000 - 0x7fff8f7d7ff7 com.apple.CoreImage (8.4.0 - 1.0.1) <CC6DD22B-FFC6-310B-BE13-2397A02C79EF> /System/Library/Frameworks/QuartzCore.framework/Versions/A/Frameworks/CoreImage.framework/Versions/A/CoreImage
- 0x7fff8f7d8000 - 0x7fff8f840fff libvDSP.dylib (380.6) <CD4C5EEB-9E63-30C4-8103-7A5EAEA0BE60> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib
- 0x7fff8f8ab000 - 0x7fff8f8affff libpam.2.dylib (20) <C8F45864-5B58-3237-87E1-2C258A1D73B8> /usr/lib/libpam.2.dylib
- 0x7fff8fabb000 - 0x7fff8fb28ff7 com.apple.datadetectorscore (4.1 - 269.3) <5775F0DB-87D6-310D-8B03-E2AD729EFB28> /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/DataDetectorsCore
- 0x7fff8fc60000 - 0x7fff8fcbcff7 com.apple.Symbolication (1.3 - 93) <97F3B1D2-D81D-3F37-87B3-B9A686124CF5> /System/Library/PrivateFrameworks/Symbolication.framework/Versions/A/Symbolication
- 0x7fff8fd91000 - 0x7fff8fe6bfff com.apple.backup.framework (1.4.3 - 1.4.3) <6B65C44C-7777-3331-AD9D-438D10AAC777> /System/Library/PrivateFrameworks/Backup.framework/Versions/A/Backup
- 0x7fff8fe6c000 - 0x7fff8fe79fff libbz2.1.0.dylib (29) <CE9785E8-B535-3504-B392-82F0064D9AF2> /usr/lib/libbz2.1.0.dylib
- 0x7fff8fe89000 - 0x7fff8ffdbfff com.apple.audio.toolbox.AudioToolbox (1.9 - 1.9) <62770C0F-5600-3EF9-A893-8A234663FFF5> /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox
- 0x7fff90071000 - 0x7fff90173fff libJP2.dylib (850) <2E43216C-3A5A-3693-820C-38B360698FA0> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib
- 0x7fff90ab4000 - 0x7fff90b79ff7 com.apple.coreui (2.0 - 181.1) <83D2C92D-6842-3C9D-9289-39D5B4554C3A> /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI
- 0x7fff90e1a000 - 0x7fff90e1bfff liblangid.dylib (116) <864C409D-D56B-383E-9B44-A435A47F2346> /usr/lib/liblangid.dylib
- 0x7fff90f20000 - 0x7fff90fddff7 com.apple.ColorSync (4.8.0 - 4.8.0) <6CE333AE-EDDB-3768-9598-9DB38041DC55> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSync.framework/Versions/A/ColorSync
- 0x7fff90fde000 - 0x7fff9105dff7 com.apple.securityfoundation (6.0 - 55115.4) <8676E0DF-295F-3690-BDAA-6C9C1D210B88> /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation
- 0x7fff9105e000 - 0x7fff910b4fff com.apple.HIServices (1.20 - 417) <BCD36950-013F-35C2-918E-05A93A47BE8C> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices
- 0x7fff910b5000 - 0x7fff910d6fff com.apple.Ubiquity (1.2 - 243.15) <C9A7EE77-B637-3676-B667-C0843BBB0409> /System/Library/PrivateFrameworks/Ubiquity.framework/Versions/A/Ubiquity
- 0x7fff910de000 - 0x7fff91133ff7 libTIFF.dylib (850) <EDAF0D99-70AF-3B3F-9EFA-9463C91D0E3C> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib
- 0x7fff9125c000 - 0x7fff9127cfff libPng.dylib (850) <203C43BF-FAD3-3CCB-81D5-F2770E36338B> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib
- 0x7fff9127f000 - 0x7fff91398fff com.apple.ImageIO.framework (3.2.1 - 850) <C3FFCEEB-AA0C-314B-9E94-7005EE48A403> /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
- 0x7fff9139f000 - 0x7fff913b6fff com.apple.GenerationalStorage (1.1 - 132.3) <FD4A84B3-13A8-3C60-A59E-25A361447A17> /System/Library/PrivateFrameworks/GenerationalStorage.framework/Versions/A/GenerationalStorage
- 0x7fff91582000 - 0x7fff91586fff libCoreVMClient.dylib (32.3) <AD8391D9-56DD-3A78-A294-6A30E6ECE1A2> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib
- 0x7fff91587000 - 0x7fff915bdfff com.apple.DebugSymbols (98 - 98) <14E788B1-4EB2-3FD7-934B-849534DFC198> /System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols
- 0x7fff915cd000 - 0x7fff915d5fff liblaunch.dylib (442.26.2) <2F71CAF8-6524-329E-AC56-C506658B4C0C> /usr/lib/system/liblaunch.dylib
- 0x7fff915d6000 - 0x7fff915e1fff libsystem_notify.dylib (98.5) <C49275CC-835A-3207-AFBA-8C01374927B6> /usr/lib/system/libsystem_notify.dylib
- 0x7fff91650000 - 0x7fff917ebfef com.apple.vImage (6.0 - 6.0) <FAE13169-295A-33A5-8E6B-7C2CC1407FA7> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage
- 0x7fff917ec000 - 0x7fff917f4ff7 libsystem_dnssd.dylib (379.38.1) <BDCB8566-0189-34C0-9634-35ABD3EFE25B> /usr/lib/system/libsystem_dnssd.dylib
- 0x7fff9182d000 - 0x7fff91938fff libFontParser.dylib (84.6) <96C42E49-79A6-3475-B5E4-6A782599A6DA> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontParser.dylib
- 0x7fff919d8000 - 0x7fff919ddfff libcache.dylib (57) <65187C6E-3FBF-3EB8-A1AA-389445E2984D> /usr/lib/system/libcache.dylib
- 0x7fff919de000 - 0x7fff919defff com.apple.vecLib (3.8 - vecLib 3.8) <794317C7-4E38-338A-A874-5E18001C8503> /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib
- 0x7fff919df000 - 0x7fff91cb0ff7 com.apple.security (7.0 - 55179.13) <F428E306-C407-3B55-BA82-E58755E8A76F> /System/Library/Frameworks/Security.framework/Versions/A/Security
- 0x7fff91d3f000 - 0x7fff9206ffff com.apple.HIToolbox (2.0 - 626.1) <656D08C2-9068-3532-ABDD-32EC5057CCB2> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
- 0x7fff92084000 - 0x7fff920deff7 com.apple.opencl (2.2.19 - 2.2.19) <3C7DFB2C-B3F9-3447-A1FC-EAAA42181A6E> /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL
- 0x7fff9216c000 - 0x7fff9216dff7 libremovefile.dylib (23.2) <6763BC8E-18B8-3AD9-8FFA-B43713A7264F> /usr/lib/system/libremovefile.dylib
- 0x7fff9312e000 - 0x7fff93149ff7 libsystem_kernel.dylib (2050.24.15) <A9F97289-7985-31D6-AF89-151830684461> /usr/lib/system/libsystem_kernel.dylib
- 0x7fff9314d000 - 0x7fff9326dfff com.apple.desktopservices (1.7.4 - 1.7.4) <ED3DA8C0-160F-3CDC-B537-BF2E766AB7C1> /System/Library/PrivateFrameworks/DesktopServicesPriv.framework/Versions/A/DesktopServicesPriv
-
-External Modification Summary:
- Calls made by other processes targeting this process:
- task_for_pid: 1
- thread_create: 0
- thread_set_state: 0
- Calls made by this process:
- task_for_pid: 0
- thread_create: 0
- thread_set_state: 0
- Calls made by all processes on this machine:
- task_for_pid: 168404
- thread_create: 1
- thread_set_state: 0
-
-VM Region Summary:
-ReadOnly portion of Libraries: Total=109.3M resident=31.8M(29%) swapped_out_or_unallocated=77.5M(71%)
-Writable regions: Total=90.9M written=16.1M(18%) resident=17.5M(19%) swapped_out=0K(0%) unallocated=73.4M(81%)
-
-REGION TYPE VIRTUAL
-=========== =======
-MALLOC 62.5M
-MALLOC guard page 48K
-STACK GUARD 56.0M
-Stack 12.6M
-VM_ALLOCATE 12.0M
-__DATA 13.8M
-__IMAGE 528K
-__LINKEDIT 58.6M
-__TEXT 134.3M
-__UNICODE 544K
-shared memory 308K
-=========== =======
-TOTAL 351.2M
-
-Model: MacBookPro10,1, BootROM MBP101.00EE.B03, 4 processors, Intel Core i7, 2.8 GHz, 16 GB, SMC 2.3f35
-Graphics: Intel HD Graphics 4000, Intel HD Graphics 4000, Built-In, 512 MB
-Graphics: NVIDIA GeForce GT 650M, NVIDIA GeForce GT 650M, PCIe, 1024 MB
-Memory Module: BANK 0/DIMM0, 8 GB, DDR3, 1600 MHz, 0x80AD, 0x484D5434314753364D465238432D50422020
-Memory Module: BANK 1/DIMM0, 8 GB, DDR3, 1600 MHz, 0x80AD, 0x484D5434314753364D465238432D50422020
-AirPort: spairport_wireless_card_type_airport_extreme (0x14E4, 0xEF), Broadcom BCM43xx 1.0 (5.106.98.100.17)
-Bluetooth: Version 4.1.4f2 12041, 2 service, 18 devices, 1 incoming serial ports
-Network Service: Wi-Fi, AirPort, en0
-Serial ATA Device: APPLE SSD SM768E, 751.28 GB
-USB Device: hub_device, 0x8087 (Intel Corporation), 0x0024, 0x1a100000 / 2
-USB Device: FaceTime HD Camera (Built-in), apple_vendor_id, 0x8510, 0x1a110000 / 3
-USB Device: USB Receiver, 0x046d (Logitech Inc.), 0xc52b, 0x14200000 / 1
-USB Device: hub_device, 0x8087 (Intel Corporation), 0x0024, 0x1d100000 / 2
-USB Device: hub_device, 0x0424 (SMSC), 0x2512, 0x1d180000 / 3
-USB Device: Apple Internal Keyboard / Trackpad, apple_vendor_id, 0x0262, 0x1d182000 / 5
-USB Device: BRCM20702 Hub, 0x0a5c (Broadcom Corp.), 0x4500, 0x1d181000 / 4
-USB Device: Bluetooth USB Host Controller, apple_vendor_id, 0x8286, 0x1d181300 / 6
-
-# End of transcript or log.
-"""]]
-
-> This got fixed in haskell gnutls 0.1.5. I have updated the Mtn Lion
-> autobuilder and it will be in tonight's build. [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/git-annex_quit_unexpectedly___40__macosx__41__/comment_1_97abb8442329d19c9687002f43afac74._comment b/doc/bugs/git-annex_quit_unexpectedly___40__macosx__41__/comment_1_97abb8442329d19c9687002f43afac74._comment
deleted file mode 100644
index 4dcc5412c..000000000
--- a/doc/bugs/git-annex_quit_unexpectedly___40__macosx__41__/comment_1_97abb8442329d19c9687002f43afac74._comment
+++ /dev/null
@@ -1,23 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.63"
- subject="comment 1"
- date="2013-08-26T19:51:48Z"
- content="""
-So this is a crash in the gnutls library used for XMPP. Someone else using OSX reported a similar crash to me by email, reproducible reliably by setting up xmpp with google. This is great debugging info:
-
-<pre>
-Thread 3 Crashed:
-0 libsystem_c.dylib 0x00007fff86ae0bf9 pthread_mutex_lock + 20
-1 H 0x000000010e9fd29f gnutls_system_mutex_lock + 12
-2 H 0x000000010ea7fa29 wrap_nettle_rnd_refresh + 20
-3 H 0x000000010e9fee89 gnutls_deinit + 42
-4 git-annex 0x000000010caf0a3a 0x10b5e6000 + 22063674
-</pre>
-
-Looks like `gnutls_deinit` was called and it crashed there, inside pthread code. So I think git-annex has already managed to connect to the XMPP server (to test it) and the cleanup is where it's crashing.
-
-This is the second time I have seen a gnutls-related crash using XMPP. The other one was tracked down by John Millikin to a resource allocation bug in haskell-gnutls and fixed.
-
-I have written a test case that reproduces the problem -- just forking a dozen threads that each try to connect to the google xmpp server and then close the connection. After a dozen or so succeed, one will reliably cause a segfault. Forwarded this test case to John.
-"""]]
diff --git a/doc/bugs/git-annex_quit_unexpectedly___40__macosx__41__/comment_2_3405f3cd699860ee239cf23ade19e92c._comment b/doc/bugs/git-annex_quit_unexpectedly___40__macosx__41__/comment_2_3405f3cd699860ee239cf23ade19e92c._comment
deleted file mode 100644
index 18b2b7a52..000000000
--- a/doc/bugs/git-annex_quit_unexpectedly___40__macosx__41__/comment_2_3405f3cd699860ee239cf23ade19e92c._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.8.7"
- subject="comment 2"
- date="2013-08-29T18:15:08Z"
- content="""
-I now have a test case that shows that this can happen reliably on OSX if you enter the wrong XMPP password repeatedly. It might also happen if you just enter the wrong password once, with a server like google's, since the assistant will try falling back to different servers. John is aware of this haskell-gnutls problem.
-
-John also found, and we hope fixed (but it's hard to tell) a bug in haskell-gnutls that caused a crash maybe 1 time in 10 under some conditions on OSX, when the right password was entered.
-"""]]
diff --git a/doc/bugs/git-annex_remotedeamon.mdwn b/doc/bugs/git-annex_remotedeamon.mdwn
new file mode 100644
index 000000000..15f728362
--- /dev/null
+++ b/doc/bugs/git-annex_remotedeamon.mdwn
@@ -0,0 +1,27 @@
+### Please describe the problem.
+
+git-annex is back on the radar now that the jabber requirement has been dropped! :-)
+
+But, it seems as though when I create a remote repo via the webapp it always makes it a bare git repo. Even when I specify the "client usage grouping".
+
+If I manually create two repos on ssh enabled servers, manually link them, and fire up the assistant they are awesomely kept in sync (with no bare repo in sight).
+
+### What steps will reproduce the problem?
+
+Use the webapp to try to create a client usage remote repo.
+
+### What version of git-annex are you using? On what operating system?
+
+Latest as of post.
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> [[notabug|done]] --[[Joey]]
diff --git a/doc/bugs/git-annex_remotedeamon/comment_1_bf8aa639ddc7f51ed7b2b83e31694e85._comment b/doc/bugs/git-annex_remotedeamon/comment_1_bf8aa639ddc7f51ed7b2b83e31694e85._comment
new file mode 100644
index 000000000..47d85fc67
--- /dev/null
+++ b/doc/bugs/git-annex_remotedeamon/comment_1_bf8aa639ddc7f51ed7b2b83e31694e85._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.114"
+ subject="comment 1"
+ date="2014-04-24T18:00:52Z"
+ content="""
+Please use descriptive bug titles.
+
+The webapp configures some common use cases, not every possible use case. Running git-annex assistant on a remote server to keep a directory there updated is not a relatively common use case. You can do it if you want; and if someone provided a very complelling UI markup that made sense to regular users it might be added to the webap (but this seems unlikely.
+
+As it is, the webapp set up bare git repositories on remotes, because that is by far the most common useful way to use git on a remote server. And if the webapp's local pairing interface is used, two existing non-bare client repositories will be paired, and the new remotedaemon will help keep the in sync.
+"""]]
diff --git a/doc/bugs/git-annex_remotedeamon/comment_2_82f71852df61d12333d08ba25af9d7be._comment b/doc/bugs/git-annex_remotedeamon/comment_2_82f71852df61d12333d08ba25af9d7be._comment
new file mode 100644
index 000000000..0228e2fbb
--- /dev/null
+++ b/doc/bugs/git-annex_remotedeamon/comment_2_82f71852df61d12333d08ba25af9d7be._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnXybLxkPMYpP3yw4b_I6IdC3cKTD-xEdU"
+ nickname="Matt"
+ subject="comment 2"
+ date="2014-04-24T18:43:50Z"
+ content="""
+hmmm - I think that it's arguable that if in the repository group drop down I select \"client\" then the remote repo should *not* be bare.
+
+I would predict that this new functionality will supercede the existing use-cases in terms of popularity. It's very cool that all my machines can be kept in sync with just ssh - a walkthrough showing desktop, laptop, and phone all just syncing (i.e., without the cloud transfer repo and jabber complications) makes a much simpler and compelling advert for this cool code! But it won't happen unless the GUI supports it...
+"""]]
diff --git a/doc/bugs/git-annex_sucking_up_all_available_RAM_after_startup.mdwn b/doc/bugs/git-annex_sucking_up_all_available_RAM_after_startup.mdwn
index f574e8b55..69383666c 100644
--- a/doc/bugs/git-annex_sucking_up_all_available_RAM_after_startup.mdwn
+++ b/doc/bugs/git-annex_sucking_up_all_available_RAM_after_startup.mdwn
@@ -45,3 +45,5 @@ I'm fairly unsure where to look for the cause and what logs to provide you with
# End of transcript or log.
"""]]
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/git-annex_sync_broken_on_squeeze_backports.mdwn b/doc/bugs/git-annex_sync_broken_on_squeeze_backports.mdwn
deleted file mode 100644
index 4e307fd68..000000000
--- a/doc/bugs/git-annex_sync_broken_on_squeeze_backports.mdwn
+++ /dev/null
@@ -1,20 +0,0 @@
-What steps will reproduce the problem?
-
- git-annex sync
-
-What is the expected output? What do you see instead?
-
-The following error is mixed in with the output, took me a while to notice it:
-
- Running: git ["--git-dir=/spare/annex/.git","--work-tree=/spare/annex","merge","--no-edit","refs/remotes/pip/synced/master"]
- error: unknown option `no-edit'
-
-What version of git-annex are you using? On what operating system?
-
-3.20120629~bpo60+1 on debian squeeze
-
-Please provide any additional information below.
-
-Installing git from backports as well cleared up the problem.
-
-> Uploading a fix for this now. [[done]] Thanks for reporting. --[[Joey]]
diff --git a/doc/bugs/git-annex_sync_does_not_push.mdwn b/doc/bugs/git-annex_sync_does_not_push.mdwn
new file mode 100644
index 000000000..a5fbc1742
--- /dev/null
+++ b/doc/bugs/git-annex_sync_does_not_push.mdwn
@@ -0,0 +1,52 @@
+### Please describe the problem.
+
+From the description of `sync` in the man page I assume it should be able to push all the branches it needs:
+
+> The sync process involves first committing all local changes, then fetching and merging the `synced/master` and the `git-annex` branch from the remote repositories, and finally pushing the changes back to those branches on the remote repositories. You can use standard git commands to do each of those steps by hand, or if you don't want to worry about the details, you can use sync.
+
+However this does not seem to be the case if one starts from an empty repository.
+
+### What steps will reproduce the problem?
+
+The following script (from <https://gist.github.com/gioele/d4e0905a3570f097fb0b>) will reproduce this problem:
+
+ #!/bin/sh -x
+
+ set -e ; set -u
+ export LC_ALL=C
+
+ d=$(pwd)
+
+ # cleanup
+ chmod a+rwx -R REPO pc1 || true
+ rm -Rf REPO pc1
+
+ # create central git repo
+ mkdir -p REPO/Docs.git
+ cd REPO/Docs.git
+ git init --bare
+ cd $d
+
+ # populate repo in PC1
+ mkdir -p pc1/Docs
+ cd pc1/Docs
+ echo AAA > fileA
+ echo BBB > fileB
+
+ git init
+ git remote add origin $d/REPO/Docs.git
+ git fetch --all
+
+ git annex init "pc1"
+ git annex add .
+ git annex sync
+
+ find $d/REPO/Docs.git/refs
+
+ # there should be some branches inside refs
+
+### What version of git-annex are you using? On what operating system?
+
+5.20140412ubuntu1 from Ubuntu 14.04.
+
+> Documentation fixed, so provisionally [[done]] --[[Joey]]
diff --git a/doc/bugs/git-annex_sync_does_not_push/comment_1_8b9b53163b012563b3e80f8eded76aaa._comment b/doc/bugs/git-annex_sync_does_not_push/comment_1_8b9b53163b012563b3e80f8eded76aaa._comment
new file mode 100644
index 000000000..424d4db0d
--- /dev/null
+++ b/doc/bugs/git-annex_sync_does_not_push/comment_1_8b9b53163b012563b3e80f8eded76aaa._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-11T18:09:51Z"
+ content="""
+git-annex sync only syncs with remotes that have an annex.uuid configured. So you can solve your problem by: `git annex sync origin`, which will sync to the remote and incidentially initialize it for git-annex use.
+
+I think this is merely a documentation problem, as the documentation says it syncs with all remotes. Although I don't have any strong feelings about whether sync should act on remotes that have not yet been initialized with git-annex.
+"""]]
diff --git a/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not.mdwn b/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not.mdwn
deleted file mode 100644
index cf54eea85..000000000
--- a/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not.mdwn
+++ /dev/null
@@ -1,29 +0,0 @@
-###What steps will reproduce the problem?
-
-1. Start git annex webapp, and make new repository on two computers.
-1. Pair them as "Local computer"s, and they synchronize fine, a file created on one shows up on the other.
-1. Disconnect one of the computers from the network, and create a new file
-1. Check where the file is.
-
-###What is the expected output? What do you see instead?
-
- git annex whereis new file
-
-shows the file being in both repositories, when in fact it has had no chance to get added to the one on the other computer, and is not in it.
-
-
-###What version of git-annex are you using? On what operating system?
-
-Both 4.20130405 on Ubuntu 12.10
-
-###Please provide any additional information below.
-
-I noticed this first when using a USB drive to communicate between work and home. Making changes at home, it thought that the new files were now present at work, when the computer there is off, and a long way away.
---Walter
-
-> A little while ago, I made this change:
-
- * direct mode: Direct mode commands now work on files staged in the index,
- they do not need to be committed to git.
-
-> I think that fixes the confusing behavior described here. [[done]] --[[Joey]]
diff --git a/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_1_6722fd627ec4add9f2b16546bd8ef341._comment b/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_1_6722fd627ec4add9f2b16546bd8ef341._comment
deleted file mode 100644
index fa8053660..000000000
--- a/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_1_6722fd627ec4add9f2b16546bd8ef341._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-04-16T19:26:49Z"
- content="""
-Please show me the full output of `git annex whereis`, and also the contents of `.git/config`
-"""]]
diff --git a/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_2_508e475f764e1cb453b756eb50bc3a15._comment b/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_2_508e475f764e1cb453b756eb50bc3a15._comment
deleted file mode 100644
index c6fea0dbf..000000000
--- a/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_2_508e475f764e1cb453b756eb50bc3a15._comment
+++ /dev/null
@@ -1,34 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnSenxKyE_2Z6Wb-EBMO8FciyRywjx1ZiQ"
- nickname="Walter"
- subject="comment 2"
- date="2013-04-16T20:25:45Z"
- content="""
- walter@dionysus:~/presence$ echo 1 > Here.txt
- walter@dionysus:~/presence$ git annex whereis
- whereis Here.txt (2 copies)
- 1c6ffc98-d12c-4844-920b-5e28bc8e8b60 -- here (walter@dionysus:~/presence)
- 8da299b6-006c-4410-9b3d-a542766d40a4 -- kronos.local_presence (walter@kronos:~/presence)
- ok
-
-This is while kronos is turned off.
-
-The contents of .git/config:
-
- [core]
- repositoryformatversion = 0
- filemode = true
- bare = false
- logallrefupdates = true
- [annex]
- uuid = 1c6ffc98-d12c-4844-920b-5e28bc8e8b60
- version = 3
- direct = true
- [gc]
- auto = 0
- [remote \"kronos.local_presence\"]
- url = ssh://walter@git-annex-kronos.local-walter/~/presence/
- fetch = +refs/heads/*:refs/remotes/kronos.local_presence/*
- annex-uuid = 8da299b6-006c-4410-9b3d-a542766d40a4
- annex-cost = 175.0
-"""]]
diff --git a/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_3_1656ba18c519a262c57ef626a3449e77._comment b/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_3_1656ba18c519a262c57ef626a3449e77._comment
deleted file mode 100644
index 3a33becb8..000000000
--- a/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_3_1656ba18c519a262c57ef626a3449e77._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-04-16T20:33:44Z"
- content="""
-> walter@dionysus:~/presence$ echo 1 > Here.txt
-> walter@dionysus:~/presence$ git annex whereis
-> whereis Here.txt (2 copies)
-
-It seems the file Here.txt must already have been added to git-annex before this point ... or whereis would not show it. Did you leave out a step? Was the file already added? Are you using direct mode?
-"""]]
diff --git a/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_4_347dc3b6e5bc6c4195ec09d54bc1398e._comment b/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_4_347dc3b6e5bc6c4195ec09d54bc1398e._comment
deleted file mode 100644
index 2fc2b573d..000000000
--- a/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_4_347dc3b6e5bc6c4195ec09d54bc1398e._comment
+++ /dev/null
@@ -1,24 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnSenxKyE_2Z6Wb-EBMO8FciyRywjx1ZiQ"
- nickname="Walter"
- subject="comment 4"
- date="2013-04-16T20:42:34Z"
- content="""
-The repository is a direct mode one.
-
-I think there's something in your comment though; the content (\"1\") had already been added to a file (since deleted on dionysus),
-however it does seem a bit inconsistent.
-
- walter@dionysus:~/presence$ echo 1 > New1
- walter@dionysus:~/presence$ echo 1 > New1.txt
- walter@dionysus:~/presence$ git annex whereis New1 New1.txt
- whereis New1 (1 copy)
- 1c6ffc98-d12c-4844-920b-5e28bc8e8b60 -- here (walter@dionysus:~/presence)
- ok
- whereis New1.txt (2 copies)
- 1c6ffc98-d12c-4844-920b-5e28bc8e8b60 -- here (walter@dionysus:~/presence)
- 8da299b6-006c-4410-9b3d-a542766d40a4 -- kronos.local_presence (walter@kronos:~/presence)
- ok
-
-
-"""]]
diff --git a/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_5_a9c93bfc3278ef8b1117eac2af859bc3._comment b/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_5_a9c93bfc3278ef8b1117eac2af859bc3._comment
deleted file mode 100644
index aa08f6024..000000000
--- a/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_5_a9c93bfc3278ef8b1117eac2af859bc3._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 5"
- date="2013-04-16T21:25:45Z"
- content="""
-In a direct mode repository, until you commit changes to a file, `git annex whereis` and most other git-annex commands will operate on the version that was last committed to git.
-
-That seems to be the source of your confusion.
-
-I think this can be confusing.. It might make sense for git-annex whereis to skip over modified files in direct mode.
-"""]]
diff --git a/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_6_804dd62beef64f7d4e203bdb28cbe660._comment b/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_6_804dd62beef64f7d4e203bdb28cbe660._comment
deleted file mode 100644
index 1cb046af9..000000000
--- a/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_6_804dd62beef64f7d4e203bdb28cbe660._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnSenxKyE_2Z6Wb-EBMO8FciyRywjx1ZiQ"
- nickname="Walter"
- subject="comment 6"
- date="2013-04-16T22:40:04Z"
- content="""
-I am running the webapp, and thought that changes get made immediately?
-Especially, these are files that I never manually commit/add/anything, and are not modified after creation even.
-
-Specifically, in my previous comment, files New1 and New1.txt are (to my eyes) created and treated identically, yet `git annex whereis` gives different results.
-"""]]
diff --git a/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_7_4ef107d70647780eb5347cae6f467fed._comment b/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_7_4ef107d70647780eb5347cae6f467fed._comment
deleted file mode 100644
index f7ca0a5af..000000000
--- a/doc/bugs/git-annex_thinks_files_are_in_repositories_they_are_not/comment_7_4ef107d70647780eb5347cae6f467fed._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnSenxKyE_2Z6Wb-EBMO8FciyRywjx1ZiQ"
- nickname="Walter"
- subject="comment 7"
- date="2013-04-17T20:50:34Z"
- content="""
-So looking in .git/annex/objects, it is obvious that the difference between New1 and New1.txt is the extension.
-
-So, I think that explains all the things I was seeing. I guess the main point of confusion (though I can't think of a better way) is the distinction between data stored in .git/annex/objects, and files in the working folder.
-If I thought in terms of hashes, that is all that would need to be shown in git annex whereis is which hashes are where (and then it would be obvious if several files have the same hash, that once one of them is present somewhere then all of them are).
-
-"""]]
diff --git a/doc/bugs/git-repair_real_world_failure_example.mdwn b/doc/bugs/git-repair_real_world_failure_example.mdwn
deleted file mode 100644
index f7110dcc0..000000000
--- a/doc/bugs/git-repair_real_world_failure_example.mdwn
+++ /dev/null
@@ -1,11 +0,0 @@
-I was given these 2 repos, git-repair fails on the first, and the
-second is a backup copy from before the problem:
-
-* <http://www.clacke.se/annex/podcasts.git.tar.xz>
-* <http://www.clacke.se/annex/podcasts-bak.git.tar.xz>
-
---[[Joey]]
-
-> Tested with current version, and it successfully repairs.
-> Bug reporter was using an older version (based on some old messages).
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_add_..._adds_too_much.mdwn b/doc/bugs/git_annex_add_..._adds_too_much.mdwn
deleted file mode 100644
index 4eb46455f..000000000
--- a/doc/bugs/git_annex_add_..._adds_too_much.mdwn
+++ /dev/null
@@ -1,25 +0,0 @@
-When a hidden file (starting with a dot) is git-annex add'ed, other non-tracked files are also added
-
-What steps will reproduce the problem?
-
-$ touch a .b
-
-$ git annex add .b
-
-add a (checksum...) ok
-
-add .b (checksum...) ok
-
-(Recording state in git...)
-
-
-What is the expected output? What do you see instead?
-
-Only file .b should be added.
-
-What version of git-annex are you using? On what operating system?
-
-3.20120406
-(same problem with version 3.20120123) on Debian.
-
-> Thanks for reporting this bug, I've fixed it in git. [[done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_add_adds_unlocked_files.mdwn b/doc/bugs/git_annex_add_adds_unlocked_files.mdwn
new file mode 100644
index 000000000..4496f3469
--- /dev/null
+++ b/doc/bugs/git_annex_add_adds_unlocked_files.mdwn
@@ -0,0 +1,21 @@
+### Please describe the problem.
+
+git annex add . should ignore unlocked files
+
+### What steps will reproduce the problem?
+SEE NEXT COMMENT
+
+### What version of git-annex are you using? On what operating system?
+
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> [[done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_add_adds_unlocked_files/comment_2_4b46116eabe61946ae65b293d7bbacb7._comment b/doc/bugs/git_annex_add_adds_unlocked_files/comment_2_4b46116eabe61946ae65b293d7bbacb7._comment
new file mode 100644
index 000000000..5eb35789b
--- /dev/null
+++ b/doc/bugs/git_annex_add_adds_unlocked_files/comment_2_4b46116eabe61946ae65b293d7bbacb7._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="behaving as intended"
+ date="2014-10-09T20:30:26Z"
+ content="""
+git-annex add is supposed to add unlocked files. See the documentation for the unlock command on the man page. Typical workflow is to unlock a file, edit it, add the changes, and commit it.
+
+Your example has 2 files with content \"foo\" and 1 file with content \"foobar\", which require 2 objects to be stored by git-annex, so that's what it stores.
+
+I suggest you get a bit more familiar with git-annex before filing bugs on it.
+"""]]
diff --git a/doc/bugs/git_annex_add_adds_unlocked_files/comment_2_d53d0710d6ad9f0fdc8a29a98647e94b._comment b/doc/bugs/git_annex_add_adds_unlocked_files/comment_2_d53d0710d6ad9f0fdc8a29a98647e94b._comment
new file mode 100644
index 000000000..904cc9ebb
--- /dev/null
+++ b/doc/bugs/git_annex_add_adds_unlocked_files/comment_2_d53d0710d6ad9f0fdc8a29a98647e94b._comment
@@ -0,0 +1,55 @@
+[[!comment format=sh
+ username="https://www.google.com/accounts/o8/id?id=AItOawn0hu_TPhLcUM1Ivvn7iIoZ_iD3g_5WDcs"
+ nickname="Greg"
+ subject="comment 2"
+ date="2014-10-06T19:20:26Z"
+ content="""
+ubuntu@hostname:~$ cd annex
+ubuntu@hostname:~/annex$ git init
+Initialized empty Git repository in /home/ubuntu/annex/.git/
+ubuntu@hostname:~/annex$ git annex init
+init ok
+ubuntu@hostname:~/annex$ echo foo > test.txt
+ubuntu@hostname:~/annex$ git annex add .
+add test.txt (checksum...) ok
+(Recording state in git...)
+ubuntu@hostname:~/annex$ git commit -a -m first
+[master (root-commit) fe54856] first
+ 1 file changed, 1 insertion(+)
+ create mode 120000 test.txt
+ubuntu@hostname:~/annex$ git annex unlock test.txt
+unlock test.txt (copying...) ok
+ubuntu@hostname:~/annex$ echo foobar > test.txt
+ubuntu@hostname:~/annex$ echo foo > test2.txt
+ubuntu@hostname:~/annex$ git annex add .
+add test2.txt (checksum...) ok
+add test.txt (checksum...) ok
+(Recording state in git...)
+ubuntu@hostname:~/annex$ git commit -a -m second
+[master 1776b25] second
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+ create mode 120000 test2.txt
+ubuntu@hostname:~/annex$ tree -d ./git/annex
+./git/annex [error opening dir]
+
+0 directories
+ubuntu@hostname:~/annex$ tree -d .git/annex
+.git/annex
+├── journal
+├── objects
+│   ├── 8Z
+│   │   └── 1J
+│   │   └── SHA256-s4--b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c
+│   └── q2
+│   └── Xj
+│   └── SHA256-s7--aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f
+└── tmp
+
+9 directories
+ubuntu@hostname:~/annex$ ls
+test2.txt test.txt
+ubuntu@hostname:~/annex$
+
+
+I'm expecting 3 SHA's in .git/annex, but I only see two.
+"""]]
diff --git a/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long.mdwn b/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long.mdwn
deleted file mode 100644
index d17e569f1..000000000
--- a/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long.mdwn
+++ /dev/null
@@ -1,14 +0,0 @@
-Recently I ran into the following situation under Ubuntu with an encrypted home directory (which shortens the length that filenames can be):
-
- $ git annex add 687474703a2f2f6d656469612e74756d626c722e636f6d2f74756d626c725f6c656673756557324c703171663879656b2e676966.gif
- add 687474703a2f2f6d656469612e74756d626c722e636f6d2f74756d626c725f6c656673756557324c703171663879656b2e676966.gif failed
- git-annex: /home/lhuhn/annex/.git/annex/tmp/155_518_WORM-s426663-m1310064100--687474703a2f2f6d656469612e74756d626c722e636f6d2f74756d626c725f6c656673756557324c703171663879656b2e676966.gif.log: openBinaryFile: invalid argument (File name too long)
- git-annex: 1 failed
-
-The file seems to be completely gone. It no longer exists in the current directory, or under .git/annex.
-
-I don't mind horribly that git-annex failed due to the name length limit, but it shouldn't have deleted my file in the process (fortunately the file wasn't very important, or hard to recover).
-
-> [[done]], as noted it did not delete content and now it makes the symlink
-> before trying to write to the location log, avoiding that gotcha.
-> --[[Joey]]
diff --git a/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_1_9650284913bec2a00cf551b90ab5d8ff._comment b/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_1_9650284913bec2a00cf551b90ab5d8ff._comment
deleted file mode 100644
index 1df159181..000000000
--- a/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_1_9650284913bec2a00cf551b90ab5d8ff._comment
+++ /dev/null
@@ -1,21 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 1"
- date="2011-07-07T20:27:33Z"
- content="""
-When I reproduce this, the file is not gone, it's been moved under .git/annex/objects. There is no way an add can delete a file, since all it does is rename it. It would be good for it to error unwind and move the file back though.
-
-<pre>
-joey@gnu:~/tmp/a>touch 663879656b2e676966687474703a2f2f6d656469612e74756d626c722e636f6d2f74756d626c725f6c656673756557324c703171663879656b2e676966687474703a2f2f6d656469612e74756d626c722e636f6d2f74756d626c725f6c656673756557324c703171663879656b2e676966.gif
-joey@gnu:~/tmp/a>git annex add *.gif
-add 663879656b2e676966687474703a2f2f6d656469612e74756d626c722e636f6d2f74756d626c725f6c656673756557324c703171663879656b2e676966687474703a2f2f6d656469612e74756d626c722e636f6d2f74756d626c725f6c656673756557324c703171663879656b2e676966.gif failed
-git-annex: /home/joey/tmp/a/.git/annex/tmp/8e2_6a4_WORM-s0-m1310069979--663879656b2e676966687474703a2f2f6d656469612e74756d626c722e636f6d2f74756d626c725f6c656673756557324c703171663879656b2e676966687474703a2f2f6d656469612e74756d626c722e636f6d2f74756d626c725f6c656673756557324c703171663879656b2e676966.gif.log: openBinaryFile: invalid argument (File name too long)
-joey@gnu:~/tmp/a>touch 663879656b2e676966687474703a2f2f6d656469612e74756d626c722e636f6d2f74756d626c725f6c656673756557324c703171663879656b2e676966687474703a2f2f6d656469612e74756d626c722e636f6d2f74756d626c725f6c656673756557324c703171663879656b2e676966.gif
-joey@gnu:~/tmp/a>git annex add *.gif
-add 663879656b2e676966687474703a2f2f6d656469612e74756d626c722e636f6d2f74756d626c725f6c656673756557324c703171663879656b2e676966687474703a2f2f6d656469612e74756d626c722e636f6d2f74756d626c725f6c656673756557324c703171663879656b2e676966.gif failed
-git-annex: /home/joey/tmp/a/.git/annex/tmp/8e2_6a4_WORM-s0-m1310069979--663879656b2e676966687474703a2f2f6d656469612e74756d626c722e636f6d2f74756d626c725f6c656673756557324c703171663879656b2e676966687474703a2f2f6d656469612e74756d626c722e636f6d2f74756d626c725f6c656673756557324c703171663879656b2e676966.gif.log: openBinaryFile: invalid argument (File name too long)
-joey@gnu:~/tmp/a>find .git/annex/objects -type f
-.git/annex/objects/Mk/92/WORM-s0-m1310069979--663879656b2e676966687474703a2f2f6d656469612e74756d626c722e636f6d2f74756d626c725f6c656673756557324c703171663879656b2e676966687474703a2f2f6d656469612e74756d626c722e636f6d2f74756d626c725f6c656673756557324c703171663879656b2e676966.gif/WORM-s0-m1310069979--663879656b2e676966687474703a2f2f6d656469612e74756d626c722e636f6d2f74756d626c725f6c656673756557324c703171663879656b2e676966687474703a2f2f6d656469612e74756d626c722e636f6d2f74756d626c725f6c656673756557324c703171663879656b2e676966.gif
-</pre>
-"""]]
diff --git a/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_2_c6c8d2a1f444d85c582bc5396b08e148._comment b/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_2_c6c8d2a1f444d85c582bc5396b08e148._comment
deleted file mode 100644
index bd53627bb..000000000
--- a/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_2_c6c8d2a1f444d85c582bc5396b08e148._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnpdM9F8VbtQ_H5PaPMpGSxPe_d5L1eJ6w"
- nickname="Rafaël"
- subject="this happens also when the user has not the permission to set the file mode"
- date="2011-07-08T00:21:31Z"
- content="""
-For example if the file is owned by root, I guess git-annex fails when it tries to remove write permissions (I retested with the last version of today (whose \"version\" subcommand still outputs 3.20110702)).By the way, it would be nice to have a log file created containing the list of all failures, to avoid having to scan manually all the output of a long git-annex operation.
-"""]]
diff --git a/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_3_5776864d78d56849001dd12e3adb9cbe._comment b/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_3_5776864d78d56849001dd12e3adb9cbe._comment
deleted file mode 100644
index f9d1b5d68..000000000
--- a/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_3_5776864d78d56849001dd12e3adb9cbe._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnpdM9F8VbtQ_H5PaPMpGSxPe_d5L1eJ6w"
- nickname="Rafaël"
- subject="comment 3"
- date="2011-07-08T00:45:30Z"
- content="""
-comment on the output of 'git-annex version' (from my last comment): now I get the right version 3.20110707. But I checked in my console that the three commands \"git checkout 3.20110707\", \"make\" and \"./git-annex version\" gave me before 3.20110702, I don't know why...
-"""]]
diff --git a/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_4_371ec7b4ae73280ede31edfe90b42a95._comment b/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_4_371ec7b4ae73280ede31edfe90b42a95._comment
deleted file mode 100644
index 1ba57c199..000000000
--- a/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_4_371ec7b4ae73280ede31edfe90b42a95._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 4"
- date="2011-07-08T01:32:30Z"
- content="""
-Indeed, I've made it even more robust now, handling the case where the file has weird permissions too, and undoing the failed add so the file is always back at the start state. Had to add a dependency on another haskell module to allow this, so it took some time to figure out how to do it..
-
-"""]]
diff --git a/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_5_4fb04f646de591640f8504c0caf61acd._comment b/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_5_4fb04f646de591640f8504c0caf61acd._comment
deleted file mode 100644
index 3ece2646f..000000000
--- a/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_5_4fb04f646de591640f8504c0caf61acd._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="ckeen"
- ip="79.249.110.228"
- subject="Maybe related to this bug?"
- date="2013-07-30T14:50:35Z"
- content="""
-I have noticed similar behaviour with the importfeed command: [[tips/downloading_podcasts/#comment-3e448e43830be7e6dbe59fff6bc81e75]]
-
-After the import fails, the symlinks are created and subsequent get command return with no ouput and error code 0.
-
-Or is this a different bug?
-"""]]
diff --git a/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_6_b4055409fe48da95bb3101c0242ef0bc._comment b/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_6_b4055409fe48da95bb3101c0242ef0bc._comment
deleted file mode 100644
index bfdc3bcf9..000000000
--- a/doc/bugs/git_annex_add_eats_files_when_filename_is_too_long/comment_6_b4055409fe48da95bb3101c0242ef0bc._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.21"
- subject="comment 6"
- date="2013-07-30T17:18:15Z"
- content="""
-This is an unrelated bug that was fixed 2 years ago.
-"""]]
diff --git a/doc/bugs/git_annex_add_error_with_Andrew_File_System.mdwn b/doc/bugs/git_annex_add_error_with_Andrew_File_System.mdwn
deleted file mode 100644
index bdddd96e2..000000000
--- a/doc/bugs/git_annex_add_error_with_Andrew_File_System.mdwn
+++ /dev/null
@@ -1,28 +0,0 @@
-### Please describe the problem.
-I have a git annex clone on Andrew File System. I obtain an error when I try
-to add a file to the annex:
-
-git-annex: test: createLink: unsupported operation (Invalid cross-device link)
-
-### What steps will reproduce the problem?
-Create a test file with touch and add it with git annex add.
-
-### What version of git-annex are you using? On what operating system?
-git-annex 4.20130723 on Debian sid.
-
-### Please provide any additional information below.
-
-[[!format sh """
-gio@crack:~/nobackup/archive$ touch test
-gio@crack:~/nobackup/archive$ git annex add test
-add test
-git-annex: test: createLink: unsupported operation (Invalid cross-device link)
-failed
-git-annex: add: 1 failed
-gio@crack:~/nobackup/archive$ logout
-"""]]
-
-It seems to me that AFS doesn't support hard links between different
-directories.
-
-> [[done]] per comments --[[Joey]]
diff --git a/doc/bugs/git_annex_add_error_with_Andrew_File_System/comment_1_bc783e551fc0e8da87bc95bff5b8f73a._comment b/doc/bugs/git_annex_add_error_with_Andrew_File_System/comment_1_bc783e551fc0e8da87bc95bff5b8f73a._comment
deleted file mode 100644
index 7a0d15842..000000000
--- a/doc/bugs/git_annex_add_error_with_Andrew_File_System/comment_1_bc783e551fc0e8da87bc95bff5b8f73a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://launchpad.net/~giomasce"
- nickname="giomasce"
- subject="Reference"
- date="2013-08-12T11:39:44Z"
- content="""
-https://lists.openafs.org/pipermail/openafs-info/2007-December/028158.html
-"""]]
diff --git a/doc/bugs/git_annex_add_error_with_Andrew_File_System/comment_2_faefcf69bd61c47566131cb31b78cc19._comment b/doc/bugs/git_annex_add_error_with_Andrew_File_System/comment_2_faefcf69bd61c47566131cb31b78cc19._comment
deleted file mode 100644
index a2301499c..000000000
--- a/doc/bugs/git_annex_add_error_with_Andrew_File_System/comment_2_faefcf69bd61c47566131cb31b78cc19._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.63"
- subject="comment 2"
- date="2013-08-24T19:48:46Z"
- content="""
-I'm confused by this bug report, because it seems to me I already fixed this same problem in commit a64106dcef5c5aad825662ef115cb2a1cc6985a8. There the problem was that encfs in paranoia mode doesn't support hard links. So I made it detect when createLink fails, and fall back to a code path that doesn't need hard links.
-
-Can you re-check the version you have, and perhaps try with a current daily build?
-"""]]
diff --git a/doc/bugs/git_annex_add_error_with_Andrew_File_System/comment_3_d5014c8b78437b9fddbb1e83d3679081._comment b/doc/bugs/git_annex_add_error_with_Andrew_File_System/comment_3_d5014c8b78437b9fddbb1e83d3679081._comment
deleted file mode 100644
index 3d30cea41..000000000
--- a/doc/bugs/git_annex_add_error_with_Andrew_File_System/comment_3_d5014c8b78437b9fddbb1e83d3679081._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://launchpad.net/~giomasce"
- nickname="giomasce"
- subject="comment 3"
- date="2013-09-07T15:35:48Z"
- content="""
-Apparently I wrote a wrong version number. The version actually running on the system I tested is much older. Probably I wrote the one of my own laptop instead.
-
-The bug can be closed, sorry for the noise.
-"""]]
diff --git a/doc/bugs/git_annex_add_ignores_some_files__47__directories.mdwn b/doc/bugs/git_annex_add_ignores_some_files__47__directories.mdwn
new file mode 100644
index 000000000..45af8d76a
--- /dev/null
+++ b/doc/bugs/git_annex_add_ignores_some_files__47__directories.mdwn
@@ -0,0 +1,23 @@
+### Please describe the problem.
+After I run "git annex add" some folders (not empty) in current directory remain unannexed and git shows them as untracked. Even git annex add "problemDirName" does nothing. git annex add --force doesn't help either.
+
+### What steps will reproduce the problem?
+No idea :( sometimes it happens and sometimes not.
+
+### What version of git-annex are you using? On what operating system?
+5.20141013 on Debian testing
+
+### Please provide any additional information below.
+
+git add works fine. It correctly stages the files.
+
+This is regular repository (not direct).
+
+EDIT:
+It seems that all the problem directories have either .git directory in them (I understand that git cannot manage .git but what about all the other files in there?) or are full of symlinks (git annex cannot manage symlinks?)
+
+> You should `git add` symlinks. They are not large files, so
+> are out of scope for git-annex.
+>
+> Git repositories cannot contain other git repositories. [[done]]
+> --[[Joey]]
diff --git a/doc/bugs/git_annex_add_memory_leak.mdwn b/doc/bugs/git_annex_add_memory_leak.mdwn
deleted file mode 100644
index 4bcffb17b..000000000
--- a/doc/bugs/git_annex_add_memory_leak.mdwn
+++ /dev/null
@@ -1,39 +0,0 @@
-For the record, `git annex add` has had a series of memory leaks.
-Mostly these are minor -- until you need to check in a few
-million files in a single operation.
-
-If this happens to you, git-annex will run out of memory and stop.
-(Generally well before your system runs out of memory, since it has some
-built-in ulimits.) You can recover by just re-running the `git annex add`
--- it will automatically pick up where it left off.
-
-A history of the leaks:
-
-* Originally, `git annex add` remembered all the files
- it had added, and fed them to git at the end. Of course
- that made its memory use grow, so it was fixed to periodically
- flush its buffer. Fixed in version 0.20110417.
-
-* Something called a "lazy state monad" caused "thunks" to build
- up and memory to leak. Also affected other git annex commands
- than `add`. Adding files using a SHA* backend hit the worst.
- Fixed in versions afer 3.20120123.
-
-* Committing journal files turned out to have another memory leak.
- After adding a lot of files ran out of memory, this left the journal
- behind and could affect other git-annex commands. Fixed in versions afer
- 3.20120123.
-
-* The count of the number of failed commands was updated lazily, which
- caused a slow leak when running on a lot of files. Fixed in versions afer
- 3.20120123.
-
-* (Note that `git ls-files --others`, which is used to find files to add,
- also uses surpsisingly large amounts
- of memory when you have a lot of files. It buffers
- the entire list, so it can compare it with the files in the index,
- before outputting anything.
- This is Not Our Problem, but I'm sure the git developers
- would appreciate a patch that fixes it.)
-
-[[done]]
diff --git a/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory.mdwn b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory.mdwn
new file mode 100644
index 000000000..13ac5a98f
--- /dev/null
+++ b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory.mdwn
@@ -0,0 +1,43 @@
+### Please describe the problem.
+
+Adding my 43GB Music Studio folder with 85K files causes out of memory or file not found errors. I subsequently tried on a very small folder but it still fails. --debug gives nothing useful that I can see.
+
+
+### What steps will reproduce the problem?
+
+cd Studio
+git init
+git annex init
+git annex add
+
+
+### What version of git-annex are you using? On what operating system?
+git-annex version: 5.20140613-g5587055
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 2 3 4
+
+Running on Windows 8.1 x64, Git Bash, Direct Mode, WORM backend
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+fatal: Out of memory? mmap failed: No such file or directory
+git-annex: add: 8562 failed
+
+Phil@DESKTOP /c/Studio (annex/direct/master)
+$ git annex add audacity
+fatal: Out of memory? mmap failed: No such file or directory
+(Recording state in git...)
+
+
+# End of transcript or log.
+"""]]
+
+[[!meta title="msysgit failure on Windows: mmap failed: No such file or directory "]]
diff --git a/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_1_984f75d8078f2809486f38ecb3b16be3._comment b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_1_984f75d8078f2809486f38ecb3b16be3._comment
new file mode 100644
index 000000000..3662fe04f
--- /dev/null
+++ b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_1_984f75d8078f2809486f38ecb3b16be3._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnOSgFb3l7nL3Fs7Y9gPGJJjFiV7aJ1tek"
+ nickname="Phil"
+ subject="comment 1"
+ date="2014-07-04T16:25:53Z"
+ content="""
+Looks like it might be related to msysGit:
+
+[bug on msysgit](http://osdir.com/ml/msysgit/2009-12/msg00007.html)
+"""]]
diff --git a/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_2_c0f07e2d4bb142389629050479dd1465._comment b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_2_c0f07e2d4bb142389629050479dd1465._comment
new file mode 100644
index 000000000..0601b0a7d
--- /dev/null
+++ b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_2_c0f07e2d4bb142389629050479dd1465._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 2"
+ date="2014-07-04T17:58:10Z"
+ content="""
+If you run git-annex with the --debug flag, you can see the git command that is presumably what is failing. You could then probably run the same git command manually and see if it fails that way too.
+
+Does your git repository have a large pack file (in `.git/objects/pack`) as mentioned in the msysgit bug report?
+"""]]
diff --git a/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_3_7a58a884aaacedca9697b17cd5248214._comment b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_3_7a58a884aaacedca9697b17cd5248214._comment
new file mode 100644
index 000000000..c6aa8360a
--- /dev/null
+++ b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_3_7a58a884aaacedca9697b17cd5248214._comment
@@ -0,0 +1,33 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnOSgFb3l7nL3Fs7Y9gPGJJjFiV7aJ1tek"
+ nickname="Phil"
+ subject="comment 3"
+ date="2014-07-04T22:28:27Z"
+ content="""
+I thought it might be related to using WORM but I've just hit it again on the default backend.
+
+--debug just seems to fail on the folder I tried to add:
+
+[[!format sh \"\"\"
+
+git annex --debug add samples
+
+[2014-07-04 23:24:42 GMT Summer Time] read: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"ls-files\",\"--others\",\"--exclude-standard\",\"-z\",\"--\",\"samples\"]
+[2014-07-04 23:24:42 GMT Summer Time] chat: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"cat-file\",\"--batch\"]
+add samples/cr_info.sh [2014-07-04 23:24:42 GMT Summer Time] chat: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"check-attr\",\"-z\",\"--stdin\",\"annex.backend\",\"annex.numcopies\",\"--\"]
+[2014-07-04 23:24:42 GMT Summer Time] chat: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"hash-object\",\"-t\",\"blob\",\"-w\",\"--stdin\",\"--no-filters\"]
+[2014-07-04 23:24:42 GMT Summer Time] chat: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"cat-file\",\"--batch\"]
+ok
+[2014-07-04 23:24:42 GMT Summer Time] read: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"ls-files\",\"--modified\",\"-z\",\"--\",\"samples\"]
+fatal: Out of memory? mmap failed: No such file or directory
+(Recording state in git...)
+[2014-07-04 23:25:39 GMT Summer Time] feed: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"]
+[2014-07-04 23:25:39 GMT Summer Time] chat: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"hash-object\",\"-w\",\"--stdin-paths\",\"--no-filters\"]
+[2014-07-04 23:25:39 GMT Summer Time] feed: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"update-index\",\"-z\",\"--index-info\"]
+[2014-07-04 23:25:39 GMT Summer Time] read: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+[2014-07-04 23:25:39 GMT Summer Time] read: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"write-tree\"]
+[2014-07-04 23:25:39 GMT Summer Time] chat: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"commit-tree\",\"447be0c8a000f98e3c580c6dede7f0ba2208963d\",\"-p\",\"refs/heads/git-annex\"]
+[2014-07-04 23:25:39 GMT Summer Time] call: git [\"--git-dir=c:\\Studio\\.git\",\"--work-tree=c:\\Studio\",\"-c\",\"core.bare=false\",\"update-ref\",\"refs/heads/git-annex\",\"8551a4e2f5c4f42823f7da3169d1f630622359ef\"]
+
+\"\"\"]]
+"""]]
diff --git a/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_4_aa4f1806207138115d2a95935bb0546b._comment b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_4_aa4f1806207138115d2a95935bb0546b._comment
new file mode 100644
index 000000000..8e9815242
--- /dev/null
+++ b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_4_aa4f1806207138115d2a95935bb0546b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnOSgFb3l7nL3Fs7Y9gPGJJjFiV7aJ1tek"
+ nickname="Phil"
+ subject="comment 4"
+ date="2014-07-04T22:30:45Z"
+ content="""
+There is no pack file, .git/objects/pack is empty. This is the first commit. I've queued up a load of files to commit, could this be it?
+"""]]
diff --git a/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_5_fa95f93416e3d6e66af557df6562f1e5._comment b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_5_fa95f93416e3d6e66af557df6562f1e5._comment
new file mode 100644
index 000000000..749ee44ad
--- /dev/null
+++ b/doc/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_5_fa95f93416e3d6e66af557df6562f1e5._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 5"
+ date="2014-07-10T19:59:15Z"
+ content="""
+For some reason, this bug is also being discussed in the forum. This makes it hard for me to keep up with what's going on, and generally is not a good idea. Currently, the forum currently seems to have better information. <http://git-annex.branchable.com/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/>
+"""]]
diff --git a/doc/bugs/git_annex_add_removes_file_with_no_data_left.mdwn b/doc/bugs/git_annex_add_removes_file_with_no_data_left.mdwn
deleted file mode 100644
index 0256c8476..000000000
--- a/doc/bugs/git_annex_add_removes_file_with_no_data_left.mdwn
+++ /dev/null
@@ -1,103 +0,0 @@
-### Please describe the problem.
-Using git-annex from Debian (4.20130709), I attempted to add a 410M file named `Expressionlessm.tar`. It acted like it succeeded, but the link it created was broken. Other files would add correctly.
-
-### What steps will reproduce the problem?
-I can reliably cause the file to be removed and replaced with a dangling symlink by doing `git annex add Expressionlessm.tar`. The "addition" completes much faster than normal. Using the old version of git-annex that Ubuntu provides (3.20131112ubuntu4), the file adds correctly in at least one place it was having issues.
-
-### What version of git-annex are you using? On what operating system?
-I'm using the version of git-annex from Debian Sid on Ubuntu 13.04 (perhaps that's my issue?)
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-andrew@andrew-desktop:/media/MainStore/Projects$ git status
-# On branch master
-# Untracked files:
-# (use "git add <file>..." to include in what will be committed)
-#
-==========Snip!=================
-nothing added to commit but untracked files present (use "git add" to track)
-
-
-
-andrew@andrew-desktop:/media/MainStore/Projects$ ls
-==========Snip!=================
-Expressionlessm.tar
-Expressionlessm.tar.bkup
-==========Snip!=================
-
-
-
-andrew@andrew-desktop:/media/MainStore/Projects$ tar tf Expressionlessm.tar
-Expressionlessm/
-==========Snip!=================
-# Tar file is valid at this point
-
-
-andrew@andrew-desktop:/media/MainStore/Projects$ git annex add Expressionlessm.tar
-add Expressionlessm.tar ok
-(Recording state in git...)
-
-
-
-andrew@andrew-desktop:/media/MainStore/Projects$ ls
-==========Snip!=================
-Expressionlessm.tar
-Expressionlessm.tar.bkup
-==========Snip!=================
-
-
-
-andrew@andrew-desktop:/media/MainStore/Projects$ ls -l
-==========Snip!=================
-lrwxrwxrwx 1 andrew andrew 109 Jul 12 02:29 Expressionlessm.tar -> ../.git/annex/objects/vk/mF/SHA256-s3131909--a2808d850ba2e880ac58bf622cd68edd7e72ea2775b984d52b5d5266c43b03f0
--rw-rw-r-- 1 andrew andrew 428759040 Jul 10 20:30 Expressionlessm.tar.bkup
-==========Snip!=================
-
-
-
-andrew@andrew-desktop:/media/MainStore/Projects$ tar tf Expressionlessm.tar
-tar: Expressionlessm.tar: Cannot open: No such file or directory
-tar: Error is not recoverable: exiting now
-
-
-=================================================================
-W O R K I N G V E R S I O N
-This is what it looks like when the add works.
-=================================================================
-andrew@andrew-desktop:/media/MainStore/Projects$ cp Expressionlessm.tar.bkup Expressionlessm.tar
-andrew@andrew-desktop:/media/MainStore/Projects$ git annex add Expressionlessm.tar
-add Expressionlessm.tar (checksum...) ok
-(Recording state in git...)
-andrew@andrew-desktop:/media/MainStore/Projects$ git status
-# On branch master
-# Changes to be committed:
-# (use "git reset HEAD <file>..." to unstage)
-#
-# new file: Expressionlessm.tar
-#
-# Untracked files:
-==========Snip!=================
-
-
-
-andrew@andrew-desktop:/media/MainStore/Projects$ ls -l
-==========Snip!=================
-lrwxrwxrwx 1 andrew andrew 195 Jul 12 02:20 Expressionlessm.tar -> ../.git/annex/objects/3v/Z7/SHA256-s428759040--133040f7b9d34ebce235aa24a0a16ab72af8f70e7a0722810d873815a2338eb2/SHA256-s428759040--133040f7b9d34ebce235aa24a0a16ab72af8f70e7a0722810d873815a2338eb2
--rw-rw-r-- 1 andrew andrew 428759040 Jul 10 20:30 Expressionlessm.tar.bkup
-==========Snip!=================
-# Notice the link target is different this time.
-
-
-# End of transcript or log.
-"""]]
-
-> [[done]]; this bug is now prevented on several levels.
->
-> BTW, the earlier behavior where it didn't even make a valid .git/annex/objects/
-> symlink is also explained by this bug I've fixed. It pulled a truncated
-> link out of the tarball, and used that.
-> --[[Joey]]
diff --git a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_10_9cc749a6efd4359a99316036f5bc867f._comment b/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_10_9cc749a6efd4359a99316036f5bc867f._comment
deleted file mode 100644
index aa3d2c79b..000000000
--- a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_10_9cc749a6efd4359a99316036f5bc867f._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="andy"
- ip="108.202.17.204"
- subject="comment 10"
- date="2013-07-20T23:50:50Z"
- content="""
-Wow! Thanks!
-
-I'd be happy to help test something if you need.
-
-Also, I just want to say that I really appreciate your openness about the process of fixing this, and that you so quickly deleted the part of the file you didn't need. It's not particularly sensitive, but I really like how you handled that. Thank you.
-"""]]
diff --git a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_11_1fed5be9db29866e4dc3d3bb12907bf3._comment b/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_11_1fed5be9db29866e4dc3d3bb12907bf3._comment
deleted file mode 100644
index 95309dcf6..000000000
--- a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_11_1fed5be9db29866e4dc3d3bb12907bf3._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.140"
- subject="comment 11"
- date="2013-07-21T00:25:04Z"
- content="""
-I've updated the linux daily builds with this bug fix, so if you want to you can get the new standalone tarball and use that.
-"""]]
diff --git a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_12_06d517ac4ef8def4629a40d7c3549bac._comment b/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_12_06d517ac4ef8def4629a40d7c3549bac._comment
deleted file mode 100644
index 30a6526f0..000000000
--- a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_12_06d517ac4ef8def4629a40d7c3549bac._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="andy"
- ip="108.202.17.204"
- subject="comment 12"
- date="2013-07-21T04:47:33Z"
- content="""
-Thanks! Works great!
-"""]]
diff --git a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_1_8f081aeba7065d143a453dc128543f59._comment b/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_1_8f081aeba7065d143a453dc128543f59._comment
deleted file mode 100644
index 89531ca16..000000000
--- a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_1_8f081aeba7065d143a453dc128543f59._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.140"
- subject="comment 1"
- date="2013-07-18T19:37:33Z"
- content="""
-Sorry about the delay getting to this, I've been overloaded.
-
-The link that you show:
-
-`Expressionlessm.tar -> ../.git/annex/objects/vk/mF/SHA256-s3131909--a2808d850ba2e880ac58bf622cd68edd7e72ea2775b984d52b5d5266c`
-
-.. That's not right at all. I don't understand in the least how this could happen, and am flummoxed how to try to debug it. It just doesn't match anything I know about how the code works.
-
-If I understand you correctly, it's only happening with one particular file content.
-
-I think you either need to rule out it being due to the way you've installed git-annex, perhaps by installing the linux standalone tarball, and seeing if you can get the same behavior with that. Or you could send me the repository by email (joey@kitenet.net) and I'll see if I can reproduce it, and if so, will certainly be able to debug and fix it.
-"""]]
diff --git a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_2_54a4b10723fd8a80dd486377ff15ce0d._comment b/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_2_54a4b10723fd8a80dd486377ff15ce0d._comment
deleted file mode 100644
index 7ac34e751..000000000
--- a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_2_54a4b10723fd8a80dd486377ff15ce0d._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.140"
- subject="comment 2"
- date="2013-07-18T19:46:12Z"
- content="""
-Hmm, given the size of the repo, please don't email it directly, if you choose to do that. But getting me access to it would certainly be useful.
-
-
-"""]]
diff --git a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_3_f1964e4e07991a251c2795da0361a4e2._comment b/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_3_f1964e4e07991a251c2795da0361a4e2._comment
deleted file mode 100644
index 68ca291d2..000000000
--- a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_3_f1964e4e07991a251c2795da0361a4e2._comment
+++ /dev/null
@@ -1,28 +0,0 @@
-[[!comment format=mdwn
- username="andy"
- ip="108.202.17.204"
- subject="Further testing"
- date="2013-07-19T06:02:53Z"
- content="""
-I've just tried it again with the git-annex-standalone-amd64.tar.gz bundle. The problem seems to persist.
-
-I've got a typescript (with no timing info) of the problem occurring with the bundle that I could e-mail to you if it would be of any help. I could also get you the ~410M file that's having issues if you're interested. FWIW, its SHA256 according to `sha256sum` on Ubuntu is `133040f7b9d34ebce235aa24a0a16ab72af8f70e7a0722810d873815a2338eb2`.
-
- andrew@andrew-desktop:/media/MainStore$ lsb_release -a
- No LSB modules are available.
- Distributor ID: Ubuntu
- Description: Ubuntu 13.04
- Release: 13.04
- Codename: raring
-
-
-
- andrew@andrew-desktop:/media/MainStore/testspace$ ls -l
- total 8
- lrwxrwxrwx 1 andrew andrew 180 Jul 18 22:09 demofile -> .git/annex/objects/10/8J/SHA256E-s11--896769fb2f15d59f398863a11f3e0aaafac022bb99dfd6db34d7c78e1da307e3/SHA256E-s11--896769fb2f15d59f398863a11f3e0aaafac022bb99dfd6db34d7c78e1da307e3
- lrwxrwxrwx 1 andrew andrew 188 Jul 18 22:10 express.tar -> .git/annex/objects/vk/mF/SHA256-s3131909--a2808d850ba2e880ac58bf622cd68edd7e72ea2775b984d52b5d5266c43b03f0/SHA256-s3131909--a2808d850ba2e880ac58bf622cd68edd7e72ea2775b984d52b5d5266c43b03f0
-
-
-Notice that the path to the file has changed from the version posted before.
---Andy
-"""]]
diff --git a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_4_73c38d843c30f00f6fd8883db8e55f62._comment b/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_4_73c38d843c30f00f6fd8883db8e55f62._comment
deleted file mode 100644
index 9d68a431c..000000000
--- a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_4_73c38d843c30f00f6fd8883db8e55f62._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.140"
- subject="comment 4"
- date="2013-07-20T19:54:59Z"
- content="""
-You don't seem to be getting the broken symlink when using the bundle. Is the symlink still not pointing to the content of the file?
-
-I do think I will need the file to debug further, unless you'd like to go on a possibly hundred step round-trip debugging sage with me.
-"""]]
diff --git a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_5_7ede5ee312f3abdf78979c0d52a7871a._comment b/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_5_7ede5ee312f3abdf78979c0d52a7871a._comment
deleted file mode 100644
index ccf5e574f..000000000
--- a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_5_7ede5ee312f3abdf78979c0d52a7871a._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="andy"
- ip="108.202.17.204"
- subject="comment 5"
- date="2013-07-20T21:34:08Z"
- content="""
-Yes, the symlink was still broken. Or rather, `tar -tf filename.tar` didn't like the file.
-
-The file's about 193 M bzipped. I'll be e-mailing you a link to an S3 copy with DojOsEf2 in the subject line of the email--once the upload finishes. :)
-
-I'm not sure if this is relevant, but the file is a tar of an annex and another git repo. Perhaps that is influencing something (although I presume it shouldn't)?
-"""]]
diff --git a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_6_e37cf18708f09619442c3a9532d12ed9._comment b/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_6_e37cf18708f09619442c3a9532d12ed9._comment
deleted file mode 100644
index c1056de9e..000000000
--- a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_6_e37cf18708f09619442c3a9532d12ed9._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.140"
- subject="comment 6"
- date="2013-07-20T22:43:27Z"
- content="""
-Got the file. Verified checksum.
-
-Reproduced bug!
-
-Wow, it really seems to be a bug specific to this one particular
-file content. That's crazy.
-"""]]
diff --git a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_7_a744ef7dd3a224a911ebb24858bc2fd6._comment b/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_7_a744ef7dd3a224a911ebb24858bc2fd6._comment
deleted file mode 100644
index aa60ef2fc..000000000
--- a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_7_a744ef7dd3a224a911ebb24858bc2fd6._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.140"
- subject="comment 7"
- date="2013-07-20T23:00:59Z"
- content="""
-Can be reproduced with first 500kb of file. I have deleted all the rest of the file, without looking at it. (Scout's honor!)
-"""]]
diff --git a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_8_f97141b255073b90120895148220c2d7._comment b/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_8_f97141b255073b90120895148220c2d7._comment
deleted file mode 100644
index 8bde55470..000000000
--- a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_8_f97141b255073b90120895148220c2d7._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.140"
- subject="comment 8"
- date="2013-07-20T23:07:17Z"
- content="""
-Ok, it is in fact relevant that the file is a tarball of a git-annex repository, because git-annex add turns out to be looking at the beginning of the file, and seeing that it contains a git-annex link.
-
-I thought that code was only supposed to fire in repos on FAT filesystems that don't have symlinks. So, several issues to fix here, it seems..
-"""]]
diff --git a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_9_dd2be11dfd190129d491f5f891e7cd1a._comment b/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_9_dd2be11dfd190129d491f5f891e7cd1a._comment
deleted file mode 100644
index f7ae63cf8..000000000
--- a/doc/bugs/git_annex_add_removes_file_with_no_data_left/comment_9_dd2be11dfd190129d491f5f891e7cd1a._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.140"
- subject="comment 9"
- date="2013-07-20T23:26:09Z"
- content="""
-Ok, I've put in 2 separate bug fixes, any one of which would have been sufficient to prevent this data loss. Am working on a third fix to detect this kind of problem at a higher level and avoid losing content even if it gets all confused.
-
-This bug may be a candidate to be backported to Debian stable, since it causes data loss.
-"""]]
diff --git a/doc/bugs/git_annex_assistant_--autostart_failed.mdwn b/doc/bugs/git_annex_assistant_--autostart_failed.mdwn
deleted file mode 100644
index 8833944ec..000000000
--- a/doc/bugs/git_annex_assistant_--autostart_failed.mdwn
+++ /dev/null
@@ -1,39 +0,0 @@
-**What steps will reproduce the problem?**
-
-Run *git annex assistant --autostart*
-
- git-annex autostart in /home/tobru/annex/repo1
- failed
- git-annex autostart in /home/tobru/annex/repo2
- failed
- git-annex autostart in /home/tobru/annex/repo3
- failed
- git-annex autostart in /home/tobru/annex/repo4
- failed
- git-annex autostart in /home/tobru/annex/repo5
- failed
-
-Running *git annex assistant* in each directory starts the assistant without errors.
-
-What could cause autostart to fail? Is there any log? Or a --debug parameter?
-
-
-**What is the expected output? What do you see instead?**
-
-The assistant should start on all known repositories
-
-**What version of git-annex are you using? On what operating system?**
-
-4.20130417-g4bb97d5 on Ubuntu
-
-**Please provide any additional information below.**
-
-The ~/.config/git-annex/autostart file looks like this:
-
- /home/tobru/annex/repo1
- /home/tobru/annex/repo2
- /home/tobru/annex/repo3
- /home/tobru/annex/repo4
- /home/tobru/annex/repo5
-
-> Closing, seems local misconfiguration. --[[Joey]] [[done]]
diff --git a/doc/bugs/git_annex_assistant_--autostart_failed/comment_1_746545273b53849c42ff6272324e5155._comment b/doc/bugs/git_annex_assistant_--autostart_failed/comment_1_746545273b53849c42ff6272324e5155._comment
deleted file mode 100644
index 7267ec1c4..000000000
--- a/doc/bugs/git_annex_assistant_--autostart_failed/comment_1_746545273b53849c42ff6272324e5155._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-04-18T20:08:12Z"
- content="""
-The most likely cause of this error is a bad `~/.config/git-annex/program` file. Either the file is missing, or it points to the wrong location for the git-annex command. All that --autostart does is run the program listed on that file in each repository listed in the autostart file. Note that you don't need the file when git-annex is installed in your PATH.
-
-So, how did you install git-annex?
-"""]]
diff --git a/doc/bugs/git_annex_assistant_--autostart_failed/comment_2_5bdf6f94da12e551ae12e7f550a84d62._comment b/doc/bugs/git_annex_assistant_--autostart_failed/comment_2_5bdf6f94da12e551ae12e7f550a84d62._comment
deleted file mode 100644
index 6fb9fba9d..000000000
--- a/doc/bugs/git_annex_assistant_--autostart_failed/comment_2_5bdf6f94da12e551ae12e7f550a84d62._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawniayrgSdVLUc3c6bf93VbO-_HT4hzxmyo"
- nickname="Tobias"
- subject="comment 2"
- date="2013-04-19T06:48:39Z"
- content="""
-You're right, this files was the problem. I recently removed my manually downloaded standalone tarball and switched to use gitannex-install. So the path was not correct anymore... Thanks a lot for the hint!
-"""]]
diff --git a/doc/bugs/git_annex_assistant_--autostart_failed/comment_3_bfd646f69946a5fe926b270cf94f87cb._comment b/doc/bugs/git_annex_assistant_--autostart_failed/comment_3_bfd646f69946a5fe926b270cf94f87cb._comment
deleted file mode 100644
index e53a3115d..000000000
--- a/doc/bugs/git_annex_assistant_--autostart_failed/comment_3_bfd646f69946a5fe926b270cf94f87cb._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawn26WQjIP5fnMgQF_L_k3Q3UrR5v8mjRTY"
- nickname="Ellis"
- subject="comment 3"
- date="2013-05-06T18:24:35Z"
- content="""
-I just had the exact same issue. Thanks for posting the fix.
-"""]]
diff --git a/doc/bugs/git_annex_assistant_crashes_when_parsing_lsof_output_for_version_4.88.mdwn b/doc/bugs/git_annex_assistant_crashes_when_parsing_lsof_output_for_version_4.88.mdwn
new file mode 100644
index 000000000..c374c6d57
--- /dev/null
+++ b/doc/bugs/git_annex_assistant_crashes_when_parsing_lsof_output_for_version_4.88.mdwn
@@ -0,0 +1,5 @@
+lsof got updated to version 4.88 some days ago (in archlinux) and since then the assistant reports the Committer crashed while parsing lsof output.
+
+After reverting to the previous version (4.87), it's working fine.
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_assistant_crashes_when_parsing_lsof_output_for_version_4.88/comment_1_e159e00e2ec7c128fda2190dc7d4c5ea._comment b/doc/bugs/git_annex_assistant_crashes_when_parsing_lsof_output_for_version_4.88/comment_1_e159e00e2ec7c128fda2190dc7d4c5ea._comment
new file mode 100644
index 000000000..915180a0c
--- /dev/null
+++ b/doc/bugs/git_annex_assistant_crashes_when_parsing_lsof_output_for_version_4.88/comment_1_e159e00e2ec7c128fda2190dc7d4c5ea._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-11-10T17:07:17Z"
+ content="""
+Could you get me a sample of lsof output from this version?
+git-annex runs lsof with the options `-F0can` which is supposed to
+produce a machine-parsable output.
+
+A full command line would be something like: `lsof -F0can +d ~`
+"""]]
diff --git a/doc/bugs/git_annex_assistant_crashes_when_parsing_lsof_output_for_version_4.88/comment_2_d4ff043ebca6028105d6e38ee4020e7c._comment b/doc/bugs/git_annex_assistant_crashes_when_parsing_lsof_output_for_version_4.88/comment_2_d4ff043ebca6028105d6e38ee4020e7c._comment
new file mode 100644
index 000000000..9636edd19
--- /dev/null
+++ b/doc/bugs/git_annex_assistant_crashes_when_parsing_lsof_output_for_version_4.88/comment_2_d4ff043ebca6028105d6e38ee4020e7c._comment
@@ -0,0 +1,539 @@
+[[!comment format=mdwn
+ username="https://renaud.casenave.fr/"
+ subject="comment 2"
+ date="2014-11-11T04:35:57Z"
+ content="""
+Hi,
+
+Here it is:
+
+ % lsof -v
+ lsof version information:
+ revision: 4.88
+ latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
+ latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
+ latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
+ constructed: Wed Oct 29 13:53:05 PDT 2014
+ constructed by and on: builduser@anatol
+ compiler: cc
+ compiler version: 4.9.1 20140903 (prerelease) (GCC)
+ compiler flags: -DLINUXV=316002 -DGLIBCV=220 -DHASIPv6 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -DHAS_STRFTIME -DLSOF_VSTR=\"3.16.2\" -O
+ loader flags: -L./lib -llsof
+ system info: Linux anatol 3.17.1-1-ARCH #1 SMP PREEMPT Wed Oct 15 15:04:35 CEST 2014 x86_64 GNU/Linux
+ Only root can list all files.
+ /dev warnings are disabled.
+ Kernel ID check is disabled.
+
+ % lsof -F0can +d ~
+ p476csh
+ fcwda n/home/raz
+ f1awn/home/raz/.xsession-errors
+ f2awn/home/raz/.xsession-errors
+ f255arn/home/raz/.xsession
+ p483cdbus-launch
+ f8arnpipe
+ p486cuim-xim
+ fcwda n/home/raz
+ f1awn/home/raz/.xsession-errors
+ f2awn/home/raz/.xsession-errors
+ f6arnpipe
+ f9awnpipe
+ f11arnpipe
+ f14awnpipe
+ p487cuim-toolbar-gtk
+ fcwda n/home/raz
+ f1awn/home/raz/.xsession-errors
+ f2awn/home/raz/.xsession-errors
+ p488cclfswm
+ f1awn/home/raz/.xsession-errors
+ f2awn/home/raz/.xsession-errors
+ p490cuim-helper-serv
+ fcwda n/home/raz
+ f2awn/home/raz/.xsession-errors
+ p491csbcl
+ f1awn/home/raz/.xsession-errors
+ f2awn/home/raz/.xsession-errors
+ f10awnpipe
+ f11arnpipe
+ f12awnpipe
+ f13arnpipe
+ f14awnpipe
+ f15arnpipe
+ f16awnpipe
+ f17arnpipe
+ f18awnpipe
+ f19arnpipe
+ f20awnpipe
+ f21arnpipe
+ p492cmozc_server
+ fcwda n/home/raz
+ f1awn/home/raz/.xsession-errors
+ f2awn/home/raz/.xsession-errors
+ f6arnpipe
+ f9awnpipe
+ p580cld-linux-x86-64
+ f4arnpipe
+ f5awnpipe
+ f13awnpipe
+ f15arnpipe
+ f18awnpipe
+ f19arnpipe
+ f22awnpipe
+ f23arnpipe
+ f25awnpipe
+ f26arnpipe
+ p591cgit
+ f0arnpipe
+ f1awnpipe
+ p621cld-linux-x86-64
+ f4arnpipe
+ f5awnpipe
+ f15awnpipe
+ f16arnpipe
+ f18awnpipe
+ f19arnpipe
+ f23awnpipe
+ f24arnpipe
+ f25awnpipe
+ f26arnpipe
+ p649cgit
+ f0arnpipe
+ f1awnpipe
+ p656cld-linux-x86-64
+ f4arnpipe
+ f5awnpipe
+ f11arnpipe
+ f12awnpipe
+ f16awnpipe
+ f18arnpipe
+ f19awnpipe
+ f20arnpipe
+ f21arnpipe
+ p673cssh
+ f0arnpipe
+ f1awnpipe
+ f2awnpipe
+ p703cgit
+ f0arnpipe
+ f1awnpipe
+ p719cld-linux-x86-64
+ f4arnpipe
+ f5awnpipe
+ f13awnpipe
+ f15arnpipe
+ f18awnpipe
+ f19arnpipe
+ f20awnpipe
+ f22arnpipe
+ f24awnpipe
+ f25arnpipe
+ p743cgit
+ f0arnpipe
+ f1awnpipe
+ p745cld-linux-x86-64
+ f4arnpipe
+ f5awnpipe
+ f11arnpipe
+ f12awnpipe
+ f18awnpipe
+ f19arnpipe
+ f20awnpipe
+ f21arnpipe
+ f22arnpipe
+ p762cssh
+ f0arnpipe
+ f1awnpipe
+ f2awnpipe
+ p804cgit
+ f0arnpipe
+ f1awnpipe
+ p836cld-linux-x86-64
+ f4arnpipe
+ f5awnpipe
+ f15awnpipe
+ f16arnpipe
+ f18awnpipe
+ f19arnpipe
+ f22awnpipe
+ f23arnpipe
+ f25awnpipe
+ f26arnpipe
+ p858cgit
+ f0arnpipe
+ f1awnpipe
+ p865cssh
+ f2awnpipe
+ f6arnpipe
+ f7awnpipe
+ f8awnpipe
+ p868cssh
+ f2awnpipe
+ f6arnpipe
+ f7awnpipe
+ f8awnpipe
+ p878cld-linux-x86-64
+ f4arnpipe
+ f5awnpipe
+ f13awnpipe
+ f15arnpipe
+ f18awnpipe
+ f19arnpipe
+ f20awnpipe
+ f22arnpipe
+ f24awnpipe
+ f25arnpipe
+ p901cgit
+ f0arnpipe
+ f1awnpipe
+ p914cld-linux-x86-64
+ f4arnpipe
+ f5awnpipe
+ f13awnpipe
+ f15arnpipe
+ f18awnpipe
+ f19arnpipe
+ f22awnpipe
+ f23arnpipe
+ f25awnpipe
+ f26arnpipe
+ p936cgit
+ f0arnpipe
+ f1awnpipe
+ p952cld-linux-x86-64
+ f4arnpipe
+ f5awnpipe
+ f9awnpipe
+ f15arnpipe
+ f18awnpipe
+ f19arnpipe
+ f22awnpipe
+ f23arnpipe
+ f25awnpipe
+ f26arnpipe
+ p956cskype
+ fcwda n/home/raz
+ f1awnpipe
+ f2awnpipe
+ f4arnpipe
+ f5awnpipe
+ f13arnpipe
+ f14awnpipe
+ f23arnpipe
+ f24awnpipe
+ f30arnpipe
+ f31awnpipe
+ f82arnpipe
+ f87awnpipe
+ p957ctrayer
+ fcwda n/home/raz
+ f1awnpipe
+ f2awnpipe
+ f6arnpipe
+ f7awnpipe
+ p961cpulseaudio
+ f5arnpipe
+ f6awnpipe
+ f7arnpipe
+ f8awnpipe
+ f42arnpipe
+ p972cgit
+ f0arnpipe
+ f1awnpipe
+ f11arnpipe
+ f12awnpipe
+ p973cgit
+ f0arnpipe
+ f1awnpipe
+ f11arnpipe
+ f12awnpipe
+ p988cld-linux-x86-64
+ f4arnpipe
+ f5awnpipe
+ f11arnpipe
+ f12awnpipe
+ f18awnpipe
+ f19arnpipe
+ f20awnpipe
+ f21arnpipe
+ f22arnpipe
+ p1008cgit
+ f0arnpipe
+ f1awnpipe
+ p1012cssh
+ f0arnpipe
+ f1awnpipe
+ f2awnpipe
+ p1041cgconf-helper
+ f1awnpipe
+ p1081cuim-candwin-gtk
+ fcwda n/home/raz
+ f0arnpipe
+ f1awnpipe
+ f2awn/home/raz/.xsession-errors
+ p1087cssh
+ f2awnpipe
+ f6arnpipe
+ f7awnpipe
+ f8awnpipe
+ p1088cld-linux-x86-64
+ f4arnpipe
+ f5awnpipe
+ f11arnpipe
+ f12awnpipe
+ f18awnpipe
+ f19arnpipe
+ f21arnpipe
+ f23awnpipe
+ f25arnpipe
+ p1106cgit
+ f0arnpipe
+ f1awnpipe
+ f11arnpipe
+ f12awnpipe
+ p1114cssh
+ f0arnpipe
+ f1awnpipe
+ f2awnpipe
+ p1121cssh
+ f2awnpipe
+ f6arnpipe
+ f7awnpipe
+ f8awnpipe
+ p1125cgit
+ f0arnpipe
+ f1awnpipe
+ f11arnpipe
+ f12awnpipe
+ p1159cgit
+ f0arnpipe
+ f1awnpipe
+ p1204cgit
+ f0arnpipe
+ f1awnpipe
+ p1227cld-linux-x86-64
+ f4arnpipe
+ f5awnpipe
+ f11arnpipe
+ f12awnpipe
+ f18awnpipe
+ f19arnpipe
+ f21arnpipe
+ f23awnpipe
+ f25arnpipe
+ p1244cssh
+ f0arnpipe
+ f1awnpipe
+ f2awnpipe
+ p1275cgit
+ f0arnpipe
+ f1awnpipe
+ p1407cssh
+ f2awnpipe
+ f6arnpipe
+ f7awnpipe
+ f8awnpipe
+ p1410cgit
+ f0arnpipe
+ f1awnpipe
+ f11arnpipe
+ f12awnpipe
+ p1474cld-linux-x86-64
+ f4arnpipe
+ f5awnpipe
+ f9arnpipe
+ f11awnpipe
+ f17awnpipe
+ f18arnpipe
+ f19awnpipe
+ f20arnpipe
+ f21arnpipe
+ p1510cssh
+ f0arnpipe
+ f1awnpipe
+ f2awnpipe
+ p1515cgit
+ f0arnpipe
+ f1awnpipe
+ p1522cld-linux-x86-64
+ f4arnpipe
+ f5awnpipe
+ f11arnpipe
+ f12awnpipe
+ f17awnpipe
+ f18arnpipe
+ f19awnpipe
+ f20arnpipe
+ f21arnpipe
+ p1541cssh
+ f0arnpipe
+ f1awnpipe
+ f2awnpipe
+ p1564cgit
+ f0arnpipe
+ f1awnpipe
+ p1580cssh
+ f2awnpipe
+ f6arnpipe
+ f7awnpipe
+ f8awnpipe
+ p1583cssh
+ f2awnpipe
+ f6arnpipe
+ f7awnpipe
+ f8awnpipe
+ p1609cgit
+ f0arnpipe
+ f1awnpipe
+ f11arnpipe
+ f12awnpipe
+ p1610cgit
+ f0arnpipe
+ f1awnpipe
+ f9arnpipe
+ f11awnpipe
+ p1642cgit
+ f0arnpipe
+ f1awnpipe
+ p1678cgit
+ f0arnpipe
+ f1awnpipe
+ p1683cgit
+ f0arnpipe
+ f1awnpipe
+ p1687cgit
+ f0arnpipe
+ f1awnpipe
+ p1693cgit
+ f0arnpipe
+ f1awnpipe
+ p1694cgit
+ f0arnpipe
+ f1awnpipe
+ p1697cgit
+ f0arnpipe
+ f1awnpipe
+ p1716cxulrunner
+ fcwda n/home/raz
+ f0arnpipe
+ f10arnpipe
+ f11awnpipe
+ f12arnpipe
+ f13awnpipe
+ f14arnpipe
+ f15awnpipe
+ f19arnpipe
+ f20awnpipe
+ f28arnpipe
+ f29awnpipe
+ f49arnpipe
+ f52awnpipe
+ p1719ckonsole
+ fcwda n/home/raz
+ f0arnpipe
+ f4arnpipe
+ f6awnpipe
+ f12awnpipe
+ f16awnpipe
+ f19arnpipe
+ f20awnpipe
+ f25arnpipe
+ f26awnpipe
+ p1724cemacs
+ fcwda n/home/raz
+ p1740czsh
+ fcwda n/home/raz
+ p1748cat-spi-bus-laun
+ f5arnpipe
+ f6awnpipe
+ p1980cgpg-agent
+ f3arnpipe
+ f4awnpipe
+ p1989cssh
+ fcwda n/home/raz
+ p1996czsh
+ fcwda n/home/raz
+ p2600clsof
+ fcwda n/home/raz
+ f4awnpipe
+ f5arnpipe
+ p2601clsof
+ fcwda n/home/raz
+ f3arnpipe
+ f6awnpipe
+ zsh: exit 1 lsof -F0can +d ~
+
+Comparing with the same command using lsof-4.87, something doesn't seem quite right:
+
+ % lsof -v
+ lsof version information:
+ revision: 4.87
+ latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
+ latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
+ latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
+ constructed: Thu May 30 11:05:15 UTC 2013
+ constructed by and on: nobody@-var-lib-archbuild-extra-x86_64-tomegun
+ compiler: cc
+ compiler version: 4.8.0 20130502 (prerelease) (GCC)
+ compiler flags: -DLINUXV=38004 -DGLIBCV=217 -DHASIPv6 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -DHAS_STRFTIME -DLSOF_VSTR=\"3.8.4\" -O
+ loader flags: -L./lib -llsof
+ system info: Linux -var-lib-archbuild-extra-x86_64-tomegun 3.9.2-1-ARCH #1 SMP PREEMPT Sat May 11 20:31:08 CEST 2013 x86_64 GNU/Linux
+ Only root can list all files.
+ /dev warnings are disabled.
+ Kernel ID check is disabled.
+ % lsof -F0can +d ~
+ p476csh
+ a n/home/raz
+ awn/home/raz/.xsession-errors
+ awn/home/raz/.xsession-errors
+ arn/home/raz/.xsession
+ p486cuim-xim
+ a n/home/raz
+ awn/home/raz/.xsession-errors
+ awn/home/raz/.xsession-errors
+ p487cuim-toolbar-gtk
+ a n/home/raz
+ awn/home/raz/.xsession-errors
+ awn/home/raz/.xsession-errors
+ p488cclfswm
+ awn/home/raz/.xsession-errors
+ awn/home/raz/.xsession-errors
+ p490cuim-helper-serv
+ a n/home/raz
+ awn/home/raz/.xsession-errors
+ p491csbcl
+ awn/home/raz/.xsession-errors
+ awn/home/raz/.xsession-errors
+ p492cmozc_server
+ a n/home/raz
+ awn/home/raz/.xsession-errors
+ awn/home/raz/.xsession-errors
+ p956cskype
+ a n/home/raz
+ p957ctrayer
+ a n/home/raz
+ p1081cuim-candwin-gtk
+ a n/home/raz
+ awn/home/raz/.xsession-errors
+ p1716cxulrunner
+ a n/home/raz
+ p1719ckonsole
+ a n/home/raz
+ p1724cemacs
+ a n/home/raz
+ p1740czsh
+ a n/home/raz
+ p1989cssh
+ a n/home/raz
+ p1996czsh
+ a n/home/raz
+ p2636cconkeror-spawn-
+ a n/home/raz
+ p2638cemacsclient
+ a n/home/raz
+ p2769clsof
+ a n/home/raz
+ p2770clsof
+ a n/home/raz
+ zsh: exit 1 lsof -F0can +d ~
+
+"""]]
diff --git a/doc/bugs/git_annex_assistant_crashes_when_parsing_lsof_output_for_version_4.88/comment_3_ae25d140e01d9e2a8f76b8f892ff71ec._comment b/doc/bugs/git_annex_assistant_crashes_when_parsing_lsof_output_for_version_4.88/comment_3_ae25d140e01d9e2a8f76b8f892ff71ec._comment
new file mode 100644
index 000000000..b939c29bb
--- /dev/null
+++ b/doc/bugs/git_annex_assistant_crashes_when_parsing_lsof_output_for_version_4.88/comment_3_ae25d140e01d9e2a8f76b8f892ff71ec._comment
@@ -0,0 +1,42 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2014-11-12T21:27:48Z"
+ content="""
+
+ cat > ~/tmp/dir/foo &
+ lsof -F0can +d ~/tmp/dir
+
+Old:
+
+<pre>
+p15304^@ccat^@
+aw^@n/home/joey/tmp/dir/foo^@
+</pre>
+
+New:
+
+</pre>
+p15304^@ccat^@
+f1^@aw^@n/home/joey/tmp/dir/foo^@
+p15399^@clsof^@
+f1^@aw^@npipe^@
+f4^@aw^@npipe^@
+f5^@ar^@npipe^@
+p15401^@cless^@
+f0^@ar^@npipe^@
+p15402^@clsof^@
+f3^@ar^@npipe^@
+f6^@aw^@npipe^@
+</pre>
+
+It looks like the new lsof has broken/changed -F; the file descriptor field
+is being showed even though -F0can does not request it.
+
+IMHO this is a bug in lsof.
+
+Additionally, the new lsof shows processes that have open pipes, even
+when it's been asked to show only files under a given directory.
+
+I've reported these problems upstream. Easy enough to work around in git-annex's parser.
+"""]]
diff --git a/doc/bugs/git_annex_assistant_leaks_a_lot_of_memory.mdwn b/doc/bugs/git_annex_assistant_leaks_a_lot_of_memory.mdwn
new file mode 100644
index 000000000..3f701b788
--- /dev/null
+++ b/doc/bugs/git_annex_assistant_leaks_a_lot_of_memory.mdwn
@@ -0,0 +1,9 @@
+Hi,
+
+I have a git-annex repository on a server managed by git annex assistant in indirect mode and as a backup group serving my org-mode files (organizer module for emacs) which are plain text files no more than a 100kb.
+
+I also have 2 clients in direct mode to sync the files across my computers.
+
+I save my files fairly often so the assistant might be a bit overwhelmed but I think it can managed that. At least it used to.
+
+Since maybe a couple months, the assistant running on the server has been leaking nearly 1Gb each day and I suspect it rises whenever I push files to it.
diff --git a/doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_1_a4805854c448e4bc70a47f5555e0f73c._comment b/doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_1_a4805854c448e4bc70a47f5555e0f73c._comment
new file mode 100644
index 000000000..198731df9
--- /dev/null
+++ b/doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_1_a4805854c448e4bc70a47f5555e0f73c._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-11-06T19:53:02Z"
+ content="""
+Does the assistant's memory use go back to being small when you stop
+and restart the daemon, or does it immediately go back up?
+
+Are there a lot of files in `.git/annex/transfer`? One possibility
+is it might be getting flooded with failed/pending file transfers.
+
+If you feel up to building git-annex from source, you could
+enable the EKG remote monitoring interface. This would let you see
+graphs of the memory use, and probably get a good idea of what's
+using memory. Or, you could do a full memory profiling build of
+git-annex, which will let us nail down exactly what's using the memory.
+
+See [[this_page|ekg]] for instructions for building git-annex for EKG
+and memory profiling. If it's too hard for you to do that, I can
+probably provide you with a prebuilt version with memory profiling.
+"""]]
diff --git a/doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_2_e9dca04e0456ca7356996365a4b87d59._comment b/doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_2_e9dca04e0456ca7356996365a4b87d59._comment
new file mode 100644
index 000000000..d7d4dec39
--- /dev/null
+++ b/doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_2_e9dca04e0456ca7356996365a4b87d59._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://renaud.casenave.fr/"
+ subject="comment 2"
+ date="2014-11-08T07:18:48Z"
+ content="""
+Hi,
+
+Yes, the assistant memory goes back to normal when I do `git annex assistant --stop && git annex assistant`. But when I look at htop the next day, it has already taken 1Gb.
+
+There are quite a lot of files in `.git/annex/transfer`… wc reports more than 200 entries, mainly in the upload folder, although the repository only manages 10 or so files.
+
+I tried building git-annex using cabal but `cabal configure -fEKG` exits with the code 9 and even without `-fEKG` cabal refuses to install some of the dependencies. I'll try again some other time…
+
+"""]]
diff --git a/doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_3_45ae862d4f940341d48d179583e65d66._comment b/doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_3_45ae862d4f940341d48d179583e65d66._comment
new file mode 100644
index 000000000..294ca5f98
--- /dev/null
+++ b/doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_3_45ae862d4f940341d48d179583e65d66._comment
@@ -0,0 +1,38 @@
+[[!comment format=mdwn
+ username="https://renaud.casenave.fr/"
+ subject="comment 3"
+ date="2014-11-15T02:07:38Z"
+ content="""
+Well it's been a week and still no luck compiling git-annex using cabal :(
+
+I'm blocked here (at pretty much the start):
+
+ % cabal install --only-dependencies
+ Resolving dependencies...
+ cabal: Could not resolve dependencies:
+ trying: git-annex-5.20141125 (user goal)
+ trying: git-annex-5.20141125:+tahoe
+ trying: git-annex-5.20141125:+dns
+ trying: aeson-0.6.0.2/installed-5b6... (dependency of
+ git-annex-5.20141125:+tahoe)
+ trying: vector-0.9.1/installed-5fe... (dependency of
+ aeson-0.6.0.2/installed-5b6...)
+ trying: dns-1.4.4 (dependency of git-annex-5.20141125:+dns)
+ next goal: network (dependency of dns-1.4.4)
+ rejecting: network-2.3.0.13/installed-0e3... (conflict:
+ git-annex-5.20141125:network-uri => network(>=2.6))
+ trying: network-2.6.0.2
+ next goal: conduit-extra (dependency of dns-1.4.4)
+ rejecting: conduit-extra-1.1.4.2, 1.1.4.1, 1.1.4, 1.1.3.4, 1.1.3.3, 1.1.3.2,
+ 1.1.3.1, 1.1.3, 1.1.2, 1.1.1, 1.1.0.4 (conflict: vector =>
+ primitive==0.4.1/installed-505..., conduit-extra => primitive>=0.5)
+ rejecting: conduit-extra-1.1.0.3, 1.1.0.2, 1.1.0.1 (conflict: vector =>
+ primitive==0.4.1/installed-505..., conduit-extra => primitive>=0.5 && <0.6)
+ rejecting: conduit-extra-1.1.0 (conflict: network==2.6.0.2, conduit-extra =>
+ network>=2.3 && <2.5)
+ rejecting: conduit-extra-1.0.0.1, 1.0.0, 0.1.7, 0.1.6, 0.1.5, 0.1.4, 0.1.3,
+ 0.1.2, 0.1.1, 0.1.0 (conflict: dns => conduit-extra>=1.1)
+ zsh: exit 1 cabal install --only-dependencies
+
+Should I just wait for the maintainers to fix the dependencies? Or is there another way?
+"""]]
diff --git a/doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_4_d597e15e9693ce6e8c1ca80cb225b044._comment b/doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_4_d597e15e9693ce6e8c1ca80cb225b044._comment
new file mode 100644
index 000000000..ccd35305b
--- /dev/null
+++ b/doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_4_d597e15e9693ce6e8c1ca80cb225b044._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawntodrSgODU27WUCyN2PV7TC14YMkyaoxQ"
+ nickname="Dennis"
+ subject="comment 4"
+ date="2014-12-11T10:58:21Z"
+ content="""
+I suffer from the same issue.
+
+In ~/.profile I put the line `git-annex assistant --quiet --autostart --startdelay=5s > /dev/null &`.
+
+Htop shows:
+
+ 26291 xxx 20 0 6584M 3123M 9864 S 0.0 81.6 29h29:17 git-annex assistant --startdelay=5s
+ 26292 xxx 20 0 6584M 3123M 9864 S 0.0 81.6 12h38:32 git-annex assistant --startdelay=5s
+ 26293 xxx 20 0 6584M 3123M 9864 S 0.0 81.6 21h45:49 git-annex assistant --startdelay=5s
+ 26321 xxx 20 0 6584M 3123M 9864 D 0.0 81.6 18:34.12 git-annex assistant --startdelay=5s
+ 21019 xxx 20 0 6584M 3123M 9864 S 0.0 81.6 0:00.08 git-annex assistant --startdelay=5s
+ 21908 xxx 20 0 6584M 3123M 9864 S 0.0 81.6 0:00.00 git-annex assistant --startdelay=5s
+ 26290 xxx 20 0 6584M 3123M 9864 S 0.0 81.6 64h33:50 git-annex assistant --startdelay=5s
+
+"""]]
diff --git a/doc/bugs/git_annex_content_fails_with_a_parse_error.mdwn b/doc/bugs/git_annex_content_fails_with_a_parse_error.mdwn
deleted file mode 100644
index 38c8fa28d..000000000
--- a/doc/bugs/git_annex_content_fails_with_a_parse_error.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-### Please describe the problem.
-
-I tried to use git annex content, but that failed with a parse error.
-
-
-### What steps will reproduce the problem?
-
-Type this anywhere:
-
-git annex --debug content . "exclude(foo.ml)"
-content . git-annex: Parse error: Parse failure: near "foo.ml"
-
-It fails with the example of the man page:
- git annex content . "include(*.mp3) or include(*.ogg)"
-
-However, it works when trying: git annex content . "include()".
-
-### What version of git-annex are you using? On what operating system?
-
-git-annex version: 4.20130709.1, ubuntu quantal
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> Fixed the example, thanks. --[[Joey]] [[done]]
diff --git a/doc/bugs/git_annex_content_fails_with_a_parse_error/comment_1_2b60b6ae0115de13ecf837b34dadcd1d._comment b/doc/bugs/git_annex_content_fails_with_a_parse_error/comment_1_2b60b6ae0115de13ecf837b34dadcd1d._comment
deleted file mode 100644
index 75a157964..000000000
--- a/doc/bugs/git_annex_content_fails_with_a_parse_error/comment_1_2b60b6ae0115de13ecf837b34dadcd1d._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="Matt"
- ip="78.251.139.64"
- subject="Correct syntax"
- date="2013-07-15T08:46:51Z"
- content="""
-After some digging, it turned out that the correct syntax is git annex content . \"include=*.mp3 or include=*.ogg\". So it is more a documentation bug
-"""]]
diff --git a/doc/bugs/git_annex_copy_-f_REMOTE_._doesn__39__t_work_as_expected.mdwn b/doc/bugs/git_annex_copy_-f_REMOTE_._doesn__39__t_work_as_expected.mdwn
deleted file mode 100644
index 3bda45149..000000000
--- a/doc/bugs/git_annex_copy_-f_REMOTE_._doesn__39__t_work_as_expected.mdwn
+++ /dev/null
@@ -1,18 +0,0 @@
-I was testing out the fix/workaround for [[git-annex directory hashing problems on osx]] and I tried using the short forms of some of the commands i.e.
-
- git annex copy -f externalusb .
-
-which gives me
-
- git-annex: user error (option `-f' is ambiguous; could be one of:
- -f --force allow actions that may lose annexed data
- -f REMOTE --from=REMOTE specify from where to transfer content
-
-
-I would have expected that since *--to* is the same as *-t* and *--from* is the same as *-f* as the in program documentation suggests. But *-f* clashes with the force command, I would suggest that the short form of *--force* be changed to *-F* and possibly rename the *Fast* commands to *Quick* and use *-Q* as the short form of the *Quick* operations. I didn't try the *-f* option with the move command, but it probably suffers from the same issue. It's probably better to avoid clashing short forms of command options.
-
-I guess this issue is just a documentation issue and a minor interface change if needed and not a bug of git-annex, but a quirk.
-
-> Yeah, -f needs to be from; -F was already --fast. I have made --force not
-> have any short option abbreviation, I think it's entirely reasonable to
-> avoid fat-fingering an option that can lose data. [[done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_copy_trying_to_connect_to_remotes_uninvolved.mdwn b/doc/bugs/git_annex_copy_trying_to_connect_to_remotes_uninvolved.mdwn
deleted file mode 100644
index f41a80616..000000000
--- a/doc/bugs/git_annex_copy_trying_to_connect_to_remotes_uninvolved.mdwn
+++ /dev/null
@@ -1,27 +0,0 @@
-git-annex is trying to ssh (twice by the look of it) to a remote that is not involved in the copy. In this case, git-annex gives a usage error, but not before calling ssh twice:
-
- $ git annex copy --from=hugex --to=h2 01-pilot.avi
- ssh: connect to host 192.168.1.5 port 22: No route to host
- ssh: connect to host 192.168.1.5 port 22: No route to host
- fatal: Could not read from remote repository.
-
- Please make sure you have the correct access rights
- and the repository exists.
- git-annex: only one of --from or --to can be specified
-
-git-annex shouldn't be running ssh before checking commandline arguments! Or, in this case at all, since both remotes mentioned on the commandline are local:
-
- $ git config remote.hugex.url
- /media/hugex/jason/home.git
- $ git config remote.h2.url
- /media/h2/backup/git/home.git
-
-
-I'm running git-annex 4.20130627 as shipped with debian unstable.
-
---
-Jason
-
-P.S. 192.168.1.5 is set as the HostName for one of my other remotes in my ~/.ssh/config, so this isn't _totally_ out of the blue.
-
-> [[done]]; see comment's explanation. --[[Joey]]
diff --git a/doc/bugs/git_annex_copy_trying_to_connect_to_remotes_uninvolved/comment_1_f1330935a07460c9c8bc82ee8d4709c5._comment b/doc/bugs/git_annex_copy_trying_to_connect_to_remotes_uninvolved/comment_1_f1330935a07460c9c8bc82ee8d4709c5._comment
deleted file mode 100644
index 2595e083b..000000000
--- a/doc/bugs/git_annex_copy_trying_to_connect_to_remotes_uninvolved/comment_1_f1330935a07460c9c8bc82ee8d4709c5._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.193"
- subject="comment 1"
- date="2013-06-30T17:27:07Z"
- content="""
-git-annex needs to discover the uuid of each remote before it can use it. So it currently goes off the discover these uuids at startup time.
-
-If you have a remote that you do not want git-annex to use, you can set remote.name.annex-ignore and it will not do this discovery process for that remote.
-
-While it would be possible to defer the lookup until an operation that needs to know the remote's uuid, it would complicate the code quite a bit, so I have not tried to do so.
-"""]]
diff --git a/doc/bugs/git_annex_costs_not_working_as_expected_in_the_assistant.mdwn b/doc/bugs/git_annex_costs_not_working_as_expected_in_the_assistant.mdwn
new file mode 100644
index 000000000..f3b124cf6
--- /dev/null
+++ b/doc/bugs/git_annex_costs_not_working_as_expected_in_the_assistant.mdwn
@@ -0,0 +1,140 @@
+### Please describe the problem.
+
+Hi,
+
+I have a number of repos that I created both by hand and via the web-app. Some manual, some client and one backup groupings.
+
+When creating by hand I manually set the annex-cost to 100 (but I notice the webapp sets local costs to 175 - not 100 as per the man page).
+
+(I'm assuming the creation by hand is still just to `git add remote` on both sides).
+
+When I run `git-annex sync --content` I do seem to get the local remote (the cheapest cost) that I want.
+
+When I use the assistant I get every odd behaviour. It will quite happily choose from any of the available repos with no descernible pattern.
+
+Even more strangely sometimes it queues all the transfers to use the local connection but then at the actual transfer it switches to use the public connection (I have two remotes for one repo: when on the local network and when on the internet). This is reflected in the webapps UI.
+
+For the snippet of logs below I see the files queued as the remote "Dancingfrog" (on the internnal network) then for the transfer the web page switches to "Home" (the public network). I think the data is actually transferred over the public network as it's much slower than compared to explicit repo transfers from the cli.
+
+<pre>
+[2014-04-27 05:11:47 BST] TransferWatcher: transfer starting: Download UUID "c3cec307-367b-4373-8cb9-a3da67cee745" Dizzee Rascal/Tounge N' Cheek/03 Dance Wiv Me [Ft. Calvin Harris & Chrome].mp3 Nothing
+[2014-04-27 05:11:47 BST] TransferWatcher: transfer starting: Download UUID "c3cec307-367b-4373-8cb9-a3da67cee745" Dizzee Rascal/Tounge N' Cheek/03 Dance Wiv Me [Ft. Calvin Harris & Chrome].mp3 Nothing
+
+SHA256E-s6759929--a822e83c3448716e793fb9d1d1b1523c2492c84ba07f5c093899810fbdfe5621.mp3
+
+ 0 0% 0.00kB/s 0:00:00
+ 163,840 2% 159.20kB/s 0:00:41
+ 360,448 5% 159.56kB/s 0:00:40
+ 524,288 7% 155.01kB/s 0:00:40
+ 688,128 10% 154.59kB/s 0:00:39
+ 851,968 12% 153.18kB/s 0:00:38 [2014-04-27 05:11:54 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","ls-tree","--full-tree","-z","--","refs/heads/git-annex","uuid.log","remote.log","trust.log","group.log","numcopies.log","schedule.log","preferred-content.log","required-content.log","group-preferred-content.log"]
+
+ 1,015,808 15% 149.92kB/s 0:00:38 To gcrypt::ssh://rss/home/matt/mnt/isilon/rss/zzalsmf3/git-annex/mus
+ 617edaf..f016a03 git-annex -> synced/git-annex
+[2014-04-27 05:11:56 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","show-ref","git-annex"]
+[2014-04-27 05:11:56 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","show-ref","--hash","refs/heads/git-annex"]
+[2014-04-27 05:11:56 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","push","isilon","master"]
+[2014-04-27 05:11:56 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..f016a03fc92aebba14b239cc3647478b1fb9f78f","--oneline","-n1"]
+[2014-04-27 05:11:56 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..7339a1fdd007d7a528b7e2eb82c2aeedca511920","--oneline","-n1"]
+[2014-04-27 05:11:56 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..00f5e110ca77b9b5103e1b568ea6aa9d9d9dbb81","--oneline","-n1"]
+[2014-04-27 05:11:56 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..ab90c337053a61111060540d2f60ce20b44cc2d9","--oneline","-n1"]
+[2014-04-27 05:11:56 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..88d99a7ef2d37d1a6180e5dd66a4559927a58eaf","--oneline","-n1"]
+
+ 1,146,880 16% 98.64kB/s 0:00:56
+ 1,507,328 22% 129.55kB/s 0:00:40
+ 1,671,168 24% 126.84kB/s 0:00:40 [2014-04-27 05:12:00 BST] Pusher: Syncing with dancingfrog, rss, isilon
+[2014-04-27 05:12:00 BST] chat: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","hash-object","-w","--stdin-paths","--no-filters"]
+[2014-04-27 05:12:00 BST] feed: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","update-index","-z","--index-info"]
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","show-ref","--hash","refs/heads/git-annex"]
+(Recording state in git...)
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","write-tree"]
+[2014-04-27 05:12:00 BST] chat: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","commit-tree","86e5513adfc0d1f64cabd3ca3902738d45d809ad","-p","refs/heads/git-annex"]
+[2014-04-27 05:12:00 BST] call: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","update-ref","refs/heads/git-annex","8808dc8effc3572ae1421461ff44574e900917bf"]
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","symbolic-ref","HEAD"]
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","show-ref","refs/heads/master"]
+[2014-04-27 05:12:00 BST] Pusher: pushing to [Remote { name ="dancingfrog" },Remote { name ="rss" },Remote { name ="isilon" }]
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","show-ref","git-annex"]
+[2014-04-27 05:12:00 BST] call: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","branch","-f","synced/master"]
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","show-ref","--hash","refs/heads/git-annex"]
+[2014-04-27 05:12:00 BST] call: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","push","dancingfrog","+git-annex:synced/git-annex","master:synced/master"]
+[2014-04-27 05:12:00 BST] call: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","push","rss","+git-annex:synced/git-annex","master:synced/master"]
+[2014-04-27 05:12:00 BST] call: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","push","isilon","+git-annex:synced/git-annex","master:synced/master"]
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..8808dc8effc3572ae1421461ff44574e900917bf","--oneline","-n1"]
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..7339a1fdd007d7a528b7e2eb82c2aeedca511920","--oneline","-n1"]
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..00f5e110gcrypt: Development version -- Repository format MAY CHANGE
+ca77b9b5103e1b568ea6aa9d9d9dbb81","--oneline","-n1"]
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..f016a03fc92aebba14b239cc3647478b1fb9f78f","--oneline","-n1"]
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..ab90c337053a61111060540d2f60ce20b44cc2d9","--oneline","-n1"]
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..88d99a7ef2d37d1a6180e5dd66a4559927a58eaf","--oneline","-n1"]
+To ssh://10.23.33.19/Volumes/Media/iTunes Media/Music
+ f016a03..8808dc8 git-annex -> synced/git-annex
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","show-ref","git-annex"]
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","push","dancingfrog","master"]
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","show-ref","--hash","refs/heads/git-annex"]
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..8808dc8effc3572ae1421461ff44574e900917bf","--oneline","-n1"]
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..7339a1fdd007d7a528b7e2eb82c2aeedca511920","--oneline","-n1"]
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..00f5e110ca77b9b5103e1b568ea6aa9d9d9dbb81","--oneline","-n1"]
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..ab90c337053a61111060540d2f60ce20b44cc2d9","--oneline","-n1"]
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..f016a03fc92aebba14b239cc3647478b1fb9f78f","--oneline","-n1"]
+[2014-04-27 05:12:00 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..88d99a7ef2d37d1a6180e5dd66a4559927a58eaf","--oneline","-n1"]
+
+ 1,835,008 27% 125.00kB/s 0:00:39 To rss:Music
+ f016a03..8808dc8 git-annex -> synced/git-annex
+[2014-04-27 05:12:01 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","show-ref","git-annex"]
+[2014-04-27 05:12:01 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","push","rss","master"]
+[2014-04-27 05:12:01 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","show-ref","--hash","refs/heads/git-annex"]
+[2014-04-27 05:12:01 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..8808dc8effc3572ae1421461ff44574e900917bf","--oneline","-n1"]
+[2014-04-27 05:12:01 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..7339a1fdd007d7a528b7e2eb82c2aeedca511920","--oneline","-n1"]
+[2014-04-27 05:12:01 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..00f5e110ca77b9b5103e1b568ea6aa9d9d9dbb81","--oneline","-n1"]
+[2014-04-27 05:12:01 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..ab90c337053a61111060540d2f60ce20b44cc2d9","--oneline","-n1"]
+[2014-04-27 05:12:01 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..f016a03fc92aebba14b239cc3647478b1fb9f78f","--oneline","-n1"]
+[2014-04-27 05:12:01 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..88d99a7ef2d37d1a6180e5dd66a4559927a58eaf","--oneline","-n1"]
+gcrypt: Decrypting manifest
+gpg: Signature made Sun 27 Apr 2014 05:11:41 BST using DSA key ID 29C42E01
+gpg: Good signature from "Matt Ford (Work) <matt.ford@manchester.ac.uk>"
+gpg: aka "Matt Ford <matt@dancingfrog.co.uk>"
+gcrypt: Encrypting to: -R 68D8501429C42E01
+gcrypt: Requesting manifest signature
+gpg: 68D8501429C42E01: skipped: public key already present
+
+ 1,998,848 29% 180.87kB/s 0:00:26
+ 2,162,688 31% 135.56kB/s 0:00:33 To gcrypt::ssh://rss/home/matt/mnt/isilon/rss/zzalsmf3/git-annex/mus
+ f016a03..8808dc8 git-annex -> synced/git-annex
+[2014-04-27 05:12:03 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","show-ref","git-annex"]
+[2014-04-27 05:12:03 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","show-ref","--hash","refs/heads/git-annex"]
+[2014-04-27 05:12:03 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","push","isilon","master"]
+[2014-04-27 05:12:03 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..8808dc8effc3572ae1421461ff44574e900917bf","--oneline","-n1"]
+[2014-04-27 05:12:03 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..7339a1fdd007d7a528b7e2eb82c2aeedca511920","--oneline","-n1"]
+[2014-04-27 05:12:03 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..00f5e110ca77b9b5103e1b568ea6aa9d9d9dbb81","--oneline","-n1"]
+[2014-04-27 05:12:03 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..ab90c337053a61111060540d2f60ce20b44cc2d9","--oneline","-n1"]
+[2014-04-27 05:12:03 BST] read: git ["--git-dir=/home/matt/Music/.git","--work-tree=/home/matt/Music","log","refs/heads/git-annex..88d99a7ef2d37d1a6180e5dd66a4559927a58eaf","--oneline","-n1"]
+
+ 2,326,528 34% 139.74kB/s 0:00:31
+ 3,637,248 53% 397.83kB/s 0:00:07
+ 4,423,680 65% 556.91kB/s 0:00:04
+ 5,079,040 75% 692.27kB/s 0:00:02
+ 5,636,096 83% 781.05kB/s 0:00:01
+
+× Synced with dancingfrog, rss, isilon
+× Downloaded 11 Bad Be..viour.mp3 10 Holida..rome].mp3 09 Leisure.mp3 08 Money Money.mp3 07 Dirtee Cash.mp3 06 Chilli..n Dem.mp3 05 Can't .. More.mp3 04 Freaky..reaky.mp3 03 Dance ..rome].mp3 02 Road Rage.mp3 and 8 other files
+× Synced with rss
+× Performed startup scan
+× Synced with dancingfrog, isilon
+</pre>
+
+### What version of git-annex are you using? On what operating system?
+
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+[[!meta title="transferkeys protocol needs to include remote name to deal with multiple remotes with same UUID"]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_costs_not_working_as_expected_in_the_assistant/comment_1_ab82b880bd75a206e0717146e1b79aba._comment b/doc/bugs/git_annex_costs_not_working_as_expected_in_the_assistant/comment_1_ab82b880bd75a206e0717146e1b79aba._comment
new file mode 100644
index 000000000..56d77a2d2
--- /dev/null
+++ b/doc/bugs/git_annex_costs_not_working_as_expected_in_the_assistant/comment_1_ab82b880bd75a206e0717146e1b79aba._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnXybLxkPMYpP3yw4b_I6IdC3cKTD-xEdU"
+ nickname="Matt"
+ subject="comment 1"
+ date="2014-04-27T04:25:58Z"
+ content="""
+By the way these are indirect repos if that would make a difference.
+"""]]
diff --git a/doc/bugs/git_annex_costs_not_working_as_expected_in_the_assistant/comment_2_460e78ea8603bd87203d8014bcc3eb9a._comment b/doc/bugs/git_annex_costs_not_working_as_expected_in_the_assistant/comment_2_460e78ea8603bd87203d8014bcc3eb9a._comment
new file mode 100644
index 000000000..ef70e0abd
--- /dev/null
+++ b/doc/bugs/git_annex_costs_not_working_as_expected_in_the_assistant/comment_2_460e78ea8603bd87203d8014bcc3eb9a._comment
@@ -0,0 +1,55 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnXybLxkPMYpP3yw4b_I6IdC3cKTD-xEdU"
+ nickname="Matt"
+ subject="comment 2"
+ date="2014-04-27T11:48:18Z"
+ content="""
+Here's the `.git/config`
+
+<pre>
+[core]
+ repositoryformatversion = 0
+ filemode = true
+ bare = false
+ logallrefupdates = true
+[branch \"master\"]
+ remote = home
+ merge = refs/heads/master
+[annex]
+ uuid = 105776ba-bd78-4884-9126-aeb7c1e6da21
+ version = 5
+ diskreserve = 100 megabytes
+ autoupgrade = ask
+ debug = true
+ fscknudge = true
+[remote \"dancingfrog\"]
+ url = ssh://10.23.33.19/Volumes/Media/iTunes Media/Music
+ fetch = +refs/heads/*:refs/remotes/dancingfrog/*
+ annex-uuid = c3cec307-367b-4373-8cb9-a3da67cee745
+ annex-cost = 100
+ annex-sync = true
+[remote \"home\"]
+ url = home:/Volumes/Media/iTunes Media/Music
+ fetch = +refs/heads/*:refs/remotes/home/*
+ annex-uuid = c3cec307-367b-4373-8cb9-a3da67cee745
+ annex-sync = true
+ annex-cost = 200
+[remote \"isilon\"]
+ url = gcrypt::ssh://rss/home/matt/mnt/isilon/rss/zzalsmf3/git-annex/mus
+ fetch = +refs/heads/*:refs/remotes/isilon/*
+ gcrypt-participants = 68D8501429C42E01
+ gcrypt-signingkey = 68D8501429C42E01
+ gcrypt-id = :id:92R1j7+L9r5LuWDi2ZlW
+ annex-gcrypt = true
+ annex-uuid = 949a8fc3-6334-5f5e-887d-b1e5725ea443
+ annex-sync = true
+ annex-cost = 250
+[remote \"rss\"]
+ url = rss:Music
+ fetch = +refs/heads/*:refs/remotes/rss/*
+ annex-uuid = 79ff3c20-fab3-44dd-88f7-cc1a41eb73d6
+ annex-sync = true
+ annex-cost = 200
+
+</pre>
+"""]]
diff --git a/doc/bugs/git_annex_costs_not_working_as_expected_in_the_assistant/comment_3_17e9c2d29ddadcabc30ce884ffe0f853._comment b/doc/bugs/git_annex_costs_not_working_as_expected_in_the_assistant/comment_3_17e9c2d29ddadcabc30ce884ffe0f853._comment
new file mode 100644
index 000000000..1ff0f0b61
--- /dev/null
+++ b/doc/bugs/git_annex_costs_not_working_as_expected_in_the_assistant/comment_3_17e9c2d29ddadcabc30ce884ffe0f853._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="216.145.95.162"
+ subject="comment 3"
+ date="2014-05-19T16:44:19Z"
+ content="""
+When the assistant wants to download a file, it queues a transfer from all remotes that are known to have the file, with the lowest cost remotes first. If it fails to get the file from the lowest cost remote, it automatically falls back to the next lowest cost, and so on.
+
+If there's a bug here, I'd suspect strongly it's due to having 2 remotes with the same UUID.
+
+Yes, I think I've found it. Assistant.TransferSlots.genTransfer calls performTransfer, which is passed only the Transfer, not the Remote. So it then looks up a remote with the UUID from the Transfer. To fix this, I will need to adjust the transferkeys command's protocol to include the name of the remote that should be used.
+"""]]
diff --git a/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de.mdwn b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de.mdwn
new file mode 100644
index 000000000..cc3881355
--- /dev/null
+++ b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de.mdwn
@@ -0,0 +1,26 @@
+### Please describe the problem.
+In the webapp, I enter my credentials for my jabber.de account. When I hit "use this account" the daemon and webapp crash.
+
+### What steps will reproduce the problem?
+Presumably, authenticate with a jabber.de account.
+
+### What version of git-annex are you using? On what operating system?
+git-annex version: 5.20140517-g0aed6d9
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+
+### Please provide any additional information below.
+
+[[!format sh """
+[2014-05-25 18:11:02 EDT] 127.0.0.1 POST /config/xmpp Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36
+git-annex: <socket: 44>: hGetBuf: resource vanished (Connection reset by peer)
+git-annex: interrupted
+"""]]
+
+[[!tag confirmed forwarded]]
+
+[[!meta title="OSX xmpp crash with jabber.de"]]
diff --git a/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_1_5ba4f22bda2f5438fb08753cf149b649._comment b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_1_5ba4f22bda2f5438fb08753cf149b649._comment
new file mode 100644
index 000000000..003b60b9f
--- /dev/null
+++ b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_1_5ba4f22bda2f5438fb08753cf149b649._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 1"
+ date="2014-05-27T18:45:35Z"
+ content="""
+I was able to use that server from git-annex on Linux successfully.
+
+I also tried on OSX, which appears to be the OS you're using. The assistant didn't crash. I may not have exactly replicated what you did though.
+
+Can you enable debug logging in Configuration -> Preferences and try to do this again, and send any parts of the log that mention XMPP?
+"""]]
diff --git a/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_2_b096cfdf26bfedfff16d882d7b2e060d._comment b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_2_b096cfdf26bfedfff16d882d7b2e060d._comment
new file mode 100644
index 000000000..87e6b746e
--- /dev/null
+++ b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_2_b096cfdf26bfedfff16d882d7b2e060d._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmZilYULa6CDEGfuagoDlesyakBgnf-dF8"
+ nickname="Maarten"
+ subject="comment 2"
+ date="2014-05-27T18:59:08Z"
+ content="""
+This was debug logging enabled, it appeared to be the only relevant parts in the log but I can try again and post more verbosely.
+
+If nothing more comes up, what else could I do to get you diagnostic data?
+"""]]
diff --git a/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_3_210be77aabb0ef5b85865cd08c51861e._comment b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_3_210be77aabb0ef5b85865cd08c51861e._comment
new file mode 100644
index 000000000..c2db30db0
--- /dev/null
+++ b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_3_210be77aabb0ef5b85865cd08c51861e._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 3"
+ date="2014-05-27T19:03:20Z"
+ content="""
+Hmm, so it was.. There was so little logged that I missed it.
+
+Can you reproduce the crash?
+
+I think that OSX has some ways to get a dump of information about a crash, but I don't know details.
+"""]]
diff --git a/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_4_bb974d882fbb31aa54e6de38410a2318._comment b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_4_bb974d882fbb31aa54e6de38410a2318._comment
new file mode 100644
index 000000000..059eec050
--- /dev/null
+++ b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_4_bb974d882fbb31aa54e6de38410a2318._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmZilYULa6CDEGfuagoDlesyakBgnf-dF8"
+ nickname="Maarten"
+ subject="comment 4"
+ date="2014-05-27T19:07:45Z"
+ content="""
+I might attach wireshark but I don't know if it'll help much seeing as jabber.de as most XMPP services just went SSL only.
+"""]]
diff --git a/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_5_be655cbea27b6c87d298a75e1697a87d._comment b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_5_be655cbea27b6c87d298a75e1697a87d._comment
new file mode 100644
index 000000000..f6aa9d45b
--- /dev/null
+++ b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_5_be655cbea27b6c87d298a75e1697a87d._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 5"
+ date="2014-05-30T19:09:31Z"
+ content="""
+If you can reproduce the crash, I can provide some debug program that will narrow down where the bug is..
+"""]]
diff --git a/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_6_72d1dac6627bbe22d5bd140215d82c47._comment b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_6_72d1dac6627bbe22d5bd140215d82c47._comment
new file mode 100644
index 000000000..909fdd3ae
--- /dev/null
+++ b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_6_72d1dac6627bbe22d5bd140215d82c47._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmZilYULa6CDEGfuagoDlesyakBgnf-dF8"
+ nickname="Maarten"
+ subject="comment 6"
+ date="2014-05-30T19:37:03Z"
+ content="""
+I can definitely reproduce it on my end
+"""]]
diff --git a/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_7_8a8dfb15684525e156d6334e9f67a55c._comment b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_7_8a8dfb15684525e156d6334e9f67a55c._comment
new file mode 100644
index 000000000..8e862d468
--- /dev/null
+++ b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_7_8a8dfb15684525e156d6334e9f67a55c._comment
@@ -0,0 +1,66 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 7"
+ date="2014-05-30T20:47:02Z"
+ content="""
+I wrote a test program to try to connect to this server, using a test account, and dump some events. This works on linux. Then I tried it on mac, and I think I have reproduced the same failure!
+
+<pre>
+oberon:~ joeyh$ ./xmpp
+xmpp: <socket: 3>: hGetBuf: resource vanished (Connection reset by peer)
+</pre>
+
+Note that this exception is unable to be caught, it seems. Which would explain why the whole git-annex assistant crashes.
+
+Also, the same program, when modified to use some other xmpp server, does not crash.
+
+At this point, I think I need to forward this bug to network-protocol-xmpp author John Millikin. Which I've now done.
+
+My advice for the bug submitter: git-annex is going to be deprecating XMPP in the not too distant future anyway. If you have your own server, a much nicer way to use git-annex is to install it on the server and use ssh remotes. Recent versions do not need xmpp to sync between clients in such a configuration.
+
+Test program:
+
+[[!format haskell \"\"\"
+{-# LANGUAGE OverloadedStrings #-}
+
+import Network.Protocol.XMPP
+import Data.Maybe
+import Data.Either
+import Network
+import Control.Monad
+import Control.Monad.IO.Class
+import Control.Exception
+
+main = do
+ catch test
+ (\e -> do
+ let err = show (e :: IOException)
+ print (\"caught: \", err)
+ return (Right ())
+ )
+ print \"clean exit\"
+
+test :: IO (Either Error ())
+test = runClient server (getjid jid) username password $ do
+ liftIO $ print \"connected to server\"
+ jid <- bindJID (getjid jid)
+ liftIO $ print (\"bound to jid\", jid)
+ forever $ do
+ s <- getStanza
+ liftIO $ print (\"got\", s)
+ where
+ getjid t = fromMaybe (error \"jid parse error\") (parseJID t)
+ server = Server
+ (getjid serverjid)
+ servername
+ (PortNumber port)
+
+ servername = \"jabber.de\"
+ serverjid = \"jabber.de\"
+ port = 5222
+ jid = \"haskellxmpptest@jabber.de\"
+ username = \"haskellxmpptest\"
+ password = \"stupidpassword\"
+\"\"\"]]
+"""]]
diff --git a/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_8_f1a6e413756066659020e20147373a11._comment b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_8_f1a6e413756066659020e20147373a11._comment
new file mode 100644
index 000000000..c4a874954
--- /dev/null
+++ b/doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_8_f1a6e413756066659020e20147373a11._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 8"
+ date="2014-07-11T19:57:35Z"
+ content="""
+Unfortunately, this seems to be somewhat intermittent, so while I had a test case that worked once, John never saw it fail and has not been able to debug it. The test case has successfully connected every time I've tried it recently too. Perhaps jabber.de has changed whatever was causing the problem..
+"""]]
diff --git a/doc/bugs/git_annex_describe_can_break_uuid.log.mdwn b/doc/bugs/git_annex_describe_can_break_uuid.log.mdwn
deleted file mode 100644
index 16e6981f5..000000000
--- a/doc/bugs/git_annex_describe_can_break_uuid.log.mdwn
+++ /dev/null
@@ -1,46 +0,0 @@
-### Please describe the problem.
-
-`uuid.log` can end up in a state where `git annex describe` (and probably other things) stops working.
-
-### What steps will reproduce the problem?
-
-Run `git annex describe` against a remote that is not a an initialized git-annex repo.
-
-### What version of git-annex are you using? On what operating system?
-
-debian-packaged git-annex 4.20131106 on Linux Mint 13/Maya (Ubuntu Precise/12.04)
-
-### Please provide any additional information below.
-
-I will follow comments, but can also be found at [[https://microca.st/clacke]].
-
-Full transcript to reproduce:
-
-[[!format sh """
-$ git init a
-Initialized empty Git repository in /tmp/annex/a/.git/
-$ git init b
-Initialized empty Git repository in /tmp/annex/b/.git/
-$ cd a/
-$ git annex init
-init ok
-(Recording state in git...)
-$ git remote add -f b ../b
-Updating b
-$ git annex describe b b # this should not be ok
-describe b ok
-(Recording state in git...)
-$ git annex describe b b
-describe b git-annex: Prelude.last: empty list
-$ git cat-file blob git-annex:uuid.log
- b timestamp=1383987654.900868s
-...
-
-# End of transcript.
-"""]]
-
-> Fixed the bug and made git breakage not crash git-annex. [[done]]
-> --[[Joey]]
-
-> > Update: Also made it automatically clean up the cruft this put in the
-> > log. --[[Joey]]
diff --git a/doc/bugs/git_annex_describe_can_break_uuid.log/comment_2_9ead36f13cbde6c822b231441de636ae._comment b/doc/bugs/git_annex_describe_can_break_uuid.log/comment_2_9ead36f13cbde6c822b231441de636ae._comment
deleted file mode 100644
index a5616234e..000000000
--- a/doc/bugs/git_annex_describe_can_break_uuid.log/comment_2_9ead36f13cbde6c822b231441de636ae._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://id.clacke.se/"
- nickname="clacke"
- subject="comment 2"
- date="2013-11-11T05:32:14Z"
- content="""
-Great, thanks!
-"""]]
diff --git a/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist.mdwn b/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist.mdwn
new file mode 100644
index 000000000..2e2000c61
--- /dev/null
+++ b/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist.mdwn
@@ -0,0 +1,28 @@
+### Please describe the problem.
+
+git annex direct displays warnings(?)
+### What steps will reproduce the problem?
+ mkdir test
+ cd test
+ git init
+ git annex init
+ touch foobar.txt
+ git annex add
+ git annex direct
+
+
+### What version of git-annex are you using? On what operating system?
+5.20140717 (ubuntu 14.10)
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> [[done]]; cannot reproduce with current version of git-annex AFAICS.
+> --[[Joey]]
diff --git a/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_1_b4ad8561eab9b5c3a6eaa2f275aececc._comment b/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_1_b4ad8561eab9b5c3a6eaa2f275aececc._comment
new file mode 100644
index 000000000..8e080776c
--- /dev/null
+++ b/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_1_b4ad8561eab9b5c3a6eaa2f275aececc._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-01-15T19:00:35Z"
+ content="""
+That works fine with version 5.20150113.
+
+Either you need to upgrade to a newer version, or perhaps you left
+out some step or configuration needed to reproduce your problem.
+"""]]
diff --git a/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_2_f995b3212c8140b386e4d1785994d29a._comment b/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_2_f995b3212c8140b386e4d1785994d29a._comment
new file mode 100644
index 000000000..1e971dd57
--- /dev/null
+++ b/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_2_f995b3212c8140b386e4d1785994d29a._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnwNDA50ZupMvOgpgDqzDRyu5B-mYlVwa4"
+ nickname="Andreas"
+ subject="comment 2"
+ date="2015-01-19T11:49:32Z"
+ content="""
+Just double checked and the steps shown expose the error/warning for me.
+
+Unfortunately, I cannot seem to find a more recent package to check whether the bug has really been fixed meanwhile.
+"""]]
diff --git a/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_3_4c914d08f473490f2077d76664a7d6dd._comment b/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_3_4c914d08f473490f2077d76664a7d6dd._comment
new file mode 100644
index 000000000..600115bfe
--- /dev/null
+++ b/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_3_4c914d08f473490f2077d76664a7d6dd._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2015-01-20T17:05:12Z"
+ content="""
+If you can reproduce the error message, perhaps you can paste it into this
+bug report. At the moment, I have absolutely nothing to go on.
+
+You can download a build of a current version of git-annex from
+[[install/Linux_standalone]] for testing.
+"""]]
diff --git a/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_4_3c7a7a0983d3a75a04395141aaf16dbb._comment b/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_4_3c7a7a0983d3a75a04395141aaf16dbb._comment
new file mode 100644
index 000000000..fb1c5641d
--- /dev/null
+++ b/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_4_3c7a7a0983d3a75a04395141aaf16dbb._comment
@@ -0,0 +1,33 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnwNDA50ZupMvOgpgDqzDRyu5B-mYlVwa4"
+ nickname="Andreas"
+ subject="comment 4"
+ date="2015-01-21T07:30:51Z"
+ content="""
+This is what I see:
+
+ ➜ ~ mkdir test
+ ➜ ~ cd test
+ ➜ test git init
+ Initialized empty Git repository in /home/deas/test/.git/
+ ➜ test git:(master)
+ ➜ test git:(master) git annex init
+ init ok
+ (Recording state in git...)
+ ➜ test git:(master) touch foobar.txt
+ ➜ test git:(master) ✗ git annex add
+ add foobar.txt ok
+ (Recording state in git...)
+ ➜ test git:(master) ✗ git annex direct
+ commit
+ [master (root-commit) a6e3d83] commit before switching to direct mode
+ 1 file changed, 1 insertion(+)
+ create mode 120000 foobar.txt
+ ok
+ direct foobar.txt
+ /home/deas/test/.git/annex/misctmp/tmp6895: rename: does not exist (No such file or directory)
+
+ leaving this file as-is; correct this problem and run git annex fsck on it
+ direct ok
+ ➜ test git:(annex/direct/master)
+"""]]
diff --git a/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_5_64000cfe5ef2cdf4260c3342f032e916._comment b/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_5_64000cfe5ef2cdf4260c3342f032e916._comment
new file mode 100644
index 000000000..3de74e295
--- /dev/null
+++ b/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_5_64000cfe5ef2cdf4260c3342f032e916._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""more info needed"""
+ date="2015-02-09T17:20:23Z"
+ content="""
+What version of git-annex was used to get the latest transcript above?
+
+The sequence of commands you gave works fine for me, no error.
+
+(Based on the filename in the error message, it seems likely that `replaceFile`
+is what's failing (called by `toDirectGen`), but that always creates the misctemp
+directory if it doesn't exist. Also, the example given doesn't actually
+trigger any code path that calls `replaceFile`. This makes me doubt that
+a current version of git-annex is being used..)
+"""]]
diff --git a/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_6_da1b3ee6948afc81273aafe44c7604ba._comment b/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_6_da1b3ee6948afc81273aafe44c7604ba._comment
new file mode 100644
index 000000000..2286cb478
--- /dev/null
+++ b/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_6_da1b3ee6948afc81273aafe44c7604ba._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnwNDA50ZupMvOgpgDqzDRyu5B-mYlVwa4"
+ nickname="Andreas"
+ subject="comment 6"
+ date="2015-02-10T07:38:01Z"
+ content="""
+5.20140717 (ubuntu 14.10)
+
+There is no easy way (ready made binary package to download) to get a more recent version, right?
+
+BTW: I am also seeing issues with 5.20141024-g613f396 on ARM with a glacier remote. Maybe I am asking for too much there. ;)
+"""]]
diff --git a/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_7_4712f638717c68ed3529dd2a078f1746._comment b/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_7_4712f638717c68ed3529dd2a078f1746._comment
new file mode 100644
index 000000000..20333d235
--- /dev/null
+++ b/doc/bugs/git_annex_direct_-__62___rename:_does_not_exist/comment_7_4712f638717c68ed3529dd2a078f1746._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 7"""
+ date="2015-02-10T16:54:54Z"
+ content="""
+You can download a current build of git-annex from
+<http://git-annex.branchable.com/install/Linux_standalone>
+
+I've already linked to that once before in this very thread!
+
+I am going to close this bug. Please followup if you anage to a) get a
+current git-annex build installed and b) can then provide instructions to
+reproduce this bug using it.
+"""]]
diff --git a/doc/bugs/git_annex_does_nothing_useful.mdwn b/doc/bugs/git_annex_does_nothing_useful.mdwn
deleted file mode 100644
index b68e53da9..000000000
--- a/doc/bugs/git_annex_does_nothing_useful.mdwn
+++ /dev/null
@@ -1,67 +0,0 @@
-As you can see, I'm running a pretty recent build of git-annex (ac799c3f363e0008b23e9c174e6fedc35e6fa92a),
-
- $ git annex version
- git-annex version: 3.20120630
- local repository version: 3
- default repository version: 3
- supported repository versions: 3
- upgrade supported from repository versions: 0 1 2
-
-We have a file here which isn't currently available yet isn't
-currently available (the link is shown in red),
-
- $ ls -l plot.py
- lrwxrwxrwx 1 ben ben 77 Jul 6 14:01 plot.py -> ../.git/annex/objects/WORM:1301941019:720:plot.py/WORM:1301941019:720:plot.py
- $
-
-Yet git-annex should be able to tell us where it is,
-
- $ git-annex whereis plot.py
- $
-
-Hmm, well that's strange. What's happening here,
-
- $ git-annex whereis plot.py -d
- git ["--git-dir=/home/ben/lori/analysis/data/.git","--work-tree=/home/ben/lori/analysis/data","show-ref","git-annex"]
- git ["--git-dir=/home/ben/lori/analysis/data/.git","--work-tree=/home/ben/lori/analysis/data","show-ref","--hash","refs/heads/git-annex"]
- git ["--git-dir=/home/ben/lori/analysis/data/.git","--work-tree=/home/ben/lori/analysis/data","log","refs/heads/git-annex..d5582e05f41011b571a17003934fe9e40859e4be","--oneline","-n1"]
- git ["--git-dir=/home/ben/lori/analysis/data/.git","--work-tree=/home/ben/lori/analysis/data","cat-file","--batch"]
- git ["--git-dir=/home/ben/lori/analysis/data/.git","--work-tree=/home/ben/lori/analysis/data","ls-files","--cached","-z","--","plot.py"]
- $
-
-Alright, well maybe `git-annex get` will work,
-
- $ git annex get plot.py -d
- git ["--git-dir=/home/ben/lori/analysis/data/.git","--work-tree=/home/ben/lori/analysis/data","ls-files","--cached","-z","--","plot.py"]
- $ ls -l plot.py
- lrwxrwxrwx 1 ben ben 77 Jul 6 14:01 plot.py -> ../.git/annex/objects/WORM:1301941019:720:plot.py/WORM:1301941019:720:plot.py
-
-Nope, the link is still shown in red.
-
-Alright, what about `git-annex copy`?
-
- $ git annex copy plot.py --from=goldnerlab --to=here -d
- git ["--git-dir=/home/ben/lori/analysis/data/.git","--work-tree=/home/ben/lori/analysis/data","show-ref","git-annex"]
- git ["--git-dir=/home/ben/lori/analysis/data/.git","--work-tree=/home/ben/lori/analysis/data","show-ref","--hash","refs/heads/git-annex"]
- git ["--git-dir=/home/ben/lori/analysis/data/.git","--work-tree=/home/ben/lori/analysis/data","log","refs/heads/git-annex..d5582e05f41011b571a17003934fe9e40859e4be","--oneline","-n1"]
- git ["--git-dir=/home/ben/lori/analysis/data/.git","--work-tree=/home/ben/lori/analysis/data","cat-file","--batch"]
- git ["--git-dir=/home/ben/lori/analysis/data/.git","--work-tree=/home/ben/lori/analysis/data","ls-files","--cached","-z","--","plot.py"]
- $ ls -l plot.py
- lrwxrwxrwx 1 ben ben 77 Jul 6 14:01 plot.py -> ../.git/annex/objects/WORM:1301941019:720:plot.py/WORM:1301941019:720:plot.py
-
-Still red.
-
-Alright, what if I just try to get a non-existent file?
-
- $ git annex get adsflkah -d
- git ["--git-dir=/home/ben/lori/analysis/data/.git","--work-tree=/home/ben/lori/analysis/data","ls-files","--cached","-z","--","adsflkah"]
- $
-
-Alright, it didn't fail with an error, that's very strange. What is going on here?
-
-[[!meta title="v1 file is ignored"]]
-
-> I don't think I want to make git-annex deal with v1 files, and
-> I doubt there are many repos left using them. This seems to be a case
-> of an upgrade not being done, for whatever reason. Closing [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/git_annex_does_nothing_useful/comment_10_457354dc0018333002dc5049935c0feb._comment b/doc/bugs/git_annex_does_nothing_useful/comment_10_457354dc0018333002dc5049935c0feb._comment
deleted file mode 100644
index 266cff3db..000000000
--- a/doc/bugs/git_annex_does_nothing_useful/comment_10_457354dc0018333002dc5049935c0feb._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlup4hyZo4eCjF8T85vfRXMKBxGj9bMdl0"
- nickname="Ben"
- subject="comment 10"
- date="2012-07-10T14:17:42Z"
- content="""
-Hmm, the commands above seem to have worked on both machines (both running 3.20120630). I guess I should probably just try rebuilding my data/ repository from scratch, eh?
-"""]]
diff --git a/doc/bugs/git_annex_does_nothing_useful/comment_11_8a6d244165dd238ddf9dd629795de2f6._comment b/doc/bugs/git_annex_does_nothing_useful/comment_11_8a6d244165dd238ddf9dd629795de2f6._comment
deleted file mode 100644
index 1de08ae60..000000000
--- a/doc/bugs/git_annex_does_nothing_useful/comment_11_8a6d244165dd238ddf9dd629795de2f6._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
- nickname="Justin"
- subject="comment 11"
- date="2012-07-10T14:26:06Z"
- content="""
-I suppose.. joey can probably help you investigate exactly what went wrong. You might want to save an empty clone of the git repository for later..
-
-The easiest way to fix the data is probably to run a `git annex uninit` in the old repository which will put the files back how they were before and then `git-annex import` them into a new repository.
-"""]]
diff --git a/doc/bugs/git_annex_does_nothing_useful/comment_12_30d06bc0f1c37d988a1a31962b57533c._comment b/doc/bugs/git_annex_does_nothing_useful/comment_12_30d06bc0f1c37d988a1a31962b57533c._comment
deleted file mode 100644
index 3de157752..000000000
--- a/doc/bugs/git_annex_does_nothing_useful/comment_12_30d06bc0f1c37d988a1a31962b57533c._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="165.98.113.100"
- subject="comment 12"
- date="2012-07-11T23:23:04Z"
- content="""
-Looking at this a leetle more closely, you had:
-
-<pre>
-lrwxrwxrwx 1 ben ben 77 Jul 6 14:01 plot.py -> ../.git/annex/objects/WORM:1301941019:720:plot.py/WORM:1301941019:720:plot.py
-</pre>
-
-Well, that is not how a git-annex symlink currently looks, so it ignores it.
-
-Apparenly this repository was created with an old version of git-annex, possibly version 1, and you've dropped in the current version, but the normal upgrade machinery failed. This could happen if you made a new clone of a version 1 bare repository.
-
-I suggest you first find out what version of git-annex was originally used to create this repository (ie, version 0, 1, or 2 ... probably 1). Then make a clone, and \"git config annex.version $N\" where N=the version used). Then \"git annex upgrade\" and you should be good to go. Remember to push or sync the upgrade back to the bare repo so you don't need to do this again.
-"""]]
diff --git a/doc/bugs/git_annex_does_nothing_useful/comment_1_fc4f51ddcbc69631e2835b86c3489c8e._comment b/doc/bugs/git_annex_does_nothing_useful/comment_1_fc4f51ddcbc69631e2835b86c3489c8e._comment
deleted file mode 100644
index 6bf6e96f6..000000000
--- a/doc/bugs/git_annex_does_nothing_useful/comment_1_fc4f51ddcbc69631e2835b86c3489c8e._comment
+++ /dev/null
@@ -1,7 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- subject="comment 1"
- date="2012-07-09T23:16:32Z"
- content="""
-`git ls-files` is not listing your file. Perhaps your file is not checked into git?
-"""]]
diff --git a/doc/bugs/git_annex_does_nothing_useful/comment_2_9bb1647e6c59f1ed7b13b81ecc33f920._comment b/doc/bugs/git_annex_does_nothing_useful/comment_2_9bb1647e6c59f1ed7b13b81ecc33f920._comment
deleted file mode 100644
index 3423bfae4..000000000
--- a/doc/bugs/git_annex_does_nothing_useful/comment_2_9bb1647e6c59f1ed7b13b81ecc33f920._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlup4hyZo4eCjF8T85vfRXMKBxGj9bMdl0"
- nickname="Ben"
- subject="comment 2"
- date="2012-07-09T23:31:08Z"
- content="""
-Not really sure what to say about that other than,
-
- $ git --git-dir=/home/ben/lori/analysis/data/.git --work-tree=/home/ben/lori/analysis/data ls-files --cached -- plot.py
- plot.py
- $
-
-"""]]
diff --git a/doc/bugs/git_annex_does_nothing_useful/comment_3_d434f5c614a27b75d73530b5b918b851._comment b/doc/bugs/git_annex_does_nothing_useful/comment_3_d434f5c614a27b75d73530b5b918b851._comment
deleted file mode 100644
index f03aa2745..000000000
--- a/doc/bugs/git_annex_does_nothing_useful/comment_3_d434f5c614a27b75d73530b5b918b851._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
- nickname="Justin"
- subject="Remotes? "
- date="2012-07-10T00:23:11Z"
- content="""
-What does
-
- git-annex status
-
-Show?
-
-Do you have any remotes configured? It looks like you don't somehow.
-"""]]
diff --git a/doc/bugs/git_annex_does_nothing_useful/comment_4_998e33219d29ea41b0b2a5d2955a9862._comment b/doc/bugs/git_annex_does_nothing_useful/comment_4_998e33219d29ea41b0b2a5d2955a9862._comment
deleted file mode 100644
index fc9f6c30c..000000000
--- a/doc/bugs/git_annex_does_nothing_useful/comment_4_998e33219d29ea41b0b2a5d2955a9862._comment
+++ /dev/null
@@ -1,46 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlup4hyZo4eCjF8T85vfRXMKBxGj9bMdl0"
- nickname="Ben"
- subject="comment 4"
- date="2012-07-10T01:46:23Z"
- content="""
- $ git annex status
- supported backends: SHA256 SHA1 SHA512 SHA224 SHA384 SHA256E SHA1E SHA512E SHA224E SHA384E WORM URL
- supported remote types: git S3 bup directory rsync web hook
- trusted repositories: 0
- semitrusted repositories: 3
- 00000000-0000-0000-0000-000000000001 -- web
- 02e4ea72-a77c-11e1-bbd7-0749b04e4b59 -- goldnerlab (Data for Goldner)
- 3c1fd026-c794-11e1-8ebb-dbe8684e8a73 -- here
- untrusted repositories: 0
- dead repositories: 0
- transfers in progress: none
- available local disk space: 16 gigabytes (+1 megabyte reserved)
- local annex keys: 0
- local annex size: 0 bytes
- known annex keys: 0
- known annex size: 0 bytes
- bloom filter size: 16 mebibytes (0% full)
- backend usage:
- $ git remote
- goldnerlab
- $ git remote show goldnerlab
- * remote goldnerlab
- Fetch URL: goldnerlab:data
- Push URL: goldnerlab:data
- HEAD branch (remote HEAD is ambiguous, may be one of the following):
- master
- synced/master
- Remote branches:
- git-annex tracked
- master tracked
- synced/master tracked
- Local branch configured for 'git pull':
- master merges with remote master
- Local refs configured for 'git push':
- git-annex pushes to git-annex (up to date)
- master pushes to master (up to date)
- synced/master pushes to synced/master (up to date)
-
-
-"""]]
diff --git a/doc/bugs/git_annex_does_nothing_useful/comment_5_c72e2571e5b8c06bbfa2276a7ad1e8a6._comment b/doc/bugs/git_annex_does_nothing_useful/comment_5_c72e2571e5b8c06bbfa2276a7ad1e8a6._comment
deleted file mode 100644
index 90159b5b4..000000000
--- a/doc/bugs/git_annex_does_nothing_useful/comment_5_c72e2571e5b8c06bbfa2276a7ad1e8a6._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
- nickname="Justin"
- subject="comment 5"
- date="2012-07-10T03:03:27Z"
- content="""
-Well that's odd. You have remotes but no annexed files..
-
-Can you post the commands you used to arrive at this situation? I'm not sure how you would have done that.. Maybe you just need a
-
- git-annex sync
-
-to get things going?
-
-I think somehow you cloned the git repo but not the annex stuff.
-"""]]
diff --git a/doc/bugs/git_annex_does_nothing_useful/comment_6_bc8b42432ba25de8f972c192bc3cdff6._comment b/doc/bugs/git_annex_does_nothing_useful/comment_6_bc8b42432ba25de8f972c192bc3cdff6._comment
deleted file mode 100644
index ad98e6874..000000000
--- a/doc/bugs/git_annex_does_nothing_useful/comment_6_bc8b42432ba25de8f972c192bc3cdff6._comment
+++ /dev/null
@@ -1,44 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlup4hyZo4eCjF8T85vfRXMKBxGj9bMdl0"
- nickname="Ben"
- subject="comment 6"
- date="2012-07-10T03:26:35Z"
- content="""
-I can easily reproduce the issue as follows,
-
- $ git clone goldnerlab:data
- Cloning into 'data'...
- remote: Counting objects: 61902, done.
- remote: Compressing objects: 100% (61354/61354), done.
- remote: Total 61902 (delta 356), reused 61902 (delta 356)
- Receiving objects: 100% (61902/61902), 5.50 MiB | 894 KiB/s, done.
- Resolving deltas: 100% (356/356), done.
- $ cd data
- $ git annex sync
- (merging origin/git-annex into git-annex...)
- commit
- (Recording state in git...)
- # On branch master
- nothing to commit (working directory clean)
- ok
- pull origin
- ok
- push origin
- Counting objects: 8, done.
- Delta compression using up to 2 threads.
- Compressing objects: 100% (5/5), done.
- Writing objects: 100% (6/6), 726 bytes, done.
- Total 6 (delta 1), reused 1 (delta 0)
- Auto packing the repository for optimum performance.
- warning: There are too many unreachable loose objects; run 'git prune' to remove them.
- To goldnerlab:data
- d5582e0..aaddf3c git-annex -> git-annex
- ok
-
-Everything looks good so far. I verify that alex/plot.py doesn't exist. Now let's try getting it,
-
- $ git annex get alex/plot.py -d
- git [\"--git-dir=/home/ben/data/.git\",\"--work-tree=/home/ben/data\",\"ls-files\",\"--cached\",\"-z\",\"--\",\"alex/plot.py\"]
-
-Uh oh. ls confirms that get was unsucessful.
-"""]]
diff --git a/doc/bugs/git_annex_does_nothing_useful/comment_7_e7469a4c5e45078ade775f5cbdd17cfc._comment b/doc/bugs/git_annex_does_nothing_useful/comment_7_e7469a4c5e45078ade775f5cbdd17cfc._comment
deleted file mode 100644
index c40e4e2cf..000000000
--- a/doc/bugs/git_annex_does_nothing_useful/comment_7_e7469a4c5e45078ade775f5cbdd17cfc._comment
+++ /dev/null
@@ -1,67 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
- nickname="Justin"
- subject="comment 7"
- date="2012-07-10T12:37:43Z"
- content="""
-But how was the goldnerlab:data repository created? That looks to be where the problem is..
-
-I have a slightly older version, but in general it should work the same..
-you can see right away, when I do git annex status it shows \"known annex keys: 1\".
-if you do git annex status on goldnerlab, does it say you have any annex keys?
-
-
- $ git-annex version
- git-annex version: 3.20120614~bpo60+1
- $ mkdir a
- $ cd a
- $ git init
- Initialized empty Git repository in /tmp/a/.git/
- $ git annex init a
- init a ok
- (Recording state in git...)
- $ echo hi > file
- $ git annex add file
- add file (checksum...) ok
- (Recording state in git...)
- $ git commit -m added
- fatal: No HEAD commit to compare with (yet)
- fatal: No HEAD commit to compare with (yet)
- [master (root-commit) cfa9049] added
- 1 files changed, 1 insertions(+), 0 deletions(-)
- create mode 120000 file
- $ cd ..
- $ git clone a a_clone
- Cloning into a_clone...
- done.
- $ cd a_clone
- $ git annex status
- (merging origin/git-annex into git-annex...)
- supported backends: SHA256 SHA1 SHA512 SHA224 SHA384 SHA256E SHA1E SHA512E SHA224E SHA384E WORM URL
- supported remote types: git bup directory rsync web hook
- trusted repositories: 0
- semitrusted repositories: 3
- 00000000-0000-0000-0000-000000000001 -- web
- 445d616e-ca8b-11e1-b170-ff8b03c54243 -- origin (a)
- 5d3db51c-ca8b-11e1-bbc3-039dd06ab47b -- here
- untrusted repositories: 0
- dead repositories: 0
- available local disk space: 63 megabytes (+1 megabyte reserved)
- local annex keys: 0
- local annex size: 0 bytes
- known annex keys: 1
- known annex size: 3 bytes
- backend usage:
- SHA256: 1
- (Recording state in git...)
- $ ls
- file
- $ cat file
- cat: file: No such file or directory
- $ git annex get file
- get file (from origin...) ok
- (Recording state in git...)
- $ cat file
- hi
-
-"""]]
diff --git a/doc/bugs/git_annex_does_nothing_useful/comment_8_bc9e6fd284440a59ffe4e4ed1f73f7d7._comment b/doc/bugs/git_annex_does_nothing_useful/comment_8_bc9e6fd284440a59ffe4e4ed1f73f7d7._comment
deleted file mode 100644
index 85d03f04b..000000000
--- a/doc/bugs/git_annex_does_nothing_useful/comment_8_bc9e6fd284440a59ffe4e4ed1f73f7d7._comment
+++ /dev/null
@@ -1,30 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlup4hyZo4eCjF8T85vfRXMKBxGj9bMdl0"
- nickname="Ben"
- subject="comment 8"
- date="2012-07-10T13:02:37Z"
- content="""
-On goldnerlab,
-
- $ git annex status
- supported backends: SHA256 SHA1 SHA512 SHA224 SHA384 SHA256E SHA1E SHA512E SHA224E SHA384E WORM URL
- supported remote types: git S3 bup directory rsync web hook
- trusted repositories: 0
- semitrusted repositories: 4
- 00000000-0000-0000-0000-000000000001 -- web
- 02e4ea72-a77c-11e1-bbd7-0749b04e4b59 -- here (Data for Goldner)
- 351f3ddc-ca3e-11e1-a3fc-6338ef4724a7
- 3c1fd026-c794-11e1-8ebb-dbe8684e8a73
- untrusted repositories: 0
- dead repositories: 0
- transfers in progress: none
- available local disk space: 2 terabytes (+1 megabyte reserved)
- local annex keys: 19101
- local annex size: 41 gigabytes
- known annex keys: 19122
- known annex size: 41 gigabytes
- bloom filter size: 16 mebibytes (3.8% full)
- backend usage:
- WORM: 38223
-
-"""]]
diff --git a/doc/bugs/git_annex_does_nothing_useful/comment_9_38a2dbeee3750d79ca9a943a02fceb29._comment b/doc/bugs/git_annex_does_nothing_useful/comment_9_38a2dbeee3750d79ca9a943a02fceb29._comment
deleted file mode 100644
index dc3206ac5..000000000
--- a/doc/bugs/git_annex_does_nothing_useful/comment_9_38a2dbeee3750d79ca9a943a02fceb29._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
- nickname="Justin"
- subject="comment 9"
- date="2012-07-10T14:08:10Z"
- content="""
-Can you run the series of commands I had above on your two machines? I figure there are two possibilities:
-
-1. There is something wrong with the git-annex versions you are using.
-2. There is something wrong with your repository. (\"warning: There are too many unreachable loose objects\"?)
-
-so if you can make a temp repository on goldnerlab, then clone it on the other machine and see where it fails, that would be helpful.
-
-after cloning git-annex status should hopefully say that you have 1 known key, not 0.
-
-Obviously this won't fix the problem, but it will at least narrow it down.
-"""]]
diff --git a/doc/bugs/git_annex_drop_direct_creates_symlinks_with_possibly_incorrect_path_separator.mdwn b/doc/bugs/git_annex_drop_direct_creates_symlinks_with_possibly_incorrect_path_separator.mdwn
new file mode 100644
index 000000000..e0c501c90
--- /dev/null
+++ b/doc/bugs/git_annex_drop_direct_creates_symlinks_with_possibly_incorrect_path_separator.mdwn
@@ -0,0 +1,37 @@
+### Please describe the problem.
+
+On windows, path separator of symlinks created by drop command is different than the one created by checkout/update, leading to incorrect git annex status reporting
+
+### What steps will reproduce the problem?
+
+Checkout a repo in direct mode on windows, you'll see symlinks as such (using the 'unix' path separator):
+
+ ../../../.git/annex/objects/p1/GM/SHA256E-s921877--4801f74cb608bdcea1f7f7a50a874865c87d03bc6fff3d16e2b9d216b4c231 ..... etc.
+
+get the content, and then drop it, the symlink which is then recreated has different path separator:
+
+ ..\..\..\.git\annex\objects\p1\GM\SHA256E-s921877--4801f74cb608bdcea1f7f7a50a874865c87d03bc6fff3d16e2b9d216b4c231 ----- etc.
+
+resulting in misreported git annex status:
+
+ git annex statua
+ M dropped.file.name
+
+changing the path separator seemingly solves:
+
+ sed -e 's/\\\/\\//g' dropped.file.name -i
+ git annex dropped.file.name
+ .... nothing reported ....
+
+### What version of git-annex are you using? On what operating system?
+
+ git-annex version: 5.20150128-g2df3a02
+ running on Microsoft Windows [Version 6.1.7601]
+
+
+### Please provide any additional information below.
+
+no additional info.
+
+> I see that I broke this some time ago. Fixed it now, and added a test
+> case. [[done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_enableremote_gcrypt_failure_leaves_a_remote.mdwn b/doc/bugs/git_annex_enableremote_gcrypt_failure_leaves_a_remote.mdwn
new file mode 100644
index 000000000..021d782de
--- /dev/null
+++ b/doc/bugs/git_annex_enableremote_gcrypt_failure_leaves_a_remote.mdwn
@@ -0,0 +1,31 @@
+### Please describe the problem.
+
+Running `git-annex enableremote remote` without a suitable key available leaves a partially unconfigured git remote.
+
+Subsequently making the key available and running `git-annex enableremote remote` a second time fails as the remote now partially exists.
+
+Removing the remote with `git remote remove remote` and then re-running `git-annex enable remote` seems to do the trick.
+
+However, I notice that even after syncing my special remotes are missing some details in the git config file - namely the `annex-gcrypt` and `annex-uuid` (there may have been more). I fixed by adding the details from a working repo.
+
+Finally, when I initially created the gcrypt repo (by hand) I specified the remote as a local directory on the machine in question i.e. `gcrypt::/matt/mnt/isilon/rss/zzalsmf3/git-annex/mus` I then decided to make it available and changed it (via `git remote rename` to `gcrypt::ssh://rss/home/matt/mnt/isilon/rss/zzalsmf3/git-annex/mus`. Unfortunately on other machines when I `git enableremote` it recovers the original remote which obviously doesn't work - how can I update this setting?
+
+Phew!
+
+
+
+### What steps will reproduce the problem?
+
+
+### What version of git-annex are you using? On what operating system?
+
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
diff --git a/doc/bugs/git_annex_fork_bombs_on_gpg_file.mdwn b/doc/bugs/git_annex_fork_bombs_on_gpg_file.mdwn
deleted file mode 100644
index 9bfe3ee3b..000000000
--- a/doc/bugs/git_annex_fork_bombs_on_gpg_file.mdwn
+++ /dev/null
@@ -1,25 +0,0 @@
-### Please describe the problem.
-git-annex goes into a loop of I think Haskell's createProcess function and causes the entire operating system to starve of process creation.
-
-### What steps will reproduce the problem?
-The last file git-annex was processing was tinco.gpg, my gpg key exported with
-
- gpg --export mail@tinco.nl --output tinco.gpg
-
-### What version of git-annex are you using? On what operating system?
-4.20130516-g8a26544 on OSX
-
-I had a remote setup using bup.
-
-### Please provide any additional information below.
-Unfortunately to fix the problem I have deleted the entire git repository and made a new init in the same directory, this time without the gpg file. Everything seems to be working now.
-
-What I remember about the log file is that the last thing it said was something along the lines of
-
-add tinco.gpg
-
-.. (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) ..etc
-
-recv (resource unavailable or something) ..
-
-> [[done]]; fixed 3 bugs! --[[Joey]]
diff --git a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_10_6e29b60cd77f3288e33ad270f95f410e._comment b/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_10_6e29b60cd77f3288e33ad270f95f410e._comment
deleted file mode 100644
index 0338219ac..000000000
--- a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_10_6e29b60cd77f3288e33ad270f95f410e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://me.tinco.nl/"
- nickname="Tinco"
- subject="comment 10"
- date="2013-05-19T20:45:53Z"
- content="""
-Alright! So first the issue was that gpg was asking for a passphrase. I fixed that by installing gpgtools for mac, but that one doesn't have a gpg executable, instead it has gpg2. I hadn't noticed that, so that's why it was saying 'resource vanished' without a proper error message, it simply couldn't find the gpg executable. I did ln -s /usr/local/bin/gpg2 /usr/local/bin/gpg, and now it's happily copying files. Thanks for helping me find out what was wrong!
-"""]]
diff --git a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_11_ad13e3221ae06086e86800316912d951._comment b/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_11_ad13e3221ae06086e86800316912d951._comment
deleted file mode 100644
index 301b0f973..000000000
--- a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_11_ad13e3221ae06086e86800316912d951._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 11"
- date="2013-05-19T21:13:41Z"
- content="""
-You're certainly welcome.
-
-So, you did not install git-annex from the dmg? That bundles its own gpg.
-
-I'm curious about this passphrase thing.. Does gpgtools + gpg2 on the Mac cause it to ask for a passphrase better, like in a dialog window? Perhaps I can improve the gpg stuff bundled in the dmg..
-"""]]
diff --git a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_12_41746b731eae7f280bb668c776022bcb._comment b/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_12_41746b731eae7f280bb668c776022bcb._comment
deleted file mode 100644
index ee27c5491..000000000
--- a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_12_41746b731eae7f280bb668c776022bcb._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://me.tinco.nl/"
- nickname="Tinco"
- subject="comment 12"
- date="2013-05-19T21:24:48Z"
- content="""
-Yes exactly, it spawns a dialog window and overall has a very nice interface for managing gpg keys. I switched from the DMG to cabal because I couldn't get the bundled gpg to ask for my password, setting up a gpg-agent seemed pretty complicated, so I just went for the packaged approach from https://gpgtools.org/.
-"""]]
diff --git a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_13_56ca8590110abffeed6d826c54ca1136._comment b/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_13_56ca8590110abffeed6d826c54ca1136._comment
deleted file mode 100644
index 64ee5e876..000000000
--- a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_13_56ca8590110abffeed6d826c54ca1136._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 13"
- date="2013-05-19T22:03:57Z"
- content="""
-Ok, I've made a note that I should look into pulling in gpgtools rather than gpg into the DMG. At least if the webapp every gets a UI that allows setting up remotes that are encrypted to a gpg key. Currently the webapp avoids that because I know gpg password prompting is not sorted out everywhere.
-
-And also, I've made the configure script check for gpg2 if it can't find a gpg.
-"""]]
diff --git a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_1_73ae438a37e4c5f56fe291448e1c64dd._comment b/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_1_73ae438a37e4c5f56fe291448e1c64dd._comment
deleted file mode 100644
index e1c3ed279..000000000
--- a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_1_73ae438a37e4c5f56fe291448e1c64dd._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://me.tinco.nl/"
- nickname="Tinco"
- subject="comment 1"
- date="2013-05-18T23:32:32Z"
- content="""
-Nevermind the gpg file suspicion, it now crashes without that file too:
-
-[2013-05-19 01:30:36 CEST] main: starting assistant version 4.20130516-g8a26544
-
-(scanning...) [2013-05-19 01:30:36 CEST] Watcher: Performing startup scan
-(started...) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg) (gpg)
-"""]]
diff --git a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_2_aa237adebe7674b8cdb9a967bb5f96a8._comment b/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_2_aa237adebe7674b8cdb9a967bb5f96a8._comment
deleted file mode 100644
index f5358da98..000000000
--- a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_2_aa237adebe7674b8cdb9a967bb5f96a8._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://me.tinco.nl/"
- nickname="Tinco"
- subject="comment 2"
- date="2013-05-18T23:36:22Z"
- content="""
-So that probably means I have some problem with the gpg encryption, that is used by bup. Maybe it doesn't even have to do with git annex, I'll see if I can make it say more in the log.
-"""]]
diff --git a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_3_ab403d7abbbbabd498b954b0b9742755._comment b/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_3_ab403d7abbbbabd498b954b0b9742755._comment
deleted file mode 100644
index 0ffbcccae..000000000
--- a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_3_ab403d7abbbbabd498b954b0b9742755._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-05-18T23:59:59Z"
- content="""
-run it with `--debug`
-
-paste the whole log, not an except
-
-get a `ps lax` so we can see which programs are running which other programs and how many programs are running at the same time
-"""]]
diff --git a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_4_a35d04440b1220faf9088107c3f17762._comment b/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_4_a35d04440b1220faf9088107c3f17762._comment
deleted file mode 100644
index bd1fef019..000000000
--- a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_4_a35d04440b1220faf9088107c3f17762._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://me.tinco.nl/"
- nickname="Tinco"
- subject="comment 4"
- date="2013-05-19T03:15:10Z"
- content="""
-Ok I got some interesting data from the debug switch, posted it here: https://pastee.org/ kn2hv (remove space, TTL 1 month)
-
-And managed to get a ps lax in after launch but before I'm starved of processes: http://pastie.org/pastes/7928091/text?key=gdywhjzo8xm5etcgv8e8jw
-"""]]
diff --git a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_5_8345331b9b313769ba401da2ffd89332._comment b/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_5_8345331b9b313769ba401da2ffd89332._comment
deleted file mode 100644
index d0ff6f008..000000000
--- a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_5_8345331b9b313769ba401da2ffd89332._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://me.tinco.nl/"
- nickname="Tinco"
- subject="comment 5"
- date="2013-05-19T12:37:22Z"
- content="""
-Sorry, I just noticed that after I killed the process it created some more logs. The log I previously pasted is moved to log.3, here are the additional ones (all created in around the same minute:)
-
-http://pastie.org/7929225
-"""]]
diff --git a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_6_7eb535ca38b3e84d44d0f8cbf5e61b8b._comment b/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_6_7eb535ca38b3e84d44d0f8cbf5e61b8b._comment
deleted file mode 100644
index 03f213c43..000000000
--- a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_6_7eb535ca38b3e84d44d0f8cbf5e61b8b._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 6"
- date="2013-05-19T16:39:44Z"
- content="""
-So there are a lot of uploads attempts being made (and apparently failing), and a lot of zombie git-annex processes are building up as children of the git-annex transferkeys process. That isolates the problem some.
-
-The repeated \"(gpg)\" is an interesting clue, since normally git-annex only runs gpg once, to unlock an encrypted special remote's encryption key, and then should retain the key, cached in memory. I was able to reproduce this part of the bug (but not the zombie processes) when I purposfully broke the bup special remote by making it throw an error when it was supposed to run bup to send a file. That defeats the caching, since the state, including the cache, is thrown away when there's an exception. Working on a fix for that..
-
-That doesn't explain what's actually causing the problem for you, but it does certainly suggest the bup special remote code is failing in some unusual way. What happens if rather than starting the assistant, you use git-annex manually to send files to the remote? Run:
-
-<pre>
-git annex copy --to ffe41272-608e-43c4-8f35-e9cd63087892 --debug
-</pre>
-
-(You may want to give it the name of just 1 file to send.)
-"""]]
diff --git a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_7_a3aa4231a82917c56cbdf52b65db7133._comment b/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_7_a3aa4231a82917c56cbdf52b65db7133._comment
deleted file mode 100644
index 16961afd3..000000000
--- a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_7_a3aa4231a82917c56cbdf52b65db7133._comment
+++ /dev/null
@@ -1,21 +0,0 @@
-[[!comment format=mdwn
- username="http://me.tinco.nl/"
- nickname="Tinco"
- subject="comment 7"
- date="2013-05-19T19:27:03Z"
- content="""
-Hi Joey thanks for working with me on this. The result from copying one file over is 'resource vanished':
-
- [2013-05-19 21:24:53 CEST] read: git [\"--git-dir=/Users/tinco/Documents/.git\",\"--work-tree=/Users/tinco/Documents\",\"show-ref\",\"git-annex\"]
- [2013-05-19 21:24:53 CEST] read: git [\"--git-dir=/Users/tinco/Documents/.git\",\"--work-tree=/Users/tinco/Documents\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- [2013-05-19 21:24:53 CEST] read: git [\"--git-dir=/Users/tinco/Documents/.git\",\"--work-tree=/Users/tinco/Documents\",\"log\",\"refs/heads/git-annex..f0523a06e2eb7217d98fe2b9f6ec5afa724ccd92\",\"--oneline\",\"-n1\"]
- [2013-05-19 21:24:53 CEST] chat: git [\"--git-dir=/Users/tinco/Documents/.git\",\"--work-tree=/Users/tinco/Documents\",\"cat-file\",\"--batch\"]
- [2013-05-19 21:24:53 CEST] read: git [\"--git-dir=/Users/tinco/Documents/.git\",\"--work-tree=/Users/tinco/Documents\",\"ls-files\",\"--cached\",\"-z\",\"--\",\"About Stacks.pdf\"]
- copy About Stacks.pdf (gpg) [2013-05-19 21:24:53 CEST] chat: gpg [\"--quiet\",\"--trust-model\",\"always\",\"--decrypt\"]
-
- git-annex: fd:12: hClose: resource vanished (Broken pipe)
- failed
- git-annex: copy: 1 failed
-
-
-"""]]
diff --git a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_8_178fd4e4d6abbca192fcd6d592615fca._comment b/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_8_178fd4e4d6abbca192fcd6d592615fca._comment
deleted file mode 100644
index 38b136b37..000000000
--- a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_8_178fd4e4d6abbca192fcd6d592615fca._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 8"
- date="2013-05-19T19:35:51Z"
- content="""
-I've fixed the repeated \"(gpg)\" problem. But that is not the real problem...
-
-Looks to me like there is a problem with running gpg to extract the encryption key of the repository. I can cause the same \"resource vanished\" message if I make gpg exit 1 immediately when it starts. I also managed to get 3 zombies when failing to send 100 files. Although in my case they were gpg zombies, not git-annex zombies.
-
-Can you run `gpg` manually at the command line? If you installed git-annex from the OSX dmg file, you need to have used \"runshell\" to get the gpg that's included in it onto the PATH before you do this.
-"""]]
diff --git a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_9_7d80f131f43312bb061df2be7fa956ef._comment b/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_9_7d80f131f43312bb061df2be7fa956ef._comment
deleted file mode 100644
index ff81f53a4..000000000
--- a/doc/bugs/git_annex_fork_bombs_on_gpg_file/comment_9_7d80f131f43312bb061df2be7fa956ef._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 9"
- date="2013-05-19T19:53:04Z"
- content="""
-I've fixed things so it will not pile up zombie processes. It'll still fail to send stuff if gpg is broken, but it'll fail more nicely now.
-
-We still need to find out why gpg is failing to run on your system..
-"""]]
diff --git a/doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files.mdwn b/doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files.mdwn
deleted file mode 100644
index 9563f0683..000000000
--- a/doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files.mdwn
+++ /dev/null
@@ -1,18 +0,0 @@
-What steps will reproduce the problem?
-
-Put some large files into a direct mode repository (so fsck time is noticeable). git annex add them, commit, run git annex fsck.
-
-What is the expected output? What do you see instead?
-
-Expected: files are checksummed, which should take considerable amount of time for each file. For reference, in indirect mode, fsck takes a while for files of ~1GB size.
-Actually: in direct mode, git annex fsck goes through all of the files in an instant and prints OK for each. I believe the file content is not verified.
-Multiple runs of git annex fsck do the same thing.
-
-What version of git-annex are you using? On what operating system?
-
-git-annex version: 4.20130405, Linux
-
-Please provide any additional information below.
-
-> I've fixed it, fsck is indeed checksumming direct mode files now, as long
-> as they're not known to be modified. [[done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_1_a6cde4aa495512344fa7f50e10749c68._comment b/doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_1_a6cde4aa495512344fa7f50e10749c68._comment
deleted file mode 100644
index 5aaebc342..000000000
--- a/doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_1_a6cde4aa495512344fa7f50e10749c68._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-04-14T17:50:53Z"
- content="""
-This is expected. The content of direct mode files can change at any time, so fsck does not have a locked down object with a known checksum that it can verify. Similarly, fsck skips unlocked files in indirect mode.
-"""]]
diff --git a/doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_2_4ac3b87ec0bc0514c4eff9f5a75b9f5d._comment b/doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_2_4ac3b87ec0bc0514c4eff9f5a75b9f5d._comment
deleted file mode 100644
index 3befccd39..000000000
--- a/doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_2_4ac3b87ec0bc0514c4eff9f5a75b9f5d._comment
+++ /dev/null
@@ -1,26 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawln3ckqKx0x_xDZMYwa9Q1bn4I06oWjkog"
- nickname="Michael"
- subject="comment 2"
- date="2013-04-15T01:32:52Z"
- content="""
-I'm still somewhat confused about the following commit (which seems to suggest fsck in direct mode could actually checksum files):
-
-commit 0da2507fd622120217cf03038b851b47c47ace53
-Author: Joey Hess <joey@kitenet.net>
-Date: Tue Jan 8 15:07:00 2013 -0400
-
- improve direct mode fsck
-
- An earlier commit (mislabeled) made direct mode fsck check file checksums.
- While it's expected for files to change at any time in direct mode, and so
- fsck cannot complain every time there's a checksum mismatch, it is possible
- for it to detect when a file does not *seem* to have changed, then check
- its checksum, and so detect disk corruption or other problems.
-
- This commit improves that, by checking a second time, if the checksum
- fails, that the file is still not modified, before taking action. This way,
- a direct mode file can be modified while being fscked.
-
-
-"""]]
diff --git a/doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_3_d18b1fdc866edf2786d2c6b7ec55119f._comment b/doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_3_d18b1fdc866edf2786d2c6b7ec55119f._comment
deleted file mode 100644
index a7b2b38da..000000000
--- a/doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_3_d18b1fdc866edf2786d2c6b7ec55119f._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-04-16T20:16:51Z"
- content="""
-Thanks for digging that up!
-
-I'd forgotten I finessed the problem that way.. And it looks like that patch was broken and never checked the right file.
-
-"""]]
diff --git a/doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_4_31e4fcbf63c11cc374a849daf3ce1dbc._comment b/doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_4_31e4fcbf63c11cc374a849daf3ce1dbc._comment
deleted file mode 100644
index 57af75673..000000000
--- a/doc/bugs/git_annex_fsck_in_direct_mode_does_not_checksum_files/comment_4_31e4fcbf63c11cc374a849daf3ce1dbc._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawln3ckqKx0x_xDZMYwa9Q1bn4I06oWjkog"
- nickname="Michael"
- subject="Thanks!"
- date="2013-04-17T18:33:41Z"
- content="""
-It does fsck for real now.
-"""]]
diff --git a/doc/bugs/git_annex_fsck_is_a_no-op_in_bare_repos.mdwn b/doc/bugs/git_annex_fsck_is_a_no-op_in_bare_repos.mdwn
deleted file mode 100644
index 9a044860a..000000000
--- a/doc/bugs/git_annex_fsck_is_a_no-op_in_bare_repos.mdwn
+++ /dev/null
@@ -1,21 +0,0 @@
-What is says on the tin:
-
-git annex fsck is a no-op in bare repos
-
-See http://lists.madduck.net/pipermail/vcs-home/2011-June/000433.html
-
-> Thinking about this some more, it would be difficult to do anything
-> when bad content is found, since it also cannot update the location log.
->
-> So this may be another thing blocked by [[todo/branching]], assuming
-> that is fixed in a way that makes `.git-annex` available to bare repos.
-> --[[Joey]]
-
->> Even if there is nothing it can _do_, knowing that the data is intact,
->> or not, is valuable in and as of itself. -- RichiH
-
->>> While storing the data is no longer an issue in bare repos, fsck would
->>> need a special mode that examines all the location logs, since it
->>> cannot run thru the checked out files. --[[Joey]]
-
->>>> [[done]]! --[[Joey]]
diff --git a/doc/bugs/git_annex_fsck_is_a_no-op_in_bare_repos/comment_1_fc59fbd1cdf8ca97b0a4471d9914aaa1._comment b/doc/bugs/git_annex_fsck_is_a_no-op_in_bare_repos/comment_1_fc59fbd1cdf8ca97b0a4471d9914aaa1._comment
deleted file mode 100644
index d50938a78..000000000
--- a/doc/bugs/git_annex_fsck_is_a_no-op_in_bare_repos/comment_1_fc59fbd1cdf8ca97b0a4471d9914aaa1._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 1"
- date="2011-06-13T16:58:52Z"
- content="""
-And, maybe, a way to start a fsck from remote? At least when the other side is a ssh or git annex shell, this would work.
-"""]]
diff --git a/doc/bugs/git_annex_fsck_is_a_no-op_in_bare_repos/comment_2_273a45e6977d40d39e0d9ab924a83240._comment b/doc/bugs/git_annex_fsck_is_a_no-op_in_bare_repos/comment_2_273a45e6977d40d39e0d9ab924a83240._comment
deleted file mode 100644
index b01590a7a..000000000
--- a/doc/bugs/git_annex_fsck_is_a_no-op_in_bare_repos/comment_2_273a45e6977d40d39e0d9ab924a83240._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://ertai.myopenid.com/"
- nickname="npouillard"
- subject="git annex fsck --from remote"
- date="2011-06-25T16:20:44Z"
- content="""
-Currently fsck silently ignores --to/--from.
-It should at least complain if it is not supported.
-"""]]
diff --git a/doc/bugs/git_annex_get_choke_when_remote_is_an_ssh_url_with_a_port.mdwn b/doc/bugs/git_annex_get_choke_when_remote_is_an_ssh_url_with_a_port.mdwn
deleted file mode 100644
index 92cc9170f..000000000
--- a/doc/bugs/git_annex_get_choke_when_remote_is_an_ssh_url_with_a_port.mdwn
+++ /dev/null
@@ -1,13 +0,0 @@
-when i want to
-
- git annex get file
-
-on repo ssh://host-without-port/annex, it works, but if i want to get a file from ssh://host:5122/annex, it tries to run command
-ssh ["host:5122", "git-annex-shell 'configlist' '/annex/file'"] and fails. ssh needs the -p option to set the default port, it doesn't support host:port notation.
-this is confusing because git can handle this url correctly, and will happily clone/push/pull to/from these url.
-
-temporary workaround is to use ssh://host/annex as url and define remote.name.annex-ssh-options to "-p 5122", but we need to use this workaround when doing annex get and undo the workaround when pushing/cloning.
-
-if i had more time, i would have learned haskell and provided a patch ;)
-
-> Fixed in git! --[[Joey]] [[done]]
diff --git a/doc/bugs/git_annex_gets_confused_about_remotes_with_dots_in_their_names.mdwn b/doc/bugs/git_annex_gets_confused_about_remotes_with_dots_in_their_names.mdwn
deleted file mode 100644
index d35282e75..000000000
--- a/doc/bugs/git_annex_gets_confused_about_remotes_with_dots_in_their_names.mdwn
+++ /dev/null
@@ -1,34 +0,0 @@
-For test.com//test, I get this:
-
- % git annex copy . --to test.com//test
- (getting UUID for test...) git-annex: there is no git remote named "test.com//test"
-
-And my .git/config changes from
-
- [remote "test.com//test"]
- url = richih@test.com:/test
- fetch = +refs/heads/*:refs/remotes/test.com//test/*
-
-to
-
- [remote "test.com//test"]
- url = richih@test.com:/test
- fetch = +refs/heads/*:refs/remotes/test.com//test/*
- annex-uuid = xyz
- [remote "test"]
- annex-uuid = xyz
-
-
-Unless I am misunderstanding something, git annex gets confused about what the name of the remote it supposed to be, truncates at the dot for some operations and uses the full name for others.
-
-> I've fixed this bug. [[done]]
->
-> However, using "/" in a remote name seems likely to me to confuse
-> git's own remote branch handling. Although I've never tried it.
-> --[[Joey]]
-
->> From what I can see, git handles / just fine, but would get upset about : which is why it's not allowed in a remote's name.
->> My naming scheme is host//path/to/annex. It sorts nicely and gives all important information left to right with the most specific parts at the beginning and end.
->> If you have any other ideas or scheme, I am all ears :)
->> Either way, thanks for fixing this so quickly.
->> -- RichiH
diff --git a/doc/bugs/git_annex_ignores_GIT__95__SSH__63__.mdwn b/doc/bugs/git_annex_ignores_GIT__95__SSH__63__.mdwn
new file mode 100644
index 000000000..c0e634872
--- /dev/null
+++ b/doc/bugs/git_annex_ignores_GIT__95__SSH__63__.mdwn
@@ -0,0 +1,24 @@
+### Please describe the problem.
+I'm attempting to set up an ssh remote on windows. I've configured a key pair for it and set GIT_SSH to use plink. git fetch works correctly, but git annex info shows this:
+
+[[!format sh """
+C:\Users\db48x\annex>git annex info
+repository mode: direct
+trusted repositories: "ssh": argonath: no address associated with name
+
+ Remote argonath does not have git-annex installed; setting annex-ignore
+"""]]
+
+etc. Apparently it's trying to use the included ssh binary instead of my GIT_SSH setting.
+
+### What version of git-annex are you using? On what operating system?
+
+ git-annex version: 5.20140529-gb71f9bf
+ build flags: Assistant Pairing Testsuite S3 DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web tahoe glacier ddar hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 2 3 4
+
+> [[dup|done]] of [[todo/git-annex_ignores_GIT__95__SSH]] --[[Joey]]
diff --git a/doc/bugs/git_annex_import_destroys_a_fellow_git_annex_repository.mdwn b/doc/bugs/git_annex_import_destroys_a_fellow_git_annex_repository.mdwn
deleted file mode 100644
index c8307ca6b..000000000
--- a/doc/bugs/git_annex_import_destroys_a_fellow_git_annex_repository.mdwn
+++ /dev/null
@@ -1,130 +0,0 @@
-### Please describe the problem.
-
-`git annex import` not only [[does not work with git annex repositories|bugs/`git annex import` does not work on other git annex repositories]], it even destroys the meta-data in that repository, because it moves the `.git/*` metadata out of the remote repository.
-
-### What steps will reproduce the problem?
-
-[[!format txt """
-git init foo
-cd foo
-git annex init
-dd if=/dev/urandom of=foo bs=1M count=1
-git annex add foo
-git commit -m'files'
-cd ../
-git init bar
-cd bar
-git annex init
-mkdir foo
-cd foo
-git annex import ../../foo
-cd ../../foo
-git status
-"""]]
-
-
-### What version of git-annex are you using? On what operating system?
-
-[[!format txt """
-anarcat@angela:foo$ git annex version
-git-annex version: 4.20130921-g434dc22
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS Feeds Quvi
-"""]]
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-anarcat@angela:~$ cd /tmp
-anarcat@angela:/tmp$ mkdir test
-anarcat@angela:/tmp$ cd test
-anarcat@angela:test$ ls
-anarcat@angela:test$ git init foo
-Initialized empty Git repository in /tmp/test/foo/.git/
-anarcat@angela:test$ cd foo
-anarcat@angela:foo$ git annex init
-init ok
-(Recording state in git...)
-anarcat@angela:foo$ dd if=/dev/urandom of=foo bs=1M count=1
-1+0 enregistrements lus
-1+0 enregistrements écrits
-1048576 octets (1,0 MB) copiés, 0,410384 s, 2,6 MB/s
-anarcat@angela:foo$ git annex add foo
-add foo (checksum...) ok
-(Recording state in git...)
-anarcat@angela:foo$ git commit -m'files'
-[master (root-commit) 83daa0b] files
- 1 file changed, 1 insertion(+)
- create mode 120000 foo
-anarcat@angela:foo$ cd ../
-anarcat@angela:test$ git init bar
-Initialized empty Git repository in /tmp/test/bar/.git/
-anarcat@angela:test$ cd bar
-anarcat@angela:bar$ git annex init
-init ok
-(Recording state in git...)
-anarcat@angela:bar$ mkdir foo
-anarcat@angela:bar$ cd foo
-anarcat@angela:foo$ git annex import ../../foo
-import .git/COMMIT_EDITMSG (checksum...) ok
-import .git/description (checksum...) ok
-import .git/config (checksum...) ok
-import .git/index (checksum...) ok
-import .git/HEAD (checksum...) ok
-import .git/annex/journal.lck (checksum...) ok
-import .git/annex/index.lck (checksum...) ok
-import .git/annex/sentinal (checksum...) ok
-import .git/annex/sentinal.cache (checksum...) ok
-import .git/annex/index (checksum...) ok
-import .git/annex/objects/w2/Kz/SHA256E-s1048576--f957108785c8dc30cf792948b89d61af257c40e5ef0e1d20ff6cf6aadaf6f66b/SHA256E-s1048576--f957108785c8dc30cf792948b89d61af257c40e5ef0e1d20ff6cf6aadaf6f66b
-git-annex: ../../foo/.git/annex/objects/w2/Kz/SHA256E-s1048576--f957108785c8dc30cf792948b89d61af257c40e5ef0e1d20ff6cf6aadaf6f66b/SHA256E-s1048576--f957108785c8dc30cf792948b89d61af257c40e5ef0e1d20ff6cf6aadaf6f66b: rename: permission denied (Permission denied)
-failed
-import .git/objects/0e/6881452189b7fc34809f101f075da7cca9d9d8 (checksum...) ok
-import .git/objects/03/c0163611cd061af17b2dd58a93c95ffbb05040 (checksum...) ok
-import .git/objects/39/10912eab082d015bface04ed3a8ed658b94893 (checksum...) ok
-import .git/objects/21/05f6aaf523510f25516b04a0c07d5900df2b0b (checksum...) ok
-import .git/objects/83/daa0b1d8290191f53d1d3b5e39e03653a89ce2 (checksum...) ok
-import .git/objects/83/8fa78626a6cdc4399186172df9109d321ca0bf (checksum...) ok
-import .git/objects/dc/1e1b7b811079e1c5826d44958b736fc3a3a458 (checksum...) ok
-import .git/objects/7b/4d3d6a3ee2286b2da15c1aca39353d63c16fa2 (checksum...) ok
-import .git/objects/86/2b2a09ebc7a1eb298dccc57be75bad897a7c10 (checksum...) ok
-import .git/objects/e1/61ad2ad1843e39937caaf6add6f690fd361126 (checksum...) ok
-import .git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 (checksum...) ok
-import .git/objects/9b/47feee99b5f24e0dc96cf4a20fcb88c0ec007d (checksum...) ok
-import .git/objects/b0/8c838cfb09bafae40a05312092c37360c880b0 (checksum...) ok
-import .git/refs/heads/master (checksum...) ok
-import .git/refs/heads/git-annex (checksum...) ok
-import .git/logs/HEAD (checksum...) ok
-import .git/logs/refs/heads/master (checksum...) ok
-import .git/logs/refs/heads/git-annex (checksum...) ok
-import .git/info/exclude (checksum...) ok
-import .git/hooks/pre-applypatch.sample (checksum...) ok
-import .git/hooks/applypatch-msg.sample (checksum...) ok
-import .git/hooks/pre-rebase.sample (checksum...) ok
-import .git/hooks/update.sample (checksum...) ok
-import .git/hooks/commit-msg.sample (checksum...) ok
-import .git/hooks/pre-commit (checksum...) ok
-import .git/hooks/prepare-commit-msg.sample (checksum...) ok
-import .git/hooks/post-update.sample (checksum...) ok
-import .git/hooks/pre-commit.sample (checksum...) ok
-(Recording state in git...)
-error: Invalid path 'foo/.git/COMMIT_EDITMSG'
-error: unable to add foo/.git/COMMIT_EDITMSG to index
-fatal: adding files failed
-
-git-annex: user error (xargs ["-0","git","--git-dir=/tmp/test/bar/.git","--work-tree=/tmp/test/bar","add","--"] exited 123)
-failed
-git-annex: import: 2 failed
-anarcat@angela:foo$ cd ../../foo
-anarcat@angela:foo$ git status
-fatal: Not a git repository (or any of the parent directories): .git
-anarcat@angela:foo$
-# End of transcript or log.
-"""]]
-
-Thanks! --[[anarcat]]
-
-> Would have thought this was obviously something you shouldn't do
-> (sorta like running git-annex import on your home directory),
-> but ok, it can skip .git directories. [[done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_import_fails_on_filenames_with_newlines_in_them.mdwn b/doc/bugs/git_annex_import_fails_on_filenames_with_newlines_in_them.mdwn
new file mode 100644
index 000000000..f7b3bf6a9
--- /dev/null
+++ b/doc/bugs/git_annex_import_fails_on_filenames_with_newlines_in_them.mdwn
@@ -0,0 +1,47 @@
+### Please describe the problem.
+I am importing a lot of old documents into my annex. Some of these old files apparently have newlines in their filename. A run of `git annex import` aborts when it encounters such a file; the file is moved to the annex, but it is left unstaged.
+
+### What steps will reproduce the problem?
+[[!format sh """
+bram@durian% mkdir annex
+bram@durian% cd annex
+bram@durian% git init
+Initialized empty Git repository in /home/bram/tmp/t/annex/.git/
+bram@durian% git annex init
+init ok
+(Recording state in git...)
+bram@durian% echo foo > ../$'foo\nbar'
+bram@durian% ls -lb ..
+total 8
+drwxr-xr-x 3 bram bram 4096 Jul 26 18:20 annex/
+-rw-r--r-- 1 bram bram 4 Jul 26 18:20 foo\nbar
+bram@durian% git annex import ../foo$'\n'bar
+import foo
+bar git-annex: unknown response from git cat-file ("HEAD:./foo missing","HEAD:./foo\nbar")
+bram@durian% ls -lb
+total 4
+-r--r--r-- 2 bram bram 4 Jul 26 18:20 foo\nbar
+bram@durian% git status
+On branch master
+
+Initial commit
+
+Untracked files:
+ (use "git add <file>..." to include in what will be committed)
+
+ "foo\nbar"
+
+nothing added to commit but untracked files present (use "git add" to track)
+bram@durian% cat $'foo\nbar'
+foo
+"""]]
+
+
+### What version of git-annex are you using? On what operating system?
+ Debian unstable
+ git-annex version: 5.20140717
+ git version 2.0.1
+ Linux durian 3.14-1-amd64 #1 SMP Debian 3.14.9-1 (2014-06-30) x86_64 GNU/Linux
+
+[[!tag confirmed git-bug]]
+[[!title git limitations prevent using git-annex on filenames containing newlines]]
diff --git a/doc/bugs/git_annex_import_fails_on_filenames_with_newlines_in_them/comment_1_249b198e1141e05fe39f49bd7ad8870e._comment b/doc/bugs/git_annex_import_fails_on_filenames_with_newlines_in_them/comment_1_249b198e1141e05fe39f49bd7ad8870e._comment
new file mode 100644
index 000000000..c4d78fa03
--- /dev/null
+++ b/doc/bugs/git_annex_import_fails_on_filenames_with_newlines_in_them/comment_1_249b198e1141e05fe39f49bd7ad8870e._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 1"
+ date="2014-08-12T18:24:57Z"
+ content="""
+Congrats on being the guy with newlines in his filenames.. someone had to do it!
+
+Similarly, `git annex add` on the file will fail with the same error and leave it where it is and not added.
+
+The problem here is that while git-annex is careful to use git commands with -z, so it gets \"foo\nbar\" with a literal newline from git ls-files, `git cat-file --batch` speaks a line-based protocol. And, it parses filenames like `git ref-parse` does -- and AFAICS, that does not provide a way to input something like \"foo\\nbar\" with an escaped newline. Normally this doesn't matter, since the whole line of input is taken to be a filename, so there's no need to escape anything, but of course it fails with newlines.
+
+IMHO, the solution to this is to make `git cat-file --batch` have a -z option that enables NUL-delimited input (and probably output). If you want to see this happen, take it to the git developers..
+
+(Should git annex import put files back if it fails to add them rather than leaving them sitting in the work tree?)
+"""]]
diff --git a/doc/bugs/git_annex_import_fails_on_filenames_with_newlines_in_them/comment_2_7320c7806da93d0862f8f768092ef073._comment b/doc/bugs/git_annex_import_fails_on_filenames_with_newlines_in_them/comment_2_7320c7806da93d0862f8f768092ef073._comment
new file mode 100644
index 000000000..e1e6b9283
--- /dev/null
+++ b/doc/bugs/git_annex_import_fails_on_filenames_with_newlines_in_them/comment_2_7320c7806da93d0862f8f768092ef073._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm_YXzEdPHzbSGVwtmTR7g1BqDtTnIBB5s"
+ nickname="Matthias"
+ subject="git and newlines"
+ date="2014-11-25T11:56:18Z"
+ content="""
+git does not support file names with newlines in them, and probably never will. Linus decided that quite early.
+"""]]
diff --git a/doc/bugs/git_annex_import_fails_on_filenames_with_newlines_in_them/comment_3_032d4a64e2f010fcf9359e4f77b6d784._comment b/doc/bugs/git_annex_import_fails_on_filenames_with_newlines_in_them/comment_3_032d4a64e2f010fcf9359e4f77b6d784._comment
new file mode 100644
index 000000000..184a77af2
--- /dev/null
+++ b/doc/bugs/git_annex_import_fails_on_filenames_with_newlines_in_them/comment_3_032d4a64e2f010fcf9359e4f77b6d784._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2014-12-01T22:33:23Z"
+ content="""
+Mattias seems to be wrong. It may be that some of the shell script parts of
+git don't support it, or that parts of git has bugs. But as far as git's
+data representation is concerned, \n is a character like any other, and
+eg `git add` and `git commit` deal with it just fine.
+
+(\0 is a different story..)
+"""]]
diff --git a/doc/bugs/git_annex_importfeed_fails.mdwn b/doc/bugs/git_annex_importfeed_fails.mdwn
deleted file mode 100644
index 244ed769c..000000000
--- a/doc/bugs/git_annex_importfeed_fails.mdwn
+++ /dev/null
@@ -1,64 +0,0 @@
-### Please describe the problem.
-
-git annex importfeed fails
-
-### What steps will reproduce the problem?
-
-git annex importfeed http://www.tatw.co.uk/podcast.xml
-
-### On what operating system?
-
-Ubuntu 12.04, the prebuilt linux tarball
-
-[[!format sh """
-$ git annex version
-git-annex version: 4.20130922-g7dc188a
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP Feeds Quvi
-local repository version: 3
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-"""]]
-
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-$ git annex importfeed http://www.tatw.co.uk/podcast.xml
-(checking known urls...)
-(Recording state in git...)
-importfeed http://www.tatw.co.uk/podcast.xml
---2013-09-27 12:16:09-- http://www.tatw.co.uk/podcast.xml
-Résolution de www.tatw.co.uk (www.tatw.co.uk)... 88.190.26.130
-Connexion vers www.tatw.co.uk (www.tatw.co.uk)|88.190.26.130|:80... connecté.
-requête HTTP transmise, en attente de la réponse... 200 OK
-Longueur: 41267 (40K) [application/xml]
-Sauvegarde en : «/tmp/user/2166/feed10670»
-
-100%[==========================================================================>] 41 267 81,6K/s ds 0,5s
-
-2013-09-27 12:16:10 (81,6 KB/s) - «/tmp/user/2166/feed10670» sauvegardé [41267/41267]
-
-addurl Above___Beyond__Group_Therapy/_001_Group_Therapy_Radio_with_Above___Beyond (downloading ...)
-failed
-addurl Above___Beyond__Group_Therapy/_002_Group_Therapy_Radio_with_Above___Beyond (downloading ...)
-failed
-addurl Above___Beyond__Group_Therapy/_003_Group_Therapy_Radio_with_Above___Beyond (downloading ...)
-failed
-addurl Above___Beyond__Group_Therapy/_004_Group_Therapy_Radio_with_Above___Beyond (downloading ...)
-failed
-
-etc
-
-
-# End of transcript or log.
-"""]]
-
-> This is a bug in the feed library: <https://github.com/sof/feed/issues/7>
-> And already fixed upstream this morning, so if you need the fix
-> immediately, build with cabal. Otherwise fix will percolate out to
-> builds eventually.
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_indirect_can_fail_catastrophically.mdwn b/doc/bugs/git_annex_indirect_can_fail_catastrophically.mdwn
deleted file mode 100644
index 3dc193683..000000000
--- a/doc/bugs/git_annex_indirect_can_fail_catastrophically.mdwn
+++ /dev/null
@@ -1,78 +0,0 @@
-### Please describe the problem.
-
-I have a repo that I initialized in direct mode because i felt unconfortable with the "symlink forest" approach.
-
-Now that I prefer that, i want to switch back to indirect mode. The problem is, when I did that, I realized that some files in the repo were not writable by my user, and git annex indirect crashed, and didn't "indirect" all the files. Now the repo is in a "half-direct" state, and I seem to be unable to recover.
-
-### What steps will reproduce the problem?
-
-[[!format txt """
-git init
-git annex init
-git annex direct
-git annex add . # make sure some files are not writable by your user
-git annex indirect
-"""]]
-
-The `indirect` step will stop at the file that is not writable and will fail to move some files to `.git/annex`. And then the repo is in `indirect` mode yet some files are still not symlinks.
-
-Doing a `git annex direct` will try to commit all those nasty files into git, as it does a `git commit -a`.
-
-### What version of git-annex are you using? On what operating system?
-
- git-annex version: 4.20130912-ga1faca3
- build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS Feeds Quvi
-
-Debian wheezy.
-
-### Please provide any additional information below.
-
-Ideally, there would be a way to just tell git annex it's really still in direct mode and migrate the remaining files.
-
-The workaround is, obviously, to make sure you own all those files before messing around:
-
- chown -R you *
- chmod -R u+w *
-
-A [[patch]], maybe, that allows you to flip cleanly between the two modes:
-
-[[!format diff """
-From a21dfc97da96883b2a088bb5f3f466296f08d858 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Antoine=20Beaupr=C3=A9?= <anarcat@koumbit.org>
-Date: Mon, 16 Sep 2013 13:58:29 -0400
-Subject: [PATCH] do not commit -a when going back to direct mode
-
-without this, if we switched to indirect mode but failed doing so
-(because of a permission problem, for example), going back to
-direct mode will commit all files to git, which we really want
-to avoid.
-
----
- Command/Direct.hs | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/Command/Direct.hs b/Command/Direct.hs
-index 7835988..ed8ea6c 100644
---- a/Command/Direct.hs
-+++ b/Command/Direct.hs
-@@ -33,7 +33,6 @@ perform = do
- showOutput
- _ <- inRepo $ Git.Command.runBool
- [ Param "commit"
-- , Param "-a"
- , Param "-m"
- , Param "commit before switching to direct mode"
- ]
---
-1.7.10.4
-
-"""]]
-
-Any update on this? Why is `-a` used here? -- [[anarcat]]
-
-> -a is not really the problem. You certainly do usually want
-> to commit your changes before converting to direct mode.
->
-> [[done]]; now when this happens it catches the exception and
-> leaves the file in direct mode, which is the same as it being
-> unlocked. --[[Joey]]
diff --git a/doc/bugs/git_annex_indirect_can_fail_catastrophically/comment_1_0b085e7e8c8e364f479574bc00c7c394._comment b/doc/bugs/git_annex_indirect_can_fail_catastrophically/comment_1_0b085e7e8c8e364f479574bc00c7c394._comment
deleted file mode 100644
index 68814881d..000000000
--- a/doc/bugs/git_annex_indirect_can_fail_catastrophically/comment_1_0b085e7e8c8e364f479574bc00c7c394._comment
+++ /dev/null
@@ -1,21 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.220"
- subject="comment 1"
- date="2013-09-25T18:57:25Z"
- content="""
-Worse than being stuck partway converted, it fails in such a way that the file you can't write to is left stuck in .git/annex/objects/ without a symlink pointint to it.
-
-Here is how to recover:
-
-1. run `git annex direct`
-2. run `git annex indirect`
-3. run `git annex direct`
-4. run `git annex indirect`
-5. run `git revert HEAD`
-6. run `git annex direct`
-7. fix the permission of the file
-8. run `git annex indirect`
-
-Please don't ask me why this works, but it will..
-"""]]
diff --git a/doc/bugs/git_annex_initremote_needs_some___34__error_checking__34__.mdwn b/doc/bugs/git_annex_initremote_needs_some___34__error_checking__34__.mdwn
deleted file mode 100644
index 6b57f8ce5..000000000
--- a/doc/bugs/git_annex_initremote_needs_some___34__error_checking__34__.mdwn
+++ /dev/null
@@ -1,65 +0,0 @@
-_git annex initremote_ without a complete command set still adds an entry to the uuid.log etc... and thus clutters up the state of the annex. I would not have expected this behaviour as a user.
-
-_initremote_ should fail and not do anything if the commands that it has been given are incomplete or incorrect. I was initialising a few rsync repos and noticed that i ended up having mutiple rsync remotes with the same name but different uuid's. I know its hard if not impossible to remove these uuid's so I have just marked them as "dead" in my live annexes.
-
-Here's a transcript of the problem
-
-<pre>
-x00:sandbox jtang$ mkdir atest
-x00:sandbox jtang$ cd atest/
-x00:atest jtang$ git init
-Initialized empty Git repository in /Users/jtang/sandbox/atest/.git/
-x00:atest jtang$ git annex init
-init ok
-(Recording state in git...)
-x00:atest jtang$ git annex status
-supported backends: SHA256 SHA1 SHA512 SHA224 SHA384 SHA256E SHA1E SHA512E SHA224E SHA384E WORM URL
-supported remote types: git S3 bup directory rsync web hook
-trusted repositories: 0
-semitrusted repositories: 2
- 00000000-0000-0000-0000-000000000001 -- web
- cbb58e1c-d737-11e1-b682-83239d5ff2e0 -- here
-untrusted repositories: 0
-dead repositories: 0
-transfers in progress: none
-available local disk space: 185 gigabytes (+1 megabyte reserved)
-local annex keys: 0
-local annex size: 0 bytes
-known annex keys: 0
-known annex size: 0 bytes
-bloom filter size: 16 mebibytes (0% full)
-backend usage:
-x00:atest jtang$ git annex initremote foo
-git-annex: Specify the type of remote with type=
-x00:atest jtang$ git annex initremote foo type=rsync
-(Recording state in git...)
-initremote foo git-annex: Specify encryption=key or encryption=none or encryption=shared
-x00:atest jtang$ git annex initremote foo type=rsync
-(Recording state in git...)
-initremote foo git-annex: Specify encryption=key or encryption=none or encryption=shared
-x00:atest jtang$ git annex status
-supported backends: SHA256 SHA1 SHA512 SHA224 SHA384 SHA256E SHA1E SHA512E SHA224E SHA384E WORM URL
-supported remote types: git S3 bup directory rsync web hook
-trusted repositories: (Recording state in git...)
-0
-semitrusted repositories: 5
- 00000000-0000-0000-0000-000000000001 -- web
- cbb58e1c-d737-11e1-b682-83239d5ff2e0 -- here
- d3adfcd0-d737-11e1-b15b-b7032388f8aa -- foo
- d6d8e1e0-d737-11e1-956a-0b3d3451226a -- foo
- d78d795c-d737-11e1-ac98-4fe3d6fdfd54 -- foo
-untrusted repositories: 0
-dead repositories: 0
-transfers in progress: none
-available local disk space: 185 gigabytes (+1 megabyte reserved)
-local annex keys: 0
-local annex size: 0 bytes
-known annex keys: 0
-known annex size: 0 bytes
-bloom filter size: 16 mebibytes (0% full)
-backend usage:
-x00:atest jtang$
-</pre>
-
-> Indeed, I broke that in June by making it record the name in a much too
-> early stage. Now fixed. [[done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_initremote_walks_.git-annex.mdwn b/doc/bugs/git_annex_initremote_walks_.git-annex.mdwn
deleted file mode 100644
index acd369bde..000000000
--- a/doc/bugs/git_annex_initremote_walks_.git-annex.mdwn
+++ /dev/null
@@ -1,19 +0,0 @@
-a <!-- (a suggestion for introducing severity tags on bugs,
-feel free to discard) --> issue: `git annex initremote` (in particular, adding
-a key as described in [[encryption]] -- `git annex initremote my_remote
-encryption=my_key`) seems to iterate over the `.git-annex/???/???/*.log` files
-with lstat (tested using strace).
-
-in a 50k key git-annex on a slow disk, this takes quite a while, while not
-seeming necessary (it's just re-encrypting the shared secret, is it?).
-
-could you verify the observed behavior?
-
-> This is due to `git commit` being called. `git commit` exposes git's
-> rather innefficient handling of the index; in order to make a commit
-> it has to write a new index file, and it does this by scanning every
-> file in the repository. I think that git generally needs its index
-> file handleing overhauled, particularly to deal with repositories with
-> large numbers of files. git-annex is seems to already be running
-> `git commit` in its most efficient mode, by specifying exactly what file
-> to commit. [[done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_list__47__whereis_and_uncommited_local_changes.mdwn b/doc/bugs/git_annex_list__47__whereis_and_uncommited_local_changes.mdwn
new file mode 100644
index 000000000..691591519
--- /dev/null
+++ b/doc/bugs/git_annex_list__47__whereis_and_uncommited_local_changes.mdwn
@@ -0,0 +1,30 @@
+### Please describe the problem.
+
+I’m not sure whether this is a bug or a technical limitation, but here
+you go: In direct mode, if a file is locally changed but unsynced,
+«git annex whereis» and «git annex list» behave as if the file were
+still unchanged. Any changes would only show after «git annex sync» or
+«git annex add» (altough I’m not sure what the latter does if a file
+is already annexed).
+
+Syncing prior to «whereis» is not viable since I might not want to
+proliferate the changes to other remotes. Would it be reasonable making
+sure that «whereis» considers uncommitted local changes?
+
+If doing so is too expensive to do implicitly, it would be useful
+having an explicit means of seeing local changes in direct mode
+repositories. Is «git annex add» the intended way of doing so?
+
+### What steps will reproduce the problem?
+
+1. Clone A to B.
+2. Get file $f from A to B.
+3. Switch B to direct mode.
+4. Edit file $f.
+5. «git annex list» reports that $f is on both A and B.
+
+### What version of git-annex are you using? On what operating system?
+git-annex 5.20140421
+Linux 3.14.3
+
+[[!tag confirmed]]
diff --git a/doc/bugs/git_annex_list__47__whereis_and_uncommited_local_changes/comment_1_99e8d2c1bbc23438f954d8ddc827078e._comment b/doc/bugs/git_annex_list__47__whereis_and_uncommited_local_changes/comment_1_99e8d2c1bbc23438f954d8ddc827078e._comment
new file mode 100644
index 000000000..83663316c
--- /dev/null
+++ b/doc/bugs/git_annex_list__47__whereis_and_uncommited_local_changes/comment_1_99e8d2c1bbc23438f954d8ddc827078e._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="92.227.51.179"
+ subject="comment 1"
+ date="2014-05-13T20:41:48Z"
+ content="""
+Crosslink to related wishlist item
+http://git-annex.branchable.com/todo/wishlist:___96__git_annex_sync__96___without_auto-commit/
+"""]]
diff --git a/doc/bugs/git_annex_list__47__whereis_and_uncommited_local_changes/comment_2_7c8d91d78608d717164cb3e825654654._comment b/doc/bugs/git_annex_list__47__whereis_and_uncommited_local_changes/comment_2_7c8d91d78608d717164cb3e825654654._comment
new file mode 100644
index 000000000..a2cf16cb8
--- /dev/null
+++ b/doc/bugs/git_annex_list__47__whereis_and_uncommited_local_changes/comment_2_7c8d91d78608d717164cb3e825654654._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="216.145.95.162"
+ subject="comment 2"
+ date="2014-05-19T17:04:16Z"
+ content="""
+Direct mode and indirect mode behave the same here -- in indirect mode, if you unlock and modify a file, whereis will show the location of the annexed file, not the un-added version. In general all git-annex commands except of course `add` and `status` operate on the files that are staged in the index or committed, not un-staged files in the work tree. This is consistent with git's own behavior.
+
+It is true that in direct mode, whereis will say that a file that has been modified is present locally, even though the modification has changed the only local copy of the file -- so it's not actually present locally. However, I don't think it makes sense to make whereis check if the file is actually still locally present before showing it is. whereis shows location tracking information, which can be out of date for many reasons.
+"""]]
diff --git a/doc/bugs/git_annex_lock_dangerous.mdwn b/doc/bugs/git_annex_lock_dangerous.mdwn
deleted file mode 100644
index ae0ff24b6..000000000
--- a/doc/bugs/git_annex_lock_dangerous.mdwn
+++ /dev/null
@@ -1,19 +0,0 @@
-### Please describe the problem.
-
-Git annex lock discards data without --force; this is misleading from the name.
-
-### What steps will reproduce the problem?
-
- git annex unlock something.txt
- kwrite something.txt # edit
- git annex lock something.txt # lock is the opposite of unlock, right?
-
-Oops, just lost my changes!
-
-If you want my opinion, `git annex lock` should either require `-f` to throw away data or should be renamed (e.g. to `revert` or `checkout`).
-
-### What version of git-annex are you using? On what operating system?
-
-git version 1.8.1.2, git-annex version: 4.20130815, Kubuntu 13.04
-
-> Agreed; [[done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_migrate_leaves_old_backend_versions_around.mdwn b/doc/bugs/git_annex_migrate_leaves_old_backend_versions_around.mdwn
deleted file mode 100644
index 263338d64..000000000
--- a/doc/bugs/git_annex_migrate_leaves_old_backend_versions_around.mdwn
+++ /dev/null
@@ -1,19 +0,0 @@
-`git annex migrate` leaves old, unlinked backend versions lying around. It
-would be great if these were purged automatically somehow.
-
-> Yes, this is an issue mentioned in the
-> [[tips/migrating_data_to_a_new_backend]].
->
-> Since multiple files can point to the same content, it could be that
-> only one file has been migrated, and the content is still used. So
-> the content either has to be retained, or an operation as expensive
-> as `git annex unused` used to find if something else still uses it.
->
-> Rather than adding such an
-> expensive operation to each call to migrate, I focused on hard-linking
-> the values for the old and new keys, so that the old keys don't actually
-> use any additional resources (beyond an extra inode).
->
-> This way a lot of migrations can be done, and only when you're done you
-> can do the more expensive cleanup pass if you want to. --[[Joey]]
-> [[done]]
diff --git a/doc/bugs/git_annex_migrate_leaves_old_backend_versions_around/comment_1_f3e418144e5a5a9b3eda459546fc2bb0._comment b/doc/bugs/git_annex_migrate_leaves_old_backend_versions_around/comment_1_f3e418144e5a5a9b3eda459546fc2bb0._comment
deleted file mode 100644
index dac018cfa..000000000
--- a/doc/bugs/git_annex_migrate_leaves_old_backend_versions_around/comment_1_f3e418144e5a5a9b3eda459546fc2bb0._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://nicolas-schodet.myopenid.com/"
- ip="2a01:e35:8ae6:f130:1e4b:d6ff:fe78:1ddb"
- subject="Hardlink on remote repository?"
- date="2013-08-15T06:58:16Z"
- content="""
-Does the hardlink magic also work on the remote repository? If I understand correctly, the remote does not know that the new hash is the same file (and also, file needs to be transferred again) unless the migration is done on all remote before synchronizing. Is it right?
-"""]]
diff --git a/doc/bugs/git_annex_remotedaemon_fails_to_connect_after_several_LOSTNET_messages_in_a_row.mdwn b/doc/bugs/git_annex_remotedaemon_fails_to_connect_after_several_LOSTNET_messages_in_a_row.mdwn
new file mode 100644
index 000000000..a3e4c3f67
--- /dev/null
+++ b/doc/bugs/git_annex_remotedaemon_fails_to_connect_after_several_LOSTNET_messages_in_a_row.mdwn
@@ -0,0 +1,77 @@
+### Please describe the problem.
+
+git annex remotedaemon fails to reconnect after receiving several LOSTNET messages and RESUME.
+
+Initially I've encountered the issue by noticing that git annex assistant stops updating local working copy after suspend/resume of laptop. Later I've found out that the same issue happens when disconnecting from network via NetworkManager and connecting back.
+
+After some experiments with git annex remotedaemon I've found out that it incorrectly handles several LOSTNET messages in a row. After RESUME remotedaemon starts new SSH process and sends DISCONNECTED right away. Also it doesn't try to reconnect with backoff as it does with bad connection.
+
+I've checked sources and with some logging found that it sends DISCONNECTED because of some kind of queueing of LOSTNET and switching to stopped mode right after RESUME. Unfortunately I don't know haskell to fix it myself.
+
+### What steps will reproduce the problem?
+
+[[!format sh """
+% git annex remotedaemon --debug
+[2014-12-19 11:07:13 NOVT] read: git ["config","--null","--list"]
+[2014-12-19 11:07:13 NOVT] read: ssh ["-O","stop","-S","git@annex","-o","ControlMaster=auto","-o","ControlPersist=yes","localhost"]
+[2014-12-19 11:07:13 NOVT] chat: ssh ["-S",".git/annex/ssh/git@annex","-o","ControlMaster=auto","-o","ControlPersist=yes","-T","git@annex","git-annex-shell 'notifychanges' '/~/annex' --uuid 858bc960-d379-4694-a6b8-98eba5fbeb82"]
+CONNECTED ssh://git@annex/~/annex
+[2014-12-19 11:07:13 NOVT] chat: git ["--git-dir=/home/user/annex/.git","--work-tree=/home/user/annex","cat-file","--batch"]
+LOSTNET
+[2014-12-19 11:07:21 NOVT] read: ssh ["-O","stop","-S","git@annex","-o","ControlMaster=auto","-o","ControlPersist=yes","localhost"]
+DISCONNECTED ssh://git@annex/~/annex
+LOSTNET
+RESUME
+[2014-12-19 11:07:27 NOVT] chat: ssh ["-S",".git/annex/ssh/git@annex","-o","ControlMaster=auto","-o","ControlPersist=yes","-T","git@annex","git-annex-shell 'notifychanges' '/~/annex' --uuid 858bc960-d379-4694-a6b8-98eba5fbeb82"]
+DISCONNECTED ssh://git@annex/~/annex
+"""]]
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex 5.20141203 on Gentoo Linux
+
+### Please provide any additional information below.
+
+Here is the original assistant log:
+
+[[!format sh """
+
+[2014-12-19 11:14:47 NOVT] NetWatcher: detected network disconnection
+[2014-12-19 11:14:47 NOVT] RemoteControl: LOSTNET
+[2014-12-19 11:14:47 NOVT] RemoteControl: DISCONNECTED ssh://git@annex/~/annex
+[2014-12-19 11:14:47 NOVT] RemoteControl: fromList []
+[2014-12-19 11:14:49 NOVT] NetWatcher: detected network disconnection
+[2014-12-19 11:14:49 NOVT] RemoteControl: LOSTNET
+[2014-12-19 11:14:52 NOVT] NetWatcher: detected network disconnection
+[2014-12-19 11:14:52 NOVT] RemoteControl: LOSTNET
+[2014-12-19 11:14:52 NOVT] NetWatcher: detected network disconnection
+[2014-12-19 11:14:52 NOVT] RemoteControl: LOSTNET
+[2014-12-19 11:14:53 NOVT] NetWatcher: detected network connection
+[2014-12-19 11:14:53 NOVT] NetWatcher: Syncing with origin
+[2014-12-19 11:14:53 NOVT] read: git ["--git-dir=/home/user/annex/.git","--work-tree=/home/user/annex","symbolic-ref","HEAD"]
+[2014-12-19 11:14:53 NOVT] read: git ["--git-dir=/home/user/annex/.git","--work-tree=/home/user/annex","show-ref","refs/heads/master"]
+[2014-12-19 11:14:53 NOVT] call: git ["--git-dir=/home/user/annex/.git","--work-tree=/home/user/annex","fetch","origin"]
+[2014-12-19 11:14:54 NOVT] read: git ["--git-dir=/home/user/annex/.git","--work-tree=/home/user/annex","show-ref","git-annex"]
+[2014-12-19 11:14:54 NOVT] read: git ["--git-dir=/home/user/annex/.git","--work-tree=/home/user/annex","show-ref","--hash","refs/heads/git-annex"]
+[2014-12-19 11:14:54 NOVT] read: git ["--git-dir=/home/user/annex/.git","--work-tree=/home/user/annex","log","refs/heads/git-annex..b85cddc187d388ab12d18fddbdef266565e81e43","-n1","--pretty=%H"]
+[2014-12-19 11:14:54 NOVT] read: git ["--git-dir=/home/user/annex/.git","--work-tree=/home/user/annex","log","refs/heads/git-annex..12f83429b96850f81ff8edfc0a8651bfa65a066b","-n1","--pretty=%H"]
+[2014-12-19 11:14:54 NOVT] call: git ["--git-dir=/home/user/annex/.git","--work-tree=/home/user/annex","show-ref","--verify","-q","refs/remotes/origin/master"]
+[2014-12-19 11:14:54 NOVT] read: git ["--git-dir=/home/user/annex/.git","--work-tree=/home/user/annex","log","refs/heads/master..refs/remotes/origin/master","-n1","--pretty=%H"]
+[2014-12-19 11:14:54 NOVT] call: git ["--git-dir=/home/user/annex/.git","--work-tree=/home/user/annex","show-ref","--verify","-q","refs/remotes/origin/synced/master"]
+[2014-12-19 11:14:54 NOVT] read: git ["--git-dir=/home/user/annex/.git","--work-tree=/home/user/annex","log","refs/heads/synced/master..refs/remotes/origin/synced/master","-n1","--pretty=%H"]
+[2014-12-19 11:14:54 NOVT] read: git ["--git-dir=/home/user/annex/.git","--work-tree=/home/user/annex","symbolic-ref","HEAD"]
+[2014-12-19 11:14:54 NOVT] read: git ["--git-dir=/home/user/annex/.git","--work-tree=/home/user/annex","show-ref","refs/heads/master"]
+[2014-12-19 11:14:54 NOVT] NetWatcher: pushing to [Remote { name ="origin" }]
+[2014-12-19 11:14:54 NOVT] call: git ["--git-dir=/home/user/annex/.git","--work-tree=/home/user/annex","push","origin","+git-annex:synced/git-annex","master:synced/master"]
+Everything up-to-date
+[2014-12-19 11:14:54 NOVT] read: git ["--git-dir=/home/user/annex/.git","--work-tree=/home/user/annex","push","origin","master"]
+[2014-12-19 11:14:54 NOVT] RemoteControl: RESUME
+[2014-12-19 11:14:54 NOVT] RemoteControl: DISCONNECTED ssh://git@annex/~/annex
+[2014-12-19 11:14:54 NOVT] RemoteControl: fromList []
+
+
+"""]]
+
+[[!tag confirmed]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_remotedaemon_fails_to_connect_after_several_LOSTNET_messages_in_a_row/comment_1_7340e9cf5493e94cc6cb53adb6965f2c._comment b/doc/bugs/git_annex_remotedaemon_fails_to_connect_after_several_LOSTNET_messages_in_a_row/comment_1_7340e9cf5493e94cc6cb53adb6965f2c._comment
new file mode 100644
index 000000000..a1547f384
--- /dev/null
+++ b/doc/bugs/git_annex_remotedaemon_fails_to_connect_after_several_LOSTNET_messages_in_a_row/comment_1_7340e9cf5493e94cc6cb53adb6965f2c._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-01-15T19:09:08Z"
+ content="""
+Thanks for a great bug report. It took me a little while to remember how
+this works; the LOSTNET and RESUME messages shown are ones you typed
+in to communicate with remotedaemon.
+
+Looks like a probably straightforward bug in its state machine triggered by
+the repeated LOSTNET messages.
+"""]]
diff --git a/doc/bugs/git_annex_remotedaemon_fails_to_connect_after_several_LOSTNET_messages_in_a_row/comment_2_aa6f0371291eb27a55850d905cea381a._comment b/doc/bugs/git_annex_remotedaemon_fails_to_connect_after_several_LOSTNET_messages_in_a_row/comment_2_aa6f0371291eb27a55850d905cea381a._comment
new file mode 100644
index 000000000..e371a0592
--- /dev/null
+++ b/doc/bugs/git_annex_remotedaemon_fails_to_connect_after_several_LOSTNET_messages_in_a_row/comment_2_aa6f0371291eb27a55850d905cea381a._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2015-01-15T19:17:20Z"
+ content="""
+Also, you were spot on about the cause being LOSTNET messages getting
+queued up. Clearing that queue when restarting the transport
+will fix this problem.
+
+Please bring your non-haskell code analysis skills to bear on git-annex
+anytim! :)
+"""]]
diff --git a/doc/bugs/git_annex_remotedaemon_fails_to_connect_after_several_LOSTNET_messages_in_a_row/comment_3_cafaa7f474fbd995d1c10ecd35d2efe5._comment b/doc/bugs/git_annex_remotedaemon_fails_to_connect_after_several_LOSTNET_messages_in_a_row/comment_3_cafaa7f474fbd995d1c10ecd35d2efe5._comment
new file mode 100644
index 000000000..89fc145cf
--- /dev/null
+++ b/doc/bugs/git_annex_remotedaemon_fails_to_connect_after_several_LOSTNET_messages_in_a_row/comment_3_cafaa7f474fbd995d1c10ecd35d2efe5._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="mkdf"
+ subject="comment 3"
+ date="2015-01-16T06:10:43Z"
+ content="""
+Thanks a lot Joey! git-annex works like a charm for me and this was the only issue I've encountered so far. I'm happy my guess was correct and it helped to improve git-annex a bit. Thanks for such great tool!
+"""]]
diff --git a/doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__.mdwn b/doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__.mdwn
new file mode 100644
index 000000000..e61d44883
--- /dev/null
+++ b/doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__.mdwn
@@ -0,0 +1,40 @@
+### Please describe the problem.
+git annex repair fails to repair the repo and reports this error:
+
+ git-annex: /tmp/tmprepo.2/.git/gc.pid: removeLink: does not exist (No such file or directory)
+ failed
+ git-annex: repair: 1 failed
+
+
+### What steps will reproduce the problem?
+
+
+### What version of git-annex are you using? On what operating system?
+git-annex-5.20140717 on gentoo with use flags: assistant cryptohash dbus desktop-notify dns feed inotify pairing production quvi s3 tahoe tdfa testsuite webapp webapp-secure webdav xmpp
+
+### Please provide any additional information below.
+
+[[!format sh """
+~/annex $ git annex repair
+Running git fsck ...
+Unpacking all pack files.
+Unpacking objects: 100% (630/630), done.
+Unpacking objects: 100% (630/630), done.
+Unpacking objects: 100% (638/638), done.
+Initialized empty Git repository in /tmp/tmprepo.2/.git/
+Trying to recover missing objects from remote 192.168.1.246_annex.
+Unpacking all pack files.
+Unpacking objects: 100% (210608/210608), done.
+Trying to recover missing objects from remote 192.168.1.246_annex.
+Auto packing the repository in background for optimum performance.
+See "git help gc" for manual housekeeping.
+
+git-annex: /tmp/tmprepo.2/.git/gc.pid: removeLink: does not exist (No such file or directory)
+failed
+git-annex: repair: 1 failed
+
+
+# End of transcript or log.
+"""]]
+
+> Provisionally [[done]]; see comment. --[[Joey]]
diff --git a/doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__/comment_1_183c3740a108b5f09baf1c401dcfa7f9._comment b/doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__/comment_1_183c3740a108b5f09baf1c401dcfa7f9._comment
new file mode 100644
index 000000000..cc9f7a9e8
--- /dev/null
+++ b/doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__/comment_1_183c3740a108b5f09baf1c401dcfa7f9._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 1"
+ date="2014-08-15T17:46:15Z"
+ content="""
+It seems that this has something to do with an auto `git gc` run being trigged somehow during the repair. Puzzlingly, I cannot find any code that would delete the .git/gc.pid file, unless it somehow shows up as a branch ref or something like that.
+
+Can you run the command with --debug so we can see which particular git command triggered the git gc?
+"""]]
diff --git a/doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__/comment_2_b8ee68b445c6a8d27121d90a2eeba0c7._comment b/doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__/comment_2_b8ee68b445c6a8d27121d90a2eeba0c7._comment
new file mode 100644
index 000000000..6f5570e25
--- /dev/null
+++ b/doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__/comment_2_b8ee68b445c6a8d27121d90a2eeba0c7._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="jg123h12jh3y12g3y"
+ ip="86.62.100.131"
+ subject="Log with --debug"
+ date="2014-08-20T05:49:02Z"
+ content="""
+https://mega.co.nz/#!HYZmwSIb!gCd9jvVIyYye_bpsUq_vuEed4g7NTlEl2xDRheE1Lx4
+
+This is the log of git annex repair --debug.
+"""]]
diff --git a/doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__/comment_3_7502f88ae1c46e070e7fdbd9b9c1b54d._comment b/doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__/comment_3_7502f88ae1c46e070e7fdbd9b9c1b54d._comment
new file mode 100644
index 000000000..db40450d0
--- /dev/null
+++ b/doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__/comment_3_7502f88ae1c46e070e7fdbd9b9c1b54d._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="relevant excerpt "
+ date="2014-10-12T18:08:55Z"
+ content="""
+<pre>
+[2014-08-20 09:05:45 MSK] call: git [\"--git-dir=/tmp/tmprepo.0/.git\",\"--work-tree=/tmp/tmprepo.0\",\"fetch\",\"ssh://crabman@git-annex-192.168.1.246-crabman_annex/~/annex/\",\"--force\",\"--update-head-ok\",\"--quiet\",\"+*:*\"]
+Auto packing the repository in background for optimum performance.
+See \"git help gc\" for manual housekeeping.
+[2014-08-20 09:05:50 MSK] call: rsync [\"-qr\",\"/tmp/tmprepo.0/.git/objects/\",\"/home/crabman/annex/.git/objects/\"]
+[2014-08-20 09:14:58 MSK] read: git [\"--git-dir=/home/crabman/annex/.git\",\"--work-tree=/home/crabman/annex\",\"-c\",\"core.bare=false\",\"show\",\"584a7836d05e6733224a53e5882547eeb87d43db\"]
+[2014-08-20 09:14:59 MSK] read: git [\"--git-dir=/home/crabman/annex/.git\",\"--work-tree=/home/crabman/annex\",\"-c\",\"core.bare=false\",\"show\",\"62fee7cc3ec6ea4c56ba42015ab9bf8f0f808dee\"]
+[2014-08-20 09:14:59 MSK] read: git [\"--git-dir=/home/crabman/annex/.git\",\"--work-tree=/home/crabman/annex\",\"-c\",\"core.bare=false\",\"show\",\"c7a698397328c71a33bbc2852fda8d09d52c4f38\"]
+Running git fsck ...
+Trying to recover missing objects from remote 192.168.1.246_annex.
+Unpacking all pack files.
+Trying to recover missing objects from remote 192.168.1.246_annex.
+
+git-annex: /tmp/tmprepo.0/.git/gc.pid: removeLink: does not exist (No such file or directory)
+</pre>
+"""]]
diff --git a/doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__/comment_4_9f67b14c9ac81f159439c5dff7354b8f._comment b/doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__/comment_4_9f67b14c9ac81f159439c5dff7354b8f._comment
new file mode 100644
index 000000000..8d15f5c57
--- /dev/null
+++ b/doc/bugs/git_annex_repair_fails_-___47__tmp__47__tmprepo.1__47__.git__47__gc.pid:_removeLink:_does_not_exist___40__No_such_file_or_directory__41__/comment_4_9f67b14c9ac81f159439c5dff7354b8f._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 4"
+ date="2014-10-12T18:27:39Z"
+ content="""
+So the auto gc was triggered by git fetch. I have made the repair code prevent that from happening. I expect that will solve the problem, so I am marking this bug as closed.
+
+However, I don't understand really what could have caused it to try to remove the gc.pid file. I tried creating such a pid file manually after the fetch, and it didn't try to remove it.
+"""]]
diff --git a/doc/bugs/git_annex_requested_key_is_not_present_on_random_files_even_though_they_exist___40__Direct_mode__41__.mdwn b/doc/bugs/git_annex_requested_key_is_not_present_on_random_files_even_though_they_exist___40__Direct_mode__41__.mdwn
new file mode 100644
index 000000000..2ac731909
--- /dev/null
+++ b/doc/bugs/git_annex_requested_key_is_not_present_on_random_files_even_though_they_exist___40__Direct_mode__41__.mdwn
@@ -0,0 +1,78 @@
+### Please describe the problem.
+
+I have a repo on a server running in direct mode. This repo is running Ubuntu 12.04 LTS. I run a windows laptop and the git-annex client to synchronise via SSH.
+
+### What steps will reproduce the problem?
+
+I set up the repo as normal on the server, clone it on the laptop, then when I issue the 'git annex get workspace' command to get the content for the workspace directory there are 10 random files with which I am getting the following error:
+
+get workspace/XXXXXXXX/Functional_Design/test3.docx (from origin...)
+[2014-07-23 11:28:42 GMT Daylight Time] read: rsync ["--progress","--inplace","-
+e","'ssh' '-T' 'adam@172.21.25.11' 'git-annex-shell ''sendkey'' ''/mnt/NAS1/repo
+s/XXXXXXXXXXXXXXXXX'' ''SHA256E-s31601--6f4995ef93be1f640a8b229f84abc69bd44daf63
+6afeae9c1bcf91a6287cd92b.docx'' --uuid 51dce2ea-39c6-4498-a99d-8e189c154eef ''--
+'' ''remoteuuid=c5ec0b9a-b79e-4f3b-8f28-0e869b150f9c'' ''direct=1'' ''associated
+file=workspace/XXXXXXXX/Functional_Design/test3.docx'' ''--'''","--","dummy:","/
+cygdrive/c/repos/XXXXXXXXXXXXXXXXX/.git/annex/tmp/SHA256E-s31601--6f4995ef93be1f
+640a8b229f84abc69bd44daf636afeae9c1bcf91a6287cd92b.docx"]
+ requested key is not present
+rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
+rsync error: error in rsync protocol data stream (code 12) at /home/lapo/package
+/rsync-3.0.9-1/src/rsync-3.0.9/io.c(605) [Receiver=3.0.9]
+
+ rsync failed -- run git annex again to resume file transfer
+
+ Unable to access these remotes: origin
+
+ Try making some of these repositories available:
+ 51dce2ea-39c6-4498-a99d-8e189c154eef -- root@vpndude:/mnt/NAS1/repos/XXXXXXXXXXXXXXXXXX [origin]
+failed
+
+I have checked the files and the keys and they all seem to match. There are hundreds of other files which do work fine.
+
+I deleted the laptop repo and cloned again and had another attempt but the same thing occured again.
+
+I have checked permissions on these files and they are identical to other files which are working.
+
+I have run git annex sync on the server and the laptop, this has no impact.
+
+I have run git annex fsck on both server and laptop and this has no impact.
+
+I'm clueless as to why this is happening.
+
+### What version of git-annex are you using? On what operating system?
+
+Ubuntu 12.04 LTS:
+git-annex version: 5.20140716-g8c14ba8
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+
+Windows 7:
+git-annex version: 5.20140717-g3de6e4b
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feed
+s Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SH
+A256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar ho
+ok external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 2 3 4
+
+### Please provide any additional information below.
+
+
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> [[done]]; does not appear to be a git-annex bug. --[[Joey]]
diff --git a/doc/bugs/git_annex_requested_key_is_not_present_on_random_files_even_though_they_exist___40__Direct_mode__41__/comment_1_410a591983ebb593e8ca978ceddf6a2c._comment b/doc/bugs/git_annex_requested_key_is_not_present_on_random_files_even_though_they_exist___40__Direct_mode__41__/comment_1_410a591983ebb593e8ca978ceddf6a2c._comment
new file mode 100644
index 000000000..8629e0556
--- /dev/null
+++ b/doc/bugs/git_annex_requested_key_is_not_present_on_random_files_even_though_they_exist___40__Direct_mode__41__/comment_1_410a591983ebb593e8ca978ceddf6a2c._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkt8DjG40gowj_ETchFLDS_Z216tr7p1xw"
+ nickname="Adam"
+ subject="ok some progress"
+ date="2014-07-23T14:27:51Z"
+ content="""
+I tried to do the same from another local repository on the server and it worked fine.
+
+I created a Linux VM and that also struggled, but this time with 57 errors.
+
+It turns out that the way my files were being stored on the server was causing it. I had the files stored on a local NAS which was mounted via iSCSI. I moved the repository from the NAS to local storage and then did another clone and it is now working from the Linux VM and the Windows client via SSH. When using git annex get on the Linux VM it is much faster than the native Git bash which takes ages.
+"""]]
diff --git a/doc/bugs/git_annex_requested_key_is_not_present_on_random_files_even_though_they_exist___40__Direct_mode__41__/comment_2_c4c0dcc0074ff89866fb261c2d30148f._comment b/doc/bugs/git_annex_requested_key_is_not_present_on_random_files_even_though_they_exist___40__Direct_mode__41__/comment_2_c4c0dcc0074ff89866fb261c2d30148f._comment
new file mode 100644
index 000000000..3362fbab1
--- /dev/null
+++ b/doc/bugs/git_annex_requested_key_is_not_present_on_random_files_even_though_they_exist___40__Direct_mode__41__/comment_2_c4c0dcc0074ff89866fb261c2d30148f._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="24.159.78.125"
+ subject="comment 2"
+ date="2014-07-23T15:05:36Z"
+ content="""
+This looks very much like rsync on the server crashed, possibly because of an error reading the file.
+
+Accessing a git-annex repository over a network filesystem is almost never the best choice. Network filesystems are flakey at worst, and at best have locking problems and other limiations.
+
+
+"""]]
diff --git a/doc/bugs/git_annex_requested_key_is_not_present_on_random_files_even_though_they_exist___40__Direct_mode__41__/comment_3_c377b56d20b291877be3c7bce5e7bd0c._comment b/doc/bugs/git_annex_requested_key_is_not_present_on_random_files_even_though_they_exist___40__Direct_mode__41__/comment_3_c377b56d20b291877be3c7bce5e7bd0c._comment
new file mode 100644
index 000000000..6004fba5c
--- /dev/null
+++ b/doc/bugs/git_annex_requested_key_is_not_present_on_random_files_even_though_they_exist___40__Direct_mode__41__/comment_3_c377b56d20b291877be3c7bce5e7bd0c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="24.159.78.125"
+ subject="comment 3"
+ date="2014-07-23T15:14:21Z"
+ content="""
+Actually no, rsync was never run on the server. git-annex-shell looked to see if the file was present, and did not see the file.
+"""]]
diff --git a/doc/bugs/git_annex_should_use___39__git_add_-f__39___internally.mdwn b/doc/bugs/git_annex_should_use___39__git_add_-f__39___internally.mdwn
deleted file mode 100644
index a92f5871b..000000000
--- a/doc/bugs/git_annex_should_use___39__git_add_-f__39___internally.mdwn
+++ /dev/null
@@ -1,11 +0,0 @@
-I have this line in the .gitignore file of one of my repos:
-*log
-
-So the command 'git annex init name' fails to add the file ".git-annex/uuid.log", and the same problem happens when git-annex-add'ing files.
-
-> This is avoided on the v3 branch, which does not store these files in the
-> same branch as your repository.
-
-Also, when a file is git-ignored, it should be possible to 'git annex add' it with a -f/--force option, the same way git does it.
-
-> Reasonable, [[done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_should_use___39__git_add_-f__39___internally/comment_1_7683bf02cf9e97830fb4690314501568._comment b/doc/bugs/git_annex_should_use___39__git_add_-f__39___internally/comment_1_7683bf02cf9e97830fb4690314501568._comment
deleted file mode 100644
index c556fbd77..000000000
--- a/doc/bugs/git_annex_should_use___39__git_add_-f__39___internally/comment_1_7683bf02cf9e97830fb4690314501568._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnpdM9F8VbtQ_H5PaPMpGSxPe_d5L1eJ6w"
- nickname="Rafaël"
- subject="comment 1"
- date="2011-07-03T11:56:45Z"
- content="""
-And what about emitting a warning, as git does, that some files were not annex-added (when not using --force)?
-"""]]
diff --git a/doc/bugs/git_annex_still_deleting_content_when_merging.mdwn b/doc/bugs/git_annex_still_deleting_content_when_merging.mdwn
new file mode 100644
index 000000000..dddef7b36
--- /dev/null
+++ b/doc/bugs/git_annex_still_deleting_content_when_merging.mdwn
@@ -0,0 +1,88 @@
+**Premise:**
+
+I've had this problem before 5.20140709-gc75193e and when the [ugly bug](http://git-annex.branchable.com/devblog/day_193-194__ugly_bug/) was discovered and fixed, I updated and thought it was gone.
+Yet, I'm still experiencing a content removal bug, so it might be something different altogether.
+I should also add that I don't know much about git log history and git-annex inner workings. I might need some help with finding the necessary information for debugging.
+
+**Bug description:**
+
+Two local computers, running Ubuntu-14.04 and Fedora-20 respectively, are paired through the assistant and functional with git annex 5.20140709. In direct mode. Most of the time, everything seems to work fine. Sometimes, *Computer A* will modify one file in its repository while *B* is offline. When *B* comes back online both repositories will lose their copy of the modified file (I'm not sure whether this also happens when they're both online when the change happens; it doesn't look like it anyway). The rest of the data in the repository is intact. This does not happen every time and I haven't been able to reproduce it consistently. Since 5.20140709 came out, it happened 2 or 3 times.
+
+Looking at 'git log --stat' in *B*:
+
+ commit d9eb9e94a39
+ Author: COMPUTER B
+ Date: Thu Jul 17 18:17:16 2014 +0200
+ shared.skg | 1 -
+ 1 file changed, 1 deletion(-)
+
+ commit 6fa27f08492
+ Author: COMPUTER A
+ Date: Thu Jul 17 18:17:14 2014 +0200
+ shared.skg | 1 +
+ 1 file changed, 1 insertion(+)
+
+ commit d25cc793739
+ Author: COMPUTER A
+ Date: Thu Jul 17 18:17:12 2014 +0200
+ shared.skg | 1 -
+ 1 file changed, 1 deletion(-)
+
+A change is apparently deleting and rewriting the whole file (maybe that's normal because it's a binary (encrypted) file?). The third most recent deletion is probably the one that shouldn't happen.
+
+Reverting "d9eb9e94a39" will only recover a placeholder, not really the original file. I can get the content back by going through *git annex unused* with *git log -S'key'*, then going to indirect mode, and then using *addunused*. This can only be done in the repository that changed the file in the first place (repo A), as the other repository only has the older version of the file in its unused list. This probably means that the change did not propagate before the file was deleted.
+
+**daemon.log transcript**
+
+[[!format sh """
+
+[2014-07-17 18:13:17 CEST] main: starting assistant version 5.20140709-gc75193e
+[2014-07-17 18:13:17 CEST] Cronner: You should enable consistency checking to protect your data.
+[2014-07-17 18:13:55 CEST] TransferScanner: Syncing with asus.local_sincro
+(scanning...) [2014-07-17 18:13:55 CEST] Watcher: Performing startup scan
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: cannot open shared object file: No such file or directory
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: cannot open shared object file: No such file or directory
+(started...) p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so: cannot open shared object file: No such file or directory
+p11-kit: couldn't load module: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: /usr/lib/x86_64-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: cannot open shared object file: No such file or directory
+gpg: Signature made gio 17 lug 2014 18:02:09 CEST using DSA key ID 89C809CB
+gpg: /tmp/git-annex-gpg.tmp.0/trustdb.gpg: trustdb created
+gpg: Good signature from "git-annex distribution signing key (for Joey Hess) <id@joeyh.name>"
+gpg: WARNING: This key is not certified with a trusted signature!
+gpg: There is no indication that the signature belongs to the owner.
+Primary key fingerprint: 4005 5C6A FD2D 526B 2961 E78F 5EE1 DBA7 89C8 09CB
+[2014-07-17 18:13:58 CEST] Upgrader: An upgrade of git-annex is available. (version 5.20140716)
+Everything up-to-date
+git-annex-shell: key is already present in annex
+rsync: connection unexpectedly closed (0 bytes received so far) [sender]
+rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.0]
+
+########## SYNCING STARTS HERE ###########
+
+[2014-07-17 18:17:12 CEST] RemoteControl: Syncing with asus.local_sincro
+From ssh://git-annex-asus.local-USER-A_22_sincro/~/sincro
+ 51815ea..d25cc79 annex/direct/master -> asus.local_sincro/annex/direct/master
+ 0391880..49efa5f git-annex -> asus.local_sincro/git-annex
+ 51815ea..d25cc79 master -> asus.local_sincro/master
+ 51815ea..d25cc79 synced/master -> asus.local_sincro/synced/master
+[2014-07-17 18:17:15 CEST] RemoteControl: Syncing with asus.local_sincro
+Automatic merge went well; stopped before committing as requested
+Removing shared.skg
+From ssh://git-annex-asus.local-USER-A_22_sincro/~/sincro
+ d25cc79..6fa27f0 annex/direct/master -> asus.local_sincro/annex/direct/master
+ d25cc79..6fa27f0 master -> asus.local_sincro/master
+ d25cc79..6fa27f0 synced/master -> asus.local_sincro/synced/master
+[2014-07-17 18:17:16 CEST] Committer: Committing changes to git
+[2014-07-17 18:17:16 CEST] Pusher: Syncing with asus.local_sincro
+To ssh://USER-A@git-annex-asus.local-USER-A_22_sincro/~/sincro/
+ 0391880..8d1c927 git-annex -> synced/git-annex
+ 6fa27f0..d9eb9e9 annex/direct/master -> synced/master
+[2014-07-17 18:17:17 CEST] RemoteControl: Syncing with asus.local_sincro
+From ssh://git-annex-asus.local-USER-A_22_sincro/~/sincro
+ 49efa5f..e328661 git-annex -> asus.local_sincro/git-annex
+[2014-07-17 18:17:20 CEST] RemoteControl: Syncing with asus.local_sincro
+From ssh://git-annex-asus.local-USER-A_22_sincro/~/sincro
+ 6fa27f0..d9eb9e9 annex/direct/master -> asus.local_sincro/annex/direct/master
+ e328661..32e44ce git-annex -> asus.local_sincro/git-annex
+
+# End of transcript or log.
+"""]]
diff --git a/doc/bugs/git_annex_still_deleting_content_when_merging/comment_1_cb51e25c5e1656dcbb73b3ff680341f0._comment b/doc/bugs/git_annex_still_deleting_content_when_merging/comment_1_cb51e25c5e1656dcbb73b3ff680341f0._comment
new file mode 100644
index 000000000..76db9bcc5
--- /dev/null
+++ b/doc/bugs/git_annex_still_deleting_content_when_merging/comment_1_cb51e25c5e1656dcbb73b3ff680341f0._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-07-21T17:37:22Z"
+ content="""
+Well, this is definitely a different bug or issue than the \"ugly bug\". In particular, it only affects a single file. Also, based on the commits, this may not be occuring in a merge commit at all (although I am not sure; I am not familiar with the log syntax shown).
+
+AFAICS, the problem occurs on machine B. Which machine is the transcript from?
+
+The \"Removing shared.skg\" is a good clue. This seems to be printed by `git`, in merge-recursive.c's `process_entry`. What is puzzling to me is that it's printed after the \"Automatic merge went well; stopped before committing as requested\", which AFAICS is printed out by git last thing. Is this \"Removing\" message then printed out by another git command?
+
+Enabling debug logging would probably help a lot, to narrow that down the next time this occurs.
+"""]]
diff --git a/doc/bugs/git_annex_still_deleting_content_when_merging/comment_2_bbbcce7fc5f34d733126c42be8ec0a1d._comment b/doc/bugs/git_annex_still_deleting_content_when_merging/comment_2_bbbcce7fc5f34d733126c42be8ec0a1d._comment
new file mode 100644
index 000000000..b8748318e
--- /dev/null
+++ b/doc/bugs/git_annex_still_deleting_content_when_merging/comment_2_bbbcce7fc5f34d733126c42be8ec0a1d._comment
@@ -0,0 +1,27 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmMLeU-zCzx2mc5pL2XT8a1UNkQwHAHjg8"
+ nickname="daniele"
+ subject="comment 2"
+ date="2014-07-22T01:47:29Z"
+ content="""
+> I am not familiar with the log syntax shown
+
+You mean the \"git log --stat\" part? Which git command would yield the most helpful syntax in this case?
+
+> AFAICS, the problem occurs on machine B. Which machine is the transcript from?
+
+Sorry I forgot to mention it: yes, it's from machine B.
+
+> Is this \"Removing\" message then printed out by another git command?
+
+Sorry I have no clue here. I didn't issue any git command from the terminal (nor did the user on computer A) if that was part of the question. It was all done in automatic.
+
+> Enabling debug logging would probably help a lot, to narrow that down the next time this occurs.
+
+Will do. I'll set 'annex.debug' to true in .git/config. Sadly, computer A is (a laptop) on vacation at the moment (well outside the local network), so I'll have to wait a couple of weeks to get back to debugging this. I'll have the logs with debug enabled when it happens again.
+
+Thanks again for your support and for developing git-annex.
+
+
+
+"""]]
diff --git a/doc/bugs/git_annex_still_deleting_content_when_merging/comment_3_f31a73e0e2c43f6a7f158455eadaa56c._comment b/doc/bugs/git_annex_still_deleting_content_when_merging/comment_3_f31a73e0e2c43f6a7f158455eadaa56c._comment
new file mode 100644
index 000000000..04621df63
--- /dev/null
+++ b/doc/bugs/git_annex_still_deleting_content_when_merging/comment_3_f31a73e0e2c43f6a7f158455eadaa56c._comment
@@ -0,0 +1,27 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmMLeU-zCzx2mc5pL2XT8a1UNkQwHAHjg8"
+ nickname="daniele"
+ subject="comment 3"
+ date="2014-07-22T02:10:14Z"
+ content="""
+I was unsure as to what git-log command would best describe the problematic commits but in the meantime I did a:
+
+ git log --graph --decorate=full --full-diff
+
+These are the only three commits of that afternoon (the surrounding history is from completely different hours and very likely unrelated, so it wasn't posted)
+
+ * commit d9eb9e94a3973598a847a5bdab1b65e459c1588a
+ | Author: COMPUTER B
+ | Date: Thu Jul 17 18:17:16 2014 +0200
+ |
+ * commit 6fa27f0849227c490ac4d4d62ca86e4befe5121e
+ | Author: COMPUTER A
+ | Date: Thu Jul 17 18:17:14 2014 +0200
+ |
+ * commit d25cc793739573057e475c92c8d37ce4ecc7bc9b
+ | Author: COMPUTER A
+ | Date: Thu Jul 17 18:17:12 2014 +0200
+
+
+It's a straight line (fast forward?), I don't see any merging either. Is this normal? Shouldn't a change in Repo A bring a merge in Repo B (where everything stayed the same) when things are synchronized? I don't fully understand how annex syncs happen so don't mind this question if it's all normal.
+"""]]
diff --git a/doc/bugs/git_annex_sync_--content_may_copy_then_drop_a_file_to_a_remote.mdwn b/doc/bugs/git_annex_sync_--content_may_copy_then_drop_a_file_to_a_remote.mdwn
new file mode 100644
index 000000000..3ec60cacf
--- /dev/null
+++ b/doc/bugs/git_annex_sync_--content_may_copy_then_drop_a_file_to_a_remote.mdwn
@@ -0,0 +1,33 @@
+### Please describe the problem.
+
+When using `git annex sync --content` with two archive with different cost, git annex will upload my file to the first archive, then to the second one, then it will drop it from the first one.
+
+### What steps will reproduce the problem?
+
+I've set both remote to "trusted", both in the "archive" group, both with "standard" preferred content, the remote named "hubic2" as an annex-cost of 200.0, and the remote named "hubic3" as an annex-cost of 175.0
+
+### What version of git-annex are you using? On what operating system?
+I'm using git-annex 5.20141125 on Debian Sid (upgraded today on November 7 2014).
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+$ git annex list | head
+here
+|hubic2
+||hubic3
+|||
+X__ Avatars/archer.jpg
+$ git annex sync --content
+commit ok
+copy Avatars/archer.jpg copy Avatars/archer.jpg (to hubic3...)
+ok
+copy Avatars/archer.jpg copy Avatars/archer.jpg (to hubic2...)
+ok
+drop hubic3 Avatars/archer.jpg ok
+
+# End of transcript or log.
+"""]]
diff --git a/doc/bugs/git_annex_sync_--content_not_syncing_all_objects.mdwn b/doc/bugs/git_annex_sync_--content_not_syncing_all_objects.mdwn
index a9426724c..1056e96ff 100644
--- a/doc/bugs/git_annex_sync_--content_not_syncing_all_objects.mdwn
+++ b/doc/bugs/git_annex_sync_--content_not_syncing_all_objects.mdwn
@@ -29,3 +29,5 @@ Linux (Ubuntu 13.10)
# End of transcript or log.
"""]]
+
+[[!tag confirmed]]
diff --git a/doc/bugs/git_annex_sync_--content_not_syncing_all_objects/comment_6_4540c31acd63626fbad9bde487ec3005._comment b/doc/bugs/git_annex_sync_--content_not_syncing_all_objects/comment_6_4540c31acd63626fbad9bde487ec3005._comment
new file mode 100644
index 000000000..54bce5df8
--- /dev/null
+++ b/doc/bugs/git_annex_sync_--content_not_syncing_all_objects/comment_6_4540c31acd63626fbad9bde487ec3005._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="stp"
+ ip="91.34.113.105"
+ subject="Any update"
+ date="2014-10-01T12:46:34Z"
+ content="""
+Any update?
+"""]]
diff --git a/doc/bugs/git_annex_sync_can_commit_files_to_.git__47__objects_instead_of_.git__47__annex.mdwn b/doc/bugs/git_annex_sync_can_commit_files_to_.git__47__objects_instead_of_.git__47__annex.mdwn
new file mode 100644
index 000000000..76260cb5c
--- /dev/null
+++ b/doc/bugs/git_annex_sync_can_commit_files_to_.git__47__objects_instead_of_.git__47__annex.mdwn
@@ -0,0 +1,56 @@
+### Please describe the problem.
+
+If you `git annex edit FILE`, an already-committed file, then do `git annex sync`, FILE will be added to .git/objects, but can be cleaned up with `git prune`. An annoyance, but not a huge problem.
+
+> This is why you're recommended to use `git add` after you're done
+> changing unlocked files. This avoids the git commit staging the file
+> in the index, even though the pre-commit hook fixes that up. It does
+> indeed leave the file contents in .git/objects, although with no refs
+> pointing to it, `git prune` will delete it sooner or later. --[[Joey]]
+
+If, on the other hand, you do git annex add, then edit, then sync, it will actually be committed to the git repository. Fixing that is a lot less trivial than `git prune`.
+
+> This is indeed a problem..
+
+### What steps will reproduce the problem?
+
+ anthony@Watt:/tmp/test$ du -sh .git/objects/
+ 24K .git/objects/
+ anthony@Watt:/tmp/test$ dd if=/dev/urandom bs=$[1024*1024] count=100 of=100mb-3
+ 100+0 records in
+ 100+0 records out
+ 104857600 bytes (105 MB) copied, 6.08718 s, 17.2 MB/s
+ anthony@Watt:/tmp/test$ git annex add 100mb-3
+ add 100mb-3 ok
+ (Recording state in git...)
+ anthony@Watt:/tmp/test$ git annex edit 100mb-3
+ unlock 100mb-3 (copying...) ok
+ anthony@Watt:/tmp/test$ git annex sync
+ commit ok
+ anthony@Watt:/tmp/test [$?=130]$ git prune
+ anthony@Watt:/tmp/test$ du -sh .git/objects/
+ 101M .git/objects/
+ anthony@Watt:/tmp/test$ ls -l 100mb-3
+ -rw-r--r-- 1 anthony anthony 104857600 Jan 1 13:41 100mb-3
+
+
+### What version of git-annex are you using? On what operating system?
+
+5.20141125 on Debian testing/unstable
+
+> Analysis: This only happens when a file is added and then unlocked
+> without first being committed.
+>
+> In this situation, the file has a typechange between the index and
+> the working tree. However, by the time the pre-commit hook gets
+> run, git commit has already staged the unlocked file content into the
+> index. So, there is nolonger a typechange between the index and the work
+> tree. And, since the file is new, there is no typechange between the
+> index and last commit either. The latter is what the pre-commit hook
+> looks for.
+>
+> Conclusion: The pre-commit hook cannot possibly detect this situation.
+> Instead, it seems the only way to block the problem is to prevent
+> unlocking a file that does not have any git history.
+>
+> And I've [[done]] that now. --[[Joey]]
diff --git a/doc/bugs/git_annex_sync_can_commit_files_to_.git__47__objects_instead_of_.git__47__annex/comment_1_cf46f75c87a27cfc6883bcdb10fecf50._comment b/doc/bugs/git_annex_sync_can_commit_files_to_.git__47__objects_instead_of_.git__47__annex/comment_1_cf46f75c87a27cfc6883bcdb10fecf50._comment
new file mode 100644
index 000000000..cb71e7015
--- /dev/null
+++ b/doc/bugs/git_annex_sync_can_commit_files_to_.git__47__objects_instead_of_.git__47__annex/comment_1_cf46f75c87a27cfc6883bcdb10fecf50._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://openid.stackexchange.com/user/3ee5cf54-f022-4a71-8666-3c2b5ee231dd"
+ nickname="Anthony DeRobertis"
+ subject="comment 1"
+ date="2015-01-01T19:05:19Z"
+ content="""
+Wow, the `git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch 100mb-3' HEAD` that you'd expect to remove the file doesn't work—`git annex sync` merges it right back in from one of its internal branches (filtering `synced/master` too seems to work).
+
+I'd hate to think of the mess had I actually had remotes. Good thing this is a test repository!
+
+(It *almost* happened on a real one, but I control-C'd it before it committed, after wondering 'why is it taking forever...')
+"""]]
diff --git a/doc/bugs/git_annex_sync_in_direct_mode_does_not_honor_skip-worktree.mdwn b/doc/bugs/git_annex_sync_in_direct_mode_does_not_honor_skip-worktree.mdwn
index 4d60c96c8..fbe46ab2d 100644
--- a/doc/bugs/git_annex_sync_in_direct_mode_does_not_honor_skip-worktree.mdwn
+++ b/doc/bugs/git_annex_sync_in_direct_mode_does_not_honor_skip-worktree.mdwn
@@ -33,3 +33,5 @@ I'd like to use the skip-worktree scheme in order to be able to rm the symlink f
I did a little digging in the code, and it looks like the source of this is the stageDirect step done specifically by `git annex sync` in direct repos (which makes sense, since indirect repos work). It does `git ls-files --others --exclude-standard --stage`. This list includes files marked skip-worktree, which means skip-worktree files would be treated like normal, and deleted because it's no longer there. There is an additional `-t` argument that could be added to ls-files that would provide the tag field to indicate if a file was marked skip-worktree, and they could be filtered out of processing.
I wonder if this would have side effects, or if there are other places in the code where skip-worktree files would need to be handled, though. I'm particularly motivated to solve this, so let me know if it doesn't look like it would get looked at right away, and I'll have an excuse to get a Haskell dev environment setup again and shake the rust off.
+
+[[!tag confirmed]]
diff --git a/doc/bugs/git_annex_sync_in_direct_mode_does_not_honor_skip-worktree/comment_5_cb98789c50c58f01055183dbaf7b4eba._comment b/doc/bugs/git_annex_sync_in_direct_mode_does_not_honor_skip-worktree/comment_5_cb98789c50c58f01055183dbaf7b4eba._comment
new file mode 100644
index 000000000..d40d2d789
--- /dev/null
+++ b/doc/bugs/git_annex_sync_in_direct_mode_does_not_honor_skip-worktree/comment_5_cb98789c50c58f01055183dbaf7b4eba._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="EvanDeaubl"
+ ip="24.251.129.149"
+ subject="comment 5"
+ date="2014-04-09T03:28:24Z"
+ content="""
+I'm afraid I abandoned this patch. It worked, but was still fidgety for being able to ignore parts of the tree. I found another way to do what I wanted by loading an indirect repo into /data and taking advantage of a surprise side effect in how the /sdcard filesystem translated the symlinks from the ext4 filesystem.
+
+I can probably scare it up from my archives, but it hasn't been kept up to date. The good news is (as I recall) the patch was pretty small.
+
+"""]]
diff --git a/doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command.mdwn b/doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command.mdwn
new file mode 100644
index 000000000..e999b3330
--- /dev/null
+++ b/doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command.mdwn
@@ -0,0 +1,102 @@
+### Please describe the problem.
+git annex sync fails with "Unknown command 'i3'". i3 is the name of one annex.
+
+
+### What steps will reproduce the problem?
+
+git annex clone i3:PATH annex
+
+git annex sync
+
+### What version of git-annex are you using? On what operating system?
+git-annex version: 5.20140920-gb0c4300
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+
+on Linux Mint Qiana
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+ git annex sync
+(merging origin/git-annex origin/synced/git-annex into git-annex...)
+(Recording state in git...)
+commit ok
+pull origin
+git-annex: Unknown command 'i3'
+
+Did you mean one of these?
+ fix
+ edit
+ init
+ find
+ add
+ get
+ vicfg
+ log
+ map
+ drop
+ move
+ copy
+ lock
+ sync
+ import
+ uninit
+ dead
+ fsck
+ direct
+ help
+ test
+
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+failed
+push origin
+git-annex: Unknown command 'i3'
+
+Did you mean one of these?
+ fix
+ edit
+ init
+ find
+ add
+ get
+ vicfg
+ log
+ map
+ drop
+ move
+ copy
+ lock
+ sync
+ import
+ uninit
+ dead
+ fsck
+ direct
+ help
+ test
+
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+
+ Pushing to origin failed.
+
+ (non-fast-forward problems can be solved by setting receive.denyNonFastforwards to false in the remote's git config)
+failed
+git-annex: sync: 2 failed
+
+# End of transcript or log.
+"""]]
+
+> Chalking this one up as a local misconfiguration; I think it's ok for
+> git-annex to run the version of itself ~/.config/git-annex/program
+> points to. So, [[done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command/comment_1_dd9490e8c9488a78475ccee1ffef08f5._comment b/doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command/comment_1_dd9490e8c9488a78475ccee1ffef08f5._comment
new file mode 100644
index 000000000..8446926d8
--- /dev/null
+++ b/doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command/comment_1_dd9490e8c9488a78475ccee1ffef08f5._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-11-03T16:55:45Z"
+ content="""
+I cannot reproduce this. (I made the hostname i3 point to localhost to test
+it.)
+
+Please paste the output of `git annex sync --debug` and
+`git config --list`. If you have any executable hooks in .git/hooks, please
+check that they don't try to run "git annex i3" for some reason.
+"""]]
diff --git a/doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command/comment_2_4c0097f25c067c3146024ae39ccb10f1._comment b/doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command/comment_2_4c0097f25c067c3146024ae39ccb10f1._comment
new file mode 100644
index 000000000..a77e04212
--- /dev/null
+++ b/doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command/comment_2_4c0097f25c067c3146024ae39ccb10f1._comment
@@ -0,0 +1,135 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmp1ThsNNAbSn46ju-gwFELfStlhl8usJo"
+ nickname="donkeyicydragon"
+ subject="git annex sync --debug and git config --list output "
+ date="2014-11-04T11:28:05Z"
+ content="""
+Hi Joey,
+
+I haven't installed any hooks there myself. These are all hooks in .git/hooks:
+
+* applypatch-msg.sample
+* commit-msg.sample
+* post-update.sample
+* pre-applypatch.sample
+* pre-commit
+* pre-commit.sample
+* prepare-commit-msg.sample
+* pre-push.sample
+* pre-rebase.sample
+* update.sample
+
+[[!format sh \"\"\"
+$ git annex sync --debug
+[2014-11-04 12:13:31 CET] read: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"show-ref\",\"git-annex\"]
+[2014-11-04 12:13:31 CET] read: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+[2014-11-04 12:13:31 CET] read: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"log\",\"refs/heads/git-annex..989b2da3eedef22fffffa2d83d0f9d0012afaa7d\",\"-n1\",\"--pretty=%H\"]
+[2014-11-04 12:13:31 CET] read: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"log\",\"refs/heads/git-annex..5681753eabba653efd94b6e87b2d117e559889e1\",\"-n1\",\"--pretty=%H\"]
+[2014-11-04 12:13:31 CET] read: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"log\",\"refs/heads/git-annex..1632d8479f92ee30c9980c154669dfd5734bb8b0\",\"-n1\",\"--pretty=%H\"]
+[2014-11-04 12:13:31 CET] chat: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"cat-file\",\"--batch\"]
+commit [2014-11-04 12:13:31 CET] read: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"commit\",\"-a\",\"-m\",\"git-annex automatic sync\"]
+ok
+[2014-11-04 12:13:34 CET] read: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"symbolic-ref\",\"HEAD\"]
+[2014-11-04 12:13:34 CET] read: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"show-ref\",\"refs/heads/master\"]
+[2014-11-04 12:13:34 CET] call: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"show-ref\",\"--verify\",\"-q\",\"refs/heads/synced/master\"]
+[2014-11-04 12:13:34 CET] read: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"log\",\"refs/heads/master..refs/heads/synced/master\",\"-n1\",\"--pretty=%H\"]
+pull origin
+[2014-11-04 12:13:34 CET] call: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"fetch\",\"origin\"]
+git-annex: Unknown command 'i3'
+
+Did you mean one of these?
+ fix
+ edit
+ init
+ find
+ add
+ get
+ vicfg
+ log
+ map
+ drop
+ move
+ copy
+ lock
+ sync
+ import
+ uninit
+ dead
+ fsck
+ direct
+ help
+ test
+
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+failed
+[2014-11-04 12:13:34 CET] read: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"show-ref\",\"git-annex\"]
+[2014-11-04 12:13:34 CET] read: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+[2014-11-04 12:13:34 CET] read: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"log\",\"refs/heads/git-annex..989b2da3eedef22fffffa2d83d0f9d0012afaa7d\",\"-n1\",\"--pretty=%H\"]
+[2014-11-04 12:13:34 CET] read: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"log\",\"refs/heads/git-annex..5681753eabba653efd94b6e87b2d117e559889e1\",\"-n1\",\"--pretty=%H\"]
+[2014-11-04 12:13:34 CET] read: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"log\",\"refs/heads/git-annex..1632d8479f92ee30c9980c154669dfd5734bb8b0\",\"-n1\",\"--pretty=%H\"]
+[2014-11-04 12:13:34 CET] call: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"branch\",\"-f\",\"synced/master\"]
+[2014-11-04 12:13:34 CET] call: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"show-ref\",\"--verify\",\"-q\",\"refs/remotes/origin/synced/master\"]
+[2014-11-04 12:13:34 CET] read: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"log\",\"refs/remotes/origin/synced/master..refs/heads/synced/master\",\"-n1\",\"--pretty=%H\"]
+push origin
+[2014-11-04 12:13:34 CET] call: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"push\",\"origin\",\"+git-annex:synced/git-annex\",\"master:synced/master\"]
+git-annex: Unknown command 'i3'
+
+Did you mean one of these?
+ fix
+ edit
+ init
+ find
+ add
+ get
+ vicfg
+ log
+ map
+ drop
+ move
+ copy
+ lock
+ sync
+ import
+ uninit
+ dead
+ fsck
+ direct
+ help
+ test
+
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+[2014-11-04 12:13:34 CET] read: git [\"--git-dir=/home/marek/annex/.git\",\"--work-tree=/home/marek/annex\",\"push\",\"origin\",\"master\"]
+
+ Pushing to origin failed.
+
+ (non-fast-forward problems can be solved by setting receive.denyNonFastforwards to false in the remote's git config)
+failed
+git-annex: sync: 2 failed
+\"\"\"]]
+### git config --list ###
+[[!format sh \"\"\"
+user.name=Marek
+user.email=marek@xxxx
+push.default=simple
+core.repositoryformatversion=0
+core.filemode=true
+core.bare=false
+core.logallrefupdates=true
+remote.origin.url=i3:/bluepool/data/
+remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
+remote.origin.annex-uuid=90405788-bc2c-466f-96a7-c498ad9cc525
+branch.master.remote=origin
+branch.master.merge=refs/heads/master
+annex.uuid=6c5fe2d0-f6f3-4c4a-ad2d-ed140c111bb6
+annex.version=5
+\"\"\"]]
+
+
+
+"""]]
diff --git a/doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command/comment_3_c7f9b400336b29587b26a161041e7980._comment b/doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command/comment_3_c7f9b400336b29587b26a161041e7980._comment
new file mode 100644
index 000000000..a42390df6
--- /dev/null
+++ b/doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command/comment_3_c7f9b400336b29587b26a161041e7980._comment
@@ -0,0 +1,34 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2014-11-04T21:21:16Z"
+ content="""
+From the debug output, it's apparently `git fetch origin` (and also the `git
+push origin`) that is, somehow, resuting in the error message.
+
+But, I'll bet it doesn't happen if you run `git fetch origin` by hand, does
+it?
+
+My best guess is that this is somehow related to the ssh connection
+caching code. To make ssh connection caching work, git-annex sets
+`GIT_SSH=git-annex`. This would result in `git fetch` running `git annex i3`
+as we see here, but with some environment variables set that would make
+git-annex know that it's supposed to be handling a ssh caching scenario.
+
+Perhaps you have a really old version of git-annex, that doesn't know about
+that ssh caching environment, installed someplace, in addition to the more
+recent version that's in you path. If the old version somehow gets run by
+git, it would explain this behavior.
+
+To check this theory, first try disabling ssh caching temporarily, and see if
+that avoids the problem:
+
+ git config annex.sshcaching false
+ git annex sync
+ git config annex.sshcaching true
+
+If that did avoid the problem, take a look at
+`~/.config/git-annex/program`. It probably points to the location of an old
+version of git-annex. Likely one installed from the standalone tarball.
+Removing that file would then solve your problem.
+"""]]
diff --git a/doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command/comment_4_b5e3c925fcfa7d8a48d24eb677c6c2a0._comment b/doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command/comment_4_b5e3c925fcfa7d8a48d24eb677c6c2a0._comment
new file mode 100644
index 000000000..9c3f0e388
--- /dev/null
+++ b/doc/bugs/git_annex_sync_thinks_remote__39__s_name_is_a_command/comment_4_b5e3c925fcfa7d8a48d24eb677c6c2a0._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmp1ThsNNAbSn46ju-gwFELfStlhl8usJo"
+ nickname="donkeyicydragon"
+ subject="This fixed it for me"
+ date="2014-11-04T23:41:58Z"
+ content="""
+Thank you very much for the quick response.
+"""]]
diff --git a/doc/bugs/git_annex_uninit_loses_content_when_interrupted.mdwn b/doc/bugs/git_annex_uninit_loses_content_when_interrupted.mdwn
deleted file mode 100644
index e7698883f..000000000
--- a/doc/bugs/git_annex_uninit_loses_content_when_interrupted.mdwn
+++ /dev/null
@@ -1,33 +0,0 @@
-### Please describe the problem.
-
-When git annex uninit is interrupted, git status shows
-
-# On branch master
-# Changes to be committed:
-# (use "git reset HEAD <file>..." to unstage)
-
-deleted: file1
-
-file1 is the file that was being processed at the time of the interrupt.
-
-### What steps will reproduce the problem?
-
-git annex uninit
-
-Ctrl-C
-
-### What version of git-annex are you using? On what operating system?
-
-4.20130709
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> [[done]]; see my comment --[[Joey]]
diff --git a/doc/bugs/git_annex_uninit_loses_content_when_interrupted/comment_1_fd9d2abbc90fb4f470b2212bc1f4a2dd._comment b/doc/bugs/git_annex_uninit_loses_content_when_interrupted/comment_1_fd9d2abbc90fb4f470b2212bc1f4a2dd._comment
deleted file mode 100644
index f9865ca69..000000000
--- a/doc/bugs/git_annex_uninit_loses_content_when_interrupted/comment_1_fd9d2abbc90fb4f470b2212bc1f4a2dd._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.90"
- subject="comment 1"
- date="2013-07-16T18:29:37Z"
- content="""
-All you have to do to get file1 back is check its symlink back out of git's history. `git checkout file1` should suffice to recover. \"Loses content\" is way overstating the severity of this bug.
-"""]]
diff --git a/doc/bugs/git_annex_uninit_loses_content_when_interrupted/comment_2_0e99f6ef4f8b342ef0ebc64dbf8e2ce6._comment b/doc/bugs/git_annex_uninit_loses_content_when_interrupted/comment_2_0e99f6ef4f8b342ef0ebc64dbf8e2ce6._comment
deleted file mode 100644
index 2b6fc4186..000000000
--- a/doc/bugs/git_annex_uninit_loses_content_when_interrupted/comment_2_0e99f6ef4f8b342ef0ebc64dbf8e2ce6._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.90"
- subject="comment 2"
- date="2013-07-16T19:08:49Z"
- content="""
-However, if you then run `git annex uninit` a second time, it goes ahead and deletes the content! That is a bug.
-
-I looked into trying to make uninit always replace the symlink atomically with the file content. It can't be done when using --fast, since it's not possible to atomically replace a symlink with a hard link (AFAIK). It should be possible to do it in the normal mode, but it would require manually constructing a commit, since git does not provide a way to delete a file from the index and commit that staged change without also committing any other changes that are staged -- and uninit should preseve any changes to non-annexed files that the user has staged. So, I don't think atomic operation is the right answer.
-
-Instead, I have made uninit refuse to delete .git/annex/objects unless it's empty, and if objects are still left in there, for whatever reason, it'll fail at the end with a nice message explaining some options. I think this is the right fix because it also avoids uninit removing historical versions of files that were stored in git-annex.g
-"""]]
diff --git a/doc/bugs/git_annex_uninit_removes_files_not_previously_added_to_annex.mdwn b/doc/bugs/git_annex_uninit_removes_files_not_previously_added_to_annex.mdwn
deleted file mode 100644
index 71fd408e2..000000000
--- a/doc/bugs/git_annex_uninit_removes_files_not_previously_added_to_annex.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-### Please describe the problem.
-
-Suppose there are files not added/committed to git annex.
-Once git annex uninit is complete, these files are deleted.
-
-### What steps will reproduce the problem?
-
-cp big-file annex-dir;
-cd annex-dir;
-git annex uninit
-
-...
-big-file is gone
-
-### What version of git-annex are you using? On what operating system?
-
-4.20130709
-Linux Ubuntu 13.04
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-[[!tag moreinfo]]
-
-> [[done]]; unreproducible by anyone. --[[Joey]]
diff --git a/doc/bugs/git_annex_uninit_removes_files_not_previously_added_to_annex/comment_1_ce4e3b1bf0d53119d049cf7dd621c5c4._comment b/doc/bugs/git_annex_uninit_removes_files_not_previously_added_to_annex/comment_1_ce4e3b1bf0d53119d049cf7dd621c5c4._comment
deleted file mode 100644
index bf5f04a90..000000000
--- a/doc/bugs/git_annex_uninit_removes_files_not_previously_added_to_annex/comment_1_ce4e3b1bf0d53119d049cf7dd621c5c4._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.90"
- subject="comment 1"
- date="2013-07-16T18:21:18Z"
- content="""
-I can't reproduce that. uninit leaves alone files that are not checked into git. Indeed, it only ever does anything to files that are checked into git and are symlinks to git-annex content. So I don't see how it could possibly behave as described.
-
-Please provide a complete transcript of the problem you are seeing.
-"""]]
diff --git a/doc/bugs/git_annex_uninit_removes_files_not_previously_added_to_annex/comment_2_3aa125635609fce41ab0c98cefb81f98._comment b/doc/bugs/git_annex_uninit_removes_files_not_previously_added_to_annex/comment_2_3aa125635609fce41ab0c98cefb81f98._comment
deleted file mode 100644
index dec43f390..000000000
--- a/doc/bugs/git_annex_uninit_removes_files_not_previously_added_to_annex/comment_2_3aa125635609fce41ab0c98cefb81f98._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawln3ckqKx0x_xDZMYwa9Q1bn4I06oWjkog"
- nickname="Michael"
- subject="can't reproduce this anymore"
- date="2013-07-17T17:04:05Z"
- content="""
-This could have been a PEBKAC.
-
-"""]]
diff --git a/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems.mdwn b/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems.mdwn
deleted file mode 100644
index fb0bdb093..000000000
--- a/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems.mdwn
+++ /dev/null
@@ -1,15 +0,0 @@
-What steps will reproduce the problem?
-I don't know exactly when it started
-
-What is the expected output? What do you see instead?
-When I run git annex unused I get
-
- unused . (checking for unused data...) (checking master...) git-annex: Cannot decode byte '\xb4': Data.Text.Encoding.decodeUtf8: Invalid UTF-8 stream
-
-Most likely I have added some file with a strange encoding that git-annex can't decode. The problem is that the unused process aborts because of this.
-
-What version of git-annex are you using? On what operating system?
- 3.20120522, Debian testing
-
-> I've just fixed this bug in git, will be in the next release. --[[Joey]]
-> [[done]]
diff --git a/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_1_8ba4fdb9f2d3bd44db5e910526cb9124._comment b/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_1_8ba4fdb9f2d3bd44db5e910526cb9124._comment
deleted file mode 100644
index ddea8225e..000000000
--- a/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_1_8ba4fdb9f2d3bd44db5e910526cb9124._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.2.6"
- subject="comment 1"
- date="2012-06-20T14:30:27Z"
- content="""
-Try running `git annex unused --debug`; this will tell us the git command that's outputing the data it cannot process. Then you can try running that git command and see what the problem filename is.
-"""]]
diff --git a/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_2_2a4a2b3e287a0444a1c8e8d98768a206._comment b/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_2_2a4a2b3e287a0444a1c8e8d98768a206._comment
deleted file mode 100644
index 8afe3143c..000000000
--- a/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_2_2a4a2b3e287a0444a1c8e8d98768a206._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.2.6"
- subject="comment 2"
- date="2012-06-20T14:34:23Z"
- content="""
-Your `locale` setting may also be relevant. FWIW, I've tried to create a file with `\xb4` in its name and have not gotten git-annex unused to crash on it.
-"""]]
diff --git a/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_3_dacfdb8322045fc4ceefc9128bf7c505._comment b/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_3_dacfdb8322045fc4ceefc9128bf7c505._comment
deleted file mode 100644
index 8e2aa285a..000000000
--- a/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_3_dacfdb8322045fc4ceefc9128bf7c505._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnXgp-iIaBK5pnk22xqMVERQb97VyXaejs"
- nickname="Kristian"
- subject="comment 3"
- date="2012-06-20T14:37:09Z"
- content="""
-This is what happens when I add the debug parameter
-
-git annex unused --debug
-
-unused . (checking for unused data...) git [\"--git-dir=/home/kristian/AnnexMedia/.git\",\"--work-tree=/home/kristian/AnnexMedia\",\"ls-files\",\"--cached\",\"-z\",\"--\",\"/home/kristian/AnnexMedia\"]
-git [\"--git-dir=/home/kristian/AnnexMedia/.git\",\"--work-tree=/home/kristian/AnnexMedia\",\"show-ref\"]
-(checking master...) git [\"--git-dir=/home/kristian/AnnexMedia/.git\",\"--work-tree=/home/kristian/AnnexMedia\",\"ls-tree\",\"--full-tree\",\"-z\",\"-r\",\"--\",\"refs/heads/master\"]
-git [\"--git-dir=/home/kristian/AnnexMedia/.git\",\"--work-tree=/home/kristian/AnnexMedia\",\"cat-file\",\"--batch\"]
-git-annex: Cannot decode byte '\xb4': Data.Text.Encoding.decodeUtf8: Invalid UTF-8 stream
-
-"""]]
diff --git a/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_4_7889a3ff5ce80c6322448aa674df8525._comment b/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_4_7889a3ff5ce80c6322448aa674df8525._comment
deleted file mode 100644
index da97b12f7..000000000
--- a/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_4_7889a3ff5ce80c6322448aa674df8525._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.2.6"
- subject="comment 4"
- date="2012-06-20T14:49:09Z"
- content="""
-Ah, reproduced it; need to use the WORM backend and have the file present in another branch..
-
-
-"""]]
diff --git a/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_5_6d28c2537ce24eeb3496ca349823defd._comment b/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_5_6d28c2537ce24eeb3496ca349823defd._comment
deleted file mode 100644
index fafd1d248..000000000
--- a/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_5_6d28c2537ce24eeb3496ca349823defd._comment
+++ /dev/null
@@ -1,19 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnXgp-iIaBK5pnk22xqMVERQb97VyXaejs"
- nickname="Kristian"
- subject="comment 5"
- date="2012-06-20T14:55:33Z"
- content="""
-I checkout out the git annex branch and using
-
- find * | grep -P \"[\xb4]\"
-
-I found a file
-
- 43e/b16/WORM-s4118528-m1245167306--Jerry Lee Lewis - Whole Lotta Shakin\302\264 Going\302\264 On.mp3.log
-
-The corresponding file also existed in the master branch (as a link).
-
-I moved both these files to a folder outside my repository and synched my git-annex branch with by master server. I still get the same error. Is there any other place where information about this file is stored?
-
-"""]]
diff --git a/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_6_4bf14ecef622988e80976c0fb55c24b9._comment b/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_6_4bf14ecef622988e80976c0fb55c24b9._comment
deleted file mode 100644
index b35e31da6..000000000
--- a/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_6_4bf14ecef622988e80976c0fb55c24b9._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.2.6"
- subject="comment 6"
- date="2012-06-20T16:59:53Z"
- content="""
-git-annex was not crashing due to content in the git-annex branch, but due to a symlink in one of your regular git branches, probably master and origin/master.
-
-This bug is fixed in git master, if you need the fix before the next release.
-"""]]
diff --git a/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_7_d2e5382fe0f38fb9dd9ee69901c68151._comment b/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_7_d2e5382fe0f38fb9dd9ee69901c68151._comment
deleted file mode 100644
index 65a02fed9..000000000
--- a/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_7_d2e5382fe0f38fb9dd9ee69901c68151._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmL8pteP2jbYJUn1M3CbeLDvz2SWAA1wtg"
- nickname="Kristian"
- subject="comment 7"
- date="2012-06-20T20:49:06Z"
- content="""
-Thank you
-"""]]
diff --git a/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_8_b282757537cda863d3dc6d0bbfd6b656._comment b/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_8_b282757537cda863d3dc6d0bbfd6b656._comment
deleted file mode 100644
index ff1de6b2e..000000000
--- a/doc/bugs/git_annex_unused_aborts_due_to_filename_encoding_problems/comment_8_b282757537cda863d3dc6d0bbfd6b656._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnXgp-iIaBK5pnk22xqMVERQb97VyXaejs"
- nickname="Kristian"
- subject="comment 8"
- date="2012-06-21T07:08:22Z"
- content="""
-Confirmed. I built the newest version of git-annex and it solved the issue :)
-"""]]
diff --git a/doc/bugs/git_annex_unused_considers_remote_branches_which_makes_it_inconsistent.mdwn b/doc/bugs/git_annex_unused_considers_remote_branches_which_makes_it_inconsistent.mdwn
deleted file mode 100644
index 86151d116..000000000
--- a/doc/bugs/git_annex_unused_considers_remote_branches_which_makes_it_inconsistent.mdwn
+++ /dev/null
@@ -1,106 +0,0 @@
-The "git annex unused" command considers remote branches as well as local branches. This means that an
-object may be considered unused or not depending on what remotes are present and when they were last synced.
-
-I ran into this issue when experimenting with using repos on removable storage. I'll post more about
-what I was trying to do in the forum. I'm posting this in bugs as I believe the inconsistent behavior
-should probably be considered a bug.
-
-#What steps will reproduce the problem?
-
-Here is a sample session illustrating the problem. At the end, you can see that the object is
-not shown as unused, then the remote is removed and it is shown as unused, then the remote is added
-back and the file is once again not shown as unused.
-
- /tmp/git $ mkdir 1 2
- /tmp/git $ cd 1
- /tmp/git/1 $ git init
- Initialized empty Git repository in /tmp/git/1/.git/
- /tmp/git/1 $ git annex init 1
- init 1 ok
- (Recording state in git...)
- /tmp/git/1 $ git remote add 2 ../2
- /tmp/git/1 $ dd if=/dev/urandom of=file.bin count=100
- 100+0 records in
- 100+0 records out
- 51200 bytes (51 kB) copied, 0.0113172 s, 4.5 MB/s
- /tmp/git/1 $ git annex add file.bin
- add file.bin (checksum...) ok
- (Recording state in git...)
- /tmp/git/1 $ git commit -m 'added file'
- [master (root-commit) 3c1ad30] added file
- 1 files changed, 1 insertions(+), 0 deletions(-)
- create mode 120000 file.bin
- /tmp/git/1 $ cd ../2
- /tmp/git/2 $ git init
- Initialized empty Git repository in /tmp/git/2/.git/
- /tmp/git/2 $ git annex init 2
- init 2 ok
- (Recording state in git...)
- /tmp/git/2 $ git remote add 1 ../1
- /tmp/git/2 $ git fetch 1
- warning: no common commits
- remote: Counting objects: 13, done.
- remote: Compressing objects: 100% (9/9), done.
- remote: Total 13 (delta 0), reused 0 (delta 0)
- Unpacking objects: 100% (13/13), done.
- From ../1
- * [new branch] git-annex -> 1/git-annex
- * [new branch] master -> 1/master
- /tmp/git/2 $ git checkout -b master 1/master
- Branch master set up to track remote branch master from 1.
- Already on 'master'
- /tmp/git/2 $ cd ../1
- /tmp/git/1 $ git fetch 2
- remote: Counting objects: 5, done.
- remote: Compressing objects: 100% (3/3), done.
- remote: Total 5 (delta 0), reused 0 (delta 0)
- Unpacking objects: 100% (5/5), done.
- From ../2
- * [new branch] git-annex -> 2/git-annex
- * [new branch] master -> 2/master
- /tmp/git/1 $ git rm file.bin
- rm 'file.bin'
- /tmp/git/1 $ git commit -m 'rmed file'
- [master ab242b0] rmed file
- 1 files changed, 0 insertions(+), 1 deletions(-)
- delete mode 120000 file.bin
- /tmp/git/1 $ git annex unused
- unused . (checking for unused data...) (checking master...) (checking 2/master...) ok
- /tmp/git/1 $ git remote rm 2
- /tmp/git/1 $ git annex unused
- unused . (checking for unused data...) (checking master...)
- Some annexed data is no longer used by any files:
- NUMBER KEY
- 1 SHA256E-s51200--e400e5abea095ad4364d8f97c5fe1a3f8a6db670b2dfee951d7c9674afc9a21d.bin
- (To see where data was previously used, try: git log --stat -S'KEY')
-
- To remove unwanted data: git-annex dropunused NUMBER
-
- ok
- /tmp/git/1 $ git remote add 2 ../2
- /tmp/git/1 $ git fetch 2
- From ../2
- * [new branch] git-annex -> 2/git-annex
- * [new branch] master -> 2/master
- /tmp/git/1 $ git annex unused
- unused . (checking for unused data...) (checking master...) (checking 2/master...) ok
- /tmp/git/1 $
-
-
-#What is the expected output? What do you see instead?
-
-I expected that the object's unused status would not change based on which remotes this particular
-repo knows about. In other words, I expected the unused status to be based on the local branches
-and possibly information in the git-annex branch.
-
-#What version of git-annex are you using? On what operating system?
-
-Gentoo Linux, git annex version 3.20121211
-
-#Please provide any additional information below.
-
-The forum post describing what I was trying to accomplish is [[forum/Best way to manage files on removable media?]]
-
-> While it would be nice if git-annex unused could somehow know about
-> branches that exist on remotes that git doesn't have locally, this is
-> impossible. It does the best it can. [[done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_unused_considers_remote_branches_which_makes_it_inconsistent/comment_1_a636ffe55b11c46a0afcc0b9a3a88cd4._comment b/doc/bugs/git_annex_unused_considers_remote_branches_which_makes_it_inconsistent/comment_1_a636ffe55b11c46a0afcc0b9a3a88cd4._comment
deleted file mode 100644
index 97af66bc7..000000000
--- a/doc/bugs/git_annex_unused_considers_remote_branches_which_makes_it_inconsistent/comment_1_a636ffe55b11c46a0afcc0b9a3a88cd4._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.246.126"
- subject="comment 1"
- date="2012-12-23T19:51:52Z"
- content="""
-The goal is not to consider an object unused that some other remote is known to rely on. We try as hard as we can to avoid losing data, at the expense of possibly not dropping unused content as early as possible.
-
-Running `git annex sync` or similar to get current with the state of all remotes before dropping objects they might still rely on seems reasonable from this perspective.
-"""]]
diff --git a/doc/bugs/git_annex_unused_considers_remote_branches_which_makes_it_inconsistent/comment_2_5e1ad57420efd16ae09c9e5cad55b5f2._comment b/doc/bugs/git_annex_unused_considers_remote_branches_which_makes_it_inconsistent/comment_2_5e1ad57420efd16ae09c9e5cad55b5f2._comment
deleted file mode 100644
index ffc0359a8..000000000
--- a/doc/bugs/git_annex_unused_considers_remote_branches_which_makes_it_inconsistent/comment_2_5e1ad57420efd16ae09c9e5cad55b5f2._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="Steve"
- ip="92.104.175.136"
- subject="comment 2"
- date="2013-01-01T23:51:53Z"
- content="""
-I filed the bug because I thought the inconsistent behavior was bad. For example; If you move the data to a repo which doesn't know about the unsynced remote, it'll happily get dropped with dropunused as opposed to being considered in use in the current repo.
-
-There probably aren't too many people who want to have remotes set that are usually unreachable, and I can work around it now that I know it exists.
-
-If it is expected behavior, feel free to close the bug.
-
-"""]]
diff --git a/doc/bugs/git_annex_unused_fails_when_a_filename_contains_newline.mdwn b/doc/bugs/git_annex_unused_fails_when_a_filename_contains_newline.mdwn
new file mode 100644
index 000000000..5aeff37d0
--- /dev/null
+++ b/doc/bugs/git_annex_unused_fails_when_a_filename_contains_newline.mdwn
@@ -0,0 +1,69 @@
+### Please describe the problem.
+
+After annexing files with newline (`\n`) characters in their name, then running `git annex unused` on the same git annex repository fails, instead of working correctly. The error is "git-annex: unknown response from git cat-file ".
+This issue might happen with filenames with other special characters in the filename, too.
+
+### What steps will reproduce the problem?
+
+1. create git annex repository
+2. create a file with a newline in its name
+3. annex the file
+4. run `git annex unused`
+
+Expected result: success
+
+Actual results: error: "git-annex: unknown response from git cat-file ".
+
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex package version 5.20140412ubuntu1, architecture i386. System is xubuntu 14.04.
+
+[[!format sh """
+zolee@zolee-Latitude-E6440:/media/zolee/Stuff/dell-zoli-git-annex$ git annex version
+git-annex version: 5.20140412ubuntu1
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+"""]]
+
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+zolee@zolee-Latitude-E6440:/media/zolee/Stuff/dell-zoli-git-annex$ git annex unused
+unused . (checking for unused data...) [2014-07-13 16:42:04 EEST] read: git ["--git-dir=/media/zolee/Stuff/dell-zoli-git-annex/.git","--work-tree=/media/zolee/Stuff/dell-zoli-git-annex","ls-files","--cached","--others","-z","--","/media/zolee/Stuff/dell-zoli-git-annex"]
+[2014-07-13 16:42:31 EEST] read: git ["--git-dir=/media/zolee/Stuff/dell-zoli-git-annex/.git","--work-tree=/media/zolee/Stuff/dell-zoli-git-annex","symbolic-ref","HEAD"]
+[2014-07-13 16:42:31 EEST] read: git ["--git-dir=/media/zolee/Stuff/dell-zoli-git-annex/.git","--work-tree=/media/zolee/Stuff/dell-zoli-git-annex","show-ref","--hash","refs/heads/dell-zoli-master"]
+[2014-07-13 16:42:31 EEST] read: git ["--git-dir=/media/zolee/Stuff/dell-zoli-git-annex/.git","--work-tree=/media/zolee/Stuff/dell-zoli-git-annex","show-ref"]
+(checking dell-zoli-master...) [2014-07-13 16:42:31 EEST] read: git ["--git-dir=/media/zolee/Stuff/dell-zoli-git-annex/.git","--work-tree=/media/zolee/Stuff/dell-zoli-git-annex","show-ref","--head"]
+[2014-07-13 16:42:31 EEST] read: git ["--git-dir=/media/zolee/Stuff/dell-zoli-git-annex/.git","--work-tree=/media/zolee/Stuff/dell-zoli-git-annex","show-ref","--head"]
+[2014-07-13 16:42:31 EEST] read: git ["--git-dir=/media/zolee/Stuff/dell-zoli-git-annex/.git","--work-tree=/media/zolee/Stuff/dell-zoli-git-annex","diff-index","-z","--raw","--no-renames","-l0","refs/heads/dell-zoli-master"]
+(checking store-zoli/laptop-zoli-master...) [2014-07-13 16:42:32 EEST] read: git ["--git-dir=/media/zolee/Stuff/dell-zoli-git-annex/.git","--work-tree=/media/zolee/Stuff/dell-zoli-git-annex","show-ref","--head"]
+[2014-07-13 16:42:32 EEST] read: git ["--git-dir=/media/zolee/Stuff/dell-zoli-git-annex/.git","--work-tree=/media/zolee/Stuff/dell-zoli-git-annex","show-ref","--head"]
+[2014-07-13 16:42:32 EEST] read: git ["--git-dir=/media/zolee/Stuff/dell-zoli-git-annex/.git","--work-tree=/media/zolee/Stuff/dell-zoli-git-annex","diff-index","-z","--raw","--no-renames","-l0","refs/remotes/store-zoli/laptop-zoli-master"]
+[2014-07-13 16:42:33 EEST] chat: git ["--git-dir=/media/zolee/Stuff/dell-zoli-git-annex/.git","--work-tree=/media/zolee/Stuff/dell-zoli-git-annex","cat-file","--batch"]
+git-annex: unknown response from git cat-file ("Code Composer Studio missing","refs/remotes/store-zoli/laptop-zoli-master:egyetem/2009-2010-sem2/diploma/tex/titlu-lucrare.tex~")
+zolee@zolee-Latitude-E6440:/media/zolee/Stuff/dell-zoli-git-annex$
+
+
+zolee@zolee-Latitude-E6440:/media/zolee/Stuff/dell-zoli-git-annex/egyetem/2009-2010-sem2/media-processors$ ls
+51325409-1.pdf course2010 Noterestanta.pdf Proiecte_6xxx.pdf rg_rand.c TMS320C6000?Code Composer Studio? Tutorial?- spru301c.pdf
+ccs_workspace.tar.gz netrol Proc_Media project site
+zolee@zolee-Latitude-E6440:/media/zolee/Stuff/dell-zoli-git-annex/egyetem/2009-2010-sem2/media-processors$ ls -b
+51325409-1.pdf course2010 Noterestanta.pdf Proiecte_6xxx.pdf rg_rand.c \ \ \ TMS320C6000\nCode\ Composer\ Studio\n\ \ \ \ \ \ Tutorial\n-\ spru301c.pdf
+ccs_workspace.tar.gz netrol Proc_Media project site
+zolee@zolee-Latitude-E6440:/media/zolee/Stuff/dell-zoli-git-annex/egyetem/2009-2010-sem2/media-processors$
+
+# End of transcript or log.
+"""]]
+
+> dup of
+> [[git_annex_import_fails_on_filenames_with_newlines_in_them]]; closing as
+> such. [[done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_unused_seems_to_check_for_current_path.mdwn b/doc/bugs/git_annex_unused_seems_to_check_for_current_path.mdwn
deleted file mode 100644
index f2d301cd7..000000000
--- a/doc/bugs/git_annex_unused_seems_to_check_for_current_path.mdwn
+++ /dev/null
@@ -1,39 +0,0 @@
-When I run `git annex unused` from my repository's root it shows everything ok:
-
- ~/annex$ git annex unused
- unused (checking for unused data...) ok
-
-But... When I run it from a subdirectory, it shows a lot:
-
- ~/annex/Software$ git annex unused
- unused (checking for unused data...)
- Some annexed data is no longer pointed to by any files in the repository:
- NUMBER KEY
- 1 SHA1:########################################
- ...
- 921 SHA1:########################################
- (To see where data was previously used, try: git log --stat -S'KEY')
- (To remove unwanted data: git-annex dropunused NUMBER)
- ok
-
-Is this a bug or by design? By removing these "unused" files with `dropunused` I've just lost the only copy of 160 files.
-
-I am using git-annex version 836e71297b8e3b5bd6f89f7eb1198f59af985b0b
-
-> I'm very sorry you lost data.
->
-> But, git annex unused absolutely does not let the current directory
-> influence what it does. It always scans the entire repo from the top.
-> And I've tested it just now to make sure that in a subdirectory
-> it does the same thing as at the top.
->
-> There are only two ways this could happen that I can think of:
->
-> 1. If "Software" were a separate git repository than "~/annex".
-> 2. If gitignores or something made `git ls-files`
-> not list the files when ran in the subdir. This seems *possible*,
-> but I don't know how to construct such an ignore.
->
-> --[[Joey]]
-
->> Closing as there is no followup. [[done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_upgrade_output_is_inconsistent_and_spammy.mdwn b/doc/bugs/git_annex_upgrade_output_is_inconsistent_and_spammy.mdwn
deleted file mode 100644
index ec8a10915..000000000
--- a/doc/bugs/git_annex_upgrade_output_is_inconsistent_and_spammy.mdwn
+++ /dev/null
@@ -1,15 +0,0 @@
-Upgrading from v1 to v3:
-
- upgrade . (v1 to v2...) (moving content...) (updating symlinks...) (moving location logs...) (v2 to v3...) ..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
- git-annex branch created
- Be sure to push this branch when pushing to remotes.
- ok
-
-A whirly would be preferable, imo.
-
-> Erm, I'm pretty sure you were the one who asked for there to be some
-> progress dots, Richard.
->
-> I'm not particularly interested in implementing a whirley that would only
-> be used in this one place, in code that very few users are going to run
-> again. I could remove the dots.. [[done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_upgrade_output_is_inconsistent_and_spammy/comment_1_3a01c81efba321b0e46d1bc0426ad8d1._comment b/doc/bugs/git_annex_upgrade_output_is_inconsistent_and_spammy/comment_1_3a01c81efba321b0e46d1bc0426ad8d1._comment
deleted file mode 100644
index 4f9565517..000000000
--- a/doc/bugs/git_annex_upgrade_output_is_inconsistent_and_spammy/comment_1_3a01c81efba321b0e46d1bc0426ad8d1._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 1"
- date="2011-10-29T17:03:26Z"
- content="""
-I could dig it out, but I am sure I said dots are fine and a whirly better.
-
-Still, WONTFIX is fine.
-"""]]
diff --git a/doc/bugs/git_annex_version_should_without_being_in_a_repo_.mdwn b/doc/bugs/git_annex_version_should_without_being_in_a_repo_.mdwn
deleted file mode 100644
index 5c995852b..000000000
--- a/doc/bugs/git_annex_version_should_without_being_in_a_repo_.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-was checking the version of git-annex on a machine before cloning a repo...
-
- $ git annex version
- git-annex: Not in a git repository.
-
-> made difficult by the Annex monad, but I made it work! --[[Joey]]
-> [[done]]
diff --git a/doc/bugs/git_annex_version_should_without_being_in_a_repo_/comment_1_e7b26eeb1a765fd83280ef907c0deef2._comment b/doc/bugs/git_annex_version_should_without_being_in_a_repo_/comment_1_e7b26eeb1a765fd83280ef907c0deef2._comment
deleted file mode 100644
index ab30d8a45..000000000
--- a/doc/bugs/git_annex_version_should_without_being_in_a_repo_/comment_1_e7b26eeb1a765fd83280ef907c0deef2._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
- nickname="Justin"
- subject="comment 1"
- date="2011-11-16T03:24:30Z"
- content="""
-oh, and that probably goes for 'help' and other subcommands as well.
-"""]]
diff --git a/doc/bugs/git_annex_vicfg_fail_with_Buffer:_invalid_argument___40__invalid_character__41__.mdwn b/doc/bugs/git_annex_vicfg_fail_with_Buffer:_invalid_argument___40__invalid_character__41__.mdwn
new file mode 100644
index 000000000..b74528bda
--- /dev/null
+++ b/doc/bugs/git_annex_vicfg_fail_with_Buffer:_invalid_argument___40__invalid_character__41__.mdwn
@@ -0,0 +1,34 @@
+### Please describe the problem.
+On one repos, I cannot run vicfg because git annex complain that
+
+ git-annex: /home/moi/Bibliothèque calibre/.git/annex/config.tmp: commitBuffer: invalid argument (invalid character) failed
+ git-annex: vicfg: 1 failed
+
+Note that the assistant and the webapp seem to be working as it should, giving me the possibility to make most of the configuration I want.
+
+The problem does exit on all the clone of the repos.
+
+
+### What steps will reproduce the problem?
+
+I don't know if the "è" in the directory name is linked to this. It seem
+also that the description of one of the repository has been incorrect
+(something like "toubib: ~/Biblioth⯁⯁⯁que calibre/" where the three ⯁
+replace one incorrectly encoded char that was, since then, changed.
+
+
+### What version of git-annex are you using? On what operating system?
+I'm using the more uptodate version that are in Debian sid:
+
+ $ git --version
+ git version 2.1.4
+ $ git annex version
+ git-annex version: 5.20141125
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 0 1 2 4
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/git_annex_webapp_runs_on_wine.mdwn b/doc/bugs/git_annex_webapp_runs_on_wine.mdwn
deleted file mode 100644
index c430239eb..000000000
--- a/doc/bugs/git_annex_webapp_runs_on_wine.mdwn
+++ /dev/null
@@ -1,47 +0,0 @@
-### Please describe the problem.
-I just installed git-annex-20130601 on Gentoo and when running git annex webapp it started to run things on wine.
-
-### What steps will reproduce the problem?
-On Gentoo ~amd64:
-[[!format sh """
- ~$ layman -a haskell
- ~$ USE=webapp emerge -1 git-annex
- ~$ git annex webapp
-"""]]
-### What version of git-annex are you using? On what operating system?
-dev-vcs/git-annex-4.20130601 from https://github.com/gentoo-haskell/gentoo-haskell/tree/master/dev-vcs/git-annex
-
-On Gentoo ~amd64
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-~$ git annex webapp
-Launching web browser on file:///tmp/webapp14071.html
-libpng warning: Application built with libpng-1.6.2 but running with 1.5.13
-err:menubuilder:convert_to_native_icon error 0x80004005 initializing encoder
-libpng warning: Application built with libpng-1.6.2 but running with 1.5.13
-err:menubuilder:convert_to_native_icon error 0x80004005 initializing encoder
-libpng warning: Application built with libpng-1.6.2 but running with 1.5.13
-err:menubuilder:convert_to_native_icon error 0x80004005 initializing encoder
-...
-fixme:exec:SHELL_execute flags ignored: 0x00000100
-fixme:exec:SHELL_execute flags ignored: 0x00000100
-fixme:exec:SHELL_execute flags ignored: 0x00000100
-...
-
-22185 me 20 0 2580M 10196 8156 S 0.0 0.1 0:00.09 ├─ start /ProgIDOpen htmlfile /home/reinis/.wine/dosdevices/z:/tmp/webapp2554.html
- 2597 me 21 1 2596M 10984 8764 S 0.0 0.1 0:01.23 ├─ c:\windows\system32\explorer.exe /desktop
- 2589 me 20 0 2581M 2344 1932 S 0.0 0.0 0:00.00 ├─ c:\windows\system32\plugplay.exe
- 2581 me 20 0 2593M 8900 7500 S 0.0 0.1 0:00.09 ├─ c:\windows\system32\winedevice.exe MountMgr
- 2577 me 20 0 2583M 2776 2272 S 0.0 0.0 0:00.00 ├─ c:\windows\system32\services.exe
- 2571 me 20 0 24960 7532 772 S 46.1 0.1 2:29.06 ├─ /usr/bin/wineserver
-
-# End of transcript or log.
-"""]]
-
-> [[done]]; this is a misconfigured system, not a git-annex bug,
-> and git-annex honors git config web.browser to allow working around
-> this. --[[Joey]]
diff --git a/doc/bugs/git_annex_webapp_runs_on_wine/comment_1_c71dfa42780c0fc78f88ce054e5f3ee3._comment b/doc/bugs/git_annex_webapp_runs_on_wine/comment_1_c71dfa42780c0fc78f88ce054e5f3ee3._comment
deleted file mode 100644
index e94df5783..000000000
--- a/doc/bugs/git_annex_webapp_runs_on_wine/comment_1_c71dfa42780c0fc78f88ce054e5f3ee3._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-06-14T18:10:11Z"
- content="""
-I've had one other user report having this problem. It seems that wine installs some sort of .desktop file claiming it is the One True program to use to open urls. Since git-annex uses the `xdg-open` command, and in some desktop environments that command trusts these .desktop files to be accurate and not nonsensical. So it goes ahead and opens MSIE or whatever.
-
-Happily, git has a configuration setting that you can use to tell it exactly which web browser you want, bypassing all the xdg-open nonsense:
-
-git config web.browser w3m
-
-git-annex honors this configuration setting.
-
-You may also want to investigate the .desktop file that wine has installed on your system, and file appropriate bugs with either your distribution or wine package distributor to get that fixed. It seems that it would affect any program using xdg-open, not only git-annex.
-"""]]
diff --git a/doc/bugs/git_annex_webapp_runs_on_wine/comment_2_f28441b18b0be90c1e58348455ce09d9._comment b/doc/bugs/git_annex_webapp_runs_on_wine/comment_2_f28441b18b0be90c1e58348455ce09d9._comment
deleted file mode 100644
index 9853705b3..000000000
--- a/doc/bugs/git_annex_webapp_runs_on_wine/comment_2_f28441b18b0be90c1e58348455ce09d9._comment
+++ /dev/null
@@ -1,23 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm01ida6POv7vqyUYtOlymEbJTbrImAIzM"
- nickname="Reinis"
- subject="comment 2"
- date="2013-06-14T18:49:06Z"
- content="""
-Thanks! It looks like it is a xdg issue, I can reproduce it by running xdg-open manually.
-
-Faulty file is:
-[[!format sh \"\"\"
-~$ grep -ri htmlfile .local/share/applications/
-.local/share/applications/wine-extension-htm.desktop
-~$ rm .local/share/applications/wine-extension-*
-~$ locate .desktop | parallel grep -ri htmlfile {}
-\"\"\"]]
-
-Then it tried to open with /usr/bin/emacsclient! In Gnome setting Firefox is listed as default browser, but xdg-settings thinks that it is Epiphany, what a mess..
-
-Anyways, this fixes it:
-[[!format sh \"\"\"
-~$ xdg-settings set default-web-browser firefox.desktop
-\"\"\"]]
-"""]]
diff --git a/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive.mdwn b/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive.mdwn
deleted file mode 100644
index 6e1c00781..000000000
--- a/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive.mdwn
+++ /dev/null
@@ -1,60 +0,0 @@
-One of my remotes, on a USB drive, is behaving exceedingly strangely. Files sometimes refuse to copy to it - whether I copy to it from my home annex, or whether I "cd" to that USB drive and try to "get" files to it.
-
-Note that the external HD is a FAT32 filesystem. This has never caused problems in the past, but I am wondering if some of the recent work on "crippled" filesystems might have caused breakage on existing repositories which had been working well on FAT32 filesystems?
-
-What steps will reproduce the problem?
-
-On my annex, something like this:
-
-<pre>
-Talislanta Books$ git annex whereis talislanta_fantasy_roleplaying.pdf
-whereis talislanta_fantasy_roleplaying.pdf (2 copies)
- d16d0d1a-3cdd-11e2-9161-67c83599f720 -- homeworld
- fa2bd02e-3ce2-11e2-a675-47389975a32e -- here (macbook)
-ok
-Talislanta Books$ git annex copy --to=toshiba talislanta_fantasy_roleplaying.pdf
-copy talislanta_fantasy_roleplaying.pdf ok
-Talislanta Books$ git annex whereis talislanta_fantasy_roleplaying.pdf
-whereis talislanta_fantasy_roleplaying.pdf (2 copies)
- d16d0d1a-3cdd-11e2-9161-67c83599f720 -- homeworld
- fa2bd02e-3ce2-11e2-a675-47389975a32e -- here (macbook)
-ok
-Talislanta Books$ cd /Volumes/TOSHIBAEXT/annex/Books/archive/Talislanta\ Books/
-Talislanta Books$ git annex whereis talislanta_fantasy_roleplaying.pdf
-whereis talislanta_fantasy_roleplaying.pdf (2 copies)
- d16d0d1a-3cdd-11e2-9161-67c83599f720 -- homeworld
- fa2bd02e-3ce2-11e2-a675-47389975a32e -- macbook
-ok
-Talislanta Books$ git annex get talislanta_fantasy_roleplaying.pdf
-Talislanta Books$ git annex whereis talislanta_fantasy_roleplaying.pdf
-whereis talislanta_fantasy_roleplaying.pdf (2 copies)
- d16d0d1a-3cdd-11e2-9161-67c83599f720 -- homeworld
- fa2bd02e-3ce2-11e2-a675-47389975a32e -- macbook
-ok
-Talislanta Books$
-</pre>
-
-
-What is the expected output? What do you see instead?
-
-I should be able to copy files to my external hard drive, /Volumes/TOSHIBAEXT/annex
-
-
-What version of git-annex are you using? On what operating system?
-
-<pre>
-Talislanta Books$ git annex version
-git-annex version: 3.20130216
-local repository version: 3
-default repository version: 3
-supported repository versions: 3
-upgrade supported from repository versions: 0 1 2
-</pre>
-
-OS X 10.6 (lion)
-
-Please provide any additional information below.
-
-Most files are affected by this, a few are not. I don't see any pattern to which is which.
-
-> Both bugs reported here are now [[done]]. --[[Joey]]
diff --git a/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_1_7707017fbf3d92ee21d600fe0aefce4f._comment b/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_1_7707017fbf3d92ee21d600fe0aefce4f._comment
deleted file mode 100644
index 2f157417f..000000000
--- a/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_1_7707017fbf3d92ee21d600fe0aefce4f._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="99.54.57.201"
- subject="comment 1"
- date="2013-02-25T06:18:58Z"
- content="""
-Just tried downgrading to 3.20130207 and the behavior is the same. :(
-
-
-"""]]
diff --git a/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_2_f3392ec3ca7392823cbad2cc9b77f54e._comment b/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_2_f3392ec3ca7392823cbad2cc9b77f54e._comment
deleted file mode 100644
index 17379f354..000000000
--- a/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_2_f3392ec3ca7392823cbad2cc9b77f54e._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="99.54.57.201"
- subject="comment 2"
- date="2013-02-25T12:44:18Z"
- content="""
-Update: git annex fsck --fast --from=toshiba fixed this. Guess I was up too late to think about the obvious. Sorry bout that.
-
-"""]]
diff --git a/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_3_b3d016a487b12748fe2c4d14300eb158._comment b/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_3_b3d016a487b12748fe2c4d14300eb158._comment
deleted file mode 100644
index f891af92e..000000000
--- a/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_3_b3d016a487b12748fe2c4d14300eb158._comment
+++ /dev/null
@@ -1,20 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="99.54.57.201"
- subject="comment 3"
- date="2013-02-25T14:24:29Z"
- content="""
-This is still weird though.
-
-Setup: I have my home drive, an ssh remote, and a usb remote.
-
-Home drive is a \"client\" and the other two are \"backups.\" numcopies = 2.
-
-WHen I start the assistant and watch it in the webapp, it starts furiously copying content in \"archive\" subdirectories from the USB remote to the home drive, and then dropping it from the USB remote!
-
-I then kill the assistant because I do not want content dropped from my backup, that's why it's a backup.
-
-Is there any way to tell *why* the assistant is doing this crazy thing?
-
-
-"""]]
diff --git a/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_4_61f600511a3172f0707e5809fc444d0c._comment b/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_4_61f600511a3172f0707e5809fc444d0c._comment
deleted file mode 100644
index c8b6788f3..000000000
--- a/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_4_61f600511a3172f0707e5809fc444d0c._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="99.54.57.201"
- subject="comment 4"
- date="2013-02-25T14:57:20Z"
- content="""
-Yeah, the assistant wants to drop *everything* on my USB drive. When I vicfg I see that the usb drive repo is \"untrusted/backup/standard\". Why in the world would the assistant want to drop everything on it?
-
-"""]]
diff --git a/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_5_8cf029ac7bf3c19dcb0b613eed3b52ac._comment b/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_5_8cf029ac7bf3c19dcb0b613eed3b52ac._comment
deleted file mode 100644
index 2c133e8d0..000000000
--- a/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_5_8cf029ac7bf3c19dcb0b613eed3b52ac._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="99.54.57.201"
- subject="comment 5"
- date="2013-02-25T16:02:44Z"
- content="""
-Downgrading to 3.20130207 and testing.... this seems to have been a regression since 3.20130207. 3.20130207 seems right now to be behaving normally, not trying to drop things it shouldn't. Is it possible something went terribly wrong with preferred content settings since 3.20130207?
-
-Still testing, but things look good so far.
-"""]]
diff --git a/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_6_e40d88eba7d8aec1530ce1d32d1c85f2._comment b/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_6_e40d88eba7d8aec1530ce1d32d1c85f2._comment
deleted file mode 100644
index 830a1c631..000000000
--- a/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_6_e40d88eba7d8aec1530ce1d32d1c85f2._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.210"
- subject="comment 6"
- date="2013-02-26T17:20:13Z"
- content="""
-The recent switch to using the Glob library seems to be responsible for this problem. It seems that
-with Glob, \"\*\" matches \"foo\", but not \"directory/foo\", so the \"\*\" in preferred content for backup repositories matches only files in the top directory!
-
-Writing test cases and fixing this now.
-"""]]
diff --git a/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_7_b101fab9e690d1b335a1a29abab68d6c._comment b/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_7_b101fab9e690d1b335a1a29abab68d6c._comment
deleted file mode 100644
index 178b62fa7..000000000
--- a/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_7_b101fab9e690d1b335a1a29abab68d6c._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.210"
- subject="comment 7"
- date="2013-02-26T18:41:57Z"
- content="""
-Getting back to the original problem, it seemed to be that the remote already had the files, but the local location log was not aware of this. Perhaps because the remote got the files from somewhere else and `git annex sync` or similar had not been run to get that into into the local repo recently? Anyway, copying files to the remote was correctly detected to be unnecessary.
-
-Currently, when that happens, it does not update the local location log. That is a change made fairly recently, in 40df26757a61d4f057bcbf38cd5fe949d1c9be95, as a kind of optimisation -- I'd seen it updating the location log during mass copies when it didn't need to, which just bloats `.git`. Seems that optimisation went too far: It should avoid updating the location log when it was correct, but if the location log is wrong, it should optimistically update it.
-"""]]
diff --git a/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_8_b30d32086314a7e357f3dd6608828ee5._comment b/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_8_b30d32086314a7e357f3dd6608828ee5._comment
deleted file mode 100644
index 32a801224..000000000
--- a/doc/bugs/git_annex_won__39__t_copy_files_to_my_usb_drive/comment_8_b30d32086314a7e357f3dd6608828ee5._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="173.162.44.162"
- subject="comment 8"
- date="2013-02-26T21:55:23Z"
- content="""
-Cool, glad this led to an important fix, even if it turned out to be unrelated to the thing I opened the bug report for.
-
-"""]]
diff --git a/doc/bugs/git_annex_wont_work_with_git-dir_and_work-tree.mdwn b/doc/bugs/git_annex_wont_work_with_git-dir_and_work-tree.mdwn
new file mode 100644
index 000000000..0ac3eacfa
--- /dev/null
+++ b/doc/bugs/git_annex_wont_work_with_git-dir_and_work-tree.mdwn
@@ -0,0 +1,29 @@
+### Please describe the problem.
+If using git annex with external .git dir webapp report a tread crashed and ever trying to restart it crash again and webapp is not able to upload/download/sync (also the download of git-annex updates is affected)
+
+### What steps will reproduce the problem?
+
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex version: 5.20150113-gcf247cf
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web bittorrent webdav tahoe glacier ddar hook external
+
+Precompiled tarball from official git-annex download site
+
+Gentoo linux
+
+### Please provide any additional information below.
+
+[[!format sh """
+
+Launching web browser on file://../.git_annex_repos/pippo.git/annex/webapp.html <-- note wrong path! should be /home/gioacchino/.git_annex_repos/pippo.git/annex/webapp.html
+
+RemoteControl crashed: user error (nice ["ionice","-c3","/home/gioacchino/opt/git-annex.linux/git-annex","remotedaemon"] exited 1)
+
+WebApp crashed: <file descriptor: 11>: hPutStr: illegal operation (handle is closed
+"""]]
+
+[[!meta title="assistant does not support nonstandard --git-dir"]]
diff --git a/doc/bugs/git_annex_wont_work_with_git-dir_and_work-tree/comment_1_cc3ea43301cd17b55794f9b9dd1e91cf._comment b/doc/bugs/git_annex_wont_work_with_git-dir_and_work-tree/comment_1_cc3ea43301cd17b55794f9b9dd1e91cf._comment
new file mode 100644
index 000000000..2e76dda05
--- /dev/null
+++ b/doc/bugs/git_annex_wont_work_with_git-dir_and_work-tree/comment_1_cc3ea43301cd17b55794f9b9dd1e91cf._comment
@@ -0,0 +1,27 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-09T17:54:00Z"
+ content="""
+I've confirmed this behavior. Normally git-annex propigates --git-dir
+to git commands it runs, but this is not done in a few cases in the
+assistant, including when it starts `git-annex remotedaemon` but also
+`git-annex fsck`, `git annex unused`, and `git annex transferkeys`.
+
+(Just search for readProgramFile; Remote.Git.fsckOnRemote is the only
+place outside the assistant that uses it, and it does take care to
+propigate --git-dir and --work-tree.)
+
+Also, restarting the assistant, either in the web ui or automatically due to
+an upgrade also doesn't propigate --git-dir.
+
+And, the assistant's autostart file doesn't support --git-dir.
+
+All of which could be fixed, but I have to wonder, why? What's the use case
+for a separate --git-dir with the assistant? I guess not vcsh because the
+assistant would watch for all changes to the home directory, and add them,
+and that's not how vcsh is used.
+
+I'm tempted to just make the assistant refuse to start when given a
+nonstandard --git-dir..
+"""]]
diff --git a/doc/bugs/git_annix_breaks_git_commit_after_uninstall.mdwn b/doc/bugs/git_annix_breaks_git_commit_after_uninstall.mdwn
deleted file mode 100644
index a6fdab0fe..000000000
--- a/doc/bugs/git_annix_breaks_git_commit_after_uninstall.mdwn
+++ /dev/null
@@ -1,42 +0,0 @@
-Sorry to be reporting another vague bug, this one interferes with my work unfortunately.
-
-### Please describe the problem.
-After uninstalling git-annix, running git commit returns the following error:
-
-git: 'annex' is not a git command. See 'git --help'.
-
-### What steps will reproduce the problem?
-
-Install git-annex using the ubuntu ppa of fmarcier like so:
-
- sudo apt-get install git-annex
-
-Then remove it:
-
- sudo apt-get remove git-annex
-
-Then go to work in a git project, that is not in annex and has no relation to it. Add your changes and run commit:
-
- git add my-new-file
- git commit -m "added new file"
-
-I expect it to confirm the file is committed, instead I get the error message:
-
- git: 'annex' is not a git command. See 'git --help'.
-
-### What version of git-annex are you using? On what operating system?
-
-Ubuntu 13.04, using the PPA by marcier linked on the branchable website.
-
-> I don't think this is something I want to change.. `git-annex init`
-> installs a pre-commit hook that runs `git annex fix`. If git-annex
-> is removed that hook is left behind to fail. However, if you were really
-> using git-annex in the repo, that's the least of your troubles. If you were
-> using git-annex in the repo and stopped, then you should run `git annex uninit` to remove the hook.
->
-> The only change I could make is to have the hook check if git-annex
-> is in PATH before trying to run it. But this adds time and complexity
-> to the usual case for a edge case. And keeps cruft around in the edge case
-> rather than informing you of the problem.
->
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/git_annix_breaks_git_commit_after_uninstall/comment_1_c8b1bab40d3bb2468a5bba7b116e854e._comment b/doc/bugs/git_annix_breaks_git_commit_after_uninstall/comment_1_c8b1bab40d3bb2468a5bba7b116e854e._comment
deleted file mode 100644
index 1494a876f..000000000
--- a/doc/bugs/git_annix_breaks_git_commit_after_uninstall/comment_1_c8b1bab40d3bb2468a5bba7b116e854e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://me.tinco.nl/"
- nickname="Tinco"
- subject="comment 1"
- date="2013-05-19T15:35:27Z"
- content="""
-I'm sorry, there seems to be an annex directory in the .git of that repository.. apparently I have accidentily made it an annex repository. I'm going to find out how to remove it now :)
-"""]]
diff --git a/doc/bugs/git_annix_breaks_git_commit_after_uninstall/comment_2_4173770375fca51dcaf9b974296d041a._comment b/doc/bugs/git_annix_breaks_git_commit_after_uninstall/comment_2_4173770375fca51dcaf9b974296d041a._comment
deleted file mode 100644
index a354c5516..000000000
--- a/doc/bugs/git_annix_breaks_git_commit_after_uninstall/comment_2_4173770375fca51dcaf9b974296d041a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://me.tinco.nl/"
- nickname="Tinco"
- subject="comment 2"
- date="2013-05-19T15:37:23Z"
- content="""
-Alright, found there's a pre-commit hook that performed a git annex task. I removed it and now it all works again.
-"""]]
diff --git a/doc/bugs/git_clone_ignores_annex.mdwn b/doc/bugs/git_clone_ignores_annex.mdwn
new file mode 100644
index 000000000..450a069ad
--- /dev/null
+++ b/doc/bugs/git_clone_ignores_annex.mdwn
@@ -0,0 +1,25 @@
+### Please describe the problem.
+
+More of a feature request than a bug. It would be nice if when creating a local clone with git clone this would run automatically:
+
+ln -s ../../annex/.git/annex .git/annex
+
+to hook up the annex. Just a minor thing, but I'd be nice.
+
+### What steps will reproduce the problem?
+
+
+### What version of git-annex are you using? On what operating system?
+
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> [[done]] --[[Joey]]
diff --git a/doc/bugs/git_clone_ignores_annex/comment_1_18ba05c51f82ddadd2558f6cd789e394._comment b/doc/bugs/git_clone_ignores_annex/comment_1_18ba05c51f82ddadd2558f6cd789e394._comment
new file mode 100644
index 000000000..e0b69f81a
--- /dev/null
+++ b/doc/bugs/git_clone_ignores_annex/comment_1_18ba05c51f82ddadd2558f6cd789e394._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 1"
+ date="2014-10-06T15:42:26Z"
+ content="""
+Making that symlink is extremely unsafe! git-annex will see two repositories. So if a file is present in the annex, with only one actual copy existing, and you try to drop it, git-annex will go check the other repository, find the file there, assume this means there's an extra copy and so proceed with the drop. Which deletes the only existing copy of your file. So if you do this, you will likely eventually lose data.
+
+However, recent versions of git-annex will detect if you clone a git repository with `--shared` and automatically hard link files into the annex when getting them into that repository. They also mark the shared clone as untrusted, to avoid the above problem. This is a much better solution.
+"""]]
diff --git a/doc/bugs/git_defunct_processes___40__child_of_git-annex_assistant__41__.mdwn b/doc/bugs/git_defunct_processes___40__child_of_git-annex_assistant__41__.mdwn
deleted file mode 100644
index 14eb3b329..000000000
--- a/doc/bugs/git_defunct_processes___40__child_of_git-annex_assistant__41__.mdwn
+++ /dev/null
@@ -1,34 +0,0 @@
-What steps will reproduce the problem?
-
-run git annex assistant, add a file, which is picked up and pushed by the assistant.
-
-What is the expected output? What do you see instead?
-
-a ps -ef shows a large number of defunct git processes.. for example:
-<pre>
-nelg 9622 1 0 02:01 ? 00:00:01 git-annex assistant
-nelg 9637 9622 0 02:01 ? 00:00:00 git --git-dir=/home/nelg/Downloads/test2/.git --work-tree=/home/nelg/Downloads/test2 cat-file --batch
-nelg 12080 9622 0 02:19 ? 00:00:00 [git] &lt;defunct&gt;
-nelg 12082 9622 0 02:19 ? 00:00:00 [git] &lt;defunct&gt;
-nelg 12083 9622 0 02:19 ? 00:00:00 [git] &lt;defunct&gt;
-nelg 12084 9622 0 02:19 ? 00:00:00 [git] &lt;defunct&gt;
------
-</pre>
-
-What version of git-annex are you using? On what operating system?
-
-Compiled git annex from git (cbcd208d158f8e42dda03a5eeaf1bac21045a140), on Mandriva 2010.2, 32 bit, using ghc-7.4.1.
- git version 1.7.1
-
-
-Please provide any additional information below.
-
-I also found that the version of git I have does not support the option: --allow-empty-message
-So, suggest that if the version of git installed is an older version, that the params in Assistant/Threads/Committer.hs
-are changed to [ Param "-m", Param "git assistant".... or something like that.
-
-I have done this on my copy for testing it.
-
-For testing, I am also using two repositories on the same computer. I set this up from the command line, as the web app does not seem to support syncing to two different git folders on the same computer.
-
-> [[done]]; all zombies are squelched now in the assistant. --[[Joey]]
diff --git a/doc/bugs/git_defunct_processes___40__child_of_git-annex_assistant__41__/comment_1_5e3f4b63db5cd32b63fb3e6a78f9b093._comment b/doc/bugs/git_defunct_processes___40__child_of_git-annex_assistant__41__/comment_1_5e3f4b63db5cd32b63fb3e6a78f9b093._comment
deleted file mode 100644
index f70cdd1bd..000000000
--- a/doc/bugs/git_defunct_processes___40__child_of_git-annex_assistant__41__/comment_1_5e3f4b63db5cd32b63fb3e6a78f9b093._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.2.84"
- subject="comment 1"
- date="2012-09-19T17:02:47Z"
- content="""
-Thanks for the note about --allow-empty-message. That appeared in 1.7.2, I've added a fallback for the old version.
-
-As far as I know, the assistant always reaps old children eventually, but it does it somewhat lazily. Effectively each time it starts up a new set of git children it reaps the old set. So you should not see them grow without bounds or anything like that.
-"""]]
diff --git a/doc/bugs/git_mv_before_commit_breaks_symlinks.mdwn b/doc/bugs/git_mv_before_commit_breaks_symlinks.mdwn
new file mode 100644
index 000000000..66a199e8c
--- /dev/null
+++ b/doc/bugs/git_mv_before_commit_breaks_symlinks.mdwn
@@ -0,0 +1,28 @@
+### Please describe the problem.
+
+When I `git mv` a file that I just `git annex add`-ed without having `git commit`-ed it first, then the symlink will break.
+
+### What steps will reproduce the problem?
+
+ $ mkdir foo
+ $ echo hello > foo/bar
+ $ git annex add foo/bar
+ $ git mv foo/bar .
+
+### What version of git-annex are you using? On what operating system?
+
+5.20140529 on Debian testing
+
+> This is fundamentally something git-annex cannot deal with,
+> because there is no way to hook into git to fix the symlink when
+> `git mv` moves the file.
+>
+> Instead, git-annex has several "good enough" fixes for the problem:
+>
+> * As soon as you `git commit`, the pre-commit hook will run `git annex
+> fix` and this will fix the symlink before it gets committed.
+> * You can run `git annex fix` yourself after `git mv`.
+> * Even `git annex add $file` will fix the symlink if the file is already
+> annexed.
+>
+> So, [[done]] --[[Joey]]
diff --git a/doc/bugs/git_rename_detection_on_file_move.mdwn b/doc/bugs/git_rename_detection_on_file_move.mdwn
index 76f1e098e..306641cc2 100644
--- a/doc/bugs/git_rename_detection_on_file_move.mdwn
+++ b/doc/bugs/git_rename_detection_on_file_move.mdwn
@@ -11,3 +11,4 @@ is committed. This would mean that a commit would result in new staged
changes for another commit, which is perhaps startling behavior.
The other way to fix it is to stop using symlinks, see [[todo/smudge]].
+[[!tag confirmed]]
diff --git a/doc/bugs/git_repo_fails_to_checkout.mdwn b/doc/bugs/git_repo_fails_to_checkout.mdwn
deleted file mode 100644
index 0c3b66018..000000000
--- a/doc/bugs/git_repo_fails_to_checkout.mdwn
+++ /dev/null
@@ -1,39 +0,0 @@
-### Please describe the problem.
-
-Attempting to clone the git repository produces
-
- (master) cayley:git-annex% git checkout -f HEAD
- error: unable to create file doc/bugs/fatal:_unable_to_access___39__..__47__..__47__..__47__..__47__C:__92__Users__92____91__...__93____92__annex__92__.git__47__config__39__:_Invalid_argument___40__Windows__41__.mdwn (File name too long)
- fatal: cannot create directory at 'doc/bugs/fatal:_unable_to_access___39__..__47__..__47__..__47__..__47__C:__92__Users__92____91__...__93____92__annex__92__.git__47__config__39__:_Invalid_argument___40__Windows__41__': File name too long
-
-### What steps will reproduce the problem?
-
-I get the above with either
-
- git clone https://github.com/joeyh/git-annex
-
-or (after this fails) retrying with
-
- cd git-annex
- git checkout -f HEAD
-
-### What version of git-annex are you using? On what operating system?
-
-I am running git 1.9.0 from git (5f95c9f850b19b368c43ae399cc831b17a26a5ac in the git git repo) on Ubuntu 13.04.
-
-> More encfs brain-damange.
-
- One such limitation is filename length. If your underlying
- filesystem limits you to N characters in a filename, then
- EncFS will limit you to approximately 3*(N-2)/4.
-
-> It's really astounding that Ubuntu inflicts that POS on users.
-> However, I can't see that as justification for limiting the
-> git-annex repository to filenames shorter than `PATH_MAX` -- just
-> as DOS's problems with both filename length and also `:` in filenames
-> is not a good reason to mangle the repository.
->
-> In either case, it's up to the user to find a way to make it work.
-> In the DOS case, that involves using Cygwin's git. In the encfs case,
-> it presumably means checking it out into a real filesystem.
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/git_repo_fails_to_checkout/comment_1_d92e7e3b41382501a08f6a66c673b1fd._comment b/doc/bugs/git_repo_fails_to_checkout/comment_1_d92e7e3b41382501a08f6a66c673b1fd._comment
deleted file mode 100644
index 55e063f39..000000000
--- a/doc/bugs/git_repo_fails_to_checkout/comment_1_d92e7e3b41382501a08f6a66c673b1fd._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://geoffreyirving.myopenid.com/"
- nickname="Geoffrey Irving"
- subject="encrypted home directory"
- date="2014-02-18T18:05:24Z"
- content="""
-It looks like this problem is related to using an encrypted home directory.
-"""]]
diff --git a/doc/bugs/git_version_in_prebuilt_linux_tarball_is_outdated.mdwn b/doc/bugs/git_version_in_prebuilt_linux_tarball_is_outdated.mdwn
deleted file mode 100644
index e5960b62e..000000000
--- a/doc/bugs/git_version_in_prebuilt_linux_tarball_is_outdated.mdwn
+++ /dev/null
@@ -1,11 +0,0 @@
-### Please describe the problem.
-I created a .gitignore file and added it to git annex. In the assistant webapp log, the error "The installed version of git is too old for .gitignores to be honored by git-annex." shows up. According to [[bugs/assistant_ignore_.gitignore/]] this bug should be fixed in a later git version.
-
-### What steps will reproduce the problem?
-Download the current prebuilt linux tarball from [[/install]], extract it, run "./runshell", then "git --version" returns "git version 1.7.10.4"
-
-### What version of git-annex are you using? On what operating system?
-git-annex-standalone-amd64.tar.gz 2013-09-22 09:56 (Linux Ubuntu Precise)
-
-> Updated to wheezy backport 1.8.4. [[done]] for now, obviously it will go
-> out of date again eventually.. --[[Joey]]
diff --git a/doc/bugs/git_version_in_prebuilt_linux_tarball_is_outdated/comment_1_2a5a07498df9d38531d4570f7b463b9a._comment b/doc/bugs/git_version_in_prebuilt_linux_tarball_is_outdated/comment_1_2a5a07498df9d38531d4570f7b463b9a._comment
deleted file mode 100644
index 5287ea935..000000000
--- a/doc/bugs/git_version_in_prebuilt_linux_tarball_is_outdated/comment_1_2a5a07498df9d38531d4570f7b463b9a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.220"
- subject="comment 1"
- date="2013-09-25T18:18:49Z"
- content="""
-The tarballs are built on Debian stable in order to have an old enough libc to work most places. So I am limited to what is available in stable and backports. Once there is a backport available of git, I will use it.
-"""]]
diff --git a/doc/bugs/gix-annex_help_is_homicidal.mdwn b/doc/bugs/gix-annex_help_is_homicidal.mdwn
deleted file mode 100644
index f4a8d7213..000000000
--- a/doc/bugs/gix-annex_help_is_homicidal.mdwn
+++ /dev/null
@@ -1,23 +0,0 @@
-> What steps will reproduce the problem?
-
-Run 'git-annex help'
-
-> What is the expected output?
-
-Something similar to 'git-annex --help', or a pointer to --help.
-
-> What do you see instead?
-
- git-annex: Unknown command 'help'
- Did you mean one of these?
- drop
- dead
-
-> What version of git-annex are you using? On what operating system?
-
-git-annex version 3.20120825 on Arch Linux x86_64, installed from AUR package git-annex and using the [haskell] repository for dependencies.
-
->> Lol, that's great! Also worth noting that with help.autocorrect=1, it'd
->> actually run drop. Only with --force can you lose data however.
->>
->> I've added a help command. [[done]] --[[Joey]]
diff --git a/doc/bugs/glacier_fails_to_copy.mdwn b/doc/bugs/glacier_fails_to_copy.mdwn
new file mode 100644
index 000000000..3c6d95502
--- /dev/null
+++ b/doc/bugs/glacier_fails_to_copy.mdwn
@@ -0,0 +1,85 @@
+### Please describe the problem.
+glacier copy shows the output of the glacier-cli help and a gpg error for each file and most of the files fail to copy.
+
+### What steps will reproduce the problem?
+1. git annex init "Photos"
+2. cp -R ../photodir/ .
+3. git annex add .
+4. git commit -a -m added
+5. export AWS_ACCESS_KEY_ID="***"
+6. export AWS_SECRET_ACCESS_KEY="***"
+7. git annex initremote glacier type=glacier encryption=shared vault=photos
+8. git annex copy --auto --to glacier
+
+### What version of git-annex are you using? On what operating system?
+5.20150113-gcf247cf
+Arch Linux (git-annex-bin package)
+
+### Please provide any additional information below.
+I get the following messages over and over again:
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+copy 2003/10/14/085.jpg (checking glacier...) (to glacier...)
+8% 0.0 B/s 0s
+glacier <command> [args]
+
+ Commands
+ vaults - Operations with vaults
+ jobs - Operations with jobs
+ upload - Upload files to a vault. If the vault doesn't exits, it is
+ created
+
+ Common args:
+ --access_key - Your AWS Access Key ID. If not supplied, boto will
+ use the value of the environment variable
+ AWS_ACCESS_KEY_ID
+ --secret_key - Your AWS Secret Access Key. If not supplied, boto
+ will use the value of the environment variable
+ AWS_SECRET_ACCESS_KEY
+ --region - AWS region to use. Possible values: us-east-1, us-west-1,
+ us-west-2, ap-northeast-1, eu-west-1.
+ Default: us-east-1
+
+ Vaults operations:
+
+ List vaults:
+ glacier vaults
+
+ Jobs operations:
+
+ List jobs:
+ glacier jobs <vault name>
+
+ Uploading files:
+
+ glacier upload <vault name> <files>
+
+ Examples :
+ glacier upload pics *.jpg
+ glacier upload pics a.jpg b.jpg
+
+gpg: [stdout]: write error: Broken pipe
+gpg: DBG: deflate: iobuf_write failed
+gpg: build_packet failed: Broken pipe
+gpg: [stdout]: write error: Broken pipe
+gpg: iobuf_flush failed on close: Broken pipe
+gpg: [stdout]: write error: Broken pipe
+gpg: iobuf_flush failed on close: Broken pipe
+gpg: symmetric encryption of '[stdin]' failed: Broken pipe
+
+ user error (gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--batch","--passphrase-fd","227","--symmetric","--force-mdc","--no-textmode"] exited 2)
+failed
+git-annex: fd:230: hPutBuf: resource vanished (Broken pipe)
+
+# lots more lines like this
+
+ok
+(Recording state in git...)
+git-annex: copy: 230 failed
+
+# End of transcript or log.
+"""]]
+
+> git-annex will now detect this misconfiguration and refuse to use it, so
+> [[done]] --[[Joey]]
diff --git a/doc/bugs/glacier_fails_to_copy/comment_1_29ea384b6aa5a634ff75191eee14c7ef._comment b/doc/bugs/glacier_fails_to_copy/comment_1_29ea384b6aa5a634ff75191eee14c7ef._comment
new file mode 100644
index 000000000..c24f782a4
--- /dev/null
+++ b/doc/bugs/glacier_fails_to_copy/comment_1_29ea384b6aa5a634ff75191eee14c7ef._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-05T17:55:25Z"
+ content="""
+From where did you install your glacier command?
+
+It does not seem to be the [glacier-cli](https://github.com/basak/glacier-cli)
+that git-annex is built to use.
+
+ glacier upload <vault name> <files>
+
+That is not the upload syntax that glacier-cli uses, which is instead
+supposed to be:
+
+ glacier archive upload example-vault example-content
+"""]]
diff --git a/doc/bugs/glacier_fails_to_copy/comment_2_329980c99dc244b227a967982cb9052c._comment b/doc/bugs/glacier_fails_to_copy/comment_2_329980c99dc244b227a967982cb9052c._comment
new file mode 100644
index 000000000..e6a6a72ae
--- /dev/null
+++ b/doc/bugs/glacier_fails_to_copy/comment_2_329980c99dc244b227a967982cb9052c._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="Reed"
+ subject="glacier command"
+ date="2015-02-05T23:27:27Z"
+ content="""
+My `/usr/bin/glacier` is owned by `python2-boto-git` which is a requirement for `glacier-cmd-git`. I've now installed `glacier-cli` from the git repo and it seems to be working fine. Thanks for the help!
+"""]]
diff --git a/doc/bugs/glacier_fails_to_copy/comment_2_b0614f2e7417af733f54c9ff569b11b0._comment b/doc/bugs/glacier_fails_to_copy/comment_2_b0614f2e7417af733f54c9ff569b11b0._comment
new file mode 100644
index 000000000..6813ff9fc
--- /dev/null
+++ b/doc/bugs/glacier_fails_to_copy/comment_2_b0614f2e7417af733f54c9ff569b11b0._comment
@@ -0,0 +1,33 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2015-02-06T17:30:50Z"
+ content="""
+Since someone also mentioned this problem on IRC (I don't know if it was
+you), I am wondering if this is an easy mistake to make. I guess so; you
+installed boto from Arch's packages and it included a /usr/bin/glacier..
+Same could happen if using pip to install boto, I think.
+
+I don't want to support multiple different glacier interface programs. The
+eventual plan is to move glacier support into git-annex, using a haskell
+library.
+
+The other concerning thing is that git-annex seems to have reported that
+some of the transfers succeeded. It seems, very unfortunately, that
+the glacier command from boto exits 0 when given unsupported
+parameters. So, git-annex will think a transfer succeeded, at least some of
+the time (sometimes gpg notices that the encrypted output is not all
+consumed).
+
+I think that the best fix will be to make glacier-cli install a
+"glacier-cli" program. Then git-annex can run that instead of "glacier" and
+will be much less likely to run into namespace pollution.
+
+I have filed 2 bug reports:
+
+* [boto's glacier should exit nonzero after displaying usage](https://github.com/boto/boto/issues/2942)
+* [glacier-cli should provide a glacier-cli command](https://github.com/basak/glacier-cli/issues/30)
+
+I have also put a really ugly hack into git-annex to detect when the wrong
+glacier is installed, and refuse to use it.
+"""]]
diff --git a/doc/bugs/glacier_from_multiple_repos.mdwn b/doc/bugs/glacier_from_multiple_repos.mdwn
index f6ef2a4ac..3b6bb57f7 100644
--- a/doc/bugs/glacier_from_multiple_repos.mdwn
+++ b/doc/bugs/glacier_from_multiple_repos.mdwn
@@ -12,3 +12,5 @@ I've discussed with glacier-cli's author making git-annex store enough info
in its branch to be able to bootstrap glacier-cli to know about a file.
This seems doable and he had a design; waiting on movement
on the glacier-cli side.
+
+[[!tag confirmed]]
diff --git a/doc/bugs/googlemail/comment_1_5614fa85029f9f97be03cb74899a7099._comment b/doc/bugs/googlemail/comment_1_5614fa85029f9f97be03cb74899a7099._comment
new file mode 100644
index 000000000..eb3c38811
--- /dev/null
+++ b/doc/bugs/googlemail/comment_1_5614fa85029f9f97be03cb74899a7099._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm8BAEUyzYhORZmMuocRTk4M-3IumDm5VU"
+ nickname="luciusf0"
+ subject="Bug still valid"
+ date="2014-07-31T08:35:29Z"
+ content="""
+The bug is still valid. A lot of german users had to use the @googlemail.com extension as google couldn't get the gmail domain in Germany.
+So it might be bothering not just a few people, but a whole country! Now, if that doesn't count ...
+
+ Mac OSX 10.9.4
+ Version: 5.20140717-g5a7d4ff
+ Build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
+
+This is the message I get
+
+ Unable to connect to the Jabber server. Maybe you entered the wrong password? (Error message: host xmpp.l.google.com.:5222 failed: AuthenticationFailure (Element {elementName = Name {nameLocalName = \"failure\", nameNamespace = Just \"urn:ietf:params:xml:ns:xmpp-sasl\", namePrefix = Nothing}, elementAttributes = [], elementNodes = [NodeElement (Element {elementName = Name {nameLocalName = \"not-authorized\", nameNamespace = Just \"urn:ietf:params:xml:ns:xmpp-sasl\", namePrefix = Nothing}, elementAttributes = [], elementNodes = []})]}); host alt2.xmpp.l.google.com.:5222 failed: AuthenticationFailure (Element {elementName = Name {nameLocalName = \"failure\", nameNamespace = Just \"urn:ietf:params:xml:ns:xmpp-sasl\", namePrefix = Nothing}, elementAttributes = [], elementNodes = [NodeElement (Element {elementName = Name {nameLocalName = \"not-authorized\", nameNamespace = Just \"urn:ietf:params:xml:ns:xmpp-sasl\", namePrefix = Nothing}, elementAttributes = [], elementNodes = []})]}); host alt1.xmpp.l.google.com.:5222 failed: AuthenticationFailure (Element {elementName = Name {nameLocalName = \"failure\", nameNamespace = Just \"urn:ietf:params:xml:ns:xmpp-sasl\", namePrefix = Nothing}, elementAttributes = [], elementNodes = [NodeElement (Element {elementName = Name {nameLocalName = \"not-authorized\", nameNamespace = Just \"urn:ietf:params:xml:ns:xmpp-sasl\", namePrefix = Nothing}, elementAttributes = [], elementNodes = []})]}); host alt4.xmpp.l.google.com.:5222 failed: AuthenticationFailure (Element {elementName = Name {nameLocalName = \"failure\", nameNamespace = Just \"urn:ietf:params:xml:ns:xmpp-sasl\", namePrefix = Nothing}, elementAttributes = [], elementNodes = [NodeElement (Element {elementName = Name {nameLocalName = \"not-authorized\", nameNamespace = Just \"urn:ietf:params:xml:ns:xmpp-sasl\", namePrefix = Nothing}, elementAttributes = [], elementNodes = []})]}); host alt3.xmpp.l.google.com.:5222 failed: AuthenticationFailure (Element {elementName = Name {nameLocalName = \"failure\", nameNamespace = Just \"urn:ietf:params:xml:ns:xmpp-sasl\", namePrefix = Nothing}, elementAttributes = [], elementNodes = [NodeElement (Element {elementName = Name {nameLocalName = \"not-authorized\", nameNamespace = Just \"urn:ietf:params:xml:ns:xmpp-sasl\", namePrefix = Nothing}, elementAttributes = [], elementNodes = []})]}))
+
+
+"""]]
diff --git a/doc/bugs/googlemail/comment_2_bdb2b08346673f850709041d2f41be5c._comment b/doc/bugs/googlemail/comment_2_bdb2b08346673f850709041d2f41be5c._comment
new file mode 100644
index 000000000..1303a2077
--- /dev/null
+++ b/doc/bugs/googlemail/comment_2_bdb2b08346673f850709041d2f41be5c._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 2"
+ date="2014-08-12T17:39:09Z"
+ content="""
+AFAICS, xmpp.l.google.com is the correct XMPP server; it's what the SRV record for googlemail.com says to use.
+
+Since it fails with an authentication error, I wonder if google's XMPP is rejecting a user@googlemail.com jid and expects the domain to be @gmail.com or something else. Would that be allowed by the XMPP spec? I don't know.
+
+
+"""]]
diff --git a/doc/bugs/gpg-agent.mdwn b/doc/bugs/gpg-agent.mdwn
new file mode 100644
index 000000000..df5106a8c
--- /dev/null
+++ b/doc/bugs/gpg-agent.mdwn
@@ -0,0 +1,5049 @@
+### Please describe the problem.
+I'm running git-annex on OSX 10.9.3. The problem is that during sync with an git-annex remote the system gets flooded with gpg-agent processes which are never stopped, eventually running out of user processes.
+
+[[!tag moreinfo]]
+
+### What steps will reproduce the problem?
+Any synchronization of a lot of files with a git-annex remote.
+
+### What version of git-annex are you using? On what operating system?
+5.20140517-g0aed6d9.
+
+The problem did not appear on any older version.
+
+### Please provide any additional information below.
+
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+[2014-05-25 18:15:53 CEST] main: starting assistant version 5.20140517-g0aed6d9
+[2014-05-25 18:16:02 CEST] main: Syncing with diskstation
+Everything up-to-date
+[2014-05-25 18:16:16 CEST] UpgradeWatcher: Finished upgrading git-annex to version 5.20140517-g0aed6d9
+[2014-05-25 18:16:16 CEST] TransferScanner: Syncing with diskstation
+Already up-to-date.
+Already up-to-date.
+Everything up-to-date
+[2014-05-25 18:16:36 CEST] main: Syncing with diskstation
+remote: merge git-annex (merging synced/git-annex into git-annex...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 95ae98a..16f51d5 git-annex -> synced/git-annex
+
+WORM-s196517551-m1400608062--An Introduction to d3.js - From Scattered to Scatterplot%01_introduction.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 3670016 1% 3.40MB/s 0:00:55
+ 6750208 3% 3.17MB/s 0:00:58
+ 9830400 5% 3.09MB/s 0:00:59
+ 12976128 6% 3.03MB/s 0:00:59
+ 15990784 8% 2.90MB/s 0:01:00
+ 18644992 9% 2.79MB/s 0:01:02
+ 21528576 10% 2.75MB/s 0:01:02
+ 24543232 12% 2.73MB/s 0:01:01
+ 27557888 14% 2.72MB/s 0:01:00
+ 30834688 15% 2.85MB/s 0:00:56
+ 33980416 17% 2.89MB/s 0:00:55
+ 36995072 18% 2.88MB/s 0:00:54
+ 40108032 20% 2.91MB/s 0:00:52
+ 42991616 21% 2.83MB/s 0:00:52
+ 45875200 23% 2.79MB/s 0:00:52
+ 48857088 24% 2.78MB/s 0:00:51
+ 51740672 26% 2.72MB/s 0:00:51
+ 54755328 27% 2.75MB/s 0:00:50
+ 57638912 29% 2.74MB/s 0:00:49
+ 59998208 30% 2.60MB/s 0:00:51
+ 62947328 32% 2.61MB/s 0:00:49
+ 65961984 33% 2.60MB/s 0:00:49
+ 68845568 35% 2.60MB/s 0:00:48
+ 71729152 36% 2.73MB/s 0:00:44
+ 74743808 38% 2.74MB/s 0:00:43
+ 77627392 39% 2.72MB/s 0:00:42
+ 80642048 41% 2.76MB/s 0:00:41
+ 83656704 42% 2.78MB/s 0:00:39
+ 86540288 44% 2.76MB/s 0:00:38
+ 89292800 45% 2.72MB/s 0:00:38
+ 91389952 46% 2.51MB/s 0:00:40
+ 94404608 48% 2.50MB/s 0:00:39
+ 97288192 49% 2.49MB/s 0:00:38
+ 100040704 50% 2.49MB/s 0:00:37
+ 102924288 52% 2.66MB/s 0:00:34
+ 105807872 53% 2.65MB/s 0:00:33
+ 108691456 55% 2.67MB/s 0:00:32
+ 111443968 56% 2.65MB/s 0:00:31
+ 114196480 58% 2.63MB/s 0:00:30
+ 117342208 59% 2.66MB/s 0:00:29
+ 120225792 61% 2.66MB/s 0:00:27
+ 123109376 62% 2.70MB/s 0:00:26
+ 125992960 64% 2.73MB/s 0:00:25
+ 128745472 65% 2.67MB/s 0:00:24
+ 131760128 67% 2.70MB/s 0:00:23
+ 134643712 68% 2.70MB/s 0:00:22
+ 137396224 69% 2.65MB/s 0:00:21
+ 140410880 71% 2.72MB/s 0:00:20
+ 143294464 72% 2.70MB/s 0:00:19
+ 145915904 74% 2.60MB/s 0:00:19
+ 148275200 75% 2.50MB/s 0:00:18
+ 150896640 76% 2.41MB/s 0:00:18
+ 153780224 78% 2.41MB/s 0:00:17
+ 157057024 79% 2.60MB/s 0:00:14
+ 160202752 81% 2.79MB/s 0:00:12
+ 163217408 83% 2.87MB/s 0:00:11
+ 166100992 84% 2.86MB/s 0:00:10
+ 168984576 85% 2.75MB/s 0:00:09
+ 171737088 87% 2.68MB/s 0:00:09
+ 174817280 88% 2.68MB/s 0:00:07
+ 177831936 90% 2.71MB/s 0:00:06
+ 180846592 92% 2.75MB/s 0:00:05
+ 183730176 93% 2.77MB/s 0:00:04
+ 186875904 95% 2.80MB/s 0:00:03
+ 190021632 96% 2.84MB/s 0:00:02
+ 192970752 98% 2.85MB/s 0:00:01
+ 195854336 99% 2.87MB/s 0:00:00
+ 196517551 100% 2.72MB/s 0:01:08 (xfer#1, to-check=0/1)
+
+sent 196541725 bytes received 42 bytes 2787826.48 bytes/sec
+total size is 196517551 speedup is 1.00
+[2014-05-25 18:17:58 CEST] Transferrer: Uploaded 01_introduction.mp4
+[2014-05-25 18:17:58 CEST] Pusher: Syncing with diskstation
+
+WORM-s57838296-m1400607924--An Introduction to d3.js - From Scattered to Scatterplot%02_setting-up.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4030464 6% 3.75MB/s 0:00:14
+ 6782976 11% 3.15MB/s 0:00:15
+ 9535488 16% 2.96MB/s 0:00:15
+ 12288000 21% 2.88MB/s 0:00:15
+ 15040512 26% 2.58MB/s 0:00:16
+ 17793024 30% 2.60MB/s 0:00:15
+ 20545536 35% 2.61MB/s 0:00:13
+ 23560192 40% 2.66MB/s 0:00:12
+ 26705920 46% 2.76MB/s 0:00:11
+ 29720576 51% 2.80MB/s 0:00:09
+ 32604160 56% 2.81MB/s 0:00:08
+remote: merge git-annex (merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 16f51d5..b142966 git-annex -> synced/git-annex
+ 35356672 61% 2.76MB/s 0:00:07
+ 38371328 66% 2.73MB/s 0:00:06
+[2014-05-25 18:18:14 CEST] RemoteControl: Syncing with diskstation
+ 41648128 72% 2.79MB/s 0:00:05
+ 44761088 77% 2.86MB/s 0:00:04
+ 47841280 82% 2.92MB/s 0:00:03
+ 50855936 87% 2.92MB/s 0:00:02
+ 53870592 93% 2.86MB/s 0:00:01
+ 56885248 98% 2.81MB/s 0:00:00
+ 57838296 100% 2.80MB/s 0:00:19 (xfer#1, to-check=0/1)
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 95ae98a..5809ceb git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at b1429660ab35f95d5bc54e4d8b4f39a19fe66998 but expected 16f51d51d23bf026556435a5cea88488ae0ab108
+ ! 16f51d5..b142966 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+sent 57845539 bytes received 42 bytes 2690492.14 bytes/sec
+total size is 57838296 speedup is 1.00
+[2014-05-25 18:18:22 CEST] Transferrer: Uploaded 02_setting-up.mp4
+[2014-05-25 18:18:23 CEST] Pusher: Syncing with diskstation
+
+WORM-s149069061-m1401033118--An Introduction to d3.js - From Scattered to Scatterplot%03_selecting-and-creating-elements.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4063232 2% 3.60MB/s 0:00:39
+remote: merge git-annex 6815744 4% 3.12MB/s 0:00:44
+ 9568256 6% 2.96MB/s 0:00:46
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+[2014-05-25 18:18:28 CEST] RemoteControl: Syncing with diskstation
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ b142966..7713a32 git-annex -> synced/git-annex
+ 12582912 8% 2.93MB/s 0:00:45
+ 15466496 10% 2.70MB/s 0:00:48
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 5809ceb..19d05e5 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 7713a32f85cf1d993948f15859f0d035d63aa6e0 but expected b1429660ab35f95d5bc54e4d8b4f39a19fe66998
+ ! b142966..7713a32 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 18448384 12% 2.75MB/s 0:00:46
+ 21594112 14% 2.83MB/s 0:00:44
+ 24477696 16% 2.80MB/s 0:00:43
+ 27492352 18% 2.84MB/s 0:00:41
+ 30375936 20% 2.80MB/s 0:00:41
+ 33587200 22% 2.83MB/s 0:00:39
+ 36601856 24% 2.85MB/s 0:00:38
+ 39616512 26% 2.82MB/s 0:00:37
+ 42041344 28% 2.73MB/s 0:00:38
+ 45056000 30% 2.67MB/s 0:00:37
+ 48037888 32% 2.66MB/s 0:00:37
+ 50855936 34% 2.64MB/s 0:00:36
+ 52756480 35% 2.52MB/s 0:00:37
+ 54853632 36% 2.26MB/s 0:00:40
+ 56950784 38% 2.02MB/s 0:00:44
+ 58916864 39% 1.81MB/s 0:00:48
+ 61669376 41% 2.00MB/s 0:00:42
+ 64552960 43% 2.23MB/s 0:00:36
+ 67567616 45% 2.48MB/s 0:00:32
+ 70713344 47% 2.77MB/s 0:00:27
+ 73859072 49% 2.84MB/s 0:00:25
+ 76873728 51% 2.85MB/s 0:00:24
+ 79888384 53% 2.85MB/s 0:00:23
+ 82903040 55% 2.81MB/s 0:00:22
+ 85786624 57% 2.77MB/s 0:00:22
+ 88571904 59% 2.73MB/s 0:00:21
+ 91422720 61% 2.70MB/s 0:00:20
+ 94502912 63% 2.73MB/s 0:00:19
+ 97288192 65% 2.68MB/s 0:00:18
+ 100335616 67% 2.72MB/s 0:00:17
+ 103350272 69% 2.77MB/s 0:00:16
+ 106364928 71% 2.73MB/s 0:00:15
+ 109379584 73% 2.82MB/s 0:00:13
+ 112394240 75% 2.79MB/s 0:00:12
+ 115376128 77% 2.76MB/s 0:00:11
+ 118390784 79% 2.76MB/s 0:00:10
+ 121536512 81% 2.80MB/s 0:00:09
+ 124682240 83% 2.85MB/s 0:00:08
+ 127827968 85% 2.90MB/s 0:00:07
+ 130842624 87% 2.91MB/s 0:00:06
+ 133988352 89% 2.91MB/s 0:00:05
+ 137003008 91% 2.88MB/s 0:00:04
+ 140017664 93% 2.86MB/s 0:00:03
+ 142901248 95% 2.85MB/s 0:00:02
+ 145588224 97% 2.71MB/s 0:00:01
+ 148537344 99% 2.71MB/s 0:00:00
+ 149069061 100% 2.71MB/s 0:00:52 (xfer#1, to-check=0/1)
+
+sent 149087462 bytes received 42 bytes 2786682.32 bytes/sec
+total size is 149069061 speedup is 1.00
+[2014-05-25 18:19:18 CEST] Transferrer: Uploaded 03_select..ments.mp4
+[2014-05-25 18:19:18 CEST] Pusher: Syncing with diskstation
+
+WORM-s36798210-m1400608746--An Introduction to d3.js - From Scattered to Scatterplot%04_exercise-1.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4227072 11% 3.89MB/s 0:00:08
+ 7143424 19% 3.32MB/s 0:00:08
+ 10158080 27% 3.15MB/s 0:00:08
+remote: merge git-annex 13172736 35% 3.07MB/s 0:00:07
+[2014-05-25 18:19:24 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 7713a32..c892127 git-annex -> synced/git-annex
+ 16187392 43% 2.81MB/s 0:00:07
+ 19136512 52% 2.83MB/s 0:00:06
+ 22282240 60% 2.88MB/s 0:00:04
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 19d05e5..928f25d git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at c8921270e51c1eb7f5f88a288adbd778711d0ff0 but expected 7713a32f85cf1d993948f15859f0d035d63aa6e0
+ ! 7713a32..c892127 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 25296896 68% 2.88MB/s 0:00:03
+ 28442624 77% 2.88MB/s 0:00:02
+ 31457280 85% 2.88MB/s 0:00:01
+ 34603008 94% 2.84MB/s 0:00:00
+ 36798210 100% 2.94MB/s 0:00:11 (xfer#1, to-check=0/1)
+
+sent 36802881 bytes received 42 bytes 2538132.62 bytes/sec
+total size is 36798210 speedup is 1.00
+[2014-05-25 18:19:32 CEST] Transferrer: Uploaded 04_exercise-1.mp4
+[2014-05-25 18:19:32 CEST] Pusher: Syncing with diskstation
+
+WORM-s272759172-m1400608447--An Introduction to d3.js - From Scattered to Scatterplot%05_svg.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4227072 1% 3.97MB/s 0:01:06
+ 7241728 2% 3.39MB/s 0:01:16
+ 10256384 3% 3.17MB/s 0:01:20
+remote: merge git-annex 13402112 4% 3.11MB/s 0:01:21
+ 16416768 6% 2.83MB/s 0:01:28
+[2014-05-25 18:19:38 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ c892127..ff739c0 git-annex -> synced/git-annex
+ 19431424 7% 2.83MB/s 0:01:27
+ 22446080 8% 2.85MB/s 0:01:25
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 928f25d..383d246 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at ff739c08bd8881b7d1c3fd6c305b0d80b3213b0d but expected c8921270e51c1eb7f5f88a288adbd778711d0ff0
+ ! c892127..ff739c0 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 25591808 9% 2.83MB/s 0:01:25
+ 28606464 10% 2.81MB/s 0:01:24
+ 31621120 11% 2.82MB/s 0:01:23
+ 34766848 12% 2.83MB/s 0:01:22
+ 37781504 13% 2.83MB/s 0:01:21
+ 40927232 15% 2.87MB/s 0:01:18
+ 44072960 16% 2.89MB/s 0:01:17
+ 47087616 17% 2.89MB/s 0:01:16
+ 50397184 18% 2.95MB/s 0:01:13
+ 53411840 19% 2.93MB/s 0:01:13
+ 56295424 20% 2.89MB/s 0:01:13
+ 59146240 21% 2.84MB/s 0:01:13
+ 62160896 22% 2.78MB/s 0:01:13
+ 65306624 23% 2.82MB/s 0:01:11
+ 68321280 25% 2.84MB/s 0:01:10
+ 71335936 26% 2.86MB/s 0:01:08
+ 74350592 27% 2.85MB/s 0:01:07
+ 77365248 28% 2.80MB/s 0:01:08
+ 80379904 29% 2.80MB/s 0:01:07
+ 83394560 30% 2.82MB/s 0:01:05
+ 86540288 31% 2.84MB/s 0:01:04
+ 89554944 32% 2.85MB/s 0:01:02
+ 92569600 33% 2.86MB/s 0:01:01
+ 95453184 34% 2.81MB/s 0:01:01
+ 98336768 36% 2.76MB/s 0:01:01
+ 101220352 37% 2.74MB/s 0:01:01
+ 104103936 38% 2.70MB/s 0:01:00
+ 107118592 39% 2.75MB/s 0:00:58
+ 110002176 40% 2.74MB/s 0:00:58
+ 113016832 41% 2.75MB/s 0:00:56
+ 115113984 42% 2.57MB/s 0:00:59
+ 117342208 43% 2.37MB/s 0:01:04
+ 120356864 44% 2.40MB/s 0:01:02
+ 123371520 45% 2.41MB/s 0:01:00
+ 126386176 46% 2.61MB/s 0:00:54
+ 129335296 47% 2.77MB/s 0:00:50
+ 132481024 48% 2.80MB/s 0:00:48
+ 135626752 49% 2.83MB/s 0:00:47
+ 138772480 50% 2.86MB/s 0:00:45
+ 141656064 51% 2.88MB/s 0:00:44
+ 144572416 53% 2.83MB/s 0:00:44
+ 147456000 54% 2.78MB/s 0:00:43
+ 150732800 55% 2.84MB/s 0:00:41
+ 153845760 56% 2.89MB/s 0:00:40
+ 156860416 57% 2.88MB/s 0:00:39
+ 159875072 58% 2.89MB/s 0:00:38
+ 162889728 59% 2.83MB/s 0:00:37
+ 165904384 60% 2.79MB/s 0:00:37
+ 168919040 61% 2.80MB/s 0:00:36
+ 172064768 63% 2.82MB/s 0:00:34
+ 175079424 64% 2.79MB/s 0:00:34
+ 178094080 65% 2.79MB/s 0:00:33
+ 180977664 66% 2.77MB/s 0:00:32
+ 183861248 67% 2.74MB/s 0:00:31
+ 186875904 68% 2.76MB/s 0:00:30
+ 190152704 69% 2.81MB/s 0:00:28
+ 193298432 70% 2.86MB/s 0:00:27
+ 196313088 71% 2.87MB/s 0:00:26
+ 199458816 73% 2.92MB/s 0:00:24
+ 202473472 74% 2.86MB/s 0:00:23
+ 205455360 75% 2.82MB/s 0:00:23
+ 208207872 76% 2.76MB/s 0:00:22
+ 211091456 77% 2.69MB/s 0:00:22
+ 214237184 78% 2.74MB/s 0:00:20
+ 217251840 79% 2.77MB/s 0:00:19
+ 220266496 80% 2.81MB/s 0:00:18
+ 223019008 81% 2.77MB/s 0:00:17
+ 225247232 82% 2.54MB/s 0:00:18
+ 228261888 83% 2.54MB/s 0:00:17
+ 231145472 84% 2.52MB/s 0:00:16
+ 234160128 85% 2.58MB/s 0:00:14
+ 237043712 86% 2.74MB/s 0:00:12
+ 240091136 88% 2.76MB/s 0:00:11
+ 243073024 89% 2.78MB/s 0:00:10
+ 246087680 90% 2.79MB/s 0:00:09
+ 248971264 91% 2.81MB/s 0:00:08
+ 251723776 92% 2.71MB/s 0:00:07
+ 254738432 93% 2.73MB/s 0:00:06
+ 257884160 94% 2.75MB/s 0:00:05
+ 261029888 95% 2.80MB/s 0:00:04
+ 263913472 96% 2.85MB/s 0:00:03
+ 266928128 97% 2.87MB/s 0:00:01
+ 269942784 98% 2.83MB/s 0:00:00
+ 272759172 100% 2.80MB/s 0:01:32 (xfer#1, to-check=0/1)
+
+sent 272792641 bytes received 42 bytes 2886695.06 bytes/sec
+total size is 272759172 speedup is 1.00
+[2014-05-25 18:21:07 CEST] Transferrer: Uploaded 05_svg.mp4
+[2014-05-25 18:21:07 CEST] Pusher: Syncing with diskstation
+
+WORM-s29712591-m1400608733--An Introduction to d3.js - From Scattered to Scatterplot%06_exercise-2.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4259840 14% 4.00MB/s 0:00:06
+ 7274496 24% 3.44MB/s 0:00:06
+ 10289152 34% 3.24MB/s 0:00:05
+remote: merge git-annex 13434880 45% 3.17MB/s 0:00:05
+ 16678912 56% 2.92MB/s 0:00:04
+[2014-05-25 18:21:13 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ ff739c0..07153a2 git-annex -> synced/git-annex
+ 19693568 66% 2.89MB/s 0:00:03
+ 22740992 76% 2.86MB/s 0:00:02
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 383d246..1749643 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 07153a2d49264b9792593fc016c00499ce87f70b but expected ff739c08bd8881b7d1c3fd6c305b0d80b3213b0d
+ ! ff739c0..07153a2 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 25624576 86% 2.81MB/s 0:00:01
+ 28639232 96% 2.75MB/s 0:00:00
+ 29712591 100% 2.94MB/s 0:00:09 (xfer#1, to-check=0/1)
+
+sent 29716398 bytes received 42 bytes 2584038.26 bytes/sec
+total size is 29712591 speedup is 1.00
+[2014-05-25 18:21:18 CEST] Transferrer: Uploaded 06_exercise-2.mp4
+[2014-05-25 18:21:18 CEST] Pusher: Syncing with diskstation
+
+WORM-s276749404-m1400608181--An Introduction to d3.js - From Scattered to Scatterplot%07_binding-data-and-creating-elements-from-data.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4030464 1% 3.60MB/s 0:01:13
+ 7307264 2% 3.29MB/s 0:01:19
+remote: merge git-annex 10190848 3% 3.11MB/s 0:01:23
+ 13336576 4% 3.06MB/s 0:01:24
+[2014-05-25 18:21:24 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 07153a2..0a42aa9 git-annex -> synced/git-annex
+ 16482304 5% 2.89MB/s 0:01:27
+ 19496960 7% 2.85MB/s 0:01:28
+ 22642688 8% 2.89MB/s 0:01:25
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 1749643..e6798ff git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 0a42aa9412e0a0f03e8edaa7a37eb0d6273bc4d9 but expected 07153a2d49264b9792593fc016c00499ce87f70b
+ ! 07153a2..0a42aa9 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 25788416 9% 2.88MB/s 0:01:25
+ 28803072 10% 2.84MB/s 0:01:25
+ 31817728 11% 2.84MB/s 0:01:24
+ 34832384 12% 2.83MB/s 0:01:23
+ 37978112 13% 2.84MB/s 0:01:22
+ 40828928 14% 2.82MB/s 0:01:21
+ 43974656 15% 2.83MB/s 0:01:20
+ 46956544 16% 2.84MB/s 0:01:18
+ 50233344 18% 2.88MB/s 0:01:16
+ 53248000 19% 2.91MB/s 0:01:15
+ 56262656 20% 2.88MB/s 0:01:14
+ 59146240 21% 2.84MB/s 0:01:14
+ 62291968 22% 2.81MB/s 0:01:14
+ 65699840 23% 2.89MB/s 0:01:11
+ 68812800 24% 2.91MB/s 0:01:09
+ 71892992 25% 2.97MB/s 0:01:07
+ 75038720 27% 2.95MB/s 0:01:06
+ 78020608 28% 2.87MB/s 0:01:07
+ 81166336 29% 2.88MB/s 0:01:06
+ 84049920 30% 2.83MB/s 0:01:06
+ 86769664 31% 2.76MB/s 0:01:07
+ 89653248 32% 2.73MB/s 0:01:06
+ 92536832 33% 2.66MB/s 0:01:07
+ 95420416 34% 2.66MB/s 0:01:06
+ 98304000 35% 2.69MB/s 0:01:04
+ 101187584 36% 2.69MB/s 0:01:03
+ 104202240 37% 2.75MB/s 0:01:01
+ 107216896 38% 2.76MB/s 0:00:59
+ 110100480 39% 2.77MB/s 0:00:58
+ 113016832 40% 2.78MB/s 0:00:57
+ 115867648 41% 2.74MB/s 0:00:57
+ 118620160 42% 2.71MB/s 0:00:57
+ 121503744 43% 2.69MB/s 0:00:56
+ 124452864 44% 2.67MB/s 0:00:55
+ 127467520 46% 2.70MB/s 0:00:53
+ 130220032 47% 2.69MB/s 0:00:53
+ 132972544 48% 2.68MB/s 0:00:52
+ 135987200 49% 2.70MB/s 0:00:50
+ 138870784 50% 2.68MB/s 0:00:50
+ 141754368 51% 2.72MB/s 0:00:48
+ 144474112 52% 2.71MB/s 0:00:47
+ 147357696 53% 2.68MB/s 0:00:47
+ 150372352 54% 2.70MB/s 0:00:45
+ 153387008 55% 2.71MB/s 0:00:44
+ 156401664 56% 2.76MB/s 0:00:42
+ 159416320 57% 2.79MB/s 0:00:41
+ 162299904 58% 2.78MB/s 0:00:40
+ 165445632 59% 2.80MB/s 0:00:38
+ 168460288 60% 2.82MB/s 0:00:37
+ 171343872 61% 2.79MB/s 0:00:36
+ 174227456 62% 2.78MB/s 0:00:36
+ 177373184 64% 2.78MB/s 0:00:34
+ 180387840 65% 2.79MB/s 0:00:33
+ 183533568 66% 2.86MB/s 0:00:31
+ 186548224 67% 2.87MB/s 0:00:30
+ 189562880 68% 2.81MB/s 0:00:30
+ 192446464 69% 2.75MB/s 0:00:29
+ 195461120 70% 2.71MB/s 0:00:29
+ 198475776 71% 2.73MB/s 0:00:28
+ 201359360 72% 2.74MB/s 0:00:26
+ 204308480 73% 2.78MB/s 0:00:25
+ 207060992 74% 2.72MB/s 0:00:24
+ 210206720 75% 2.77MB/s 0:00:23
+ 212828160 76% 2.64MB/s 0:00:23
+ 215318528 77% 2.54MB/s 0:00:23
+ 218333184 78% 2.58MB/s 0:00:22
+ 221347840 79% 2.53MB/s 0:00:21
+ 224362496 81% 2.67MB/s 0:00:19
+ 227377152 82% 2.77MB/s 0:00:17
+ 230129664 83% 2.74MB/s 0:00:16
+ 233078784 84% 2.74MB/s 0:00:15
+ 236093440 85% 2.74MB/s 0:00:14
+ 239108096 86% 2.76MB/s 0:00:13
+ 242122752 87% 2.83MB/s 0:00:11
+ 245006336 88% 2.81MB/s 0:00:11
+ 247824384 89% 2.77MB/s 0:00:10
+ 250707968 90% 2.70MB/s 0:00:09
+ 253460480 91% 2.63MB/s 0:00:08
+ 256606208 92% 2.69MB/s 0:00:07
+ 259620864 93% 2.73MB/s 0:00:06
+ 262504448 94% 2.75MB/s 0:00:05
+ 264994816 95% 2.63MB/s 0:00:04
+ 266960896 96% 2.37MB/s 0:00:04
+ 268795904 97% 2.11MB/s 0:00:03
+ 271155200 97% 1.99MB/s 0:00:02
+ 274038784 99% 2.14MB/s 0:00:01
+ 276749404 100% 2.75MB/s 0:01:36 (xfer#1, to-check=0/1)
+
+sent 276783402 bytes received 42 bytes 2838804.55 bytes/sec
+total size is 276749404 speedup is 1.00
+[2014-05-25 18:22:56 CEST] Transferrer: Uploaded 07_bindin..-data.mp4
+[2014-05-25 18:22:56 CEST] Pusher: Syncing with diskstation
+
+WORM-s58893321-m1400608603--An Introduction to d3.js - From Scattered to Scatterplot%08_exercise-3.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4227072 7% 3.98MB/s 0:00:13
+ 7241728 12% 3.38MB/s 0:00:14
+ 10125312 17% 3.14MB/s 0:00:15
+ 13139968 22% 3.05MB/s 0:00:14
+ 16023552 27% 2.74MB/s 0:00:15
+remote: merge git-annex 18907136 32% 2.72MB/s 0:00:14
+[2014-05-25 18:23:04 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 0a42aa9..961714e git-annex -> synced/git-annex
+ 21790720 37% 2.72MB/s 0:00:13
+ 24870912 42% 2.72MB/s 0:00:12
+ 27754496 47% 2.72MB/s 0:00:11
+ 30638080 52% 2.70MB/s 0:00:10
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ e6798ff..c074ab0 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 961714e5af3653435346ed0f7ae7e19efb899c6f but expected 0a42aa9412e0a0f03e8edaa7a37eb0d6273bc4d9
+ ! 0a42aa9..961714e synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 33980416 57% 2.81MB/s 0:00:08
+ 36864000 62% 2.78MB/s 0:00:07
+ 39616512 67% 2.76MB/s 0:00:06
+ 42369024 71% 2.75MB/s 0:00:05
+ 45252608 76% 2.64MB/s 0:00:05
+ 48136192 81% 2.64MB/s 0:00:03
+ 51150848 86% 2.67MB/s 0:00:02
+ 53903360 91% 2.65MB/s 0:00:01
+ 56655872 96% 2.63MB/s 0:00:00
+ 58893321 100% 2.76MB/s 0:00:20 (xfer#1, to-check=0/1)
+
+sent 58900692 bytes received 42 bytes 2617810.40 bytes/sec
+total size is 58893321 speedup is 1.00
+[2014-05-25 18:23:18 CEST] Transferrer: Uploaded 08_exercise-3.mp4
+[2014-05-25 18:23:18 CEST] Pusher: Syncing with diskstation
+
+WORM-s134947390-m1400608565--An Introduction to d3.js - From Scattered to Scatterplot%09_transitions.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4161536 3% 3.82MB/s 0:00:33
+ 7045120 5% 3.24MB/s 0:00:38
+remote: merge git-annex 9928704 7% 3.04MB/s 0:00:40
+ 13205504 9% 3.05MB/s 0:00:38
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 961714e..dbdf944 git-annex -> synced/git-annex
+[2014-05-25 18:23:24 CEST] RemoteControl: Syncing with diskstation
+ 16220160 12% 2.79MB/s 0:00:41
+ 19103744 14% 2.80MB/s 0:00:40
+ 21856256 16% 2.79MB/s 0:00:39
+ 24576000 18% 2.66MB/s 0:00:40
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ c074ab0..1e5f9f1 git-annex -> diskstation/git-annex
+ 27459584 20% 2.64MB/s 0:00:39
+ 30474240 22% 2.68MB/s 0:00:38
+ 33357824 24% 2.70MB/s 0:00:36
+ 36372480 26% 2.76MB/s 0:00:34
+ 39256064 29% 2.76MB/s 0:00:33
+ 42139648 31% 2.73MB/s 0:00:33
+ 45023232 33% 2.73MB/s 0:00:32
+ 47775744 35% 2.66MB/s 0:00:31
+ 50659328 37% 2.66MB/s 0:00:30
+ 53542912 39% 2.65MB/s 0:00:29
+ 56557568 41% 2.66MB/s 0:00:28
+ 59310080 43% 2.67MB/s 0:00:27
+ 62029824 45% 2.64MB/s 0:00:26
+ 64782336 48% 2.62MB/s 0:00:26
+ 67665920 50% 2.61MB/s 0:00:25
+ 70680576 52% 2.64MB/s 0:00:23
+ 73695232 54% 2.70MB/s 0:00:22
+ 76709888 56% 2.77MB/s 0:00:20
+ 79593472 58% 2.76MB/s 0:00:19
+ 82608128 61% 2.79MB/s 0:00:18
+ 85622784 63% 2.81MB/s 0:00:17
+ 88506368 65% 2.76MB/s 0:00:16
+ 91619328 67% 2.81MB/s 0:00:15
+ 94502912 70% 2.78MB/s 0:00:14
+ 97255424 72% 2.72MB/s 0:00:13
+ 100270080 74% 2.76MB/s 0:00:12
+ 102760448 76% 2.61MB/s 0:00:12
+ 105349120 78% 2.54MB/s 0:00:11
+ 108232704 80% 2.57MB/s 0:00:10
+ 111247360 82% 2.56MB/s 0:00:09
+ 114262016 84% 2.68MB/s 0:00:07
+ 117145600 86% 2.76MB/s 0:00:06
+ 120029184 88% 2.75MB/s 0:00:05
+ 123043840 91% 2.76MB/s 0:00:04
+ 125927424 93% 2.74MB/s 0:00:03
+ 128942080 95% 2.76MB/s 0:00:02
+ 131694592 97% 2.74MB/s 0:00:01
+ 134447104 99% 2.64MB/s 0:00:00
+ 134947390 100% 2.72MB/s 0:00:47 (xfer#1, to-check=0/1)
+
+sent 134964047 bytes received 42 bytes 2726547.25 bytes/sec
+total size is 134947390 speedup is 1.00
+[2014-05-25 18:24:08 CEST] Transferrer: Uploaded 09_transitions.mp4
+[2014-05-25 18:24:08 CEST] Pusher: Syncing with diskstation
+
+WORM-s106802484-m1399168180--An Introduction to d3.js - From Scattered to Scatterplot%10_scales-2.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4128768 3% 3.75MB/s 0:00:26
+ 7143424 6% 3.27MB/s 0:00:29
+ 10027008 9% 3.10MB/s 0:00:30
+remote: merge git-annex 13008896 12% 3.01MB/s 0:00:30
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+[2014-05-25 18:24:13 CEST] RemoteControl: Syncing with diskstation
+ dbdf944..cef70b3 git-annex -> synced/git-annex
+ 16154624 15% 2.81MB/s 0:00:31
+ 19169280 17% 2.81MB/s 0:00:30
+ 22183936 20% 2.83MB/s 0:00:29
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 1e5f9f1..af18e69 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at cef70b30ddce59c2b22b370b25420da2fa7e2b49 but expected dbdf94438b7e48971a594c7647721f4821c8cff2
+ ! dbdf944..cef70b3 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 24936448 23% 2.78MB/s 0:00:28
+ 27688960 25% 2.70MB/s 0:00:28
+ 30834688 28% 2.73MB/s 0:00:27
+ 32899072 30% 2.50MB/s 0:00:28
+ 35749888 33% 2.53MB/s 0:00:27
+ 38764544 36% 2.56MB/s 0:00:25
+ 41779200 39% 2.53MB/s 0:00:25
+ 44072960 41% 2.60MB/s 0:00:23
+ 47415296 44% 2.71MB/s 0:00:21
+ 50036736 46% 2.65MB/s 0:00:20
+ 52789248 49% 2.59MB/s 0:00:20
+ 55672832 52% 2.72MB/s 0:00:18
+ 58687488 54% 2.64MB/s 0:00:17
+ 61571072 57% 2.69MB/s 0:00:16
+ 64585728 60% 2.75MB/s 0:00:14
+ 67207168 62% 2.65MB/s 0:00:14
+ 69304320 64% 2.44MB/s 0:00:14
+ 72318976 67% 2.46MB/s 0:00:13
+ 75071488 70% 2.42MB/s 0:00:12
+ 78020608 73% 2.53MB/s 0:00:11
+ 80904192 75% 2.71MB/s 0:00:09
+ 83787776 78% 2.68MB/s 0:00:08
+ 86540288 81% 2.66MB/s 0:00:07
+ 89423872 83% 2.64MB/s 0:00:06
+ 92372992 86% 2.67MB/s 0:00:05
+ 95256576 89% 2.68MB/s 0:00:04
+ 98140160 91% 2.72MB/s 0:00:03
+ 101154816 94% 2.74MB/s 0:00:02
+ 104169472 97% 2.73MB/s 0:00:00
+ 106802484 100% 2.70MB/s 0:00:37 (xfer#1, to-check=0/1)
+
+sent 106815702 bytes received 42 bytes 2704196.05 bytes/sec
+total size is 106802484 speedup is 1.00
+[2014-05-25 18:24:47 CEST] Transferrer: Uploaded 10_scales-2.mp4
+[2014-05-25 18:24:47 CEST] Pusher: Syncing with diskstation
+
+WORM-s106802484-m1399168180--An Introduction to d3.js - From Scattered to Scatterplot%10_scales.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 3964928 3% 3.74MB/s 0:00:26
+ 6848512 6% 3.19MB/s 0:00:30
+ 9994240 9% 3.08MB/s 0:00:30
+remote: merge git-annex 12877824 12% 2.97MB/s 0:00:30
+ 15892480 14% 2.74MB/s 0:00:32
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+[2014-05-25 18:24:53 CEST] RemoteControl: Syncing with diskstation
+ cef70b3..bc92e4a git-annex -> synced/git-annex
+ 18644992 17% 2.71MB/s 0:00:31
+ 20873216 19% 2.51MB/s 0:00:33
+ 23429120 21% 2.39MB/s 0:00:34
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ af18e69..7b0c500 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at bc92e4a867338760dec749af77a9262591b9c43a but expected cef70b30ddce59c2b22b370b25420da2fa7e2b49
+ ! cef70b3..bc92e4a synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 27099136 25% 2.52MB/s 0:00:30
+ 29982720 28% 2.56MB/s 0:00:29
+ 32866304 30% 2.72MB/s 0:00:26
+ 35880960 33% 2.88MB/s 0:00:24
+ 38633472 36% 2.69MB/s 0:00:24
+ 41517056 38% 2.68MB/s 0:00:23
+ 44662784 41% 2.74MB/s 0:00:22
+ 47546368 44% 2.72MB/s 0:00:21
+ 50298880 47% 2.72MB/s 0:00:20
+ 53182464 49% 2.72MB/s 0:00:19
+ 56066048 52% 2.66MB/s 0:00:18
+ 58949632 55% 2.67MB/s 0:00:17
+ 61308928 57% 2.59MB/s 0:00:17
+ 63799296 59% 2.51MB/s 0:00:16
+ 66781184 62% 2.54MB/s 0:00:15
+ 69697536 65% 2.53MB/s 0:00:14
+ 72712192 68% 2.67MB/s 0:00:12
+ 75595776 70% 2.77MB/s 0:00:10
+ 78479360 73% 2.74MB/s 0:00:10
+ 81428480 76% 2.75MB/s 0:00:09
+ 84312064 78% 2.73MB/s 0:00:08
+ 87195648 81% 2.73MB/s 0:00:07
+ 90210304 84% 2.77MB/s 0:00:05
+ 93192192 87% 2.76MB/s 0:00:04
+ 96075776 89% 2.74MB/s 0:00:03
+ 98959360 92% 2.71MB/s 0:00:02
+ 101974016 95% 2.68MB/s 0:00:01
+ 104857600 98% 2.68MB/s 0:00:00
+ 106802484 100% 2.71MB/s 0:00:37 (xfer#1, to-check=0/1)
+
+sent 106815700 bytes received 42 bytes 2704196.00 bytes/sec
+total size is 106802484 speedup is 1.00
+[2014-05-25 18:25:26 CEST] Transferrer: Uploaded 10_scales.mp4
+[2014-05-25 18:25:26 CEST] Pusher: Syncing with diskstation
+
+WORM-s132805496-m1399168071--An Introduction to d3.js - From Scattered to Scatterplot%11_axes.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4096000 3% 3.82MB/s 0:00:32
+ 7110656 5% 3.32MB/s 0:00:37
+ 9863168 7% 3.07MB/s 0:00:39
+remote: merge git-annex 12877824 9% 3.01MB/s 0:00:38
+ 15826944 11% 2.76MB/s 0:00:41
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+[2014-05-25 18:25:33 CEST] RemoteControl: Syncing with diskstation
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ bc92e4a..cf6d3d1 git-annex -> synced/git-annex
+ 18710528 14% 2.74MB/s 0:00:40
+ 21594112 16% 2.78MB/s 0:00:39
+ 24477696 18% 2.75MB/s 0:00:38
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 7b0c500..8393191 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at cf6d3d1e7ec71ad4d9c4a0e5256f361c58ca5e75 but expected bc92e4a867338760dec749af77a9262591b9c43a
+ ! bc92e4a..cf6d3d1 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 27230208 20% 2.70MB/s 0:00:38
+ 29949952 22% 2.63MB/s 0:00:38
+ 32964608 24% 2.64MB/s 0:00:36
+ 35848192 26% 2.64MB/s 0:00:35
+ 38862848 29% 2.69MB/s 0:00:34
+ 41877504 31% 2.77MB/s 0:00:32
+ 44761088 33% 2.73MB/s 0:00:31
+ 47513600 35% 2.71MB/s 0:00:30
+ 50135040 37% 2.61MB/s 0:00:30
+ 53280768 40% 2.66MB/s 0:00:29
+ 56164352 42% 2.67MB/s 0:00:28
+ 59179008 44% 2.71MB/s 0:00:26
+ 62062592 46% 2.79MB/s 0:00:24
+ 64946176 48% 2.73MB/s 0:00:24
+ 68091904 51% 2.82MB/s 0:00:22
+ 71106560 53% 2.84MB/s 0:00:21
+ 74055680 55% 2.83MB/s 0:00:20
+ 77070336 58% 2.85MB/s 0:00:19
+ 79953920 60% 2.77MB/s 0:00:18
+ 82837504 62% 2.74MB/s 0:00:17
+ 85590016 64% 2.72MB/s 0:00:16
+ 88342528 66% 2.63MB/s 0:00:16
+ 91095040 68% 2.60MB/s 0:00:15
+ 94044160 70% 2.62MB/s 0:00:14
+ 97058816 73% 2.66MB/s 0:00:13
+ 99549184 74% 2.60MB/s 0:00:12
+ 101515264 76% 2.41MB/s 0:00:12
+ 103481344 77% 2.18MB/s 0:00:13
+ 105578496 79% 1.93MB/s 0:00:13
+ 107806720 81% 1.89MB/s 0:00:12
+ 110821376 83% 2.12MB/s 0:00:10
+ 113704960 85% 2.34MB/s 0:00:07
+ 116719616 87% 2.60MB/s 0:00:06
+ 119603200 90% 2.77MB/s 0:00:04
+ 122486784 92% 2.73MB/s 0:00:03
+ 125435904 94% 2.74MB/s 0:00:02
+ 128450560 96% 2.74MB/s 0:00:01
+ 131268608 98% 2.70MB/s 0:00:00
+ 132805496 100% 2.67MB/s 0:00:47 (xfer#1, to-check=0/1)
+
+sent 132821882 bytes received 42 bytes 2683271.19 bytes/sec
+total size is 132805496 speedup is 1.00
+[2014-05-25 18:26:16 CEST] Transferrer: Uploaded 11_axes.mp4
+[2014-05-25 18:26:16 CEST] Pusher: Syncing with diskstation
+
+WORM-s120549770-m1399667258--An Introduction to d3.js - From Scattered to Scatterplot%12_advanced-techniques.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4096000 3% 3.77MB/s 0:00:30
+ 7110656 5% 3.31MB/s 0:00:33
+ 10125312 8% 3.15MB/s 0:00:34
+remote: merge git-annex 13008896 10% 3.04MB/s 0:00:34
+[2014-05-25 18:26:22 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ cf6d3d1..fef357a git-annex -> synced/git-annex
+ 15892480 13% 2.78MB/s 0:00:36
+ 18776064 15% 2.75MB/s 0:00:36
+ 21659648 17% 2.72MB/s 0:00:35
+ 24608768 20% 2.73MB/s 0:00:34
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 8393191..9ef8d81 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at fef357aaed77f1b94344c0aeea71b30a50de247d but expected cf6d3d1e7ec71ad4d9c4a0e5256f361c58ca5e75
+ ! cf6d3d1..fef357a synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 27623424 22% 2.75MB/s 0:00:33
+ 30507008 25% 2.74MB/s 0:00:32
+ 33390592 27% 2.72MB/s 0:00:31
+ 36405248 30% 2.74MB/s 0:00:30
+ 39419904 32% 2.73MB/s 0:00:29
+ 42434560 35% 2.76MB/s 0:00:27
+ 45580288 37% 2.83MB/s 0:00:25
+ 48594944 40% 2.83MB/s 0:00:24
+ 51576832 42% 2.83MB/s 0:00:23
+ 54231040 44% 2.76MB/s 0:00:23
+ 57245696 47% 2.74MB/s 0:00:22
+ 60260352 49% 2.73MB/s 0:00:21
+ 63275008 52% 2.73MB/s 0:00:20
+ 66289664 54% 2.80MB/s 0:00:18
+ 69304320 57% 2.80MB/s 0:00:17
+ 72187904 59% 2.77MB/s 0:00:17
+ 75071488 62% 2.74MB/s 0:00:16
+ 78086144 64% 2.73MB/s 0:00:15
+ 80969728 67% 2.70MB/s 0:00:14
+ 84115456 69% 2.75MB/s 0:00:12
+ 87130112 72% 2.79MB/s 0:00:11
+ 90013696 74% 2.77MB/s 0:00:10
+ 92766208 76% 2.73MB/s 0:00:09
+ 95780864 79% 2.70MB/s 0:00:08
+ 98664448 81% 2.68MB/s 0:00:07
+ 101679104 84% 2.71MB/s 0:00:06
+ 104693760 86% 2.78MB/s 0:00:05
+ 107511808 89% 2.74MB/s 0:00:04
+ 110526464 91% 2.74MB/s 0:00:03
+ 113508352 94% 2.75MB/s 0:00:02
+ 116654080 96% 2.77MB/s 0:00:01
+ 119668736 99% 2.82MB/s 0:00:00
+ 120549770 100% 2.79MB/s 0:00:41 (xfer#1, to-check=0/1)
+
+sent 120564675 bytes received 42 bytes 2771602.69 bytes/sec
+total size is 120549770 speedup is 1.00
+[2014-05-25 18:26:59 CEST] Transferrer: Uploaded 12_advanc..iques.mp4
+[2014-05-25 18:27:00 CEST] Pusher: Syncing with diskstation
+
+WORM-s17591948-m1399167639--An Introduction to d3.js - From Scattered to Scatterplot%13_conclusion.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 3997696 22% 3.68MB/s 0:00:03
+ 6881280 39% 3.16MB/s 0:00:03
+ 9764864 55% 2.99MB/s 0:00:02
+remote: merge git-annex 12910592 73% 2.99MB/s 0:00:01
+ 15794176 89% 2.74MB/s 0:00:00
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+[2014-05-25 18:27:07 CEST] RemoteControl: Syncing with diskstation
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 17591948 100% 2.92MB/s 0:00:05 (xfer#1, to-check=0/1)
+ fef357a..28d7559 git-annex -> synced/git-annex
+
+sent 17594275 bytes received 42 bytes 2345908.93 bytes/sec
+total size is 17591948 speedup is 1.00
+[2014-05-25 18:27:08 CEST] Transferrer: Uploaded 13_conclusion.mp4
+
+WORM-s1250093-m1389398522--C,43,43 Memory Management%01_introduction.mp4
+ 32768 2% 0.00kB/s 0:00:00
+ 1250093 100% 25.24MB/s 0:00:00 (xfer#1, to-check=0/1)
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 9ef8d81..740fecd git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 28d7559836e91e16f98a532c30e5a4cbaef12250 but expected fef357aaed77f1b94344c0aeea71b30a50de247d
+ ! fef357a..28d7559 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+sent 1250398 bytes received 42 bytes 833626.67 bytes/sec
+total size is 1250093 speedup is 1.00
+[2014-05-25 18:27:10 CEST] Transferrer: Uploaded 01_introduction.mp4
+[2014-05-25 18:27:11 CEST] Pusher: Syncing with diskstation
+
+WORM-s4072461-m1389398387--C,43,43 Memory Management%02_leaks-and-overruns.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 3801088 93% 3.52MB/s 0:00:00
+ 4072461 100% 3.35MB/s 0:00:01 (xfer#1, to-check=0/1)
+remote: merge git-annex
+sent 4073116 bytes received 42 bytes 1629263.20 bytes/sec
+total size is 4072461 speedup is 1.00
+[2014-05-25 18:27:17 CEST] Transferrer: Uploaded 02_leaks-..rruns.mp4
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+
+WORM-s10885066-m1389398446--C,43,43 Memory Management%03_stl-vector-methods-range-checking-and-sentinels.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 18:27:18 CEST] RemoteControl: Syncing with diskstation
+ 28d7559..d7a7f79 git-annex -> synced/git-annex
+ 3964928 36% 3.71MB/s 0:00:01
+ 6979584 64% 3.28MB/s 0:00:01
+ 9797632 90% 3.08MB/s 0:00:00
+ 10885066 100% 3.07MB/s 0:00:03 (xfer#1, to-check=0/1)
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 740fecd..8700b31 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at d7a7f7988fd67d9cd827311157f7633da55d2e85 but expected 28d7559836e91e16f98a532c30e5a4cbaef12250
+ ! 28d7559..d7a7f79 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+sent 10886583 bytes received 42 bytes 1979386.36 bytes/sec
+total size is 10885066 speedup is 1.00
+[2014-05-25 18:27:22 CEST] Transferrer: Uploaded 03_stl-ve..inels.mp4
+
+WORM-s6830209-m1389398548--C,43,43 Memory Management%04_memory-leaks-part-1.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 18:27:23 CEST] Pusher: Syncing with diskstation
+ 3964928 58% 3.72MB/s 0:00:00
+ 6830209 100% 3.23MB/s 0:00:00
+ 6830209 100% 3.23MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 6831201 bytes received 42 bytes 1951783.71 bytes/sec
+total size is 6830209 speedup is 1.00
+[2014-05-25 18:27:25 CEST] Transferrer: Uploaded 04_memory..art-1.mp4
+
+WORM-s4500501-m1389398494--C,43,43 Memory Management%05_memory-leaks-part-2.mp4
+ 32768 0% 0.00kB/s 0:00:00
+remote: merge git-annex 3833856 85% 3.57MB/s 0:00:00
+ 4500501 100% 3.39MB/s 0:00:01 (xfer#1, to-check=0/1)
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ d7a7f79..963ef9d git-annex -> synced/git-annex
+[2014-05-25 18:27:28 CEST] RemoteControl: Syncing with diskstation
+
+sent 4501209 bytes received 42 bytes 1286071.71 bytes/sec
+total size is 4500501 speedup is 1.00
+[2014-05-25 18:27:28 CEST] Transferrer: Uploaded 05_memory..art-2.mp4
+
+WORM-s4479532-m1389398463--C,43,43 Memory Management%06_pointers-pitfalls-and-best-practices.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4292608 95% 4.06MB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 8700b31..8a3838b git-annex -> diskstation/git-annex
+ 4479532 100% 4.05MB/s 0:00:01 (xfer#1, to-check=0/1)
+
+sent 4480253 bytes received 42 bytes 1280084.29 bytes/sec
+total size is 4479532 speedup is 1.00
+[2014-05-25 18:27:31 CEST] Transferrer: Uploaded 06_pointe..tices.mp4
+
+WORM-s9775707-m1389398514--C,43,43 Memory Management%07_initialize-everything-trust-but-verify.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 18:27:32 CEST] Pusher: Syncing with diskstation
+ 4096000 41% 3.77MB/s 0:00:01
+ 7241728 74% 3.37MB/s 0:00:00
+ 9775707 100% 3.22MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 9777078 bytes received 42 bytes 2793462.86 bytes/sec
+total size is 9775707 speedup is 1.00
+[2014-05-25 18:27:34 CEST] Transferrer: Uploaded 07_initia..erify.mp4
+remote: merge git-annex
+WORM-s15498925-m1389398484--C,43,43 Memory Management%08_reading-and-writing-shared-assets.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 3964928 25% 3.69MB/s 0:00:03
+[2014-05-25 18:27:36 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 963ef9d..d7cb480 git-annex -> synced/git-annex
+ 6848512 44% 3.21MB/s 0:00:02
+ 9863168 63% 3.07MB/s 0:00:01
+ 13008896 83% 3.05MB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 8a3838b..9dc2149 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at d7cb4801b1d5172fa94c5ef5b952650404806c5e but expected 963ef9d37e0ca48e88afccc16e3d53a7dbe94a15
+ ! 963ef9d..d7cb480 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 15498925 100% 3.04MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 15500988 bytes received 42 bytes 2818369.09 bytes/sec
+total size is 15498925 speedup is 1.00
+[2014-05-25 18:27:41 CEST] Transferrer: Uploaded 08_readin..ssets.mp4
+[2014-05-25 18:27:41 CEST] Pusher: Syncing with diskstation
+
+WORM-s7479394-m1389398424--C,43,43 Memory Management%09_undefined-behaviour-and-other-bad-practices.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4030464 53% 3.77MB/s 0:00:00
+remote: merge git-annex 7045120 94% 3.28MB/s 0:00:00
+ 7479394 100% 3.24MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 7480490 bytes received 42 bytes 2137294.86 bytes/sec
+total size is 7479394 speedup is 1.00
+[2014-05-25 18:27:47 CEST] RemoteControl: Syncing with diskstation
+[2014-05-25 18:27:47 CEST] Transferrer: Uploaded 09_undefi..tices.mp4
+
+WORM-s5620037-m1389398373--C,43,43 Memory Management%10_the-heap-and-stl-wrappers.mp4
+ 32768 0% 0.00kB/s 0:00:00
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ d7cb480..cebe41e git-annex -> synced/git-annex
+ 4390912 78% 4.02MB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 9dc2149..2c100e7 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at cebe41ecefec0ba03838b77300b8213abff6e46f but expected d7cb4801b1d5172fa94c5ef5b952650404806c5e
+ ! d7cb480..cebe41e synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+[2014-05-25 18:27:48 CEST] RemoteControl: Syncing with diskstation
+ 5620037 100% 3.71MB/s 0:00:01 (xfer#1, to-check=0/1)
+
+sent 5620887 bytes received 42 bytes 2248371.60 bytes/sec
+total size is 5620037 speedup is 1.00
+[2014-05-25 18:27:50 CEST] Transferrer: Uploaded 10_the-he..ppers.mp4
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 2c100e7..7d585c6 git-annex -> diskstation/git-annex
+
+WORM-s1014080-m1389398563--C,43,43 Memory Management%11_about-the-author.mp4
+ 32768 3% 0.00kB/s 0:00:00
+ 1014080 100% 20.80MB/s 0:00:00 (xfer#1, to-check=0/1)
+
+sent 1014357 bytes received 42 bytes 676266.00 bytes/sec
+total size is 1014080 speedup is 1.00
+[2014-05-25 18:27:51 CEST] Transferrer: Uploaded 11_about-..uthor.mp4
+[2014-05-25 18:27:52 CEST] Pusher: Syncing with diskstation
+remote: merge git-annex (merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+[2014-05-25 18:27:56 CEST] RemoteControl: Syncing with diskstation
+ cebe41e..1f16e00 git-annex -> synced/git-annex
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 7d585c6..25d816f git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 1f16e00081100c31ba110cc6655ba98ce9c3ccf9 but expected cebe41ecefec0ba03838b77300b8213abff6e46f
+ ! cebe41e..1f16e00 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+[2014-05-25 19:02:45 CEST] main: Syncing with diskstation
+remote: merge git-annex ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 1f16e00..25d816f git-annex -> synced/git-annex
+[2014-05-25 19:16:16 CEST] NetWatcherFallback: Syncing with diskstation
+Everything up-to-date
+[2014-05-25 19:44:23 CEST] main: Syncing with diskstation
+remote: merge git-annex (merging synced/git-annex into git-annex...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 25d816f..af358a2 git-annex -> synced/git-annex
+
+WORM-s311796310-m1396397568--Lean UX Workshop%01_introduction.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 3440640 1% 3.23MB/s 0:01:33
+ 6062080 1% 2.75MB/s 0:01:48
+ 10518528 3% 3.15MB/s 0:01:33
+ 13926400 4% 3.15MB/s 0:01:32
+ 16023552 5% 2.73MB/s 0:01:45
+ 20611072 6% 3.22MB/s 0:01:28
+ 22315008 7% 2.58MB/s 0:01:49
+ 26509312 8% 2.76MB/s 0:01:40
+ 29655040 9% 3.10MB/s 0:01:28
+ 33325056 10% 2.61MB/s 0:01:44
+ 36470784 11% 2.96MB/s 0:01:30
+ 40402944 12% 2.88MB/s 0:01:32
+ 44072960 14% 2.96MB/s 0:01:28
+ 47218688 15% 3.17MB/s 0:01:21
+ 49840128 15% 3.04MB/s 0:01:24
+ 54296576 17% 3.12MB/s 0:01:20
+ 58228736 18% 3.20MB/s 0:01:17
+ 61636608 19% 3.23MB/s 0:01:15
+ 64782336 20% 3.40MB/s 0:01:11
+ 66879488 21% 2.92MB/s 0:01:21
+ 71335936 22% 3.07MB/s 0:01:16
+ 75005952 24% 3.15MB/s 0:01:13
+ 78151680 25% 3.14MB/s 0:01:12
+ 80510976 25% 3.01MB/s 0:01:15
+ 83918848 26% 2.76MB/s 0:01:20
+ 86540288 27% 2.48MB/s 0:01:28
+ 91291648 29% 2.83MB/s 0:01:15
+ 92831744 29% 2.75MB/s 0:01:17
+ 95977472 30% 2.66MB/s 0:01:19
+ 100433920 32% 3.08MB/s 0:01:06
+ 103841792 33% 2.77MB/s 0:01:13
+ 107446272 34% 3.30MB/s 0:01:00
+ 109608960 35% 3.12MB/s 0:01:03
+ 113803264 36% 3.09MB/s 0:01:02
+ 115900416 37% 2.68MB/s 0:01:11
+ 119308288 38% 2.62MB/s 0:01:11
+ 123240448 39% 2.97MB/s 0:01:01
+ 126648320 40% 2.61MB/s 0:01:09
+ 130580480 41% 3.09MB/s 0:00:57
+ 134643712 43% 3.26MB/s 0:00:52
+ 135561216 43% 2.65MB/s 0:01:04
+ 140017664 44% 3.11MB/s 0:00:53
+ 142639104 45% 2.82MB/s 0:00:58
+ 146866176 47% 2.87MB/s 0:00:56
+ 150241280 48% 3.46MB/s 0:00:45
+ 152338432 48% 2.80MB/s 0:00:55
+ 157220864 50% 3.31MB/s 0:00:45
+ 160464896 51% 2.88MB/s 0:00:51
+ 165085184 52% 3.14MB/s 0:00:45
+ 167542784 53% 3.35MB/s 0:00:42
+ 171638784 55% 3.18MB/s 0:00:43
+ 172785664 55% 2.78MB/s 0:00:48
+ 176979968 56% 2.67MB/s 0:00:49
+ 179601408 57% 2.48MB/s 0:00:52
+ 184254464 59% 2.60MB/s 0:00:47
+ 187432960 60% 3.16MB/s 0:00:38
+ 190742528 61% 2.96MB/s 0:00:39
+ 194412544 62% 3.48MB/s 0:00:32
+ 197525504 63% 3.12MB/s 0:00:35
+ 201064448 64% 3.19MB/s 0:00:33
+ 203980800 65% 3.01MB/s 0:00:35
+ 208699392 66% 3.25MB/s 0:00:31
+ 212369408 68% 3.36MB/s 0:00:28
+ 215515136 69% 3.27MB/s 0:00:28
+ 217350144 69% 3.04MB/s 0:00:30
+ 221806592 71% 2.99MB/s 0:00:29
+ 225378304 72% 2.94MB/s 0:00:28
+ 228622336 73% 2.98MB/s 0:00:27
+ 231243776 74% 3.13MB/s 0:00:25
+ 233603072 74% 2.59MB/s 0:00:29
+ 237273088 76% 2.35MB/s 0:00:30
+ 239894528 76% 2.22MB/s 0:00:31
+ 242515968 77% 2.07MB/s 0:00:32
+ 244350976 78% 1.97MB/s 0:00:33
+ 246448128 79% 1.87MB/s 0:00:34
+ 250118144 80% 1.73MB/s 0:00:34
+ 253263872 81% 2.00MB/s 0:00:28
+ 254312448 81% 1.80MB/s 0:00:31
+ 255885312 82% 1.58MB/s 0:00:34
+ 257720320 82% 1.33MB/s 0:00:39
+ 259817472 83% 1.01MB/s 0:00:50
+ 261914624 84% 1.06MB/s 0:00:45
+ 264011776 84% 1.08MB/s 0:00:43
+ 265584640 85% 1.16MB/s 0:00:39
+ 267419648 85% 1.21MB/s 0:00:35
+ 272662528 87% 2.00MB/s 0:00:19
+ 276856832 88% 2.77MB/s 0:00:12
+ 278953984 89% 2.81MB/s 0:00:11
+ 283410432 90% 3.51MB/s 0:00:07
+ 288358400 92% 3.47MB/s 0:00:06
+ 292323328 93% 3.32MB/s 0:00:05
+ 296714240 95% 3.93MB/s 0:00:03
+ 300908544 96% 3.95MB/s 0:00:02
+ 303333376 97% 3.30MB/s 0:00:02
+ 307789824 98% 3.53MB/s 0:00:01
+ 310673408 99% 2.89MB/s 0:00:00
+ 311796310 100% 2.73MB/s 0:01:48 (xfer#1, to-check=0/1)
+
+sent 311834516 bytes received 42 bytes 2822032.20 bytes/sec
+total size is 311796310 speedup is 1.00
+[2014-05-25 19:46:46 CEST] Transferrer: Uploaded 01_introduction.mp4
+[2014-05-25 19:46:46 CEST] Pusher: Syncing with diskstation
+
+WORM-s197776451-m1396396404--Lean UX Workshop%02_nordstrom-case-study.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5177344 2% 4.78MB/s 0:00:39
+ 8683520 4% 3.74MB/s 0:00:49
+ 13139968 6% 3.33MB/s 0:00:54
+remote: merge git-annex 18382848 9% 3.63MB/s 0:00:48
+ 22315008 11% 3.16MB/s 0:00:54
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ af358a2..3b93fc5 git-annex -> synced/git-annex
+[2014-05-25 19:46:54 CEST] RemoteControl: Syncing with diskstation
+ 26902528 13% 3.47MB/s 0:00:48
+ 29917184 15% 3.51MB/s 0:00:46
+ 31653888 16% 2.82MB/s 0:00:57
+ 33849344 17% 2.64MB/s 0:01:00
+ 36995072 18% 2.30MB/s 0:01:08
+ 41189376 20% 2.62MB/s 0:00:58
+ 44859392 22% 2.97MB/s 0:00:50
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 25d816f..b7c06ab git-annex -> diskstation/git-annex
+ 50102272 25% 3.67MB/s 0:00:39
+ 52199424 26% 3.41MB/s 0:00:41
+ 56655872 28% 3.47MB/s 0:00:39
+ 60719104 30% 3.64MB/s 0:00:36
+ 64520192 32% 3.31MB/s 0:00:39
+ 68714496 34% 3.85MB/s 0:00:32
+ 72876032 36% 3.79MB/s 0:00:32
+ 76054528 38% 3.60MB/s 0:00:32
+ 80216064 40% 3.70MB/s 0:00:31
+ 83656704 42% 3.25MB/s 0:00:34
+ 88899584 44% 3.48MB/s 0:00:30
+ 92995584 47% 3.69MB/s 0:00:27
+ 96763904 48% 3.62MB/s 0:00:27
+ 100925440 51% 4.08MB/s 0:00:23
+ 104628224 52% 3.73MB/s 0:00:24
+ 109084672 55% 3.80MB/s 0:00:22
+ 111443968 56% 3.40MB/s 0:00:24
+ 116752384 59% 3.66MB/s 0:00:21
+ 119046144 60% 3.33MB/s 0:00:23
+ 124026880 62% 3.44MB/s 0:00:20
+ 128483328 64% 3.98MB/s 0:00:16
+ 132710400 67% 3.73MB/s 0:00:17
+ 136871936 69% 4.17MB/s 0:00:14
+ 141131776 71% 4.00MB/s 0:00:13
+ 145522688 73% 4.01MB/s 0:00:12
+ 149716992 75% 4.02MB/s 0:00:11
+ 154173440 77% 4.08MB/s 0:00:10
+ 158433280 80% 4.11MB/s 0:00:09
+ 162758656 82% 4.08MB/s 0:00:08
+ 166952960 84% 4.08MB/s 0:00:07
+ 170459136 86% 3.85MB/s 0:00:06
+ 174817280 88% 3.87MB/s 0:00:05
+ 179011584 90% 3.85MB/s 0:00:04
+ 183238656 92% 3.86MB/s 0:00:03
+ 187367424 94% 4.01MB/s 0:00:02
+ 191561728 96% 3.96MB/s 0:00:01
+ 195887104 99% 3.98MB/s 0:00:00
+ 197776451 100% 3.62MB/s 0:00:52 (xfer#1, to-check=0/1)
+
+sent 197800745 bytes received 42 bytes 3697210.97 bytes/sec
+total size is 197776451 speedup is 1.00
+[2014-05-25 19:47:40 CEST] Transferrer: Uploaded 02_nordst..study.mp4
+[2014-05-25 19:47:40 CEST] Pusher: Syncing with diskstation
+
+WORM-s401429383-m1396397422--Lean UX Workshop%03_assumptions-and-hypotheses.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5472256 1% 5.18MB/s 0:01:14
+remote: merge git-annex 9895936 2% 4.61MB/s 0:01:22
+ 14188544 3% 4.41MB/s 0:01:25
+[2014-05-25 19:47:45 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 3b93fc5..02a8a6a git-annex -> synced/git-annex
+ 18808832 4% 4.39MB/s 0:01:25
+ 22315008 5% 3.92MB/s 0:01:34
+ 26935296 6% 3.98MB/s 0:01:31
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ b7c06ab..c1859f2 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 02a8a6a6016fd1f36acc39b27cd9e2f1b24fd394 but expected 3b93fc5ace21818579a161200a925cf8e2120c4d
+ ! 3b93fc5..02a8a6a synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 31752192 7% 4.10MB/s 0:01:28
+ 36110336 8% 4.04MB/s 0:01:28
+ 39616512 9% 4.02MB/s 0:01:27
+ 44826624 11% 4.13MB/s 0:01:24
+ 47742976 11% 3.71MB/s 0:01:33
+ 52854784 13% 3.89MB/s 0:01:27
+ 57180160 14% 3.87MB/s 0:01:26
+ 62423040 15% 3.92MB/s 0:01:24
+ 66617344 16% 4.20MB/s 0:01:17
+ 71008256 17% 4.04MB/s 0:01:19
+ 75333632 18% 4.30MB/s 0:01:14
+ 79659008 19% 4.08MB/s 0:01:17
+ 83918848 20% 4.07MB/s 0:01:16
+ 88375296 22% 4.07MB/s 0:01:15
+ 92700672 23% 4.04MB/s 0:01:14
+ 97058816 24% 4.05MB/s 0:01:13
+ 101253120 25% 4.06MB/s 0:01:12
+ 104759296 26% 3.84MB/s 0:01:15
+ 109084672 27% 3.84MB/s 0:01:14
+ 112820224 28% 3.70MB/s 0:01:16
+ 117473280 29% 3.79MB/s 0:01:13
+ 120094720 29% 3.53MB/s 0:01:17
+ 125435904 31% 3.79MB/s 0:01:11
+ 128483328 32% 3.46MB/s 0:01:17
+ 133988352 33% 3.67MB/s 0:01:11
+ 137134080 34% 3.68MB/s 0:01:10
+ 142639104 35% 3.70MB/s 0:01:08
+ 145522688 36% 3.72MB/s 0:01:07
+ 150962176 37% 3.69MB/s 0:01:06
+ 154435584 38% 3.72MB/s 0:01:04
+ 159875072 39% 3.73MB/s 0:01:03
+ 163610624 40% 3.76MB/s 0:01:01
+ 168755200 42% 3.72MB/s 0:01:01
+ 172523520 42% 3.67MB/s 0:01:00
+ 177995776 44% 3.66MB/s 0:00:59
+ 181960704 45% 3.69MB/s 0:00:58
+ 187400192 46% 3.74MB/s 0:00:55
+ 191397888 47% 3.79MB/s 0:00:54
+ 196739072 49% 3.77MB/s 0:00:53
+ 200310784 49% 3.72MB/s 0:00:52
+ 205553664 51% 3.69MB/s 0:00:51
+ 209780736 52% 4.06MB/s 0:00:46
+ 213778432 53% 3.76MB/s 0:00:48
+ 217088000 54% 3.72MB/s 0:00:48
+ 222560256 55% 3.76MB/s 0:00:46
+ 225214464 56% 3.09MB/s 0:00:55
+ 227573760 56% 2.76MB/s 0:01:01
+ 232816640 57% 3.35MB/s 0:00:49
+ 236486656 58% 2.94MB/s 0:00:54
+ 241336320 60% 3.77MB/s 0:00:41
+ 243826688 60% 3.50MB/s 0:00:44
+ 249069568 62% 3.47MB/s 0:00:42
+ 253001728 63% 3.18MB/s 0:00:45
+ 258146304 64% 3.23MB/s 0:00:43
+ 262438912 65% 3.84MB/s 0:00:35
+ 263487488 65% 3.00MB/s 0:00:44
+ 267943936 66% 3.41MB/s 0:00:38
+ 271876096 67% 2.87MB/s 0:00:44
+ 277118976 69% 3.07MB/s 0:00:39
+ 281542656 70% 3.77MB/s 0:00:31
+ 285507584 71% 3.74MB/s 0:00:30
+ 290226176 72% 4.25MB/s 0:00:25
+ 293371904 73% 3.74MB/s 0:00:28
+ 298614784 74% 3.64MB/s 0:00:27
+ 304119808 75% 4.00MB/s 0:00:23
+ 307527680 76% 3.39MB/s 0:00:27
+ 312508416 77% 3.67MB/s 0:00:23
+ 317882368 79% 3.97MB/s 0:00:20
+ 320372736 79% 3.32MB/s 0:00:23
+ 325550080 81% 4.07MB/s 0:00:18
+ 329842688 82% 4.06MB/s 0:00:17
+ 333217792 83% 3.54MB/s 0:00:18
+ 338460672 84% 4.23MB/s 0:00:14
+ 342949888 85% 4.06MB/s 0:00:14
+ 346062848 86% 3.50MB/s 0:00:15
+ 350519296 87% 3.72MB/s 0:00:13
+ 355926016 88% 3.75MB/s 0:00:11
+ 360185856 89% 3.70MB/s 0:00:10
+ 364380160 90% 4.24MB/s 0:00:08
+ 368607232 91% 4.26MB/s 0:00:07
+ 372015104 92% 3.72MB/s 0:00:07
+ 377520128 94% 3.97MB/s 0:00:05
+ 381976576 95% 4.03MB/s 0:00:04
+ 386236416 96% 4.03MB/s 0:00:03
+ 389578752 97% 4.10MB/s 0:00:02
+ 394330112 98% 3.97MB/s 0:00:01
+ 398589952 99% 3.94MB/s 0:00:00
+ 401429383 100% 3.77MB/s 0:01:41 (xfer#1, to-check=0/1)
+
+sent 401478543 bytes received 42 bytes 3879020.14 bytes/sec
+total size is 401429383 speedup is 1.00
+[2014-05-25 19:49:23 CEST] Transferrer: Uploaded 03_assump..heses.mp4
+[2014-05-25 19:49:23 CEST] Pusher: Syncing with diskstation
+
+WORM-s341574274-m1396396677--Lean UX Workshop%04_personas.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5013504 1% 3.92MB/s 0:01:23
+ 10452992 3% 4.49MB/s 0:01:12
+remote: merge git-annex 14778368 4% 4.38MB/s 0:01:12
+ 18382848 5% 4.15MB/s 0:01:16
+[2014-05-25 19:49:29 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 02a8a6a..399d085 git-annex -> synced/git-annex
+ 22577152 6% 4.16MB/s 0:01:14
+ 26509312 7% 3.60MB/s 0:01:25
+ 31293440 9% 3.70MB/s 0:01:21
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ c1859f2..5a46cc4 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 399d0856bfb9fef74a18eb9d1d57c0151267323d but expected 02a8a6a6016fd1f36acc39b27cd9e2f1b24fd394
+ ! 02a8a6a..399d085 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 35684352 10% 3.88MB/s 0:01:17
+ 40108032 11% 3.92MB/s 0:01:15
+ 43352064 12% 3.95MB/s 0:01:13
+ 46956544 13% 3.67MB/s 0:01:18
+ 51675136 15% 3.55MB/s 0:01:19
+ 57180160 16% 3.80MB/s 0:01:13
+ 61472768 17% 4.03MB/s 0:01:07
+ 65044480 19% 4.00MB/s 0:01:07
+ 70057984 20% 4.29MB/s 0:01:01
+ 74383360 21% 4.03MB/s 0:01:04
+ 78675968 23% 4.03MB/s 0:01:03
+ 82739200 24% 4.18MB/s 0:01:00
+ 86999040 25% 4.01MB/s 0:01:02
+ 90734592 26% 3.76MB/s 0:01:05
+ 95977472 28% 3.96MB/s 0:01:00
+ 100433920 29% 4.04MB/s 0:00:58
+ 104792064 30% 4.04MB/s 0:00:57
+ 108986368 31% 4.24MB/s 0:00:53
+ 111443968 32% 3.60MB/s 0:01:02
+ 116686848 34% 3.74MB/s 0:00:58
+ 120487936 35% 3.62MB/s 0:00:59
+ 123764736 36% 3.25MB/s 0:01:05
+ 128974848 37% 3.88MB/s 0:00:53
+ 132415488 38% 3.52MB/s 0:00:58
+ 136347648 39% 3.31MB/s 0:01:00
+ 141721600 41% 3.92MB/s 0:00:49
+ 144998400 42% 3.48MB/s 0:00:55
+ 147619840 43% 3.27MB/s 0:00:57
+ 152862720 44% 3.81MB/s 0:00:48
+ 156008448 45% 3.29MB/s 0:00:55
+ 160464896 46% 3.25MB/s 0:00:54
+ 165904384 48% 3.88MB/s 0:00:44
+ 169246720 49% 3.48MB/s 0:00:48
+ 172523520 50% 3.36MB/s 0:00:49
+ 178028544 52% 3.92MB/s 0:00:40
+ 181600256 53% 3.51MB/s 0:00:44
+ 184582144 54% 3.28MB/s 0:00:46
+ 188514304 55% 3.60MB/s 0:00:41
+ 192970752 56% 3.36MB/s 0:00:43
+ 196902912 57% 3.19MB/s 0:00:44
+ 202113024 59% 3.81MB/s 0:00:35
+ 205684736 60% 3.72MB/s 0:00:35
+ 208175104 60% 3.27MB/s 0:00:39
+ 213581824 62% 3.87MB/s 0:00:32
+ 216825856 63% 3.41MB/s 0:00:35
+ 219709440 64% 3.22MB/s 0:00:36
+ 225083392 65% 3.91MB/s 0:00:29
+ 228622336 66% 3.48MB/s 0:00:31
+ 232292352 68% 3.31MB/s 0:00:32
+ 237666304 69% 3.89MB/s 0:00:26
+ 241139712 70% 3.48MB/s 0:00:28
+ 245137408 71% 3.29MB/s 0:00:28
+ 250380288 73% 3.49MB/s 0:00:25
+ 255361024 74% 3.42MB/s 0:00:24
+ 258899968 75% 3.43MB/s 0:00:23
+ 262176768 76% 3.38MB/s 0:00:22
+ 267452416 78% 3.79MB/s 0:00:19
+ 270434304 79% 3.36MB/s 0:00:20
+ 274235392 80% 3.24MB/s 0:00:20
+ 279478272 81% 3.89MB/s 0:00:15
+ 282886144 82% 3.45MB/s 0:00:16
+ 286818304 83% 3.38MB/s 0:00:15
+ 292061184 85% 3.50MB/s 0:00:13
+ 297304064 87% 3.50MB/s 0:00:12
+ 300711936 88% 3.49MB/s 0:00:11
+ 304152576 89% 3.66MB/s 0:00:09
+ 308543488 90% 3.86MB/s 0:00:08
+ 312770560 91% 3.60MB/s 0:00:07
+ 316178432 92% 3.63MB/s 0:00:06
+ 319586304 93% 3.44MB/s 0:00:06
+ 325025792 95% 3.66MB/s 0:00:04
+ 328466432 96% 3.50MB/s 0:00:03
+ 331120640 96% 3.24MB/s 0:00:03
+ 336592896 98% 3.87MB/s 0:00:01
+ 340000768 99% 3.42MB/s 0:00:00
+ 341574274 100% 3.66MB/s 0:01:29 (xfer#1, to-check=0/1)
+
+sent 341616112 bytes received 42 bytes 3733509.88 bytes/sec
+total size is 341574274 speedup is 1.00
+[2014-05-25 19:50:54 CEST] Transferrer: Uploaded 04_personas.mp4
+[2014-05-25 19:50:54 CEST] Pusher: Syncing with diskstation
+
+WORM-s112588009-m1396396463--Lean UX Workshop%05_outcomes-and-features.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5537792 4% 5.11MB/s 0:00:20
+ 8683520 7% 3.73MB/s 0:00:27
+ 14057472 12% 4.16MB/s 0:00:23
+remote: merge git-annex 17334272 15% 3.90MB/s 0:00:23
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+[2014-05-25 19:51:00 CEST] RemoteControl: Syncing with diskstation
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 21266432 18% 3.26MB/s 0:00:27
+ 399d085..8395b06 git-annex -> synced/git-annex
+ 26509312 23% 3.85MB/s 0:00:21
+ 29655040 26% 3.34MB/s 0:00:24
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 5a46cc4..c29a46c git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 8395b065d53211a1d1da518dafd09a81ba42f11c but expected 399d0856bfb9fef74a18eb9d1d57c0151267323d
+ ! 399d085..8395b06 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 33062912 29% 3.16MB/s 0:00:24
+ 38502400 34% 3.76MB/s 0:00:19
+ 41910272 37% 3.36MB/s 0:00:20
+ 45121536 40% 3.21MB/s 0:00:20
+ 50561024 44% 3.88MB/s 0:00:15
+ 53772288 47% 3.36MB/s 0:00:17
+ 57442304 51% 3.22MB/s 0:00:16
+ 62881792 55% 3.88MB/s 0:00:12
+ 66093056 58% 3.39MB/s 0:00:13
+ 70451200 62% 3.69MB/s 0:00:11
+ 72908800 64% 3.15MB/s 0:00:12
+ 77627392 68% 2.87MB/s 0:00:11
+ 83132416 73% 3.33MB/s 0:00:08
+ 84541440 75% 2.75MB/s 0:00:09
+ 89423872 79% 3.71MB/s 0:00:06
+ 90570752 80% 3.08MB/s 0:00:06
+ 95911936 85% 3.02MB/s 0:00:05
+ 97550336 86% 3.06MB/s 0:00:04
+ 102531072 91% 2.60MB/s 0:00:03
+ 107872256 95% 3.43MB/s 0:00:01
+ 109871104 97% 2.78MB/s 0:00:00
+ 112588009 100% 3.35MB/s 0:00:31 (xfer#1, to-check=0/1)
+
+sent 112601904 bytes received 42 bytes 3361252.12 bytes/sec
+total size is 112588009 speedup is 1.00
+[2014-05-25 19:51:27 CEST] Transferrer: Uploaded 05_outcom..tures.mp4
+[2014-05-25 19:51:27 CEST] Pusher: Syncing with diskstation
+
+WORM-s78565449-m1396396837--Lean UX Workshop%06_writing-hypotheses.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5275648 6% 4.94MB/s 0:00:14
+ 6848512 8% 3.18MB/s 0:00:22
+remote: merge git-annex 11796480 15% 3.64MB/s 0:00:17
+ 13402112 17% 3.12MB/s 0:00:20
+[2014-05-25 19:51:32 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 8395b06..bbec44b git-annex -> synced/git-annex
+ 17858560 22% 2.94MB/s 0:00:20
+ 19693568 25% 3.01MB/s 0:00:19
+ 24412160 31% 2.96MB/s 0:00:17
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ c29a46c..d52fe33 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at bbec44b1f18107dc3aaab411ddf2ada1aa273741 but expected 8395b065d53211a1d1da518dafd09a81ba42f11c
+ ! 8395b06..bbec44b synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 27033600 34% 3.00MB/s 0:00:16
+ 31490048 40% 2.69MB/s 0:00:17
+ 36470784 46% 2.96MB/s 0:00:13
+ 41910272 53% 3.09MB/s 0:00:11
+ 43286528 55% 2.97MB/s 0:00:11
+ 48529408 61% 3.00MB/s 0:00:09
+ 53510144 68% 3.06MB/s 0:00:07
+ 58753024 74% 2.78MB/s 0:00:06
+ 64159744 81% 3.51MB/s 0:00:04
+ 67141632 85% 3.23MB/s 0:00:03
+ 72548352 92% 3.61MB/s 0:00:01
+ 76840960 97% 3.79MB/s 0:00:00
+ 78565449 100% 3.17MB/s 0:00:23 (xfer#1, to-check=0/1)
+
+sent 78575188 bytes received 42 bytes 3081381.57 bytes/sec
+total size is 78565449 speedup is 1.00
+[2014-05-25 19:51:52 CEST] Transferrer: Uploaded 06_writin..heses.mp4
+[2014-05-25 19:51:52 CEST] Pusher: Syncing with diskstation
+
+WORM-s237023281-m1396397192--Lean UX Workshop%07_design-studio.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 3964928 1% 3.16MB/s 0:01:12
+remote: merge git-annex 9207808 3% 3.35MB/s 0:01:06
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+[2014-05-25 19:51:57 CEST] RemoteControl: Syncing with diskstation
+ 14712832 6% 3.19MB/s 0:01:08
+ bbec44b..423bfb2 git-annex -> synced/git-annex
+ 19169280 8% 2.99MB/s 0:01:11
+ 23887872 10% 3.20MB/s 0:01:05
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ d52fe33..b408181 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 423bfb2586ebc18e8149998862ee1d0060d962ec but expected bbec44b1f18107dc3aaab411ddf2ada1aa273741
+ ! bbec44b..423bfb2 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 26771456 11% 2.98MB/s 0:01:08
+ 30965760 13% 2.91MB/s 0:01:09
+ 35946496 15% 3.04MB/s 0:01:04
+ 40927232 17% 2.76MB/s 0:01:09
+ 45187072 19% 3.01MB/s 0:01:02
+ 48005120 20% 3.04MB/s 0:01:00
+ 50364416 21% 2.73MB/s 0:01:06
+ 55607296 23% 2.77MB/s 0:01:03
+ 60948480 25% 3.01MB/s 0:00:57
+ 62423040 26% 2.75MB/s 0:01:01
+ 66355200 27% 2.96MB/s 0:00:56
+ 71335936 30% 2.89MB/s 0:00:55
+ 76742656 32% 2.90MB/s 0:00:53
+ 79200256 33% 3.06MB/s 0:00:50
+ 82870272 34% 3.28MB/s 0:00:45
+ 86802432 36% 3.60MB/s 0:00:40
+ 91521024 38% 3.44MB/s 0:00:41
+ 95191040 40% 3.74MB/s 0:00:37
+ 97026048 40% 3.23MB/s 0:00:42
+ 100171776 42% 2.87MB/s 0:00:46
+ 104628224 44% 2.80MB/s 0:00:46
+ 109903872 46% 3.14MB/s 0:00:39
+ 113541120 47% 3.66MB/s 0:00:32
+ 116686848 49% 3.89MB/s 0:00:30
+ 121667584 51% 3.68MB/s 0:00:30
+ 126386176 53% 3.51MB/s 0:00:30
+ 131530752 55% 3.83MB/s 0:00:26
+ 135823360 57% 4.07MB/s 0:00:24
+ 140214272 59% 4.31MB/s 0:00:21
+ 144474112 60% 4.26MB/s 0:00:21
+ 148144128 62% 3.82MB/s 0:00:22
+ 153124864 64% 3.97MB/s 0:00:20
+ 154959872 65% 3.40MB/s 0:00:23
+ 160071680 67% 3.59MB/s 0:00:20
+ 161513472 68% 3.14MB/s 0:00:23
+ 166494208 70% 3.15MB/s 0:00:21
+ 169639936 71% 3.11MB/s 0:00:21
+ 175046656 73% 3.17MB/s 0:00:19
+ 178028544 75% 3.30MB/s 0:00:17
+ 183271424 77% 3.33MB/s 0:00:15
+ 186941440 78% 3.34MB/s 0:00:14
+ 191922176 80% 3.25MB/s 0:00:13
+ 195330048 82% 3.22MB/s 0:00:12
+ 200835072 84% 3.27MB/s 0:00:10
+ 202211328 85% 3.22MB/s 0:00:10
+ 207585280 87% 3.31MB/s 0:00:08
+ 210534400 88% 3.58MB/s 0:00:07
+ 215154688 90% 3.40MB/s 0:00:06
+ 215777280 91% 3.21MB/s 0:00:06
+ 221020160 93% 3.03MB/s 0:00:05
+ 225738752 95% 2.96MB/s 0:00:03
+ 230227968 97% 2.94MB/s 0:00:02
+ 235175936 99% 3.25MB/s 0:00:00
+ 237023281 100% 3.26MB/s 0:01:09 (xfer#1, to-check=0/1)
+
+sent 237052360 bytes received 42 bytes 3315418.21 bytes/sec
+total size is 237023281 speedup is 1.00
+[2014-05-25 19:53:03 CEST] Transferrer: Uploaded 07_design..tudio.mp4
+[2014-05-25 19:53:04 CEST] Pusher: Syncing with diskstation
+
+WORM-s113325561-m1396396724--Lean UX Workshop%08_experiments-and-mvp-s.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4227072 3% 3.88MB/s 0:00:27
+remote: merge git-annex 7897088 6% 3.69MB/s 0:00:27
+[2014-05-25 19:53:08 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 423bfb2..e9861a8 git-annex -> synced/git-annex
+ 13139968 11% 4.11MB/s 0:00:23
+ 16023552 14% 3.39MB/s 0:00:28
+ 21266432 18% 3.62MB/s 0:00:24
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ b408181..6b97695 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at e9861a8445e7859f23e90dbc1e6113af547c0515 but expected 423bfb2586ebc18e8149998862ee1d0060d962ec
+ ! 423bfb2..e9861a8 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 23101440 20% 3.22MB/s 0:00:27
+ 28082176 24% 3.16MB/s 0:00:26
+ 31490048 27% 3.25MB/s 0:00:24
+ 35946496 31% 3.09MB/s 0:00:24
+ 41189376 36% 3.80MB/s 0:00:18
+ 42500096 37% 3.03MB/s 0:00:22
+ 47972352 42% 3.88MB/s 0:00:16
+ 51675136 45% 3.70MB/s 0:00:16
+ 55345152 48% 3.13MB/s 0:00:18
+ 60948480 53% 4.11MB/s 0:00:12
+ 63209472 55% 3.10MB/s 0:00:15
+ 67698688 59% 3.28MB/s 0:00:13
+ 72646656 64% 3.26MB/s 0:00:12
+ 78315520 69% 3.26MB/s 0:00:10
+ 81297408 71% 3.36MB/s 0:00:09
+ 86900736 76% 3.55MB/s 0:00:07
+ 90472448 79% 3.68MB/s 0:00:06
+ 94928896 83% 3.23MB/s 0:00:05
+ 100433920 88% 3.87MB/s 0:00:03
+ 104628224 92% 3.40MB/s 0:00:02
+ 110067712 97% 3.85MB/s 0:00:00
+ 113325561 100% 3.52MB/s 0:00:30 (xfer#1, to-check=0/1)
+
+sent 113339548 bytes received 42 bytes 3487372.00 bytes/sec
+total size is 113325561 speedup is 1.00
+[2014-05-25 19:53:36 CEST] Transferrer: Uploaded 08_experi..mvp-s.mp4
+[2014-05-25 19:53:37 CEST] Pusher: Syncing with diskstation
+
+WORM-s171315323-m1396397078--Lean UX Workshop%09_research.mp4
+ 32768 0% 0.00kB/s 0:00:00
+remote: merge git-annex 3964928 2% 3.72MB/s 0:00:43
+ 9469952 5% 4.48MB/s 0:00:35
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ e9861a8..0967b9e git-annex -> synced/git-annex
+[2014-05-25 19:53:41 CEST] RemoteControl: Syncing with diskstation
+ 12353536 7% 3.86MB/s 0:00:40
+ 16252928 9% 3.83MB/s 0:00:39
+ 19693568 11% 3.50MB/s 0:00:42
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 6b97695..b05c1b5 git-annex -> diskstation/git-annex
+ 25198592 14% 3.50MB/s 0:00:40
+ 29392896 17% 3.78MB/s 0:00:36
+ 31227904 18% 3.31MB/s 0:00:41
+ 35979264 21% 3.82MB/s 0:00:34
+ 38043648 22% 2.87MB/s 0:00:45
+ 43548672 25% 3.18MB/s 0:00:39
+ 47218688 27% 3.16MB/s 0:00:38
+ 52723712 30% 3.26MB/s 0:00:35
+ 55607296 32% 3.33MB/s 0:00:33
+ 59801600 34% 3.09MB/s 0:00:35
+ 65208320 38% 3.87MB/s 0:00:26
+ 66879488 39% 3.10MB/s 0:00:32
+ 72122368 42% 3.87MB/s 0:00:25
+ 75530240 44% 3.32MB/s 0:00:28
+ 80510976 46% 3.20MB/s 0:00:27
+ 84180992 49% 3.32MB/s 0:00:25
+ 89686016 52% 3.39MB/s 0:00:23
+ 93880320 54% 3.59MB/s 0:00:21
+ 99483648 58% 3.74MB/s 0:00:18
+ 103317504 60% 3.83MB/s 0:00:17
+ 108822528 63% 3.85MB/s 0:00:15
+ 112754688 65% 3.82MB/s 0:00:14
+ 118292480 69% 3.81MB/s 0:00:13
+ 121405440 70% 3.93MB/s 0:00:12
+ 126124032 73% 3.76MB/s 0:00:11
+ 128745472 75% 3.68MB/s 0:00:11
+ 133988352 78% 3.59MB/s 0:00:10
+ 138182656 80% 3.53MB/s 0:00:09
+ 143687680 83% 3.66MB/s 0:00:07
+ 146833408 85% 3.70MB/s 0:00:06
+ 152338432 88% 3.77MB/s 0:00:04
+ 155484160 90% 3.70MB/s 0:00:04
+ 160989184 93% 3.65MB/s 0:00:02
+ 164397056 95% 3.71MB/s 0:00:01
+ 169639936 99% 3.67MB/s 0:00:00
+ 171315323 100% 3.60MB/s 0:00:45 (xfer#1, to-check=0/1)
+
+sent 171336377 bytes received 42 bytes 3607082.51 bytes/sec
+total size is 171315323 speedup is 1.00
+[2014-05-25 19:54:24 CEST] Transferrer: Uploaded 09_research.mp4
+[2014-05-25 19:54:24 CEST] Pusher: Syncing with diskstation
+
+WORM-s254857031-m1396396965--Lean UX Workshop%10_combining-lean-and-agile.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5275648 2% 4.91MB/s 0:00:49
+ 10027008 3% 4.72MB/s 0:00:50
+remote: merge git-annex 13139968 5% 3.93MB/s 0:01:00
+ 18710528 7% 4.26MB/s 0:00:54
+[2014-05-25 19:54:30 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 22052864 8% 3.51MB/s 0:01:04
+ 0967b9e..8e9de0b git-annex -> synced/git-annex
+ 27033600 10% 3.53MB/s 0:01:02
+ 30441472 11% 3.72MB/s 0:00:58
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ b05c1b5..9285684 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 8e9de0bb0562a8c9e6a72dcff4ad92f93403ad43 but expected 0967b9e587fc2d85662e7b0c1d047ea77bd1e540
+ ! 0967b9e..8e9de0b synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 35815424 14% 3.66MB/s 0:00:58
+ 39092224 15% 3.99MB/s 0:00:52
+ 43286528 16% 3.83MB/s 0:00:54
+ 45645824 17% 3.39MB/s 0:01:00
+ 50888704 19% 3.34MB/s 0:00:59
+ 54034432 21% 3.04MB/s 0:01:04
+ 57966592 22% 3.00MB/s 0:01:04
+ 63373312 24% 3.79MB/s 0:00:49
+ 64520192 25% 2.95MB/s 0:01:02
+ 67403776 26% 3.06MB/s 0:00:59
+ 72908800 28% 3.40MB/s 0:00:52
+ 76840960 30% 3.06MB/s 0:00:56
+ 79986688 31% 3.51MB/s 0:00:48
+ 85196800 33% 4.18MB/s 0:00:39
+ 87326720 34% 3.20MB/s 0:00:51
+ 92831744 36% 3.55MB/s 0:00:44
+ 95977472 37% 3.15MB/s 0:00:49
+ 100696064 39% 2.97MB/s 0:00:50
+ 105676800 41% 3.27MB/s 0:00:44
+ 110395392 43% 3.13MB/s 0:00:45
+ 115376128 45% 3.84MB/s 0:00:35
+ 116686848 45% 3.27MB/s 0:00:41
+ 121667584 47% 3.72MB/s 0:00:34
+ 125861888 49% 3.56MB/s 0:00:35
+ 129007616 50% 2.92MB/s 0:00:42
+ 134250496 52% 3.74MB/s 0:00:31
+ 137396224 53% 3.01MB/s 0:00:38
+ 142835712 56% 3.30MB/s 0:00:33
+ 146571264 57% 3.21MB/s 0:00:32
+ 150765568 59% 3.02MB/s 0:00:33
+ 156270592 61% 3.80MB/s 0:00:25
+ 158072832 62% 3.08MB/s 0:00:30
+ 163282944 64% 3.87MB/s 0:00:23
+ 165445632 64% 2.81MB/s 0:00:31
+ 169279488 66% 2.52MB/s 0:00:33
+ 173572096 68% 2.96MB/s 0:00:26
+ 177242112 69% 2.28MB/s 0:00:33
+ 179601408 70% 2.36MB/s 0:00:31
+ 183959552 72% 2.44MB/s 0:00:28
+ 187203584 73% 2.27MB/s 0:00:29
+ 191135744 74% 2.68MB/s 0:00:23
+ 196640768 77% 3.84MB/s 0:00:14
+ 197427200 77% 2.79MB/s 0:00:20
+ 200310784 78% 2.76MB/s 0:00:19
+ 205815808 80% 3.13MB/s 0:00:15
+ 207650816 81% 2.33MB/s 0:00:19
+ 213123072 83% 3.64MB/s 0:00:11
+ 217579520 85% 3.99MB/s 0:00:09
+ 219185152 86% 3.08MB/s 0:00:11
+ 222068736 87% 3.17MB/s 0:00:10
+ 227508224 89% 3.15MB/s 0:00:08
+ 230457344 90% 2.83MB/s 0:00:08
+ 234389504 91% 3.27MB/s 0:00:06
+ 238583808 93% 3.81MB/s 0:00:04
+ 243204096 95% 3.63MB/s 0:00:03
+ 247496704 97% 3.94MB/s 0:00:01
+ 249593856 97% 3.61MB/s 0:00:01
+ 254312448 99% 3.71MB/s 0:00:00
+ 254857031 100% 3.29MB/s 0:01:13 (xfer#1, to-check=0/1)
+
+sent 254888297 bytes received 42 bytes 3376004.49 bytes/sec
+total size is 254857031 speedup is 1.00
+[2014-05-25 19:55:40 CEST] Transferrer: Uploaded 10_combin..agile.mp4
+[2014-05-25 19:55:40 CEST] Pusher: Syncing with diskstation
+
+WORM-s67182998-m1396396768--Lean UX Workshop%11_tools-and-techniques.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 2392064 3% 2.20MB/s 0:00:28
+remote: merge git-annex 7897088 11% 3.69MB/s 0:00:15
+ 12353536 18% 3.75MB/s 0:00:14
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 8e9de0b..10f88fb git-annex -> synced/git-annex
+[2014-05-25 19:55:45 CEST] RemoteControl: Syncing with diskstation
+ 13664256 20% 3.12MB/s 0:00:16
+ 18644992 27% 3.71MB/s 0:00:12
+ 20217856 30% 2.79MB/s 0:00:16
+ 24510464 36% 2.82MB/s 0:00:14
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 9285684..b2bad3b git-annex -> diskstation/git-annex
+ 27557888 41% 3.04MB/s 0:00:12
+ 32931840 49% 3.15MB/s 0:00:10
+ 34373632 51% 3.09MB/s 0:00:10
+ 38830080 57% 3.12MB/s 0:00:08
+ 44072960 65% 3.80MB/s 0:00:05
+ 45907968 68% 2.96MB/s 0:00:07
+ 50626560 75% 3.81MB/s 0:00:04
+ 53248000 79% 3.15MB/s 0:00:04
+ 57442304 85% 2.95MB/s 0:00:03
+ 62717952 93% 3.72MB/s 0:00:01
+ 64520192 96% 3.07MB/s 0:00:00
+ 67182998 100% 3.28MB/s 0:00:19 (xfer#1, to-check=0/1)
+
+sent 67191351 bytes received 42 bytes 3125181.07 bytes/sec
+total size is 67182998 speedup is 1.00
+[2014-05-25 19:56:01 CEST] Transferrer: Uploaded 11_tools-..iques.mp4
+[2014-05-25 19:56:01 CEST] Pusher: Syncing with diskstation
+remote: merge git-annex (merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 10f88fb..aa5471b git-annex -> synced/git-annex
+[2014-05-25 19:56:06 CEST] RemoteControl: Syncing with diskstation
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ b2bad3b..34ef046 git-annex -> diskstation/git-annex
+[2014-05-25 20:16:23 CEST] NetWatcherFallback: Syncing with diskstation
+remote: merge git-annex ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ aa5471b..34ef046 git-annex -> synced/git-annex
+[2014-05-25 21:01:01 CEST] main: Syncing with diskstation
+remote: merge git-annex (merging synced/git-annex into git-annex...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 34ef046..2f32e55 git-annex -> synced/git-annex
+
+WORM-s14123840-m1398381779--Learning Corel Painter X3%01_a-quick-tour-of-painter.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5799936 41% 5.46MB/s 0:00:01
+ 9994240 70% 4.70MB/s 0:00:00
+ 14123840 100% 4.71MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 14125729 bytes received 42 bytes 4035934.57 bytes/sec
+total size is 14123840 speedup is 1.00
+[2014-05-25 21:01:34 CEST] Transferrer: Uploaded 01_a-quic..inter.mp4
+[2014-05-25 21:01:34 CEST] Pusher: Syncing with diskstation
+
+WORM-s23356431-m1398381923--Learning Corel Painter X3%02_brushes-and-custom-palettes.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5275648 22% 4.47MB/s 0:00:03
+ 10715136 45% 4.81MB/s 0:00:02
+ 15237120 65% 4.65MB/s 0:00:01
+ 19955712 85% 4.60MB/s 0:00:00
+remote: merge git-annex 23356431 100% 4.51MB/s 0:00:04 (xfer#1, to-check=0/1)
+[2014-05-25 21:01:40 CEST] RemoteControl: Syncing with diskstation
+
+sent 23359448 bytes received 42 bytes 4247180.00 bytes/sec
+total size is 23356431 speedup is 1.00
+[2014-05-25 21:01:40 CEST] Transferrer: Uploaded 02_brushe..ettes.mp4
+
+WORM-s16835823-m1398381229--Learning Corel Painter X3%03_managing-layers.mp4
+ 32768 0% 0.00kB/s 0:00:00
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 2f32e55..f2e1569 git-annex -> synced/git-annex
+ 6094848 36% 5.76MB/s 0:00:01
+ 11010048 65% 5.22MB/s 0:00:01
+ 15761408 93% 4.99MB/s 0:00:00
+ 16835823 100% 4.96MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 16838032 bytes received 42 bytes 3741794.22 bytes/sec
+total size is 16835823 speedup is 1.00
+[2014-05-25 21:01:45 CEST] Transferrer: Uploaded 03_managi..ayers.mp4
+
+WORM-s26947174-m1398380993--Learning Corel Painter X3%04_project-red-chairs.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:01:46 CEST] Pusher: Syncing with diskstation
+ 5799936 21% 5.47MB/s 0:00:03
+ 8421376 31% 3.79MB/s 0:00:04
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 34ef046..28ecf68 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at f2e15690121bf48eba8288426bf72c0661ea444a but expected 2f32e55b5e8bd953707452ada9ad57fbeb20b7b1
+ ! 2f32e55..f2e1569 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+[2014-05-25 21:01:48 CEST] RemoteControl: Syncing with diskstation
+ 13139968 48% 3.94MB/s 0:00:03
+ 17956864 66% 4.10MB/s 0:00:02
+ 22577152 83% 3.83MB/s 0:00:01
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 28ecf68..644a4ea git-annex -> diskstation/git-annex
+ 25460736 94% 3.94MB/s 0:00:00
+ 26947174 100% 3.97MB/s 0:00:06 (xfer#1, to-check=0/1)
+
+sent 26950622 bytes received 42 bytes 3593421.87 bytes/sec
+total size is 26947174 speedup is 1.00
+remote: merge git-annex [2014-05-25 21:01:52 CEST] Transferrer: Uploaded 04_projec..hairs.mp4
+
+WORM-s14550387-m1398382074--Learning Corel Painter X3%05_the-toolbox-part-1.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:01:53 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ f2e1569..7bf9116 git-annex -> synced/git-annex
+ 5668864 38% 5.09MB/s 0:00:01
+ 10289152 70% 4.74MB/s 0:00:00
+ 14550387 100% 4.56MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 14552323 bytes received 42 bytes 3233858.89 bytes/sec
+total size is 14550387 speedup is 1.00
+[2014-05-25 21:01:57 CEST] Transferrer: Uploaded 05_the-to..art-1.mp4
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 644a4ea..f3817af git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 7bf9116bbeb90b398ac29d7b38e78dbe493f081f but expected f2e15690121bf48eba8288426bf72c0661ea444a
+ ! f2e1569..7bf9116 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+WORM-s5537051-m1398381582--Learning Corel Painter X3%06_the-toolbox-part-2.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4227072 76% 4.00MB/s 0:00:00
+[2014-05-25 21:01:58 CEST] Pusher: Syncing with diskstation
+ 5537051 100% 4.47MB/s 0:00:01 (xfer#1, to-check=0/1)
+
+sent 5537882 bytes received 42 bytes 3691949.33 bytes/sec
+total size is 5537051 speedup is 1.00
+[2014-05-25 21:02:00 CEST] Transferrer: Uploaded 06_the-to..art-2.mp4
+
+WORM-s16270822-m1398381489--Learning Corel Painter X3%07_color-panels.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4882432 30% 4.62MB/s 0:00:02
+remote: merge git-annex 7634944 46% 3.29MB/s 0:00:02
+[2014-05-25 21:02:03 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 7bf9116..a826827 git-annex -> synced/git-annex
+ 9994240 61% 2.94MB/s 0:00:02
+ 13369344 82% 3.01MB/s 0:00:00
+ 15761408 96% 2.44MB/s 0:00:00
+ 16270822 100% 2.91MB/s 0:00:05 (xfer#1, to-check=0/1)
+
+sent 16272960 bytes received 42 bytes 2503538.77 bytes/sec
+total size is 16270822 speedup is 1.00
+[2014-05-25 21:02:06 CEST] Transferrer: Uploaded 07_color-panels.mp4
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ f3817af..bff569c git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at a8268279606cf4fdee4e0fabeef0c9075d840f71 but expected 7bf9116bbeb90b398ac29d7b38e78dbe493f081f
+ ! 7bf9116..a826827 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+WORM-s21555439-m1398381255--Learning Corel Painter X3%08_paper-and-media-libraries.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5111808 23% 4.81MB/s 0:00:03
+[2014-05-25 21:02:08 CEST] Pusher: Syncing with diskstation
+ 9175040 42% 4.29MB/s 0:00:02
+ 13369344 62% 4.18MB/s 0:00:01
+ 17563648 81% 4.10MB/s 0:00:00
+ 21555439 100% 4.05MB/s 0:00:05 (xfer#1, to-check=0/1)
+
+sent 21558234 bytes received 42 bytes 3316657.85 bytes/sec
+total size is 21555439 speedup is 1.00
+[2014-05-25 21:02:12 CEST] Transferrer: Uploaded 08_paper-..aries.mp4
+remote: merge git-annex
+WORM-s24881920-m1398382026--Learning Corel Painter X3%09_menu-commands-part-1.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5210112 20% 4.80MB/s 0:00:03
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+[2014-05-25 21:02:14 CEST] RemoteControl: Syncing with diskstation
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ a826827..e65041f git-annex -> synced/git-annex
+ 9142272 36% 4.28MB/s 0:00:03
+ 13041664 52% 4.08MB/s 0:00:02
+ 17235968 69% 4.03MB/s 0:00:01
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ bff569c..b552f10 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at e65041fc45b14af68426581456deb8d3e9efa1d9 but expected a8268279606cf4fdee4e0fabeef0c9075d840f71
+ ! a826827..e65041f synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 21397504 85% 3.81MB/s 0:00:00
+ 24881920 100% 4.05MB/s 0:00:05 (xfer#1, to-check=0/1)
+[2014-05-25 21:02:19 CEST] Pusher: Syncing with diskstation
+
+sent 24885118 bytes received 42 bytes 3318021.33 bytes/sec
+total size is 24881920 speedup is 1.00
+[2014-05-25 21:02:20 CEST] Transferrer: Uploaded 09_menu-c..art-1.mp4
+
+WORM-s29078392-m1398382059--Learning Corel Painter X3%10_menu-commands-part-2.mp4
+ 32768 0% 0.00kB/s 0:00:00
+remote: merge git-annex 5210112 17% 4.81MB/s 0:00:04
+ 9437184 32% 4.41MB/s 0:00:04
+[2014-05-25 21:02:24 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ e65041f..530d23c git-annex -> synced/git-annex
+ 13762560 47% 4.30MB/s 0:00:03
+ 17924096 61% 4.20MB/s 0:00:02
+ 22970368 78% 4.16MB/s 0:00:01
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ b552f10..4dc60d5 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 530d23cf75a7f936041cdb408fd4f3516fe1514b but expected e65041fc45b14af68426581456deb8d3e9efa1d9
+ ! e65041f..530d23c synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 27688960 95% 4.26MB/s 0:00:00
+ 29078392 100% 4.33MB/s 0:00:06 (xfer#1, to-check=0/1)
+
+sent 29082102 bytes received 42 bytes 3421428.71 bytes/sec
+total size is 29078392 speedup is 1.00
+[2014-05-25 21:02:29 CEST] Transferrer: Uploaded 10_menu-c..art-2.mp4
+
+WORM-s18704564-m1398381759--Learning Corel Painter X3%11_cloner-brushes.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:02:29 CEST] Pusher: Syncing with diskstation
+ 5996544 32% 5.68MB/s 0:00:02
+ 10321920 55% 4.86MB/s 0:00:01
+ 14581760 77% 4.55MB/s 0:00:00
+ 18704564 100% 4.39MB/s 0:00:00
+ 18704564 100% 4.39MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 18707000 bytes received 42 bytes 4157120.44 bytes/sec
+total size is 18704564 speedup is 1.00
+[2014-05-25 21:02:33 CEST] Transferrer: Uploaded 11_cloner..ushes.mp4
+
+WORM-s16483665-m1398381099--Learning Corel Painter X3%12_project-clone-painting-a-pear.mp4
+ 32768 0% 0.00kB/s 0:00:00
+remote: merge git-annex 3964928 24% 3.69MB/s 0:00:03
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+[2014-05-25 21:02:36 CEST] RemoteControl: Syncing with diskstation
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 530d23c..821b643 git-annex -> synced/git-annex
+ 8683520 52% 3.90MB/s 0:00:01
+ 12877824 78% 3.90MB/s 0:00:00
+ 16483665 100% 4.01MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 16485848 bytes received 42 bytes 2997434.55 bytes/sec
+total size is 16483665 speedup is 1.00
+[2014-05-25 21:02:38 CEST] Transferrer: Uploaded 12_projec..-pear.mp4
+
+WORM-s13729745-m1398381011--Learning Corel Painter X3%13_dab-stroke-and-method.mp4
+ 32768 0% 0.00kB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 4dc60d5..b35b714 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 821b643cf14025648cceac17c2de27e1a17840e3 but expected 530d23cf75a7f936041cdb408fd4f3516fe1514b
+ ! 530d23c..821b643 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 5013504 36% 4.35MB/s 0:00:01
+[2014-05-25 21:02:41 CEST] Pusher: Syncing with diskstation
+ 9469952 68% 4.23MB/s 0:00:00
+ 13402112 97% 4.06MB/s 0:00:00
+ 13729745 100% 3.98MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 13731580 bytes received 42 bytes 3923320.57 bytes/sec
+total size is 13729745 speedup is 1.00
+[2014-05-25 21:02:43 CEST] Transferrer: Uploaded 13_dab-st..ethod.mp4
+
+WORM-s15796088-m1398381069--Learning Corel Painter X3%14_advanced-controls.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5013504 31% 4.63MB/s 0:00:02
+ 9207808 58% 4.25MB/s 0:00:01
+ 13664256 86% 4.21MB/s 0:00:00
+ 15796088 100% 4.21MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 15798175 bytes received 42 bytes 3510714.89 bytes/sec
+total size is 15796088 speedup is 1.00
+[2014-05-25 21:02:47 CEST] Transferrer: Uploaded 14_advanc..trols.mp4
+
+WORM-s14529732-m1398382119--Learning Corel Painter X3%15_custom-variants.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5996544 41% 5.49MB/s 0:00:01
+remote: merge git-annex 10551296 72% 4.90MB/s 0:00:00
+ 14529732 100% 4.82MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 14531661 bytes received 42 bytes 2235646.62 bytes/sec
+total size is 14529732 speedup is 1.00
+[2014-05-25 21:02:54 CEST] RemoteControl: Syncing with diskstation
+[2014-05-25 21:02:54 CEST] Transferrer: Uploaded 15_custom..iants.mp4
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 821b643..d1a88a1 git-annex -> synced/git-annex
+
+WORM-s20256713-m1398381124--Learning Corel Painter X3%16_abstract-painting.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5242880 25% 4.82MB/s 0:00:03
+ 9437184 46% 4.38MB/s 0:00:02
+ 13729792 67% 4.28MB/s 0:00:01
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ b35b714..5d9e777 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at d1a88a1d1fb37d139753d3b96cbd570810a61a51 but expected 821b643cf14025648cceac17c2de27e1a17840e3
+ ! 821b643..d1a88a1 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 17924096 88% 4.19MB/s 0:00:00
+ 20256713 100% 4.15MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 20259344 bytes received 42 bytes 3116828.62 bytes/sec
+total size is 20256713 speedup is 1.00
+[2014-05-25 21:03:00 CEST] Transferrer: Uploaded 16_abstra..nting.mp4
+
+WORM-s15821561-m1398381954--Learning Corel Painter X3%17_tonal-controls.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:03:01 CEST] Pusher: Syncing with diskstation
+ 3964928 25% 3.50MB/s 0:00:03
+ 6848512 43% 3.13MB/s 0:00:02
+ 11829248 74% 3.62MB/s 0:00:01
+ 15821561 100% 3.70MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 15823645 bytes received 42 bytes 2877034.00 bytes/sec
+total size is 15821561 speedup is 1.00
+[2014-05-25 21:03:05 CEST] Transferrer: Uploaded 17_tonal-..trols.mp4
+remote: merge git-annex
+WORM-s27686314-m1398381815--Learning Corel Painter X3%18_surface-controls.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5210112 18% 4.91MB/s 0:00:04
+[2014-05-25 21:03:08 CEST] RemoteControl: Syncing with diskstation
+ 9142272 33% 4.29MB/s 0:00:04
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ d1a88a1..2f6a023 git-annex -> synced/git-annex
+ 12943360 46% 4.06MB/s 0:00:03
+ 17104896 61% 4.01MB/s 0:00:02
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 5d9e777..5732a07 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 2f6a0230e37a27a287290d40a66a61284abd958e but expected d1a88a1d1fb37d139753d3b96cbd570810a61a51
+ ! d1a88a1..2f6a023 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 21266432 76% 3.76MB/s 0:00:01
+ 25591808 92% 3.85MB/s 0:00:00
+[2014-05-25 21:06:06 CEST] Pusher: Syncing with diskstation
+ 26640384 96% 73.39kB/s 0:00:14
+ 27686314 100% 145.74kB/s 0:03:05 (xfer#1, to-check=0/1)
+
+sent 27689848 bytes received 42 bytes 148471.26 bytes/sec
+total size is 27686314 speedup is 1.00
+[2014-05-25 21:06:11 CEST] Transferrer: Uploaded 18_surfac..trols.mp4
+remote: merge git-annex
+WORM-s20041059-m1398382199--Learning Corel Painter X3%19_esoterica.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:06:13 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 5013504 25% 4.74MB/s 0:00:03
+ 2f6a023..3de6568 git-annex -> synced/git-annex
+ 8421376 42% 3.99MB/s 0:00:02
+ 12681216 63% 4.01MB/s 0:00:01
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 5732a07..22c09fa git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 3de6568fc3634c50a42c935f315c763106a22e3c but expected 2f6a0230e37a27a287290d40a66a61284abd958e
+ ! 2f6a023..3de6568 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 17596416 87% 4.18MB/s 0:00:00
+ 20041059 100% 4.24MB/s 0:00:04 (xfer#1, to-check=0/1)
+[2014-05-25 21:06:17 CEST] Pusher: Syncing with diskstation
+
+sent 20043654 bytes received 42 bytes 3083645.54 bytes/sec
+total size is 20041059 speedup is 1.00
+[2014-05-25 21:06:18 CEST] Transferrer: Uploaded 19_esoterica.mp4
+
+WORM-s20049901-m1398382237--Learning Corel Painter X3%20_esoterica-mosaic.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4227072 21% 3.93MB/s 0:00:03
+remote: merge git-annex 7372800 36% 3.43MB/s 0:00:03
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+[2014-05-25 21:06:22 CEST] RemoteControl: Syncing with diskstation
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 3de6568..91bf58d git-annex -> synced/git-annex
+ 11042816 55% 3.45MB/s 0:00:02
+ 14712832 73% 3.45MB/s 0:00:01
+ 17858560 89% 3.20MB/s 0:00:00
+ 20049901 100% 3.44MB/s 0:00:05 (xfer#1, to-check=0/1)
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 22c09fa..f2cac44 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 91bf58d7240d46f8eee363bd3b56dde6deefc012 but expected 3de6568fc3634c50a42c935f315c763106a22e3c
+ ! 3de6568..91bf58d synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+sent 20052503 bytes received 42 bytes 2673672.67 bytes/sec
+total size is 20049901 speedup is 1.00
+[2014-05-25 21:06:25 CEST] Transferrer: Uploaded 20_esoter..osaic.mp4
+
+WORM-s18181651-m1398381889--Learning Corel Painter X3%21_selection-tools-and-commands.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:06:26 CEST] Pusher: Syncing with diskstation
+ 4751360 26% 4.38MB/s 0:00:02
+ 8421376 46% 3.89MB/s 0:00:02
+ 12091392 66% 3.71MB/s 0:00:01
+ 15761408 86% 3.64MB/s 0:00:00
+ 18181651 100% 3.65MB/s 0:00:04 (xfer#1, to-check=0/1)
+remote: merge git-annex
+sent 18184037 bytes received 42 bytes 2797550.62 bytes/sec
+total size is 18181651 speedup is 1.00
+[2014-05-25 21:06:31 CEST] Transferrer: Uploaded 21_select..mands.mp4
+
+WORM-s16431574-m1398381365--Learning Corel Painter X3%22_text-properties.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5013504 30% 4.71MB/s 0:00:02
+[2014-05-25 21:06:32 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 91bf58d..9341c6c git-annex -> synced/git-annex
+ 8355840 50% 3.82MB/s 0:00:02
+ 11763712 71% 3.60MB/s 0:00:01
+ 15466496 94% 3.57MB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ f2cac44..70eb4e9 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 9341c6cf9e5fe11181099779b7248a9debecaa26 but expected 91bf58d7240d46f8eee363bd3b56dde6deefc012
+ ! 91bf58d..9341c6c synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 16431574 100% 3.62MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 16433735 bytes received 42 bytes 2987959.45 bytes/sec
+total size is 16431574 speedup is 1.00
+[2014-05-25 21:06:36 CEST] Transferrer: Uploaded 22_text-p..rties.mp4
+
+WORM-s17364419-m1398381850--Learning Corel Painter X3%23_text-effects.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:06:37 CEST] Pusher: Syncing with diskstation
+ 5046272 29% 4.76MB/s 0:00:02
+ 8421376 48% 3.97MB/s 0:00:02
+ 12255232 70% 3.87MB/s 0:00:01
+ 16023552 92% 3.79MB/s 0:00:00
+remote: merge git-annex 17364419 100% 3.71MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 17366689 bytes received 42 bytes 3157587.45 bytes/sec
+total size is 17364419 speedup is 1.00
+[2014-05-25 21:06:42 CEST] RemoteControl: Syncing with diskstation
+[2014-05-25 21:06:42 CEST] Transferrer: Uploaded 23_text-effects.mp4
+
+WORM-s19708183-m1398382290--Learning Corel Painter X3%24_postcard-graphic-part-1.mp4
+ 32768 0% 0.00kB/s 0:00:00
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 9341c6c..08cb8d8 git-annex -> synced/git-annex
+ 4489216 22% 3.60MB/s 0:00:04
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 70eb4e9..dce2d61 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 08cb8d8ba4b56c67984027263d5213133dcdaad2 but expected 9341c6cf9e5fe11181099779b7248a9debecaa26
+ ! 9341c6c..08cb8d8 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+[2014-05-25 21:06:44 CEST] RemoteControl: Syncing with diskstation
+ 9469952 48% 4.08MB/s 0:00:02
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ dce2d61..ac9201d git-annex -> diskstation/git-annex
+ 13664256 69% 3.97MB/s 0:00:01
+ 17301504 87% 3.86MB/s 0:00:00
+[2014-05-25 21:06:47 CEST] Pusher: Syncing with diskstation
+ 19708183 100% 3.96MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 19710752 bytes received 42 bytes 3032429.85 bytes/sec
+total size is 19708183 speedup is 1.00
+[2014-05-25 21:06:48 CEST] Transferrer: Uploaded 24_postca..art-1.mp4
+
+WORM-s21565207-m1398381554--Learning Corel Painter X3%25_postcard-graphic-part-2.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5439488 25% 5.07MB/s 0:00:03
+remote: merge git-annex 9306112 43% 4.32MB/s 0:00:02
+[2014-05-25 21:06:51 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 08cb8d8..1212159 git-annex -> synced/git-annex
+ 13107200 60% 4.05MB/s 0:00:02
+ 16449536 76% 3.84MB/s 0:00:01
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ ac9201d..a885109 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 12121595714360b6216de28d0beef79305ec276d but expected 08cb8d8ba4b56c67984027263d5213133dcdaad2
+ ! 08cb8d8..1212159 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 20250624 93% 3.46MB/s 0:00:00
+ 21565207 100% 3.75MB/s 0:00:05 (xfer#1, to-check=0/1)
+
+sent 21568004 bytes received 42 bytes 2875739.47 bytes/sec
+total size is 21565207 speedup is 1.00
+[2014-05-25 21:06:55 CEST] Transferrer: Uploaded 25_postca..art-2.mp4
+
+WORM-s20239101-m1398380964--Learning Corel Painter X3%26_dynamic-layers.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:06:56 CEST] Pusher: Syncing with diskstation
+ 5275648 26% 4.78MB/s 0:00:03
+ 9404416 46% 4.35MB/s 0:00:02
+ 12943360 63% 4.03MB/s 0:00:01
+ 16384000 80% 3.85MB/s 0:00:00
+remote: merge git-annex 20152320 99% 3.52MB/s 0:00:00
+ 20239101 100% 3.77MB/s 0:00:05 (xfer#1, to-check=0/1)
+[2014-05-25 21:07:01 CEST] RemoteControl: Syncing with diskstation
+
+sent 20241725 bytes received 42 bytes 3114118.00 bytes/sec
+total size is 20239101 speedup is 1.00
+[2014-05-25 21:07:02 CEST] Transferrer: Uploaded 26_dynami..ayers.mp4
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 1212159..4c20688 git-annex -> synced/git-annex
+
+WORM-s17613999-m1398382264--Learning Corel Painter X3%27_auto-painting.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5275648 29% 4.78MB/s 0:00:02
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ a885109..ac9fbda git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 4c206880fc1f99dd380b0fb28ebb780b72171633 but expected 12121595714360b6216de28d0beef79305ec276d
+ ! 1212159..4c20688 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 9175040 52% 4.26MB/s 0:00:01
+ 12845056 72% 4.00MB/s 0:00:01
+ 16384000 93% 3.82MB/s 0:00:00
+[2014-05-25 21:07:07 CEST] Pusher: Syncing with diskstation
+ 17613999 100% 3.79MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 17616302 bytes received 42 bytes 3202971.64 bytes/sec
+total size is 17613999 speedup is 1.00
+[2014-05-25 21:07:08 CEST] Transferrer: Uploaded 27_auto-p..nting.mp4
+
+WORM-s15562581-m1398381274--Learning Corel Painter X3%28_smart-stroke-cloning.mp4
+ 32768 0% 0.00kB/s 0:00:00
+remote: merge git-annex 5275648 33% 4.77MB/s 0:00:02
+ 9469952 60% 4.34MB/s 0:00:01
+[2014-05-25 21:07:11 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 4c20688..f7be7ec git-annex -> synced/git-annex
+ 13139968 84% 4.06MB/s 0:00:00
+ 15562581 100% 3.89MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 15564639 bytes received 42 bytes 3458818.00 bytes/sec
+total size is 15562581 speedup is 1.00
+[2014-05-25 21:07:13 CEST] Transferrer: Uploaded 28_smart-..oning.mp4
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ ac9fbda..4f23f91 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at f7be7ececec0dd7a424dfc71571fc2a6cfc63bea but expected 4c206880fc1f99dd380b0fb28ebb780b72171633
+ ! 4c20688..f7be7ec synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+WORM-s28205928-m1398382150--Learning Corel Painter X3%29_mirror-and-kaleidoscope.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5537792 19% 4.94MB/s 0:00:04
+[2014-05-25 21:07:15 CEST] Pusher: Syncing with diskstation
+ 9994240 35% 4.54MB/s 0:00:03
+ 14155776 50% 4.34MB/s 0:00:03
+ 17956864 63% 4.16MB/s 0:00:02
+ 21725184 77% 3.79MB/s 0:00:01
+remote: merge git-annex 25198592 89% 3.58MB/s 0:00:00
+ 28205928 100% 3.85MB/s 0:00:06 (xfer#1, to-check=0/1)
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+[2014-05-25 21:07:21 CEST] RemoteControl: Syncing with diskstation
+
+sent 28209533 bytes received 42 bytes 3761276.67 bytes/sec
+total size is 28205928 speedup is 1.00
+ f7be7ec..5c452a1 git-annex -> synced/git-annex
+[2014-05-25 21:07:21 CEST] Transferrer: Uploaded 29_mirror..scope.mp4
+
+WORM-s21976288-m1398382005--Learning Corel Painter X3%30_introduction-to-mixed-media.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5406720 24% 5.07MB/s 0:00:03
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 4f23f91..1ca4624 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 5c452a15506c41b30a4ff7099c02f5dae74db8db but expected f7be7ececec0dd7a424dfc71571fc2a6cfc63bea
+ ! f7be7ec..5c452a1 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+[2014-05-25 21:22:27 CEST] Pusher: Syncing with diskstation
+remote: merge git-annex (merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 5c452a1..de02d45 git-annex -> synced/git-annex
+ 8486912 38% 9.03kB/s 0:24:53
+[2014-05-25 21:22:35 CEST] RemoteControl: Syncing with diskstation
+ 12353536 56% 13.15kB/s 0:12:11
+ 15761408 71% 16.76kB/s 0:06:10
+ 18644992 84% 14.11kB/s 0:03:56
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 1ca4624..0fddca6 git-annex -> diskstation/git-annex
+ 21921792 99% 3.02MB/s 0:00:00
+ 21976288 100% 23.34kB/s 0:15:18 (xfer#1, to-check=0/1)
+
+sent 21979137 bytes received 42 bytes 23903.40 bytes/sec
+total size is 21976288 speedup is 1.00
+[2014-05-25 21:22:40 CEST] Transferrer: Uploaded 30_introd..media.mp4
+[2014-05-25 21:22:40 CEST] Pusher: Syncing with diskstation
+
+WORM-s20759393-m1398382174--Learning Corel Painter X3%31_portrait-of-stephen.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4194304 20% 3.79MB/s 0:00:04
+ 6815744 32% 3.15MB/s 0:00:04
+remote: merge git-annex 9306112 44% 2.89MB/s 0:00:03
+ 12320768 59% 2.87MB/s 0:00:02
+[2014-05-25 21:22:45 CEST] RemoteControl: Syncing with diskstation
+/Applications/git-annex.app/Contents/MacOS/git-annex: fork: Resource temporarily unavailable
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ de02d45..251064b git-annex -> synced/git-annex
+ 15073280 72% 2.55MB/s 0:00:02
+ 17563648 84% 2.52MB/s 0:00:01
+ 20316160 97% 2.56MB/s 0:00:00
+ 20759393 100% 2.71MB/s 0:00:07 (xfer#1, to-check=0/1)
+
+sent 20762086 bytes received 42 bytes 2185487.16 bytes/sec
+total size is 20759393 speedup is 1.00
+[2014-05-25 21:22:49 CEST] Transferrer: Uploaded 31_portra..ephen.mp4
+
+WORM-s25441460-m1398381650--Learning Corel Painter X3%32_cel-animation.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:22:50 CEST] Pusher: Syncing with diskstation
+Pusher crashed: git: createProcess: resource exhausted (Resource temporarily unavailable)
+[2014-05-25 21:22:50 CEST] Pusher: warning Pusher crashed: git: createProcess: resource exhausted (Resource temporarily unavailable)
+ 4096000 16% 3.83MB/s 0:00:05
+ 6979584 27% 3.27MB/s 0:00:05
+ 9469952 37% 2.97MB/s 0:00:05
+ 12091392 47% 2.78MB/s 0:00:04
+ 13664256 53% 2.19MB/s 0:00:05
+ 16023552 62% 2.04MB/s 0:00:04
+ 18644992 73% 2.07MB/s 0:00:03
+ 21266432 83% 2.10MB/s 0:00:01
+ 23625728 92% 2.25MB/s 0:00:00
+ 25441460 100% 2.36MB/s 0:00:10 (xfer#1, to-check=0/1)
+
+sent 25444719 bytes received 42 bytes 2212587.91 bytes/sec
+total size is 25441460 speedup is 1.00
+[2014-05-25 21:23:00 CEST] Transferrer: Uploaded 32_cel-an..ation.mp4
+
+WORM-s23123916-m1398381154--Learning Corel Painter X3%33_rotoscope-techniques.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 2129920 9% 1.98MB/s 0:00:10
+ 5275648 22% 2.45MB/s 0:00:07
+ 8945664 38% 2.77MB/s 0:00:04
+ 12353536 53% 2.89MB/s 0:00:03
+ 15269888 66% 3.06MB/s 0:00:02
+ 18022400 77% 2.99MB/s 0:00:01
+ 20742144 89% 2.78MB/s 0:00:00
+ 23123916 100% 2.74MB/s 0:00:08 (xfer#1, to-check=0/1)
+
+sent 23126898 bytes received 42 bytes 2434414.74 bytes/sec
+total size is 23123916 speedup is 1.00
+[2014-05-25 21:23:10 CEST] Transferrer: Uploaded 33_rotosc..iques.mp4
+
+WORM-s16168686-m1398381345--Learning Corel Painter X3%34_portrait-of-hines-part-1.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4194304 25% 3.85MB/s 0:00:03
+ 7340032 45% 3.40MB/s 0:00:02
+ 10256384 63% 3.19MB/s 0:00:01
+ 13500416 83% 3.16MB/s 0:00:00
+ 16168686 100% 3.09MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 16170824 bytes received 42 bytes 2940157.45 bytes/sec
+total size is 16168686 speedup is 1.00
+[2014-05-25 21:23:16 CEST] Transferrer: Uploaded 34_portra..art-1.mp4
+
+WORM-s16185635-m1398381044--Learning Corel Painter X3%35_portrait-of-hines-part-2.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4390912 27% 4.09MB/s 0:00:02
+ 7372800 45% 3.37MB/s 0:00:02
+ 10518528 64% 3.23MB/s 0:00:01
+ 13139968 81% 3.02MB/s 0:00:00
+ 16185635 100% 3.13MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 16187773 bytes received 42 bytes 2490433.08 bytes/sec
+total size is 16185635 speedup is 1.00
+[2014-05-25 21:23:22 CEST] Transferrer: Uploaded 35_portra..art-2.mp4
+
+WORM-s30681625-m1398381209--Learning Corel Painter X3%36_portrait-of-hines-part-3.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4489216 14% 4.25MB/s 0:00:06
+ 7798784 25% 3.65MB/s 0:00:06
+ 11206656 36% 3.49MB/s 0:00:05
+ 14483456 47% 3.40MB/s 0:00:04
+ 17858560 58% 3.14MB/s 0:00:03
+ 21299200 69% 3.17MB/s 0:00:02
+ 24576000 80% 3.12MB/s 0:00:01
+ 27951104 91% 3.15MB/s 0:00:00
+ 30681625 100% 3.26MB/s 0:00:08 (xfer#1, to-check=0/1)
+
+sent 30685535 bytes received 42 bytes 3230060.74 bytes/sec
+total size is 30681625 speedup is 1.00
+[2014-05-25 21:23:32 CEST] Transferrer: Uploaded 36_portra..art-3.mp4
+
+WORM-s22528765-m1398382099--Learning Corel Painter X3%37_digital-watercolor.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4390912 19% 4.08MB/s 0:00:04
+ 7536640 33% 3.55MB/s 0:00:04
+ 10813440 47% 3.39MB/s 0:00:03
+ 14090240 62% 3.30MB/s 0:00:02
+ 17334272 76% 3.02MB/s 0:00:01
+ 21495808 95% 3.25MB/s 0:00:00
+ 22528765 100% 3.39MB/s 0:00:06 (xfer#1, to-check=0/1)
+
+sent 22531673 bytes received 42 bytes 3004228.67 bytes/sec
+total size is 22528765 speedup is 1.00
+[2014-05-25 21:23:39 CEST] Transferrer: Uploaded 37_digita..color.mp4
+
+WORM-s26374030-m1398381726--Learning Corel Painter X3%38_real-watercolor-part-1.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5210112 19% 4.87MB/s 0:00:04
+ 8945664 33% 4.18MB/s 0:00:04
+ 13074432 49% 4.08MB/s 0:00:03
+ 16547840 62% 3.89MB/s 0:00:02
+ 20676608 78% 3.65MB/s 0:00:01
+ 24412160 92% 3.63MB/s 0:00:00
+ 26374030 100% 3.82MB/s 0:00:06 (xfer#1, to-check=0/1)
+
+sent 26377410 bytes received 42 bytes 3103229.65 bytes/sec
+total size is 26374030 speedup is 1.00
+[2014-05-25 21:23:47 CEST] Transferrer: Uploaded 38_real-w..art-1.mp4
+
+WORM-s19723496-m1398381429--Learning Corel Painter X3%39_real-watercolor-part-2.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4751360 24% 4.50MB/s 0:00:03
+ 8683520 44% 4.11MB/s 0:00:02
+ 12517376 63% 3.96MB/s 0:00:01
+ 16384000 83% 3.88MB/s 0:00:00
+ 19723496 100% 3.86MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 19726064 bytes received 42 bytes 3586564.73 bytes/sec
+total size is 19723496 speedup is 1.00
+[2014-05-25 21:23:53 CEST] Transferrer: Uploaded 39_real-w..art-2.mp4
+
+WORM-s19493451-m1398381312--Learning Corel Painter X3%40_caricature-part-1.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4980736 25% 4.62MB/s 0:00:03
+ 8683520 44% 4.04MB/s 0:00:02
+ 12615680 64% 3.91MB/s 0:00:01
+ 16547840 84% 3.84MB/s 0:00:00
+ 19493451 100% 3.84MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 19495986 bytes received 42 bytes 2999388.92 bytes/sec
+total size is 19493451 speedup is 1.00
+[2014-05-25 21:23:59 CEST] Transferrer: Uploaded 40_carica..art-1.mp4
+rsync: fork: Resource temporarily unavailable (35)
+rsync error: error in IPC code (code 14) at /SourceCache/rsync/rsync-42/rsync/pipe.c(65) [sender=2.6.9]
+rsync: fork: Resource temporarily unavailable (35)
+rsync error: error in IPC code (code 14) at /SourceCache/rsync/rsync-42/rsync/pipe.c(65) [sender=2.6.9]
+[2014-05-25 21:36:13 CEST] NetWatcherFallback: Syncing with diskstation
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 0fddca6..08995a9 git-annex -> diskstation/git-annex
+remote: merge git-annex (merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+[2014-05-25 21:36:38 CEST] RemoteControl: Syncing with diskstation
+ 251064b..9043046 git-annex -> synced/git-annex
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 08995a9..d2359ee git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 90430461e599b7aad5bc8f4891f1e0eac38766b0 but expected 251064bd591813a5e813bd9cefafb8b4e6788f77
+ ! 251064b..9043046 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+
+ rsync failed -- run git annex again to resume file transfer
+
+
+ rsync failed -- run git annex again to resume file transfer
+
+
+ rsync failed -- run git annex again to resume file transfer
+
+WORM-s14012455-m1398381979--Learning Corel Painter X3%41_caricature-part-2.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4227072 30% 3.81MB/s 0:00:02
+ 8159232 58% 3.69MB/s 0:00:01
+ 9994240 71% 3.04MB/s 0:00:01
+ 11829248 84% 2.67MB/s 0:00:00
+ 13664256 97% 2.15MB/s 0:00:00
+ 14012455 100% 2.50MB/s 0:00:05 (xfer#1, to-check=0/1)
+
+sent 14014322 bytes received 42 bytes 1868581.87 bytes/sec
+total size is 14012455 speedup is 1.00
+[2014-05-25 21:37:01 CEST] Transferrer: Uploaded 41_carica..art-2.mp4
+
+WORM-s2813795-m1398381163--Learning Corel Painter X3%42_about-the-author.mp4
+ 32768 1% 0.00kB/s 0:00:00
+ 2813795 100% 6.18MB/s 0:00:00 (xfer#1, to-check=0/1)
+
+sent 2814292 bytes received 42 bytes 1125733.60 bytes/sec
+total size is 2813795 speedup is 1.00
+[2014-05-25 21:37:03 CEST] Transferrer: Uploaded 42_about-..uthor.mp4
+
+WORM-s15151010-m1398381679--Learning Corel Painter X3%43_painter-resources-and-the-painter-community.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5111808 33% 4.69MB/s 0:00:02
+ 9109504 60% 4.20MB/s 0:00:01
+ 12779520 84% 3.97MB/s 0:00:00
+ 15151010 100% 3.95MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 15153043 bytes received 42 bytes 3367352.22 bytes/sec
+total size is 15151010 speedup is 1.00
+[2014-05-25 21:37:07 CEST] Transferrer: Uploaded 43_painte..unity.mp4
+Watcher crashed: ResumeWatcher
+[2014-05-25 21:39:08 CEST] Watcher: warning Watcher crashed: ResumeWatcher
+
+
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(scanning...) [2014-05-25 21:39:16 CEST] Watcher: Performing startup scan
+[2014-05-25 21:39:20 CEST] Pusher: Syncing with diskstation
+remote: merge git-annex (merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 9043046..57f7b8b git-annex -> synced/git-annex
+[2014-05-25 21:39:28 CEST] RemoteControl: Syncing with diskstation
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ d2359ee..e459e2f git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 57f7b8bb8d2dd5418eda74deef4a0338b00390d9 but expected 90430461e599b7aad5bc8f4891f1e0eac38766b0
+ ! 9043046..57f7b8b synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(started...) [2014-05-25 21:39:46 CEST] Committer: Committing changes to git
+[2014-05-25 21:39:46 CEST] Pusher: Syncing with diskstation
+Already up-to-date.
+remote: merge git-annex ok
+remote: merge synced/master Updating 53c007f..6f2044d
+remote: Fast-forward
+remote: .../01_introduction.mp4 | 1 +
+remote: .../02_setting-up.mp4 | 1 +
+remote: .../03_selecting-and-creating-elements.mp4 | 1 +
+remote: .../04_exercise-1.mp4 | 1 +
+remote: An Introduction to d3.js - From Scattered to Scatterplot/05_svg.mp4 | 1 +
+remote: .../06_exercise-2.mp4 | 1 +
+remote: .../07_binding-data-and-creating-elements-from-data.mp4 | 1 +
+remote: .../08_exercise-3.mp4 | 1 +
+remote: .../09_transitions.mp4 | 1 +
+remote: An Introduction to d3.js - From Scattered to Scatterplot/10_scales-2.mp4 | 1 +
+remote: An Introduction to d3.js - From Scattered to Scatterplot/10_scales.mp4 | 1 +
+remote: An Introduction to d3.js - From Scattered to Scatterplot/11_axes.mp4 | 1 +
+remote: .../12_advanced-techniques.mp4 | 1 +
+remote: .../13_conclusion.mp4 | 1 +
+remote: C++ Memory Management/01_introduction.mp4 | 1 +
+remote: C++ Memory Management/02_leaks-and-overruns.mp4 | 1 +
+remote: .../03_stl-vector-methods-range-checking-and-sentinels.mp4 | 1 +
+remote: C++ Memory Management/04_memory-leaks-part-1.mp4 | 1 +
+remote: C++ Memory Management/05_memory-leaks-part-2.mp4 | 1 +
+remote: C++ Memory Management/06_pointers-pitfalls-and-best-practices.mp4 | 1 +
+remote: C++ Memory Management/07_initialize-everything-trust-but-verify.mp4 | 1 +
+remote: C++ Memory Management/08_reading-and-writing-shared-assets.mp4 | 1 +
+remote: C++ Memory Management/09_undefined-behaviour-and-other-bad-practices.mp4 | 1 +
+remote: C++ Memory Management/10_the-heap-and-stl-wrappers.mp4 | 1 +
+remote: C++ Memory Management/11_about-the-author.mp4 | 1 +
+remote: Lean UX Workshop/01_introduction.mp4 | 1 +
+remote: Lean UX Workshop/02_nordstrom-case-study.mp4 | 1 +
+remote: Lean UX Workshop/03_assumptions-and-hypotheses.mp4 | 1 +
+remote: Lean UX Workshop/04_personas.mp4 | 1 +
+remote: Lean UX Workshop/05_outcomes-and-features.mp4 | 1 +
+remote: Lean UX Workshop/06_writing-hypotheses.mp4 | 1 +
+remote: Lean UX Workshop/07_design-studio.mp4 | 1 +
+remote: Lean UX Workshop/08_experiments-and-mvp-s.mp4 | 1 +
+remote: Lean UX Workshop/09_research.mp4 | 1 +
+remote: Lean UX Workshop/10_combining-lean-and-agile.mp4 | 1 +
+remote: Lean UX Workshop/11_tools-and-techniques.mp4 | 1 +
+remote: Learning Corel Painter X3/01_a-quick-tour-of-painter.mp4 | 1 +
+remote: Learning Corel Painter X3/02_brushes-and-custom-palettes.mp4 | 1 +
+remote: Learning Corel Painter X3/03_managing-layers.mp4 | 1 +
+remote: Learning Corel Painter X3/04_project-red-chairs.mp4 | 1 +
+remote: Learning Corel Painter X3/05_the-toolbox-part-1.mp4 | 1 +
+remote: Learning Corel Painter X3/06_the-toolbox-part-2.mp4 | 1 +
+remote: Learning Corel Painter X3/07_color-panels.mp4 | 1 +
+remote: Learning Corel Painter X3/08_paper-and-media-libraries.mp4 | 1 +
+remote: Learning Corel Painter X3/09_menu-commands-part-1.mp4 | 1 +
+remote: Learning Corel Painter X3/10_menu-commands-part-2.mp4 | 1 +
+remote: Learning Corel Painter X3/11_cloner-brushes.mp4 | 1 +
+remote: Learning Corel Painter X3/12_project-clone-painting-a-pear.mp4 | 1 +
+remote: Learning Corel Painter X3/13_dab-stroke-and-method.mp4 | 1 +
+remote: Learning Corel Painter X3/14_advanced-controls.mp4 | 1 +
+remote: Learning Corel Painter X3/15_custom-variants.mp4 | 1 +
+remote: Learning Corel Painter X3/16_abstract-painting.mp4 | 1 +
+remote: Learning Corel Painter X3/17_tonal-controls.mp4 | 1 +
+remote: Learning Corel Painter X3/18_surface-controls.mp4 | 1 +
+remote: Learning Corel Painter X3/19_esoterica.mp4 | 1 +
+remote: Learning Corel Painter X3/20_esoterica-mosaic.mp4 | 1 +
+remote: Learning Corel Painter X3/21_selection-tools-and-commands.mp4 | 1 +
+remote: Learning Corel Painter X3/22_text-properties.mp4 | 1 +
+remote: Learning Corel Painter X3/23_text-effects.mp4 | 1 +
+remote: Learning Corel Painter X3/24_postcard-graphic-part-1.mp4 | 1 +
+remote: Learning Corel Painter X3/25_postcard-graphic-part-2.mp4 | 1 +
+remote: Learning Corel Painter X3/26_dynamic-layers.mp4 | 1 +
+remote: Learning Corel Painter X3/27_auto-painting.mp4 | 1 +
+remote: Learning Corel Painter X3/28_smart-stroke-cloning.mp4 | 1 +
+remote: Learning Corel Painter X3/29_mirror-and-kaleidoscope.mp4 | 1 +
+remote: Learning Corel Painter X3/30_introduction-to-mixed-media.mp4 | 1 +
+remote: Learning Corel Painter X3/31_portrait-of-stephen.mp4 | 1 +
+remote: Learning Corel Painter X3/32_cel-animation.mp4 | 1 +
+remote: Learning Corel Painter X3/33_rotoscope-techniques.mp4 | 1 +
+remote: Learning Corel Painter X3/34_portrait-of-hines-part-1.mp4 | 1 +
+remote: Learning Corel Painter X3/35_portrait-of-hines-part-2.mp4 | 1 +
+remote: Learning Corel Painter X3/36_portrait-of-hines-part-3.mp4 | 1 +
+remote: Learning Corel Painter X3/37_digital-watercolor.mp4 | 1 +
+remote: Learning Corel Painter X3/38_real-watercolor-part-1.mp4 | 1 +
+remote: Learning Corel Painter X3/39_real-watercolor-part-2.mp4 | 1 +
+remote: Learning Corel Painter X3/40_caricature-part-1.mp4 | 1 +
+remote: Learning Corel Painter X3/41_caricature-part-2.mp4 | 1 +
+remote: Learning Corel Painter X3/42_about-the-author.mp4 | 1 +
+remote: .../43_painter-resources-and-the-painter-community.mp4 | 1 +
+remote: 79 files changed, 79 insertions(+)
+remote: create mode 120000 An Introduction to d3.js - From Scattered to Scatterplot/01_introduction.mp4
+remote: create mode 120000 An Introduction to d3.js - From Scattered to Scatterplot/02_setting-up.mp4
+remote: create mode 120000 An Introduction to d3.js - From Scattered to Scatterplot/03_selecting-and-creating-elements.mp4
+remote: create mode 120000 An Introduction to d3.js - From Scattered to Scatterplot/04_exercise-1.mp4
+remote: create mode 120000 An Introduction to d3.js - From Scattered to Scatterplot/05_svg.mp4
+remote: create mode 120000 An Introduction to d3.js - From Scattered to Scatterplot/06_exercise-2.mp4
+remote: create mode 120000 An Introduction to d3.js - From Scattered to Scatterplot/07_binding-data-and-creating-elements-from-data.mp4
+remote: create mode 120000 An Introduction to d3.js - From Scattered to Scatterplot/08_exercise-3.mp4
+remote: create mode 120000 An Introduction to d3.js - From Scattered to Scatterplot/09_transitions.mp4
+remote: create mode 120000 An Introduction to d3.js - From Scattered to Scatterplot/10_scales-2.mp4
+remote: create mode 120000 An Introduction to d3.js - From Scattered to Scatterplot/10_scales.mp4
+remote: create mode 120000 An Introduction to d3.js - From Scattered to Scatterplot/11_axes.mp4
+remote: create mode 120000 An Introduction to d3.js - From Scattered to Scatterplot/12_advanced-techniques.mp4
+remote: create mode 120000 An Introduction to d3.js - From Scattered to Scatterplot/13_conclusion.mp4
+remote: create mode 120000 C++ Memory Management/01_introduction.mp4
+remote: create mode 120000 C++ Memory Management/02_leaks-and-overruns.mp4
+remote: create mode 120000 C++ Memory Management/03_stl-vector-methods-range-checking-and-sentinels.mp4
+remote: create mode 120000 C++ Memory Management/04_memory-leaks-part-1.mp4
+remote: create mode 120000 C++ Memory Management/05_memory-leaks-part-2.mp4
+remote: create mode 120000 C++ Memory Management/06_pointers-pitfalls-and-best-practices.mp4
+remote: create mode 120000 C++ Memory Management/07_initialize-everything-trust-but-verify.mp4
+remote: create mode 120000 C++ Memory Management/08_reading-and-writing-shared-assets.mp4
+remote: create mode 120000 C++ Memory Management/09_undefined-behaviour-and-other-bad-practices.mp4
+remote: create mode 120000 C++ Memory Management/10_the-heap-and-stl-wrappers.mp4
+remote: create mode 120000 C++ Memory Management/11_about-the-author.mp4
+remote: create mode 120000 Lean UX Workshop/01_introduction.mp4
+remote: create mode 120000 Lean UX Workshop/02_nordstrom-case-study.mp4
+remote: create mode 120000 Lean UX Workshop/03_assumptions-and-hypotheses.mp4
+remote: create mode 120000 Lean UX Workshop/04_personas.mp4
+remote: create mode 120000 Lean UX Workshop/05_outcomes-and-features.mp4
+remote: create mode 120000 Lean UX Workshop/06_writing-hypotheses.mp4
+remote: create mode 120000 Lean UX Workshop/07_design-studio.mp4
+remote: create mode 120000 Lean UX Workshop/08_experiments-and-mvp-s.mp4
+remote: create mode 120000 Lean UX Workshop/09_research.mp4
+remote: create mode 120000 Lean UX Workshop/10_combining-lean-and-agile.mp4
+remote: create mode 120000 Lean UX Workshop/11_tools-and-techniques.mp4
+remote: create mode 120000 Learning Corel Painter X3/01_a-quick-tour-of-painter.mp4
+remote: create mode 120000 Learning Corel Painter X3/02_brushes-and-custom-palettes.mp4
+remote: create mode 120000 Learning Corel Painter X3/03_managing-layers.mp4
+remote: create mode 120000 Learning Corel Painter X3/04_project-red-chairs.mp4
+remote: create mode 120000 Learning Corel Painter X3/05_the-toolbox-part-1.mp4
+remote: create mode 120000 Learning Corel Painter X3/06_the-toolbox-part-2.mp4
+remote: create mode 120000 Learning Corel Painter X3/07_color-panels.mp4
+remote: create mode 120000 Learning Corel Painter X3/08_paper-and-media-libraries.mp4
+remote: create mode 120000 Learning Corel Painter X3/09_menu-commands-part-1.mp4
+remote: create mode 120000 Learning Corel Painter X3/10_menu-commands-part-2.mp4
+remote: create mode 120000 Learning Corel Painter X3/11_cloner-brushes.mp4
+remote: create mode 120000 Learning Corel Painter X3/12_project-clone-painting-a-pear.mp4
+remote: create mode 120000 Learning Corel Painter X3/13_dab-stroke-and-method.mp4
+remote: create mode 120000 Learning Corel Painter X3/14_advanced-controls.mp4
+remote: create mode 120000 Learning Corel Painter X3/15_custom-variants.mp4
+remote: create mode 120000 Learning Corel Painter X3/16_abstract-painting.mp4
+remote: create mode 120000 Learning Corel Painter X3/17_tonal-controls.mp4
+remote: create mode 120000 Learning Corel Painter X3/18_surface-controls.mp4
+remote: create mode 120000 Learning Corel Painter X3/19_esoterica.mp4
+remote: create mode 120000 Learning Corel Painter X3/20_esoterica-mosaic.mp4
+remote: create mode 120000 Learning Corel Painter X3/21_selection-tools-and-commands.mp4
+remote: create mode 120000 Learning Corel Painter X3/22_text-properties.mp4
+remote: create mode 120000 Learning Corel Painter X3/23_text-effects.mp4
+remote: create mode 120000 Learning Corel Painter X3/24_postcard-graphic-part-1.mp4
+remote: create mode 120000 Learning Corel Painter X3/25_postcard-graphic-part-2.mp4
+remote: create mode 120000 Learning Corel Painter X3/26_dynamic-layers.mp4
+remote: create mode 120000 Learning Corel Painter X3/27_auto-painting.mp4
+remote: create mode 120000 Learning Corel Painter X3/28_smart-stroke-cloning.mp4
+remote: create mode 120000 Learning Corel Painter X3/29_mirror-and-kaleidoscope.mp4
+remote: create mode 120000 Learning Corel Painter X3/30_introduction-to-mixed-media.mp4
+remote: create mode 120000 Learning Corel Painter X3/31_portrait-of-stephen.mp4
+remote: create mode 120000 Learning Corel Painter X3/32_cel-animation.mp4
+remote: create mode 120000 Learning Corel Painter X3/33_rotoscope-techniques.mp4
+remote: create mode 120000 Learning Corel Painter X3/34_portrait-of-hines-part-1.mp4
+remote: create mode 120000 Learning Corel Painter X3/35_portrait-of-hines-part-2.mp4
+remote: create mode 120000 Learning Corel Painter X3/36_portrait-of-hines-part-3.mp4
+remote: create mode 120000 Learning Corel Painter X3/37_digital-watercolor.mp4
+remote: create mode 120000 Learning Corel Painter X3/38_real-watercolor-part-1.mp4
+remote: create mode 120000 Learning Corel Painter X3/39_real-watercolor-part-2.mp4
+remote: create mode 120000 Learning Corel Painter X3/40_caricature-part-1.mp4
+remote: create mode 120000 Learning Corel Painter X3/41_caricature-part-2.mp4
+remote: create mode 120000 Learning Corel Painter X3/42_about-the-author.mp4
+remote: create mode 120000 Learning Corel Painter X3/43_painter-resources-and-the-painter-community.mp4
+remote:
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 57f7b8b..e459e2f git-annex -> synced/git-annex
+ 53c007f..6f2044d master -> synced/master
+Already up-to-date.
+[2014-05-25 21:41:22 CEST] Committer: Adding 01_introduction.mp4 02_settin..plate.mp4 03_settin..lbars.mp4 04_how-to..files.mp4 05_line-tool.mp4 06_rectan..-tool.mp4 07_circle-tool.mp4 08_polygon-tool.mp4 09_arc-tool.mp4 and 34 other files
+
+(Recording state in git...)
+
+
+add Learning SketchUp 2013/01_introduction.mp4 ok
+add Learning SketchUp 2013/02_setting-up-the-template.mp4 ok
+add Learning SketchUp 2013/03_setting-up-the-toolbars.mp4 ok
+add Learning SketchUp 2013/04_how-to-access-your-working-files.mp4 ok
+add Learning SketchUp 2013/05_line-tool.mp4 ok
+add Learning SketchUp 2013/06_rectangle-tool.mp4 ok
+add Learning SketchUp 2013/07_circle-tool.mp4 ok
+add Learning SketchUp 2013/08_polygon-tool.mp4 ok
+add Learning SketchUp 2013/09_arc-tool.mp4 ok
+add Learning SketchUp 2013/100_adding-lighting.mp4 ok
+add Learning SketchUp 2013/101_add-reflections-to-existing-textures.mp4 ok
+add Learning SketchUp 2013/102_model-presets-create-a-preview-rendering.mp4 ok
+add Learning SketchUp 2013/103_rendering-a-high-quality-image.mp4 ok
+add Learning SketchUp 2013/104_post-processing-in-photoshop.mp4 ok
+add Learning SketchUp 2013/105_what-is-layout.mp4 ok
+add Learning SketchUp 2013/106_adjusting-the-model-settings.mp4 ok
+add Learning SketchUp 2013/108_adding-additional-pages-and-content.mp4 ok
+add Learning SketchUp 2013/109_updating-the-model-references.mp4 ok
+add Learning SketchUp 2013/10_freehand-tool.mp4 ok
+add Learning SketchUp 2013/111_about-dan-brown.mp4 ok
+add Learning SketchUp 2013/11_navigating-in-3d.mp4 ok
+add Learning SketchUp 2013/12_push-pull-and-move-tool.mp4 ok
+add Learning SketchUp 2013/13_using-follow-me-complex-roof-pitches.mp4 ok
+add Learning SketchUp 2013/14_creating-a-mansard-roof.mp4 ok
+add Learning SketchUp 2013/15_creating-a-gambrel-roof.mp4 ok
+add Learning SketchUp 2013/16_measurements.mp4 ok
+add Learning SketchUp 2013/18_extruding-your-walls-push-pull-and-offset.mp4 ok
+add Learning SketchUp 2013/19_creating-doors-and-openings.mp4 ok
+add Learning SketchUp 2013/20_clean-up-using-the-eraser-to-remove-unwanted-edges.mp4 ok
+add Learning SketchUp 2013/21_why-groups.mp4 ok
+add Learning SketchUp 2013/22_creating-the-second-floor.mp4 ok
+add Learning SketchUp 2013/23_creating-additional-openings.mp4 ok
+add Learning SketchUp 2013/24_hide-model-and-other-useful-shortcuts.mp4 ok
+add Learning SketchUp 2013/25_using-the-outliner.mp4 ok
+add Learning SketchUp 2013/26_using-layers-to-control-visibility.mp4 ok
+add Learning SketchUp 2013/27_viewing-layer-states-of-the-model.mp4 ok
+add Learning SketchUp 2013/28_field-of-view.mp4 ok
+add Learning SketchUp 2013/29_dividing-faces-to-create-your-rooms.mp4 ok
+add Learning SketchUp 2013/30_area-tool-for-calculations.mp4 ok
+add Learning SketchUp 2013/31_using-paint-bucket-for-floor-texture-2.mp4 ok
+add Learning SketchUp 2013/31_using-paint-bucket-for-floor-texture.mp4 ok
+add Learning SketchUp 2013/32_importing-and-applying-a-texture.mp4 ok
+add Learning SketchUp 2013/33_positioning-an-imported-texture.mp4 [2014-05-25 21:41:29 CEST] Committer: Adding 34_editin..tchup.mp4 35_editin..oshop.mp4 36_hide-e..-tool.mp4 37_creati..iling.mp4 38_assign..roups.mp4 39_adding..ter-7.mp4 40_creati..lding.mp4 41_copy-a..place.mp4 42_why-we..nents.mp4 and 57 other files
+ok
+add Learning SketchUp 2013/34_editing-texture-colour-in-sketchup.mp4 ok
+add Learning SketchUp 2013/35_editing-a-texture-in-photoshop.mp4 ok
+add Learning SketchUp 2013/36_hide-edges-and-lines-with-the-eraser-tool.mp4 ok
+add Learning SketchUp 2013/37_creating-the-ceiling.mp4 ok
+add Learning SketchUp 2013/38_assigning-layers-within-groups.mp4 ok
+add Learning SketchUp 2013/39_adding-detail-chapter-7.mp4 ok
+add Learning SketchUp 2013/40_creating-crown-moulding.mp4 ok
+add Learning SketchUp 2013/41_copy-and-paste-in-place.mp4 ok
+add Learning SketchUp 2013/42_why-we-use-groups-and-components.mp4 ok
+add Learning SketchUp 2013/43_creating-the-staircase.mp4 ok
+add Learning SketchUp 2013/44_adding-riser-detail.mp4 ok
+add Learning SketchUp 2013/45_making-a-unique-bottom-step.mp4 ok
+add Learning SketchUp 2013/46_adding-spindles-with-move-and-copy.mp4 ok
+add Learning SketchUp 2013/47_adding-railing.mp4 ok
+add Learning SketchUp 2013/48_review-of-components-and-nested-groups.mp4 ok
+add Learning SketchUp 2013/49_creating-doors.mp4 ok
+add Learning SketchUp 2013/50_creating-the-front-window-frame.mp4 ok
+add Learning SketchUp 2013/51_double-hung-windows.mp4 ok
+add Learning SketchUp 2013/52_installing-bit-tools-plugins.mp4 ok
+add Learning SketchUp 2013/53_creating-walls-and-door-openings.mp4 ok
+add Learning SketchUp 2013/54_using-the-window-feature.mp4 ok
+add Learning SketchUp 2013/55_starting-at-the-base.mp4 ok
+add Learning SketchUp 2013/56_building-the-mantle.mp4 ok
+add Learning SketchUp 2013/57_mantle-columns.mp4 ok
+add Learning SketchUp 2013/58_mantle-support.mp4 ok
+add Learning SketchUp 2013/59_adding-textures.mp4 ok
+add Learning SketchUp 2013/60_base-cabinets.mp4 ok
+add Learning SketchUp 2013/61_wall-cabinets.mp4 ok
+add Learning SketchUp 2013/62_cabinet-doors.mp4 ok
+add Learning SketchUp 2013/63_creating-the-countertop.mp4 ok
+add Learning SketchUp 2013/64_adding-materials.mp4 ok
+add Learning SketchUp 2013/65_adding-appliances.mp4 ok
+add Learning SketchUp 2013/66_adding-the-fridge-and-sink.mp4 ok
+add Learning SketchUp 2013/67_using-the-3d-warehouse.mp4 ok
+add Learning SketchUp 2013/68_using-form-fonts.mp4 ok
+add Learning SketchUp 2013/69_using-the-podium-browser.mp4 ok
+add Learning SketchUp 2013/70_creating-a-library.mp4 ok
+add Learning SketchUp 2013/71_setting-up-to-match-a-new-photo.mp4 ok
+add Learning SketchUp 2013/72_creating-the-massing-model.mp4 ok
+add Learning SketchUp 2013/73_applying-textures.mp4 ok
+add Learning SketchUp 2013/74_adding-detail-chapter-13.mp4 ok
+add Learning SketchUp 2013/75_saving-and-placing-into-the-model.mp4 ok
+add Learning SketchUp 2013/76_creating-the-exterior.mp4 ok
+add Learning SketchUp 2013/77_setting-the-building-in-place-geolocation.mp4 ok
+add Learning SketchUp 2013/78_reset-axis-to-align-building.mp4 ok
+add Learning SketchUp 2013/79_creating-the-front-facade.mp4 ok
+add Learning SketchUp 2013/80_adding-context.mp4 ok
+add Learning SketchUp 2013/81_get-photo-google-street-view.mp4 ok
+add Learning SketchUp 2013/82_using-3d-text.mp4 ok
+add Learning SketchUp 2013/83_add-solar-panels-with-skelion-plugin.mp4 ok
+add Learning SketchUp 2013/84_creating-scenes-and-updating.mp4 ok
+add Learning SketchUp 2013/85_styles.mp4 ok
+add Learning SketchUp 2013/86_scenes-for-animation.mp4 ok
+add Learning SketchUp 2013/87_section-cut-for-interior-elevations.mp4 ok
+add Learning SketchUp 2013/88_creating-a-group.mp4 ok
+add Learning SketchUp 2013/89_creating-the-animation.mp4 ok
+add Learning SketchUp 2013/90_jpeg-and-png-files.mp4 ok
+add Learning SketchUp 2013/91_dwg-elevation-and-plan-pro-feature.mp4 ok
+add Learning SketchUp 2013/92_kmz-for-google-earth.mp4 ok
+add Learning SketchUp 2013/93_collada-files.mp4 ok
+add Learning SketchUp 2013/94_animation-options.mp4 ok
+add Learning SketchUp 2013/95_add-final-touches.mp4 ok
+add Learning SketchUp 2013/96_export-display-options.mp4 ok
+add Learning SketchUp 2013/97_stacking-images-in-photoshop.mp4 ok
+add Learning SketchUp 2013/98_multiply-and-opacity.mp4 ok
+add Learning SketchUp 2013/99_saving-the-image.mp4 [2014-05-25 21:41:31 CEST] Committer: Committing changes to git
+[2014-05-25 21:41:32 CEST] Pusher: Syncing with diskstation
+
+WORM-s8756441-m1398385688--Learning SketchUp 2013%34_editing-texture-colour-in-sketchup.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 2654208 30% 1.97MB/s 0:00:03
+ 5734400 65% 2.32MB/s 0:00:01
+Already up-to-date.
+ 8756441 100% 2.66MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 8757681 bytes received 42 bytes 1592313.27 bytes/sec
+total size is 8756441 speedup is 1.00
+[2014-05-25 21:41:37 CEST] Transferrer: Uploaded 34_editin..tchup.mp4
+
+WORM-s16632826-m1398386674--Learning SketchUp 2013%33_positioning-an-imported-texture.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4423680 26% 4.12MB/s 0:00:02
+ 8486912 51% 3.96MB/s 0:00:02
+ 12517376 75% 3.90MB/s 0:00:01
+remote: merge git-annex 16580608 99% 3.87MB/s 0:00:00
+ 16632826 100% 3.89MB/s 0:00:04 (xfer#1, to-check=0/1)
+[2014-05-25 21:41:42 CEST] RemoteControl: Syncing with diskstation
+
+sent 16635024 bytes received 42 bytes 3024557.45 bytes/sec
+total size is 16632826 speedup is 1.00
+[2014-05-25 21:41:43 CEST] Transferrer: Uploaded 33_positi..xture.mp4
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: merge synced/master
+WORM-s13603741-m1398386183--Learning SketchUp 2013%32_importing-and-applying-a-texture.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 3244032 23% 3.06MB/s 0:00:03
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ e459e2f..297826c git-annex -> diskstation/git-annex
+ e459e2f..26c6449 synced/git-annex -> diskstation/synced/git-annex
+ 6f2044d..7500a88 synced/master -> diskstation/synced/master
+Already up-to-date.
+Updating 6f2044d..7500a88
+remote: Fast-forward
+ 6520832 47% 3.08MB/s 0:00:02
+remote: Learning SketchUp 2013/01_introduction.mp4 | 1 +
+remote: Learning SketchUp 2013/02_setting-up-the-template.mp4 | 1 +
+remote: Learning SketchUp 2013/03_setting-up-the-toolbars.mp4 | 1 +
+remote: Learning SketchUp 2013/04_how-to-access-your-working-files.mp4 | 1 +
+remote: Learning SketchUp 2013/05_line-tool.mp4 | 1 +
+remote: Learning SketchUp 2013/06_rectangle-tool.mp4 | 1 +
+remote: Learning SketchUp 2013/07_circle-tool.mp4 | 1 +
+remote: Learning SketchUp 2013/08_polygon-tool.mp4 | 1 +
+remote: Learning SketchUp 2013/09_arc-tool.mp4 | 1 +
+remote: Learning SketchUp 2013/100_adding-lighting.mp4 | 1 +
+remote: Learning SketchUp 2013/101_add-reflections-to-existing-textures.mp4 | 1 +
+remote: Learning SketchUp 2013/102_model-presets-create-a-preview-rendering.mp4 | 1 +
+remote: Learning SketchUp 2013/103_rendering-a-high-quality-image.mp4 | 1 +
+remote: Learning SketchUp 2013/104_post-processing-in-photoshop.mp4 | 1 +
+remote: Learning SketchUp 2013/105_what-is-layout.mp4 | 1 +
+remote: Learning SketchUp 2013/106_adjusting-the-model-settings.mp4 | 1 +
+remote: Learning SketchUp 2013/108_adding-additional-pages-and-content.mp4 | 1 +
+remote: Learning SketchUp 2013/109_updating-the-model-references.mp4 | 1 +
+remote: Learning SketchUp 2013/10_freehand-tool.mp4 | 1 +
+remote: Learning SketchUp 2013/111_about-dan-brown.mp4 | 1 +
+remote: Learning SketchUp 2013/11_navigating-in-3d.mp4 | 1 +
+remote: Learning SketchUp 2013/12_push-pull-and-move-tool.mp4 | 1 +
+remote: Learning SketchUp 2013/13_using-follow-me-complex-roof-pitches.mp4 | 1 +
+remote: Learning SketchUp 2013/14_creating-a-mansard-roof.mp4 | 1 +
+remote: Learning SketchUp 2013/15_creating-a-gambrel-roof.mp4 | 1 +
+remote: Learning SketchUp 2013/16_measurements.mp4 | 1 +
+remote: Learning SketchUp 2013/18_extruding-your-walls-push-pull-and-offset.mp4 | 1 +
+remote: Learning SketchUp 2013/19_creating-doors-and-openings.mp4 | 1 +
+remote: .../20_clean-up-using-the-eraser-to-remove-unwanted-edges.mp4 | 1 +
+remote: Learning SketchUp 2013/21_why-groups.mp4 | 1 +
+remote: Learning SketchUp 2013/22_creating-the-second-floor.mp4 | 1 +
+remote: Learning SketchUp 2013/23_creating-additional-openings.mp4 | 1 +
+remote: Learning SketchUp 2013/24_hide-model-and-other-useful-shortcuts.mp4 | 1 +
+remote: Learning SketchUp 2013/25_using-the-outliner.mp4 | 1 +
+remote: Learning SketchUp 2013/26_using-layers-to-control-visibility.mp4 | 1 +
+remote: Learning SketchUp 2013/27_viewing-layer-states-of-the-model.mp4 | 1 +
+remote: Learning SketchUp 2013/28_field-of-view.mp4 | 1 +
+remote: Learning SketchUp 2013/29_dividing-faces-to-create-your-rooms.mp4 | 1 +
+remote: Learning SketchUp 2013/30_area-tool-for-calculations.mp4 | 1 +
+remote: Learning SketchUp 2013/31_using-paint-bucket-for-floor-texture-2.mp4 | 1 +
+remote: Learning SketchUp 2013/31_using-paint-bucket-for-floor-texture.mp4 | 1 +
+remote: Learning SketchUp 2013/32_importing-and-applying-a-texture.mp4 | 1 +
+remote: Learning SketchUp 2013/33_positioning-an-imported-texture.mp4 | 1 +
+remote: Learning SketchUp 2013/34_editing-texture-colour-in-sketchup.mp4 | 1 +
+remote: Learning SketchUp 2013/35_editing-a-texture-in-photoshop.mp4 | 1 +
+remote: Learning SketchUp 2013/36_hide-edges-and-lines-with-the-eraser-tool.mp4 | 1 +
+remote: Learning SketchUp 2013/37_creating-the-ceiling.mp4 | 1 +
+remote: Learning SketchUp 2013/38_assigning-layers-within-groups.mp4 | 1 +
+remote: Learning SketchUp 2013/39_adding-detail-chapter-7.mp4 | 1 +
+remote: Learning SketchUp 2013/40_creating-crown-moulding.mp4 | 1 +
+remote: Learning SketchUp 2013/41_copy-and-paste-in-place.mp4 | 1 +
+remote: Learning SketchUp 2013/42_why-we-use-groups-and-components.mp4 | 1 +
+remote: Learning SketchUp 2013/43_creating-the-staircase.mp4 | 1 +
+remote: Learning SketchUp 2013/44_adding-riser-detail.mp4 | 1 +
+remote: Learning SketchUp 2013/45_making-a-unique-bottom-step.mp4 | 1 +
+remote: Learning SketchUp 2013/46_adding-spindles-with-move-and-copy.mp4 | 1 +
+remote: Learning SketchUp 2013/47_adding-railing.mp4 | 1 +
+remote: Learning SketchUp 2013/48_review-of-components-and-nested-groups.mp4 | 1 +
+remote: Learning SketchUp 2013/49_creating-doors.mp4 | 1 +
+remote: Learning SketchUp 2013/50_creating-the-front-window-frame.mp4 | 1 +
+remote: Learning SketchUp 2013/51_double-hung-windows.mp4 | 1 +
+remote: Learning SketchUp 2013/52_installing-bit-tools-plugins.mp4 | 1 +
+remote: Learning SketchUp 2013/53_creating-walls-and-door-openings.mp4 | 1 +
+remote: Learning SketchUp 2013/54_using-the-window-feature.mp4 | 1 +
+remote: Learning SketchUp 2013/55_starting-at-the-base.mp4 | 1 +
+remote: Learning SketchUp 2013/56_building-the-mantle.mp4 | 1 +
+remote: Learning SketchUp 2013/57_mantle-columns.mp4 | 1 +
+remote: Learning SketchUp 2013/58_mantle-support.mp4 | 1 +
+remote: Learning SketchUp 2013/59_adding-textures.mp4 | 1 +
+remote: Learning SketchUp 2013/60_base-cabinets.mp4 | 1 +
+remote: Learning SketchUp 2013/61_wall-cabinets.mp4 | 1 +
+remote: Learning SketchUp 2013/62_cabinet-doors.mp4 | 1 +
+remote: Learning SketchUp 2013/63_creating-the-countertop.mp4 | 1 +
+remote: Learning SketchUp 2013/64_adding-materials.mp4 | 1 +
+remote: Learning SketchUp 2013/65_adding-appliances.mp4 | 1 +
+remote: Learning SketchUp 2013/66_adding-the-fridge-and-sink.mp4 | 1 +
+remote: Learning SketchUp 2013/67_using-the-3d-warehouse.mp4 | 1 +
+remote: Learning SketchUp 2013/68_using-form-fonts.mp4 | 1 +
+remote: Learning SketchUp 2013/69_using-the-podium-browser.mp4 | 1 +
+remote: Learning SketchUp 2013/70_creating-a-library.mp4 | 1 +
+remote: Learning SketchUp 2013/71_setting-up-to-match-a-new-photo.mp4 | 1 +
+remote: Learning SketchUp 2013/72_creating-the-massing-model.mp4 | 1 +
+remote: Learning SketchUp 2013/73_applying-textures.mp4 | 1 +
+remote: Learning SketchUp 2013/74_adding-detail-chapter-13.mp4 | 1 +
+remote: Learning SketchUp 2013/75_saving-and-placing-into-the-model.mp4 | 1 +
+remote: Learning SketchUp 2013/76_creating-the-exterior.mp4 | 1 +
+remote: Learning SketchUp 2013/77_setting-the-building-in-place-geolocation.mp4 | 1 +
+remote: Learning SketchUp 2013/78_reset-axis-to-align-building.mp4 | 1 +
+remote: Learning SketchUp 2013/79_creating-the-front-facade.mp4 | 1 +
+remote: Learning SketchUp 2013/80_adding-context.mp4 | 1 +
+remote: Learning SketchUp 2013/81_get-photo-google-street-view.mp4 | 1 +
+remote: Learning SketchUp 2013/82_using-3d-text.mp4 | 1 +
+remote: Learning SketchUp 2013/83_add-solar-panels-with-skelion-plugin.mp4 | 1 +
+remote: Learning SketchUp 2013/84_creating-scenes-and-updating.mp4 | 1 +
+remote: Learning SketchUp 2013/85_styles.mp4 | 1 +
+remote: Learning SketchUp 2013/86_scenes-for-animation.mp4 | 1 +
+remote: Learning SketchUp 2013/87_section-cut-for-interior-elevations.mp4 | 1 +
+remote: Learning SketchUp 2013/88_creating-a-group.mp4 | 1 +
+remote: Learning SketchUp 2013/89_creating-the-animation.mp4 | 1 +
+remote: Learning SketchUp 2013/90_jpeg-and-png-files.mp4 | 1 +
+remote: Learning SketchUp 2013/91_dwg-elevation-and-plan-pro-feature.mp4 | 1 +
+remote: Learning SketchUp 2013/92_kmz-for-google-earth.mp4 | 1 +
+remote: Learning SketchUp 2013/93_collada-files.mp4 | 1 +
+remote: Learning SketchUp 2013/94_animation-options.mp4 | 1 +
+remote: Learning SketchUp 2013/95_add-final-touches.mp4 | 1 +
+remote: Learning SketchUp 2013/96_export-display-options.mp4 | 1 +
+remote: Learning SketchUp 2013/97_stacking-images-in-photoshop.mp4 | 1 +
+remote: Learning SketchUp 2013/98_multiply-and-opacity.mp4 | 1 +
+remote: Learning SketchUp 2013/99_saving-the-image.mp4 | 1 +
+remote: 109 files changed, 109 insertions(+)
+remote: create mode 120000 Learning SketchUp 2013/01_introduction.mp4
+remote: create mode 120000 Learning SketchUp 2013/02_setting-up-the-template.mp4
+remote: create mode 120000 Learning SketchUp 2013/03_setting-up-the-toolbars.mp4
+remote: create mode 120000 Learning SketchUp 2013/04_how-to-access-your-working-files.mp4
+remote: create mode 120000 Learning SketchUp 2013/05_line-tool.mp4
+remote: create mode 120000 Learning SketchUp 2013/06_rectangle-tool.mp4
+remote: create mode 120000 Learning SketchUp 2013/07_circle-tool.mp4
+remote: create mode 120000 Learning SketchUp 2013/08_polygon-tool.mp4
+remote: create mode 120000 Learning SketchUp 2013/09_arc-tool.mp4
+remote: create mode 120000 Learning SketchUp 2013/100_adding-lighting.mp4
+remote: create mode 120000 Learning SketchUp 2013/101_add-reflections-to-existing-textures.mp4
+remote: create mode 120000 Learning SketchUp 2013/102_model-presets-create-a-preview-rendering.mp4
+remote: create mode 120000 Learning SketchUp 2013/103_rendering-a-high-quality-image.mp4
+remote: create mode 120000 Learning SketchUp 2013/104_post-processing-in-photoshop.mp4
+remote: create mode 120000 Learning SketchUp 2013/105_what-is-layout.mp4
+remote: create mode 120000 Learning SketchUp 2013/106_adjusting-the-model-settings.mp4
+remote: create mode 120000 Learning SketchUp 2013/108_adding-additional-pages-and-content.mp4
+remote: create mode 120000 Learning SketchUp 2013/109_updating-the-model-references.mp4
+remote: create mode 120000 Learning SketchUp 2013/10_freehand-tool.mp4
+remote: create mode 120000 Learning SketchUp 2013/111_about-dan-brown.mp4
+remote: create mode 120000 Learning SketchUp 2013/11_navigating-in-3d.mp4
+remote: create mode 120000 Learning SketchUp 2013/12_push-pull-and-move-tool.mp4
+remote: create mode 120000 Learning SketchUp 2013/13_using-follow-me-complex-roof-pitches.mp4
+remote: create mode 120000 Learning SketchUp 2013/14_creating-a-mansard-roof.mp4
+remote: create mode 120000 Learning SketchUp 2013/15_creating-a-gambrel-roof.mp4
+remote: create mode 120000 Learning SketchUp 2013/16_measurements.mp4
+remote: create mode 120000 Learning SketchUp 2013/18_extruding-your-walls-push-pull-and-offset.mp4
+remote: create mode 120000 Learning SketchUp 2013/19_creating-doors-and-openings.mp4
+remote: create mode 120000 Learning SketchUp 2013/20_clean-up-using-the-eraser-to-remove-unwanted-edges.mp4
+remote: create mode 120000 Learning SketchUp 2013/21_why-groups.mp4
+remote: create mode 120000 Learning SketchUp 2013/22_creating-the-second-floor.mp4
+remote: create mode 120000 Learning SketchUp 2013/23_creating-additional-openings.mp4
+remote: create mode 120000 Learning SketchUp 2013/24_hide-model-and-other-useful-shortcuts.mp4
+remote: create mode 120000 Learning SketchUp 2013/25_using-the-outliner.mp4
+remote: create mode 120000 Learning SketchUp 2013/26_using-layers-to-control-visibility.mp4
+remote: create mode 120000 Learning SketchUp 2013/27_viewing-layer-states-of-the-model.mp4
+remote: create mode 120000 Learning SketchUp 2013/28_field-of-view.mp4
+remote: create mode 120000 Learning SketchUp 2013/29_dividing-faces-to-create-your-rooms.mp4
+remote: create mode 120000 Learning SketchUp 2013/30_area-tool-for-calculations.mp4
+remote: create mode 120000 Learning SketchUp 2013/31_using-paint-bucket-for-floor-texture-2.mp4
+remote: create mode 120000 Learning SketchUp 2013/31_using-paint-bucket-for-floor-texture.mp4
+remote: create mode 120000 Learning SketchUp 2013/32_importing-and-applying-a-texture.mp4
+remote: create mode 120000 Learning SketchUp 2013/33_positioning-an-imported-texture.mp4
+remote: create mode 120000 Learning SketchUp 2013/34_editing-texture-colour-in-sketchup.mp4
+remote: create mode 120000 Learning SketchUp 2013/35_editing-a-texture-in-photoshop.mp4
+remote: create mode 120000 Learning SketchUp 2013/36_hide-edges-and-lines-with-the-eraser-tool.mp4
+remote: create mode 120000 Learning SketchUp 2013/37_creating-the-ceiling.mp4
+remote: create mode 120000 Learning SketchUp 2013/38_assigning-layers-within-groups.mp4
+remote: create mode 120000 Learning SketchUp 2013/39_adding-detail-chapter-7.mp4
+remote: create mode 120000 Learning SketchUp 2013/40_creating-crown-moulding.mp4
+remote: create mode 120000 Learning SketchUp 2013/41_copy-and-paste-in-place.mp4
+remote: create mode 120000 Learning SketchUp 2013/42_why-we-use-groups-and-components.mp4
+remote: create mode 120000 Learning SketchUp 2013/43_creating-the-staircase.mp4
+remote: create mode 120000 Learning SketchUp 2013/44_adding-riser-detail.mp4
+remote: create mode 120000 Learning SketchUp 2013/45_making-a-unique-bottom-step.mp4
+remote: create mode 120000 Learning SketchUp 2013/46_adding-spindles-with-move-and-copy.mp4
+remote: create mode 120000 Learning SketchUp 2013/47_adding-railing.mp4
+remote: create mode 120000 Learning SketchUp 2013/48_review-of-components-and-nested-groups.mp4
+remote: create mode 120000 Learning SketchUp 2013/49_creating-doors.mp4
+remote: create mode 120000 Learning SketchUp 2013/50_creating-the-front-window-frame.mp4
+remote: create mode 120000 Learning SketchUp 2013/51_double-hung-windows.mp4
+remote: create mode 120000 Learning SketchUp 2013/52_installing-bit-tools-plugins.mp4
+remote: create mode 120000 Learning SketchUp 2013/53_creating-walls-and-door-openings.mp4
+remote: create mode 120000 Learning SketchUp 2013/54_using-the-window-feature.mp4
+remote: create mode 120000 Learning SketchUp 2013/55_starting-at-the-base.mp4
+remote: create mode 120000 Learning SketchUp 2013/56_building-the-mantle.mp4
+remote: create mode 120000 Learning SketchUp 2013/57_mantle-columns.mp4
+remote: create mode 120000 Learning SketchUp 2013/58_mantle-support.mp4
+remote: create mode 120000 Learning SketchUp 2013/59_adding-textures.mp4
+remote: create mode 120000 Learning SketchUp 2013/60_base-cabinets.mp4
+remote: create mode 120000 Learning SketchUp 2013/61_wall-cabinets.mp4
+remote: create mode 120000 Learning SketchUp 2013/62_cabinet-doors.mp4
+remote: create mode 120000 Learning SketchUp 2013/63_creating-the-countertop.mp4
+remote: create mode 120000 Learning SketchUp 2013/64_adding-materials.mp4
+remote: create mode 120000 Learning SketchUp 2013/65_adding-appliances.mp4
+remote: create mode 120000 Learning SketchUp 2013/66_adding-the-fridge-and-sink.mp4
+remote: create mode 120000 Learning SketchUp 2013/67_using-the-3d-warehouse.mp4
+remote: create mode 120000 Learning SketchUp 2013/68_using-form-fonts.mp4
+remote: create mode 120000 Learning SketchUp 2013/69_using-the-podium-browser.mp4
+remote: create mode 120000 Learning SketchUp 2013/70_creating-a-library.mp4
+remote: create mode 120000 Learning SketchUp 2013/71_setting-up-to-match-a-new-photo.mp4
+remote: create mode 120000 Learning SketchUp 2013/72_creating-the-massing-model.mp4
+remote: create mode 120000 Learning SketchUp 2013/73_applying-textures.mp4
+remote: create mode 120000 Learning SketchUp 2013/74_adding-detail-chapter-13.mp4
+remote: create mode 120000 Learning SketchUp 2013/75_saving-and-placing-into-the-model.mp4
+remote: create mode 120000 Learning SketchUp 2013/76_creating-the-exterior.mp4
+remote: create mode 120000 Learning SketchUp 2013/77_setting-the-building-in-place-geolocation.mp4
+remote: create mode 120000 Learning SketchUp 2013/78_reset-axis-to-align-building.mp4
+remote: create mode 120000 Learning SketchUp 2013/79_creating-the-front-facade.mp4
+remote: create mode 120000 Learning SketchUp 2013/80_adding-context.mp4
+remote: create mode 120000 Learning SketchUp 2013/81_get-photo-google-street-view.mp4
+remote: create mode 120000 Learning SketchUp 2013/82_using-3d-text.mp4
+remote: create mode 120000 Learning SketchUp 2013/83_add-solar-panels-with-skelion-plugin.mp4
+remote: create mode 120000 Learning SketchUp 2013/84_creating-scenes-and-updating.mp4
+remote: create mode 120000 Learning SketchUp 2013/85_styles.mp4
+remote: create mode 120000 Learning SketchUp 2013/86_scenes-for-animation.mp4
+remote: create mode 120000 Learning SketchUp 2013/87_section-cut-for-interior-elevations.mp4
+remote: create mode 120000 Learning SketchUp 2013/88_creating-a-group.mp4
+remote: create mode 120000 Learning SketchUp 2013/89_creating-the-animation.mp4
+remote: create mode 120000 Learning SketchUp 2013/90_jpeg-and-png-files.mp4
+remote: create mode 120000 Learning SketchUp 2013/91_dwg-elevation-and-plan-pro-feature.mp4
+remote: create mode 120000 Learning SketchUp 2013/92_kmz-for-google-earth.mp4
+remote: create mode 120000 Learning SketchUp 2013/93_collada-files.mp4
+remote: create mode 120000 Learning SketchUp 2013/94_animation-options.mp4
+remote: create mode 120000 Learning SketchUp 2013/95_add-final-touches.mp4
+remote: create mode 120000 Learning SketchUp 2013/96_export-display-options.mp4
+remote: create mode 120000 Learning SketchUp 2013/97_stacking-images-in-photoshop.mp4
+remote: create mode 120000 Learning SketchUp 2013/98_multiply-and-opacity.mp4
+remote: create mode 120000 Learning SketchUp 2013/99_saving-the-image.mp4
+ 8224768 60% 2.54MB/s 0:00:02
+remote:
+remote: ok
+remote: (Recording state in git...)
+[2014-05-25 21:41:47 CEST] RemoteControl: Syncing with diskstation
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ e459e2f..26c6449 git-annex -> synced/git-annex
+ 6f2044d..7500a88 master -> synced/master
+ 10911744 80% 2.52MB/s 0:00:01
+ 13603741 100% 2.69MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 13605572 bytes received 42 bytes 2473748.00 bytes/sec
+total size is 13603741 speedup is 1.00
+[2014-05-25 21:41:49 CEST] Transferrer: Uploaded 32_import..xture.mp4
+
+WORM-s13731971-m1398386799--Learning SketchUp 2013%31_using-paint-bucket-for-floor-texture.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 2752512 20% 2.48MB/s 0:00:04
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 297826c..ee2d7a6 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/master is at 7500a886b58db7f0a3d2d279a946215525109cd2 but expected 6f2044d781d283993104edb9f8b96041801c1e76
+ ! 6f2044d..7500a88 master -> diskstation/master (unable to update local ref)
+[2014-05-25 21:41:51 CEST] Pusher: Syncing with diskstation
+ 5373952 39% 2.45MB/s 0:00:03
+ 9404416 68% 2.88MB/s 0:00:01
+ 12681216 92% 2.63MB/s 0:00:00
+ 13731971 100% 2.84MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 13733822 bytes received 42 bytes 2497066.18 bytes/sec
+total size is 13731971 speedup is 1.00
+[2014-05-25 21:41:54 CEST] Transferrer: Uploaded 31_using-..xture.mp4
+
+WORM-s13731971-m1398386799--Learning SketchUp 2013%31_using-paint-bucket-for-floor-texture-2.mp4
+ 32768 0% 0.00kB/s 0:00:00
+remote: merge git-annex 3211264 23% 2.96MB/s 0:00:03
+ 7634944 55% 3.55MB/s 0:00:01
+[2014-05-25 21:41:57 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 26c6449..9d66740 git-annex -> synced/git-annex
+ 11370496 82% 3.54MB/s 0:00:00
+ 13731971 100% 3.62MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 13733824 bytes received 42 bytes 2497066.55 bytes/sec
+total size is 13731971 speedup is 1.00
+[2014-05-25 21:41:59 CEST] Transferrer: Uploaded 31_using-..ure-2.mp4
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ ee2d7a6..be030de git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 9d667409bdd47098b595460d26a4a47a7477b602 but expected 26c64492572c692eb6c5e3af0922849d42142cc5
+ ! 26c6449..9d66740 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+WORM-s6958518-m1398385748--Learning SketchUp 2013%30_area-tool-for-calculations.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4096000 58% 3.77MB/s 0:00:00
+[2014-05-25 21:42:01 CEST] Pusher: Syncing with diskstation
+ 5505024 79% 2.56MB/s 0:00:00
+ 6958518 100% 2.63MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 6959530 bytes received 42 bytes 1988449.14 bytes/sec
+total size is 6958518 speedup is 1.00
+[2014-05-25 21:42:02 CEST] Transferrer: Uploaded 30_area-t..tions.mp4
+
+WORM-s17894336-m1398385618--Learning SketchUp 2013%29_dividing-faces-to-create-your-rooms.mp4
+ 32768 0% 0.00kB/s 0:00:00
+remote: merge git-annex 5210112 29% 4.90MB/s 0:00:02
+ 8617984 48% 3.99MB/s 0:00:02
+ 10715136 59% 3.34MB/s 0:00:02
+[2014-05-25 21:42:07 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 9d66740..2f65ea4 git-annex -> synced/git-annex
+ 13336576 74% 3.11MB/s 0:00:01
+ 16842752 94% 2.72MB/s 0:00:00
+ 17894336 100% 3.16MB/s 0:00:05 (xfer#1, to-check=0/1)
+
+sent 17896694 bytes received 42 bytes 2753344.00 bytes/sec
+total size is 17894336 speedup is 1.00
+[2014-05-25 21:42:09 CEST] Transferrer: Uploaded 29_dividi..rooms.mp4
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ be030de..afc435c git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 2f65ea464ab39db40b09478a6857d41450b394d3 but expected 9d667409bdd47098b595460d26a4a47a7477b602
+ ! 9d66740..2f65ea4 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+[2014-05-25 21:42:10 CEST] Committer: Adding 107_addin..sions.mp4 110_prese..aving.mp4
+ok
+(Recording state in git...)
+(Recording state in git...)
+
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+(merging diskstation/git-annex into git-annex...)
+(Recording state in git...)
+add Learning SketchUp 2013/107_adding-annotations-and-dimensions.mp4 ok
+add Learning SketchUp 2013/110_presenting-and-saving.mp4 [2014-05-25 21:42:10 CEST] Committer: Committing changes to git
+
+WORM-s16183756-m1398386984--Learning SketchUp 2013%28_field-of-view.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:42:11 CEST] Pusher: Syncing with diskstation
+ 5177344 31% 4.80MB/s 0:00:02
+Already up-to-date.
+ 9306112 57% 4.38MB/s 0:00:01
+ 13434880 83% 4.21MB/s 0:00:00
+remote: merge git-annex 16183756 100% 3.91MB/s 0:00:03 (xfer#1, to-check=0/1)
+[2014-05-25 21:42:16 CEST] RemoteControl: Syncing with diskstation
+
+sent 16185880 bytes received 42 bytes 2942894.91 bytes/sec
+total size is 16183756 speedup is 1.00
+[2014-05-25 21:42:16 CEST] Transferrer: Uploaded 28_field-..-view.m(merging synced/git-annex into git-annex...)
+premote: (Recording state in git...)
+4remote: ok
+remote: merge synced/master
+
+WORM-s8653832-m1398386968--Learning SketchUp 2013%110_presenting-and-saving.mp4
+ 32768 0% 0.00kB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ afc435c..2feeb97 git-annex -> diskstation/git-annex
+ 2f65ea4..de80d6d synced/git-annex -> diskstation/synced/git-annex
+ 7500a88..af4c173 synced/master -> diskstation/synced/master
+ 4390912 50% 4.13MB/s 0:00:01
+Already up-to-date.
+ 7045120 81% 3.30MB/s 0:00:00
+Updating 7500a88..af4c173
+remote: Fast-forward
+remote: Learning SketchUp 2013/107_adding-annotations-and-dimensions.mp4 | 1 +
+remote: Learning SketchUp 2013/110_presenting-and-saving.mp4 | 1 +
+remote: 2 files changed, 2 insertions(+)
+remote: create mode 120000 Learning SketchUp 2013/107_adding-annotations-and-dimensions.mp4
+remote: create mode 120000 Learning SketchUp 2013/110_presenting-and-saving.mp4
+ 8653832 100% 3.26MB/s 0:00:02 (xfer#1, to-check=0/1)
+remote:
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 2f65ea4..de80d6d git-annex -> synced/git-annex
+ 7500a88..af4c173 master -> synced/master
+
+sent 8655048 bytes received 42 bytes 1923353.33 bytes/sec
+total size is 8653832 speedup is 1.00
+[2014-05-25 21:42:20 CEST] Transferrer: Uploaded 110_prese..aving.mp4
+[2014-05-25 21:42:20 CEST] RemoteControl: Syncing with diskstation
+
+WORM-s12740321-m1398386533--Learning SketchUp 2013%107_adding-annotations-and-dimensions.mp4
+ 32768 0% 0.00kB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 2feeb97..c393949 git-annex -> diskstation/git-annex
+ 7500a88..af4c173 master -> diskstation/master
+ 4685824 36% 4.30MB/s 0:00:01
+ 7667712 60% 3.56MB/s 0:00:01
+ 10518528 82% 3.25MB/s 0:00:00
+[2014-05-25 21:42:24 CEST] Pusher: Syncing with diskstation
+ 12740321 100% 3.20MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 12742046 bytes received 42 bytes 2316743.27 bytes/sec
+total size is 12740321 speedup is 1.00
+[2014-05-25 21:42:25 CEST] Transferrer: Uploaded 107_addin..sions.mp4
+
+WORM-s21683651-m1398384839--Learning SketchUp 2013%27_viewing-layer-states-of-the-model.mp4
+ 32768 0% 0.00kB/s 0:00:00
+remote: merge git-annex 4358144 20% 4.11MB/s 0:00:04
+ 7438336 34% 3.47MB/s 0:00:04
+[2014-05-25 21:42:29 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ de80d6d..da93668 git-annex -> synced/git-annex
+ 9273344 42% 2.81MB/s 0:00:04
+ 12189696 56% 2.78MB/s 0:00:03
+ 15532032 71% 2.54MB/s 0:00:02
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ c393949..9f19ee8 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at da936685ca807cb619e2d6073c857cdcdc345dde but expected de80d6dd537ca7e4bfade9d40eade18afc58878b
+ ! de80d6d..da93668 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 19300352 89% 2.70MB/s 0:00:00
+ 21683651 100% 2.95MB/s 0:00:06 (xfer#1, to-check=0/1)
+[2014-05-25 21:42:33 CEST] Pusher: Syncing with diskstation
+
+sent 21686467 bytes received 42 bytes 2551354.00 bytes/sec
+total size is 21683651 speedup is 1.00
+[2014-05-25 21:42:33 CEST] Transferrer: Uploaded 27_viewin..model.mp4
+
+WORM-s16669986-m1398385184--Learning SketchUp 2013%26_using-layers-to-control-visibility.mp4
+ 32768 0% 0.00kB/s 0:00:00
+remote: merge git-annex 4259840 25% 3.95MB/s 0:00:03
+ 7274496 43% 3.37MB/s 0:00:02
+[2014-05-25 21:42:37 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ da93668..fc553e7 git-annex -> synced/git-annex
+ 10387456 62% 3.21MB/s 0:00:01
+ 13500416 80% 3.14MB/s 0:00:00
+ 16613376 99% 2.87MB/s 0:00:00
+ 16669986 100% 3.09MB/s 0:00:05 (xfer#1, to-check=0/1)
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 9f19ee8..a8b9203 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at fc553e72a5ea5a077a254df3f557b3d6241d9342 but expected da936685ca807cb619e2d6073c857cdcdc345dde
+ ! da93668..fc553e7 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+sent 16672191 bytes received 42 bytes 2564958.92 bytes/sec
+total size is 16669986 speedup is 1.00
+[2014-05-25 21:42:40 CEST] Transferrer: Uploaded 26_using-..ility.mp4
+
+WORM-s8161367-m1398386819--Learning SketchUp 2013%25_using-the-outliner.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4620288 56% 4.32MB/s 0:00:00
+[2014-05-25 21:42:41 CEST] Pusher: Syncing with diskstation
+ 8161367 100% 3.89MB/s 0:00:01 (xfer#1, to-check=0/1)
+
+sent 8162519 bytes received 42 bytes 3265024.40 bytes/sec
+total size is 8161367 speedup is 1.00
+[2014-05-25 21:42:42 CEST] Transferrer: Uploaded 25_using-..liner.mp4
+
+WORM-s26081165-m1398387035--Learning SketchUp 2013%24_hide-model-and-other-useful-shortcuts.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4620288 17% 4.27MB/s 0:00:04
+remote: merge git-annex 6193152 23% 2.82MB/s 0:00:06
+ 9568256 36% 2.93MB/s 0:00:05
+ 13631488 52% 3.16MB/s 0:00:03
+[2014-05-25 21:42:47 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ fc553e7..7eccd72 git-annex -> synced/git-annex
+ 17203200 65% 2.92MB/s 0:00:02
+ 21561344 82% 3.62MB/s 0:00:01
+ 25362432 97% 3.72MB/s 0:00:00
+ 26081165 100% 3.37MB/s 0:00:07 (xfer#1, to-check=0/1)
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ a8b9203..829ce2e git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 7eccd720d952d1ec3a1ee00cc524732ec970285f but expected fc553e72a5ea5a077a254df3f557b3d6241d9342
+ ! fc553e7..7eccd72 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+sent 26084521 bytes received 42 bytes 2745743.47 bytes/sec
+total size is 26081165 speedup is 1.00
+[2014-05-25 21:42:51 CEST] Transferrer: Uploaded 24_hide-m..tcuts.mp4
+
+WORM-s24710536-m1398386140--Learning SketchUp 2013%23_creating-additional-openings.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:42:52 CEST] Pusher: Syncing with diskstation
+ 5111808 20% 4.80MB/s 0:00:03
+ 9142272 36% 4.25MB/s 0:00:03
+ 12648448 51% 3.92MB/s 0:00:03
+ 16023552 64% 3.71MB/s 0:00:02
+remote: merge git-annex 19365888 78% 3.27MB/s 0:00:01
+ 22478848 90% 3.05MB/s 0:00:00
+[2014-05-25 21:42:58 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 7eccd72..5dd7ceb git-annex -> synced/git-annex
+ 24710536 100% 3.34MB/s 0:00:07 (xfer#1, to-check=0/1)
+
+sent 24713719 bytes received 42 bytes 2907501.29 bytes/sec
+total size is 24710536 speedup is 1.00
+[2014-05-25 21:42:59 CEST] Transferrer: Uploaded 23_creati..nings.mp4
+
+WORM-s27007278-m1398386399--Learning SketchUp 2013%22_creating-the-second-floor.mp4
+ 32768 0% 0.00kB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 829ce2e..432e319 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 5dd7ceb17a57b1f11edb692c3c20eb05f7c89aa7 but expected 7eccd720d952d1ec3a1ee00cc524732ec970285f
+ ! 7eccd72..5dd7ceb synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 4194304 15% 3.94MB/s 0:00:05
+ 6946816 25% 3.24MB/s 0:00:06
+[2014-05-25 21:43:02 CEST] Pusher: Syncing with diskstation
+ 9830400 36% 3.06MB/s 0:00:05
+ 12582912 46% 2.96MB/s 0:00:04
+remote: merge git-annex 15761408 58% 2.73MB/s 0:00:04
+ 18481152 68% 2.71MB/s 0:00:03
+[2014-05-25 21:43:06 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 5dd7ceb..114c7a8 git-annex -> synced/git-annex
+ 21889024 81% 2.82MB/s 0:00:01
+ 24805376 91% 2.86MB/s 0:00:00
+ 27007278 100% 2.89MB/s 0:00:08 (xfer#1, to-check=0/1)
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 432e319..ee3c95a git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 114c7a8e0d0873ea44ebfd8a5989b7e4f6fe300d but expected 5dd7ceb17a57b1f11edb692c3c20eb05f7c89aa7
+ ! 5dd7ceb..114c7a8 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+sent 27010738 bytes received 42 bytes 2572455.24 bytes/sec
+total size is 27007278 speedup is 1.00
+[2014-05-25 21:43:09 CEST] Transferrer: Uploaded 22_creati..floor.mp4
+
+WORM-s11952523-m1398387004--Learning SketchUp 2013%21_why-groups.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 3538944 29% 3.13MB/s 0:00:02
+[2014-05-25 21:43:11 CEST] Pusher: Syncing with diskstation
+ 4849664 40% 2.11MB/s 0:00:03
+ 8257536 69% 2.44MB/s 0:00:01
+ 11272192 94% 2.54MB/s 0:00:00
+remote: merge git-annex 11952523 100% 2.56MB/s 0:00:04 (xfer#1, to-check=0/1)
+[2014-05-25 21:43:15 CEST] RemoteControl: Syncing with diskstation
+
+sent 11954128 bytes received 42 bytes 2173485.45 bytes/sec
+total size is 11952523 speedup is 1.00
+[2014-05-25 21:43:15 CEST] Transferrer: Uploaded 21_why-groups.mp4
+
+WORM-s14698958-m1401045757--Learning SketchUp 2013%20_clean-up-using-the-eraser-to-remove-unwanted-edges.mp4
+ 32768 0% 0.00kB/s 0:00:00
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 114c7a8..70d2843 git-annex -> synced/git-annex
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ ee3c95a..292456c git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 70d2843ca3fd83291be9e3a83c8a2b1d393344fc but expected 114c7a8e0d0873ea44ebfd8a5989b7e4f6fe300d
+ ! 114c7a8..70d2843 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+[2014-05-25 21:43:17 CEST] RemoteControl: Syncing with diskstation
+ 4489216 30% 4.09MB/s 0:00:02
+ 7634944 51% 3.53MB/s 0:00:01
+ 10715136 72% 3.32MB/s 0:00:01
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 292456c..489a02f git-annex -> diskstation/git-annex
+ 14254080 96% 3.32MB/s 0:00:00
+ 14698958 100% 3.27MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 14700939 bytes received 42 bytes 2261689.38 bytes/sec
+total size is 14698958 speedup is 1.00
+[2014-05-25 21:43:21 CEST] Transferrer: Uploaded 20_clean-..edges.mp4
+[2014-05-25 21:43:21 CEST] Pusher: Syncing with diskstation
+
+WORM-s53078315-m1401045818--Learning SketchUp 2013%19_creating-doors-and-openings.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5046272 9% 4.66MB/s 0:00:10
+ 9109504 17% 4.21MB/s 0:00:10
+remote: merge git-annex 12779520 24% 3.96MB/s 0:00:09
+ 16187392 30% 3.76MB/s 0:00:09
+ 20676608 38% 3.66MB/s 0:00:08
+[2014-05-25 21:43:27 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 70d2843..0d8c767 git-annex -> synced/git-annex
+ 24739840 46% 3.67MB/s 0:00:07
+ 28573696 53% 3.71MB/s 0:00:06
+ 32243712 60% 3.76MB/s 0:00:05
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 489a02f..7a7f5ca git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 0d8c76720fa6b51cf2cf5edf847e732dd550ab40 but expected 70d2843ca3fd83291be9e3a83c8a2b1d393344fc
+ ! 70d2843..0d8c767 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 36765696 69% 3.74MB/s 0:00:04
+ 40697856 76% 3.72MB/s 0:00:03
+ 44564480 83% 3.73MB/s 0:00:02
+ 47316992 89% 3.53MB/s 0:00:01
+ 50331648 94% 3.18MB/s 0:00:00
+ 53078315 100% 3.62MB/s 0:00:13 (xfer#1, to-check=0/1)
+
+sent 53084957 bytes received 42 bytes 3424838.65 bytes/sec
+total size is 53078315 speedup is 1.00
+[2014-05-25 21:43:36 CEST] Transferrer: Uploaded 19_creati..nings.mp4
+[2014-05-25 21:43:36 CEST] Pusher: Syncing with diskstation
+
+WORM-s30352251-m1398385646--Learning SketchUp 2013%18_extruding-your-walls-push-pull-and-offset.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4784128 15% 4.50MB/s 0:00:05
+remote: merge git-annex 8159232 26% 3.81MB/s 0:00:05
+ 10256384 33% 3.17MB/s 0:00:06
+[2014-05-25 21:43:40 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 0d8c767..6f8ae3d git-annex -> synced/git-annex
+ 13271040 43% 3.06MB/s 0:00:05
+ 16318464 53% 2.65MB/s 0:00:05
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 7a7f5ca..bef94a6 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 6f8ae3d49d1006e2d5cf957d7539c0818db4df12 but expected 0d8c76720fa6b51cf2cf5edf847e732dd550ab40
+ ! 0d8c767..6f8ae3d synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 19070976 62% 2.51MB/s 0:00:04
+ 21954560 72% 2.71MB/s 0:00:03
+ 24969216 82% 2.72MB/s 0:00:01
+ 27852800 91% 2.69MB/s 0:00:00
+ 30352251 100% 2.87MB/s 0:00:10 (xfer#1, to-check=0/1)
+
+sent 30356135 bytes received 42 bytes 2639667.57 bytes/sec
+total size is 30352251 speedup is 1.00
+[2014-05-25 21:43:48 CEST] Transferrer: Uploaded 18_extrud..ffset.mp4
+[2014-05-25 21:43:48 CEST] Pusher: Syncing with diskstation
+
+WORM-s14102612-m1398386513--Learning SketchUp 2013%16_measurements.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4554752 32% 4.23MB/s 0:00:02
+ 7634944 54% 3.59MB/s 0:00:01
+remote: merge git-annex 10584064 75% 3.29MB/s 0:00:01
+[2014-05-25 21:43:52 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 6f8ae3d..32eee1a git-annex -> synced/git-annex
+ 13434880 95% 3.13MB/s 0:00:00
+ 14102612 100% 3.14MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 14104483 bytes received 42 bytes 2564459.09 bytes/sec
+total size is 14102612 speedup is 1.00
+[2014-05-25 21:43:53 CEST] Transferrer: Uploaded 16_measurements.mp4
+
+WORM-s16792198-m1398384994--Learning SketchUp 2013%15_creating-a-gambrel-roof.mp4
+ 32768 0% 0.00kB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ bef94a6..10025f1 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 32eee1aff2a03a33e7cc200fefcef41ce775767e but expected 6f8ae3d49d1006e2d5cf957d7539c0818db4df12
+ ! 6f8ae3d..32eee1a synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 4128768 24% 3.88MB/s 0:00:03
+ 7012352 41% 3.26MB/s 0:00:02
+[2014-05-25 21:43:56 CEST] Pusher: Syncing with diskstation
+ 9895936 58% 3.07MB/s 0:00:02
+ 12648448 75% 2.95MB/s 0:00:01
+remote: merge git-annex 14745600 87% 2.48MB/s 0:00:00
+ 16416768 97% 2.20MB/s 0:00:00
+ 16792198 100% 2.58MB/s 0:00:06 (xfer#1, to-check=0/1)
+[2014-05-25 21:44:01 CEST] RemoteControl: Syncing with diskstation
+
+sent 16794408 bytes received 42 bytes 1975817.65 bytes/sec
+total size is 16792198 speedup is 1.00
+[2014-05-25 21:44:01 CEST] Transferrer: Uploaded 15_creati..-roof.mp4
+
+WORM-s33139501-m1398386446--Learning SketchUp 2013%14_creating-a-mansard-roof.mp4
+ 32768 0% 0.00kB/s 0:00:00
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 32eee1a..cc461b8 git-annex -> synced/git-annex
+ 4685824 14% 4.39MB/s 0:00:06
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 10025f1..f39db09 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at cc461b8c48eb38d8f0b020a9c22440dada4973f0 but expected 32eee1aff2a03a33e7cc200fefcef41ce775767e
+ ! 32eee1a..cc461b8 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+[2014-05-25 21:44:03 CEST] RemoteControl: Syncing with diskstation
+ 8159232 24% 3.84MB/s 0:00:06
+ 11730944 35% 3.67MB/s 0:00:05
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ f39db09..d356ca4 git-annex -> diskstation/git-annex
+ 16351232 49% 3.85MB/s 0:00:04
+[2014-05-25 21:44:07 CEST] Pusher: Syncing with diskstation
+ 20119552 60% 3.63MB/s 0:00:03
+ 23265280 70% 3.52MB/s 0:00:02
+ 25952256 78% 3.31MB/s 0:00:02
+remote: merge git-annex 28803072 86% 2.89MB/s 0:00:01
+(merging synced/git-annex into git-annex...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ cc461b8..f90e094 git-annex -> synced/git-annex
+ 31653888 95% 2.67MB/s 0:00:00
+ 33139501 100% 3.28MB/s 0:00:09 (xfer#1, to-check=0/1)
+
+sent 33143707 bytes received 42 bytes 2882065.13 bytes/sec
+total size is 33139501 speedup is 1.00
+[2014-05-25 21:44:12 CEST] Transferrer: Uploaded 14_creati..-roof.mp4
+
+WORM-s32543230-m1398386371--Learning SketchUp 2013%13_using-follow-me-complex-roof-pitches.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4718592 14% 4.45MB/s 0:00:06
+[2014-05-25 21:44:14 CEST] Pusher: Syncing with diskstation
+ 7340032 22% 3.45MB/s 0:00:07
+ 10125312 31% 3.18MB/s 0:00:06
+ 12877824 39% 3.03MB/s 0:00:06
+remote: merge git-annex 15892480 48% 2.64MB/s 0:00:06
+ 18579456 57% 2.64MB/s 0:00:05
+ 21561344 66% 2.67MB/s 0:00:04
+[2014-05-25 21:44:20 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ f90e094..795020d git-annex -> synced/git-annex
+ 24412160 75% 2.70MB/s 0:00:02
+ 27164672 83% 2.61MB/s 0:00:02
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ d356ca4..7d763cd git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 795020d6aa856441f602de8d1f2f7efb98c00f20 but expected f90e0945bc55e8e50115bccec9672d1df7c23e69
+ ! f90e094..795020d synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 28737536 88% 2.28MB/s 0:00:01
+ 30703616 94% 2.05MB/s 0:00:00
+ 32543230 100% 2.58MB/s 0:00:12 (xfer#1, to-check=0/1)
+
+sent 32547377 bytes received 42 bytes 2410919.93 bytes/sec
+total size is 32543230 speedup is 1.00
+[2014-05-25 21:44:25 CEST] Transferrer: Uploaded 13_using-..tches.mp4
+[2014-05-25 21:44:25 CEST] Pusher: Syncing with diskstation
+
+WORM-s22461160-m1401045786--Learning SketchUp 2013%12_push-pull-and-move-tool.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4161536 18% 3.80MB/s 0:00:04
+remote: merge git-annex 6782976 30% 3.13MB/s 0:00:04
+ 9666560 43% 2.95MB/s 0:00:04
+[2014-05-25 21:44:29 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 795020d..496b7bd git-annex -> synced/git-annex
+ 12681216 56% 2.91MB/s 0:00:03
+ 15859712 70% 2.70MB/s 0:00:02
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 7d763cd..2bf57cb git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 496b7bd40f4c979efdd6196eccadeeb370bb4ec3 but expected 795020d6aa856441f602de8d1f2f7efb98c00f20
+ ! 795020d..496b7bd synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 18579456 82% 2.72MB/s 0:00:01
+ 20414464 90% 2.50MB/s 0:00:00
+ 22461160 100% 2.69MB/s 0:00:07 (xfer#1, to-check=0/1)
+
+sent 22464062 bytes received 42 bytes 2364642.53 bytes/sec
+total size is 22461160 speedup is 1.00
+[2014-05-25 21:44:34 CEST] Transferrer: Uploaded 12_push-p..-tool.mp4
+[2014-05-25 21:44:34 CEST] Pusher: Syncing with diskstation
+
+WORM-s15320679-m1398386653--Learning SketchUp 2013%11_navigating-in-3d.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4587520 29% 4.18MB/s 0:00:02
+remote: merge git-annex 7471104 48% 3.45MB/s 0:00:02
+ 10223616 66% 3.16MB/s 0:00:01
+[2014-05-25 21:44:38 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 496b7bd..eefc387 git-annex -> synced/git-annex
+ 12976128 84% 3.00MB/s 0:00:00
+ 15320679 100% 2.92MB/s 0:00:04 (xfer#1, to-check=0/1)
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 2bf57cb..310d31e git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at eefc387772b3e6ba46f51fbecd86cdabcd27db96 but expected 496b7bd40f4c979efdd6196eccadeeb370bb4ec3
+ ! 496b7bd..eefc387 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+sent 15322702 bytes received 42 bytes 2357345.23 bytes/sec
+total size is 15320679 speedup is 1.00
+[2014-05-25 21:44:40 CEST] Transferrer: Uploaded 11_naviga..in-3d.mp4
+
+WORM-s6065317-m1398386928--Learning SketchUp 2013%111_about-dan-brown.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4292608 70% 3.98MB/s 0:00:00
+[2014-05-25 21:44:42 CEST] Pusher: Syncing with diskstation
+ 6065317 100% 3.02MB/s 0:00:01 (xfer#1, to-check=0/1)
+
+sent 6066211 bytes received 42 bytes 1733215.14 bytes/sec
+total size is 6065317 speedup is 1.00
+[2014-05-25 21:44:43 CEST] Transferrer: Uploaded 111_about..brown.mp4
+
+WORM-s2764724-m1398386941--Learning SketchUp 2013%10_freehand-tool.mp4
+ 32768 1% 0.00kB/s 0:00:00
+ 2764724 100% 5.18MB/s 0:00:00 (xfer#1, to-check=0/1)
+
+sent 2765211 bytes received 42 bytes 1843502.00 bytes/sec
+total size is 2764724 speedup is 1.00
+[2014-05-25 21:44:45 CEST] Transferrer: Uploaded 10_freeha..-tool.mp4
+remote: merge git-annex
+WORM-s6834151-m1398385049--Learning SketchUp 2013%109_updating-the-model-references.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4227072 61% 3.81MB/s 0:00:00
+ 6834151 100% 3.46MB/s 0:00:01 (xfer#1, to-check=0/1)
+[2014-05-25 21:44:47 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ eefc387..dc4c11c git-annex -> synced/git-annex
+
+sent 6835151 bytes received 42 bytes 1952912.29 bytes/sec
+total size is 6834151 speedup is 1.00
+[2014-05-25 21:44:48 CEST] Transferrer: Uploaded 109_updat..ences.mp4
+
+WORM-s6878166-m1398386493--Learning SketchUp 2013%108_adding-additional-pages-and-content.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4259840 61% 3.87MB/s 0:00:00
+ 6878166 100% 3.80MB/s 0:00:01 (xfer#1, to-check=0/1)
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 310d31e..e2f5d0d git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at dc4c11c618002775bb0e8dcf4b132113c40875ed but expected eefc387772b3e6ba46f51fbecd86cdabcd27db96
+ ! eefc387..dc4c11c synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+sent 6879176 bytes received 42 bytes 1965490.86 bytes/sec
+total size is 6878166 speedup is 1.00
+[2014-05-25 21:44:51 CEST] Transferrer: Uploaded 108_addin..ntent.mp4
+
+WORM-s8253246-m1398386838--Learning SketchUp 2013%106_adjusting-the-model-settings.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:44:52 CEST] Pusher: Syncing with diskstation
+ 2588672 31% 2.32MB/s 0:00:02
+ 4554752 55% 2.10MB/s 0:00:01
+ 8093696 98% 2.51MB/s 0:00:00
+ 8253246 100% 2.52MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 8254417 bytes received 42 bytes 1834324.22 bytes/sec
+total size is 8253246 speedup is 1.00
+[2014-05-25 21:44:55 CEST] Transferrer: Uploaded 106_adjus..tings.mp4
+
+WORM-s5364896-m1398386068--Learning SketchUp 2013%105_what-is-layout.mp4
+ 32768 0% 0.00kB/s 0:00:00
+remote: merge git-annex 4816896 89% 4.56MB/s 0:00:00
+ 5364896 100% 4.39MB/s 0:00:01 (xfer#1, to-check=0/1)
+
+sent 5365701 bytes received 42 bytes 2146297.20 bytes/sec
+total size is 5364896 speedup is 1.00
+[2014-05-25 21:44:58 CEST] RemoteControl: Syncing with diskstation
+[2014-05-25 21:44:58 CEST] Transferrer: Uploaded 105_what-..ayout.mp4
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ dc4c11c..a19dfa9 git-annex -> synced/git-annex
+
+WORM-s7390741-m1398386693--Learning SketchUp 2013%104_post-processing-in-photoshop.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4227072 57% 3.91MB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ e2f5d0d..73400d3 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at a19dfa9bd0b4aee28bf67773a9f578a9bb94f2e9 but expected dc4c11c618002775bb0e8dcf4b132113c40875ed
+ ! dc4c11c..a19dfa9 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 7241728 97% 3.34MB/s 0:00:00
+ 7390741 100% 3.35MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 7391808 bytes received 42 bytes 1642633.33 bytes/sec
+total size is 7390741 speedup is 1.00
+[2014-05-25 21:45:02 CEST] Transferrer: Uploaded 104_post-..oshop.mp4
+
+WORM-s12544086-m1398385948--Learning SketchUp 2013%103_rendering-a-high-quality-image.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:45:03 CEST] Pusher: Syncing with diskstation
+ 4292608 34% 3.96MB/s 0:00:02
+ 7307264 58% 3.39MB/s 0:00:01
+ 9535488 76% 2.97MB/s 0:00:00
+remote: merge git-annex 12419072 99% 2.91MB/s 0:00:00
+ 12544086 100% 2.90MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 12545784 bytes received 42 bytes 2281059.27 bytes/sec
+total size is 12544086 speedup is 1.00
+[2014-05-25 21:45:07 CEST] RemoteControl: Syncing with diskstation
+[2014-05-25 21:45:07 CEST] Transferrer: Uploaded 103_rende..image.mp4
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ a19dfa9..96ceb2c git-annex -> synced/git-annex
+
+WORM-s6567293-m1398384854--Learning SketchUp 2013%102_model-presets-create-a-preview-rendering.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4128768 62% 3.83MB/s 0:00:00
+ 6567293 100% 3.26MB/s 0:00:01 (xfer#1, to-check=0/1)
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 73400d3..3e5d1b8 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 96ceb2c0e06ff0f1372950ab38c2aa2ebb0f00d7 but expected a19dfa9bd0b4aee28bf67773a9f578a9bb94f2e9
+ ! a19dfa9..96ceb2c synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+sent 6568272 bytes received 42 bytes 1876661.14 bytes/sec
+total size is 6567293 speedup is 1.00
+[2014-05-25 21:45:11 CEST] Transferrer: Uploaded 102_model..ering.mp4
+
+WORM-s8030582-m1398385367--Learning SketchUp 2013%101_add-reflections-to-existing-textures.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4423680 55% 4.18MB/s 0:00:00
+[2014-05-25 21:45:12 CEST] Pusher: Syncing with diskstation
+ 7569408 94% 3.54MB/s 0:00:00
+ 8030582 100% 3.53MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 8031737 bytes received 42 bytes 2294794.00 bytes/sec
+total size is 8030582 speedup is 1.00
+[2014-05-25 21:45:14 CEST] Transferrer: Uploaded 101_add-r..tures.mp4
+
+WORM-s13509940-m1398384818--Learning SketchUp 2013%100_adding-lighting.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4587520 33% 4.25MB/s 0:00:02
+remote: merge git-annex 7831552 57% 3.62MB/s 0:00:01
+ 10420224 77% 3.24MB/s 0:00:00
+[2014-05-25 21:45:18 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 96ceb2c..a5f9c8b git-annex -> synced/git-annex
+ 13509940 100% 3.28MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 13511743 bytes received 42 bytes 2456688.18 bytes/sec
+total size is 13509940 speedup is 1.00
+[2014-05-25 21:45:19 CEST] Transferrer: Uploaded 100_addin..hting.mp4
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 3e5d1b8..6ea05e0 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at a5f9c8b9874d4d3fe571687365c391050325bc87 but expected 96ceb2c0e06ff0f1372950ab38c2aa2ebb0f00d7
+ ! 96ceb2c..a5f9c8b synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+WORM-s6047748-m1398386548--Learning SketchUp 2013%09_arc-tool.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4751360 78% 4.47MB/s 0:00:00
+ 6047748 100% 4.50MB/s 0:00:01 (xfer#1, to-check=0/1)
+
+sent 6048630 bytes received 42 bytes 2419468.80 bytes/sec
+total size is 6047748 speedup is 1.00
+[2014-05-25 21:45:22 CEST] Pusher: Syncing with diskstation
+[2014-05-25 21:45:22 CEST] Transferrer: Uploaded 09_arc-tool.mp4
+
+WORM-s7257160-m1398385203--Learning SketchUp 2013%08_polygon-tool.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5079040 69% 4.65MB/s 0:00:00
+remote: merge git-annex 7257160 100% 4.35MB/s 0:00:01 (xfer#1, to-check=0/1)
+[2014-05-25 21:45:25 CEST] RemoteControl: Syncing with diskstation
+
+sent 7258194 bytes received 42 bytes 2073781.71 bytes/sec
+total size is 7257160 speedup is 1.00
+[2014-05-25 21:45:25 CEST] Transferrer: Uploaded 08_polygon-tool.mp4
+
+WORM-s6789048-m1398386463--Learning SketchUp 2013%07_circle-tool.mp4
+ 32768 0% 0.00kB/s 0:00:00
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ a5f9c8b..05787b8 git-annex -> synced/git-annex
+ 2654208 39% 2.46MB/s 0:00:01
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 6ea05e0..b78228d git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 05787b8b7c6dd1aad45fdb0a019a2ed5e56b26bb but expected a5f9c8b9874d4d3fe571687365c391050325bc87
+ ! a5f9c8b..05787b8 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+[2014-05-25 21:45:28 CEST] RemoteControl: Syncing with diskstation
+ 5013504 73% 2.35MB/s 0:00:00
+ 6789048 100% 2.62MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 6790025 bytes received 42 bytes 1940019.14 bytes/sec
+total size is 6789048 speedup is 1.00
+[2014-05-25 21:45:29 CEST] Transferrer: Uploaded 07_circle-tool.mp4
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ b78228d..f1fd60c git-annex -> diskstation/git-annex
+
+WORM-s3766669-m1398384958--Learning SketchUp 2013%06_rectangle-tool.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:45:31 CEST] Pusher: Syncing with diskstation
+ 3702784 98% 2.95MB/s 0:00:00
+ 3766669 100% 3.00MB/s 0:00:01 (xfer#1, to-check=0/1)
+
+sent 3767277 bytes received 42 bytes 1506927.60 bytes/sec
+total size is 3766669 speedup is 1.00
+[2014-05-25 21:45:31 CEST] Transferrer: Uploaded 06_rectan..-tool.mp4
+
+WORM-s5571735-m1398386867--Learning SketchUp 2013%05_line-tool.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5144576 92% 4.78MB/s 0:00:00
+ 5571735 100% 4.70MB/s 0:00:01 (xfer#1, to-check=0/1)
+remote: merge git-annex
+sent 5572562 bytes received 42 bytes 2229041.60 bytes/sec
+total size is 5571735 speedup is 1.00
+[2014-05-25 21:45:33 CEST] Transferrer: Uploaded 05_line-tool.mp4
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+[2014-05-25 21:45:35 CEST] RemoteConTo joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+trol: Syncing with diskstati 05787b8..2a723a6 ogit-annex -> synced/git-annexn
+
+
+WORM-s13796050-m1398386633--Learning SketchUp 2013%04_how-to-access-your-working-files.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4915200 35% 4.65MB/s 0:00:01
+ 8159232 59% 3.77MB/s 0:00:01
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ f1fd60c..bdd7ed6 git-annex -> diskstation/git-annex
+ 11304960 81% 3.45MB/s 0:00:00
+ 13796050 100% 3.57MB/s 0:00:03 (xfer#1, to-check=0/1)
+[2014-05-25 21:45:38 CEST] Pusher: Syncing with diskstation
+
+sent 13797905 bytes received 42 bytes 2508717.64 bytes/sec
+total size is 13796050 speedup is 1.00
+[2014-05-25 21:45:39 CEST] Transferrer: Uploaded 04_how-to..files.mp4
+
+WORM-s5852944-m1398386582--Learning SketchUp 2013%03_setting-up-the-toolbars.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4947968 84% 4.65MB/s 0:00:00
+ 5852944 100% 4.42MB/s 0:00:01 (xfer#1, to-check=0/1)
+remote: merge git-annex [2014-05-25 21:45:42 CEST] RemoteControl: Syncing with diskstation
+
+sent 5853817 bytes received 42 bytes 2341543.60 bytes/sec
+total size is 5852944 speedup is 1.00
+[2014-05-25 21:45:42 CEST] Transferrer: Uploaded 03_settin..lbars.mp4
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 2a723a6..dc76c23 git-annex -> synced/git-annex
+
+WORM-s3829366-m1398386198--Learning SketchUp 2013%02_setting-up-the-template.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 3829366 100% 4.68MB/s 0:00:00 (xfer#1, to-check=0/1)
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ bdd7ed6..84f8e25 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at dc76c234409bd5cfac50be70dd21ef8be88aed9b but expected 2a723a6697455228d8b2e95a7015aafb4be4f003
+ ! 2a723a6..dc76c23 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+sent 3829991 bytes received 42 bytes 1532013.20 bytes/sec
+total size is 3829366 speedup is 1.00
+[2014-05-25 21:45:45 CEST] Transferrer: Uploaded 02_settin..plate.mp4
+
+WORM-s6528377-m1398386753--Learning SketchUp 2013%01_introduction.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4718592 72% 4.42MB/s 0:00:00
+[2014-05-25 21:45:47 CEST] Pusher: Syncing with diskstation
+ 6528377 100% 3.21MB/s 0:00:01 (xfer#1, to-check=0/1)
+
+sent 6529323 bytes received 42 bytes 2611746.00 bytes/sec
+total size is 6528377 speedup is 1.00
+[2014-05-25 21:45:48 CEST] Transferrer: Uploaded 01_introduction.mp4
+
+WORM-s5900041-m1398386278--Learning SketchUp 2013%99_saving-the-image.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5079040 86% 4.72MB/s 0:00:00
+ 5900041 100% 4.60MB/s 0:00:01 (xfer#1, to-check=0/1)
+remote: merge git-annex
+sent 5900915 bytes received 42 bytes 2360382.80 bytes/sec
+total size is 5900041 speedup is 1.00
+[2014-05-25 21:45:50 CEST] Transferrer: Uploaded 99_saving..image.mp4
+
+WORM-s7221607-m1398385119--Learning SketchUp 2013%98_multiply-and-opacity.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:45:52 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ dc76c23..60c1e82 git-annex -> synced/git-annex
+ 4456448 61% 4.07MB/s 0:00:00
+ 7221607 100% 4.25MB/s 0:00:01 (xfer#1, to-check=0/1)
+
+sent 7222645 bytes received 42 bytes 2889074.80 bytes/sec
+total size is 7221607 speedup is 1.00
+[2014-05-25 21:45:54 CEST] Transferrer: Uploaded 98_multip..acity.mp4
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 84f8e25..3261510 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 60c1e827e829b642d4618889b425c0bfc259b2c9 but expected dc76c234409bd5cfac50be70dd21ef8be88aed9b
+ ! dc76c23..60c1e82 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+WORM-s6262129-m1398386258--Learning SketchUp 2013%97_stacking-images-in-photoshop.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4947968 79% 4.69MB/s 0:00:00
+ 6262129 100% 4.40MB/s 0:00:01 (xfer#1, to-check=0/1)
+[2014-05-25 21:45:56 CEST] Pusher: Syncing with diskstation
+
+sent 6263059 bytes received 42 bytes 2505240.40 bytes/sec
+total size is 6262129 speedup is 1.00
+[2014-05-25 21:45:56 CEST] Transferrer: Uploaded 97_stacki..oshop.mp4
+
+WORM-s9298049-m1398385793--Learning SketchUp 2013%96_export-display-options.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5177344 55% 4.84MB/s 0:00:00
+remote: merge git-annex 8519680 91% 4.01MB/s 0:00:00
+ 9298049 100% 3.97MB/s 0:00:02 (xfer#1, to-check=0/1)
+[2014-05-25 21:46:00 CEST] RemoteControl: Syncing with diskstation
+
+sent 9299341 bytes received 42 bytes 2656966.57 bytes/sec
+total size is 9298049 speedup is 1.00
+[2014-05-25 21:46:00 CEST] Transferrer: Uploaded 96_export..tions.mp4
+
+WORM-s7895136-m1398385533--Learning SketchUp 2013%95_add-final-touches.mp4
+ 32768 0% 0.00kB/s 0:00:00
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 60c1e82..f08968c git-annex -> synced/git-annex
+ 4325376 54% 4.06MB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 3261510..c9b4dc3 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at f08968c15cbe86c49c1fb71f22f578ad7cecd680 but expected 60c1e827e829b642d4618889b425c0bfc259b2c9
+ ! 60c1e82..f08968c synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+[2014-05-25 21:46:02 CEST] RemoteControl: Syncing with diskstation
+ 7895136 100% 3.99MB/s 0:00:01 (xfer#1, to-check=0/1)
+
+sent 7896251 bytes received 42 bytes 2256083.71 bytes/sec
+total size is 7895136 speedup is 1.00
+[2014-05-25 21:46:03 CEST] Transferrer: Uploaded 95_add-fi..uches.mp4
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ c9b4dc3..78519cd git-annex -> diskstation/git-annex
+
+WORM-s13569035-m1398385318--Learning SketchUp 2013%94_animation-options.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5373952 39% 5.00MB/s 0:00:01
+[2014-05-25 21:46:05 CEST] Pusher: Syncing with diskstation
+ 9437184 69% 4.45MB/s 0:00:00
+ 13565952 99% 4.26MB/s 0:00:00
+ 13569035 100% 4.26MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 13570847 bytes received 42 bytes 3015753.11 bytes/sec
+total size is 13569035 speedup is 1.00
+[2014-05-25 21:46:07 CEST] Transferrer: Uploaded 94_animat..tions.mp4
+
+WORM-s8278464-m1398386213--Learning SketchUp 2013%93_collada-files.mp4
+ 32768 0% 0.00kB/s 0:00:00
+remote: merge git-annex 5341184 64% 4.98MB/s 0:00:00
+ 8278464 100% 4.37MB/s 0:00:01 (xfer#1, to-check=0/1)
+[2014-05-25 21:46:10 CEST] RemoteControl: Syncing with diskstation
+
+sent 8279623 bytes received 42 bytes 2365618.57 bytes/sec
+total size is 8278464 speedup is 1.00
+[2014-05-25 21:46:10 CEST] Transferrer: Uploaded 93_collad..files.mp4
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ f08968c..f99a466 git-annex -> synced/git-annex
+
+WORM-s8934010-m1398386414--Learning SketchUp 2013%92_kmz-for-google-earth.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4784128 53% 4.43MB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 78519cd..e30d06f git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at f99a466d7568addbbc99cb058f66a2c03c571fba but expected f08968c15cbe86c49c1fb71f22f578ad7cecd680
+ ! f08968c..f99a466 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 8934010 100% 4.24MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 8935256 bytes received 42 bytes 2552942.29 bytes/sec
+total size is 8934010 speedup is 1.00
+[2014-05-25 21:46:13 CEST] Transferrer: Uploaded 92_kmz-fo..earth.mp4
+
+WORM-s9716042-m1398384915--Learning SketchUp 2013%91_dwg-elevation-and-plan-pro-feature.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5341184 54% 5.00MB/s 0:00:00
+[2014-05-25 21:46:15 CEST] Pusher: Syncing with diskstation
+ 9371648 96% 4.39MB/s 0:00:00
+ 9716042 100% 4.44MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 9717398 bytes received 42 bytes 2776411.43 bytes/sec
+total size is 9716042 speedup is 1.00
+[2014-05-25 21:46:16 CEST] Transferrer: Uploaded 91_dwg-el..ature.mp4
+
+WORM-s14343030-m1398386888--Learning SketchUp 2013%90_jpeg-and-png-files.mp4
+ 32768 0% 0.00kB/s 0:00:00
+remote: merge git-annex 5079040 35% 4.81MB/s 0:00:01
+ 9535488 66% 4.50MB/s 0:00:01
+[2014-05-25 21:46:19 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ f99a466..af84b87 git-annex -> synced/git-annex
+ 13565952 94% 4.25MB/s 0:00:00
+ 14343030 100% 3.99MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 14344935 bytes received 42 bytes 2608177.64 bytes/sec
+total size is 14343030 speedup is 1.00
+[2014-05-25 21:46:21 CEST] Transferrer: Uploaded 90_jpeg-a..files.mp4
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ e30d06f..c6bcde6 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at af84b876d0902aa7da89ca414becf5b9d98d8a19 but expected f99a466d7568addbbc99cb058f66a2c03c571fba
+ ! f99a466..af84b87 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+WORM-s10692771-m1398385558--Learning SketchUp 2013%89_creating-the-animation.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5341184 49% 4.94MB/s 0:00:01
+[2014-05-25 21:46:23 CEST] Pusher: Syncing with diskstation
+ 9535488 89% 4.43MB/s 0:00:00
+ 10692771 100% 4.41MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 10694236 bytes received 42 bytes 3055508.00 bytes/sec
+total size is 10692771 speedup is 1.00
+[2014-05-25 21:46:24 CEST] Transferrer: Uploaded 89_creati..ation.mp4
+
+WORM-s14320839-m1398385514--Learning SketchUp 2013%88_creating-a-group.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5308416 37% 5.02MB/s 0:00:01
+remote: merge git-annex 9469952 66% 4.47MB/s 0:00:01
+ 13631488 95% 4.28MB/s 0:00:00
+ 14320839 100% 4.31MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 14322742 bytes received 42 bytes 3182840.89 bytes/sec
+total size is 14320839 speedup is 1.00
+[2014-05-25 21:46:28 CEST] RemoteControl: Syncing with diskstation
+[2014-05-25 21:46:28 CEST] Transferrer: Uploaded 88_creati..group.mp4
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ af84b87..7f1137a git-annex -> synced/git-annex
+
+WORM-s20730987-m1398385414--Learning SketchUp 2013%87_section-cut-for-interior-elevations.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5341184 25% 4.91MB/s 0:00:03
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ c6bcde6..a8341a2 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 7f1137a28d8b17c5cdc10e856578da6337d1143c but expected af84b876d0902aa7da89ca414becf5b9d98d8a19
+ ! af84b87..7f1137a synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 9371648 45% 4.38MB/s 0:00:02
+ 13860864 66% 4.33MB/s 0:00:01
+[2014-05-25 21:46:33 CEST] Pusher: Syncing with diskstation
+ 18055168 87% 4.23MB/s 0:00:00
+ 20730987 100% 4.19MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 20733689 bytes received 42 bytes 3189804.77 bytes/sec
+total size is 20730987 speedup is 1.00
+[2014-05-25 21:46:35 CEST] Transferrer: Uploaded 87_sectio..tions.mp4
+
+WORM-s21661288-m1398385144--Learning SketchUp 2013%86_scenes-for-animation.mp4
+ 32768 0% 0.00kB/s 0:00:00
+remote: merge git-annex 5177344 23% 4.89MB/s 0:00:03
+ 9404416 43% 4.46MB/s 0:00:02
+[2014-05-25 21:46:38 CEST] RemoteControl: Syncing with diskstation
+ 13631488 62% 4.28MB/s 0:00:01
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 7f1137a..9338de4 git-annex -> synced/git-annex
+ 17170432 79% 4.04MB/s 0:00:01
+ 20905984 96% 3.69MB/s 0:00:00
+ 21661288 100% 3.90MB/s 0:00:05 (xfer#1, to-check=0/1)
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ a8341a2..72c4e65 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 9338de4e5a82415622d40ef588287666f8757fc0 but expected 7f1137a28d8b17c5cdc10e856578da6337d1143c
+ ! 7f1137a..9338de4 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+sent 21664091 bytes received 42 bytes 3332943.54 bytes/sec
+total size is 21661288 speedup is 1.00
+[2014-05-25 21:46:41 CEST] Transferrer: Uploaded 86_scenes..ation.mp4
+
+WORM-s23994784-m1398385930--Learning SketchUp 2013%85_styles.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5177344 21% 4.83MB/s 0:00:03
+[2014-05-25 21:46:42 CEST] Pusher: Syncing with diskstation
+ 9371648 39% 4.39MB/s 0:00:03
+ 13565952 56% 4.26MB/s 0:00:02
+ 17661952 73% 4.17MB/s 0:00:01
+remote: merge git-annex 21856256 91% 3.94MB/s 0:00:00
+ 23994784 100% 4.08MB/s 0:00:05 (xfer#1, to-check=0/1)
+
+sent 23997857 bytes received 42 bytes 3691984.46 bytes/sec
+total size is 23994784 speedup is 1.00
+[2014-05-25 21:46:48 CEST] RemoteControl: Syncing with diskstation
+[2014-05-25 21:46:48 CEST] Transferrer: Uploaded 85_styles.mp4
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 9338de4..47c3025 git-annex -> synced/git-annex
+
+WORM-s9421737-m1398386334--Learning SketchUp 2013%84_creating-scenes-and-updating.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4128768 43% 3.80MB/s 0:00:01
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 72c4e65..3862dfd git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 47c3025b26597ab96c6553b17d40df2473761367 but expected 9338de4e5a82415622d40ef588287666f8757fc0
+ ! 9338de4..47c3025 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 7045120 74% 3.29MB/s 0:00:00
+ 9421737 100% 3.42MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 9423051 bytes received 42 bytes 2094020.67 bytes/sec
+total size is 9421737 speedup is 1.00
+[2014-05-25 21:46:52 CEST] Transferrer: Uploaded 84_creati..ating.mp4
+
+WORM-s15890796-m1398387058--Learning SketchUp 2013%83_add-solar-panels-with-skelion-plugin.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 3932160 24% 3.64MB/s 0:00:03
+[2014-05-25 21:46:54 CEST] Pusher: Syncing with diskstation
+ 8093696 50% 3.80MB/s 0:00:02
+ 11304960 71% 3.54MB/s 0:00:01
+ 14516224 91% 3.40MB/s 0:00:00
+ 15890796 100% 3.45MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 15892907 bytes received 42 bytes 2889627.09 bytes/sec
+total size is 15890796 speedup is 1.00
+[2014-05-25 21:46:58 CEST] Transferrer: Uploaded 83_add-so..lugin.mp4
+remote: merge git-annex
+WORM-s9278449-m1398386852--Learning SketchUp 2013%82_using-3d-text.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5439488 58% 5.07MB/s 0:00:00
+ 9278449 100% 4.51MB/s 0:00:01 (xfer#1, to-check=0/1)
+[2014-05-25 21:47:00 CEST] RemoteControl: Syncing with diskstation
+
+sent 9279732 bytes received 42 bytes 3711909.60 bytes/sec
+total size is 9278449 speedup is 1.00
+[2014-05-25 21:47:00 CEST] Transferrer: Uploaded 82_using-..-text.mp4
+
+WORM-s11983231-m1398385259--Learning SketchUp 2013%81_get-photo-google-street-view.mp4
+ 32768 0% 0.00kB/s 0:00:00
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 47c3025..a7b0dc9 git-annex -> synced/git-annex
+ 5079040 42% 4.63MB/s 0:00:01
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 3862dfd..5f94bb2 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at a7b0dc9c64973369eb06a57d14ed6e64ec20fa07 but expected 47c3025b26597ab96c6553b17d40df2473761367
+ ! 47c3025..a7b0dc9 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+[2014-05-25 21:47:03 CEST] RemoteControl: Syncing with diskstation
+ 9404416 78% 4.32MB/s 0:00:00
+ 11983231 100% 4.36MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 11984858 bytes received 42 bytes 2663311.11 bytes/sec
+total size is 11983231 speedup is 1.00
+[2014-05-25 21:47:04 CEST] Transferrer: Uploaded 81_get-ph..-view.mp4
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 5f94bb2..521740c git-annex -> diskstation/git-annex
+
+WORM-s10154793-m1398385298--Learning SketchUp 2013%80_adding-context.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5242880 51% 4.94MB/s 0:00:00
+[2014-05-25 21:47:06 CEST] Pusher: Syncing with diskstation
+ 9437184 92% 4.40MB/s 0:00:00
+ 10154793 100% 4.41MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 10156182 bytes received 42 bytes 2901778.29 bytes/sec
+total size is 10154793 speedup is 1.00
+[2014-05-25 21:47:07 CEST] Transferrer: Uploaded 80_adding..ntext.mp4
+
+WORM-s15455988-m1398386244--Learning SketchUp 2013%79_creating-the-front-facade.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5308416 34% 4.93MB/s 0:00:02
+remote: merge git-annex 9306112 60% 4.38MB/s 0:00:01
+ 12124160 78% 3.73MB/s 0:00:00
+[2014-05-25 21:47:12 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ a7b0dc9..7a6f85f git-annex -> synced/git-annex
+ 13434880 86% 3.11MB/s 0:00:00
+ 15455988 100% 3.14MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 15458036 bytes received 42 bytes 2810559.64 bytes/sec
+total size is 15455988 speedup is 1.00
+[2014-05-25 21:47:13 CEST] Transferrer: Uploaded 79_creati..acade.mp4
+
+WORM-s7511926-m1398385903--Learning SketchUp 2013%78_reset-axis-to-align-building.mp4
+ 32768 0% 0.00kB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 521740c..57437fb git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 7a6f85f7864920fbcac361f47558fc352f1d2d16 but expected a7b0dc9c64973369eb06a57d14ed6e64ec20fa07
+ ! a7b0dc9..7a6f85f synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 4554752 60% 4.27MB/s 0:00:00
+ 7511926 100% 4.13MB/s 0:00:01 (xfer#1, to-check=0/1)
+[2014-05-25 21:47:16 CEST] Pusher: Syncing with diskstation
+
+sent 7513008 bytes received 42 bytes 2146585.71 bytes/sec
+total size is 7511926 speedup is 1.00
+[2014-05-25 21:47:16 CEST] Transferrer: Uploaded 78_reset-..lding.mp4
+
+WORM-s9197360-m1398386099--Learning SketchUp 2013%77_setting-the-building-in-place-geolocation.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4521984 49% 4.04MB/s 0:00:01
+remote: merge git-annex 7962624 86% 3.66MB/s 0:00:00
+ 9197360 100% 3.73MB/s 0:00:02 (xfer#1, to-check=0/1)
+[2014-05-25 21:47:21 CEST] RemoteControl: Syncing with diskstation
+
+sent 9198659 bytes received 42 bytes 2628200.29 bytes/sec
+total size is 9197360 speedup is 1.00
+[2014-05-25 21:47:21 CEST] Transferrer: Uploaded 77_settin..ation.mp4
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 7a6f85f..7457693 git-annex -> synced/git-annex
+
+WORM-s11971891-m1398387083--Learning SketchUp 2013%76_creating-the-exterior.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4784128 39% 4.52MB/s 0:00:01
+ 8355840 69% 3.95MB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 57437fb..394b254 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 7457693b085f06be2a38cfaafb7c76b34eb62960 but expected 7a6f85f7864920fbcac361f47558fc352f1d2d16
+ ! 7a6f85f..7457693 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 11971891 100% 4.15MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 11973511 bytes received 42 bytes 3421015.14 bytes/sec
+total size is 11971891 speedup is 1.00
+[2014-05-25 21:47:25 CEST] Transferrer: Uploaded 76_creati..erior.mp4
+[2014-05-25 21:47:26 CEST] Pusher: Syncing with diskstation
+
+WORM-s6407146-m1398386568--Learning SketchUp 2013%75_saving-and-placing-into-the-model.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4390912 68% 4.14MB/s 0:00:00
+ 6324224 98% 2.99MB/s 0:00:00
+ 6407146 100% 3.02MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 6408097 bytes received 42 bytes 1830896.86 bytes/sec
+total size is 6407146 speedup is 1.00
+[2014-05-25 21:47:28 CEST] Transferrer: Uploaded 75_saving..model.mp4
+
+WORM-s8962345-m1398386088--Learning SketchUp 2013%74_adding-detail-chapter-13.mp4
+ 32768 0% 0.00kB/s 0:00:00
+remote: merge git-annex 5144576 57% 4.78MB/s 0:00:00
+ 8962345 100% 4.67MB/s 0:00:01 (xfer#1, to-check=0/1)
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+
+sent 8963599 bytes received 42 bytes 2561040.29 bytes/sec
+total size is 8962345 speedup is 1.00
+ 7457693..ea4b518 git-annex -> synced/git-annex
+[2014-05-25 21:47:31 CEST] RemoteControl: Syncing with diskstation
+[2014-05-25 21:47:31 CEST] Transferrer: Uploaded 74_adding..er-13.mp4
+
+WORM-s7160845-m1398385888--Learning SketchUp 2013%73_applying-textures.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4816896 67% 4.45MB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 394b254..c52b780 git-annex -> diskstation/git-annex
+ 7160845 100% 4.44MB/s 0:00:01 (xfer#1, to-check=0/1)
+
+sent 7161872 bytes received 42 bytes 2046261.14 bytes/sec
+total size is 7160845 speedup is 1.00
+[2014-05-25 21:47:34 CEST] Transferrer: Uploaded 73_applyi..tures.mp4
+
+WORM-s11661338-m1398385993--Learning SketchUp 2013%72_creating-the-massing-model.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:47:35 CEST] Pusher: Syncing with diskstation
+ 5341184 45% 4.97MB/s 0:00:01
+ 8028160 68% 3.71MB/s 0:00:00
+ 9601024 82% 2.97MB/s 0:00:00
+ 11661338 100% 3.00MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 11662923 bytes received 42 bytes 2120539.09 bytes/sec
+total size is 11661338 speedup is 1.00
+[2014-05-25 21:47:39 CEST] Transferrer: Uploaded 72_creati..model.mp4
+
+WORM-s18351413-m1398385439--Learning SketchUp 2013%71_setting-up-to-match-a-new-photo.mp4
+ 32768 0% 0.00kB/s 0:00:00
+remote: merge git-annex 4816896 26% 4.56MB/s 0:00:02
+ 8945664 48% 4.23MB/s 0:00:02
+[2014-05-25 21:47:42 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ ea4b518..d1f5994 git-annex -> synced/git-annex
+ 13467648 73% 4.25MB/s 0:00:01
+ 17104896 93% 4.04MB/s 0:00:00
+ 18351413 100% 4.03MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 18353823 bytes received 42 bytes 3337066.36 bytes/sec
+total size is 18351413 speedup is 1.00
+[2014-05-25 21:47:44 CEST] Transferrer: Uploaded 71_settin..photo.mp4
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ c52b780..c25cca9 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at d1f5994466b35d4c32ad5a9bbb9dd071e461e3e2 but expected ea4b518d3f3234433b2819aa9965b5613366f1bb
+ ! ea4b518..d1f5994 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+WORM-s13344990-m1398385353--Learning SketchUp 2013%70_creating-a-library.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 3506176 26% 3.17MB/s 0:00:03
+[2014-05-25 21:47:47 CEST] Pusher: Syncing with diskstation
+ 6914048 51% 3.20MB/s 0:00:01
+ 11337728 84% 3.52MB/s 0:00:00
+ 13344990 100% 3.56MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 13346775 bytes received 42 bytes 2426694.00 bytes/sec
+total size is 13344990 speedup is 1.00
+[2014-05-25 21:47:49 CEST] Transferrer: Uploaded 70_creati..brary.mp4
+
+WORM-s9842222-m1398386008--Learning SketchUp 2013%69_using-the-podium-browser.mp4
+ 32768 0% 0.00kB/s 0:00:00
+remote: merge git-annex 5275648 53% 4.88MB/s 0:00:00
+ 8323072 84% 3.89MB/s 0:00:00
+ 9842222 100% 3.92MB/s 0:00:02 (xfer#1, to-check=0/1)
+[2014-05-25 21:47:52 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ d1f5994..33198fa git-annex -> synced/git-annex
+
+sent 9843584 bytes received 42 bytes 2812464.57 bytes/sec
+total size is 9842222 speedup is 1.00
+[2014-05-25 21:47:53 CEST] Transferrer: Uploaded 69_using-..owser.mp4
+
+WORM-s11662587-m1398385968--Learning SketchUp 2013%68_using-form-fonts.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4653056 39% 4.33MB/s 0:00:01
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ c25cca9..2496e60 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 33198fa7a8195245180bb53efbdec32359506368 but expected d1f5994466b35d4c32ad5a9bbb9dd071e461e3e2
+ ! d1f5994..33198fa synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 9437184 80% 4.41MB/s 0:00:00
+ 11662587 100% 4.32MB/s 0:00:02 (xfer#1, to-check=0/1)
+[2014-05-25 21:47:57 CEST] Pusher: Syncing with diskstation
+
+sent 11664162 bytes received 42 bytes 3332629.71 bytes/sec
+total size is 11662587 speedup is 1.00
+[2014-05-25 21:47:57 CEST] Transferrer: Uploaded 68_using-..fonts.mp4
+
+WORM-s8289672-m1398385702--Learning SketchUp 2013%67_using-the-3d-warehouse.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5439488 65% 4.99MB/s 0:00:00
+remote: merge git-annex 8289672 100% 4.48MB/s 0:00:01 (xfer#1, to-check=0/1)
+[2014-05-25 21:48:00 CEST] RemoteControl: Syncing with diskstation
+
+sent 8290840 bytes received 42 bytes 3316352.80 bytes/sec
+total size is 8289672 speedup is 1.00
+[2014-05-25 21:48:00 CEST] Transferrer: Uploaded 67_using-..house.mp4
+
+WORM-s12841748-m1398385284--Learning SketchUp 2013%66_adding-the-fridge-and-sink.mp4
+ 32768 0% 0.00kB/s 0:00:00
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 33198fa..f4258a2 git-annex -> synced/git-annex
+ 3899392 30% 3.62MB/s 0:00:02
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 2496e60..8f91b25 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at f4258a2cd12ee4f23f3a9c9b9c635b9d59075f21 but expected 33198fa7a8195245180bb53efbdec32359506368
+ ! 33198fa..f4258a2 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+[2014-05-25 21:48:03 CEST] RemoteControl: Syncing with diskstation
+ 7897088 61% 3.69MB/s 0:00:01
+ 11698176 91% 3.66MB/s 0:00:00
+ 12841748 100% 3.72MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 12843477 bytes received 42 bytes 2335185.27 bytes/sec
+total size is 12841748 speedup is 1.00
+[2014-05-25 21:48:05 CEST] Transferrer: Uploaded 66_adding..-sink.mp4
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 8f91b25..c4dc443 git-annex -> diskstation/git-annex
+
+WORM-s15640646-m1398385334--Learning SketchUp 2013%65_adding-appliances.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5505024 35% 5.08MB/s 0:00:01
+[2014-05-25 21:48:07 CEST] Pusher: Syncing with diskstation
+ 9601024 61% 4.50MB/s 0:00:01
+ 13860864 88% 4.32MB/s 0:00:00
+ 15640646 100% 4.28MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 15642710 bytes received 42 bytes 3476167.11 bytes/sec
+total size is 15640646 speedup is 1.00
+[2014-05-25 21:48:09 CEST] Transferrer: Uploaded 65_adding..ances.mp4
+
+WORM-s14906076-m1398385849--Learning SketchUp 2013%64_adding-materials.mp4
+ 32768 0% 0.00kB/s 0:00:00
+remote: merge git-annex 4620288 30% 4.38MB/s 0:00:02
+[2014-05-25 21:48:12 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ f4258a2..89ce825 git-annex -> synced/git-annex
+ 7700480 51% 3.61MB/s 0:00:01
+ 10649600 71% 3.30MB/s 0:00:01
+ 13467648 90% 3.13MB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ c4dc443..6fdf232 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 89ce825f4a57b9bc5490b2c0f7dc77e9b3cf0016 but expected f4258a2cd12ee4f23f3a9c9b9c635b9d59075f21
+ ! f4258a2..89ce825 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 14906076 100% 3.07MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 14908047 bytes received 42 bytes 2293552.15 bytes/sec
+total size is 14906076 speedup is 1.00
+[2014-05-25 21:48:15 CEST] Transferrer: Uploaded 64_adding..rials.mp4
+
+WORM-s9700735-m1398385733--Learning SketchUp 2013%63_creating-the-countertop.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4554752 46% 4.18MB/s 0:00:01
+[2014-05-25 21:48:17 CEST] Pusher: Syncing with diskstation
+ 7569408 78% 3.53MB/s 0:00:00
+ 9700735 100% 3.40MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 9702080 bytes received 42 bytes 2156027.11 bytes/sec
+total size is 9700735 speedup is 1.00
+[2014-05-25 21:48:19 CEST] Transferrer: Uploaded 63_creati..ertop.mp4
+
+WORM-s15089043-m1398386778--Learning SketchUp 2013%62_cabinet-doors.mp4
+ 32768 0% 0.00kB/s 0:00:00
+remote: merge git-annex 4456448 29% 4.05MB/s 0:00:02
+ 7340032 48% 3.36MB/s 0:00:02
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 89ce825..be1967a git-annex -> synced/git-annex
+[2014-05-25 21:48:22 CEST] RemoteControl: Syncing with diskstation
+ 10223616 67% 3.12MB/s 0:00:01
+ 13369344 88% 3.08MB/s 0:00:00
+ 15089043 100% 3.02MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 15091035 bytes received 42 bytes 2321704.15 bytes/sec
+total size is 15089043 speedup is 1.00
+[2014-05-25 21:48:25 CEST] Transferrer: Uploaded 62_cabine..doors.mp4
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 6fdf232..5d94435 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at be1967a15a951b38c76e4e8f674812a01df4c8c8 but expected 89ce825f4a57b9bc5490b2c0f7dc77e9b3cf0016
+ ! 89ce825..be1967a synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+WORM-s10872872-m1398384973--Learning SketchUp 2013%61_wall-cabinets.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4194304 38% 3.90MB/s 0:00:01
+[2014-05-25 21:48:27 CEST] Pusher: Syncing with diskstation
+ 7208960 66% 3.34MB/s 0:00:01
+ 10190848 93% 3.16MB/s 0:00:00
+ 10872872 100% 3.14MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 10874348 bytes received 42 bytes 2416531.11 bytes/sec
+total size is 10872872 speedup is 1.00
+remote: merge git-annex [2014-05-25 21:48:29 CEST] Transferrer: Uploaded 61_wall-c..inets.mp4
+
+WORM-s14169006-m1398385488--Learning SketchUp 2013%60_base-cabinets.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4292608 30% 3.96MB/s 0:00:02
+[2014-05-25 21:48:31 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ be1967a..0c0e83a git-annex -> synced/git-annex
+ 7143424 50% 3.29MB/s 0:00:02
+ 10289152 72% 3.16MB/s 0:00:01
+ 13139968 92% 3.03MB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 5d94435..c7aef43 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 0c0e83a4b729ed1ef86e4854405ec752226bbd09 but expected be1967a15a951b38c76e4e8f674812a01df4c8c8
+ ! be1967a..0c0e83a synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 14169006 100% 3.08MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 14170886 bytes received 42 bytes 2180142.77 bytes/sec
+total size is 14169006 speedup is 1.00
+[2014-05-25 21:48:35 CEST] Transferrer: Uploaded 60_base-c..inets.mp4
+[2014-05-25 21:48:35 CEST] Pusher: Syncing with diskstation
+
+WORM-s13699702-m1398385658--Learning SketchUp 2013%59_adding-textures.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4063232 29% 3.80MB/s 0:00:02
+remote: merge git-annex 7503872 54% 3.54MB/s 0:00:01
+ 11599872 84% 3.65MB/s 0:00:00
+ 13699702 100% 3.75MB/s 0:00:03 (xfer#1, to-check=0/1)
+[2014-05-25 21:48:41 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 0c0e83a..cd5b9c0 git-annex -> synced/git-annex
+
+sent 13701528 bytes received 42 bytes 3044793.33 bytes/sec
+total size is 13699702 speedup is 1.00
+[2014-05-25 21:48:42 CEST] Transferrer: Uploaded 59_adding..tures.mp4
+
+WORM-s10444949-m1398386483--Learning SketchUp 2013%58_mantle-support.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5177344 49% 4.89MB/s 0:00:01
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ c7aef43..e499593 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at cd5b9c01988d7c7b10730356ed55cc8b1422ce52 but expected 0c0e83a4b729ed1ef86e4854405ec752226bbd09
+ ! 0c0e83a..cd5b9c0 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 9175040 87% 4.34MB/s 0:00:00
+ 10444949 100% 3.92MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 10446374 bytes received 42 bytes 2984690.29 bytes/sec
+total size is 10444949 speedup is 1.00
+[2014-05-25 21:48:46 CEST] Transferrer: Uploaded 58_mantle..pport.mp4
+[2014-05-25 21:48:46 CEST] Pusher: Syncing with diskstation
+
+WORM-s24021797-m1398385079--Learning SketchUp 2013%57_mantle-columns.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5079040 21% 4.81MB/s 0:00:03
+ 9011200 37% 4.25MB/s 0:00:03
+ 13041664 54% 4.09MB/s 0:00:02
+remote: merge git-annex 17006592 70% 3.97MB/s 0:00:01
+ 20643840 85% 3.61MB/s 0:00:00
+[2014-05-25 21:48:52 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ cd5b9c0..7f4755f git-annex -> synced/git-annex
+ 23887872 99% 3.44MB/s 0:00:00
+ 24021797 100% 3.69MB/s 0:00:06 (xfer#1, to-check=0/1)
+
+sent 24024882 bytes received 42 bytes 3203323.20 bytes/sec
+total size is 24021797 speedup is 1.00
+[2014-05-25 21:48:53 CEST] Transferrer: Uploaded 57_mantle..lumns.mp4
+
+WORM-s20301926-m1398385822--Learning SketchUp 2013%56_building-the-mantle.mp4
+ 32768 0% 0.00kB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ e499593..a7e1df5 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 7f4755fe1b2fbe86253a5854d83948a479df1302 but expected cd5b9c01988d7c7b10730356ed55cc8b1422ce52
+ ! cd5b9c0..7f4755f synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 4358144 21% 4.07MB/s 0:00:03
+[2014-05-25 21:48:55 CEST] Pusher: Syncing with diskstation
+ 7241728 35% 3.34MB/s 0:00:03
+ 10125312 49% 3.14MB/s 0:00:03
+ 13271040 65% 3.10MB/s 0:00:02
+remote: merge git-annex 16154624 79% 2.73MB/s 0:00:01
+ 18972672 93% 2.74MB/s 0:00:00
+[2014-05-25 21:49:00 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 7f4755f..367f02c git-annex -> synced/git-annex
+ 20301926 100% 2.92MB/s 0:00:06 (xfer#1, to-check=0/1)
+
+sent 20304560 bytes received 42 bytes 2388776.71 bytes/sec
+total size is 20301926 speedup is 1.00
+[2014-05-25 21:49:01 CEST] Transferrer: Uploaded 56_buildi..antle.mp4
+
+WORM-s15278630-m1398386298--Learning SketchUp 2013%55_starting-at-the-base.mp4
+ 32768 0% 0.00kB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ a7e1df5..200c73f git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 367f02ceec6d27fdb719156715a8a24a9f0cc149 but expected 7f4755fe1b2fbe86253a5854d83948a479df1302
+ ! 7f4755f..367f02c synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 4653056 30% 4.41MB/s 0:00:02
+ 7733248 50% 3.61MB/s 0:00:02
+[2014-05-25 21:49:04 CEST] Pusher: Syncing with diskstation
+ 10616832 69% 3.32MB/s 0:00:01
+ 13500416 88% 3.14MB/s 0:00:00
+ 15278630 100% 3.14MB/s 0:00:04 (xfer#1, to-check=0/1)
+remote: merge git-annex
+sent 15280653 bytes received 42 bytes 2350876.15 bytes/sec
+total size is 15278630 speedup is 1.00
+[2014-05-25 21:49:07 CEST] Transferrer: Uploaded 55_starti..-base.mp4
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 367f02c..e9cb764 git-annex -> synced/git-annex
+
+WORM-s17900868-m1398386914--Learning SketchUp 2013%54_using-the-window-feature.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:49:08 CEST] RemoteControl: Syncing with diskstation
+ 4718592 26% 4.44MB/s 0:00:02
+ 8290304 46% 3.92MB/s 0:00:02
+ 12189696 68% 3.85MB/s 0:00:01
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 200c73f..e2eb7b5 git-annex -> diskstation/git-annex
+ 16482304 92% 3.88MB/s 0:00:00
+ 17900868 100% 3.91MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 17903215 bytes received 42 bytes 2754347.23 bytes/sec
+total size is 17900868 speedup is 1.00
+[2014-05-25 21:49:13 CEST] Pusher: Syncing with diskstation
+[2014-05-25 21:49:13 CEST] Transferrer: Uploaded 54_using-..ature.mp4
+
+WORM-s13516185-m1398386734--Learning SketchUp 2013%53_creating-walls-and-door-openings.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5242880 38% 4.94MB/s 0:00:01
+ 9273344 68% 4.36MB/s 0:00:00
+remote: merge git-annex 13369344 98% 4.17MB/s 0:00:00
+ 13516185 100% 4.17MB/s 0:00:03 (xfer#1, to-check=0/1)
+[2014-05-25 21:49:18 CEST] RemoteControl: Syncing with diskstation
+
+sent 13518004 bytes received 42 bytes 3004010.22 bytes/sec
+total size is 13516185 speedup is 1.00
+[2014-05-25 21:49:18 CEST] Transferrer: Uploaded 53_creati..nings.mp4
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+
+WORM-s18590095-m1398385163--Learning SketchUp 2013%52_installing-bit-tools-plugins.mp4
+ e9cb764..c7f1783 git-annex -> synced/git-annex
+ 32768 0% 0.00kB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ e2eb7b5..ff506d2 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at c7f178361d32682b60332b5c508a3ce0aec3925c but expected e9cb7644b684d418952b4132c725211eb045b260
+ ! e9cb764..c7f1783 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+[2014-05-25 21:49:19 CEST] RemoteControl: Syncing with diskstation
+ 4259840 22% 3.88MB/s 0:00:03
+ 6684672 35% 3.09MB/s 0:00:03
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ ff506d2..ff2bd4c git-annex -> diskstation/git-annex
+ 10813440 58% 3.36MB/s 0:00:02
+[2014-05-25 21:49:23 CEST] Pusher: Syncing with diskstation
+ 14876672 80% 3.46MB/s 0:00:01
+ 18590095 100% 3.53MB/s 0:00:05 (xfer#1, to-check=0/1)
+
+sent 18592530 bytes received 42 bytes 2860395.69 bytes/sec
+total size is 18590095 speedup is 1.00
+[2014-05-25 21:49:24 CEST] Transferrer: Uploaded 52_instal..ugins.mp4
+
+WORM-s28284719-m1398385600--Learning SketchUp 2013%51_double-hung-windows.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5046272 17% 4.72MB/s 0:00:04
+remote: merge git-annex 9076736 32% 4.27MB/s 0:00:04
+ 13303808 47% 4.16MB/s 0:00:03
+[2014-05-25 21:49:29 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ c7f1783..a39803a git-annex -> synced/git-annex
+ 16711680 59% 3.89MB/s 0:00:02
+ 18841600 66% 3.14MB/s 0:00:02
+ 21331968 75% 2.78MB/s 0:00:02
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ ff2bd4c..338767b git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at a39803aef5ce739ae6a6472a7de156efac31bebc but expected c7f178361d32682b60332b5c508a3ce0aec3925c
+ ! c7f1783..a39803a synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 26050560 92% 2.89MB/s 0:00:00
+ 28284719 100% 3.45MB/s 0:00:07 (xfer#1, to-check=0/1)
+
+sent 28288329 bytes received 42 bytes 2977723.26 bytes/sec
+total size is 28284719 speedup is 1.00
+[2014-05-25 21:49:34 CEST] Transferrer: Uploaded 51_double..ndows.mp4
+
+WORM-s16987083-m1398385579--Learning SketchUp 2013%50_creating-the-front-window-frame.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:49:35 CEST] Pusher: Syncing with diskstation
+ 5144576 30% 4.85MB/s 0:00:02
+ 9371648 55% 4.39MB/s 0:00:01
+ 11468800 67% 3.58MB/s 0:00:01
+ 15859712 93% 3.72MB/s 0:00:00
+ 16987083 100% 3.75MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 16989325 bytes received 42 bytes 3088975.82 bytes/sec
+total size is 16987083 speedup is 1.00
+[2014-05-25 21:49:39 CEST] Transferrer: Uploaded 50_creati..frame.mp4
+remote: merge git-annex
+WORM-s19055363-m1398385037--Learning SketchUp 2013%49_creating-doors.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5013504 26% 4.68MB/s 0:00:02
+[2014-05-25 21:49:41 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ a39803a..8462dc1 git-annex -> synced/git-annex
+ 9011200 47% 4.21MB/s 0:00:02
+ 13041664 68% 4.05MB/s 0:00:01
+ 16351232 85% 3.83MB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 338767b..47c33b6 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 8462dc1c099c64ff94d5d35cb2f2efaff89b028e but expected a39803aef5ce739ae6a6472a7de156efac31bebc
+ ! a39803a..8462dc1 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 19055363 100% 3.97MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 19057840 bytes received 42 bytes 2931981.85 bytes/sec
+total size is 19055363 speedup is 1.00
+[2014-05-25 21:49:46 CEST] Pusher: Syncing with diskstation
+[2014-05-25 21:49:46 CEST] Transferrer: Uploaded 49_creati..doors.mp4
+
+WORM-s11184398-m1398385463--Learning SketchUp 2013%48_review-of-components-and-nested-groups.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 3375104 30% 2.72MB/s 0:00:02
+ 5603328 50% 2.38MB/s 0:00:02
+remote: merge git-annex 9371648 83% 2.75MB/s 0:00:00
+ 11184398 100% 2.89MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 11185939 bytes received 42 bytes 2033814.73 bytes/sec
+total size is 11184398 speedup is 1.00
+[2014-05-25 21:49:52 CEST] RemoteControl: Syncing with diskstation
+[2014-05-25 21:49:52 CEST] Transferrer: Uploaded 48_review..roups.mp4
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 8462dc1..877c07a git-annex -> synced/git-annex
+
+WORM-s19612237-m1398385719--Learning SketchUp 2013%47_adding-railing.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 3997696 20% 3.75MB/s 0:00:04
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 47c33b6..bb182f5 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 877c07ad78a25ddf859ac96049ec938fa9b0b5f3 but expected 8462dc1c099c64ff94d5d35cb2f2efaff89b028e
+ ! 8462dc1..877c07a synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 8257536 42% 3.88MB/s 0:00:02
+ 12845056 65% 4.02MB/s 0:00:01
+ 17039360 86% 4.00MB/s 0:00:00
+[2014-05-25 21:49:57 CEST] Pusher: Syncing with diskstation
+ 19612237 100% 3.99MB/s 0:00:04 (xfer#1, to-check=0/1)
+
+sent 19614782 bytes received 42 bytes 3017665.23 bytes/sec
+total size is 19612237 speedup is 1.00
+[2014-05-25 21:49:58 CEST] Transferrer: Uploaded 47_adding..iling.mp4
+
+WORM-s23427266-m1398386041--Learning SketchUp 2013%46_adding-spindles-with-move-and-copy.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4128768 17% 3.80MB/s 0:00:04
+remote: merge git-annex 7176192 30% 3.33MB/s 0:00:04
+ 11304960 48% 3.53MB/s 0:00:03
+[2014-05-25 21:50:02 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 877c07a..873eda1 git-annex -> synced/git-annex
+ 15138816 64% 3.53MB/s 0:00:02
+ 18644992 79% 3.42MB/s 0:00:01
+ 21135360 90% 3.29MB/s 0:00:00
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ bb182f5..470a1af git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 873eda1fd0b52f509bbd03a02ec5a3d6d8085488 but expected 877c07ad78a25ddf859ac96049ec938fa9b0b5f3
+ ! 877c07a..873eda1 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 23427266 100% 3.17MB/s 0:00:07 (xfer#1, to-check=0/1)
+
+sent 23430295 bytes received 42 bytes 2756510.24 bytes/sec
+total size is 23427266 speedup is 1.00
+[2014-05-25 21:50:06 CEST] Transferrer: Uploaded 46_adding..-copy.mp4
+
+WORM-s28584390-m1398385775--Learning SketchUp 2013%45_making-a-unique-bottom-step.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:50:07 CEST] Pusher: Syncing with diskstation
+ 5472256 19% 4.96MB/s 0:00:04
+ 9895936 34% 4.53MB/s 0:00:04
+ 14221312 49% 4.40MB/s 0:00:03
+remote: merge git-annex 18055168 63% 4.21MB/s 0:00:02
+ 22609920 79% 4.05MB/s 0:00:01
+[2014-05-25 21:50:12 CEST] RemoteControl: Syncing with diskstation
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 873eda1..274fd99 git-annex -> synced/git-annex
+ 26279936 91% 3.88MB/s 0:00:00
+ 28584390 100% 4.06MB/s 0:00:06 (xfer#1, to-check=0/1)
+
+sent 28588044 bytes received 42 bytes 3363304.24 bytes/sec
+total size is 28584390 speedup is 1.00
+[2014-05-25 21:50:14 CEST] Transferrer: Uploaded 45_making..-step.mp4
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 470a1af..989e8b5 git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at 274fd99803c01b7911e45dcb050480eb4bfe2a82 but expected 873eda1fd0b52f509bbd03a02ec5a3d6d8085488
+ ! 873eda1..274fd99 synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+
+WORM-s24162552-m1398385100--Learning SketchUp 2013%44_adding-riser-detail.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 5341184 22% 5.06MB/s 0:00:03
+[2014-05-25 21:50:17 CEST] Pusher: Syncing with diskstation
+ 9240576 38% 4.38MB/s 0:00:03
+ 13959168 57% 4.38MB/s 0:00:02
+ 18153472 75% 4.28MB/s 0:00:01
+remote: merge git-annex 22347776 92% 4.00MB/s 0:00:00
+ 24162552 100% 4.15MB/s 0:00:05 (xfer#1, to-check=0/1)
+[2014-05-25 21:50:22 CEST] RemoteControl: Syncing with diskstation
+
+sent 24165658 bytes received 42 bytes 3222093.33 bytes/sec
+total size is 24162552 speedup is 1.00
+[2014-05-25 21:50:22 CEST] Transferrer: Uploaded 44_adding..etail.mp4
+(merging synced/git-annex into git-annex...)
+remote: (Recording state in git...)
+remote: ok
+remote: (Recording state in git...)
+To joern@annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 274fd99..baa9cda git-annex -> synced/git-annex
+
+WORM-s14814183-m1398385868--Learning SketchUp 2013%43_creating-the-staircase.mp4
+ 32768 0% 0.00kB/s 0:00:00
+ 4947968 33% 4.69MB/s 0:00:02
+From annex.diskstation.local:/volume1/homes/joern/Annex.movies
+ 989e8b5..c15470f git-annex -> diskstation/git-annex
+error: Ref refs/remotes/diskstation/synced/git-annex is at baa9cdae739f6bc1f928d9abe82c0f83b6645093 but expected 274fd99803c01b7911e45dcb050480eb4bfe2a82
+ ! 274fd99..baa9cda synced/git-annex -> diskstation/synced/git-annex (unable to update local ref)
+ 9011200 60% 4.25MB/s 0:00:01
+ 13729792 92% 4.31MB/s 0:00:00
+ 14814183 100% 4.30MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 14816152 bytes received 42 bytes 2693853.45 bytes/sec
+total size is 14814183 speedup is 1.00
+[2014-05-25 21:50:27 CEST] Transferrer: Uploaded 43_creati..rcase.mp4
+
+WORM-s14506973-m1398386318--Learning SketchUp 2013%42_why-we-use-groups-and-components.mp4
+ 32768 0% 0.00kB/s 0:00:00
+[2014-05-25 21:50:27 CEST] Pusher: Syncing with diskstation
+ 5341184 36% 5.04MB/s 0:00:01
+ 9633792 66% 4.55MB/s 0:00:01
+ 13926400 95% 4.37MB/s 0:00:00
+ 14506973 100% 4.38MB/s 0:00:03 (xfer#1, to-check=0/1)
+
+sent 14508912 bytes received 42 bytes 3224212.00 bytes/sec
+total size is 14506973 speedup is 1.00
+[2014-05-25 21:50:31 CEST] Transferrer: Uploaded 42_why-we..nents.mp4
+
+WORM-s11494983-m1398385388--Learning SketchUp 2013%41_copy-and-paste-in-place.mp4
+ 32768 0% 0.00kB/s 0:00:00
+remote: merge git-annex 5210112 45% 4.82MB/s 0:00:01
+ 9404416 81% 4.37MB/s 0:00:00
+ 11494983 100% 4.21MB/s 0:00:02 (xfer#1, to-check=0/1)
+
+sent 11496545 bytes received 42 bytes 3284739.14 bytes/sec
+total size is 11494983 speedup is 1.00
+[2014-05-25 21:50:34 CEST] RemoteControl: Syncing with diskstation
+[2014-05-25 21:50:34 CEST] Transferrer: Uploaded 41_copy-a..place.mp4
+
+
+# End of transcript or log.
+"""]]
diff --git a/doc/bugs/gpg-agent/comment_1_86860841aaa38541968693ec02f6a506._comment b/doc/bugs/gpg-agent/comment_1_86860841aaa38541968693ec02f6a506._comment
new file mode 100644
index 000000000..382b3a8b7
--- /dev/null
+++ b/doc/bugs/gpg-agent/comment_1_86860841aaa38541968693ec02f6a506._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 1"
+ date="2014-05-30T19:15:33Z"
+ content="""
+What I see in the log is git-annex is syncing files to/from the remote \"diskstation\". This remote is not encrypted at all, so git-annex is not using gpg. There is no mention of gpg in the log at all.
+
+So, I don't see any indication that whatever is causing too many gpg-agent processes to be spawned is git-annex. Can you share more information that would point toward git-annex being the cause of this problem?
+"""]]
diff --git a/doc/bugs/gpg_bundled_with_OSX_build_fails.mdwn b/doc/bugs/gpg_bundled_with_OSX_build_fails.mdwn
deleted file mode 100644
index 701e67cc5..000000000
--- a/doc/bugs/gpg_bundled_with_OSX_build_fails.mdwn
+++ /dev/null
@@ -1,25 +0,0 @@
-What steps will reproduce the problem?
-
-run
-
- /Applications/git-annex.app/Contents/MacOS/bin/gpg
-
-from the terminal
-
-What is the expected output? What do you see instead?
-
-I expect to see typical gpg output. Instead, I see
-
- dyld: Library not loaded: /opt/local/lib/libiconv.2.dylib
- Referenced from: /Applications/git-annex.app/Contents/MacOS/bin/gpg
- Reason: Incompatible library version: gpg requires version 8.0.0 or later, but libiconv.2.dylib provides version 7.0.0
- Trace/BPT trap: 5
-
-What version of git-annex are you using? On what operating system?
-
-git annex Version: 3.20121017 on Mac OS X 10.7.5
-
-[[!tag /design/assistant/OSX]]
-
-> Libraries are now handled better in the OSX app and this should be able
-> to happen anymore. [[done]] --[[Joey]]
diff --git a/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_1_ec911f920db6c354ba998ffbb5886606._comment b/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_1_ec911f920db6c354ba998ffbb5886606._comment
deleted file mode 100644
index 574a25b5f..000000000
--- a/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_1_ec911f920db6c354ba998ffbb5886606._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.194"
- subject="comment 1"
- date="2012-11-01T02:36:07Z"
- content="""
-You need to use runshell to run the commands included in the OSX app.
-
-(Also, using them outside of git-annex is not really something that is intended to be supported.)
-"""]]
diff --git a/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_2_bf2a3ab1bbe258bd501ec4b776882adf._comment b/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_2_bf2a3ab1bbe258bd501ec4b776882adf._comment
deleted file mode 100644
index 268a577ca..000000000
--- a/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_2_bf2a3ab1bbe258bd501ec4b776882adf._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/6xTna_B_h.ECb6_ftC2dYLytAEwrv36etg_054U-#4c1e7"
- nickname="Fake"
- subject="comment 2"
- date="2012-11-01T11:49:55Z"
- content="""
-Ok, thanks for the info. I actually tried running this directly because I was getting the same error from inside of git-annex assistant. When I add a remote server repository with encrypted rsync, I am able to add the server (\"Check this server\" works), but when I click on the \"Use an encrypted rsync repository on the server\" button, I get the following error:
-
- Internal Server Error
-
- user error (gpg [\"--quiet\",\"--trust-model\",\"always\",\"--gen-random\",\"--armor\",\"1\",\"512\"] exited 5)
-"""]]
diff --git a/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_3_c0142427400323c00bd8294415ae32c5._comment b/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_3_c0142427400323c00bd8294415ae32c5._comment
deleted file mode 100644
index 163ce66c0..000000000
--- a/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_3_c0142427400323c00bd8294415ae32c5._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/6xTna_B_h.ECb6_ftC2dYLytAEwrv36etg_054U-#4c1e7"
- nickname="Fake"
- subject="comment 3"
- date="2012-11-01T11:52:30Z"
- content="""
-A little more info. Here is the error from the console log when I try to add the remote server repository.
-
- Dyld Error Message:
- Library not loaded: /opt/local/lib/libncurses.5.dylib
- Referenced from: /Applications/git-annex.app/Contents/MacOS/opt/local/lib/libreadline.6.2.dylib
- Reason: no suitable image found. Did find:
- /usr/lib/libncurses.5.dylib: mach-o, but wrong architecture
- /usr/lib/libncurses.5.dylib: mach-o, but wrong architecture
-"""]]
diff --git a/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_4_b56db4b5afc276f88a2b980e22fda8a0._comment b/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_4_b56db4b5afc276f88a2b980e22fda8a0._comment
deleted file mode 100644
index 64946b41a..000000000
--- a/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_4_b56db4b5afc276f88a2b980e22fda8a0._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.194"
- subject="comment 4"
- date="2012-11-01T13:40:39Z"
- content="""
-Ah ok, thanks for the info about this problem.
-
-Which URL did you download the app from? We have 2 builds.
-"""]]
diff --git a/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_5_a4eda81e5f927c463593bc48fbe84077._comment b/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_5_a4eda81e5f927c463593bc48fbe84077._comment
deleted file mode 100644
index d5a583020..000000000
--- a/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_5_a4eda81e5f927c463593bc48fbe84077._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/6xTna_B_h.ECb6_ftC2dYLytAEwrv36etg_054U-#4c1e7"
- nickname="Fake"
- subject="comment 5"
- date="2012-11-01T14:29:40Z"
- content="""
-This is the beta release (http://downloads.kitenet.net/git-annex/OSX/git-annex.dmg.bz2) Right now the link to the daily build is broken.
-
-I found the link on this page: http://git-annex.branchable.com/install/OSX/
-
-Thanks!
-"""]]
diff --git a/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_6_2f0b9331d16a208883bac586258a7b50._comment b/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_6_2f0b9331d16a208883bac586258a7b50._comment
deleted file mode 100644
index abcfb6fb2..000000000
--- a/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_6_2f0b9331d16a208883bac586258a7b50._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.6.49"
- subject="comment 6"
- date="2012-11-26T23:53:01Z"
- content="""
-The OSX app has been updated for today's release, and includes a lot of missing libraries. Your testing of it would be appreciated.
-"""]]
diff --git a/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_7_c05c484a6134f93796cff08de0f63e80._comment b/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_7_c05c484a6134f93796cff08de0f63e80._comment
deleted file mode 100644
index 1e60e5d25..000000000
--- a/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_7_c05c484a6134f93796cff08de0f63e80._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlpOeCs7zZLR-PBGPxUgjWlg7bwAAzQZyk"
- nickname="Seth"
- subject="comment 7"
- date="2013-06-29T17:26:54Z"
- content="""
-I get this same internal server error when doing the encrypted rsync repo option:
-
- user error (gpg [\"--quiet\",\"--trust-model\",\"always\",\"--gen-random\",\"--armor\",\"1\",\"512\"] exited 2)
-
-Currently using the file found here:
-
-http://downloads.kitenet.net/git-annex/OSX/current/10.7.5_Lion/
-
-Using MacOS 10.7.5 Lion
-"""]]
diff --git a/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_8_f2cb5467ebe80cf67e1155b771b73978._comment b/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_8_f2cb5467ebe80cf67e1155b771b73978._comment
deleted file mode 100644
index 5b2bf88b2..000000000
--- a/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_8_f2cb5467ebe80cf67e1155b771b73978._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.193"
- subject="comment 8"
- date="2013-06-30T18:02:03Z"
- content="""
-That's not the same error (2 != 5), and posting comments to long-closed bugs is never a good idea if your goal is to report a current bug in a way that will ensure it's noticed and that anyone remembers to follow up on it. You should file a new bug report, and include whatever actual error message is output *before* the message you pasted.
-"""]]
diff --git a/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_9_27bbda7e31f55b29e1473555ee17e613._comment b/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_9_27bbda7e31f55b29e1473555ee17e613._comment
deleted file mode 100644
index cd2002411..000000000
--- a/doc/bugs/gpg_bundled_with_OSX_build_fails/comment_9_27bbda7e31f55b29e1473555ee17e613._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlpOeCs7zZLR-PBGPxUgjWlg7bwAAzQZyk"
- nickname="Seth"
- subject="comment 9"
- date="2013-06-30T19:38:07Z"
- content="""
-Just so you know, this post is what comes up on google when I search the error.
-"""]]
diff --git a/doc/bugs/gpg_does_not_ask_for_password_inside_tmux.mdwn b/doc/bugs/gpg_does_not_ask_for_password_inside_tmux.mdwn
new file mode 100644
index 000000000..7dbcf3048
--- /dev/null
+++ b/doc/bugs/gpg_does_not_ask_for_password_inside_tmux.mdwn
@@ -0,0 +1,25 @@
+### Please describe the problem.
+
+When commands that need gpg like `git annex copy` are run inside tmux, the GPG prompt does not show up and the user cannot give their password.
+
+Running the same command outside tmux causes GPG to properly show its prompt
+
+### What steps will reproduce the problem?
+
+ $ tmux
+ TMUX$ GIT_ANNEX_ROOT/runshell
+ TMUX$ git annex copy --not -in remote --to remote
+
+git-annex will show the name of the first filename but will get stuck soon after that, waiting for GPG.
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex 5.20140708-g8c9cc55c from the precompiled binaries, run inside tmux 1.6.
+
+`tmux.conf` contains `set-option -g default-command $SHELL` (this means that a normal shell is spawned, not a login shell)
+
+Ubuntu 12.04.4
+
+[[!tag moreinfo]]
+
+> [[done]]; apparently a local misconfiguration of some sort. --[[Joey]]
diff --git a/doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_1_053b12e8b412723ff1d6b4e64e71af9e._comment b/doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_1_053b12e8b412723ff1d6b4e64e71af9e._comment
new file mode 100644
index 000000000..0359be528
--- /dev/null
+++ b/doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_1_053b12e8b412723ff1d6b4e64e71af9e._comment
@@ -0,0 +1,24 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-10T18:24:17Z"
+ content="""
+I cannot reproduce this. I made sure to unset `GPG_AGENT_INFO` so gpg would need to prompt for a password on the terminal, and it did.
+
+<pre>
+joey@darkstar:~/tmp/r>unset GPG_AGENT_INFO
+joey@darkstar:~/tmp/r>git annex copy --to remote
+copy n/xxx (gpg)
+You need a passphrase to unlock the secret key for
+user: \"Joey Hess <joeyh@debian.org>\"
+4096-bit RSA key, ID 17065459, created 2009-06-17 (main key ID 2512E3C7)
+
+gpg: gpg-agent is not available in this session
+Enter passphrase:
+</pre>
+
+I cannot think of anything that would make gpg's password prompting behave differently inside tmux than outside, either.
+
+I think that to debug this, you are going to need to look at what the gpg process is trying to do.
+"""]]
diff --git a/doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_2_44830ba952cad3b153249bd405671507._comment b/doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_2_44830ba952cad3b153249bd405671507._comment
new file mode 100644
index 000000000..28756f654
--- /dev/null
+++ b/doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_2_44830ba952cad3b153249bd405671507._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://svario.it/gioele"
+ nickname="gioele"
+ subject="GPG_AGENT_INFO was already set in the outside shell"
+ date="2014-07-11T07:19:45Z"
+ content="""
+I found what the problem is: GPG_AGENT_INFO was already set in the outside shell.
+
+Unsetting GPG_AGENT_INFO fixes the problem.
+"""]]
diff --git a/doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_3_a63db33a1dc70e64418de8b4bea6a9fa._comment b/doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_3_a63db33a1dc70e64418de8b4bea6a9fa._comment
new file mode 100644
index 000000000..4f5428b87
--- /dev/null
+++ b/doc/bugs/gpg_does_not_ask_for_password_inside_tmux/comment_3_a63db33a1dc70e64418de8b4bea6a9fa._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 3"
+ date="2014-07-11T18:15:09Z"
+ content="""
+AFAICS there is no problem with GPG_AGENT_INFO being set while using tmux. The gpg agent works as usual and pops up a passphrase prompt window.
+
+Is there something broken in your gpg agent that prevents it from working inside tmux, or working at all? In any case, this seems like a local misconfiruation problem and out of git-annex's scope anyway so I suppose I will close the bug.
+
+"""]]
diff --git a/doc/bugs/gpg_error_on_android.mdwn b/doc/bugs/gpg_error_on_android.mdwn
deleted file mode 100644
index 3e69f05f2..000000000
--- a/doc/bugs/gpg_error_on_android.mdwn
+++ /dev/null
@@ -1,39 +0,0 @@
-### Please describe the problem.
-
-Adding an existing cloud repo on box.com results in an gpg error:
-
- user error (gpg ["--quiet","--trust-model","always","--batch","--passphrase-fd","86","--decrypt"] exited 2)
-
-### What steps will reproduce the problem?
-
-Enabling an existing cloud repository.
-
-### What version of git-annex are you using? On what operating system?
-
-Latest Android (4.20130516-g32 40006) on a rooted Samsung Galaxy Note (CyanogenMod 10.1)
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/debug.log
-
-(merging refs/synced/de8a8792-70de-48c3-a646-a168ce1d9d35/c25hdXRoQGphYmJlci5vcmc=/git-annex into git-annex...)
-(Recording state in git...)
-(gpg) gpg: can't open `/usr/local/share/gnupg/options.skel': No such file or directory
-gpg: DBG: locking for `/sdcard/git-annex.home/.gnupg/secring.gpg.lock' done via O_EXCL
-gpg: DBG: locking for `/sdcard/git-annex.home/.gnupg/pubring.gpg.lock' done via O_EXCL
-gpg: encrypted with unknown algorithm 3
-gpg: decryption failed: secret key not available
-(gpg) gpg: encrypted with unknown algorithm 3
-gpg: decryption failed: secret key not available
-(gpg) gpg: encrypted with unknown algorithm 3
-gpg: decryption failed: secret key not available
-(gpg) gpg: encrypted with unknown algorithm 3
-gpg: decryption failed: secret key not available
-
-# End of transcript or log.
-"""]]
-
-> [[done]]; I have deployed the new gpg build for Android and the
-> nightly Android app build is now using it. --[[Joey]]
diff --git a/doc/bugs/gpg_error_on_android/comment_1_870583fd1b7a33b688b9a228077d1333._comment b/doc/bugs/gpg_error_on_android/comment_1_870583fd1b7a33b688b9a228077d1333._comment
deleted file mode 100644
index b15500454..000000000
--- a/doc/bugs/gpg_error_on_android/comment_1_870583fd1b7a33b688b9a228077d1333._comment
+++ /dev/null
@@ -1,629 +0,0 @@
-[[!comment format=mdwn
- username="carlo"
- ip="118.208.45.43"
- subject="comment 1"
- date="2013-07-06T03:29:10Z"
- content="""
-I see similar errors on my Samsung Galaxy S3, running Cyanogenmod 9. The phone is trying to sync with an encrypted rsync repository on my Linode. My laptop can sync with no problems.
-
-Here's a dump from daemon.log. Let me know if you need more details.
-
- [2013-07-06 13:10:22 EST] main: starting assistant version 4.20130704-gaf18656
- Already up-to-date.
-
- (scanning...) [2013-07-06 13:10:23 EST] Watcher: Performing startup scan
- Already up-to-date.
- Already up-to-date.
-
-
- (started...) (gpg) [2013-07-06 13:10:28 EST] XMPPSendPack: Syncing with nk
- [2013-07-06 13:10:28 EST] XMPPReceivePack: Syncing with nk
- [2013-07-06 13:10:29 EST] XMPPSendPack: Syncing with nk
-
- <snip>
-
- GPGHMACSHA1--cfa7bdccfada399b50f086901621ba66a789a4df
- Already up-to-date.
-
- 0 0% 0.00kB/s 0:00:00 [2013-07-06 13:10:36 EST] Committer: Committing changes to git
- [2013-07-06 13:10:36 EST] XMPPSendPack: Syncing with nk
-
- 262,144 0% 203.34kB/s 0:06:43 Already up-to-date.
-
- 655,360 0% 211.99kB/s 0:06:25 [2013-07-06 13:10:38 EST] XMPPSendPack: Syncing with nk
- [2013-07-06 13:10:39 EST] XMPPSendPack: Syncing with nk
-
- 1,638,400 1% 395.65kB/s 0:03:23
- 2,424,832 2% 464.04kB/s 0:02:52
- 2,981,888 3% 546.05kB/s 0:02:25
- 3,538,944 4% 682.17kB/s 0:01:55
- 4,096,000 4% 581.68kB/s 0:02:14
- 4,653,056 5% 529.05kB/s 0:02:26
- 5,210,112 6% 525.60kB/s 0:02:26
- 5,767,168 7% 526.24kB/s 0:02:25
- 6,324,224 7% 526.75kB/s 0:02:24
- 6,881,280 8% 529.83kB/s 0:02:22
- 7,438,336 9% 532.94kB/s 0:02:20 (gpg)
- 7,798,784 9% 486.16kB/s 0:02:33
- 8,519,680 10% 525.75kB/s 0:02:20
- 9,076,736 11% 526.01kB/s 0:02:19
- 9,502,720 11% 459.23kB/s 0:02:38
- 10,354,688 12% 556.40kB/s 0:02:09
- 10,911,744 13% 514.20kB/s 0:02:18 (gpg)
- 11,501,568 13% 508.81kB/s 0:02:19 (gpg)
- 12,091,392 14% 585.73kB/s 0:01:59
- GPGHMACSHA1--15b3dbca166df23b9b14e88bcfb08dceeeeaade9
-
- 0 0% 0.00kB/s 0:00:00
- 12,615,680 15% 521.25kB/s 0:02:13
- 294,912 26% 266.17kB/s 0:00:03
- 12,910,592 15% 459.84kB/s 0:02:30
- 589,824 52% 266.67kB/s 0:00:01
- 13,205,504 16% 396.57kB/s 0:02:54
- 884,736 79% 266.42kB/s 0:00:00
- 13,500,416 16% 321.72kB/s 0:03:33
- 1,116,373 100% 275.58kB/s 0:00:03 (xfr#1, to-chk=0/1)
-
- 13,860,864 16% 285.92kB/s 0:03:59
- 14,221,312 17% 304.91kB/s 0:03:43
- 14,909,440 18% 403.88kB/s 0:02:46
- GPGHMACSHA1--ec1cbd34a82fe0997354669b2c7b38419f73d07e
-
- 0 0% 0.00kB/s 0:00:00
- 15,400,960 18% 450.59kB/s 0:02:28 gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- 294,912 26% 266.42kB/s 0:00:03
- GPGHMACSHA1--b979ec76f3b12b63db8ee540fc9a018cffb82aa8
-
- 15,663,104 19% 426.46kB/s 0:02:36
- 0 0% 0.00kB/s 0:00:00
- 393,216 35% 178.19kB/s 0:00:03
- 15,761,408 19% 364.08kB/s 0:03:02
- 131,072 11% 115.21kB/s 0:00:08
- 688,128 62% 206.52kB/s 0:00:01
- 16,056,320 19% 262.23kB/s 0:04:12
- 393,216 34% 176.71kB/s 0:00:04
- 884,736 80% 199.40kB/s 0:00:01
- 16,252,928 19% 194.67kB/s 0:05:39
- 589,824 51% 177.01kB/s 0:00:03
- 1,095,420 100% 205.52kB/s 0:00:05 (xfr#1, to-chk=0/1)
-
- 16,482,304 20% 183.44kB/s 0:05:58
- 819,200 70% 185.96kB/s 0:00:01
- 16,777,216 20% 224.84kB/s 0:04:51
- 1,114,112 96% 227.27kB/s 0:00:00
- 1,154,143 100% 211.07kB/s 0:00:05 (xfr#1, to-chk=0/1)
-
- 17,334,272 21% 289.96kB/s 0:03:44
- 17,891,328 21% 376.91kB/s 0:02:50 gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
- send: resource vanisheds e(nBdr:o kreens opuirpcee)
- vanished (Broken pipe)
-
- 18,448,384 22% 461.76kB/s 0:02:18 gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
- se
- 19,005,440 23% 531.25kB/s 0:01:59 nd: resource vanished (Broken pipe)
-
- 19,562,496 23% 532.81kB/s 0:01:57
- 19,922,944 24% 484.14kB/s 0:02:08
- 20,643,840 25% 525.36kB/s 0:01:57
- 21,200,896 25% 525.62kB/s 0:01:56
- 21,757,952 26% 526.13kB/s 0:01:55
- 22,085,632 26% 518.16kB/s 0:01:56
- 22,872,064 27% 529.05kB/s 0:01:52
- 23,429,120 28% 528.80kB/s 0:01:51
- 23,953,408 29% 516.75kB/s 0:01:52
- 24,543,232 29% 583.66kB/s 0:01:38
- 25,034,752 30% 516.51kB/s 0:01:50
- 25,460,736 30% 466.71kB/s 0:02:01
- 26,050,560 31% 481.20kB/s 0:01:56
- 26,607,616 32% 471.25kB/s 0:01:58
- 27,164,672 33% 486.21kB/s 0:01:53
- 27,721,728 33% 536.44kB/s 0:01:41
- 28,278,784 34% 533.33kB/s 0:01:41
- 28,835,840 35% 533.59kB/s 0:01:40
- 29,392,896 35% 529.44kB/s 0:01:39
- 29,982,720 36% 532.95kB/s 0:01:38
- 30,539,776 37% 533.46kB/s 0:01:37
- 31,096,832 37% 533.46kB/s 0:01:35
- 31,653,888 38% 537.23kB/s 0:01:34
- 31,752,192 38% 409.87kB/s 0:02:03
- 32,800,768 39% 524.96kB/s 0:01:34
- 33,357,824 40% 524.84kB/s 0:01:33
- 33,914,880 41% 524.96kB/s 0:01:32
- 34,471,936 41% 652.74kB/s 0:01:13
- 35,028,992 42% 533.33kB/s 0:01:28
- 35,586,048 43% 533.46kB/s 0:01:27
- 36,143,104 43% 533.07kB/s 0:01:26
- 36,700,160 44% 533.33kB/s 0:01:25
- 37,257,216 45% 533.33kB/s 0:01:24
- 37,814,272 45% 533.20kB/s 0:01:23
- 38,240,256 46% 467.37kB/s 0:01:34
- 39,059,456 47% 525.19kB/s 0:01:22
- 39,616,512 48% 525.31kB/s 0:01:21
- 40,173,568 48% 525.43kB/s 0:01:20
- 40,632,320 49% 574.52kB/s 0:01:12
- 41,254,912 50% 527.82kB/s 0:01:17
- 41,811,968 50% 528.08kB/s 0:01:16
- 42,369,024 51% 527.82kB/s 0:01:15
- 42,926,080 52% 549.15kB/s 0:01:11
- 43,483,136 52% 533.59kB/s 0:01:12
- 44,040,192 53% 533.20kB/s 0:01:11
- 44,597,248 54% 533.20kB/s 0:01:10
- 45,121,536 54% 525.49kB/s 0:01:10
- 45,678,592 55% 525.49kB/s 0:01:09
- 46,039,040 55% 476.68kB/s 0:01:16
- 46,792,704 56% 520.89kB/s 0:01:08
- 47,349,760 57% 528.41kB/s 0:01:06
- 47,906,816 58% 520.20kB/s 0:01:06
- 48,431,104 58% 500.32kB/s 0:01:07
- 49,020,928 59% 406.05kB/s 0:01:21
- 49,807,360 60% 446.10kB/s 0:01:12
- 50,364,416 61% 451.55kB/s 0:01:10
- 50,921,472 61% 504.88kB/s 0:01:02
- 51,412,992 62% 569.76kB/s 0:00:54
- 51,970,048 63% 515.00kB/s 0:00:58
- 52,527,104 63% 514.87kB/s 0:00:57
- 53,084,160 64% 515.25kB/s 0:00:56
- 53,641,216 65% 530.47kB/s 0:00:54
- 54,198,272 65% 532.94kB/s 0:00:52
- 54,755,328 66% 533.46kB/s 0:00:51
- 55,312,384 67% 533.20kB/s 0:00:50
- 55,869,440 67% 533.33kB/s 0:00:49
- 56,426,496 68% 533.46kB/s 0:00:48
- 56,983,552 69% 533.20kB/s 0:00:47
- 57,409,536 69% 466.09kB/s 0:00:53
- 58,228,736 70% 525.79kB/s 0:00:45
- 58,785,792 71% 525.67kB/s 0:00:44
- 59,342,848 72% 520.68kB/s 0:00:44
- 59,736,064 72% 547.60kB/s 0:00:41
- 60,489,728 73% 528.10kB/s 0:00:41
- 61,046,784 74% 528.48kB/s 0:00:40
- 61,603,840 74% 533.72kB/s 0:00:38
- 62,128,128 75% 567.40kB/s 0:00:35
- 62,226,432 75% 399.53kB/s 0:00:50
- 62,652,416 76% 369.81kB/s 0:00:53
- 62,947,328 76% 300.78kB/s 0:01:04
- 63,438,848 77% 292.97kB/s 0:01:04
- 63,963,136 77% 400.66kB/s 0:00:45
- 64,520,192 78% 426.27kB/s 0:00:41
- 65,110,016 79% 495.54kB/s 0:00:34
- 65,601,536 79% 497.76kB/s 0:00:33
- 66,158,592 80% 506.62kB/s 0:00:31
- 66,715,648 81% 511.33kB/s 0:00:30
- 67,207,168 81% 452.20kB/s 0:00:33
- 68,059,136 82% 527.01kB/s 0:00:27
- 68,616,192 83% 526.55kB/s 0:00:26
- 69,173,248 84% 527.24kB/s 0:00:24
- 69,500,928 84% 529.30kB/s 0:00:24
- 70,320,128 85% 527.98kB/s 0:00:22
- 70,877,184 86% 527.60kB/s 0:00:21
- 71,434,240 86% 526.84kB/s 0:00:20
- 71,991,296 87% 595.93kB/s 0:00:17
- 72,548,352 88% 529.70kB/s 0:00:18
- 73,105,408 88% 528.16kB/s 0:00:17 [2013-07-06 13:13:01 EST] XMPPSendPack: Syncing with ch
-
- 73,662,464 89% 527.39kB/s 0:00:16 [2013-07-06 13:13:02 EST] XMPPSendPack: Syncing with ch
-
- 74,219,520 90% 524.08kB/s 0:00:15
- 74,743,808 90% 511.21kB/s 0:00:14
- 75,104,256 91% 410.00kB/s 0:00:17
- 75,497,472 91% 377.34kB/s 0:00:18
- 76,152,832 92% 402.22kB/s 0:00:15
- 76,709,888 93% 413.44kB/s 0:00:13
- 77,201,408 93% 458.58kB/s 0:00:11
- 78,020,608 94% 552.96kB/s 0:00:07
- 78,577,664 95% 528.45kB/s 0:00:07
- 79,134,720 96% 528.34kB/s 0:00:06
- 79,691,776 96% 597.25kB/s 0:00:04
- 80,248,832 97% 532.42kB/s 0:00:03
- 80,805,888 98% 533.33kB/s 0:00:02
- 81,362,944 98% 533.07kB/s 0:00:01
- 81,920,000 99% 533.07kB/s 0:00:00
- 82,307,694 100% 491.43kB/s 0:02:43 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
- send: resource vanished (Broken pipe)
-
- GPGHMACSHA1--836e8cdf7c23d119e08f9d9cb3377abb438f2312
-
- 0 0% 0.00kB/s 0:00:00
- 131,072 11% 115.84kB/s 0:00:08
- 229,376 19% 106.41kB/s 0:00:08
- 393,216 34% 118.08kB/s 0:00:06
- 655,360 56% 149.46kB/s 0:00:03
- 917,504 79% 180.24kB/s 0:00:01
- 1,154,559 100% 184.38kB/s 0:00:06 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--c34a27463185c59e8cb7df7f647333072e18ddb9
-
- 0 0% 0.00kB/s 0:00:00
- 294,912 16% 272.73kB/s 0:00:05
- 655,360 36% 304.18kB/s 0:00:03
- 1,114,112 62% 343.54kB/s 0:00:01
- 1,441,792 81% 335.32kB/s 0:00:00
- 1,772,175 100% 351.61kB/s 0:00:04 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--7bc715e8c49feb30ba974b246ad8b69bcef8f407
-
- 0 0% 0.00kB/s 0:00:00
- 393,216 31% 373.18kB/s 0:00:02
- 819,200 66% 340.43kB/s 0:00:01
- 1,234,572 100% 411.48kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--dbc6af27d9b732f3ea7b29f7316cf67986db8ff0
-
- 0 0% 0.00kB/s 0:00:00
- 557,056 60% 532.81kB/s 0:00:00
- 913,536 100% 540.03kB/s 0:00:01 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--84ce3dc5fe676eb10cfe595564482d48daceeb33
-
- 0 0% 0.00kB/s 0:00:00
- 557,056 44% 532.29kB/s 0:00:01
- 1,114,112 88% 532.29kB/s 0:00:00
- 1,256,801 100% 548.90kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--9d042d017e8efc60f82ee3789edbbd8422ddbf1c
-
- 0 0% 0.00kB/s 0:00:00
- 491,520 42% 469.67kB/s 0:00:01
- 950,272 81% 458.50kB/s 0:00:00
- 1,165,242 100% 483.81kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--951b2f84c011debef9e6dc213d859cc6366f8e01
-
- 0 0% 0.00kB/s 0:00:00
- 557,056 44% 535.96kB/s 0:00:01
- 983,040 78% 460.21kB/s 0:00:00
- 1,257,173 100% 468.23kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--88b8021104955c3ff14da53cdf5c8dd445719bfa
-
- 0 0% 0.00kB/s 0:00:00
- 589,824 38% 544.94kB/s 0:00:01
- 1,146,880 75% 536.66kB/s 0:00:00
- 1,518,637 100% 493.03kB/s 0:00:03 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--89a254b76c1dd92c3bcf6c2db0745287ca306ae6
-
- 0 0% 0.00kB/s 0:00:00
- 393,216 29% 367.11kB/s 0:00:02
- 819,200 61% 391.01kB/s 0:00:01
- 1,277,952 96% 404.01kB/s 0:00:00
- 1,326,036 100% 417.32kB/s 0:00:03 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--b975ff334766d744ce6827be273ad7f46dddcdeb
-
- 0 0% 0.00kB/s 0:00:00
- 524,288 52% 496.61kB/s 0:00:00
- 996,592 100% 480.85kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--e828d8bbe5d34598fef577170a9fa9187d09e312
-
- 0 0% 0.00kB/s 0:00:00
- 557,056 35% 529.18kB/s 0:00:01
- 1,114,112 70% 529.96kB/s 0:00:00
- 1,581,185 100% 542.18kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--f6b7fc900cd45830afe01711e369d17453a997dd
-
- 0 0% 0.00kB/s 0:00:00
- 557,056 35% 538.61kB/s 0:00:01
- 1,114,112 70% 535.17kB/s 0:00:00
- 1,573,373 100% 547.97kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--d7a0413362aff13ce23c76d05d684df1fa884635
-
- 0 0% 0.00kB/s 0:00:00
- 524,288 30% 504.93kB/s 0:00:02
- 950,272 55% 397.94kB/s 0:00:01
- 1,699,965 100% 524.36kB/s 0:00:03 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--f98f1613a3b8f160ea4029eb9fa3c45f9a2a1bc6
-
- 0 0% 0.00kB/s 0:00:00
- 557,056 37% 532.81kB/s 0:00:01
- 1,114,112 75% 525.10kB/s 0:00:00
- 1,478,031 100% 548.19kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--1d35cc37e4a83908a29c0651448a96269458218d
-
- 0 0% 0.00kB/s 0:00:00
- 589,824 39% 558.14kB/s 0:00:01
- 1,146,880 77% 544.75kB/s 0:00:00
- 1,475,738 100% 556.00kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--41779d89d985def50ee52dbb1abaf41cfb248f02
-
- 0 0% 0.00kB/s 0:00:00
- 524,288 77% 509.45kB/s 0:00:00
- 680,795 100% 500.25kB/s 0:00:01 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--0ac2341072949bd0d26df145e3cef8d39ba177ad
-
- 0 0% 0.00kB/s 0:00:00
- 851,968 78% 794.65kB/s 0:00:00
- 1,085,714 100% 758.96kB/s 0:00:01 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--96239a54b31856d30e50eedb2a3352ec87fd6d1e
-
- 0 0% 0.00kB/s 0:00:00
- 557,056 47% 528.16kB/s 0:00:01
- 1,114,112 95% 529.96kB/s 0:00:00
- 1,166,134 100% 549.88kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--e40a7caa66fa1656428cbec103645089579065f8
-
- 0 0% 0.00kB/s 0:00:00
- 98,304 7% 95.05kB/s 0:00:13
- 622,592 45% 297.02kB/s 0:00:02
- 753,664 55% 232.91kB/s 0:00:02
- 884,736 64% 204.74kB/s 0:00:02
- 1,310,720 95% 280.97kB/s 0:00:00
- 1,369,673 100% 251.94kB/s 0:00:05 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--4907edd5704e1a3540e946cfc80b29226599e466
-
- 0 0% 0.00kB/s 0:00:00
- 327,680 25% 310.98kB/s 0:00:03
- 688,128 52% 328.77kB/s 0:00:01
- 1,114,112 85% 350.74kB/s 0:00:00
- 1,303,313 100% 369.78kB/s 0:00:03 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--2a0a0f546f08334d8cd90f2930057837dcf5ba09
-
- 0 0% 0.00kB/s 0:00:00
- 491,520 39% 475.25kB/s 0:00:01
- 917,504 73% 438.57kB/s 0:00:00
- 1,146,880 92% 359.67kB/s 0:00:00
- 1,246,084 100% 344.82kB/s 0:00:03 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--9eb761916db3868a5ffe7b310ae5ac3cc7046ae5
-
- 0 0% 0.00kB/s 0:00:00
- 557,056 44% 517.60kB/s 0:00:01
- 786,432 62% 329.05kB/s 0:00:01
- 1,254,828 100% 515.31kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--e644608fd731b8eaf6d5d04e78e165300eb25f98
-
- 0 0% 0.00kB/s 0:00:00
- 589,824 52% 561.40kB/s 0:00:00
- 1,048,576 93% 503.19kB/s 0:00:00
- 1,116,566 100% 522.47kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--58e2af2853f65840a6e16eb7c03d005ed2e79c40
-
- 0 0% 0.00kB/s 0:00:00
- 557,056 42% 530.21kB/s 0:00:01
- 1,114,112 85% 531.25kB/s 0:00:00
- 1,300,115 100% 546.79kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--c5c714419a2d7c0f4699f31862e7011a15014482
-
- 0 0% 0.00kB/s 0:00:00
- 589,824 38% 547.53kB/s 0:00:01
- 1,146,880 75% 538.46kB/s 0:00:00
- 1,521,103 100% 550.17kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--15df191feeb70009d1babbf45edfd895c7ed16fe
-
- 0 0% 0.00kB/s 0:00:00
- 557,056 43% 541.29kB/s 0:00:01
- 1,114,112 87% 536.22kB/s 0:00:00
- 1,277,262 100% 550.70kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--da82fe427bcc275851fcff2406702bdf711a0d05
-
- 0 0% 0.00kB/s 0:00:00
- 557,056 39% 539.68kB/s 0:00:01
- 1,114,112 79% 535.43kB/s 0:00:00
- 1,394,802 100% 546.16kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--d4a3cd0a0cdfb63e0c822c2971bec47351f0d691
-
- 0 0% 0.00kB/s 0:00:00
- 557,056 43% 542.37kB/s 0:00:01
- 1,114,112 86% 535.17kB/s 0:00:00
- 1,284,784 100% 550.05kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--b97860268c7d4811de5d0529fcb6964e72404e77
-
- 0 0% 0.00kB/s 0:00:00
- 40,966 100% 13.02MB/s 0:00:00 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--a8b3e383f310580bb6c1035144763ec7db044f78
-
- 0 0% 0.00kB/s 0:00:00
- 557,056 75% 538.08kB/s 0:00:00
- 733,303 100% 564.76kB/s 0:00:01 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--29011935e74ac079fcb329a43739baeaa17d098c
-
- 0 0% 0.00kB/s 0:00:00
- 89,335 100% 1.11MB/s 0:00:00 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--fd6e992885ee3c8305d01166eecf3c464627c4f7
-
- 0 0% 0.00kB/s 0:00:00
- 41,462 100% 13.18MB/s 0:00:00 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--a2069f368ff8402a2cb1418bd4b9732af7c4d4a9
-
- 0 0% 0.00kB/s 0:00:00
- 170,729 100% 706.47kB/s 0:00:00 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--6792222db461942b05679e53db4e54fa789ca01f
-
- 0 0% 0.00kB/s 0:00:00
- 592 100% 578.13kB/s 0:00:00 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--d18187ee562acebfc027ae87ca256ee76291ebc9
-
- 0 0% 0.00kB/s 0:00:00
- 92,078 100% 1.16MB/s 0:00:00 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--099750d6c62696356befb2d9f0c6eced87d44982
-
- 0 0% 0.00kB/s 0:00:00
- 17,889 100% 17.06MB/s 0:00:00 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--5bfba3f4483f32f614082626cb19c9a80dcef47f
-
- 0 0% 0.00kB/s 0:00:00
- 557,056 34% 542.37kB/s 0:00:01
- 1,114,112 68% 529.44kB/s 0:00:00
- 1,572,864 96% 493.89kB/s 0:00:00
- 1,636,134 100% 511.29kB/s 0:00:03 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--c63f95ff9e5e7162324f198763d82135a782a672
-
- 0 0% 0.00kB/s 0:00:00
- 11,074 100% 10.56MB/s 0:00:00 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--d5355ccf4f2f48a8adf698d00416569996408c99
-
- 0 0% 0.00kB/s 0:00:00
- 17,389 100% 16.58MB/s 0:00:00 (xfr#1, to-chk=0/1)
- gpg: encrypted with unknown algorithm 3
- gpg: decryption failed: secret key not available
-
- GPGHMACSHA1--cd50fc92525ee650189b89373a4791be4c7ffa24
-
- 0 0% 0.00kB/s 0:00:00
- 131,072 0% 91.30kB/s 0:06:06
- 294,912 0% 110.85kB/s 0:05:00
- 491,520 1% 133.37kB/s 0:04:08
- 819,200 2% 173.24kB/s 0:03:09
- 1,343,488 3% 277.48kB/s 0:01:56
- 1,900,544 5% 383.00kB/s 0:01:22
- 2,359,296 7% 438.88kB/s 0:01:11
- 2,785,280 8% 456.82kB/s 0:01:07
- 3,244,032 9% 390.90kB/s 0:01:17
- 3,637,248 10% 356.83kB/s 0:01:24
- 4,259,840 12% 388.28kB/s 0:01:15
- 4,718,592 14% 395.97kB/s 0:01:13
- 5,046,272 15% 385.54kB/s 0:01:14
- 5,210,112 15% 326.18kB/s 0:01:27
- 6,094,848 18% 385.21kB/s 0:01:11
- 6,488,064 19% 372.65kB/s 0:01:12 [2013-07-06 13:16:29 EST] XMPPReceivePack: Syncing with ch
-
- 6,914,048 20% 403.45kB/s 0:01:06
- 7,143,424 21% 409.28kB/s 0:01:04
- 7,667,712 22% 334.06kB/s 0:01:17
- 8,126,464 24% 347.75kB/s 0:01:13
- 8,683,520 25% 398.80kB/s 0:01:02
- 9,240,576 27% 500.86kB/s 0:00:48
- 9,797,632 29% 507.32kB/s 0:00:46
- 10,256,384 30% 511.31kB/s 0:00:45
- 10,682,368 31% 479.25kB/s 0:00:47
- 11,206,656 33% 471.63kB/s 0:00:47
- 11,763,712 34% 471.86kB/s 0:00:46
- 12,320,768 36% 494.24kB/s 0:00:43
- 12,615,680 37% 460.15kB/s 0:00:45
- 13,434,880 39% 526.37kB/s 0:00:38
- 13,991,936 41% 527.39kB/s 0:00:37
- 14,548,992 43% 527.77kB/s 0:00:36
- 14,843,904 44% 528.54kB/s 0:00:35
- 15,663,104 46% 528.54kB/s 0:00:33
- 16,220,160 48% 528.54kB/s 0:00:32
- 16,777,216 49% 527.90kB/s 0:00:31
- 17,334,272 51% 592.02kB/s 0:00:27
- 17,891,328 53% 533.33kB/s 0:00:29
- 18,448,384 54% 533.20kB/s 0:00:28
- 19,005,440 56% 533.73kB/s 0:00:27
- 19,562,496 58% 533.46kB/s 0:00:26
- 20,119,552 59% 533.20kB/s 0:00:25
- 20,414,464 60% 467.95kB/s 0:00:28
- 21,233,664 63% 528.28kB/s 0:00:23
- 21,790,720 64% 528.67kB/s 0:00:22
- 22,347,776 66% 528.67kB/s 0:00:21
- 22,740,992 67% 492.20kB/s 0:00:22
- 23,494,656 69% 477.61kB/s 0:00:21
- 24,051,712 71% 477.41kB/s 0:00:20
- 24,608,768 73% 477.30kB/s 0:00:18
- 25,165,824 74% 577.28kB/s 0:00:14
- 25,722,880 76% 532.81kB/s 0:00:14
- 26,279,936 78% 533.20kB/s 0:00:13
- 26,804,224 79% 522.80kB/s 0:00:13
-
-"""]]
diff --git a/doc/bugs/gpg_error_on_android/comment_2_9ce5511a109bde50d8cf87bad0268b4a._comment b/doc/bugs/gpg_error_on_android/comment_2_9ce5511a109bde50d8cf87bad0268b4a._comment
deleted file mode 100644
index f1cd47296..000000000
--- a/doc/bugs/gpg_error_on_android/comment_2_9ce5511a109bde50d8cf87bad0268b4a._comment
+++ /dev/null
@@ -1,26 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.235"
- subject="comment 2"
- date="2013-07-08T19:57:10Z"
- content="""
-Based on <http://pthree.org/2009/06/08/gnupg-up-and-close/> and <http://www.faqs.org/rfcs/rfc4880.html>, symmetric encryption algorithm 3 is CAST5.
-
-When I run `gpg -v --version` on Android, I get a very short list of Cipher algorithms, just \"3DES (S2)\".
-
-Compare with on Linux, where it supports:
-
-<pre>
-Cipher: 3DES (S2), CAST5 (S3), BLOWFISH (S4), AES (S7), AES192 (S8),
- AES256 (S9), TWOFISH (S10), CAMELLIA128 (S11), CAMELLIA192 (S12),
- CAMELLIA256 (S13)
-</pre>
-
-I suspect that you guys have a gpg on your non-android side that either defaults to CAST5, or has been configured, via the default-preference-list setting in gpg.conf, to use it. It should be possible to adjust your gpg.conf to use 3DES by default, and then things will interoperate (anything already encrypted by git-annex still won't be visible on Android of course).
-
-The gpg shipped with git-annex on Android could be rebuilt to include these. However, it would probably need porting of more libraries to Android. I stopped once I got gpg to compile at all, and had to pass several configure flags to disable features,
-
-This is something that anyone interested could work on. (Ie, no Haskell!) See `standalone/android/Makefile` in the git-annex source tree, which uses the Android SDK and NDK to cross-compile gnupg for Android.
-
-I think that getting it to build without `--enable-minimal` would probably get most of the way there. Aha.. I just tried this, and the new binary seems to support nearly everything the linux one does, no extra libraries needed!
-"""]]
diff --git a/doc/bugs/gpg_error_on_android/comment_3_b345e80f38d38f82cfcfce3102138fb8._comment b/doc/bugs/gpg_error_on_android/comment_3_b345e80f38d38f82cfcfce3102138fb8._comment
deleted file mode 100644
index 14cd6070c..000000000
--- a/doc/bugs/gpg_error_on_android/comment_3_b345e80f38d38f82cfcfce3102138fb8._comment
+++ /dev/null
@@ -1,46 +0,0 @@
-[[!comment format=mdwn
- username="carlo"
- ip="118.208.1.126"
- subject="comment 3"
- date="2013-07-09T00:34:45Z"
- content="""
-I downloaded the daily build and the errors \"gpg: encrypted with
-unknown algorithm 3\" and \"gpg: decryption failed: secret key not
-available\" have gone, but now there is the problem \"gpg: decryption
-failed: bad key\". Logs are below.
-
-I'm in the process of setting up an Android build environment so I
-can debug this in more detail (I haven't done any Android development
-before but I do have Haskell experience).
-
- [2013-07-09 10:21:22 EST] main: starting assistant version 4.20130708-g207c9f3
- Already up-to-date.
-
- (scanning...) [2013-07-09 10:21:23 EST] Watcher: Performing startup scan
- Already up-to-date.
- Already up-to-date.
- (gpg)
-
- (started...) [2013-07-09 10:21:28 EST] XMPPSendPack: Syncing with carlo.hamalainen
-
- GPGHMACSHA1--15b3dbca166df23b9b14e88bcfb08dceeeeaade9
- 1,116,373 100% 421.09kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: decryption failed: bad key
-
- GPGHMACSHA1--ec1cbd34a82fe0997354669b2c7b38419f73d07e
- 1,095,420 100% 236.15kB/s 0:00:04 (xfr#1, to-chk=0/1)
- gpg: decryption failed: bad key
-
- GPGHMACSHA1--b979ec76f3b12b63db8ee540fc9a018cffb82aa8
- 1,154,143 100% 412.85kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: decryption failed: bad key
-
- GPGHMACSHA1--836e8cdf7c23d119e08f9d9cb3377abb438f2312
- 1,154,559 100% 411.95kB/s 0:00:02 (xfr#1, to-chk=0/1)
- gpg: decryption failed: bad key
-
- GPGHMACSHA1--c34a27463185c59e8cb7df7f647333072e18ddb9
- 1,772,175 100% 401.63kB/s 0:00:04 (xfr#1, to-chk=0/1)
- gpg: decryption failed: bad key
-
-"""]]
diff --git a/doc/bugs/gpg_error_on_android/comment_4_032f42235b7f26854e725041ca33384b._comment b/doc/bugs/gpg_error_on_android/comment_4_032f42235b7f26854e725041ca33384b._comment
deleted file mode 100644
index 5fdfa8211..000000000
--- a/doc/bugs/gpg_error_on_android/comment_4_032f42235b7f26854e725041ca33384b._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.235"
- subject="comment 4"
- date="2013-07-09T18:03:12Z"
- content="""
-So, I am able to get the \"bad\" key message out of gpg if I encrypt with --symmetric with a passphrase and then enter the wrong passphrase when decrypting.
-
-Perhaps git-annex is sending gpg the wrong encryption key, or perhaps the git repo it's operating in has an old version of the key for this remote somehow?
-"""]]
diff --git a/doc/bugs/gpg_fails_on_Mac_OS_10.9_when_creating_a_new_remote_repository_via_assistant.mdwn b/doc/bugs/gpg_fails_on_Mac_OS_10.9_when_creating_a_new_remote_repository_via_assistant.mdwn
deleted file mode 100644
index 1a0680c79..000000000
--- a/doc/bugs/gpg_fails_on_Mac_OS_10.9_when_creating_a_new_remote_repository_via_assistant.mdwn
+++ /dev/null
@@ -1,55 +0,0 @@
-### Please describe the problem.
-
-When I use the web app and try to create a remote on a remote server (via ssh connection) the assistant shows a gpg error.
-
-### What steps will reproduce the problem?
-
-1. Start the the web app using git-annex web app
-2. create a local repository
-3. create a new repository on a Remote server (Set up a repository on a remote server using ssh).
-4. provide correct server address, user, port, etc.
-
-Then gpg fails.
-
-### What version of git-annex are you using? On what operating system?
-
-git-annex version: 4.20131106
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
-remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
-local repository version: unknown
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-
-On Mac OS X 10.9 Mavericks, build 13A603.
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-[2013-11-14 21:03:47 CET] main: starting assistant version 4.20131106
-[2013-11-14 21:03:47 CET] Cronner: You should enable consistency checking to protect your data.
-(Recording state in git...)
-(scanning...) [2013-11-14 21:03:47 CET] Watcher: Performing startup scan
-(started...) [2013-11-14 21:04:47 CET] Cronner: Consistency check in progress
-[2013-11-14 21:05:21 CET] Committer: Adding sunflower.html test.html cindy.css d3.js d3.min.js Accessors.js Essentials.js List.js Namespace.js and 6 other files
-
-(Recording state in git...)
-
-add /Users/ulli/Documents/annex/test.html (checksum...) ok
-### several similar adds removed for privacy reasons.
-
-[2013-11-14 21:05:22 CET] Committer: Committing changes to git
-ok
-(Recording state in git...)
-(Recording state in git...)
-14/Nov/2013:21:21:05 +0100 [Error#yesod-core] user error (gpg ["--quiet","--trust-model","always","--with-colons","--list-secret-keys","--fixed-list-mode"] exited 127) @(yesod-core-1.2.5:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)
-
-# End of transcript or log.
-"""]]
-
-> I've had reports from others that gpg works when installing from the
-> bundle. [[done]] --[[Joey]]
diff --git a/doc/bugs/gpg_fails_on_Mac_OS_10.9_when_creating_a_new_remote_repository_via_assistant/comment_1_7b409701c650b55b3472accd70555f16._comment b/doc/bugs/gpg_fails_on_Mac_OS_10.9_when_creating_a_new_remote_repository_via_assistant/comment_1_7b409701c650b55b3472accd70555f16._comment
deleted file mode 100644
index 7b1ed7420..000000000
--- a/doc/bugs/gpg_fails_on_Mac_OS_10.9_when_creating_a_new_remote_repository_via_assistant/comment_1_7b409701c650b55b3472accd70555f16._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmkXtBdMgE1d9nCz2iBc4f85xh4izZ_auU"
- nickname="Ulrich"
- subject="Easy to fix."
- date="2013-11-14T20:36:17Z"
- content="""
-Well, this only happens when gpg is not available. Everything works fine after a quick \"brew install gpg\".
-"""]]
diff --git a/doc/bugs/gpg_fails_on_Mac_OS_10.9_when_creating_a_new_remote_repository_via_assistant/comment_2_40b00f7258512677516ec5036b89090f._comment b/doc/bugs/gpg_fails_on_Mac_OS_10.9_when_creating_a_new_remote_repository_via_assistant/comment_2_40b00f7258512677516ec5036b89090f._comment
deleted file mode 100644
index ecc9717d2..000000000
--- a/doc/bugs/gpg_fails_on_Mac_OS_10.9_when_creating_a_new_remote_repository_via_assistant/comment_2_40b00f7258512677516ec5036b89090f._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.246"
- subject="comment 2"
- date="2013-11-14T22:10:32Z"
- content="""
-gpg is included in the bundle though:
-
-<pre>
-oberon:tmp joeyh$ /Volumes/git-annex/git-annex.app/Contents/MacOS/runshell
-bash-3.2$ which gpg
-/Volumes/git-annex/git-annex.app/Contents/MacOS/bundle/gpg
-</pre>
-"""]]
diff --git a/doc/bugs/gpg_hangs_on_glacier_remote_creation.mdwn b/doc/bugs/gpg_hangs_on_glacier_remote_creation.mdwn
deleted file mode 100644
index b4aaa57ea..000000000
--- a/doc/bugs/gpg_hangs_on_glacier_remote_creation.mdwn
+++ /dev/null
@@ -1,78 +0,0 @@
-### Please describe the problem.
-when attempting to create a glacier special remote one of the gpg sub-commands hangs without returning.
-
-### What steps will reproduce the problem?
-I'm not sure what will reproduce this issue. I recently upgraded from the apt-get version of git-annex (version 3) to the cabal version (version 4 shown below), but I'm not sure if that is relevant at all).
-
-### What version of git-annex are you using? On what operating system?
-
-git version: 1.7.9.5
-
-(git annex was installed using cabal)
-[[!format sh """
-$> git-annex version
-git-annex version: 4.20130709
-build flags: Testsuite S3 Inotify DBus
-local repository version: 3
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-"""]]
-
-OS version:
-
-12.04.2 LTS, Precise Pangolin
-
-GPG version:
-
-[[!format sh """
-$> gpg --version
-gpg (GnuPG) 1.4.11
-Copyright (C) 2010 Free Software Foundation, Inc.
-License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
-This is free software: you are free to change and redistribute it.
-There is NO WARRANTY, to the extent permitted by law.
-
-Home: ~/.gnupg
-Supported algorithms:
-Pubkey: RSA, RSA-E, RSA-S, ELG-E, DSA
-Cipher: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128,
- CAMELLIA192, CAMELLIA256
-Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
-Compression: Uncompressed, ZIP, ZLIB, BZIP2
-"""]]
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-$> git annex initremote glacier type=glacier encryption=annex-l1@ggg.local embedcreds=yes vault=some-vault-name --verbose --debug
-[2013-07-20 22:45:13 MDT] read: git ["--git-dir=/home/cantora/annex-l1/.git","--work-tree=/home/cantora/annex-l1","show-ref","git-annex"]
-[2013-07-20 22:45:13 MDT] read: git ["--git-dir=/home/cantora/annex-l1/.git","--work-tree=/home/cantora/annex-l1","show-ref","--hash","refs/heads/git-annex"]
-[2013-07-20 22:45:13 MDT] read: git ["--git-dir=/home/cantora/annex-l1/.git","--work-tree=/home/cantora/annex-l1","log","refs/heads/git-annex..181aa86dfd264557ab73285220d70c67f868b349","--oneline","-n1"]
-[2013-07-20 22:45:13 MDT] read: git ["--git-dir=/home/cantora/annex-l1/.git","--work-tree=/home/cantora/annex-l1","log","refs/heads/git-annex..1dc6e1c4bca2102fc25e86491ab89338750ee1f6","--oneline","-n1"]
-[2013-07-20 22:45:13 MDT] read: git ["--git-dir=/home/cantora/annex-l1/.git","--work-tree=/home/cantora/annex-l1","log","refs/heads/git-annex..b919b83cafeff420d23af24ff7de35b4ff955c8c","--oneline","-n1"]
-[2013-07-20 22:45:13 MDT] chat: git ["--git-dir=/home/cantora/annex-l1/.git","--work-tree=/home/cantora/annex-l1","cat-file","--batch"]
-[2013-07-20 22:45:13 MDT] read: git ["config","--null","--list"]
-initremote glacier (encryption setup) [2013-07-20 22:45:13 MDT] read: gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--with-colons","--list-public-keys","annex-l1@ggg.local"]
-[2013-07-20 22:45:13 MDT] read: gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--gen-random","--armor","2","512"]
-[2013-07-20 22:47:37 MDT] chat: gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--encrypt","--no-encrypt-to","--no-default-recipient","--recipient","DF31708872834ABA"]
-(with gpg key DF31708872834ABA) [2013-07-20 22:47:37 MDT] call: glacier ["--region=us-east-1","vault","create","some-vault-name"]
-[2013-07-20 22:47:38 MDT] call: git ["--git-dir=/home/cantora/annex-l1/.git","--work-tree=/home/cantora/annex-l1","config","remote.glacier.annex-glacier","true"]
-[2013-07-20 22:47:38 MDT] call: git ["--git-dir=/home/cantora/annex-l1/.git","--work-tree=/home/cantora/annex-l1","config","remote.glacier.annex-uuid","a9739087-7860-4ed0-bc38-0b6031b1afd3"]
-(gpg) [2013-07-20 22:47:38 MDT] chat: gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--decrypt"]
-[2013-07-20 22:47:38 MDT] chat: gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--batch","--passphrase-fd","3","--symmetric","--force-mdc"]
-#at this point it simply waits forever. not sure what it's waiting for, stdin maybe? maybe fd 3 is empty??
-
-#[on a different terminal]
-$> ps ax | grep gpg | grep -v ssh
- 2024 ? Ss 0:00 /usr/bin/gpg-agent --daemon --sh --write-env-file=/home/cantora/.gnupg/gpg-agent-info-ggg /usr/bin/dbus-launch --exit-with-session gnome-session --session=ubuntu
- 8341 pts/4 SL+ 0:00 gpg --batch --no-tty --use-agent --quiet --trust-model always --batch --passphrase-fd 3 --symmetric --force-mdc
- 8652 pts/5 S+ 0:00 grep --color=auto gpg
-
-# End of transcript or log.
-"""]]
-
-> [[done]]; see comments --[[Joey]]
diff --git a/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_1_41ca74a4e4aaf4f6b012a92677037651._comment b/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_1_41ca74a4e4aaf4f6b012a92677037651._comment
deleted file mode 100644
index 2dae713b0..000000000
--- a/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_1_41ca74a4e4aaf4f6b012a92677037651._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.1.10"
- subject="comment 1"
- date="2013-07-22T21:41:01Z"
- content="""
-I have tried but have not had any luck reproducing this when initializing a glacier remote.
-
-Do you also get this problem if you initialize a special remote of another type, such as the directory special remote, that's encrypted to the same gpg key?
-
-Can you reproduce the hang using the [[/install/Linux_standalone]] tarball?
-
-You should be able to tell which file descriptor gpg is blocking on. Just attach strace to the gpg process, and see what file descriptor it says gpg is reading from (or perhaps writing to). Since git-annex feeds it both a passphrase and data to encrypt, knowing the number of the file descriptor will narrow down the bug's cause.
-"""]]
diff --git a/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_2_dd11fd25c8bb1f2d7e1292c07abf553e._comment b/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_2_dd11fd25c8bb1f2d7e1292c07abf553e._comment
deleted file mode 100644
index 7749bed1e..000000000
--- a/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_2_dd11fd25c8bb1f2d7e1292c07abf553e._comment
+++ /dev/null
@@ -1,591 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkiAsTXFXZbLE8iyy6yDtvz4MPFbzsk3c0"
- nickname="Tony"
- subject="strace of gpg process"
- date="2013-07-24T00:02:22Z"
- content="""
-Hello, here is some trace information on the gpg process, I hope it helps.
-
-the initremote command used:
-[[!format sh \"\"\"
-$> strace -o /tmp/git-annex.trace -e trace=file -e trace=read -f git annex initremote glacier type=glacier encryption=testA@ggg.local embedcreds=yes vault=test-vault --verbose --debug
-[2013-07-23 15:36:06 MDT] read: git [\"--git-dir=/home/cantora/annex-test/.git\",\"--work-tree=/home/cantora/annex-test\",\"show-ref\",\"git-annex\"]
-[2013-07-23 15:36:06 MDT] read: git [\"--git-dir=/home/cantora/annex-test/.git\",\"--work-tree=/home/cantora/annex-test\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
-[2013-07-23 15:36:06 MDT] read: git [\"--git-dir=/home/cantora/annex-test/.git\",\"--work-tree=/home/cantora/annex-test\",\"log\",\"refs/heads/git-annex..55754a54c5777336d594af0a173805d150deb828\",\"--oneline\",\"-n1\"]
-[2013-07-23 15:36:06 MDT] chat: git [\"--git-dir=/home/cantora/annex-test/.git\",\"--work-tree=/home/cantora/annex-test\",\"cat-file\",\"--batch\"]
-initremote glacier (encryption setup) [2013-07-23 15:36:07 MDT] read: gpg [\"--batch\",\"--no-tty\",\"--use-agent\",\"--quiet\",\"--trust-model\",\"always\",\"--with-colons\",\"--list-public-keys\",\"testA@ggg.local\"]
-[2013-07-23 15:36:07 MDT] read: gpg [\"--batch\",\"--no-tty\",\"--use-agent\",\"--quiet\",\"--trust-model\",\"always\",\"--gen-random\",\"--armor\",\"2\",\"512\"]
-[2013-07-23 15:39:12 MDT] chat: gpg [\"--batch\",\"--no-tty\",\"--use-agent\",\"--quiet\",\"--trust-model\",\"always\",\"--encrypt\",\"--no-encrypt-to\",\"--no-default-recipient\",\"--recipient\",\"05E4CF57CBCAD77C\"]
-(with gpg key 05E4CF57CBCAD77C) [2013-07-23 15:39:12 MDT] call: glacier [\"--region=us-east-1\",\"vault\",\"create\",\"test-vault\"]
-[2013-07-23 15:39:14 MDT] call: git [\"--git-dir=/home/cantora/annex-test/.git\",\"--work-tree=/home/cantora/annex-test\",\"config\",\"remote.glacier.annex-glacier\",\"true\"]
-[2013-07-23 15:39:14 MDT] call: git [\"--git-dir=/home/cantora/annex-test/.git\",\"--work-tree=/home/cantora/annex-test\",\"config\",\"remote.glacier.annex-uuid\",\"397411b1-30be-4bdc-b3dd-6ab0d8f8ae8b\"]
-(gpg) [2013-07-23 15:39:14 MDT] chat: gpg [\"--batch\",\"--no-tty\",\"--use-agent\",\"--quiet\",\"--trust-model\",\"always\",\"--decrypt\"]
-[2013-07-23 15:39:14 MDT] chat: gpg [\"--batch\",\"--no-tty\",\"--use-agent\",\"--quiet\",\"--trust-model\",\"always\",\"--batch\",\"--passphrase-fd\",\"3\",\"--symmetric\",\"--force-mdc\"]
-^C
-gpg: Interrupt caught ... exiting
-\"\"\"]]
-
-the hanging gpg process:
-[[!format sh \"\"\"
-$> ps ax | grep gpg | grep -v ssh
- 2017 ? Ss 0:02 /usr/bin/gpg-agent --daemon --sh --write-env-file=/home/cantora/.gnupg/gpg-agent-info-ggg /usr/bin/dbus-launch --exit-with-session gnome-session --session=ubuntu
- 8268 pts/3 SL+ 0:00 gpg --batch --no-tty --use-agent --quiet --trust-model always --batch --passphrase-fd 3 --symmetric --force-mdc
- 8357 pts/4 S+ 0:00 grep --color=auto gpg
-\"\"\"]]
-
-and the content of the trace (only the end where the gpg process is created):
-
-[[!format txt \"\"\"
-[...]
-8265 read(5, \"[core]\n\trepositoryformatversion \"..., 4096) = 199
-8265 read(5, \"\", 4096) = 0
-8245 --- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
-8245 --- SIGCHLD (Child exited) @ 0 (0) ---
-8245 --- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
-8245 --- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
-8266 read(3, \"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\2209\0\0\0\0\0\0\"..., 832) = 832
-8266 read(3, \"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P \0\0\0\0\0\0\"..., 832) = 832
-8266 read(3, \"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\26\0\0\0\0\0\0\"..., 832) = 832
-8266 read(3, \"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\\"\1\0\0\0\0\0\"..., 832) = 832
-8266 read(3, \"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\r\0\0\0\0\0\0\"..., 832) = 832
-8266 read(3, \"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\25\0\0\0\0\0\0\"..., 832) = 832
-8266 read(3, \"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\30\2\0\0\0\0\0\"..., 832) = 832
-8245 --- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
-8266 read(3, \"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\301\0\0\0\0\0\0\"..., 832) = 832
-8266 read(3, \"# Options for GnuPG\n# Copyright \"..., 4096) = 4096
-8266 read(3, \"ost servers (with the notable ex\"..., 4096) = 4096
-8266 read(3, \"t during gpg-agent startup.\n# In\"..., 4096) = 1206
-8266 read(3, \"\", 4096) = 0
-8266 read(3, \"\225\7>\4Q\340r!\1\20\0\313B\370D\25\275g\317\270\3>\356\243H\230w\303\252\303\2712\"..., 4096) = 4096
-8266 read(3, \"\231\2\r\4M\370\317\334\1\20\0\223\337X\257\366/\t\307\376\214\207,\26\233+R\31j#K\266\"..., 4096) = 4096
-8266 read(0, <unfinished ...>
-8245 --- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
-8245 --- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
-8266 <... read resumed> \"\205\1\f\3Xp+\246\227\277\336\3\1\7\376 B3K\224\352T\373$\30\246\f?h\272\266\21\"..., 8192) = 889
-8266 read(3, <unfinished ...>
-8245 read(7, <unfinished ...>
-8266 <... read resumed> \"\225\7>\4Q\340r!\1\20\0\313B\370D\25\275g\317\270\3>\356\243H\230w\303\252\303\2712\"..., 8192) = 8192
-8245 <... read resumed> 0x7fbc17ead010, 8096) = -1 EAGAIN (Resource temporarily unavailable)
-8266 read(3, \": \351R\326\342Y\325Sk\3~\31X\252d\24\357{+\17\237m\35\273\201\250T\10\200n\226\"..., 8192) = 4129
-8266 read(3, \"\225\7>\4Q\340r!\1\20\0\313B\370D\25\275g\317\270\3>\356\243H\230w\303\252\303\2712\"..., 8192) = 8192
-8245 --- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
-8266 read(3, \": \351R\326\342Y\325Sk\3~\31X\252d\24\357{+\17\237m\35\273\201\250T\10\200n\226\"..., 8192) = 4129
-8266 read(4, \"\225\3\276\4Q\354\214U\1\10\0\351 NjDf\31\305\16~$\272i#\321\325\10\276\307\273{\"..., 8192) = 2560
-8266 read(4, \"\", 8192) = 0
-8266 read(5, \"\231\2\r\4M\370\317\334\1\20\0\223\337X\257\366/\t\307\376\214\207,\26\233+R\31j#K\266\"..., 8192) = 7836
-8266 read(6, \"\231\1\r\4Q\354\214U\1\10\0\351 NjDf\31\305\16~$\272i#\321\325\10\276\307\273{\"..., 8192) = 1182
-8266 read(6, \"\", 8192) = 0
-8266 read(5, \"\231\2\r\4M\370\317\334\1\20\0\223\337X\257\366/\t\307\376\214\207,\26\233+R\31j#K\266\"..., 8192) = 7836
-8266 read(6, \"\231\1\r\4Q\354\214U\1\10\0\351 NjDf\31\305\16~$\272i#\321\325\10\276\307\273{\"..., 8192) = 1182
-8266 read(6, \"\", 8192) = 0
-8266 read(7, \"OK your orders please\n\", 1002) = 22
-8266 read(7, \"OK \n\", 1002) = 4
-8266 read(7, \"OK \n\", 1002) = 4
-8266 read(7, \"OK \n\", 1002) = 4
-8266 read(7, \"OK \n\", 1002) = 4
-8266 read(7, \"OK \n\", 1002) = 4
-8266 read(8, \"# Locale name alias data base.\n#\"..., 4096) = 2570
-8266 read(8, \"\", 4096) = 0
-8266 read(8, \"TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0\0\0\4\0\0\0\0\"..., 4096) = 2427
-8266 read(8, \"TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\5\0\0\0\0\"..., 4096) = 1550
-8245 --- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
-8266 read(7, \"OK 616e746f7831616e746f78\n\", 1002) = 26
-8245 --- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
-8245 --- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
-8245 --- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
-8266 read(6, \"\231\2\r\4M\370\317\334\1\20\0\223\337X\257\366/\t\307\376\214\207,\26\233+R\31j#K\266\"..., 8192) = 7836
-8266 read(5, \"\231\1\r\4Q\354\214U\1\10\0\351 NjDf\31\305\16~$\272i#\321\325\10\276\307\273{\"..., 8192) = 1182
-8266 read(5, \"\", 8192) = 0
-8266 read(0, \"\", 8192) = 0
-8245 read(7, \"hssHvXB6YTHPFmwu0uliVVZlm+olG/Do\"..., 8096) = 685
-8245 read(7, 0x7fbc17ead010, 8096) = -1 EAGAIN (Resource temporarily unavailable)
-8245 --- SIGCHLD (Child exited) @ 0 (0) ---
-8245 read(7, \"\", 8096) = 0
-8245 --- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
-8245 --- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
-8245 --- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
-8268 read(4, \"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\2209\0\0\0\0\0\0\"..., 832) = 832
-8268 read(4, \"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P \0\0\0\0\0\0\"..., 832) = 832
-8268 read(4, \"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\26\0\0\0\0\0\0\"..., 832) = 832
-8268 read(4, \"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\\"\1\0\0\0\0\0\"..., 832) = 832
-8268 read(4, \"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\r\0\0\0\0\0\0\"..., 832) = 832
-8268 read(4, \"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\25\0\0\0\0\0\0\"..., 832) = 832
-8268 read(4, \"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\30\2\0\0\0\0\0\"..., 832) = 832
-8268 read(4, \"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\301\0\0\0\0\0\0\"..., 832) = 832
-8268 read(4, \"# Options for GnuPG\n# Copyright \"..., 4096) = 4096
-8268 read(4, \"ost servers (with the notable ex\"..., 4096) = 4096
-8268 read(4, \"t during gpg-agent startup.\n# In\"..., 4096) = 1206
-8268 read(4, \"\", 4096) = 0
-8268 read(4, \"\231\2\r\4M\370\317\334\1\20\0\223\337X\257\366/\t\307\376\214\207,\26\233+R\31j#K\266\"..., 4096) = 4096
-8268 read(3, \"0\", 1) = 1
-8268 read(3, \"5\", 1) = 1
-8268 read(3, \"B\", 1) = 1
-8268 read(3, \"5\", 1) = 1
-8268 read(3, \"7\", 1) = 1
-8268 read(3, \"u\", 1) = 1
-8268 read(3, \"N\", 1) = 1
-8268 read(3, \"X\", 1) = 1
-8268 read(3, \"N\", 1) = 1
-8268 read(3, \"X\", 1) = 1
-8268 read(3, \"u\", 1) = 1
-8268 read(3, \"R\", 1) = 1
-8268 read(3, \"D\", 1) = 1
-8268 read(3, \"n\", 1) = 1
-8268 read(3, \"f\", 1) = 1
-8268 read(3, \"T\", 1) = 1
-8268 read(3, \"h\", 1) = 1
-8268 read(3, \"d\", 1) = 1
-8268 read(3, \"Q\", 1) = 1
-8268 read(3, \"t\", 1) = 1
-8268 read(3, \"k\", 1) = 1
-8268 read(3, \"1\", 1) = 1
-8268 read(3, \"6\", 1) = 1
-8268 read(3, \"F\", 1) = 1
-8268 read(3, \"7\", 1) = 1
-8268 read(3, \"K\", 1) = 1
-8268 read(3, \"/\", 1) = 1
-8268 read(3, \"o\", 1) = 1
-8268 read(3, \"v\", 1) = 1
-8268 read(3, \"A\", 1) = 1
-8268 read(3, \"8\", 1) = 1
-8268 read(3, \"8\", 1) = 1
-8268 read(3, \"5\", 1) = 1
-8268 read(3, \"Y\", 1) = 1
-8268 read(3, \"6\", 1) = 1
-8268 read(3, \"u\", 1) = 1
-8268 read(3, \"R\", 1) = 1
-8268 read(3, \"V\", 1) = 1
-8268 read(3, \"k\", 1) = 1
-8268 read(3, \"M\", 1) = 1
-8268 read(3, \"n\", 1) = 1
-8268 read(3, \"a\", 1) = 1
-8268 read(3, \"f\", 1) = 1
-8268 read(3, \"u\", 1) = 1
-8268 read(3, \"Q\", 1) = 1
-8268 read(3, \"o\", 1) = 1
-8268 read(3, \"9\", 1) = 1
-8268 read(3, \"E\", 1) = 1
-8268 read(3, \"u\", 1) = 1
-8268 read(3, \"9\", 1) = 1
-8268 read(3, \"N\", 1) = 1
-8268 read(3, \"l\", 1) = 1
-8268 read(3, \"q\", 1) = 1
-8268 read(3, \"+\", 1) = 1
-8268 read(3, \"f\", 1) = 1
-8268 read(3, \"3\", 1) = 1
-8268 read(3, \"3\", 1) = 1
-8268 read(3, \"v\", 1) = 1
-8268 read(3, \"t\", 1) = 1
-8268 read(3, \"K\", 1) = 1
-8268 read(3, \"c\", 1) = 1
-8268 read(3, \"b\", 1) = 1
-8268 read(3, \"a\", 1) = 1
-8268 read(3, \"8\", 1) = 1
-8268 read(3, \"q\", 1) = 1
-8268 read(3, \"4\", 1) = 1
-8268 read(3, \"N\", 1) = 1
-8268 read(3, \"y\", 1) = 1
-8268 read(3, \"b\", 1) = 1
-8268 read(3, \"i\", 1) = 1
-8268 read(3, \"k\", 1) = 1
-8268 read(3, \"n\", 1) = 1
-8268 read(3, \"i\", 1) = 1
-8268 read(3, \"A\", 1) = 1
-8268 read(3, \"N\", 1) = 1
-8268 read(3, \"V\", 1) = 1
-8268 read(3, \"L\", 1) = 1
-8268 read(3, \"X\", 1) = 1
-8268 read(3, \"Q\", 1) = 1
-8268 read(3, \"y\", 1) = 1
-8268 read(3, \"L\", 1) = 1
-8268 read(3, \"6\", 1) = 1
-8268 read(3, \"K\", 1) = 1
-8268 read(3, \"C\", 1) = 1
-8268 read(3, \"d\", 1) = 1
-8268 read(3, \"d\", 1) = 1
-8268 read(3, \"C\", 1) = 1
-8268 read(3, \"3\", 1) = 1
-8268 read(3, \"d\", 1) = 1
-8268 read(3, \"0\", 1) = 1
-8268 read(3, \"Q\", 1) = 1
-8268 read(3, \"X\", 1) = 1
-8268 read(3, \"c\", 1) = 1
-8268 read(3, \"T\", 1) = 1
-8268 read(3, \"+\", 1) = 1
-8268 read(3, \"a\", 1) = 1
-8268 read(3, \"u\", 1) = 1
-8268 read(3, \"A\", 1) = 1
-8268 read(3, \"h\", 1) = 1
-8268 read(3, \"G\", 1) = 1
-8268 read(3, \"q\", 1) = 1
-8268 read(3, \"1\", 1) = 1
-8268 read(3, \"v\", 1) = 1
-8268 read(3, \"L\", 1) = 1
-8268 read(3, \"4\", 1) = 1
-8268 read(3, \"o\", 1) = 1
-8268 read(3, \"T\", 1) = 1
-8268 read(3, \"Z\", 1) = 1
-8268 read(3, \"l\", 1) = 1
-8268 read(3, \"5\", 1) = 1
-8268 read(3, \"L\", 1) = 1
-8268 read(3, \"j\", 1) = 1
-8268 read(3, \"W\", 1) = 1
-8268 read(3, \"y\", 1) = 1
-8268 read(3, \"i\", 1) = 1
-8268 read(3, \"l\", 1) = 1
-8268 read(3, \"r\", 1) = 1
-8268 read(3, \"5\", 1) = 1
-8268 read(3, \"m\", 1) = 1
-8268 read(3, \"G\", 1) = 1
-8268 read(3, \"b\", 1) = 1
-8268 read(3, \"0\", 1) = 1
-8268 read(3, \"v\", 1) = 1
-8268 read(3, \"9\", 1) = 1
-8268 read(3, \"U\", 1) = 1
-8268 read(3, \"p\", 1) = 1
-8268 read(3, \"F\", 1) = 1
-8268 read(3, \"R\", 1) = 1
-8268 read(3, \"c\", 1) = 1
-8268 read(3, \"/\", 1) = 1
-8268 read(3, \"+\", 1) = 1
-8268 read(3, \"F\", 1) = 1
-8268 read(3, \"4\", 1) = 1
-8268 read(3, \"g\", 1) = 1
-8268 read(3, \"G\", 1) = 1
-8268 read(3, \"E\", 1) = 1
-8268 read(3, \"D\", 1) = 1
-8268 read(3, \"E\", 1) = 1
-8268 read(3, \"t\", 1) = 1
-8268 read(3, \"B\", 1) = 1
-8268 read(3, \"z\", 1) = 1
-8268 read(3, \"q\", 1) = 1
-8268 read(3, \"a\", 1) = 1
-8268 read(3, \"u\", 1) = 1
-8268 read(3, \"9\", 1) = 1
-8268 read(3, \"S\", 1) = 1
-8268 read(3, \"W\", 1) = 1
-8268 read(3, \"2\", 1) = 1
-8268 read(3, \"r\", 1) = 1
-8268 read(3, \"E\", 1) = 1
-8268 read(3, \"2\", 1) = 1
-8268 read(3, \"d\", 1) = 1
-8268 read(3, \"j\", 1) = 1
-8268 read(3, \"T\", 1) = 1
-8268 read(3, \"D\", 1) = 1
-8268 read(3, \"w\", 1) = 1
-8268 read(3, \"R\", 1) = 1
-8268 read(3, \"1\", 1) = 1
-8268 read(3, \"d\", 1) = 1
-8268 read(3, \"j\", 1) = 1
-8268 read(3, \"D\", 1) = 1
-8268 read(3, \"a\", 1) = 1
-8268 read(3, \"Y\", 1) = 1
-8268 read(3, \"b\", 1) = 1
-8268 read(3, \"f\", 1) = 1
-8268 read(3, \"v\", 1) = 1
-8268 read(3, \"x\", 1) = 1
-8268 read(3, \"g\", 1) = 1
-8268 read(3, \"L\", 1) = 1
-8268 read(3, \"E\", 1) = 1
-8268 read(3, \"V\", 1) = 1
-8268 read(3, \"m\", 1) = 1
-8268 read(3, \"+\", 1) = 1
-8268 read(3, \"U\", 1) = 1
-8268 read(3, \"K\", 1) = 1
-8268 read(3, \"p\", 1) = 1
-8268 read(3, \"e\", 1) = 1
-8268 read(3, \"l\", 1) = 1
-8268 read(3, \"R\", 1) = 1
-8268 read(3, \"4\", 1) = 1
-8268 read(3, \"Y\", 1) = 1
-8268 read(3, \"C\", 1) = 1
-8268 read(3, \"w\", 1) = 1
-8268 read(3, \"o\", 1) = 1
-8268 read(3, \"4\", 1) = 1
-8268 read(3, \"c\", 1) = 1
-8268 read(3, \"C\", 1) = 1
-8268 read(3, \"i\", 1) = 1
-8268 read(3, \"U\", 1) = 1
-8268 read(3, \"q\", 1) = 1
-8268 read(3, \"A\", 1) = 1
-8268 read(3, \"b\", 1) = 1
-8268 read(3, \"K\", 1) = 1
-8268 read(3, \"p\", 1) = 1
-8268 read(3, \"9\", 1) = 1
-8268 read(3, \"T\", 1) = 1
-8268 read(3, \"/\", 1) = 1
-8268 read(3, \"2\", 1) = 1
-8268 read(3, \"R\", 1) = 1
-8268 read(3, \"s\", 1) = 1
-8268 read(3, \"O\", 1) = 1
-8268 read(3, \"P\", 1) = 1
-8268 read(3, \"L\", 1) = 1
-8268 read(3, \"a\", 1) = 1
-8268 read(3, \"e\", 1) = 1
-8268 read(3, \"L\", 1) = 1
-8268 read(3, \"M\", 1) = 1
-8268 read(3, \"N\", 1) = 1
-8268 read(3, \"I\", 1) = 1
-8268 read(3, \"h\", 1) = 1
-8268 read(3, \"T\", 1) = 1
-8268 read(3, \"c\", 1) = 1
-8268 read(3, \"E\", 1) = 1
-8268 read(3, \"w\", 1) = 1
-8268 read(3, \"D\", 1) = 1
-8268 read(3, \"e\", 1) = 1
-8268 read(3, \"O\", 1) = 1
-8268 read(3, \"g\", 1) = 1
-8268 read(3, \"c\", 1) = 1
-8268 read(3, \"M\", 1) = 1
-8268 read(3, \"+\", 1) = 1
-8268 read(3, \"n\", 1) = 1
-8268 read(3, \"U\", 1) = 1
-8268 read(3, \"C\", 1) = 1
-8268 read(3, \"O\", 1) = 1
-8268 read(3, \"H\", 1) = 1
-8268 read(3, \"I\", 1) = 1
-8268 read(3, \"w\", 1) = 1
-8268 read(3, \"h\", 1) = 1
-8268 read(3, \"I\", 1) = 1
-8268 read(3, \"Z\", 1) = 1
-8268 read(3, \"W\", 1) = 1
-8268 read(3, \"c\", 1) = 1
-8268 read(3, \"T\", 1) = 1
-8268 read(3, \"1\", 1) = 1
-8268 read(3, \"n\", 1) = 1
-8268 read(3, \"p\", 1) = 1
-8268 read(3, \"Y\", 1) = 1
-8268 read(3, \"+\", 1) = 1
-8268 read(3, \"U\", 1) = 1
-8268 read(3, \"9\", 1) = 1
-8268 read(3, \"H\", 1) = 1
-8268 read(3, \"N\", 1) = 1
-8268 read(3, \"g\", 1) = 1
-8268 read(3, \"D\", 1) = 1
-8268 read(3, \"G\", 1) = 1
-8268 read(3, \"l\", 1) = 1
-8268 read(3, \"5\", 1) = 1
-8268 read(3, \"B\", 1) = 1
-8268 read(3, \"m\", 1) = 1
-8268 read(3, \"V\", 1) = 1
-8268 read(3, \"w\", 1) = 1
-8268 read(3, \"Q\", 1) = 1
-8268 read(3, \"d\", 1) = 1
-8268 read(3, \"B\", 1) = 1
-8268 read(3, \"r\", 1) = 1
-8268 read(3, \"L\", 1) = 1
-8268 read(3, \"n\", 1) = 1
-8268 read(3, \"f\", 1) = 1
-8268 read(3, \"s\", 1) = 1
-8268 read(3, \"N\", 1) = 1
-8268 read(3, \"X\", 1) = 1
-8268 read(3, \"+\", 1) = 1
-8268 read(3, \"m\", 1) = 1
-8268 read(3, \"A\", 1) = 1
-8268 read(3, \"f\", 1) = 1
-8268 read(3, \"t\", 1) = 1
-8268 read(3, \"X\", 1) = 1
-8268 read(3, \"S\", 1) = 1
-8268 read(3, \"R\", 1) = 1
-8268 read(3, \"+\", 1) = 1
-8268 read(3, \"n\", 1) = 1
-8268 read(3, \"N\", 1) = 1
-8268 read(3, \"U\", 1) = 1
-8268 read(3, \"S\", 1) = 1
-8268 read(3, \"v\", 1) = 1
-8268 read(3, \"i\", 1) = 1
-8268 read(3, \"Z\", 1) = 1
-8268 read(3, \"S\", 1) = 1
-8268 read(3, \"N\", 1) = 1
-8268 read(3, \"5\", 1) = 1
-8268 read(3, \"L\", 1) = 1
-8268 read(3, \"8\", 1) = 1
-8268 read(3, \"3\", 1) = 1
-8268 read(3, \"K\", 1) = 1
-8268 read(3, \"v\", 1) = 1
-8268 read(3, \"O\", 1) = 1
-8268 read(3, \"x\", 1) = 1
-8268 read(3, \"q\", 1) = 1
-8268 read(3, \"v\", 1) = 1
-8268 read(3, \"5\", 1) = 1
-8268 read(3, \"6\", 1) = 1
-8268 read(3, \"d\", 1) = 1
-8268 read(3, \"Y\", 1) = 1
-8268 read(3, \"Z\", 1) = 1
-8268 read(3, \"l\", 1) = 1
-8268 read(3, \"h\", 1) = 1
-8268 read(3, \"V\", 1) = 1
-8268 read(3, \"a\", 1) = 1
-8268 read(3, \"l\", 1) = 1
-8268 read(3, \"d\", 1) = 1
-8268 read(3, \"z\", 1) = 1
-8268 read(3, \"P\", 1) = 1
-8268 read(3, \"y\", 1) = 1
-8268 read(3, \"A\", 1) = 1
-8268 read(3, \"f\", 1) = 1
-8268 read(3, \"2\", 1) = 1
-8268 read(3, \"0\", 1) = 1
-8268 read(3, \"n\", 1) = 1
-8268 read(3, \"U\", 1) = 1
-8268 read(3, \"P\", 1) = 1
-8268 read(3, \"0\", 1) = 1
-8268 read(3, \"j\", 1) = 1
-8268 read(3, \"A\", 1) = 1
-8268 read(3, \"F\", 1) = 1
-8268 read(3, \"g\", 1) = 1
-8268 read(3, \"4\", 1) = 1
-8268 read(3, \"N\", 1) = 1
-8268 read(3, \"f\", 1) = 1
-8268 read(3, \"B\", 1) = 1
-8268 read(3, \"C\", 1) = 1
-8268 read(3, \"J\", 1) = 1
-8268 read(3, \"A\", 1) = 1
-8268 read(3, \"T\", 1) = 1
-8268 read(3, \"H\", 1) = 1
-8268 read(3, \"x\", 1) = 1
-8268 read(3, \"E\", 1) = 1
-8268 read(3, \"k\", 1) = 1
-8268 read(3, \"o\", 1) = 1
-8268 read(3, \"Y\", 1) = 1
-8268 read(3, \"L\", 1) = 1
-8268 read(3, \"X\", 1) = 1
-8268 read(3, \"X\", 1) = 1
-8268 read(3, \"/\", 1) = 1
-8268 read(3, \"e\", 1) = 1
-8268 read(3, \"j\", 1) = 1
-8268 read(3, \"g\", 1) = 1
-8268 read(3, \"8\", 1) = 1
-8268 read(3, \"j\", 1) = 1
-8268 read(3, \"o\", 1) = 1
-8268 read(3, \"E\", 1) = 1
-8268 read(3, \"h\", 1) = 1
-8268 read(3, \"w\", 1) = 1
-8268 read(3, \"f\", 1) = 1
-8268 read(3, \"C\", 1) = 1
-8268 read(3, \"/\", 1) = 1
-8268 read(3, \"0\", 1) = 1
-8268 read(3, \"I\", 1) = 1
-8268 read(3, \"r\", 1) = 1
-8268 read(3, \"r\", 1) = 1
-8268 read(3, \"5\", 1) = 1
-8268 read(3, \"p\", 1) = 1
-8268 read(3, \"w\", 1) = 1
-8268 read(3, \"I\", 1) = 1
-8268 read(3, \"c\", 1) = 1
-8268 read(3, \"H\", 1) = 1
-8268 read(3, \"S\", 1) = 1
-8268 read(3, \"C\", 1) = 1
-8268 read(3, \"d\", 1) = 1
-8268 read(3, \"l\", 1) = 1
-8268 read(3, \"Y\", 1) = 1
-8268 read(3, \"W\", 1) = 1
-8268 read(3, \"N\", 1) = 1
-8268 read(3, \"E\", 1) = 1
-8268 read(3, \"U\", 1) = 1
-8268 read(3, \"+\", 1) = 1
-8268 read(3, \"O\", 1) = 1
-8268 read(3, \"s\", 1) = 1
-8268 read(3, \"Y\", 1) = 1
-8268 read(3, \"m\", 1) = 1
-8268 read(3, \"+\", 1) = 1
-8268 read(3, \"f\", 1) = 1
-8268 read(3, \"Z\", 1) = 1
-8268 read(3, \"q\", 1) = 1
-8268 read(3, \"l\", 1) = 1
-8268 read(3, \"2\", 1) = 1
-8268 read(3, \"V\", 1) = 1
-8268 read(3, \"f\", 1) = 1
-8268 read(3, \"h\", 1) = 1
-8268 read(3, \"E\", 1) = 1
-8268 read(3, \"j\", 1) = 1
-8268 read(3, \"K\", 1) = 1
-8268 read(3, \"I\", 1) = 1
-8268 read(3, \"O\", 1) = 1
-8268 read(3, \"9\", 1) = 1
-8268 read(3, \"B\", 1) = 1
-8268 read(3, \"y\", 1) = 1
-8268 read(3, \"T\", 1) = 1
-8268 read(3, \"N\", 1) = 1
-8268 read(3, \"V\", 1) = 1
-8268 read(3, \"L\", 1) = 1
-8268 read(3, \"A\", 1) = 1
-8268 read(3, \"W\", 1) = 1
-8268 read(3, \"u\", 1) = 1
-8268 read(3, \"0\", 1) = 1
-8268 read(3, \"s\", 1) = 1
-8268 read(3, \"6\", 1) = 1
-8268 read(3, \"k\", 1) = 1
-8268 read(3, \"7\", 1) = 1
-8268 read(3, \"U\", 1) = 1
-8268 read(3, \"0\", 1) = 1
-8268 read(3, \"j\", 1) = 1
-8268 read(3, \"k\", 1) = 1
-8268 read(3, \"M\", 1) = 1
-8268 read(3, \"k\", 1) = 1
-8268 read(3, \"y\", 1) = 1
-8268 read(3, \"R\", 1) = 1
-8268 read(3, \"3\", 1) = 1
-8268 read(3, \"a\", 1) = 1
-8268 read(3, \"m\", 1) = 1
-8268 read(3, \"J\", 1) = 1
-8268 read(3, \"0\", 1) = 1
-8268 read(3, \"a\", 1) = 1
-8268 read(3, \"A\", 1) = 1
-8268 read(3, \"g\", 1) = 1
-8268 read(3, \"t\", 1) = 1
-8268 read(3, \"z\", 1) = 1
-8268 read(3, \"Y\", 1) = 1
-8268 read(3, \"l\", 1) = 1
-8268 read(3, \"F\", 1) = 1
-8268 read(3, \"L\", 1) = 1
-8268 read(3, \"S\", 1) = 1
-8268 read(3, \"J\", 1) = 1
-8268 read(3, \"Q\", 1) = 1
-8268 read(3, \"z\", 1) = 1
-8268 read(3, \"6\", 1) = 1
-8268 read(3, \"k\", 1) = 1
-8268 read(3, \"=\", 1) = 1
-8268 read(3, \"\n\", 1) = 1
-8268 read(4, \"q\224R\236\341\264\336\23\315FTD\341\253\372\6o\206\326\376\243\326\34L\1\245;\tb\361v\\\"..., 600) = 600
-8268 read(4, \"\2548\332\257\334\237\343\354\23\224\377\377\302\264\352\21\", 16) = 16
-8268 read(0, 0x1911620, 8192) = ? ERESTARTSYS (To be restarted)
-8250 <... read resumed> 0x7fb8e76a4000, 4096) = ? ERESTARTSYS (To be restarted)
-8268 --- SIGINT (Interrupt) @ 0 (0) ---
-8250 --- SIGINT (Interrupt) @ 0 (0) ---
-8268 --- SIGINT (Interrupt) @ 0 (0) ---
-8245 --- SIGINT (Interrupt) @ 0 (0) ---
-8244 --- SIGINT (Interrupt) @ 0 (0) ---
-8244 --- SIGINT (Interrupt) @ 0 (0) ---
-8244 +++ killed by SIGINT +++
-
-\"\"\"]]
-
-So it looks like its waiting on fd 0.
-
-Also, here is what happens when I create a directory special remote with encryption:
-[[!format sh \"\"\"
-$> git annex initremote test-remote type=directory directory=/tmp/test-remote encryption=testA@ggg.local --verbose --debug
-[2013-07-23 16:07:10 MDT] read: git [\"--git-dir=/home/cantora/annex-test/.git\",\"--work-tree=/home/cantora/annex-test\",\"show-ref\",\"git-annex\"]
-[2013-07-23 16:07:10 MDT] read: git [\"--git-dir=/home/cantora/annex-test/.git\",\"--work-tree=/home/cantora/annex-test\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
-[2013-07-23 16:07:10 MDT] read: git [\"--git-dir=/home/cantora/annex-test/.git\",\"--work-tree=/home/cantora/annex-test\",\"log\",\"refs/heads/git-annex..27b816334be0c912ae8a4e3811fda0db397974c1\",\"--oneline\",\"-n1\"]
-[2013-07-23 16:07:10 MDT] chat: git [\"--git-dir=/home/cantora/annex-test/.git\",\"--work-tree=/home/cantora/annex-test\",\"cat-file\",\"--batch\"]
-initremote test-remote (encryption setup) [2013-07-23 16:07:10 MDT] read: gpg [\"--batch\",\"--no-tty\",\"--use-agent\",\"--quiet\",\"--trust-model\",\"always\",\"--with-colons\",\"--list-public-keys\",\"testA@ggg.local\"]
-[2013-07-23 16:07:10 MDT] read: gpg [\"--batch\",\"--no-tty\",\"--use-agent\",\"--quiet\",\"--trust-model\",\"always\",\"--gen-random\",\"--armor\",\"2\",\"512\"]
-[2013-07-23 16:10:43 MDT] chat: gpg [\"--batch\",\"--no-tty\",\"--use-agent\",\"--quiet\",\"--trust-model\",\"always\",\"--encrypt\",\"--no-encrypt-to\",\"--no-default-recipient\",\"--recipient\",\"05E4CF57CBCAD77C\"]
-(with gpg key 05E4CF57CBCAD77C) [2013-07-23 16:10:43 MDT] call: git [\"--git-dir=/home/cantora/annex-test/.git\",\"--work-tree=/home/cantora/annex-test\",\"config\",\"remote.test-remote.annex-directory\",\"/tmp/test-remote\"]
-[2013-07-23 16:10:43 MDT] call: git [\"--git-dir=/home/cantora/annex-test/.git\",\"--work-tree=/home/cantora/annex-test\",\"config\",\"remote.test-remote.annex-uuid\",\"c3fdb6be-2a3b-4bc0-a4df-0fbf7216fd85\"]
-ok
-[2013-07-23 16:10:43 MDT] chat: git [\"--git-dir=/home/cantora/annex-test/.git\",\"--work-tree=/home/cantora/annex-test\",\"hash-object\",\"-w\",\"--stdin-paths\",\"--no-filters\"]
-[2013-07-23 16:10:43 MDT] feed: git [\"--git-dir=/home/cantora/annex-test/.git\",\"--work-tree=/home/cantora/annex-test\",\"update-index\",\"-z\",\"--index-info\"]
-[2013-07-23 16:10:43 MDT] read: git [\"--git-dir=/home/cantora/annex-test/.git\",\"--work-tree=/home/cantora/annex-test\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
-(Recording state in git...)
-[2013-07-23 16:10:43 MDT] read: git [\"--git-dir=/home/cantora/annex-test/.git\",\"--work-tree=/home/cantora/annex-test\",\"write-tree\"]
-[2013-07-23 16:10:43 MDT] chat: git [\"--git-dir=/home/cantora/annex-test/.git\",\"--work-tree=/home/cantora/annex-test\",\"commit-tree\",\"19dff833a084fa6b36c9438d6ee77f0122ce9bfd\",\"-p\",\"refs/heads/git-annex\"]
-[2013-07-23 16:10:43 MDT] call: git [\"--git-dir=/home/cantora/annex-test/.git\",\"--work-tree=/home/cantora/annex-test\",\"update-ref\",\"refs/heads/git-annex\",\"f06b1b83b38adc7692adedebc10d03daf584dbbb\"]
-$> git remote
-test-remote
-\"\"\"]]
-So the directory special remote seems to work just fine.
-
-Ill try using the standalone linux install later when I have some more time and post the results back here.
-"""]]
diff --git a/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_3_543d8a13756c1355a5752867bdcbefd3._comment b/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_3_543d8a13756c1355a5752867bdcbefd3._comment
deleted file mode 100644
index 1e23e881a..000000000
--- a/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_3_543d8a13756c1355a5752867bdcbefd3._comment
+++ /dev/null
@@ -1,20 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkiAsTXFXZbLE8iyy6yDtvz4MPFbzsk3c0"
- nickname="Tony"
- subject="unable to run standalone linux install"
- date="2013-07-24T17:57:22Z"
- content="""
-i was unable to test for this bug with the standalone install; this is what happens when i try:
-
-[[!format sh \"\"\"
-$> ./runshell
-$ which git-annex
-/home/cantora/install/git-annex.linux/bin/git-annex
-$ git-annex version
-git-annex: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.16' not found (required by /home/cantora/install/git-annex.linux//usr/lib/x86_64-linux-gnu/libkrb5.so.3)
-git-annex: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.17' not found (required by /home/cantora/install/git-annex.linux//lib/x86_64-linux-gnu/libcom_err.so.2)
-git-annex: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.17' not found (required by /home/cantora/install/git-annex.linux//usr/lib/x86_64-linux-gnu/libstdc++.so.6)
-$
-\"\"\"]]
-
-"""]]
diff --git a/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_4_6441cf25e6bd62c96d7e766da9bdd7fb._comment b/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_4_6441cf25e6bd62c96d7e766da9bdd7fb._comment
deleted file mode 100644
index d7e278416..000000000
--- a/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_4_6441cf25e6bd62c96d7e766da9bdd7fb._comment
+++ /dev/null
@@ -1,25 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="2001:4978:f:21a::2"
- subject="comment 4"
- date="2013-07-25T17:38:38Z"
- content="""
-Hmm, that strace exposes the full symmetric encryption key that git-annex has created. Thankfully, it is a single use key which will only be used for this glacier remote, so if you avoid using that remote (which is probably not usable anyway due to initremote not finishing!), the exposure won't matter.
-
-But, it is possible that this part is where it reads your personal gpg private key file. Hopefully the 55 bytes exposed out of the full 616 byte file are before the actual secret key data, or not enough to weaken your key. :/
-
-8268 read(4, \"q\224R\236\341\264\336\23\315FTD\341\253\372\6o\206\326\376\243\326\34L\1\245;\tb\361v\\\"..., 600) = 600
-8268 read(4, \"\2548\332\257\334\237\343\354\23\224\377\377\302\264\352\21\", 16) = 16
-
-It seems to be easier to social engineer people into stracing gpg and exposing data than I'd have hoped. Actually, I didn't plan to do that at all, I just wanted you to attach to gpg after this point.
-
-----
-
-So yeah, your gpg is hanging on stdin after git-annex has sent it the \"passphrase\" (really a symmetric gpg key) on fd 3.
-
-The reason the directory special remote doesn't hang is because it does not use gpg to encrypt anything during the initremote process.
-
-I think I have a theory of what's going on with your git-annex build. It does not include the assistant, so will be built without -threaded. Using the non-threaded runtime system may be leading to a deadlock when git-annex is supposed to be simulantaneously feeding stdin to gpg and processing its stdout. I have historically had some trouble around this, and it has probably not been well tested without the threaded runtime.
-
-(The standalone tarball problem is due to this bug, which will hopefully be fixed soon: [[Linux_stand_alone_build_20130723_breaks_support_for_glibc_2.13_debian_stable]])
-"""]]
diff --git a/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_5_72e152294e36bc5f2d78e8e2ebed6a23._comment b/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_5_72e152294e36bc5f2d78e8e2ebed6a23._comment
deleted file mode 100644
index 4fe1cfb85..000000000
--- a/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_5_72e152294e36bc5f2d78e8e2ebed6a23._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="2001:4978:f:21a::2"
- subject="comment 5"
- date="2013-07-25T17:44:59Z"
- content="""
-I was able to reproduce the bug by building without -threaded
-"""]]
diff --git a/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_6_890e85df05903795e01efbd7879f9c87._comment b/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_6_890e85df05903795e01efbd7879f9c87._comment
deleted file mode 100644
index 352adf714..000000000
--- a/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_6_890e85df05903795e01efbd7879f9c87._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="2001:4978:f:21a::2"
- subject="comment 6"
- date="2013-07-25T17:57:31Z"
- content="""
-I've made it always build with -threaded. Did not see anything obvious I could do to not make it hang with the non-threaded runtime, other than forking a separate feeder process. -threaded may make it not build on a few systems with sustandard ghc support (like sparc).
-"""]]
diff --git a/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_7_042047f9fcc45abbfa47c3973d79f08e._comment b/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_7_042047f9fcc45abbfa47c3973d79f08e._comment
deleted file mode 100644
index cd88ac9ce..000000000
--- a/doc/bugs/gpg_hangs_on_glacier_remote_creation/comment_7_042047f9fcc45abbfa47c3973d79f08e._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkiAsTXFXZbLE8iyy6yDtvz4MPFbzsk3c0"
- nickname="Tony"
- subject="thanks!"
- date="2013-07-27T05:33:34Z"
- content="""
-thanks it works now (i installed the latest github version using cabal).
-
-btw i created a temporary fake gpg key for the strace i posted, as it seemed likely something would leak from posting it.
-"""]]
diff --git a/doc/bugs/gpg_needs_--use-agent.mdwn b/doc/bugs/gpg_needs_--use-agent.mdwn
deleted file mode 100644
index d9977909b..000000000
--- a/doc/bugs/gpg_needs_--use-agent.mdwn
+++ /dev/null
@@ -1,53 +0,0 @@
-git-annex gpg encryption fails here when GPG_AGENT_INFO is set, it needs to be supplied --use-agent to work.
-
-Output from git-annex:
-
- copy file (to origin...) (gpg) gpg: can't query passphrase in batch mode
- gpg: decryption failed: secret key not available
- Command gpg ["--batch","--no-tty","--quiet","--trust-model","always","--decrypt"] failed; exit code 2
-
- git-annex: user error (Command gpg ["--batch","--no-tty","--quiet","--trust-model","always","--decrypt"] failed; exit code 2)
- failed
-
-Reproduced on command-line:
-
- [0 zerodogg@browncoats ~]$ echo test > testfile
- [0 zerodogg@browncoats ~]$ gpg -e testfile
- [0 zerodogg@browncoats ~]$ gpg --batch --no-tty --quiet --trust-model always --decrypt testfile.gpg
- gpg: can't query passphrase in batch mode
- gpg: decryption failed: secret key not available
- [2 zerodogg@browncoats ~]$ gpg --use-agent --batch --no-tty --quiet --trust-model always --decrypt testfile.gpg
- test
- [0 zerodogg@browncoats ~]$
-
-A patch to fix this issue:
-
-
- From 77cb02d15245e9ad6e127388adcda960000fb3b8 Mon Sep 17 00:00:00 2001
- From: Eskild Hustvedt <code@zerodogg.org>
- Date: Fri, 17 Aug 2012 09:21:44 +0200
- Subject: [PATCH] Explicitly enable agent to ensure decryption works
-
- Otherwise gpg will fail when GPG_AGENT_INFO is set in certain cases.
- ---
- Utility/Gpg.hs | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
- diff --git a/Utility/Gpg.hs b/Utility/Gpg.hs
- index e13afe5..c28b209 100644
- --- a/Utility/Gpg.hs
- +++ b/Utility/Gpg.hs
- @@ -29,7 +29,7 @@ stdParams params = do
- b <- getEnv "GPG_BATCH"
- let batch = if isNothing e && isNothing b
- then []
- - else ["--batch", "--no-tty"]
- + else ["--batch", "--no-tty", "--use-agent"]
- return $ batch ++ defaults ++ toCommand params
- where
- -- be quiet, even about checking the trustdb
- --
- 1.7.10.4
-
-> Thanks, [[done]].. I never noticed this since I have use-agent set in
-> gpg.conf. --[[Joey]
diff --git a/doc/bugs/gsha256sum_crashes.mdwn b/doc/bugs/gsha256sum_crashes.mdwn
deleted file mode 100644
index 9989b9866..000000000
--- a/doc/bugs/gsha256sum_crashes.mdwn
+++ /dev/null
@@ -1,92 +0,0 @@
-[[!meta title="SIGILL on Mavericks"]]
-
-### Please describe the problem.
-
-gsha256sum crashes continiously, so that excessive logs must be removed and the notebook is not responsive.
-
-Mac OS Mavericks
-
-### What steps will reproduce the problem?
-
-I cannot reproduce it. My guess is that it has problems with special characters in filenames of my music repository.
-
-### What version of git-annex are you using? On what operating system?
-
-Version: 5.20131221-g00d1673
-Build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
-
-### Please provide any additional information below.
-
-
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-[2014-01-01 11:50:02 CET] main: starting assistant version 5.20131221-g00d1673
-[2014-01-01 11:53:43 CET] TransferScanner: Syncing with sokrates.local_Musik
-Already up-to-date.
-
-(scanning...) [2014-01-01 11:53:45 CET] Watcher: Performing startup scan
-Already up-to-date.
-
-
- The installed version of git is too old for .gitignores to be honored by git-annex.
-To ssh://juh@git-annex-sokrates.local-juh_Musik/~/Musik/
- 0ec1344..c7bc58c git-annex -> synced/git-annex
-
-.DS_Store
- 0 0% 0.00kB/s 0:00:00
- 21508 100% 238.68kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 42 bytes received 21602 bytes 14429.33 bytes/sec
-total size is 21508 speedup is 0.99
-[2014-01-01 12:10:03 CET] Transferrer: Downloaded .DS_Store
-[2014-01-01 12:10:03 CET] Pusher: Syncing with sokrates.local_Musik
-To ssh://juh@git-annex-sokrates.local-juh_Musik/~/Musik/
- c7bc58c..c3ad19a git-annex -> synced/git-annex
-(Recording state in git...)
-(started...) [2014-01-01 12:33:25 CET] Committer: Adding 15 - 23 s.. drøm.ogg 04 Cuatro..ielo.flac 05 Compadrón.flac 07 Buscan..dón.flac 10 Adiós..lita.flac 12 Bésam..Boca.flac 14 Nunca ..idar.flac 03 Adiós..ngo).flac 06 Selecc..ngo).flac and 2745 other files
-
-add Edvard Grieg/Grieg Edition/Complete Piano Music/Complete Piano Music, Volume X (feat. piano_ Geir Henning Braaten)/15 - 23 småstykker for klaver, EG 104 No. 7- En drøm.ogg Committer crashed: gsha256sum parse error
-[2014-01-01 12:33:27 CET] Committer: warning Committer crashed: gsha256sum parse error
-
-.DS_Store
- 0 0% 0.00kB/s 0:00:00
- 6148 100% 5.86MB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 42 bytes received 6242 bytes 4189.33 bytes/sec
-total size is 6148 speedup is 0.98
-[2014-01-01 12:49:45 CET] Transferrer: Downloaded .DS_Store
-[2014-01-01 12:49:45 CET] Pusher: Syncing with sokrates.local_Musik
-[2014-01-01 12:53:42 CET] NetWatcherFallback: Syncing with sokrates.local_Musik
-From ssh://git-annex-sokrates.local-juh_Musik/~/Musik
- 0ec1344..c3ad19a git-annex -> sokrates.local_Musik/git-annex
-fatal: Unable to create '/home/juh/Musik/.git/refs/heads/synced/git-annex.lock': Die Datei existiert bereits.
-
-If no other git process is currently running, this probably means a
-git process crashed in this repository earlier. Make sure no other git
-process is running and remove the file manually to continue.
-git-annex-shell: git-shell failed
-fatal: The remote end hung up unexpectedly
-fatal: The remote end hung up unexpectedly
-To ssh://juh@git-annex-sokrates.local-juh_Musik/~/Musik/
- c3ad19a..e6da014 git-annex -> synced/git-annex
-From ssh://git-annex-sokrates.local-juh_Musik/~/Musik
- c3ad19a..e6da014 git-annex -> sokrates.local_Musik/git-annex
-Everything up-to-date
-[2014-01-01 13:11:59 CET] UpgradeWatcher: A new version of git-annex has been installed.
-
-"""]]
-
-I can send you the crash report of hsha256sum if you need it.
-
-> Fine, we'll stop using this on OSX, since git-annex has its own builtin
-> and not even much slower hashers. done--[[Joey]]
-
->> I'm told that other programs, such as wget, also crash with SIGILL.
->> Are there multiple OSX architectures with different instructions sets or
->> what? --[[Joey]]
-
->>> Fixed and confirmed fixed now. gsha256sum etc added back to
->>> OSX app. [[done]] --[[Joey]]
diff --git a/doc/bugs/gsha256sum_crashes/comment_1_8597d8ee29232494b1795526b6a0d8d1._comment b/doc/bugs/gsha256sum_crashes/comment_1_8597d8ee29232494b1795526b6a0d8d1._comment
deleted file mode 100644
index a65b257db..000000000
--- a/doc/bugs/gsha256sum_crashes/comment_1_8597d8ee29232494b1795526b6a0d8d1._comment
+++ /dev/null
@@ -1,81 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnX1msQxnLoSeu7q-i-c9BWghonsN7Qmns"
- nickname="Jan Ulrich"
- subject="Additional infos"
- date="2014-01-01T13:23:45Z"
- content="""
-I am not sure whether this is related. But I now see this in syslog:
-
-[[!format sh \"\"\"
-
-cs_invalid_page(0x10fc36000): p=51598[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:05 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10f60f000): p=51599[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:05 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10f905000): p=51600[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:05 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10b57a000): p=51601[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:05 janulrimacbook2 kernel[0]: nspace-handler-unblock: did not find token 34386
-Jan 1 14:21:05 janulrimacbook2.fritz.box com.apple.mtmd[52]: handler unblock failed. (status=-1/errno=2/token=34386/fd=7)
-Jan 1 14:21:05 janulrimacbook2 kernel[0]: nspace-handler-unblock: did not find token 34384
-Jan 1 14:21:05 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x106c9a000): p=51602[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:05 janulrimacbook2.fritz.box com.apple.mtmd[52]: handler unblock failed. (status=-1/errno=2/token=34384/fd=6)
-Jan 1 14:21:05 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10c334000): p=51603[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:06 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x103397000): p=51608[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:06 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x101417000): p=51609[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:06 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10db10000): p=51610[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:06 janulrimacbook2 kernel[0]: nspace-handler-unblock: did not find token 34391
-Jan 1 14:21:06 janulrimacbook2.fritz.box com.apple.mtmd[52]: handler unblock failed. (status=-1/errno=2/token=34391/fd=6)
-Jan 1 14:21:06 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10db07000): p=51613[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:07 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x103be4000): p=51614[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:07 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10a980000): p=51615[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:08 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10ef68000): p=51616[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:08 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x101b74000): p=51617[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:08 janulrimacbook2 kernel[0]: nspace-handler-unblock: did not find token 34398
-Jan 1 14:21:08 janulrimacbook2.fritz.box com.apple.mtmd[52]: handler unblock failed. (status=-1/errno=2/token=34398/fd=7)
-Jan 1 14:21:08 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x1026fe000): p=51618[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:08 janulrimacbook2 kernel[0]: nspace-handler-unblock: did not find token 34394
-Jan 1 14:21:08 janulrimacbook2.fritz.box com.apple.mtmd[52]: handler unblock failed. (status=-1/errno=2/token=34394/fd=6)
-Jan 1 14:21:08 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x1051ed000): p=51623[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:08 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10b4c0000): p=51624[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:08 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x109b98000): p=51626[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:08 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x105972000): p=51628[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:08 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x104060000): p=51629[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:08 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10ecb2000): p=51630[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:09 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x107d65000): p=51631[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:09 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10b50c000): p=51632[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:10 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x106bfc000): p=51633[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:10 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x104c53000): p=51634[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:10 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x108998000): p=51635[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:10 janulrimacbook2 kernel[0]: nspace-handler-unblock: did not find token 34409
-Jan 1 14:21:10 janulrimacbook2.fritz.box com.apple.mtmd[52]: handler unblock failed. (status=-1/errno=2/token=34409/fd=6)
-Jan 1 14:21:10 janulrimacbook2 kernel[0]: nspace-handler-unblock: did not find token 34405
-Jan 1 14:21:10 janulrimacbook2.fritz.box com.apple.mtmd[52]: handler unblock failed. (status=-1/errno=2/token=34405/fd=5)
-Jan 1 14:21:10 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10392b000): p=51636[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:10 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x1049ad000): p=51641[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:10 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x109f60000): p=51642[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:10 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10fcd2000): p=51643[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:11 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10590f000): p=51646[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:12 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x1044eb000): p=51647[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:12 janulrimacbook2 kernel[0]: nspace-handler-unblock: did not find token 34416
-Jan 1 14:21:12 janulrimacbook2.fritz.box com.apple.mtmd[52]: handler unblock failed. (status=-1/errno=2/token=34416/fd=5)
-Jan 1 14:21:12 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10f911000): p=51648[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:12 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x1066dc000): p=51649[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:12 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10430a000): p=51655[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:13 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x1099b0000): p=51656[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:13 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10e80a000): p=51657[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:13 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10bf16000): p=51660[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:13 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10240c000): p=51661[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:14 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x103009000): p=51662[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:14 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x108d02000): p=51663[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:14 janulrimacbook2 kernel[0]: nspace-handler-unblock: did not find token 34421
-Jan 1 14:21:14 janulrimacbook2.fritz.box com.apple.mtmd[52]: handler unblock failed. (status=-1/errno=2/token=34421/fd=5)
-Jan 1 14:21:14 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10c7c6000): p=51664[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:14 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10612b000): p=51665[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:14 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x105872000): p=51670[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:14 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10a5b0000): p=51671[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:15 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x1062dc000): p=51672[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:15 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x104963000): p=51675[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:15 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x105b9c000): p=51676[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:15 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x10eb19000): p=51677[git] final status 0x0, allow (remove VALID)ing page
-Jan 1 14:21:16 janulrimacbook2 kernel[0]: CODE SIGNING: cs_invalid_page(0x1094d0000): p=51678[git] final status 0x0, allow (remove VALID)ing page
-
-\"\"\"]]
-"""]]
diff --git a/doc/bugs/gsha256sum_crashes/comment_2_e410fc1998fbc7db8c13081f76acf7fc._comment b/doc/bugs/gsha256sum_crashes/comment_2_e410fc1998fbc7db8c13081f76acf7fc._comment
deleted file mode 100644
index 3977b0b5a..000000000
--- a/doc/bugs/gsha256sum_crashes/comment_2_e410fc1998fbc7db8c13081f76acf7fc._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.227"
- subject="comment 2"
- date="2014-01-01T16:48:45Z"
- content="""
-> Exception Type: EXC_BAD_INSTRUCTION (SIGILL)
-
-So, clearly not related to the filename passed to gsha256sum.
-
-If you run the command \"/Applications/git-annex.app/Contents/MacOS/runshell gsha256sum\", does it also crash then?
-"""]]
diff --git a/doc/bugs/gsha256sum_crashes/comment_3_f796dd49097425148b785bb7b6213df6._comment b/doc/bugs/gsha256sum_crashes/comment_3_f796dd49097425148b785bb7b6213df6._comment
deleted file mode 100644
index 834314fa2..000000000
--- a/doc/bugs/gsha256sum_crashes/comment_3_f796dd49097425148b785bb7b6213df6._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnX1msQxnLoSeu7q-i-c9BWghonsN7Qmns"
- nickname="Jan Ulrich"
- subject="Yes"
- date="2014-01-01T18:18:32Z"
- content="""
-It says:
-
-Illegal instruction: 4
-"""]]
diff --git a/doc/bugs/gsha256sum_crashes/comment_4_1c46b4ad0c981c6105ffb8531223f0b1._comment b/doc/bugs/gsha256sum_crashes/comment_4_1c46b4ad0c981c6105ffb8531223f0b1._comment
deleted file mode 100644
index a188bf6f6..000000000
--- a/doc/bugs/gsha256sum_crashes/comment_4_1c46b4ad0c981c6105ffb8531223f0b1._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.35"
- subject="comment 4"
- date="2014-01-06T16:26:16Z"
- content="""
-So far, only Jan has seen this problem, and it has affected both wget and gsha256sum.
-
-This makes me wonder if it's somehow a problem with running 64 bit code on his system.
-"""]]
diff --git a/doc/bugs/gsha256sum_crashes/comment_5_3fa106ed7fb30226ee7c48b66edb963c._comment b/doc/bugs/gsha256sum_crashes/comment_5_3fa106ed7fb30226ee7c48b66edb963c._comment
deleted file mode 100644
index 43ca8d31c..000000000
--- a/doc/bugs/gsha256sum_crashes/comment_5_3fa106ed7fb30226ee7c48b66edb963c._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.35"
- subject="comment 5"
- date="2014-01-06T16:47:43Z"
- content="""
-Searching for \"OSX SIGILL\" finds rather a lot of reports of problems like this.
-
-<http://trac.sagemath.org/ticket/12954>
-
-<http://stackoverflow.com/questions/20114920/can-an-exec-bad-instruction-sigill-on-dyld-my-fault>
-
-> My libraries were built using homebrew. By default homebrew optimizes for native architecture, resulting in machine instructions that don't work on older machines.
-
-Suggests to me that the OSX autobuilder probably needs to run the build with PATH set to a directory with un-optimised builds (or fat binary builds?) of all the utilities included in the app. Seems we're lucky and git-annex itself is not built with whatever sort of optimisations (SSE?) is causing this.
-"""]]
diff --git a/doc/bugs/gsha256sum_crashes/comment_6_276b181b2aeb1512e0468b88598e0a84._comment b/doc/bugs/gsha256sum_crashes/comment_6_276b181b2aeb1512e0468b88598e0a84._comment
deleted file mode 100644
index 9c0c40d67..000000000
--- a/doc/bugs/gsha256sum_crashes/comment_6_276b181b2aeb1512e0468b88598e0a84._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.35"
- subject="comment 6"
- date="2014-01-06T18:01:43Z"
- content="""
-I have updated the daily autobuild to use wget and coreutils (for gsha256sum) built using `brew install --build-bottle`. This should mean they are built portably without optimisations for the local CPU.
-
-That seems to be all the software on the build host that was installed using homebrew. So I hope the included rsync, curl xargs, etc are ok without being rebuilt.
-
-This all needs to be tested on a system affected by this problem..
-"""]]
diff --git a/doc/bugs/gsha256sum_crashes/comment_7_c2898422ceb9e103d8acdde866b7a211._comment b/doc/bugs/gsha256sum_crashes/comment_7_c2898422ceb9e103d8acdde866b7a211._comment
deleted file mode 100644
index 7f5fc0805..000000000
--- a/doc/bugs/gsha256sum_crashes/comment_7_c2898422ceb9e103d8acdde866b7a211._comment
+++ /dev/null
@@ -1,34 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnmF_9CAtfqdZkC4e-_dCX-rK5bqh4RWkw"
- nickname="Carl"
- subject="comment 7"
- date="2014-01-06T22:19:58Z"
- content="""
-I think I have the same problem.
-
-When adding some files using the assistant I see: an orange badge in the webapp that \"Committer crashed: gsha512sum parse error\"
-
-In the log I see:
-
-add Ekonomi/SEB/Portföljsammanställning/2013-07-02_Portföljsammanställning.pdf [2014-01-06 22:59:21 CET] chat: git [\"--git-dir=/Users/carlmod/Annex/.git\",\"--work-tree=/Users/carlmod/Annex\",\"check-attr\",\"-z\",\"--stdin\",\"annex.backend\",\"annex.numcopies\",\"--\"]
-[2014-01-06 22:59:21 CET] read: gsha512sum [\"/Users/carlmod/Annex/.git/annex/tmp/2013-07-02_Portfo\776l4592\"]
-Committer crashed: gsha512sum parse error
-[2014-01-06 22:59:21 CET] Committer: warning Committer crashed: gsha512sum parse error
-
-I am also running Mavericks, but my git-annex is built using homebrew on the computer it is running on.
-Version: 5.20131230
-Build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
-
-$ gsha512sum --version
-sha512sum (GNU coreutils) 8.22
-Copyright (C) 2013 Free Software Foundation, Inc.
-License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
-This is free software: you are free to change and redistribute it.
-There is NO WARRANTY, to the extent permitted by law.
-
-Written by Ulrich Drepper, Scott Miller, and David Madore.
-
-$ gsha512sum 2013-07-02_Portföljsammanställning.pdf
-25e774ed6c9adb4c1a0a68a3c7b907ead93493fc6eb6c4c24975d7d3f4c1d4b8f6c7e4b67a41418e2375d345d25f21775001add5fb5cb10675899eca432b006a 2013-07-02_Portföljsammanställning.pdf
-
-"""]]
diff --git a/doc/bugs/hGetContents:_user_error.mdwn b/doc/bugs/hGetContents:_user_error.mdwn
deleted file mode 100644
index 3f7467037..000000000
--- a/doc/bugs/hGetContents:_user_error.mdwn
+++ /dev/null
@@ -1,38 +0,0 @@
-### Please describe the problem.
-My server is on debian testing. After an upgrade (git annex: 3.20120629 → 4.20130521) I can't do anything in my repository anymore. git itself works, but invoking any git-annex command leads to:
-
- git-annex: fd:6: hGetContents: user error (Pattern match failure in do expression at libraries/base/GHC/Event/Thread.hs:90:3-10)
-
-This repo is handled by a script, which invokes only the following git/git-annex commands:
-
- $ git annex sync
- $ git annex add
- $ git commit -m "…"
-
-I realized this after trying to move files from my server to my local repo. My local machine runs debian sid. When trying to transfer files, this happens:
-
- $ git annex sync
- → ok
- $ git annex move --from origin .
- move x.zip (from origin...)
- user@host's password: ← pw ok
- git-annex-shell: fd:6: hGetContents: user error (Pattern match failure in do expression at libraries/base/GHC/Event/Thread.hs:90:3-10)
- rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
- rsync error: error in rsync protocol data stream (code 12) at io.c(605) [Receiver=3.0.9]
- failed
-
-I updated git-annex on both machines to 4.20130627 (rest of server is still on debian testing), but it didn't change anything.
-
-The server was not down since the last successful transfer, so I can't imagine anything interrupting any git-annex process.
-
-### What steps will reproduce the problem?
-See above.
-
-### What version of git-annex are you using? On what operating system?
-Server: 4.20130521 on debian testing (now: 4.20130627)
-Local: 4.20130621 on debian sid (now: 4.20130627)
-
-[[!meta title="fails to run on Linux with libc 2.17 and old kernel 2.6.32"]]
-
-> Closing this since it's a bad kernel and there is a workaround to build
-> a git-annex that will work with this kernel (see comments). [[done]] --[[Joey]]
diff --git a/doc/bugs/hGetContents:_user_error/comment_1_30178f151f8c60d2ff856ca543dc506c._comment b/doc/bugs/hGetContents:_user_error/comment_1_30178f151f8c60d2ff856ca543dc506c._comment
deleted file mode 100644
index cc0ba50d2..000000000
--- a/doc/bugs/hGetContents:_user_error/comment_1_30178f151f8c60d2ff856ca543dc506c._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.193"
- subject="comment 1"
- date="2013-06-30T17:31:26Z"
- content="""
-This looks uncomfortably like a bug in the ghc compiler's threaded runtime.
-
-What architecture is the server?
-"""]]
diff --git a/doc/bugs/hGetContents:_user_error/comment_2_f74eeed4a007058a22183fd678ecd6c6._comment b/doc/bugs/hGetContents:_user_error/comment_2_f74eeed4a007058a22183fd678ecd6c6._comment
deleted file mode 100644
index e718ff90e..000000000
--- a/doc/bugs/hGetContents:_user_error/comment_2_f74eeed4a007058a22183fd678ecd6c6._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.193"
- subject="comment 2"
- date="2013-06-30T17:33:55Z"
- content="""
-See this upstream bug report: <http://hackage.haskell.org/trac/ghc/ticket/7653>
-"""]]
diff --git a/doc/bugs/hGetContents:_user_error/comment_3_515e562228a89a13d6d857a874f4a468._comment b/doc/bugs/hGetContents:_user_error/comment_3_515e562228a89a13d6d857a874f4a468._comment
deleted file mode 100644
index 70f45e6da..000000000
--- a/doc/bugs/hGetContents:_user_error/comment_3_515e562228a89a13d6d857a874f4a468._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://m-f-k.myopenid.com/"
- ip="84.138.125.150"
- subject="server's architecture"
- date="2013-06-30T23:37:00Z"
- content="""
-It's a i686 virtual server at strato.de. Running kernel 2.6.32.
-"""]]
diff --git a/doc/bugs/hGetContents:_user_error/comment_4_8c6ed5e459c5c66b77db446c6317114c._comment b/doc/bugs/hGetContents:_user_error/comment_4_8c6ed5e459c5c66b77db446c6317114c._comment
deleted file mode 100644
index f3729d341..000000000
--- a/doc/bugs/hGetContents:_user_error/comment_4_8c6ed5e459c5c66b77db446c6317114c._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.193"
- subject="comment 4"
- date="2013-07-02T16:41:51Z"
- content="""
-I wonder if this could be a glibc/kernel mismatch somehow. Any chance you can upgrade your kernel to something more recent?
-"""]]
diff --git a/doc/bugs/hGetContents:_user_error/comment_5_f80bce48c3f96b0cd6892af43ee88a96._comment b/doc/bugs/hGetContents:_user_error/comment_5_f80bce48c3f96b0cd6892af43ee88a96._comment
deleted file mode 100644
index 0d5bf0f52..000000000
--- a/doc/bugs/hGetContents:_user_error/comment_5_f80bce48c3f96b0cd6892af43ee88a96._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://m-f-k.myopenid.com/"
- ip="84.138.125.150"
- subject="comment 5"
- date="2013-07-04T15:24:51Z"
- content="""
-No, I can't. The kernel is handled by strato. :(
-"""]]
diff --git a/doc/bugs/hGetContents:_user_error/comment_6_69dc09e4ae726856dafbeec34170671c._comment b/doc/bugs/hGetContents:_user_error/comment_6_69dc09e4ae726856dafbeec34170671c._comment
deleted file mode 100644
index 956ae733c..000000000
--- a/doc/bugs/hGetContents:_user_error/comment_6_69dc09e4ae726856dafbeec34170671c._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.193"
- subject="comment 6"
- date="2013-07-05T15:29:11Z"
- content="""
-Is there any chance I could get an account on this or a similar server, so I can investigate this in detail?
-"""]]
diff --git a/doc/bugs/hGetContents:_user_error/comment_7_3f66b03f773341fad94ec16b4f55edaa._comment b/doc/bugs/hGetContents:_user_error/comment_7_3f66b03f773341fad94ec16b4f55edaa._comment
deleted file mode 100644
index 2a64e57b1..000000000
--- a/doc/bugs/hGetContents:_user_error/comment_7_3f66b03f773341fad94ec16b4f55edaa._comment
+++ /dev/null
@@ -1,32 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.254.222"
- subject="comment 7"
- date="2013-07-07T02:48:05Z"
- content="""
-Thanks for providing me an account.
-
-I was able to reproduce the problem:
-
-<pre>
-$ git-annex-shell recvkey `pwd`
-git-annex-shell: fd:6: hGetContents: user error (Pattern match failure in do expression at libraries/base/GHC/Event/Thread.hs:90:3-10)
-</pre>
-
-Here's another one:
-
-<pre>
-$ git annex init
-
-git-annex: eventfd: unsupported operation (Function not implemented)
-failed
-init
-git-annex: fd:10: hGetContents: user error (Pattern match failure in do expression at libraries/base/GHC/Event/Thread.hs:90:3-10)
-failed
-</pre>
-
-Aha! I found a more relevant bug in GHC's bug tracker. This has the same error message including the eventfd problem. <http://ghc.haskell.org/trac/ghc/ticket/7926>
-
-After some more digging around, it's definitely a kernel/glibc incompatability. I have filed a bug on glibc: <http://bugs.debian.org/715212>
-
-"""]]
diff --git a/doc/bugs/hGetContents:_user_error/comment_8_a697e2d36abfc999e65c9f587c0de56e._comment b/doc/bugs/hGetContents:_user_error/comment_8_a697e2d36abfc999e65c9f587c0de56e._comment
deleted file mode 100644
index d635ba6a7..000000000
--- a/doc/bugs/hGetContents:_user_error/comment_8_a697e2d36abfc999e65c9f587c0de56e._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.254.222"
- subject="workaround"
- date="2013-07-07T16:38:09Z"
- content="""
-This bug only affects programs built with the threaded haskell runtime.
-
-git-annex can be built without the threaded runtime, by simply disabling the webapp. So a workaround is to pass the flag -f-WebApp to cabal when building git-annex with cabal.
-"""]]
diff --git a/doc/bugs/hGetContents:_user_error/comment_9_da7c5905a64bb6779970f9394155e629._comment b/doc/bugs/hGetContents:_user_error/comment_9_da7c5905a64bb6779970f9394155e629._comment
deleted file mode 100644
index 1a4e97744..000000000
--- a/doc/bugs/hGetContents:_user_error/comment_9_da7c5905a64bb6779970f9394155e629._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://openid.stackexchange.com/user/7891307e-4b76-4697-8e71-083669c26e9f"
- nickname="MichaelK"
- subject="comment 9"
- date="2013-07-07T16:54:34Z"
- content="""
-Thanks a lot for investigating this!
-
-(myopenid.com seems to be down, so I had to use another account.)
-"""]]
diff --git a/doc/bugs/hS3_prevents_build.mdwn b/doc/bugs/hS3_prevents_build.mdwn
new file mode 100644
index 000000000..1a064b90b
--- /dev/null
+++ b/doc/bugs/hS3_prevents_build.mdwn
@@ -0,0 +1,3 @@
+The `hS3` dependency doesn't work with the `network` / `network-uri` split, which causes a build failure for `git-annex` in a fresh sandbox with its current version bounds. Either more gymnastics are needed to constrain `network` to accommodate `hS3`, or the `s3-aws` branch could be merged in if it's ready. Building `git-annex` with a `< 2.6` constraint on `network` does succeed.
+
+> not a bug in git-annex, but in a dependency it uses, so [[done]]. (I already told the hS3 author about this, which is a very easy fix there, and he promised to fix it soon.) --[[Joey]]
diff --git a/doc/bugs/haskell-dbus_problems_on_OSX___40__or_this_a_general_problem__41__.mdwn b/doc/bugs/haskell-dbus_problems_on_OSX___40__or_this_a_general_problem__41__.mdwn
deleted file mode 100644
index dfc9c4cef..000000000
--- a/doc/bugs/haskell-dbus_problems_on_OSX___40__or_this_a_general_problem__41__.mdwn
+++ /dev/null
@@ -1,113 +0,0 @@
-Building commit 805d50c69d40be97baa28735371778df63b5fed6
-
-<pre>
-x00:git-annex jtang$ cabal install
-Resolving dependencies...
-Configuring dbus-0.10...
-Building dbus-0.10...
-Preprocessing library dbus-0.10...
-[1 of 9] Compiling DBus.Types ( lib/DBus/Types.hs, dist/build/DBus/Types.o )
-[2 of 9] Compiling DBus.Message ( lib/DBus/Message.hs, dist/build/DBus/Message.o )
-[3 of 9] Compiling DBus.Wire ( lib/DBus/Wire.hs, dist/build/DBus/Wire.o )
-[4 of 9] Compiling DBus.Address ( lib/DBus/Address.hs, dist/build/DBus/Address.o )
-[5 of 9] Compiling DBus ( lib/DBus.hs, dist/build/DBus.o )
-[6 of 9] Compiling DBus.Introspection ( lib/DBus/Introspection.hs, dist/build/DBus/Introspection.o )
-[7 of 9] Compiling DBus.Transport ( lib/DBus/Transport.hs, dist/build/DBus/Transport.o )
-
-lib/DBus/Transport.hs:196:72: Not in scope: `getPeerCred'
-cabal: Error: some packages failed to install:
-dbus-0.10 failed during the building phase. The exception was:
-ExitFailure 1
-git-annex-3.20120721 depends on dbus-0.10 which failed to install.
-</pre>
-
-The above isn't a git-annex problem but a dbus problem, at first I thought I didn't have the network package installed, but did. I should probably report this problem to the haskell dbus author.
-
-On a slightly different note, based on the makefile DBUS is not enabled on OSX/BSD so I did not expect the cabal file to use dbus as well, I'm currently interested in poking at the webapp stuff ;)
-
-Although DBUS is available on OSX from macports I get the feeling that the haskell-dbus package might need some poking before it works properly.
-
-To continue, pulling, installing the dependancies (dbus is still boned) and building commit 6cecc26206c4a539999b04664136c6f785211a41
-
-<pre>
-[ 92 of 205] Compiling Utility.Url ( Utility/Url.hs, tmp/Utility/Url.o )
-
-Utility/Url.hs:39:14: Not in scope: `parseURI'
-
-Utility/Url.hs:73:14: Not in scope: `parseURI'
-
-Utility/Url.hs:88:12: Not in scope: type constructor or class `URI'
-
-Utility/Url.hs:91:30: Not in scope: type constructor or class `URI'
-
-Utility/Url.hs:107:38: Not in scope: `parseURIReference'
-
-Utility/Url.hs:111:95: Not in scope: `relativeTo'
-make: *** [git-annex] Error 1
-</pre>
-
-Which then lead me to doing a "cabal install -f-DBus" which spits out the following when trying to link the binary
-
-<pre>
-[206 of 206] Compiling Main ( git-annex.hs, dist/build/git-annex/git-annex-tmp/Main.o )
-Linking dist/build/git-annex/git-annex ...
-Undefined symbols for architecture x86_64:
- "_addfds_kqueue", referenced from:
- _s16v6_info in Kqueue.o
- "_init_kqueue", referenced from:
- _s16v3_info in Kqueue.o
- "_waitchange_kqueue", referenced from:
- _UtilityziKqueue_zdwa1_info in Kqueue.o
-ld: symbol(s) not found for architecture x86_64
-collect2: ld returned 1 exit status
-cabal: Error: some packages failed to install:
-git-annex-3.20120721 failed during the building phase. The exception was:
-ExitFailure 1
-</pre>
-
-I then just tried to build commit with 6cecc26206c4a539999b04664136c6f785211a41 (i have the needed dependancies installed), gives me this...
-
-<pre>
-x00:git-annex jtang$ make
-ghc -O2 -threaded -Wall -ignore-package monads-fd -ignore-package monads-tf -outputdir tmp -IUtility -DWITH_ASSISTANT -DWITH_S3 -DWITH_WEBAPP --make git-annex Utility/libdiskfree.o Utility/libmounts.o Utility/libkqueue.o
-
-Assistant/Threads/MountWatcher.hs:39:0:
- warning: #warning Building without dbus support; will use mtab polling
-[ 92 of 205] Compiling Utility.Url ( Utility/Url.hs, tmp/Utility/Url.o )
-
-Utility/Url.hs:98:65:
- Couldn't match expected type `network-2.3.0.13:Network.URI.URI'
- with actual type `URI'
- In the second argument of `mkRequest', namely `u'
- In the expression: mkRequest requesttype u :: Request_String
- In an equation for `req':
- req = mkRequest requesttype u :: Request_String
-make: *** [git-annex] Error 1
-</pre>
-
-The latest version of the network package in hackage is network-2.3.0.14 which I have installed, this might also be the reason why dbus is broken. removing network-2.3.0.14 at least makes it happy again.
-
-to remove the network-2.3.0.14 package
-
-<pre>
-ghc-pkg unregister network-2.3.0.14
-</pre>
-
-Hope the above isn't too random of bug/issue report.
-
-----
-
-going through <http://hackage.haskell.org/packages/archive/network/2.3.0.14/doc/html/Network-Socket.html> shows that getPeerCred is only available on systems where SO_PEERCRED is supported, *sigh* OSX isn't supported and thus haskell-dbus is broken. Apparently getpeerid is more portable but it isnt supported in the network package. It looks like dbus support on OSX isn't really going to work too well till haskell-dbus gets fixed on OSX (or BSD?)
-
-> Does OSX acually come with dbus by default, and can you
-> use something like `dbus-monitor` to see events when
-> plugging in removable drives? If so, this might be worth spending time
-> on.
-
->> No OSX does not come with dbus by default, the user must install it
-
->
-> Currently though, dbus is not supposed to be built on non-Linux systems.
-> (Well, it might work on Freebsd or something, but I've not tried it.)
-> I've fixed the cabal file to only enable it on Linux. [[done]] --[[Joey]]
-
diff --git a/doc/bugs/host_with_rysnc_installed__44___not_recognized.mdwn b/doc/bugs/host_with_rysnc_installed__44___not_recognized.mdwn
deleted file mode 100644
index 4513ad9db..000000000
--- a/doc/bugs/host_with_rysnc_installed__44___not_recognized.mdwn
+++ /dev/null
@@ -1,19 +0,0 @@
-What steps will reproduce the problem?
-Set up a remote server using ssh to a FreeNAS box
-
-What is the expected output? What do you see instead?
-Neither rsync nor git-annex are installed
-rsync is in the path, user with permissions is able to run it
-
-What version of git-annex are you using? On what operating system?
-4.20130227 OSX
-
-Please provide any additional information below.
-ssh keys were installed to allow login, when ssh-askpass was not found on osx version
-
-[[!meta title="webapp rsync probe command failed on FreeNAS box"]]
-[[!tag /design/assistant]]
-
-> [[done]]; based on the error message it's using csh and
-> the assistant will now wrap its shell commands to work with csh.
-> --[[Joey]]
diff --git a/doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_1_3ff000eb3efde41426c7b086ae627dcf._comment b/doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_1_3ff000eb3efde41426c7b086ae627dcf._comment
deleted file mode 100644
index 6d6fe2ac6..000000000
--- a/doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_1_3ff000eb3efde41426c7b086ae627dcf._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-03-18T15:55:05Z"
- content="""
-The git-annex webapp runs some shell commands on the remote it's setting up, in this case the FreeNAS box. It's difficult to do this entirely portably. I have tried to use only POSIX shell compatable commands, that should also work with embedded systems using busybox.
-
-You can try running the probe yourself at the prompt on the FreeNAS and see how it fails. The command run is:
-
- echo loggedin;if which git-annex-shell; then echo git-annex-shell; fi;if which rsync; then echo rsync; fi
-"""]]
diff --git a/doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_2_34e592ab057df2df54e13d3f5cae64f0._comment b/doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_2_34e592ab057df2df54e13d3f5cae64f0._comment
deleted file mode 100644
index 1616c7c84..000000000
--- a/doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_2_34e592ab057df2df54e13d3f5cae64f0._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmaygIuV4bIfp-U5IRH51FwKHq-i7_os0c"
- nickname="Mike"
- subject="comment 2"
- date="2013-03-25T02:20:05Z"
- content="""
-I copied and pasted your suggestion into a shell script, and this is what I got back:
-
- #./test.sh
-
- loggedin
- /usr/local/bin/rsync
- rsync
-"""]]
diff --git a/doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_3_05ffbae13d8f9b08315f40bb9b206f46._comment b/doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_3_05ffbae13d8f9b08315f40bb9b206f46._comment
deleted file mode 100644
index 0dd7a7ee1..000000000
--- a/doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_3_05ffbae13d8f9b08315f40bb9b206f46._comment
+++ /dev/null
@@ -1,21 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-03-27T19:22:06Z"
- content="""
-Hmm, the message you got indicates it saw the \"loggedin\", but not the \"rsync\".
-
-Actually, the command it runs is closer to this:
-
-<pre>
-echo git-annex-probe loggedin;if which git-annex-shell; then echo git-annex-probe git-annex-shell; fi;if which rsync; then echo git-annex-probe rsync; fi
-</pre>
-
-It's possible that ssh is somehow truncating or not running all of that. The ssh command
-would be something like this:
-
-<pre>
-ssh $HOSTNAME -n 'echo git-annex-probe loggedin;if which git-annex-shell; then echo git-annex-probe git-annex-shell; fi;if which rsync; then echo git-annex-probe rsync; fi'
-<pre>
-"""]]
diff --git a/doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_4_99d1f151263ca3433dd4afa8a928b1fe._comment b/doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_4_99d1f151263ca3433dd4afa8a928b1fe._comment
deleted file mode 100644
index ed377251c..000000000
--- a/doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_4_99d1f151263ca3433dd4afa8a928b1fe._comment
+++ /dev/null
@@ -1,30 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmaygIuV4bIfp-U5IRH51FwKHq-i7_os0c"
- nickname="Mike"
- subject="comment 4"
- date="2013-03-29T04:03:44Z"
- content="""
-running the shell script directly:
- > ./test.sh 23:43:25
-
- git-annex-probe loggedin
-
- /usr/local/bin/rsync
-
- git-annex-probe rsync
-
-Running your ssh command:
-
- git-annex-probe loggedin
-
- if: Expression Syntax.
-
-Running the shell script through ssh:
- ssh $HOSTNAME ./test.sh 23:54:39
-
- git-annex-probe loggedin
-
- /usr/local/bin/rsync
-
- git-annex-probe rsync
-"""]]
diff --git a/doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_5_6ef1a377b0b4d3efeffdf9693d0b496b._comment b/doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_5_6ef1a377b0b4d3efeffdf9693d0b496b._comment
deleted file mode 100644
index b62c8a9ec..000000000
--- a/doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_5_6ef1a377b0b4d3efeffdf9693d0b496b._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 5"
- date="2013-03-29T16:47:28Z"
- content="""
-Sounds like it may not provide a POSIX shell for interactive use (based on the error message, I think it's csh), in which case this could work:
-
- ssh $HOSTNAME -n 'sh -c \"echo git-annex-probe loggedin;if which git-annex-shell; then echo git-annex-probe git-annex-shell; fi;if which rsync; then echo git-annex-probe rsync; fi\"'
-
-
-"""]]
diff --git a/doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_6_d9e36828ad55f3181a1c650010f23d6b._comment b/doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_6_d9e36828ad55f3181a1c650010f23d6b._comment
deleted file mode 100644
index 020408e5b..000000000
--- a/doc/bugs/host_with_rysnc_installed__44___not_recognized/comment_6_d9e36828ad55f3181a1c650010f23d6b._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmaygIuV4bIfp-U5IRH51FwKHq-i7_os0c"
- nickname="Mike"
- subject="comment 6"
- date="2013-03-31T03:45:45Z"
- content="""
-i ran your new command, and got this back:
-
- git-annex-probe loggedin
-
- /usr/local/bin/rsync
-
- git-annex-probe rsync
-"""]]
diff --git a/doc/bugs/how_to_get_git-annex_shell_on_MAC__63__.mdwn b/doc/bugs/how_to_get_git-annex_shell_on_MAC__63__.mdwn
new file mode 100644
index 000000000..afc95b6ce
--- /dev/null
+++ b/doc/bugs/how_to_get_git-annex_shell_on_MAC__63__.mdwn
@@ -0,0 +1,27 @@
+### Please describe the problem.
+shiny-2:MacOS ovi$ git annex sync
+git: 'annex' is not a git command. See 'git --help'.
+shiny-2:MacOS ovi$
+
+### What steps will reproduce the problem?
+INstall git-annex for MAC like this: http://git-annex.branchable.com/install/OSX/ via .dmg file then try above commands from your terminal
+
+### What version of git-annex are you using? On what operating system?
+Version: 5.20140420-ga25b8bb Build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
+Mac OSX 10.9.2
+
+### Please provide any additional information below.
+I tried adding the path to my .bash_profile manually like this but it didn't help (actually, this was already in there, I just added the path to git-annex to the string):
+export PATH=/opt/local/bin:/opt/local/sbin/Applications/git-annex.app/Contents/MacOS:$PATH
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> To the extent this is a bug report, it's a duplicate of
+> [[standalone_tarball_symlink_to_PATH_broken]].
+> [[closing dup|done]]. --[[Joey]]
diff --git a/doc/bugs/how_to_get_git-annex_shell_on_MAC__63__/comment_1_780fbb7b8dda331503064dfa6bcabaa3._comment b/doc/bugs/how_to_get_git-annex_shell_on_MAC__63__/comment_1_780fbb7b8dda331503064dfa6bcabaa3._comment
new file mode 100644
index 000000000..5d7dd9493
--- /dev/null
+++ b/doc/bugs/how_to_get_git-annex_shell_on_MAC__63__/comment_1_780fbb7b8dda331503064dfa6bcabaa3._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-05-16T17:17:54Z"
+ content="""
+Here's how I do it:
+
+<pre>
+$ oberon:tmp joeyh$ hdiutil attach git-annex.dmg
+$ oberon:tmp joeyh$ /Volumes/git-annex/git-annex.app/Contents/MacOS/git-annex version
+git-annex version: 5.20140516-g693a6a4
+oberon:tmp joeyh$ PATH=$PATH:/Volumes/git-annex/git-annex.app/Contents/MacOS/
+oberon:tmp joeyh$ git-annex version
+git-annex version: 5.20140516-g693a6a4
+</pre>
+
+So, adding to PATH works fine. Perhaps you added the wrong directory to your PATH.
+
+Note that .bash_profile is only used for bash login shells. It may not be run when you open a terminal, or when git-annex ssh's in from elsewhere to run git-annex-shell (which you seem to be asking about, but only in the title of this page?).
+
+In particular, bash does not provide any way to set the PATH which works when you run \"ssh yourcomputer git-annex-shell\". So you will need to instead move the git-annex files into a directory that is in the default PATH.
+"""]]
diff --git a/doc/bugs/how_to_get_git-annex_shell_on_MAC__63__/comment_2_1785e99846998aa50e1c62a88b558196._comment b/doc/bugs/how_to_get_git-annex_shell_on_MAC__63__/comment_2_1785e99846998aa50e1c62a88b558196._comment
new file mode 100644
index 000000000..e5d09ec64
--- /dev/null
+++ b/doc/bugs/how_to_get_git-annex_shell_on_MAC__63__/comment_2_1785e99846998aa50e1c62a88b558196._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="comment 2"
+ date="2014-05-16T17:23:32Z"
+ content="""
+Thanks for the additional info, for now its working fine:
+
+git-annex version
+git-annex version: 5.20140420-ga25b8bb
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook external
+"""]]
diff --git a/doc/bugs/huge_multiple_copies_of___39__.nfs__42____39___and___39__.panfs__42____39___being_created.mdwn b/doc/bugs/huge_multiple_copies_of___39__.nfs__42____39___and___39__.panfs__42____39___being_created.mdwn
new file mode 100644
index 000000000..4e62fa758
--- /dev/null
+++ b/doc/bugs/huge_multiple_copies_of___39__.nfs__42____39___and___39__.panfs__42____39___being_created.mdwn
@@ -0,0 +1,32 @@
+### Please describe the problem.
+
+I have 2 indirect mode repos, both on network filesystems, that I have only used for adding
+data on one end, then syncing via `git annex sync` and `git annex get`. The problem
+is that`.nfs` copies are being made for each git annex object data file, e.g:
+
+`./.git/annex/objects/34/2x/SHA256E-s4112535690--c5f0e5a8af7bf17dd4a8ca192c8ddfb01fe6ec10908c80cffa5ac64c00e28443.vtk.gz/.nfs0000000006d0018600002147`
+
+Reading up on .nfs files, they are generated when "an open file is removed but is still being accessed".
+
+### What steps will reproduce the problem?
+Clone a git annex repo on a network file system, run
+`git annex sync` ,
+`git annex drop` ,
+`git annex get`
+
+### What version of git-annex are you using? On what operating system?
+* git-annex version: 5.20140818-g10bf03a
+* 2.6.34.9-69.fc13.x86_64 fedora 13
+* 2.6.32-279.22.1.el6.x86_64 centOS
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+[[!meta title="git-annex and NFS don't mix; could git annex init detect NFS and refuse to use it?"]]
diff --git a/doc/bugs/huge_multiple_copies_of___39__.nfs__42____39___and___39__.panfs__42____39___being_created/comment_1_833cf2db9881a401a3d5db6d4f3c450a._comment b/doc/bugs/huge_multiple_copies_of___39__.nfs__42____39___and___39__.panfs__42____39___being_created/comment_1_833cf2db9881a401a3d5db6d4f3c450a._comment
new file mode 100644
index 000000000..430e26f5f
--- /dev/null
+++ b/doc/bugs/huge_multiple_copies_of___39__.nfs__42____39___and___39__.panfs__42____39___being_created/comment_1_833cf2db9881a401a3d5db6d4f3c450a._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-04T19:31:32Z"
+ content="""
+git-annex uses posix file locking to avoid scenarios that could
+otherwise result in data loss when dropping a file.
+
+This indeed involves keeping a file open and locked while removing it.
+
+Since NFS's posix file locking support ranges from poor to completely
+broken, it's not wise to use git-annex over NFS at all. It's much nicer
+to use it locally, with a git remote accessing the file server over
+eg, ssh.
+
+I can't see any changes to git-annex that could improve its handing
+of NFS, unless there's a good way to detect a NFS filesystem and make
+`git annex init` refuse to set up a repository there.
+"""]]
diff --git a/doc/bugs/immediately_drops_files.mdwn b/doc/bugs/immediately_drops_files.mdwn
deleted file mode 100644
index 70f7faa46..000000000
--- a/doc/bugs/immediately_drops_files.mdwn
+++ /dev/null
@@ -1,222 +0,0 @@
-### Please describe the problem.
-When I `git annex get` files in a certain directory, they are got, then are dropped.
-When I do the same in a different directory, then the files there remains (as expected).
-
-`git annex fsck` also fails on these files, but after that the problem persists.
-
-I'm not really sure where to look to see why this is happening, especially why only on some directories.
-The filesystem (ext4) this is on has several GB free.
-
-Looking at the (broken) symlinks, they are strange:
-
-[[!format sh """
-git annex fsck IMG_4230.JPG > /dev/null
-ls -l IMG_4230.JPG
-lrwxrwxrwx 1 walter walter 207 Aug 13 12:14 IMG_4230.JPG -> ../../../.git/annex/objects/86/KF/SHA256E-s4209479--bba2489f526ed1288d23157b2b985bfda99321c52d05d3f4ddb92144b301318e.JPG/SHA256E-s4209479--bba2489f526ed1288d23157b2b985bfda99321c52d05d3f4ddb92144b301318e.JPG
-"""]]
-
-But then after getting it (and it being dropped somehow), the symlink is different (the number of ..s)
-
-[[!format sh """
-git annex get IMG_4230.JPG > /dev/null
-ls -l IMG_4230.JPG
-lrwxrwxrwx 1 walter walter 210 Aug 13 12:16 IMG_4230.JPG -> ../../../../.git/annex/objects/86/KF/SHA256E-s4209479--bba2489f526ed1288d23157b2b985bfda99321c52d05d3f4ddb92144b301318e.JPG/SHA256E-s4209479--bba2489f526ed1288d23157b2b985bfda99321c52d05d3f4ddb92144b301318e.JPG
-"""]]
-
-
-
-### What steps will reproduce the problem?
-
-I'm not really sure; I will test later whether this happens on other computers.
-
-### What version of git-annex are you using? On what operating system?
- git-annex version: 4.20130812-gc590455
- build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS
- local repository version: 3
- default repository version: 3
- supported repository versions: 3 4
- upgrade supported from repository versions: 0 1 2
-
-On ubuntu 12.10
-
-
---Walter
-
-### Please provide any additional information below.
-
-*output of git annex fsck*
-[[!format sh """
-git annex fsck 2013/08/01/IMG_4230.JPG
-[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","ls-files","--cached","-z","--","2013/08/01/IMG_4230.JPG"]
-[2013-08-13 12:01:25 NZST] chat: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","check-attr","-z","--stdin","annex.backend","annex.numcopies","--"]
-fsck 2013/08/01/IMG_4230.JPG [2013-08-13 12:01:25 NZST] chat: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","cat-file","--batch"]
-[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","git-annex"]
-[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","--hash","refs/heads/git-annex"]
-[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..3afd101dade8be4e1ed7ac48fdf4173274d3ecd7","--oneline","-n1"]
-[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..9be78e75db197a26db6aaaffbcddf5057e30d23f","--oneline","-n1"]
-[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..2bae49a6e1ce85ad501b0fa85439da7cde8c8597","--oneline","-n1"]
-[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..b5858e25b7f7c45564ab463ecf3e74ecd8979609","--oneline","-n1"]
-[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..cad75ea77d513a24006ee0b56ff0aad12b7aa805","--oneline","-n1"]
-[2013-08-13 12:01:25 NZST] read: git ["config","--null","--list"]
-ok
-[2013-08-13 12:01:25 NZST] chat: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","hash-object","-w","--stdin-paths","--no-filters"]
-[2013-08-13 12:01:25 NZST] feed: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","update-index","-z","--index-info"]
-[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","--hash","refs/heads/git-annex"]
-(Recording state in git...)
-[2013-08-13 12:01:25 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","write-tree"]
-[2013-08-13 12:01:25 NZST] chat: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","commit-tree","78aca82f86ffb91bc841a3978f410e55aa6e0efe","-p","refs/heads/git-annex"]
-[2013-08-13 12:01:25 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","update-ref","refs/heads/git-annex","14908fedbd44917815dd013125b69def1f7f8f7c"]
-
-"""]]
-
-*output of git annex get* (output taken from daemon.log, as output from command does not include the dropping part)
-[[!format sh """
-git annex get 2013/08/01/IMG_4230.JPG
-[2013-08-13 12:03:46 NZST] TransferWatcher: transfer starting: Download UUID "e6bb2ef2-b2b5-11e1-bd1b-3fd40e5e767d" 2013/08/01/IMG_4230.JPG Nothing
-[2013-08-13 12:03:46 NZST] TransferWatcher: transfer starting: Download UUID "e6bb2ef2-b2b5-11e1-bd1b-3fd40e5e767d" 2013/08/01/IMG_4230.JPG Nothing
-[2013-08-13 12:03:46 NZST] TransferWatcher: transfer finishing: Transfer {transferDirection = Download, transferUUID = UUID "e6bb2ef2-b2b5-11e1-bd1b-3fd40e5e767d", transferKey = Key {keyName = "bba2489f526ed1288d23157b2b985bfda99321c52d05d3f4ddb92144b301318e.JPG", keyBackendName = "SHA256E", keySize = Just 4209479, keyMtime = Nothing}}
-[2013-08-13 12:03:46 NZST] Watcher: add symlink 01/IMG_4230.JPG
-[2013-08-13 12:03:46 NZST] chat: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","hash-object","-t","blob","-w","--stdin","--no-filters"]
-[2013-08-13 12:03:46 NZST] Committer: committing 1 changes
-[2013-08-13 12:03:46 NZST] Committer: Committing changes to git
-[2013-08-13 12:03:46 NZST] feed: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","update-index","-z","--index-info"]
-[2013-08-13 12:03:46 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","commit","--allow-empty-message","--no-edit","-m","","--quiet","--no-verify"]
-[2013-08-13 12:03:46 NZST] Pusher: Synok
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-drop 01/IMG_4230.JPG cing with Adata, b(checking cloud...) itbucket
-[2013-08-13 12:03:46 NZST] Committer: dropped 01/IMG_4230.JPG (from here) (copies now 4) : file renamed
-[2013-08-13 12:03:46 NZST] chat: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","hash-object","-w","--stdin-paths","--no-filters"]
-[2013-08-13 12:03:46 NZST] feed: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","update-index","-z","--index-info"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","--hash","refs/heads/git-annex"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","write-tree"]
-[2013-08-13 12:03:47 NZST] chat: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","commit-tree","f288bfce8d133cc0ce00b65d48ca726809da34e6","-p","refs/heads/git-annex"]
-[2013-08-13 12:03:47 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","update-ref","refs/heads/git-annex","5a188246bda51207d12adf86c6d87568ca7076d7"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","symbolic-ref","HEAD"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","refs/heads/master"]
-[2013-08-13 12:03:47 NZST] Pusher: pushing to [Remote { name ="Adata" },Remote { name ="bitbucket" }]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","git-annex"]
-[2013-08-13 12:03:47 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","branch","-f","synced/master"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","--hash","refs/heads/git-annex"]
-[2013-08-13 12:03:47 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","bitbucket","git-annex:synced/git-annex","master:synced/master"]
-[2013-08-13 12:03:47 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","Adata","git-annex:synced/git-annex","master:synced/master"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..5a188246bda51207d12adf86c6d87568ca7076d7","--oneline","-n1"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..9be78e75db197a26db6aaaffbcddf5057e30d23f","--oneline","-n1"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..2bae49a6e1ce85ad501b0fa85439da7cde8c8597","--oneline","-n1"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..b5858e25b7f7c45564ab463ecf3e74ecd8979609","--oneline","-n1"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..3afd101dade8be4e1ed7ac48fdf4173274d3ecd7","--oneline","-n1"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..cad75ea77d513a24006ee0b56ff0aad12b7aa805","--oneline","-n1"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","ls-tree","-z","--","refs/heads/git-annex","uuid.log","remote.log","trust.log","group.log","preferred-content.log"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","git-annex"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","--hash","refs/heads/git-annex"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..5a188246bda51207d12adf86c6d87568ca7076d7","--oneline","-n1"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..9be78e75db197a26db6aaaffbcddf5057e30d23f","--oneline","-n1"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..2bae49a6e1ce85ad501b0fa85439da7cde8c8597","--oneline","-n1"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..b5858e25b7f7c45564ab463ecf3e74ecd8979609","--oneline","-n1"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..3afd101dade8be4e1ed7ac48fdf4173274d3ecd7","--oneline","-n1"]
-[2013-08-13 12:03:47 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..cad75ea77d513a24006ee0b56ff0aad12b7aa805","--oneline","-n1"]
-[2013-08-13 12:03:47 NZST] Watcher: add symlink 01/IMG_4230.JPG
-[2013-08-13 12:03:47 NZST] chat: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","hash-object","-t","blob","-w","--stdin","--no-filters"]
-To /media/walter/327D522A6727FE79/Pictures
- 3afd101..5a18824 git-annex -> synced/git-annex
-[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","git-annex"]
-[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","Adata","git-annex:synced/git-annex","master"]
-[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","--hash","refs/heads/git-annex"]
-[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..5a188246bda51207d12adf86c6d87568ca7076d7","--oneline","-n1"]
-[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..9be78e75db197a26db6aaaffbcddf5057e30d23f","--oneline","-n1"]
-[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..2bae49a6e1ce85ad501b0fa85439da7cde8c8597","--oneline","-n1"]
-[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..b5858e25b7f7c45564ab463ecf3e74ecd8979609","--oneline","-n1"]
-[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..cad75ea77d513a24006ee0b56ff0aad12b7aa805","--oneline","-n1"]
-[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..3afd101dade8be4e1ed7ac48fdf4173274d3ecd7","--oneline","-n1"]
-[2013-08-13 12:03:48 NZST] Committer: committing 1 changes
-[2013-08-13 12:03:48 NZST] Committer: Committing changes to git
-[2013-08-13 12:03:48 NZST] feed: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","update-index","-z","--index-info"]
-[2013-08-13 12:03:48 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","commit","--allow-empty-message","--no-edit","-m","","--quiet","--no-verify"]
-To git@bitbucket.org:waltersom/Pictures.git
- 3afd101..5a18824 git-annex -> synced/git-annex
-[2013-08-13 12:03:52 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","git-annex"]
-[2013-08-13 12:03:52 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","bitbucket","git-annex:synced/git-annex","master"]
-[2013-08-13 12:03:52 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","--hash","refs/heads/git-annex"]
-[2013-08-13 12:03:52 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..5a188246bda51207d12adf86c6d87568ca7076d7","--oneline","-n1"]
-[2013-08-13 12:03:52 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..9be78e75db197a26db6aaaffbcddf5057e30d23f","--oneline","-n1"]
-[2013-08-13 12:03:52 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..2bae49a6e1ce85ad501b0fa85439da7cde8c8597","--oneline","-n1"]
-[2013-08-13 12:03:52 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..b5858e25b7f7c45564ab463ecf3e74ecd8979609","--oneline","-n1"]
-[2013-08-13 12:03:52 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..cad75ea77d513a24006ee0b56ff0aad12b7aa805","--oneline","-n1"]
-[2013-08-13 12:03:58 NZST] Pusher: Syncing with Adata, bitbucket
-[2013-08-13 12:03:58 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","symbolic-ref","HEAD"]
-[2013-08-13 12:03:58 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","refs/heads/master"]
-[2013-08-13 12:03:58 NZST] Pusher: pushing to [Remote { name ="Adata" },Remote { name ="bitbucket" }]
-[2013-08-13 12:03:58 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","branch","-f","synced/master"]
-[2013-08-13 12:03:58 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","Adata","git-annex:synced/git-annex","master:synced/master"]
-[2013-08-13 12:03:58 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","bitbucket","git-annex:synced/git-annex","master:synced/master"]
-Everything up-to-date
-[2013-08-13 12:03:58 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","Adata","git-annex:synced/git-annex","master"]
-Everything up-to-date
-[2013-08-13 12:04:02 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","bitbucket","git-annex:synced/git-annex","master"]
-
-"""
-]]
-
-
-
-I tried removing the USB drive I had plugged in, and was able to get the file from S3, and it wasn't dropped.
-However, checking the logs, I see that it did try to drop the file, but was unable to verify numcopies, so gives up.
-Also odd, is that it doesn't suggest making the USB drive available, but `git annex whereis` knows that the drive does have it. Also, annex.numcopies is 1, and it got it from S3, so why can't it drop it on the computer?
-Or, why does it say that it needs two copies? `git config annex.numcopies` gives 1.
-
-[[!format sh """
-[2013-08-13 16:52:08 NZST] TransferWatcher: transfer starting: Download UUID "be992080-b1db-11e1-8f79-1b10bb4092ef" 01/IMG_4230.JPG Nothing
-[2013-08-13 16:54:06 NZST] TransferWatcher: transfer starting: Download UUID "be992080-b1db-11e1-8f79-1b10bb4092ef" 01/IMG_4230.JPG Just 65504
-[...]
-[2013-08-13 16:54:06 NZST] TransferWatcher: transfer starting: Download UUID "be992080-b1db-11e1-8f79-1b10bb4092ef" 01/IMG_4230.JPG Just 4192256
-[2013-08-13 16:54:06 NZST] TransferWatcher: transfer finishing: Transfer {transferDirection = Download, transferUUID = UUID "be992080-b1db-11e1-8f79-1b10bb4092ef", transferKey = Key {keyName = "bba2489f526ed1288d23157b2b985bfda99321c52d05d3f4ddb92144b301318e.JPG", keyBackendName = "SHA256E", keySize = Just 4209479, keyMtime = Nothing}}
-[2013-08-13 16:54:06 NZST] Watcher: add symlink 01/IMG_4230.JPG
-[2013-08-13 16:54:06 NZST] chat: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","hash-object","-t","blob","-w","--stdin","--no-filters"]
-[2013-08-13 16:54:06 NZST] Committer: committing 1 changes
-[2013-08-13 16:54:06 NZST] Committer: Committing changes to git
-[2013-08-13 16:54:06 NZST] feed: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","update-index","-z","--index-info"]
-[2013-08-13 16:54:06 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","commit","--allow-empty-message","--no-edit","-m","","--quiet","--no-verify"]
-[2013-08-13 16:54:06
- Could only verify the existence of 1 out of 2 necessary copies
-
- Try making some of these repositories available:
- 416aa28e-b1d4-11e1-9539-c39b14a3f7d2 -- timeline laptop
- f42d30a0-b1d2-11e1-8b32-3bdd169e3280 -- my desktop
-
- (Use --force to override this check, or adjust annex.numcopies.)
-failed
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-drop 01/IMG_4230.JPG NZST] Pusher:(checking cloud...) Syncing with bitbucket
-(unsafe) [2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","symbolic-ref","HEAD"]
-[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","refs/heads/master"]
-[2013-08-13 16:54:07 NZST] Pusher: pushing to [Remote { name ="bitbucket" }]
-[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","git-annex"]
-[2013-08-13 16:54:07 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","branch","-f","synced/master"]
-[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","--hash","refs/heads/git-annex"]
-[2013-08-13 16:54:07 NZST] call: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","bitbucket","git-annex:synced/git-annex","master:synced/master"]
-[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..7b6b1c6c479a13f9d4ece135bdf3ba31bc484b31","--oneline","-n1"]
-[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..9be78e75db197a26db6aaaffbcddf5057e30d23f","--oneline","-n1"]
-[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..2bae49a6e1ce85ad501b0fa85439da7cde8c8597","--oneline","-n1"]
-[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..b5858e25b7f7c45564ab463ecf3e74ecd8979609","--oneline","-n1"]
-[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..11a0c19d7c79f3e574b81295782ab2820caea232","--oneline","-n1"]
-[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..cad75ea77d513a24006ee0b56ff0aad12b7aa805","--oneline","-n1"]
-[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..5ebb3e46b8fc109c2966ceccdd716f469d94fcad","--oneline","-n1"]
-[2013-08-13 16:54:07 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","ls-tree","-z","--","refs/heads/git-annex","uuid.log","remote.log","trust.log","group.log","preferred-content.log"]
-To git@bitbucket.org:waltersom/Pictures.git
- 5ebb3e4..7b6b1c6 git-annex -> synced/git-annex
-[2013-08-13 16:54:12 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","git-annex"]
-[2013-08-13 16:54:12 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","push","bitbucket","git-annex:synced/git-annex","master"]
-[2013-08-13 16:54:12 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","show-ref","--hash","refs/heads/git-annex"]
-[2013-08-13 16:54:12 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..7b6b1c6c479a13f9d4ece135bdf3ba31bc484b31","--oneline","-n1"]
-[2013-08-13 16:54:12 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..9be78e75db197a26db6aaaffbcddf5057e30d23f","--oneline","-n1"]
-[2013-08-13 16:54:12 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..2bae49a6e1ce85ad501b0fa85439da7cde8c8597","--oneline","-n1"]
-[2013-08-13 16:54:12 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..b5858e25b7f7c45564ab463ecf3e74ecd8979609","--oneline","-n1"]
-[2013-08-13 16:54:12 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..11a0c19d7c79f3e574b81295782ab2820caea232","--oneline","-n1"]
-[2013-08-13 16:54:12 NZST] read: git ["--git-dir=/home/walter/Photos/.git","--work-tree=/home/walter/Photos","log","refs/heads/git-annex..cad75ea77d513a24006ee0b56ff0aad12b7aa805","--oneline","-n1"]
-"""]]
diff --git a/doc/bugs/immediately_drops_files/comment_1_9ef6e694ef8a8eee7a42f88554475db7._comment b/doc/bugs/immediately_drops_files/comment_1_9ef6e694ef8a8eee7a42f88554475db7._comment
deleted file mode 100644
index 9d630e385..000000000
--- a/doc/bugs/immediately_drops_files/comment_1_9ef6e694ef8a8eee7a42f88554475db7._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.63"
- subject="comment 1"
- date="2013-08-24T16:41:04Z"
- content="""
-You are running the git annex assistant, which takes care of getting and dropping files as it's configured to do, and you are then going in and manually running `git annex get`. If the assistant sees a file's content has appeared, and that file is in a directory that it has been configured to not want the content of file in (the `archive` directory by default), it will immediately try to drop it.
-
-The only thing I don't understand is why the number of `..` in the symlink would change.
-"""]]
diff --git a/doc/bugs/immediately_drops_files/comment_2_76e4f8b73ab60b2540dd2a3e5379791d._comment b/doc/bugs/immediately_drops_files/comment_2_76e4f8b73ab60b2540dd2a3e5379791d._comment
deleted file mode 100644
index 274090c63..000000000
--- a/doc/bugs/immediately_drops_files/comment_2_76e4f8b73ab60b2540dd2a3e5379791d._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.63"
- subject="comment 2"
- date="2013-08-24T16:41:47Z"
- content="""
-BTW if you don't want the assistant to automatically get and drop files in your repository, you can edit the repository in the webapp and select \"manual mode\".
-"""]]
diff --git a/doc/bugs/immediately_drops_files/comment_3_788db083f5ba2e5589c3b952203ec954._comment b/doc/bugs/immediately_drops_files/comment_3_788db083f5ba2e5589c3b952203ec954._comment
deleted file mode 100644
index 9253caa1a..000000000
--- a/doc/bugs/immediately_drops_files/comment_3_788db083f5ba2e5589c3b952203ec954._comment
+++ /dev/null
@@ -1,21 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnSenxKyE_2Z6Wb-EBMO8FciyRywjx1ZiQ"
- nickname="Walter"
- subject="comment 3"
- date="2013-08-24T21:59:12Z"
- content="""
-I have all of my repositories set to either manual (all the computers), or full backup (the usb drive and s3).
-So, this is happening in a manual repository.
-
-
-Also, I still don't understand why it would be confused over the annex.numcopies setting (why does it claim it needs 2 copies, when numcopies is 1?)
-
-I just tested between desktop and laptop. File is also present in s3.
-
-File on desktop. Copy to laptop --> desktop drops (why? both are set to manual, and both have the other set as manual as well)
-
-Get on desktop. Works, it gets it from laptop. But then, desktop makes laptop drop it (why? again, both are manual repositories)
-
-
-
-"""]]
diff --git a/doc/bugs/immediately_drops_files/comment_4_425b79865eb77d69d0b7a71a14639f81._comment b/doc/bugs/immediately_drops_files/comment_4_425b79865eb77d69d0b7a71a14639f81._comment
deleted file mode 100644
index aacf2f2dc..000000000
--- a/doc/bugs/immediately_drops_files/comment_4_425b79865eb77d69d0b7a71a14639f81._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.2.134"
- subject="comment 4"
- date="2013-09-13T19:27:51Z"
- content="""
-> both are set to manual, and both have the other set as manual as well
-
-I'm not sure what you mean by that. Do you mean that when you run git annex vicfg, it is in group manual?
-"""]]
diff --git a/doc/bugs/immediately_drops_files/comment_5_7c9f660b6bcec31827a44a650e9d4622._comment b/doc/bugs/immediately_drops_files/comment_5_7c9f660b6bcec31827a44a650e9d4622._comment
deleted file mode 100644
index bb2569893..000000000
--- a/doc/bugs/immediately_drops_files/comment_5_7c9f660b6bcec31827a44a650e9d4622._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnSenxKyE_2Z6Wb-EBMO8FciyRywjx1ZiQ"
- nickname="Walter"
- subject="comment 5"
- date="2013-09-13T21:58:30Z"
- content="""
-I had checked in the webapps, and they were all set to manual.
-
-Looking in `git annex vicfg`, the groups are set to manual, and the content is set to standard.
-"""]]
diff --git a/doc/bugs/import_leaves_stray___96__.tmp__96___files_if_interrupted.mdwn b/doc/bugs/import_leaves_stray___96__.tmp__96___files_if_interrupted.mdwn
new file mode 100644
index 000000000..50037246d
--- /dev/null
+++ b/doc/bugs/import_leaves_stray___96__.tmp__96___files_if_interrupted.mdwn
@@ -0,0 +1,12 @@
+### Please describe the problem.
+
+I have found various `.tmp` files in a directory in which I performed various `git annex import` that failed because the destination disk was full.
+
+These files should be removed when import detects that its has no more space to proceed and exists.
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex 5.20140517.4 in Ubuntu 12.04.
+
+> The ".tmp" means this dropping is left by viaTmp, and I see why.
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/importfeed_fails__44___bad_feed_content.mdwn b/doc/bugs/importfeed_fails__44___bad_feed_content.mdwn
deleted file mode 100644
index 4ee312be0..000000000
--- a/doc/bugs/importfeed_fails__44___bad_feed_content.mdwn
+++ /dev/null
@@ -1,36 +0,0 @@
-### Please describe the problem.
-
-I just added a new podcast to my feeds list and it is complaining of "bad feed content" when trying to import.
-
-### What steps will reproduce the problem?
-
-1. git-annex importfeed --fast http://redecentralize.org/podcast/feed.rss
-3. see the sad error "warning: bad feed content"
-
-### What version of git-annex are you using? On what operating system?
-
-git-annex version: 4.20130827
-
-### Please provide any additional information below.
-
-[[!format sh """
-greg@x200s:~/annex/Podcasts$ git-annex importfeed --fast http://redecentralize.org/podcast/feed.rss
-(checking known urls...)
-importfeed http://redecentralize.org/podcast/feed.rss
---2013-09-09 15:05:17-- http://redecentralize.org/podcast/feed.rss
-Resolving redecentralize.org (redecentralize.org)... 204.232.175.78
-Connecting to redecentralize.org (redecentralize.org)|204.232.175.78|:80... connected.
-HTTP request sent, awaiting response... 200 OK
-Length: 4331 (4.2K) [text/xml]
-Saving to: ‘/tmp/feed12649’
-
-100%[==============================================================>] 4,331 --.-K/s in 0.08s
-
-2013-09-09 15:05:17 (56.0 KB/s) - ‘/tmp/feed12649’ saved [4331/4331]
-
-
- warning: bad feed content
-ok
-"""]]
-
-> upstream bug <https://github.com/sof/feed/issues/5> ; [[done]] --[[Joey]]
diff --git a/doc/bugs/importfeed_fails_when_using_the_option_--lazy_for_specific_podcast.mdwn b/doc/bugs/importfeed_fails_when_using_the_option_--lazy_for_specific_podcast.mdwn
deleted file mode 100644
index 0d6bcb05c..000000000
--- a/doc/bugs/importfeed_fails_when_using_the_option_--lazy_for_specific_podcast.mdwn
+++ /dev/null
@@ -1,77 +0,0 @@
-### Please describe the problem.
-
-importfeed responds with "failed" when using the option --lazy for specific podcast and no symbolic links get created. However when I don't use the --fast option the podcast enclosures do download and links get created as expected.
-
-### What steps will reproduce the problem?
-
-git-annex importfeed --fast http://schoolsucksproject.com/category/podcast/feed/
-
-### What version of git-annex are you using? On what operating system?
-
- Ubuntu
- git-annex version: 4.20130802-g1452ac3
- build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP
- local repository version: 3
- default repository version: 3
- supported repository versions: 3 4
- upgrade supported from repository versions: 0 1 2
-
-### Please provide any additional information below.
-
- git-annex importfeed --fast http://schoolsucksproject.com/category/podcast/feed/
- (checking known urls...)
- (Recording state in git...)
- importfeed http://schoolsucksproject.com/category/podcast/feed/
- --2013-09-28 00:27:25-- http://schoolsucksproject.com/category/podcast/feed/
- Resolving schoolsucksproject.com (schoolsucksproject.com)... 108.162.199.17, 108.162.198.17
- Connecting to schoolsucksproject.com (schoolsucksproject.com)|108.162.199.17|:80... connected.
- HTTP request sent, awaiting response... 200 OK
- Length: unspecified [text/xml]
- Saving to: `/tmp/feed16555'
-
- 2013-09-28 00:27:28 (217 KB/s) - `/tmp/feed16555' saved [423071]
-
- addurl School_Sucks_Project___Podcasts/238f__Presence_and_Productivity__6___Tools_For_A_Freed_Mind_and_A_Voluntary_Life_mp3
- unable to access url: http://schoolsucks.podomatic.com/enclosure/2013-09-21T08_21_33-07_00.mp3
- failed
- addurl School_Sucks_Project___Podcasts/238e__Presence_and_Productivity__5___Habit_Change_mp3
- unable to access url: http://schoolsucks.podomatic.com/enclosure/2013-09-18T20_40_40-07_00.mp3
- failed
- addurl School_Sucks_Project___Podcasts/238d__Presence_and_Productivity__4___Next_Actions__Projects__and_Procrastination_mp3
- unable to access url: http://schoolsucks.podomatic.com/enclosure/2013-09-16T10_10_06-07_00.mp3
- failed
- ...
-
-> (There is no --lazy option. You seem to mean --fast.)
->
-> This fine web server rejects the User-Agent used by curl:
-
-<pre>
-joey@darkstar:~>curl http://schoolsucks.podomatic.com/enclosure/2013-09-18T20_40_40-07_00.mp3
-Forbidden
-joey@darkstar:~>wget http://schoolsucks.podomatic.com/enclosure/2013-09-18T20_40_40-07_00.mp3
---2013-09-28 11:18:36-- http://schoolsucks.podomatic.com/enclosure/2013-09-18T20_40_40-07_00.mp3
-Resolving schoolsucks.podomatic.com (schoolsucks.podomatic.com)... 38.99.42.46, 38.110.155.212
-Connecting to schoolsucks.podomatic.com (schoolsucks.podomatic.com)|38.99.42.46|:80... connected.
-HTTP request sent, awaiting response... 200 OK
-<pre>
-
-> git-annex always uses curl for checking file sizes. So the workaround
-> is to use `git annex addurl --relaxed` on this url, which will skip
-> the size check. However, if you only had curl installed, `git-annex get`
-> would again try to use curl to get the file, and would still fail.
-> It only happens to successfully download because git-annex chose
-> to use wget and this site has apparently forgotten to block that.
->
-> I don't know if it makes sense for git-annex to vary the user-agent
-> to get around such (incredibly stupid) blocking. It could retry
-> with a random user-agent, but that could be construed as abusive
-> behavior; this site has asked us to go away. The only choices
-> that seem really defensible would be to add a --user-agent
-> switch, and/or to make git-annex set a default user agent header
-> of "git-annex", rather than relying on the curl/wget defaults.
-> --[[Joey]]
-
-> I've [[done]] what's discussed above, and verified it fixes
-> behavior for this specific server too.
-> --[[Joey]]
diff --git a/doc/bugs/importfeed_fails_when_using_the_option_--lazy_for_specific_podcast/comment_1_4ccfabbaf75e139b32f6fa6f7bc6a7fe._comment b/doc/bugs/importfeed_fails_when_using_the_option_--lazy_for_specific_podcast/comment_1_4ccfabbaf75e139b32f6fa6f7bc6a7fe._comment
deleted file mode 100644
index 26430ec91..000000000
--- a/doc/bugs/importfeed_fails_when_using_the_option_--lazy_for_specific_podcast/comment_1_4ccfabbaf75e139b32f6fa6f7bc6a7fe._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="Remy"
- ip="82.94.186.146"
- subject="Thank you very much"
- date="2013-09-30T08:49:33Z"
- content="""
-Thank you very much for looking into this! This issue was holding me back from using git-annex as my podcatcher. Hope it helps somebody else as well.
-"""]]
diff --git a/doc/bugs/importfeed_should_allow_pubdate_in_the_template.mdwn b/doc/bugs/importfeed_should_allow_pubdate_in_the_template.mdwn
deleted file mode 100644
index 44d25b02d..000000000
--- a/doc/bugs/importfeed_should_allow_pubdate_in_the_template.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-importfeed is a great feature, but it doesn't allow templating the filename with the publish date.
-
-I would suggest adding pubdate option, which would fix this problem.
-
-> duplicate of [[todo/importfeed: allow ${itemdate} with --template]] [[done]] --[[Joey]]
diff --git a/doc/bugs/importfeed_uses___34____95__foo__34___as_extension.mdwn b/doc/bugs/importfeed_uses___34____95__foo__34___as_extension.mdwn
deleted file mode 100644
index 5f09e2636..000000000
--- a/doc/bugs/importfeed_uses___34____95__foo__34___as_extension.mdwn
+++ /dev/null
@@ -1,17 +0,0 @@
-### Please describe the problem.
-When running importfeed on gitminutes <http://feeds.gitminutes.com/gitminutes-podcast> git-annex interprets the extension as "_mp3" rather than ".mp3" which means that renaming is needed for various audio players to accept the files.
-
-### What steps will reproduce the problem?
-git annex importfeed http://feeds.gitminutes.com/gitminutes-podcast --fast
-
-### What version of git-annex are you using? On what operating system?
-git-annex version: 4.20130802
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP
-local repository version: 3
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-
-on Debian Sid
-
-> Already fixed in git. [[done]] --[[Joey]]
diff --git a/doc/bugs/incremental_fsck_should_not_use_sticky_bit.mdwn b/doc/bugs/incremental_fsck_should_not_use_sticky_bit.mdwn
index 4662703cd..108ba5a6a 100644
--- a/doc/bugs/incremental_fsck_should_not_use_sticky_bit.mdwn
+++ b/doc/bugs/incremental_fsck_should_not_use_sticky_bit.mdwn
@@ -13,3 +13,5 @@ Create a shared repository (core.sharedrepository = group), let a different user
### What version of git-annex are you using? On what operating system?
Debian's 4.20131106~bpo70+1
+
+[[!tag confirmed]]
diff --git a/doc/bugs/incremental_fsck_should_not_use_sticky_bit/comment_7_f53d0542c9da38e0f6339df8c49c87db._comment b/doc/bugs/incremental_fsck_should_not_use_sticky_bit/comment_7_f53d0542c9da38e0f6339df8c49c87db._comment
new file mode 100644
index 000000000..6d6631bf0
--- /dev/null
+++ b/doc/bugs/incremental_fsck_should_not_use_sticky_bit/comment_7_f53d0542c9da38e0f6339df8c49c87db._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="stp"
+ ip="24.134.205.34"
+ subject="Any update"
+ date="2014-10-01T12:48:06Z"
+ content="""
+Any update?
+"""]]
diff --git a/doc/bugs/incremental_fsck_should_not_use_sticky_bit/comment_8_9f5acbc79b631a93d7cdf4ae37c07cab._comment b/doc/bugs/incremental_fsck_should_not_use_sticky_bit/comment_8_9f5acbc79b631a93d7cdf4ae37c07cab._comment
new file mode 100644
index 000000000..a63381ed0
--- /dev/null
+++ b/doc/bugs/incremental_fsck_should_not_use_sticky_bit/comment_8_9f5acbc79b631a93d7cdf4ae37c07cab._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""vache"""
+ date="2015-02-15T16:35:12Z"
+ content="""
+<https://github.com/dmbarbour/haskell-vcache>
+
+It uses LMDB, which is a C library, and its PVar is a variable named by a
+bytestring, so it's essentially a key/value store where the values can be
+arbitrary Haskell data types. Since git-annex already has Keys, and most
+of the need for the database is to look up some cached value for a Key,
+this seems like a pretty good fit!
+
+Unfortunately, "A VCache file may be opened by only one process at a time,
+and only once within said process."
+
+But, git-annex needs multiple read-only access, as many git-annex processes
+can run concurrently.
+"""]]
diff --git a/doc/bugs/interference_with_Dropbox_results_in_data_loss.mdwn b/doc/bugs/interference_with_Dropbox_results_in_data_loss.mdwn
index a60fd765e..baa59951c 100644
--- a/doc/bugs/interference_with_Dropbox_results_in_data_loss.mdwn
+++ b/doc/bugs/interference_with_Dropbox_results_in_data_loss.mdwn
@@ -46,3 +46,5 @@ Ff (Case Conflict (6))/ PG/ Zf (Case Conflict (3))/
# End of transcript or log.
"""]]
+
+> [[done]] --[[Joey]]
diff --git a/doc/bugs/internal_server_error:_unknown_UUID_on_webapp.mdwn b/doc/bugs/internal_server_error:_unknown_UUID_on_webapp.mdwn
deleted file mode 100644
index 307eed308..000000000
--- a/doc/bugs/internal_server_error:_unknown_UUID_on_webapp.mdwn
+++ /dev/null
@@ -1,147 +0,0 @@
-### Please describe the problem.
-
-I am having trouble using the webapp with a setup I did on the commandline that was working fine.
-
-I have two machines: one, a server called `marcos`, is available on the internetz and I cloned a repo from there into `markov`, a workstation that is hidden behind a NAT connexion (so I can't add it as a remote).
-
-It seems that because the remote is not locally available as a git remote, the webapp is freaking out because it doesn't recognize `markov` as a proper remote.
-
-### What steps will reproduce the problem?
-
-1. setup git annex locally (on `marcos`) in a repository (probably `git annex init; git annex direct; git annex add .` i somewhat followed [[tips/Git_annex_and_Calibre/]])
-2. `git clone` that repo on a remote, unaccessible (NAT'd) server (`markov`)
-3. start doing some git annex get, get tired, run the web app on `markov`
-4. let that run over there, go back to `marcos`
-5. be curious about what is going on on `markov`, run the webapp and enter the path to the repository created in step one when prompted (it's the first time i run the webapp)
-6. it starts up fine, but doesn't seem to detect `markov`, marking transfers as going to the remote named `unknown`
-7. click on the `unknown` link, crash
-8. go back to the dashboard, crash
-
-From there on, the webapp is pretty much crashed, starting it from scratch asks me if i want to create a git annex repo.
-
-### What version of git-annex are you using? On what operating system?
-
-4.20130921-gd4739c5 compiled and installed by hand on debian wheezy.
-
-### Please provide any additional information below.
-
-[[!format sh """
-# Here's everything that has been logged by the git-annex assistant, as well as by programs it has run.
-
-[2013-11-04 22:42:50 EST] main: starting assistant version 4.20130921-gd4739c5
-(merging synced/git-annex into git-annex...)
-(Recording state in git...)
-
- No known network monitor available through dbus; falling back to polling
-Already up-to-date.
-
-(scanning...) [2013-11-04 22:42:50 EST] Watcher: Performing startup scan
-04/Nov/2013:22:42:51 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)
-04/Nov/2013:22:42:52 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)
-04/Nov/2013:22:42:52 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)
-(Recording state in git...)
-(Recording state in git...)
-(started...)
-
- metadata.db still has writers, not adding
-[2013-11-04 22:42:59 EST] Committer: Adding cover.jpg Ars Techn..ibre.epub Cyberpres..ibre.epub cover.jpg cover.jpg Ars Techn..ibre.epub cover.jpg Democracy..ibre.epub cover.jpg and 11 other files
-add Calibre/Ars Technica [dim., 03 nov. 2013] (645)/cover.jpg (checksum...) ok
-add Calibre/Ars Technica [dim., 03 nov. 2013] (645)/Ars Technica [dim., 03 nov. 2013] - Calibre.epub (checksum...) ok
-add Calibre/Cyberpresse [lun., 04 nov. 2013] (647)/Cyberpresse [lun., 04 nov. 2013] - Calibre.epub (checksum...) ok
-add Calibre/Cyberpresse [lun., 04 nov. 2013] (647)/cover.jpg (checksum...) ok
-add Calibre/Ars Technica [sam., 02 nov. 2013] (642)/cover.jpg (checksum...) ok
-add Calibre/Ars Technica [sam., 02 nov. 2013] (642)/Ars Technica [sam., 02 nov. 2013] - Calibre.epub (checksum...) ok
-add Calibre/Democracy now! [lun., 04 nov. 2013] (649)/cover.jpg (checksum...) ok
-add Calibre/Democracy now! [lun., 04 nov. 2013] (649)/Democracy now! [lun., 04 nov. 2013] - Calibre.epub (checksum...) ok
-add Calibre/xkcd [lun., 04 nov. 2013] (646)/cover.jpg (checksum...) ok
-add Calibre/xkcd [lun., 04 nov. 2013] (646)/xkcd [lun., 04 nov. 2013] - Calibre.epub (checksum...) ok
-add Calibre/Cyberpresse [dim., 03 nov. 2013] (644)/cover.jpg (checksum...) ok
-add Calibre/Cyberpresse [dim., 03 nov. 2013] (644)/Cyberpresse [dim., 03 nov. 2013] - Calibre.epub (checksum...) ok
-add Calibre/Le Devoir [sam., 02 nov., 2013] (640)/cover.jpg (checksum...) ok
-add Calibre/Le Devoir [sam., 02 nov., 2013] (640)/Le Devoir [sam., 02 nov., 2013] - Calibre.epub (checksum...) ok
-add Calibre/Le Devoir [lun., 04 nov., 2013] (648)/cover.jpg (checksum...) ok
-add Calibre/Le Devoir [lun., 04 nov., 2013] (648)/Le Devoir [lun., 04 nov., 2013] - Calibre.epub (checksum...) ok
-add Calibre/Cyberpresse [sam., 02 nov. 2013] (641)/cover.jpg (checksum...) ok
-add Calibre/Cyberpresse [sam., 02 nov. 2013] (641)/Cyberpresse [sam., 02 nov. 2013] - Calibre.epub (checksum...) ok
-add Calibre/Le Devoir [dim., 03 nov., 2013] (643)/cover.jpg (checksum...) ok
-add Calibre/Le Devoir [dim., 03 nov., 2013] (643)/Le Devoir [dim., 03 nov., 2013] - Calibre.epub (checksum...) [2013-11-04 22:43:01 EST] Committer: Committing changes to git
-ok
-(Recording state in git...)
-(Recording state in git...)
-04/Nov/2013:22:43:51 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)
-04/Nov/2013:22:47:24 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)
-04/Nov/2013:22:47:24 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)
-04/Nov/2013:22:47:24 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)
-04/Nov/2013:22:52:29 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)
-04/Nov/2013:22:52:30 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)
-04/Nov/2013:22:52:30 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)
-04/Nov/2013:22:56:47 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)
-[2013-11-04 22:57:08 EST] Committer: Adding metadata.db-journal
-add metadata.db-journal (checksum...) [2013-11-04 22:57:08 EST] Committer: Committing changes to git
-[2013-11-04 22:57:09 EST] Committer: Adding metadata.db-journal metadata.db
-ok
-(Recording state in git...)
-(Recording state in git...)
-add metadata.db (checksum...) [2013-11-04 22:57:09 EST] Committer: Committing changes to git
-ok
-(Recording state in git...)
-(Recording state in git...)
-04/Nov/2013:22:57:12 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)
-04/Nov/2013:22:57:15 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)
-04/Nov/2013:22:57:18 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)
-04/Nov/2013:22:57:20 -0500 [Error#yesod-core] Unknown UUID @(yesod-core-1.2.4.2:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:485:5)
-"""]]
-
-> I wonder if this couldn't be related to [[cannot determine uuid for origin]], although in this case the remote is just not added to `.git/config`. --[[anarcat]]
-
-> This was fixed in commit 44e1524be53373ddbf28d643bedf5455433c2b2e
-> on Sep 29th. You should update. [[done]]
->
-> (It also sounds like your repository on markov is for some reason not
-> able to push its git repository to marcos. You might need to fix
-> something in your setup to get syncing working) --[[Joey]]
->
-> > Humm.. Weird. Upgrading fixes the crash, but `marcos` still sees only
-> > one repository. It sees some syncs going on from `unknown`, and when
-> > I click on that `unknown` link, I get to edit that repository, and
-> > it sees it as `here`. So I am not sure I understand what is going
-> > on here.
-> >
-> > (As for the repo on `markov`, it does sync properly:
-> >
-> > anarcat@desktop008:books$ git annex sync
-> > commit
-> > ok
-> > pull origin
-> > From anarc.at:/srv/books
-> > 3b4fa7b..c35b13e git-annex -> origin/git-annex
-> > ok
-> >
-> > Or rather - it doesn't fail. But it doesn't push!
-> >
-> > anarcat@desktop008:books$ git push
-> > Everything up-to-date
-> >
-> > Note that git on `marcos` is the 1.8.4 backport for some reason.
-> > I know that branch tracking changed with that release, maybe
-> > that's the problem? --[[anarcat]])
-> >
-> > > So yep, I confirm that even in 4.20131105-g8efdc1a, the webapp
-> > > doesn't find the `markov` remote properly, even though
-> > > `git annex status` can:
-> > >
-> > > $ git annex status
-> > > repository mode: direct
-> > > trusted repositories: 0
-> > > semitrusted repositories: 3
-> > > 00000000-0000-0000-0000-000000000001 -- web
-> > > a75cbbf7-e055-423e-b375-443e0552c9e2 -- here (anarcat@marcos:/srv/books)
-> > > aa500f29-42d9-4777-ae02-4a2c3d47db44 -- anarcat@markov:~/books
-> > >
-> > > I see transfers happening, but they go to "unknown". The link is:
-> > >
-> > > http://127.0.0.1:56577/config/repository/edit/UUID%20%22aa500f29-42d9-4777-ae02-4a2c3d47db44%22?auth=...
-> > >
-> > > -- [[anarcat]]
-> > >
-> > > > I have filed this as a separate bug to close the discussion properly here, sorry for the noise. :) see [[bugs/remote_not_showing_up_in_webapp]] --[[anarcat]]
diff --git a/doc/bugs/internal_server_error_creating_repo_on_ssh_server.mdwn b/doc/bugs/internal_server_error_creating_repo_on_ssh_server.mdwn
deleted file mode 100644
index 7235757bf..000000000
--- a/doc/bugs/internal_server_error_creating_repo_on_ssh_server.mdwn
+++ /dev/null
@@ -1,26 +0,0 @@
-What steps will reproduce the problem?
-
-I downloaded the os x assistant today.
-
-I'd previously installed it but hadn't linked it to another repo.
-
-I tried to create a remote repo on an ssh server using the assistant.
-
-What is the expected output? What do you see instead?
-
-Creating a remote repo or giving an understandable error message.
-
-What version of git-annex are you using? On what operating system?
-
-3.20121212
-OS X 10.8.2 (Mountain Lion)
-
-The remote machine is running debian stable.
-
-Please provide any additional information below.
-
-Internal Server Error
-user error (gpg ["--quiet","--trust-model","always","--gen-random","--armor","1","512"] exited 127)
-git-annex version 3.20121212
-
-> [[done]], see comments --[[Joey]]
diff --git a/doc/bugs/internal_server_error_creating_repo_on_ssh_server/comment_1_4a2c9338d5c779496049d78e29cf5cbd._comment b/doc/bugs/internal_server_error_creating_repo_on_ssh_server/comment_1_4a2c9338d5c779496049d78e29cf5cbd._comment
deleted file mode 100644
index 04b25ecc2..000000000
--- a/doc/bugs/internal_server_error_creating_repo_on_ssh_server/comment_1_4a2c9338d5c779496049d78e29cf5cbd._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlcxKZHglATIiJXD7jcxfYhkhgeFmcVFqE"
- nickname="James"
- subject="ignore"
- date="2013-01-24T16:33:27Z"
- content="""
-I had downloaded and installed the new version of git annex but not restarted the assistant. I rebooting my computer and started the new version (3.20130114) of the assistant and I was able to create a repo.
-"""]]
diff --git a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option.mdwn b/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option.mdwn
deleted file mode 100644
index d0ffaf083..000000000
--- a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option.mdwn
+++ /dev/null
@@ -1,28 +0,0 @@
-### Please describe the problem.
-I get this same internal server error when doing the encrypted rsync repo option:
-
- user error (gpg ["--quiet","--trust-model","always","--gen-random","--armor","1","512"] exited 2)
-
-### What steps will reproduce the problem?
-
-1. click Configuration > repositories
-2. click Remote Server
-3. On "Ready to add remote server" screen click Use an encrypted repo
-
-Error pops up:
-
-Internal Server Error
-
- user error (gpg ["--quiet","--trust-model","always","--gen-random","--armor","1","512"] exited 2)
-
-### What version of git-annex are you using? On what operating system?
-Currently using the file found here:
-
-http://downloads.kitenet.net/git-annex/OSX/current/10.7.5_Lion/
-
-Using MacOS 10.7.5 Lion
-
-[[!meta title="OSX gpg.conf auto-key-locate cert line breaks gpg in git-annex app"]]
-
-> [[done]]; all OSX builds now include a recent gpg that supports
-> this option. --[[Joey]]
diff --git a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_1_14a2f775f43a86129ce3649a06f8ba0b._comment b/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_1_14a2f775f43a86129ce3649a06f8ba0b._comment
deleted file mode 100644
index fd59b3e05..000000000
--- a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_1_14a2f775f43a86129ce3649a06f8ba0b._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.193"
- subject="comment 1"
- date="2013-06-30T20:36:02Z"
- content="""
-There should be a more useful error message in the repository's debug.log, please post it.
-"""]]
diff --git a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_2_7b277320fcffd8d03e0d3d31398eb571._comment b/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_2_7b277320fcffd8d03e0d3d31398eb571._comment
deleted file mode 100644
index a99040871..000000000
--- a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_2_7b277320fcffd8d03e0d3d31398eb571._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlpOeCs7zZLR-PBGPxUgjWlg7bwAAzQZyk"
- nickname="Seth"
- subject="comment 2"
- date="2013-06-30T21:32:54Z"
- content="""
-Here it is, with personal info redacted:
-
-(Recording state in git...)
-(encryption setup) gpg: /Users/bokeh/.gnupg/gpg.conf:233: invalid auto-key-locate list
-[2013-06-30 17:31:18 EDT] read: ssh-keygen [\"-F\",\"XXXXXXXXXXXX.com\"]
-[2013-06-30 17:31:18 EDT] read: ssh [\"-oNumberOfPasswordPrompts=0\",\"-n\",\"-p\",\"22\",\"XXXXXXXXXXXX@XXXXXXXXXXXX.com\",\"sh -c 'echo git-annex-probe loggedin;if which git-annex-shell; then echo git-annex-probe git-annex-shell; fi;if which rsync; then echo git-annex-probe rsync; fi;if which ~/.ssh/git-annex-shell; then echo git-annex-probe ~/.ssh/git-annex-shell; fi'\"]
-[2013-06-30 17:31:23 EDT] chat: ssh [\"XXXXXXXXXXXX@XXXXXXXXXXXX.com\",\"sh -c 'mkdir -p '\\"'\\"'annex'\\"'\\"'&&cd '\\"'\\"'annex'\\"'\\"''\"]
-(encryption setup) [2013-06-30 17:31:25 EDT] read: gpg [\"--quiet\",\"--trust-model\",\"always\",\"--gen-random\",\"--armor\",\"1\",\"512\"]
-gpg: /Users/bokeh/.gnupg/gpg.conf:233: invalid auto-key-locate list
-"""]]
diff --git a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_3_ba9dd8f2cc46640383d4339a3661571f._comment b/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_3_ba9dd8f2cc46640383d4339a3661571f._comment
deleted file mode 100644
index 59ac0d158..000000000
--- a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_3_ba9dd8f2cc46640383d4339a3661571f._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlpOeCs7zZLR-PBGPxUgjWlg7bwAAzQZyk"
- nickname="Seth"
- subject="comment 3"
- date="2013-06-30T21:36:39Z"
- content="""
-WOO!!! Found a \"solution\" here:
-
-http://eureka.ykyuen.info/2011/10/26/mac-gnupg-installation/
-
-Basically I commented out this line:
-
- auto-key-locate cert pka ldap hkp://keys.gnupg.net
-
-Any clue why this would solve the problem?
-"""]]
diff --git a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_4_274ae39d55545bde0be931d7a6c42c94._comment b/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_4_274ae39d55545bde0be931d7a6c42c94._comment
deleted file mode 100644
index e89e8449d..000000000
--- a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_4_274ae39d55545bde0be931d7a6c42c94._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.193"
- subject="comment 4"
- date="2013-07-02T16:52:43Z"
- content="""
-The question is, where did this line in .gnupg/gpg.conf come from?
-
-It seems likely to me that something else put it there, and perhaps that has a version of gpg that supports some of the options, like ldap, while the version of gpg bundled with git-annex for OSX Lion does not.
-
-(I tried enabling that line on a Mountian Lion machine, and the gpg in git-annex accepts it.)
-"""]]
diff --git a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_5_242291d46acc61bdfc112e3316de528b._comment b/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_5_242291d46acc61bdfc112e3316de528b._comment
deleted file mode 100644
index 12277738a..000000000
--- a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_5_242291d46acc61bdfc112e3316de528b._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlpOeCs7zZLR-PBGPxUgjWlg7bwAAzQZyk"
- nickname="Seth"
- subject="comment 5"
- date="2013-07-02T18:15:35Z"
- content="""
-Hmm.. well I've used gpg before, so maybe this put it there? https://gpgtools.org/
-
-Installed that well before using git-annex.
-"""]]
diff --git a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_6_76b936263e82ca6c415a16ed57e770b4._comment b/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_6_76b936263e82ca6c415a16ed57e770b4._comment
deleted file mode 100644
index 919027842..000000000
--- a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_6_76b936263e82ca6c415a16ed57e770b4._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 6"
- date="2013-07-04T08:32:54Z"
- content="""
-Just wondering if its because I have gnupg 1.1.0 on the Lion build machine thats causing the problem. I could try installing gnupg 2.0.19 if that will fix the problem. What version of gnupg is on the Mountain Lion build?
-"""]]
diff --git a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_7_9ccd3749fd9f32b0906c0b9428cc514f._comment b/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_7_9ccd3749fd9f32b0906c0b9428cc514f._comment
deleted file mode 100644
index 57ca6cb79..000000000
--- a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_7_9ccd3749fd9f32b0906c0b9428cc514f._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.193"
- subject="comment 7"
- date="2013-07-05T15:28:33Z"
- content="""
-@Jimmy it has version 2.0.19 of MacGPG2.
-
-I think an upgrade is a great idea!
-"""]]
diff --git a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_8_4e8982668b5044b2286d55c90adb9da3._comment b/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_8_4e8982668b5044b2286d55c90adb9da3._comment
deleted file mode 100644
index b91884642..000000000
--- a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_8_4e8982668b5044b2286d55c90adb9da3._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.254.222"
- subject="comment 8"
- date="2013-07-08T18:03:54Z"
- content="""
-Actually MacGPG caused problems on mountian lion and I have switched to gpg 1.4.13 from brew.
-"""]]
diff --git a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_9_aaf0ee250972d737a2ca57de5b5f1c0a._comment b/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_9_aaf0ee250972d737a2ca57de5b5f1c0a._comment
deleted file mode 100644
index 611c3ebb9..000000000
--- a/doc/bugs/internal_server_error_when_choosing_encrypted_rsync_repo_option/comment_9_aaf0ee250972d737a2ca57de5b5f1c0a._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkfHTPsiAcHEEN7Xl7WxiZmYq-vX7azxFY"
- nickname="Vincent"
- subject="comment 9"
- date="2013-07-24T13:26:07Z"
- content="""
-I was seeing this too in os/x until I upgraded to the version published on 2nd July.
-
-I was and am using macports gnupg, v1.4.13.
-
-Seems to be fixed for me now.
-"""]]
diff --git a/doc/bugs/interrupting_migration_causes_problems.mdwn b/doc/bugs/interrupting_migration_causes_problems.mdwn
deleted file mode 100644
index 68426e54a..000000000
--- a/doc/bugs/interrupting_migration_causes_problems.mdwn
+++ /dev/null
@@ -1,52 +0,0 @@
-Killing a migration from WORM to SHA256 with ^C breaks things; future attempts to do the migration fail:
-
- #!/bin/bash
-
- BASE=/tmp/migrate-bug
-
- set -x
-
- chmod -R +w $BASE
- rm -rf $BASE
- mkdir -p $BASE
- cd $BASE
-
- # create annex
- git init .
- git annex init
-
- # make a big (sparse) file and add it
- dd if=/dev/zero of=bigfile bs=1 count=0 seek=1G
- git annex add --backend WORM bigfile
- git commit -m 'added bigfile'
-
- # look at status
- git annex status
-
- # now migrate it, but kill migration during checksum
- # Simulate ^C by making a new process group and sending SIGINT
- setsid git annex migrate --backend SHA256 bigfile &
- PID=$!
- sleep 1
- kill -INT -$PID
- wait
-
- # look at status
- git annex status
-
- # this migration fails
- git annex migrate --backend SHA256 bigfile
-
- # but fsck says everything's OK
- git annex fsck
-
-The error:
-
- migrate bigfile
- git-annex: /tmp/migrate-bug/.git/annex/objects/K9/V1/WORM-s1073741824-m1321566308--bigfile/WORM-s1073741824-m1321566308--bigfile: createLink: already exists (File exists)
- failed
- git-annex: migrate: 1 failed
-
-> Fixed it to delete the stale temp file. [[done]]
->
-> Thanks for making such clear test cases, Jim! --[[Joey]]
diff --git a/doc/bugs/issues_with_non-posix_compatible_shells.mdwn b/doc/bugs/issues_with_non-posix_compatible_shells.mdwn
new file mode 100644
index 000000000..34fb72a1c
--- /dev/null
+++ b/doc/bugs/issues_with_non-posix_compatible_shells.mdwn
@@ -0,0 +1,41 @@
+### Please describe the problem.
+Some internals of git annex does not check if the shell it is running is Posix-compatible, ie. bash.
+
+I am using fish, and after setting up local pairing, and working, I switched back the login-shell to fish, and when syncing a file, I got this error, read from daemon.log:
+
+fish: Unknown command 'GIT_ANNEX_SHELL_DIRECTORY=/home/s/annex'. Did you mean to run ~/.ssh/git-annex-shell with a modified environment? Try 'env GIT_ANNEX_SHELL_DIRECTORY=/home/s/annex ~/.ssh/git-annex-shell...'. See the help section on the set command by typing 'help set'.
+Standard input: GIT_ANNEX_SHELL_DIRECTORY='/home/s/annex' ~/.ssh/git-annex-shell
+ ^
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+
+### What steps will reproduce the problem?
+Set up local pairing ( I believe having sh/bash as login terminal is necessary for this).
+Switch back to fish as login-shell with chsh -s /usr/bin/fish
+Add a file to either repository.
+
+### What version of git-annex are you using? On what operating system?
+[s@b ~]$ git annex version
+git-annex version: 5.20140320-g63535e3
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook external
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> [[fixed|done]] so
+>
+> I have not tried to make the assistant go back and fix up existing
+> `authorized_keys` lines. So if someone had been using a posix shell and
+> switched to fish, they'll hit this and need to fix it themselves. I judge
+> this is pretty small number of users. --[[Joey]]
diff --git a/doc/bugs/issues_with_non-posix_compatible_shells/comment_1_076948499a9d581a50da52b7690e5d4e._comment b/doc/bugs/issues_with_non-posix_compatible_shells/comment_1_076948499a9d581a50da52b7690e5d4e._comment
new file mode 100644
index 000000000..72b3e48e9
--- /dev/null
+++ b/doc/bugs/issues_with_non-posix_compatible_shells/comment_1_076948499a9d581a50da52b7690e5d4e._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://johan.kiviniemi.name/"
+ nickname="Johan"
+ subject="comment 1"
+ date="2014-04-02T08:40:17Z"
+ content="""
+FWIW, `env foo=bar cmd` would probably work on every system on which the `foo=bar cmd` invocation works now.
+"""]]
diff --git a/doc/bugs/javascript_functions_qouting_issue.mdwn b/doc/bugs/javascript_functions_qouting_issue.mdwn
deleted file mode 100644
index 7f16462f5..000000000
--- a/doc/bugs/javascript_functions_qouting_issue.mdwn
+++ /dev/null
@@ -1,44 +0,0 @@
-**What is the expected output? What do you see instead?**
-
-SyntaxError: missing ( before formal parameters
-
-function longpoll_"sidebar"() {
-
-reposi...c5e0ead (строка 5, столбец 18)
-
-
-**Please provide any additional information below.**
-
-functions have illegal characters in their names: *function longpoll_"sidebar"*
-
- <script>function longpoll_"sidebar"() {
- longpoll(longpoll_"sidebar"_url, '"sidebar"'
- , function() { setTimeout(longpoll_"sidebar", "10"); }
- , function() { webapp_disconnected(); }
- );
- }
- $(function() {
- $.get("/notifier/sidebar?auth=bd717e7499f2c42363719c833d3df2d25b77cf42184aacbcd0f969895911a0208ba17fd4f468c4b97274d5e3f7f419260e5df7d83d2e7642524a89325c5e0ead", function(url){
- longpoll_"sidebar"_url = url;
- setTimeout(longpoll_"sidebar", "10");
- });
- });
- function longpoll_"repolist"() {
- longpoll(longpoll_"repolist"_url, '"repolist"'
- , function() { setTimeout(longpoll_"repolist", "10"); }
- , function() { webapp_disconnected(); }
- );
- }
- $(function() {
- $.get("/notifier/repolist/RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True%7D?auth=bd717e7499f2c42363719c833d3df2d25b77cf42184aacbcd0f969895911a0208ba17fd4f468c4b97274d5e3f7f419260e5df7d83d2e7642524a89325c5e0ead", function(url){
- longpoll_"repolist"_url = url;
- setTimeout(longpoll_"repolist", "10");
- });
- });
-
-> This is already fixed in the 3.20130124 release. [[done]]
->
-> (Standalone builds of that release are not yet available for Mountian
-> Lion.
->
-> --[[Joey]]
diff --git a/doc/bugs/journal_commit_error_when_using_annex.mdwn b/doc/bugs/journal_commit_error_when_using_annex.mdwn
deleted file mode 100644
index fe1928229..000000000
--- a/doc/bugs/journal_commit_error_when_using_annex.mdwn
+++ /dev/null
@@ -1,21 +0,0 @@
-Sorry for the noise - notabug - [[done]]
-
-Setup:
-
-* git-annex version: 3.20120629 on Debian unstable.
-* external RAID1 array connected via usb
-
-I did: <code> git-annex add \<a specific album of ogg files\> </code>
-
-When it gets to the fourth song, there is a long delay and a bunch of "journal commit I/O error" from the kernel start appearing. Then GNOME helpfully tells me that my drive was just connected (implying that it thought it was disconnected momentarily)
-
-Log outputs:
-
-Both trying to add whole album, failing at song 4
-
-* <http://paste.mitechie.com/show/745/>
-* <http://paste.mitechie.com/show/746/>
-
-Just trying to add song 4 individually
-
-* <http://paste.mitechie.com/show/747/> (lots o' journal commit I/O errors that time)
diff --git a/doc/bugs/journal_commit_error_when_using_annex/comment_1_38f60ca3503ea1530c4bd2cde5c9182f._comment b/doc/bugs/journal_commit_error_when_using_annex/comment_1_38f60ca3503ea1530c4bd2cde5c9182f._comment
deleted file mode 100644
index de39249a8..000000000
--- a/doc/bugs/journal_commit_error_when_using_annex/comment_1_38f60ca3503ea1530c4bd2cde5c9182f._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
- nickname="Justin"
- subject="comment 1"
- date="2012-08-01T23:06:03Z"
- content="""
-That's not a git-annex error, your drive is dying.
-
-I'm sure if you tried just playing the song you'll get the same errors.
-"""]]
diff --git a/doc/bugs/journal_commit_error_when_using_annex/comment_2_6de455a67f37d9ee0a307a78123781bf._comment b/doc/bugs/journal_commit_error_when_using_annex/comment_2_6de455a67f37d9ee0a307a78123781bf._comment
deleted file mode 100644
index dd1e1c92b..000000000
--- a/doc/bugs/journal_commit_error_when_using_annex/comment_2_6de455a67f37d9ee0a307a78123781bf._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://creativecommons.net/greg/identity"
- ip="64.79.125.70"
- subject="comment 2"
- date="2012-08-01T23:22:03Z"
- content="""
-Probably right, the song in question is not playing fully and causing same error.
-
-Time to go into crises mode...
-"""]]
diff --git a/doc/bugs/json_is_broken_for_status.mdwn b/doc/bugs/json_is_broken_for_status.mdwn
deleted file mode 100644
index 0ce9dc7fa..000000000
--- a/doc/bugs/json_is_broken_for_status.mdwn
+++ /dev/null
@@ -1,34 +0,0 @@
-### Please describe the problem.
-
-bad json produced
-
-### What steps will reproduce the problem?
-
-
-[[!format sh """
-$> git annex status --json
-,"success":true}
-
-in another one
-
-$> git annex status --json
-D hardware/g-box/builds/mine/.#yoh-debug-lastdidnotconnect.txt
-,"success":true}
-"""]]
-
-### What version of git-annex are you using? On what operating system?
-
-Debian sid 5.20140116
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> Not all commands support json. Made this explict by making --json not be
-> a global option. Added --json support to status. [[done]]. --[[Joey]]
diff --git a/doc/bugs/local_pair_fails_if_non-ascii_characters_present_on_annex_path.mdwn b/doc/bugs/local_pair_fails_if_non-ascii_characters_present_on_annex_path.mdwn
new file mode 100644
index 000000000..92c3a525a
--- /dev/null
+++ b/doc/bugs/local_pair_fails_if_non-ascii_characters_present_on_annex_path.mdwn
@@ -0,0 +1,18 @@
+### Please describe the problem.
+
+When the annex directory has a non-ascii character (like a tilde) on its path, local pairing fails and a couple of instances of the following message appear on the log
+
+"illegal control characters in pairing message; ignoring"
+
+### What steps will reproduce the problem?
+
+* make a new annex repo named on /home/someone/Vídeos/blah/ (notice the i with a tilde) on two computers
+* try to pair them
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex version: 5.20141016-g26b38fd on Arch Linux
+
+git-annex version: 5.20140717 on Ubuntu 14.10
+
+> [[done]]; see comment
diff --git a/doc/bugs/local_pair_fails_if_non-ascii_characters_present_on_annex_path/comment_1_cf4f286c55d319bd71c2fc573e313d4b._comment b/doc/bugs/local_pair_fails_if_non-ascii_characters_present_on_annex_path/comment_1_cf4f286c55d319bd71c2fc573e313d4b._comment
new file mode 100644
index 000000000..1b9024745
--- /dev/null
+++ b/doc/bugs/local_pair_fails_if_non-ascii_characters_present_on_annex_path/comment_1_cf4f286c55d319bd71c2fc573e313d4b._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-09T20:02:56Z"
+ content="""
+I have not been able to reproduce this problem.
+
+I tried making the repository be in a directory named "dirĩ".
+I'm guessing that might contain the character that you refer to, which you
+unfortunately obfuscated right out of "/home/someone/Videos/blah/"
+
+But the code doing this sanity check was rather questionable -- it decoded
+the input as a raw C-formatted string, and looked for unwanted chars in that.
+That could be where the bug lay, since it decoded the same string twice,
+possibly differently. I've improved the code to not do that, and instead
+decode the message before sanity checking each field of it.
+
+I'm going to close this bug. If you can still reproduce it though, you need to
+
+1. tell me the actual filename
+2. enable debug logging, and send .git/annex/daemon.log when this happens.
+"""]]
diff --git a/doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX.mdwn b/doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX.mdwn
deleted file mode 100644
index f556d16e9..000000000
--- a/doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX.mdwn
+++ /dev/null
@@ -1,30 +0,0 @@
-What steps will reproduce the problem?
-
-leave the assistant running for multiple days
-
-What is the expected output?
-
-Glorious git-annex enlightenment
-
-What do you see instead?
-
-After ~2-3 days, there are hundreds of zombied git processes and the system is unable to fork new processes. This has occurred on 3 differently hardware configured mac's (macbooks and imacs) all running Mountain Lion 10.8.2 Build 12C3006
-In each case, once the system gets to this point, the only solution is forcing a reboot by holding down the power button as not even kill can spin up it's process.
-
-What version of git-annex are you using?
-
- git-annex version: 3.20130122
-
-On what operating system?
-
-Mac OSX 10.8.2 Mountain Lion Build 12C3006
-
-Please provide any additional information below.
-
-I'm really not sure what to look for next. Happy to take suggestions.
-
-[!tag /design/assistant]]
-
-> [[done]], I found the zombie leak; the ConfigMonitor was
-> leaving one zombie every time it checked a push/pull.
-> Not a fast leak, but over time they would add up. --[[Joey]]
diff --git a/doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX/comment_1_91c911c29fd126ddc365c561591f627e._comment b/doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX/comment_1_91c911c29fd126ddc365c561591f627e._comment
deleted file mode 100644
index d4e47b4eb..000000000
--- a/doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX/comment_1_91c911c29fd126ddc365c561591f627e._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.3.125"
- subject="comment 1"
- date="2013-02-05T19:27:35Z"
- content="""
-Are you sure about that version number?
-
-A lot of work was done to avoid excessive numbers of zombie processes back in version 3.20111011. There should be no zombies anymore.
-"""]]
diff --git a/doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX/comment_2_c316aead931a6a2377a4515bbb34ac5b._comment b/doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX/comment_2_c316aead931a6a2377a4515bbb34ac5b._comment
deleted file mode 100644
index 4172a7ee8..000000000
--- a/doc/bugs/long_running_assistant_causes_resource_starvation_on_OSX/comment_2_c316aead931a6a2377a4515bbb34ac5b._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmRFKwny4rArBaz-36xTcsJYqKIgdDaw5Q"
- nickname="Andrew"
- subject="comment 2"
- date="2013-02-05T21:33:12Z"
- content="""
-That was compiled from the source tree in git. I'm letting it run again today to see if I can see it happen.
-"""]]
diff --git a/doc/bugs/lsof__47__committer_thread_loops_occassionally.mdwn b/doc/bugs/lsof__47__committer_thread_loops_occassionally.mdwn
deleted file mode 100644
index 335581e20..000000000
--- a/doc/bugs/lsof__47__committer_thread_loops_occassionally.mdwn
+++ /dev/null
@@ -1,53 +0,0 @@
-I've noticed this to occur occassionally
-
-<pre>
-laplace:atest jtang$ ls
-1@ 2@ 3@ 4@ 5@ readme.txt@
-laplace:atest jtang$ git annex watch -d --foreground
-watch . [2012-07-29 11:49:26 IST] read: git ["--git-dir=/Users/jtang/sandbox/atest/.git","--work-tree=/Users/jtang/sandbox/atest","show-ref","git-annex"]
-[2012-07-29 11:49:26 IST] read: git ["--git-dir=/Users/jtang/sandbox/atest/.git","--work-tree=/Users/jtang/sandbox/atest","show-ref","--hash","refs/heads/git-annex"]
-[2012-07-29 11:49:26 IST] read: git ["--git-dir=/Users/jtang/sandbox/atest/.git","--work-tree=/Users/jtang/sandbox/atest","log","refs/heads/git-annex..f85faa60e73efabc2e92f837b19c3918d3ab030f","--oneline","-n1"]
-[2012-07-29 11:49:26 IST] chat: git ["--git-dir=/Users/jtang/sandbox/atest/.git","--work-tree=/Users/jtang/sandbox/atest","cat-file","--batch"]
-(scanning...) [2012-07-29 11:49:26 IST] Assistant: all threads started
-[2012-07-29 11:49:26 IST] Merger: watching /Users/jtang/sandbox/atest/.git/refs/heads/synced
-[2012-07-29 11:49:26 IST] TransferWatcher: watching for transfers
-[2012-07-29 11:49:26 IST] read: git ["--git-dir=/Users/jtang/sandbox/atest/.git","--work-tree=/Users/jtang/sandbox/atest","symbolic-ref","HEAD"]
-[2012-07-29 11:49:26 IST] call: git ["--git-dir=/Users/jtang/sandbox/atest/.git","--work-tree=/Users/jtang/sandbox/atest","add","--update"]
-[2012-07-29 11:49:26 IST] Merger: merging changes into Just refs/heads/master
-[2012-07-29 11:49:26 IST] call: git ["--git-dir=/Users/jtang/sandbox/atest/.git","--work-tree=/Users/jtang/sandbox/atest","merge","--no-edit","refs/heads/synced/master"]
-(started...) [2012-07-29 11:49:26 IST] Watcher: watching .
-[2012-07-29 11:49:26 IST] WebApp: running on port 60042
-Already up-to-date.
-[2012-07-29 11:49:26 IST] Watcher: add symlink ./1
-[2012-07-29 11:49:26 IST] chat: git ["--git-dir=/Users/jtang/sandbox/atest/.git","--work-tree=/Users/jtang/sandbox/atest","cat-file","--batch"]
-[2012-07-29 11:49:26 IST] Watcher: add symlink ./2
-[2012-07-29 11:49:26 IST] Watcher: add symlink ./3
-[2012-07-29 11:49:26 IST] Watcher: add symlink ./4
-[2012-07-29 11:49:26 IST] Watcher: add symlink ./5
-[2012-07-29 11:49:26 IST] Watcher: add symlink ./readme.txt
-[2012-07-29 11:49:27 IST] Committer: committing 6 changes
-(Recording state in git...)
-[2012-07-29 11:49:27 IST] feed: git ["--git-dir=/Users/jtang/sandbox/atest/.git","--work-tree=/Users/jtang/sandbox/atest","update-index","-z","--index-info"]
-[2012-07-29 11:49:27 IST] call: git ["--git-dir=/Users/jtang/sandbox/atest/.git","--work-tree=/Users/jtang/sandbox/atest","commit","--allow-empty-message","-m","","--allow-empty","--quiet"]
-[2012-07-29 11:49:28 IST] read: git ["--git-dir=/Users/jtang/sandbox/atest/.git","--work-tree=/Users/jtang/sandbox/atest","symbolic-ref","HEAD"]
-[2012-07-29 11:49:28 IST] Pusher: pushing to []
-[2012-07-29 11:49:28 IST] call: git ["--git-dir=/Users/jtang/sandbox/atest/.git","--work-tree=/Users/jtang/sandbox/atest","branch","-f","synced/master"]
-[2012-07-29 11:49:28 IST] read: git ["--git-dir=/Users/jtang/sandbox/atest/.git","--work-tree=/Users/jtang/sandbox/atest","symbolic-ref","HEAD"]
-[2012-07-29 11:49:28 IST] Merger: merging changes into Just refs/heads/master
-[2012-07-29 11:49:28 IST] call: git ["--git-dir=/Users/jtang/sandbox/atest/.git","--work-tree=/Users/jtang/sandbox/atest","merge","--no-edit","refs/heads/synced/master"]
-Already up-to-date.
-[2012-07-29 11:49:43 IST] Watcher: file added ./.gitignore
-[2012-07-29 11:49:43 IST] read: lsof ["-F0can","+d","/Users/jtang/sandbox/atest/.git/annex/tmp/"]
-[2012-07-29 11:49:44 IST] Committer: delaying commit of 0 changes
-[2012-07-29 11:49:45 IST] read: lsof ["-F0can","+d","/Users/jtang/sandbox/atest/.git/annex/tmp/"]
-[2012-07-29 11:49:46 IST] Committer: delaying commit of 0 changes
-[2012-07-29 11:49:47 IST] read: lsof ["-F0can","+d","/Users/jtang/sandbox/atest/.git/annex/tmp/"]
-[2012-07-29 11:49:48 IST] Committer: delaying commit of 0 changes
-[2012-07-29 11:49:49 IST] read: lsof ["-F0can","+d","/Users/jtang/sandbox/atest/.git/annex/tmp/"]
-</pre>
-
-I ran " git annex watch -d --foreground" to watch what was going one, and just created a .gitignore file and the the commiter/lsof thread just loops over and over.... I only noticed as my laptop battery had drained at somepoint when git-annex was running in the background.
-
-[[!meta title="assistant: lsof/committer thread loops occassionally"]]
-
-> Closing this since it doesn't seem reproducible. [[done]] --[[Joey]]
diff --git a/doc/bugs/lsof__47__committer_thread_loops_occassionally/comment_1_f8d1720aa26c719609720acf0772606e._comment b/doc/bugs/lsof__47__committer_thread_loops_occassionally/comment_1_f8d1720aa26c719609720acf0772606e._comment
deleted file mode 100644
index 521d2e0cb..000000000
--- a/doc/bugs/lsof__47__committer_thread_loops_occassionally/comment_1_f8d1720aa26c719609720acf0772606e._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.8.133"
- subject="probably a kqueue specific problem..."
- date="2012-07-29T18:10:12Z"
- content="""
-I don't think this would eat your battery badly; it's looping for sure, but with a hardcoded 1 second delay I put in to guard against it eating all CPU.
-
-I tried to fix this in commit c4023f785834bc237e5fcdb69e275bbae10dd40b, but I sort of doubt I did.
-I made one more commit that will at least tell us what file it is trying to check over and over with lsof.
-"""]]
diff --git a/doc/bugs/lsof__47__committer_thread_loops_occassionally/comment_2_0527569ea2924721d19dadcf4fe0ec5a._comment b/doc/bugs/lsof__47__committer_thread_loops_occassionally/comment_2_0527569ea2924721d19dadcf4fe0ec5a._comment
deleted file mode 100644
index 438fdcb3c..000000000
--- a/doc/bugs/lsof__47__committer_thread_loops_occassionally/comment_2_0527569ea2924721d19dadcf4fe0ec5a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.2.84"
- subject="comment 2"
- date="2012-09-19T17:33:20Z"
- content="""
-Have you seen this anymore?
-"""]]
diff --git a/doc/bugs/lsof__47__committer_thread_loops_occassionally/comment_3_5b67ff08a897ea3d2266ccc910ab4278._comment b/doc/bugs/lsof__47__committer_thread_loops_occassionally/comment_3_5b67ff08a897ea3d2266ccc910ab4278._comment
deleted file mode 100644
index a89b12596..000000000
--- a/doc/bugs/lsof__47__committer_thread_loops_occassionally/comment_3_5b67ff08a897ea3d2266ccc910ab4278._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 3"
- date="2012-09-19T20:17:00Z"
- content="""
-No, I've not noticed this recently, I would consider this issue to be closed for now.
-"""]]
diff --git a/doc/bugs/main_repo_not_available_on_downloads.kitenet.net.mdwn b/doc/bugs/main_repo_not_available_on_downloads.kitenet.net.mdwn
new file mode 100644
index 000000000..94bac023d
--- /dev/null
+++ b/doc/bugs/main_repo_not_available_on_downloads.kitenet.net.mdwn
@@ -0,0 +1,34 @@
+### Please describe the problem.
+
+The [downloads.kitenet.net](http://downloads.kitenet.net/) site is really a git annex repository, yet it is not possible to "git annex get" the files from there.
+
+I regularly have to do something like this to workaround that issue:
+
+ git annex addurl --file git-annex-standalone-amd64.tar.gz https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz
+
+Shouldn't this be done automatically?
+
+### What steps will reproduce the problem?
+
+ git clone https://downloads.kitenet.net/
+ cd downloads.kitenet.net/
+ git annex get git-annex/linux/
+
+### What version of git-annex are you using? On what operating system?
+
+5.20141024 on Debian Jessie.
+
+### Please provide any additional information below.
+
+Thanks! -- [[anarcat]]
+
+> <del>done; apparently some pebak. --[[Joey]]</del>
+
+> > it's baaaack! :) -- [[anarcat]]
+
+>>> Please don't reuse old bug reports for unrelated issues. It muddies the
+>>> waters.
+>>>
+>>> I've fixed git-update-server-info hook on the repository, fixing this
+>>> second problem.
+>>> [[done]] --[[Joey]]
diff --git a/doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_1_fb324a4b1ec440275eca32dae15155b3._comment b/doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_1_fb324a4b1ec440275eca32dae15155b3._comment
new file mode 100644
index 000000000..e0575dfba
--- /dev/null
+++ b/doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_1_fb324a4b1ec440275eca32dae15155b3._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""works for me"""
+ date="2014-11-10T17:05:26Z"
+ content="""
+<pre>
+joey@kite:~/tmp>git clone http://downloads.kitenet.net/.git/ dlCloning into 'dl'...
+Checking connectivity... done.
+joey@kite:~/tmp>cd dl
+joey@kite:~/tmp/dl>git annex get git-annex/linux/
+get git-annex/linux/current/git-annex-standalone-amd64.tar.gz (merging origin/git-annex origin/synced/git-annex into git-annex...)
+(Recording state in git...)
+(from origin...) --2014-11-10 13:04:38-- http://downloads.kitenet.net/.git//annex/objects/3V/g7/SHA256E-s46132091--9712ed0168c2562d504d71cb3efbcac5434acc2f604cabadc42728758b7b3bc6.tar.gz/SHA256E-s46132091--9712ed0168c2562d504d71cb3efbcac5434acc2f604cabadc42728758b7b3bc6.tar.gz
+Resolving downloads.kitenet.net (downloads.kitenet.net)... 107.170.31.195
+Connecting to downloads.kitenet.net (downloads.kitenet.net)|107.170.31.195|:80... connected.
+</pre>
+
+AFAICS, you can't clone http://downloads.kitenet.net/ without the .git/,
+so this makes me think you did something wrong.
+"""]]
diff --git a/doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_2_22f456996079c88865b67caca51dfed9._comment b/doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_2_22f456996079c88865b67caca51dfed9._comment
new file mode 100644
index 000000000..f155a33ca
--- /dev/null
+++ b/doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_2_22f456996079c88865b67caca51dfed9._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="anarcat"
+ subject="comment 2"
+ date="2014-11-11T21:16:02Z"
+ content="""
+huh! weird. i just made up those \"steps to reproduce\" from memory, as I cloned the repo a while ago. maybe i just forgot to sync it?
+
+sorry for the noise.
+"""]]
diff --git a/doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_3_a617644a0287e11e980448f129ec9b65._comment b/doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_3_a617644a0287e11e980448f129ec9b65._comment
new file mode 100644
index 000000000..0a17d14eb
--- /dev/null
+++ b/doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_3_a617644a0287e11e980448f129ec9b65._comment
@@ -0,0 +1,51 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ subject="comment 3"
+ date="2015-02-10T03:02:53Z"
+ content="""
+still doesn't work here:
+
+<pre>
+$ git clone https://downloads.kitenet.net/.git/
+Clonage dans 'downloads.kitenet.net'...
+Vérification de la connectivité... fait.
+anarcat@marcos:srv$
+anarcat@marcos:srv$ cd downloads.kitenet.net/
+anarcat@marcos:downloads.kitenet.net(master=)$ ls
+git-annex index.html misc talks tmp videos
+anarcat@marcos:downloads.kitenet.net(master=)$ cd git-annex/
+anarcat@marcos:git-annex(master=)$ ls
+android gpg-pubkey.asc linux mapa OSX presentation.svg windows
+anarcat@marcos:git-annex(master=)$ cd linux/
+anarcat@marcos:linux(master=)$ ls
+current
+anarcat@marcos:linux(master=)$ cd current/
+anarcat@marcos:current(master=)$ ls
+git-annex-standalone-amd64.tar.gz git-annex-standalone-amd64.tar.gz.sig git-annex-standalone-armel.tar.gz.info.sig git-annex-standalone-i386.tar.gz.info
+git-annex-standalone-amd64.tar.gz.info git-annex-standalone-armel.tar.gz git-annex-standalone-armel.tar.gz.sig git-annex-standalone-i386.tar.gz.info.sig
+git-annex-standalone-amd64.tar.gz.info.sig git-annex-standalone-armel.tar.gz.info git-annex-standalone-i386.tar.gz git-annex-standalone-i386.tar.gz.sig
+anarcat@marcos:current(master=)$ git annex get git-annex-standalone-amd64.tar.gz
+get git-annex-standalone-amd64.tar.gz (merging origin/git-annex origin/synced/git-annex into git-annex...)
+(Recording state in git...)
+(from origin...) --2015-02-09 22:01:00-- https://downloads.kitenet.net/.git//annex/objects/4j/Zv/SHA256E-s45566016--3eefaf3ba048a523c6e2539bc5cd7cd082dd077a083a516cd21ab0f907999e08.tar.gz/SHA256E-s45566016--3eefaf3ba048a523c6e2539bc5cd7cd082dd077a083a516cd21ab0f907999e08.tar.gz
+Résolution de downloads.kitenet.net (downloads.kitenet.net)… 107.170.31.195
+Connexion à downloads.kitenet.net (downloads.kitenet.net)|107.170.31.195|:443… connecté.
+requête HTTP transmise, en attente de la réponse… 404 Not Found
+2015-02-09 22:01:01 erreur 404 : Not Found.
+
+--2015-02-09 22:01:01-- https://downloads.kitenet.net/.git//annex/objects/0c0/1d5/SHA256E-s45566016--3eefaf3ba048a523c6e2539bc5cd7cd082dd077a083a516cd21ab0f907999e08.tar.gz/SHA256E-s45566016--3eefaf3ba048a523c6e2539bc5cd7cd082dd077a083a516cd21ab0f907999e08.tar.gz
+Résolution de downloads.kitenet.net (downloads.kitenet.net)… 107.170.31.195
+Connexion à downloads.kitenet.net (downloads.kitenet.net)|107.170.31.195|:443… connecté.
+requête HTTP transmise, en attente de la réponse… 404 Not Found
+2015-02-09 22:01:01 erreur 404 : Not Found.
+
+
+ Unable to access these remotes: origin
+
+ Try making some of these repositories available:
+ 840760dc-08f0-11e2-8c61-576b7e66acfd -- main repo [origin]
+ d7fa24ad-d104-4064-ad10-1078a4436e72 -- joey@elephant:~/lib/downloads
+failed
+git-annex: get: 1 failed
+</pre>
+"""]]
diff --git a/doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_4_ef630a6b299790ab63bc696d3c5ae0c9._comment b/doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_4_ef630a6b299790ab63bc696d3c5ae0c9._comment
new file mode 100644
index 000000000..b6450b2f1
--- /dev/null
+++ b/doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_4_ef630a6b299790ab63bc696d3c5ae0c9._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ subject="comment 4"
+ date="2015-02-10T03:04:20Z"
+ content="""
+plus it doesn't seem to be the same repo on both places:
+
+<pre>
+anarcat@marcos:current(master=)$ git annex addurl --file=git-annex-standalone-amd64.tar.gz https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz
+addurl git-annex-standalone-amd64.tar.gz
+ while adding a new url to an already annexed file, url does not have expected file size (use --relaxed to bypass this check) https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz
+failed
+git-annex: addurl: 1 failed
+</pre>
+
+something weird is going on.
+"""]]
diff --git a/doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_5_f1bba569b1ccd1d0b2b75a3a26224e65._comment b/doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_5_f1bba569b1ccd1d0b2b75a3a26224e65._comment
new file mode 100644
index 000000000..e96b5a637
--- /dev/null
+++ b/doc/bugs/main_repo_not_available_on_downloads.kitenet.net/comment_5_f1bba569b1ccd1d0b2b75a3a26224e65._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ subject="comment 5"
+ date="2015-02-10T03:06:40Z"
+ content="""
+oh, and i just noticed that .info file:
+
+<pre>
+anarcat@marcos:current(master *=)$ less git-annex-standalone-amd64.tar.gz.info
+GitAnnexDistribution {distributionUrl = \"https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz\", distributionKey = Key {keyName = \"3eefaf3ba048a523c6e2539bc5cd7cd082dd077a083a516cd21ab0f907999e08.tar.gz\", keyBackendName = \"SHA256E\", keySize = Just 45566016, keyMtime = Nothing, keyChunkSize = Nothing, keyChunkNum = Nothing}, distributionVersion = \"5.20150113\", distributionReleasedate = 2015-01-13 16:45:47.236515 UTC, distributionUrgentUpgrade = Nothing}
+</pre>
+
+definitely the wrong data there...
+"""]]
diff --git a/doc/bugs/make_SHA512E_the_default.mdwn b/doc/bugs/make_SHA512E_the_default.mdwn
deleted file mode 100644
index 46f18130c..000000000
--- a/doc/bugs/make_SHA512E_the_default.mdwn
+++ /dev/null
@@ -1,29 +0,0 @@
-What steps will reproduce the problem?
-
-As described in
-http://git-annex.branchable.com/backends/#comment-3c1cd45d2a015b4fc412dd813293ad7d
-, sha512 is faster. On my 64-bit system, the speed difference is about
-1.5times.
-
-What is the expected output? What do you see instead?
-
-
-What version of git-annex are you using? On what operating system?
-
-
-Please provide any additional information below.
-
-> You are free to change the default in your own annexes. This is very easy
-> to do: `echo '* annex.backend=SHA512E' > .gitattributes`
->
-> I don't anticipate moving to SHA512, because
->
-> 1. It makes `ls -l` really ugly. Each symlink takes like 4 lines
-> on an 80 column terminal.
-> 2. There are better hashes coming. Particularly SHA3. That should be
-> faster and/or more secure. And without adding so much length to the
-> hash.
->
-> --[[Joey]]
-
-[[done]]
diff --git a/doc/bugs/making_annex-merge_try_a_fast-forward.mdwn b/doc/bugs/making_annex-merge_try_a_fast-forward.mdwn
deleted file mode 100644
index 41a5a2a58..000000000
--- a/doc/bugs/making_annex-merge_try_a_fast-forward.mdwn
+++ /dev/null
@@ -1,35 +0,0 @@
-While merging the git-annex branch, annex-merge does not end up in a fast-forward even when it would be possible.
-But as sometimes annex-merge takes time, it would probably be worth it
-(but maybe I miss something with my workflow...).
-
-> I don't think a fast-forward will make things much faster.
->
-> git-annex needs its index file to be updated to reflect the merge.
-> With the union merge it does now, this can be accomplished by using
-> `git-diff-index` to efficiently get a list of files that have changed,
-> and only merge those changes into the index with `git-update-index`.
-> Then the index gets committed, generating the merge.
->
-> To fast-forward, it would just reset the git-annex branch to the new
-> head of the remote it's merging to. But then the index needs to be
-> updated to reflect this new head too. To do that needs the same method
-> described above, essentially (with the difference that it can replace
-> files in the index with the version from the git-annex branch, rather
-> than merging in the changes... but only if the index is known to be
-> already committed and have no other changes, which would require both
-> an attempt to commit it first, and
-> locking).
->
-> So will take basically the same amount of time, except
-> it would not need to commit the index at the end of the merge. The
-> most expensive work is the `git-diff-index` and `git-update-index`,
-> which are not avoided.
->
-> Although, perhaps fast-forward merge would use slightly
-> less space. --[[Joey]]
-
->> To avoid the ladder-merge between two repositories described at
->> <http://sprunge.us/LOMU>, seems a fast-forward should be detected and
->> written to git, even if the index is still updated the current way.
->> [[done]]
->> --[[Joey]]
diff --git a/doc/bugs/map_error_after_forget/comment_1_81001ecda65d882ea946611d1e18d59f._comment b/doc/bugs/map_error_after_forget/comment_1_81001ecda65d882ea946611d1e18d59f._comment
deleted file mode 100644
index 96d4bbffb..000000000
--- a/doc/bugs/map_error_after_forget/comment_1_81001ecda65d882ea946611d1e18d59f._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.154"
- subject="comment 1"
- date="2014-03-15T15:53:17Z"
- content="""
-This is a bit tricky because I'm not sure which repository the map is failing on. Probably the one that comes after /media/archive/annex in the `git remote list` output.
-
-If you go to each of the remotes and run `git config --null --list`, does it exit nonzero in any of them?
-"""]]
diff --git a/doc/bugs/map_error_after_forget/comment_2_24f3b6699f646ec0c20f3d4ca010e345._comment b/doc/bugs/map_error_after_forget/comment_2_24f3b6699f646ec0c20f3d4ca010e345._comment
deleted file mode 100644
index 6ac154ac1..000000000
--- a/doc/bugs/map_error_after_forget/comment_2_24f3b6699f646ec0c20f3d4ca010e345._comment
+++ /dev/null
@@ -1,28 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkBEmz5XoJVzN0u-0nOtpn7BBBDHsiLmxY"
- nickname="Eric"
- subject="comment 2"
- date="2014-03-15T16:17:18Z"
- content="""
-actually i removed .../xubuntu/... from the initial bug report, here is the text scraped directly from xterm.
-
-
-xubuntu@tab:/media/xubuntu/archive/annex$ git annex map --debug
-map /media/xubuntu/archive/annex ok
-[2014-03-15 11:10:17 CDT] read: git [\"config\",\"--null\",\"--list\"]
-[2014-03-15 11:10:17 CDT] read: git [\"config\",\"--null\",\"--list\"]
-[2014-03-15 11:10:17 CDT] read: git [\"config\",\"--null\",\"--list\"]
-
-git-annex: user error (git [\"config\",\"--null\",\"--list\"] exited 126)
-failed
-git-annex: map: 1 failed
-xubuntu@tab:/media/xubuntu/archive/annex$ git remote
-archive-backup
-bkup06-a81d-1000
-bkup08-da84-1000
-bkup19-0064
-master
-master-backup
-...
-no obvious errors on non-zero return codes from running `git config --null --list` on all remotes
-"""]]
diff --git a/doc/bugs/map_error_after_forget/comment_3_950e735c6d618e60cffffd1aebf06fd3._comment b/doc/bugs/map_error_after_forget/comment_3_950e735c6d618e60cffffd1aebf06fd3._comment
deleted file mode 100644
index c6c56a326..000000000
--- a/doc/bugs/map_error_after_forget/comment_3_950e735c6d618e60cffffd1aebf06fd3._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.154"
- subject="comment 3"
- date="2014-03-15T21:41:13Z"
- content="""
-Since this is map, it could be one of the remotes of /media/xubuntu/archive/annex, or one of the remotes of one of the remotes, etc. Pretty sure it's a local repository it's choking on, and not a ssh remote though.
-"""]]
diff --git a/doc/bugs/map_error_after_forget/comment_4_39327211f3fd1f9ed196a1f09cf68bdc._comment b/doc/bugs/map_error_after_forget/comment_4_39327211f3fd1f9ed196a1f09cf68bdc._comment
deleted file mode 100644
index 2795a9962..000000000
--- a/doc/bugs/map_error_after_forget/comment_4_39327211f3fd1f9ed196a1f09cf68bdc._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkBEmz5XoJVzN0u-0nOtpn7BBBDHsiLmxY"
- nickname="Eric"
- subject="comment 4"
- date="2014-03-16T04:52:19Z"
- content="""
-i don't have any ssh remotes yet. these are all local. so if it is one of the remotes, then what do i do to get it un-choked?
-"""]]
diff --git a/doc/bugs/map_error_after_forget/comment_6_471a2f5792dfc7cde4f1eb793984abf1._comment b/doc/bugs/map_error_after_forget/comment_6_471a2f5792dfc7cde4f1eb793984abf1._comment
deleted file mode 100644
index 3825b2e54..000000000
--- a/doc/bugs/map_error_after_forget/comment_6_471a2f5792dfc7cde4f1eb793984abf1._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.154"
- subject="comment 6"
- date="2014-03-17T19:30:37Z"
- content="""
-I was able to easily reproduce this kind of failure by making a git repository have a remote that did not exist.
-"""]]
diff --git a/doc/bugs/map_not_respecting_annex_ssh_options__63__.mdwn b/doc/bugs/map_not_respecting_annex_ssh_options__63__.mdwn
deleted file mode 100644
index 63dfec4ac..000000000
--- a/doc/bugs/map_not_respecting_annex_ssh_options__63__.mdwn
+++ /dev/null
@@ -1,38 +0,0 @@
-### What steps will reproduce the problem?
-
-1. Have a remote that uses annex-ssh-options to specify an sshkey which is needed to invoke git-annex-shell on that remote.
-2. Run git-annex map.
-
-### What is the expected output? What do you see instead?
-
-I expect to see a map without any errors complaining of commands not recognized.
-
-Instead I see:
-
- greg@x200s:~/Pictures/Photos$ git-annex map
- map /home/greg/Pictures/Photos ok
- map 60justin (sshing...)
- ok
- map rose (sshing...)
- fatal: unrecognized command 'cd '/home/greg/Media/Pictures/Photos/' && git config --null --list'
- git-annex-shell: git-shell failed
-
-relevant part of .git/config:
-
- [remote "rose"]
- url = greg@rose.makesad.us:/home/greg/Media/Pictures/Photos/
- fetch = +refs/heads/*:refs/remotes/rose/*
- annex-ssh-options = "-i /home/greg/.ssh/annex.x200s_rsa"
- annex-trustlevel = trusted
- annex-uuid = c0e4106e-2631-11e2-9749-1bfa37a61069
-
-
-### What version of git-annex are you using? On what operating system?
-
- git-annex version: 3.20121017
- local repository version: 3
- default repository version: 3
- supported repository versions: 3
- upgrade supported from repository versions: 0 1 2
-
-> [[done]], see comment --[[Joey]]
diff --git a/doc/bugs/map_not_respecting_annex_ssh_options__63__/comment_1_c63a1ed5909d53f116f06e60aba74dc6._comment b/doc/bugs/map_not_respecting_annex_ssh_options__63__/comment_1_c63a1ed5909d53f116f06e60aba74dc6._comment
deleted file mode 100644
index 029373945..000000000
--- a/doc/bugs/map_not_respecting_annex_ssh_options__63__/comment_1_c63a1ed5909d53f116f06e60aba74dc6._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.72"
- subject="comment 1"
- date="2012-12-05T17:00:21Z"
- content="""
-To map a remote, it needs to run `git config --list` on the remote, and the remote may be a non-git-annex git remote. So mapping does a regular ssh first, and cannot use annex.ssh-options (because that would dump it into git-annex-shell). If that fails, it *does* fall back to using git-annex-shell, and will then use annex.ssh-options.
-
-So, not a bug, I believe.
-"""]]
diff --git a/doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build.mdwn b/doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build.mdwn
deleted file mode 100644
index 52e724095..000000000
--- a/doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build.mdwn
+++ /dev/null
@@ -1,38 +0,0 @@
-### Please describe the problem.
-
-1 thumb drive became corrupted when using as a server on raspberry pi, and 2 microSD cards when using as a client in my phone. Both happened during syncing largish repository. (corrupted = permanent input/output error)
-
-* Put git annex on my android phone with a 64GB (FAT) micro SD, fired up git annex, it got reported as corrupted half on hour later, reformatting worked but got reported as corrupted again.
-
-* Put git annex assistant on my raspberry pi, one of the thumbdrives in my LVM (ext4) got corrupted shortly after I began using the assistant. I replaced them with a cheap real SSD drive, and had no problem since.
-
-* Put git annex back on my android phone. Kept it going for an extended sync session, but it never started syncing. I kept it going for an hour or so, and my new 32GB microSD (FAT) got corrupted.
-
-The pattern is nothing like proof, but it seems to be too regular to be completely coincidental. The pattern seems to be: ARM + (SDcard|USBstick) + Assistant = drive corruption.
-
-My guess is that the ARM build might have some kind of unlucky write pattern or loop that causes increased wear, but I know very little of the interna.
-
-### What steps will reproduce the problem?
-
-* Get a raspberry pi and a USB stick, or an android phone and a microSD card
-* Get an [ARM build of the assistant](https://github.com/tradloff/git-annex-RPi)
-* Sync a largish (12GB) repository
-
-### What version of git-annex are you using? On what operating system?
-
-4.20131002 on the pi, 20131024 for the 32GB SD, and 20131015 for the 64GB SD.
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-Unfortunately, daemon.log was unrecoverable along with the other files on the SD card.
-
-I can try and autosync the daemon.log somewhere if I happen to come along a bunch of scrap flash storage (not impossible).
-
-# End of transcript or log.
-"""]]
-
-[[done]]
diff --git a/doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build/comment_1_0527581ea60d28bb28504fa2a355ed87._comment b/doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build/comment_1_0527581ea60d28bb28504fa2a355ed87._comment
deleted file mode 100644
index 52324a5a8..000000000
--- a/doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build/comment_1_0527581ea60d28bb28504fa2a355ed87._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnZEanlyzay_QlEAL0CWpyZcRTyN7vay8U"
- nickname="Carlo"
- subject="salvaged logs"
- date="2013-10-31T10:00:40Z"
- content="""
-The previously corrupt memory drive magically reappeared, so this might indicate a phone bug. In any case, I was able to salvage the logs from the phone.
-
-[Salvaged Logs](http://capocasa.name/android-4.2-lenovo-daemonlog.tar.gz)
-"""]]
diff --git a/doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build/comment_2_926a87b60e20d286d49639c8dad13a1a._comment b/doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build/comment_2_926a87b60e20d286d49639c8dad13a1a._comment
deleted file mode 100644
index 878e8fd7d..000000000
--- a/doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build/comment_2_926a87b60e20d286d49639c8dad13a1a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.47"
- subject="correlation does not imply causation"
- date="2013-11-01T16:37:31Z"
- content="""
-I've been using git-annex on thumbdrives for years without problems. It seems more likely to me that you have a general problem with your hardware than that one program that does nothing special is somehow at fault.
-"""]]
diff --git a/doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build/comment_3_c509fba1a9adacfd26a2bd12b4aea988._comment b/doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build/comment_3_c509fba1a9adacfd26a2bd12b4aea988._comment
deleted file mode 100644
index 01ab119d2..000000000
--- a/doc/bugs/microsd__47__thumbdrives_seem_to_die_when_using_the_ARM_build/comment_3_c509fba1a9adacfd26a2bd12b4aea988._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnZEanlyzay_QlEAL0CWpyZcRTyN7vay8U"
- nickname="Carlo"
- subject="comment 3"
- date="2013-11-02T17:29:55Z"
- content="""
-True, and good to know. Didn't necessarily want to trigger a big bug hunt here anyway, just some data/logs in case any more correlation comes up.
-"""]]
diff --git a/doc/bugs/minor_bug:_errors_are_not_verbose_enough.mdwn b/doc/bugs/minor_bug:_errors_are_not_verbose_enough.mdwn
deleted file mode 100644
index a6620f425..000000000
--- a/doc/bugs/minor_bug:_errors_are_not_verbose_enough.mdwn
+++ /dev/null
@@ -1,26 +0,0 @@
-Current:
-
- % git annex status
- git-annex: unknown command
-
-Better:
-
- % git annex status
- git-annex: status: unknown command
-
-Current:
-
- % git annex fsck
- [...]
- git-annex: 18 failed
-
-Better:
-
- % git annex fsck
- [...]
- git-annex: fsck: 18 failed
-
-
-etc pp.
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/missing_dependency_in_git-annex-3.20130216.mdwn b/doc/bugs/missing_dependency_in_git-annex-3.20130216.mdwn
deleted file mode 100644
index 7c7664c67..000000000
--- a/doc/bugs/missing_dependency_in_git-annex-3.20130216.mdwn
+++ /dev/null
@@ -1,29 +0,0 @@
-What steps will reproduce the problem?
-
-build git-annex-3.20130216 on OS X lion
-
-
-What is the expected output? What do you see instead?
-
-successful compile; error was:
-
-```
-Annex/UUID.hs:30:8:
- Could not find module `System.Random'
- It is a member of the hidden package `random-1.0.1.1'.
- Perhaps you need to add `random' to the build-depends in your .cabal file.
- Use -v to see a list of the files searched for.
-```
-
-
-What version of git-annex are you using? On what operating system?
-
-building git-annex-3.20130216 on OS X Lion
-
-
-Please provide any additional information below.
-
-
-adding 'random' to the BuildDepends in git-annex.cabal does indeed fix the error.
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/missing_kde__47__gnome_menu_item..mdwn b/doc/bugs/missing_kde__47__gnome_menu_item..mdwn
deleted file mode 100644
index c09cdf374..000000000
--- a/doc/bugs/missing_kde__47__gnome_menu_item..mdwn
+++ /dev/null
@@ -1,29 +0,0 @@
-What steps will reproduce the problem?
- apt-get install git-annex
-
-
-
-What is the expected output?
- a menu item at kde or gnome at internet> Git Annex , as
-http://git-annex.branchable.com/assistant/ shows.
-
- What do you see instead? no menu item.
-
-
-What version of git-annex are you using?
-Version: 1:1.7.10.4-1+wheezy1
-
- On what operating system?
-Wheezy
-
-
- Also
-I just installed git-annex on a squeeze system and had the same result.
-
-same with ubuntu precise 12.04
-
-> git-annex ships a /usr/share/applications/git-annex.desktop
-> file that provies the menu item. But there has never been a version
-> 1.7.10. I suspect this is user error; installing a version of git-annex
-> that predates the git-annex assistant and expecting it to have the
-> assistant and its menu item. [[done]] --[[Joey]]
diff --git a/doc/bugs/misuse_of_--git-dir_might_destroy_a_git_repository_completely.mdwn b/doc/bugs/misuse_of_--git-dir_might_destroy_a_git_repository_completely.mdwn
new file mode 100644
index 000000000..d7cccabeb
--- /dev/null
+++ b/doc/bugs/misuse_of_--git-dir_might_destroy_a_git_repository_completely.mdwn
@@ -0,0 +1,34 @@
+### Please describe the problem.
+Doing a git annex command while passing a bad --git-dir can result in the .git directory being deleted. I've never experienced it with plain git, so I assume that it comes for annex.
+
+### What steps will reproduce the problem?
+
+[[!format sh """
+$ mkdir annex_destroyed_my_git_directory
+$ cd annex_destroyed_my_git_directory
+$ git init
+$ git annex init
+$ ls -a
+. .. .git
+$ git --git-dir=$PWD annex find
+fatal: Not a git repository: '/home/doudou/tmp/annex_destroyed_my_git_directory'
+$ ls -a
+. .. config
+"""]]
+
+### What version of git-annex are you using? On what operating system?
+dpkg -l git-annex reports 5.20141024
+
+I am running Debian sid.
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/misuse_of_--git-dir_might_destroy_a_git_repository_completely/comment_1_5c0bdeb0e1fc6b2d524e5c33ff80ce8a._comment b/doc/bugs/misuse_of_--git-dir_might_destroy_a_git_repository_completely/comment_1_5c0bdeb0e1fc6b2d524e5c33ff80ce8a._comment
new file mode 100644
index 000000000..8edd41aa7
--- /dev/null
+++ b/doc/bugs/misuse_of_--git-dir_might_destroy_a_git_repository_completely/comment_1_5c0bdeb0e1fc6b2d524e5c33ff80ce8a._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""yikes!"""
+ date="2014-11-04T21:47:07Z"
+ content="""
+I'm very sorry you encountered this bug. I'd like to do anything
+possible to recover your repository. While investigating it, it looks
+like, when the repository is not a fresh and empty repo, it doesn't
+actually get completely nuked. Instead, the contents of the .git directory,
+including annexed objects, is left in "removeme". It should be possible to
+mostly recover from that. I can try to walk you through it if necessary.
+
+I know exactly what the cause of this bug is. It's a workaround for a bug
+in some by now quite old versions of git-annex (from last year). That old bug
+caused a .git/.git directory to be created, and so this workaround looks
+for $GIT_DIR/.git and does what turn out to be horrible things in this
+case.
+
+So, I have immediately removed that old workaround, so noone else will
+encounter this.
+"""]]
diff --git a/doc/bugs/modified_permissions_persist_after_unlock__44___commit.mdwn b/doc/bugs/modified_permissions_persist_after_unlock__44___commit.mdwn
new file mode 100644
index 000000000..907ae99b4
--- /dev/null
+++ b/doc/bugs/modified_permissions_persist_after_unlock__44___commit.mdwn
@@ -0,0 +1,43 @@
+### Please describe the problem.
+
+Modifying an annexed file with unlock then commit leaves the link with permissions 777 and git status reports a typechange, which makes checkout impossible. Resolves by running git unlock on the file.
+
+### What steps will reproduce the problem?
+
+echo foo > test.txt
+git annex add test.txt
+git commit -a -m "first"
+git annex unlock test.txt
+echo foobar > test.txt
+git commit -a -m "second"
+
+git status (notice typechange message)
+
+git unlock test.txt (corrects and retains both versions)
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex version: 3.20120406
+local repository version: 3
+default repository version: 3
+supported repository versions: 3
+upgrade supported from repository versions: 0 1 2
+
+git version 1.7.9.5
+
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+[[!tag confirmed]]
+[[!meta title="git commit of unlocked file leaves typechange staged in index"]]
+
+> [[fixed|done]]; git-annex pre-commit will block such commits from being
+> made. Git devs didn't seem to have a way to improve its behavior. --[[Joey]]
diff --git a/doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_1_875ca12936d4b4505f2e280a454fe558._comment b/doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_1_875ca12936d4b4505f2e280a454fe558._comment
new file mode 100644
index 000000000..535c20e4d
--- /dev/null
+++ b/doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_1_875ca12936d4b4505f2e280a454fe558._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 1"
+ date="2014-10-06T15:47:39Z"
+ content="""
+I am unable to reproduce any problem with the steps you gave. I don't see any typechange message, and would not expect one. Perhaps your repository is lacking a .git/hooks/pre-commit script to run git-annex when you use `git commit -a`?
+
+It's not clear to me what problem you experienced, beyond the typechange message that I don't see.
+
+> git unlock test.txt (corrects and retains both versions)
+
+I don't understand that line at all. `git unlock` is not a valid git command, and what does \"corrects and retains both versions\" mean?
+
+Please provide an actual trascript of the problem, rather than the unclear description.
+"""]]
diff --git a/doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_2_59f68098fa6edb2fe8902b120fda0280._comment b/doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_2_59f68098fa6edb2fe8902b120fda0280._comment
new file mode 100644
index 000000000..7938ad9ad
--- /dev/null
+++ b/doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_2_59f68098fa6edb2fe8902b120fda0280._comment
@@ -0,0 +1,94 @@
+[[!comment format=sh
+ username="https://www.google.com/accounts/o8/id?id=AItOawn0hu_TPhLcUM1Ivvn7iIoZ_iD3g_5WDcs"
+ nickname="Greg"
+ subject="comment 2"
+ date="2014-10-06T17:06:27Z"
+ content="""
+ubuntu@ip-10-170-13-124:~$ mkdir annex
+ubuntu@ip-10-170-13-124:~$ cd annex
+ubuntu@ip-10-170-13-124:~/annex$ ls
+ubuntu@ip-10-170-13-124:~/annex$ git init .
+Initialized empty Git repository in /home/ubuntu/annex/.git/
+ubuntu@ip-10-170-13-124:~/annex$ git annex init \"test annex\"
+init test annex ok
+ubuntu@ip-10-170-13-124:~/annex$ echo \"foo\" > test.txt
+ubuntu@ip-10-170-13-124:~/annex$ ls
+test.txt
+ubuntu@ip-10-170-13-124:~/annex$ ls -al
+total 16
+drwxrwxr-x 3 ubuntu ubuntu 4096 Oct 6 16:43 .
+drwxr-xr-x 7 ubuntu ubuntu 4096 Oct 6 16:42 ..
+drwxrwxr-x 9 ubuntu ubuntu 4096 Oct 6 16:42 .git
+-rw-rw-r-- 1 ubuntu ubuntu 4 Oct 6 16:43 test.txt
+ubuntu@ip-10-170-13-124:~/annex$ git annex add test.txt
+add test.txt (checksum...) ok
+(Recording state in git...)
+ubuntu@ip-10-170-13-124:~/annex$ ls -al
+total 16
+drwxrwxr-x 3 ubuntu ubuntu 4096 Oct 6 16:48 .
+drwxr-xr-x 7 ubuntu ubuntu 4096 Oct 6 16:42 ..
+drwxrwxr-x 9 ubuntu ubuntu 4096 Oct 6 16:48 .git
+lrwxrwxrwx 1 ubuntu ubuntu 176 Oct 6 16:43 test.txt -> .git/annex/objects/8Z/1J/SHA256-s4--b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c/SHA256-s4--b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c
+ubuntu@ip-10-170-13-124:~/annex$ git commit test.txt
+Aborting commit due to empty commit message.
+ubuntu@ip-10-170-13-124:~/annex$ git commit test.txt -m first
+[master (root-commit) 38a8e18] first
+ Committer: Ubuntu <ubuntu@ip-10-170-13-124.us-west-1.compute.internal>
+Your name and email address were configured automatically based
+on your username and hostname. Please check that they are accurate.
+You can suppress this message by setting them explicitly:
+
+ git config --global user.name \"Your Name\"
+ git config --global user.email you@example.com
+
+After doing this, you may fix the identity used for this commit with:
+
+ git commit --amend --reset-author
+
+ 1 file changed, 1 insertion(+)
+ create mode 120000 test.txt
+ubuntu@ip-10-170-13-124:~/annex$ ls -al
+total 16
+drwxrwxr-x 3 ubuntu ubuntu 4096 Oct 6 16:48 .
+drwxr-xr-x 7 ubuntu ubuntu 4096 Oct 6 16:42 ..
+drwxrwxr-x 9 ubuntu ubuntu 4096 Oct 6 16:49 .git
+lrwxrwxrwx 1 ubuntu ubuntu 176 Oct 6 16:43 test.txt -> .git/annex/objects/8Z/1J/SHA256-s4--b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c/SHA256-s4--b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c
+ubuntu@ip-10-170-13-124:~/annex$ git annex unlock test.txt
+unlock test.txt (copying...) ok
+ubuntu@ip-10-170-13-124:~/annex$ cat test.txt
+foo
+ubuntu@ip-10-170-13-124:~/annex$ echo foobar > test.txt
+ubuntu@ip-10-170-13-124:~/annex$ git commit test.txt -m second
+add test.txt (checksum...) ok
+ok
+(Recording state in git...)
+[master f265461] second
+ Committer: Ubuntu <ubuntu@ip-10-170-13-124.us-west-1.compute.internal>
+Your name and email address were configured automatically based
+on your username and hostname. Please check that they are accurate.
+You can suppress this message by setting them explicitly:
+
+ git config --global user.name \"Your Name\"
+ git config --global user.email you@example.com
+
+After doing this, you may fix the identity used for this commit with:
+
+ git commit --amend --reset-author
+
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+ubuntu@ip-10-170-13-124:~/annex$ git status
+# On branch master
+# Changes to be committed:
+# (use \"git reset HEAD <file>...\" to unstage)
+#
+# typechange: test.txt
+#
+# Changes not staged for commit:
+# (use \"git add <file>...\" to update what will be committed)
+# (use \"git checkout -- <file>...\" to discard changes in working directory)
+#
+# typechange: test.txt
+#
+ubuntu@ip-10-170-13-124:~/annex$
+
+"""]]
diff --git a/doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_3_22df91abd8c025000e67bdcef891de3b._comment b/doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_3_22df91abd8c025000e67bdcef891de3b._comment
new file mode 100644
index 000000000..4b0270178
--- /dev/null
+++ b/doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_3_22df91abd8c025000e67bdcef891de3b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn0hu_TPhLcUM1Ivvn7iIoZ_iD3g_5WDcs"
+ nickname="Greg"
+ subject="comment 3"
+ date="2014-10-06T17:07:46Z"
+ content="""
+Looks like its doing it when you specifically commit a filename.
+"""]]
diff --git a/doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_4_ecf84eeb4feddafcfa7ba7d4a2f164b1._comment b/doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_4_ecf84eeb4feddafcfa7ba7d4a2f164b1._comment
new file mode 100644
index 000000000..4ccf2a3a9
--- /dev/null
+++ b/doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_4_ecf84eeb4feddafcfa7ba7d4a2f164b1._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 4"
+ date="2014-10-09T20:43:34Z"
+ content="""
+Ah, ok. git's index has the file listed as not being a symlink, because `git commit $file` stages it in the index that way. Running `git reset --hard` will fix git's index.
+
+This problem is avoided if you `git annex add $file` before committing. Which is generally a good idea
+for other reasons, including avoiding staging a potentially huge file's contents in the git index in the first place.
+
+git-annex's pre-commit hook should probably update the git index for the committed files, replacing the staged full file contents with the git-annex symlink. That would avoid this problem.
+"""]]
diff --git a/doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_5_2ea1d78ec8a652a53391969e43bcb6f0._comment b/doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_5_2ea1d78ec8a652a53391969e43bcb6f0._comment
new file mode 100644
index 000000000..72495fe66
--- /dev/null
+++ b/doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_5_2ea1d78ec8a652a53391969e43bcb6f0._comment
@@ -0,0 +1,39 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 5"
+ date="2014-10-10T00:01:54Z"
+ content="""
+Actually, the pre-commit hook does stage the annexed symlink into the index. But it seems that `git commit $file` causes the pre-commit hook's changes to the index to be partially ignored, in a way that `git commit -a` does not.
+
+While the pre-commit hook is running, `git commit -a` sets `GIT_INDEX_FILE=index.lock`, while `git commit $file` instead sets `GIT_INDEX_FILE=next-index-$pid.lock`. git's builtin/commit.c refers to this latter file as the \"false index\". Full comment from git:
+
+<pre>
+ /*
+ * A partial commit.
+ *
+ * (0) find the set of affected paths;
+ * (1) get lock on the real index file;
+ * (2) update the_index with the given paths;
+ * (3) write the_index out to the real index (still locked);
+ * (4) get lock on the false index file;
+ * (5) reset the_index from HEAD;
+ * (6) update the_index the same way as (2);
+ * (7) write the_index out to the false index file;
+ * (8) return the name of the false index file (still locked);
+ *
+ * The caller should run hooks on the locked false index, and
+ * create commit from it. Then
+ * (A) if all goes well, commit the real index;
+ * (B) on failure, rollback the real index;
+ * In either case, rollback the false index.
+ */
+
+</pre>
+
+So, the pre-commit hook is run on the false index, which has been reset to HEAD. The changes it stages are committed, but do not affect the real index. If I read that comment right, the commit from the false index is then supposed to be committed on the real index, but it seems in this case the real index does not get updated to reflect the changes.
+
+This seems to be a bug in git. Reproduced w/o git-annex, and bug report sent to the git ML.
+
+Depending on what happens, this might just get fixed in git. Or, I might need to make git-annex detect this case (by looking at what `GIT_INDEX_FILE` is set to) and have the pre-commit hook cancel the commit.
+"""]]
diff --git a/doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_6_2a3ad3f95ee03c79404e3784c9ce1a4b._comment b/doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_6_2a3ad3f95ee03c79404e3784c9ce1a4b._comment
new file mode 100644
index 000000000..ef86e4880
--- /dev/null
+++ b/doc/bugs/modified_permissions_persist_after_unlock__44___commit/comment_6_2a3ad3f95ee03c79404e3784c9ce1a4b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 6"
+ date="2014-10-10T17:26:04Z"
+ content="""
+upstream bug: <http://www.mail-archive.com/git@vger.kernel.org/msg59587.html>
+"""]]
diff --git a/doc/bugs/moreinfo.mdwn b/doc/bugs/moreinfo.mdwn
index 8581a2c91..579707dab 100644
--- a/doc/bugs/moreinfo.mdwn
+++ b/doc/bugs/moreinfo.mdwn
@@ -1,6 +1,2 @@
-If your bug report is listed here, it has been flagged as needing more
-information. Please respond to the bug and provide the requested
-information.
-
-[[!inline pages="./* and link(./moreinfo) and !link(./done) and !*/Discussion" sort=mtime show=10
-archive=yes]]
+This tags is for bugs needing more information from their submitter.
+Please respond to the bug and provide the requested information.
diff --git a/doc/bugs/nautilus__47__scripts__47__git-annex_get:_openFile:_does_not_exist___40__No_such_file_or_directory__41__.mdwn b/doc/bugs/nautilus__47__scripts__47__git-annex_get:_openFile:_does_not_exist___40__No_such_file_or_directory__41__.mdwn
new file mode 100644
index 000000000..8dca631ba
--- /dev/null
+++ b/doc/bugs/nautilus__47__scripts__47__git-annex_get:_openFile:_does_not_exist___40__No_such_file_or_directory__41__.mdwn
@@ -0,0 +1,30 @@
+### Please describe the problem.
+When I try to start the webapp, it fails, complaining about a nautilus script.
+
+
+### What version of git-annex are you using? On what operating system?
+Mythbuntu 12.04 (which is based on XFCE and doesn't have nautilus)
+$ git-annex version
+git-annex version: 5.20140402
+build flags: Assistant Webapp Webapp-secure Pairing S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+$ git-annex webapp
+
+git-annex: /home/mythbuntu/.local/share/nautilus/scripts/git-annex get: openFile: does not exist (No such file or directory)
+failed
+git-annex: webapp: 1 failed
+
+# End of transcript or log.
+"""]]
+
+[[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/nautilus__47__scripts__47__git-annex_get:_openFile:_does_not_exist___40__No_such_file_or_directory__41__/comment_1_9fdeaa51ccc7c71dcfeea3ea783d3b50._comment b/doc/bugs/nautilus__47__scripts__47__git-annex_get:_openFile:_does_not_exist___40__No_such_file_or_directory__41__/comment_1_9fdeaa51ccc7c71dcfeea3ea783d3b50._comment
new file mode 100644
index 000000000..d25188658
--- /dev/null
+++ b/doc/bugs/nautilus__47__scripts__47__git-annex_get:_openFile:_does_not_exist___40__No_such_file_or_directory__41__/comment_1_9fdeaa51ccc7c71dcfeea3ea783d3b50._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmqz6wCn-Q1vzrsHGvEJHOt_T5ZESilxhc"
+ nickname="Sören"
+ subject="comment 1"
+ date="2014-04-06T11:34:37Z"
+ content="""
+The problem has been reported [here](http://git-annex.branchable.com/bugs/git-annex_fails_to_start_when_nautilus_script_directory_is_missing/) as well and is already fixed in the latest [release](http://git-annex.branchable.com/news/version_5.20140405/).
+
+"""]]
diff --git a/doc/bugs/network___62____61___2.4.0.1_is_not_in_Haskell_Platform_2012.4.0.0.mdwn b/doc/bugs/network___62____61___2.4.0.1_is_not_in_Haskell_Platform_2012.4.0.0.mdwn
deleted file mode 100644
index 1b90f593f..000000000
--- a/doc/bugs/network___62____61___2.4.0.1_is_not_in_Haskell_Platform_2012.4.0.0.mdwn
+++ /dev/null
@@ -1,12 +0,0 @@
-git-annex requires version 2.4.0.1 or later of the 'network' library. Unfortunately,
-the current version of the Haskell Platform mandates version 2.3.1.0 of that library.
-This means that git-annex cannot be compiled on the Haskell Platform 2012.4.0.0 (which
-is going to remain the HP version of choice until May next year or so).
-
-Do you think it's possible to support *both* versions of the network library, maybe?
-That would increase the portability of git-annex quite a bit.
-
-Thank you for your consideration.
-
-> Ok, I think I've figured out how to use the CPP macros defined by cabal
-> to deal with this. [[done]], will be in next release. --[[Joey]]
diff --git a/doc/bugs/network___62____61___2.4.0.1_is_not_in_Haskell_Platform_2012.4.0.0/comment_1_2c4b3757bb8de563edca65aeabcbbc5a._comment b/doc/bugs/network___62____61___2.4.0.1_is_not_in_Haskell_Platform_2012.4.0.0/comment_1_2c4b3757bb8de563edca65aeabcbbc5a._comment
deleted file mode 100644
index a6df44da9..000000000
--- a/doc/bugs/network___62____61___2.4.0.1_is_not_in_Haskell_Platform_2012.4.0.0/comment_1_2c4b3757bb8de563edca65aeabcbbc5a._comment
+++ /dev/null
@@ -1,29 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.27"
- subject="comment 1"
- date="2012-11-11T21:49:10Z"
- content="""
-My code already supports using either, but I don't know how to tell cabal to set -DWITH_OLD_URI to build with the old one, when it's installed. I've in the past tried to deal with this by defining cabal flags, and it didn't work out too well, tending to land users solidly in cabal hell.
-
-You can patch the cabal file like so to make it build with the old network:
-
-<pre>
---- a/git-annex.cabal
-+++ b/git-annex.cabal
-@@ -52,7 +52,7 @@ Flag DNS
- Executable git-annex
- Main-Is: git-annex.hs
- Build-Depends: MissingH, hslogger, directory, filepath,
-- unix, containers, utf8-string, network (>= 2.4.0.1), mtl,
-+ unix, containers, utf8-string, network (< 2.4.0.1), mtl,
- bytestring, old-locale, time,
- pcre-light, extensible-exceptions, dataenc, SHA, process, json, HTTP,
- base (>= 4.5 && < 4.7), monad-control, transformers-base, lifted-base,
-@@ -64,6 +64,7 @@ Executable git-annex
- C-Sources: Utility/libdiskfree.c Utility/libmounts.c
- Extensions: CPP
- GHC-Options: -threaded
-+ CPP-Options: -DWITH_OLD_URI
-</pre>
-"""]]
diff --git a/doc/bugs/new_AWS_region___40__eu-central-1__41__.mdwn b/doc/bugs/new_AWS_region___40__eu-central-1__41__.mdwn
new file mode 100644
index 000000000..177f7e138
--- /dev/null
+++ b/doc/bugs/new_AWS_region___40__eu-central-1__41__.mdwn
@@ -0,0 +1,10 @@
+### Please describe the problem.
+
+Amazon has opened up a new region in AWS with a datacenter in Frankfurt/Germany.
+
+* Region Name: EU (Frankfurt) region
+* Region: eu-central-1
+
+This should be added to the "Adding an Amazon S3 repository" page in the Datacenter dropdown of the webapp.
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/new_AWS_region___40__eu-central-1__41__/comment_1_23d65c7e05f6e7312bbdbd039bf8d308._comment b/doc/bugs/new_AWS_region___40__eu-central-1__41__/comment_1_23d65c7e05f6e7312bbdbd039bf8d308._comment
new file mode 100644
index 000000000..e56e1beaf
--- /dev/null
+++ b/doc/bugs/new_AWS_region___40__eu-central-1__41__/comment_1_23d65c7e05f6e7312bbdbd039bf8d308._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 1"
+ date="2014-10-23T18:52:48Z"
+ content="""
+The S3 library that git-annex is using does not support the authentication method that this region uses.
+
+It is supported by the aws library that git-annex uses in the `s3-aws` branch in git, and I already added the region there this morning.
+
+I can't merge `s3-aws` yet; the neccessary version of the aws library is not yet available in eg, Debian. And even upgrading aws from cabal seems to result in dependency hell, due to its needing a newer version of scientific. This should all sort itself out in time.
+
+If you need this region, you'll need to try to build git-annex's s3-aws branch, for now.
+"""]]
diff --git a/doc/bugs/new_AWS_region___40__eu-central-1__41__/comment_2_6ceb3251b7067591d34cd146d19ccea9._comment b/doc/bugs/new_AWS_region___40__eu-central-1__41__/comment_2_6ceb3251b7067591d34cd146d19ccea9._comment
new file mode 100644
index 000000000..fab525b66
--- /dev/null
+++ b/doc/bugs/new_AWS_region___40__eu-central-1__41__/comment_2_6ceb3251b7067591d34cd146d19ccea9._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 2"
+ date="2014-10-23T19:51:46Z"
+ content="""
+Looks like the cabal dependency hell is managable; if done in system without anything installed, cabal manages to install the new aws, and everything else, except for the dbus library. Still not ready to be merged though.
+"""]]
diff --git a/doc/bugs/nfs_mounted_repo_results_in_errors_on_drop_move.mdwn b/doc/bugs/nfs_mounted_repo_results_in_errors_on_drop_move.mdwn
deleted file mode 100644
index 761ee5b25..000000000
--- a/doc/bugs/nfs_mounted_repo_results_in_errors_on_drop_move.mdwn
+++ /dev/null
@@ -1,59 +0,0 @@
-I'm on an nfs mounted filesystem (some netapp somewhere). This is repeatable, every time.
-
- git init repo; cd repo;
- git annex init repo
- truncate -s 20M big
- git annex add big
- git commit -m "annexed file"
- cd ..
- git clone repo repo_copy
- cd repo_copy;
- git annex get .
- git annex whereis big
-
- #whereis big (2 copies)
- # 9310b242-6021-4621-8cef-4548a00907ff -- here
- # b3526e4d-38d7-4781-a9c3-436007899f1b -- origin (repo)
- #ok
-
- git annex drop big
-
- #git-annex: /nfspath/repo_copy/.git/annex/objects/fM/4k/SHA1-s20971520--9674344c90c2f0646f0b78026e127c9b86e3ad77: removeDirectory: unsatisified constraints (Directory not empty)
- #failed
- #git-annex: drop: 1 failed
-
- git annex drop big # no error second time, I suspect nfs has caught up by now.
- git annex fsck # Doesn't know that the second drop succeeded.
-
- #fsck big (fixing location log)
- # ** Based on the location log, big
- # ** was expected to be present, but its content is missing.
- #failed
- #git-annex: fsck: 1 failed
-
- git annex fsck
-
- #fsck big ok
-
- git annex whereis big
-
- #whereis big (1 copy)
- # b3526e4d-38d7-4781-a9c3-436007899f1b -- origin (repo)
- #ok
-
-I suspect git-annex is just too fast and optimistic for big slow nfs directories.
-
-> git-annex locks files while it is operating on their content
-> to avoid race conditions with other git-annex processes.
-> Quite likely this problem (which I can reproduce) is due to
-> NFS having bad (non-POSIX) locking semantics.
->
-> Probably the
-> lock is represented on the NFS server as some form of lock file
-> next to the file being locked, and so when that file is deleted, with
-> the lock still held, the directory, which should then be empty, still
-> contains this lock file.
->
-> So, this can be worked around by it not failing when the directory
-> unexpectedly cannot be removed. I've made that change. [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/no_git-annex_shell_on_Windows.mdwn b/doc/bugs/no_git-annex_shell_on_Windows.mdwn
new file mode 100644
index 000000000..60a67eae9
--- /dev/null
+++ b/doc/bugs/no_git-annex_shell_on_Windows.mdwn
@@ -0,0 +1,28 @@
+### Please describe the problem.
+
+git annex installer on Windows only installs git-annex-licenses.txt git-annex-uninstall.exe git-annex.exe
+
+This makes git-annex unusable over ssh (Windows box runs cygwin sshd).
+
+### What steps will reproduce the problem?
+
+
+### What version of git-annex are you using? On what operating system?
+
+Windows 7 64bit
+
+git annex version
+git-annex version: 5.20140421-g78d6aa1
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook external
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
diff --git a/doc/bugs/no_git-annex_shell_on_Windows/comment_1_988768c3e4f30c751034a0b0390cdd88._comment b/doc/bugs/no_git-annex_shell_on_Windows/comment_1_988768c3e4f30c751034a0b0390cdd88._comment
new file mode 100644
index 000000000..fc58c35dd
--- /dev/null
+++ b/doc/bugs/no_git-annex_shell_on_Windows/comment_1_988768c3e4f30c751034a0b0390cdd88._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-05-16T18:12:34Z"
+ content="""
+You should be able to copy git-annex.exe to git-annex-shell.exe and that will be usable as git-annex-shell. I could make the windows installer do this, but without the ability to easily hard or symlink the files, it would double the disk space for what seems an unusual use case..
+"""]]
diff --git a/doc/bugs/no_git-annex_shell_on_Windows/comment_2_70a6c9af57eed4f8ceb3de63cbf8a5e6._comment b/doc/bugs/no_git-annex_shell_on_Windows/comment_2_70a6c9af57eed4f8ceb3de63cbf8a5e6._comment
new file mode 100644
index 000000000..dd8a5ef67
--- /dev/null
+++ b/doc/bugs/no_git-annex_shell_on_Windows/comment_2_70a6c9af57eed4f8ceb3de63cbf8a5e6._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawln3ckqKx0x_xDZMYwa9Q1bn4I06oWjkog"
+ nickname="Michael"
+ subject="comment 2"
+ date="2014-05-16T18:58:13Z"
+ content="""
+Hmm, I don't understand the double disk space issue.
+If direct mode is used, files are stored once, right?
+
+"""]]
diff --git a/doc/bugs/no_git-annex_shell_on_Windows/comment_3_7f48959c6242c5cc52e9d0a79fd3f85d._comment b/doc/bugs/no_git-annex_shell_on_Windows/comment_3_7f48959c6242c5cc52e9d0a79fd3f85d._comment
new file mode 100644
index 000000000..634c0d8b6
--- /dev/null
+++ b/doc/bugs/no_git-annex_shell_on_Windows/comment_3_7f48959c6242c5cc52e9d0a79fd3f85d._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 3"
+ date="2014-05-16T20:36:02Z"
+ content="""
+I mean that copying git-annex.exe to git-annex-shell.exe doubles the disk space needed to install git-annex.
+"""]]
diff --git a/doc/bugs/no_git-annex_shell_on_Windows/comment_4_04b30dd9e510762ee547e7b45bdba660._comment b/doc/bugs/no_git-annex_shell_on_Windows/comment_4_04b30dd9e510762ee547e7b45bdba660._comment
new file mode 100644
index 000000000..4a6fd402d
--- /dev/null
+++ b/doc/bugs/no_git-annex_shell_on_Windows/comment_4_04b30dd9e510762ee547e7b45bdba660._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawln3ckqKx0x_xDZMYwa9Q1bn4I06oWjkog"
+ nickname="Michael"
+ subject="comment 4"
+ date="2014-05-24T21:26:24Z"
+ content="""
+I tried copying git-annex.exe to git-annex-shell.exe, but it doesn't behave as git-annex-shell:
+
+git-annex-shell -c configlist
+git-annex-shell.exe: unknown command configlist
+
+"""]]
diff --git a/doc/bugs/no_git-annex_shell_on_Windows/comment_5_beebbd4a41cccfc7aac3c19d76c3b978._comment b/doc/bugs/no_git-annex_shell_on_Windows/comment_5_beebbd4a41cccfc7aac3c19d76c3b978._comment
new file mode 100644
index 000000000..9d9acf54f
--- /dev/null
+++ b/doc/bugs/no_git-annex_shell_on_Windows/comment_5_beebbd4a41cccfc7aac3c19d76c3b978._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawln3ckqKx0x_xDZMYwa9Q1bn4I06oWjkog"
+ nickname="Michael"
+ subject="comment 5"
+ date="2014-05-24T21:45:55Z"
+ content="""
+Looks like .exe prefix confuses detection logic. If I remove extension, it does behave as git-annex-shell.
+"""]]
diff --git a/doc/bugs/no_git-annex_shell_on_Windows/comment_6_957c5da5f336c7ef59e4149602471888._comment b/doc/bugs/no_git-annex_shell_on_Windows/comment_6_957c5da5f336c7ef59e4149602471888._comment
new file mode 100644
index 000000000..c9d4c3a6a
--- /dev/null
+++ b/doc/bugs/no_git-annex_shell_on_Windows/comment_6_957c5da5f336c7ef59e4149602471888._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawln3ckqKx0x_xDZMYwa9Q1bn4I06oWjkog"
+ nickname="Michael"
+ subject="comment 6"
+ date="2014-05-24T21:49:47Z"
+ content="""
+However, it's still not usable remotely over ssh:
+
+git annex sync kpf
+
+git-annex-shell: git: createProcess: invalid argument (Invalid argument)
+
+ Remote kpf does not have git-annex installed; setting annex-ignore
+
+"""]]
diff --git a/doc/bugs/no_git-annex_shell_on_Windows/comment_7_a8654cf656de55ccdcf40270a1ef4ca9._comment b/doc/bugs/no_git-annex_shell_on_Windows/comment_7_a8654cf656de55ccdcf40270a1ef4ca9._comment
new file mode 100644
index 000000000..1733b29dd
--- /dev/null
+++ b/doc/bugs/no_git-annex_shell_on_Windows/comment_7_a8654cf656de55ccdcf40270a1ef4ca9._comment
@@ -0,0 +1,35 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawln3ckqKx0x_xDZMYwa9Q1bn4I06oWjkog"
+ nickname="Michael"
+ subject="comment 7"
+ date="2014-05-24T22:07:15Z"
+ content="""
+OK thought I'd use it with annex-ignore set, but:
+
+ git annex copy --to=kpf file.jpg
+ copy file.jpg (checking kpf...) git-annex-shell: git: createProcess: invalid argument (Invalid argument)
+(to kpf...)
+ git-annex-shell: git: createProcess: invalid argument (Invalid argument)
+ rsync: connection unexpectedly closed (0 bytes received so far) [sender]
+ rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.0]
+
+ rsync failed -- run git annex again to resume file transfer
+ failed
+git-annex: copy: 1 failed
+
+
+For reference, here's the .git/config section.
+
+I can either set receivepack/uploadpack like below or add /cygdrive/c/Program Files (x86)/Git/libexec/git-core to PATH in cygwin shell.
+
+Also, if I set url to kp:/cygdrive/f/backup/f, git complains that it's not a git repository (msysgit doesn't understand cygwin stuff?)
+
+ [remote \"kpf\"]
+ url = kp:f:/backup/ph
+ fetch = +refs/heads/*:refs/remotes/kpf/*
+ receivepack = git receive-pack
+ uploadpack = git upload-pack
+ annex-uuid = 99c498fc-e38e-11e3-8bb0-5368a291bd90
+ annex-ignore = true
+
+"""]]
diff --git a/doc/bugs/no_git-annex_shell_on_Windows/comment_8_3c8bb1b1d67ca1a6e568e381d24a2574._comment b/doc/bugs/no_git-annex_shell_on_Windows/comment_8_3c8bb1b1d67ca1a6e568e381d24a2574._comment
new file mode 100644
index 000000000..ba7fadc23
--- /dev/null
+++ b/doc/bugs/no_git-annex_shell_on_Windows/comment_8_3c8bb1b1d67ca1a6e568e381d24a2574._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawln3ckqKx0x_xDZMYwa9Q1bn4I06oWjkog"
+ nickname="Michael"
+ subject="comment 8"
+ date="2014-05-24T22:58:16Z"
+ content="""
+Another data point. If I install cygwin's git (so references like kp:/cygdrive/f would be understood) and remove annex-ignore setting, I get:
+
+ git annex sync kpf
+ commit ok
+ pull kpf
+ git-annex: Unknown command 'kp'
+
+Looks like hostname (kp) is taken as a command somehow.
+
+"""]]
diff --git a/doc/bugs/no_git-annex_shell_on_Windows/comment_9_03646c9df9d4f4ea27459660fe65a976._comment b/doc/bugs/no_git-annex_shell_on_Windows/comment_9_03646c9df9d4f4ea27459660fe65a976._comment
new file mode 100644
index 000000000..7a5152b59
--- /dev/null
+++ b/doc/bugs/no_git-annex_shell_on_Windows/comment_9_03646c9df9d4f4ea27459660fe65a976._comment
@@ -0,0 +1,25 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnOSgFb3l7nL3Fs7Y9gPGJJjFiV7aJ1tek"
+ nickname="Phil"
+ subject="comment 9"
+ date="2014-07-05T22:29:01Z"
+ content="""
+Copying the `git-annex.exe` does work but you can also create a symlink and tell Windows to execute symlinks by doing the following.
+
+On the remote machine (the one you are connecting to)
+
+## Create a symlink:
+
+ mklink \"C:\Program Files (x86)\Git\bin\git-annex-shell\" \"C:\Program Files (x86)\Git\bin\git-annex.exe\"
+
+## Tell Windows to run files with no extension:
+
+* Open Environment Variables
+* At the end of `PATHEXT` add `;.`
+
+## A problem with rsync
+
+Unfortunately I now get `Access is denied` and `rsync: connection unexpectedly closed`. I think this is due to path issues on Windows. Trying rsync manually I need to use the `/cygdrive/c/rest/of/path` syntax otherwise I get `No such file or directory.`
+
+
+"""]]
diff --git a/doc/bugs/not_possible_to_have_annex_on_a_separate_filesystem.mdwn b/doc/bugs/not_possible_to_have_annex_on_a_separate_filesystem.mdwn
deleted file mode 100644
index 7daf03284..000000000
--- a/doc/bugs/not_possible_to_have_annex_on_a_separate_filesystem.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-I belive I have found a regression.
-
-Inspired by
-<http://git-annex.branchable.com/forum/performance_improvement:_git_on_ssd__44___annex_on_spindle_disk/>
-I tried to only have .git/annex/objects (also tested moving .git/annex) on NFS while having the rest on local SSD disk.
-
-But when trying to add files i get:
-
- > git annex add testfile
- add testfile (checksum...)
- git-annex: testfile: rename: unsupported operation (Invalid cross-device link)
- failed
- git-annex: add: 1 failed
-
-I have tried both using bind-mount and with a sym-link.
-
-> Grepping for `renameFile` and `createLink` will find all the places
-> in git-annex that assume one filesystem. These would have to be changed
-> to catch errors and fall back to expensive copying.
->
-> Putting a separate repository on the file server could work better
-> depending on what you're trying to do. --[[Joey]]
-
->> I've added support for putting `.git/annex` on a separate filesystem
->> from the rest of the git repository.
->>
->> Putting individual subdirectories like `.git/annex/objects` on separate
->> filesystems from other subdirectories is not fully supported; it may
->> work but it may be slow and a few things (like `git annex migrate`) are
->> known to fail due to using hard links. I don't think this is worth
->> supporting. [[done]]
->> --[[Joey]]
diff --git a/doc/bugs/old_data_isn__39__t_unused_after_migration.mdwn b/doc/bugs/old_data_isn__39__t_unused_after_migration.mdwn
deleted file mode 100644
index 9d468bdc7..000000000
--- a/doc/bugs/old_data_isn__39__t_unused_after_migration.mdwn
+++ /dev/null
@@ -1,66 +0,0 @@
-Old data isn't listed as unused after migrating backends:
-
- #!/bin/bash
-
- BASE=/tmp/migrate-bug-2
- set -x
- chmod -R +w $BASE
- rm -rf $BASE
- mkdir -p $BASE
- cd $BASE
-
- # create annex
- git init .
- git annex init
-
- # make a big (sparse) file and add it
- dd if=/dev/zero of=bigfile bs=1 count=0 seek=1G
- git annex add --backend WORM bigfile
- git commit -m 'added bigfile'
-
- # migrate it
- git annex migrate --backend SHA256 bigfile
-
- # status shows 2 keys taking up 2G
- git annex status
-
- # but nothing is unused
- git annex unused
-
-Output:
-
- ++ git annex status
- supported backends: SHA256 SHA1 SHA512 SHA224 SHA384 SHA256E SHA1E SHA512E SHA224E SHA384E WORM URL
- supported remote types: git S3 bup directory rsync web hook
- known repositories:
- ede95a82-1166-11e1-a475-475d55eb0f8f -- here
- local annex keys: 2
- local annex size: 2 gigabytes
- visible annex keys: 1
- visible annex size: 1 gigabyte
- backend usage:
- WORM: 1
- SHA256: 1
- ++ git annex unused
- unused . (checking for unused data...) (checking master...) ok
-
-The two files are hardlinked, so it's not taking up extra space, but it would be nice to be able to remove the old keys.
-
-> `git annex unused` checks the content of all branches, and assumes that,
-> when a branch contains a file that points to a key, that key is still
-> used. In this case, the migration has staged a change to the file,
-> but it is not yet committed, so when it checks the master branch, it
-> still finds a file referring to the old key.
->
-> So, slightly surprising, but not a bug. --[[Joey]] [[done]]
-
->> Thanks for the explanation. In my real repository, it was a bit trickier:
->> the migration was commited to `master`, but other *remote* branches still
->> referenced those keys. I was just doing a `git pull` from a central repo, but
->> needed a `git remote update` to remove those references from `remotes/foo/master` too.
->> --Jim
-
->>> I have considered making unused ignore remote tracking branches.
->>> On the one hand, it can be a little bit confusing, and those branches
->>> can be out of date. On the other hand, it can be useful to know you're
->>> not dropping anything that some remote might still refer to. --[[Joey]]
diff --git a/doc/bugs/on--git-dir_and_--work-tree_options.mdwn b/doc/bugs/on--git-dir_and_--work-tree_options.mdwn
deleted file mode 100644
index 0bcefbb5d..000000000
--- a/doc/bugs/on--git-dir_and_--work-tree_options.mdwn
+++ /dev/null
@@ -1,31 +0,0 @@
-git-annex does not take into account the --git-dir and --work-tree command line options (while they can be useful when scripting).
-
- > mkdir /tmp/test
- > cd /tmp/test
- > git init
- Initialized empty Git repository in /tmp/test/.git/
- > git annex init test
- init test ok
- > touch foo
- > cd
- > git --git-dir=/tmp/test/.git --work-tree=/tmp/test annex add foo
- git-annex: Not in a git repository.
-
-regular git add works:
-
- > git --git-dir=/tmp/test/.git --work-tree=/tmp/test add foo
- > git --git-dir=/tmp/test/.git --work-tree=/tmp/test status
- # On branch master
- #
- # Initial commit
- #
- # Changes to be committed:
- # (use "git rm --cached <file>..." to unstage)
- #
- # new file: foo
- #
-
-git-annex version: 3.20110702
-
-> [[done]], git-annex now honors `GIT_DIR` and `GIT_WORK_TREE` like other
-> git commands do. --[[Joey]]
diff --git a/doc/bugs/one_test_fail_on_osx.mdwn b/doc/bugs/one_test_fail_on_osx.mdwn
deleted file mode 100644
index 92f00407f..000000000
--- a/doc/bugs/one_test_fail_on_osx.mdwn
+++ /dev/null
@@ -1,30 +0,0 @@
-### Please describe the problem.
-
-git-annex test reports: 1 out of 120 tests failed
-
- ...
- Unit Tests (indirect)
- ...
- lock: FAIL
- lock --force failed
- ...
-
-### What version of git-annex are you using? On what operating system?
-
- $ git-annex version
- git-annex version: 5.20131221-g00d1673
- build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
- key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
- remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
- local repository version: 3
- default repository version: 3
- supported repository versions: 3 5
- upgrade supported from repository versions: 0 1 2 4
-
- $ git --version
- git version 1.8.4
-
- System Version: OS X 10.9 (13A603)
-
-> This was a type in the test suite. It's already fixed in git. [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/optinally_transfer_file_unencryptedly/comment_1_13a7653d96ddf91f4492a9f3555a69aa._comment b/doc/bugs/optinally_transfer_file_unencryptedly/comment_1_13a7653d96ddf91f4492a9f3555a69aa._comment
deleted file mode 100644
index 5e72d5f0a..000000000
--- a/doc/bugs/optinally_transfer_file_unencryptedly/comment_1_13a7653d96ddf91f4492a9f3555a69aa._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
- nickname="Justin"
- subject="comment 1"
- date="2012-12-23T17:40:13Z"
- content="""
-Using a plain tcp connection would be simpler than HTTP, the sending side would just need to tell the receiver to listen on a port and write any data received to a file(or the reverse). Basically what you can do with netcat.
-
-I had a similar problem, but I found that using arcfour was fast enough:
-
-.ssh/config:
-
- Host slow
- Ciphers arcfour
-
-"""]]
diff --git a/doc/bugs/optinally_transfer_file_unencryptedly/comment_2_31f154011ec26a463de7b1e307e49cb6._comment b/doc/bugs/optinally_transfer_file_unencryptedly/comment_2_31f154011ec26a463de7b1e307e49cb6._comment
deleted file mode 100644
index 2050da575..000000000
--- a/doc/bugs/optinally_transfer_file_unencryptedly/comment_2_31f154011ec26a463de7b1e307e49cb6._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.246.126"
- subject="comment 2"
- date="2012-12-23T19:26:23Z"
- content="""
-You can configure multiple git remotes that access the same repository using different transports, and use an un-encrypted transport when necessary for speed. I sometimes use an NFS mount for this.
-"""]]
diff --git a/doc/bugs/optinally_transfer_file_unencryptedly/comment_3_33433bcfb1946b52f1f41b9158ab452d._comment b/doc/bugs/optinally_transfer_file_unencryptedly/comment_3_33433bcfb1946b52f1f41b9158ab452d._comment
deleted file mode 100644
index 6b51701a0..000000000
--- a/doc/bugs/optinally_transfer_file_unencryptedly/comment_3_33433bcfb1946b52f1f41b9158ab452d._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.246.126"
- subject="comment 3"
- date="2012-12-23T19:29:27Z"
- content="""
-BTW, I have yet to find any Haskell http library that can upload files without buffering their full contents in memory. (Not, not even http-conduit.) If someone fixes that, git-annex's S3 and WebDAV support will get a lot better and I could consider adding something like what's suggested.
-"""]]
diff --git a/doc/bugs/ordering.mdwn b/doc/bugs/ordering.mdwn
deleted file mode 100644
index 536bfce36..000000000
--- a/doc/bugs/ordering.mdwn
+++ /dev/null
@@ -1,12 +0,0 @@
-One would expect "git annex get foo bar" to first retrieve foo, and then
-bar. Actually though, it will operate on them in alphabetical order
-(probably). This is annoying when you wanted to 1st list the most important
-files to get. Maybe you'll run out of time before all can be gotten. The
-workaround of course is to run "git annex get" twice.
-
-This ordering comes from "git ls-files". git-annex passes it all the files
-the user specified. This is a useful optimisation -- earlier it would
-run "git ls-files" once per parameter, and so "git annex get *" could be
-rather slow. But, it produces this ordering problem.
-
-[[done]]
diff --git a/doc/bugs/pages_of_packfile_errors.mdwn b/doc/bugs/pages_of_packfile_errors.mdwn
deleted file mode 100644
index 488bf5ab2..000000000
--- a/doc/bugs/pages_of_packfile_errors.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-### Please describe the problem.
-
-A repair that runs for ages. In the log file, pages and pages and pages of:
-
-error: packfile /Volumes/BandZbackup2/annex/.git/objects/pack/pack-f0ae2f5cc83f11eab406518b9f06a344acf9c93c.pack does not match index
-warning: packfile /Volumes/BandZbackup2/annex/.git/objects/pack/pack-f0ae2f5cc83f11eab406518b9f06a344acf9c93c.pack cannot be accessed
-error: packfile /Volumes/BandZbackup2/annex/.git/objects/pack/pack-f0ae2f5cc83f11eab406518b9f06a344acf9c93c.pack does not match index
-warning: packfile /Volumes/BandZbackup2/annex/.git/objects/pack/pack-f0ae2f5cc83f11eab406518b9f06a344acf9c93c.pack cannot be accessed
-error: packfile /Volumes/BandZbackup2/annex/.git/objects/pack/pack-f0ae2f5cc83f11eab406518b9f06a344acf9c93c.pack does not match index
-warning: packfile /Volumes/BandZbackup2/annex/.git/objects/pack/pack-f0ae2f5cc83f11eab406518b9f06a344acf9c93c.pack cannot be accessed
-error: packfile /Volumes/BandZbackup2/annex/.git/objects/pack/pack-f0ae2f5cc83f11eab406518b9f06a344acf9c93c.pack does not match index
-warning: packfile /Volumes/BandZbackup2/annex/.git/objects/pack/pack-f0ae2f5cc83f11eab406518b9f06a344acf9c93c.pack cannot be accessed
-
-### What steps will reproduce the problem?
-
-Running git-annex, plugging in my external drive
-
-### What version of git-annex are you using? On what operating system?
-
-Auto-updated latest, I thought, but the about page says: Version: 5.20131230-g9a495e6
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> I think I've fixed this bug. Followup if not.. [[done]] --[[Joey]]
diff --git a/doc/bugs/pages_of_packfile_errors/comment_1_eb2989112b38bb27ce8f691dd5d318e5._comment b/doc/bugs/pages_of_packfile_errors/comment_1_eb2989112b38bb27ce8f691dd5d318e5._comment
deleted file mode 100644
index d74470ffd..000000000
--- a/doc/bugs/pages_of_packfile_errors/comment_1_eb2989112b38bb27ce8f691dd5d318e5._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.172"
- subject="comment 1"
- date="2014-02-24T18:32:31Z"
- content="""
-Well, you seem to have a corrupt git repository on your removable drive. git-annex seems to be in the process of repairing it, which can take some time.
-
-I don't see a bug here, from what you've described so far..
-"""]]
diff --git a/doc/bugs/pages_of_packfile_errors/comment_2_69fba53035ebea213ae1c11be5326690._comment b/doc/bugs/pages_of_packfile_errors/comment_2_69fba53035ebea213ae1c11be5326690._comment
deleted file mode 100644
index facae6496..000000000
--- a/doc/bugs/pages_of_packfile_errors/comment_2_69fba53035ebea213ae1c11be5326690._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkQafKy7hNSEolLs6TvbgUnkklTctUY9LI"
- nickname="Zellyn"
- subject="sounds good"
- date="2014-02-24T19:39:12Z"
- content="""
-Is it normal for the same error to repeat thousands of times like that in the log?
-"""]]
diff --git a/doc/bugs/pages_of_packfile_errors/comment_3_73b9f574e8ce36d5e0d0f6c6a89006b7._comment b/doc/bugs/pages_of_packfile_errors/comment_3_73b9f574e8ce36d5e0d0f6c6a89006b7._comment
deleted file mode 100644
index f0e6bce0b..000000000
--- a/doc/bugs/pages_of_packfile_errors/comment_3_73b9f574e8ce36d5e0d0f6c6a89006b7._comment
+++ /dev/null
@@ -1,39 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.172"
- subject="comment 3"
- date="2014-02-24T23:39:46Z"
- content="""
-Well, if there's a bug here, it might be that this particular problem has caused the repair process to loop repeatedly trying to unpack a pack file.
-I don't see how that could happen, looking at the code it will try to unpack each pack file only once.
-
-If you run `git annex repair --debug`, you can see the git commands it runs, and so see if it's somehow looping. When I do this with some corrupt pack files (actually, I swapped one pack file for another one), I see, for example:
-
-<pre>
-[2014-02-24 19:11:42 JEST] feed: git [\"--git-dir=/home/joey/tmp/git/.git\",\"--work-tree=/home/joey/tmp/git\",\"unpack-objects\",\"-r\"]
-error: packfile /home/joey/tmp/git/.git/objects/pack/pack-857c07e35d98e8f063fdae6846d1f6f7453e1312.pack claims to have 862 objects while index indicates 1431 objects
-warning: packfile /home/joey/tmp/git/.git/objects/pack/pack-857c07e35d98e8f063fdae6846d1f6f7453e1312.pack cannot be accessed
-error: packfile /home/joey/tmp/git/.git/objects/pack/pack-857c07e35d98e8f063fdae6846d1f6f7453e1312.pack claims to have 862 objects while index indicates 1431 objects
-warning: packfile /home/joey/tmp/git/.git/objects/pack/pack-857c07e35d98e8f063fdae6846d1f6f7453e1312.pack cannot be accessed
-error: packfile /home/joey/tmp/git/.git/objects/pack/pack-857c07e35d98e8f063fdae6846d1f6f7453e1312.pack claims to have 862 objects while index indicates 1431 objects
-...
-</pre>
-
-Which shows that git-annex only ran `git unpack-objects -r` once, and yet it printed out the same error repeatedly.
-
-One possibility is a problem using `-r`, which makes it keep going on errors. Which seemed like a good idea at the time to unpack as much as possible from a damaged file. It might be that `git unpack-objects` is itself getting stuck in some kind of loop with the -r.
-
-In my case, it did not get stuck; it eventually quit and it moved on to the next pack file, after 900-some repitions of the error message:
-
-<pre>
-[2014-02-24 19:16:47 JEST] feed: git [\"--git-dir=/home/joey/tmp/git/.git\",\"--work-tree=/home/joey/tmp/git\",\"unpack-objects\",\"-r\"]
-error: packfile /home/joey/tmp/git/.git/objects/pack/pack-857c07e35d98e8f063fdae6846d1f6f7453e1312.pack claims to have 862 objects while index indicates 1431 objects
-warning: packfile /home/joey/tmp/git/.git/objects/pack/pack-857c07e35d98e8f063fdae6846d1f6f7453e1312.pack cannot be accessed
-</pre>
-
-Intesting that it's again complaining about the same pack file, despite having moved from one pack file on to the next one. I think what's going on here is while unpacking pack files A..Y (which may all be fine), it's checking pack file Z, which is corrupt, to see if the objects exist in it, and complaining each time.
-
-So, I can improve this a lot by moving *all* the pack files out of the way before trying to unpack any of them. In my test case, that completely eliminated the errors, and probably also sped it up a bit.
-
-If I were you, I'd either try stopping your running git-annex and run `git annex repair --debug` and analize the log like I did above, or get the next daily build which has that change, and see if it helps in your case.
-"""]]
diff --git a/doc/bugs/pasting_into_annex_on_OSX.mdwn b/doc/bugs/pasting_into_annex_on_OSX.mdwn
deleted file mode 100644
index 4ea4851af..000000000
--- a/doc/bugs/pasting_into_annex_on_OSX.mdwn
+++ /dev/null
@@ -1,28 +0,0 @@
-What steps will reproduce the problem?
-
-Try pasting file into annex directory while assistant is running.
-
-
-What is the expected output? What do you see instead?
-
-Expect file to successfully paste into directory, then be annexed. Instead, see a permissions error, and file disappears.
-
-
-What version of git-annex are you using? On what operating system?
-
-OSX - 10.6. zsh. git-annex version: 3.20120826
-
-Please provide any additional information below.
-
-> Ok, I've put in the one second delay to adding by default on OSX.
-> I consider this bug done, at least for now..
-
->> Reopening since I've heard from someone else that it can still happen.
->> --[[Joey]]
-
->>> Closing again, since the assistant now makes new repositories on OSX
->>> using direct mode, which should avoid this problem. NB: any existing
->>> repositories you have on OSX should be switched to use direct mode by
->>> manually running `git annex direct` in them. [[done]] --[[Joey]]
-
-[[!tag /design/assistant/OSX]]
diff --git a/doc/bugs/pasting_into_annex_on_OSX/comment_1_4eab52bb6eda92e39bdaa8eee8f31a7f._comment b/doc/bugs/pasting_into_annex_on_OSX/comment_1_4eab52bb6eda92e39bdaa8eee8f31a7f._comment
deleted file mode 100644
index 5c2c64a23..000000000
--- a/doc/bugs/pasting_into_annex_on_OSX/comment_1_4eab52bb6eda92e39bdaa8eee8f31a7f._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.60"
- subject="comment 1"
- date="2012-09-18T16:35:36Z"
- content="""
-What is the error message?
-"""]]
diff --git a/doc/bugs/pasting_into_annex_on_OSX/comment_2_f1b58adfec179b75c1fc2bf578a3b5c4._comment b/doc/bugs/pasting_into_annex_on_OSX/comment_2_f1b58adfec179b75c1fc2bf578a3b5c4._comment
deleted file mode 100644
index ed38c2ca2..000000000
--- a/doc/bugs/pasting_into_annex_on_OSX/comment_2_f1b58adfec179b75c1fc2bf578a3b5c4._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://www.davidhaslem.com/"
- nickname="David"
- subject="comment 2"
- date="2012-09-18T22:49:09Z"
- content="""
-Exact error message is: \"The operation can’t be completed because you don’t have permission to access some of the items.\" Looks like it starts symlinking and committing before the file is fully copied over.
-"""]]
diff --git a/doc/bugs/pasting_into_annex_on_OSX/comment_3_270aa7680c3b899a92ce6543eaba666a._comment b/doc/bugs/pasting_into_annex_on_OSX/comment_3_270aa7680c3b899a92ce6543eaba666a._comment
deleted file mode 100644
index 51c06ba12..000000000
--- a/doc/bugs/pasting_into_annex_on_OSX/comment_3_270aa7680c3b899a92ce6543eaba666a._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.2.84"
- subject="comment 3"
- date="2012-09-19T17:32:13Z"
- content="""
-I can only guess what this paste operation entails, but as far as I can tell, the error message and the deletion of the file both come from the paste program, not git-annex.
-
-I know that git-annex assistant will not annex a file while it's still open to be written to. So my hypothesis is that the file is written to, closed, and then the paste program tries to do something else -- perhaps set the mode of the file -- and by that point git-annex has annexed it, and the program deletes the symlink. (So the content is probably buried in the git annex.)
-
-Could you build from git master and in your annex, run:
-
- git config annex.delayadd 10
-
-That'll add a 10 second grace period for things to finish with files before they get added to the annex.
-Perhaps this will be enough to avoid the problem. Feel free to play with the number of seconds..
-"""]]
diff --git a/doc/bugs/pasting_into_annex_on_OSX/comment_4_ec11a80d5b0f78c7a927f8aa71a6c57a._comment b/doc/bugs/pasting_into_annex_on_OSX/comment_4_ec11a80d5b0f78c7a927f8aa71a6c57a._comment
deleted file mode 100644
index 3f4d9b87c..000000000
--- a/doc/bugs/pasting_into_annex_on_OSX/comment_4_ec11a80d5b0f78c7a927f8aa71a6c57a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://www.davidhaslem.com/"
- nickname="David"
- subject="comment 4"
- date="2012-09-21T04:05:20Z"
- content="""
-Looks like that did it. I started with 5 seconds, which seems to be more than enough - turned it down to 1 and it still seems to work. The mode change sounds like a likely guess for what it's doing after it is doing writing the file - so even a second is probably more than enough.
-"""]]
diff --git a/doc/bugs/pasting_into_annex_on_OSX/comment_5_1928bd25e5e6874a3b83c2f2adc776f5._comment b/doc/bugs/pasting_into_annex_on_OSX/comment_5_1928bd25e5e6874a3b83c2f2adc776f5._comment
deleted file mode 100644
index 73eb3fa1e..000000000
--- a/doc/bugs/pasting_into_annex_on_OSX/comment_5_1928bd25e5e6874a3b83c2f2adc776f5._comment
+++ /dev/null
@@ -1,7 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- subject="comment 5"
- date="2012-09-21T04:12:54Z"
- content="""
-Ok.. My concern with this kind of \"fix\" is it could theoretically break under heavy load, and I get to pick a tradeoff between a timeout that's unlikely to break and one that'll make git-annex appear sluggish. OTOH, I can't think of anything better to do to address this. How common is \"pasting a file\" on OSX?
-"""]]
diff --git a/doc/bugs/pasting_into_annex_on_OSX/comment_6_0fe288f54b781a0c51395cb32f0e2f9d._comment b/doc/bugs/pasting_into_annex_on_OSX/comment_6_0fe288f54b781a0c51395cb32f0e2f9d._comment
deleted file mode 100644
index a3199d6d8..000000000
--- a/doc/bugs/pasting_into_annex_on_OSX/comment_6_0fe288f54b781a0c51395cb32f0e2f9d._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://www.davidhaslem.com/"
- nickname="David"
- subject="comment 6"
- date="2012-09-21T14:06:45Z"
- content="""
-Well, it's not super common - but in the initial import where I'm first trying out git-annex, I'm copy-pasting my files in from my dropbox, keeping them both as separate folders to try out.
-"""]]
diff --git a/doc/bugs/preferred_content:_include_statement_does_not_allow_spaces_in_filenames.mdwn b/doc/bugs/preferred_content:_include_statement_does_not_allow_spaces_in_filenames.mdwn
new file mode 100644
index 000000000..56311bc70
--- /dev/null
+++ b/doc/bugs/preferred_content:_include_statement_does_not_allow_spaces_in_filenames.mdwn
@@ -0,0 +1,31 @@
+### Please describe the problem.
+Filenames for the *include* statement for [preferred content](http://git-annex.branchable.com/preferred_content/) can not contain spaces.
+
+### What steps will reproduce the problem?
+
+* Create an annex repo
+* Run `git annex vicfg`
+* Enter expression *include='pictures/dir with spaces'*
+* git annex complains: # ** Parse error in next line: Parse failure: near "with" Parse failure: near "spaces'"
+
+(The *'* is interpreted as part of the filepath.)
+
+### What version of git-annex are you using? On what operating system?
+
+I am using the current binaries from Debian stable amd64.
+
+<pre>
+git-annex version: 5.20140320~bpo70+1
+build flags: Assistant Webapp Pairing S3 Inotify DBus XMPP Feeds Quvi TDFA
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
+remote types: git gcrypt S3 bup directory rsync web tahoe glacier hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+</pre>
+
+### Please provide any additional information below.
+
+The only workaround I found is to use a glob for the filepath which only works for the first space: *include='pictures/dir\*'*.
+
+[[!tag confirmed]]
diff --git a/doc/bugs/preferred_content:_include_statement_does_not_allow_spaces_in_filenames/comment_1_ca10638d4b4b178cfd0de8736542c4dc._comment b/doc/bugs/preferred_content:_include_statement_does_not_allow_spaces_in_filenames/comment_1_ca10638d4b4b178cfd0de8736542c4dc._comment
new file mode 100644
index 000000000..a7438c559
--- /dev/null
+++ b/doc/bugs/preferred_content:_include_statement_does_not_allow_spaces_in_filenames/comment_1_ca10638d4b4b178cfd0de8736542c4dc._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 1"
+ date="2014-04-02T18:45:36Z"
+ content="""
+A better workaround is:
+
+include='pictures/dir?with?spaces'
+
+Tokenizing text with embedded quotes is a bit of a PITA, certianly doable I suppose..
+"""]]
diff --git a/doc/bugs/preferred_content:_include_statement_does_not_allow_spaces_in_filenames/comment_2_986a393a512229d35e529ba242b77b1e._comment b/doc/bugs/preferred_content:_include_statement_does_not_allow_spaces_in_filenames/comment_2_986a393a512229d35e529ba242b77b1e._comment
new file mode 100644
index 000000000..7dbeb3d08
--- /dev/null
+++ b/doc/bugs/preferred_content:_include_statement_does_not_allow_spaces_in_filenames/comment_2_986a393a512229d35e529ba242b77b1e._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://ypid.wordpress.com/"
+ ip="213.153.84.215"
+ subject="comment 2"
+ date="2014-04-02T21:29:54Z"
+ content="""
+Thanks for your workaround ... Works for me after removing the single quote signs.
+
+With this workaround on hand one could include/match any filename. Works for me ;)
+"""]]
diff --git a/doc/bugs/present_files__47__directories_are_dropped_after_a_sync.mdwn b/doc/bugs/present_files__47__directories_are_dropped_after_a_sync.mdwn
new file mode 100644
index 000000000..69c029cd9
--- /dev/null
+++ b/doc/bugs/present_files__47__directories_are_dropped_after_a_sync.mdwn
@@ -0,0 +1,41 @@
+### Please describe the problem.
+
+This is a followup from the discussion on <https://git-annex.branchable.com/forum/Standard_groups__47__preferred_contents/> where I unfortunately did not get a complete answer.
+I don't know if it is really a bug but at least it does not work as I would expect and the documentation provides no clear discussion on that.
+
+Now to the problem:
+My annex is in "manual" mode (or equivalently "exclude="*" and present" or an expression which contains "present".
+Then I get a file using "git annex get file".
+I would expect that this file is now synced because it is "present".
+But it is not. When I change the file it is synced to the remotes. This is what it should be.
+However, when a remote changes that file, the content is NOT synced, the file is silently dropped.
+
+Similarly, when I get a complete directory tree in manual mode, I would expect that it is synced. That means, when a remote adds a file or changes a file in that directory, it is also synced to the local machine. But it is not. If it is changed, it is silently dropped (as written above). If a file is added, only the metadata is added but the content is not synced.
+
+### What steps will reproduce the problem?
+
+ - Create a file 'file' on the server, git annex add/sync etc.
+ - On the client: git annex wanted here 'exclude="*" and present'
+ - On the client: git annex get file . The file is now present on the client
+ - Change the file on the server, git annex sync
+ - git annex sync --content on the client
+ - Result: File is dropped again on client
+
+Similarly for directories:
+
+ - Create a (sub-)directory 'subdir' with files and sync everything
+ - On the client: git annex get subdir . The subdirectory is now present, all files under it downloaded.
+ - On the server create a new file in 'subdir' and git annex add; git annex sync --content
+ - git annex sync --content on the client
+ - Result: Content of the files is not synced to client
+
+### What version of git-annex are you using? On what operating system?
+
+ git-annex version: 5.20140717-g5a7d4ff
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+
+
+[[!meta title="manual mode preferred content expression does not want newer versions of present files"]]
+[[!tag confirmed]]
diff --git a/doc/bugs/present_files__47__directories_are_dropped_after_a_sync/comment_1_9d7591faf99ce48b1e5753c80306ae8b._comment b/doc/bugs/present_files__47__directories_are_dropped_after_a_sync/comment_1_9d7591faf99ce48b1e5753c80306ae8b._comment
new file mode 100644
index 000000000..bb8133354
--- /dev/null
+++ b/doc/bugs/present_files__47__directories_are_dropped_after_a_sync/comment_1_9d7591faf99ce48b1e5753c80306ae8b._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlM_DRhi_5pJrTA0HbApHR25iAgy-NBXTY"
+ nickname="Tor Arne"
+ subject="comment 1"
+ date="2014-10-01T22:25:24Z"
+ content="""
+Have you found a solution for this? This seems useful if you're only interested in a subset of files/directories on your laptop, eg, but those that are fetched (present) that you are interested you'd want to keep up to date (in sync) with other computers?
+
+Btw, the link to the previous discussion didnt work for me.
+"""]]
diff --git a/doc/bugs/present_files__47__directories_are_dropped_after_a_sync/comment_2_7316cba69b9dc0415fea1389238edf25._comment b/doc/bugs/present_files__47__directories_are_dropped_after_a_sync/comment_2_7316cba69b9dc0415fea1389238edf25._comment
new file mode 100644
index 000000000..194f7a3d9
--- /dev/null
+++ b/doc/bugs/present_files__47__directories_are_dropped_after_a_sync/comment_2_7316cba69b9dc0415fea1389238edf25._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 2"
+ date="2014-10-21T20:20:25Z"
+ content="""
+The problem is that there's no way for preferred content expressions to specify that a file is wanted just because some old version of the file is (or was) present.
+
+It's not clear to me how that could be added to the preferred content expressions in an efficient way.
+
+It might be possible to hack `git annex sync --content` and the assistant to look at incoming merges, and queue downloads of newer versions of files before merging.
+
+Also being discussed at <https://github.com/datalad/datalad/issues/6>.
+"""]]
diff --git a/doc/bugs/problems_with_enableremote_on_gcrypt_remote___40__hosted_with_gitolite__41__.mdwn b/doc/bugs/problems_with_enableremote_on_gcrypt_remote___40__hosted_with_gitolite__41__.mdwn
new file mode 100644
index 000000000..4d6e041bb
--- /dev/null
+++ b/doc/bugs/problems_with_enableremote_on_gcrypt_remote___40__hosted_with_gitolite__41__.mdwn
@@ -0,0 +1,107 @@
+### Please describe the problem.
+
+cannot enable an exiting gcrypt special remote after successfully having cloned the git repository; I get this error: "git-annex: uuid mismatch ..." at the end of the enableremote command (see transcript for details)
+
+maybe my fault but cannot understand what I'm doing wrong
+
+### What steps will reproduce the problem?
+
+1. cloned the encrypted repository with: "git clone gcrypt::git.myserver.net:myrepo TEST-myrepo.annex"
+
+2. enabled the special remote with: "git annex enableremote backup type=gcrypt encryption=hybrid gitrepo=git.myserver.net:myrepo"
+
+### What version of git-annex are you using? On what operating system?
+
+[[!format sh """
+git-annex version: 5.20140927~bpo70+2
+build flags: Assistant Pairing S3 Inotify XMPP Feeds Quvi TDFA
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
+remote types: git gcrypt S3 bup directory rsync web tahoe glacier ddar hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+"""]]
+
+### Please provide any additional information below.
+
+[[!format sh """
+
+# transcript of commands and results
+
+(cloning)
+g@renaissance:~$ git clone gcrypt::git.myserver.net:DMS-myrepo TEST-myrepo.annex
+Cloning into 'TEST-myrepo.annex'...
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Decrypting manifest
+gpg: Signature made Thu 16 Oct 2014 12:58:33 CEST
+[...]
+gcrypt: Remote ID is :id:8sucFsBZIGQKXFv5ecSW
+Receiving objects: 100% (3531/3531), 245.40 KiB | 0 bytes/s, done.
+Resolving deltas: 100% (1382/1382), done.
+[...]
+Receiving objects: 100% (636/636), 66.78 KiB | 0 bytes/s, done.
+Resolving deltas: 100% (209/209), done.
+Checking connectivity... done.
+
+
+(annex info)
+g@renaissance:~/TEST-myrepo.annex$ git annex info
+repository mode: indirect
+trusted repositories: (merging origin/git-annex origin/synced/git-annex into git-annex...)
+(Recording state in git...)
+0
+semitrusted repositories: 5
+ -- here
+ 00000000-0000-0000-0000-000000000001 -- web
+ 622362eb-3882-4429-829b-1ec0f299f5a7 -- [omissis]
+ 69b848ef-dd29-43e4-ae1b-73ec6a01f2f6 -- [omissis]
+ ffc5c5d1-6166-4753-a2e4-88727d0f8c7b -- backup
+untrusted repositories: 1
+ b185b2ed-c024-43ac-9049-3bc12a87dacc -- [omissis]
+transfers in progress: none
+available local disk space: 51.53 gigabytes (+1 megabyte reserved)
+local annex keys: 0
+local annex size: 0 bytes
+annexed files in working tree: 212
+size of annexed files in working tree: 210.56 megabytes
+bloom filter size: 16 mebibytes (0% full)
+backend usage:
+ SHA256E: 212
+
+
+(list of remotes)
+g@renaissance:~/TEST-myrepo.annex$ git annex enableremote
+git-annex: Specify the name of the special remote to enable.
+Known special remotes: backup
+
+
+(enabling remote)
+g@renaissance:~/TEST-myrepo.annex$ git annex enableremote backup type=gcrypt encryption=hybrid gitrepo=git.myserver.net:myrepo
+enableremote backup (encryption update) (hybrid cipher with gpg key [omissis]) gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Decrypting manifest
+gpg: Signature made Thu 16 Oct 2014 12:58:33 CEST
+[omissis]
+gcrypt: Remote ID is :id:8sucFsBZIGQKXFv5ecSW
+From gcrypt::git.myserver.net:myrepo
+ * [new branch] synced/master -> backup/synced/master
+ * [new branch] master -> backup/master
+ * [new branch] synced/git-annex -> backup/synced/git-annex
+ * [new branch] git-annex -> backup/git-annex
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Decrypting manifest
+gpg: Signature made Thu 16 Oct 2014 12:58:33 CEST
+[omissis]
+Counting objects: 3, done.
+Compressing objects: 100% (2/2), done.
+Total 3 (delta 0), reused 1 (delta 0)
+gcrypt: Encrypting to: -r [omissis]
+gcrypt: Requesting manifest signature
+gpg: [omissis]: skipped: public key already present
+To gcrypt::git.myserver.net:myserver
+ 1195dda..3254af7 git-annex -> git-annex
+git-annex: uuid mismatch (UUID "78104a6f-16a9-504b-8e8a-d8a3c59351e8",Just (UUID "984e0333-3327-5f21-87a1-35d30f37f337"),":id:8sucFsBZIGQKXFv5ecSW")
+
+# End of transcript or log.
+"""]]
+
+> [[done]]; see comments. --[[Joey]]
diff --git a/doc/bugs/problems_with_enableremote_on_gcrypt_remote___40__hosted_with_gitolite__41__/comment_1_72a97bc3ccb00c623baee874609bb4ca._comment b/doc/bugs/problems_with_enableremote_on_gcrypt_remote___40__hosted_with_gitolite__41__/comment_1_72a97bc3ccb00c623baee874609bb4ca._comment
new file mode 100644
index 000000000..70339747e
--- /dev/null
+++ b/doc/bugs/problems_with_enableremote_on_gcrypt_remote___40__hosted_with_gitolite__41__/comment_1_72a97bc3ccb00c623baee874609bb4ca._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlZ-6dtxJY4cP7shhvV8E6YyuV0Rak8it4"
+ nickname="Giovanni"
+ subject="I messed up that repo"
+ date="2014-10-16T13:31:15Z"
+ content="""
+I'm sure I messed up the repository at some point
+
+the remote repository have a duplicated (I hope just duplicated and not triplicated) UUID: both ffc5c5d1-6166-4753-a2e4-88727d0f8c7b and 984e0333-3327-5f21-87a1-35d30f37f337
+
+on one of my working remotes I already used \"git annex dead 984e0333-3327-5f21-87a1-35d30f37f337\" and synced the special (bare) remote **but** trying to make a new clone and adding the remote special with enableremote i always get the same \"UUID mismatch\" error, listing the (marked) dead UUID
+
+please is there a way to get rid of the mess I did?!? :-)
+I'm tempted to manually add \"annex-uuid = ffc5c5d1-6166-4753-a2e4-88727d0f8c7b\" to the repo \".git/config\" but I fear I'm going to further mess things
+
+sorry for reportng this as a bug... actually it was my fault
+
+best regards
+Giovanni
+
+"""]]
diff --git a/doc/bugs/problems_with_enableremote_on_gcrypt_remote___40__hosted_with_gitolite__41__/comment_2_1bb55c9a35d9447a31237c8bfa24dba9._comment b/doc/bugs/problems_with_enableremote_on_gcrypt_remote___40__hosted_with_gitolite__41__/comment_2_1bb55c9a35d9447a31237c8bfa24dba9._comment
new file mode 100644
index 000000000..c26b0a390
--- /dev/null
+++ b/doc/bugs/problems_with_enableremote_on_gcrypt_remote___40__hosted_with_gitolite__41__/comment_2_1bb55c9a35d9447a31237c8bfa24dba9._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2014-10-28T19:40:37Z"
+ content="""
+The uuid mismatch message tells me that you have tried to enable a special
+remote that has uuid 984e0333-3327-5f21-87a1-35d30f37f337. However, when
+it checked the gcrypt repository, it found that it had gcrypt id
+":id:8sucFsBZIGQKXFv5ecSW", which means its uuid should be
+78104a6f-16a9-504b-8e8a-d8a3c59351e8. I have improved that message to be
+more clear.
+
+Since `git annex info` doesn't list that
+78104a6f-16a9-504b-8e8a-d8a3c59351e8 uuid at all, it seems that
+this gcrypt repository has not been initialized using `git-annex
+initremote`. It's not a gcrypt special remote, but instead is a gcrypt
+repository, that was probably created using `git push`. You can convert it
+to a gcrypt special remote by running `git-annex initremote` and providing
+its repourl. Once that's done and pushed, you will be able to `git annex
+enableremote` it elsewhere.
+"""]]
diff --git a/doc/bugs/problems_with_glacier.mdwn b/doc/bugs/problems_with_glacier.mdwn
new file mode 100644
index 000000000..60e2f7e69
--- /dev/null
+++ b/doc/bugs/problems_with_glacier.mdwn
@@ -0,0 +1,65 @@
+### Please describe the problem.
+Annex errors when copying to glacier.
+
+### What version of git-annex are you using? On what operating system?
+
+OS X 10.9.2 Build 13C64
+
+ git-annex version: 5.20140318-gdcf93d0
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 0 1 2 4
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+> git annex initremote glacier type=glacier encryption=hybrid keyid=E9053BDA datacenter=us-west-1 ║██████████╠ ∞ ∞
+initremote glacier (encryption setup) (hybrid cipher with gpg key B608B8F6E9053BDA) ok
+(Recording state in git...)
+> git annex copy Cobalt\ Strike\ Tradecraft --to=glacier --debug
+[2014-03-27 07:27:39 PDT] read: git ["--git-dir=/Users/akraut/Desktop/annexes/media/.git","--work-tree=/Users/akraut/Desktop/annexes/media","show-ref","git-annex"]
+[2014-03-27 07:27:39 PDT] read: git ["--git-dir=/Users/akraut/Desktop/annexes/media/.git","--work-tree=/Users/akraut/Desktop/annexes/media","show-ref","--hash","refs/heads/git-annex"]
+[2014-03-27 07:27:39 PDT] read: git ["--git-dir=/Users/akraut/Desktop/annexes/media/.git","--work-tree=/Users/akraut/Desktop/annexes/media","log","refs/heads/git-annex..9f59057d857784e6ae6b3dcd6793092264375913","--oneline","-n1"]
+[2014-03-27 07:27:39 PDT] chat: git ["--git-dir=/Users/akraut/Desktop/annexes/media/.git","--work-tree=/Users/akraut/Desktop/annexes/media","cat-file","--batch"]
+[2014-03-27 07:27:39 PDT] read: git ["config","--null","--list"]
+[2014-03-27 07:27:39 PDT] read: git ["--git-dir=/Users/akraut/Desktop/annexes/media/.git","--work-tree=/Users/akraut/Desktop/annexes/media","ls-files","--cached","-z","--","Cobalt Strike Tradecraft"]
+copy Cobalt Strike Tradecraft/Tradecraft__1_of_9____Introduction.mp4 (gpg) [2014-03-27 07:27:39 PDT] chat: gpg ["--quiet","--trust-model","always","--decrypt"]
+
+You need a passphrase to unlock the secret key for
+user: "Andrew Mark Kraut <akraut@gmail.com>"
+4096-bit ELG-E key, ID 353E49B9, created 2008-11-11 (main key ID E9053BDA)
+
+(checking glacier...) [2014-03-27 07:27:46 PDT] read: glacier ["--region=us-west-1","archive","checkpresent","git-annex: Maybe.fromJust: Nothing
+
+# End of transcript or log.
+"""]]
+
+> This was a bug introduced last month, it forgot to receord the
+> datacenter and vault used when initializing the glacier repository.
+>
+> I've fixed the bug, but this does not fix repositories created with
+> the broken version. I considered just making it use the default
+> datacenter and vault for such a repository, but
+> a) those may change in the future
+> and I don't want to have to worry about breaking such a repository
+> going forward and b) someone may have overridden it to use another
+> datacenter or vault name and so it shouldn't blindly assume the defaults.
+>
+> Instead, there's a manual fix up step you need to do. Luckily quite easy.
+> For example:
+>
+> git annex enableremote myglacier datacenter=us-east-1 vault=myglacier-fae9be57-8eb4-47af-932f-136b9b40e669
+>
+> The default datacenter is us-east-1, and the default vault name is
+> "$remotename-$uuid". So you just have to tell it these values
+> once with an enableremote command, and it will then work.
+
+> You don't even need to get the fixed version of git-annex to work
+> around the bug this way.. Although it does have better error messages
+> too. [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/problems_with_glacier/comment_1_8d233428a16ae4276d9c69b329e8216b._comment b/doc/bugs/problems_with_glacier/comment_1_8d233428a16ae4276d9c69b329e8216b._comment
new file mode 100644
index 000000000..e4556dc82
--- /dev/null
+++ b/doc/bugs/problems_with_glacier/comment_1_8d233428a16ae4276d9c69b329e8216b._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmRFKwny4rArBaz-36xTcsJYqKIgdDaw5Q"
+ nickname="Andrew"
+ subject="comment 1"
+ date="2014-03-27T14:46:19Z"
+ content="""
+I just updated to the latest glacier-cli and boto and have confirmed that those are working properly and that the vault has been created on glacier:
+[[!format sh \"\"\"
+> glacier --region=us-west-1 vault list
+glacier-571d1ec3-8870-46cb-977e-15830a2b474d
+\"\"\"]]
+"""]]
diff --git a/doc/bugs/problems_with_utf8_names.mdwn b/doc/bugs/problems_with_utf8_names.mdwn
deleted file mode 100644
index aeeb16be6..000000000
--- a/doc/bugs/problems_with_utf8_names.mdwn
+++ /dev/null
@@ -1,81 +0,0 @@
-This bug is reopened to track some new UTF-8 filename issues caused by GHC
-7.4. In this version of GHC, git-annex's hack to support filenames in any
-encoding no longer works. Even unicode filenames fail to work when
-git-annex is built with 7.4. --[[Joey]]
-
-This bug is now fixed in current master. Once again, git-annex will work
-for all filename encodings, and all system encodings. It will
-only build with the new GHC. [[done]] --[[Joey]]
-
-----
-
-Old, now fixed bug report follows:
-
-There are problems with displaying filenames in UTF8 encoding, as shown here:
-
- $ echo $LANG
- en_GB.UTF-8
- $ git init
- $ git annex init test
- [...]
- $ touch "Umlaut Ü.txt"
- $ git annex add Uml*
- add Umlaut Ã.txt ok
- (Recording state in git...)
- $ find -name U\* | hexdump -C
- 00000000 2e 2f 55 6d 6c 61 75 74 20 c3 9c 2e 74 78 74 0a |./Umlaut ...txt.|
- 00000010
- $ git annex find | hexdump -C
- 00000000 55 6d 6c 61 75 74 20 c3 83 c2 9c 2e 74 78 74 0a |Umlaut .....txt.|
- 00000010
- $
-
-It looks like the common latin1-to-UTF8 encoding. Functionality other than otuput seems not to be affected.
-
-> Yes, I believe that git-annex is reading filename data from git
-> as a stream of char8s, and not decoding unicode in it into logical
-> characters.
-> Haskell then I guess, tries to unicode encode it when it's output to
-> the console.
-> This only seems to matter WRT its output to the console; the data
-> does not get mangled internally and so it accesses the right files
-> under the hood.
->
-> I am too new to haskell to really have a handle on how to handle
-> unicode and other encodings issues with it. In general, there are three
-> valid approaches: --[[Joey]]
->
-> 1. Convert all input data to unicode and be unicode clean end-to-end
-> internally. Problimatic here since filenames may not necessarily be
-> encoded in utf-8 (an archive could have historical filenames using
-> varying encodings), and you don't want which files are accessed to
-> depend on locale settings.
-> > I tried to do this by making parts of GitRepo call
-> > Codec.Binary.UTF8.String.decodeString when reading filenames from
-> > git. This seemed to break attempts to operate on the files,
-> > weirdly encoded strings were seen in syscalls in strace.
-> 1. Keep input and internal data un-decoded, but decode it when
-> outputting a filename (assuming the filename is encoded using the
-> user's configured encoding), and allow haskell's output encoding to then
-> encode it according to the user's locale configuration.
-> > This is now implemented. I'm not very happy that I have to watch
-> > out for any place that a filename is output and call `filePathToString`
-> > on it, but there are really not too many such places in git-annex.
-> >
-> > Note that this only affects filenames apparently.
-> > (Names of files in the annex, and also some places where names
-> > of keys are displayed.) Utf-8 in the uuid.map file etc seems
-> > to be handled cleanly.
-> 1. Avoid encodings entirely. Mostly what I'm doing now; probably
-> could find a way to disable encoding of console output. Then the raw
-> filename would be displayed, which should work ok. git-annex does
-> not really need to pull apart filenames; they are almost entirely
-> opaque blobs. I guess that the `--exclude` option is the exception
-> to that, but it is currently not unicode safe anyway. (Update: tried
-> `--exclude` again, seems it is unicode clean..)
-> One other possible
-> issue would be that this could cause problems if git-annex were
-> translated.
-> > On second thought, I switched to this. Any decoding of a filename
-> > is going to make someone unhappy; the previous approach broke
-> > non-utf8 filenames.
diff --git a/doc/bugs/problems_with_utf8_names/comment_10_c53c309771caa41accab5523cc6998dd._comment b/doc/bugs/problems_with_utf8_names/comment_10_c53c309771caa41accab5523cc6998dd._comment
deleted file mode 100644
index c60168aa0..000000000
--- a/doc/bugs/problems_with_utf8_names/comment_10_c53c309771caa41accab5523cc6998dd._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.43"
- subject="comment 10"
- date="2014-01-13T19:20:29Z"
- content="""
-No, you're wrong: Git-annex supports every filepath encoding. This bug report has been fixed, and closed for 2 years now. git-annex treats filepaths as bytestrings (essentially).
-
-Whatever problem you are having must have some other cause.
-"""]]
diff --git a/doc/bugs/problems_with_utf8_names/comment_1_3c7e3f021c2c94277eecf9c8af6cec5f._comment b/doc/bugs/problems_with_utf8_names/comment_1_3c7e3f021c2c94277eecf9c8af6cec5f._comment
deleted file mode 100644
index 692b5d537..000000000
--- a/doc/bugs/problems_with_utf8_names/comment_1_3c7e3f021c2c94277eecf9c8af6cec5f._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="http://adamspiers.myopenid.com/"
- nickname="Adam"
- subject="Any update on this?"
- date="2011-12-24T01:05:07Z"
- content="""
-I just noticed this issue, and was wondering what the current status is.
-
- % ls -l 04\ -\ Orixás.mp3
- -rw-r--r-- 1 adam users 8377816 Jul 12 2007 04 - Orixás.mp3
- % echo 04\ -\ Orixás.mp3 | od -c
- 0000000 0 4 - O r i x 303 241 s . m p 3
- 0000020 \n
- 0000021
- % git annex add 04\ -\ Orixás.mp3
- git-annex: /home/adam/music/RotC/transcribe/04 - Orixás.mp3: getSymbolicLinkStatus: does not exist (No such file or directory)
-"""]]
diff --git a/doc/bugs/problems_with_utf8_names/comment_2_bad4c4c5f54358d1bc0ab2adc713782a._comment b/doc/bugs/problems_with_utf8_names/comment_2_bad4c4c5f54358d1bc0ab2adc713782a._comment
deleted file mode 100644
index a45706e4a..000000000
--- a/doc/bugs/problems_with_utf8_names/comment_2_bad4c4c5f54358d1bc0ab2adc713782a._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://www.joachim-breitner.de/"
- nickname="nomeata"
- subject="comment 2"
- date="2011-12-24T12:49:40Z"
- content="""
-This (rather longish) thread discusses the current situation, the planned changes for 7.2 and the various issues: http://haskell.org/pipermail/glasgow-haskell-users/2011-November/021115.html
-
-The summary seems to be: From 7.2 on, getDirectoryContents _will_ return proper Strings, i.e. where a Char represents a Unicode code point, and not a Word8, which will fix the problem of outputting them.
-"""]]
diff --git a/doc/bugs/problems_with_utf8_names/comment_3_4f936a5d3f9c7df64c8a87e62b7fbfdc._comment b/doc/bugs/problems_with_utf8_names/comment_3_4f936a5d3f9c7df64c8a87e62b7fbfdc._comment
deleted file mode 100644
index 9fef2eb1f..000000000
--- a/doc/bugs/problems_with_utf8_names/comment_3_4f936a5d3f9c7df64c8a87e62b7fbfdc._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://www.joachim-breitner.de/"
- nickname="nomeata"
- subject="comment 3"
- date="2011-12-24T12:51:43Z"
- content="""
-An alternative that is available from ghc 7.4 on is a pure ByteString based unix API: http://thread.gmane.org/gmane.comp.lang.haskell.libraries/16556
-"""]]
diff --git a/doc/bugs/problems_with_utf8_names/comment_4_93bee35f5fa7744834994bc7a253a6f9._comment b/doc/bugs/problems_with_utf8_names/comment_4_93bee35f5fa7744834994bc7a253a6f9._comment
deleted file mode 100644
index 5e11af6ab..000000000
--- a/doc/bugs/problems_with_utf8_names/comment_4_93bee35f5fa7744834994bc7a253a6f9._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 4"
- date="2011-12-24T16:49:13Z"
- content="""
-Adam, this bug was fixed a long time ago, first using option #2 above, but later switching to option #3 -- git-annex treats filenames as opaque binary blobs and never decodes them in any encoding; haskell's normal encoding support for stdio is disabled.
-
-And it never resulted in a failure like you show. I cannot reproduce your problem, but it is a different bug, please open a new bug report.
-"""]]
diff --git a/doc/bugs/problems_with_utf8_names/comment_5_519cda534c7aea7f5ad5acd3f76e21fa._comment b/doc/bugs/problems_with_utf8_names/comment_5_519cda534c7aea7f5ad5acd3f76e21fa._comment
deleted file mode 100644
index 96b0ffed0..000000000
--- a/doc/bugs/problems_with_utf8_names/comment_5_519cda534c7aea7f5ad5acd3f76e21fa._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawk6QAwUsFHpr3Km1yQbg8hf3S7RDYf7hX4"
- nickname="Lauri"
- subject="comment 5"
- date="2012-01-26T22:13:18Z"
- content="""
-I also encountered Adam's bug. The problem seems to be that communication with the git process is done with `Char8`-bytestrings. So, when `L.unpack` is called, all filenames that git outputs (with `ls-files` or `ls-tree`) are interpreted to be in latin-1, which wreaks havoc if they are really in UTF-8.
-
-I suspect that it would be enough to just switch to standard `String`s (or `Data.Text.Text`) instead of bytestrings for textual data, and to `Word8`-bytestrings for pure binary data. GHC should nowadays handle locale-dependent encoding of `String`s transparently.
-
-"""]]
diff --git a/doc/bugs/problems_with_utf8_names/comment_6_52e0bfff2b177b6f92e226b25d2f3ff1._comment b/doc/bugs/problems_with_utf8_names/comment_6_52e0bfff2b177b6f92e226b25d2f3ff1._comment
deleted file mode 100644
index 093616d47..000000000
--- a/doc/bugs/problems_with_utf8_names/comment_6_52e0bfff2b177b6f92e226b25d2f3ff1._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 6"
- date="2012-01-27T21:00:06Z"
- content="""
-Lauri, what version of GHC do you have that behaves this way? 7.0.4 does not.
-"""]]
diff --git a/doc/bugs/problems_with_utf8_names/comment_7_0cc588f787d6eecfa19a8f6cee4b07b5._comment b/doc/bugs/problems_with_utf8_names/comment_7_0cc588f787d6eecfa19a8f6cee4b07b5._comment
deleted file mode 100644
index 5a929940d..000000000
--- a/doc/bugs/problems_with_utf8_names/comment_7_0cc588f787d6eecfa19a8f6cee4b07b5._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawk6QAwUsFHpr3Km1yQbg8hf3S7RDYf7hX4"
- nickname="Lauri"
- subject="comment 7"
- date="2012-01-28T00:21:40Z"
- content="""
-7.2. nomeata already explained the issue. I got utf-8 filenames to work on a utf-8 locale by switching from Char8-bytestrings to UTF8-bytestrings, and adding `hSetEncoding h localeEncoding` to suitable places. Making things work properly with an arbitrary locale encoding would be more complicated.
-"""]]
diff --git a/doc/bugs/problems_with_utf8_names/comment_8_ff5c6da9eadfee20c18c86b648a62c47._comment b/doc/bugs/problems_with_utf8_names/comment_8_ff5c6da9eadfee20c18c86b648a62c47._comment
deleted file mode 100644
index dcfd59bce..000000000
--- a/doc/bugs/problems_with_utf8_names/comment_8_ff5c6da9eadfee20c18c86b648a62c47._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 8"
- date="2012-01-28T19:40:34Z"
- content="""
-Lauri a scratch patch would be very helpful. Encoding stuff makes my head explode.
-
-However, I am very worried by haskell's changes WRT unicode and filenames. Based on user input, git-annex users like to use it on diverse sets of files, with diverse and ill-defined encodings. Faffing about with converting between encodings seems likely to speactacularly fail.
-"""]]
diff --git a/doc/bugs/problems_with_utf8_names/comment_9_f358e617799e5a4e3afc6536d419eb08._comment b/doc/bugs/problems_with_utf8_names/comment_9_f358e617799e5a4e3afc6536d419eb08._comment
deleted file mode 100644
index afaef01e2..000000000
--- a/doc/bugs/problems_with_utf8_names/comment_9_f358e617799e5a4e3afc6536d419eb08._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="Still a problem"
- date="2014-01-09T18:20:55Z"
- content="""
-I can confirm that this is still a problem. My iTunes Music folder contains songs with Unicode in the file names, and git-annex fails to sync it properly between Mac, ZFS and Linux.
-
-I realize that supporting every filesystem encoding is impossible, but if you used something like `system-filepath` and expected UTF8, it might be better than the current state of affairs.
-"""]]
diff --git a/doc/bugs/protocol_mismatch_after_interrupt.mdwn b/doc/bugs/protocol_mismatch_after_interrupt.mdwn
new file mode 100644
index 000000000..c2c159057
--- /dev/null
+++ b/doc/bugs/protocol_mismatch_after_interrupt.mdwn
@@ -0,0 +1,33 @@
+### Please describe the problem.
+
+git annex now fails to transfer a fail with: `protocol version mismatch -- is your shell clean?`
+
+### What steps will reproduce the problem?
+
+start a transfer, then switch between your wireless and wired connexions (I am using network-manager), then interrupt the transfer with control-c.
+
+### What version of git-annex are you using? On what operating system?
+
+on my side: 5.20140306~bpo70 on debian wheezy amd64
+
+on the other side: 4.20130815 on ubuntu saucy i386
+
+### Please provide any additional information below.
+
+[[!format sh """
+anarcat@angela:video$ git annex copy --to t films/foo.mkv
+copy films/foo.mkv (checking t...) (to t...)
+protocol version mismatch -- is your shell clean?
+(see the rsync man page for an explanation)
+rsync error: protocol incompatibility (code 2) at compat.c(174) [sender=3.0.9]
+
+ rsync failed -- run git annex again to resume file transfer
+failed
+git-annex: copy: 1 failed
+"""]]
+
+workaround: `cd .git/annex/; mv transfer transfer.old` on the other side.
+
+-- [[anarcat]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/protocol_mismatch_after_interrupt/comment_1_415de83053dc61a64cf2e301223f1916._comment b/doc/bugs/protocol_mismatch_after_interrupt/comment_1_415de83053dc61a64cf2e301223f1916._comment
new file mode 100644
index 000000000..6247cf42e
--- /dev/null
+++ b/doc/bugs/protocol_mismatch_after_interrupt/comment_1_415de83053dc61a64cf2e301223f1916._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 1"
+ date="2014-04-20T16:52:15Z"
+ content="""
+Last time rsync seemed to fail like this it was really the remote git-annex-shell failing on an encoding problem:
+[[!commit 0b12db64d834979d49ed378235b0c19b34e4a4d6]]
+
+It seems I would need to see the transfer info files you moved out of the way to say more. Or you could copy the back, reproduce the problem, find the git-annex-shell command that is being run (using --debug), and see if you can run it on the remote system and reproduce the problem there without rsync in the picture, in order to get the actual error message.
+"""]]
diff --git a/doc/bugs/protocol_mismatch_after_interrupt/comment_2_e0894bd0d0037ee40050697748d4be47._comment b/doc/bugs/protocol_mismatch_after_interrupt/comment_2_e0894bd0d0037ee40050697748d4be47._comment
new file mode 100644
index 000000000..5a1566b89
--- /dev/null
+++ b/doc/bugs/protocol_mismatch_after_interrupt/comment_2_e0894bd0d0037ee40050697748d4be47._comment
@@ -0,0 +1,47 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="72.0.72.144"
+ subject="more info"
+ date="2014-08-11T01:55:28Z"
+ content="""
+here's another occurence of that bug, with --debug this time:
+
+[[!format txt \"\"\"
+anarcat@angela:video$ git annex --debug get films/Example/
+[2014-08-10 21:49:23 EDT] read: git [\"--git-dir=/home/anarcat/video/.git\",\"--work-tree=/home/anarcat/video\",\"ls-files\",\"--cached\",\"-z\",\"--\",\"films/Example/\"]
+get films/Example/Example.mkv [2014-08-10 21:49:23 EDT] read: git [\"--git-dir=/home/anarcat/video/.git\",\"--work-tree=/home/anarcat/video\",\"show-ref\",\"git-annex\"]
+[2014-08-10 21:49:23 EDT] read: git [\"--git-dir=/home/anarcat/video/.git\",\"--work-tree=/home/anarcat/video\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+[2014-08-10 21:49:23 EDT] read: git [\"--git-dir=/home/anarcat/video/.git\",\"--work-tree=/home/anarcat/video\",\"log\",\"refs/heads/git-annex..7357c09b70e87f35fdc253316520975c94308299\",\"-n1\",\"--pretty=%H\"]
+[2014-08-10 21:49:23 EDT] read: git [\"--git-dir=/home/anarcat/video/.git\",\"--work-tree=/home/anarcat/video\",\"log\",\"refs/heads/git-annex..30bd8b2d719734a73cbadba28dbc0c99107c201f\",\"-n1\",\"--pretty=%H\"]
+[2014-08-10 21:49:23 EDT] read: git [\"--git-dir=/home/anarcat/video/.git\",\"--work-tree=/home/anarcat/video\",\"log\",\"refs/heads/git-annex..bde2aae11f2dcb3fb648ea5e5019fbab56301855\",\"-n1\",\"--pretty=%H\"]
+[2014-08-10 21:49:23 EDT] chat: git [\"--git-dir=/home/anarcat/video/.git\",\"--work-tree=/home/anarcat/video\",\"cat-file\",\"--batch\"]
+[2014-08-10 21:49:23 EDT] read: git [\"config\",\"--null\",\"--list\"]
+(from origin...) [2014-08-10 21:49:23 EDT] read: ssh [\"-O\",\"stop\",\"-S\",\"anarc.at\",\"-o\",\"ControlMaster=auto\",\"-o\",\"ControlPersist=yes\",\"localhost\"]
+
+[2014-08-10 21:49:23 EDT] read: rsync [\"--progress\",\"--inplace\",\"--perms\",\"-e\",\"'ssh' '-S' '.git/annex/ssh/anarc.at' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=yes' '-T' 'anarc.at' 'git-annex-shell ''sendkey'' ''/srv/video'' ''SHA256E-s815462420--a9a6eb45540fd7f3f2598453ef0fc948bec9abb764e85624d66c0707cbd93b22.mkv'' --uuid 5adbab10-0f7a-467b-b0d8-5d7af2223103 ''--'' ''remoteuuid=ae3d62e6-49be-4340-ba25-c8736a1637c4'' ''direct='' ''associatedfile=films/Example/Example.mkv'' ''--'''\",\"--\",\"dummy:\",\"/home/anarcat/video/.git/annex/tmp/SHA256E-s815462420--a9a6eb45540fd7f3f2598453ef0fc948bec9abb764e85624d66c0707cbd93b22.mkv\"]
+protocol version mismatch -- is your shell clean?
+(see the rsync man page for an explanation)
+rsync error: protocol incompatibility (code 2) at compat.c(174) [Receiver=3.0.9]
+
+ rsync failed -- run git annex again to resume file transfer
+
+ Unable to access these remotes: origin
+
+ Try making some of these repositories available:
+ 31912b57-62a5-475c-87a7-582b5492a216 -- WD green 1.5TB backup drive
+ 5adbab10-0f7a-467b-b0d8-5d7af2223103 -- main (anarcat@marcos:/srv/video) [origin]
+failed
+git-annex: get: 1 failed
+\"\"\"]]
+
+running rsync directly doesn't give me much more info, however, running the `-e` command does:
+
+[[!format txt \"\"\"
+anarcat@angela:video$ ssh '-S' '.git/annex/ssh/anarc.at' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=yes' '-T' 'anarc.at' 'git-annex-shell ''sendkey'' ''/srv/video'' ''SHA256E-s815462420--a9a6eb45540fd7f3f2598453ef0fc948bec9abb764e85624d66c0707cbd93b22.mkv'' --uuid 5adbab10-0f7a-467b-b0d8-5d7af2223103 ''--'' ''remoteuuid=ae3d62e6-49be-4340-ba25-c8736a1637c4'' ''direct='' ''associatedfile=films/Example/Example.mkv'' ''--'''
+(transfer already in progress)
+\"\"\"]]
+
+so it seems that the remote thinks the transfer is still in progress.
+
+to reproduce this, switch between a wired and wireless connexion before interrupting the process.
+"""]]
diff --git a/doc/bugs/protocol_mismatch_after_interrupt/comment_3_3ff700a3daf515fceb715514a7cbd82a._comment b/doc/bugs/protocol_mismatch_after_interrupt/comment_3_3ff700a3daf515fceb715514a7cbd82a._comment
new file mode 100644
index 000000000..742109cd6
--- /dev/null
+++ b/doc/bugs/protocol_mismatch_after_interrupt/comment_3_3ff700a3daf515fceb715514a7cbd82a._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 3"
+ date="2014-08-15T18:02:12Z"
+ content="""
+Right .. Normally it makes sense to prevent redundant transfers, but this is not the case when git-annex-shell sendkey is sending a file to a remote. Especially since the rsync protocol does not transport stderr output over the link to display to the user.
+
+Should be an easy fix.
+"""]]
diff --git a/doc/bugs/proxy_command_fails_on_Windows.mdwn b/doc/bugs/proxy_command_fails_on_Windows.mdwn
new file mode 100644
index 000000000..370764e03
--- /dev/null
+++ b/doc/bugs/proxy_command_fails_on_Windows.mdwn
@@ -0,0 +1,36 @@
+### Please describe the problem.
+
+The new ''git annex proxy'' command fails every call in the 2014-11-28 daily Windows build.
+
+### What steps will reproduce the problem?
+
+1) Install daily Windows build via https://downloads.kitenet.net/git-annex/autobuild/windows/.
+
+2) Run, in git bash:
+
+ $ git annex proxy -- pull
+ git-annex: pull: createProcess: does not exist (No such file or directory)
+ failed
+ git-annex: proxy: 1 failed
+
+### What version of git-annex are you using? On what operating system?
+
+Daily Windows build 5.20141128-g70f997e on Windows 7 x64
+
+### Please provide any additional information below.
+
+ $ git annex version
+ git-annex version: 5.20141128-g70f997e
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feed
+ s Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SH
+ A256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar ho
+ ok external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 2 3 4
+
+> Seems the man page was mis-read, or possibly I've fixed it,
+> since it certianly says you need to specify "-- git cmd", not
+> just "-- cmd". [[done]] --[[Joey]]
diff --git a/doc/bugs/proxy_command_fails_on_Windows/comment_1_a6d85bd65cd4df957ed108b2966584ef._comment b/doc/bugs/proxy_command_fails_on_Windows/comment_1_a6d85bd65cd4df957ed108b2966584ef._comment
new file mode 100644
index 000000000..0eaf88fa3
--- /dev/null
+++ b/doc/bugs/proxy_command_fails_on_Windows/comment_1_a6d85bd65cd4df957ed108b2966584ef._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-12-01T21:51:40Z"
+ content="""
+If you want to run "git pull" using the proxy, you need to use:
+
+git annex proxy -- git pull
+
+Like it says on the man page. Instead you told it to run a command named
+"pull", which would work if you had a program by that name, but you don't.
+:)
+"""]]
diff --git a/doc/bugs/proxy_command_fails_on_Windows/comment_1_f4cb0a0ab445a8e9993c6736a6e23887._comment b/doc/bugs/proxy_command_fails_on_Windows/comment_1_f4cb0a0ab445a8e9993c6736a6e23887._comment
new file mode 100644
index 000000000..b242736df
--- /dev/null
+++ b/doc/bugs/proxy_command_fails_on_Windows/comment_1_f4cb0a0ab445a8e9993c6736a6e23887._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmWBvsZvSsAL8P2ye3F0OBStjFCVnOImzM"
+ nickname="Jarno"
+ subject="Not a bug"
+ date="2014-11-28T18:25:40Z"
+ content="""
+This was, in fact, just an unclear error message. The command was missing \"git\", and so should have been:
+
+ $ git annex proxy -- git pull
+"""]]
diff --git a/doc/bugs/quvi_0.9.5_does_not_work_with_git-annex.mdwn b/doc/bugs/quvi_0.9.5_does_not_work_with_git-annex.mdwn
deleted file mode 100644
index 7e760bb70..000000000
--- a/doc/bugs/quvi_0.9.5_does_not_work_with_git-annex.mdwn
+++ /dev/null
@@ -1,87 +0,0 @@
-### Please describe the problem.
-The syntax of quvi has changed somewhat, breaking use in git-annex.
-
-quvi now requires one of four «commands» to be supplied: dump, get, info, scan
-
-### What steps will reproduce the problem?
-Install quvi 0.9.5, attempt to download a video.
-
-### What version of git-annex are you using? On what operating system?
-git-annex version: 5.20140227-gd872677
-
-On ArchLinux up-to-date as of 28th of February 2014
-
-### Please provide any additional information below.
-
-[[!format text """
-[0 zerodogg@browncoats Dokumentar]$ git annex addurl 'quvi:https://www.youtube.com/watch?v=de20gulo78g' --debug
-[2014-02-28 09:33:22 CET] read: quvi ["--verbosity","quiet","-c","http","https://www.youtube.com/watch?v=de20gulo78g"]
-error: `--verbosity' is not a quvi command. See 'quvi help'.
-git-annex: quvi failed
-[1 zerodogg@browncoats Dokumentar]$ quvi --version
-quvi v0.9.5
- built on 2013-11-12 17:02:06 +0000 for x86_64-unknown-linux-gnu
- with gcc, -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4
- configuration: --prefix=/usr
-libquvi v0.9.4
- built on 2013-12-17 11:27:41 +0000 for x86_64-unknown-linux-gnu
- with gcc, -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4
- configuration: --prefix=/usr
-libquvi-scripts v0.9.20131130
- configuration: --prefix=/usr --with-nsfw --with-geoblocked
-
-Copyright (C) 2012,2013 Toni Gundogdu <legatvs@gmail.com>
-quvi comes with ABSOLUTELY NO WARRANTY. You may redistribute copies of
-quvi under the terms of the GNU Affero General Public License version 3
-or later. For more information, see <http://www.gnu.org/licenses/agpl.html>.
-
-To contact the developers, please mail to <quvi-devel@lists.sourceforge.net>
-[0 zerodogg@browncoats Dokumentar]$ quvi
-Usage: quvi [--version] [--help] COMMAND [ARGS]
-
-quvi commands are:
- dump Query and print the property values
- get Save media stream to a file
- info Inspect the configuration and the script properties
- scan Scan and print the found embedded media URLs
-
-See 'quvi help COMMAND' for more information on a specific command.
-[0 zerodogg@browncoats Dokumentar]$ git annex version
-git-annex version: 5.20140227-gd872677
-build flags: Assistant Webapp Pairing S3 Inotify DBus XMPP Feeds Quvi TDFA
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
-remote types: git gcrypt S3 bup directory rsync web tahoe glacier hook external
-local repository version: 5
-supported repository version: 5
-upgrade supported from repository versions: 0 1 2 4
-"""]]
-
-quvi dump is probably something you could use
-
-[[!format text """
-[0 zerodogg@browncoats Dokumentar]$ quvi dump 'https://www.youtube.com/watch?v=de20gulo78g'
-QUVI_MEDIA_PROPERTY_THUMBNAIL_URL=https://i1.ytimg.com/vi/de20gulo78g/default.jpg
-QUVI_MEDIA_PROPERTY_TITLE=[Linux.conf.au 2013] - Git-annex
-QUVI_MEDIA_PROPERTY_ID=de20gulo78g
-QUVI_MEDIA_PROPERTY_START_TIME_MS=0
-QUVI_MEDIA_PROPERTY_DURATION_MS=2328000
-QUVI_MEDIA_STREAM_PROPERTY_VIDEO_ENCODING=vp8.0
-QUVI_MEDIA_STREAM_PROPERTY_AUDIO_ENCODING=vorbis
-QUVI_MEDIA_STREAM_PROPERTY_CONTAINER=webm
-QUVI_MEDIA_STREAM_PROPERTY_URL=[Long googlevideo.com URL]
-QUVI_MEDIA_STREAM_PROPERTY_ID=medium_webm_i43_360p
-QUVI_MEDIA_STREAM_PROPERTY_VIDEO_BITRATE_KBIT_S=0
-QUVI_MEDIA_STREAM_PROPERTY_AUDIO_BITRATE_KBIT_S=0
-QUVI_MEDIA_STREAM_PROPERTY_VIDEO_HEIGHT=360
-QUVI_MEDIA_STREAM_PROPERTY_VIDEO_WIDTH=640
-"""]]
-
-It does however output some status messages to STDERR (which it removes later) that doesn't look to be possible to suppress.
-
-[[!format text """
-[0 zerodogg@browncoats Dokumentar]$ quvi dump 'https://www.youtube.com/watch?v=de20gulo78g' >/dev/null 2>stderr
-[0 zerodogg@browncoats Dokumentar]$ cat -v stderr
-status: o--- resolve <url> ... ^M ^Mstatus: -o-- fetch <url> ... ^M ^M% [0 zerodogg@browncoats Dokumentar]$
-""" ]]
-
-> quvi version now probed at runtime. [[done]] --[[Joey]]
diff --git a/doc/bugs/quvi_0.9.5_does_not_work_with_git-annex/comment_1_d0d2bcd97ef5c9bce8a57c4184a176e0._comment b/doc/bugs/quvi_0.9.5_does_not_work_with_git-annex/comment_1_d0d2bcd97ef5c9bce8a57c4184a176e0._comment
deleted file mode 100644
index 9f8650e95..000000000
--- a/doc/bugs/quvi_0.9.5_does_not_work_with_git-annex/comment_1_d0d2bcd97ef5c9bce8a57c4184a176e0._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.146"
- subject="comment 1"
- date="2014-02-28T17:52:07Z"
- content="""
-git-annex supports quvi 0.9.4 since 5.20131127. Unless the syntax has changed in some breaking way between 0.9.4 and 0.9.5, it seems most likely to me that your system is using a git-annex compiled with support for the old quvi, and it just needs to be recompiled to use the new one.
-
-I could do run-time quvi version detection, but there's an obvious performance penalty.
-"""]]
diff --git a/doc/bugs/quvi_0.9.5_does_not_work_with_git-annex/comment_2_ff9661198257b8c5e2e8ca3d85a7471c._comment b/doc/bugs/quvi_0.9.5_does_not_work_with_git-annex/comment_2_ff9661198257b8c5e2e8ca3d85a7471c._comment
deleted file mode 100644
index f05b9b069..000000000
--- a/doc/bugs/quvi_0.9.5_does_not_work_with_git-annex/comment_2_ff9661198257b8c5e2e8ca3d85a7471c._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="EskildHustvedt"
- ip="80.202.213.223"
- subject="comment 2"
- date="2014-02-28T17:56:42Z"
- content="""
-That explains it. I'm using the standalone build, which I suppose then is built with the old quvi. I guess I could write a shell script wrapper that converts the old syntax to the new.
-"""]]
diff --git a/doc/bugs/reinject_should_leave_file_in_place_on_checksum_mismatch.mdwn b/doc/bugs/reinject_should_leave_file_in_place_on_checksum_mismatch.mdwn
deleted file mode 100644
index a487b2d3d..000000000
--- a/doc/bugs/reinject_should_leave_file_in_place_on_checksum_mismatch.mdwn
+++ /dev/null
@@ -1,15 +0,0 @@
-What steps will reproduce the problem?
-
-Run git annex reinject source dest with a file that has the wrong content and thus a wrong checksum.
-
-What is the expected output? What do you see instead?
-
-The file should stay in it's original location. Currently it's moved to .git/annex/bad with a mangled filename.
-
-What version of git-annex are you using? On what operating system?
-
-git-annex version: 3.20120807
-Ubuntu 12.04 updated on Aug 20th
-annex was installed via cabal on Aug 20th, all other packages are from ubuntu.
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids.mdwn b/doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids.mdwn
new file mode 100644
index 000000000..41122f8a6
--- /dev/null
+++ b/doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids.mdwn
@@ -0,0 +1,30 @@
+### Please describe the problem.
+
+I've setup a gcrypt based git backup repository as per the examples here:
+
+http://git-annex.branchable.com/tips/fully_encrypted_git_repositories_with_gcrypt/
+
+It all seems to work well until I try to do any kind git annex operation from the console on the gcrypted repo on the remote server. If I run a `git annex fsck` (this seems a reasonable thing to do) then it initialises the encrypted remote with a different uuid to the one in the creation step. The initial repository that created the repo seems to work okay but it's no longer possible to add further repositories without getting conflicting uuid errors.
+
+### What steps will reproduce the problem?
+
+
+### What version of git-annex are you using? On what operating system?
+
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> [[fixed|done]]; <>. I have updated the OSX autobuilder so tonight's
+> build will include the fixed git-remote-gcrypt. --[[Joey]]
+>
+> Note that gcrypt repositories affected by this bug are in fact empty, so
+> the first time a push is made with the fixed gcrypt it will probably
+> generate a new gcrypt-id and push everything.
diff --git a/doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids/comment_1_11af589cf646cb7552eeb5c7401934f5._comment b/doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids/comment_1_11af589cf646cb7552eeb5c7401934f5._comment
new file mode 100644
index 000000000..a8a4af4cf
--- /dev/null
+++ b/doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids/comment_1_11af589cf646cb7552eeb5c7401934f5._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnXybLxkPMYpP3yw4b_I6IdC3cKTD-xEdU"
+ nickname="Matt"
+ subject="comment 1"
+ date="2014-04-27T15:04:09Z"
+ content="""
+Thinking about it some more perhaps it's not a reasonable thing to do if you don't want people to be able to discover info about the repo. However it would be good to somehow prevent git-annex from running a local init operation when working with a gcrypt repo.
+"""]]
diff --git a/doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids/comment_2_d81cb9b47dea34b639dc250bb231010a._comment b/doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids/comment_2_d81cb9b47dea34b639dc250bb231010a._comment
new file mode 100644
index 000000000..e3e744127
--- /dev/null
+++ b/doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids/comment_2_d81cb9b47dea34b639dc250bb231010a._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnXybLxkPMYpP3yw4b_I6IdC3cKTD-xEdU"
+ nickname="Matt"
+ subject="comment 2"
+ date="2014-04-27T19:19:22Z"
+ content="""
+I'm having a pretty bad time with gcrypt based repos. Seemingly at random a `git-annex sync` will occasionally decide that the remote repo doesn't exist and then attempt to create a new one - it generates a new gcryptid and the repository seems lost.
+
+This sometimes happens after a good few hours of use, sometimes it happens immediately after creation (but maybe due to the fact that annexs are sullied by previous bad attempts). I've cleaned up making the repo dead, removing via `git remote` and editing the remote.log in the git-annex branch. No idea if that's enough.
+
+What do you need from me to try to sort this?
+
+Cheers,
+
+Matt.
+"""]]
diff --git a/doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids/comment_3_8df00f0ed4a26f702e0935b366521530._comment b/doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids/comment_3_8df00f0ed4a26f702e0935b366521530._comment
new file mode 100644
index 000000000..fd2e9f840
--- /dev/null
+++ b/doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids/comment_3_8df00f0ed4a26f702e0935b366521530._comment
@@ -0,0 +1,164 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnXybLxkPMYpP3yw4b_I6IdC3cKTD-xEdU"
+ nickname="Matt"
+ subject="comment 3"
+ date="2014-04-29T03:00:59Z"
+ content="""
+Hi, I'm finally through trial and error am able to reproduce the bug...
+
+On OSX using version 5.20140420-ga25b8bb the creation of an gcrypt remote via initremote does not work properly. See the attached debug log for what happens - no errors but subsequent syncs fail and creates a new repo.
+
+Using linux and version 5.20140421-g515d251 to create the gcrypt does work without issue. Interestingly the OSX client will happily use the linux created repo without problem (at least it hasn't borked it yet). This suggests something up in the creation step. Perhaps this is fixed in the later version (see the other bug about the latest OSX upgrade having the older binary)? But I didn't see anything in the change log about it? But I did see the gcrypt script in the manifest now...
+
+<pre>~/iMovies $ git annex initremote isilon-2 type=gcrypt gitrepo=ssh://rss/home/matt/mnt/isilon/rss/zzalsmf3/git-annex/mov2 keyid=matt@dancingfrog.co.uk
+[2014-04-29 01:54:47 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"show-ref\",\"git-annex\"]
+[2014-04-29 01:54:47 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+[2014-04-29 01:54:47 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"log\",\"refs/heads/git-annex..3269adaaa41b42dab88399e8212d77301967f436\",\"--oneline\",\"-n1\"]
+git [2014-04-29 01:54:47 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"log\",\"refs/heads/git-annex..4dc8becdffd42c9af57e0d1007892516f2114c0e\",\"--oneline\",\"-n1\"]
+[2014-04-29 01:54:47 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"log\",\"refs/heads/git-annex..13d8993b7d9a89ea4198ec3edd63aa575745c64c\",\"--oneline\",\"-n1\"]
+[2014-04-29 01:54:47 BST] chat: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"cat-file\",\"--batch\"]
+initremote isilon-2 (encryption setup) [2014-04-29 01:54:47 BST] read: gpg [\"--batch\",\"--no-tty\",\"--use-agent\",\"--quiet\",\"--trust-model\",\"always\",\"--with-colons\",\"--list-public-keys\",\"matt@dancingfrog.co.uk\"]
+[2014-04-29 01:54:47 BST] read: gpg [\"--batch\",\"--no-tty\",\"--use-agent\",\"--quiet\",\"--trust-model\",\"always\",\"--gen-random\",\"--armor\",\"2\",\"512\"]
+[2014-04-29 01:54:47 BST] chat: gpg [\"--batch\",\"--no-tty\",\"--use-agent\",\"--quiet\",\"--trust-model\",\"always\",\"--recipient\",\"68D8501429C42E01\",\"--encrypt\",\"--no-encrypt-to\",\"--no-default-recipient\",\"--force-mdc\",\"--no-textmode\"]
+(hybrid cipher with gpg key 68D8501429C42E01) [2014-04-29 01:54:47 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"remote\",\"add\",\"isilon-2\",\"gcrypt::ssh://rss/home/matt/mnt/isilon/rss/zzalsmf3/git-annex/mov2\"]
+[2014-04-29 01:54:47 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"config\",\"remote.isilon-2.gcrypt-participants\",\"68D8501429C42E01\"]
+[2014-04-29 01:54:47 BST] read: git [\"config\",\"--null\",\"--list\"]
+[2014-04-29 01:54:48 BST] read: gpg [\"--batch\",\"--no-tty\",\"--use-agent\",\"--quiet\",\"--trust-model\",\"always\",\"--with-colons\",\"--list-secret-keys\",\"--fixed-list-mode\"]
+[2014-04-29 01:54:48 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"config\",\"remote.isilon-2.gcrypt-signingkey\",\"68D8501429C42E01\"]
+[2014-04-29 01:54:48 BST] read: git [\"config\",\"--null\",\"--list\"]
+[2014-04-29 01:54:48 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"fetch\",\"isilon-2\"]
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Repository not found: ssh://rss/home/matt/mnt/isilon/rss/zzalsmf3/git-annex/mov2
+[2014-04-29 01:54:49 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"push\",\"isilon-2\",\"refs/heads/git-annex\"]
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Repository not found: ssh://rss/home/matt/mnt/isilon/rss/zzalsmf3/git-annex/mov2
+gcrypt: Setting up new repository
+gcrypt: Remote ID is :id:oWSdoSaFhKA19TcXRHPS
+Counting objects: 4170, done.
+Compressing objects: 100% (3113/3113), done.
+Total 4170 (delta 149), reused 146 (delta 3)
+gcrypt: Encrypting to: -R 68D8501429C42E01
+gcrypt: Requesting manifest signature
+
+You need a passphrase to unlock the secret key for
+user: \"Matt Ford (Work) <matt.ford@manchester.ac.uk>\"
+1024-bit DSA key, ID 29C42E01, created 2010-03-10
+
+gpg: 68D8501429C42E01: skipped: public key already present
+To gcrypt::ssh://rss/home/matt/mnt/isilon/rss/zzalsmf3/git-annex/mov2
+ * [new branch] git-annex -> git-annex
+[2014-04-29 01:54:52 BST] read: git [\"config\",\"--null\",\"--list\"]
+[2014-04-29 01:54:52 BST] call: ssh [\"-S\",\".git/annex/ssh/rss\",\"-o\",\"ControlMaster=auto\",\"-o\",\"ControlPersist=yes\",\"-T\",\"rss\",\"git-annex-shell 'gcryptsetup' '/home/matt/mnt/isilon/rss/zzalsmf3/git-annex/mov2' ':id:oWSdoSaFhKA19TcXRHPS'\"]
+ok
+[2014-04-29 01:54:53 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"config\",\"remote.isilon-2.annex-gcrypt\",\"shell\"]
+[2014-04-29 01:54:53 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"config\",\"remote.isilon-2.annex-uuid\",\"8fc5d933-d76f-5a61-b3a0-96b909e3f06c\"]
+ok
+[2014-04-29 01:54:53 BST] chat: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"hash-object\",\"-w\",\"--stdin-paths\",\"--no-filters\"]
+[2014-04-29 01:54:53 BST] feed: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"update-index\",\"-z\",\"--index-info\"]
+[2014-04-29 01:54:53 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+(Recording state in git...)
+[2014-04-29 01:54:53 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"write-tree\"]
+[2014-04-29 01:54:53 BST] chat: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"commit-tree\",\"8c27761996045cb6daf7dc83920e15bfe0f2b2ed\",\"-p\",\"refs/heads/git-annex\"]
+[2014-04-29 01:54:53 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"update-ref\",\"refs/heads/git-annex\",\"0755de89ac06bb3babc73de294a550d9b62f39f1\"]
+[2014-04-29 01:54:53 BST] read: ssh [\"-O\",\"stop\",\"-S\",\"rss\",\"-o\",\"ControlMaster=auto\",\"-o\",\"ControlPersist=yes\",\"localhost\"]
+
+
+~/iMovies $ git annex sync
+[2014-04-29 01:57:55 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"show-ref\",\"git-annex\"]
+[2014-04-29 01:57:55 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+[2014-04-29 01:57:55 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"log\",\"refs/heads/git-annex..0755de89ac06bb3babc73de294a550d9b62f39f1\",\"--oneline\",\"-n1\"]
+[2014-04-29 01:57:55 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"log\",\"refs/heads/git-annex..4dc8becdffd42c9af57e0d1007892516f2114c0e\",\"--oneline\",\"-n1\"]
+[2014-04-29 01:57:55 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"log\",\"refs/heads/git-annex..3269adaaa41b42dab88399e8212d77301967f436\",\"--oneline\",\"-n1\"]
+[2014-04-29 01:57:55 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"log\",\"refs/heads/git-annex..13d8993b7d9a89ea4198ec3edd63aa575745c64c\",\"--oneline\",\"-n1\"]
+[2014-04-29 01:57:55 BST] chat: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"cat-file\",\"--batch\"]
+commit [2014-04-29 01:57:55 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"commit\",\"-a\",\"-m\",\"git-annex automatic sync\"]
+ok
+[2014-04-29 01:57:55 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"symbolic-ref\",\"HEAD\"]
+[2014-04-29 01:57:55 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"show-ref\",\"refs/heads/master\"]
+[2014-04-29 01:57:55 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"show-ref\",\"--verify\",\"-q\",\"refs/heads/synced/master\"]
+[2014-04-29 01:57:55 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"log\",\"refs/heads/master..refs/heads/synced/master\",\"--oneline\",\"-n1\"]
+pull isilon
+[2014-04-29 01:57:55 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"fetch\",\"isilon\"]
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Repository not found: ssh://rss/home/matt/mnt/isilon/rss/zzalsmf3/git-annex/mov
+[2014-04-29 01:57:56 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"show-ref\",\"--verify\",\"-q\",\"refs/remotes/isilon/master\"]
+[2014-04-29 01:57:56 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"log\",\"refs/heads/master..refs/remotes/isilon/master\",\"--oneline\",\"-n1\"]
+[2014-04-29 01:57:56 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"show-ref\",\"--verify\",\"-q\",\"refs/remotes/isilon/synced/master\"]
+[2014-04-29 01:57:56 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"log\",\"refs/heads/synced/master..refs/remotes/isilon/synced/master\",\"--oneline\",\"-n1\"]
+ok
+pull isilon-2
+[2014-04-29 01:57:57 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"fetch\",\"isilon-2\"]
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Repository not found: ssh://rss/home/matt/mnt/isilon/rss/zzalsmf3/git-annex/mov2
+[2014-04-29 01:57:57 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"show-ref\",\"--verify\",\"-q\",\"refs/remotes/isilon-2/master\"]
+[2014-04-29 01:57:57 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"show-ref\",\"--verify\",\"-q\",\"refs/remotes/isilon-2/synced/master\"]
+ok
+[2014-04-29 01:57:57 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"show-ref\",\"git-annex\"]
+[2014-04-29 01:57:57 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+[2014-04-29 01:57:57 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"log\",\"refs/heads/git-annex..0755de89ac06bb3babc73de294a550d9b62f39f1\",\"--oneline\",\"-n1\"]
+[2014-04-29 01:57:58 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"log\",\"refs/heads/git-annex..4dc8becdffd42c9af57e0d1007892516f2114c0e\",\"--oneline\",\"-n1\"]
+[2014-04-29 01:57:58 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"log\",\"refs/heads/git-annex..3269adaaa41b42dab88399e8212d77301967f436\",\"--oneline\",\"-n1\"]
+[2014-04-29 01:57:58 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"log\",\"refs/heads/git-annex..13d8993b7d9a89ea4198ec3edd63aa575745c64c\",\"--oneline\",\"-n1\"]
+[2014-04-29 01:57:58 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"branch\",\"-f\",\"synced/master\"]
+[2014-04-29 01:57:58 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"show-ref\",\"--verify\",\"-q\",\"refs/remotes/isilon/synced/master\"]
+[2014-04-29 01:57:58 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"log\",\"refs/remotes/isilon/synced/master..refs/heads/synced/master\",\"--oneline\",\"-n1\"]
+[2014-04-29 01:57:58 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"show-ref\",\"--verify\",\"-q\",\"refs/remotes/isilon/git-annex\"]
+[2014-04-29 01:57:58 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"log\",\"refs/remotes/isilon/git-annex..git-annex\",\"--oneline\",\"-n1\"]
+push isilon
+[2014-04-29 01:57:58 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"push\",\"isilon\",\"+git-annex:synced/git-annex\",\"master:synced/master\"]
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Repository not found: ssh://rss/home/matt/mnt/isilon/rss/zzalsmf3/git-annex/mov
+gcrypt: Setting up new repository
+gcrypt: Remote ID is :id:p4cHPeAFIRIvZTnm4UrK
+Counting objects: 5649, done.
+Compressing objects: 100% (4579/4579), done.
+Total 5649 (delta 151), reused 146 (delta 3)
+gcrypt: Encrypting to: -R 68D8501429C42E01
+gcrypt: Requesting manifest signature
+
+You need a passphrase to unlock the secret key for
+user: \"Matt Ford (Work) <matt.ford@manchester.ac.uk>\"
+1024-bit DSA key, ID 29C42E01, created 2010-03-10
+
+gpg: 68D8501429C42E01: skipped: public key already present
+To gcrypt::ssh://rss/home/matt/mnt/isilon/rss/zzalsmf3/git-annex/mov
+ * [new branch] git-annex -> synced/git-annex
+ * [new branch] master -> synced/master
+[2014-04-29 01:58:01 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"push\",\"isilon\",\"master\"]
+
+You need a passphrase to unlock the secret key for
+user: \"Matt Ford (Work) <matt.ford@manchester.ac.uk>\"
+1024-bit DSA key, ID 29C42E01, created 2010-03-10
+
+ok
+[2014-04-29 01:58:03 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"show-ref\",\"--verify\",\"-q\",\"refs/remotes/isilon-2/synced/master\"]
+push isilon-2
+[2014-04-29 01:58:03 BST] call: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"push\",\"isilon-2\",\"+git-annex:synced/git-annex\",\"master:synced/master\"]
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Repository not found: ssh://rss/home/matt/mnt/isilon/rss/zzalsmf3/git-annex/mov2
+gcrypt: Setting up new repository
+gcrypt: Remote ID is :id:wTHlCd+vFviIzoTDv2Xu
+Counting objects: 5649, done.
+Compressing objects: 100% (4579/4579), done.
+Total 5649 (delta 152), reused 146 (delta 3)
+gcrypt: Encrypting to: -R 68D8501429C42E01
+gcrypt: Requesting manifest signature
+
+You need a passphrase to unlock the secret key for
+user: \"Matt Ford (Work) <matt.ford@manchester.ac.uk>\"
+1024-bit DSA key, ID 29C42E01, created 2010-03-10
+
+gpg: 68D8501429C42E01: skipped: public key already present
+To gcrypt::ssh://rss/home/matt/mnt/isilon/rss/zzalsmf3/git-annex/mov2
+ * [new branch] git-annex -> synced/git-annex
+ * [new branch] master -> synced/master
+[2014-04-29 01:58:06 BST] read: git [\"--git-dir=/Volumes/Media/iTunes Media/Movies/.git\",\"--work-tree=/Volumes/Media/iTunes Media/Movies\",\"push\",\"isilon-2\",\"master\"]
+
+You need a passphrase to unlock the secret key for
+user: \"Matt Ford (Work) <matt.ford@manchester.ac.uk>\"
+1024-bit DSA key, ID 29C42E01, created 2010-03-10
+
+ok
+[2014-04-29 01:58:09 BST] read: ssh [\"-O\",\"stop\",\"-S\",\"rss\",\"-o\",\"ControlMaster=auto\",\"-o\",\"ControlPersist=yes\",\"localhost\"]
+</pre>
+"""]]
diff --git a/doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids/comment_4_7eb33c23223dfc634eb3c9c6621f7f3e._comment b/doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids/comment_4_7eb33c23223dfc634eb3c9c6621f7f3e._comment
new file mode 100644
index 000000000..d40c435db
--- /dev/null
+++ b/doc/bugs/remote_gcrypt_based_repos_and_conflicting_uuids/comment_4_7eb33c23223dfc634eb3c9c6621f7f3e._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="216.145.95.162"
+ subject="comment 4"
+ date="2014-05-19T16:28:01Z"
+ content="""
+I can reproduce this problem on OSX.
+
+I've only gotten as far as seeing that the gcrypt repository never gets initialized as a git repository. It has a config file, but no objects are ever pushed to it. This is why gcrypt sees no repository there in subsequent runs.
+
+This is a bug in gcrypt, so filed: <https://github.com/blake2-ppc/git-remote-gcrypt/issues/15>
+"""]]
diff --git a/doc/bugs/remote_not_showing_up_in_webapp.mdwn b/doc/bugs/remote_not_showing_up_in_webapp.mdwn
index f8b4da7b1..f2f83f064 100644
--- a/doc/bugs/remote_not_showing_up_in_webapp.mdwn
+++ b/doc/bugs/remote_not_showing_up_in_webapp.mdwn
@@ -86,3 +86,15 @@ backend usage:
"""]]
Finally, note that you sometimes see `desktop008` above: it turns out I am running `git annex` from my workstation, which NFS-mounts the `/home` directory of `markov` into `/srv/musique`. --[[anarcat]]
+
+Yesterday, I made the webapp register ssh remotes it creates.
+They then show up in the webapp when run in a repository where that ssh
+remote is not enabled.
+
+You can also manually register a ssh remote. First set up the git remote
+as usual. Then run `git annex initremote type=git name=foo
+location=$url`.
+
+[[!meta title="webapp shows transfer from 'unknown' when no remote is configured for a system that is downloading files"]]
+
+[[!tag confirmed]]
diff --git a/doc/bugs/remote_not_showing_up_in_webapp/comment_2_10638e99e2e11460f99266f56adbc1db._comment b/doc/bugs/remote_not_showing_up_in_webapp/comment_2_10638e99e2e11460f99266f56adbc1db._comment
new file mode 100644
index 000000000..fb2976657
--- /dev/null
+++ b/doc/bugs/remote_not_showing_up_in_webapp/comment_2_10638e99e2e11460f99266f56adbc1db._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="72.0.72.144"
+ subject="comment 2"
+ date="2014-04-19T04:26:57Z"
+ content="""
+i hit that thing again, utterly confused. it happens all the time with my laptop, which has access to my workstation, but not the other way around. so from the POV of my laptop, things make sense somehow, but from the workstation, the laptop doesn't show up at all, and when there's a transfer, it says it's into the unknown.
+
+really confusing... surely there's a way to show the remote name at least...
+"""]]
diff --git a/doc/bugs/remote_not_showing_up_in_webapp/comment_3_4aa72acc0938f7f824ba10f3f102e8bc._comment b/doc/bugs/remote_not_showing_up_in_webapp/comment_3_4aa72acc0938f7f824ba10f3f102e8bc._comment
new file mode 100644
index 000000000..c0280b48b
--- /dev/null
+++ b/doc/bugs/remote_not_showing_up_in_webapp/comment_3_4aa72acc0938f7f824ba10f3f102e8bc._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="24.159.78.125"
+ subject="comment 3"
+ date="2014-05-23T14:57:43Z"
+ content="""
+Yesterday, I made the webapp register ssh remotes it creates.
+They then show up in the webapp when run in a repository where that ssh
+remote is not enabled.
+
+You can also manually register a ssh remote. First set up the git remote
+as usual. Then run `git annex initremote type=git name=foo
+location=$url`.
+
+So, this bugs titular issue is fixed, but the issue of it displaying \"unknown\" rather than the remote description is not yet fixed. Will retitle this bug appropriately, and leave open until that gets fixed.
+"""]]
diff --git a/doc/bugs/removable_device_configurator_chokes_on_spaces.mdwn b/doc/bugs/removable_device_configurator_chokes_on_spaces.mdwn
deleted file mode 100644
index e114877ec..000000000
--- a/doc/bugs/removable_device_configurator_chokes_on_spaces.mdwn
+++ /dev/null
@@ -1,18 +0,0 @@
-# What steps will reproduce the problem?
-
-1. Get a removable device and create a filesystem with a label containing a space, e.g.:
- # mkfs.ext4 -L "Backup Home" /dev/sdb1
-2. Open the webapp and add a new repository on a removabledevice
-3. Select the devices mountpoint, e.g. /media/Backup\ Home
-
-# What is the expected output? What do you see instead?
-
-The configurator should remove spaces for branch names, but it actually seems to call git remote add with "Backup Home" as argument which is invalid.
-
-The assistant produces an internal server error and subsequently crashes completely.
-
-# What version of git-annex are you using? On what operating system?
-
-git-annex 3.20120924 from the Debian package in sid on Debian wheezy, amd64.
-
-> Thanks for reporting this, I've fixed it in git. [[done]] --[[Joey]]
diff --git a/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch.mdwn b/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch.mdwn
deleted file mode 100644
index c315d4789..000000000
--- a/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch.mdwn
+++ /dev/null
@@ -1,81 +0,0 @@
-### Please describe the problem.
-
-On Mac OS X, I tried to switch a repository to direct mode, but there was a
-problem in the middle of the switch (permission denied) and the switch
-aborted, leaving the repository in a half switched state.
-
-I tried different manipulations, one of which was a checkout (oops), switch
-back to indirect, then direct again, and now I have the repository in direct
-mode except one file which caused the permission denied error.
-
-### What steps will reproduce the problem?
-
-Do not know exactly why this file is special. I still have the repository, and
-each time I try to get this file, it fails with the same error message.
-
-### What version of git-annex are you using? On what operating system?
-
-On Umba, git-annex version: 4.20130723, on Mac OS X 10.6.8.
-
-### Please provide any additional information below.
-
-Umba is the Mac OS X, camaar and riva are Debian machines.
-
-[[!format sh """
-Umba$ git annex version
-git-annex version: 4.20130723
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS
-Umba$
-
-Umba$ git annex get --from riva --not --in here
-get 2013-07-31/2013-07-31_180411.jpg (from riva...)
-Password:
-SHA256-s2819887--987f9811d7b5c7a287a74b7adbb852be4d18eeda61c3507f4e08c534d2356f4c
- 2819887 100% 943.08kB/s 0:00:02 (xfer#1, to-check=0/1)
-
-sent 42 bytes received 2820397 bytes 433913.69 bytes/sec
-total size is 2819887 speedup is 1.00
-failed
-git-annex: get: 1 failed
-Umba$ find . -name SHA256-s2819887-\*
-./.git/annex/objects/wq/3j/SHA256-s2819887--987f9811d7b5c7a287a74b7adbb852be4d18eeda61c3507f4e08c534d2356f4c
-./.git/annex/objects/wq/3j/SHA256-s2819887--987f9811d7b5c7a287a74b7adbb852be4d18eeda61c3507f4e08c534d2356f4c/SHA256-s2819887--987f9811d7b5c7a287a74b7adbb852be4d18eeda61c3507f4e08c534d2356f4c.cache
-./.git/annex/objects/wq/3j/SHA256-s2819887--987f9811d7b5c7a287a74b7adbb852be4d18eeda61c3507f4e08c534d2356f4c/SHA256-s2819887--987f9811d7b5c7a287a74b7adbb852be4d18eeda61c3507f4e08c534d2356f4c.map
-./.git/annex/transfer/failed/download/13fd5d5a-ed97-11e2-9178-574d3b1c0618/SHA256-s2819887--987f9811d7b5c7a287a74b7adbb852be4d18eeda61c3507f4e08c534d2356f4c
-./.git/annex/transfer/failed/download/95443f2e-ed96-11e2-9d3f-8ffa5b1aae7a/SHA256-s2819887--987f9811d7b5c7a287a74b7adbb852be4d18eeda61c3507f4e08c534d2356f4c
-Umba$ git annex fsck
-fsck 2013-07-31/2013-07-31_180411.jpg ok
-(Recording state in git...)
-Umba$ git annex drop 2013-07-31/2013-07-31_180411.jpg
-Umba$ git annex get --from riva --not --in here
-get 2013-07-31/2013-07-31_180411.jpg (from riva...)
-Password:
-SHA256-s2819887--987f9811d7b5c7a287a74b7adbb852be4d18eeda61c3507f4e08c534d2356f4c
- 2819887 100% 949.58kB/s 0:00:02 (xfer#1, to-check=0/1)
-
-sent 42 bytes received 2820397 bytes 512807.09 bytes/sec
-total size is 2819887 speedup is 1.00
-failed
-git-annex: get: 1 failed
-Umba$
-
-camaar% git annex copy --to umba --not --in umba
-copy 2013-07-31/2013-07-31_180411.jpg (checking umba...) (to umba...)
-SHA256-s2819887--987f9811d7b5c7a287a74b7adbb852be4d18eeda61c3507f4e08c534d2356f4c
- 2819887 100% 4.19MB/s 0:00:00 (xfer#1, to-check=0/1)
-git-annex: //Users/nicolas/Pictures/Petites Boutes/.git/annex/tmp/2013-07-31_18041141700.jpg: rename: permission denied (Operation not permitted)
-git-annex-shell: recvkey: 1 failed
-
-sent 2820393 bytes received 42 bytes 1128174.00 bytes/sec
-total size is 2819887 speedup is 1.00
-rsync error: syntax or usage error (code 1) at main.c(1070) [sender=3.0.9]
-
- rsync failed -- run git annex again to resume file transfer
-failed
-git-annex: copy: 1 failed
-camaar%
-"""]]
-
-> Put in a fix that works, although perhaps not ideal as I do not
-> understand how the repo got into the original problem state. [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_1_14cec6448831c67794b62926a03b2fc5._comment b/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_1_14cec6448831c67794b62926a03b2fc5._comment
deleted file mode 100644
index 1aef52076..000000000
--- a/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_1_14cec6448831c67794b62926a03b2fc5._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.8.80"
- subject="comment 1"
- date="2013-09-30T16:47:42Z"
- content="""
-I was able to cause a permission denied on `git annex direct` if I made the file in .git/annex/objects be owned by an different user than me. I do not know how that could happen in normal operation of git-annex.
-
-
-I have made `git annex direct` catch this exception and continue. So you will get a repository that is switched to direct mode, but with one file that is still a symlink to the content, and if you fix the permissions problem, `git annex fsck` will fix it.
-
-I am curious about any details of how your repository got into the original state..
-"""]]
diff --git a/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_2_93af8f48a01b6e2d011bd6f60499ccd2._comment b/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_2_93af8f48a01b6e2d011bd6f60499ccd2._comment
deleted file mode 100644
index a0e73cc5e..000000000
--- a/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_2_93af8f48a01b6e2d011bd6f60499ccd2._comment
+++ /dev/null
@@ -1,23 +0,0 @@
-[[!comment format=mdwn
- username="http://nicolas-schodet.myopenid.com/"
- ip="81.56.19.53"
- subject="comment 2"
- date="2013-11-23T14:38:21Z"
- content="""
-Here are the files in details:
-
-[[!format sh \"\"\"
-Umba:.../.git$ ls -ld $(find . -name SHA256-s2819887-\*) # the bad file
-drwxr-xr-t 4 marie-eve staff 136 Aug 17 17:05 ./annex/objects/wq/3j/SHA256-s2819887--987f9811d7b5c7a287a74b7adbb852be4d18eeda61c3507f4e08c534d2356f4c/
--rw-r--r-- 1 marie-eve staff 560 Nov 23 15:25 ./annex/objects/wq/3j/SHA256-s2819887--987f9811d7b5c7a287a74b7adbb852be4d18eeda61c3507f4e08c534d2356f4c/SHA256-s2819887--987f9811d7b5c7a287a74b7adbb852be4d18eeda61c3507f4e08c534d2356f4c.cache
--rw------- 1 marie-eve staff 33 Aug 17 17:05 ./annex/objects/wq/3j/SHA256-s2819887--987f9811d7b5c7a287a74b7adbb852be4d18eeda61c3507f4e08c534d2356f4c/SHA256-s2819887--987f9811d7b5c7a287a74b7adbb852be4d18eeda61c3507f4e08c534d2356f4c.map
--rw-r--r-- 1 marie-eve staff 52 Aug 17 17:06 ./annex/transfer/failed/download/13fd5d5a-ed97-11e2-9178-574d3b1c0618/SHA256-s2819887--987f9811d7b5c7a287a74b7adbb852be4d18eeda61c3507f4e08c534d2356f4c
--rw-r--r-- 1 marie-eve staff 51 Aug 17 10:13 ./annex/transfer/failed/download/95443f2e-ed96-11e2-9d3f-8ffa5b1aae7a/SHA256-s2819887--987f9811d7b5c7a287a74b7adbb852be4d18eeda61c3507f4e08c534d2356f4c
-Umba:.../.git$ ls -ld $(find . -name SHA256-s5066556-\*) # a good file
-dr-xr-xr-x 3 marie-eve staff 102 Nov 23 15:27 ./annex/objects/Fx/w0/SHA256-s5066556--0e4a47efdc14c884d07c017ba5506a56affb136d87bef5700145774fd9089f25/
--r--r--r-- 1 marie-eve staff 5066556 Nov 6 17:43 ./annex/objects/Fx/w0/SHA256-s5066556--0e4a47efdc14c884d07c017ba5506a56affb136d87bef5700145774fd9089f25/SHA256-s5066556--0e4a47efdc14c884d07c017ba5506a56affb136d87bef5700145774fd9089
-Umba:.../.git$
-\"\"\"]]
-
-No more idea on how it reached this situation.
-"""]]
diff --git a/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_3_f8fba1955e62360061613e5898b3d74e._comment b/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_3_f8fba1955e62360061613e5898b3d74e._comment
deleted file mode 100644
index d7d05da85..000000000
--- a/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_3_f8fba1955e62360061613e5898b3d74e._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://nicolas-schodet.myopenid.com/"
- ip="81.56.19.53"
- subject="comment 3"
- date="2013-11-23T15:42:26Z"
- content="""
-The link seems to be special:
-
-[[!format sh \"\"\"
-Umba:2013-07-31$ ls -lO 2013-07-31_180411.jpg
-lrwxr-xr-x 1 marie-eve staff uchg 191 Aug 12 21:45 2013-07-31_180411.jpg@ -> ../.git/annex/objects/wq/3j/SHA256-s2819887--987f9811d7b5c7a287a74b7adbb852be4d18eeda61c3507f4e08c534d2356f4c/SHA256-s2819887--987f9811d7b5c7a287a74b7adbb852be4d18eeda61c3507f4e08c534d2356f4c
-Umba:2013-07-31$
-\"\"\"]]
-
-I tried the chflags command with no success... I suppose I need a MAC specialist.
-"""]]
diff --git a/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_4_abffe1fb3b3e684b126e4768089dc5f4._comment b/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_4_abffe1fb3b3e684b126e4768089dc5f4._comment
deleted file mode 100644
index 890648d16..000000000
--- a/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_4_abffe1fb3b3e684b126e4768089dc5f4._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.87"
- subject="comment 4"
- date="2013-12-12T20:17:26Z"
- content="""
-It looks like the symlink may have some form of immutable attribute set on it. I assume that the \"uchg\" in the ls output means something like \"unchangable\".
-"""]]
diff --git a/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_5_bccc53d2d6f659f21965042a057358f5._comment b/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_5_bccc53d2d6f659f21965042a057358f5._comment
deleted file mode 100644
index cd662bc9e..000000000
--- a/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_5_bccc53d2d6f659f21965042a057358f5._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://nicolas-schodet.myopenid.com/"
- ip="2a01:e35:1381:3350:1e4b:d6ff:fe78:1ddb"
- subject="comment 5"
- date="2013-12-20T20:19:05Z"
- content="""
-Yes, right, but symbolic links are not supposed to have flags... so the chflags does nothing...
-"""]]
diff --git a/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_6_ac8b3b042b882680f0eb0d53ade1ce15._comment b/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_6_ac8b3b042b882680f0eb0d53ade1ce15._comment
deleted file mode 100644
index 6232a77f8..000000000
--- a/doc/bugs/rename:_permission_denied__44___after_direct_mode_switch/comment_6_ac8b3b042b882680f0eb0d53ade1ce15._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://nicolas-schodet.myopenid.com/"
- ip="2a01:e35:1381:3350:1e4b:d6ff:fe78:1ddb"
- subject="comment 6"
- date="2013-12-20T20:28:10Z"
- content="""
-I finally managed to fix my repository by using this command:
-
- SetFile -P -a l 2013-07-31_180411.jpg
-
-This removes the \"locked\" attribute. After this command, the uchg flag is no longer set and I manage to use the repository normally.
-
-Still no idea on why it was set and whether this need a git-annex fix or not.
-"""]]
diff --git a/doc/bugs/renaming_a_file_makes_annex_get_the_file__39__s_content_from_remote.mdwn b/doc/bugs/renaming_a_file_makes_annex_get_the_file__39__s_content_from_remote.mdwn
deleted file mode 100644
index c2ca43da5..000000000
--- a/doc/bugs/renaming_a_file_makes_annex_get_the_file__39__s_content_from_remote.mdwn
+++ /dev/null
@@ -1,27 +0,0 @@
-# What steps will reproduce the problem?
-
-1. Use assistant to setup a local repository (client group) and a remote repository (via ssh, backup group).
-
-2. Add some big files and wait for them to be syncronized.
-
-3. Manually switch to indirect mode (to make 'drop' work)
-
-4. Drop the file's content from the local repository.
-
-5. Rename the file using any file manager or mv on the command line.
-
-
-# What is the expected output? What do you see instead?
-
-* Expected outcome was the file being renamed and that name change being propagated to the remote repository without re-transferring the whole file. I didn't drop it for nothing!
-
-* Instead, the file was renamed and the file's content was retrieved from the remote repository.
-
-
-# What version of git-annex are you using? On what operating system?
-
-Git-Annex 3.20130102
-
-Arch Linux on x64.
-
-[[done]]; was not a bug and also the webapp now offers a "manual mode" option that can be chosen instead of "client" to get the desired behavior. --[[Joey]]
diff --git a/doc/bugs/renaming_a_file_makes_annex_get_the_file__39__s_content_from_remote/comment_1_d6aad1831674586fe4cdf61dd2a4bbb9._comment b/doc/bugs/renaming_a_file_makes_annex_get_the_file__39__s_content_from_remote/comment_1_d6aad1831674586fe4cdf61dd2a4bbb9._comment
deleted file mode 100644
index 21954076e..000000000
--- a/doc/bugs/renaming_a_file_makes_annex_get_the_file__39__s_content_from_remote/comment_1_d6aad1831674586fe4cdf61dd2a4bbb9._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.211"
- subject="comment 1"
- date="2013-01-08T18:35:58Z"
- content="""
-Since your local repository is in the client group, this behavior is actually as intended. Client group means the [[preferred_content]] settings will try to get the content of all files, unlless they're in a directory named \"archive\". This happens not just when you rename a dropped file, but on startup, when the network comes up, or even just periodically it'll notice if some file's content is missing and download it.
-
-So, your choices are
-
-1. Make an `archive` directory, and move files into it when you don't want them available locally. The assistant will even automatically drop them when you move them.
-2. Use `git annex vicfg` to set up your own [[preferred content]] expression that makes it behave how you want. For example, you could use `present` to make the assistant not prefer to have the content of files, unless the content is already present, and then manually `git annex get` and `git annex drop` files as desired.
-
-(BTW, you can use \"drop\" in direct mode with yesterday's release.)
-"""]]
diff --git a/doc/bugs/renaming_a_file_makes_annex_get_the_file__39__s_content_from_remote/comment_2_8591e174c1a8cddfae9371407a58ff1c._comment b/doc/bugs/renaming_a_file_makes_annex_get_the_file__39__s_content_from_remote/comment_2_8591e174c1a8cddfae9371407a58ff1c._comment
deleted file mode 100644
index 5dc891c46..000000000
--- a/doc/bugs/renaming_a_file_makes_annex_get_the_file__39__s_content_from_remote/comment_2_8591e174c1a8cddfae9371407a58ff1c._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnjjCyhVEcTRM5m4iIBqL3ZCooPx7ZYB_E"
- nickname="Marcus"
- subject="comment 2"
- date="2013-01-08T21:27:39Z"
- content="""
-Thank you for your answer. In the mean time I already changed the preferred content setting to \"present\" and it's good to know that this issue should be resolved by that as well. Will check later.
-
-Ciao, Marcus
-"""]]
diff --git a/doc/bugs/repair_fails_when_home_on_seperate_partition.mdwn b/doc/bugs/repair_fails_when_home_on_seperate_partition.mdwn
deleted file mode 100644
index 19780c7de..000000000
--- a/doc/bugs/repair_fails_when_home_on_seperate_partition.mdwn
+++ /dev/null
@@ -1,60 +0,0 @@
-### Please describe the problem.
-
-
-### What steps will reproduce the problem?
-
-(1) Place a broken repo on a different mount point than the root partition.
-
-(2) Run
- git annex repair.
-
-### What version of git-annex are you using? On what operating system?
-
- 5.20131118-gc7e5cde on Ubuntu 12.04
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-$ git annex repair --force
-
-Running git fsck ...
-git fsck found 74 broken objects.
-Unpacking all pack files.
-Unpacking objects: 100% (2307/2307), done.
-Unpacking objects: 100% (241565/241565), done.
-Re-running git fsck to see if it finds more problems.
-Initialized empty Git repository in /tmp/tmprepo.0/.git/
-Trying to recover missing objects from remote pi.fritz.box__var_lib_store_annex
-Trying to recover missing objects from remote pi.fritz.box__var_lib_store_annex
-74 missing objects could not be recovered!
-
-
-Deleted remote branch pi.fritz.box__var_lib_store_annex/master (was dffa056).
-error: Could not read 4e01bbdc7ce31247ad66ab13ca46925ac2c8db9a
-fatal: Failed to traverse parents of commit 718525a48b4d6b3404eda5e189332d73c968a2be
-Deleted remote branch pi.fritz.box__var_lib_store_annex/synced/git-annex (was 718525a).
-Deleted remote branch pi.fritz.box__var_lib_store_annex/synced/master (was 9aedf69).
-Deleted remote branch pi.fritz.box_annex/synced/master (was 92b1042).
-Deleted remote branch store/master (was b059380).
-removed 5 remote tracking branches that referred to missing objects
-fatal: bad object refs/heads/git-annex
-fatal: bad object refs/heads/git-annex
-fatal: bad object refs/heads/git-annex
-error: remote branch 'git-annex' not found.
-
-git-annex: /tmp/packed-refs19813: rename: unsupported operation (Invalid cross-device link)
-failed
-git-annex: repair: 1 failed
-
-
-# End of transcript or log.
-"""]]
-
-> Thanks for reporting. As far as I can see, this was fixed
-> accidentially, when I rewrote the packed refs file handling code to not
-> re-write the file. It had been using a temp file, and renaming it, thus
-> the problem. I checked the repair code and can find no other probems
-> of this sort currently in it. [[done]] --[[Joey]]
diff --git a/doc/bugs/repo_creation_fails_on_android_4.4.3.mdwn b/doc/bugs/repo_creation_fails_on_android_4.4.3.mdwn
new file mode 100644
index 000000000..335357c10
--- /dev/null
+++ b/doc/bugs/repo_creation_fails_on_android_4.4.3.mdwn
@@ -0,0 +1,30 @@
+Hello everyone,
+Creating a new repository through the web-app fails on Android 4.4.3, git annex version 5.20140612-g1bebb0d.
+
+Steps to reproduce the problem:
+
+1. Install git annex for android 4.4.3
+
+2. Launch git annex.
+
+3. The terminal opens up reporting some (non-fatal?) errors. (I notice that I can't do anything in the terminal, is it supposed to reply to git annex commands? typing in "git annex version" does nothing).
+
+4. The web-app is launched.
+
+5. Click on make repository.
+
+6. Error message.
+
+I've made a few screenshots to illustrate:
+
+[terminal screenshot](https://drive.google.com/file/d/0B1qM91oKErVDSEJwbnhiaFJhQVU/edit?usp=sharing)
+
+This is the webapp error when creating a new repo:
+
+[first](https://drive.google.com/file/d/0B1qM91oKErVDVHVuLVpacmJaOEU/edit?usp=sharing)
+
+[second](https://drive.google.com/file/d/0B1qM91oKErVDX3R3cFhyb2VjcHc/edit?usp=sharing)
+
+Being on android I can't find any ".git/annex/daemon.log to" to report. I tried to look in the repo folder but there was no .git in it (maybe hidden?)
+
+> dup; [[done]] --[[Joey]]
diff --git a/doc/bugs/repo_creation_fails_on_android_4.4.3/comment_1_01e638ec9c6d74966d76b6ceb7c06bad._comment b/doc/bugs/repo_creation_fails_on_android_4.4.3/comment_1_01e638ec9c6d74966d76b6ceb7c06bad._comment
new file mode 100644
index 000000000..9994130f5
--- /dev/null
+++ b/doc/bugs/repo_creation_fails_on_android_4.4.3/comment_1_01e638ec9c6d74966d76b6ceb7c06bad._comment
@@ -0,0 +1,26 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnxFr-i4nNUVrj3PJ_JKhp7GtZ5Xom7-3w"
+ nickname="John"
+ subject="Errors from Screenshots"
+ date="2014-07-03T20:00:25Z"
+ content="""
+A low-bandwidth version.
+
+*terminal screenshot:*
+
+Falling back to hardcoded app location; cannot find expected files in /data/app-lib
+git annex webapp
+nex webapp
+WARNING: linker: git-annex has text relocations. This is wasting memory and is a security risk. Please fix.
+error: fchmod on /sdcard/annex/.git/config.lock failed: Operation not permitted
+error: fchmod on /sdcard/annex/.git/config.lock failed: Operation not permitted
+
+*first:*
+
+git [Param \"config\",Param \"annex.uuid\",Param \"51e7d274-9723-4b14-8c5
+
+*second:*
+
+ram \"annex.uuid\",Param \"51e7d274-9723-4b14-8c57-1d72263e3982\"] failed
+
+"""]]
diff --git a/doc/bugs/repo_creation_fails_on_android_4.4.3/comment_2_07c0f9387433b7107e9def2bfbed3039._comment b/doc/bugs/repo_creation_fails_on_android_4.4.3/comment_2_07c0f9387433b7107e9def2bfbed3039._comment
new file mode 100644
index 000000000..473bfb308
--- /dev/null
+++ b/doc/bugs/repo_creation_fails_on_android_4.4.3/comment_2_07c0f9387433b7107e9def2bfbed3039._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 2"
+ date="2014-07-03T20:13:57Z"
+ content="""
+Thanks, this is then a dup of [[bugs/Android_fails_on_Google_Nexus_10_Jellybean]].
+"""]]
diff --git a/doc/bugs/repo_creation_fails_on_android_4.4.3/comment_3_caf4f02677ea9e7fe28dbace99aa6860._comment b/doc/bugs/repo_creation_fails_on_android_4.4.3/comment_3_caf4f02677ea9e7fe28dbace99aa6860._comment
new file mode 100644
index 000000000..0b46416f5
--- /dev/null
+++ b/doc/bugs/repo_creation_fails_on_android_4.4.3/comment_3_caf4f02677ea9e7fe28dbace99aa6860._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 3"
+ date="2014-07-04T17:52:41Z"
+ content="""
+This problem should be fixed in the most recent daily build of git-annex for android. Testing appreciated.
+"""]]
diff --git a/doc/bugs/restart_daemon_required.mdwn b/doc/bugs/restart_daemon_required.mdwn
deleted file mode 100644
index fe765e24f..000000000
--- a/doc/bugs/restart_daemon_required.mdwn
+++ /dev/null
@@ -1,22 +0,0 @@
-Git annex refuses to get/drop files until it's manually relaunched.
-
-I'm trying to setup a basic dropbox like system where a couple of computers sync with a local server I have constantly running ubuntu with ssh.
-
-I think I've setup git annex correctly: when I put files in the repo folder they get uploaded to the bare git repo on the server over ssh automatically and the other computer updates with a broken alias to the file. However the file does not then download from the server despite it being available without a manual restart of the daemon or a git-annex get command from the terminal.
-
-Additionally, files inside archive folders do not get dropped once uploaded to the server without a restart of the daemon.
-
-
-My computers are each setup with the ssh server as a 2nd repository (fullarchive), they are both OSX, and running Version: 4.20130521-g25dba9d according to the webapp. I have also entered my gmail/jabber account on each mac which I believe allows them to communicate indirectly when using the ssh repo.
-
-
-I don't know if this is a setup/misconfiguration error or a bug but I can't see how I've setup the assistant wrong, I did manually change the remote url in the config file, as the assistant was having issues connecting (I'm sshing on 21 for various reasons, although I thought this was supported and I no longer receive errors in the webapp now I've specified my remote.
-
-Should I put the corresponding computers as a repositories of each other? I thought each syncing independently with a centralised git would be a more reliable/simple situation than a potential 3 way sync?
-
-
-I hope this is enough information, I'm usually good at working out issues myself, however this is just frustrating me and the git-annex solution is so nearly perfect if it would work reliably that I can't bring myself to give up on it!
-
-Thanks!
-
-> [[done]], release notes updated; see my comment --[[Joey]]
diff --git a/doc/bugs/restart_daemon_required/comment_1_f79ac16cc9f1e3b08cd121bf5efb29c3._comment b/doc/bugs/restart_daemon_required/comment_1_f79ac16cc9f1e3b08cd121bf5efb29c3._comment
deleted file mode 100644
index bd3fc74c8..000000000
--- a/doc/bugs/restart_daemon_required/comment_1_f79ac16cc9f1e3b08cd121bf5efb29c3._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-05-31T18:15:03Z"
- content="""
-Enabling debugging, and send a log. XMPP may not be working.
-"""]]
diff --git a/doc/bugs/restart_daemon_required/comment_2_50c1b268a3cc4514681059eabca674e3._comment b/doc/bugs/restart_daemon_required/comment_2_50c1b268a3cc4514681059eabca674e3._comment
deleted file mode 100644
index 439d7ae1a..000000000
--- a/doc/bugs/restart_daemon_required/comment_2_50c1b268a3cc4514681059eabca674e3._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 2"
- date="2013-05-31T18:20:26Z"
- content="""
-You could also try upgrading to a current nightly build. There have been a lot of XMPP improvements recently.
-"""]]
diff --git a/doc/bugs/restart_daemon_required/comment_3_1716e0f3c7c44dc77ebf7f00fdd8f9e3._comment b/doc/bugs/restart_daemon_required/comment_3_1716e0f3c7c44dc77ebf7f00fdd8f9e3._comment
deleted file mode 100644
index 61423066a..000000000
--- a/doc/bugs/restart_daemon_required/comment_3_1716e0f3c7c44dc77ebf7f00fdd8f9e3._comment
+++ /dev/null
@@ -1,310 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmxns2UBAMDbTwrwHq_Lx1sNKrVVayq1X4"
- nickname="Darren"
- subject="comment 3"
- date="2013-06-01T01:19:02Z"
- content="""
-Thanks Joey for the quick reply, I've just updated both clients to the latest versions I could find, one is running Lion so the version is slightly behind as the autobuilds are currently failing to compile. The mountain lion system I believe is running one of the latest builds.
-
-I've captured the error here as best I can, I didn't know what to leave out so apologies for the length of the logs.
-
-===
-Sending Repo (added sync.mov)
-===
-
- [2013-06-01 01:59:56 BST] main: starting assistant version 4.20130522-g933ba09
- [2013-06-01 01:59:56\"_xmpp-client._tcp.gmail.com\"
- BST] TransferScanner: Syncing with Cloud
- Already up-to-date.
- Just [(20,0,5222,\"alt1.xmpp.l.google.com.\"),(20,0,5222,\"alt2.xmpp.l.google.com.\"),(20,0,5222,\"alt3.xmpp.l.google.com.\"),(20,0,5222,\"alt4.xmpp.l.google.com.\"),(5,0,5222,\"xmpp.l.google.com.\")]
-
- (scanning...) [2013-06-01 01:59:56 BST] Watcher: Performing startup scan
- Already up-to-date.
- Everything up-to-date
-
- (started...) [2013-06-01 01:59:58 BST] Committer: Committing changes to git
- [2013-06-01 01:59:58 BST] Pusher: Syncing with Cloud
- Everything up-to-date
- From ssh://cloud.rhymeorange.com:21/tank/git-annex/projects
- da9a4d5..4142ae6 synced/git-annex -> Cloud/synced/git-annex
- [2013-06-01 02:00:56 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"ls-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"preferred-content.log\"]
- [2013-06-01 02:01:19 BST] Watcher: add direct /Volumes/StoragePool/Projects/init/sync.mov
- [2013-06-01 02:01:19 BST] read: lsof [\"-F0can\",\"+d\",\"/Volumes/StoragePool/Projects/init/.git/annex/tmp/\"]
- [2013-06-01 02:01:19 BST] Committer: Adding sync.mov
-
- (Recording state in git...)
- (merging Cloud/synced/git-annex into git-annex...)
- add /Volumes/StoragePool/Projects/init/sync.mov (checksum...) [2013-06-01 02:01:19 BST] read: sha256sum [\"/Volumes/StoragePool/Projects/init/.git/annex/tmp/sync1693.mov\"]
- recv: resource vanished (Connection reset by peer)
- [2013-06-01 02:01:20 BST] chat: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"hash-object\",\"-t\",\"blob\",\"-w\",\"--stdin\"]
- [2013-06-01 02:01:20 BST] Committer: committing 1 changes
- [2013-06-01 02:01:20 BST] Committer: Committing changes to git
- [2013-06-01 02:01:20 BST] feed: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"update-index\",\"-z\",\"--index-info\"]
- [2013-06-01 02:01:20 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"commit\",\"--allow-empty-message\",\"--no-edit\",\"-m\",\"\",\"--quiet\",\"--no-verify\"]
- [2013-06-01 02:01:20 BST] Pusher: Syncing with Cloud
- [2013-06-01 02:01:20 BST] Committer: queued Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Nothing : new file created
- [2013-06-01 02:01:20 rBeScTv]: Trreasnosufrecrer evra:n iTsrhaends f(eCrorninnegc:t iUopnl oraeds eUtU IbDy \"pee3e9r3)d
- 45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Nothing
- [2013-06-01 02:01:20 BST] chat: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"hash-object\",\"-w\",\"--stdin-paths\"]
- [2013-06-01 02:01:20 BST] call: /Applications/git-annex.app/Contents/MacOS/git-annex [\"transferkeys\",\"--readfd\",\"82\",\"--writefd\",\"81\"]
- [2013-06-01 02:01:20 BST] feed: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"update-index\",\"-z\",\"--index-info\"]
- [2013-06-01 02:01:20 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- [2013-06-01 02:01:20 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"write-tree\"]
- [2013-06-01 02:01:20 BST] chat: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"commit-tree\",\"181162ed25fb1bec4d077e359a5f0e60344e735e\",\"-p\",\"refs/heads/git-annex\"]
- [2013-06-01 02:01:20 BST] call: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"update-ref\",\"refs/heads/git-annex\",\"ef8dc3b251fbf6baa8149ed077703b2363b3dbc9\"]
- [2013-06-01 02:01:20 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"symbolic-ref\",\"HEAD\"]
- [2013-06-01 02:01:20 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"refs/heads/master\"]
- [2013-06-01 02:01:20 BST] Pusher: pushing to [Remote { name =\"Cloud\" }]
- [2013-06-01 02:01:20 BST] call: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"branch\",\"-f\",\"synced/master\"]
- [2013-06-01 02:01:20 BST] call: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"push\",\"Cloud\",\"git-annex:synced/git-annex\",\"master:synced/master\"]
- [2013-06-01 02:01:20 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Nothing
- [2013-06-01 02:01:20 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Nothing
- [2013-06-01 02:01:21 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"git-annex\"]
- [2013-06-01 02:01:21 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
-
- sync.mov
- 32768 0% 0.00kB/s 0:00:00
- [2013-06-01 02:01:21 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"log\",\"refs/heads/git-annex..ef8dc3b251fbf6baa8149ed077703b2363b3dbc9\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:21 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"log\",\"refs/heads/git-annex..8c35b10f8f42367fddc5c12fe39b30014358cd4d\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:21 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"log\",\"refs/heads/git-annex..4142ae6e3befdff987748a92feb65a11aecf4b63\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:21 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"symbolic-ref\",\"HEAD\"]
- [2013-06-01 02:01:21 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"refs/heads/master\"]
- [2013-06-01 02:01:21 BST] Merger: merging refs/heads/synced/master into refs/heads/master
- [2013-06-01 02:01:21 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"symbolic-ref\",\"HEAD\"]
- [2013-06-01 02:01:21 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"refs/heads/master\"]
- [2013-06-01 02:01:21 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"--hash\",\"refs/heads/master\"]
- [2013-06-01 02:01:21 BST] call: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init/.git/annex/merge/\",\"merge\",\"--no-edit\",\"refs/heads/synced/master\"]
- To ssh://darren@cloud.rhymeorange.com:21/tank/git-annex/projects/
- 4142ae6..ef8dc3b2 git-annex -> synced/git-annex
- 1723064..75aa568 master -> synced/master
- [2013-06-01 02:01:21 BST] XMPPClient: sending: NotifyPush [UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\"]
- Already up-to-date.
- [2013-06-01 02:01:21 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"--hash\",\"refs/heads/master\"]
- [2013-06-01 02:01:21 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"diff-tree\",\"-z\",\"--raw\",\"--no-renames\",\"-l0\",\"-r\",\"75aa568fb7f484609a36abdf6afd84ab5aeb0f06\",\"75aa568fb7f484609a36abdf6afd84ab5aeb0f06\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"git-annex\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"log\",\"refs/heads/git 7602176 11% 7.17MB/s 0:00:08
- -annex..ef8dc3b251fbf6baa8149ed077703b2363b3dbc9\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"log\",\"refs/heads/git-annex..8c35b10f8f42367fddc5c12fe39b30014358cd4d\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:22 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 7602176
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"symbolic-ref\",\"HEAD\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"refs/heads/master\"]
- [2013-06-01 02:01:22 BST] Merger: merging refs/remotes/Cloud/synced/master into refs/heads/master
- [2013-06-01 02:01:22 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 7602176
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"symbolic-ref\",\"HEAD\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"refs/heads/master\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"--hash\",\"refs/heads/master\"]
- [2013-06-01 02:01:22 BST] call: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init/.git/annex/merge/\",\"merge\",\"--no-edit\",\"refs/remotes/Cloud/synced/master\"]
- Already up-to-date.
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"--hash\",\"refs/heads/master\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"diff-tree\",\"-z\",\"--raw\",\"--no-renames\",\"-l0\",\"-r\",\"75aa568fb7f484609a36abdf6afd84ab5aeb0f06\",\"75aa568fb7f484609a36abdf6afd84ab5aeb0f06\"]
- 12943360 19% 6.11MB/s 0:00:08
- [2013-06-01 02:01:23 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 12943360
- [2013-06-01 02:01:23 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 12943360
- 18710528 27% 5.90MB/s 0:00:08
- [2013-06-01 02:01:24 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 18710528
- [2013-06-01 02:01:24 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 18710528
- 24477696 36% 5.79MB/s 0:00:07
- [2013-06-01 02:01:25 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 24477696
- [2013-06-01 02:01:25 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 24477696
- 30375936 44% 5.39MB/s 0:00:06
- [2013-06-01 02:01:26 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 30375936
- [2013-06-01 02:01:26 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 30375936
- 36143104 53% 5.49MB/s 0:00:05
- [2013-06-01 02:01:27 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 36143104
- [2013-06-01 02:01:27 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 36143104
- 42008576 61% 5.51MB/s 0:00:04
- [2013-06-01 02:01:28 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 42008576
- [2013-06-01 02:01:28 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 42008576
- 47906816 70% 5.52MB/s 0:00:03
- [2013-06-01 02:01:29 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 47906816
- [2013-06-01 02:01:29 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 47906816
- 53805056 79% 5.51MB/s 0:00:02
- [2013-06-01 02:01:30 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 53805056
- 59572224 87% 5.52MB/s 0:00:01
- [2013-06-01 02:01:31 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 59572224
- 65339392 96% 5.50MB/s 0:00:00
- [2013-06-01 02:01:32 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 65339392
- 67924272 100% 5.61MB/s 0:00:11 (xfer#1, to-check=0/1)
- [2013-06-01 02:01:33 BST] TransferWatcher: transfer starting: Upload UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\" /Volumes/StoragePool/Projects/init/sync.mov Just 67924272
-
- sent 67932633 bytes received 31 bytes 5032049.19 bytes/sec
- total size is 67924272 speedup is 1.00
- [2013-06-01 02:01:33 BST] Transferrer: Uploaded sync.mov
- [2013-06-01 02:01:33 BST] Pusher: Syncing with Cloud
- [2013-06-01 02:01:33 BST] chat: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"hash-object\",\"-w\",\"--stdin-paths\"]
- [2013-06-01 02:01:33 BST] feed: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"update-index\",\"-z\",\"--index-info\"]
- [2013-06-01 02:01:33 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- [2013-06-01 02:01:33 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"write-tree\"]
- [2013-06-01 02:01:33 BST] chat: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"commit-tree\",\"45ae1694ed9a7f54bab38405fa963859fd1c1918\",\"-p\",\"refs/heads/git-annex\"]
- [2013-06-01 02:01:33 BST] call: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"update-ref\",\"refs/heads/git-annex\",\"c22f52548a6fa05418d655906d8f182fb2d1bced\"]
- [2013-06-01 02:01:33 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"symbolic-ref\",\"HEAD\"]
- [2013-06-01 02:01:33 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"refs/heads/master\"]
- [2013-06-01 02:01:33 BST] Pusher: pushing to [Remote { name =\"Cloud\" }]
- [2013-06-01 02:01:33 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"git-annex\"]
- [2013-06-01 02:01:33 BST] call: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"branch\",\"-f\",\"synced/master\"]
- [2013-06-01 02:01:33 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- [2013-06-01 02:01:33 BST] call: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"push\",\"Cloud\",\"git-annex:synced/git-annex\",\"master:synced/master\"]
- [2013-06-01 02:01:33 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"log\",\"refs/heads/git-annex..c22f52548a6fa05418d655906d8f182fb2d1bced\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:33 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"log\",\"refs/heads/git-annex..8c35b10f8f42367fddc5c12fe39b30014358cd4d\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:33 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"log\",\"refs/heads/git-annex..ef8dc3b251fbf6baa8149ed077703b2363b3dbc9\",\"--oneline\",\"-n1\"]
- To ssh://darren@cloud.rhymeorange.com:21/tank/git-annex/projects/
- ef8dc3b2..c22f525 git-annex -> synced/git-annex
- [2013-06-01 02:01:34 BST] XMPPClient: sending: NotifyPush [UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\"]
- [2013-06-01 02:01:34 BST] TransferWatcher: transfer finishing: Transfer {transferDirection = Upload, transferUUID = UUID \"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\", transferKey = Key {keyName = \"48acd7e4d52f823c679d5adc2a1f52d18a8d1e05faecd779ec362d2f50c521dd.mov\", keyBackendName = \"SHA256E\", keySize = Just 67924272, keyMtime = Nothing}}
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"git-annex\"]
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"log\",\"refs/heads/git-annex..c22f52548a6fa05418d655906d8f182fb2d1bced\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"log\",\"refs/heads/git-annex..8c35b10f8f42367fddc5c12fe39b30014358cd4d\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:56 BST] read: git [\"--git-dir=/Volumes/StoragePool/Projects/init/.git\",\"--work-tree=/Volumes/StoragePool/Projects/init\",\"ls-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"preferred-content.log\"]
-
-
-
-
-
-
-
-
-
-
-====
-Receiving Repo (recognises sync.mov but does not download)
-====
-
-
- [2013-06-01 02:00:04 BST] main: starting assistant version 4.20130530-g8100cad
-
- [2013-06-01 02:00:04 BST] TransferScanner: Syncing with Cloud
- Already up-to-date.
-
- (scanning...) [2013-06-01 02:00:04 BST] Watcher: Performing startup scan
- Already up-to-date.
- Already up-to-date.
- Already up-to-date.
- Already up-to-date.
- [2013-06-01 02:00:05 BST] Committer: Committing changes to git
- Already up-to-date.
- Already up-to-date.
- To ssh://darren@cloud.rhymeorange.com:21/tank/git-annex/projects/
- da9a4d5..4142ae6 git-annex -> synced/git-annex
-
-
-
-
-
- (Recording state in git...)
-
- (started...) [2013-06-01 02:00:06 BST] Pusher: Syncing with Cloud
- Everything up-to-date
- [2013-06-01 02:00:07 BST] Committer: Committing changes to git
- [2013-06-01 02:00:08 BST] Pusher: Syncing with Cloud
- Everything up-to-date
- [2013-06-01 02:01:04 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"ls-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"preferred-content.log\"]
- [2013-06-01 02:01:21 BST] XMPPClient: received: [\"Presence from d15/BB5939E1 Just (Element {elementName = Name {nameLocalName = \\"git-annex\\", nameNamespace = Just \\"git-annex\\", namePrefix = Nothing}, elementAttributes = [(Name {nameLocalName = \\"push\\", nameNamespace = Nothing, namePrefix = Nothing},[ContentText \\"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\\"])], elementNodes = []})\",\"NotifyPush [UUID \\"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\\"]\"]
- [2013-06-01 02:01:21 BST] XMPPClient: push notification for e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae
- [2013-06-01 02:01:21 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"symbolic-ref\",\"HEAD\"]
- [2013-06-01 02:01:21 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"refs/heads/master\"]
- [2013-06-01 02:01:21 BST] call: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"fetch\",\"Cloud\"]
- From ssh://cloud.rhymeorange.com:21/tank/git-annex/projects
- 4142ae6..ef8dc3b2 synced/git-annex -> Cloud/synced/git-annex
- 1723064..75aa568 synced/master -> Cloud/synced/master
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"git-annex\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..4142ae6e3befdff987748a92feb65a11aecf4b63\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..8c35b10f8f42367fddc5c12fe39b30014358cd4d\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..ef8dc3b251fbf6baa8149ed077703b2363b3dbc9\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..3ddff95f0fdc37a75e0124ba5f965606b2f81bea\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..5e6dd0a555a5f67879e66ca1d83fe1312e87a0e1\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..8a0e3fb46d23acdfe9a30e6e85823b37bfae182c\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:22 BST] feed: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"update-index\",\"-z\",\"--index-info\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"ef8dc3b251fbf6baa8149ed077703b2363b3dbc9\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"ef8dc3b251fbf6baa8149ed077703b2363b3dbc9..refs/heads/git-annex\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:22 BST] call: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"update-ref\",\"refs/heads/git-annex\",\"ef8dc3b251fbf6baa8149ed077703b2363b3dbc9\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"git-annex\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..ef8dc3b251fbf6baa8149ed077703b2363b3dbc9\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..8c35b10f8f42367fddc5c12fe39b30014358cd4d\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..3ddff95f0fdc37a75e0124ba5f965606b2f81bea\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:22 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..5e6dd0a555a5f67879e66ca1d83fe1312e87a0e1\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..8a0e3fb46d23acdfe9a30e6e85823b37bfae182c\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:23 BST] feed: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"update-index\",\"-z\",\"--index-info\"]
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"refs/heads/git-annex\"]
- [2013-06-01 02:01:23 BST] call: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"--verify\",\"-q\",\"refs/remotes/Cloud/master\"]
- [2013-06-01 02:01:23 BST] call: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"--verify\",\"-q\",\"refs/remotes/Cloud/synced/master\"]
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/synced/master..refs/remotes/Cloud/synced/master\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"symbolic-ref\",\"HEAD\"]
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"refs/heads/master\"]
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"--hash\",\"refs/heads/master\"]
- [2013-06-01 02:01:23 BST] call: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects/.git/annex/merge/\",\"merge\",\"--no-edit\",\"refs/remotes/Cloud/synced/master\"]
- Updating 1723064..75aa568
- Fast-forward
- sync.mov | 1 +
- 1 file changed, 1 insertion(+)
- create mode 120000 sync.mov
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"--hash\",\"refs/heads/master\"]
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"diff-tree\",\"-z\",\"--raw\",\"--no-renames\",\"-l0\",\"-r\",\"172306459777930560a2cbbfd5c39ad596d93a0e\",\"75aa568fb7f484609a36abdf6afd84ab5aeb0f06\"]
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"symbolic-ref\",\"HEAD\"]
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"refs/heads/master\"]
- [2013-06-01 02:01:23 BST] Merger: merging refs/remotes/Cloud/synced/master into refs/heads/master
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"symbolic-ref\",\"HEAD\"]
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"refs/heads/master\"]
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"--hash\",\"refs/heads/master\"]
- [2013-06-01 02:01:23 BST] call: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects/.git/annex/merge/\",\"merge\",\"--no-edit\",\"refs/remotes/Cloud/synced/master\"]
- Already up-to-date.
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"--hash\",\"refs/heads/master\"]
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"diff-tree\",\"-z\",\"--raw\",\"--no-renames\",\"-l0\",\"-r\",\"75aa568fb7f484609a36abdf6afd84ab5aeb0f06\",\"75aa568fb7f484609a36abdf6afd84ab5aeb0f06\"]
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"git-annex\"]
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..ef8dc3b251fbf6baa8149ed077703b2363b3dbc9\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..8c35b10f8f42367fddc5c12fe39b30014358cd4d\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..3ddff95f0fdc37a75e0124ba5f965606b2f81bea\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..5e6dd0a555a5f67879e66ca1d83fe1312e87a0e1\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:23 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..8a0e3fb46d23acdfe9a30e6e85823b37bfae182c\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:34 BST] XMPPClient: received: [\"Presence from d15/BB5939E1 Just (Element {elementName = Name {nameLocalName = \\"git-annex\\", nameNamespace = Just \\"git-annex\\", namePrefix = Nothing}, elementAttributes = [(Name {nameLocalName = \\"push\\", nameNamespace = Nothing, namePrefix = Nothing},[ContentText \\"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\\"])], elementNodes = []})\",\"NotifyPush [UUID \\"e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae\\"]\"]
- [2013-06-01 02:01:34 BST] XMPPClient: push notification for e393d45e-c8b7-11e2-a1f9-f7c95b1b45ae
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"symbolic-ref\",\"HEAD\"]
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"refs/heads/master\"]
- [2013-06-01 02:01:34 BST] call: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"fetch\",\"Cloud\"]
- From ssh://cloud.rhymeorange.com:21/tank/git-annex/projects
- ef8dc3b2..c22f525 synced/git-annex -> Cloud/synced/git-annex
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"git-annex\"]
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..ef8dc3b251fbf6baa8149ed077703b2363b3dbc9\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..8c35b10f8f42367fddc5c12fe39b30014358cd4d\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..c22f52548a6fa05418d655906d8f182fb2d1bced\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..3ddff95f0fdc37a75e0124ba5f965606b2f81bea\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..5e6dd0a555a5f67879e66ca1d83fe1312e87a0e1\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..8a0e3fb46d23acdfe9a30e6e85823b37bfae182c\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:34 BST] feed: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"update-index\",\"-z\",\"--index-info\"]
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"c22f52548a6fa05418d655906d8f182fb2d1bced\"]
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"c22f52548a6fa05418d655906d8f182fb2d1bced..refs/heads/git-annex\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:34 BST] call: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"update-ref\",\"refs/heads/git-annex\",\"c22f52548a6fa05418d655906d8f182fb2d1bced\"]
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"git-annex\"]
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..c22f52548a6fa05418d655906d8f182fb2d1bced\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..8c35b10f8f42367fddc5c12fe39b30014358cd4d\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..3ddff95f0fdc37a75e0124ba5f965606b2f81bea\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:34 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..5e6dd0a555a5f67879e66ca1d83fe1312e87a0e1\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:35 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..8a0e3fb46d23acdfe9a30e6e85823b37bfae182c\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:35 BST] feed: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"update-index\",\"-z\",\"--index-info\"]
- [2013-06-01 02:01:35 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"diff-index\",\"--raw\",\"-z\",\"-r\",\"--no-renames\",\"-l0\",\"--cached\",\"refs/heads/git-annex\"]
- [2013-06-01 02:01:35 BST] call: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"--verify\",\"-q\",\"refs/remotes/Cloud/master\"]
- [2013-06-01 02:01:35 BST] call: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"--verify\",\"-q\",\"refs/remotes/Cloud/synced/master\"]
- [2013-06-01 02:01:35 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/synced/master..refs/remotes/Cloud/synced/master\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:35 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"symbolic-ref\",\"HEAD\"]
- [2013-06-01 02:01:35 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"refs/heads/master\"]
- [2013-06-01 02:01:35 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"--hash\",\"refs/heads/master\"]
- [2013-06-01 02:01:35 BST] call: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects/.git/annex/merge/\",\"merge\",\"--no-edit\",\"refs/remotes/Cloud/synced/master\"]
- Already up-to-date.
- [2013-06-01 02:01:35 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"--hash\",\"refs/heads/master\"]
- [2013-06-01 02:01:35 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"diff-tree\",\"-z\",\"--raw\",\"--no-renames\",\"-l0\",\"-r\",\"75aa568fb7f484609a36abdf6afd84ab5aeb0f06\",\"75aa568fb7f484609a36abdf6afd84ab5aeb0f06\"]
- [2013-06-01 02:01:35 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"git-annex\"]
- [2013-06-01 02:01:35 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- [2013-06-01 02:01:35 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..c22f52548a6fa05418d655906d8f182fb2d1bced\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:35 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..8c35b10f8f42367fddc5c12fe39b30014358cd4d\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:35 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..3ddff95f0fdc37a75e0124ba5f965606b2f81bea\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:35 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..5e6dd0a555a5f67879e66ca1d83fe1312e87a0e1\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:01:35 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"log\",\"refs/heads/git-annex..8a0e3fb46d23acdfe9a30e6e85823b37bfae182c\",\"--oneline\",\"-n1\"]
- [2013-06-01 02:02:04 BST] read: git [\"--git-dir=/Users/darren/Projects/.git\",\"--work-tree=/Users/darren/Projects\",\"ls-tree\",\"-z\",\"--\",\"refs/heads/git-annex\",\"uuid.log\",\"remote.log\",\"trust.log\",\"group.log\",\"preferred-content.log\"]
- [2013-06-01 02:02:05 BST] XMPPClient: received: [\"Unknown message\"]
-"""]]
diff --git a/doc/bugs/restart_daemon_required/comment_4_3ce776786eca83fcb8ff94c8f6ff3eb9._comment b/doc/bugs/restart_daemon_required/comment_4_3ce776786eca83fcb8ff94c8f6ff3eb9._comment
deleted file mode 100644
index 1163fcbcf..000000000
--- a/doc/bugs/restart_daemon_required/comment_4_3ce776786eca83fcb8ff94c8f6ff3eb9._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 4"
- date="2013-06-10T21:31:04Z"
- content="""
-Darren, I'm sorry about the delay getting back to you -- I've been on vacation.
-
-> XMPPClient: received: [\"Unknown message\"]
-
-This and the versions tell me what the problem is. Version 4.20130601 made a backwards-incompatable change in its XMPP protocol.
-You need to upgrade the one that's using 4.20130522, and that'll solve that. The current build for Lion is 4.20130601, which will do. (The Lion autobuild is also building again for some time.)
-
-I forgot to mention this protocol change in the release notes, it was only in the changelog. Am doing that now.
-"""]]
diff --git a/doc/bugs/rsync_fails_with_sync_error:_syntax_or_usage_error_.mdwn b/doc/bugs/rsync_fails_with_sync_error:_syntax_or_usage_error_.mdwn
new file mode 100644
index 000000000..09c79d78d
--- /dev/null
+++ b/doc/bugs/rsync_fails_with_sync_error:_syntax_or_usage_error_.mdwn
@@ -0,0 +1,85 @@
+### Please describe the problem.
+
+i tried to sync my home music annex to a server. Half the files worked nicely, but on the rest it fails with rsync errors.
+
+### What steps will reproduce the problem?
+
+git annex -d sync --content
+
+### What version of git-annex are you using? On what operating system?
+
+Client:
+
+ubuntu trusty
+Version: 5.20140517.4
+
+Server:
+
+ubuntu trusty
+Version: 5.20140412ubuntu1
+
+
+### Please provide any additional information below.
+
+[[!format sh """
+dirus-dom:/music$ git annex -d sync --content
+[2014-10-28 19:18:28 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","show-ref","git-annex"]
+[2014-10-28 19:18:28 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","show-ref","--hash","refs/heads/git-annex"]
+[2014-10-28 19:18:29 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","log","refs/heads/git-annex..1599d29eba7a0ec50217c2b4a3f4cc1ecc8b2116","--oneline","-n1"]
+[2014-10-28 19:18:29 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","log","refs/heads/git-annex..27b47301dcb5007705d1dcd5a414df964b840467","--oneline","-n1"]
+[2014-10-28 19:18:29 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","log","refs/heads/git-annex..a95ca0282fefcd774ec8a00b6f33c11f08f789d8","--oneline","-n1"]
+[2014-10-28 19:18:29 CET] chat: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","cat-file","--batch"]
+commit [2014-10-28 19:18:29 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","commit","-a","-m","git-annex automatic sync"]
+ok
+[2014-10-28 19:18:31 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","symbolic-ref","HEAD"]
+[2014-10-28 19:18:31 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","show-ref","refs/heads/master"]
+[2014-10-28 19:18:31 CET] call: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","show-ref","--verify","-q","refs/heads/synced/master"]
+[2014-10-28 19:18:31 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","log","refs/heads/master..refs/heads/synced/master","--oneline","-n1"]
+pull sync.poelzi.org__music
+[2014-10-28 19:18:31 CET] read: ssh ["-O","stop","-S","poelzigit@sync.poelzi.org","-o","ControlMaster=auto","-o","ControlPersist=yes","localhost"]
+[2014-10-28 19:18:31 CET] call: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","fetch","sync.poelzi.org__music"]
+[2014-10-28 19:18:33 CET] call: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","show-ref","--verify","-q","refs/remotes/sync.poelzi.org__music/master"]
+[2014-10-28 19:18:33 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","log","refs/heads/master..refs/remotes/sync.poelzi.org__music/master","--oneline","-n1"]
+[2014-10-28 19:18:33 CET] call: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","show-ref","--verify","-q","refs/remotes/sync.poelzi.org__music/synced/master"]
+[2014-10-28 19:18:33 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","log","refs/heads/synced/master..refs/remotes/sync.poelzi.org__music/synced/master","--oneline","-n1"]
+ok
+[2014-10-28 19:18:33 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","show-ref","git-annex"]
+[2014-10-28 19:18:33 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","show-ref","--hash","refs/heads/git-annex"]
+[2014-10-28 19:18:33 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","log","refs/heads/git-annex..1599d29eba7a0ec50217c2b4a3f4cc1ecc8b2116","--oneline","-n1"]
+[2014-10-28 19:18:33 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","log","refs/heads/git-annex..27b47301dcb5007705d1dcd5a414df964b840467","--oneline","-n1"]
+[2014-10-28 19:18:33 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","log","refs/heads/git-annex..a95ca0282fefcd774ec8a00b6f33c11f08f789d8","--oneline","-n1"]
+[2014-10-28 19:18:33 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","ls-files","--cached","-z","--"]
+[2014-10-28 19:18:33 CET] chat: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","check-attr","-z","--stdin","annex.backend","annex.numcopies","--"]
+copy Alan Parsons Project/Eye In The Sky/.07 - Psychobabble.mood copy Alan Parsons Project/Eye In The Sky/.07 - Psychobabble.mood (checking sync.poelzi.org__music...) [2014-10-28 19:18:43 CET] call: ssh ["-S",".git/annex/ssh/poelzigit@sync.poelzi.org","-o","ControlMaster=auto","-o","ControlPersist=yes","-T","poelzigit@sync.poelzi.org","git-annex-shell 'inannex' '/music/' 'SHA256E-s3000--da8a3336a484a171a438c99660260cc35cbd37c339dd2c18447cd025064bc00b.mood' --uuid 35a89672-4ff5-4d9a-9bf2-cedb272bb7cb"]
+(to sync.poelzi.org__music...)
+[2014-10-28 19:18:43 CET] read: rsync ["--progress","--inplace","--perms","-e","'ssh' '-S' '.git/annex/ssh/poelzigit@sync.poelzi.org' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=yes' '-T' 'poelzigit@sync.poelzi.org' 'git-annex-shell ''recvkey'' ''/music/'' ''SHA256E-s3000--da8a3336a484a171a438c99660260cc35cbd37c339dd2c18447cd025064bc00b.mood'' --uuid 35a89672-4ff5-4d9a-9bf2-cedb272bb7cb ''--'' ''remoteuuid=97a3cd71-ee6c-4437-8740-253cde0d32ae'' ''direct='' ''associatedfile=Alan Parsons Project/Eye In The Sky/.07 - Psychobabble.mood'' ''--'''","--","/exports/music/.git/annex/objects/20/Z4/SHA256E-s3000--da8a3336a484a171a438c99660260cc35cbd37c339dd2c18447cd025064bc00b.mood/SHA256E-s3000--da8a3336a484a171a438c99660260cc35cbd37c339dd2c18447cd025064bc00b.mood","dummy:"]
+rsync error: syntax or usage error (code 1) at main.c(1183) [sender=3.1.1]
+
+ rsync failed -- run git annex again to resume file transfer
+failed
+copy Alessandro Scarlatti/Motets - Gérard Lesne, Veronique Gens (1993) [300]/06 - Infirmata, Vulnerata - VI Semper Gratus.ogg copy Alessandro Scarlatti/Motets - Gérard Lesne, Veronique Gens (1993) [300]/06 - Infirmata, Vulnerata - VI Semper Gratus.ogg (checking sync.poelzi.org__music...) [2014-10-28 19:18:48 CET] call: ssh ["-S",".git/annex/ssh/poelzigit@sync.poelzi.org","-o","ControlMaster=auto","-o","ControlPersist=yes","-T","poelzigit@sync.poelzi.org","git-annex-shell 'inannex' '/music/' 'SHA256E-s3847396--05c5498f08c727645ba84270cb8d82da69a3c9bede35520aa3128b938d003a3d.ogg' --uuid 35a89672-4ff5-4d9a-9bf2-cedb272bb7cb"]
+(to sync.poelzi.org__music...)
+[2014-10-28 19:18:48 CET] read: rsync ["--progress","--inplace","--perms","-e","'ssh' '-S' '.git/annex/ssh/poelzigit@sync.poelzi.org' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=yes' '-T' 'poelzigit@sync.poelzi.org' 'git-annex-shell ''recvkey'' ''/music/'' ''SHA256E-s3847396--05c5498f08c727645ba84270cb8d82da69a3c9bede35520aa3128b938d003a3d.ogg'' --uuid 35a89672-4ff5-4d9a-9bf2-cedb272bb7cb ''--'' ''remoteuuid=97a3cd71-ee6c-4437-8740-253cde0d32ae'' ''direct='' ''associatedfile=Alessandro Scarlatti/Motets - G\233rard Lesne, Veronique Gens (1993) [300]/06 - Infirmata, Vulnerata - VI Semper Gratus.ogg'' ''--'''","--","/exports/music/.git/annex/objects/XJ/f9/SHA256E-s3847396--05c5498f08c727645ba84270cb8d82da69a3c9bede35520aa3128b938d003a3d.ogg/SHA256E-s3847396--05c5498f08c727645ba84270cb8d82da69a3c9bede35520aa3128b938d003a3d.ogg","dummy:"]
+rsync error: syntax or usage error (code 1) at main.c(1183) [sender=3.1.1]
+
+ rsync failed -- run git annex again to resume file transfer
+failed
+^C
+
+
+Calling this through python gives:
+
+In [5]: subprocess.call(["rsync", "--debug=all", "--progress","--inplace","--perms","-e","'ssh' '-S' '.git/annex/ssh/poelzigit@sync.poelzi.org' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=yes' '-T' 'poelzigit@sync.poelzi.org' 'git-annex-shell ''recvkey'' ''/music/'' ''SHA256E-s3000--da8a3336a484a171a438c99660260cc35cbd37c339dd2c18447cd025064bc00b.mood'' --uuid 35a89672-4ff5-4d9a-9bf2-cedb272bb7cb ''--'' ''remoteuuid=97a3cd71-ee6c-4437-8740-253cde0d32ae'' ''direct='' ''associatedfile=Alan Parsons Project/Eye In The Sky/.07 - Psychobabble.mood'' ''--'''","--","/exports/music/.git/annex/objects/20/Z4/SHA256E-s3000--da8a3336a484a171a438c99660260cc35cbd37c339dd2c18447cd025064bc00b.mood/SHA256E-s3000--da8a3336a484a171a438c99660260cc35cbd37c339dd2c18447cd025064bc00b.mood","dummy:"])
+opening connection using: ssh -S .git/annex/ssh/poelzigit@sync.poelzi.org -o ControlMaster=auto -o ControlPersist=yes -T poelzigit@sync.poelzi.org "git-annex-shell 'recvkey' '/music/' 'SHA256E-s3000--da8a3336a484a171a438c99660260cc35cbd37c339dd2c18447cd025064bc00b.mood' --uuid 35a89672-4ff5-4d9a-9bf2-cedb272bb7cb '--' 'remoteuuid=97a3cd71-ee6c-4437-8740-253cde0d32ae' 'direct=' 'associatedfile=Alan Parsons Project/Eye In The Sky/.07 - Psychobabble.mood' '--'" dummy rsync --server -pe.Lsfx --log-format=X --debug=ALL --inplace . . (19 args)
+(Client) Protocol versions: remote=31, negotiated=31
+[sender] change_dir(/exports/music/.git/annex/objects/20/Z4/SHA256E-s3000--da8a3336a484a171a438c99660260cc35cbd37c339dd2c18447cd025064bc00b.mood)
+send_files starting
+send_files phase=1
+send_files phase=2
+send files finished
+total: matches=0 hash_hits=0 false_alarms=0 data=0
+rsync error: syntax or usage error (code 1) at main.c(1183) [sender=3.1.1]
+[sender] _exit_cleanup(code=1, file=main.c, line=1183): about to call exit(1)
+
+
+"""]]
diff --git a/doc/bugs/rsync_fails_with_sync_error:_syntax_or_usage_error_/comment_1_464d733de18f6ca438ebd84e88b8cee2._comment b/doc/bugs/rsync_fails_with_sync_error:_syntax_or_usage_error_/comment_1_464d733de18f6ca438ebd84e88b8cee2._comment
new file mode 100644
index 000000000..ea9db7bc6
--- /dev/null
+++ b/doc/bugs/rsync_fails_with_sync_error:_syntax_or_usage_error_/comment_1_464d733de18f6ca438ebd84e88b8cee2._comment
@@ -0,0 +1,29 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-31T20:45:41Z"
+ content="""
+This is a rsync protocol level error; one side is sending something
+that the other side fails to deal with. We can see in your log that the
+two rsync are communicating successfully over the ssh connection
+at first.
+
+This could be something not clean about your ssh connection, or some incompatability
+in the versions of rsync or git-annex between the client and the server.
+It probably wouldn't hurt to make sure client and server have the same rsync
+version, and perhaps upgrade them both to the newest git-annex in case this
+problem is somehow fixed there.
+
+Then, seems to me that the next step is to get git-annex-shell out of the
+picture and see if you can still reproduce the problem. You can find the rsync
+command that git-annex-shell runs by passing --debug to it. The just replace
+the git-annex-shell command in your python code with the rsync command it runs.
+
+Here's a shell command line I came up with by doing that. It will have
+different paths for your repo, and localhost will need to be changed to your
+server's name.
+
+<pre>
+rsync --progress --inplace --perms --debug=all -e 'ssh -4 -T localhost "rsync --server -t --inplace -e.Lsf . //home/joey/annex/.git/annex/tmp/SHA256E-s30--bdce956a335681853344fce6f1f940a5c8b7061007398661a3b14f2037843744" dummy rsync --server -pe.Lsfx --log-format=X --debug=ALL --inplace . .' /tmp/annex/.git/annex/objects/Wx/Mf/SHA256E-s30--bdce956a335681853344fce6f1f940a5c8b7061007398661a3b14f2037843744/SHA256E-s30--bdce956a335681853344fce6f1f940a5c8b7061007398661a3b14f2037843744 dummy:
+</pre>
+"""]]
diff --git a/doc/bugs/rsync_remote_is_not_working.mdwn b/doc/bugs/rsync_remote_is_not_working.mdwn
new file mode 100644
index 000000000..766d6e900
--- /dev/null
+++ b/doc/bugs/rsync_remote_is_not_working.mdwn
@@ -0,0 +1,28 @@
+Host: Mac OS with git-annex 5.20140919-g0f7caf5
+
+Remote: Linux
+
+* with git-annex 5.20140920-gb0c4300
+* using user&password login
+
+On Host:
+
+1. create a repo with git init && git annex init && git annex direct
+1. add a rsync repo in git-annex webapp, type "small archive", with shared encryption (same result using command line)
+1. copy some new files to the repo, expect the files to appear in the remote repo (check with du)
+1. Web app says "synced with remote-name", but remote repo is completely empty
+1. run git annex copy --to $remotename, now remote repo is filled with files
+1. but the sizes are really small, seems that the actual files are not being transferred
+1. convert the repo to indirect repo: git annex indirect
+1. re-run git annex copy, now the repo size on the remote seems about right
+1. now start git annex assistant, copy some new files, expect new files to be synced
+1. actual: the remote becomes completely empty, the existing files are removed!
+
+The other small issue
+
+* The add remote interface stops at "check remote" prompt for a long time without completing
+* Kill the webapp process, re-run webapp, add remote again, it worked very quickly
+* But future interaction with the remote still requires password, both commandline & webapp
+
+> Closing this bug report since it seems it was largely due to a
+> misunderstanding of what "small archive" does. [[done]] --[[Joey]]
diff --git a/doc/bugs/rsync_remote_is_not_working/comment_1_8998edf856a411de1f90b27568628feb._comment b/doc/bugs/rsync_remote_is_not_working/comment_1_8998edf856a411de1f90b27568628feb._comment
new file mode 100644
index 000000000..50f0c06cc
--- /dev/null
+++ b/doc/bugs/rsync_remote_is_not_working/comment_1_8998edf856a411de1f90b27568628feb._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 1"
+ date="2014-10-21T20:07:40Z"
+ content="""
+A \"small archive\" only wants to contain files that are located inside archive/ directories.
+
+That seems to explain everything you reported except for:
+
+> 6. but the sizes are really small, seems that the actual files are not being transferred
+
+Maybe the remote is configured to use chunking? What happens if you run `git annex fsck --from $remotename` after copying a file to it? Any problem detected?
+
+> The add remote interface stops at \"check remote\" prompt for a long time without completing
+
+Please explain exactly what you did in the webapp. What did you click on, and what did you enter? I need enough detail to be able to reproduce the problem.
+
+(Also, in the future, one problem per bug report turns out to be a lot less confusing, and have better results all around. True here and really anywhere..)
+"""]]
diff --git a/doc/bugs/rsync_remote_shows_no_progress.mdwn b/doc/bugs/rsync_remote_shows_no_progress.mdwn
deleted file mode 100644
index 0192291f2..000000000
--- a/doc/bugs/rsync_remote_shows_no_progress.mdwn
+++ /dev/null
@@ -1,15 +0,0 @@
-What steps will reproduce the problem?
-Init a annex, add rsync remote (with or without encryption, does not matter), launch annex assistant
-
-What is the expected output? What do you see instead?
-In the dashboard, no progress is recorded for the transfer. Each file stays at 0% and then disappears as it is fully transfered. I expect the progressbar to move and show the actual transfer progress.
-
-What version of git-annex are you using? On what operating system?
-git head of today, Ubuntu 12.04
-
-Please provide any additional information below.
-I looked in the source code and found some hints that the rsync progress should actually be evaluated and shown, I'm opening a bug report for this reason.
-
-[[!meta title="assistant: No progress bars for file uploads"]]
-
-> now upload progress bars work! [[done]] --[[Joey]]
diff --git a/doc/bugs/rsync_remote_shows_no_progress/comment_1_a7f5d646a924c462b987561cf6fc4318._comment b/doc/bugs/rsync_remote_shows_no_progress/comment_1_a7f5d646a924c462b987561cf6fc4318._comment
deleted file mode 100644
index 09afec65a..000000000
--- a/doc/bugs/rsync_remote_shows_no_progress/comment_1_a7f5d646a924c462b987561cf6fc4318._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.8.30"
- subject="comment 1"
- date="2012-09-09T20:01:53Z"
- content="""
-Yes, progress bars for uploads are not implemented yet. See [[design/assistant/progressbars]]
-"""]]
diff --git a/doc/bugs/runs_of_of_memory_adding_2_million_files.mdwn b/doc/bugs/runs_of_of_memory_adding_2_million_files.mdwn
new file mode 100644
index 000000000..3891933a6
--- /dev/null
+++ b/doc/bugs/runs_of_of_memory_adding_2_million_files.mdwn
@@ -0,0 +1,17 @@
+Make 2 million files and `git annex add` (indirect mode), fails at the end:
+
+<pre>
+add 999996 ok
+add 999997 ok
+(Recording state in git...)
+[2014-06-21 11:49:28 JEST] feed: xargs ["-0","git","--git-dir=/home/joey/tmp/r/.git","--work-tree=/home/joey/tmp/r","add","--"]
+add 999998 ok
+add 999999 ok
+[2014-06-21 11:49:49 JEST] read: git ["--git-dir=/home/joey/tmp/r/.git","--work-tree=/home/joey/tmp/r","diff","--name-only","--diff-filter=T","-z","--","."]
+(Recording state in git...)
+[2014-06-21 11:52:24 JEST] feed: xargs ["-0","git","--git-dir=/home/joey/tmp/r/.git","--work-tree=/home/joey/tmp/r","add","--"]
+Stack space overflow: current size 8388608 bytes.
+Use `+RTS -Ksize -RTS' to increase it.
+</pre>
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_10_a201485bf41514fde7c61a4dcbb5064f._comment b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_10_a201485bf41514fde7c61a4dcbb5064f._comment
new file mode 100644
index 000000000..9d5c8aab6
--- /dev/null
+++ b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_10_a201485bf41514fde7c61a4dcbb5064f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 10"
+ date="2014-10-02T15:35:15Z"
+ content="""
+This got fixed in version 5.20140707
+"""]]
diff --git a/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_1_8b60b7816b9bf2c8cdd21b5cae431555._comment b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_1_8b60b7816b9bf2c8cdd21b5cae431555._comment
new file mode 100644
index 000000000..d4b1c3fd8
--- /dev/null
+++ b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_1_8b60b7816b9bf2c8cdd21b5cae431555._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 1"
+ date="2014-07-04T18:24:51Z"
+ content="""
+The diff-filter=T comes from when Command.Add runs its pass to find unlocked files. It's finished adding all the files, so it must either be that or the git-annex branch commit that's running out of memory, I think.
+"""]]
diff --git a/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_2_32908da23e4fb38a7d20b765a5ab4656._comment b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_2_32908da23e4fb38a7d20b765a5ab4656._comment
new file mode 100644
index 000000000..7f0e8ba70
--- /dev/null
+++ b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_2_32908da23e4fb38a7d20b765a5ab4656._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 2"
+ date="2014-07-04T18:36:49Z"
+ content="""
+Does not seem to be the diff-filter=T command that is the problem. It's not outputting a lot of files, and should stream over them even if it did.
+
+The last xargs appears to be at or near the problem. It is called by Annex.Content.saveState, which first does a Annex.Queue.flush, followed by a Annex.Branch.commit. I suspect the problem is the latter; at this point there are 2 million files in .git/annex/journal waiting to be committed to the git-annex branch.
+
+In the same big repo, I can add one more file and reproduce the problem running `git annex add $newfile`.
+"""]]
diff --git a/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_3_3cff88b50eb3872565bccbeb6ee15716._comment b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_3_3cff88b50eb3872565bccbeb6ee15716._comment
new file mode 100644
index 000000000..7e2c5568d
--- /dev/null
+++ b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_3_3cff88b50eb3872565bccbeb6ee15716._comment
@@ -0,0 +1,27 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 3"
+ date="2014-07-04T19:26:00Z"
+ content="""
+Looking at the code, it's pretty clear why this is using a lot of memory:
+
+<pre>
+ fs <- getJournalFiles jl
+ liftIO $ do
+ h <- hashObjectStart g
+ Git.UpdateIndex.streamUpdateIndex g
+ [genstream dir h fs]
+ hashObjectStop h
+ return $ liftIO $ mapM_ (removeFile . (dir </>)) fs
+</pre>
+
+So the big list in `fs` has to be retained in memory after the files are streamed to update-index, in order for them to be deleted!
+
+Fixing is a bit tricky.. New journal files can appear while this is going on, so it can't just run getJournalFiles a second time to get the files to clean.
+Maybe delete the file after it's been sent to git-update-index? But git-update-index is going to want to read the file, and we don't really know when it will choose to do so. It could wait a while after we've sent the filename to it, potentially.
+
+Also, per [[!commit 750c4ac6c282d14d19f79e0711f858367da145e4]], we cannot delete the journal files until *after* the commit, or another git-annex process would see inconsistent data!
+
+I actually think I am going to need to use a temp file to hold the list of files..
+"""]]
diff --git a/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_4_e991986eb8ae49d2e69f7ed7fd61485f._comment b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_4_e991986eb8ae49d2e69f7ed7fd61485f._comment
new file mode 100644
index 000000000..40ff69d05
--- /dev/null
+++ b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_4_e991986eb8ae49d2e69f7ed7fd61485f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 4"
+ date="2014-07-04T19:38:18Z"
+ content="""
+While I fixed the problem analized above, it still runs out of memory in the same place. Must be other strictness problems..
+"""]]
diff --git a/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_5_241ad838135a7a377374ca9ba90aec5c._comment b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_5_241ad838135a7a377374ca9ba90aec5c._comment
new file mode 100644
index 000000000..41382e1c2
--- /dev/null
+++ b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_5_241ad838135a7a377374ca9ba90aec5c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 5"
+ date="2014-07-04T19:53:43Z"
+ content="""
+The other memory leak is in getJournalFiles itself!
+"""]]
diff --git a/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_6_744982b77cc867e9e3a7d638c7a653d6._comment b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_6_744982b77cc867e9e3a7d638c7a653d6._comment
new file mode 100644
index 000000000..574cc0dc7
--- /dev/null
+++ b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_6_744982b77cc867e9e3a7d638c7a653d6._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 6"
+ date="2014-07-04T21:10:17Z"
+ content="""
+Actually, it is in getDirectoryContents itself, so not even in git-annex's code. Filed a bug w/patch: <https://ghc.haskell.org/trac/ghc/ticket/9266>
+
+I do not feel this is serious enough to work around in git-annex with a fixed copy of getDirectoryContents, so I'll wait for that get fixed.
+
+Testing with my patched getDirectoryContents, git-annex still uses up a lot of memory in this situation. It no longer blows the stack, but getDirectoryContents is still using entirely more memory than it needs to.
+"""]]
diff --git a/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_7_9add4ee13b7ea846e6495c28da214269._comment b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_7_9add4ee13b7ea846e6495c28da214269._comment
new file mode 100644
index 000000000..a6f837dff
--- /dev/null
+++ b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_7_9add4ee13b7ea846e6495c28da214269._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 7"
+ date="2014-07-04T22:09:38Z"
+ content="""
+I wrote my own getDirectoryContents' with different exception semantics and entirely fixed this now. git-annex's memory use remains stable at around 1.5 mb during the entire staging of the millions of files. git itself uses a few hundred mb ;)
+"""]]
diff --git a/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_8_7264b57f309d6e824c612eed8a088327._comment b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_8_7264b57f309d6e824c612eed8a088327._comment
new file mode 100644
index 000000000..c4d772104
--- /dev/null
+++ b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_8_7264b57f309d6e824c612eed8a088327._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis"
+ nickname="Mike"
+ subject="comment 8"
+ date="2014-07-30T20:33:44Z"
+ content="""
+Great work Joeyh :-) I will install the new version soon. I is fantastic that you fixed this so thoroughly.
+"""]]
diff --git a/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_9_27a31463bcf28b5c684bb483b46a3baf._comment b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_9_27a31463bcf28b5c684bb483b46a3baf._comment
new file mode 100644
index 000000000..fe421a450
--- /dev/null
+++ b/doc/bugs/runs_of_of_memory_adding_2_million_files/comment_9_27a31463bcf28b5c684bb483b46a3baf._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmyYyXrtGKiR3Pu2OjdVsETXf4ePmECW54"
+ nickname="Andrey"
+ subject="comment 9"
+ date="2014-09-29T10:48:36Z"
+ content="""
+Joeyh, in what version it was fixed? I really need it for Ubuntu 14.04
+"""]]
diff --git a/doc/bugs/scp_interrupt_to_background.mdwn b/doc/bugs/scp_interrupt_to_background.mdwn
deleted file mode 100644
index 381f5cd73..000000000
--- a/doc/bugs/scp_interrupt_to_background.mdwn
+++ /dev/null
@@ -1,2 +0,0 @@
-When getting a file with scp, SIGINT is blocked, exposing the git
-subcommand fork to background bug again. [[done]]
diff --git a/doc/bugs/set_metadata_on_wrong_files.mdwn b/doc/bugs/set_metadata_on_wrong_files.mdwn
new file mode 100644
index 000000000..e31714784
--- /dev/null
+++ b/doc/bugs/set_metadata_on_wrong_files.mdwn
@@ -0,0 +1,90 @@
+### Please describe the problem.
+
+For an example I wanted to add different metadata to some test files,
+but the outcome is that the last metadata gets applied to all three files. see transcript below.
+
+
+
+### What steps will reproduce the problem?
+
+1. Create a git annex repository
+2. add a few files
+3. add some metadata to the files, same keys, differnt values
+4. watch the metadata, only the last added one is shown for all files
+
+
+### What version of git-annex are you using? On what operating system?
+ $cat /etc/debian_version; uname -a; git annex version
+ 7.4
+ Linux jupiter 3.13.0ct #33 SMP PREEMPT Tue Jan 21 05:04:01 CET 2014 x86_64 GNU/Linux
+ git-annex version: 5.20140306~bpo70+1
+ build flags: Assistant Webapp Pairing S3 Inotify DBus XMPP Feeds Quvi TDFA
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web tahoe glacier hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 0 1 2 4
+
+
+### Please provide any additional information below.
+
+Debian/Wheezy with git annex from backports. The test was done in /tmp which is a tmpfs.
+
+
+[[!format sh """
+$export LC_ALL=C
+$mkdir /tmp/annextest
+$cd /tmp/annextest
+$git init
+Initialized empty Git repository in /tmp/annextest/.git/
+$git annex init
+init ok
+(Recording state in git...)
+
+$touch a.txt b.txt c.txt
+$git annex add a.txt b.txt c.txt
+add a.txt ok
+add b.txt ok
+add c.txt ok
+(Recording state in git...)
+$git commit -m init
+[master (root-commit) 5470bdb] init
+ 3 files changed, 3 insertions(+)
+ create mode 120000 a.txt
+ create mode 120000 b.txt
+ create mode 120000 c.txt
+
+$git annex metadata a.txt -s foo=bar -s num=1
+metadata a.txt
+ foo=bar
+ num=1
+ok
+(Recording state in git...)
+$git annex metadata b.txt -s foo=baz -s num=2
+metadata b.txt
+ foo=baz
+ num=2
+ok
+(Recording state in git...)
+$git annex metadata c.txt -s foo=barf -s num=3
+metadata c.txt
+ foo=barf
+ num=3
+ok
+(Recording state in git...)
+$git annex metadata
+metadata a.txt
+ foo=barf
+ num=3
+ok
+metadata b.txt
+ foo=barf
+ num=3
+ok
+metadata c.txt
+ foo=barf
+ num=3
+ok
+"""]]
+
+> [[fixed|done]]; documentation improved --[[Joey]]
diff --git a/doc/bugs/set_metadata_on_wrong_files/comment_1_074f124e5d313e90b3e9217325799587._comment b/doc/bugs/set_metadata_on_wrong_files/comment_1_074f124e5d313e90b3e9217325799587._comment
new file mode 100644
index 000000000..f7a47d2fe
--- /dev/null
+++ b/doc/bugs/set_metadata_on_wrong_files/comment_1_074f124e5d313e90b3e9217325799587._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.41"
+ subject="comment 1"
+ date="2014-03-26T20:55:07Z"
+ content="""
+This is because metadata applies to the contents of files, and all 3 of your files have the same single content. I will update the documentation to make it more clear metadata works this way.
+"""]]
diff --git a/doc/bugs/shared_cipher_for_S3_attempting_to_decrypt_a_non-encrypted_file.mdwn b/doc/bugs/shared_cipher_for_S3_attempting_to_decrypt_a_non-encrypted_file.mdwn
new file mode 100644
index 000000000..16fa60718
--- /dev/null
+++ b/doc/bugs/shared_cipher_for_S3_attempting_to_decrypt_a_non-encrypted_file.mdwn
@@ -0,0 +1,22 @@
+I am trying to S3 as a file store for git annex. I have set up the remote via the following command:
+
+ git annex initremote xxx-s3 type=S3 encryption=shared embedcreds=yes datacenter=EU bucket=xxx-git-annex fileprefix=test/
+
+The remote gets set up correctly and creates the directory I want, and adds a annex-uuid file.
+
+Now when I try to copy a file to the xxx-s3 remote, I get the following error:
+
+ $ git annex add ssl-success-and-failure-with-tl-logs.log
+ add ssl-success-and-failure-with-tl-logs.log ok
+ (Recording state in git...)
+ $ git annex copy ssl-success-and-failure-with-tl-logs.log --to xxx-s3
+ copy ssl-success-and-failure-with-tl-logs.log (gpg) gpg: no valid OpenPGP data found.
+ gpg: decrypt_message failed: eof
+
+ git-annex: user error (gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--batch","--passphrase-fd","10","--decrypt"] exited 2)
+ failed
+ git-annex: copy: 1 failed
+
+Any ideas what might be wrong? Is shared cipher broken somehow?
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/shared_cipher_for_S3_attempting_to_decrypt_a_non-encrypted_file/comment_1_b42ff37be172ba841980c17ad6223e06._comment b/doc/bugs/shared_cipher_for_S3_attempting_to_decrypt_a_non-encrypted_file/comment_1_b42ff37be172ba841980c17ad6223e06._comment
new file mode 100644
index 000000000..1268d8cd0
--- /dev/null
+++ b/doc/bugs/shared_cipher_for_S3_attempting_to_decrypt_a_non-encrypted_file/comment_1_b42ff37be172ba841980c17ad6223e06._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmAINLSovhWM_4_KrbngOcxduIbBuKv8ZA"
+ nickname="Nuutti"
+ subject="comment 1"
+ date="2014-08-01T09:28:21Z"
+ content="""
+Sorry, this should probably be in bugs.
+"""]]
diff --git a/doc/bugs/shared_cipher_for_S3_attempting_to_decrypt_a_non-encrypted_file/comment_2_c0325903cdb8d24c72fd4e67e18fbdc8._comment b/doc/bugs/shared_cipher_for_S3_attempting_to_decrypt_a_non-encrypted_file/comment_2_c0325903cdb8d24c72fd4e67e18fbdc8._comment
new file mode 100644
index 000000000..57d5ee0cf
--- /dev/null
+++ b/doc/bugs/shared_cipher_for_S3_attempting_to_decrypt_a_non-encrypted_file/comment_2_c0325903cdb8d24c72fd4e67e18fbdc8._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 2"
+ date="2014-08-12T19:37:56Z"
+ content="""
+This is not gpg trying to decrypt some file from the S3 remote. It is trying to decrypt the creds that embedcreds=yes caused to be stored in the git repo.
+
+I was able to reproduce this using your command line, with the S3 env vars set while running initremote, and then unset for the copy, which causes git-annex to try to get the creds from the git repo, and decrypt them.
+
+However, since encryption=shared, the encryption key is stored in the git repo, so there is no point at all in encrypting the creds, also stored in the git repo with that key. So `initremote` doesn't. The creds are simply stored base-64 encoded.
+
+I have fixed this. I will now move this thread to bugs so I can close it.
+"""]]
diff --git a/doc/bugs/should_be_possible_to_use_ssh_hosts_from_.ssh__47__config.mdwn b/doc/bugs/should_be_possible_to_use_ssh_hosts_from_.ssh__47__config.mdwn
new file mode 100644
index 000000000..d016038bc
--- /dev/null
+++ b/doc/bugs/should_be_possible_to_use_ssh_hosts_from_.ssh__47__config.mdwn
@@ -0,0 +1,26 @@
+### Please describe the problem.
+
+I am using a ssh-host configured in .ssh/config in a corporate-environment like this:
+
+[[!format sh """
+ Host home
+ Hostname 1.2.3.4
+ Port 443
+ ProxyCommand corkscrew proxy.fqdn 8080 %h %p ~/.authfile
+ # http://www.agroman.net/corkscrew/
+"""]]
+
+I now want to be able to add this host as a remote repository, but don't have the ability to add it. A tunnel to localhost would be possible but then I would have to setup this portforwarding for git-annex separately every time it is started.
+
+### What steps will reproduce the problem?
+
+Add a remote host that is only reachable through a proxy.
+
+### What version of git-annex are you using? On what operating system?
+
+gentoo
+git-annex-5.20141125 {+assistant +cryptohash +dbus +desktop-notify +dns +feed +inotify +pairing +production +quvi +s3 +tahoe +tdfa +testsuite +webapp +webapp-secure +webdav +xmpp}
+
+
+
+Is it possible to use this predefined host, or add the possibility to configure git-annex like above?
diff --git a/doc/bugs/should_be_possible_to_use_ssh_hosts_from_.ssh__47__config/comment_1_3dac095b7cf799e31925868d13888970._comment b/doc/bugs/should_be_possible_to_use_ssh_hosts_from_.ssh__47__config/comment_1_3dac095b7cf799e31925868d13888970._comment
new file mode 100644
index 000000000..8fb2ae19c
--- /dev/null
+++ b/doc/bugs/should_be_possible_to_use_ssh_hosts_from_.ssh__47__config/comment_1_3dac095b7cf799e31925868d13888970._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="gregor"
+ subject="workaround:"
+ date="2014-12-02T18:04:16Z"
+ content="""
+my workaround is to setup the remote with the local port-forward end then edit the .ssh/config to use the needed ProxyCommand
+"""]]
diff --git a/doc/bugs/should_be_possible_to_use_ssh_hosts_from_.ssh__47__config/comment_2_342b4913a063184650cdf4f541f7ea02._comment b/doc/bugs/should_be_possible_to_use_ssh_hosts_from_.ssh__47__config/comment_2_342b4913a063184650cdf4f541f7ea02._comment
new file mode 100644
index 000000000..82108d0cd
--- /dev/null
+++ b/doc/bugs/should_be_possible_to_use_ssh_hosts_from_.ssh__47__config/comment_2_342b4913a063184650cdf4f541f7ea02._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2014-12-02T18:51:44Z"
+ content="""
+That will work fine as a git remote using that hostname. `git remote add home home:path`
+
+The webapp isn't currently aware of hostnames configured via .ssh/config,
+so it cannot be set up using the webapp.
+"""]]
diff --git a/doc/bugs/show_version_without_having_to_be_in_a_git_repo.mdwn b/doc/bugs/show_version_without_having_to_be_in_a_git_repo.mdwn
deleted file mode 100644
index 98b9ced22..000000000
--- a/doc/bugs/show_version_without_having_to_be_in_a_git_repo.mdwn
+++ /dev/null
@@ -1,11 +0,0 @@
-It'd be nice to be able to run "git annex version" -- and maybe some other
-commands, like "git annex" itself for the help text, without having to be
-inside a git repo. Right now it requires you to be in a git repo even if
-it's not a git-annex repo.
-
-> You need a newer verison of git-annex. --[[Joey]]
-
- joey@gnu:/>git annex version
- git-annex version: 3.20120124
-
-[[done]]
diff --git a/doc/bugs/signal_weirdness.mdwn b/doc/bugs/signal_weirdness.mdwn
index 1942a924a..5a0096334 100644
--- a/doc/bugs/signal_weirdness.mdwn
+++ b/doc/bugs/signal_weirdness.mdwn
@@ -46,3 +46,5 @@ it assumes they never trap SIGINT on their own.
Which is why the current behavior of not blocking SIGINT was chosen,
as a less bad alternative. Still, I'd like to find a better one.
--[[Joey]]
+
+[[!tag confirmed]]
diff --git a/doc/bugs/smarter_flood_filling.mdwn b/doc/bugs/smarter_flood_filling.mdwn
deleted file mode 100644
index 47b6942c7..000000000
--- a/doc/bugs/smarter_flood_filling.mdwn
+++ /dev/null
@@ -1,31 +0,0 @@
-The assistant performs a flood fill, sending every file to every remote
-that will have it. This is naive, but it's a good way to ensure the file
-gets to every corner of the repo network that it possibly can.
-
-However, this means that locally paired computers will still upload files
-to a transfer repo, even when they're next to each other and that
-is a massive waste of bandwidth.
-
-It occurred to me this morning that there is a simple change that can avoid
-this.
-
-1. Ensure that locally paired computers have a lower cost than network
- transfer remotes. (done)
-2. When queuing uploads, queue transfers to the lowest cost remotes first.
- (already done)
-3. Just before starting a transfer, re-check if the transfer is still wanted.
- (done)
-
-> [[done]]
-
-Now, unnecessary transfers to tranfer repos are avoided if it can send
-the file locally instead.
-
-It doesn't solve it for all network topologies of course. If there
-are three computers paired in a line "A --- B --- C", and all 3 share
-a transfer repo, A will still send to both B and the transfer repo
-even though B can reach C via a faster route.
-
-See also: [[assistant does not always use repo cost info when queueing downloads]]
-
-[[!tag /design/assistant]]
diff --git a/doc/bugs/softlink_mtime.mdwn b/doc/bugs/softlink_mtime.mdwn
deleted file mode 100644
index 1427fc714..000000000
--- a/doc/bugs/softlink_mtime.mdwn
+++ /dev/null
@@ -1,54 +0,0 @@
-When adding files to git annex, softlinks are created with current atime (and ctime, etc). Instead, the atime of the added file should be used and added to the meta-data, restoring it everywhere an annex is cloned to. -- RichiH
-
-Optionally, editing the meta-data should change the times in all annexes.
-
-> Thing is, git does not preserve file timestamps much at all.
-> It's not uncommon for a `git checkout` to or `git update` to
-> mess up timestamps. This is why things like metastore exist (and
-> metastore should work ok with git annexed files too). Trying to
-> make annexed file symlinks have better timestamp handling than regular
-> files in git seems pointless. --[[Joey]]
-
-> > Improving an area where git is (not yet?) good at still makes sense, imo. Photos and the like need absolute timestamps more than source code which is fine with relative timestamps (local builds & updates). Maintaining global timestamps for source code could even cause a lot of unwanted effects. As it is, this issue is the only, but a major, blocker for me before I can start adapting git-annex. As I have three different use cases for it, this is a shame. Unfortunately, I don't speak any Haskell so scratching my own itch isn't do-able (without major effort and not soon, at least). Is there a realistic chance that you will tackle this nonetheless or is this WONTFIX? -- RichiH
-
->>> Not quite WONTFIX. git-annex should at least, when adding new files,
->>> preserve their timestamp in the symlink it creates.
->>>
->>> Since it doesn't have anything to do with maintaining the symlinks
->>> during an update, or a clone, etc, maintaining the permissions of them
->>> is also out of scope, and it's best to just use metastore if you need
->>> it. Otherwise, git-annex would have to reimplement metastore, and is
->>> unlikely to do it better.
-
->>>> OK, thanks for the clarification. Would it be acceptable for you to put the timestamps into the metastore with vanilla git? If such an option existed, everyone would be able to benefit and not just me. -- RichiH
-
->>>>> I've now committed to git changes to make git-annex add make
->>>>> symlinks that reflect the original file's mtime. (It's not possible
->>>>> to set the ctime of a symlink; nor would you want to as messing with
->>>>> ctimes can break backup software ... and atime doesn't much matter.)
->>>>>
->>>>> So all you have to do is make the pre-commit hook call
->>>>> [metastore](http://david.hardeman.nu/software.php). The hook
->>>>> would look like this: ---[[Joey]]
-
- #!/bin/sh
- git annex pre-commit .
- metastore --save
- git add .metadata
-
->>>>>> Thanks a lot. Doing this in a new git-annex repo from the start should at least ensure local consistency and I assume I can simply add a post-pull hook to restore the mtimes on all all other repositories? -- RichiH
-
->>>>>>> This is even better:
-
- #!/bin/sh
- if ! type metastore >/dev/null; then echo "$0: metastore is not installed; exiting"; exit 1; fi
- git annex pre-commit .
- metastore --save
- git add .metadata
-
->>>>>>> -- RichiH
-
->>>>>>>> After getting to actually play with this from different machines with a bare git as central instance for several distributed repos, the metastore trick does not work. The .metadata is causing merge conflicts for every pull. I removed the "done" tag from this issue. -- RichiH
-
->>>>>>>>> softbox sounds _really_ nice. File systems need to preserve mtimes. Oviously, it would be nice if git-annex exposed this to the upper layer instead of relying on this FUSE implementation, or the next, or the other totally cool thing around the corner to implement it again and again.
->>>>>>>>> I talked to the author of metastore; he is aware that the format is merge-unfriendly but never needed merges for himself. He is aware that this is not ideal for something like git. He does not have the time to implement a text storage instead of binary and I lack the skills to do it. If metastore is used, all it would need to do is introduce a new version of the store (it's versioned, apparently) and save metadata in text, one file per line. xattr would need to be ASCII-armoured, the rest could be plain text. I still think storing this directly in git-annex would make the most sense. Introducing a metadata storage file per storage object in .git/annex and using the object file's name as index is impossible because several softlinks might point to one object so it would need to be done per-softlink :/ -- RichiH
diff --git a/doc/bugs/ssh-options_seems_to_be_ignored.mdwn b/doc/bugs/ssh-options_seems_to_be_ignored.mdwn
new file mode 100644
index 000000000..89800891f
--- /dev/null
+++ b/doc/bugs/ssh-options_seems_to_be_ignored.mdwn
@@ -0,0 +1,48 @@
+### Please describe the problem.
+The docs say I can set ssh options via `annex.ssh-options` or `remote.NAME.annex-ssh-options`. I tried, and the setting appears to be completely ignored.
+
+Apologies in advance if I've made a stupid typo.
+
+### What steps will reproduce the problem?
+
+I tried all of these:
+
+ git config --local --replace-all annex.ssh-options "-i ~/.ssh/id_git_rsa"
+ git config --local --replace-all remote.Watt.annex-ssh-options "-i ~/.ssh/id_git_rsa"
+
+`git config -l | grep Watt` confirms it took:
+
+ remote.Watt.url=ssh://watt.home/home/anthony/Music/
+ remote.Watt.fetch=+refs/heads/*:refs/remotes/Watt/*
+ remote.Watt.annex-uuid=e74b57e5-e78c-4f3d-bde6-4803a0c33837
+ remote.Watt.annex-ssh-options=-i ~/.ssh/id_git_rsa
+
+Then I ran `git annex sync Watt`, and was prompted for a password:
+
+ anthony@Forest:~/Music$ git annex sync Watt
+ commit ok
+ pull Watt
+ Password:
+
+Running `ps ww $(pidof ssh)` shows that the `-i` option is missing:
+
+ PID TTY STAT TIME COMMAND
+ 22188 pts/4 S+ 0:00 ssh -S .git/annex/ssh/watt.home -o ControlMaster=auto -o ControlPersist=yes watt.home git-upload-pack '/home/anthony/Music/'
+
+
+### What version of git-annex are you using? On what operating system?
+
+Debian testing 5.20141125
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
+
+> [[fixed|done]], ssh-options is now propigated everywhere that ssh
+> connection caching goes --[[Joey]]
diff --git a/doc/bugs/ssh-options_seems_to_be_ignored/comment_1_bd9062bd492a36f54883fa3635b1c35f._comment b/doc/bugs/ssh-options_seems_to_be_ignored/comment_1_bd9062bd492a36f54883fa3635b1c35f._comment
new file mode 100644
index 000000000..c46c10dc7
--- /dev/null
+++ b/doc/bugs/ssh-options_seems_to_be_ignored/comment_1_bd9062bd492a36f54883fa3635b1c35f._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 1"
+ date="2014-12-19T20:41:58Z"
+ content="""
+The ssh-options are used when git-annex is running git-annex-shell on the remote (eg, when transferring data). However, `git annex sync` does a `git pull` and `git push`, and so it doesn't pass on the ssh-options there.
+"""]]
diff --git a/doc/bugs/ssh-options_seems_to_be_ignored/comment_2_77af42bd6017d9fa9d356014e62d8bcc._comment b/doc/bugs/ssh-options_seems_to_be_ignored/comment_2_77af42bd6017d9fa9d356014e62d8bcc._comment
new file mode 100644
index 000000000..7d4489c05
--- /dev/null
+++ b/doc/bugs/ssh-options_seems_to_be_ignored/comment_2_77af42bd6017d9fa9d356014e62d8bcc._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://openid.stackexchange.com/user/3ee5cf54-f022-4a71-8666-3c2b5ee231dd"
+ nickname="Anthony DeRobertis"
+ subject="comment 2"
+ date="2014-12-19T21:14:30Z"
+ content="""
+It does manage to pass the ControlMaster, etc. options there, so could the ssh-options be added? Or if backwards-compatibility is a worry, another option be added for that? I guess it's possible someone would want different SSH options for bulk data transfer.
+
+It would be nice to be able to pass that `-i` option.
+"""]]
diff --git a/doc/bugs/ssh_connection_caching_broken_on_NTFS.mdwn b/doc/bugs/ssh_connection_caching_broken_on_NTFS.mdwn
deleted file mode 100644
index fc3168e0f..000000000
--- a/doc/bugs/ssh_connection_caching_broken_on_NTFS.mdwn
+++ /dev/null
@@ -1,66 +0,0 @@
-TL;DNR ssh connection caching seems to cause git-annex to not work on NTFS volumes. Setting `annex.sshcaching` to `false` seems to solve the problem.
-
-## What version of git-annex are you using? On what operating system? Please provide any additional information below.
-
-* git-annex version: 3.20120629 on Debian Testing.
-* `the-repo` is located on an NTFS volume on a USB HDD.
-* `the-remote` is on the server `example.com`.
-* `example.com` is running gitolite3 v3.2-19-gb9bbb78, git 1.7.2.5, and git-annex 3.20120629~bpo60+2
-
-
-## What steps will reproduce the problem? What is the expected output? What do you see instead?
-
-Create or clone a repo onto an NTFS volume.
-Make sure `git annex` is initialized.
-Run some regular git operations. These always seem to work.
-Try git-annex operations.
-
-Some operations work despite the error messages:
-
- $ git annex sync
- Control socket connect(/media/NTFSVOL/the-repo/.git/annex/ssh/git@example.com): Connection refused
- Failed to connect to new control master
- Command ssh ["-S","/media/NTFSVOL/the-repo/.git/annex/ssh/git@example.com","-o","ControlMaster=auto","-o","ControlPersist=yes","git@example.com","git-annex-shell 'configlist' '/~/the-repo.git'"] failed; exit code 255
- Control socket connect(/media/NTFSVOL/the-repo/.git/annex/ssh/git@example.com): Connection refused
- Failed to connect to new control master
- Command ssh ["-S","/media/NTFSVOL/the-repo/.git/annex/ssh/git@example.com","-o","ControlMaster=auto","-o","ControlPersist=yes","git@example.com","git-annex-shell 'configlist' '/~/the-repo'"] failed; exit code 255
- commit
- # On branch master
- nothing to commit (working directory clean)
- ok
- pull the-remote
- ok
- pull origin
- ok
-
-Other operations fail:
-
- $ git annex copy -t the-remote the-file.jpg
- Control socket connect(/media/NTFSVOL/the-repo/.git/annex/ssh/git@example.com): Connection refused
- Failed to connect to new control master
- Command ssh ["-S","/media/NTFSVOL/the-repo/.git/annex/ssh/git@example.com","-o","ControlMaster=auto","-o","ControlPersist=yes","git@example.com","git-annex-shell 'configlist' '/~/the-repo.git'"] failed; exit code 255
- Control socket connect(/media/NTFSVOL/the-repo/.git/annex/ssh/git@example.com): Connection refused
- Failed to connect to new control master
- Command ssh ["-S","/media/NTFSVOL/the-repo/.git/annex/ssh/git@example.com","-o","ControlMaster=auto","-o","ControlPersist=yes","git@example.com","git-annex-shell 'configlist' '/~/the-repo'"] failed; exit code 255
- copy the-file.jpg (checking the-remote...) Control socket connect(/media/NTFSVOL/the-repo/.git/annex/ssh/git@example.com): Connection refused
- Failed to connect to new control master
- (unable to check the-remote) failed
- git-annex: copy: 1 failed
-
-Some googling revealed the errors to be stale socket files.
-- [Three SSH Tips](http://shallowsky.com/blog/tags/ssh/)
-- [Improving SSH (OpenSSH) connection speed with shared connections](http://protempore.net/~calvins/howto/ssh-connection-sharing/#section-03)
-
-It appears that SSH connection caching was implemented in response to this wishlist item:
-[wishlist: Prevent repeated password prompts for one command](http://git-annex.branchable.com/todo/wishlist:_Prevent_repeated_password_prompts_for_one_command/)
-
-However ssh connection caching breaks things on NTFS volumes. If I turn off connection caching, it seems to work fine
-
- $ git config annex.sshcaching false
-
-but it would be nifty if git-annex could detect the filesystem type and do The Right Thing.
-
-Thanks for all the work on git-annex -- it's an awesome project!
-
-> [[done]], `git annex init` now probes for fifo support and disables ssh
-> connection caching if it cannot make one. --[[Joey]]
diff --git a/doc/bugs/ssh_connection_caching_broken_on_NTFS/comment_1_54e7e12514f4c109fd57a4eb744b731a._comment b/doc/bugs/ssh_connection_caching_broken_on_NTFS/comment_1_54e7e12514f4c109fd57a4eb744b731a._comment
deleted file mode 100644
index 9219e96d3..000000000
--- a/doc/bugs/ssh_connection_caching_broken_on_NTFS/comment_1_54e7e12514f4c109fd57a4eb744b731a._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-03-16T20:47:02Z"
- content="""
-This failed because ssh connection caching needs fifos,
-which are not supported on NTFS. Also, the linux NTFS code behaves most strangly when asked to make a fifo; creating an empty file instead and then failing with EEXIST.
-
-In more recent versions of git-annex, you can set the `GIT_ANNEX_TMP_DIR` to point somewhere that supports fifos.
-
-Recent versions also try to detect crippled filesystems, and disable use of unix sockets along with symlinks etc.
-However, since ntfs supports symlinks, and it does not probe specially for fifo support, this won't help.
-"""]]
diff --git a/doc/bugs/ssh_over_IPv6.mdwn b/doc/bugs/ssh_over_IPv6.mdwn
new file mode 100644
index 000000000..b5e9f0358
--- /dev/null
+++ b/doc/bugs/ssh_over_IPv6.mdwn
@@ -0,0 +1,29 @@
+### Please describe the problem.
+When i try to sync to my server (path in .git/config is "[fcb8:b10:1cb8:c94:58d0:2522:89f9:c89e]:/home/thomas/git/musik") the url gets messed up by annex and i get the error "git-annex: bad url ssh://[fcb8/~/b10:1cb8:c94:58d0:2522:89f9:c89e]:/home/thomas/git/musik".
+
+### What steps will reproduce the problem?
+1. init git & annex
+2. add files
+3. add a IPv6 address remote
+4. push git branches
+5. git annex sync
+
+### What version of git-annex are you using? On what operating system?
+```
+git-annex version: 5.20140412ubuntu1
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+```
+
+> [[Fixed|done]] by adding support for ipv6 addresses when git-annex
+> converts a git remote loction into an url. BTW, the
+> simple workaround is to give it a valid url from the beginning
+> `ssh://[fcb8:b10:1cb8:c94:58d0:2522:89f9:c89e]/home/thomas/git/musik"`
+>
+> As to any problems using an ipv6 remote once it's set up, I've used them
+> with no problems.
+> --[[Joey]]
diff --git a/doc/bugs/ssh_over_IPv6/comment_1_0287f73c44645a1f854ecfe4ddddb258._comment b/doc/bugs/ssh_over_IPv6/comment_1_0287f73c44645a1f854ecfe4ddddb258._comment
new file mode 100644
index 000000000..13c9794e4
--- /dev/null
+++ b/doc/bugs/ssh_over_IPv6/comment_1_0287f73c44645a1f854ecfe4ddddb258._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
+ nickname="Justin"
+ subject="comment 1"
+ date="2014-08-28T20:46:29Z"
+ content="""
+
+Try using ~/.ssh/config as a workaround
+
+ Host myserver
+ Hostname fcb8:b10:1cb8:c94:58d0:2522:89f9:c89e
+
+then just tell git-annex to use myserver
+
+"""]]
diff --git a/doc/bugs/ssh_over_IPv6/comment_2_cfa63d226ae411551a728af5ab043491._comment b/doc/bugs/ssh_over_IPv6/comment_2_cfa63d226ae411551a728af5ab043491._comment
new file mode 100644
index 000000000..032e100ad
--- /dev/null
+++ b/doc/bugs/ssh_over_IPv6/comment_2_cfa63d226ae411551a728af5ab043491._comment
@@ -0,0 +1,29 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlog_5wIICaMcrKTexlFNA6IO6UTp323aE"
+ nickname="Torkaly"
+ subject="comment 2"
+ date="2014-09-01T11:01:30Z"
+ content="""
+thank you. I workaround this by using the DNS hostname instead the IPv6 address directly. But this is not a nice solution, like any workaround. But now i have problems with `git annex get` over IPv6-only:
+
+```
+get ***.mp3 (not available)
+ Try making some of these repositories available:
+ 5636aefa-c509-4ea0-bebe-f5b96d8eb15a -- hserver
+failed
+<snip>
+```
+
+but i can ping it:
+```
+thomas@alus:~/Musik$ ping6 hserver.h.b128.net
+PING hserver.h.b128.net(fcb8:b10:1cb8:c94:58d0:2522:89f9:c89e) 56 data bytes
+64 bytes from fcb8:b10:1cb8:c94:58d0:2522:89f9:c89e: icmp_seq=1 ttl=42 time=453 ms
+64 bytes from fcb8:b10:1cb8:c94:58d0:2522:89f9:c89e: icmp_seq=2 ttl=42 time=441 ms
+64 bytes from fcb8:b10:1cb8:c94:58d0:2522:89f9:c89e: icmp_seq=3 ttl=42 time=425 ms
+64 bytes from fcb8:b10:1cb8:c94:58d0:2522:89f9:c89e: icmp_seq=5 ttl=42 time=413 ms
+```
+(the high pings are caused by a download from an other source. Also i have no problems with rsync over IPv6)
+
+PS: the markdown for code blocks is not working too :)
+"""]]
diff --git a/doc/bugs/ssh_portnum_bugs.mdwn b/doc/bugs/ssh_portnum_bugs.mdwn
new file mode 100644
index 000000000..4f24a9945
--- /dev/null
+++ b/doc/bugs/ssh_portnum_bugs.mdwn
@@ -0,0 +1,15 @@
+### Please describe the problem.
+
+Lots of issues setting up assistant using SSH running on non-standard ports. Tested local pairing (which did seem to show other computer, but then wouldn't sync) and Remote Server.
+
+### What steps will reproduce the problem?
+
+Change Port 22 in /etc/ssh/sshd_config to Port 9999, restart ssh on both computers. With a clean local .ssh/config and directory, try to set up local pairing or remote server. It appears to work, especially if XMPP is working properly with remote server, but then some operations fail. (Iirc, metadata does sync but not data.) Ultimately, I had to go back to using Port 22 and using denyhosts/fail2ban (which occasionally erroneously ban my IP).
+
+(Although it's probably not relevant to the bug report, it could be argued that this is security through obscurity. There is some truth in this, but scanning an entire machine is 65,535 times slower than scanning just port 22, so it introduces a real cost to bulk scanning. I almost never, ever have attacks on random ports, whereas I have dozens per day on each server on port 22, and often thousands of attacks.)
+
+### What version of git-annex are you using? On what operating system?
+
+When I was experiencing this issue, I was running the default on Jessie/Wheezy. Now I'm running the latest (via auto-update and distributed binary) but don't know if this is still an issue with latest versions (I switched to 22 as a workaround).
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/ssh_portnum_bugs/comment_1_2026785c06e99b55158cd65c221eb598._comment b/doc/bugs/ssh_portnum_bugs/comment_1_2026785c06e99b55158cd65c221eb598._comment
new file mode 100644
index 000000000..35792e2ce
--- /dev/null
+++ b/doc/bugs/ssh_portnum_bugs/comment_1_2026785c06e99b55158cd65c221eb598._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-06-05T16:37:27Z"
+ content="""
+I'm going to assume that the \"jessie/wheezy\" is a typo, since those are two completely different versions. It sounds to me like you were using the git-annex 3.x distributed with debian stable.
+
+I cannot reproduce ssh port issues with the current release, and there have been ssh port fixes in the over 2 years since the version in Debian stable.
+"""]]
diff --git a/doc/bugs/ssh_portnum_bugs/comment_2_76551dfcd29b54814809c434d7cb64af._comment b/doc/bugs/ssh_portnum_bugs/comment_2_76551dfcd29b54814809c434d7cb64af._comment
new file mode 100644
index 000000000..0a88c37bb
--- /dev/null
+++ b/doc/bugs/ssh_portnum_bugs/comment_2_76551dfcd29b54814809c434d7cb64af._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="jamieson"
+ ip="71.11.173.17"
+ subject="comment 2"
+ date="2014-06-05T16:50:20Z"
+ content="""
+Jessie on one machine, Wheezy on the other; exactly, that is the version I was using. Git Annex is awesome. Thanks!!
+"""]]
diff --git a/doc/bugs/ssh_portnum_bugs/comment_3_ab49a0e307a29c7c20627bbb3b10ab1d._comment b/doc/bugs/ssh_portnum_bugs/comment_3_ab49a0e307a29c7c20627bbb3b10ab1d._comment
new file mode 100644
index 000000000..99dad8dcd
--- /dev/null
+++ b/doc/bugs/ssh_portnum_bugs/comment_3_ab49a0e307a29c7c20627bbb3b10ab1d._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 3"
+ date="2014-06-05T16:50:30Z"
+ content="""
+I did notice a problem where the same ssh config stanza was used if the webapp set up a repository on a host first using one port, and later using a different port. I've fixed that.
+"""]]
diff --git a/doc/bugs/ssh_portnum_bugs/comment_4_e0d96a43208453dc29373d0e045751e3._comment b/doc/bugs/ssh_portnum_bugs/comment_4_e0d96a43208453dc29373d0e045751e3._comment
new file mode 100644
index 000000000..dd20bf76d
--- /dev/null
+++ b/doc/bugs/ssh_portnum_bugs/comment_4_e0d96a43208453dc29373d0e045751e3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 4"
+ date="2014-06-05T16:51:42Z"
+ content="""
+Did the failure occur on the machine running jessie, or on the machine running wheezy?
+"""]]
diff --git a/doc/bugs/ssh_portnum_bugs/comment_5_9ed44cdb79224dac6b000983d77d53f3._comment b/doc/bugs/ssh_portnum_bugs/comment_5_9ed44cdb79224dac6b000983d77d53f3._comment
new file mode 100644
index 000000000..9f57c64df
--- /dev/null
+++ b/doc/bugs/ssh_portnum_bugs/comment_5_9ed44cdb79224dac6b000983d77d53f3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="jamieson"
+ ip="71.11.173.17"
+ subject="comment 5"
+ date="2014-06-05T16:56:33Z"
+ content="""
+I'm not sure. I'll do some more testing!
+"""]]
diff --git a/doc/bugs/submodule_path_problem.mdwn b/doc/bugs/submodule_path_problem.mdwn
deleted file mode 100644
index 664e246bc..000000000
--- a/doc/bugs/submodule_path_problem.mdwn
+++ /dev/null
@@ -1,56 +0,0 @@
-If a submodule isn't toplevel, git-annex breaks
-
-**What steps will reproduce the problem?**
-
-Make two non-empty repositories:
-
- mkdir submod
- cd submod
- git init
- touch README && git add README
- git commit -a -m "first import of submodule"
- cd ..
-
- mkdir test
- cd test
- git init
- touch README && git add README
- git commit -a -m "first import of master"
-
-Add first repository as a non-toplevel submodule:
-
- git submodule add ../submod lib/submod
-
-Setup git-annex for the submodule inside the other repository:
-
- cd lib/submod
- git annex init
-
-**What is the expected output? What do you see instead?**
-
-Expected:
-
- init ok
- (Recording state in git...)
-
-Got:
-
- init fatal: Could not switch to '../../../../lib': No such file or directory
- git-annex: git config [Param "annex.uuid",Param "55D974D1-73E8-489E-B454-03D164664C82"] failed
-
-
-**What version of git-annex are you using? On what operating system?**
-
-3.20121011 compiled from git on Mac OS X 10.8
-
-
-**Please provide any additional information below.**
-
-* git-annex read the path from the "worktree" variable in the git config.
-* The git config for a submodule is storen in the main repository, e.g. "../../.git/modules/lib/submod/config"
-* The path in that config is relative to the config file: "worktree = ../../../../lib/submod"
-* Git-annex expect the path to be relative to the current directory, which is why it fails.
-
-> Impressive analysis, thanks. I've fixed handling of relative
-> core.worktree. [[done]] --[[Joey]]
-
diff --git a/doc/bugs/submodule_path_problem/comment_1_69aec9207d2e9da4bc042d3f4963d80e._comment b/doc/bugs/submodule_path_problem/comment_1_69aec9207d2e9da4bc042d3f4963d80e._comment
deleted file mode 100644
index 1ff33e36a..000000000
--- a/doc/bugs/submodule_path_problem/comment_1_69aec9207d2e9da4bc042d3f4963d80e._comment
+++ /dev/null
@@ -1,48 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkywesyg6tKBZcmxJ2EMUO89DZL1LZ7Sng"
- nickname="Peter"
- subject="comment 1"
- date="2012-10-16T12:02:27Z"
- content="""
-Not quite there yet.
-
-git-annex init works now, but there is still a problem with paths:
-
-Using the same setup as previously, git-annex init now works:
-
- cd lib/submod
- git annex init
-
-But adding a file failes:
-
- git annex add big-file
-
-Output:
-
- add big-file (checksum...)
- git-annex: big-file: getFileStatus: does not exist (No such file or directory)
- failed
- (Recording state in git...)
- git-annex: add: 1 failed
-
-Debug:
-
-
-[2012-10-16 13:59:26 CEST] read: git [\"--git-dir=../../.git/modules/lib/submod\",\"--work-tree=/Users/ptx/tmp/test-annex/test/lib/submod\",\"ls-files\",\"--others\",\"--exclude-standard\",\"-z\",\"--\",\"big-file\"]
-[2012-10-16 13:59:26 CEST] read: git [\"--git-dir=../../.git/modules/lib/submod\",\"--work-tree=/Users/ptx/tmp/test-annex/test/lib/submod\",\"diff\",\"--name-only\",\"--diff-filter=T\",\"-z\",\"--\",\"big-file\"]
-add big-file [2012-10-16 13:59:26 CEST] chat: git [\"--git-dir=../../.git/modules/lib/submod\",\"--work-tree=/Users/ptx/tmp/test-annex/test/lib/submod\",\"check-attr\",\"-z\",\"--stdin\",\"annex.backend\",\"annex.numcopies\",\"--\"]
-(checksum...) [2012-10-16 13:59:26 CEST] chat: git [\"--git-dir=../../.git/modules/lib/submod\",\"--work-tree=/Users/ptx/tmp/test-annex/test/lib/submod\",\"cat-file\",\"--batch\"]
-
-git-annex: big-file: getFileStatus: does not exist (No such file or directory)
-failed
-
- [2012-10-16 13:59:26 CEST] chat: git [\"--git-dir=../../.git/modules/lib/submod\",\"--work-tree=/Users/ptx/tmp/test-annex/test/lib/submod\",\"hash-object\",\"-w\",\"--stdin-paths\"]
- [2012-10-16 13:59:26 CEST] feed: git [\"--git-dir=../../.git/modules/lib/submod\",\"--work-tree=/Users/ptx/tmp/test-annex/test/lib/submod\",\"update-index\",\"-z\",\"--index-info\"]
- [2012-10-16 13:59:26 CEST] read: git [\"--git-dir=../../.git/modules/lib/submod\",\"--work-tree=/Users/ptx/tmp/test-annex/test/lib/submod\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
- (Recording state in git...)
- [2012-10-16 13:59:26 CEST] read: git [\"--git-dir=../../.git/modules/lib/submod\",\"--work-tree=/Users/ptx/tmp/test-annex/test/lib/submod\",\"write-tree\"]
- [2012-10-16 13:59:26 CEST] chat: git [\"--git-dir=../../.git/modules/lib/submod\",\"--work-tree=/Users/ptx/tmp/test-annex/test/lib/submod\",\"commit-tree\",\"ed2f98d7105deed7482b3dde43426c177b360131\",\"-p\",\"refs/heads/git-annex\"]
- [2012-10-16 13:59:26 CEST] call: git [\"--git-dir=../../.git/modules/lib/submod\",\"--work-tree=/Users/ptx/tmp/test-annex/test/lib/submod\",\"update-ref\",\"refs/heads/git-annex\",\"df49e7bef8409dff450ce549c40f4ab429ea3144\"]
- [2012-10-16 13:59:26 CEST] chat: git [\"--git-dir=../../.git/modules/lib/submod\",\"--work-tree=/Users/ptx/tmp/test-annex/test/lib/submod\",\"cat-file\",\"--batch\"]
- git-annex: add: 1 failed
-"""]]
diff --git a/doc/bugs/submodule_path_problem/comment_2_53d9eb28cb70b51637470175a80ddf35._comment b/doc/bugs/submodule_path_problem/comment_2_53d9eb28cb70b51637470175a80ddf35._comment
deleted file mode 100644
index a60a096e8..000000000
--- a/doc/bugs/submodule_path_problem/comment_2_53d9eb28cb70b51637470175a80ddf35._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="2001:4978:f:21a::2"
- subject="comment 2"
- date="2012-10-16T20:28:03Z"
- content="""
-Cute, it was making the wrong symlink and then noticed it was broken and reverted the add. At least my error unwind works! Anyway, fixed this too.
-"""]]
diff --git a/doc/bugs/submodule_path_problem/comment_3_aa5e0f99000a5b4988bccbb2ca28353b._comment b/doc/bugs/submodule_path_problem/comment_3_aa5e0f99000a5b4988bccbb2ca28353b._comment
deleted file mode 100644
index 3f446a777..000000000
--- a/doc/bugs/submodule_path_problem/comment_3_aa5e0f99000a5b4988bccbb2ca28353b._comment
+++ /dev/null
@@ -1,20 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkywesyg6tKBZcmxJ2EMUO89DZL1LZ7Sng"
- nickname="Peter"
- subject="comment 3"
- date="2012-10-17T11:41:54Z"
- content="""
-One step closer, but still not perfect:
-
- git annex add big-file
- > add big-file (checksum...) ok
- > (Recording state in git...)
-
- git commit -a -m \"Added file\"
- > git-annex: /Users/ptx/tmp/test-annex/test/.git/lib/submod: changeWorkingDirectory: does not exist (No such file or directory)
-
-So when applying the post-hook, git-annex is getting the wrong directory.
-
-`test/.git/lib/submod` should be `test/.git/modules/lib/submod`
-
-"""]]
diff --git a/doc/bugs/submodule_path_problem/comment_4_ab1508a5a04e2106aad5e7985775a6fa._comment b/doc/bugs/submodule_path_problem/comment_4_ab1508a5a04e2106aad5e7985775a6fa._comment
deleted file mode 100644
index c46eedf8e..000000000
--- a/doc/bugs/submodule_path_problem/comment_4_ab1508a5a04e2106aad5e7985775a6fa._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="2001:4978:f:21a::2"
- subject="comment 4"
- date="2012-10-17T18:29:24Z"
- content="""
-Ok, fixed that.
-"""]]
diff --git a/doc/bugs/submodule_path_problem/comment_5_8c7539d1c11b81f5d46aa8e1c61745ae._comment b/doc/bugs/submodule_path_problem/comment_5_8c7539d1c11b81f5d46aa8e1c61745ae._comment
deleted file mode 100644
index 088517c5b..000000000
--- a/doc/bugs/submodule_path_problem/comment_5_8c7539d1c11b81f5d46aa8e1c61745ae._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkywesyg6tKBZcmxJ2EMUO89DZL1LZ7Sng"
- nickname="Peter"
- subject="comment 5"
- date="2012-11-08T10:32:26Z"
- content="""
-Great!
-
-Everything is working now, unfortunately the package in cabal and the prebuild linux packages are one day too old.
-
-Are you going to release a newer build soon?
-
-/ptx
-"""]]
diff --git a/doc/bugs/submodule_path_problem/comment_6_cacc91afcb1739dfca3a60590bb70356._comment b/doc/bugs/submodule_path_problem/comment_6_cacc91afcb1739dfca3a60590bb70356._comment
deleted file mode 100644
index 1cae4ea98..000000000
--- a/doc/bugs/submodule_path_problem/comment_6_cacc91afcb1739dfca3a60590bb70356._comment
+++ /dev/null
@@ -1,67 +0,0 @@
-[[!comment format=mdwn
- username="konubinix"
- ip="82.243.233.186"
- subject="Git annexed files symlink are wrong when submodule is not in the same path "
- date="2013-08-08T06:36:10Z"
- content="""
-Hi,
-
-First, thanks for the great tool that is git-annex!
-
-I have a problem with submodules when the git repository is not a submodule everywhere.
-
- $ git-annex version
- git-annex version: 4.20130802
- ...
-
- $ git --version
- git version 1.8.3.2
-
-I try to have a repository has a submodule of another.
-
- # creating the master repository
- mkdir annex_master
- cd annex_master/
- git init
- # hack: adding a file to create the master branch
- touch start
- git add start
- git commit -m \"start\"
- cd ..
- # create another repository
- mkdir annex_sub
- cd annex_sub/
- git init
- # hack: adding a file to create the master branch
- touch start
- git add start
- git commit -m \"start\"
- # it is a annexed repository
- git annex init sub
- # add the other repository as submodule of the master one
- cd ../annex_master/
- git submodule add ../annex_sub/ module
- cd module/
- git annex init sub_module
- git annex sync origin
- # add an annexed file
- echo test > test
- git annex add
- git annex sync
- # go back to the origin repository
- cd ../../annex_sub/
- git annex sync
- ls -l
-
-This returns
-test -> ../.git/modules/module/annex/objects/w8/pv/SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2/SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2
-
-Actually, the file committed is correct. But the fact it points to '../.git/modules/module/...' makes the link work only if the repository is also a submodule and if this submodule is also located in the modules folder in the parent git repository.
-
-I would expect, since this repository is not an annex:
-test -> .git/annex/objects/w8/pv/SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2/SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2
-
-Do you think that is possible?
-
-Thanks.
-"""]]
diff --git a/doc/bugs/subtle_build_issue_on_OSX_10.7_and_Haskell_Platform___40__if_you_have_the_32bit_version_installed__41__.mdwn b/doc/bugs/subtle_build_issue_on_OSX_10.7_and_Haskell_Platform___40__if_you_have_the_32bit_version_installed__41__.mdwn
deleted file mode 100644
index 3a50256db..000000000
--- a/doc/bugs/subtle_build_issue_on_OSX_10.7_and_Haskell_Platform___40__if_you_have_the_32bit_version_installed__41__.mdwn
+++ /dev/null
@@ -1,50 +0,0 @@
-I've just come across a subtle build issue (as haskell-platform just
-got updated, I thought I might give it a try) The scenario is
-
-* OSX 10.7 (everything is up to date with xcode etc... the usual)
-* The 32bit version of Haskell Platform 2012.2
-
-The issue is when libdiskfree.c is compiled and linked to git-annex,
-OSX defaults to a 64bit binary, thus...
-
- Linking git-annex ...
- ld: warning: ignoring file Utility/libdiskfree.o, file was built for unsupported file format which is not the architecture being linked (i386)
- Undefined symbols for architecture i386:
- "_diskfree", referenced from:
- _UtilityziDiskFree_zdwa_info in DiskFree.o
- ld: symbol(s) not found for architecture i386
- collect2: ld returned 1 exit status
- make: *** [git-annex] Error 1
-
-You can either compile up the c library in a 32bit mode if you have the 32bit
-version of Haskell Platform installed as in the following example
-
- laplace:git-annex jtang$ cc -m32 -c -o Utility/libdiskfree.o Utility/libdiskfree.c
- Utility/libdiskfree.c: In function ‘diskfree’:
- Utility/libdiskfree.c:61: warning: ‘statfs64’ is deprecated (declared at /usr/include/sys/mount.h:379)
- laplace:git-annex jtang$ make
- ghc -O2 -Wall -ignore-package monads-fd -outputdir tmp -IUtility -DWITH_S3 --make git-annex Utility/libdiskfree.o
-
- Utility/Touch.hs:1:12:
- Warning: -#include and INCLUDE pragmas are deprecated: They no longer have any effect
-
- Utility/Touch.hs:2:12:
- Warning: -#include and INCLUDE pragmas are deprecated: They no longer have any effect
-
- Utility/Touch.hs:3:12:
- Warning: -#include and INCLUDE pragmas are deprecated: They no longer have any effect
-
- Utility/Touch.hs:4:12:
- Warning: -#include and INCLUDE pragmas are deprecated: They no longer have any effect
- Linking git-annex ...
-
-Or else just install the 64bit haskell platform. I'm not too sure where
-you would but the intelligence to detect 32 or 64 outputs from the
-different compilers. I suspect checking what ghc outputs then putting in
-the appropriate -m32 or -m64 for the c compiler is the right thing to do.
-Or just telling users to use the 64bit version of the haskell platform?
-It may also be possible to get osx's c compiler to output a universal binary
-to give you everything, but that be going down the _being too platform
-specific route_.
-
-> [[done]], it'll detect this and force -m32. --[[Joey]]
diff --git a/doc/bugs/subtle_build_issue_on_OSX_10.7_and_Haskell_Platform___40__if_you_have_the_32bit_version_installed__41__/comment_1_6208e70a21a048d5423926d16e32d421._comment b/doc/bugs/subtle_build_issue_on_OSX_10.7_and_Haskell_Platform___40__if_you_have_the_32bit_version_installed__41__/comment_1_6208e70a21a048d5423926d16e32d421._comment
deleted file mode 100644
index 11d135251..000000000
--- a/doc/bugs/subtle_build_issue_on_OSX_10.7_and_Haskell_Platform___40__if_you_have_the_32bit_version_installed__41__/comment_1_6208e70a21a048d5423926d16e32d421._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- subject="comment 1"
- date="2012-06-04T20:02:23Z"
- content="""
-Seems you built it using `make` .. could you try instead building with cabal, ie run `cabal install git-annex` or `cabal build` in the source tree. I think cabal will probably do the right thing.
-
-I could fix the Makefile, I suppose. What does this say: `ghc -e 'print System.Info.arch'
-"""]]
diff --git a/doc/bugs/subtle_build_issue_on_OSX_10.7_and_Haskell_Platform___40__if_you_have_the_32bit_version_installed__41__/comment_2_8765b6190e79251637bb59ba28f245c1._comment b/doc/bugs/subtle_build_issue_on_OSX_10.7_and_Haskell_Platform___40__if_you_have_the_32bit_version_installed__41__/comment_2_8765b6190e79251637bb59ba28f245c1._comment
deleted file mode 100644
index cad802a88..000000000
--- a/doc/bugs/subtle_build_issue_on_OSX_10.7_and_Haskell_Platform___40__if_you_have_the_32bit_version_installed__41__/comment_2_8765b6190e79251637bb59ba28f245c1._comment
+++ /dev/null
@@ -1,21 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 2"
- date="2012-06-05T14:07:26Z"
- content="""
-FYI, (the follow is on OSX 10.7 on two different machines)
-
-On my 64bit install of haskell platform...
-
- laplace:~ jtang$ ghc -e 'print System.Info.arch'
- \"x86_64\"
-
-On my 32bit install of haskell platform...
-
- x00:git-annex jtang$ ghc -e 'print System.Info.arch'
- \"i386\"
-
-Running _cabal build_ or _cabal install git-annex_ as you suggest with the 32bit install does do the right thing.
-
-"""]]
diff --git a/doc/bugs/sync_--content_tries_to_copy_content_to_metadata_only_repos.mdwn b/doc/bugs/sync_--content_tries_to_copy_content_to_metadata_only_repos.mdwn
deleted file mode 100644
index 4714eac7a..000000000
--- a/doc/bugs/sync_--content_tries_to_copy_content_to_metadata_only_repos.mdwn
+++ /dev/null
@@ -1,34 +0,0 @@
-### Please describe the problem.
-
-
-### What steps will reproduce the problem?
-
-git annex sync --content
-
-
-### What version of git-annex are you using? On what operating system?
-
-Mac OSX Maverics
-
-git-annex version: 5.20140127
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
-
-### Please provide any additional information below.
-
-[[!format sh """
-copy Books/Paperless - Agile Bits Edition/Paperless Video/5-4 PDFpen for iPad.m4v (to origin...)
-FATAL: suspicious characters loitering about 'git-annex-shell 'recvkey' '/~/users/akraut/annex-home' 'SHA256E-s98445427--5fb5fd6e082eec4a805261764ef982aa8f12d76e07e86a6abb05e7675762ac49.m4v' '--' 'remoteuuid=03ac7aa9-d14c-4b60-adae-02e4a5ec0fa8' 'direct=' 'associatedfile=Books/Paperless - Agile Bits Edition/Paperless Video/5-4 PDFpen for iPad.m4v' '--' dummy rsync --server -v --inplace .'
-rsync: connection unexpectedly closed (0 bytes received so far) [sender]
-rsync error: the --max-delete limit stopped deletions (code 25) at /SourceCache/rsync/rsync-42/rsync/io.c(452) [sender=2.6.9]
-
- rsync failed -- run git annex again to resume file transfer
-failed
-"""]]
-
-> From the error message, I can see that your origin repository
-> has an annex.uuid set (to "03ac7aa9-d14c-4b60-adae-02e4a5ec0fa8").
-> So, I assume that, if you don't want git-annex sync to use it,
-> you must have remote.origin.annex-ignore set to true. So, I think I fixed
-> this a day or two ago when I made sync --content honor the annex-ignore
-> setting. [[done]] --[[Joey]]
diff --git a/doc/bugs/sync_command_tries_to_connect_new_remote_despite_not_being_asked_to.mdwn b/doc/bugs/sync_command_tries_to_connect_new_remote_despite_not_being_asked_to.mdwn
deleted file mode 100644
index 34b52213c..000000000
--- a/doc/bugs/sync_command_tries_to_connect_new_remote_despite_not_being_asked_to.mdwn
+++ /dev/null
@@ -1,46 +0,0 @@
-### Please describe the problem.
-When adding a new remote which is not accessible (hence still unsynced) git annex tries to connect to it at each remote operation, even if a specific other remote is given for the command.
-
-### What steps will reproduce the problem?
-<pre>
-git init 1
-
-cd 1
-git annex init
-touch file
-git annex add file
-git commit -m"a file"
-
-git clone . ../2
-
-git remote add 2 ../2
-git annex sync 2
-</pre>
-At this point annex syncs with remote "2" and nothing else
-
-But if adding a (currently) unaccessible remote
-<pre>
-git remote add bad nobody@offline.local:nothing
-git annex sync 2
-</pre>
-gives
-<pre>
-ssh: Could not resolve hostname offline.local: Name or service not known
-ssh: Could not resolve hostname offline.local: Name or service not known
-fatal: Could not read from remote repository.
-
-Please make sure you have the correct access rights
-and the repository exists.
-commit ok
-pull 2
-ok
-push 2
-Everything up-to-date
-ok
-</pre>
-so annex tries to sync with the "bad" remote, even though the command tells it to only sync from "2". I would expect it to only sync with remote "2" in this case.
-### What version of git-annex are you using? On what operating system?
-git-annex version: 5.20131221
-Debian Sid
-
-> Behaving as intended. [[done]] --[[Joey]]
diff --git a/doc/bugs/sync_command_tries_to_connect_new_remote_despite_not_being_asked_to/comment_1_dcd52b57192e83fe365f21dc12461008._comment b/doc/bugs/sync_command_tries_to_connect_new_remote_despite_not_being_asked_to/comment_1_dcd52b57192e83fe365f21dc12461008._comment
deleted file mode 100644
index 57b70b47c..000000000
--- a/doc/bugs/sync_command_tries_to_connect_new_remote_despite_not_being_asked_to/comment_1_dcd52b57192e83fe365f21dc12461008._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.227"
- subject="comment 1"
- date="2013-12-27T18:03:11Z"
- content="""
-git-annex needs to know the uuid of a remote in order to operate. So at startup, if there is a remote that does not have an annex.uuid set, nearly any git-annex command will try to connect the the remote and query it for its uuid.
-
-To prevent this being done for a remote, `git config remote.bad.annex-ignore true`
-"""]]
diff --git a/doc/bugs/sync_does_not_commit_with_alwasycommit___61___false.mdwn b/doc/bugs/sync_does_not_commit_with_alwasycommit___61___false.mdwn
new file mode 100644
index 000000000..9b7ec7cf5
--- /dev/null
+++ b/doc/bugs/sync_does_not_commit_with_alwasycommit___61___false.mdwn
@@ -0,0 +1,90 @@
+### Please describe the problem.
+
+The documentation of `git annex sync` states
+
+> The sync process involves first committing all local changes, then fetching and merging […]
+> You can use standard git commands to do each of those steps by hand, or if you
+> don't want to worry about the details, you can use sync.
+
+The documentation of `alwasycommit` states
+
+> By default, git-annex automatically commits data to the git-annex branch after each
+> command is run. To disable these commits, set to false. Then data will only be
+> committed when running `git annex merge` (or by automatic merges) or `git annex sync`.
+
+In fact, however, `git annex sync` will not commit or will not commit some pieces of information when `alwasycommit` is false. This leads to various problems, the first of which is that cloned repositories do not have information about the other remotes.
+
+It is hard to work around this problem because `git commit` cannot be used in direct mode.
+
+This problem does not show up when using local, non over-the-network, remotes.
+
+### What steps will reproduce the problem?
+
+The following script (available at <https://gist.github.com/gioele/5ffeff8988a535164e5b>) will reproduce this problem. If you do not have SSH running on localhost, you can change the `h` variable to point to another host.
+
+ #!/bin/sh -x
+
+ set -e ; set -u
+ export LC_ALL=C
+
+ h=${h:-localhost}
+ dr="/tmp/annex"
+
+ chmod a+rwx -R pc1 pc2 || true
+ rm -Rf pc1 pc2
+
+ # create central git repo
+ ssh $h "chmod a+rwx -R ${dr}/Docs.git" || true
+ ssh $h "rm -Rf ${dr}/Docs.git"
+ ssh $h "mkdir -p ${dr}/Docs.git"
+ ssh $h "cd ${dr}/Docs.git ; git init --bare"
+
+ d=$(pwd)
+
+ # populate repo in PC1
+ mkdir -p pc1/Docs
+ cd pc1/Docs
+ echo AAA > fileA
+ echo BBB > fileB
+
+ git init
+ git config annex.alwayscommit false # change to true to solve this problem
+
+ git remote add origin $h:$dr/Docs.git
+ git fetch --all
+
+ # simulate a host without git-annex
+ git config remote.origin.annex-ignore true
+
+ git annex init "pc1"
+ git annex info
+
+ git annex direct
+ git annex sync origin
+
+ git annex add .
+ git annex sync
+
+ # re-create repo on PC2
+ cd $d
+ mkdir -p pc2
+ cd pc2
+ git clone $h:$dr/Docs.git
+ cd Docs
+
+ git config remote.origin.annex-ignore true
+
+ git annex init "pc2"
+ git annex direct
+ git annex info
+
+ # git annex info shows only pc2, shouldn't pc1 be there as well?
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex version: 5.20140708-g8c9c55c on Ubuntu 12.04.4
+
+> I have improved the documentation to not imply that sync/merge are a
+> special case. They honor the autocommit settings more or less
+> intentionally, and to get a commit to be made, just pass -c
+> autocommit=true when running them. [[done]] --[[Joey]]
diff --git a/doc/bugs/sync_does_not_commit_with_alwasycommit___61___false/comment_1_e6dc7fa1b0a131bb7533f8407e1b5510._comment b/doc/bugs/sync_does_not_commit_with_alwasycommit___61___false/comment_1_e6dc7fa1b0a131bb7533f8407e1b5510._comment
new file mode 100644
index 000000000..ee9957648
--- /dev/null
+++ b/doc/bugs/sync_does_not_commit_with_alwasycommit___61___false/comment_1_e6dc7fa1b0a131bb7533f8407e1b5510._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://svario.it/gioele"
+ nickname="gioele"
+ subject="comment 1"
+ date="2014-07-29T14:25:19Z"
+ content="""
+For the records, the solution Joey suggested works but the correct option to pass to `sync` is `-c annex.alwayscommit=true`.
+"""]]
diff --git a/doc/bugs/tahoe_remote_has_no_repair.mdwn b/doc/bugs/tahoe_remote_has_no_repair.mdwn
new file mode 100644
index 000000000..1f34767a8
--- /dev/null
+++ b/doc/bugs/tahoe_remote_has_no_repair.mdwn
@@ -0,0 +1,27 @@
+### Please describe the problem.
+
+The tahoe-lafs remote has no built-in way to perform the repair operation.
+This results to data loss if expiration is enabled on the Tahoe grid.
+
+For the current tahoe-lafs release (1.10.0), the only way storage space is freed
+is via garbage collection. Garbage collection removes shares whose lease has expired.
+Data loss will occur if leases are not periodically renewed via
+"tahoe repair --add-lease WRITECAP".
+
+The current implementation of the Tahoe remote in git-annex does not offer a way to
+run lease renewal, and cannot be used on grids where GC is enabled. (GC is not enabled
+in the default configuration, but on private grids it is a sensible option.)
+
+One way renewal could be made easier to do is to add the uploaded files to a directory
+in Tahoe, so that the leases could be easily updated if the directory writecap is known,
+without needing to go through the full list of writecaps for each file stored.
+
+### What steps will reproduce the problem?
+
+1. Use tahoe remote on a tahoe grid where GC is enabled.
+
+2. After GC expiration period, data loss ensues.
+
+### What version of git-annex are you using? On what operating system?
+
+Seems to affect current git master (as of 2014-08-24).
diff --git a/doc/bugs/test_suite_failure_on_samba_mount.mdwn b/doc/bugs/test_suite_failure_on_samba_mount.mdwn
deleted file mode 100644
index ab3990c32..000000000
--- a/doc/bugs/test_suite_failure_on_samba_mount.mdwn
+++ /dev/null
@@ -1,278 +0,0 @@
-### Please describe the problem.
-
-`git annex test` show multiple failures on a samba mounted partition.
-
-### What steps will reproduce the problem?
-
-just run `git annex test` (in the mounted dir)
-
-### What version of git-annex are you using? On what operating system?
-
-4.20130521, built for architecture `armhf` by the Raspbian maintainers ("jessie" suite at the time of writing)
-
-### Please provide any additional information below.
-
-Here are the last lines of `git annex test` output; AFAICT they are the only lines mentioning failures. Before them the output mentions `+++ OK, passed 100 tests.`.
-
-[[!format text """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-Cases: 1 Tried: 0 Errors: 0 Failures: 0----------------------------------------------------------------------
-Now, some broader checks ...
- (Do not be alarmed by odd output here; it's normal.
- wait for the last line to see how it went.)
-----------------------------------------------------------------------
-init
- Detected a crippled filesystem.
- Enabling direct mode.
- Detected a filesystem without fifo support.
- Disabling ssh connection caching.
- Cases: 1 Tried: 1 Errors: 0 Failures: 0
-Cases: 3 Tried: 0 Errors: 0 Failures: 0Cases: 3 Tried: 1 Errors: 0 Failures: 0----------------------------------------------------------------------
-add
- Detected a crippled filesystem.
- Enabling direct mode.
- Detected a filesystem without fifo support.
- Disabling ssh connection caching.
-Cases: 3 Tried: 2 Errors: 0 Failures: 0 Detected a crippled filesystem.
- Enabling direct mode.
- Detected a filesystem without fifo support.
- Disabling ssh connection caching.
-error: unable to create temporary sha1 filename : No such file or directory
-
-git-annex: user error (git ["--git-dir=/media/freebox/.t/tmprepo0/.git","--work-tree=/media/freebox/.t/tmprepo0","commit-tree","4b825dc642cb6eb9a060e54bf8d69288fbee4904"] exited 1)
- ### Failure in: git-annex add:2
-git annex init failed
-Cases: 3 Tried: 3 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0----------------------------------------------------------------------
-reinject
- Detected a crippled filesystem.
- Enabling direct mode.
- Detected a filesystem without fifo support.
- Disabling ssh connection caching.
- Detected a crippled filesystem.
- Detected a filesystem without fifo support.
- Disabling ssh connection caching.
- Cases: 1 Tried: 1 Errors: 0 Failures: 0
-Cases: 2 Tried: 0 Errors: 0 Failures: 0not supported in direct mode; skipping
-----------------------------------------------------------------------
-unannex
- Detected a crippled filesystem.
- Enabling direct mode.
- Detected a filesystem without fifo support.
- Disabling ssh connection caching.
-error: unable to create temporary sha1 filename : No such file or directory
-
-git-annex: user error (git ["--git-dir=/media/freebox/.t/tmprepo1/.git","--work-tree=/media/freebox/.t/tmprepo1","commit-tree","4b825dc642cb6eb9a060e54bf8d69288fbee4904"] exited 1)
- ### Failure in: git-annex unannex:0:no content
-git annex init failed
-Cases: 2 Tried: 1 Errors: 0 Failures: 1 Detected a crippled filesystem.
- Enabling direct mode.
- Detected a filesystem without fifo support.
- Disabling ssh connection caching.
- Detected a crippled filesystem.
- Detected a filesystem without fifo support.
- Disabling ssh connection caching.
- Cases: 2 Tried: 2 Errors: 0 Failures: 1
-Cases: 3 Tried: 0 Errors: 0 Failures: 0not supported in direct mode; skipping
-----------------------------------------------------------------------
-drop
- Detected a crippled filesystem.
- Enabling direct mode.
- Detected a filesystem without fifo support.
- Disabling ssh connection caching.
-error: unable to create temporary sha1 filename : No such file or directory
-
-git-annex: user error (git ["--git-dir=/media/freebox/.t/tmprepo2/.git","--work-tree=/media/freebox/.t/tmprepo2","commit-tree","4b825dc642cb6eb9a060e54bf8d69288fbee4904"] exited 1)
- ### Failure in: git-annex drop:0:no remotes
-git annex init failed
-Cases: 3 Tried: 1 Errors: 0 Failures: 1 Detected a crippled filesystem.
- Enabling direct mode.
- Detected a filesystem without fifo support.
- Disabling ssh connection caching.
-Cases: 3 Tried: 2 Errors: 0 Failures: 1/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex drop:2:untrusted remote
-git clone failed
-Cases: 3 Tried: 3 Errors: 0 Failures: 2
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex get
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex move
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex copy
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex unlock/lock
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 2 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex edit/commit:0
-git clone failed
-Cases: 2 Tried: 1 Errors: 0 Failures: 1/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex edit/commit:1
-git clone failed
-Cases: 2 Tried: 2 Errors: 0 Failures: 2
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex fix
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex trust/untrust/semitrust/dead
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 4 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex fsck:0
-git clone failed
-Cases: 4 Tried: 1 Errors: 0 Failures: 1/media/freebox/.t/tmprepo3/refs: No such file or directory
- ### Failure in: git-annex fsck:1
-git clone failed
-Cases: 4 Tried: 2 Errors: 0 Failures: 2/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex fsck:2
-git clone failed
-Cases: 4 Tried: 3 Errors: 0 Failures: 3/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex fsck:3
-git clone failed
-Cases: 4 Tried: 4 Errors: 0 Failures: 4
-Cases: 2 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex migrate:0
-git clone failed
-Cases: 2 Tried: 1 Errors: 0 Failures: 1/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex migrate:1
-git clone failed
-Cases: 2 Tried: 2 Errors: 0 Failures: 2
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex unused/dropunused
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex describe
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex find
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex merge
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex status
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex version
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex sync
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: union merge regression
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: automatic conflict resolution
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex map
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex uninit
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex upgrade
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex whereis
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex hook remote
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex directory remote
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex rsync remote
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex bup remote
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-Cases: 1 Tried: 0 Errors: 0 Failures: 0/media/freebox/.t/tmprepo3/.git: No such file or directory
- ### Failure in: git-annex crypto
-git clone failed
-Cases: 1 Tried: 1 Errors: 0 Failures: 1
-----------------------------------------------------------------------
-get
-----------------------------------------------------------------------
-move
-----------------------------------------------------------------------
-copy
-----------------------------------------------------------------------
-lock
-----------------------------------------------------------------------
-edit
-----------------------------------------------------------------------
-fix
-----------------------------------------------------------------------
-trust
-----------------------------------------------------------------------
-fsck
-----------------------------------------------------------------------
-migrate
-----------------------------------------------------------------------
- unused
-----------------------------------------------------------------------
-describe
-----------------------------------------------------------------------
-find
-----------------------------------------------------------------------
-merge
-----------------------------------------------------------------------
-status
-----------------------------------------------------------------------
-version
-----------------------------------------------------------------------
-sync
-----------------------------------------------------------------------
-union merge regression
-----------------------------------------------------------------------
-conflict resolution
-----------------------------------------------------------------------
-map
-----------------------------------------------------------------------
-uninit
-----------------------------------------------------------------------
-upgrade
-----------------------------------------------------------------------
-whereis
-----------------------------------------------------------------------
-hook remote
-----------------------------------------------------------------------
-directory remote
-----------------------------------------------------------------------
-rsync remote
-----------------------------------------------------------------------
-bup remote
-----------------------------------------------------------------------
-crypto
-git-annex: .t/repo/.git/annex: removeDirectory: unsatisified constraints (Directory not empty)
-
-# End of transcript or log.
-"""]]
diff --git a/doc/bugs/test_suite_failure_on_samba_mount/comment_1_e074b20801b921ee2661025a050a8af2._comment b/doc/bugs/test_suite_failure_on_samba_mount/comment_1_e074b20801b921ee2661025a050a8af2._comment
deleted file mode 100644
index 623028c80..000000000
--- a/doc/bugs/test_suite_failure_on_samba_mount/comment_1_e074b20801b921ee2661025a050a8af2._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.63"
- subject="seems like a general git problem"
- date="2013-08-24T19:55:56Z"
- content="""
-\"unable to create temporary sha1 filename\" is a git error message. I don't actually see any git-annex failure here, just a git failure that seems to lead to a cascade of other failures.
-
-I'm not sure if the \"/media/freebox/.t/tmprepo3/.git: No such file or directory\" is because git clone has failed due to the other errors, or if git clone somehow failed to set up the .git directory.
-
-It would probably be helpful to have a play around with git on this filesystem and see what breaks. Alternatively, you can use git-annex with `--debug` to see the git commands it's running that fail, and try them yourself and perhaps strace or gdb them or something to see where they go wrong.
-"""]]
diff --git a/doc/bugs/test_suite_shouldn__39__t_fail_silently.mdwn b/doc/bugs/test_suite_shouldn__39__t_fail_silently.mdwn
deleted file mode 100644
index 2f486ad65..000000000
--- a/doc/bugs/test_suite_shouldn__39__t_fail_silently.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-When the test suite cannot be compiled, the build just fails silenty. This means that in automated builds there is no easy way to ensure that the generated binaries have passed the test suite, because it may not even have been run! IMHO, "make test" should fail (i.e. return a non-zero exit code) when it can't succeeed.
-
-> Ok, fixed. --[[Joey]] [[done]]
diff --git a/doc/bugs/tests_fail_when_there_is_no_global_.gitconfig_for_the_user.mdwn b/doc/bugs/tests_fail_when_there_is_no_global_.gitconfig_for_the_user.mdwn
deleted file mode 100644
index b90b501e3..000000000
--- a/doc/bugs/tests_fail_when_there_is_no_global_.gitconfig_for_the_user.mdwn
+++ /dev/null
@@ -1,50 +0,0 @@
-Make test fails when git doesn't know what identity to give to commits
-
-<pre>
-
-Testing 1:blackbox:0:git-annex init
-Cases: 30 Tried: 7 Errors: 0 Failures: 0
-*** Please tell me who you are.
-
-Run
-
- git config --global user.email "you@example.com"
- git config --global user.name "Your Name"
-
-to set your account's default identity.
-Omit --global to set the identity only in this repository.
-
-fatal: empty ident <jtang@lenny.localdomain> not allowed
-### Failure in: 1:blackbox:0:git-annex init
-init failed
-Testing 1:blackbox:1:git-annex add:0
-Cases: 30 Tried: 8 Errors: 0 Failures: 1
-*** Please tell me who you are.
-</pre>
-
-I guess most users testing git-annex probably have a .gitconfig sitting in their home directories already so the above never cropped up. This failure was initially found in a clean and fresh install of a virtual machine with archlinux and repeated again on my archlinux laptop.
-
-Update: I pulled the master on my rhel5 test machine and moved my .gitconfig out of the way, the tests passes and continues but I still get a "warning message" from git.
-
-<pre>
-Testing 1:blackbox:3:git-annex unannex:1:with content
-Cases: 30 Tried: 12 Errors: 0 Failures: 0[master fce0cde] content removed from git annex
- Committer: Jimmy Tang <jtang@removed.removed.tcd.ie>
-Your name and email address were configured automatically based
-on your username and hostname. Please check that they are accurate.
-You can suppress this message by setting them explicitly:
-
- git config --global user.name "Your Name"
- git config --global user.email you@example.com
-
-After doing this, you may fix the identity used for this commit with:
-
- git commit --amend --reset-author
-
- 2 files changed, 1 insertions(+), 2 deletions(-)
- delete mode 120000 foo
-</pre>
-
-I guess it also depends a bit on how git figures out who it is is committing and how the machine in question is configured with hostnames and domain names.
-
-> Fixed that. [[done]] --[[Joey]]
diff --git a/doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform.mdwn b/doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform.mdwn
deleted file mode 100644
index 4088162e7..000000000
--- a/doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform.mdwn
+++ /dev/null
@@ -1,23 +0,0 @@
-I updated haskell platform, and now
-
-<pre>
-[jtang@x00 git-annex (master)]$ make test
-
-Assistant/Threads/NetWatcher.hs:26:2:
- warning: #warning Building without dbus support; will poll for network connection changes [-Wcpp]
-
-Assistant/Threads/MountWatcher.hs:33:2:
- warning: #warning Building without dbus support; will use mtab polling [-Wcpp]
-
-test.hs:11:8:
- Could not find module `Test.HUnit.Tools'
- Perhaps you meant Test.HUnit.Text (from HUnit-1.2.5.1)
- Use -v to see a list of the files searched for.
-** failed to build the test suite
-make: *** [test] Error 1
-</pre>
-
-Looks like a missing dep somewhere with testpack or quickcheck... I haven't had time to figure it out yet, its not git-annex specific but I thought I might log it as a reminder for myself just in case if the osxapp is more borked than usual, I probably need to flush my .cabal directory of installed userland dependancies.
-
-> The testpack library has been broken by some other library changes. I
-> made changes in git yesterday to avoid using it. [[done]] --[[Joey]]
diff --git a/doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_1_20a6fe046111e9ae56fd4d9c9f41f536._comment b/doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_1_20a6fe046111e9ae56fd4d9c9f41f536._comment
deleted file mode 100644
index cff4254c9..000000000
--- a/doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_1_20a6fe046111e9ae56fd4d9c9f41f536._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.8.117"
- subject="comment 1"
- date="2012-12-10T19:18:59Z"
- content="""
-Test.HUnit.Tools is part of testpack: <http://hackage.haskell.org/package/testpack>
-"""]]
diff --git a/doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_2_6fdc5f8b07908c6eda8a97690408f44e._comment b/doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_2_6fdc5f8b07908c6eda8a97690408f44e._comment
deleted file mode 100644
index a8ed998cd..000000000
--- a/doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_2_6fdc5f8b07908c6eda8a97690408f44e._comment
+++ /dev/null
@@ -1,45 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 2"
- date="2012-12-11T08:29:07Z"
- content="""
-yea its a problem with testpack rather than git-annex's test suite,
-
-<pre>
-[jtang@laplace git-annex (master)]$ cabal install testpack
-Resolving dependencies...
-Configuring testpack-2.1.2...
-Building testpack-2.1.2...
-Preprocessing library testpack-2.1.2...
-[1 of 3] Compiling Test.QuickCheck.Instances ( src/Test/QuickCheck/Instances.hs, dist/build/Test/QuickCheck/Instances.o )
-[2 of 3] Compiling Test.QuickCheck.Tools ( src/Test/QuickCheck/Tools.hs, dist/build/Test/QuickCheck/Tools.o )
-
-src/Test/QuickCheck/Tools.hs:33:9:
- Warning: Fields of `MkResult' not initialised: abort
- In the expression:
- MkResult
- {ok = Just (expected == actual), expect = True,
- interrupted = False,
- reason = \"Result: expected \"
- ++ show expected ++ \", got \" ++ show actual,
- stamp = [], callbacks = []}
- In an equation for `@=?':
- expected @=? actual
- = MkResult
- {ok = Just (expected == actual), expect = True,
- interrupted = False,
- reason = \"Result: expected \"
- ++ show expected ++ \", got \" ++ show actual,
- stamp = [], callbacks = []}
-[3 of 3] Compiling Test.HUnit.Tools ( src/Test/HUnit/Tools.hs, dist/build/Test/HUnit/Tools.o )
-
-src/Test/HUnit/Tools.hs:131:57:
- `maxDiscard' is not a (visible) constructor field name
-
-src/Test/HUnit/Tools.hs:177:40: Not in scope: `maxDiscard'
-cabal: Error: some packages failed to install:
-testpack-2.1.2 failed during the building phase. The exception was:
-ExitFailure 1
-</pre>
-"""]]
diff --git a/doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_3_014474a133c7ff0131029d8721afc710._comment b/doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_3_014474a133c7ff0131029d8721afc710._comment
deleted file mode 100644
index 58bbbd91f..000000000
--- a/doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_3_014474a133c7ff0131029d8721afc710._comment
+++ /dev/null
@@ -1,46 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawn7gQ1zZDdWhXy9H51W2krZYShNmKL3qfM"
- nickname="Karsten"
- subject="Testpack install fails on ubuntu 12.04"
- date="2013-02-28T10:42:36Z"
- content="""
-The current release (git-annex-4.20130227, via cabal) fails to install because testpack-2.1.2 fails to install:
-
- karsten@vdr1:~$ cabal install --bindir $HOME/bin git-annex
- Resolving dependencies...
- Configuring testpack-2.1.2...
- Building testpack-2.1.2...
- Preprocessing library testpack-2.1.2...
- [1 of 3] Compiling Test.QuickCheck.Instances ( src/Test/QuickCheck/Instances.hs, dist/build/Test/QuickCheck/Instances.o )
- [2 of 3] Compiling Test.QuickCheck.Tools ( src/Test/QuickCheck/Tools.hs, dist/build/Test/QuickCheck/Tools.o )
-
- src/Test/QuickCheck/Tools.hs:33:9:
- Warning: Fields of `MkResult' not initialised: abort
- In the expression:
- MkResult
- {ok = Just (expected == actual), expect = True,
- interrupted = False,
- reason = \"Result: expected \"
- ++ show expected ++ \", got \" ++ show actual,
- stamp = [], callbacks = []}
- In an equation for `@=?':
- expected @=? actual
- = MkResult
- {ok = Just (expected == actual), expect = True,
- interrupted = False,
- reason = \"Result: expected \"
- ++ show expected ++ \", got \" ++ show actual,
- stamp = [], callbacks = []}
- [3 of 3] Compiling Test.HUnit.Tools ( src/Test/HUnit/Tools.hs, dist/build/Test/HUnit/Tools.o )
-
- src/Test/HUnit/Tools.hs:131:57:
- `maxDiscard' is not a (visible) constructor field name
-
- src/Test/HUnit/Tools.hs:177:40: Not in scope: `maxDiscard'
- cabal: Error: some packages failed to install:
- git-annex-4.20130227 depends on testpack-2.1.2 which failed to install.
- testpack-2.1.2 failed during the building phase. The exception was:
- ExitFailure 1
-
-Manually installing testpack gives Version testpack-2.1.2.1 which installs correctly. Maybe the dependencies should be updated?
-"""]]
diff --git a/doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_4_9c537e251dc99667fe87870804d802c2._comment b/doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_4_9c537e251dc99667fe87870804d802c2._comment
deleted file mode 100644
index 0a122efaf..000000000
--- a/doc/bugs/tests_failed_to_build_-_after_an_update_of_haskell_platform/comment_4_9c537e251dc99667fe87870804d802c2._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 4"
- date="2013-02-28T19:40:11Z"
- content="""
-This is a closed bug from 2 months ago, it's the wrong place to report current problems.
-
-Anyway, I made changes in git last night to avoid using testpack, so breakage with it is no longer a concern.
-"""]]
diff --git a/doc/bugs/the_tip_at_commit_6cecc26206c4a539999b04664136c6f785211a41_disables_the_watch_command_on_OSX.mdwn b/doc/bugs/the_tip_at_commit_6cecc26206c4a539999b04664136c6f785211a41_disables_the_watch_command_on_OSX.mdwn
deleted file mode 100644
index 1ee4781d1..000000000
--- a/doc/bugs/the_tip_at_commit_6cecc26206c4a539999b04664136c6f785211a41_disables_the_watch_command_on_OSX.mdwn
+++ /dev/null
@@ -1,22 +0,0 @@
-The recent commit 6cecc26206c4a539999b04664136c6f785211a41 seems to have disabled the watch command on OSX, this certainly is the case when I try to run the webapp.
-
-The following fixes the makefile
-
-<pre>
-x00:git-annex jtang$ git diff
-diff --git a/Makefile b/Makefile
-index 9f312dc..4a74e71 100644
---- a/Makefile
-+++ b/Makefile
-@@ -27,7 +27,7 @@ endif
- endif
-
- PREFIX=/usr
--GHCFLAGS=-O2 $(BASEFLAGS) $(FEATURES)
-+GHCFLAGS=-O2 $(BASEFLAGS) $(FEATURES) $(OPTFLAGS)
-
- ifdef PROFILE
- GHCFLAGS=-prof -auto-all -rtsopts -caf-all -fforce-recomp $(BASEFLAGS) $(FEATURES) $(OPTFLAGS)
-</pre>
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/three_character_directories_created.mdwn b/doc/bugs/three_character_directories_created.mdwn
deleted file mode 100644
index 658ad3c20..000000000
--- a/doc/bugs/three_character_directories_created.mdwn
+++ /dev/null
@@ -1,56 +0,0 @@
-What steps will reproduce the problem?
-
-I don't know how, but this happened already a second time, I don't know how to reproduce this yet.
-
-What is the expected output? What do you see instead?
-
-There are many three character name directories created that look like the parts of a hash - and each contains a logfile.
-
- % ls
- 027
- 1d1
- 1e3
- 232
- 36e
- 583
- 5f6
- 69c
- 9ea
- bd7
- c46
- d20
- d48
- f31
- f88
- uuid.log
- [+the intended data directories]
-
- % find 027/
- 027/
- 027//b73
- 027//b73/SHA256-s10108928--3c3766aed8b66de9d0ef37820e0ddfba25f9463b37f30e25ceb5ce3cdf12db36.log
-
- % cat f88/7c3/SHA256-s4100608--903530747dfdc7bc9d487d7cbd8ab09ddc1ffad52c08849d049c8a5ff5cfb854.log
- 1351711677.187589s 1 2efd46d2-0e32-11e2-95fe-f73f09c6615e
- 1351971337.667243s 1 ab50cd8a-11c0-11e2-934c-87e45f64e5c6
-
-What version of git-annex are you using? On what operating system?
-
-% git-annex version
-git-annex version: 3.20121017
-local repository version: 3
-default repository version: 3
-supported repository versions: 3
-upgrade supported from repository versions: 0 1 2
-
-OS X 10.6.8
-
-Please provide any additional information below.
-
-I use a symlink to the repository to change into it.
-
-> Closing this bug as user error. If the `git-annex` branch
-> gets merged into master by the user, then that adds all its log files
-> to master, and so they're visible as regular files. Solution: Don't do
-> that, or if you do that, use `git log --stat` to find the commit that
-> adds all those files, and `git revery` the commit. [[done]] --[[Joey]]
diff --git a/doc/bugs/three_character_directories_created/comment_1_dd91de24dab4f2eaded1f7d659869d4d._comment b/doc/bugs/three_character_directories_created/comment_1_dd91de24dab4f2eaded1f7d659869d4d._comment
deleted file mode 100644
index 158fa8e9e..000000000
--- a/doc/bugs/three_character_directories_created/comment_1_dd91de24dab4f2eaded1f7d659869d4d._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.27"
- subject="comment 1"
- date="2012-11-10T00:36:49Z"
- content="""
-The three character directories, as well as the uuid.log file are supposed to stay in the git-annex branch. Perhaps you have somehow merged that branch into your master branch? I recommend you look at the history of your git repository to see how it happened. It seems very unlikely that git-annex did this.
-"""]]
diff --git a/doc/bugs/three_character_directories_created/comment_2_f6375964a6c8bb1e6c5b7238effca66d._comment b/doc/bugs/three_character_directories_created/comment_2_f6375964a6c8bb1e6c5b7238effca66d._comment
deleted file mode 100644
index 800a276f2..000000000
--- a/doc/bugs/three_character_directories_created/comment_2_f6375964a6c8bb1e6c5b7238effca66d._comment
+++ /dev/null
@@ -1,62 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmmPHsszTlpa3s3x_LEzmEYkZfEmqq7IjU"
- nickname="Jan"
- subject="happened again"
- date="2012-11-12T15:57:20Z"
- content="""
-It just happened again to me, on another computer:
-
-<pre>
- % git annex sync
- (merging synced/git-annex into git-annex...)
- commit
- add PATH/FILE (checksum...) ok
- ok
- add PATH/SUBPATH/FILE (checksum...) ok
- ok
- (Recording state in git...)
- [master 93c4526] git-annex automatic sync
- 2 files changed, 2 insertions(+), 2 deletions(-)
- ok
- merge synced/master
- CONFLICT (modify/delete): PATH/FILE deleted in refs/heads/synced/master and modified in HEAD. Version HEAD of PATH/FILE left in tree.
- Automatic merge failed; fix conflicts and then commit the result.
- failed
- pull origin
- remote: Counting objects: 71, done.
- remote: Compressing objects: 100% (51/51), done.
- remote: Total 64 (delta 25), reused 52 (delta 13)
- Unpacking objects: 100% (64/64), done.
- From host:git/repo
- 03d4b1f..c800e83 master -> origin/master
- 61239fb..6d8ae6b git-annex -> origin/git-annex
- 69914b0..61239fb synced/git-annex -> origin/synced/git-annex
- 03d4b1f..2137ab9 synced/master -> origin/synced/master
-
- error: 'merge' is not possible because you have unmerged files.
- hint: Fix them up in the work tree,
- hint: and then use 'git add/rm <file>' as
- hint: appropriate to mark resolution and make a commit,
- hint: or use 'git commit -a'.
- fatal: Exiting because of an unresolved conflict.
- failed
- push origin
- Counting objects: 26, done.
- Delta compression using up to 4 threads.
- Compressing objects: 100% (14/14), done.
- Writing objects: 100% (17/17), 1.47 KiB, done.
- Total 17 (delta 5), reused 0 (delta 0)
- To host:git/repo.git
- 6d8ae6b..37eb875 git-annex -> git-annex
- ! [rejected] master -> synced/master (non-fast-forward)
- error: failed to push some refs to 'host:git/repo.git'
- To prevent you from losing history, non-fast-forward updates were rejected
- Merge the remote changes (e.g. 'git pull') before pushing again. See the
- 'Note about fast-forwards' section of 'git push --help' for details.
- failed
- git-annex: sync: 3 failed
-</pre>
-
-git status was showing all the 3 character directories and new files. I commited to git the path I actually wanted to commit, ran a git annex sync again and now my status is clean, but the directories are there. Am I doing something wrong this way?
-
-"""]]
diff --git a/doc/bugs/three_character_directories_created/comment_3_776e0a9b938d8b260a5111594b442536._comment b/doc/bugs/three_character_directories_created/comment_3_776e0a9b938d8b260a5111594b442536._comment
deleted file mode 100644
index 92f8f8892..000000000
--- a/doc/bugs/three_character_directories_created/comment_3_776e0a9b938d8b260a5111594b442536._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawn9JRcJ_69McoLFe5-dvTMdfS9rJpGy6JI"
- nickname="Warren"
- subject="this just happened to me as well"
- date="2013-03-29T23:28:05Z"
- content="""
-I was trying to undo some changes from another bare repo, and then all of a sudden the three letter directories popped up. I think the way I did this was to hard reset the master and git-annex branches to the same commit. I take it that was the wrong thing to do? I take it the git-annex and master branch should never be merged?
-"""]]
diff --git a/doc/bugs/three_character_directories_created/comment_4_e288bacdb336c4886adb6eeb4dca1e92._comment b/doc/bugs/three_character_directories_created/comment_4_e288bacdb336c4886adb6eeb4dca1e92._comment
deleted file mode 100644
index b7ca8bc03..000000000
--- a/doc/bugs/three_character_directories_created/comment_4_e288bacdb336c4886adb6eeb4dca1e92._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawn9JRcJ_69McoLFe5-dvTMdfS9rJpGy6JI"
- nickname="Warren"
- subject="solved the problem"
- date="2013-03-30T00:13:29Z"
- content="""
-Just wanted to let future searchers know that I solved this problem by finding the most recent commit of the master that was not merged with the git-annex branch and hard resetting to that. I hard reset the git-annex branch to its most recent separate commit and now things seem to working again. By hard reset I mean the command \"git reset --hard <commit>\".
-"""]]
diff --git a/doc/bugs/three_character_directories_created/comment_5_359b80948ac92a0f1eb695599456486c._comment b/doc/bugs/three_character_directories_created/comment_5_359b80948ac92a0f1eb695599456486c._comment
deleted file mode 100644
index 6942efe52..000000000
--- a/doc/bugs/three_character_directories_created/comment_5_359b80948ac92a0f1eb695599456486c._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 5"
- date="2013-03-30T18:01:28Z"
- content="""
-Clearly this can happen if the git-annex branch is merged into the master branch. I cannot think of any valid reason to want to do that. reset --hard git-annex would also do it; ditto.
-
-Inclined to close this bug as user error; I'm pretty sure git-annex does not contain a bug that makes it merge in the git-annex branch on its own. Basically the only change that could be made to git-annex to prevent this kind of user error is to move the git-annex branch so it's not under refs/heads, and so is not a visible branch. But then `git push` would not push it either, which needs to happen.
-"""]]
diff --git a/doc/bugs/three_way_sync_via_S3_and_Jabber.mdwn b/doc/bugs/three_way_sync_via_S3_and_Jabber.mdwn
deleted file mode 100644
index e67291ca9..000000000
--- a/doc/bugs/three_way_sync_via_S3_and_Jabber.mdwn
+++ /dev/null
@@ -1,119 +0,0 @@
-## What steps will reproduce the problem?
-
-I wanted to setup a `~/Desktop/annex` synchronised between three machines, my home desktop (`dagon`), my work desktop (`zakaz`) and my laptop (`hastur`).
-
-I set this up via the annex interface, using my gmail account and Amazon S3.
-
-## What is the expected output? What do you see instead?
-
-I expected that anything dropped into `~/Desktop/annex` on any of the three machines would be synced to the other 2.
-
-I ran:
-<pre>
- $ echo Created on `hostname` > `hostname`.txt on each of the three machines.
-</pre>
-
-What I ended up with was:
-
-* Home desktop (`dagon`): dagon.txt (ok)
-* Work desktop (`zakaz`): zakaz.txt (ok) and hastur.txt (broken link)
-* Laptop (`hastur`): hastur.txt (ok) and zakaz.txt (broken link)
-
-In each case the local file had been detected and annexed -- "(ok)" means it is a symlink to the annex.
-
-Manually running `git annex sync` on any of the machines didn't change anything. Running `git annex copy --auto --from=DesktopAnnex` on the Work desktop synced the broken hastur.txt but dagon.txt didn't appear. Running the same on my laptop did nothing. Likewise on my home desktop it did nothing. (I'm not sure if running stuff from the CLI is valid when the assistant is running, but I couldn't see a "force refresh" option in the UI)
-
-In the `git log --oneline` my laptop and Work machines both have:
-<pre>
-3f541e5 Merge commit 'refs/synced/552d29fe-4a86-11e2-819a-9f61585ee7a2/master'
-cbee12b
-dddc4f0
-d8854e7 Merge commit 'refs/synced/1167ef76-4791-11e2-9bfe-4319f44b8a5f/master'
-</pre>
-
-While my home desktop has:
-<pre>
-43a80d5 git-annex automatic sync
-46328db
-d8854e7 Merge commit 'refs/synced/1167ef76-4791-11e2-9bfe-4319f44b8a5f/master'
-</pre>
-
-There are other commits prior to d8854e7 which appear to be the same on all hosts. d8854e7 was committed in December when I first played with this stuff. All the commits after that were made today as part of the experiment above, with the exception of 43a80d5 on my home desktop with was the removal of a "Test.txt" created last year. This removal also didn't sync to the other two machines.
-
-git-annex status on my home desktop (dagon) shows:
-<pre>
-semitrusted repositories: 5
- 00000000-0000-0000-0000-000000000001 -- web
- 1167ef76-4791-11e2-9bfe-4319f44b8a5f -- annex on hastur
- 54f6febc-4791-11e2-952f-13bd7a1c79f1 -- here (annex on dagon)
- 552d29fe-4a86-11e2-819a-9f61585ee7a2 -- ian.james.campbell (annex on zakaz)
- ad5c6a4c-4791-11e2-b9f0-53f8af10a9e6 -- DesktopAnnex
-</pre>
-(DesktopAnnex is the S3 remote, ian.james.campbell is my gmail username)
-
-However the webapp only shows 3 repos:
-<pre>
- here (annex on dagon)
- ian.james.campbell (annex on zakaz)
- DesktopAnnex
-</pre>
-
-git-annex status on my laptop (hastur) shows only:
-<pre>
- 00000000-0000-0000-0000-000000000001 -- web
- 1167ef76-4791-11e2-9bfe-4319f44b8a5f -- here (ijc@hastur:~/Desktop/annex)
- 54f6febc-4791-11e2-952f-13bd7a1c79f1 -- ian.james.campbell (ijc@dagon:~/Desktop/annex)
- ad5c6a4c-4791-11e2-b9f0-53f8af10a9e6 -- DesktopAnnex
-</pre>
-
-while the webapp shows:
-<pre>
- here (ijc@hastur:~/Desktop/annex)
- ian.james.campbell (ijc@dagon:~/Desktop/annex)
- DesktopAnnex
-</pre>
-
-Lastly on my work desktop (zakaz) annex status shows:
-<pre>
- 00000000-0000-0000-0000-000000000001 -- web
- 1167ef76-4791-11e2-9bfe-4319f44b8a5f -- annex on hastur
- 54f6febc-4791-11e2-952f-13bd7a1c79f1 -- ian.james.campbell (annex on dagon)
- 552d29fe-4a86-11e2-819a-9f61585ee7a2 -- here (annex on zakaz)
- ad5c6a4c-4791-11e2-b9f0-53f8af10a9e6 -- DesktopAnnex
-</pre>
-
-The webapp shows:
-<pre>
- here (annex on zakaz)
- ian.james.campbell (annex on dagon)
- DesktopAnnex
-</pre>
-
-git-annex sync on any of them shows:
-<pre>
-$ git annex sync
-commit
-# On branch master
-nothing to commit (working directory clean)
-ok
-pull ian.james.campbell
-fatal: Unable to find remote helper for 'xmpp'
-failed
-push ian.james.campbell
-fatal: Unable to find remote helper for 'xmpp'
-failed
-git-annex: sync: 2 failed
-</pre>
-
-## What version of git-annex are you using? On what operating system?
-
-3.20121211 on Debian Sid. All machines are amd64
-
-## Please provide any additional information below.
-
-I'm not 100% sure this sort of multiway synching is supposed to work, so maybe this is just as expected. If this isn't a bug you could consider it a feature request though ;-)
-
-This issue also made me wonder about how one would go about syncing multiple unrelated annexes via XMPP. Would you need a different gmail account for each? Maybe there is a trick similar to the email local+foo@ thing?
-
-> [[done]], turned out I left XMPP git push working,
-> but had not done all the stuff around it to get reliable syncing. Now have. --[[Joey]]
diff --git a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_10_fc5ec5505f141bb9135e772d1094bc4d._comment b/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_10_fc5ec5505f141bb9135e772d1094bc4d._comment
deleted file mode 100644
index c611b7d6e..000000000
--- a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_10_fc5ec5505f141bb9135e772d1094bc4d._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 10"
- date="2013-03-06T20:35:43Z"
- content="""
-I've been revisiting the XMPP stuff this week, and today I fixed at least 3 problems that would keep XMPP sync from happening reliably. This would affect machines that are using XMPP and are sometimes disconnected from the net (or suspended). Nothing caused a sync to happen when restarting the assistant, or resuming from a network disconnection. This could result in both files not showing up, and file contents not being transferred, depending on the case hit.
-
-I think it explains everything in this bug report, hopefully.
-
-(All XMPP nodes sync with all other nodes, BTW.)
-"""]]
diff --git a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_11_0df2210c30dec6d88d7858d93eec19a3._comment b/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_11_0df2210c30dec6d88d7858d93eec19a3._comment
deleted file mode 100644
index 0ed43cc41..000000000
--- a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_11_0df2210c30dec6d88d7858d93eec19a3._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmhjlfoU21OiXKH_MXw75Uq5EsX7LJW5p0"
- nickname="Ian"
- subject="comment 11"
- date="2013-03-10T08:33:26Z"
- content="""
-Thanks Joey! I'll hopefully manage to give the new version a try after my current batch of traveling.
-
-From the sounds of things I can expect it to just work now, rather than requiring some manual step to kick it out of its current state?
-"""]]
diff --git a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_1_41682b2e72e657e0f23af244f8345e85._comment b/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_1_41682b2e72e657e0f23af244f8345e85._comment
deleted file mode 100644
index 382dcee6a..000000000
--- a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_1_41682b2e72e657e0f23af244f8345e85._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
- nickname="Justin"
- subject="comment 1"
- date="2013-01-12T14:34:34Z"
- content="""
- fatal: Unable to find remote helper for 'xmpp'
-
-is probably why things are not working for you. git annex sync is not actually syncing because of that.
-"""]]
diff --git a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_2_c7b4ea9aea6839763eb8b89e8d6a5ad5._comment b/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_2_c7b4ea9aea6839763eb8b89e8d6a5ad5._comment
deleted file mode 100644
index 5eea53d19..000000000
--- a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_2_c7b4ea9aea6839763eb8b89e8d6a5ad5._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmhjlfoU21OiXKH_MXw75Uq5EsX7LJW5p0"
- nickname="Ian"
- subject="comment 2"
- date="2013-01-12T14:47:07Z"
- content="""
-@Justin,
-
-It seems to be synching a least something over this channel, e.g. my work desktop and laptop seem to be keeping the git side in sync at least (I think the broken symlinks appearing and the copy --from working show this?).
-
-In the pairing window (under Config->Share with a friend) it shows ian.james.campbell as being \"paired\" on all three machines.
-
-I have a feeling there isn't supposed to be a remote helper for xmpp and the assistant is expected to take care of this through other means, IOW I shouldn't be running `git annex sync` by hand at all.
-"""]]
diff --git a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_3_063f5e5e554ad6710f16394906d87616._comment b/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_3_063f5e5e554ad6710f16394906d87616._comment
deleted file mode 100644
index fd129a468..000000000
--- a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_3_063f5e5e554ad6710f16394906d87616._comment
+++ /dev/null
@@ -1,33 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.7.238"
- subject="comment 3"
- date="2013-01-14T17:40:51Z"
- content="""
-`git annex sync` cannot sync xmpp remotes. Only the assistant can do that. So that's a red herring indeed..
-
-I've replicated the same setup with 3 repositories all paired using a single jabber account.
-In my test, all 3 stay in sync, with any change to one git repository being synced to the other 2.
-
-I checked the XMPP sync protocol, and it doesn't use the UUIDs at all for XMPP syncing, so the fact that `.git/config` only has the UUID of one of the two repositories that is accessible via XMPP in this case, should not matter. That is, though, why the webapp only shows one of the other two repositories; it's using that UUID information.
-
-Dagon seems to be where the problem is occuring; it's not managing to sync out its changes via XMPP.
-I think the thing to do is create another new file on dagon, and look at its `.git/annex/daemon.log`.
-You should see two xmpp pushes happen, which would look rather like this:
-
-<pre>
-To xmpp::you@gmail.com
- a7549be..011ccc2 git-annex -> refs/synced/9346f5a8-5e63-11e2-bd8b-77356d7f5bd0/git-annex
- 3acca89..5123067 master -> refs/synced/9346f5a8-5e63-11e2-bd8b-77356d7f5bd0/master
-Counting objects: 12, done.
-Delta compression using up to 2 threads.
-Compressing objects: 100% (6/6), done.
-Writing objects: 100% (7/7), 622 bytes, done.
-Total 7 (delta 3), reused 0 (delta 0)
-To xmpp::you@gmail.com
- a7549be..011ccc2 git-annex -> refs/synced/9346f5a8-5e63-11e2-bd8b-77356d7f5bd0/git-annex
- 3acca89..5123067 master -> refs/synced/9346f5a8-5e63-11e2-bd8b-77356d7f5bd0/master
-</pre>
-
-If you don't see both pushes, maybe you'll see a useful error message.
-"""]]
diff --git a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_4_197ad39b4a46936afeeb04eb26cf1ef3._comment b/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_4_197ad39b4a46936afeeb04eb26cf1ef3._comment
deleted file mode 100644
index 113e5f911..000000000
--- a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_4_197ad39b4a46936afeeb04eb26cf1ef3._comment
+++ /dev/null
@@ -1,138 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmhjlfoU21OiXKH_MXw75Uq5EsX7LJW5p0"
- nickname="Ian"
- subject="comment 4"
- date="2013-01-14T19:52:16Z"
- content="""
-Looking at the annex on dagon this evening (before trying the experiment you suggested) I see that dagon.txt and hastur.txt are present and correct while zakaz.txt is a broken symlink. On both hastur and zakaz dagon.txt has appeared as a broken link. The git history is now in sync across all three devices (according to `git log`)
-
-I hadn't touched anything since I reported the bug. Looking in the .git/annex/daemon.log on dagon I see:
-
-<pre>
-scanning...) (started...)
- No known network monitor available through dbus; falling back to polling
-Already up-to-date.
-Already up-to-date.
-Already up-to-date.
-fatal: unresolved deltas left after unpacking
-fatal: Unable to find remote helper for 'xmpp'
-To xmpp::ian.james.campbell@gmail.com
- 794532e..ea12017 git-annex -> refs/synced/54f6febc-4791-11e2-952f-13bd7a1c79f1/git-annex
- d8854e7..43a80d5 master -> refs/synced/54f6febc-4791-11e2-952f-13bd7a1c79f1/master
-(merging refs/synced/552d29fe-4a86-11e2-819a-9f61585ee7a2/git-annex into git-annex...)
-Updating 43a80d5..81afdca
-Fast-forward
- hastur.txt | 1 +
- zakaz.txt | 1 +
- 2 files changed, 2 insertions(+)
- create mode 120000 hastur.txt
- create mode 120000 zakaz.txt
-(Recording state in git...)
-# On branch master
-nothing to commit (working directory clean)
-Already up-to-date.
-(Recording state in git...)
-# On branch master
-nothing to commit (working directory clean)
-To xmpp::ian.james.campbell@gmail.com
- ea12017..a6efff5 git-annex -> refs/synced/54f6febc-4791-11e2-952f-13bd7a1c79f1/git-annex
- 43a80d5..81afdca master -> refs/synced/54f6febc-4791-11e2-952f-13bd7a1c79f1/master
-(Recording state in git...)
-To xmpp::ian.james.campbell@gmail.com
- a6efff5..931c11b git-annex -> refs/synced/54f6febc-4791-11e2-952f-13bd7a1c79f1/git-annex
-fatal: Unable to find remote helper for 'xmpp'
-Everything up-to-date
-fatal: Unable to find remote helper for 'xmpp'
-Everything up-to-date
-fatal: Unable to find remote helper for 'xmpp'
-Everything up-to-date
-fatal: Unable to find remote helper for 'xmpp'
-git-annex: /home/ijc/Desktop/annex/.git/annex/tmp/xmppgit/git-remote-xmpp: openFile: resource busy (file is locked)
-fatal: The remote end hung up unexpectedly
-error: Ref refs/synced/552d29fe-4a86-11e2-819a-9f61585ee7a2/git-annex is at 931c11bc8f974934026f005ac63596d078e044ea but expected 8da50426cced18713b1deb8ea6bb0420cadf1076
-error: Ref refs/synced/552d29fe-4a86-11e2-819a-9f61585ee7a2/master is at 81afdca7c69e689d34cc3fc729e1e4ec5d0fcc33 but expected 3f541e58b726ef2f46bd55bfb8e955e1418b33cb
-Already up-to-date.
-fatal: Unable to find remote helper for 'xmpp'
-fatal: cannot exec 'git-remote-xmpp': Text file busy
-fatal: The remote end hung up unexpectedly
-error: Ref refs/synced/552d29fe-4a86-11e2-819a-9f61585ee7a2/git-annex is at 931c11bc8f974934026f005ac63596d078e044ea but expected 8da50426cced18713b1deb8ea6bb0420cadf1076
-error: Ref refs/synced/552d29fe-4a86-11e2-819a-9f61585ee7a2/master is at 81afdca7c69e689d34cc3fc729e1e4ec5d0fcc33 but expected 3f541e58b726ef2f46bd55bfb8e955e1418b33cb
-fatal: Unable to find remote helper for 'xmpp'
-Everything up-to-date
-fatal: Unable to find remote helper for 'xmpp'
-Everything up-to-date
-fatal: Unable to find remote helper for 'xmpp'
-git-annex: <socket: 8>: hWaitForInput: resource vanished (Connection reset by peer)
-fatal: Unable to find remote helper for 'xmpp'
-git-annex: <socket: 8>: hPutBuf: resource vanished (Broken pipe)
-git-annex: forkProcess: interrupted
-</pre>
-
-I also notice that the annex assistant doesn't seem to be running on dagon any more and the webapp window says \"git annex has shutdown, you can now close this window\". The assistant is running on zakaz and hastur.
-
-On dagon I ran `/usr/bin/git-annex assistant --autostart`. THe daemon.log now contains:
-<pre>
-(scanning...) (started...)
- No known network monitor available through dbus; falling back to polling
-Already up-to-date.
-Already up-to-date.
-Already up-to-date.
-drop DesktopAnnex hastur.txt (gpg) ok
-</pre>
-I suppose this makes sense since hastur.txt is the only file present on all three devices, so it makes sense to remove it from the transfer repo.
-
-On zakaz the daemon.log is full of things like:
-<pre>
-gpg: cannot open tty `/dev/tty': No such device or address
-Already up-to-date.
-gpg: cannot open tty `/dev/tty': No such device or address
-fatal: protocol error: expected sha/ref, got '^A000eunpack ok
-0042ok refs/synced/552d29fe-4a86-11e2-819a-9f61585ee7a2/git-annex
-003fok refs/synced/552d29fe-4a86-11e2-819a-9f61585ee7a2/master
-0000'
-send-pack: protocol error: bad band #56
-fatal: The remote end hung up unexpectedly
-fatal: The remote end hung up unexpectedly
-fatal: Unable to find remote helper for 'xmpp'
-gpg: cannot open tty `/dev/tty': No such device or address
-gpg: cannot open tty `/dev/tty': No such device or address
-fatal: The remote end hung up unexpectedly
-</pre>
-There are lots of the tty message and also some `git-annex: fd:97: hClose: resource vanished (Broken pipe)`.
-
-Hastur doesn't seem to have a daemon.log, although the daemon is running AFAICT.
-
-BTW something else I noticed is that there are quite a few defunct git children of the annex processes.
-
-e.g. on dagon `ps auxf | grep [g]it`:
-<pre>
-ijc 8792 0.0 0.3 157396 29752 ? Sl 19:40 0:00 git-annex assistant
-ijc 8795 0.0 0.0 0 0 ? Z 19:40 0:00 \_ [git] <defunct>
-ijc 8817 0.0 0.0 0 0 ? Z 19:40 0:00 \_ [git] <defunct>
-ijc 8874 0.0 0.0 14156 1332 ? S 19:41 0:00 \_ git --git-dir=/home/ijc/Desktop/annex/.git --work-tree=/home/ijc/Desktop/annex cat-file --batch
-ijc 8875 0.0 0.0 14132 1100 ? S 19:41 0:00 \_ git --git-dir=/home/ijc/Desktop/annex/.git --work-tree=/home/ijc/Desktop/annex check-attr -z --stdin annex.backend annex.numcopies --
-ijc 8908 0.0 0.0 0 0 ? Z 19:41 0:00 \_ [git] <defunct>
-</pre>
-
-(I only restarted the daemon just now)
-
-On zakaz:
-<pre>
-ianc 32004 0.0 0.5 229620 21708 ? Sl Jan12 3:04 git-annex assistant
-ianc 32007 0.0 0.0 0 0 ? Z Jan12 0:00 \_ [git] <defunct>
-ianc 32021 0.0 0.0 0 0 ? Z Jan12 0:00 \_ [git] <defunct>
-ianc 32106 0.0 0.0 0 0 ? Z Jan12 0:00 \_ [git] <defunct>
-ianc 32107 0.0 0.0 13652 924 ? S Jan12 0:00 \_ git --git-dir=/home/ianc/Desktop/annex/.git --work-tree=/home/ianc/Desktop/annex check-attr -z --stdin annex.backend annex.numcopies --
-ianc 32113 0.0 0.0 13652 1156 ? S Jan12 0:00 \_ git --git-dir=/home/ianc/Desktop/annex/.git --work-tree=/home/ianc/Desktop/annex cat-file --batch
-ianc 32258 0.0 0.0 0 0 ? Z Jan12 0:00 \_ [git] <defunct>
-ianc 32377 0.0 0.0 0 0 ? Z Jan12 0:00 \_ [git] <defunct>
-ianc 453 0.0 0.0 0 0 ? Z Jan12 0:00 \_ [git] <defunct>
-ianc 530 0.0 0.0 0 0 ? Z Jan12 0:00 \_ [git] <defunct>
-ianc 6681 0.0 0.0 0 0 ? Z Jan13 0:00 \_ [git] <defunct>
-ianc 6697 0.0 0.0 0 0 ? Z Jan13 0:00 \_ [git] <defunct>
-ianc 32232 0.0 0.4 128952 16340 ? Sl Jan12 0:00 git-annex xmppgit
-ianc 32239 0.0 0.4 128952 16340 ? Sl Jan12 0:00 git-annex xmppgit
-</pre>
-
-I'm going to create a new file on dagon as requested now. I'll post the results in a separate comment.
-"""]]
diff --git a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_5_0b0d829ccd255be0177ae9d8f6b10e63._comment b/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_5_0b0d829ccd255be0177ae9d8f6b10e63._comment
deleted file mode 100644
index 045139544..000000000
--- a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_5_0b0d829ccd255be0177ae9d8f6b10e63._comment
+++ /dev/null
@@ -1,61 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmhjlfoU21OiXKH_MXw75Uq5EsX7LJW5p0"
- nickname="Ian"
- subject="comment 5"
- date="2013-01-14T20:04:02Z"
- content="""
-Here is the result of running `echo Foo > ~/Desktop/annex/dagon2.txt` on dagon.
-
-In dagon's daemon.log:
-<pre>
-add dagon2.txt (checksum...) (Recording state in git...)
-(Recording state in git...)
-Already up-to-date.
-To xmpp::ian.james.campbell@gmail.com
- 0bf7dc2..0182e26 git-annex -> refs/synced/54f6febc-4791-11e2-952f-13bd7a1c79f1/git-annex
- c1e1f70..2711f11 master -> refs/synced/54f6febc-4791-11e2-952f-13bd7a1c79f1/master
-(merging refs/synced/1167ef76-4791-11e2-9bfe-4319f44b8a5f/git-annex into git-annex...)
-Already up-to-date.
-</pre>
-
-Nothing appeared in zakaz's log. As I mentioned in the previous comment hastur doesn't seem to have a log (should this worry me?).
-
-The new file appeared on dagon and hastur but not zakaz (not even as a broken link).
-
-I tried a couple more times (dagon3 and dagon4) with the same effect.
-
-Since zakaz now appears to be the host which is playing up I then tried `echo Foo > zakaz2.2txt` on zakaz.
-
-The log on zakaz said:
-<pre>
-add zakaz2.2txt (checksum...) gpg: cannot open tty `/dev/tty': No such device or address
-gpg: cannot open tty `/dev/tty': No such device or address
-(Recording state in git...)
-(Recording state in git...)
-gpg: cannot open tty `/dev/tty': No such device or address
-gpg: cannot open tty `/dev/tty': No such device or address
-</pre>
-
-and dagon:
-<pre>
-(merging refs/synced/552d29fe-4a86-11e2-819a-9f61585ee7a2/git-annex into git-annex...)
-(Recording state in git...)
-Merge made by the 'recursive' strategy.
- zakaz2.2txt | 1 +
- 1 file changed, 1 insertion(+)
- create mode 120000 zakaz2.2txt
-(Recording state in git...)
-# On branch master
-nothing to commit (working directory clean)
-(merging refs/synced/1167ef76-4791-11e2-9bfe-4319f44b8a5f/git-annex into git-annex...)
-(Recording state in git...)
-Already up-to-date!
-Merge made by the 'recursive' strategy.
-Already up-to-date.
-To xmpp::ian.james.campbell@gmail.com
- d220ce6..4e8647f git-annex -> refs/synced/54f6febc-4791-11e2-952f-13bd7a1c79f1/git-annex
- b2a84e4..ef0a200 master -> refs/synced/54f6febc-4791-11e2-952f-13bd7a1c79f1/master
-</pre>
-
-However zakaz2.2txt is a broken symlink on both hastur and dagon.
-"""]]
diff --git a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_6_37a8e19440c764317589bc4248cbccdf._comment b/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_6_37a8e19440c764317589bc4248cbccdf._comment
deleted file mode 100644
index 827ca8f63..000000000
--- a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_6_37a8e19440c764317589bc4248cbccdf._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmhjlfoU21OiXKH_MXw75Uq5EsX7LJW5p0"
- nickname="Ian"
- subject="comment 6"
- date="2013-01-14T20:14:57Z"
- content="""
-FYI I've waited a bit and zakaz2.2txt hasn't been syned to either of the other two machines (as appeared to happen after the initial report). Obviously I could wait longer
-
-Just thought I'd mention it since I'm going offline now which is going to involve hibernating hastur (I suppose I should have mentioned that I do this quite regularly in case it matters). dagon and zakaz will remain on and connected to the net (just me and hastur which are going offline).
-"""]]
diff --git a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_7_12eb333327d31ca2bfee3f3c5e26d641._comment b/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_7_12eb333327d31ca2bfee3f3c5e26d641._comment
deleted file mode 100644
index e93738bd9..000000000
--- a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_7_12eb333327d31ca2bfee3f3c5e26d641._comment
+++ /dev/null
@@ -1,24 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmhjlfoU21OiXKH_MXw75Uq5EsX7LJW5p0"
- nickname="Ian"
- subject="comment 7"
- date="2013-01-28T19:51:06Z"
- content="""
-I've upgraded to 3.20130124 and everything appears to be fine now.
-
-However .git/annex/daemon.log has loads of
-<pre>
-usage: git rm [options] [--] <file>...
-
- -n, --dry-run dry run
- -q, --quiet do not list removed files
- --cached only remove from the index
- -f, --force override the up-to-date check
- -r allow recursive removal
- --ignore-unmatch exit with a zero status even if nothing matched
-
-user error (xargs [\"-0\",\"git\",\"--git-dir=/home/ianc/Desktop/annex/.git\",\"--work-tree=/home/ianc/Desktop/annex\",\"rm\",\"--quiet\",\"-f\",\"--\"] exited 123)
-</pre>
-
-I suspect you might want xargs --no-run-if-empty?
-"""]]
diff --git a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_8_e6b1084b2f18d8e536c8692e165754a3._comment b/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_8_e6b1084b2f18d8e536c8692e165754a3._comment
deleted file mode 100644
index 0e91f47fb..000000000
--- a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_8_e6b1084b2f18d8e536c8692e165754a3._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.3.125"
- subject="comment 8"
- date="2013-02-05T19:13:34Z"
- content="""
-I don't know of anything that changed in XMPP handling between 3.20121211 and 3.20130124, so am hesitant to close this bug report.
-
-
-
-(I did put in a fix to avoid it queueing `git rm` when there were no files to remove.)
-"""]]
diff --git a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_9_2120a1c3e5f490a55f68bb1bef5efd0d._comment b/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_9_2120a1c3e5f490a55f68bb1bef5efd0d._comment
deleted file mode 100644
index 78ec89935..000000000
--- a/doc/bugs/three_way_sync_via_S3_and_Jabber/comment_9_2120a1c3e5f490a55f68bb1bef5efd0d._comment
+++ /dev/null
@@ -1,183 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmhjlfoU21OiXKH_MXw75Uq5EsX7LJW5p0"
- nickname="Ian"
- subject="comment 9"
- date="2013-02-07T21:11:39Z"
- content="""
-It seems I may have spoken to soon, currently zakaz (the work machine) is out of sync with the other two again.
-
-daemon.log has a bunch of these:
-<pre>
- [2013-02-07 19:42:56 GMT] NetWatcherFallback: Syncing with ian.james.campbell DesktopAnnex web
- fatal: Unable to find remote helper for 'xmpp'
-</pre>
-on zakaz and dagon.
-
-hastur does not have these messages in daemon.log but I just had to restart the assistant because it seems to have crashed. daemon.log.1 ends:
-<pre>
- [2013-02-03 14:07:51 GMT] NetWatcherFallback: Syncing with ian.james.campbell DesktopAnnex web
- fatal: Unable to find remote helper for 'xmpp'
- git-annex: <socket: 99>: hPutBuf: resource vanished (Broken pipe)
- git-annex: forkProcess: interrupted
-</pre>
-
-zakaz is stuck at commit 81768b7, dagon and hastur have 8240e2b, with a few commits in between:
-<pre>
-$ git log --oneline 81768b74892ee5ec7f5a9ae15fb65d81c8a4d29d^..master
-8240e2b Merge commit 'refs/synced/1167ef76-4791-11e2-9bfe-4319f44b8a5f/master'
-e6ae87e Merge commit 'refs/synced/1167ef76-4791-11e2-9bfe-4319f44b8a5f/master'
-7bee777
-3871031
-c86bed3
-81768b7
-</pre>
-
-Before all the \"cannot find remote helper messages\" in zakaz's daemon.log I see:
-<pre>
-[2013-01-30 14:54:29 GMT] Pusher: Syncing with ian.james.campbell
-(Recording state in git...)
-
-Already up-to-date.
-To xmpp::ian.james.campbell@gmail.com
- 871b9c0..4585d72 git-annex -> refs/synced/552d29fe-4a86-11e2-819a-9f61585ee7a2/git-annex
- 6dadc6d..81768b7 master -> refs/synced/552d29fe-4a86-11e2-819a-9f61585ee7a2/master
-To xmpp::ian.james.campbell@gmail.com
- 871b9c0..4585d72 git-annex -> refs/synced/552d29fe-4a86-11e2-819a-9f61585ee7a2/git-annex
- 6dadc6d..81768b7 master -> refs/synced/552d29fe-4a86-11e2-819a-9f61585ee7a2/master
-(merging refs/synced/54f6febc-4791-11e2-952f-13bd7a1c79f1/git-annex into git-annex...)
-
-Already up-to-date.
-(merging refs/synced/54f6febc-4791-11e2-952f-13bd7a1c79f1/git-annex into git-annex...)
-[2013-01-30 15:48:10 GMT] NetWatcherFallback: Syncing with ian.james.campbell DesktopAnnex web
-fatal: Unable to find remote helper for 'xmpp'
-fatal: The remote end hung up unexpectedly
-To xmpp::ian.james.campbell@gmail.com
- 4585d72..7d0d48f git-annex -> refs/synced/552d29fe-4a86-11e2-819a-9f61585ee7a2/git-annex
-error: failed to push some refs to 'xmpp::ian.james.campbell@gmail.com'
-[2013-01-30 16:48:10 GMT] NetWatcherFallback: Syncing with ian.james.campbell DesktopAnnex web
-fatal: Unable to find remote helper for 'xmpp'
-Everything up-to-date
-</pre>
-
-The last 3 lines are repeated, interspersed with the daily sanity checks (no errors).
-
-On hastur I see:
-<pre>
-[2013-01-30 15:33:44 GMT] NetWatcherFallback: Syncing with ian.james.campbell DesktopAnnex web
-fatal: Unable to find remote helper for 'xmpp'
-To xmpp::ian.james.campbell@gmail.com
- cec23e5..4585d72 git-annex -> refs/synced/1167ef76-4791-11e2-9bfe-4319f44b8a5f/git-annex
-To xmpp::ian.james.campbell@gmail.com
- 871b9c0..4585d72 git-annex -> refs/synced/1167ef76-4791-11e2-9bfe-4319f44b8a5f/git-annex
- 6dadc6d..81768b7 master -> refs/synced/1167ef76-4791-11e2-9bfe-4319f44b8a5f/master
-fatal: The remote end hung up unexpectedly
-[2013-01-31 10:46:18 GMT] NetWatcherFallback: Syncing with ian.james.campbell DesktopAnnex web
-fatal: Unable to find remote helper for 'xmpp'
-[2013-01-31 10:46:25 GMT] NetWatcher: Syncing with ian.james.campbell DesktopAnnex web
-fatal: Unable to find remote helper for 'xmpp'
-(Recording state in git...)
-(Recording state in git...)
-(Recording state in git...)
-
-(merging refs/synced/552d29fe-4a86-11e2-819a-9f61585ee7a2/git-annex into git-annex...)
-
-git-annex: <socket: 52>: hWaitForInput: resource vanished (Connection reset by peer)
-</pre>
-
-and on dagon
-<pre>
-[2013-01-30 14:28:41 GMT] NetWatcherFallback: Syncing with ian.james.campbell DesktopAnnex web
-fatal: Unable to find remote helper for 'xmpp'
-Everything up-to-date
-fatal: The remote end hung up unexpectedly
-Updating 6dadc6d..81768b7
-Fast-forward
- 2013-02-fosdem-evolving-xen-paravirtualisation.txt | 1 +
- 1 file changed, 1 insertion(+)
- create mode 120000 2013-02-fosdem-evolving-xen-paravirtualisation.txt
-[2013-01-30 14:56:34 GMT] Committer: Committing changes to git
-# On branch master
-nothing to commit (working directory clean)
-[2013-01-30 14:56:36 GMT] Pusher: Syncing with ian.james.campbell
-[2013-01-30 14:56:36 GMT] Transferr: Downloaded 2013-02-f..ation.txt
-[2013-01-30 14:56:38 GMT] Pusher: Syncing with ian.james.campbell
-fatal: Unable to create '/home/ijc/Desktop/annex/.git/refs/heads/synced/master.lock': File exists.
-
-If no other git process is currently running, this probably means a
-git process crashed in this repository earlier. Make sure no other git
-process is running and remove the file manually to continue.
-(merging refs/synced/552d29fe-4a86-11e2-819a-9f61585ee7a2/git-annex into git-annex...)
-
-(Recording state in git...)
-(Recording state in git...)
-git-annex: failed to update refs/heads/synced/master
-fatal: Unable to create '/home/ijc/Desktop/annex/.git/refs/heads/synced/master.lock': File exists.
-If no other git process is currently running, this probably means a
-git process crashed in this repository earlier. Make sure no other git
-process is running and remove the file manually to continue.
-fatal: Unable to create '/home/ijc/Desktop/annex/.git/refs/heads/synced/master.lock': File exists.
-
-If no other git process is currently running, this probably means a
-git process crashed in this repository earlier. Make sure no other git
-process is running and remove the file manually to continue.
-git-annex: failed to update refs/heads/synced/master
-git-annex: failed to update refs/heads/synced/master
-Already up-to-date.
-To xmpp::ian.james.campbell@gmail.com
- 871b9c0..8b8b935 git-annex -> refs/synced/54f6febc-4791-11e2-952f-13bd7a1c79f1/git-annex
- 6dadc6d..81768b7 master -> refs/synced/54f6febc-4791-11e2-952f-13bd7a1c79f1/master
-
-drop DesktopAnnex ./2013-02-fosdem-evolving-xen-paravirtualisation.txt (gpg) [2013-01-30 15:28:41 GMT] NetWatcherFallback: Syncing with ian.james.campbell DesktopAnnex web
-fatal: Unable to find remote helper for 'xmpp'
-To xmpp::ian.james.campbell@gmail.com
- 8b8b935..7d0d48f git-annex -> refs/synced/54f6febc-4791-11e2-952f-13bd7a1c79f1/git-annex
-Already up-to-date.
-</pre>
-
-It seems like something was up here but it recovered? All 3 managed to sync on 81768b7.
-
-Next on hastur I see:
-<pre>
-[2013-02-01 10:43:18 GMT] Committer: Committing changes to git
-[2013-02-01 10:43:18 GMT] Pusher: Syncing with ian.james.campbell
-Already up-to-date.
-[2013-02-01 10:43:19 GMT] Committer: Committing changes to git
-To xmpp::ian.james.campbell@gmail.com
- 81768b7..3871031 master -> refs/synced/1167ef76-4791-11e2-9bfe-4319f44b8a5f/master
-[2013-02-01 10:43:20 GMT] Pusher: Syncing with ian.james.campbell
-Already up-to-date.
-To xmpp::ian.james.campbell@gmail.com
- 3871031..7bee777 master -> refs/synced/1167ef76-4791-11e2-9bfe-4319f44b8a5f/master
-Updating 7bee777..8240e2b
-Fast-forward
- Xen at FOSDEM.docx | 1 +
- 1 file changed, 1 insertion(+)
- create mode 120000 Xen at FOSDEM.docx
-</pre>
-
-And on dagon
-<pre>
-[2013-02-01 10:45:52 GMT] Committer: Committing changes to git
-(Recording state in git...)
-# On branch master
-nothing to commit (working directory clean)
-[2013-02-01 10:45:53 GMT] Pusher: Syncing with ian.james.campbell
-To xmpp::ian.james.campbell@gmail.com
- fc4ad88..70a6877 git-annex -> refs/synced/54f6febc-4791-11e2-952f-13bd7a1c79f1/git-annex
- 5e83708..8240e2b master -> refs/synced/54f6febc-4791-11e2-952f-13bd7a1c79f1/master
-
-Already up-to-date.
-Everything up-to-date
-(merging refs/synced/1167ef76-4791-11e2-9bfe-4319f44b8a5f/git-annex into git-annex...)
-
-Already up-to-date.
-
-</pre>
-(5e83708 is 81768b7~2)
-
-However there is nothing in the logs on zakaz about moving on from 81768b7. The last interesting message is the \"[2013-01-30 15:48:10 GMT\" one above.
-
-is the XMPP peering supposed to be fully connected (i.e. each node is talking to both the others) or would it be expected that one of the nodes would be in the middle of the other two acting as a relay?
-
-I'm wondering about that because hastur is frequently suspended. I can't quite remember but I think when I set this up I peered dagon<->hastur at home and then while I was at work I peered zakaz<->hastur. That would seem to suggest that hastur would have ended up as the man in the middle. TBH I can't quite recall what the setup process involves, so maybe I'm talking nonsense. I think I went into the \"Share with a friend\" page and shared with myself.
-"""]]
diff --git a/doc/bugs/tmp_file_handling.mdwn b/doc/bugs/tmp_file_handling.mdwn
deleted file mode 100644
index 9db932e57..000000000
--- a/doc/bugs/tmp_file_handling.mdwn
+++ /dev/null
@@ -1,13 +0,0 @@
-git-annex deletes all tmp files on shutdown, if everything succeeded.
-This presents 2 problems:
-
-1. If git-annex is rsyncing something and another one is run, it will
- delete the running instance's tmp files.
-2. If a long-running rsync transfer is interrupted partway through, the
- tmp file was expensive to obtain, and one needs to avoid running
- git-annex to do anything else until that transfer can be resumed and
- finished.
-
---[[Joey]]
-
-[[done]]
diff --git a/doc/bugs/tmp_file_handling/comment_1_0300c11ee3f94a9e7c832671e16f5511._comment b/doc/bugs/tmp_file_handling/comment_1_0300c11ee3f94a9e7c832671e16f5511._comment
deleted file mode 100644
index 244e580b2..000000000
--- a/doc/bugs/tmp_file_handling/comment_1_0300c11ee3f94a9e7c832671e16f5511._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://www.openid.albertlash.com/openid/"
- ip="74.96.185.87"
- subject="What to do?"
- date="2012-10-24T15:47:16Z"
- content="""
-I've got a stale .git/annex/tmp/rsynctmp file that just won't go away, and I think its because I cancelled an in-progress rsync, then did something else, as you describe.
-
-Is it ok to manually remove the file?
-
-Thanks!
-Albert
-"""]]
diff --git a/doc/bugs/tmp_file_handling/comment_2_cc14c7a79a544e47654e4cd8abc85edd._comment b/doc/bugs/tmp_file_handling/comment_2_cc14c7a79a544e47654e4cd8abc85edd._comment
deleted file mode 100644
index d6ae5bcf0..000000000
--- a/doc/bugs/tmp_file_handling/comment_2_cc14c7a79a544e47654e4cd8abc85edd._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.23"
- subject="comment 2"
- date="2012-10-24T15:50:40Z"
- content="""
-`rsynctmp` is only used when sending files to a rsync special remote. You can certainly delete it if you got a stale one, but the next time a file is sent to a rsync special remote it should delete it anyway.
-"""]]
diff --git a/doc/bugs/too_many_open_files_on_OSX.mdwn b/doc/bugs/too_many_open_files_on_OSX.mdwn
new file mode 100644
index 000000000..2ca89fcf0
--- /dev/null
+++ b/doc/bugs/too_many_open_files_on_OSX.mdwn
@@ -0,0 +1,42 @@
+### Please describe the problem.
+
+error message:
+
+ copy somefile.jpg (checking myserver...) (to myserver...)
+ git-annex: runInteractiveProcess: pipe: Too many open files
+
+ rsync failed -- run git annex again to resume file transfer
+ failed
+
+
+### What steps will reproduce the problem?
+
+1. Start a `git annex copy` with lots of files in the queue.
+2. Start a second `git annex copy` on the same set of files.
+The intention is to minimize the amount of silent time on the wire due to administrative work between actual file transfers. These two processes will trip over each other and see that transfer X is already going, and skip to the next file Y, so in the end they upload about half of the files each.
+
+3. Expect all files to be uploaded. Actually observe the above error message for at least one of the processes.
+
+### What version of git-annex are you using? On what operating system?
+
+ git-annex version: 5.20140420-ga25b8bb
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook external
+
+ Darwin mymacbook 13.3.0 Darwin Kernel Version 13.3.0: Tue Jun 3 21:27:35 PDT 2014; root:xnu-2422.110.17~1/RELEASE_X86_64 x86_64
+
+### Please provide any additional information below.
+
+[[!format sh """
+lsof -p <my annex process>
+
+... some .app/** files, tty etc ...
+... some unnamed pipes ...
+.../.git/annex/ssh/myserver.lock
+.../.git/annex/transfer/upload/b4d67c4f-8cca-423c-9363-f3063b7fe3e4/lck.SHA256E-s10448418--4f61fab4... ~200 different files.
+"""]]
+
+> Thanks for a very clear bug report! Was easy from that to find
+> where the lock file was not being closed in this situation.
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/too_many_open_files_on_OSX/comment_1_ef23a3c05a6bd187450e10c524d2ced9._comment b/doc/bugs/too_many_open_files_on_OSX/comment_1_ef23a3c05a6bd187450e10c524d2ced9._comment
new file mode 100644
index 000000000..d7efcb2b1
--- /dev/null
+++ b/doc/bugs/too_many_open_files_on_OSX/comment_1_ef23a3c05a6bd187450e10c524d2ced9._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://id.clacke.se/"
+ nickname="Claes"
+ subject="5.20140830"
+ date="2014-09-07T19:24:49Z"
+ content="""
+Will verify if this is still valid for 5.20140830.
+"""]]
diff --git a/doc/bugs/too_many_open_files_on_OSX/comment_2_798a02e42bfce56c50c9337a8111a57f._comment b/doc/bugs/too_many_open_files_on_OSX/comment_2_798a02e42bfce56c50c9337a8111a57f._comment
new file mode 100644
index 000000000..25b6692dc
--- /dev/null
+++ b/doc/bugs/too_many_open_files_on_OSX/comment_2_798a02e42bfce56c50c9337a8111a57f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://id.clacke.se/"
+ nickname="Claes"
+ subject="yep"
+ date="2014-09-07T19:42:04Z"
+ content="""
+Still valid for `git-annex version: 5.20140830-g3c96b79`
+"""]]
diff --git a/doc/bugs/too_many_ssh_connections_during_sync_of_gcrypt_remotes.mdwn b/doc/bugs/too_many_ssh_connections_during_sync_of_gcrypt_remotes.mdwn
new file mode 100644
index 000000000..079c9025a
--- /dev/null
+++ b/doc/bugs/too_many_ssh_connections_during_sync_of_gcrypt_remotes.mdwn
@@ -0,0 +1,27 @@
+### Please describe the problem.
+`git-annex sync gcryptremote` makes too many ssh connections one after another for each sub-task involved, potentially triggering firewall rate-limits on the SSH server.
+
+### What steps will reproduce the problem?
+sync with gcrypt remote while watching sshd logs on the server (I was getting >=5 connections per single sync in quick succession)
+
+### What version of git-annex are you using? On what operating system?
+Fedora 19, installed through cabal (without s3 and webapp support as the deps were failing to build)
+
+ $ git annex version
+ git-annex version: 5.20150205
+ build flags: Assistant Pairing WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA TorrentParser
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E MD5E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 MD5 WORM URL
+ remote types: git gcrypt bup directory rsync web bittorrent webdav tahoe glacier ddar hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 0 1 2 4
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+
+# End of transcript or log.
+"""]]
diff --git a/doc/bugs/too_many_ssh_connections_during_sync_of_gcrypt_remotes/comment_1_8522285987f6d231c851861418af633a._comment b/doc/bugs/too_many_ssh_connections_during_sync_of_gcrypt_remotes/comment_1_8522285987f6d231c851861418af633a._comment
new file mode 100644
index 000000000..133b3ac8e
--- /dev/null
+++ b/doc/bugs/too_many_ssh_connections_during_sync_of_gcrypt_remotes/comment_1_8522285987f6d231c851861418af633a._comment
@@ -0,0 +1,24 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-12T18:27:26Z"
+ content="""
+Are you sure it's git-annex that's making the connections, and not
+git-remote-gcrypt? What kind of uri are you using?
+
+I tried to reproduce such a problem, making this gcrypt special remote:
+
+git annex initremote gcrypt type=gcrypt gitrepo=ssh://localhost/tmp/r encryption=shared --fast
+
+When I `git annex sync gcrypt`, only 1 ssh connection is made:
+
+joey@darkstar:~/tmp/meep>systemctl status ssh.socket | grep Accepted
+ Accepted: 80; Connected: 1
+joey@darkstar:~/tmp/meep>git annex sync gcrypt >/dev/null 2>&1
+joey@darkstar:~/tmp/meep>systemctl status ssh.socket | grep Accepted
+ Accepted: 81; Connected: 1
+
+git-annex's ssh connection caching code is working for this gcrypt remote,
+because git-annex's `GIT_SSH=` is being propigated through gcrypt to git
+push and pull.
+"""]]
diff --git a/doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems.mdwn b/doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems.mdwn
index 118f6fbb7..116f1496f 100644
--- a/doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems.mdwn
+++ b/doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems.mdwn
@@ -17,3 +17,4 @@ make: *** [Touch.hs] Error 1
I dug around the OSX documentation and fcntl.h header file and it seems that UTIME_OMIT, UTIME_NOW, AT_FDCWD and AT_SYMLINK_NOFOLLOW aren't defined (at least on OSX). I suspect the BSD's in general will have problems compiling git-annex.
[[!meta title="annexed symlink mtime matching code is disabled on non-linux systems; needs testing"]]
+[[!tag confirmed]]
diff --git a/doc/bugs/transferkey_fails_due_to_gpg.mdwn b/doc/bugs/transferkey_fails_due_to_gpg.mdwn
deleted file mode 100644
index 26bd0443e..000000000
--- a/doc/bugs/transferkey_fails_due_to_gpg.mdwn
+++ /dev/null
@@ -1,51 +0,0 @@
-What steps will reproduce the problem?
-Create a new annex, add a new repository:
-
- git annex initremote vserver2 type=rsync rsyncurl=vserver.dbruhn.de:/annex encryption=dominik@dbruhn.de
-
-Add some files, add them to annex, try to transfer them:
- git annex transferkey SHA256-s6486446--df84b11a0e9543134224d0ac1e0f2567bcd79d86605117c5af008a1b133cee3a --to vserver2 --file MKBD/OB.mp3 --debug
-
-What is the expected output? What do you see instead?
-
-I expect the file to be transfered to my remote server. Instead I see a 'gpg>' prompt with nothing happening. When pressing CTRL+C, the following mesage is shown:
-
-gpg: Interrupt caught ... exiting
-
-There must be some faults when interfacing gpg. The other console-output is:
-
------
- [2012-09-08 18:50:12 CEST] read: git ["--git-dir=/home/dominik/Annex/.git","--work-tree=/home/dominik/Annex","show-ref","git-annex"]
- [2012-09-08 18:50:12 CEST] read: git ["--git-dir=/home/dominik/Annex/.git","--work-tree=/home/dominik/Annex","show-ref","--hash","refs/heads/git-annex"]
- [2012-09-08 18:50:12 CEST] read: git ["--git-dir=/home/dominik/Annex/.git","--work-tree=/home/dominik/Annex","log","refs/heads/gitannex..245fa80db6733dbbeff6c40d46bd65ed00811548","--oneline","-n1"]
- [2012-09-08 18:50:12 CEST] chat: git ["--git-dir=/home/dominik/Annex/.git","--work-tree=/home/dominik/Annex","cat-file","--batch"]
- (gpg) [2012-09-08 18:50:12 CEST] chat: gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--decrypt"]
- [2012-09-08 18:50:12 CEST] chat: gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--passphrase-fd","8","--symmetric","--force-mdc"]
- sdgdg
- dsgdgs
- ^C
- gpg: Interrupt caught ... exiting
------
-
-What version of git-annex are you using? On what operating system?
-git-annex version: 3.20120826
-Ubuntu 12.04, GHC 7.4.1
-gpg is 'gpg (GnuPG) 1.4.11'
-
-Please provide any additional information below.
-
-The key which is used for the remote is password protected. The GnuPG Agent asks me for the password, so this seems to work. I do not know what content the gpg expects but does not recieve. The .git/config entry for the remote looks reasonable:
-
- [remote "vserver2"]
- annex-rsyncurl = vserver.dbruhn.de:/annex
- annex-uuid = ea3d6acc-716c-48e8-9b6b-993b90dcc1db
-
-When adding a new rsync-remote with encryption set to 'none' (therefore disabled), everything works, so it really seems a gpg issue.
-
-How can I help debugging?
-
-> Thanks, I reproduced a deadlock in the gpg code, which was introduced
-> with some of my earlier changes to use threading. No released version of
-> git-annex was affected, and I have developed a fix, which works for me
-> and is now committed to master. Marking this [[done]]; please do check
-> that my fix works for you! --[[Joey]]
diff --git a/doc/bugs/transferkey_fails_due_to_gpg/comment_1_f6434400d528a0fa59c056995ff2e6f3._comment b/doc/bugs/transferkey_fails_due_to_gpg/comment_1_f6434400d528a0fa59c056995ff2e6f3._comment
deleted file mode 100644
index 1fb9d2a0b..000000000
--- a/doc/bugs/transferkey_fails_due_to_gpg/comment_1_f6434400d528a0fa59c056995ff2e6f3._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.8.30"
- subject="comment 1"
- date="2012-09-09T16:45:20Z"
- content="""
-This is very strange behavior for gpg, it's being told several ways not to be interactive (--batch, --no-tty, --passphrase-fd); the mode it's being run in should, even without those options, only prompt for a password.
-
-I'm left wondering what settings you have in gpg.conf, and even wondering if you have some kind of wrapper around gpg that makes it more interactive, or some odd gpg agent that's interactive, or something.
-
-(I'm also confused that you mention a \"gpg>\" prompt, but your transcript doesn't show one.)
-"""]]
diff --git a/doc/bugs/transferkey_fails_due_to_gpg/comment_2_c540b05b62a3186a87efcb180ea2a52d._comment b/doc/bugs/transferkey_fails_due_to_gpg/comment_2_c540b05b62a3186a87efcb180ea2a52d._comment
deleted file mode 100644
index 7203f45df..000000000
--- a/doc/bugs/transferkey_fails_due_to_gpg/comment_2_c540b05b62a3186a87efcb180ea2a52d._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.8.30"
- subject="comment 2"
- date="2012-09-09T16:50:40Z"
- content="""
-Perhaps you mistook the \"(gpg)\" that git-annex prints out for a gpg prompt? If your transcript is accurate, things seem to be stalled, and gpg is not behaving like you're at a prompt when you type stuff to it, just the terminal is echoing back what you typed.
-
-This then looks like it might be the same bug someone else mentioned here <http://git-annex.branchable.com/design/assistant/blog/day_70__adding_ssh_remotes/#comment-048f7fad45dc545f9d5a560491b275a1>
-
-I have not managed to reproduce that problem. Are you seeing stalls with any particular size of file? Does it happen with very small files?
-"""]]
diff --git a/doc/bugs/transferkey_fails_due_to_gpg/comment_3_9ad2ef73169dbd2866da2f4259ab0f00._comment b/doc/bugs/transferkey_fails_due_to_gpg/comment_3_9ad2ef73169dbd2866da2f4259ab0f00._comment
deleted file mode 100644
index 3838e70f0..000000000
--- a/doc/bugs/transferkey_fails_due_to_gpg/comment_3_9ad2ef73169dbd2866da2f4259ab0f00._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.8.30"
- subject="comment 3"
- date="2012-09-09T16:55:02Z"
- content="""
-I've replicated a stall with current git-annex head and gpg. Doesn't happen with an older build. bisecting..
-"""]]
diff --git a/doc/bugs/transferkey_fails_due_to_gpg/comment_4_7631b8842efba6a4aad87386ce9443a7._comment b/doc/bugs/transferkey_fails_due_to_gpg/comment_4_7631b8842efba6a4aad87386ce9443a7._comment
deleted file mode 100644
index 6c7a3f2d4..000000000
--- a/doc/bugs/transferkey_fails_due_to_gpg/comment_4_7631b8842efba6a4aad87386ce9443a7._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://www.dbruhn.de/"
- nickname="Dominik"
- subject="comment 4"
- date="2012-09-09T19:45:07Z"
- content="""
-Thanks, your recent changes fixed the bug!
-"""]]
diff --git a/doc/bugs/tweaks_to_directory_special_remote_doco.mdwn b/doc/bugs/tweaks_to_directory_special_remote_doco.mdwn
deleted file mode 100644
index 10861b45f..000000000
--- a/doc/bugs/tweaks_to_directory_special_remote_doco.mdwn
+++ /dev/null
@@ -1,80 +0,0 @@
-### Please describe the problem.
-
-I found the discussion in [directory](/special_remotes/directory) quite confusing until I looked at it the right way. Some tweaking of the documentation might help.
-
-### What steps will reproduce the problem?
-
-Possible method - get a newbie to read the page.
-
-### What version of git-annex are you using? On what operating system?
-
-n/a
-
-### Please provide any additional information below.
-
-Below is an untested patch that I think would make the documentation more helpful to me on a first reading.
-
- Tweaks to doc/special_remotes/directory.mdwn
-
- * document the 'directory' option (!)
- * try to make it clearer what is different about this remote,
- including giving an example of how the directory structure looks.
- * grammar fix in opening paragraph
-
- ---
- doc/special_remotes/directory.mdwn | 16 +++++++++++++++-
- 1 file changed, 15 insertions(+), 1 deletion(-)
-
- diff --git a/doc/special_remotes/directory.mdwn b/doc/special_remotes/directory.mdwn
- index 4d72e8b..7f076b3 100644
- --- a/doc/special_remotes/directory.mdwn
- +++ b/doc/special_remotes/directory.mdwn
- @@ -1,10 +1,12 @@
- This special remote type stores file contents in directory.
-
- One use case for this would be if you have a removable drive that
- -you want to use it to sneakernet files between systems (possibly with
- +you want to use to sneakernet files between systems (possibly with
- \[[encrypted|encryption]] contents). Just set up both systems to use
- the drive's mountpoint as a directory remote.
-
- +Note that directory remotes have a special directory structure
- +(by design, the same as the \[[rsync|rsync]] remote).
- If you just want two copies of your repository with the files "visible"
- in the tree in both, the directory special remote is not what you want.
- Instead, you should use a regular `git clone` of your git-annex repository.
- @@ -14,6 +16,8 @@ Instead, you should use a regular `git clone` of your git-annex repository.
- These parameters can be passed to `git annex initremote` to configure the
- remote:
-
- +* `directory` - The path to directory in which the remote resides
- +
- * `encryption` - One of "none", "hybrid", "shared", or "pubkey".
- See \[[encryption]].
-
- @@ -31,3 +35,13 @@ Setup example:
-
- # git annex initremote usbdrive type=directory directory=/media/usbdrive/ encryption=none
- # git annex describe usbdrive "usb drive on /media/usbdrive/"
- +
- +Usage example:
- + # git annex copy mycoolfile.mp4 --to usbdrive
- + # ls -aF /media/usbdrive
- + ./ ../ 42b/ .git/ tmp/
- + # git annex whereis mycoolfile.mp4
- + whereis mycoolfile.mp4 (2 copies)
- + 320053d5-892f-46d2-89f0-d6e9d09e6398 -- here
- + 6747a48b-fad2-41a7-9033-8d8daa35c5f8 -- usbdrive
- + ok
- --
- 1.8.5.2
-
-
-
-# End of transcript or log.
-
-> Largely applied (except example at the end). I agree these
-> changes make it much clearer, especially adding the missing documentation
-> of the directory parameter. So, [[done]]. Note that this website is a
-> wiki and users like you are welcome to edit pages directly to improve the
-> documentation. --[[Joey]]
diff --git a/doc/bugs/typo_in___34__ready_to_add_remote_server__34___message.mdwn b/doc/bugs/typo_in___34__ready_to_add_remote_server__34___message.mdwn
deleted file mode 100644
index 9d370b640..000000000
--- a/doc/bugs/typo_in___34__ready_to_add_remote_server__34___message.mdwn
+++ /dev/null
@@ -1,16 +0,0 @@
-What steps will reproduce the problem?
-Add a ssh remote to an existing git annex repository. The word "sensitive" is misspelled.
-
-What is the expected output? What do you see instead?
-I expect to see:
-"The contents of your files will be stored, fully encrypted, on the server. The server will not store other information about your git repository. This is the best choice if you don't run the server yourself, or have sensitive data."
-
-But instead I see:
-"The contents of your files will be stored, fully encrypted, on the server. The server will not store other information about your git repository. This is the best choice if you don't run the server yourself, or have sensative data."
-
-What version of git-annex are you using? On what operating system?
-3.20130102, Fedora 17 x86_64
-
-Please provide any additional information below.
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/unable_to_sync_complains_of_missing_git-upload_and_receive_pack.mdwn b/doc/bugs/unable_to_sync_complains_of_missing_git-upload_and_receive_pack.mdwn
deleted file mode 100644
index 777c4f6e8..000000000
--- a/doc/bugs/unable_to_sync_complains_of_missing_git-upload_and_receive_pack.mdwn
+++ /dev/null
@@ -1,208 +0,0 @@
-### Please describe the problem.
-Syncing two standalones: amd64 and armel.
-
-Sync works from armel to amd64.
-
-Sync fails (missing git-upload-pack, git-receive-pack) from amd64 to armel.
-
-### What steps will reproduce the problem?
-git-annex sync :)
-
-### What version of git-annex are you using? On what operating system?
-git-annex version: 5.20131224-g6ca5271 on both
-
-### Please provide any additional information below.
-
-#### on server "rose" (amd64)
-
-[[!format sh """
-$ git-annex version
-git-annex version: 5.20131224-g6ca5271
-build flags: Assistant Webapp Pairing S3 WebDAV Inotify DBus XMPP Feeds Quvi TDFA
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
-remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
-local repository version: 3
-default repository version: 3
-supported repository versions: 3 5
-upgrade supported from repository versions: 0 1 2 4
-
-$ git-annex sync
-(merging synced/git-annex into git-annex...)
-commit ok
-pull synology
-ash: git-upload-pack: not found
-fatal: Could not read from remote repository.
-
-Please make sure you have the correct access rights
-and the repository exists.
-failed
-push synology
-ash: git-receive-pack: not found
-fatal: Could not read from remote repository.
-
-Please make sure you have the correct access rights
-and the repository exists.
-
- Pushing to synology failed.
-
- (non-fast-forward problems can be solved by setting receive.denyNonFastforwards to false in the remote\'s git config)
-failed
-git-annex: sync: 2 failed
-$ cat .git/config
-[core]
- repositoryformatversion = 0
- filemode = true
- bare = false
- logallrefupdates = true
-[branch "master"]
-[annex]
- uuid = c0e4106e-2631-11e2-9749-1bfa37a61069
- version = 3
-[remote "synology"]
- url = greg@server:/volume1/photo/
- fetch = +refs/heads/*:refs/remotes/synology/*
- annex-ssh-options = "-i /home/greg/.ssh/annex.rose_rsa"
- annex-uuid = ca735977-973c-44bc-9257-915b2c875e39
-
-greg@rose:~/.ssh$ cat authorized_keys
-command="/home/greg/.ssh/git-annex-shell" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDT1yE96E/JQNPt0ziiNYJRvndCvLK4uG5h/SNYoAIBF1uH6L7VYAt3HWVqSyi3BcV70WDZ/yWgtNzbrcir46JpvEHMcvYaXLbANwoDGNjG/gsz7kP/8VUxZ6hG3P3ICuwnqVum5+rYXm6oj3xzWPfTRhhRoDZLOQdevSNpdGNaa/lSg8Vuq2suHwjQlQb8AIUuCZmS5cm6XwoUq/jJtN4LTuTPqMjzA6NkdhWM2Kigi9jPQBFborkYBPMphmZwBZiVnhsH1XpaOff+mP03D2gF/huC+b1vbWQstjuehUbY59rvJ4ijbOW8Uq2ep7dwLagmILtX5GbL+GS64pAn9sIP annex-DiskStation
-
-greg@rose:~/.ssh$ cat git-annex-shell
-#!/bin/sh
-set -e
-exec /home/greg/bin/git-annex.linux/runshell git-annex-shell -c "$SSH_ORIGINAL_COMMAND"
-
-greg@rose:~/bin/git-annex.linux$ ls
-bin gconvdir git-annex.MANIFEST git-core lib LICENSE README templates
-etc git git-annex-shell git-receive-pack lib64 linker runshell usr
-favicon.png git-annex git-annex-webapp git-upload-pack libdirs logo.svg shimmed
-"""]]
-
-#### on "synology" (armel)
-
-[[!format sh """
-/volume1/downloads/git-annex.linux $ ./runshell
-$ git-annex version
-git-annex version: 5.20131224-g6ca5271
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS Feeds Quvi TDFA CryptoHash
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
-remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
-local repository version: 5
-default repository version: 3
-supported repository versions: 3 5
-upgrade supported from repository versions: 0 1 2 4
-
-$ which git-receive-pack
-/volume1/downloads/git-annex.linux/bin/git-receive-pack
-
-$ which git-upload-pack
-/volume1/downloads/git-annex.linux/bin/git-upload-pack
-
-$ git-annex sync
-commit (Recording state in git...)
-ok
-pull rose
-From server:/home/greg/Media/Pictures/Photos
- d761e6e..4454a51 git-annex -> rose/git-annex
- c4f0719..a4c73e4 master -> rose/master
-ok
-push rose
-Counting objects: 134, done.
-Compressing objects: 100% (58/58), done.
-Writing objects: 100% (58/58), 4.81 KiB | 0 bytes/s, done.
-Total 58 (delta 38), reused 0 (delta 0)
-warning: There are too many unreachable loose objects; run 'git prune' to remove them.
-To greg@server:/home/greg/Media/Pictures/Photos
- 4454a51..812c393 git-annex -> synced/git-annex
-ok
-
-$ cat .git/config
-[core]
- repositoryformatversion = 0
- filemode = true
- bare = true
- logallrefupdates = true
-[branch "master"]
-[annex]
- uuid = ca735977-973c-44bc-9257-915b2c875e39
- version = 5
- direct = true
-[remote "rose"]
- url = greg@server:/home/greg/Media/Pictures/Photos
- fetch = +refs/heads/*:refs/remotes/rose/*
- annex-ssh-options = "-i /var/services/homes/greg/.ssh/annex_rsa"
- annex-trustlevel = trusted
- annex-uuid = c0e4106e-2631-11e2-9749-1bfa37a61069
-
-$ cat /volume1/homes/greg/.ssh/authorized_keys
-...partial...
-command="/var/services/homes/greg/.ssh/git-annex-shell" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCYvOZK2rO+3cF1wxxxrXptZ/QbRaOy36p9RtFmE5MKxgBRJ7n/8nMfBGaj3KDXcdJG+dTUsmLY5VeULuM4omtfJrF2MFYZDw2N0Qgq1bnYZ+q4OlpHfI3h77dAxyvM1MXYJvewXsjh8XoQJYqE8Pj4C05YsAJrqQJqqQqVZceD4TPvbKgnQhQIE2mCVXfItucJv0TOOBmKguOQGUB4Jp00IvFsnxpCLDeLFIODjRpXQqcMX9cZ9/6OYLznTck/MdbA5KTev1gVwiGwtYFGqY/DJ7q6zqfE+UU2aKS/M0r0Qjvr2+Q4+CuzVYc+hPURC8phmdP+HjtFcVsEcpsl6p79 annex-rose
-
-/volume1/homes/greg/.ssh $ cd /volume1/homes/greg/.ssh/
-/volume1/homes/greg/.ssh
-/volume1/homes/greg/.ssh $ ls
-annex_rsa authorized_keys id_rsa known_hosts
-annex_rsa.pub git-annex-shell id_rsa.pub
-/volume1/homes/greg/.ssh $ cd /var/services/homes/greg/.ssh/
-/volume1/homes/greg/.ssh $ pwd
-/var/services/homes/greg/.ssh
-
-/volume1/homes/greg/.ssh $ cat git-annex-shell
-#!/bin/sh
-set -e
-exec /volume1/downloads/git-annex.linux/runshell git-annex-shell -c "$SSH_ORIGINAL_COMMAND"
-
-/volume1/downloads/git-annex.linux $ ls
-LICENSE git-annex-shell linker
-README git-annex-webapp logo.svg
-bin git-annex.MANIFEST runshell
-etc git-core shimmed
-favicon.png git-receive-pack templates
-gconvdir git-upload-pack usr
-git lib
-git-annex libdirs
-"""]]
-
-
-
-
-
-### After some debugging with Joey...
-12:24 < joeyh> git does not use annex-ssh-options
-12:24 < joeyh> the way the assistant sets this up is it makes up a new hostname, and in .ssh/config, makes that hostname use the real domain name, and the key
-12:25 < joeyh> there's clearly a bug here.. the assistant only does that when there is no passwordless ssh key already set up. But in this wacky way of installing git and git-annex on a server, it needs to always do it
-12:26 < joeyh> probably the assistant should probe if ssh server git-receive-pack works, and if not, always set up its special config
-12:26 < joeyh> alternatively, the standalone tarball could have an actual installation step, rather than just being unpacked
-
-Based on that I added (on the amd64/rose machine):
-[[!format sh """
-greg@rose:~/.ssh$ cat config
-Host synology
- HostName yep.org #obviously redacted
- IdentityFile /home/greg/.ssh/annex.rose_rsa
-
-$ git remote show -n synology
-* remote synology
- Fetch URL: greg@synology:/volume1/photo/
- Push URL: greg@synology:/volume1/photo/
- HEAD branch: (not queried)
- Local ref configured for 'git push' (status not queried):
- (matching) pushes to (matching)
-"""]]
-
-Now, to do a simple test with git:
-
-[[!format sh """
-$ git remote show synology
-git-annex-shell: git-shell failed
-fatal: Could not read from remote repository.
-
-Please make sure you have the correct access rights
-and the repository exists.
-"""]]
-
-> [[done]]; `git push` and `git pull` don't use annex-ssh-options,
-> and so that's not a good way to configure the dedicated key.
-> Instead, set it up like the assistant does, with a dummy hostname in the
-> url that is configured in .ssh/config to use the real domain and the
-> dedicated key. --[[Joey]]
diff --git a/doc/bugs/unable_to_sync_complains_of_missing_git-upload_and_receive_pack/comment_1_8b0302bba2b99df0842dfead649080e7._comment b/doc/bugs/unable_to_sync_complains_of_missing_git-upload_and_receive_pack/comment_1_8b0302bba2b99df0842dfead649080e7._comment
deleted file mode 100644
index 0301f58c5..000000000
--- a/doc/bugs/unable_to_sync_complains_of_missing_git-upload_and_receive_pack/comment_1_8b0302bba2b99df0842dfead649080e7._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.227"
- subject="comment 1"
- date="2013-12-27T20:11:09Z"
- content="""
-Seems there really is a bug here, `git-shell` needs to be added to the top of the bundle. I've done so, but not tested it.
-"""]]
diff --git a/doc/bugs/unannex_and_uninit_do_not_work_when_git_index_is_broken.mdwn b/doc/bugs/unannex_and_uninit_do_not_work_when_git_index_is_broken.mdwn
deleted file mode 100644
index c31205ede..000000000
--- a/doc/bugs/unannex_and_uninit_do_not_work_when_git_index_is_broken.mdwn
+++ /dev/null
@@ -1,17 +0,0 @@
-git's index broke and I was unable to restore it. While this is not git-annex' problem, it should still be possible to get my data in an un-annexed state.
-
- % git status
- fatal: index file smaller than expected
- % git annex unannex foo
- fatal: index file smaller than expected
- % git annex uninit
- fatal: index file smaller than expected
- uninit
- pre-commit hook (/path/to/git-annex/.git/hooks/pre-commit) contents modified; not deleting. Edit it to remove call to git annex.
- ok
- %
-
-Ttbomk, the softlinks and objects are enough to un-annex the files; side-stepping git's index if necessary.
-
-> `git annex repair` can now repair broken index files and other
-> git repository corruption. [[done]] --[[Joey]]
diff --git a/doc/bugs/unannex_and_uninit_do_not_work_when_git_index_is_broken/comment_1_1931e733f0698af5603a8b92267203d4._comment b/doc/bugs/unannex_and_uninit_do_not_work_when_git_index_is_broken/comment_1_1931e733f0698af5603a8b92267203d4._comment
deleted file mode 100644
index 84b68bb7b..000000000
--- a/doc/bugs/unannex_and_uninit_do_not_work_when_git_index_is_broken/comment_1_1931e733f0698af5603a8b92267203d4._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 1"
- date="2011-04-03T01:40:50Z"
- content="""
-They rely on git-ls-files to get a list of files that are checked into git, in order to tell what to unannex.
-"""]]
diff --git a/doc/bugs/unannex_and_uninit_do_not_work_when_git_index_is_broken/comment_2_40920b88537b7715395808d8aa94bf03._comment b/doc/bugs/unannex_and_uninit_do_not_work_when_git_index_is_broken/comment_2_40920b88537b7715395808d8aa94bf03._comment
deleted file mode 100644
index 215619043..000000000
--- a/doc/bugs/unannex_and_uninit_do_not_work_when_git_index_is_broken/comment_2_40920b88537b7715395808d8aa94bf03._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 2"
- date="2011-04-03T08:55:18Z"
- content="""
-Given that the softlinks contain all needed information (if the object exists, locally), an emergency way to get files \"out\" of git-annex would be nice. I am aware that one can script it, but a canonical way is always better, especially when things go south.
-"""]]
diff --git a/doc/bugs/unannex_command_doesn__39__t_all_files.mdwn b/doc/bugs/unannex_command_doesn__39__t_all_files.mdwn
deleted file mode 100644
index a6500c377..000000000
--- a/doc/bugs/unannex_command_doesn__39__t_all_files.mdwn
+++ /dev/null
@@ -1,30 +0,0 @@
- $ git init ; git annex init test ; dd if=/dev/urandom of=file1 count=128 ; cp file1 file2 ; git annex add --backend=SHA1 file? ; git commit -m init ; git annex unannex ; ls -l
- Initialized empty Git repository in /tmp/annex/.git/
- init test ok
- 128+0 records in
- 128+0 records out
- 65536 bytes (66 kB) copied, 0.007173 s, 9.1 MB/s
- add file1 (checksum...) ok
- add file2 (checksum...) ok
- (Recording state in git...)
- [master (root-commit) 2177b10] init
- 2 files changed, 2 insertions(+), 0 deletions(-)
- create mode 120000 file1
- create mode 120000 file2
- unannex file1 ok
- (Recording state in git...)
- [master bef78b1] content removed from git annex
- 1 files changed, 0 insertions(+), 1 deletions(-)
- delete mode 120000 file1
- total 72
- -rw-r--r-- 1 simons users 65536 Jul 15 17:29 file1
- lrwxrwxrwx 1 simons users 132 Jul 15 17:29 file2 -> .git/annex/objects/jp/Fk/SHA1-s65536--795b58cc4e5190b02e7026fd9e94a10c98c6475f/SHA1-s65536--795b58cc4e5190b02e7026fd9e94a10c98c6475f
-
-> This was recently discussed in
-> [[annex_unannex__47__uninit_should_handle_copies]] and `unannex --fast`
-> added to leave contents behind in the annex, which allows handling
-> copies. But needs manual cleanup later with dropunused. --[[Joey]]
-
-> This is basically a dup of [[Large unannex operations result in stale symlinks and data loss]],
-> or at least the ideas in there will also deal with this. Closing as dupe.
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/unannex_removes_object_even_if_referred_to_by_others.mdwn b/doc/bugs/unannex_removes_object_even_if_referred_to_by_others.mdwn
deleted file mode 100644
index 874e5c27f..000000000
--- a/doc/bugs/unannex_removes_object_even_if_referred_to_by_others.mdwn
+++ /dev/null
@@ -1,20 +0,0 @@
-##What steps will reproduce the problem?
-
- echo text > foo
- echo text > bar
- git annex add foo bar
- git annex unannex foo
-
-##What is the expected output? What do you see instead?
-
-I would expect that the object behind 'bar' remained intact, what happens is that the object is moved out of the annex and 'bar' is left as a dangling symlink, if you are unlucky and don't spot this, it could be potentially dangerous, since you can easily lose data.
-
-##What version of git-annex are you using? On what operating system?
-
-git-annex built from git on Tue Mar 12 15:58:36 2013 -0400
-
-From commit: 70b7555eaf9ac5f88bb137985d93bed8d5a434e8
-
-On Debian Sid
-
-> [[done]]; duplicate bug report
diff --git a/doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_1_0ce72d0f67082f202cfa58b7c00f2fd3._comment b/doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_1_0ce72d0f67082f202cfa58b7c00f2fd3._comment
deleted file mode 100644
index da80a8f01..000000000
--- a/doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_1_0ce72d0f67082f202cfa58b7c00f2fd3._comment
+++ /dev/null
@@ -1,39 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnRai_qFYPVvEgC6i1nlM1bh-C__jbhqS0"
- nickname="Matthew"
- subject="git annex uninit does this too..."
- date="2013-07-27T07:55:49Z"
- content="""
-Here are my files from a backup...
-
- fozz@cobol:/mnt/store/Music/Jukebox/Markus Schulz/Miami'05 Euro Trance $ md5sum AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Small.jpg AlbumArtSmall.jpg
- 9cfd8347becf87da8b1c5962e77267ad AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Small.jpg
- 9cfd8347becf87da8b1c5962e77267ad AlbumArtSmall.jpg
-
-Here is how git annex unannex left my files...
-
- fozz@markdown:/exports/music$ ls -alh Jukebox/Markus\ Schulz/Miami\'05\ Euro\ Trance/
- total 127M
- drwxr-x---+ 2 fozz audio 4.0K Jul 27 03:04 .
- drwxr-x---+ 9 fozz audio 4.0K Feb 8 20:03 ..
- -rwxr-x---+ 1 fozz audio 13M Mar 24 2008 01 - Hydroid Blue Tubes (Intro Mix).mp3
- -rwxr-x---+ 1 fozz audio 9.8M Mar 24 2008 02 - Interstate I Found U (Harry Lemon Remix).mp3
- -rwxr-x---+ 1 fozz audio 15M Mar 24 2008 03 - Kalafut & Fygle '3579 Km.mp3
- -rwxr-x---+ 1 fozz audio 11M Mar 24 2008 04 - Hammer & Bennett Baltic Sea.mp3
- -rwxr-x---+ 1 fozz audio 11M Mar 24 2008 05 - Fluid In Motion Soul Dimension.mp3
- -rwxr-x---+ 1 fozz audio 12M Mar 24 2008 06 - Keo Close Enough (Noel Sanger Mix).mp3
- -rwxr-x---+ 1 fozz audio 9.4M Mar 24 2008 08 - Lens Let The Light In.mp3
- -rwxr-x---+ 1 fozz audio 11M Mar 24 2008 09 - Aronek Free Yourself.mp3
- -rwxr-x---+ 1 fozz audio 14M Mar 24 2008 10 - Ava Mea In The End.mp3
- -rwxr-x---+ 1 fozz audio 13M Mar 24 2008 11 - Sean Walsh Pres- Jagermaestro Quarter Century.mp3
- -rwxr-x---+ 1 fozz audio 12M Mar 24 2008 12 - Max Graham Feat- Jessica Jacobs Gone.mp3
- -rwxr-x---+ 1 fozz audio 6.9K Mar 24 2008 AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Large.jpg
- lrwxrwxrwx 1 fozz fozz 191 Mar 24 2008 AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Small.jpg -> ../../../.git/annex/objects/ZZ/86/SHA256-s2067-- b870f34a1eee9fdfae8a488626b51d17f25f17788655fe8924d598109a95104a/SHA256-s2067--b870f34a1eee9fdfae8a488626b51d17f25f17788655fe8924d598109a95104a
- -rwxr-x---+ 1 fozz audio 2.1K Mar 24 2008 AlbumArtSmall.jpg
- -rwxr-x---+ 1 fozz audio 361 Mar 24 2008 desktop.ini
- lrwxrwxrwx 1 fozz fozz 191 Mar 24 2008 Folder.jpg -> ../../../.git/annex/objects/k7/xp/SHA256-s7024--8d5778605b211e0971824df9a970f16b38dee97a6a529f41113c31378ef83f3f/SHA256-s7024--8d5778605b211e0971824df9a970f16b38dee97a6a529f41113c31378ef83f3f
-
-The symlinks are now broken links
-
-
-"""]]
diff --git a/doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_2_647f49ffcaa348660659f9954a59b3ae._comment b/doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_2_647f49ffcaa348660659f9954a59b3ae._comment
deleted file mode 100644
index 041d700dd..000000000
--- a/doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_2_647f49ffcaa348660659f9954a59b3ae._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnRai_qFYPVvEgC6i1nlM1bh-C__jbhqS0"
- nickname="Matthew"
- subject="comment 2"
- date="2013-07-27T08:14:33Z"
- content="""
-Sorry, that was an unannex . not a uninit, which I used first briefly. Version information:
-
- git-annex version: 4.20130725-gd10dfef
- build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP
- local repository version: 3
- default repository version: 3
- supported repository versions: 3 4
- upgrade supported from repository versions: 0 1 2
-
-"""]]
diff --git a/doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_3_3f7f4b55b7ec2641a70109788e0b5672._comment b/doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_3_3f7f4b55b7ec2641a70109788e0b5672._comment
deleted file mode 100644
index 890e96fea..000000000
--- a/doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_3_3f7f4b55b7ec2641a70109788e0b5672._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.246.110"
- subject="comment 3"
- date="2013-07-27T23:51:38Z"
- content="""
-uninit does not do this. Nor does unannex --fast FWIW.
-
-
-"""]]
diff --git a/doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_4_313d393c416495aa0f8573113e41c2f7._comment b/doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_4_313d393c416495aa0f8573113e41c2f7._comment
deleted file mode 100644
index 0f691059d..000000000
--- a/doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_4_313d393c416495aa0f8573113e41c2f7._comment
+++ /dev/null
@@ -1,431 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnRai_qFYPVvEgC6i1nlM1bh-C__jbhqS0"
- nickname="Matthew"
- subject="Yes it does"
- date="2013-07-28T12:04:18Z"
- content="""
-I think it does, I just tested it with Ubuntu default version and the newest linux tarball on your site...
-
-See Log:
-
- fozz@cobol:~ $ cd /tmp
-
- fozz@cobol:/tmp $ tar -zxf ~/Downloads/git-annex-standalone-amd64.tar.gz
-
- fozz@cobol:/tmp $ export PATH=/tmp/git-annex.linux/:$PATH
-
- fozz@cobol:/tmp $ cp -R /mnt/store/Music/Jukebox/Markus\ Schulz/
- Amsterdam 08/ Progression/
- Do You Dream/ Thoughts Become Things II/
- June 2005 Promo Mix/ Track/
- Miami'05 Euro Trance/ Without You Near/
- Mysteryland 2007 Haarlemmermeermeer 25-08-2007/
-
- fozz@cobol:/tmp $ cp -R /mnt/store/Music/Jukebox/Markus\ Schulz/Miami\'05\ Euro\ Trance/ .
-
- fozz@cobol:/tmp $ cd Miami\'05\ Euro\ Trance/
-
- fozz@cobol:/tmp/Miami'05 Euro Trance $ ls -alh
- total 127M
- drwx------ 2 fozz fozz 4.0K Jul 28 12:52 .
- drwxrwxrwt 23 root root 4.0K Jul 28 12:52 ..
- -rwx------ 1 fozz fozz 13M Jul 28 12:52 01 - Hydroid Blue Tubes (Intro Mix).mp3
- -rwx------ 1 fozz fozz 9.8M Jul 28 12:52 02 - Interstate I Found U (Harry Lemon Remix).mp3
- -rwx------ 1 fozz fozz 15M Jul 28 12:52 03 - Kalafut & Fygle '3579 Km.mp3
- -rwx------ 1 fozz fozz 11M Jul 28 12:52 04 - Hammer & Bennett Baltic Sea.mp3
- -rwx------ 1 fozz fozz 11M Jul 28 12:52 05 - Fluid In Motion Soul Dimension.mp3
- -rwx------ 1 fozz fozz 12M Jul 28 12:52 06 - Keo Close Enough (Noel Sanger Mix).mp3
- -rwx------ 1 fozz fozz 9.4M Jul 28 12:52 08 - Lens Let The Light In.mp3
- -rwx------ 1 fozz fozz 11M Jul 28 12:52 09 - Aronek Free Yourself.mp3
- -rwx------ 1 fozz fozz 14M Jul 28 12:52 10 - Ava Mea In The End.mp3
- -rwx------ 1 fozz fozz 13M Jul 28 12:52 11 - Sean Walsh Pres- Jagermaestro Quarter Century.mp3
- -rwx------ 1 fozz fozz 12M Jul 28 12:52 12 - Max Graham Feat- Jessica Jacobs Gone.mp3
- -rwx------ 1 fozz fozz 6.9K Jul 28 12:52 AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Large.jpg
- -rwx------ 1 fozz fozz 2.1K Jul 28 12:52 AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Small.jpg
- -rwx------ 1 fozz fozz 2.1K Jul 28 12:52 AlbumArtSmall.jpg
- -rwx------ 1 fozz fozz 361 Jul 28 12:52 desktop.ini
- -rwx------ 1 fozz fozz 6.9K Jul 28 12:52 Folder.jpg
-
- fozz@cobol:/tmp/Miami'05 Euro Trance $ mkdir Files
-
- fozz@cobol:/tmp/Miami'05 Euro Trance $ mv * Files/
- mv: cannot move ‘Files’ to a subdirectory of itself, ‘Files/Files’
-
- fozz@cobol:/tmp/Miami'05 Euro Trance $ ls
- Files
-
- fozz@cobol:/tmp/Miami'05 Euro Trance $ git annex version
- git-annex version: 4.20130725-g8140f7c
- build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP
-
- fozz@cobol:/tmp/Miami'05 Euro Trance $ git init
- Initialised empty Git repository in /tmp/Miami'05 Euro Trance/.git/
-
- fozz@cobol:/tmp/Miami'05 Euro Trance $ git annex init TEST
- init TEST error: Malformed value for push.default: simple
- error: Must be one of nothing, matching, tracking or current.
- fatal: bad config file line 19 in /home/fozz/.gitconfig
- error: Malformed value for push.default: simple
- error: Must be one of nothing, matching, tracking or current.
- fatal: bad config file line 19 in /home/fozz/.gitconfig
- git-annex: failed to read sha from git write-tree
-
- fozz@cobol:/tmp/Miami'05 Euro Trance $ vim ~/.gitconfig
-
- fozz@cobol:/tmp/Miami'05 Euro Trance $ git annex init TEST
- init TEST ok
- (Recording state in git...)
-
- fozz@cobol:/tmp/Miami'05 Euro Trance $ git annex add .
- add Files/01 - Hydroid Blue Tubes (Intro Mix).mp3 (checksum...) ok
- add Files/02 - Interstate I Found U (Harry Lemon Remix).mp3 (checksum...) ok
- add Files/03 - Kalafut & Fygle '3579 Km.mp3 (checksum...) ok
- add Files/04 - Hammer & Bennett Baltic Sea.mp3 (checksum...) ok
- add Files/05 - Fluid In Motion Soul Dimension.mp3 (checksum...) ok
- add Files/06 - Keo Close Enough (Noel Sanger Mix).mp3 (checksum...) ok
- add Files/08 - Lens Let The Light In.mp3 (checksum...) ok
- add Files/09 - Aronek Free Yourself.mp3 (checksum...) ok
- add Files/10 - Ava Mea In The End.mp3 (checksum...) ok
- add Files/11 - Sean Walsh Pres- Jagermaestro Quarter Century.mp3 (checksum...) ok
- add Files/12 - Max Graham Feat- Jessica Jacobs Gone.mp3 (checksum...) ok
- add Files/AlbumArtSmall.jpg (checksum...) ok
- add Files/AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Large.jpg (checksum...) ok
- add Files/AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Small.jpg (checksum...) ok
- add Files/Folder.jpg (checksum...) ok
- add Files/desktop.ini (checksum...) ok
- (Recording state in git...)
-
- fozz@cobol:/tmp/Miami'05 Euro Trance $ ls
- Files
-
- fozz@cobol:/tmp/Miami'05 Euro Trance $ ls Files
- 01 - Hydroid Blue Tubes (Intro Mix).mp3
- 02 - Interstate I Found U (Harry Lemon Remix).mp3
- 03 - Kalafut & Fygle '3579 Km.mp3
- 04 - Hammer & Bennett Baltic Sea.mp3
- 05 - Fluid In Motion Soul Dimension.mp3
- 06 - Keo Close Enough (Noel Sanger Mix).mp3
- 08 - Lens Let The Light In.mp3
- 09 - Aronek Free Yourself.mp3
- 10 - Ava Mea In The End.mp3
- 11 - Sean Walsh Pres- Jagermaestro Quarter Century.mp3
- 12 - Max Graham Feat- Jessica Jacobs Gone.mp3
- AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Large.jpg
- AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Small.jpg
- AlbumArtSmall.jpg
- desktop.ini
- Folder.jpg
-
- fozz@cobol:/tmp/Miami'05 Euro Trance $ git annex uninit .
- fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
- Use '--' to separate paths from revisions
- git-annex: This command takes no parameters.
-
- fozz@cobol:/tmp/Miami'05 Euro Trance $ git annex uninit
- fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
- Use '--' to separate paths from revisions
- unannex Files/01 - Hydroid Blue Tubes (Intro Mix).mp3 ok
- unannex Files/02 - Interstate I Found U (Harry Lemon Remix).mp3 ok
- unannex Files/03 - Kalafut & Fygle '3579 Km.mp3 ok
- unannex Files/04 - Hammer & Bennett Baltic Sea.mp3 ok
- unannex Files/05 - Fluid In Motion Soul Dimension.mp3 ok
- unannex Files/06 - Keo Close Enough (Noel Sanger Mix).mp3 ok
- unannex Files/08 - Lens Let The Light In.mp3 ok
- unannex Files/09 - Aronek Free Yourself.mp3 ok
- unannex Files/10 - Ava Mea In The End.mp3 ok
- unannex Files/11 - Sean Walsh Pres- Jagermaestro Quarter Century.mp3 ok
- unannex Files/12 - Max Graham Feat- Jessica Jacobs Gone.mp3 ok
- unannex Files/AlbumArtSmall.jpg ok
- unannex Files/AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Large.jpg ok
- unannex Files/AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Small.jpg ok
- unannex Files/Folder.jpg ok
- unannex Files/desktop.ini ok
- Deleted branch git-annex (was 1b098e2).
-
- fozz@cobol:/tmp/Miami'05 Euro Trance $ ls
- Files
-
- fozz@cobol:/tmp/Miami'05 Euro Trance $ ls -alh Files
- total 127M
- drwxrwxr-x 2 fozz fozz 4.0K Jul 28 12:54 .
- drwx------ 4 fozz fozz 4.0K Jul 28 12:53 ..
- -rwx------ 1 fozz fozz 13M Jul 28 12:52 01 - Hydroid Blue Tubes (Intro Mix).mp3
- -rwx------ 1 fozz fozz 9.8M Jul 28 12:52 02 - Interstate I Found U (Harry Lemon Remix).mp3
- -rwx------ 1 fozz fozz 15M Jul 28 12:52 03 - Kalafut & Fygle '3579 Km.mp3
- -rwx------ 1 fozz fozz 11M Jul 28 12:52 04 - Hammer & Bennett Baltic Sea.mp3
- -rwx------ 1 fozz fozz 11M Jul 28 12:52 05 - Fluid In Motion Soul Dimension.mp3
- -rwx------ 1 fozz fozz 12M Jul 28 12:52 06 - Keo Close Enough (Noel Sanger Mix).mp3
- -rwx------ 1 fozz fozz 9.4M Jul 28 12:52 08 - Lens Let The Light In.mp3
- -rwx------ 1 fozz fozz 11M Jul 28 12:52 09 - Aronek Free Yourself.mp3
- -rwx------ 1 fozz fozz 14M Jul 28 12:52 10 - Ava Mea In The End.mp3
- -rwx------ 1 fozz fozz 13M Jul 28 12:52 11 - Sean Walsh Pres- Jagermaestro Quarter Century.mp3
- -rwx------ 1 fozz fozz 12M Jul 28 12:52 12 - Max Graham Feat- Jessica Jacobs Gone.mp3
- -rwx------ 2 fozz fozz 6.9K Jul 28 12:52 AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Large.jpg
- -rwx------ 2 fozz fozz 2.1K Jul 28 12:52 AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Small.jpg
- -rwx------ 2 fozz fozz 2.1K Jul 28 12:52 AlbumArtSmall.jpg
- -rwx------ 1 fozz fozz 361 Jul 28 12:52 desktop.ini
- -rwx------ 2 fozz fozz 6.9K Jul 28 12:52 Folder.jpg
-
- fozz@cobol:/tmp/Miami'05 Euro Trance $ ls
- Files
-
- fozz@cobol:/tmp/Miami'05 Euro Trance $ cd ../
-
- fozz@cobol:/tmp $ mkdir TEST2
-
- fozz@cobol:/tmp $ cd TEST2
-
- fozz@cobol:/tmp/TEST2 $ echo $PATH
- /tmp/git-annex.linux/:node_modules/.bin:node_modules/.bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/fozz/.scripts:/home/fozz/.bin:/sbin:/usr/sbin:/usr/local/sbin:/home/fozz/.scripts:/home/fozz/.bin:/sbin:/usr/sbin:/usr/local/sbin
-
- fozz@cobol:/tmp/TEST2 $ export PATH=node_modules/.bin:node_modules/.bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/fozz/.scripts:/home/fozz/.bin:/sbin:/usr/sbin:/usr/local/sbin:/home/fozz/.scripts:/home/fozz/.bin:/sbin:/usr/sbin:/usr/local/sbin
-
- fozz@cobol:/tmp/TEST2 $ git annex version
- git-annex version: 3.20121112ubuntu2
-
- fozz@cobol:/tmp/TEST2 $ cp -R /mnt/store/Music/Jukebox/Markus\ Schulz/Miami\'05\ Euro\ Trance/ .
-
- fozz@cobol:/tmp/TEST2 $ ls
- Miami'05 Euro Trance
-
- fozz@cobol:/tmp/TEST2 $ git init
- Initialised empty Git repository in /tmp/TEST2/.git/
-
- fozz@cobol:/tmp/TEST2 $ git annex init TEST2
- init TEST2 ok
- (Recording state in git...)
-
- fozz@cobol:/tmp/TEST2 $ git add .
-
- fozz@cobol:/tmp/TEST2 $ ls
- Miami'05 Euro Trance
-
- fozz@cobol:/tmp/TEST2 $ ls -alh Miami\'05\ Euro\ Trance/
- total 127M
- drwx------ 2 fozz fozz 4.0K Jul 28 12:56 .
- drwxrwxr-x 4 fozz fozz 4.0K Jul 28 12:56 ..
- -rwx------ 1 fozz fozz 13M Jul 28 12:56 01 - Hydroid Blue Tubes (Intro Mix).mp3
- -rwx------ 1 fozz fozz 9.8M Jul 28 12:56 02 - Interstate I Found U (Harry Lemon Remix).mp3
- -rwx------ 1 fozz fozz 15M Jul 28 12:56 03 - Kalafut & Fygle '3579 Km.mp3
- -rwx------ 1 fozz fozz 11M Jul 28 12:56 04 - Hammer & Bennett Baltic Sea.mp3
- -rwx------ 1 fozz fozz 11M Jul 28 12:56 05 - Fluid In Motion Soul Dimension.mp3
- -rwx------ 1 fozz fozz 12M Jul 28 12:56 06 - Keo Close Enough (Noel Sanger Mix).mp3
- -rwx------ 1 fozz fozz 9.4M Jul 28 12:56 08 - Lens Let The Light In.mp3
- -rwx------ 1 fozz fozz 11M Jul 28 12:56 09 - Aronek Free Yourself.mp3
- -rwx------ 1 fozz fozz 14M Jul 28 12:56 10 - Ava Mea In The End.mp3
- -rwx------ 1 fozz fozz 13M Jul 28 12:56 11 - Sean Walsh Pres- Jagermaestro Quarter Century.mp3
- -rwx------ 1 fozz fozz 12M Jul 28 12:56 12 - Max Graham Feat- Jessica Jacobs Gone.mp3
- -rwx------ 1 fozz fozz 6.9K Jul 28 12:56 AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Large.jpg
- -rwx------ 1 fozz fozz 2.1K Jul 28 12:56 AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Small.jpg
- -rwx------ 1 fozz fozz 2.1K Jul 28 12:56 AlbumArtSmall.jpg
- -rwx------ 1 fozz fozz 361 Jul 28 12:56 desktop.ini
- -rwx------ 1 fozz fozz 6.9K Jul 28 12:56 Folder.jpg
-
- fozz@cobol:/tmp/TEST2 $ cd ../
-
- fozz@cobol:/tmp $ mkdir TEST3
-
- fozz@cobol:/tmp $ cd TEST3
-
- fozz@cobol:/tmp/TEST3 $ cp -R /mnt/store/Music/Jukebox/Markus\ Schulz/Miami\'05\ Euro\ Trance/ .
-
- fozz@cobol:/tmp/TEST3 $ git init
- Initialised empty Git repository in /tmp/TEST3/.git/
-
- fozz@cobol:/tmp/TEST3 $ git annex init TEST3
- init TEST3 ok
- (Recording state in git...)
-
- fozz@cobol:/tmp/TEST3 $ git annex add .
- add Miami'05 Euro Trance/01 - Hydroid Blue Tubes (Intro Mix).mp3 (checksum...) ok
- add Miami'05 Euro Trance/02 - Interstate I Found U (Harry Lemon Remix).mp3 (checksum...) ok
- add Miami'05 Euro Trance/03 - Kalafut & Fygle '3579 Km.mp3 (checksum...) ok
- add Miami'05 Euro Trance/04 - Hammer & Bennett Baltic Sea.mp3 (checksum...) ok
- add Miami'05 Euro Trance/05 - Fluid In Motion Soul Dimension.mp3 (checksum...) ok
- add Miami'05 Euro Trance/06 - Keo Close Enough (Noel Sanger Mix).mp3 (checksum...) ok
- add Miami'05 Euro Trance/08 - Lens Let The Light In.mp3 (checksum...) ok
- add Miami'05 Euro Trance/09 - Aronek Free Yourself.mp3 (checksum...) ok
- add Miami'05 Euro Trance/10 - Ava Mea In The End.mp3 (checksum...) ok
- add Miami'05 Euro Trance/11 - Sean Walsh Pres- Jagermaestro Quarter Century.mp3 (checksum...) ok
- add Miami'05 Euro Trance/12 - Max Graham Feat- Jessica Jacobs Gone.mp3 (checksum...) ok
- add Miami'05 Euro Trance/AlbumArtSmall.jpg (checksum...) ok
- add Miami'05 Euro Trance/AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Large.jpg (checksum...) ok
- add Miami'05 Euro Trance/AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Small.jpg (checksum...) ok
- add Miami'05 Euro Trance/Folder.jpg (checksum...) ok
- add Miami'05 Euro Trance/desktop.ini (checksum...) ok
- (Recording state in git...)
-
- fozz@cobol:/tmp/TEST3 $ md5sum Miami\'05\ Euro\ Trance/*
- d764c06c5fc26f600842f4a9f2270696 Miami'05 Euro Trance/01 - Hydroid Blue Tubes (Intro Mix).mp3
- 79879d4343a159fb391bd7eef691be03 Miami'05 Euro Trance/02 - Interstate I Found U (Harry Lemon Remix).mp3
- cc440d6dfaa0f6ef736b51b972f91c8d Miami'05 Euro Trance/03 - Kalafut & Fygle '3579 Km.mp3
- ff0e52278bb69b2e8e44aa318e486ca7 Miami'05 Euro Trance/04 - Hammer & Bennett Baltic Sea.mp3
- 73ec88f2f09b825bef3d9b876e0fc876 Miami'05 Euro Trance/05 - Fluid In Motion Soul Dimension.mp3
- d7790cde98696eb7f5e6a8b1d6949e1d Miami'05 Euro Trance/06 - Keo Close Enough (Noel Sanger Mix).mp3
- 0734d432e0ae67155c4b0363d2336bfa Miami'05 Euro Trance/08 - Lens Let The Light In.mp3
- 527335f6b173e13dacfa66f458df1a29 Miami'05 Euro Trance/09 - Aronek Free Yourself.mp3
- b859ead1712e144a1e3fd64c1e36e493 Miami'05 Euro Trance/10 - Ava Mea In The End.mp3
- a7771b91fbe8f0593e5c6ac51ccba4d8 Miami'05 Euro Trance/11 - Sean Walsh Pres- Jagermaestro Quarter Century.mp3
- b167beaafe3fd95b06a1aa574affa355 Miami'05 Euro Trance/12 - Max Graham Feat- Jessica Jacobs Gone.mp3
- 900bb78b629eab30c16d565562b3880a Miami'05 Euro Trance/AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Large.jpg
- 9cfd8347becf87da8b1c5962e77267ad Miami'05 Euro Trance/AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Small.jpg
- 9cfd8347becf87da8b1c5962e77267ad Miami'05 Euro Trance/AlbumArtSmall.jpg
- 00e8488c206ad9a7ccb6d7f4bc66d05e Miami'05 Euro Trance/desktop.ini
- 900bb78b629eab30c16d565562b3880a Miami'05 Euro Trance/Folder.jpg
-
- fozz@cobol:/tmp/TEST3 $ git annex unadd .
- git-annex: Unknown command 'unadd'
-
- Did you mean one of these?
- unused
- unannex
- upgrade
-
-
- fozz@cobol:/tmp/TEST3 $ git annex unannex .
- unannex Miami'05 Euro Trance/01 - Hydroid Blue Tubes (Intro Mix).mp3 ok
- unannex Miami'05 Euro Trance/02 - Interstate I Found U (Harry Lemon Remix).mp3 ok
- unannex Miami'05 Euro Trance/03 - Kalafut & Fygle '3579 Km.mp3 ok
- unannex Miami'05 Euro Trance/04 - Hammer & Bennett Baltic Sea.mp3 ok
- unannex Miami'05 Euro Trance/05 - Fluid In Motion Soul Dimension.mp3 ok
- unannex Miami'05 Euro Trance/06 - Keo Close Enough (Noel Sanger Mix).mp3 ok
- unannex Miami'05 Euro Trance/08 - Lens Let The Light In.mp3 ok
- unannex Miami'05 Euro Trance/09 - Aronek Free Yourself.mp3 ok
- unannex Miami'05 Euro Trance/10 - Ava Mea In The End.mp3 ok
- unannex Miami'05 Euro Trance/11 - Sean Walsh Pres- Jagermaestro Quarter Century.mp3 ok
- unannex Miami'05 Euro Trance/12 - Max Graham Feat- Jessica Jacobs Gone.mp3 ok
- unannex Miami'05 Euro Trance/AlbumArtSmall.jpg ok
- unannex Miami'05 Euro Trance/AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Large.jpg ok
- unannex Miami'05 Euro Trance/desktop.ini ok
- (Recording state in git...)
-
- fozz@cobol:/tmp/TEST3 $ ls -alh
- total 16K
- drwxrwxr-x 4 fozz fozz 4.0K Jul 28 12:57 .
- drwxrwxrwt 25 root root 4.0K Jul 28 12:56 ..
- drwxrwxr-x 9 fozz fozz 4.0K Jul 28 12:57 .git
- drwx------ 2 fozz fozz 4.0K Jul 28 12:57 Miami'05 Euro Trance
-
- fozz@cobol:/tmp/TEST3 $ ls -alh Miami\'05\ Euro\ Trance/
- total 127M
- drwx------ 2 fozz fozz 4.0K Jul 28 12:57 .
- drwxrwxr-x 4 fozz fozz 4.0K Jul 28 12:57 ..
- -rwx------ 1 fozz fozz 13M Jul 28 12:56 01 - Hydroid Blue Tubes (Intro Mix).mp3
- -rwx------ 1 fozz fozz 9.8M Jul 28 12:56 02 - Interstate I Found U (Harry Lemon Remix).mp3
- -rwx------ 1 fozz fozz 15M Jul 28 12:56 03 - Kalafut & Fygle '3579 Km.mp3
- -rwx------ 1 fozz fozz 11M Jul 28 12:56 04 - Hammer & Bennett Baltic Sea.mp3
- -rwx------ 1 fozz fozz 11M Jul 28 12:56 05 - Fluid In Motion Soul Dimension.mp3
- -rwx------ 1 fozz fozz 12M Jul 28 12:56 06 - Keo Close Enough (Noel Sanger Mix).mp3
- -rwx------ 1 fozz fozz 9.4M Jul 28 12:56 08 - Lens Let The Light In.mp3
- -rwx------ 1 fozz fozz 11M Jul 28 12:56 09 - Aronek Free Yourself.mp3
- -rwx------ 1 fozz fozz 14M Jul 28 12:56 10 - Ava Mea In The End.mp3
- -rwx------ 1 fozz fozz 13M Jul 28 12:56 11 - Sean Walsh Pres- Jagermaestro Quarter Century.mp3
- -rwx------ 1 fozz fozz 12M Jul 28 12:56 12 - Max Graham Feat- Jessica Jacobs Gone.mp3
- -rwx------ 1 fozz fozz 6.9K Jul 28 12:56 AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Large.jpg
- lrwxrwxrwx 1 fozz fozz 195 Jul 28 12:56 AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Small.jpg -> ../.git/annex/objects/QF/JK/SHA256E-s2067--b870f34a1eee9fdfae8a488626b51d17f25f17788655fe8924d598109a95104a.jpg/SHA256E-s2067--b870f34a1eee9fdfae8a488626b51d17f25f17788655fe8924d598109a95104a.jpg
- -rwx------ 1 fozz fozz 2.1K Jul 28 12:56 AlbumArtSmall.jpg
- -rwx------ 1 fozz fozz 361 Jul 28 12:56 desktop.ini
- lrwxrwxrwx 1 fozz fozz 195 Jul 28 12:56 Folder.jpg -> ../.git/annex/objects/1f/Xk/SHA256E-s7024--8d5778605b211e0971824df9a970f16b38dee97a6a529f41113c31378ef83f3f.jpg/SHA256E-s7024--8d5778605b211e0971824df9a970f16b38dee97a6a529f41113c31378ef83f3f.jpg
-
- fozz@cobol:/tmp/TEST3 $ cd ../
-
- fozz@cobol:/tmp $ mkdir TEST4
-
- fozz@cobol:/tmp $ cd TEST4
-
- fozz@cobol:/tmp/TEST4 $ export PATH=/tmp/git-annex.linux/:$PATH
-
- fozz@cobol:/tmp/TEST4 $ git annex version
- git-annex version: 4.20130725-g8140f7c
- build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP
-
- fozz@cobol:/tmp/TEST4 $ cp -R /mnt/store/Music/Jukebox/Markus\ Schulz/Miami\'05\ Euro\ Trance/ .
-
- fozz@cobol:/tmp/TEST4 $ git init
- Initialised empty Git repository in /tmp/TEST4/.git/
-
- fozz@cobol:/tmp/TEST4 $ git annex init TEST4
- init TEST4 ok
- (Recording state in git...)
-
- fozz@cobol:/tmp/TEST4 $ git annex add .
- add Miami'05 Euro Trance/01 - Hydroid Blue Tubes (Intro Mix).mp3 (checksum...) ok
- add Miami'05 Euro Trance/02 - Interstate I Found U (Harry Lemon Remix).mp3 (checksum...) ok
- add Miami'05 Euro Trance/03 - Kalafut & Fygle '3579 Km.mp3 (checksum...) ok
- add Miami'05 Euro Trance/04 - Hammer & Bennett Baltic Sea.mp3 (checksum...) ok
- add Miami'05 Euro Trance/05 - Fluid In Motion Soul Dimension.mp3 (checksum...) ok
- add Miami'05 Euro Trance/06 - Keo Close Enough (Noel Sanger Mix).mp3 (checksum...) ok
- add Miami'05 Euro Trance/08 - Lens Let The Light In.mp3 (checksum...) ok
- add Miami'05 Euro Trance/09 - Aronek Free Yourself.mp3 (checksum...) ok
- add Miami'05 Euro Trance/10 - Ava Mea In The End.mp3 (checksum...) ok
- add Miami'05 Euro Trance/11 - Sean Walsh Pres- Jagermaestro Quarter Century.mp3 (checksum...) ok
- add Miami'05 Euro Trance/12 - Max Graham Feat- Jessica Jacobs Gone.mp3 (checksum...) ok
- add Miami'05 Euro Trance/AlbumArtSmall.jpg (checksum...) ok
- add Miami'05 Euro Trance/AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Large.jpg (checksum...) ok
- add Miami'05 Euro Trance/AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Small.jpg (checksum...) ok
- add Miami'05 Euro Trance/Folder.jpg (checksum...) ok
- add Miami'05 Euro Trance/desktop.ini (checksum...) ok
- (Recording state in git...)
-
- fozz@cobol:/tmp/TEST4 $ ls -alh Miami\'05\ Euro\ Trance/
- total 72K
- drwx------ 2 fozz fozz 4.0K Jul 28 12:59 .
- drwxrwxr-x 4 fozz fozz 4.0K Jul 28 12:59 ..
- lrwxrwxrwx 1 fozz fozz 203 Jul 28 12:59 01 - Hydroid Blue Tubes (Intro Mix).mp3 -> ../.git/annex/objects/6k/g1/SHA256E-s13016103--3eb29d6f0a529ccb2717b6e2b108c8adb681c47430bdcd45526279fabcfd1be4.mp3/SHA256E-s13016103--3eb29d6f0a529ccb2717b6e2b108c8adb681c47430bdcd45526279fabcfd1be4.mp3
- lrwxrwxrwx 1 fozz fozz 203 Jul 28 12:59 02 - Interstate I Found U (Harry Lemon Remix).mp3 -> ../.git/annex/objects/5X/5J/SHA256E-s10172374--12a9af95efbb5c4928b1ce0750eb25b85b2889a74798cac24165be5b0a085e38.mp3/SHA256E-s10172374--12a9af95efbb5c4928b1ce0750eb25b85b2889a74798cac24165be5b0a085e38.mp3
- lrwxrwxrwx 1 fozz fozz 203 Jul 28 12:59 03 - Kalafut & Fygle '3579 Km.mp3 -> ../.git/annex/objects/6g/FX/SHA256E-s15400659--adce5bdcc75242c3e996dcac7df309fcd2cc32fd5ed04ddcfbbf3c82147de85d.mp3/SHA256E-s15400659--adce5bdcc75242c3e996dcac7df309fcd2cc32fd5ed04ddcfbbf3c82147de85d.mp3
- lrwxrwxrwx 1 fozz fozz 203 Jul 28 12:59 04 - Hammer & Bennett Baltic Sea.mp3 -> ../.git/annex/objects/jV/z0/SHA256E-s10980459--d1ea5664b2c093dcf964f02760a76e8b23b4cadbd7d9e372281f1888b6813c95.mp3/SHA256E-s10980459--d1ea5664b2c093dcf964f02760a76e8b23b4cadbd7d9e372281f1888b6813c95.mp3
- lrwxrwxrwx 1 fozz fozz 203 Jul 28 12:59 05 - Fluid In Motion Soul Dimension.mp3 -> ../.git/annex/objects/q4/5m/SHA256E-s10850525--250366b97e4383fdcc34ffdfa4f5d4231471da4beb600e16c7fb994341241b94.mp3/SHA256E-s10850525--250366b97e4383fdcc34ffdfa4f5d4231471da4beb600e16c7fb994341241b94.mp3
- lrwxrwxrwx 1 fozz fozz 203 Jul 28 12:59 06 - Keo Close Enough (Noel Sanger Mix).mp3 -> ../.git/annex/objects/mW/kF/SHA256E-s11686327--b6fd86d3db9b3ea47338c968f8ba00e8ed263f4c6d17ae148f25802edfc0d743.mp3/SHA256E-s11686327--b6fd86d3db9b3ea47338c968f8ba00e8ed263f4c6d17ae148f25802edfc0d743.mp3
- lrwxrwxrwx 1 fozz fozz 201 Jul 28 12:59 08 - Lens Let The Light In.mp3 -> ../.git/annex/objects/Mx/Wv/SHA256E-s9854587--29c1bf00c9bf9076770a1be5c6d697f50a606ad4fcd4a2ada638a12984b38137.mp3/SHA256E-s9854587--29c1bf00c9bf9076770a1be5c6d697f50a606ad4fcd4a2ada638a12984b38137.mp3
- lrwxrwxrwx 1 fozz fozz 203 Jul 28 12:59 09 - Aronek Free Yourself.mp3 -> ../.git/annex/objects/6j/X5/SHA256E-s11110678--9b4744767261bc373c310d423dbd8eeebe8bf88355d88229a5ff1e7036fa845b.mp3/SHA256E-s11110678--9b4744767261bc373c310d423dbd8eeebe8bf88355d88229a5ff1e7036fa845b.mp3
- lrwxrwxrwx 1 fozz fozz 203 Jul 28 12:59 10 - Ava Mea In The End.mp3 -> ../.git/annex/objects/gf/5w/SHA256E-s14527761--ee711177de4d2d3375edf6d1b25c5b0adcb22c16b89dc0ed1bcca5e65e9d916b.mp3/SHA256E-s14527761--ee711177de4d2d3375edf6d1b25c5b0adcb22c16b89dc0ed1bcca5e65e9d916b.mp3
- lrwxrwxrwx 1 fozz fozz 203 Jul 28 12:59 11 - Sean Walsh Pres- Jagermaestro Quarter Century.mp3 -> ../.git/annex/objects/g7/j8/SHA256E-s12639172--1e348a80570a09d0df8ea5c1ca66743529b6c79b358aae8a661f536a6c6fd412.mp3/SHA256E-s12639172--1e348a80570a09d0df8ea5c1ca66743529b6c79b358aae8a661f536a6c6fd412.mp3
- lrwxrwxrwx 1 fozz fozz 203 Jul 28 12:59 12 - Max Graham Feat- Jessica Jacobs Gone.mp3 -> ../.git/annex/objects/0g/g7/SHA256E-s12031267--85094321ce9f272935bcf370d7a6fb9d4f8d3f02d0dffaa30edcf7199b3b1929.mp3/SHA256E-s12031267--85094321ce9f272935bcf370d7a6fb9d4f8d3f02d0dffaa30edcf7199b3b1929.mp3
- lrwxrwxrwx 1 fozz fozz 195 Jul 28 12:59 AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Large.jpg -> ../.git/annex/objects/1f/Xk/SHA256E-s7024--8d5778605b211e0971824df9a970f16b38dee97a6a529f41113c31378ef83f3f.jpg/SHA256E-s7024--8d5778605b211e0971824df9a970f16b38dee97a6a529f41113c31378ef83f3f.jpg
- lrwxrwxrwx 1 fozz fozz 195 Jul 28 12:59 AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Small.jpg -> ../.git/annex/objects/QF/JK/SHA256E-s2067--b870f34a1eee9fdfae8a488626b51d17f25f17788655fe8924d598109a95104a.jpg/SHA256E-s2067--b870f34a1eee9fdfae8a488626b51d17f25f17788655fe8924d598109a95104a.jpg
- lrwxrwxrwx 1 fozz fozz 195 Jul 28 12:59 AlbumArtSmall.jpg -> ../.git/annex/objects/QF/JK/SHA256E-s2067--b870f34a1eee9fdfae8a488626b51d17f25f17788655fe8924d598109a95104a.jpg/SHA256E-s2067--b870f34a1eee9fdfae8a488626b51d17f25f17788655fe8924d598109a95104a.jpg
- lrwxrwxrwx 1 fozz fozz 193 Jul 28 12:59 desktop.ini -> ../.git/annex/objects/Kk/Fj/SHA256E-s361--9762858358f71b43e0dc89f54cf53342ec1c626ee17922b80fa4f981d0bc3a1b.ini/SHA256E-s361--9762858358f71b43e0dc89f54cf53342ec1c626ee17922b80fa4f981d0bc3a1b.ini
- lrwxrwxrwx 1 fozz fozz 195 Jul 28 12:59 Folder.jpg -> ../.git/annex/objects/1f/Xk/SHA256E-s7024--8d5778605b211e0971824df9a970f16b38dee97a6a529f41113c31378ef83f3f.jpg/SHA256E-s7024--8d5778605b211e0971824df9a970f16b38dee97a6a529f41113c31378ef83f3f.jpg
-
- fozz@cobol:/tmp/TEST4 $ git annex unannex .
- unannex Miami'05 Euro Trance/01 - Hydroid Blue Tubes (Intro Mix).mp3 ok
- unannex Miami'05 Euro Trance/02 - Interstate I Found U (Harry Lemon Remix).mp3 ok
- unannex Miami'05 Euro Trance/03 - Kalafut & Fygle '3579 Km.mp3 ok
- unannex Miami'05 Euro Trance/04 - Hammer & Bennett Baltic Sea.mp3 ok
- unannex Miami'05 Euro Trance/05 - Fluid In Motion Soul Dimension.mp3 ok
- unannex Miami'05 Euro Trance/06 - Keo Close Enough (Noel Sanger Mix).mp3 ok
- unannex Miami'05 Euro Trance/08 - Lens Let The Light In.mp3 ok
- unannex Miami'05 Euro Trance/09 - Aronek Free Yourself.mp3 ok
- unannex Miami'05 Euro Trance/10 - Ava Mea In The End.mp3 ok
- unannex Miami'05 Euro Trance/11 - Sean Walsh Pres- Jagermaestro Quarter Century.mp3 ok
- unannex Miami'05 Euro Trance/12 - Max Graham Feat- Jessica Jacobs Gone.mp3 ok
- unannex Miami'05 Euro Trance/AlbumArtSmall.jpg ok
- unannex Miami'05 Euro Trance/AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Large.jpg ok
- unannex Miami'05 Euro Trance/desktop.ini ok
- (Recording state in git...)
-
- fozz@cobol:/tmp/TEST4 $ ls -alh Miami\'05\ Euro\ Trance/
- total 127M
- drwx------ 2 fozz fozz 4.0K Jul 28 13:00 .
- drwxrwxr-x 4 fozz fozz 4.0K Jul 28 12:59 ..
- -rwx------ 1 fozz fozz 13M Jul 28 12:59 01 - Hydroid Blue Tubes (Intro Mix).mp3
- -rwx------ 1 fozz fozz 9.8M Jul 28 12:59 02 - Interstate I Found U (Harry Lemon Remix).mp3
- -rwx------ 1 fozz fozz 15M Jul 28 12:59 03 - Kalafut & Fygle '3579 Km.mp3
- -rwx------ 1 fozz fozz 11M Jul 28 12:59 04 - Hammer & Bennett Baltic Sea.mp3
- -rwx------ 1 fozz fozz 11M Jul 28 12:59 05 - Fluid In Motion Soul Dimension.mp3
- -rwx------ 1 fozz fozz 12M Jul 28 12:59 06 - Keo Close Enough (Noel Sanger Mix).mp3
- -rwx------ 1 fozz fozz 9.4M Jul 28 12:59 08 - Lens Let The Light In.mp3
- -rwx------ 1 fozz fozz 11M Jul 28 12:59 09 - Aronek Free Yourself.mp3
- -rwx------ 1 fozz fozz 14M Jul 28 12:59 10 - Ava Mea In The End.mp3
- -rwx------ 1 fozz fozz 13M Jul 28 12:59 11 - Sean Walsh Pres- Jagermaestro Quarter Century.mp3
- -rwx------ 1 fozz fozz 12M Jul 28 12:59 12 - Max Graham Feat- Jessica Jacobs Gone.mp3
- -rwx------ 1 fozz fozz 6.9K Jul 28 12:59 AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Large.jpg
- lrwxrwxrwx 1 fozz fozz 195 Jul 28 12:59 AlbumArt_{85E86538-46E1-412C-9D94-A67FC108ED97}_Small.jpg -> ../.git/annex/objects/QF/JK/SHA256E-s2067--b870f34a1eee9fdfae8a488626b51d17f25f17788655fe8924d598109a95104a.jpg/SHA256E-s2067--b870f34a1eee9fdfae8a488626b51d17f25f17788655fe8924d598109a95104a.jpg
- -rwx------ 1 fozz fozz 2.1K Jul 28 12:59 AlbumArtSmall.jpg
- -rwx------ 1 fozz fozz 361 Jul 28 12:59 desktop.ini
- lrwxrwxrwx 1 fozz fozz 195 Jul 28 12:59 Folder.jpg -> ../.git/annex/objects/1f/Xk/SHA256E-s7024--8d5778605b211e0971824df9a970f16b38dee97a6a529f41113c31378ef83f3f.jpg/SHA256E-s7024--8d5778605b211e0971824df9a970f16b38dee97a6a529f41113c31378ef83f3f.jpg
-
-Obviously the remaining symlinks in TEST3 and TEST4 are now broken and show up red on my terminal.
-
-"""]]
diff --git a/doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_5_c0e7742672db2629bd906cebefe74f72._comment b/doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_5_c0e7742672db2629bd906cebefe74f72._comment
deleted file mode 100644
index 4b6ae9349..000000000
--- a/doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_5_c0e7742672db2629bd906cebefe74f72._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.21"
- subject="comment 5"
- date="2013-07-30T18:39:58Z"
- content="""
-Your transcript shows unannex without --fast having the problem, and uninit not having the problem. Which is just what I said. Although I had to spend 15 minutes reading and replicating your transcript to figure that out.
-
-This has been previously reported and discussed at [[Large_unannex_operations_result_in_stale_symlinks_and_data_loss]]. There does not seem to be a single entirely satesfactory solution. unannex --fast seems to be what you're looking for.
-"""]]
diff --git a/doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_6_c56171665db3ed14109a09097d49ac5d._comment b/doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_6_c56171665db3ed14109a09097d49ac5d._comment
deleted file mode 100644
index 692813fbd..000000000
--- a/doc/bugs/unannex_removes_object_even_if_referred_to_by_others/comment_6_c56171665db3ed14109a09097d49ac5d._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnRai_qFYPVvEgC6i1nlM1bh-C__jbhqS0"
- nickname="Matthew"
- subject="comment 6"
- date="2013-07-30T19:01:31Z"
- content="""
-You're right, sorry, I missed the \"--fast\", I'd spent all morning replicating the n~ bug on my phone and recovering from unannex wasn't a short job either.
-"""]]
diff --git a/doc/bugs/unannex_vs_unlock_hook_confusion.mdwn b/doc/bugs/unannex_vs_unlock_hook_confusion.mdwn
deleted file mode 100644
index c03990c20..000000000
--- a/doc/bugs/unannex_vs_unlock_hook_confusion.mdwn
+++ /dev/null
@@ -1,15 +0,0 @@
-See [[forum/unannex_alternatives]] for problem description.
-
-If an unannex is followed by a "git add; git commit", git-annex's hook thinks
-that you have used git annex unlock on the file and are
-now committing a changed version, and the right thing to do there is to add the
-new content to the annex and update the symlink accordingly.
-
-Can we tell the difference between an unannexed file that has yet to be committed
-and has been re-added as a normal file, vs an unlocked file? --[[Joey||
-
-> Hmm, not really. An unannexed file's content will have been dropped from
-> the backend, but that's about the only difference. Perhaps unannex should
-> just commit the removal of the file itself? --[[Joey]]
-
-> [[done]], staged changes committed at end.
diff --git a/doc/bugs/unfinished_repos_in_webapp.mdwn b/doc/bugs/unfinished_repos_in_webapp.mdwn
deleted file mode 100644
index b3e667c61..000000000
--- a/doc/bugs/unfinished_repos_in_webapp.mdwn
+++ /dev/null
@@ -1,31 +0,0 @@
-### Please describe the problem.
-
-Hi, all excited that the new release fixes the unknown UUID issue in the Webapp I hurridly installed the latest versions.
-
-Some progress in that the webapp now reports my missing/non-existent repo as an "unfinished repository" in the process of being setup. I see a check status box that when clicked says "in progress please be patient". Also I see the ssh config has changed to use IdentitiesOnly option.
-
-I had a go a deleting details via git-annex vicfg and directly editing the git-annex branch log files as detailed [here](http://git-annex.branchable.com/forum/Reappearing_repos_in_webapp_and_vicfg/). But still no joy.
-
-Any hints on what to do? Nothing in the log seems to help...
-
-### What steps will reproduce the problem?
-
-Not sure anymore.
-
-### What version of git-annex are you using? On what operating system?
-
-Latest.
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> This seems to be [[done]], at least the bug reporter didn't feel the need
-> to follow up with the info I asked for and says the problem does not
-> affect him. --[[Joey]]
diff --git a/doc/bugs/unfinished_repos_in_webapp/comment_1_9628b100e39489be9f28ef75276a7341._comment b/doc/bugs/unfinished_repos_in_webapp/comment_1_9628b100e39489be9f28ef75276a7341._comment
deleted file mode 100644
index e17c1b899..000000000
--- a/doc/bugs/unfinished_repos_in_webapp/comment_1_9628b100e39489be9f28ef75276a7341._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="2001:4978:f:21a::2"
- subject="comment 1"
- date="2013-08-07T16:07:56Z"
- content="""
-It seems to me that it has already finished applying the workaround. That IdentitiesOnly change could only be made
-if you clicked on a Retry button once it detected a problem.
-
-You may be experiencing a different problem that it cannot recover from. Paste your .git/config file.
-"""]]
diff --git a/doc/bugs/unfinished_repos_in_webapp/comment_2_ba0fbff536b1d067c4098db401dc49f2._comment b/doc/bugs/unfinished_repos_in_webapp/comment_2_ba0fbff536b1d067c4098db401dc49f2._comment
deleted file mode 100644
index 8170a0175..000000000
--- a/doc/bugs/unfinished_repos_in_webapp/comment_2_ba0fbff536b1d067c4098db401dc49f2._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnXybLxkPMYpP3yw4b_I6IdC3cKTD-xEdU"
- nickname="Matt"
- subject="comment 2"
- date="2013-08-08T08:33:32Z"
- content="""
-Hi, I've sorted this now. The IP address of my laptop had changed on the local network. Fixing it then let the new fix fully work and the in-progress status of the bad repo went away.
-
-Is it right that in the UI I don't see the local LAN configured branch (which I setup for speed) - it all seems to come under the jabber account now and makes an appropriate choice?
-"""]]
diff --git a/doc/bugs/unfinished_repos_in_webapp/comment_3_fd554aa7d93117177784a29270ccf790._comment b/doc/bugs/unfinished_repos_in_webapp/comment_3_fd554aa7d93117177784a29270ccf790._comment
deleted file mode 100644
index cd21af092..000000000
--- a/doc/bugs/unfinished_repos_in_webapp/comment_3_fd554aa7d93117177784a29270ccf790._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawniayrgSdVLUc3c6bf93VbO-_HT4hzxmyo"
- nickname="Tobias"
- subject="comment 3"
- date="2013-08-08T12:22:28Z"
- content="""
-I also see `unfinished repository` in the assistant, but only at git remotes which don't have git-annex installed (f.e. gitlab). annex-ignore is set to true: `git config remote.gitlab.annex-ignore true`.
-
-Clicking on `check status` says `Setting up this repository seems to have stalled! Make sure the remote system is available and retry`
-
-git-annex version: 4.20130802-g1452ac3
-"""]]
diff --git a/doc/bugs/unhappy_without_UTF8_locale.mdwn b/doc/bugs/unhappy_without_UTF8_locale.mdwn
deleted file mode 100644
index 8d22b9ee4..000000000
--- a/doc/bugs/unhappy_without_UTF8_locale.mdwn
+++ /dev/null
@@ -1,41 +0,0 @@
-Try unsetting LANG and passing git-annex unicode filenames.
-
- joey@gnu:~/tmp/aa>git annex add ./Üa
- add add add add git-annex: <stdout>: commitAndReleaseBuffer: invalid
- argument (Invalid or incomplete multibyte or wide character)
-
-> Interestingly, I can get the same crash in the de_DE.UTF-8 locale
-> with certian input filenames, while in en_US.UTF-8, it's ok.
-> The workaround below avoided the problem in de_DE.UTF-8. --[[Joey]]
-
-> Put in the utf-8 forcing workaround for now. [[done]] --[[Joey]]
-
-## underlying haskell problem and workaround
-
-The same problem can be seen with a simple haskell program:
-
- import System.Environment
- import Codec.Binary.UTF8.String
- main = do
- args <- getArgs
- putStrLn $ decodeString $ args !! 0
-
- joey@gnu:~/src/git-annex>LANG= runghc ~/foo.hs Ü
- foo.hs: <stdout>: hPutChar: invalid argument (Invalid or incomplete multibyte or wide character)
-
-(The call to `decodeString` is necessary to make the input
-unicode string be displayed properly in a utf8 locale, but
-does not contribute to this problem.)
-
-I guess that haskell is setting the IO encoding to latin1, which
-is [documented](http://haskell.org/ghc/docs/latest/html/libraries/base/System-IO.html#v:latin1)
-to error out on characters > 255.
-
-So this program doesn't have the problem -- but may output garbage
-on non-utf-8 capable terminals:
-
- import System.IO
- main = do
- hSetEncoding stdout utf8
- args <- getArgs
- putStrLn $ decodeString $ args !! 0
diff --git a/doc/bugs/uninit_and_indirect_don__39__t_work_on_android.mdwn b/doc/bugs/uninit_and_indirect_don__39__t_work_on_android.mdwn
deleted file mode 100644
index b3a2ba37c..000000000
--- a/doc/bugs/uninit_and_indirect_don__39__t_work_on_android.mdwn
+++ /dev/null
@@ -1,23 +0,0 @@
-### Please describe the problem.
-I am unable to restore a git-annex dir to its pre init state.
-
-### What steps will reproduce the problem?
-init a git-annex dir on android with a file system with out symlinks.
-use for a while.
-Run: "git-annex uninit" -> You cannot run this command in a direct mode repository.
-Run: "git-annex indirect" -> Git is configured to not use symlinks, so you must use direct mode.
-
-### What version of git-annex are you using? On what operating system?
-git-annex version: 4.20130601-g7483ca4
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> [[done]]; added support for direct mode --[[Joey]]
diff --git a/doc/bugs/uninit_and_indirect_don__39__t_work_on_android/comment_1_fec69c4c41987b9469eaa8f745c0a124._comment b/doc/bugs/uninit_and_indirect_don__39__t_work_on_android/comment_1_fec69c4c41987b9469eaa8f745c0a124._comment
deleted file mode 100644
index e310c1afd..000000000
--- a/doc/bugs/uninit_and_indirect_don__39__t_work_on_android/comment_1_fec69c4c41987b9469eaa8f745c0a124._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.140"
- subject="comment 1"
- date="2013-07-20T23:20:48Z"
- content="""
-There's no way to make indirect mode work on a filesystem w/o symlinks, but it should be possible to make unannex (required for uninit) work in direct mode. Just has not been done yet.
-"""]]
diff --git a/doc/bugs/uninit_and_indirect_don__39__t_work_on_android/comment_2_54c3fa77a069b36d03c41aad08fee9af._comment b/doc/bugs/uninit_and_indirect_don__39__t_work_on_android/comment_2_54c3fa77a069b36d03c41aad08fee9af._comment
deleted file mode 100644
index ad6d65191..000000000
--- a/doc/bugs/uninit_and_indirect_don__39__t_work_on_android/comment_2_54c3fa77a069b36d03c41aad08fee9af._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm_cen0223TLcWCTPwCPecCQC5JxGnPO04"
- nickname="Eric"
- subject="comment 2"
- date="2013-07-20T23:26:23Z"
- content="""
-unannex an uninit are the main thing, so that people have an exit strategy for git-annex on android.
-"""]]
diff --git a/doc/bugs/uninit_does_not_abort_when_hard_link_creation_fails.mdwn b/doc/bugs/uninit_does_not_abort_when_hard_link_creation_fails.mdwn
deleted file mode 100644
index 2d98929ab..000000000
--- a/doc/bugs/uninit_does_not_abort_when_hard_link_creation_fails.mdwn
+++ /dev/null
@@ -1,47 +0,0 @@
-> What steps will reproduce the problem?
-
-Issue the following commands on a file system where hard links are disabled:
-
- $ touch foo
-
- $ ln foo bar # just to check that hard links are disabled
- ln: failed to create hard link `bar' => `foo': Operation not permitted
-
- $ git init && git annex init
-
- $ git annex add .
-
- $ git annex uninit
- unannex foo
- git-annex: [...]: createLink: permission denied (Operation not permitted)
- failed
- Deleted branch git-annex [...].
-
- $ echo $? # exit status of last command
- 0
-
- $ ls foo
- ls: cannot access foo: No such file or directory
-
-
-> What is the expected output? What do you see instead?
-
-`git annex uninit` should abort and exit with a non-`0` return code. Instead, `git annex uninit` cleans up git-annex objects and exits with return code `0`.
-
-
-> What version of git-annex are you using? On what operating system?
-
-3.20120406 on Ubuntu 12.04.1.
-
-
-> Please provide any additional information below.
-
-git-annex should probably not be used on a file system where hard links are disabled.
-
-However, if the user is not aware that he's using git-annex on such a filesystem, he will accidently delete his annexed files by issuing a `git annex uninit` command.
-
-> git-annex needs a POSIX filesystem, which includes the ability to create
-> hard links. The `git annex add` in the example above will fail
-> trying to create a hard link with current versions.
->
-> I've made uninit fall back to a non-hard link mode. [[done]] --[[Joey]]
diff --git a/doc/bugs/uninit_does_not_work_in_old_repos.mdwn b/doc/bugs/uninit_does_not_work_in_old_repos.mdwn
deleted file mode 100644
index d3df06148..000000000
--- a/doc/bugs/uninit_does_not_work_in_old_repos.mdwn
+++ /dev/null
@@ -1,20 +0,0 @@
-As uninit does not need to actually write out any data, just remove it, it should be possible to uninit in old stores.
-
- % git annex uninit
- git-annex: Repository version 2 is not supported. Upgrade this repository: git-annex upgrade
-
-If the repo happens to be broken, this essentially locks in data.
-
-> No, because you can always check out the version of git-annex you need
-> for that repository.
->
-> uninit, as implemented, runs unannex on every file and then does some
-> cleanup. The cleanup does not need to write state, but the unannex does.
-> And it depends on the object directory layout, which has changed between
-> versions. So supporting old versions in this code would complicate it
-> quite a lot. I don't want to go there. --[[Joey]]
-
->>Requiring a version upgrade for unannex is fine. Yet, I see a problem when a git repo is broken; you are stuck without being able to uninit. In this case an uninit that does nothing but undo the symlinking would be useful. -- Richard
-
->>> As I said, version 2 of git-annex is still there for people who need
->>> it for whatever reason. [[done]] --[[Joey]]
diff --git a/doc/bugs/uninit_does_not_work_in_old_repos/comment_1_bc0619c6e17139df74639448aa6a0f72._comment b/doc/bugs/uninit_does_not_work_in_old_repos/comment_1_bc0619c6e17139df74639448aa6a0f72._comment
deleted file mode 100644
index 7a1ea582b..000000000
--- a/doc/bugs/uninit_does_not_work_in_old_repos/comment_1_bc0619c6e17139df74639448aa6a0f72._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 1"
- date="2011-10-29T15:30:09Z"
- content="""
-After upgrading the repo, I still have to commit the changes, else git-annex won't let me uninit. Arguably a Good Thing, but I wanted to document it here.
-"""]]
diff --git a/doc/bugs/uninit_loses_data_if_git-annex_add_didn__39__t_complete.mdwn b/doc/bugs/uninit_loses_data_if_git-annex_add_didn__39__t_complete.mdwn
deleted file mode 100644
index 61cfa89a5..000000000
--- a/doc/bugs/uninit_loses_data_if_git-annex_add_didn__39__t_complete.mdwn
+++ /dev/null
@@ -1,15 +0,0 @@
-* Create a git-annex repo where a lot of files live.
-* Start an annex add.
-* Kill it.
-* git-annex uninit
-
-Now, whatever files were annexed (ie: moved to .git/annex/objects/) but not committed are lost as the .git/annex directory was deleted.
-
-I know there are two conflicting issues here:
-
-1. if there is legitimately unused data in .git/annex then that shouldn't be unannexed
-2. the above case where some files were annexed but not committed should be unannexed
-
-Maybe uninit could check to see if all symlinks currently in the repo pointing to something under .git/annex/objects are committed. If not, commit them then uninit, or just de-annex them.
-
-> Added a check for this, [[done]] --[[Joey]]
diff --git a/doc/bugs/uninit_should_not_run_when_branch_git-annex_is_checked_out.mdwn b/doc/bugs/uninit_should_not_run_when_branch_git-annex_is_checked_out.mdwn
deleted file mode 100644
index e4e407ec8..000000000
--- a/doc/bugs/uninit_should_not_run_when_branch_git-annex_is_checked_out.mdwn
+++ /dev/null
@@ -1,15 +0,0 @@
-Running `git annex uninit` in a repo which has branch git-annex checked out will result in:
-
- error: Cannot delete the branch 'git-annex' which you are currently on.
- git-annex: git [Param "-D",Param "git-annex"] failed
-
-and trying to checkout branch master afterwards results in:
-
- error: The following untracked working tree files would be overwritten by checkout:
-
-Both of which is logical. The best thing would be if git-annex refused to run uninit while in branch git-annex.
-
-
-Richard
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/unlock_fails_silently_with_directory_symlinks.mdwn b/doc/bugs/unlock_fails_silently_with_directory_symlinks.mdwn
deleted file mode 100644
index 9b9bb6342..000000000
--- a/doc/bugs/unlock_fails_silently_with_directory_symlinks.mdwn
+++ /dev/null
@@ -1,53 +0,0 @@
-What steps will reproduce the problem?
-
-+ ```~/``` is tracked by git and git annex
-+ ```~/text/books/foo``` is annexed
-+ ```~/books``` is a symlink to ```text/books```
-+ from ```~/``` execute: ```git annex unlock books/foo```
-+ which returns immediately with zero exit code and does not unlock foo.
-
-What is the expected output? What do you see instead?
-
-+ I expect ```~/text/books/foo`` to be unlocked
-
-+ I think ```git annex unlock``` should resolve the symlinks and realize that this is a tracked file.
-
-What version of git-annex are you using? On what operating system?
-
-+ 3.20121112 in debian unstable
-
-Please provide any additional information below.
-
-+ I can unlock foo if I provide the full path, eg:
-from ```~/``` execute: ```git annex unlock text/books/foo```
-
-+ Interestingly, the following _does_ successfully unlock the file: ```cd ~/books && git annex unlock foo```
-
- So it seems that symlinks in $PWD are being resolved, but not those in file paths passed as arguments.
-
-Thank you, thank you!
-
- - Jason
-
-jason@jasonwoof.com
-
-> I'm afraid this is not a bug. Here's why: If you run "git mv books/foo
-> books/bar", git will complain:
->
->> fatal: not under version control, source=books/foo, destination=books/bar
->
-> So git-annex is just following git's lead (indeed, it's just running
-> `git ls-files` to find files to act on), and git doesn't
-> recognise this path as a file that's in git. --[[Joey]]
-
-+ Also, I think ```git annex unlock``` should emit an error message if a file explicitly addressed on the commandline can not be acted upon.
-
-> I'm beginning to think perhaps it should. Users seem to find the current
-> behavior to be sometimes confusing.
->
-> However, it's actually a very difficult change to make. Several commands
-> have multiple seek stages that act on different types of files, so
-> any warning printed by an earlier stage may be premature if a later
-> stage comes along and deals with a file. --[[Joey]]
-
->> Figured out a non-invasive way to add that warning. [[done]] --[[Joey]]
diff --git a/doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_.mdwn b/doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_.mdwn
deleted file mode 100644
index 3704334f3..000000000
--- a/doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_.mdwn
+++ /dev/null
@@ -1,22 +0,0 @@
-What steps will reproduce the problem?
-
- try to unlock a file in a git annex checkout
-
-What is the expected output? What do you see instead?
-
- % git annex unlock FILENAME
- unlock FILENAME (copying...) cp: illegal option -- -
- usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
- cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory
- git-annex: copy failed!
-
- (should unlock the file)
-
-What version of git-annex are you using? On what operating system?
-
- latest git annex osx build as of yesterday (12-11-03)
-
-
-> I've made the `cp` command be included in the OSX standalone build,
-> so it will use the same one it's built with. So the next time we get
-> an OSX build this will be fixed. [[done]] --[[Joey]]
diff --git a/doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_1_a634a9f1c023bf836183de64abab1224._comment b/doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_1_a634a9f1c023bf836183de64abab1224._comment
deleted file mode 100644
index 3e322a0b6..000000000
--- a/doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_1_a634a9f1c023bf836183de64abab1224._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.194"
- subject="comment 1"
- date="2012-11-04T20:03:47Z"
- content="""
-Did you build this git-annex yourself? On the same machine?
-
-What does it say if you add the `--debug` option?
-"""]]
diff --git a/doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_2_d9ae61a7c3f1eb243ca650945b40f21d._comment b/doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_2_d9ae61a7c3f1eb243ca650945b40f21d._comment
deleted file mode 100644
index 98d42e59d..000000000
--- a/doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_2_d9ae61a7c3f1eb243ca650945b40f21d._comment
+++ /dev/null
@@ -1,19 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmmPHsszTlpa3s3x_LEzmEYkZfEmqq7IjU"
- nickname="Jan"
- subject="comment 2"
- date="2012-11-05T01:23:41Z"
- content="""
-Thanks for the quick response :)
-I think the problem is that the os x cp does not support ''--reflink\" (and gnu long options). I guess I could install gnu coreutils through homebrew, though those will be prefixed with a g in the name.
-My OS version is 10.6.8 btw.
-
- % git annex --debug unlock FILENAME
- [2012-11-04 20:17:47 EST] read: git [\"--git-dir=/PATH/.git\",\"--work-tree=/PATH\",\"ls-files\",\"--cached\",\"-z\",\"--\",\"FILENAME\"]
- unlock FILENAME (copying...) [2012-11-04 20:17:47 EST] call: cp [\"--reflink=auto\",\"-a\",\"/PATH/.git/annex/objects/8P/Qp/SHA256-s7173120--33c3482bf70807bb5caede9859d10a73bda9279f08340556188c93dea7e5be05/SHA256-s7173120--33c3482bf70807bb5caede9859d10a73bda9279f08340556188c93dea7e5be05\",\"/PATH/.git/annex/tmp/SHA256-s7173120--33c3482bf70807bb5caede9859d10a73bda9279f08340556188c93dea7e5be05\"]
- cp: illegal option -- -
- usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
- cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory
- git-annex: copy failed!
-
-"""]]
diff --git a/doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_3_fe229c03c14e8eb2b57389e0e193ed99._comment b/doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_3_fe229c03c14e8eb2b57389e0e193ed99._comment
deleted file mode 100644
index 576202d92..000000000
--- a/doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_3_fe229c03c14e8eb2b57389e0e193ed99._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmmPHsszTlpa3s3x_LEzmEYkZfEmqq7IjU"
- nickname="Jan"
- subject="comment 3"
- date="2012-11-05T01:24:32Z"
- content="""
-Ah, forgot to mention: I am running the latest build downloaded from the website (as mentioned above), so no, I did not build it myself.
-"""]]
diff --git a/doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_4_fa12afe295de63c4aa7eb043b715325a._comment b/doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_4_fa12afe295de63c4aa7eb043b715325a._comment
deleted file mode 100644
index d96a469d9..000000000
--- a/doc/bugs/unlock_not_working_on_os_x_10.6_-_cp:_illegal_option_--_-_/comment_4_fa12afe295de63c4aa7eb043b715325a._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmmPHsszTlpa3s3x_LEzmEYkZfEmqq7IjU"
- nickname="Jan"
- subject="exact version"
- date="2012-11-05T01:34:29Z"
- content="""
- % git annex version
- git-annex version: 3.20121017
- local repository version: 3
- default repository version: 3
- supported repository versions: 3
- upgrade supported from repository versions: 0 1 2
-
-Also, while browsing the archive for another problem (can not add files because shasum256 is missing and I get a \"dyld: Library not loaded: /opt/local/lib/libintl.8.dylib\" for it's execution when I add the path for /Applications/git-annex.app/Contents/MacOS/bin/sha256sum) I [saw](http://git-annex.branchable.com/install/OSX/old_comments/#comment-94b0f0ba446ca2f1ebd6af44c7afd3be) that it should fall back on haskell code - which it doesn't, so maybe its an old version?
-"""]]
diff --git a/doc/bugs/unlock_then_lock_of_uncommitted_file_loses_it.mdwn b/doc/bugs/unlock_then_lock_of_uncommitted_file_loses_it.mdwn
deleted file mode 100644
index 9c093de38..000000000
--- a/doc/bugs/unlock_then_lock_of_uncommitted_file_loses_it.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-Add a file (do not commit), then unlock it, and then lock it.
-There is an error and the symlink gets deleted.
-
-The file will still be staged in the index, and the file content is still
-in the annex. --[[Joey]]
-
-[[done]]
diff --git a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again.mdwn b/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again.mdwn
deleted file mode 100644
index 2517fa647..000000000
--- a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again.mdwn
+++ /dev/null
@@ -1,434 +0,0 @@
-### Please describe the problem.
-
-recently upgraded to a git snapshot; restarted assistant and found my disk space disappearing. Checked webapp and there were a bunch of transfers queued. Restarted assistant in --debug mode to get some logs.
-
-Transfers should not have happened, because I'm on a "client" machine, they are in an archive subdirectory, and there are adequate copies elsewhere (a ssh remote and a USB drive) to satisfy "numcopies=2." (Note that the USB drive was not connected at the time, but that hasn't mattered in the past)
-
-### What steps will reproduce the problem?
-
-As noted above. I don't know that this is reproducible in a fresh repo; I was hoping that a bug report with the log would do. Can try if that would help.
-
-### What version of git-annex are you using? On what operating system?
-
-checkout hash is:
-
-70ba425 2013-04-07
-
-OS X Lion.
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/debug.log
-
-
-[13:13:55 PM]$ cat daemon.log
-[2013-04-26 12:59:09 EDT] main: starting assistant version 4.20130406
-[2013-04-26 12:59:09 EDT] TransferScanner: Syncing with toshiba, homeworld
-[2013-04-26 12:59:09 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","git-annex"]
-[2013-04-26 12:59:09 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-26 12:59:09 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..9a8e676d552905528b25e29ae9c56b5e50c35f70","--oneline","-n1"]
-[2013-04-26 12:59:09 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..c19f5f18ea26d43b735de8fbdb67d4f85987d171","--oneline","-n1"]
-[2013-04-26 12:59:09 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..7077e8c56be8c84fee214456bb2c951ef5b2202e","--oneline","-n1"]
-[2013-04-26 12:59:09 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..bfa73167b1cd90bbb2213a2c9bad64fbb1befe00","--oneline","-n1"]
-[2013-04-26 12:59:09 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..f7a2f8f189db99c7f9f4bacc2fc935d63737287e","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..be505749576a7064cca1eaf9fc241b450cdaadc6","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","ls-tree","-z","--","refs/heads/git-annex","uuid.log","remote.log","trust.log","group.log","preferred-content.log"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","symbolic-ref","HEAD"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","refs/heads/master"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","git-annex"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..9a8e676d552905528b25e29ae9c56b5e50c35f70","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..c19f5f18ea26d43b735de8fbdb67d4f85987d171","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..7077e8c56be8c84fee214456bb2c951ef5b2202e","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..bfa73167b1cd90bbb2213a2c9bad64fbb1befe00","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..f7a2f8f189db99c7f9f4bacc2fc935d63737287e","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..be505749576a7064cca1eaf9fc241b450cdaadc6","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","ls-tree","-z","--","refs/heads/git-annex","uuid.log","remote.log","trust.log","group.log","preferred-content.log"]
-[2013-04-26 12:59:10 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","fetch","toshiba"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","symbolic-ref","HEAD"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","refs/heads/master"]
-[2013-04-26 12:59:10 EDT] Merger: merging refs/heads/synced/master into refs/heads/master
-[2013-04-26 12:59:10 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","merge","--no-edit","refs/heads/synced/master"]
-fatal: '/Volumes/TOSHIBAEXT/annex' does not appear to be a git repository
-fatal: Could not read from remote repository.
-
-Please make sure you have the correct access rights
-and the repository exists.
-[2013-04-26 12:59:10 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","fetch","homeworld"]
-Already up-to-date.
-
-(scanning...) [2013-04-26 12:59:10 EDT] Watcher: Performing startup scan
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","git-annex"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..9a8e676d552905528b25e29ae9c56b5e50c35f70","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..c19f5f18ea26d43b735de8fbdb67d4f85987d171","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..7077e8c56be8c84fee214456bb2c951ef5b2202e","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..bfa73167b1cd90bbb2213a2c9bad64fbb1befe00","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..f7a2f8f189db99c7f9f4bacc2fc935d63737287e","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..be505749576a7064cca1eaf9fc241b450cdaadc6","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","git-annex"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..9a8e676d552905528b25e29ae9c56b5e50c35f70","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..c19f5f18ea26d43b735de8fbdb67d4f85987d171","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..7077e8c56be8c84fee214456bb2c951ef5b2202e","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..bfa73167b1cd90bbb2213a2c9bad64fbb1befe00","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..f7a2f8f189db99c7f9f4bacc2fc935d63737287e","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..be505749576a7064cca1eaf9fc241b450cdaadc6","--oneline","-n1"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","symbolic-ref","HEAD"]
-[2013-04-26 12:59:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","refs/heads/master"]
-[2013-04-26 12:59:10 EDT] Merger: merging refs/remotes/homeworld/synced/master into refs/heads/master
-[2013-04-26 12:59:10 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","merge","--no-edit","refs/remotes/homeworld/synced/master"]
-Already up-to-date.
-[2013-04-26 12:59:11 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","git-annex"]
-[2013-04-26 12:59:11 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-26 12:59:11 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..9a8e676d552905528b25e29ae9c56b5e50c35f70","--oneline","-n1"]
-[2013-04-26 12:59:11 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..c19f5f18ea26d43b735de8fbdb67d4f85987d171","--oneline","-n1"]
-[2013-04-26 12:59:11 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..7077e8c56be8c84fee214456bb2c951ef5b2202e","--oneline","-n1"]
-[2013-04-26 12:59:11 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..bfa73167b1cd90bbb2213a2c9bad64fbb1befe00","--oneline","-n1"]
-[2013-04-26 12:59:11 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..f7a2f8f189db99c7f9f4bacc2fc935d63737287e","--oneline","-n1"]
-[2013-04-26 12:59:12 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..be505749576a7064cca1eaf9fc241b450cdaadc6","--oneline","-n1"]
-[2013-04-26 12:59:12 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","git-annex"]
-[2013-04-26 12:59:12 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-26 12:59:12 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..9a8e676d552905528b25e29ae9c56b5e50c35f70","--oneline","-n1"]
-[2013-04-26 12:59:13 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..c19f5f18ea26d43b735de8fbdb67d4f85987d171","--oneline","-n1"]
-[2013-04-26 12:59:13 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..7077e8c56be8c84fee214456bb2c951ef5b2202e","--oneline","-n1"]
-[2013-04-26 12:59:13 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..bfa73167b1cd90bbb2213a2c9bad64fbb1befe00","--oneline","-n1"]
-[2013-04-26 12:59:13 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..f7a2f8f189db99c7f9f4bacc2fc935d63737287e","--oneline","-n1"]
-[2013-04-26 12:59:14 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..be505749576a7064cca1eaf9fc241b450cdaadc6","--oneline","-n1"]
-[2013-04-26 12:59:14 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","git-annex"]
-[2013-04-26 12:59:14 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-26 12:59:14 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..9a8e676d552905528b25e29ae9c56b5e50c35f70","--oneline","-n1"]
-[2013-04-26 12:59:14 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..c19f5f18ea26d43b735de8fbdb67d4f85987d171","--oneline","-n1"]
-[2013-04-26 12:59:14 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..7077e8c56be8c84fee214456bb2c951ef5b2202e","--oneline","-n1"]
-[2013-04-26 12:59:14 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..bfa73167b1cd90bbb2213a2c9bad64fbb1befe00","--oneline","-n1"]
-[2013-04-26 12:59:14 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..f7a2f8f189db99c7f9f4bacc2fc935d63737287e","--oneline","-n1"]
-[2013-04-26 12:59:14 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..be505749576a7064cca1eaf9fc241b450cdaadc6","--oneline","-n1"]
-[2013-04-26 12:59:15 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","symbolic-ref","HEAD"]
-[2013-04-26 12:59:15 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","refs/heads/master"]
-[2013-04-26 12:59:15 EDT] Merger: merging refs/remotes/toshiba/synced/master into refs/heads/master
-[2013-04-26 12:59:15 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--verify","-q","refs/remotes/toshiba/master"]
-[2013-04-26 12:59:15 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/master..refs/remotes/toshiba/master","--oneline","-n1"]
-[2013-04-26 12:59:20 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--verify","-q","refs/remotes/toshiba/synced/master"]
-[2013-04-26 12:59:20 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/synced/master..refs/remotes/toshiba/synced/master","--oneline","-n1"]
-[2013-04-26 12:59:20 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","merge","--no-edit","refs/remotes/toshiba/synced/master"]
-Already up-to-date.
-[2013-04-26 12:59:20 EDT] Merger: watching /Users/ed/annex/.git/refs
-[2013-04-26 12:59:20 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--verify","-q","refs/remotes/homeworld/master"]
-[2013-04-26 12:59:20 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/master..refs/remotes/homeworld/master","--oneline","-n1"]
-[2013-04-26 12:59:20 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--verify","-q","refs/remotes/homeworld/synced/master"]
-[2013-04-26 12:59:20 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/synced/master..refs/remotes/homeworld/synced/master","--oneline","-n1"]
-[2013-04-26 12:59:20 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","symbolic-ref","HEAD"]
-[2013-04-26 12:59:21 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","refs/heads/master"]
-[2013-04-26 12:59:21 EDT] TransferScanner: pushing to [Remote { name ="toshiba" },Remote { name ="homeworld" }]
-[2013-04-26 12:59:21 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","branch","-f","synced/master"]
-[2013-04-26 12:59:21 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","push","toshiba","git-annex:synced/git-annex","master:synced/master"]
-fatal: '/Volumes/TOSHIBAEXT/annex' does not appear to be a git repository
-fatal: Could not read from remote repository.
-
-Please make sure you have the correct access rights
-and the repository exists.
-[2013-04-26 12:59:21 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","push","homeworld","git-annex:synced/git-annex","master:synced/master"]
-[2013-04-26 12:59:21 EDT] TransferWatcher: watching for transfers
-To ssh://ed@homeworld/srv/mybook/annex
- bfa7316..9a8e676 git-annex -> synced/git-annex
-[2013-04-26 12:59:36 EDT] TransferScanner: trying manual pull to resolve failed pushes
-[2013-04-26 12:59:36 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","fetch","toshiba"]
-fatal: '/Volumes/TOSHIBAEXT/annex' does not appear to be a git repository
-fatal: Could not read from remote repository.
-
-Please make sure you have the correct access rights
-and the repository exists.
-[2013-04-26 12:59:36 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","git-annex"]
-[2013-04-26 12:59:36 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-26 12:59:36 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..9a8e676d552905528b25e29ae9c56b5e50c35f70","--oneline","-n1"]
-[2013-04-26 12:59:36 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..c19f5f18ea26d43b735de8fbdb67d4f85987d171","--oneline","-n1"]
-[2013-04-26 12:59:36 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..7077e8c56be8c84fee214456bb2c951ef5b2202e","--oneline","-n1"]
-[2013-04-26 12:59:37 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..f7a2f8f189db99c7f9f4bacc2fc935d63737287e","--oneline","-n1"]
-[2013-04-26 12:59:37 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..be505749576a7064cca1eaf9fc241b450cdaadc6","--oneline","-n1"]
-[2013-04-26 12:59:37 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--verify","-q","refs/remotes/toshiba/master"]
-[2013-04-26 12:59:37 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/master..refs/remotes/toshiba/master","--oneline","-n1"]
-[2013-04-26 12:59:37 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--verify","-q","refs/remotes/toshiba/synced/master"]
-[2013-04-26 12:59:37 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/synced/master..refs/remotes/toshiba/synced/master","--oneline","-n1"]
-[2013-04-26 12:59:37 EDT] TransferScanner: pushing to [Remote { name ="toshiba" }]
-[2013-04-26 12:59:37 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","branch","-f","synced/master"]
-[2013-04-26 12:59:37 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","git-annex"]
-[2013-04-26 12:59:37 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","push","toshiba","git-annex:synced/git-annex","master:synced/master"]
-[2013-04-26 12:59:37 EDT] read: git ["--git-dir=/Users/ed/annex/fatal: '/Volumes/TOSHIBAEXT/annex' does not appear to be a git repository
-fatal: Could not read from remote repository.
-
-Please make sure you have the correct access rights
-and the repository exists.
-.git","--work-tree=/Users/ed/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-26 12:59:37 EDT] TransferScanner: fallback pushing to [Remote { name ="toshiba" }]
-[2013-04-26 12:59:37 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","push","toshiba","git-annex:refs/synced/fa2bd02e-3ce2-11e2-a675-47389975a32e/git-annex","refs/heads/master:refs/synced/fa2bd02e-3ce2-11e2-a675-47389975a32e/master"]
-[2013-04-26 12:59:37 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..9a8e676d552905528b25e29ae9c56b5e50c35f70","--oneline","-n1"]
-fatal: '/Volumes/TOSHIBAEXT/annex' does not appear to be a git repository
-fatal: Could not read from remote repository.
-
-Please make sure you have the correct access rights
-and the repository exists.
-[2013-04-26 12:59:37 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..c19f5f18ea26d43b735de8fbdb67d4f85987d171","--oneline","-n1"]
-[2013-04-26 12:59:37 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..7077e8c56be8c84fee214456bb2c951ef5b2202e","--oneline","-n1"]
-[2013-04-26 12:59:38 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..f7a2f8f189db99c7f9f4bacc2fc935d63737287e","--oneline","-n1"]
-[2013-04-26 12:59:38 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..be505749576a7064cca1eaf9fc241b450cdaadc6","--oneline","-n1"]
-[2013-04-26 12:59:38 EDT] 127.0.0.1 GET / Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:39 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","git-annex"]
-[2013-04-26 12:59:39 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-26 12:59:39 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..9a8e676d552905528b25e29ae9c56b5e50c35f70","--oneline","-n1"]
-[2013-04-26 12:59:39 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..c19f5f18ea26d43b735de8fbdb67d4f85987d171","--oneline","-n1"]
-[2013-04-26 12:59:39 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..7077e8c56be8c84fee214456bb2c951ef5b2202e","--oneline","-n1"]
-[2013-04-26 12:59:39 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..f7a2f8f189db99c7f9f4bacc2fc935d63737287e","--oneline","-n1"]
-[2013-04-26 12:59:39 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..be505749576a7064cca1eaf9fc241b450cdaadc6","--oneline","-n1"]
-[2013-04-26 12:59:39 EDT] chat: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","cat-file","--batch"]
-[2013-04-26 12:59:39 EDT] read: git ["config","--null","--list"]
-[2013-04-26 12:59:40 EDT] TransferScanner: starting scan of [Remote { name ="toshiba" },Remote { name ="homeworld" }]
-[2013-04-26 12:59:40 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","ls-files","--cached","-z","--"]
-[2013-04-26 12:59:40 EDT] 127.0.0.1 GET /static/css/bootstrap.css Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:40 EDT] chat: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","check-attr","-z","--stdin","annex.backend","annex.numcopies","--"]
-[2013-04-26 12:59:41 EDT] 127.0.0.1 GET /static/css/bootstrap-responsive.css Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:41 EDT] 127.0.0.1 GET /static/jquery.full.js Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:41 EDT] 127.0.0.1 GET /static/js/bootstrap-dropdown.js Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:41 EDT] 127.0.0.1 GET /static/js/bootstrap-modal.js Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:41 EDT] 127.0.0.1 GET /static/js/bootstrap-collapse.js Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:41 EDT] 127.0.0.1 GET /static/longpolling.js Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:41 EDT] 127.0.0.1 GET /static/jquery.ui.core.js Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:41 EDT] 127.0.0.1 GET /static/jquery.ui.widget.js Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:42 EDT] 127.0.0.1 GET /static/jquery.ui.mouse.js Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:42 EDT] 127.0.0.1 GET /static/jquery.ui.sortable.js Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:42 EDT] 127.0.0.1 GET /static/favicon.ico Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:42 EDT] 127.0.0.1 GET /static/img/glyphicons-halflings-white.png Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:42 EDT] 127.0.0.1 GET /static/img/glyphicons-halflings.png Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:42 EDT] 127.0.0.1 GET /notifier/sidebar Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:42 EDT] 127.0.0.1 GET /notifier/repolist/RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True,%20nudgeAddMore%20=%20True%7D Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:42 EDT] 127.0.0.1 GET /notifier/transfers Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:42 EDT] 127.0.0.1 GET /sidebar/NotificationId%200 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:42 EDT] 127.0.0.1 GET /repolist/RepoListNotificationId%20(NotificationId%200)%20(RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True,%20nudgeAddMore%20=%20True%7D) Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:42 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:43 EDT] 127.0.0.1 GET /sidebar/NotificationId%200 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:43 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 12:59:43 EDT] 127.0.0.1 GET /repolist/RepoListNotificationId%20(NotificationId%200)%20(RepoSelector%20%7BonlyCloud%20=%20False,%20onlyConfigured%20=%20False,%20includeHere%20=%20True,%20nudgeAddMore%20=%20True%7D) Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","ls-tree","-z","--","refs/heads/git-annex","uuid.log","remote.log","trust.log","group.log","preferred-content.log"]
-[2013-04-26 13:00:27 EDT] TransferScanner: queued Download UUID "429af61a-3cf6-11e2-af0a-170be35d46b6" Books/archive/Art books/John Gadsby Chapman - American Drawing-Book - A Manual for the Amateur.pdf.part Nothing : expensive scan found missing object
-[2013-04-26 13:00:27 EDT] TransferScanner: queued Download UUID "d16d0d1a-3cdd-11e2-9161-67c83599f720" Books/archive/Art books/John Gadsby Chapman - American Drawing-Book - A Manual for the Amateur.pdf.part Nothing : expensive scan found missing object
-[2013-04-26 13:00:27 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:27 EDT] Transferrer: Transferring: Download UUID "d16d0d1a-3cdd-11e2-9161-67c83599f720" Books/archive/Art books/John Gadsby Chapman - American Drawing-Book - A Manual for the Amateur.pdf.part Nothing
-[2013-04-26 13:00:27 EDT] call: /Users/ed/bin/git-annex ["transferkeys","--readfd","34","--writefd","31"]
-[2013-04-26 13:00:27 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:27 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:27 EDT] TransferScanner: queued Download UUID "429af61a-3cf6-11e2-af0a-170be35d46b6" Books/archive/Art books/L.A. Doust - A Manual on Drawing the Human Figure.pdf.part Nothing : expensive scan found missing object
-[2013-04-26 13:00:27 EDT] TransferScanner: queued Download UUID "d16d0d1a-3cdd-11e2-9161-67c83599f720" Books/archive/Art books/L.A. Doust - A Manual on Drawing the Human Figure.pdf.part Nothing : expensive scan found missing object
-[2013-04-26 13:00:27 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:28 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:28 EDT] TransferScanner: queued Download UUID "429af61a-3cf6-11e2-af0a-170be35d46b6" Books/archive/Art books/Michael D. Mattesi - Force. The Key to Capturing Life Through Drawing.pdf Nothing : expensive scan found missing object
-[2013-04-26 13:00:28 EDT] TransferScanner: queued Download UUID "d16d0d1a-3cdd-11e2-9161-67c83599f720" Books/archive/Art books/Michael D. Mattesi - Force. The Key to Capturing Life Through Drawing.pdf Nothing : expensive scan found missing object
-[2013-04-26 13:00:28 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:28 EDT] TransferScanner: queued Download UUID "429af61a-3cf6-11e2-af0a-170be35d46b6" Books/archive/Art books/Richard G. Hatton - Figure Drawing.pdf Nothing : expensive scan found missing object
-[2013-04-26 13:00:28 EDT] TransferScanner: queued Download UUID "d16d0d1a-3cdd-11e2-9161-67c83599f720" Books/archive/Art books/Richard G. Hatton - Figure Drawing.pdf Nothing : expensive scan found missing object
-[2013-04-26 13:00:28 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:28 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:28 EDT] TransferScanner: queued Download UUID "429af61a-3cf6-11e2-af0a-170be35d46b6" Books/archive/Art books/The Figure in Repose.pdf Nothing : expensive scan found missing object
-Control socket connect(/Users/ed/annex/.git/annex/ssh/ed@homeworld): Connection refused
-[2013-04-26 13:00:28 EDT] TransferWatcher: transfer starting: Download UUID "d16d0d1a-3cdd-11e2-9161-67c83599f720" Books/archive/Art books/John Gadsby Chapman - American Drawing-Book - A Manual for the Amateur.pdf.part Nothing
-[2013-04-26 13:00:28 EDT] TransferScanner: queued Download UUID "d16d0d1a-3cdd-11e2-9161-67c83599f720" Books/archive/Art books/The Figure in Repose.pdf Nothing : expensive scan found missing object
-[2013-04-26 13:00:28 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:28 EDT] TransferWatcher: transfer starting: Download UUID "d16d0d1a-3cdd-11e2-9161-67c83599f720" Books/archive/Art books/John Gadsby Chapman - American Drawing-Book - A Manual for the Amateur.pdf.part Nothing
-[2013-04-26 13:00:28 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:28 EDT] TransferScanner: queued Download UUID "429af61a-3cf6-11e2-af0a-170be35d46b6" Books/archive/Art books/Torrent downloaded from Demonoid.com.txt Nothing : expensive scan found missing object
-[2013-04-26 13:00:28 EDT] TransferScanner: queued Download UUID "d16d0d1a-3cdd-11e2-9161-67c83599f720" Books/archive/Art books/Torrent downloaded from Demonoid.com.txt Nothing : expensive scan found missing object
-[2013-04-26 13:00:29 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:29 EDT] TransferScanner: queued Download UUID "429af61a-3cf6-11e2-af0a-170be35d46b6" Books/archive/Art books/Victor Perard - Drawing and Anatomy.pdf Nothing : expensive scan found missing object
-[2013-04-26 13:00:29 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:29 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-ControlSocket /Users/ed/annex/.git/annex/ssh/ed@homeworld already exists, disabling multiplexing
-
-SHA256E-s568690--ec5aaaf0320739ab91e4efa9a0bfd372a92ca436e96a5182a3d072ba409691b5.pdf.part
-[2013-04-26 13:00:31 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:33 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
- 568690 100% 185.12kB/s 0:00:03 (xfer#1, to-check=0/1)
-
-sent 42 bytes received 568933 bytes 87534.62 bytes/sec
-total size is 568690 speedup is 1.00
-[2013-04-26 13:00:34 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:35 EDT] Transferrer: Downloaded John Gads...pdf.part
-[2013-04-26 13:00:35 EDT] TransferWatcher: transfer finishing: Transfer {transferDirection = Download, transferUUID = UUID "d16d0d1a-3cdd-11e2-9161-67c83599f720", transferKey = Key {keyName = "ec5aaaf0320739ab91e4efa9a0bfd372a92ca436e96a5182a3d072ba409691b5.pdf.part", keyBackendName = "SHA256E", keySize = Just 568690, keyMtime = Nothing}}
-[2013-04-26 13:00:35 EDT] Pusher: Syncing with homeworld
-[2013-04-26 13:00:35 EDT] TransferScanner: queued Download UUID "d16d0d1a-3cdd-11e2-9161-67c83599f720" Books/archive/Art books/Victor Perard - Drawing and Anatomy.pdf Nothing : expensive scan found missing object
-[2013-04-26 13:00:35 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:35 EDT] Transferrer: Transferring: Download UUID "d16d0d1a-3cdd-11e2-9161-67c83599f720" Books/archive/Art books/L.A. Doust - A Manual on Drawing the Human Figure.pdf.part Nothing
-[2013-04-26 13:00:35 EDT] chat: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","hash-object","-w","--stdin-paths"]
-[2013-04-26 13:00:35 EDT] feed: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","update-index","-z","--index-info"]
-[2013-04-26 13:00:35 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:35 EDT] 127.0.0.1 GET /sidebar/NotificationId%200 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:35 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-Control socket connect(/Users/ed/annex/.git/annex/ssh/ed@homeworld): Connection refused
-[2013-04-26 13:00:35 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-26 13:00:35 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","write-tree"]
-[2013-04-26 13:00:35 EDT] 127.0.0.1 GET /sidebar/NotificationId%200 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:36 EDT] chat: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","commit-tree","24ad0c0244cd209b4689b2b3877645971fe88084","-p","refs/heads/git-annex"]
-[2013-04-26 13:00:36 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","update-ref","refs/heads/git-annex","726dd240a1e79cf0ce481f9875b5358b56c250b7"]
-[2013-04-26 13:00:36 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","symbolic-ref","HEAD"]
-[2013-04-26 13:00:36 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","refs/heads/master"]
-[2013-04-26 13:00:36 EDT] Pusher: pushing to [Remote { name ="homeworld" }]
-[2013-04-26 13:00:36 EDT] TransferWatcher: transfer starting: Download UUID "d16d0d1a-3cdd-11e2-9161-67c83599f720" Books/archive/Art books/L.A. Doust - A Manual on Drawing the Human Figure.pdf.part Nothing
-[2013-04-26 13:00:36 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","branch","-f","synced/master"]
-[2013-04-26 13:00:36 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","push","homeworld","git-annex:synced/git-annex","master:synced/master"]
-[2013-04-26 13:00:36 EDT] TransferWatcher: transfer starting: Download UUID "d16d0d1a-3cdd-11e2-9161-67c83599f720" Books/archive/Art books/L.A. Doust - A Manual on Drawing the Human Figure.pdf.part Nothing
-[2013-04-26 13:00:36 EDT] TransferScanner: queued Download UUID "429af61a-3cf6-11e2-af0a-170be35d46b6" Books/archive/Art books/Willy Pogany - Art of Drawing.pdf Nothing : expensive scan found missing object
-[2013-04-26 13:00:36 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:36 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-ControlSocket /Users/ed/annex/.git/annex/ssh/ed@homeworld already exists, disabling multiplexing
-[2013-04-26 13:00:37 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","git-annex"]
-[2013-04-26 13:00:37 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-26 13:00:37 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..726dd240a1e79cf0ce481f9875b5358b56c250b7","--oneline","-n1"]
-[2013-04-26 13:00:37 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..c19f5f18ea26d43b735de8fbdb67d4f85987d171","--oneline","-n1"]
-[2013-04-26 13:00:37 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..7077e8c56be8c84fee214456bb2c951ef5b2202e","--oneline","-n1"]
-[2013-04-26 13:00:37 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..9a8e676d552905528b25e29ae9c56b5e50c35f70","--oneline","-n1"]
-[2013-04-26 13:00:37 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..f7a2f8f189db99c7f9f4bacc2fc935d63737287e","--oneline","-n1"]
-[2013-04-26 13:00:37 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..be505749576a7064cca1eaf9fc241b450cdaadc6","--oneline","-n1"]
-
-SHA256E-s3733003--1536ff33f9a59112d40ff816f731f3fd96554f0c42acc9df758e59350176d616.pdf.part
-[2013-04-26 13:00:38 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:39 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:41 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:43 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:44 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:44 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","ls-files","--deleted","-z","--","/Users/ed/annex"]
-
-
-(Recording state in git...)
-(started...) [2013-04-26 13:00:44 EDT] Watcher: watching .
-[2013-04-26 13:00:44 EDT] 127.0.0.1 GET /sidebar/NotificationId%200 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:46 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:47 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:48 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:50 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-To ssh://ed@homeworld/srv/mybook/annex09
- 9a8e676..726dd24 git-annex -> synced/git-annex
-[2013-04-26 13:00:50 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","git-annex"]
-[2013-04-26 13:00:50 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-26 13:00:50 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..726dd240a1e79cf0ce481f9875b5358b56c250b7","--oneline","-n1"]
-[2013-04-26 13:00:50 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..c19f5f18ea26d43b735de8fbdb67d4f85987d171","--oneline","-n1"]
-[2013-04-26 13:00:50 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..7077e8c56be8c84fee214456bb2c951ef5b2202e","--oneline","-n1"]
-[2013-04-26 13:00:50 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..f7a2f8f189db99c7f9f4bacc2fc935d63737287e","--oneline","-n1"]
-[2013-04-26 13:00:51 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..be505749576a7064cca1eaf9fc241b450cdaadc6","--oneline","-n1"]
-[2013-04-26 13:00:51 EDT] 127.0.0.1 GET /sidebar/NotificationId%200 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:51 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:53 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:54 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:56 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:57 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
- 3733003 100% 175.37kB/s 0:00:20 (xfer#1, to-check=0/1)
-[2013-04-26 13:00:59 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-
-sent 42 bytes received 3733631 bytes 152394.82 bytes/sec
-total size is 3733003 speedup is 1.00
-[2013-04-26 13:00:59 EDT] Transferrer: Downloaded L.A. Dous...pdf.part
-[2013-04-26 13:00:59 EDT] Pusher: Syncing with homeworld
-[2013-04-26 13:00:59 EDT] chat: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","hash-object","-w","--stdin-paths"]
-[2013-04-26 13:00:59 EDT] feed: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","update-index","-z","--index-info"]
-[2013-04-26 13:00:59 EDT] TransferWatcher: transfer finishing: Transfer {transferDirection = Download, transferUUID = UUID "d16d0d1a-3cdd-11e2-9161-67c83599f720", transferKey = Key {keyName = "1536ff33f9a59112d40ff816f731f3fd96554f0c42acc9df758e59350176d616.pdf.part", keyBackendName = "SHA256E", keySize = Just 3733003, keyMtime = Nothing}}
-[2013-04-26 13:00:59 EDT] TransferScanner: queued Download UUID "d16d0d1a-3cdd-11e2-9161-67c83599f720" Books/archive/Art books/Willy Pogany - Art of Drawing.pdf Nothing : expensive scan found missing object
-[2013-04-26 13:00:59 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:59 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-26 13:00:59 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","write-tree"]
-[2013-04-26 13:00:59 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:59 EDT] 127.0.0.1 GET /sidebar/NotificationId%200 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:59 EDT] 127.0.0.1 GET /sidebar/NotificationId%200 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:59 EDT] chat: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","commit-tree","2b93aa36603e01e699d332fb277874488ab21c1f","-p","refs/heads/git-annex"]
-[2013-04-26 13:00:59 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","update-ref","refs/heads/git-annex","58f45e4a8453d7bb3c1612bd910410eee0e2c72a"]
-[2013-04-26 13:00:59 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","symbolic-ref","HEAD"]
-[2013-04-26 13:00:59 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","refs/heads/master"]
-[2013-04-26 13:00:59 EDT] Pusher: pushing to [Remote { name ="homeworld" }]
-[2013-04-26 13:00:59 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","branch","-f","synced/master"]
-[2013-04-26 13:00:59 EDT] call: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","push","homeworld","git-annex:synced/git-annex","master:synced/master"]
-[2013-04-26 13:00:59 EDT] Transferrer: Transferring: Download UUID "d16d0d1a-3cdd-11e2-9161-67c83599f720" Books/archive/Art books/Michael D. Mattesi - Force. The Key to Capturing Life Through Drawing.pdf Nothing
-[2013-04-26 13:00:59 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:59 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:00:59 EDT] TransferScanner: queued Download UUID "429af61a-3cf6-11e2-af0a-170be35d46b6" Books/archive/Magic in china.PDF Nothing : expensive scan found missing object
-Control socket connect(/Users/ed/annex/.git/annex/ssh/ed@homeworld): Connection refused
-[2013-04-26 13:00:59 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:00 EDT] TransferWatcher: transfer starting: Download UUID "d16d0d1a-3cdd-11e2-9161-67c83599f720" Books/archive/Art books/Michael D. Mattesi - Force. The Key to Capturing Life Through Drawing.pdf Nothing
-[2013-04-26 13:01:00 EDT] TransferWatcher: transfer starting: Download UUID "d16d0d1a-3cdd-11e2-9161-67c83599f720" Books/archive/Art books/Michael D. Mattesi - Force. The Key to Capturing Life Through Drawing.pdf Nothing
-[2013-04-26 13:01:00 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:00 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:00 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","git-annex"]
-[2013-04-26 13:01:00 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-26 13:01:00 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..58f45e4a8453d7bb3c1612bd910410eee0e2c72a","--oneline","-n1"]
-[2013-04-26 13:01:00 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..c19f5f18ea26d43b735de8fbdb67d4f85987d171","--oneline","-n1"]
-[2013-04-26 13:01:00 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..7077e8c56be8c84fee214456bb2c951ef5b2202e","--oneline","-n1"]
-[2013-04-26 13:01:00 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..726dd240a1e79cf0ce481f9875b5358b56c250b7","--oneline","-n1"]
-ControlSocket /Users/ed/annex/.git/annex/ssh/ed@homeworld already exists, disabling multiplexing
-[2013-04-26 13:01:00 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..f7a2f8f189db99c7f9f4bacc2fc935d63737287e","--oneline","-n1"]
-[2013-04-26 13:01:00 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..be505749576a7064cca1eaf9fc241b450cdaadc6","--oneline","-n1"]
-
-SHA256E-s41718677--71d082deb0cdac45ae5556322cc5fa9245dafe477d3f3b7186fd19876e12e335.pdf
-[2013-04-26 13:01:02 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-To ssh://ed@homeworld/srv/mybook/annex12
- 726dd24..58f45e4 git-annex -> synced/git-annex
-[2013-04-26 13:01:03 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","git-annex"]
-[2013-04-26 13:01:03 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","show-ref","--hash","refs/heads/git-annex"]
-[2013-04-26 13:01:03 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..58f45e4a8453d7bb3c1612bd910410eee0e2c72a","--oneline","-n1"]
-[2013-04-26 13:01:03 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..c19f5f18ea26d43b735de8fbdb67d4f85987d171","--oneline","-n1"]
-[2013-04-26 13:01:03 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..7077e8c56be8c84fee214456bb2c951ef5b2202e","--oneline","-n1"]
-[2013-04-26 13:01:03 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..f7a2f8f189db99c7f9f4bacc2fc935d63737287e","--oneline","-n1"]
-[2013-04-26 13:01:04 EDT] 127.0.0.1 GET /sidebar/NotificationId%200 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:04 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","log","refs/heads/git-annex..be505749576a7064cca1eaf9fc241b450cdaadc6","--oneline","-n1"]
-[2013-04-26 13:01:04 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:05 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:07 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:08 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:10 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:10 EDT] read: git ["--git-dir=/Users/ed/annex/.git","--work-tree=/Users/ed/annex","ls-tree","-z","--","refs/heads/git-annex","uuid.log","remote.log","trust.log","group.log","preferred-content.log"]
-[2013-04-26 13:01:11 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:13 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:14 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:16 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:17 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:18 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:20 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:21 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:23 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:24 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:26 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:27 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:29 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:30 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:32 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:33 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:35 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:36 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:38 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:39 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:41 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:42 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:43 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:45 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:46 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-[2013-04-26 13:01:48 EDT] 127.0.0.1 GET /transfers/NotificationId%201 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0
-recv: resource vanished (Connection reset by peer)
- 41718677 100% 173.12kB/s 0:03:55 (xfer#1, to-check=0/1)
-
-sent 42 bytes received 41723941 bytes 174943.32 bytes/sec
-total size is 41718677 speedup is 1.00
-
-git-annex: <file descriptor: 31>: hFlush: resource vanished (Broken pipe)
-failed
-(Recording state in git...)
-git-annex: transferkeys: 1 failed
-~/annex/.git/annex (GIT_DIR!)
-[13:14:08 PM]$
-
-# End of transcript or log.
-"""]]
-
-Here is the typical status of a file queued for download:
-
-whereis Art books/The Figure in Repose.pdf (2 copies)
- 429af61a-3cf6-11e2-af0a-170be35d46b6 -- toshiba (toshiba external hd)
- d16d0d1a-3cdd-11e2-9161-67c83599f720 -- homeworld
-
-This is with "numcopies=2" homeworld is trusted, backup, standard. toshiba is semitrusted, backup, standard. here is client, semitrusted, standard.
-
-[[done]]
diff --git a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_10_51097a6b84edcc607abc0e6e21ca21f2._comment b/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_10_51097a6b84edcc607abc0e6e21ca21f2._comment
deleted file mode 100644
index 3e4e39e24..000000000
--- a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_10_51097a6b84edcc607abc0e6e21ca21f2._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="99.54.57.201"
- subject="comment 10"
- date="2013-04-28T18:12:30Z"
- content="""
-oh, but to answer your earlier question, \"(archive + smallarchive >= numcopies)\" would be exactly what I needed to get the behavior I want and have the others be archive directories.
-"""]]
diff --git a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_1_c34a4009213c410bba3c147ae0552029._comment b/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_1_c34a4009213c410bba3c147ae0552029._comment
deleted file mode 100644
index e85829179..000000000
--- a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_1_c34a4009213c410bba3c147ae0552029._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="173.162.44.162"
- subject="comment 1"
- date="2013-04-26T17:46:50Z"
- content="""
-Tried again with the usb drive plugged in; still kept trying to transfer archive content, which was present in 2 other places (that usb drive and the ssh remote), down from the ssh remote.
-
-Tried disabling syncing from the ssh remote in the webapp; the assistant finished the last transfer from it and queued up a bunch of transfers from the USB remote instead.
-
-Turned assistant off completely; tried a \"git annex drop --auto\". (with the USB drive still plugged in.) Nothing dropped.
-
-Tried a \"git annex drop --in=here '*/archive/*'\" -- it dropped all the content from my archive directories. whew!
-
-"""]]
diff --git a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_2_634542867fd28962c47b7bc3ea022175._comment b/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_2_634542867fd28962c47b7bc3ea022175._comment
deleted file mode 100644
index 5f69f10d0..000000000
--- a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_2_634542867fd28962c47b7bc3ea022175._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="99.54.57.201"
- subject="comment 2"
- date="2013-04-27T05:45:53Z"
- content="""
-update -- compiled a fresh copy of git annex from master ( 1bdfec9 2013-04-24 ) -- same effect; archived content is pulled down to the client from one of the backups, despite numcopies being satisfied by the backups.
-"""]]
diff --git a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_3_301f3ff2d203ac4c58a037e553b2c14d._comment b/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_3_301f3ff2d203ac4c58a037e553b2c14d._comment
deleted file mode 100644
index f69cef333..000000000
--- a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_3_301f3ff2d203ac4c58a037e553b2c14d._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-04-27T19:35:15Z"
- content="""
-Are either the USB drive or the ssh remote configured to be in the archive or smallarchive group?
-
-If not, there was a recent change to how archive directories are handled, which would explain this behavior:
-
-<pre>
- * Adjust preferred content expressions so that content in archive
- directories is preferred until it has reached an archive or smallarchive
- repository.
-</pre>
-
-The solution would be to make the USB drive be in the archive group, probably..
-"""]]
diff --git a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_4_82ecdc88ccc1f87386b128adc4ff9af4._comment b/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_4_82ecdc88ccc1f87386b128adc4ff9af4._comment
deleted file mode 100644
index f7c701922..000000000
--- a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_4_82ecdc88ccc1f87386b128adc4ff9af4._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="99.54.57.201"
- subject="comment 4"
- date="2013-04-27T20:51:03Z"
- content="""
-They are both \"backup\" not \"archive.\" I had thought that backups pretty much counted as archives, but I guess this new behavior requires actual *archive* directories to do its job.
-
-Not sure what would be the best way to achieve my goals now, which are \"the usb and ssh remote want everything, the client wants to get rid of what's in archive directories if it's backed up in two backup directories.\"
-
-I can probably write a custom preferred content expression to do the job (I could copy the existing \"client\" one and replace \"archive\" with \"backup\" for example), but if there's a good way to do it with standard expressions I'd be curious to know.
-
-Thanks for the explanation!
-"""]]
diff --git a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_6_158b2ba3da815910505899606177d415._comment b/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_6_158b2ba3da815910505899606177d415._comment
deleted file mode 100644
index cdd39bf3f..000000000
--- a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_6_158b2ba3da815910505899606177d415._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 6"
- date="2013-04-27T21:26:11Z"
- content="""
-I'm glad this wasn't a nasty bug!
-
-I'm not really sold on its current behavior WRT archive directories and backups. It seemed to make sense at the time.. The differences between archives and backups are subtle enough that I'd sort of like to avoid confusing them by making backups be sorta treated like archives.
-
-Nor am I entirely thrilled with the current hardcoded \"(copies=archive:1 or copies=smallarchive:1)\" that makes any given file be stored in only 1 archive repository. What's really wanted, but cannot currently be expressed with preferred content syntax is \"(archive + smallarchive >= numcopies)\"
-
-If it did that, sounds like you could convert your usb and ssh remotes to be archives and not need anything custom?
-
-I think that, as things stand, the only way to get what you want without a custom expression is to set one of the remotes, perhaps the SSH remote, to be an archive repository. Then files will be copies to both SSH (because it's the only archive), and to the USB backup (because backups want all files). And once both have a copy, numcopies will be satisfied, and files in archive/ directories will be archived, so the client will drop them.
-"""]]
diff --git a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_6_b068924802f3917e3e005350cb0cc2a2._comment b/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_6_b068924802f3917e3e005350cb0cc2a2._comment
deleted file mode 100644
index c48e8c429..000000000
--- a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_6_b068924802f3917e3e005350cb0cc2a2._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="99.54.57.201"
- subject="comment 6"
- date="2013-04-27T21:44:19Z"
- content="""
-I *think* that'd work... the only thing would be that the SSH remote wouldn't get any files that *weren't* in archive directories, right? They'd migrate from the client to the backup to satisfy numcopies, and that would be it, two copies and we're done. Since it's not in an archive directory, the ssh remote doesn't want it.
-"""]]
diff --git a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_7_f4772858c927d4a62edc3caf59b5da10._comment b/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_7_f4772858c927d4a62edc3caf59b5da10._comment
deleted file mode 100644
index 709305098..000000000
--- a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_7_f4772858c927d4a62edc3caf59b5da10._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 7"
- date="2013-04-27T21:56:24Z"
- content="""
-Nope, you're thinking of smallarchive. archive wants files in any directory. Should work.
-"""]]
diff --git a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_8_d0923d2950357f4444c5ef94ff196ba3._comment b/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_8_d0923d2950357f4444c5ef94ff196ba3._comment
deleted file mode 100644
index b0211e106..000000000
--- a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_8_d0923d2950357f4444c5ef94ff196ba3._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="99.54.57.201"
- subject="comment 8"
- date="2013-04-28T05:59:53Z"
- content="""
-Just set it up that way. Looking good so far! I'll check in again later when I'm sure things are better.
-"""]]
diff --git a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_9_7fb30cb80aecc60e48c64846aa185206._comment b/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_9_7fb30cb80aecc60e48c64846aa185206._comment
deleted file mode 100644
index 26b903823..000000000
--- a/doc/bugs/upgraded_annex__44___suddenly_trying_to_grab_archive_content_onto_client_again/comment_9_7fb30cb80aecc60e48c64846aa185206._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://edheil.wordpress.com/"
- ip="99.54.57.201"
- subject="comment 9"
- date="2013-04-28T17:01:29Z"
- content="""
-Yeah that did it. Thanks! I'm not sure why I wasn't using Archive all along!
-
-"""]]
diff --git a/doc/bugs/using_gpg_encryption_with_multiple_keys_fails.mdwn b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails.mdwn
new file mode 100644
index 000000000..887f9f1fd
--- /dev/null
+++ b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails.mdwn
@@ -0,0 +1,57 @@
+### Please describe the problem.
+git-annex assistant uses wrong key if multiple are available. If there is only one gpg available it works without issue.
+
+### What steps will reproduce the problem?
+
+I tried to creating a new key through cli or assistant UI. I also tried to select preexisting key but it always appears to choose the initial key. Log below is creating a new key through assistant UI.
+
+### What version of git-annex are you using? On what operating system?
+git-annex version: 5.20140709-gc75193e on linux amd64 & os x 10.9.4
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+[2014-07-12 23:22:57 PDT] main: starting assistant version 5.20140709-gc75193e
+[2014-07-12 23:22:57 PDT] Cronner: You should enable consistency checking to protect your data.
+(Recording state in git...)
+(scanning...) [2014-07-12 23:22:57 PDT] Watcher: Performing startup scan
+(started...) gpg: Signature made Wed Jul 9 19:09:28 2014 PDT using DSA key ID 89C809CB
+gpg: Can't check signature: public key not found
+
+(encryption setup) (hybrid cipher with gpg key A1FE7E9BECB5C7CA) gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Repository not found: ssh://admin@nappy.local/share/backups/annex/
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Repository not found: ssh://admin@nappy.local/share/backups/annex/
+gcrypt: Setting up new repository
+gcrypt: Remote ID is :id:smTV2DKvbvPIi7ftJLey
+gcrypt: Encrypting to: -R A1FE7E9BECB5C7CA
+gcrypt: Requesting manifest signature
+To gcrypt::ssh://admin@nappy.local/share/backups/annex/
+ * [new branch] git-annex -> git-annex
+ok
+[2014-07-12 23:23:42 PDT] main: Syncing with nappy.local__share_backups_annex
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Decrypting manifest
+gpg: anonymous recipient; trying secret key 6DF1BC5D ...
+gpg: cannot open tty `/dev/tty': Device not configured
+gcrypt: Failed to decrypt manifest!
+gcrypt: Development version -- Repository format MAY CHANGE
+gcrypt: Decrypting manifest
+gpg: anonymous recipient; trying secret key 6DF1BC5D ...
+gpg: cannot open tty `/dev/tty': Device not configured
+gcrypt: Failed to decrypt manifest!
+
+
+# End of transcript or log.
+"""]]
+
+[[!tag forwarded]]
+[[!meta title="using git-remote-gcrypt with multiple keys causes unncessary password prompts for keys that did not encrypt the repository"]]
+
+> [[fixed|done]]; upgrade git-remote-gcrypt and `git config gcrypt.publish-participants true`
+> and after the next push to the repo, it'll stop guessing at keys, and use
+> the right one. git-annex will do this by default for new gcrypt
+> repositories. --[[Joey]]
diff --git a/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_1_584390159278577da78b05bc7bb0e673._comment b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_1_584390159278577da78b05bc7bb0e673._comment
new file mode 100644
index 000000000..01b9726a9
--- /dev/null
+++ b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_1_584390159278577da78b05bc7bb0e673._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-14T20:54:32Z"
+ content="""
+AFAICs, this is a known bug in git-remote-gcrypt: <https://github.com/blake2-ppc/git-remote-gcrypt/issues/9>
+
+In your log, it encrypts to A1FE7E9BECB5C7CA. I think this is the new key that git-annex generated. The problem comes when trying to decrypt the manifest, then it tries every gpg key until it finds one that works.
+"""]]
diff --git a/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_2_51855f5bb857e1b6bc5531cdd7073c31._comment b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_2_51855f5bb857e1b6bc5531cdd7073c31._comment
new file mode 100644
index 000000000..df07fd04a
--- /dev/null
+++ b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_2_51855f5bb857e1b6bc5531cdd7073c31._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="lex"
+ ip="17.199.80.21"
+ subject="comment 2"
+ date="2014-07-14T22:21:32Z"
+ content="""
+ah. It's bailing due to the first key requiring passphrase, and since it aborts there it never tries the second so the whole thing fails.
+
+okay thanks for the link.
+"""]]
diff --git a/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_3_3a6ff3dbc24850b065d045c7c9398eb1._comment b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_3_3a6ff3dbc24850b065d045c7c9398eb1._comment
new file mode 100644
index 000000000..7dab63081
--- /dev/null
+++ b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_3_3a6ff3dbc24850b065d045c7c9398eb1._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 3"
+ date="2014-07-15T20:42:15Z"
+ content="""
+So let's think about whether gcrypt using gpg -R makes sense from the git-annex perspective.
+
+Without -R, an attacker who can look at the remote, encrypted git repository can easily see the gpg keys of participants. This could allow them to perform other, more targeted attacks to get at the unencrypted repository.
+
+If the user is using eg, github to store the gcrypt repo, an attacker can easily find out who owns the repo anyway, so they know who to attack then, even when -R is used. The -R can still prevent them from finding out when it's encrypted to additional users than the owner.
+
+As far as the assistant goes, it only ever sets up a gcrypt repo with one participant. Using either an existing gpg key of the user, or generating a new one (which doesn't even have their name on it). Adding more participants to a gcrypt repo is tricky, and the assistant doesn't currently support it. But I'd like to have it support setting up multiple participants eventually. So the current limitations of the assistant are not a sufficient reason to avoid using -R.
+
+So, it seems to come down to the question of whether it's a reasonable goal for git-annex, when used with gcrypt, to hide the identities of people who use a repository. And whether such a goal is worth the security/usability tradeoff of the user getting gpg passphrase prompts for other keys.
+
+Hmm, when git-annex encrypts files to send them to a special remote, if it's using encryption=pubkey, it does not use -R. So an attacker can get the list of participants that way. Although the more common approach is for git-annex to encrypt using encryption=shared/hybrid, which uses a symmetric cipher, which avoids that problem. There are plenty of other things that git-annex can do that would leak identity.
+
+It kind of seems to me that if you want to prevent anyone learning who uses your repository, you are going to need to be very cautious (using tor etc) and the most git-annex can do is be open about how it works and avoid adding any obstacles. Looking at it this way, such a user, or group of users, would be well-served by using gpg keys that don't have their names on them...
+"""]]
diff --git a/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_4_84168b56288262e01280da59ffaf19f6._comment b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_4_84168b56288262e01280da59ffaf19f6._comment
new file mode 100644
index 000000000..22f0e909f
--- /dev/null
+++ b/doc/bugs/using_gpg_encryption_with_multiple_keys_fails/comment_4_84168b56288262e01280da59ffaf19f6._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 4"
+ date="2014-07-15T21:06:23Z"
+ content="""
+@lex, it shouldn't fail due to passphrase if you have gpg-agent set up. You'll only get some unncessary passphrase prompts.
+"""]]
diff --git a/doc/bugs/using_old_remote_format_generates_irritating_output.mdwn b/doc/bugs/using_old_remote_format_generates_irritating_output.mdwn
index d53410c7b..1809ade37 100644
--- a/doc/bugs/using_old_remote_format_generates_irritating_output.mdwn
+++ b/doc/bugs/using_old_remote_format_generates_irritating_output.mdwn
@@ -26,3 +26,5 @@ i see two ways to enhance the situation:
* silence the "not found" error when the file is found in another location
* a way to rename the files in the remote (i guess the aaa/bbb part can be derived from the file name; in that case, that could even be done w/o network interaction).
+
+[[!tag confirmed]]
diff --git a/doc/bugs/utf8.mdwn b/doc/bugs/utf8.mdwn
deleted file mode 100644
index 73b9bd9a9..000000000
--- a/doc/bugs/utf8.mdwn
+++ /dev/null
@@ -1,192 +0,0 @@
-### Please describe the problem.
-
-Git Annex stumbles and does not transfer files with special characters...
-
-
-### What steps will reproduce the problem?
-
-Added the file "Freddie_Mercury/Barcelona_[+video]/B00921KHNS_(disc_1)_04_-_Ensueño_(New_Orchestrated_Version).mp3" to Git Annex on my Galaxy Nexus (Android), which was committed successfully but not gettable.
-
-
-### What version of git-annex are you using? On what operating system?
-
-Phone: 4.20130709-g339d1eo
-Transfer Server: 3.20120406 (which it did not get to)
-Desktop: 3.20120629
-
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-fozz@cobol:~/Phone $ git annex get
-get Freddie_Mercury/Barcelona_[+video]/B00921KHNS_(disc_1)_04_-_Ensueño_(New_Orchestrated_Version).mp3 (not available)
- Try making some of these repositories available:
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
-failed
-get Freddie_Mercury/Barcelona_[+video]/B00921KKSA_(disc_2)_05_-_Ensueño_(Monsterrat's_Live_Takes).mp3 (not available)
- Try making some of these repositories available:
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
-failed
-get Freddie_Mercury/Barcelona_[+video]/B00921KMYW_(disc_3)_04_-_Ensueno_(Orchestral_Version).mp3 (not available)
- Try making some of these repositories available:
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
-failed
-get Freddie_Mercury/Barcelona_[+video]/B00921KMYW_(disc_3)_04_-_Ensueño_(Orchestral_Version).mp3 (not available)
- Try making some of these repositories available:
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
-failed
-git-annex: get: 4 failed
-
-===============
-
-fozz@cobol:~/Phone $ git annex whereis Freddie_Mercury/
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KGRK_(disc_1)_01_-_Barcelona_(New_Orchestrated_Version.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KH5G_(disc_1)_02_-_La_Japonaise_(New_Orchestrated_Vers.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KHD8_(disc_1)_03_-_The_Fallen_Priest_(New_Orchestrated.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KHNS_(disc_1)_04_-_Ensueño_(New_Orchestrated_Version).mp3 (1 copy)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KHY2_(disc_1)_05_-_The_Golden_Boy_(New_Orchestrated_Ve.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KI9G_(disc_1)_06_-_Guide_Me_Home_(New_Orchestrated_Ver.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KIIW_(disc_1)_07_-_How_Can_I_Go_On_(New_Orchestrated_V.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KITG_(disc_1)_08_-_Exercises_In_Free_Love_(New_Orchest.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KJ22_(disc_1)_09_-_Overture_Piccante_(New_Orchestrated.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KJB8_(disc_1)_10_-_How_Can_I_Go_On_(New_Orchestrated_V.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KJMW_(disc_2)_01_-_Exercises_In_Free_Love_(1987_B-Side.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KJVI_(disc_2)_02_-_Barcelona_(Early_Version__Freddie's.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KK5I_(disc_2)_03_-_La_Japonaise_(Early_Version__Freddi.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KKHQ_(disc_2)_04_-_Rachmaninov's_Revenge_(The_Fallen_P.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KKSA_(disc_2)_05_-_Ensueño_(Monsterrat's_Live_Takes).mp3 (1 copy)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KL2U_(disc_2)_06_-_The_Golden_Boy_(Early_Version__Fred.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KLBQ_(disc_2)_07_-_Guide_Me_Home_(Alternative_Version).mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KLJI_(disc_2)_08_-_How_Can_I_Go_On_(Alternative_Versio.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KLUC_(disc_2)_09_-_How_Can_I_Go_On_(Alternative_Piano_.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KM3I_(disc_3)_01_-_Barcelona_(Orchestral_Version).mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KMBU_(disc_3)_02_-_La_Japonaise_(Orchestral_Version).mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KMM4_(disc_3)_03_-_The_Fallen_Priest_(Orchestral_Versi.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KMYW_(disc_3)_04_-_Ensueno_(Orchestral_Version).mp3 (1 copy)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KMYW_(disc_3)_04_-_Ensueño_(Orchestral_Version).mp3 (1 copy)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KNAK_(disc_3)_05_-_The_Golden_Boy_(Orchestral_Version).mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KNUA_(disc_3)_06_-_Guide_Me_Home_(Orchestral_Version).mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KOVI_(disc_3)_07_-_How_Can_I_Go_On_(Orchestral_Version.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KPP8_(disc_3)_08_-_Exercises_In_Free_Love_(Orchestral_.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-whereis Freddie_Mercury/Barcelona_[+video]/B00921KQJ8_(disc_3)_09_-_Overture_Piccante_(Orchestral_Versi.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
-ok
-
-
-# End of transcript or log.
-"""]]
-
-> We seem to have reached a point of confusion, lack of information,
-> and/or diminishing returns with this bug report. I have fixed
-> it as best I can. If you have any problems, please file a new bug report
-> with as complete information as possible. [[done]] --[[Joey]]
diff --git a/doc/bugs/utf8/comment_10_f298b8b480d3ab2dd9c279589afcd0ea._comment b/doc/bugs/utf8/comment_10_f298b8b480d3ab2dd9c279589afcd0ea._comment
deleted file mode 100644
index 7a61fc0d5..000000000
--- a/doc/bugs/utf8/comment_10_f298b8b480d3ab2dd9c279589afcd0ea._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnRai_qFYPVvEgC6i1nlM1bh-C__jbhqS0"
- nickname="Matthew"
- subject="Ooops"
- date="2013-07-26T21:28:46Z"
- content="""
-Hi Joey,
-
-I started replicating it today but managed to make annex a directory structure I did not mean to through my own silly fault and it's taking ages to unannex, I'll have another go over the weekend, this time with not so fat fingers!
-"""]]
diff --git a/doc/bugs/utf8/comment_11_a8864a46f8154680beeea27449ac6f09._comment b/doc/bugs/utf8/comment_11_a8864a46f8154680beeea27449ac6f09._comment
deleted file mode 100644
index 50822a094..000000000
--- a/doc/bugs/utf8/comment_11_a8864a46f8154680beeea27449ac6f09._comment
+++ /dev/null
@@ -1,142 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnRai_qFYPVvEgC6i1nlM1bh-C__jbhqS0"
- nickname="Matthew"
- subject="Replicated, I think"
- date="2013-07-27T10:02:32Z"
- content="""
-I think I have it replicated, I did not do _exactly_ the same thing, no renaming of the tilde-n file but I still got the ControlPath error.
-
- # On phone - Copy folder into Git Annex... wait till done
- # On Server with new Git Annex: git annex sync
- fozz@markdown:~/tmp/zzz$ git annex get .
- get Freddie_Mercury/Barcelona_[+video]/B00921KGRK_(disc_1)_01_-_Barcelona_(New_Orchestrated_Version.mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KH5G_(disc_1)_02_-_La_Japonaise_(New_Orchestrated_Vers.mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KHD8_(disc_1)_03_-_The_Fallen_Priest_(New_Orchestrated.mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KHNS_(disc_1)_04_-_Ensueño_(New_Orchestrated_Version).mp3 (not available)
- Try making some of these repositories available:
- bc0525c4-cf9e-45da-a8e1-19003dee1dcb -- u0_a84@localhost:/sdcard/annex
- failed
- get Freddie_Mercury/Barcelona_[+video]/B00921KHY2_(disc_1)_05_-_The_Golden_Boy_(New_Orchestrated_Ve.mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KI9G_(disc_1)_06_-_Guide_Me_Home_(New_Orchestrated_Ver.mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KIIW_(disc_1)_07_-_How_Can_I_Go_On_(New_Orchestrated_V.mp3 ^[[A^[[A^[[A^[[A^[[A^[[A(from origin...) ^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[Aok
- get Freddie_Mercury/Barcelona_[+video]/B00921KITG_(disc_1)_08_-_Exercises_In_Free_Love_(New_Orchest.mp3 ^[[A^[[A^[[A^[[A^[[A^[[A(from origin...) ^[[A^[[A^[[A^[[A^[[A^[[Aok
- get Freddie_Mercury/Barcelona_[+video]/B00921KJ22_(disc_1)_09_-_Overture_Piccante_(New_Orchestrated.mp3 ^C
- fozz@markdown:~/tmp/zzz$ git annex get .
- get Freddie_Mercury/Barcelona_[+video]/B00921KHNS_(disc_1)_04_-_Ensueño_(New_Orchestrated_Version).mp3 (not available)
- Try making some of these repositories available:
- bc0525c4-cf9e-45da-a8e1-19003dee1dcb -- u0_a84@localhost:/sdcard/annex
- failed
- get Freddie_Mercury/Barcelona_[+video]/B00921KJ22_(disc_1)_09_-_Overture_Piccante_(New_Orchestrated.mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KJB8_(disc_1)_10_-_How_Can_I_Go_On_(New_Orchestrated_V.mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KJMW_(disc_2)_01_-_Exercises_In_Free_Love_(1987_B-Side.mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KJVI_(disc_2)_02_-_Barcelona_(Early_Version__Freddie's.mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KK5I_(disc_2)_03_-_La_Japonaise_(Early_Version__Freddi.mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KKHQ_(disc_2)_04_-_Rachmaninov's_Revenge_(The_Fallen_P.mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KKSA_(disc_2)_05_-_Ensueño_(Monsterrat's_Live_Takes).mp3 (not available)
- Try making some of these repositories available:
- bc0525c4-cf9e-45da-a8e1-19003dee1dcb -- u0_a84@localhost:/sdcard/annex
- failed
- get Freddie_Mercury/Barcelona_[+video]/B00921KL2U_(disc_2)_06_-_The_Golden_Boy_(Early_Version__Fred.mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KLBQ_(disc_2)_07_-_Guide_Me_Home_(Alternative_Version).mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KLJI_(disc_2)_08_-_How_Can_I_Go_On_(Alternative_Versio.mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KLUC_(disc_2)_09_-_How_Can_I_Go_On_(Alternative_Piano_.mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KM3I_(disc_3)_01_-_Barcelona_(Orchestral_Version).mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KMBU_(disc_3)_02_-_La_Japonaise_(Orchestral_Version).mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KMM4_(disc_3)_03_-_The_Fallen_Priest_(Orchestral_Versi.mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KMYW_(disc_3)_04_-_Ensueño_(Orchestral_Version).mp3 (not available)
- Try making some of these repositories available:
- bc0525c4-cf9e-45da-a8e1-19003dee1dcb -- u0_a84@localhost:/sdcard/annex
- failed
- get Freddie_Mercury/Barcelona_[+video]/B00921KNAK_(disc_3)_05_-_The_Golden_Boy_(Orchestral_Version).mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KNUA_(disc_3)_06_-_Guide_Me_Home_(Orchestral_Version).mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KOVI_(disc_3)_07_-_How_Can_I_Go_On_(Orchestral_Version.mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KPP8_(disc_3)_08_-_Exercises_In_Free_Love_(Orchestral_.mp3 (from origin...) ok
- get Freddie_Mercury/Barcelona_[+video]/B00921KQJ8_(disc_3)_09_-_Overture_Piccante_(Orchestral_Versi.mp3 (from origin...) ok
- (Recording state in git...)
- git-annex: get: 3 failed
-
- fozz@markdown:~/tmp/zzz$ git annex whereis Freddie_Mercury/Barcelona_\[+video\]/B00921KMYW_\(disc_3\)_04_-_Ensueño_\(Orchestral_Version\).mp3
- whereis Freddie_Mercury/Barcelona_[+video]/B00921KMYW_(disc_3)_04_-_Ensueño_(Orchestral_Version).mp3 (1 copy)
- bc0525c4-cf9e-45da-a8e1-19003dee1dcb -- u0_a84@localhost:/sdcard/annex
- ok
-
- # On phone
- Falling back to hardcoded app location; cannot find expected files in /data/app-lib
- git annex webapp
- u0_a84@android:/sdcard/git-annex.home $ git annex webapp
-
- Detected a crippled filesystem.
-
- Enabling direct mode.
- fozz@markdown.lang.speechmarks.com's password:
- fozz@markdown.lang.speechmarks.com's password:
- ^Z[1] + Stopped git annex webapp
- u0_a84@android:/sdcard/git-annex.home $ bg
- [1] git annex webapp
- u0_a84@android:/sdcard/git-annex.home $ cd ../annex/
- u0_a84@android:/sdcard/annex $ ls
- Freddie_Mercury
- u0_a84@android:/sdcard/annex $ git remote -v
- markdown.lang.speechmarks.com_phoneannex ssh://fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex/~/phone-annex/ (fetch)
- markdown.lang.speechmarks.com_phoneannex ssh://fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex/~/phone-annex/ (push)
- u0_a84@android:/sdcard/annex $ git annex copy . --to markdown.lang.speechmarks.com_phoneannex
- copy Freddie_Mercury/Barcelona_[+video]/B00921KGRK_(disc_1)_01_-_Barcelona_(New_Orchestrated_Version.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.IdWwlXHtSsjVUMcq\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KH5G_(disc_1)_02_-_La_Japonaise_(New_Orchestrated_Vers.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.WisPICyIHiMGEO3k\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KHD8_(disc_1)_03_-_The_Fallen_Priest_(New_Orchestrated.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.hYyDKddvBHgjW4AI\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KHNS_(disc_1)_04_-_Ensueo_(New_Orchestrated_Version).mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.PR2s7Btep0Vklpr1\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KHY2_(disc_1)_05_-_The_Golden_Boy_(New_Orchestrated_Ve.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.GuiE6O9sVgvAsPjv\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KI9G_(disc_1)_06_-_Guide_Me_Home_(New_Orchestrated_Ver.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.MNE7Nrd4rTe59BpR\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KIIW_(disc_1)_07_-_How_Can_I_Go_On_(New_Orchestrated_V.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.MtXCKPHds4ma0iPl\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KITG_(disc_1)_08_-_Exercises_In_Free_Love_(New_Orchest.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.6iovvzKR6HE4nZwz\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KJ22_(disc_1)_09_-_Overture_Piccante_(New_Orchestrated.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.wZy825TDcYvHhDUx\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KJB8_(disc_1)_10_-_How_Can_I_Go_On_(New_Orchestrated_V.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.RQLLAcX2MGpLvJC5\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KJMW_(disc_2)_01_-_Exercises_In_Free_Love_(1987_B-Side.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.kiQQXvKBLNSP3cRO\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KJVI_(disc_2)_02_-_Barcelona_(Early_Version__Freddie's.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.CIdY4uFDFCIboOpG\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KK5I_(disc_2)_03_-_La_Japonaise_(Early_Version__Freddi.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.sza5nEOnJ4qnh6op\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KKHQ_(disc_2)_04_-_Rachmaninov's_Revenge_(The_Fallen_P.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.PXT6QfTHojjPvlBM\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KKSA_(disc_2)_05_-_Ensueo_(Monsterrat's_Live_Takes).mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.LaHS26WonwTUqBDO\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KL2U_(disc_2)_06_-_The_Golden_Boy_(Early_Version__Fred.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.rw9hP3fjehIAJc1P\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KLBQ_(disc_2)_07_-_Guide_Me_Home_(Alternative_Version).mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.aJOWNwtRBDG6pecN\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KLJI_(disc_2)_08_-_How_Can_I_Go_On_(Alternative_Versio.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.fOFCaugrRAzzHAMZ\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KLUC_(disc_2)_09_-_How_Can_I_Go_On_(Alternative_Piano_.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.onG8CR4YP9x5c3ZK\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KM3I_(disc_3)_01_-_Barcelona_(Orchestral_Version).mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.KgOqB8Rg1ZZI1fzP\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KMBU_(disc_3)_02_-_La_Japonaise_(Orchestral_Version).mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.xN1FqoX79hSxwQS7\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KMM4_(disc_3)_03_-_The_Fallen_Priest_(Orchestral_Versi.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.YpZgAo1LVawkOIBd\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KMYW_(disc_3)_04_-_Ensueo_(Orchestral_Version).mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.TDvJl5gPqOFTbqgF\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KNAK_(disc_3)_05_-_The_Golden_Boy_(Orchestral_Version).mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.CYBfRJuMZTYUgTnN\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KNUA_(disc_3)_06_-_Guide_Me_Home_(Orchestral_Version).mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.VjyVTH1bRjeRl7fE\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KOVI_(disc_3)_07_-_How_Can_I_Go_On_(Orchestral_Version.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.SfA8ZMsoaea1JqZm\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KPP8_(disc_3)_08_-_Exercises_In_Free_Love_(Orchestral_.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.uYsVLhxvYZl1F7Dj\" too long for Unix domain socket
- ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KQJ8_(disc_3)_09_-_Overture_Piccante_(Orchestral_Versi.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ControlPath \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.NRAFY6O124W6tAdG\" too long for Unix domain socket
- ok
- (Recording state in git...)
- u0_a84@android:/sdcard/annex $
-
-"""]]
diff --git a/doc/bugs/utf8/comment_12_2202c3479d19d306f31aac5a47b55e7d._comment b/doc/bugs/utf8/comment_12_2202c3479d19d306f31aac5a47b55e7d._comment
deleted file mode 100644
index 50adfd847..000000000
--- a/doc/bugs/utf8/comment_12_2202c3479d19d306f31aac5a47b55e7d._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.246.110"
- subject="comment 12"
- date="2013-07-27T17:46:11Z"
- content="""
-Ok, I think if you upgrade to the current build for Android, you'll find that the problem goes away. I put in a fix several days ago that makes it use much shorter controlpaths.
-
-The question remains why it ever used a path of \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.IdWwlXHtSsjVUMcq\". This is 110 bytes; the code checks for a path of longer than 99 bytes. It should have disabled ssh connection caching when it was unable to construct a short enough path.
-"""]]
diff --git a/doc/bugs/utf8/comment_13_7044d2c5bb1c91ee37eb9868963a1ff2._comment b/doc/bugs/utf8/comment_13_7044d2c5bb1c91ee37eb9868963a1ff2._comment
deleted file mode 100644
index 651e43438..000000000
--- a/doc/bugs/utf8/comment_13_7044d2c5bb1c91ee37eb9868963a1ff2._comment
+++ /dev/null
@@ -1,41 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.246.110"
- subject="comment 13"
- date="2013-07-27T20:46:01Z"
- content="""
-I've verified that the (old) code correctly returned no path when it's too long:
-
-<pre>
-*Annex.Ssh System.Directory System.Posix.Directory Annex Git.Construct Git.Config System.Posix.Env Utility.Env> eval (newState r') $ changeGitConfig (\c -> c { annexCrippledFileSystem = True }) >> sshInfo (\"fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.IdWwlXHtSsjVUMcq\", Nothing)
-(Nothing,[])
-</pre>
-
-In case the problem was somehow related to calculating the length on Android (ie, Data.Bits.Utils broken), I built a small program that calculated the length of the string the same way
-
-[[!format haskell \"\"\"
-import Utility.FileSystemEncoding
-
-main = do
- let s = \"/data/data/ga.androidterm/tmp/fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.IdWwlXHtSsjVUMcq\"
- let ws = decodeW8 s
- print (length ws)
-\"\"\"]]
-
-Outputs 110 on Android as expected.
-
-Finally, using git-annex 4.20130721-g002de3e on Android (a newer version than the bug reporter's but with no changes to Annex.Ssh), I manually set up a repository using the same hostname:
-
-<pre>
-[remote \"foo\"]
- url = ssh://fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.IdWwlXHtSsjVUMcq
- fetch = +refs/heads/*:refs/remotes/foo/*
- annex-uuid = dummy
-</pre>
-
-And still cannot replicate the bug; as expected it does not use the socket since it's too long:
-
-copy foo (checking foo...) [2013-07-27 16:40:42 EDT] call: ssh [\"-T\",\"fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex.IdWwlXHtSsjVUMcq\",\"git-annex-shell 'inannex' '' 'SHA256E-s29--093429efb0d1427753d1f038f5279ec4df66785a1b2429b3fa5e3a01bcb75bd8' --uuid 111\"]
-
-So, I don't understand how this could have happened. Although my recent changes mean it'll use a 62 byte path max on Android now, which certainly should avoid the problem, even if there's some actual bug here that I cannot reproduce.
-"""]]
diff --git a/doc/bugs/utf8/comment_14_656b3caa16ae93b092fb5804fa575a3b._comment b/doc/bugs/utf8/comment_14_656b3caa16ae93b092fb5804fa575a3b._comment
deleted file mode 100644
index 6c858013b..000000000
--- a/doc/bugs/utf8/comment_14_656b3caa16ae93b092fb5804fa575a3b._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnRai_qFYPVvEgC6i1nlM1bh-C__jbhqS0"
- nickname="Matthew"
- subject="Will give the new version a got tomorrow..."
- date="2013-07-27T21:45:29Z"
- content="""
-But do you have any idea why it didn't transfer the filename with the ~ above the n?
-"""]]
diff --git a/doc/bugs/utf8/comment_15_25b3d4c47c45b72129b17b171a45c5f9._comment b/doc/bugs/utf8/comment_15_25b3d4c47c45b72129b17b171a45c5f9._comment
deleted file mode 100644
index 8fb44eebd..000000000
--- a/doc/bugs/utf8/comment_15_25b3d4c47c45b72129b17b171a45c5f9._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.246.110"
- subject="comment 15"
- date="2013-07-27T21:50:32Z"
- content="""
-AFAICS it was failing to transfer every file, no matter what the name, due to the socket length too long problem.
-"""]]
diff --git a/doc/bugs/utf8/comment_16_2aaab9253bbc75012292c7b5a7d55696._comment b/doc/bugs/utf8/comment_16_2aaab9253bbc75012292c7b5a7d55696._comment
deleted file mode 100644
index e10b8f85a..000000000
--- a/doc/bugs/utf8/comment_16_2aaab9253bbc75012292c7b5a7d55696._comment
+++ /dev/null
@@ -1,173 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnRai_qFYPVvEgC6i1nlM1bh-C__jbhqS0"
- nickname="Matthew"
- subject="Not completely..."
- date="2013-07-28T11:44:40Z"
- content="""
-So done a bit of testing this morning...
-
-I upgraded the Git Annex on my phone and added a text file called \"mañnequin\" into my Git Annex. The assistant web app did not do anything and it did not appear on my desktop when I sync'd... So I went to my phone manually added it and synced. Which then did make it appear on my desktop when I did a sync.
-
-Phone Log:
-
- Falling back to hardcoded app location; cannot find expected files in /data/app-lib
- git annex webapp
- u0_a84@android:/sdcard/git-annex.home $ git annex webapp
- ^Z[1] + Stopped git annex webapp
- u0_a84@android:/sdcard/git-annex.home $ bg
- [1] git annex webapp
- u0_a84@android:/sdcard/git-annex.home $ cd ../annex/
- u0_a84@android:/sdcard/annex $ git remote -v
- markdown.lang.speechmarks.com_phoneannex ssh://fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex/~/phone-annex/ (fetch)
- markdown.lang.speechmarks.com_phoneannex ssh://fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex/~/phone-annex/ (push)
- u0_a84@android:/sdcard/annex $ git-annex version
- git-annex version: 4.20130723-ged05a63
- build flags: Assistant Webapp Testsuite S3 WebDAV Inotify XMPP DNS
- local repository version: 4
- default repository version: 3
- supported repository versions: 3 4
- upgrade supported from repository versions: 0 1 2
- u0_a84@android:/sdcard/annex $ git annex copy . --to markdown.lang.speechmarks.com_phoneannex
- copy Freddie_Mercury/Barcelona_[+video]/B00921KGRK_(disc_1)_01_-_Barcelona_(New_Orchestrated_Version.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KH5G_(disc_1)_02_-_La_Japonaise_(New_Orchestrated_Vers.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KHD8_(disc_1)_03_-_The_Fallen_Priest_(New_Orchestrated.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KHNS_(disc_1)_04_-_Ensueo_(New_Orchestrated_Version).mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KHY2_(disc_1)_05_-_The_Golden_Boy_(New_Orchestrated_Ve.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KI9G_(disc_1)_06_-_Guide_Me_Home_(New_Orchestrated_Ver.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KIIW_(disc_1)_07_-_How_Can_I_Go_On_(New_Orchestrated_V.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KITG_(disc_1)_08_-_Exercises_In_Free_Love_(New_Orchest.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KJ22_(disc_1)_09_-_Overture_Piccante_(New_Orchestrated.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KJB8_(disc_1)_10_-_How_Can_I_Go_On_(New_Orchestrated_V.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KJMW_(disc_2)_01_-_Exercises_In_Free_Love_(1987_B-Side.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KJVI_(disc_2)_02_-_Barcelona_(Early_Version__Freddie's.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KK5I_(disc_2)_03_-_La_Japonaise_(Early_Version__Freddi.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KKHQ_(disc_2)_04_-_Rachmaninov's_Revenge_(The_Fallen_P.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KKSA_(disc_2)_05_-_Ensueo_(Monsterrat's_Live_Takes).mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KL2U_(disc_2)_06_-_The_Golden_Boy_(Early_Version__Fred.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KLBQ_(disc_2)_07_-_Guide_Me_Home_(Alternative_Version).mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KLJI_(disc_2)_08_-_How_Can_I_Go_On_(Alternative_Versio.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KLUC_(disc_2)_09_-_How_Can_I_Go_On_(Alternative_Piano_.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KM3I_(disc_3)_01_-_Barcelona_(Orchestral_Version).mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KMBU_(disc_3)_02_-_La_Japonaise_(Orchestral_Version).mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KMM4_(disc_3)_03_-_The_Fallen_Priest_(Orchestral_Versi.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KMYW_(disc_3)_04_-_Ensueo_(Orchestral_Version).mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KNAK_(disc_3)_05_-_The_Golden_Boy_(Orchestral_Version).mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KNUA_(disc_3)_06_-_Guide_Me_Home_(Orchestral_Version).mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KOVI_(disc_3)_07_-_How_Can_I_Go_On_(Orchestral_Version.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KPP8_(disc_3)_08_-_Exercises_In_Free_Love_(Orchestral_.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- copy Freddie_Mercury/Barcelona_[+video]/B00921KQJ8_(disc_3)_09_-_Overture_Piccante_(Orchestral_Versi.mp3 (checking markdown.lang.speechmarks.com_phoneannex...) ok
- u0_a84@android:/sdcard/annex $ ls
- Freddie_Mercury
- u0_a84@android:/sdcard/annex $ ls
- ls lsattr lsmod lsof lspci lsusb
- rcury/Barcelona_\[+video]/B00921K <
- B00921KGRK_(disc_1)_01_-_Barcelona_(New_Orchestrated_Version.mp3
- B00921KH5G_(disc_1)_02_-_La_Japonaise_(New_Orchestrated_Vers.mp3
- B00921KHD8_(disc_1)_03_-_The_Fallen_Priest_(New_Orchestrated.mp3
- B00921KHNS_(disc_1)_04_-_Ensueo_(New_Orchestrated_Version).mp3
- B00921KHY2_(disc_1)_05_-_The_Golden_Boy_(New_Orchestrated_Ve.mp3
- B00921KI9G_(disc_1)_06_-_Guide_Me_Home_(New_Orchestrated_Ver.mp3
- B00921KIIW_(disc_1)_07_-_How_Can_I_Go_On_(New_Orchestrated_V.mp3
- B00921KITG_(disc_1)_08_-_Exercises_In_Free_Love_(New_Orchest.mp3
- B00921KJ22_(disc_1)_09_-_Overture_Piccante_(New_Orchestrated.mp3
- B00921KJB8_(disc_1)_10_-_How_Can_I_Go_On_(New_Orchestrated_V.mp3
- B00921KJMW_(disc_2)_01_-_Exercises_In_Free_Love_(1987_B-Side.mp3
- B00921KJVI_(disc_2)_02_-_Barcelona_(Early_Version__Freddie's.mp3
- B00921KK5I_(disc_2)_03_-_La_Japonaise_(Early_Version__Freddi.mp3
- B00921KKHQ_(disc_2)_04_-_Rachmaninov's_Revenge_(The_Fallen_P.mp3
- B00921KKSA_(disc_2)_05_-_Ensueo_(Monsterrat's_Live_Takes).mp3
- B00921KL2U_(disc_2)_06_-_The_Golden_Boy_(Early_Version__Fred.mp3
- B00921KLBQ_(disc_2)_07_-_Guide_Me_Home_(Alternative_Version).mp3
- B00921KLJI_(disc_2)_08_-_How_Can_I_Go_On_(Alternative_Versio.mp3
- B00921KLUC_(disc_2)_09_-_How_Can_I_Go_On_(Alternative_Piano_.mp3
- B00921KM3I_(disc_3)_01_-_Barcelona_(Orchestral_Version).mp3
- B00921KMBU_(disc_3)_02_-_La_Japonaise_(Orchestral_Version).mp3
- B00921KMM4_(disc_3)_03_-_The_Fallen_Priest_(Orchestral_Versi.mp3
- B00921KMYW_(disc_3)_04_-_Ensueo_(Orchestral_Version).mp3
- B00921KNAK_(disc_3)_05_-_The_Golden_Boy_(Orchestral_Version).mp3
- B00921KNUA_(disc_3)_06_-_Guide_Me_Home_(Orchestral_Version).mp3
- B00921KOVI_(disc_3)_07_-_How_Can_I_Go_On_(Orchestral_Version.mp3
- B00921KPP8_(disc_3)_08_-_Exercises_In_Free_Love_(Orchestral_.mp3
- B00921KQJ8_(disc_3)_09_-_Overture_Piccante_(Orchestral_Versi.mp3
- rcury/Barcelona_\[+video]/B00921K <
- ls: Freddie_Mercury/Barcelona_[+video]/B00921K: No such file or directory
- 1|u0_a84@android:/sdcard/annex $
- 1|u0_a84@android:/sdcard/annex $
- 1|u0_a84@android:/sdcard/annex $
- 1|u0_a84@android:/sdcard/annex $
- 1|u0_a84@android:/sdcard/annex $
- 1|u0_a84@android:/sdcard/annex $ fg
- git annex webapp
- bg
- ^Z[1] + Stopped git annex webapp
- u0_a84@android:/sdcard/annex $ bg
- [1] git annex webapp
- u0_a84@android:/sdcard/annex $ ls
- Freddie_Mercury ma??nequin
- u0_a84@android:/sdcard/annex $ git annex add manequin
- Freddie_Mercury/ manequin
- u0_a84@android:/sdcard/annex $ git annex add manequin
- add manequin (checksum...) ok
- (Recording state in git...)
- u0_a84@android:/sdcard/annex $ git annex sync
- commit
- ok
- pull markdown.lang.speechmarks.com_phoneannex
- remote: Counting objects: 12, done.
- remote: Compressing objects: 100% (6/6), done.
- remote: Total 8 (delta 4), reused 0 (delta 0)
- Unpacking objects: 100% (8/8), done.
- From ssh://git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex/~/phone-annex
- c709e47..d2678a5 synced/git-annex -> markdown.lang.speechmarks.com_phoneannex/synced/git-annex
- ok
- (merging markdown.lang.speechmarks.com_phoneannex/synced/git-annex into git-annex...)
- (Recording state in git...)
- (Recording state in git...)
- push markdown.lang.speechmarks.com_phoneannex
- warning: no threads support, ignoring --threads
- Counting objects: 15, done.
- Compressing objects: 100% (11/11), done.
- Writing objects: 100% (12/12), 1.19 KiB, done.
- Total 12 (delta 4), reused 0 (delta 0)
- To ssh://fozz@git-annex-markdown.lang.speechmarks.com-fozz_phone.2Dannex/~/phone-annex/
- d2678a5..577fa92 git-annex -> synced/git-annex
- c829a0a..2aa892f master -> synced/master
- ok
- u0_a84@android:/sdcard/annex $
-
-I have no idea in this log why it is wrote \"manequin\" not \"mañnequin\" but this is what the command completion gave me ( I don't know how to type that letter ), but as you can see later it came over correctly later.
-
-Desktop:
-
- fozz@cobol:~/phone-annex $ git annex sync
- commit
- # On branch master
- nothing to commit, working directory clean
- ok
- pull origin
- remote: Counting objects: 15, done.
- remote: Compressing objects: 100% (11/11), done.
- remote: Total 12 (delta 4), reused 0 (delta 0)
- Unpacking objects: 100% (12/12), done.
- From ssh://markdown.lang.speechmarks.com/home/fozz/phone-annex
- c829a0a..2aa892f master -> origin/master
- d2678a5..577fa92 synced/git-annex -> origin/synced/git-annex
- c829a0a..2aa892f synced/master -> origin/synced/master
-
- Updating c829a0a..2aa892f
- Fast-forward
- \"ma\303\261nequin\" | 1 +
- 1 file changed, 1 insertion(+)
- create mode 120000 \"ma\303\261nequin\"
-
- Already up-to-date.
- ok
- (merging origin/synced/git-annex into git-annex...)
- push origin
- Everything up-to-date
- ok
-
-I have since gone through and replicated this with \"mañnequin.txt\" from scratch with a completely empty repository and it did an identical thing again. I then added a backup of my KeePass.kdb database and it went over fine. So it seems that git-annex has no problem with the \"ñ\" file now, but the assistant does not see it at all.
-
-I have left the repository on my phone / desktop / server in this state so if you want further output please let me know.
-"""]]
diff --git a/doc/bugs/utf8/comment_1_416ad6fb5f7379732129dc5283a7e550._comment b/doc/bugs/utf8/comment_1_416ad6fb5f7379732129dc5283a7e550._comment
deleted file mode 100644
index 0df4c2aa5..000000000
--- a/doc/bugs/utf8/comment_1_416ad6fb5f7379732129dc5283a7e550._comment
+++ /dev/null
@@ -1,23 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnRai_qFYPVvEgC6i1nlM1bh-C__jbhqS0"
- nickname="Matthew"
- subject="Renaming files"
- date="2013-07-21T10:08:16Z"
- content="""
-Renaming the files does not fix it, Git annex on all computers knows that those files are only in my phone, but the assistant is refusing to transfer the contents, it does not seem to know that it needs to...
-
- whereis Freddie_Mercury/Barcelona_[+video]/B00921KMM4_(disc_3)_03_-_The_Fallen_Priest_(Orchestral_Versi.mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
- ok
- whereis Freddie_Mercury/Barcelona_[+video]/B00921KMYW_(disc_3)_04_-_Ensueno_(Orchestral_Version).mp3 (1 copy)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- ok
- whereis Freddie_Mercury/Barcelona_[+video]/B00921KNAK_(disc_3)_05_-_The_Golden_Boy_(Orchestral_Version).mp3 (3 copies)
- 1f368162-f02f-4794-af0c-1b5489e099b3 -- u0_a84@localhost:/sdcard/annex
- 53f03d06-f1e3-11e2-8519-1b41c09abecd -- here (Cobol: Phone)
- cb6240e0-f1df-11e2-836a-7f4323e50c49 -- origin (Markdown: Phone)
- ok
-
-"""]]
diff --git a/doc/bugs/utf8/comment_2_cd55f6bbeb145fd554f331dcff64f5e1._comment b/doc/bugs/utf8/comment_2_cd55f6bbeb145fd554f331dcff64f5e1._comment
deleted file mode 100644
index ff2a5363d..000000000
--- a/doc/bugs/utf8/comment_2_cd55f6bbeb145fd554f331dcff64f5e1._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnRai_qFYPVvEgC6i1nlM1bh-C__jbhqS0"
- nickname="Matthew"
- subject="git annex copy --to won't get them across either..."
- date="2013-07-21T10:12:03Z"
- content="""
-git annex copy . --to markdown.DOMAIN_phoneannex responds with
-
- ControlPath \"/data/data/ga.androidterm/tmp/fozz@...somethingthatlookslikeahash\" too long for Unix domain socket
-"""]]
diff --git a/doc/bugs/utf8/comment_3_bb583a419d6fa4e33e5364c4468b35c6._comment b/doc/bugs/utf8/comment_3_bb583a419d6fa4e33e5364c4468b35c6._comment
deleted file mode 100644
index ecdee070c..000000000
--- a/doc/bugs/utf8/comment_3_bb583a419d6fa4e33e5364c4468b35c6._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.140"
- subject="seems to not involve utf8 at all.."
- date="2013-07-21T18:17:00Z"
- content="""
-Can you please show me the actual filename, that you obfuscated as \"/data/data/ga.androidterm/tmp/fozz@...somethingthatlookslikeahash\" ?
-"""]]
diff --git a/doc/bugs/utf8/comment_4_cd8a22cfb70d9d21f0a5339ccc52ee93._comment b/doc/bugs/utf8/comment_4_cd8a22cfb70d9d21f0a5339ccc52ee93._comment
deleted file mode 100644
index 12bf4c5a6..000000000
--- a/doc/bugs/utf8/comment_4_cd8a22cfb70d9d21f0a5339ccc52ee93._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="GLITTAH"
- ip="37.130.227.133"
- subject="comment 4"
- date="2013-07-21T19:36:16Z"
- content="""
-This sounds like a bug I ran into a while ago that got fixed.
-
->What version of git-annex are you using? On what operating system?
->
->Phone: 4.20130709-g339d1eo Transfer Server: 3.20120406 (which it did not get to) Desktop: 3.20120629
-
-Maybe try upgrading your server and desktop versions? Those look old enough to still have the utf-8 bug.
-"""]]
diff --git a/doc/bugs/utf8/comment_5_14eefd4bee283802e9c462fa20b7835c._comment b/doc/bugs/utf8/comment_5_14eefd4bee283802e9c462fa20b7835c._comment
deleted file mode 100644
index 22ec33481..000000000
--- a/doc/bugs/utf8/comment_5_14eefd4bee283802e9c462fa20b7835c._comment
+++ /dev/null
@@ -1,19 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnRai_qFYPVvEgC6i1nlM1bh-C__jbhqS0"
- nickname="Matthew"
- subject="Darn it..."
- date="2013-07-21T20:29:33Z"
- content="""
-Hi,
-
-Sorry, it was on my phone and very long and I didn't think it'd be important... Sheesh Users eh!
-
-I think the error happened for every file or at least lots, not just the one with the strange tilde above the \"n\".
-Eventually, it might have been after a phone reboot, it sorted itself and continued.
-
-I can try and recreate it if it'll help, though it won't be till Wednesday / Thursday as I'm going away for a few days and I still need to pack.
-
-Sorry for the bad bug report, I know how annoying they are.
-
-It's not so easy for me to upgrade because one's an Ubuntu LTS and one is a Mint Debian Edition, both are the repository versions.
-"""]]
diff --git a/doc/bugs/utf8/comment_6_58d8b5bdb9f11e8c344e86a675a075dd._comment b/doc/bugs/utf8/comment_6_58d8b5bdb9f11e8c344e86a675a075dd._comment
deleted file mode 100644
index bb97d0fa4..000000000
--- a/doc/bugs/utf8/comment_6_58d8b5bdb9f11e8c344e86a675a075dd._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmkBwMWvNKZZCge_YqobCSILPMeK6xbFw8"
- nickname="develop"
- subject="comment 6"
- date="2013-07-21T20:31:50Z"
- content="""
-As much i myself personally would hate it. You really should go with the standalone builds provided on this site then.
-
-Just download the zip, extract on both machines. Make sure the PATH is correct, and it should Just Work(TM)
-
-"""]]
diff --git a/doc/bugs/utf8/comment_7_00fa9672ce55b6bfa885b8a13287ac25._comment b/doc/bugs/utf8/comment_7_00fa9672ce55b6bfa885b8a13287ac25._comment
deleted file mode 100644
index 925067989..000000000
--- a/doc/bugs/utf8/comment_7_00fa9672ce55b6bfa885b8a13287ac25._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.1.10"
- subject="comment 7"
- date="2013-07-22T18:34:55Z"
- content="""
-The only version of git-annex that matters is the one installed on the Android device. Which is fine.
-
-I reiterate my request for the actual thing that got obfuscated as \"/data/data/ga.androidterm/tmp/fozz@...somethingthatlookslikeahash\". Once I have that peice of information I should be able to fix this bug in short order. I understand exactly what's going on, except I don't know what the actual length of the filename that is causing the problem is.
-"""]]
diff --git a/doc/bugs/utf8/comment_8_a01e26fa0fafbc291020f53dbfdf6443._comment b/doc/bugs/utf8/comment_8_a01e26fa0fafbc291020f53dbfdf6443._comment
deleted file mode 100644
index dfb3570b6..000000000
--- a/doc/bugs/utf8/comment_8_a01e26fa0fafbc291020f53dbfdf6443._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnRai_qFYPVvEgC6i1nlM1bh-C__jbhqS0"
- nickname="Matthew"
- subject="I will give recreating the bug a go in about 3 days time..."
- date="2013-07-22T19:26:44Z"
- content="""
-I will give recreating the bug a go in about 3 days time when I get back off holiday.
-
-Thanks
-"""]]
diff --git a/doc/bugs/utf8/comment_9_b7c084be01ce985be51e48503fcba468._comment b/doc/bugs/utf8/comment_9_b7c084be01ce985be51e48503fcba468._comment
deleted file mode 100644
index f2c42a6bd..000000000
--- a/doc/bugs/utf8/comment_9_b7c084be01ce985be51e48503fcba468._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.246.110"
- subject="comment 9"
- date="2013-07-26T21:09:36Z"
- content="""
-Any luck reproducing this bug and getting the info I need to know exactly what's going on?
-"""]]
diff --git a/doc/bugs/uuid.log_trust.log_and_remote.log_merge_wackiness.mdwn b/doc/bugs/uuid.log_trust.log_and_remote.log_merge_wackiness.mdwn
deleted file mode 100644
index a84d8cb56..000000000
--- a/doc/bugs/uuid.log_trust.log_and_remote.log_merge_wackiness.mdwn
+++ /dev/null
@@ -1,36 +0,0 @@
-Since uuid.log, trust.log and remote.log are union merged, it's possible
-for any given item in them to have multiple values after a merge.
-This would happen, for example, if the value was changed in different ways
-in two repos which were then merged. git-annex will use an arbitrary
-one of the multiple values.
-
-A workaround if this should happen to you is to use `git annex describe`
-or other commands to re-set the value you want. The process of setting
-the value will remove the multiple lines.
-
-To fix this the file format needs to be changed to include a timestamp
-as is done with the other log files, then git-annex can consistently
-pick the newest value -- which is as close to the "right" value as can be
-determined in this situation.
-
-----
-
-File format backwards-compatability is the issue. Ideally, old git-annex
-would keep working, ignoring the timestamp.
-
-- uuid.log: "uuid description timestamp" would work; old git-annex
- would just treat the timestamp as part of the description which would be
- ok
- > update: converted! --[[Joey]]
-- trust.log: "uuid trustlevel timestamp" would work; old git-annex
- ignores trailing words
- > update: converted! --[[Joey]]
-- remote.log: "uuid key=value ... timestamp" is on the edge but does work
- (old git-annex will include the timestamp in the key/value map it builds,
- but that should not break anything really)
- > update: converted! --[[Joey]]
-
-Appending "timestamp=xxxxx" would be good for clarity, and make
-it easier to parse the timestamp out from lines that have it.
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash.mdwn b/doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash.mdwn
deleted file mode 100644
index 9bc891100..000000000
--- a/doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash.mdwn
+++ /dev/null
@@ -1,13 +0,0 @@
-After (probably, doesn't hepl anymore) adding the same file into multiple clones and syncing them back, I get a couple of these `.variant-` files. The target of these symlinks is different, but the actual file contents of the real data is the same.
-
-[[!format txt """
-jkt@svist /mnt/storage5/fotky[master] $ ls -al 2011-02-05\ Svatba\ Maruška\ Pavel/jkt/cam1/IMG_8962*variant*
-lrwxrwxrwx 1 jkt jkt 335 Mar 3 02:08 2011-02-05 Svatba Maruška Pavel/jkt/cam1/IMG_8962.JPG.variant-847f.cam ->
-../../../.git/annex/objects/P4/F7/SHA512E-s5534099--bf29fad838adb755b98351477e9a57c456b66ca393652f3b5df2093fc5448b3eeb0235420a715bfb84fb0cccfbbcea4514d4558467b64a39dc7daaf43c045672.cam/SHA512E-s5534099--bf29fad838adb755b98351477e9a57c456b66ca393652f3b5df2093fc5448b3eeb0235420a715bfb84fb0cccfbbcea4514d4558467b64a39dc7daaf43c045672.cam
-lrwxrwxrwx 1 jkt jkt 343 Mar 3 02:08 2011-02-05 Svatba Maruška Pavel/jkt/cam1/IMG_8962.JPG.variant-c8d0.cam ->
-../../../.git/annex/objects/38/pG/SHA512E-s5534099--bf29fad838adb755b98351477e9a57c456b66ca393652f3b5df2093fc5448b3eeb0235420a715bfb84fb0cccfbbcea4514d4558467b64a39dc7daaf43c045672.JPG.cam/SHA512E-s5534099--bf29fad838adb755b98351477e9a57c456b66ca393652f3b5df2093fc5448b3eeb0235420a715bfb84fb0cccfbbcea4514d4558467b64a39dc7daaf43c045672.JPG.cam
-"""]]
-
-I don't know what determines the `P4/F7/` vs `38/pG/` directory names, but I would prefer if these duplicates were not created.
-
-> I guess I'm going to close this as not a bug. [[done]] --[[Joey]]
diff --git a/doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_1_ffc5f79368b8927817e0e35a7a8f057b._comment b/doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_1_ffc5f79368b8927817e0e35a7a8f057b._comment
deleted file mode 100644
index 3d3531fce..000000000
--- a/doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_1_ffc5f79368b8927817e0e35a7a8f057b._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.146"
- subject="comment 1"
- date="2014-03-03T21:58:20Z"
- content="""
-You have 2 different keys, so get variant files. This is expected behavior.
-
-You're right that the 2 files have the same content. But two different keys were generated for them when they were added in their respective repositories. This can happen when you use the SHA512E (or SHA256E) backend, because it uses the extension as part of the key. One of the files you added had an extension of \".cam\", and the other \".JPG.cam\"
-
-If there is any bug here, it's perhaps that the \"E\" backends are smart about multi-component file extensions, so will treat eg .tar.gz as an extension, rather than just .gz. If this was not done, both files would have had a .cam extension, and the conflict would not have occurred. But while being less smart would have avoided it in this case, it won't in other cases where files can have different extensions but the same content (for example, \".jpeg\" vs \".jpg\").
-"""]]
diff --git a/doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_2_1382b486d198d707db760ae119f33ad1._comment b/doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_2_1382b486d198d707db760ae119f33ad1._comment
deleted file mode 100644
index 1ee533347..000000000
--- a/doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_2_1382b486d198d707db760ae119f33ad1._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlmOvQXLmGkQAUOIkPBQtsd9d45NqcX80M"
- nickname="Jan"
- subject="comment 2"
- date="2014-03-04T11:01:12Z"
- content="""
-I indeed use the SHA512E backend, but the files got the same name -- `IMG_8962.JPG.cam`.
-"""]]
diff --git a/doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_3_3c4074a1d4d7f63f6c07a05ca9717ce8._comment b/doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_3_3c4074a1d4d7f63f6c07a05ca9717ce8._comment
deleted file mode 100644
index 0f20d9164..000000000
--- a/doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_3_3c4074a1d4d7f63f6c07a05ca9717ce8._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.146"
- subject="comment 3"
- date="2014-03-05T16:56:14Z"
- content="""
-Older versions of git-annex did not preserve more than the very end of the extension when using SHA*E backends, so I guess you added the respective files using two different versions.
-"""]]
diff --git a/doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_4_deb848e50f6767d8a5f4348137744ec2._comment b/doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_4_deb848e50f6767d8a5f4348137744ec2._comment
deleted file mode 100644
index e53e5c2dd..000000000
--- a/doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_4_deb848e50f6767d8a5f4348137744ec2._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlmOvQXLmGkQAUOIkPBQtsd9d45NqcX80M"
- nickname="Jan"
- subject="comment 4"
- date="2014-03-05T17:07:05Z"
- content="""
-Ah, so it's a matter of `.JPG.cam` vs `.cam` as an extension -- that makes sense, I do use different versions on these two remotes. Is there some easy way of getting them back to a single underlying content apart from doing that by hand?
-"""]]
diff --git a/doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_5_b426c4569b7a788fbf963f787590e051._comment b/doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_5_b426c4569b7a788fbf963f787590e051._comment
deleted file mode 100644
index c50d75476..000000000
--- a/doc/bugs/variant-_files_are_created_even_though_the_content_has_the_same_hash/comment_5_b426c4569b7a788fbf963f787590e051._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.146"
- subject="comment 5"
- date="2014-03-05T18:02:08Z"
- content="""
-Well, the easy way, assuming that you don't need the extension in the key at all, is to run `git annex migrate --backend=SHA512 *.cam` in both repositories.
-
-You can also play tricks with `git annex rekey`. I don't know if I'd recommend doing so.
-"""]]
diff --git a/doc/bugs/version_doesn__39__t_show___34__Feeds__34___but_podcasting_feature_working.mdwn b/doc/bugs/version_doesn__39__t_show___34__Feeds__34___but_podcasting_feature_working.mdwn
deleted file mode 100644
index 64e83526f..000000000
--- a/doc/bugs/version_doesn__39__t_show___34__Feeds__34___but_podcasting_feature_working.mdwn
+++ /dev/null
@@ -1,28 +0,0 @@
-### Please describe the problem.
-on [[tips/downloading_podcasts/]] it says to look for "Feeds" in the output of version to see if you have the importfeeds support. I have importfeeds support but "Feeds" is not listed when doing version.
-
-### What steps will reproduce the problem?
-# git-annex version
-# git-annex importfeed <someurl>
-
-### What version of git-annex are you using? On what operating system?
-4.20130802 on Debian unstable
-
-### Please provide any additional information below.
-
-[[!format sh """
-greg@x200s:~/annextest$ git-annex version
-git-annex version: 4.20130802
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP
-local repository version: 3
-default repository version: 3
-supported repository versions: 3 4
-upgrade supported from repository versions: 0 1 2
-
-greg@x200s:~/annextest$ git-annex importfeed http://feeds.feedburner.com/OpenMetalcast/ogg
-(checking known urls...)
-importfeed http://feeds.feedburner.com/OpenMetalcast/ogg
-....<downloads the episodes etc>
-"""]]
-
-> Forgot I had to manually add that. [[done]] (really this time!) --[[Joey]]
diff --git a/doc/bugs/version_doesn__39__t_show___34__Feeds__34___but_podcasting_feature_working/comment_1_ce06ba4f65f322362b23797f6190c7c3._comment b/doc/bugs/version_doesn__39__t_show___34__Feeds__34___but_podcasting_feature_working/comment_1_ce06ba4f65f322362b23797f6190c7c3._comment
deleted file mode 100644
index 8b156f822..000000000
--- a/doc/bugs/version_doesn__39__t_show___34__Feeds__34___but_podcasting_feature_working/comment_1_ce06ba4f65f322362b23797f6190c7c3._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="http://a-or-b.myopenid.com/"
- ip="203.45.2.230"
- subject="comment 1"
- date="2013-09-04T01:36:46Z"
- content="""
-This still is not fixed. :-(
-
- $ git annex version
- git-annex version: 4.20130827
- build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS
-
-
-...but the ```importfeed``` functionality works.
-
-I know this isn't a particularly high priority bug...
-"""]]
diff --git a/doc/bugs/vicfg_and_description_often_not_propagated.mdwn b/doc/bugs/vicfg_and_description_often_not_propagated.mdwn
new file mode 100644
index 000000000..7e6dd9269
--- /dev/null
+++ b/doc/bugs/vicfg_and_description_often_not_propagated.mdwn
@@ -0,0 +1,154 @@
+### Please describe the problem.
+
+I can change the settings in one repo and sync it everywhere. Just to be surprised that one repo starts syncing to the transfer, every time it turns out that this repo lost its vicfg settings. Especially the Repository preferred contents are all back on standard. It was even once that it had the current settings and after the change and sync it goes back to some older state instead of the new one.
+
+### What steps will reproduce the problem?
+
+Well that is very hard. I have 8 repos and it happens randomly to some of them. I recreated all of them recently because I thought they are corrupt, that didn't help, just took me one week of time. It is also very hard to find a way to reproduce this because every vicfg causes a merge which takes minutes to hours.
+
+### What version of git-annex are you using? On what operating system?
+
+Linux: git-annex version: 5.20140412ubuntu1
+
+Mac OS: git-annex version: 5.20140717
+
+### Please provide any additional information below.
+
+Layout:
+
+transfer on rsync.net, conntented to that:
+
+ - Two OS X Clients
+
+ - Two Linux Archives
+
+My settings:
+
+
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+
+# git-annex configuration
+#
+# Changes saved to this file will be recorded in the git-annex branch.
+#
+# Lines in this file have the format:
+# setting field = value
+
+# Repository trust configuration
+# (Valid trust levels: trusted semitrusted untrusted dead)
+# (for Music bei Pirmin)
+trust 0734498b-817c-419f-a0c0-660854dc7cbe = trusted
+# (for Music bei Jean (Willikins) [willikins])
+trust 20e9d2e5-9563-4507-82d5-bf8e23be29a5 = trusted
+# (for Music bei Jean (Willikins Clone))
+trust 6e3431e9-8ec2-404a-9c35-b967db63147d = trusted
+# (for Music bei Jean (Watson))
+trust a6febfa0-9fe5-4a65-95bb-dc255d87c2e2 = trusted
+# (for )
+trust dafe9a64-2480-40e2-9688-9f783577ef72 = dead
+# (for web)
+#trust 00000000-0000-0000-0000-000000000001 = semitrusted
+# (for music transfer via rsync.net [music_rsync])
+#trust 83c42610-42ad-459d-92a4-1aca2dfb97e1 = semitrusted
+
+# Repository groups
+# (Standard groups: client transfer backup incrementalbackup smallarchive archive source manual public unwanted)
+# (Separate group names with spaces)
+# (for Music bei Jean (Willikins) [willikins])
+group 20e9d2e5-9563-4507-82d5-bf8e23be29a5 = archive
+# (for Music bei Jean (Willikins Clone))
+group 6e3431e9-8ec2-404a-9c35-b967db63147d = archive
+# (for )
+group 26d38f31-cb6c-412c-84ef-597d7959a680 = backup
+# (for Music bei Pirmin)
+group 0734498b-817c-419f-a0c0-660854dc7cbe = client
+# (for Music bei Jean (Watson))
+group a6febfa0-9fe5-4a65-95bb-dc255d87c2e2 = client
+# (for music transfer via rsync.net [music_rsync])
+group 83c42610-42ad-459d-92a4-1aca2dfb97e1 = transfer
+# (for )
+group dafe9a64-2480-40e2-9688-9f783577ef72 = unwanted
+# (for web)
+#group 00000000-0000-0000-0000-000000000001 =
+
+# Repository preferred contents
+# (Set to "standard" to use a repository's group's preferred contents)
+# (for Music bei Jean (Willikins) [willikins])
+wanted 20e9d2e5-9563-4507-82d5-bf8e23be29a5 = (not (copies=archive:2 or copies=smallarchive:2)) or approxlackingcopies=2
+# (for Music bei Jean (Willikins Clone))
+wanted 6e3431e9-8ec2-404a-9c35-b967db63147d = (not (copies=archive:2 or copies=smallarchive:2)) or approxlackingcopies=2
+# (for music transfer via rsync.net [music_rsync])
+wanted 83c42610-42ad-459d-92a4-1aca2dfb97e1 = not (inallgroup=client and copies=archive:2 and copies=client:2) and ((((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1)
+# (for Music bei Pirmin)
+wanted 0734498b-817c-419f-a0c0-660854dc7cbe = standard
+# (for )
+wanted 26d38f31-cb6c-412c-84ef-597d7959a680 = standard
+# (for )
+wanted dafe9a64-2480-40e2-9688-9f783577ef72 = standard
+# (for web)
+#wanted 00000000-0000-0000-0000-000000000001 =
+# (for Music bei Jean (Watson))
+wanted a6febfa0-9fe5-4a65-95bb-dc255d87c2e2 = standard
+
+# Group preferred contents
+# (Used by repositories with "groupwanted" in their preferred contents)
+#groupwanted archive =
+#groupwanted backup =
+#groupwanted client =
+#groupwanted incrementalbackup =
+#groupwanted manual =
+#groupwanted public =
+#groupwanted smallarchive =
+#groupwanted source =
+#groupwanted transfer =
+#groupwanted unwanted =
+
+# Standard preferred contents
+# (Used by wanted or groupwanted expressions containing "standard")
+# (For reference only; built-in and cannot be changed!)
+# standard client = (((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1
+# standard transfer = (not (inallgroup=client and copies=client:2) and ((((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1)) or approxlackingcopies=1
+# standard backup = include=* or unused
+# standard incrementalbackup = ((include=* or unused) and (not copies=incrementalbackup:1)) or approxlackingcopies=1
+# standard smallarchive = ((include=*/archive/* or include=archive/*) and ((not (copies=archive:1 or copies=smallarchive:1)) or approxlackingcopies=1)) or approxlackingcopies=1
+# standard archive = (not (copies=archive:1 or copies=smallarchive:1)) or approxlackingcopies=1
+# standard source = not (copies=1)
+# standard manual = present and ((((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1)
+# standard public = inpreferreddir
+# standard unwanted = exclude=*
+
+# Repository required contents
+# (for web)
+#required 00000000-0000-0000-0000-000000000001 =
+# (for Music bei Pirmin)
+#required 0734498b-817c-419f-a0c0-660854dc7cbe =
+# (for Music bei Jean (Willikins) [willikins])
+#required 20e9d2e5-9563-4507-82d5-bf8e23be29a5 =
+# (for Music bei Jean (Willikins Clone))
+#required 6e3431e9-8ec2-404a-9c35-b967db63147d =
+# (for music transfer via rsync.net [music_rsync])
+#required 83c42610-42ad-459d-92a4-1aca2dfb97e1 =
+# (for Music bei Jean (Watson))
+#required a6febfa0-9fe5-4a65-95bb-dc255d87c2e2 =
+
+# Scheduled activities
+# (Separate multiple activities with "; ")
+# (for web)
+#schedule 00000000-0000-0000-0000-000000000001 =
+# (for Music bei Pirmin)
+#schedule 0734498b-817c-419f-a0c0-660854dc7cbe =
+# (for Music bei Jean (Willikins) [willikins])
+#schedule 20e9d2e5-9563-4507-82d5-bf8e23be29a5 =
+# (for Music bei Jean (Willikins Clone))
+#schedule 6e3431e9-8ec2-404a-9c35-b967db63147d =
+# (for music transfer via rsync.net [music_rsync])
+#schedule 83c42610-42ad-459d-92a4-1aca2dfb97e1 =
+# (for Music bei Jean (Watson))
+#schedule a6febfa0-9fe5-4a65-95bb-dc255d87c2e2 =
+# End of transcript or log.
+"""]]
+
+[[!tag moreinfo]]
diff --git a/doc/bugs/vicfg_and_description_often_not_propagated/comment_1_60c5ba2de0c8b9b4538a4abd146007f6._comment b/doc/bugs/vicfg_and_description_often_not_propagated/comment_1_60c5ba2de0c8b9b4538a4abd146007f6._comment
new file mode 100644
index 000000000..47c2de6f1
--- /dev/null
+++ b/doc/bugs/vicfg_and_description_often_not_propagated/comment_1_60c5ba2de0c8b9b4538a4abd146007f6._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.132"
+ subject="comment 1"
+ date="2014-09-11T18:11:43Z"
+ content="""
+vicfg makes changes to files in the git-annex branch, so you can use regular git commands to examine those changes, and look through the history to find any changes that are contrary to the settings you want, and see when and where they were committed. That should provide a strong pointer to what is causing this to happen.
+"""]]
diff --git a/doc/bugs/vicfg_and_description_often_not_propagated/comment_2_d56aed617e0791aa17d9f37c8d3fd317._comment b/doc/bugs/vicfg_and_description_often_not_propagated/comment_2_d56aed617e0791aa17d9f37c8d3fd317._comment
new file mode 100644
index 000000000..cb485362b
--- /dev/null
+++ b/doc/bugs/vicfg_and_description_often_not_propagated/comment_2_d56aed617e0791aa17d9f37c8d3fd317._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 2"
+ date="2014-10-21T20:02:40Z"
+ content="""
+Can you please provide more information, like showing the commits made to the git-annex branch when the configuration was reverted?
+
+Also, might some of the clocks of computers where you're using git-annex be set wrong?
+
+I have tagged this report moreinfo because I don't have enough information to do anything else.
+"""]]
diff --git a/doc/bugs/view_logs_fails:_Internal_Server_Error__internal_liftAnnex.mdwn b/doc/bugs/view_logs_fails:_Internal_Server_Error__internal_liftAnnex.mdwn
deleted file mode 100644
index 0b9c54039..000000000
--- a/doc/bugs/view_logs_fails:_Internal_Server_Error__internal_liftAnnex.mdwn
+++ /dev/null
@@ -1,20 +0,0 @@
-### Please describe the problem.
-I tried to setup a fresh local repository and got an error:
-> Internal Server Error
-> user error (git ["--git-dir=/home/jana/Bilder/Fotos/.git","--work-tree=/home/jana/Bilder/Fotos","commit-tree","4b825dc642cb6eb9a060e54bf8d69288fbee4904"] exited 128)
-
-When clicking on "View logs", I get the following error:
-
-> Internal Server Error
-> internal liftAnnex
-
-### What steps will reproduce the problem?
-1. Run git-annex from programs menu
-2. Click "Make repository"
-
-### What version of git-annex are you using? On what operating system?
-- git-annex 4.20130627 on Ubuntu 13.10, installed from debian unstable (sid) repository.
-- git version 1.8.1.2
-
-> I've made it detect systems that lack a FQDN and set user.email
-> automatically. [[done]] --[[Joey]]
diff --git a/doc/bugs/view_logs_fails:_Internal_Server_Error__internal_liftAnnex/comment_1_57547f9a480df2c3f7b3997b0fb7039a._comment b/doc/bugs/view_logs_fails:_Internal_Server_Error__internal_liftAnnex/comment_1_57547f9a480df2c3f7b3997b0fb7039a._comment
deleted file mode 100644
index 44807b62f..000000000
--- a/doc/bugs/view_logs_fails:_Internal_Server_Error__internal_liftAnnex/comment_1_57547f9a480df2c3f7b3997b0fb7039a._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://cweiske.de/"
- nickname="cweiske"
- subject="comment 1"
- date="2013-07-04T20:20:15Z"
- content="""
-Running git-annex from the command line shows me:
-
-> fatal: unable to auto-detect email address (got 'jana@sybo.(none)')
-
-Setting user.email and user.name fixed the error.
-"""]]
diff --git a/doc/bugs/view_logs_fails:_Internal_Server_Error__internal_liftAnnex/comment_2_99f12da3ef01141dc7a9105fcf966793._comment b/doc/bugs/view_logs_fails:_Internal_Server_Error__internal_liftAnnex/comment_2_99f12da3ef01141dc7a9105fcf966793._comment
deleted file mode 100644
index 61a725060..000000000
--- a/doc/bugs/view_logs_fails:_Internal_Server_Error__internal_liftAnnex/comment_2_99f12da3ef01141dc7a9105fcf966793._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.193"
- subject="comment 2"
- date="2013-07-05T15:30:37Z"
- content="""
-Ok, the liftAnnex part of this is just because most of the webapp, including viewing logs, requires a repo to be set up, and it's not gotten past the early setup part where this happens before it, apparently, crashed because of the email misconfiguration problem.
-
-So, I should really detect and deal with this rather annoyingly common misconfiguration of user's computers..
-"""]]
diff --git a/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android.mdwn b/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android.mdwn
deleted file mode 100644
index afdf6b270..000000000
--- a/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android.mdwn
+++ /dev/null
@@ -1,24 +0,0 @@
-### Please describe the problem.
-The first time I open the webapp on Android I see the following warning :
-
-`WebApp crashed:<file descriptor 15>: hPutStr: illegal operation(handle_is_closed)`
-
-See screen capture : [http://i.imgur.com/K0wkk2n.png](http://i.imgur.com/K0wkk2n.png)
-
-### What steps will reproduce the problem?
-1. Close git-annex if running
-2. Open the WebApp
-
-### What version of git-annex are you using? On what operating system?
-It says 1.0.52 in the Android settings but I'm using the daily build that I downloaded around 2013-05-29 13:10:00 (Eastern Time)
-
-### Please provide any additional information below.
-
-Git annex still syncs with `box.com` even if the warning is showing.
-
-I'm using a Nexus 4 (4.2.2)
-
-I didn't find `daemon.log`.
-
-> [[done]]; the android app no longer uses `am`, so no longer needs to
-> display a message when `am` fails. --[[Joey]]
diff --git a/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_1_e8866dc15f8fc049229e7451addad1d5._comment b/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_1_e8866dc15f8fc049229e7451addad1d5._comment
deleted file mode 100644
index 3aaa01e06..000000000
--- a/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_1_e8866dc15f8fc049229e7451addad1d5._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-05-30T15:57:41Z"
- content="""
-This is an intriguing screenshot, since it shows the webapp reporting a crash of the webapp! I think what's going on is that the web server thread run by the webapp is still running, although the webapp's own thread has crashed.
-
-The log should be in `/sdcard/DCIM/.git/annex/daemon.log`. I would be interested to see it.
-
-Does the webapp continue to update and function despite saying it crashed?
-"""]]
diff --git a/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_2_ee616b0251ffaace9844cfd7af896c35._comment b/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_2_ee616b0251ffaace9844cfd7af896c35._comment
deleted file mode 100644
index b19fbf584..000000000
--- a/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_2_ee616b0251ffaace9844cfd7af896c35._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 2"
- date="2013-05-30T16:07:59Z"
- content="""
-Could you please get me a screenshot of git-annex's terminal window after this has occurred?
-
-The most likely thing seems to be that it's crashing while trying to open the web browser. How did you get the web browser open on the webapp? Using the new menu item to do it, or did it automatically open?
-"""]]
diff --git a/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_3_6b8bd314b647ea3a485f5faf4856f9a9._comment b/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_3_6b8bd314b647ea3a485f5faf4856f9a9._comment
deleted file mode 100644
index 88a99684a..000000000
--- a/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_3_6b8bd314b647ea3a485f5faf4856f9a9._comment
+++ /dev/null
@@ -1,35 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkGCmVc5qIJaQQgG82Hc5zzBdAVdhe2JEM"
- nickname="Bruno"
- subject="comment 3"
- date="2013-05-30T16:30:31Z"
- content="""
-Here's the screen capture : [http://i.imgur.com/owmuIKa.png](http://i.imgur.com/owmuIKa.png)
-
-I used the menu item to open the WebApp. Nothing appeared in the git-annex's terminal window when I opened the WebApp. The error message is the one that appears when I start Git Annex.
-
-The WebApp seems to be working. It synced a picture I took when the WebApp was already running. See : [http://i.imgur.com/Bcu4iAE.png](http://i.imgur.com/Bcu4iAE.png)
-
-I think I have this bug since the Android version is out. I thought maybe it was normal in the beginning.
-
-Here's the log :
-
- [2013-05-30 12:15:36 EDT] main: starting assistant version 4.20130529-g6b9b452
- \"_xmpp-client._tcp.gmail.com\"
- Just [(5,0,5222,\"xmpp.l.google.com.\"),(20,0,5222,\"alt1.xmpp.l.google.com.\"),(20,0,5222,\"alt3.xmpp.l.google.com.\"),(20,0,5222,\"alt4.xmpp.l.google.com.\"),(20,0,5222,\"alt2.xmpp.l.google.com.\")]
- (scanning...) [2013-05-30 12:15:37 EDT] Watcher: Performing startup scan
- WebApp crashed: <file descriptor: 15>: hPutStr: illegal operation (handle is closed)
- [2013-05-30 12:15:37 EDT] WebApp: warning WebApp crashed: <file descriptor: 15>: hPutStr: illegal operation (handle is closed)
- (started...) [2013-05-30 12:22:02 EDT] Committer: Adding IMG_20130..22201.jpg
-
- add Camera/IMG_20130530_122201.jpg (checksum...) [2013-05-30 12:22:02 EDT] Committer: Committing changes to git
- [2013-05-30 12:22:13 EDT] Committer: Adding IMG_20130..22201.jpg
- ok
- (Recording state in git...)
- (Recording state in git...)
- add Camera/IMG_20130530_122201.jpg (checksum...) [2013-05-30 12:22:14 EDT] Committer: Committing changes to git
- (gpg)
- [...]
-
- [2013-05-30 12:22:50 EDT] Transferrer: Uploaded IMG_20130..22201.jpg
-"""]]
diff --git a/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_4_7009b6727ba40bc9bd1b1f939e75d093._comment b/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_4_7009b6727ba40bc9bd1b1f939e75d093._comment
deleted file mode 100644
index eba3baedc..000000000
--- a/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_4_7009b6727ba40bc9bd1b1f939e75d093._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 4"
- date="2013-05-30T19:18:50Z"
- content="""
-Seems it's crashing while trying to print out a message telling you to use the menu to open the webapp. I'm not sure why, but I have updated the android autobuild to try to work around this. If you can test and tell me if that fixes it or not, it'll help me tell what's going on.
-"""]]
diff --git a/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_5_00ddf7ade6cca758afa838be0b9588cb._comment b/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_5_00ddf7ade6cca758afa838be0b9588cb._comment
deleted file mode 100644
index 04de2d3de..000000000
--- a/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_5_00ddf7ade6cca758afa838be0b9588cb._comment
+++ /dev/null
@@ -1,20 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkGCmVc5qIJaQQgG82Hc5zzBdAVdhe2JEM"
- nickname="Bruno"
- subject="comment 5"
- date="2013-05-30T19:38:59Z"
- content="""
-I still have the problem :(
-
- [2013-05-30 15:36:31 EDT] main: starting assistant version 4.20130530-g2e0f464
- Already up-to-date.
- WebApp crashed: <file descriptor: 14>: hPutStr: illegal operation (handle is closed)
- [2013-05-30 15:36:32 EDT] WebApp: warning WebApp crashed: <file descriptor: 14>: hPutStr: illegal operation (handle is closed)
-
- (scanning...) [2013-05-30 15:36:32 EDT] Watcher: Performing startup scan
- Already up-to-date.
- [2013-05-30 15:36:35 EDT] Committer: Committing changes to git
-
- (Recording state in git...)
- (started...) [2013-05-30 15:36:44 EDT] Committer: Committing changes to git
-"""]]
diff --git a/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_6_6137ef0ad01d5600dab6fccbeed9a88b._comment b/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_6_6137ef0ad01d5600dab6fccbeed9a88b._comment
deleted file mode 100644
index 79606cb09..000000000
--- a/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_6_6137ef0ad01d5600dab6fccbeed9a88b._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 6"
- date="2013-05-30T19:45:30Z"
- content="""
-Changed to fd 14 and not 15, so my change to use the dupped stdout did take effect.
-
-Interesting. Either dup() is just failing (silently!), or the `am` command is somehow closing the assistant's fds (not sure if that's possible).
-
-In either case, it's only happening on your device, not on mine.
-
-I suppose this will just need to wait until I sort out better the opening of the webapp on android. The \"crash\" does not seem like it will affect the actual functioning of the webapp.
-"""]]
diff --git a/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_7_4b79d7ea338d9f70eb80b8cc2c5a21e4._comment b/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_7_4b79d7ea338d9f70eb80b8cc2c5a21e4._comment
deleted file mode 100644
index 03fe1cf8b..000000000
--- a/doc/bugs/warning_-_WebApp_crashed:___60__file_descriptor_15__62__:_hPutStr:_illegal_operation___40__handle_is_closed__41___on_Android/comment_7_4b79d7ea338d9f70eb80b8cc2c5a21e4._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 7"
- date="2013-05-30T19:48:14Z"
- content="""
-Actually, the dupped stdout is open and working before `am` is run, so `am` must somehow be messing with it. Can't be a dupping problem. Need to stop using this `am` nonsense clearly.
-"""]]
diff --git a/doc/bugs/watch_command_on_OSX_--_hangs_with_a_small_repo.mdwn b/doc/bugs/watch_command_on_OSX_--_hangs_with_a_small_repo.mdwn
deleted file mode 100644
index c598bb4d7..000000000
--- a/doc/bugs/watch_command_on_OSX_--_hangs_with_a_small_repo.mdwn
+++ /dev/null
@@ -1,41 +0,0 @@
-I had started a fresh repo to test out the watch command again on OSX and noticed that it's borked, I'm not sure when it was broken.
-
-The snippet of the log message and command is
-
-<pre>
-$ git annex watch --foreground -d -v
-watch . read: git ["--git-dir=/Users/jtang/sandbox/atest/.git","--work-tree=/Users/jtang/sandbox/atest","show-ref","git-annex"]
-read: git ["--git-dir=/Users/jtang/sandbox/atest/.git","--work-tree=/Users/jtang/sandbox/atest","show-ref","--hash","refs/heads/git-annex"]
-read: git ["--git-dir=/Users/jtang/sandbox/atest/.git","--work-tree=/Users/jtang/sandbox/atest","log","refs/heads/git-annex..6702e5361146450800ae5af0b63e97bd9c55d70b","--oneline","-n1"]
-chat: git ["--git-dir=/Users/jtang/sandbox/atest/.git","--work-tree=/Users/jtang/sandbox/atest","cat-file","--batch"]
-(scanning...) call: git ["--git-dir=/Users/jtan
-</pre>
-
-I had run git-annex with a new repo with just doing a git init and git annex init, I just threw in one or two small text files to see if it was working. It just hangs and does nothing. I had also tried it out on one of my bigger repos and it does the same thing it just hangs at _(scanning...)_ There isn't much to go on, I wonder if it's hitting the [[Issue on OSX with some system limits]] or if its just a thread/fork issue on OSX.
-
-It still hangs on the small repo even if I do
-
- $ sudo sysctl -w kern.maxfilesperproc=400000
- $ ulimit -n 2000
-
-Also, just in case if you need it still (on a clean OSX 10.7 system)
-
-<pre>
-$ ulimit -a
-core file size (blocks, -c) 0
-data seg size (kbytes, -d) unlimited
-file size (blocks, -f) unlimited
-max locked memory (kbytes, -l) unlimited
-max memory size (kbytes, -m) unlimited
-open files (-n) 256
-pipe size (512 bytes, -p) 1
-stack size (kbytes, -s) 8192
-cpu time (seconds, -t) unlimited
-max user processes (-u) 709
-virtual memory (kbytes, -v) unlimited
-</pre>
-
-Please close or merge this report if it's a duplicate.
-
-> I've fixed this, it works in my (so far limited) tests. [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/watch_command_on_OSX_--_hangs_with_a_small_repo/comment_1_63f04694610839db0c2381005b15da35._comment b/doc/bugs/watch_command_on_OSX_--_hangs_with_a_small_repo/comment_1_63f04694610839db0c2381005b15da35._comment
deleted file mode 100644
index 1b9fe9a4a..000000000
--- a/doc/bugs/watch_command_on_OSX_--_hangs_with_a_small_repo/comment_1_63f04694610839db0c2381005b15da35._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="98.65.205.24"
- subject="comment 1"
- date="2012-07-20T18:17:04Z"
- content="""
-I see this too, on OSX, and it's another one of the hangs with the threaded runtime I've been battling recently. Removing -threaded from the Makefile or git-annex.cabal (whichever you're using) makes it work.
-
-Seems likely this one is specific to my kqueue code. Indeed, I see it entering the kqueue code and then hanging, when it should be noticing changes. Interestingly, all threads seem to get blocked, too.
-
-AHA! I had the FFI functions marked unsafe. Marking safe seems to fix that. I need to go re-read up on the FFI and when it's safe to mark functions threadsafe.
-
-Thanks as always for the OSX eyes Jimmy!
-"""]]
diff --git a/doc/bugs/watch_command_on_OSX_--_hangs_with_a_small_repo/comment_2_8afe4720e301cf7ccf11ff0a23261936._comment b/doc/bugs/watch_command_on_OSX_--_hangs_with_a_small_repo/comment_2_8afe4720e301cf7ccf11ff0a23261936._comment
deleted file mode 100644
index 1c97338f1..000000000
--- a/doc/bugs/watch_command_on_OSX_--_hangs_with_a_small_repo/comment_2_8afe4720e301cf7ccf11ff0a23261936._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 2"
- date="2012-07-20T19:31:11Z"
- content="""
-Glad that I can help ;) Alas if it weren't for the learning curve of haskell, I'd fix it myself.
-"""]]
diff --git a/doc/bugs/watch_command_on_OSX_10.7.mdwn b/doc/bugs/watch_command_on_OSX_10.7.mdwn
deleted file mode 100644
index 1348c1155..000000000
--- a/doc/bugs/watch_command_on_OSX_10.7.mdwn
+++ /dev/null
@@ -1,37 +0,0 @@
-Running the tip of the watch branch on OSX in an annex'ed directory.
-
-The watch command detects the changes, does _something_, see the output below.
-
-Output from watch command
-
-<pre>
-(Recording state in git...)
-Added "./KeePass2.18.dmg"
-Added "./KeePassX-0.4.3.dmg"
-add ./KeePass2.18.dmg (checksum...) ok
-add ./KeePassX-0.4.3.dmg (checksum...) ok
-</pre>
-
-State of the annex
-
-<pre>
-laplace:annex jtang$ git status
-# On branch master
-# Untracked files:
-# (use "git add <file>..." to include in what will be committed)
-#
-# KeePass2.18.dmg
-# KeePassX-0.4.3.dmg
-nothing added to commit but untracked files present (use "git add" to track)
-</pre>
-
-It seems to not do a git add and commit after the creation of the symlinks, manually doing this makes it all happy again till more files are added.
-
-note: i had posted a comment in the blog post, but posting the issue here is probably more appropriate.
-
-> Yeah, this is the issue I was struggling with last night.
-> I think it's fixed in 57cf65eb6d811ba7fd19eb62a54e3b83a0c2dfa7,
-> but the kqueue watch still needs a lot of work. --[[Joey]]
-
->> Confirmed this is fixed, but do note the known kqueue bugs in
->> [[design/assistant/inotify]]! [[done]] --[[Joey]]
diff --git a/doc/bugs/watcher_commits_unlocked_files.mdwn b/doc/bugs/watcher_commits_unlocked_files.mdwn
deleted file mode 100644
index 37e50fca0..000000000
--- a/doc/bugs/watcher_commits_unlocked_files.mdwn
+++ /dev/null
@@ -1,37 +0,0 @@
-When having "git annex watch" running, unlocking files causes the watcher
-to immediately lock/commit them.
-
-----
-
-Possible approaches:
-
-* The watcher could detect unlocked files by checking if newly added files
- are a typechange of a file already in git. But this would add git overhead
- to every file add.
-* `git annex unlock` could add some type of flag file, which the assistant
- could check. This would work fine, for users who want to use `git annex
- unlock` with the assistant. That's probably not simple enough for most
- users, though.
-* There could be a UI in the assistant to pick a file and unlock it.
- The assistant would have its own list of files it knows are unlocked.
- But I'm trying to avoid mandatory UI to use the assistant.
-* Perhaps instead, have a directory, like "edit". The assistant could notice
- when files move into this special directory, and automatically unlock them.
- Then when they're moved out, automatically commit them.
-* Alternatively, files that are moved out of the repository entirely could be
- automatically unlocked, and then when they're moved back in, it would
- automatically do the right thing. This may be worth implementing in
- combination with the "edit" directory, as different use cases would work
- better with one or the other. However, I don't currently get inotify
- events when files are moved out of the repository (well, I do, but it
- just says "file moved", with no forwarding address, so I don't know
- how to find the file to unlock it.
-
-[[!meta title="assistant: watcher_commits_unlocked_files"]]
-
-> [[done]]; I just tested and somehow this no longer happens;
-> the watcher/assistant leaves the unlocked file alone, and then
-> as soon as it's modified re-adds it.
->
-> Also, of course, there is direct mode, which avoids needing to unlock...
-> --[[Joey]]
diff --git a/doc/bugs/watcher_commits_unlocked_files/comment_1_f70e1912fde0eee59e208307df06b503._comment b/doc/bugs/watcher_commits_unlocked_files/comment_1_f70e1912fde0eee59e208307df06b503._comment
deleted file mode 100644
index a06b8fe82..000000000
--- a/doc/bugs/watcher_commits_unlocked_files/comment_1_f70e1912fde0eee59e208307df06b503._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 1"
- date="2012-06-28T13:39:18Z"
- content="""
-That is a known problem/bug which is listed at [[design/assistant/inotify]]
-"""]]
diff --git a/doc/bugs/webapp_does_not_start_on_android.mdwn b/doc/bugs/webapp_does_not_start_on_android.mdwn
new file mode 100644
index 000000000..dc3c4e648
--- /dev/null
+++ b/doc/bugs/webapp_does_not_start_on_android.mdwn
@@ -0,0 +1,22 @@
+### Please describe the problem.
+
+The webapp does not start automatically and instead this message is printed in the terminal:
+
+ Falling back to hardcoded app location; cannot find expected files in /data/app-lib
+ git annex webapp
+ COLUMNS=0;LINES=0;export COLUMNS LINES;
+
+After typing `git annex webapp`, the webapp starts normally.
+
+If I click the WebApp entry in the terminal menu, nothing happens.
+
+### What steps will reproduce the problem?
+
+Launch Git Annex from the applications menu.
+
+### What version of git-annex are you using? On what operating system?
+
+Using 4.3/4.4 daily build (nov 1st 2014) apk.
+CyanogemMod 11 (M10)
+
+> Seems to be a dup of [[Android_Default_startup_command]]; [[done]] --[[Joey]]
diff --git a/doc/bugs/webapp_doesn__39__t_start_when___126____47__annex_isn__39__t_a_git_repo.mdwn b/doc/bugs/webapp_doesn__39__t_start_when___126____47__annex_isn__39__t_a_git_repo.mdwn
new file mode 100644
index 000000000..ac02590e6
--- /dev/null
+++ b/doc/bugs/webapp_doesn__39__t_start_when___126____47__annex_isn__39__t_a_git_repo.mdwn
@@ -0,0 +1,29 @@
+### Please describe the problem.
+The webapp doesn't start. There is no feedback as to what is wrong when starting the OS X app. Makes for a very confusing behaviour.
+
+When starting git-annex-webapp directly, it says:
+git-annex: no git repository in /Users/lhunath/annex
+
+### What steps will reproduce the problem?
+Create a ~/annex that is not a git repo.
+
+### What version of git-annex are you using? On what operating system?
+git-annex version: 5.20140517-g0aed6d9
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+local repository version: unknown
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+
+### Please provide any additional information below.
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+$ /Applications/git-annex.app/Contents/MacOS/git-annex-webapp
+git-annex: no git repository in /Users/lhunath/annex
+# End of transcript or log.
+"""]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/webapp_hang.mdwn b/doc/bugs/webapp_hang.mdwn
deleted file mode 100644
index a1d296893..000000000
--- a/doc/bugs/webapp_hang.mdwn
+++ /dev/null
@@ -1,144 +0,0 @@
-Occasionally, clicking on a link in the webapp will hang. When this
-happens, which has only been seen in Chromium so far, the tab will spin
-forever, without anything loading. Other tabs can be opened with
-middle-click on links in the webapp, and work fine. Stopping and reloading
-in the tab tends to hang again, although eventually this will clear the
-hang up.
-
--------
-
-My best procedure to replicate this, about 25% of the time:
-
-* have 2 large files and a libreoffice spreadsheet
-* start webapp, make repository
-* open file browser using button in webapp
-* move files into repository
-* make media subdir; move media into it
-* open spreadsheet, modify, save
-* click on New Repository button for the hang
-
-Running recordmydesktop at the same time may also help.. Or giving a
-presentation in Australia. :/
-
--------
-
-Hypotheses:
-
-* Warp's slowloris protection could be triggering. Possibly by the
- repeated hits to update the alerts? I added a settingsOnException handler
- that logs all exceptions, and ThreadKilled is happening several times.
- The only place in Warp that kills threads is due to a timeout installed
- for that.
-
- **Verified** Bug filed upstream: <https://github.com/yesodweb/wai/issues/146>
-
- ** workaround in place **
-
-* Something deep in git-annex, such as the inotidy code, could be
- preventing a web server thread from running. But then why do other
- tabs and other web browsers work while it's stuck?
- It would have to affect only 1 thread.
-
--------
-
-I captured a clean protocol dump of this happening. It includes only the
-final, hanging http request and subsequent traffic, not the setup.
-
-We can see the web browser send a request. The server ACKs it at the TCP
-level, but never sends any reply. The web browser continues sending TCP
-keep-alive packets, which are acked by the server. This continued as long
-as the browser tab was left open.
-
-Question: Did the browser send a complete & valid request? The last part
-sent is a cookie and "\r\n\r\n".. So it seems complete. Unless warp is
-expecting a request body?
-
-<pre>
-17:22:30.533079 IP localhost.localdomain.53239 > localhost.localdomain.45836: Flags [P.], seq 4237976899:4237977772, ack 2608808926, win 2048, options [nop,nop,TS val 4895706 ecr 4885760], length 873
- 0x0000: 4500 039d be84 4000 4006 7ad4 7f00 0001 E.....@.@.z.....
- 0x0010: 7f00 0001 cff7 b30c fc9a 6543 9b7f 43de ..........eC..C.
- 0x0020: 8018 0800 0192 0000 0101 080a 004a b3da .............J..
- 0x0030: 004a 8d00 4745 5420 2f63 6f6e 6669 672f .J..GET./config/
- 0x0040: 7265 706f 7369 746f 7279 3f61 7574 683d repository?auth=
- 0x0050: 6437 6266 3037 3438 6663 3863 3031 3965 d7bf0748fc8c019e
- 0x0060: 6230 3966 3530 3631 6164 6663 3861 3563 b09f5061adfc8a5c
- 0x0070: 3430 3437 3633 6562 3736 6630 6163 3533 404763eb76f0ac53
- 0x0080: 3663 3362 6230 3066 3835 6663 6361 3233 6c3bb00f85fcca23
- 0x0090: 6235 3639 3764 3332 3464 3737 3930 3063 b5697d324d77900c
- 0x00a0: 3739 3532 6430 6165 3235 3166 6331 6337 7952d0ae251fc1c7
- 0x00b0: 3532 3632 6330 3233 6265 3936 3066 3563 5262c023be960f5c
- 0x00c0: 3364 6135 6532 6262 6234 3639 3863 3035 3da5e2bbb4698c05
- 0x00d0: 2048 5454 502f 312e 310d 0a48 6f73 743a .HTTP/1.1..Host:
- 0x00e0: 2031 3237 2e30 2e30 2e31 3a34 3538 3336 .127.0.0.1:45836
- 0x00f0: 0d0a 436f 6e6e 6563 7469 6f6e 3a20 6b65 ..Connection:.ke
- 0x0100: 6570 2d61 6c69 7665 0d0a 4163 6365 7074 ep-alive..Accept
- 0x0110: 3a20 7465 7874 2f68 746d 6c2c 6170 706c :.text/html,appl
- 0x0120: 6963 6174 696f 6e2f 7868 746d 6c2b 786d ication/xhtml+xm
- 0x0130: 6c2c 6170 706c 6963 6174 696f 6e2f 786d l,application/xm
- 0x0140: 6c3b 713d 302e 392c 2a2f 2a3b 713d 302e l;q=0.9,*/*;q=0.
- 0x0150: 380d 0a55 7365 722d 4167 656e 743a 204d 8..User-Agent:.M
- 0x0160: 6f7a 696c 6c61 2f35 2e30 2028 5831 313b ozilla/5.0.(X11;
- 0x0170: 204c 696e 7578 2069 3638 3629 2041 7070 .Linux.i686).App
- 0x0180: 6c65 5765 624b 6974 2f35 3337 2e31 3720 leWebKit/537.17.
- 0x0190: 284b 4854 4d4c 2c20 6c69 6b65 2047 6563 (KHTML,.like.Gec
- 0x01a0: 6b6f 2920 4368 726f 6d65 2f32 342e 302e ko).Chrome/24.0.
- 0x01b0: 3133 3132 2e36 3820 5361 6661 7269 2f35 1312.68.Safari/5
- 0x01c0: 3337 2e31 370d 0a52 6566 6572 6572 3a20 37.17..Referer:.
- 0x01d0: 6874 7470 3a2f 2f31 3237 2e30 2e30 2e31 http://127.0.0.1
- 0x01e0: 3a34 3538 3336 2f3f 6175 7468 3d64 3762 :45836/?auth=d7b
- 0x01f0: 6630 3734 3866 6338 6330 3139 6562 3039 f0748fc8c019eb09
- 0x0200: 6635 3036 3161 6466 6338 6135 6334 3034 f5061adfc8a5c404
- 0x0210: 3736 3365 6237 3666 3061 6335 3336 6333 763eb76f0ac536c3
- 0x0220: 6262 3030 6638 3566 6363 6132 3362 3536 bb00f85fcca23b56
- 0x0230: 3937 6433 3234 6437 3739 3030 6337 3935 97d324d77900c795
- 0x0240: 3264 3061 6532 3531 6663 3163 3735 3236 2d0ae251fc1c7526
- 0x0250: 3263 3032 3362 6539 3630 6635 6333 6461 2c023be960f5c3da
- 0x0260: 3565 3262 6262 3436 3938 6330 350d 0a41 5e2bbb4698c05..A
- 0x0270: 6363 6570 742d 456e 636f 6469 6e67 3a20 ccept-Encoding:.
- 0x0280: 677a 6970 2c64 6566 6c61 7465 2c73 6463 gzip,deflate,sdc
- 0x0290: 680d 0a41 6363 6570 742d 4c61 6e67 7561 h..Accept-Langua
- 0x02a0: 6765 3a20 656e 2d55 532c 656e 3b71 3d30 ge:.en-US,en;q=0
- 0x02b0: 2e38 0d0a 4163 6365 7074 2d43 6861 7273 .8..Accept-Chars
- 0x02c0: 6574 3a20 4953 4f2d 3838 3539 2d31 2c75 et:.ISO-8859-1,u
- 0x02d0: 7466 2d38 3b71 3d30 2e37 2c2a 3b71 3d30 tf-8;q=0.7,*;q=0
- 0x02e0: 2e33 0d0a 436f 6f6b 6965 3a20 5f53 4553 .3..Cookie:._SES
- 0x02f0: 5349 4f4e 3d45 3363 7455 496c 7341 5451 SION=E3ctUIlsATQ
- 0x0300: 3631 694c 6d54 6954 7131 6f37 6465 7830 61iLmTiTq1o7dex0
- 0x0310: 3361 6f57 3049 4b63 7663 467a 5838 4344 3aoW0IKcvcFzX8CD
- 0x0320: 5432 7666 4b31 6c42 416d 6279 3166 764f T2vfK1lBAmby1fvO
- 0x0330: 4643 7952 7863 6f5a 6277 5633 6a4b 4971 FCyRxcoZbwV3jKIq
- 0x0340: 6b35 6958 4674 7557 5261 6b48 6944 6132 k5iXFtuWRakHiDa2
- 0x0350: 7769 3075 2f53 6430 5a49 7a75 4464 7947 wi0u/Sd0ZIzuDdyG
- 0x0360: 774f 6a31 7838 3130 356a 772f 5a2b 355a wOj1x8105jw/Z+5Z
- 0x0370: 6f4b 6f48 396e 6779 6e4b 5366 5839 742f oKoH9ngynKSfX9t/
- 0x0380: 6862 4b79 435a 6966 7739 4148 3053 6d4b hbKyCZifw9AH0SmK
- 0x0390: 436e 4c38 5358 513d 3d0d 0a0d 0a CnL8SXQ==....
-17:22:30.571152 IP localhost.localdomain.45836 > localhost.localdomain.53239: Flags [.], ack 873, win 2048, options [nop,nop,TS val 4895716 ecr 4895706], length 0
- 0x0000: 4500 0034 f15b 4000 4006 4b66 7f00 0001 E..4.[@.@.Kf....
- 0x0010: 7f00 0001 b30c cff7 9b7f 43de fc9a 68ac ..........C...h.
- 0x0020: 8010 0800 fe28 0000 0101 080a 004a b3e4 .....(.......J..
- 0x0030: 004a b3da .J..
-17:22:35.803152 IP localhost.localdomain.53240 > localhost.localdomain.45836: Flags [.], ack 2157632553, win 2048, options [nop,nop,TS val 4897024 ecr 4885760], length 0
- 0x0000: 4500 0034 3a63 4000 4006 025f 7f00 0001 E..4:c@.@.._....
- 0x0010: 7f00 0001 cff8 b30c 7533 e963 809a dc29 ........u3.c...)
- 0x0020: 8010 0800 fe28 0000 0101 080a 004a b900 .....(.......J..
- 0x0030: 004a 8d00 .J..
-17:22:35.803213 IP localhost.localdomain.45836 > localhost.localdomain.53240: Flags [.], ack 1, win 2048, options [nop,nop,TS val 4897024 ecr 4840696], length 0
- 0x0000: 4500 0034 10e5 4000 4006 2bdd 7f00 0001 E..4..@.@.+.....
- 0x0010: 7f00 0001 b30c cff8 809a dc29 7533 e964 ...........)u3.d
- 0x0020: 8010 0800 fe28 0000 0101 080a 004a b900 .....(.......J..
- 0x0030: 0049 dcf8 .I..
-17:23:15.611193 IP localhost.localdomain.53239 > localhost.localdomain.45836: Flags [.], ack 1, win 2048, options [nop,nop,TS val 4906976 ecr 4895716], length 0
- 0x0000: 4500 0034 be85 4000 4006 7e3c 7f00 0001 E..4..@.@.~<....
- 0x0010: 7f00 0001 cff7 b30c fc9a 68ab 9b7f 43de ..........h...C.
- 0x0020: 8010 0800 fe28 0000 0101 080a 004a dfe0 .....(.......J..
- 0x0030: 004a b3e4 .J..
-17:23:15.611290 IP localhost.localdomain.45836 > localhost.localdomain.53239: Flags [.], ack 873, win 2048, options [nop,nop,TS val 4906976 ecr 4895706], length 0
- 0x0000: 4500 0034 f15c 4000 4006 4b65 7f00 0001 E..4.\@.@.Ke....
- 0x0010: 7f00 0001 b30c cff7 9b7f 43de fc9a 68ac ..........C...h.
- 0x0020: 8010 0800 fe28 0000 0101 080a 004a dfe0 .....(.......J..
- 0x0030: 004a b3da .J..
-</pre>
-
-[[!tag /design/assistant]]
-[[done]]
diff --git a/doc/bugs/webapp_hang/comment_1_08aa908a64d0fe2d50438d01545c3f01._comment b/doc/bugs/webapp_hang/comment_1_08aa908a64d0fe2d50438d01545c3f01._comment
deleted file mode 100644
index 66822d759..000000000
--- a/doc/bugs/webapp_hang/comment_1_08aa908a64d0fe2d50438d01545c3f01._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://gdr.name/"
- nickname="gdr.name"
- subject="Not only Chrome"
- date="2013-03-09T10:55:57Z"
- content="""
-It happened to me numerous times with Opera. I was never able to repeat it hence no bug report.
-"""]]
diff --git a/doc/bugs/webapp_hang/comment_2_2a21ac5657128a454f9deb77c4d18057._comment b/doc/bugs/webapp_hang/comment_2_2a21ac5657128a454f9deb77c4d18057._comment
deleted file mode 100644
index ece1aa358..000000000
--- a/doc/bugs/webapp_hang/comment_2_2a21ac5657128a454f9deb77c4d18057._comment
+++ /dev/null
@@ -1,21 +0,0 @@
-[[!comment format=mdwn
- username="http://crosstwine.com/dd/"
- ip="88.65.128.43"
- subject="chrome://net-internals/"
- date="2013-03-09T20:10:54Z"
- content="""
-Hi Joey,
-
-I see that you have found the cause and a workaround for this particular
-problem, but would like to point out that `chrome://net-internals/` can be
-very useful for diagnosing such issues.
-
-(I once hit the `SOCKET_POOL_STALLED_MAX_SOCKETS_PER_GROUP` problem
-mentioned in
-<https://code.google.com/p/chromium/issues/detail?id=27324>, which can
-cause Chromium to keep spinning while not issuing any new requests to a
-specific web server.)
-
-Cheers,
-Damien Diederen
-"""]]
diff --git a/doc/bugs/webapp_missing_on_redhat.mdwn b/doc/bugs/webapp_missing_on_redhat.mdwn
new file mode 100644
index 000000000..ad2578b4f
--- /dev/null
+++ b/doc/bugs/webapp_missing_on_redhat.mdwn
@@ -0,0 +1,21 @@
+### Please describe the problem.
+I am unable to run the webapp on redhat6.5
+
+### What steps will reproduce the problem?
+yum install git-annex
+
+### What version of git-annex are you using? On what operating system?
+I am using git-annex version 3.20120523 and on redhat 6.5
+
+### Please provide any additional information below.
+I am seeing the following error when running git annex webapp:
+
+git-annex: unknown command webapp
+
+> git-annex can be built without the webapp, and this is
+> often done if a distribution does not have the full haskell stack
+> packaged yet. The solution is to contact the distribution and let them
+> know they need to improve it, and/or use the standalone build from this
+> website.
+>
+> So, please file a bug on redhat. [[done]] --[[Joey]]
diff --git a/doc/bugs/webapp_on_windows_7_64_bit_fail_to_add_server_repo.mdwn b/doc/bugs/webapp_on_windows_7_64_bit_fail_to_add_server_repo.mdwn
new file mode 100644
index 000000000..c076dfc54
--- /dev/null
+++ b/doc/bugs/webapp_on_windows_7_64_bit_fail_to_add_server_repo.mdwn
@@ -0,0 +1,76 @@
+### Please describe the problem.
+Cant add Server repo
+
+### What steps will reproduce the problem?
+install linux prebuild torball on server (readynas pro 600)
+un-tar and run with ./git-annex
+(git-annex test pass without error)
+install windows client on win7 64 bit and start webapp
+try add server repo as second repo will led to an internal server error about gpg
+
+followed the assistend video
+### What version of git-annex are you using? On what operating system?
+Readynas (Linux):
+annex@readynas-pro:~/git-annex.linux$ ./git-annex version
+git-annex version: 5.20140831-g62e6ad8
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+
+Windows:
+Version: 5.20140914-gb169612
+Build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash
+
+Git on Windows:
+C:\Users\Xaver>git --version
+git version 1.9.4.msysgit.1
+
+GPG on Windows:
+C:\Users\Xaver>gpg --version
+gpg (GnuPG) 2.0.26 (Gpg4win 2.2.2)
+libgcrypt 1.6.1
+Copyright (C) 2013 Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Home: C:/Users/Xaver/AppData/Roaming/gnupg
+Unterstützte Verfahren:
+Öff. Schlüssel: RSA, ELG, DSA
+Verschlü.: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
+ CAMELLIA128, CAMELLIA192, CAMELLIA256
+Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
+Komprimierung: nicht komprimiert, ZIP, ZLIB, BZIP2
+### Please provide any additional information below.
+Internal Server Error
+user error (gpg ["--quiet","--trust-model","always","--with-colons","--list-secret-keys","--fixed-list-mode"] exited 2)
+
+gpg: fatal: can't create directory `/home/Xaver/.gnupg': No such file or directory
+
+makes no sense on windows machine
+
+must be like "C:\Users\Xaver\AppData\Roaming\gnupg" or %Username%\AppData\Roaming\gnupg I guess.
+
+gpg itself works fine I use it with thunderbird
+
+[[!format sh """
+# If you can, paste a complete transcript of the problem occurring here.
+# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
+gpg: WARNING: using insecure memory!
+gpg: please see http://www.gnupg.org/documentation/faqs.html for more information
+gpg: fatal: can't create directory `/home/Xaver/.gnupg': No such file or directory
+secmem usage: 0/0 bytes in 0/0 blocks of pool 0/65536
+14/Sep/2014:23:17:08 +0200 [Error#yesod-core] user error (gpg ["--quiet","--trust-model","always","--with-colons","--list-secret-keys","--fixed-list-mode"] exited 2) @(yesod-core-1.2.19:Yesod.Core.Class.Yesod .\Yesod\Core\Class\Yesod.hs:503:5)
+
+# End of transcript or log.
+"""]]
+
+> Thanks for reporting this problem. I've fixed it to not crash when gpg
+> fails to list secret keys.
+>
+> That doesn't fix the problem that the cygnus build of gpg does not find
+> the user's home directory properly. But that's only needed for the
+> encrypted repository (gcrypt) support, which is listed in
+> [[windows_support]] as not yet available for Windows.
+>
+> So, not leaving this bug report open. [[done]] --[[Joey]]
diff --git a/doc/bugs/webapp_raise_an_internal_server_error_upon_creating_the_initial_repo.mdwn b/doc/bugs/webapp_raise_an_internal_server_error_upon_creating_the_initial_repo.mdwn
deleted file mode 100644
index b7ecdebbf..000000000
--- a/doc/bugs/webapp_raise_an_internal_server_error_upon_creating_the_initial_repo.mdwn
+++ /dev/null
@@ -1,26 +0,0 @@
-What steps will reproduce the problem?
-
-Fresh install on a 12.40 xubuntu with
-
- cabal install git-annex --bindir=$HOME/bin
-
-What is the expected output? What do you see instead?
-
-I launched the git-annex webapp (the assistant) and the system proposed to create a git-annex repository: I choose ~/annex/ and clicked on "Make repositiry" but I got:
-
- Internal Server Error
-
- user error (git ["--git-dir=/home/m/annex/.git","--work-tree=/home/m/annex","commit-tree","4b825dc642cb6eb9a060e54bf8d69288fbee4904"] exited 128)
-
- git-annex version 3.20130102
-
-What version of git-annex are you using? On what operating system?
-
-git-annex version 3.20130102 on Xubuntu 12.04, installed with cabal (got no errors).
-
-Please provide any additional information below.
-
-I do not know if there is any log, or any info about the reason of the failure. Something useful could be that ~/annex/ now contains an empty git repository, so "something" happened despite the error.
-
-> Made assistant detect misconfigured system and set enough environment
-> variables so git will work. [[done]] --[[Joey]]
diff --git a/doc/bugs/webapp_raise_an_internal_server_error_upon_creating_the_initial_repo/comment_1_1bcf0f565eacac851bd21cd428c8e0a5._comment b/doc/bugs/webapp_raise_an_internal_server_error_upon_creating_the_initial_repo/comment_1_1bcf0f565eacac851bd21cd428c8e0a5._comment
deleted file mode 100644
index fbf63a97c..000000000
--- a/doc/bugs/webapp_raise_an_internal_server_error_upon_creating_the_initial_repo/comment_1_1bcf0f565eacac851bd21cd428c8e0a5._comment
+++ /dev/null
@@ -1,33 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.211"
- subject="comment 1"
- date="2013-01-06T17:00:40Z"
- content="""
-There should be an error message on either the terminal where you started git-annex, or in ~/.xsession-errors if you started it from a GUI menu.
-
-Without the error message, this seems most likely to be another case of git commit failing due to not being able to determine the user's full name. For example, if I delete my full name out of /etc/passwd,
-
-<pre>
-describe . ok
-(Recording state in git...)
-
-*** Please tell me who you are.
-
-Run
-
- git config --global user.email \"you@example.com\"
- git config --global user.name \"Your Name\"
-
-to set your account's default identity.
-Omit --global to set the identity only in this repository.
-
-fatal: empty ident joey@gnu.kitenet.net
- not allowed
-
-git-annex: user error (git [\"--git-dir=/home/joey/tmp/r/.git\",\"--work-tree=/home/joey/tmp/r\",\"commit-tree\",\"5316749be9efffeee538051b576166291c516472\",\"-p\",\"refs/heads/git-annex\"] exited 128)
-failed
-</pre>
-
-I'm perfectly comfortable with command-line git-annex not working if the system is so misconfigured; after all git tells the user one way to fix it. Perhaps though it's worth the assistant holding the user's hand here and detecting this problem.
-"""]]
diff --git a/doc/bugs/webapp_raise_an_internal_server_error_upon_creating_the_initial_repo/comment_2_7dd2483b5b07df8f3b37a34651c05962._comment b/doc/bugs/webapp_raise_an_internal_server_error_upon_creating_the_initial_repo/comment_2_7dd2483b5b07df8f3b37a34651c05962._comment
deleted file mode 100644
index 5459af2e6..000000000
--- a/doc/bugs/webapp_raise_an_internal_server_error_upon_creating_the_initial_repo/comment_2_7dd2483b5b07df8f3b37a34651c05962._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="m"
- ip="79.98.40.98"
- subject="thanks"
- date="2013-01-11T01:23:25Z"
- content="""
-exactly, it was an error on the git configuration
-"""]]
diff --git a/doc/bugs/webapp_requires_reload_for_notification_bubbles.mdwn b/doc/bugs/webapp_requires_reload_for_notification_bubbles.mdwn
deleted file mode 100644
index f8ea8ad39..000000000
--- a/doc/bugs/webapp_requires_reload_for_notification_bubbles.mdwn
+++ /dev/null
@@ -1,41 +0,0 @@
-What steps will reproduce the problem?
-
-> Open Webapp on Mac OSX Mountain Lion
-
-What is the expected output? What do you see instead?
-
-> I expect notification bubbles and transfer progress bars to show and update on the fly, as well as notifications to disappear when I click the X.
->
-> Instead, I have to reload the page after clicking an X or to see new bubbles and progress bar updates.
-
-What version of git-annex are you using? On what operating system?
-
-> git-annex version: 3.20130107
-> local repository version: 3
-> default repository version: 3
-> supported repository versions: 3
-> upgrade supported from repository versions: 0 1 2
->
-> Mac OS X 10.8.2 Build 12C3006
->
-> Chrome Version 23.0.1271.101
-
-Please provide any additional information below.
-
-Javascript console error log says "Syntax error on localhost:5" which is this line:
-
- <link rel="stylesheet" href="/static/css/bootstrap.css"><link rel="stylesheet" href="/static/css/bootstrap-responsive.css"><style>body{padding-top:60px;padding-bottom:40px}.sidebar-nav{padding:9px 0}</style><script src="/static/jquery.full.js"></script><script src="/static/js/bootstrap-dropdown.js"></script><script src="/static/js/bootstrap-modal.js"></script><script src="/static/js/bootstrap-collapse.js"></script><script src="/static/longpolling.js"></script><script>function longpoll_"sidebar"() {
-
-> And the bug is the quoting inside the function name.
->
-> I believe this affects all builds done using shakespeare-js 1.0.0.2.
-> It may be that some browsers manage to run the javascript despite the
-> quoting. Otherwise, I don't know why noone has reported this bug
-> before now.
->
-> I've fixed this bug in git. Your testing with tomorrow's
-> autobuild would be appreciated. --[[Joey]]
-
->> There was a second issue as noted. I fixed that last week,
->> and the fix is in the autobuilds if you'd like to test before
->> the next release. [[done]] again --[[Joey]]
diff --git a/doc/bugs/webapp_requires_reload_for_notification_bubbles/comment_1_b15480e5dec1ffbebb8cde1ca8d7c9d5._comment b/doc/bugs/webapp_requires_reload_for_notification_bubbles/comment_1_b15480e5dec1ffbebb8cde1ca8d7c9d5._comment
deleted file mode 100644
index 4544f1efb..000000000
--- a/doc/bugs/webapp_requires_reload_for_notification_bubbles/comment_1_b15480e5dec1ffbebb8cde1ca8d7c9d5._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmRFKwny4rArBaz-36xTcsJYqKIgdDaw5Q"
- nickname="Andrew"
- subject="comment 1"
- date="2013-01-19T06:53:19Z"
- content="""
-Just got around to testing both the git-annex.app and the latest build from cabal 3.20130114 and still no go. Neither notification bubbles nor progress bars will update without reloading the page. However the errors have changed:
-
- Uncaught Error: Syntax error, unrecognized expression: #\"sidebar\"
-
-"""]]
diff --git a/doc/bugs/webapp_requires_reload_for_notification_bubbles/comment_2_8dad57a852e1db804aa38f90f3bb398b._comment b/doc/bugs/webapp_requires_reload_for_notification_bubbles/comment_2_8dad57a852e1db804aa38f90f3bb398b._comment
deleted file mode 100644
index de4c4842a..000000000
--- a/doc/bugs/webapp_requires_reload_for_notification_bubbles/comment_2_8dad57a852e1db804aa38f90f3bb398b._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmRFKwny4rArBaz-36xTcsJYqKIgdDaw5Q"
- nickname="Andrew"
- subject="comment 2"
- date="2013-01-20T02:04:01Z"
- content="""
-I just built git-annex fresh from the git repo and the new build seems to have fixed it. [[done]] indeed. :)
-"""]]
diff --git a/doc/bugs/webapp_shows___34__Added_x_files__34___a_bit_ugly.mdwn b/doc/bugs/webapp_shows___34__Added_x_files__34___a_bit_ugly.mdwn
deleted file mode 100644
index 51e157c19..000000000
--- a/doc/bugs/webapp_shows___34__Added_x_files__34___a_bit_ugly.mdwn
+++ /dev/null
@@ -1,15 +0,0 @@
-### Please describe the problem.
-When adding a folder with some 80.000 files, the sidebar with "Added x files" gets updated in batches. After some time, it shows (also see attached screenshot):
-
-> Added 6496 files 5781 files 8633 files 7363 files 6159 files
-
-This is a bit ugly. There could a newline after "files".
-
-### What steps will reproduce the problem?
-Add a folder with many files and subfolders in it.
-
-### What version of git-annex are you using? On what operating system?
-4.20130627
-
-> I have improved the display, now it will just show a single ongoing count,
-> and the most recent 10 or so files added. [[done]] --[[Joey]]
diff --git a/doc/bugs/webapp_takes_100__37___of_the_cpu.mdwn b/doc/bugs/webapp_takes_100__37___of_the_cpu.mdwn
deleted file mode 100644
index 61aece482..000000000
--- a/doc/bugs/webapp_takes_100__37___of_the_cpu.mdwn
+++ /dev/null
@@ -1,41 +0,0 @@
-### Please describe the problem.
-
-I just started git-annex, and I can hear the fan of my CPU. That doesn't happen unless the CPU is maxed, and indeed:
-
-[[!format txt """
-top - 10:09:53 up 2 days, 13:13, 10 users, load average: 2,49, 2,41, 1,59
-Tasks: 306 total, 3 running, 302 sleeping, 0 stopped, 1 zombie
-%Cpu(s): 57,2 us, 7,9 sy, 1,2 ni, 32,1 id, 1,3 wa, 0,0 hi, 0,3 si, 0,0 st
-KiB Mem: 8162960 total, 7480272 used, 682688 free, 1107616 buffers
-KiB Swap: 4022268 total, 23384 used, 3998884 free, 3469028 cached
-
- PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
-27841 anarcat 20 0 191m 45m 20m S 92,3 0,6 4:32.68 /usr/local/bin/git-annex webapp
-"""]]
-
-### What steps will reproduce the problem?
-
-I am not sure. I just started the webapp, and it seems to be scanning two huge repositories (160GB and 800GB) with lots of files. The larger one is also in the process of being sync'd to the backup drive.
-
-### What version of git-annex are you using? On what operating system?
-
-My usual bastard build from hell:
-
-[[!format txt """
-git-annex version: 5.20131109-gf2cb5b9
-build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP DNS Feeds Quvi TDFA CryptoHash
-key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
-remote types: git gcrypt S3 bup directory rsync web webdav glacier hook
-local repository version: 3
-default repository version: 3
-supported repository versions: 3 5
-upgrade supported from repository versions: 0 1 2 4
-"""]]
-
-### Please provide any additional information below.
-
-Note that I had to close the chromium tab that was displaying the actual webapp UI, because that was taking another 50% of a CPU (I have a dual core).
-
-Note also that things calmed down since git-annex started transfering larger files - the webapp only takes 75% of the CPU now. ;) And chromium is negligible. But there clearly seems to be a degenerate case where a lot of small files get transfered that seem to freakout the web UI. -- [[anarcat]]
-
-Oh, and just copying the files using `git annex copy --to backup` doesn't use 100% of the CPU.
diff --git a/doc/bugs/webapp_takes_100__37___of_the_cpu/comment_1_6312860de9f30cbb05762cd67edc705a._comment b/doc/bugs/webapp_takes_100__37___of_the_cpu/comment_1_6312860de9f30cbb05762cd67edc705a._comment
deleted file mode 100644
index 3ec9c52eb..000000000
--- a/doc/bugs/webapp_takes_100__37___of_the_cpu/comment_1_6312860de9f30cbb05762cd67edc705a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.227"
- subject="comment 1"
- date="2013-12-31T19:38:24Z"
- content="""
-The webapp pushes a changed html div to the browser when eg, updating the progress bar. This is inneficient, which doesn't usually matter, since git-annex is not generally used with a large number of small files
-"""]]
diff --git a/doc/bugs/webapp_usability:_put_the_notices_on_the_right.mdwn b/doc/bugs/webapp_usability:_put_the_notices_on_the_right.mdwn
deleted file mode 100644
index 54f6c3a4f..000000000
--- a/doc/bugs/webapp_usability:_put_the_notices_on_the_right.mdwn
+++ /dev/null
@@ -1,18 +0,0 @@
-### Please describe the problem.
-
-The colored notices on the left of the screen are a little off. When they disappear, it also leaves a huge gap on the left side.
-
-### What steps will reproduce the problem?
-
-Click the `X` on all the messages on the left.
-
-### What version of git-annex are you using? On what operating system?
-
-4.20130815~bpo70+1 on Debian Wheezy, with Chromium Version 29.0.1547.57 Debian 7.1 (217859)
-
-### Please provide any additional information below.
-
-This is admittedly a very mild problem, but from a usability perspective, it would be less confusing to show those on the right. When they were gone, I thought git-annex was broken somewhat... -- [[anarcat]]
-
-> [[done]], although I'm not sure I'm sold on their being on the right
-> being better. --[[Joey]]
diff --git a/doc/bugs/webapp_usability:_put_the_notices_on_the_right/comment_1_ec7a444e09a028b5225bd41fb83442e8._comment b/doc/bugs/webapp_usability:_put_the_notices_on_the_right/comment_1_ec7a444e09a028b5225bd41fb83442e8._comment
deleted file mode 100644
index a494c5326..000000000
--- a/doc/bugs/webapp_usability:_put_the_notices_on_the_right/comment_1_ec7a444e09a028b5225bd41fb83442e8._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.255.110"
- subject="comment 1"
- date="2013-09-09T04:36:12Z"
- content="""
-They're on the left hand side because that's where Bootstrap puts its sidebar.
-If someone knows how to make it put its sidebar on the right I'll happily do so.
-"""]]
diff --git a/doc/bugs/webdav_fails___40__server:_radicale_0.9-1__41__.mdwn b/doc/bugs/webdav_fails___40__server:_radicale_0.9-1__41__.mdwn
new file mode 100644
index 000000000..8da66a810
--- /dev/null
+++ b/doc/bugs/webdav_fails___40__server:_radicale_0.9-1__41__.mdwn
@@ -0,0 +1,45 @@
+The current command fails (git-annex 5.20141125, debian sid, DAV server: radicale 0.9-1):
+
+ $ WEBDAV_USERNAME=user WEBDAV_PASSWORD=password git annex --debug initremote dav.example.com type=webdav url=https://dav.example.com encryption=none
+ [2014-11-28 16:53:29 CET] read: git ["--git-dir=/home/user/test-annex/.git","--work-tree=/home/user/test-annex","show-ref","git-annex"]
+ [2014-11-28 16:53:29 CET] read: git ["--git-dir=/home/user/test-annex/.git","--work-tree=/home/user/test-annex","show-ref","--hash","refs/heads/git-annex"]
+ [2014-11-28 16:53:29 CET] read: git ["--git-dir=/home/user/test-annex/.git","--work-tree=/home/user/test-annex","log","refs/heads/git-annex..f60365a0d5333e1aefe80a3fe747e2cb3d5c8162","-n1","--pretty=%H"]
+ [2014-11-28 16:53:29 CET] chat: git ["--git-dir=/home/user/test-annex/.git","--work-tree=/home/user/test-annex","cat-file","--batch"]
+ initremote dav.example.com (testing WebDAV server...)
+
+ git-annex: WebDAV test failed: StatusCodeException (Status {statusCode = 500, statusMessage = "Internal Server Error"}) [("Server","nginx/1.2.1"),("Date","Fri, 28 Nov 2014 15:53:37 GMT"),("Content-Type","text/plain"),("Content-Length","59"),("Connection","keep-alive"),("Keep-Alive","timeout=75"),("X-Response-Body-Start","A server error occurred. Please contact the administrator."),("X-Request-URL","MKCOL https://dav.example.com:443/tmp")] (CJ {expose = []}): user error
+ failed
+ git-annex: initremote: 1 failed
+
+server log:
+
+ ::ffff:192.168.1.6 - user [28/Nov/2014:16:53:17 +0100] "MKCOL / HTTP/1.1" 500 59 "-" "hDav-using application"
+ ::ffff:192.168.1.6 - user [28/Nov/2014:16:53:18 +0100] "PROPFIND /tmp HTTP/1.1" 500 59 "-" "hDav-using application"
+ ::ffff:192.168.1.6 - user [28/Nov/2014:16:53:21 +0100] "MKCOL /tmp HTTP/1.1" 500 59 "-" "hDav-using application"
+ ::ffff:192.168.1.6 - user [28/Nov/2014:16:53:32 +0100] "MKCOL / HTTP/1.1" 500 59 "-" "hDav-using application"
+ ::ffff:192.168.1.6 - user [28/Nov/2014:16:53:34 +0100] "PROPFIND /tmp HTTP/1.1" 500 59 "-" "hDav-using application"
+ ::ffff:192.168.1.6 - user [28/Nov/2014:16:53:37 +0100] "MKCOL /tmp HTTP/1.1" 500 59 "-" "hDav-using application"
+ ::ffff:192.168.1.6 - user [28/Nov/2014:16:58:31 +0100] "PROPFIND / HTTP/1.1" 207 1035 "-" "cadaver/0.23.3 neon/0.30.1"
+ ::ffff:192.168.1.6 - user [28/Nov/2014:16:59:19 +0100] "MKCOL / HTTP/1.1" 500 59 "-" "hDav-using application"
+ ::ffff:192.168.1.6 - user [28/Nov/2014:16:59:21 +0100] "PROPFIND /tmp HTTP/1.1" 500 59 "-" "hDav-using application"
+ ::ffff:192.168.1.6 - user [28/Nov/2014:16:59:23 +0100] "MKCOL /tmp HTTP/1.1" 500 59 "-" "hDav-using application"
+
+
+cadaver works:
+
+ $ cadaver https://dav.example.com
+ Authentication required for Radicale - Password Required on server `dav.example.com':
+ Username: user
+ Password:
+ dav:/> ls
+ Listing collection `/': succeeded.
+ Coll: user 0 Jan 1 1970
+
+server log:
+
+ ::ffff:192.168.1.6 - - [28/Nov/2014:17:01:31 +0100] "OPTIONS / HTTP/1.1" 200 0 "-" "cadaver/0.23.3 neon/0.30.1"
+ ::ffff:192.168.1.6 - - [28/Nov/2014:17:01:31 +0100] "PROPFIND / HTTP/1.1" 401 0 "-" "cadaver/0.23.3 neon/0.30.1"
+ ::ffff:192.168.1.6 - user [28/Nov/2014:17:01:42 +0100] "PROPFIND / HTTP/1.1" 207 579 "-" "cadaver/0.23.3 neon/0.30.1"
+ ::ffff:192.168.1.6 - user [28/Nov/2014:17:01:42 +0100] "PROPFIND / HTTP/1.1" 207 579 "-" "cadaver/0.23.3 neon/0.30.1"
+ ::ffff:192.168.1.6 - user [28/Nov/2014:17:02:01 +0100] "PROPFIND / HTTP/1.1" 207 1035 "-" "cadaver/0.23.3 neon/0.30.1"
+
diff --git a/doc/bugs/webdav_fails___40__server:_radicale_0.9-1__41__/comment_1_487bf264afeef2a3b0a61d306ebfc3c5._comment b/doc/bugs/webdav_fails___40__server:_radicale_0.9-1__41__/comment_1_487bf264afeef2a3b0a61d306ebfc3c5._comment
new file mode 100644
index 000000000..56e34a09d
--- /dev/null
+++ b/doc/bugs/webdav_fails___40__server:_radicale_0.9-1__41__/comment_1_487bf264afeef2a3b0a61d306ebfc3c5._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-12-02T19:02:10Z"
+ content="""
+The webdav server seems to have rejected the MKCOL command,
+which makes a collection (subdirectory) on the server.
+
+Is radicale intended to be a general-purpose webdav server?
+The description of the debian package says it's a CalDAV and CardDAV
+server. Perhaps it simply doesn't support generic top-level collections.
+"""]]
diff --git a/doc/bugs/webdav_special_remote_fails_on_android___40__box.com__41__.mdwn b/doc/bugs/webdav_special_remote_fails_on_android___40__box.com__41__.mdwn
deleted file mode 100644
index 8d21a67c9..000000000
--- a/doc/bugs/webdav_special_remote_fails_on_android___40__box.com__41__.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-### Please describe the problem.
-
-The Box.com/WebDAV special remote fails with this error on my Android tablet:
-
- WebDAV failed to write file: InternalIOException user error (Network.Socket.setSocketOption: socket option NoDelay unsupported on this system): user error
-
-### What steps will reproduce the problem?
-
- 1. Install the Android beta from the download page.
- 2. Create a repository (using the assistant)
- 3. (At this point I configured XMPP, if that's relevant.)
- 4. Configure a Box.com repository using the assistant
-
-The repository will fail to add with the above error message.
-
-### What version of git-annex are you using? On what operating system?
-
-git-annex 5.20131221-gf8c928d
-
-Android 4.0.4<br>
-Kernel 2.6.35-palm-tenderloin<br>
-CyanogenMod 9-20121202-NIGHTLY-tenderloin (HP Touchpad)
-
-### Please provide any additional information below.
-
-I have successfully set up the same Box.com account via the assistant on another machine.
-
-I don't see any mention of WebDAV in daemon.log and friends.
-
-It seems like NODELAY should be optional, as it's just a performance optimization (and disabling packet coalescing may be battery-hostile on a mobile device, too).
-
-> Should be fixed in the last release, [[done]] --[[Joey]]
diff --git a/doc/bugs/webdav_special_remote_fails_on_android___40__box.com__41__/comment_1_f57757b4bcc4ace73bf660419d944c33._comment b/doc/bugs/webdav_special_remote_fails_on_android___40__box.com__41__/comment_1_f57757b4bcc4ace73bf660419d944c33._comment
deleted file mode 100644
index a4e94643c..000000000
--- a/doc/bugs/webdav_special_remote_fails_on_android___40__box.com__41__/comment_1_f57757b4bcc4ace73bf660419d944c33._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.227"
- subject="comment 1"
- date="2013-12-29T21:31:49Z"
- content="""
-Yeah, I have patched haskell network library to not do anything for NODELAY on Android, but I have to re-bootstrap my entire haskell dev environment due to that change. With luck, I will have a fixed build to try in around 16 hours.
-"""]]
diff --git a/doc/bugs/weird_local_clone_confuses.mdwn b/doc/bugs/weird_local_clone_confuses.mdwn
deleted file mode 100644
index aa838f167..000000000
--- a/doc/bugs/weird_local_clone_confuses.mdwn
+++ /dev/null
@@ -1,20 +0,0 @@
-See
-<http://www.git.code-experiments.com/blog/2011/01/manage-large-files-with-git-annex-by-joey-hess.html>
-
-If a local repo is cloned with "git clone orig/.git new", then git-annex in
-new cannot see origin.
-
-the .git/config has "url=/.../orig/.git". Apparently git is ok with that
-weird construction; probably it treats it as a bare git repo. But git-annex
-just sees a directory w/o a .git subdir, and gives up.
-
----
-
-Just tested, and the new support for bare repositories didn't solve this.
-(Because config.bare is not set.)
-
-I think this is not something git-annex should go out of its way to
-support. [[done]]
---[[Joey]]
-
-Later.. Fixed this after all. --[[Joey]]
diff --git a/doc/bugs/weird_unicode_bug_on_windows.mdwn b/doc/bugs/weird_unicode_bug_on_windows.mdwn
new file mode 100644
index 000000000..f1f0377f8
--- /dev/null
+++ b/doc/bugs/weird_unicode_bug_on_windows.mdwn
@@ -0,0 +1,17 @@
+### Please describe the problem.
+
+My repo contains more than 1000 files, many are unicode filenames. Now that [this bug](http://git-annex.branchable.com/bugs/fails_to_get_content_from_bare_repo_on_windows/) is resolved, almost all files are fetched, except one file named '移动硬盘 1T Buffalo USB3.0 白色.rtf'.
+
+### What steps will reproduce the problem?
+
+I reproduced this problem by creating a repo containing only this file with no content. If anyone wants to reproduce this, just create an empty file by copy and paste the above filename in the quote.
+
+I created the repo on mac, synced with a usb drive, then on windows machine try to sync it back.
+
+* When run git-annex webapp in the newly created windows repo, after the usb drive is added as a remote, an error popups up: http://imgur.com/5ZfIeGQ although the remote is added successfully (http://imgur.com/04O8kaC)
+* On the command line, git annex sync runs successfully, but git annex get . failed: http://imgur.com/bIVrbe2
+* The file is there (http://imgur.com/URGwWWt) with correct filename, just that the content is not there.
+
+### What version of git-annex are you using? On what operating system?
+
+Latest release of git-annex on both mac and windows. The initial repo on mac is indirect repo, the one on usb drive is a bare repo, the one on windows is direct repo.
diff --git a/doc/bugs/weird_unicode_bug_on_windows/comment_1_69af9bd8c7898fccc2219edd860d547b._comment b/doc/bugs/weird_unicode_bug_on_windows/comment_1_69af9bd8c7898fccc2219edd860d547b._comment
new file mode 100644
index 000000000..b16155c5f
--- /dev/null
+++ b/doc/bugs/weird_unicode_bug_on_windows/comment_1_69af9bd8c7898fccc2219edd860d547b._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.203"
+ subject="comment 1"
+ date="2014-06-19T22:39:46Z"
+ content="""
+I don't quite reproduce this on windows. Instead of the file showing up and `git annex get` not getting it, the file never shows up at all. It seems that the direct mode merge code fails to create the file in the work tree. This also means that another sync will commit the deletion of the file.
+
+Based on the screenshot, I do have the identical filename checked into git, which git ls-files etc represents as \"\347\247\273\345\212\250\347\241\254\347\233\230 1T Buffalo USB3.0 \347\231\275\350\211\262.rtf\"
+
+Anyway, the root cause is probably the same. See [[todo/windows_support]] for a discussion of several issues with filename encodings and windows.
+"""]]
diff --git a/doc/bugs/whereis_does_not_work_in_direct_mode.mdwn b/doc/bugs/whereis_does_not_work_in_direct_mode.mdwn
new file mode 100644
index 000000000..824c91afd
--- /dev/null
+++ b/doc/bugs/whereis_does_not_work_in_direct_mode.mdwn
@@ -0,0 +1,91 @@
+### Please describe the problem.
+
+`git annex whereis` says that there are no copies of any of the files that have been added in repositories running in direct mode when `annex.alwayscommit` is set to `false`.
+
+In other words, if I add a file from PC1 in direct mode, `whereis` in PC2 will fail. Instead, if I add the same file from PC1 in indirect mode, `whereis` in PC2 will work correctly and will report that the file is present in PC1.
+
+This is the error received in PC2:
+
+ $ git annex whereis
+ whereis fileA (0 copies) failed
+ whereis fileB (0 copies) failed
+ git-annex: whereis: 2 failed
+
+### What steps will reproduce the problem?
+
+The following script (available at <https://gist.github.com/gioele/dde462df89edfe17c5e3>) will reproduce this problem.
+
+[[!format sh """
+#!/bin/sh -x
+
+set -e ; set -u
+export LC_ALL=C
+
+# alwayscommit must be set globally to affects whereis and sync
+git config --global annex.alwayscommit false
+
+direct=true # set to false to make the problem disappear
+
+h=${h:-localhost}
+dr="/tmp/annex"
+
+sync='sync -c annex.alwayscommit=true'
+
+chmod a+rwx -R pc1 pc2 || true
+rm -Rf pc1 pc2
+
+# create central git repo
+ssh $h "chmod a+rwx -R ${dr}/Docs.git" || true
+ssh $h "rm -Rf ${dr}/Docs.git"
+ssh $h "mkdir -p ${dr}/Docs.git"
+ssh $h "cd ${dr}/Docs.git ; git init --bare"
+
+d=$(pwd)
+
+# populate repo in PC1
+mkdir -p pc1/Docs
+cd pc1/Docs
+echo AAA > fileA
+echo BBB > fileB
+
+git init
+git remote add origin $h:$dr/Docs.git
+git fetch --all
+
+# simulate a host without git-annex
+git config remote.origin.annex-ignore true
+
+git annex init "pc1"
+git annex info
+
+$direct && git annex direct
+
+git annex add .
+git annex $sync origin
+
+# re-create repo on PC2
+cd $d
+mkdir -p pc2
+cd pc2
+git clone $h:$dr/Docs.git
+cd Docs
+
+git config remote.origin.annex-ignore true
+
+git annex init "pc2"
+git annex info
+
+git annex whereis || true
+echo "I was expecting location info to be available after info (press Enter)" ; read enter
+
+git annex $sync origin
+
+git annex whereis || true
+echo "Why isn't location info available even after sync? (press Enter)"
+"""]]
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex version: 5.20140716-g8c14ba8
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/whereis_does_not_work_in_direct_mode/comment_1_f119d2b322a7b33c08b8187deba690c2._comment b/doc/bugs/whereis_does_not_work_in_direct_mode/comment_1_f119d2b322a7b33c08b8187deba690c2._comment
new file mode 100644
index 000000000..5775addc0
--- /dev/null
+++ b/doc/bugs/whereis_does_not_work_in_direct_mode/comment_1_f119d2b322a7b33c08b8187deba690c2._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 1"
+ date="2014-08-12T17:29:16Z"
+ content="""
+I don't seem to reproduce this bug when I run the script provided.
+
+<pre>
+whereis fileA (1 copy)
+ c311d5b9-2f59-4153-a0e5-61707edd28ef -- pc1
+ok
+whereis fileB (1 copy)
+ c311d5b9-2f59-4153-a0e5-61707edd28ef -- pc1
+ok
+</pre>
+"""]]
diff --git a/doc/bugs/whereis_does_not_work_in_direct_mode/comment_2_d1005e29c32bddad109dd426d4dd8803._comment b/doc/bugs/whereis_does_not_work_in_direct_mode/comment_2_d1005e29c32bddad109dd426d4dd8803._comment
new file mode 100644
index 000000000..d139aed36
--- /dev/null
+++ b/doc/bugs/whereis_does_not_work_in_direct_mode/comment_2_d1005e29c32bddad109dd426d4dd8803._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 2"
+ date="2014-08-12T17:33:25Z"
+ content="""
+It seems to me that there are only 3 ways that pc2 could not know that pc1 has the file, in decreasing order of probability:
+
+1. pc1 has not pushed git-annex branch to origin (or pushed it after pc2 pulled)
+2. pc2 has not fetched git-annex branch from origin
+3. an actual bug, such as bad info being written to the git-annex branch or the git-annex branch merge failing
+
+So, if you have 3 repositories that exhibit a problem like this, those are the things to check.
+"""]]
diff --git a/doc/bugs/whereis_does_not_work_in_direct_mode/comment_3_44dd6e0c6e7a7abd6483a4367baa7f0f._comment b/doc/bugs/whereis_does_not_work_in_direct_mode/comment_3_44dd6e0c6e7a7abd6483a4367baa7f0f._comment
new file mode 100644
index 000000000..6fb3b8046
--- /dev/null
+++ b/doc/bugs/whereis_does_not_work_in_direct_mode/comment_3_44dd6e0c6e7a7abd6483a4367baa7f0f._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://svario.it/gioele"
+ nickname="gioele"
+ subject="comment 3"
+ date="2014-08-13T06:36:52Z"
+ content="""
+This is strange: I can replicate the problem on three different Ubuntu machines (12.04.5 32 and 64 bit, 14.04 64 bit) using that script.
+
+I attached to the gist [the execution log in direct mode](https://gist.github.com/gioele/dde462df89edfe17c5e3#file-annex-direct-log) (where the bug is shown), the [log in indirect mode](https://gist.github.com/gioele/dde462df89edfe17c5e3#file-annex-indirect-log) (where the bug does not appear), and a [diff between the two](https://gist.github.com/gioele/dde462df89edfe17c5e3#file-log-diff). I hope this helps.
+"""]]
diff --git a/doc/bugs/whereis_does_not_work_in_direct_mode/comment_4_f334a85d6dd6c4971f0609ae0831766a._comment b/doc/bugs/whereis_does_not_work_in_direct_mode/comment_4_f334a85d6dd6c4971f0609ae0831766a._comment
new file mode 100644
index 000000000..ffbbcc12a
--- /dev/null
+++ b/doc/bugs/whereis_does_not_work_in_direct_mode/comment_4_f334a85d6dd6c4971f0609ae0831766a._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="http://svario.it/gioele"
+ nickname="gioele"
+ subject="comment 4"
+ date="2014-08-13T06:40:12Z"
+ content="""
+Talking about the three possible causes for this bug,
+
+> 1) pc1 has not pushed git-annex branch to origin (or pushed it after pc2 pulled)
+
+pc1 pushes using `git annex sync -c annex.alwayscommit=true origin`. This should be enough, isn't it?
+
+> 2) pc2 has not fetched git-annex branch from origin
+
+The pc2 repository is created with `git clone localhost:/tmp/annex/Docs.git`, so there branches should all be there. I tried adding a `git fetch --all` to the script but it makes no difference. This is the list of branches in pc2:
+
+ * master
+ remotes/origin/HEAD -> origin/master
+ remotes/origin/master
+ remotes/origin/synced/git-annex
+ remotes/origin/synced/master
+
+"""]]
diff --git a/doc/bugs/whereis_does_not_work_in_direct_mode/comment_5_00926da970a20de67ba7719610f17142._comment b/doc/bugs/whereis_does_not_work_in_direct_mode/comment_5_00926da970a20de67ba7719610f17142._comment
new file mode 100644
index 000000000..5873167be
--- /dev/null
+++ b/doc/bugs/whereis_does_not_work_in_direct_mode/comment_5_00926da970a20de67ba7719610f17142._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://svario.it/gioele"
+ nickname="gioele"
+ subject="comment 5"
+ date="2014-08-31T10:15:30Z"
+ content="""
+I have found out that there is a connection between this problem and the _global_ configuration of `annex.alwayscommit`. This problem will appear only if `annex.alwayscommit` is globally set to `false`. What is very strange is that setting `annex.alwayscommit` locally does not make this bug appear; only a globally set `annex.alwayscommit` will trigger this problem.
+
+I fixed the test script to set `annex.alwayscommit` globally.
+
+Now I see why I could reproduce this bug on different machines but Joey could not: all my machines have the same `~/.gitconfig`.
+"""]]
diff --git a/doc/bugs/whereis_does_not_work_in_direct_mode/comment_6_7f68d9daa542f992c61b7b7c36819933._comment b/doc/bugs/whereis_does_not_work_in_direct_mode/comment_6_7f68d9daa542f992c61b7b7c36819933._comment
new file mode 100644
index 000000000..7f5fa824e
--- /dev/null
+++ b/doc/bugs/whereis_does_not_work_in_direct_mode/comment_6_7f68d9daa542f992c61b7b7c36819933._comment
@@ -0,0 +1,49 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.132"
+ subject="comment 6"
+ date="2014-09-11T18:34:02Z"
+ content="""
+It looks like there might be some minor inconsistency in when git-annex syncs when in indirect mode vs direct mode. This results in the location tracking information not being committed until after the git-annex sync in the pc1/Docs repository has pushed the git-annex branch to origin. Since that is the only
+time that pc1/Docs syncs with origin, the location tracking info never reaches origin, and the rest of the behavior follows.
+
+Here is the direct mode sync, showing the git-annex branch commit occurring after the push. Specifically, when the sync merges the git-annex branch, it also commits any deferred changes at that point:
+
+<pre>
+commit ok
+pull origin
+ok
+push origin
+Counting objects: 6, done.
+Delta compression using up to 4 threads.
+Compressing objects: 100% (5/5), done.
+Writing objects: 100% (6/6), 574 bytes | 0 bytes/s, done.
+Total 6 (delta 0), reused 0 (delta 0)
+To localhost:/tmp/annex/Docs.git
+ * [new branch] git-annex -> synced/git-annex
+ * [new branch] annex/direct/master -> synced/master
+ok
+(Recording state in git...)
+</pre>
+
+And here is the indirect mode sync, showing a \"commit\" which includes committing deferred changes to the git-annex branch:
+
+<pre>
+commit (Recording state in git...)
+ok
+pull origin
+ok
+push origin
+Counting objects: 15, done.
+Delta compression using up to 4 threads.
+Compressing objects: 100% (12/12), done.
+Writing objects: 100% (15/15), 1.32 KiB | 0 bytes/s, done.
+Total 15 (delta 0), reused 0 (delta 0)
+To localhost:/tmp/annex/Docs.git
+ * [new branch] git-annex -> synced/git-annex
+ * [new branch] master -> synced/master
+ok
+</pre>
+
+It seems that [[!commit 2cfda59174b9cbc02e87c069982096d44601cd40]] and some subsequent changes accidentially removed the Annex.Branch.commit from the direct mode code path within the first part of `sync`. So, easily fixed.
+"""]]
diff --git a/doc/bugs/whereis_outputs_no_informaiton_for_unlocked_files.mdwn b/doc/bugs/whereis_outputs_no_informaiton_for_unlocked_files.mdwn
index cb8519952..d4d4826ff 100644
--- a/doc/bugs/whereis_outputs_no_informaiton_for_unlocked_files.mdwn
+++ b/doc/bugs/whereis_outputs_no_informaiton_for_unlocked_files.mdwn
@@ -42,3 +42,5 @@ What version of git-annex are you using? On what operating system?
Linux ... 3.2.0-31-generic #50-Ubuntu SMP Fri Sep 7 16:16:45 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
Please provide any additional information below.
+
+[[!tag confirmed]]
diff --git a/doc/bugs/windows_fails_test___34__recoverEncode__34__.mdwn b/doc/bugs/windows_fails_test___34__recoverEncode__34__.mdwn
deleted file mode 100644
index 0413bb55d..000000000
--- a/doc/bugs/windows_fails_test___34__recoverEncode__34__.mdwn
+++ /dev/null
@@ -1,39 +0,0 @@
-### Please describe the problem.
-
-My windows install (2013-09-09) fails "quick checks" when running "git annex test". See below the errors from two seperate runs of the test in two fresh empty directories:
-
-*** Failed! Exception: 'recoverEncode: invalid argument (invalid character)' (after 13 tests):
-Key {keyName = "\140\DEL\159/\RS'", keyBackendName = "WQACSWJDVY", keySize = Just 6, keyMtime = Just 3}
-prop_idempotent_configEscape
-
-*** Failed! Exception: 'recoverEncode: invalid argument (invalid character)' (after 4 tests):
-Key {keyName = "\130", keyBackendName = "Y", keySize = Nothing, keyMtime = Nothing}
-prop_idempotent_configEscape
-
-### What steps will reproduce the problem?
-
-create a directory
-cd to it in cmd or Git Bash
-run "git annex test"
-
-
-### What version of git-annex are you using? On what operating system?
-
-OS Name: Microsoft Windows 7 Professional (64bit)
-OS Version: 6.1.7601 Service Pack 1 Build 7601
-
-Install Git-1.8.3-preview20130601 (third option to add git and tools to path)
-Install git-annex-installer (2013-09-09)
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-
-# End of transcript or log.
-"""]]
-
-> I've released a fix for this problem. Thanks for reporting! [[done]]
-> --[[Joey]]
diff --git a/doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_1_424b3536e21e02f192f7f2b8e833ed18._comment b/doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_1_424b3536e21e02f192f7f2b8e833ed18._comment
deleted file mode 100644
index e94608921..000000000
--- a/doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_1_424b3536e21e02f192f7f2b8e833ed18._comment
+++ /dev/null
@@ -1,67 +0,0 @@
-[[!comment format=mdwn
- username="gary"
- ip="82.112.140.250"
- subject="Thanks for the fix"
- date="2013-09-12T07:20:12Z"
- content="""
-Hi the fix works fine, all the tests pass now. However I am having issues when trying to sync two directories. I have had this working in direct mode in fedora but not in the previously mentioned windows install
-
-2 directories d1 and d2.
-
-SETUP:
-
-cd d1
-
-mkdir annex
-
-cd annex
-
-cp someFile . (as get branch issue if empty)
-
-git init
-
-git annex init d1
-
-cp someFile . (as get branch issue if empty)
-
-git annex add .
-
-git annex sync
-
-cd ..\..\d2
-
-git clone ..\..\d1\annex
-
-cd annex
-
-git annex init d2
-
-git remote add d1 ..\..\d1\annex
-
-cd ..\..\d1\annex
-
-git remote add d2 ..\..\d2\annex
-
-
-SYNCING
-
-cd d1\annex
-
-cp someFiles .
-
-git annex add .
-
-git annex sync
-
-cd ..\..\d2\annex
-
-git annex sync
-
-git annex mirror --from d1
-
-It looks like the files copy across but when I look at them in explorer they are still just the place holders.
-
-any ideas on what may be going on. Does the work flow look correct?
-
-(ps typo on all slashes but
-"""]]
diff --git a/doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_2_78db183aa401e2023d7faec5f7a4a573._comment b/doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_2_78db183aa401e2023d7faec5f7a4a573._comment
deleted file mode 100644
index f186a0d81..000000000
--- a/doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_2_78db183aa401e2023d7faec5f7a4a573._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.2.134"
- subject="comment 2"
- date="2013-09-13T17:04:26Z"
- content="""
-That is an unrelated bug. You got very lucky that I saw your followup comment.
-
-I was able to reproduce it, and found bug in git annex fsck that prevented it from finding and fixing this problem on Windows. Am still investigating why the problem occurs in the first place..
-"""]]
diff --git a/doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_3_ed2da19eaf0bd0864f6b28816a79bc23._comment b/doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_3_ed2da19eaf0bd0864f6b28816a79bc23._comment
deleted file mode 100644
index a8f7c0a02..000000000
--- a/doc/bugs/windows_fails_test___34__recoverEncode__34__/comment_3_ed2da19eaf0bd0864f6b28816a79bc23._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.2.134"
- subject="comment 3"
- date="2013-09-13T17:44:04Z"
- content="""
-I have now diagnosed and fixed the underlying problem on Windows.
-"""]]
diff --git a/doc/bugs/windows_install_failure.mdwn b/doc/bugs/windows_install_failure.mdwn
index b67adf10b..5253468f1 100644
--- a/doc/bugs/windows_install_failure.mdwn
+++ b/doc/bugs/windows_install_failure.mdwn
@@ -28,3 +28,6 @@ Windows 7 64 bit
"""]]
[[!meta title="windows installer fails unless run as admin user"]]
+
+> [[dup|done]] of
+> [[git-annex_does_not_install_on_windows_without_admin_rights]] --[[Joey]]
diff --git a/doc/bugs/windows_isExecutable_fail.mdwn b/doc/bugs/windows_isExecutable_fail.mdwn
new file mode 100644
index 000000000..41e5b29a2
--- /dev/null
+++ b/doc/bugs/windows_isExecutable_fail.mdwn
@@ -0,0 +1,27 @@
+On Windows, isExecutable fails to detect a file that is indeed executable
+as such. This prevents git-annex from running the pre-commit-hook
+on Windows.
+
+getFileStatus yields a fileMode of 100666, which is
+clearly a dummy mode. Not surprising, since unix-compat is partial stubs
+on windows.
+
+Actually, isExecutable is ok (it needs to check unix modes because it is
+used on file modes coming out of git). But, getFileStatus is the wrong
+thing to be using on Windows to check if a hook exists and is executable.
+
+I don't see anything in Win32 or Win32-extras on hackage that can check
+executablility. Looking at git's source, it uses `access(path, X_OK) < 0`;
+haskell equivilant is System.Posix.Files.fileAccess, but the version
+in unix-compat has the same problem as checking getFileStatus's fileMode.
+
+I think it's reasonable to assume that if a hook exists on windows, it's
+intended to be executable, and try to run it. Actually, testing with
+msysgit, it runs hooks whether or not they have the execute bit set!
+So, done that now.
+
+However, now git-annex tries to run the hook but fails when it's a shell
+script because #!/bin/sh is useless on windows. It looks to me like msysgit
+runs "sh hook" to work around that, and it is in fact parsing the shebang
+line and dispatching the interpreter. Ugh. (Also, pre-commit.bat doesn't
+get run.) Ok, added this same hack to git-annex. [[done]] --[[Joey]]
diff --git a/doc/bugs/windows_port_-_can__39__t_directly_access_files.mdwn b/doc/bugs/windows_port_-_can__39__t_directly_access_files.mdwn
deleted file mode 100644
index cb2e650d0..000000000
--- a/doc/bugs/windows_port_-_can__39__t_directly_access_files.mdwn
+++ /dev/null
@@ -1,250 +0,0 @@
-### Please describe the problem.
-Using the windows port of git annex, I'm unable to directly access files that are retrieved from a remote ssh repository. Instead, the file contains a reference to ../.git/annex/objects....
-
-**Update** This appears to be a problem with remote bare repositories only. I was able to get from a remote regular git repository without the stand-in symlinks. The stand-in symlink file gets replaced with the real content on "get" using a non-base repository.
-
-### What steps will reproduce the problem?
-
-[[!format sh """
-** on ssh server **
-
-git init --bare annex.git
-cd annex.git
-git annex init origin
-
-** on windows laptop - add content main repository **
-git init annex
-cd annex
-git annex init laptop
-
-git remote add origin ssh://xxxxx/~/annex.git
-echo hello > foo.txt
-git annex add .
-git commit -m "done"
-git annex sync
-git annex copy --to origin
-git annex sync
-git annex whereis foo.txt
-
-** on windows laptop - backup repository **
-
-cd ..
-git init annex.backup
-cd annex.backup
-git annex init "backup"
-git remote add origin ssh://joebo@xxxxx.com/~/annex.git
-git fetch origin
-git merge origin/synced/master
-git annex sync
-git annex get .
-find . | xargs grep hello
-./.git/annex/objects/d91/b11/SHA256E-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc7
-163af34d08286a2e846f6be03.txt/SHA256E-s6--5891b5b522d5df086d0ff0b110fbd9d21bb4fc
-7163af34d08286a2e846f6be03.txt:hello
-
-** updating the file from windows laptop **
-cd ..\annex
-echo hello2 > foo.txt
-git annex add .
-git commit -m "updated"
-git annex sync
-git annex copy --to origin
-git annex sync
-
-cd ..\annex.backup
-git fetch origin
-git merge origin/synced/master
-get annex sync
-git annex get .
-find . | xargs grep hello2
-./.git/annex/objects/7ed/895/SHA256E-s9--3f70947299d2926028fd0107c4309e65ca33a9a
-e0175fc4bc57792ca17240d18.txt/SHA256E-s9--3f70947299d2926028fd0107c4309e65ca33a9
-ae0175fc4bc57792ca17240d18.txt:hello2
-"""]]
-
-
-
-### What version of git-annex are you using? On what operating system?
-
- git-annex version: 4.20130601-gc01f842
- build flags: Pairing Testsuite S3 WebDAV DNS
- local repository version: 4
- default repository version: 3
- supported repository versions: 3 4
- upgrade supported from repository versions: 2
-
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-joebo@joebo:~$ sudo rm -rf annex.git
-joebo@joebo:~$ git init --bare annex.git
-Initialized empty Git repository in /home/joebo/annex.git/
-joebo@joebo:~$ cd annex.git
-joebo@joebo:~/annex.git$ git annex init origin
-init origin ok
-
-
-
-C:\Users\joebo>cd annex
-
-C:\Users\joebo\annex>git annex init laptop
-init laptop
- Detected a crippled filesystem.
-
- Enabling direct mode.
-
- Detected a filesystem without fifo support.
-
- Disabling ssh connection caching.
-ok
-(Recording state in git...)
-
-C:\Users\joebo\annex>
-C:\Users\joebo\annex>git remote add origin ssh://joebo@xxxxx.com/~
-cho hello > foo.txt
-
-C:\Users\joebo\annex>git annex add .
-add foo.txt (checksum...) ok
-(Recording state in git...)
-
-C:\Users\joebo\annex>git commit -m "done"
-[master (root-commit) 7f54efa] done
- 1 file changed, 1 insertion(+)
- create mode 120000 foo.txt
-
-C:\Users\joebo\annex>git annex sync
-commit
-ok
-pull origin
-warning: no common commits
-remote: Counting objects: 5, done.
-remote: Compressing objects: 100% (3/3), done.
-remote: Total 5 (delta 1), reused 0 (delta 0)
-Unpacking objects: 100% (5/5), done.
-From ssh://xxxxx.com/~/annex
- * [new branch] git-annex -> origin/git-annex
-ok
-(merging origin/git-annex into git-annex...)
-(Recording state in git...)
-push origin
-Counting objects: 18, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (12/12), done.
-Writing objects: 100% (16/16), 1.48 KiB, done.
-Total 16 (delta 1), reused 0 (delta 0)
-To ssh://joebo@xxxxx.com/~/annex.git
- * [new branch] git-annex -> synced/git-annex
- * [new branch] master -> synced/master
-ok
-
-C:\Users\joebo\annex>git annex copy --to origin
-copy foo.txt (checking origin...) (to origin...)
-foo.txt
- 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 67 bytes received 31 bytes 65.33 bytes/sec
-total size is 0 speedup is 0.00
-ok
-(Recording state in git...)
-
-C:\Users\joebo\annex>git annex sync
-commit
-ok
-pull origin
-ok
-push origin
-Counting objects: 9, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (4/4), done.
-Writing objects: 100% (5/5), 446 bytes, done.
-Total 5 (delta 1), reused 0 (delta 0)
-To ssh://joebo@xxxxx.com/~/annex.git
- ed1a701..c4c9cd0 git-annex -> synced/git-annex
-ok
-
-C:\Users\joebo\annex>git annex whereis foo.txt
-whereis foo.txt (2 copies)
- 03573d86-d460-11e2-8500-ebab2910b225 -- origin
- 3b6b60fb-0979-4869-98de-38208182ab92 -- here (laptop)
-ok
-
-
-C:\Users\joebo\annex>cd ..
-
-C:\Users\joebo>git init annex.backup
-Initialized empty Git repository in C:/Users/joebo/annex.backup/.git/
-
-C:\Users\joebo>cd annex.backup
-
-C:\Users\joebo\annex.backup>git annex init "backup"
-init backup
- Detected a crippled filesystem.
-
- Enabling direct mode.
-
- Detected a filesystem without fifo support.
-
- Disabling ssh connection caching.
-ok
-(Recording state in git...)
-
-C:\Users\joebo\annex.backup>git remote add origin ssh://joebo@xxxxx.com/~/anne
-x.git
-
-C:\Users\joebo\annex.backup>git fetch origin
-warning: no common commits
-remote: Counting objects: 25, done.
-remote: Compressing objects: 100% (19/19), done.
-remote: Total 25 (delta 4), reused 0 (delta 0)
-Unpacking objects: 100% (25/25), done.
-From ssh://xxxxx.com/~/annex
- * [new branch] git-annex -> origin/git-annex
- * [new branch] synced/git-annex -> origin/synced/git-annex
- * [new branch] synced/master -> origin/synced/master
-
-C:\Users\joebo\annex.backup>git merge origin/synced/master
-
-C:\Users\joebo\annex.backup>git annex sync
-(merging origin/git-annex origin/synced/git-annex into git-annex...)
-(Recording state in git...)
-commit
-ok
-pull origin
-ok
-push origin
-Counting objects: 12, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (6/6), done.
-Writing objects: 100% (8/8), 818 bytes, done.
-Total 8 (delta 2), reused 0 (delta 0)
-To ssh://joebo@xxxxx.com/~/annex.git
- c4c9cd0..f403560 git-annex -> synced/git-annex
-ok
-
-C:\Users\joebo\annex.backup>git annex get .
-get foo.txt (from origin...)
-SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.txt
-
- 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 30 bytes received 145 bytes 116.67 bytes/sec
-total size is 0 speedup is 0.00
-ok
-(Recording state in git...)
-
-C:\Users\joebo\annex.backup>cat foo.txt
-.git/annex/objects/fW/Gk/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649
-b934ca495991b7852b855.txt/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e464
-9b934ca495991b7852b855.txt
-C:\Users\joebo\annex.backup>ls
-foo.txt
-
-
-# End of transcript or log.
-"""]]
-
-> [[done]]; see my comment. --[[Joey]]
diff --git a/doc/bugs/windows_port_-_can__39__t_directly_access_files/comment_1_03ef9d33839173044dcc4f2b37f575d2._comment b/doc/bugs/windows_port_-_can__39__t_directly_access_files/comment_1_03ef9d33839173044dcc4f2b37f575d2._comment
deleted file mode 100644
index ad41694b0..000000000
--- a/doc/bugs/windows_port_-_can__39__t_directly_access_files/comment_1_03ef9d33839173044dcc4f2b37f575d2._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmhfodZquCI_EEl-f3h7HkROTszlsQL6yA"
- nickname="Joe"
- subject="Closed - not a bug"
- date="2013-06-14T13:23:24Z"
- content="""
-It was a user error. I needed to have git-shell in my path. I had added it to the end of .bashrc and it needed to be before the part that returned if not interactive: http://stackoverflow.com/questions/940533/how-do-i-set-path-such-that-ssh-userhost-command-works
-"""]]
diff --git a/doc/bugs/windows_port_-_can__39__t_directly_access_files/comment_2_c65e5491c82908af46fe2c97e048d210._comment b/doc/bugs/windows_port_-_can__39__t_directly_access_files/comment_2_c65e5491c82908af46fe2c97e048d210._comment
deleted file mode 100644
index 3368e3a31..000000000
--- a/doc/bugs/windows_port_-_can__39__t_directly_access_files/comment_2_c65e5491c82908af46fe2c97e048d210._comment
+++ /dev/null
@@ -1,20 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 2"
- date="2013-06-14T15:40:04Z"
- content="""
-Your transcript shows `git annex get` apparently receiving the file. I don't see how that could possibly have worked if git-annex-shell were not in the path on the server, since that is the command it runs to send the file. Also, `git annex copy` is earlier used to send the file to origin, which again should not work if git-annex-shell was not in the path. I think this whole git-annex-shell not in path thing is a red herring.
-
-What actually appears to be going on is this:
-
-1. You create a new empty repository. Since this is Windows, it's forced into direct mode.
-2. You manually merge origin/synced/master into this repository. Bypassing `git annex sync` in this way means that direct mode mappings are not updated for the files contained in that branch.
-3. You run `git annex get` on a file from that branch. The file is retrieved. Since no direct mode mapping exists for the object it just retrieved, it stashes it in .git/annex/objects and the file is left with the fake symlink git uses on windows.
-
-The manual merge in step 2 is the cause of the problem. The [[direct_mode]] documentation advises against using git commands that update the repository tree because it can lead to this kind of problem (as well as more serious data loss).
-
-Of course, you had no choice but to merge from origin/synced/master, because git annex sync didn't push to origin/master, so simply cloning the bare repository wouldn't work. However, I did fix that a few days ago.
-
-I see this as more evidence of there needing to be a [[todo/direct_mode_guard]] to block users from running unsafe git commands in direct mode repositories. This bug probably can be closed, assuming I correctly understand what happened.
-"""]]
diff --git a/doc/bugs/windows_port_-_git_annex_add_hangs_when_adding_17_files_at_once_or_more_.mdwn b/doc/bugs/windows_port_-_git_annex_add_hangs_when_adding_17_files_at_once_or_more_.mdwn
deleted file mode 100644
index 50f020b19..000000000
--- a/doc/bugs/windows_port_-_git_annex_add_hangs_when_adding_17_files_at_once_or_more_.mdwn
+++ /dev/null
@@ -1,197 +0,0 @@
-### Please describe the problem.
-git annex add hangs on the windows port when adding many files at once. It seems like the magic number is 17. 17 and greater hangs
-
-Running in debug, it hangs on this:
-
- [2013-06-14 13:59:46 Eastern Daylight Time] feed: git ["--git-dir=C:\\temp\\backup\\q10\\.git","--work-tree=C:\\temp\\backup\\q10","update-index","-z","--index-info"]
-
-
-### What steps will reproduce the problem?
-
-[[!format sh """
-git init t17
-cd t17
-git annex init
-for /l %a in (1,1,17) do @echo %a > %a.txt
-
-git annex add .
-add 1.txt (checksum...) ok
-add 10.txt (checksum...) ok
-add 11.txt (checksum...) ok
-add 12.txt (checksum...) ok
-add 13.txt (checksum...) ok
-add 14.txt (checksum...) ok
-add 15.txt (checksum...) ok
-add 16.txt (checksum...) ok
-add 17.txt (checksum...) ok
-add 2.txt (checksum...) ok
-add 3.txt (checksum...) ok
-add 4.txt (checksum...) ok
-add 5.txt (checksum...) ok
-add 6.txt (checksum...) ok
-add 7.txt (checksum...) ok
-add 8.txt (checksum...) ok
-add 9.txt (checksum...) ok
-(Recording state in git...)
-
-** gets stuck here
-
-"""]]
-
-### What version of git-annex are you using? On what operating system?
-
- git-annex version: 4.20130601-gc01f842
- build flags: Pairing Testsuite S3 WebDAV DNS
- local repository version: 4
- default repository version: 3
- supported repository versions: 3 4
- upgrade supported from repository versions: 2
-
-
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-** 16 works fine
-git init t16
-cd t16
-for /l %a in (1,1,16) do @echo %a > %a.txt
-git annex init
-git annex add .
-
-
-** not 17
-git init t18
-cd t18
-for /l %a in (1,1,17) do @echo %a > %a.txt
-
-C:\temp\backup\t18>git annex init
-init
- Detected a crippled filesystem.
-
- Enabling direct mode.
-
- Detected a filesystem without fifo support.
-
- Disabling ssh connection caching.
-ok
-(Recording state in git...)
-
-C:\temp\backup\t18>git annex add . --debug
-[2013-06-14 14:05:28 Eastern Daylight Time] read: git ["--git-dir=C:\\temp\\back
-up\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","ls-files","--others","--excl
-ude-standard","-z","--","."]
-[2013-06-14 14:05:28 Eastern Daylight Time] read: git ["--git-dir=C:\\temp\\back
-up\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","ls-files","--modified","-z",
-"--","."]
-[2013-06-14 14:05:28 Eastern Daylight Time] chat: git ["--git-dir=C:\\temp\\back
-up\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","cat-file","--batch"]
-add 1.txt [2013-06-14 14:05:28 Eastern Daylight Time] chat: git ["--git-dir=C:\\
-temp\\backup\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","check-attr","-z","
---stdin","annex.backend","annex.numcopies","--"]
-(checksum...) [2013-06-14 14:05:28 Eastern Daylight Time] chat: git ["--git-dir=
-C:\\temp\\backup\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","cat-file","--b
-atch"]
-[2013-06-14 14:05:28 Eastern Daylight Time] chat: git ["--git-dir=C:\\temp\\back
-up\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","hash-object","-t","blob","-w
-","--stdin"]
-ok
-add 10.txt (checksum...) [2013-06-14 14:05:28 Eastern Daylight Time] chat: git [
-"--git-dir=C:\\temp\\backup\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","has
-h-object","-t","blob","-w","--stdin"]
-ok
-add 11.txt (checksum...) [2013-06-14 14:05:28 Eastern Daylight Time] chat: git [
-"--git-dir=C:\\temp\\backup\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","has
-h-object","-t","blob","-w","--stdin"]
-ok
-add 12.txt (checksum...) [2013-06-14 14:05:28 Eastern Daylight Time] chat: git [
-"--git-dir=C:\\temp\\backup\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","has
-h-object","-t","blob","-w","--stdin"]
-ok
-add 13.txt (checksum...) [2013-06-14 14:05:28 Eastern Daylight Time] chat: git [
-"--git-dir=C:\\temp\\backup\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","has
-h-object","-t","blob","-w","--stdin"]
-ok
-add 14.txt (checksum...) [2013-06-14 14:05:28 Eastern Daylight Time] chat: git [
-"--git-dir=C:\\temp\\backup\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","has
-h-object","-t","blob","-w","--stdin"]
-ok
-add 15.txt (checksum...) [2013-06-14 14:05:28 Eastern Daylight Time] chat: git [
-"--git-dir=C:\\temp\\backup\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","has
-h-object","-t","blob","-w","--stdin"]
-ok
-add 16.txt (checksum...) [2013-06-14 14:05:28 Eastern Daylight Time] chat: git [
-"--git-dir=C:\\temp\\backup\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","has
-h-object","-t","blob","-w","--stdin"]
-ok
-add 17.txt (checksum...) [2013-06-14 14:05:29 Eastern Daylight Time] chat: git [
-"--git-dir=C:\\temp\\backup\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","has
-h-object","-t","blob","-w","--stdin"]
-ok
-add 2.txt (checksum...) [2013-06-14 14:05:29 Eastern Daylight Time] chat: git ["
---git-dir=C:\\temp\\backup\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","hash
--object","-t","blob","-w","--stdin"]
-ok
-add 3.txt (checksum...) [2013-06-14 14:05:29 Eastern Daylight Time] chat: git ["
---git-dir=C:\\temp\\backup\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","hash
--object","-t","blob","-w","--stdin"]
-ok
-add 4.txt (checksum...) [2013-06-14 14:05:29 Eastern Daylight Time] chat: git ["
---git-dir=C:\\temp\\backup\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","hash
--object","-t","blob","-w","--stdin"]
-ok
-add 5.txt (checksum...) [2013-06-14 14:05:29 Eastern Daylight Time] chat: git ["
---git-dir=C:\\temp\\backup\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","hash
--object","-t","blob","-w","--stdin"]
-ok
-add 6.txt (checksum...) [2013-06-14 14:05:29 Eastern Daylight Time] chat: git ["
---git-dir=C:\\temp\\backup\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","hash
--object","-t","blob","-w","--stdin"]
-ok
-add 7.txt (checksum...) [2013-06-14 14:05:29 Eastern Daylight Time] chat: git ["
---git-dir=C:\\temp\\backup\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","hash
--object","-t","blob","-w","--stdin"]
-ok
-add 8.txt (checksum...) [2013-06-14 14:05:29 Eastern Daylight Time] chat: git ["
---git-dir=C:\\temp\\backup\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","hash
--object","-t","blob","-w","--stdin"]
-ok
-add 9.txt (checksum...) [2013-06-14 14:05:29 Eastern Daylight Time] chat: git ["
---git-dir=C:\\temp\\backup\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","hash
--object","-t","blob","-w","--stdin"]
-ok
-(Recording state in git...)
-[2013-06-14 14:05:29 Eastern Daylight Time] feed: git ["--git-dir=C:\\temp\\back
-up\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","update-index","-z","--index-
-info"]
-[2013-06-14 14:05:29 Eastern Daylight Time] chat: git ["--git-dir=C:\\temp\\back
-up\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","hash-object","-w","--stdin-p
-aths"]
-[2013-06-14 14:05:29 Eastern Daylight Time] feed: git ["--git-dir=C:\\temp\\back
-up\\t18\\.git","--work-tree=C:\\temp\\backup\\t18","update-index","-z","--index-
-info"]
-
-
-**gets stuck here and never finishes**
-
-
-# End of transcript or log.
-"""]]
-
-> Reproduced this, and git update-index was in fact not hanging.
-> Instead, after that was done, it tried to stop the git hash-object
-> process, and this hung.
->
-> It seems that the use of runInteractiveProcess is at fault somehow,
-> and I guess it must be due to it opening a pipe for stderr, which
-> I don't need or want. Perhaps I need to ensure I read from that pipe,
-> or windows keeps the process from terminating. (Unix would just toss the piped
-> data away.)
->
-> That was the only place runInteractiveProcess was used, so I replaced
-> it with an alternative that lets stderr be inherited. With this change,
-> I have successfully added 1000 files to the annex in one go, with no
-> hang. Provisionally [[done]]. --[[Joey]]
diff --git a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_.mdwn b/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_.mdwn
deleted file mode 100644
index 76c05aa72..000000000
--- a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_.mdwn
+++ /dev/null
@@ -1,559 +0,0 @@
-### Please describe the problem.
-
-Using a centralized remote repository, new files that are added to the repository after it's pulled cannot be directly accessed - instead are pulled as symlinks.
-
-The workaround is to create a new remote repository that clones from the source. That repo can pull all files correctly
-
-### What steps will reproduce the problem?
-
-The following script works fine when everything is run on a linux box. If the same script is run on the windows box, it will not show foo2.txt in the repository clone. foo.txt is still valid.
-
-a file, testrepo.sh is set up on the server to simplify the creation of the repo for testing
-
-**testrepo.sh**
-[[!format sh """
-
-rm -rf repo.git
-git init --bare repo.git
-cd repo.git
-git annex init origin
-git annex sync
-
-
-"""]]
-
-**test script**
-[[!format sh """
-
-ssh joebo@xxxxx sh testrepo.sh
-
-
-rm -rf repo
-git init repo
-cd repo
-
-git annex init
-git remote add origin ssh://joebo@xxxxx/~/repo.git
-echo hello > foo.txt
-git annex add .
-git commit -m "initial commit"
-git annex sync
-git annex copy --to origin
-git annex sync
-
-cd ..
-rm -rf repo-bak
-git init repo-bak
-cd repo-bak
-git remote add origin ssh://joebo@xxxxx/~/repo.git
-git fetch origin
-git merge origin/synced/master
-git annex sync
-git annex get .
-cat foo.txt #works just fine!
-
-cd ..
-cd repo
-echo foo2 > foo2.txt
-git annex add .
-git commit -m "another"
-git annex sync
-git annex copy --to origin
-git annex sync
-
-cd ..
-cd repo-bak
-git annex sync
-
-## throws a fastforward error:
-commit
-ok
-pull origin
-remote: Counting objects: 21, done.
-remote: Compressing objects: 100% (14/14), done.
-remote: Total 16 (delta 3), reused 0 (delta 0)
-Unpacking objects: 100% (16/16), done.
-From ssh://xxxx.com/~/repo
- c5ed8e1..7ea5586 synced/git-annex -> origin/synced/git-annex
- a8402ae..1a72b3d synced/master -> origin/synced/master
-ok
-(merging origin/synced/git-annex into git-annex...)
-(Recording state in git...)
-push origin
-Counting objects: 15, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (7/7), done.
-Writing objects: 100% (8/8), 844 bytes, done.
-Total 8 (delta 2), reused 0 (delta 0)
-To ssh://joebo@xxxx.com/~/repo.git
- 7ea5586..5df3c85 git-annex -> synced/git-annex
- ! [rejected] master -> synced/master (non-fast-forward)
-error: failed to push some refs to 'ssh://joebo@xxx.com/~/repo.git'
-hint: Updates were rejected because a pushed branch tip is behind its remote
-hint: counterpart. Check out this branch and merge the remote changes
-hint: (e.g. 'git pull') before pushing again.
-hint: See the 'Note about fast-forwards' in 'git push --help' for details.
-failed
-git-annex: sync: 1 failed
-"""]]
-
-If I try to work around it by merging, then I get the symlink in the file after getting
-
-
-[[!format sh """
-
-C:\joe\backup\repo-bak>git merge origin/synced/master
-Updating f586b6a..fcae7bc
-Fast-forward
- foo2.txt | 1 +
- 1 file changed, 1 insertion(+)
- create mode 120000 foo2.txt
-
-C:\joe\backup\repo-bak>git annex get foo2.txt
-get foo2.txt (from origin...)
-SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bbece05f.txt
-
- 7 100% 6.84kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 30 bytes received 156 bytes 124.00 bytes/sec
-total size is 7 speedup is 0.04
-ok
-warning: LF will be replaced by CRLF in C:\joe\backup\repo-bak\.git\annex\journa
-l\fba_8bb_SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bb
-ece05f.txt.log.
-The file will have its original line endings in your working directory.
-(Recording state in git...)
-
-C:\joe\backup\repo-bak>cat foo2.txt
-.git/annex/objects/3V/kM/SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd
-78762e80a45f0bbece05f.txt/SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5cc
-d78762e80a45f0bbece05f.txt
-
-"""]]
-
-removing the backup repository and starting over works:
-
-[[!format sh """
-
-C:\joe\backup>git init repo-bak
-Initialized empty Git repository in C:/joe/backup/repo-bak/.git/
-
-C:\joe\backup>cd repo-bak
-
-C:\joe\backup\repo-bak>git remote add origin ssh://joebo@xxxx.com/~/repo.git
-
-C:\joe\backup\repo-bak>git fetch origin
-remote: Counting objects: 57, done.
-remote: Compressing objects: 100% (48/48), done.
-remote: Total 57 (delta 20), reused 0 (delta 0)
-Unpacking objects: 100% (57/57), done.
-From ssh://xxxx.com/~/repo
- * [new branch] git-annex -> origin/git-annex
- * [new branch] synced/git-annex -> origin/synced/git-annex
- * [new branch] synced/master -> origin/synced/master
-
-C:\joe\backup\repo-bak>git merge origin/synced/master
-
-C:\joe\backup\repo-bak>git annex sync
-
- Detected a crippled filesystem.
-
- Enabling direct mode.
-
- Detected a filesystem without fifo support.
-
- Disabling ssh connection caching.
-warning: LF will be replaced by CRLF in C:\joe\backup\repo-bak\.git\annex\journa
-l\uuid.log.
-The file will have its original line endings in your working directory.
-(merging origin/git-annex origin/synced/git-annex into git-annex...)
-(Recording state in git...)
-commit
-ok
-pull origin
-ok
-push origin
-Counting objects: 9, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (4/4), done.
-Writing objects: 100% (5/5), 533 bytes, done.
-Total 5 (delta 3), reused 0 (delta 0)
-To ssh://joebo@xxxx.com/~/repo.git
- 5038806..67d6383 git-annex -> synced/git-annex
-ok
-
-C:\joe\backup\repo-bak>git annex get .
-get foo.txt (from origin...)
-SHA256E-s8--f873eef4f852e335da367d76ce7f1973c15b8ffebf532b064df4bc691cd51a87.txt
-
- 8 100% 7.81kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 30 bytes received 157 bytes 124.67 bytes/sec
-total size is 8 speedup is 0.04
-ok
-get foo2.txt (from origin...)
-SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bbece05f.txt
-
- 7 100% 6.84kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 30 bytes received 156 bytes 124.00 bytes/sec
-total size is 7 speedup is 0.04
-ok
-warning: LF will be replaced by CRLF in C:\joe\backup\repo-bak\.git\annex\journa
-l\fba_8bb_SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bb
-ece05f.txt.log.
-The file will have its original line endings in your working directory.
-warning: LF will be replaced by CRLF in C:\joe\backup\repo-bak\.git\annex\journa
-l\ae4_1e9_SHA256E-s8--f873eef4f852e335da367d76ce7f1973c15b8ffebf532b064df4bc691c
-d51a87.txt.log.
-The file will have its original line endings in your working directory.
-(Recording state in git...)
-
-C:\joe\backup\repo-bak>cat *
-hello
-foo2
-
-C:\joe\backup\repo-bak>ls -lah
-total 5.0k
-drwxr-xr-x 1 jbogner Administ 0 Jun 15 08:44 .
-drwxr-xr-x 23 jbogner Administ 4.0k Jun 15 08:43 ..
-drwxr-xr-x 1 jbogner Administ 4.0k Jun 15 08:44 .git
--rw-r--r-- 1 jbogner Administ 8 Jun 15 08:44 foo.txt
--rw-r--r-- 1 jbogner Administ 7 Jun 15 08:44 foo2.txt
-
-C:\joe\backup\repo-bak>
-
-"""]]
-
-### What version of git-annex are you using? On what operating system?
-
-Windows:
-
- C:\joe\backup\repo-bak>git annex version
- git-annex version: 4.20130614-g3a93e24
- build flags: Pairing Testsuite S3 WebDAV DNS
- local repository version: 4
- default repository version: 3
- supported repository versions: 3 4
- upgrade supported from repository versions: 2
-
-
-Linux:
-
- git-annex version: 4.20130531-g5df09b5
- build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP
-
-
-### Please provide any additional information below.
-
-[[!format sh """
-# If you can, paste a complete transcript of the problem occurring here.
-# If the problem is with the git-annex assistant, paste in .git/annex/daemon.log
-
-C:\joe\backup>cd repo
-
-C:\joe\backup\repo>git annex init
-init
- Detected a crippled filesystem.
-
- Enabling direct mode.
-
- Detected a filesystem without fifo support.
-
- Disabling ssh connection caching.
-ok
-warning: LF will be replaced by CRLF in C:\joe\backup\repo\.git\annex\journal\uu
-id.log.
-The file will have its original line endings in your working directory.
-(Recording state in git...)
-
-C:\joe\backup\repo>git remote add origin ssh://joebo@xxxx.com/~/repo.git
-
-C:\joe\backup\repo>echo hello 1>foo.txt
-
-C:\joe\backup\repo>git annex add .
-add foo.txt (checksum...) ok
-(Recording state in git...)
-warning: LF will be replaced by CRLF in C:\joe\backup\repo\.git\annex\journal\ae
-4_1e9_SHA256E-s8--f873eef4f852e335da367d76ce7f1973c15b8ffebf532b064df4bc691cd51a
-87.txt.log.
-The file will have its original line endings in your working directory.
-
-C:\joe\backup\repo>git commit -m "initial commit"
-[master (root-commit) 47c05ea] initial commit
- 1 file changed, 1 insertion(+)
- create mode 120000 foo.txt
-
-C:\joe\backup\repo>git annex sync
-commit
-ok
-pull origin
-warning: no common commits
-remote: Counting objects: 5, done.
-remote: Compressing objects: 100% (3/3), done.
-remote: Total 5 (delta 1), reused 0 (delta 0)
-Unpacking objects: 100% (5/5), done.
-From ssh://xxxx.com/~/repo
- * [new branch] git-annex -> origin/git-annex
-ok
-(merging origin/git-annex into git-annex...)
-(Recording state in git...)
-push origin
-Counting objects: 18, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (12/12), done.
-Writing objects: 100% (16/16), 1.40 KiB, done.
-Total 16 (delta 3), reused 0 (delta 0)
-To ssh://joebo@xxxx.com/~/repo.git
- * [new branch] git-annex -> synced/git-annex
- * [new branch] master -> synced/master
-ok
-
-C:\joe\backup\repo>git annex copy --to origin
-copy foo.txt (checking origin...) (to origin...)
-foo.txt
- 8 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 79 bytes received 31 bytes 73.33 bytes/sec
-total size is 8 speedup is 0.07
-ok
-warning: LF will be replaced by CRLF in C:\joe\backup\repo\.git\annex\journal\ae
-4_1e9_SHA256E-s8--f873eef4f852e335da367d76ce7f1973c15b8ffebf532b064df4bc691cd51a
-87.txt.log.
-The file will have its original line endings in your working directory.
-(Recording state in git...)
-
-C:\joe\backup\repo>git annex sync
-commit
-ok
-pull origin
-ok
-push origin
-Counting objects: 9, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (4/4), done.
-Writing objects: 100% (5/5), 450 bytes, done.
-Total 5 (delta 1), reused 0 (delta 0)
-To ssh://joebo@xxxx.com/~/repo.git
- bd52e5f..02a0a4a git-annex -> synced/git-annex
-ok
-
-C:\joe\backup\repo>cd ..
-
-C:\joe\backup>rm -rf repo-bak
-
-C:\joe\backup>git init repo-bak
-Initialized empty Git repository in C:/joe/backup/repo-bak/.git/
-
-C:\joe\backup>cd repo-bak
-
-C:\joe\backup\repo-bak>git remote add origin ssh://joebo@xxxx.com/~/repo.git
-
-C:\joe\backup\repo-bak>git fetch origin
-remote: Counting objects: 25, done.
-remote: Compressing objects: 100% (19/19), done.
-remote: Total 25 (delta 6), reused 0 (delta 0)
-Unpacking objects: 100% (25/25), done.
-From ssh://xxxx.com/~/repo
- * [new branch] git-annex -> origin/git-annex
- * [new branch] synced/git-annex -> origin/synced/git-annex
- * [new branch] synced/master -> origin/synced/master
-
-C:\joe\backup\repo-bak>git merge origin/synced/master
-
-C:\joe\backup\repo-bak>git annex sync
-
- Detected a crippled filesystem.
-
- Enabling direct mode.
-
- Detected a filesystem without fifo support.
-
- Disabling ssh connection caching.
-warning: LF will be replaced by CRLF in C:\joe\backup\repo-bak\.git\annex\journa
-l\uuid.log.
-The file will have its original line endings in your working directory.
-(merging origin/git-annex origin/synced/git-annex into git-annex...)
-(Recording state in git...)
-commit
-ok
-pull origin
-ok
-push origin
-Counting objects: 9, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (4/4), done.
-Writing objects: 100% (5/5), 610 bytes, done.
-Total 5 (delta 1), reused 0 (delta 0)
-To ssh://joebo@xxxx.com/~/repo.git
- 02a0a4a..88d19ce git-annex -> synced/git-annex
-ok
-
-C:\joe\backup\repo-bak>git annex get .
-get foo.txt (from origin...)
-SHA256E-s8--f873eef4f852e335da367d76ce7f1973c15b8ffebf532b064df4bc691cd51a87.txt
-
- 8 100% 7.81kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 30 bytes received 157 bytes 124.67 bytes/sec
-total size is 8 speedup is 0.04
-ok
-warning: LF will be replaced by CRLF in C:\joe\backup\repo-bak\.git\annex\journa
-l\ae4_1e9_SHA256E-s8--f873eef4f852e335da367d76ce7f1973c15b8ffebf532b064df4bc691c
-d51a87.txt.log.
-The file will have its original line endings in your working directory.
-(Recording state in git...)
-
-C:\joe\backup\repo-bak>cat foo.txt
-hello
-
-C:\joe\backup\repo-bak>cd ..
-
-C:\joe\backup>cd repo
-
-C:\joe\backup\repo>echo foo2 1>foo2.txt
-
-C:\joe\backup\repo>git annex add .
-add foo2.txt (checksum...) ok
-(Recording state in git...)
-warning: LF will be replaced by CRLF in C:\joe\backup\repo\.git\annex\journal\fb
-a_8bb_SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bbece0
-5f.txt.log.
-The file will have its original line endings in your working directory.
-
-C:\joe\backup\repo>git commit -m "another"
-[master 76a9e44] another
- 1 file changed, 1 insertion(+)
- create mode 120000 foo2.txt
-
-C:\joe\backup\repo>git annex sync
-commit
-ok
-pull origin
-remote: Counting objects: 9, done.
-remote: Compressing objects: 100% (4/4), done.
-remote: Total 5 (delta 1), reused 0 (delta 0)
-Unpacking objects: 100% (5/5), done.
-From ssh://xxxx.com/~/repo
- 02a0a4a..88d19ce synced/git-annex -> origin/synced/git-annex
-ok
-(merging origin/synced/git-annex into git-annex...)
-(Recording state in git...)
-push origin
-Counting objects: 16, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (10/10), done.
-Writing objects: 100% (11/11), 1.11 KiB, done.
-Total 11 (delta 2), reused 0 (delta 0)
-To ssh://joebo@xxxx.com/~/repo.git
- 88d19ce..f47091a git-annex -> synced/git-annex
- 47c05ea..76a9e44 master -> synced/master
-ok
-
-C:\joe\backup\repo>git annex copy --to origin
-copy foo.txt (checking origin...) ok
-copy foo2.txt (checking origin...) (to origin...)
-foo2.txt
- 7 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 79 bytes received 31 bytes 73.33 bytes/sec
-total size is 7 speedup is 0.06
-ok
-warning: LF will be replaced by CRLF in C:\joe\backup\repo\.git\annex\journal\fb
-a_8bb_SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bbece0
-5f.txt.log.
-The file will have its original line endings in your working directory.
-(Recording state in git...)
-
-C:\joe\backup\repo>git annex sync
-commit
-ok
-pull origin
-ok
-push origin
-Counting objects: 9, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (4/4), done.
-Writing objects: 100% (5/5), 477 bytes, done.
-Total 5 (delta 1), reused 0 (delta 0)
-To ssh://joebo@xxxx.com/~/repo.git
- f47091a..98082cb git-annex -> synced/git-annex
-ok
-
-C:\joe\backup\repo>cd ..
-
-C:\joe\backup>cd repo-bak
-
-C:\joe\backup\repo-bak>git annex sync
-commit
-ok
-pull origin
-remote: Counting objects: 21, done.
-remote: Compressing objects: 100% (14/14), done.
-remote: Total 16 (delta 4), reused 0 (delta 0)
-Unpacking objects: 100% (16/16), done.
-From ssh://xxxx.com/~/repo
- 88d19ce..98082cb synced/git-annex -> origin/synced/git-annex
- 47c05ea..76a9e44 synced/master -> origin/synced/master
-ok
-(merging origin/synced/git-annex into git-annex...)
-(Recording state in git...)
-push origin
-Counting objects: 15, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (7/7), done.
-Writing objects: 100% (8/8), 843 bytes, done.
-Total 8 (delta 2), reused 0 (delta 0)
-To ssh://joebo@xxxx.com/~/repo.git
- 98082cb..2537203 git-annex -> synced/git-annex
- ! [rejected] master -> synced/master (non-fast-forward)
-error: failed to push some refs to 'ssh://joebo@xxxx.com/~/repo.git'
-hint: Updates were rejected because a pushed branch tip is behind its remote
-hint: counterpart. Check out this branch and merge the remote changes
-hint: (e.g. 'git pull') before pushing again.
-hint: See the 'Note about fast-forwards' in 'git push --help' for details.
-failed
-git-annex: sync: 1 failed
-
-C:\joe\backup\repo-bak>git annex get foo2.txt
-git-annex: foo2.txt not found
-
-C:\joe\backup\repo-bak>cat foo2.txt
-cat: foo2.txt: No such file or directory
-C:\joe\backup\repo-bak>git pull origin synced/master
-From ssh://xxxx.com/~/repo
- * branch synced/master -> FETCH_HEAD
-Updating 47c05ea..76a9e44
-Fast-forward
- foo2.txt | 1 +
- 1 file changed, 1 insertion(+)
- create mode 120000 foo2.txt
-
-C:\joe\backup\repo-bak>git annex get foo2.txt
-get foo2.txt (from origin...)
-SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bbece05f.txt
-
- 7 100% 6.84kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 30 bytes received 156 bytes 124.00 bytes/sec
-total size is 7 speedup is 0.04
-ok
-warning: LF will be replaced by CRLF in C:\joe\backup\repo-bak\.git\annex\journa
-l\fba_8bb_SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bb
-ece05f.txt.log.
-The file will have its original line endings in your working directory.
-(Recording state in git...)
-
-C:\joe\backup\repo-bak>cat foo2.txt
-.git/annex/objects/3V/kM/SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd
-78762e80a45f0bbece05f.txt/SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5cc
-d78762e80a45f0bbece05f.txt
-C:\joe\backup\repo-bak>
-
-
-
-# End of transcript or log.
-"""]]
-
-> Apparently the last of the issues discussed here is fixed.
-> Closing this bug report before it grows a new issue. ;) [[done]] --[[Joey]]
diff --git a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_10_b4f5e2d6a0d690f6b0089fa80a3c920b._comment b/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_10_b4f5e2d6a0d690f6b0089fa80a3c920b._comment
deleted file mode 100644
index 71cc02668..000000000
--- a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_10_b4f5e2d6a0d690f6b0089fa80a3c920b._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmhfodZquCI_EEl-f3h7HkROTszlsQL6yA"
- nickname="Joe"
- subject="comment 10"
- date="2013-06-19T00:44:44Z"
- content="""
-The latest build is working again. Thanks!
-"""]]
diff --git a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_1_c2092add1430667108a3fdc5e1c9b5f5._comment b/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_1_c2092add1430667108a3fdc5e1c9b5f5._comment
deleted file mode 100644
index 52bb21ae3..000000000
--- a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_1_c2092add1430667108a3fdc5e1c9b5f5._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-06-15T18:50:45Z"
- content="""
-Joe, you need to carefully read [[direct_mode]]. When you manually run `git merge` in a direct mode repository, you defeat associated file tracking, with the resulting behavior you describe. This is why there is a [[todo/direct_mode_guard]] todo item.
-"""]]
diff --git a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_2_f0ea453951daf84dbddc653ac64822b6._comment b/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_2_f0ea453951daf84dbddc653ac64822b6._comment
deleted file mode 100644
index 2c45f6b58..000000000
--- a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_2_f0ea453951daf84dbddc653ac64822b6._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmhfodZquCI_EEl-f3h7HkROTszlsQL6yA"
- nickname="Joe"
- subject="comment 2"
- date="2013-06-15T19:39:09Z"
- content="""
-joey, Thank you for the reply. I have read that and also read about the direct mode guard. I only used git merge because I was stuck and didn't know what else to do. I assume the proper way to refresh my backup repo is to git annex sync. That's what's failing with the non-fast-forward error. I don't know what to do from there. Thank you for any help.
-"""]]
diff --git a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_3_35a8be5ecc9d1b72c38f8ddb47678160._comment b/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_3_35a8be5ecc9d1b72c38f8ddb47678160._comment
deleted file mode 100644
index c723d85bb..000000000
--- a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_3_35a8be5ecc9d1b72c38f8ddb47678160._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmhfodZquCI_EEl-f3h7HkROTszlsQL6yA"
- nickname="Joe"
- subject="comment 3"
- date="2013-06-16T13:27:36Z"
- content="""
-Making some progress. It looks like it needs a .map file for the newly added file when I pull in the backup repo. I'm tracing the various places addAssociatedFile gets called. It looks like sync should do it. I think that's what sets up the map. If I copy the map file from another repo, I'm able to call get annex get foo2.txt. So the key is getting that map file created.
-"""]]
diff --git a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_4_29e72997b88f91f84639587b4cede34c._comment b/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_4_29e72997b88f91f84639587b4cede34c._comment
deleted file mode 100644
index c785ff77b..000000000
--- a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_4_29e72997b88f91f84639587b4cede34c._comment
+++ /dev/null
@@ -1,76 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmhfodZquCI_EEl-f3h7HkROTszlsQL6yA"
- nickname="Joe"
- subject="comment 4"
- date="2013-06-16T17:27:18Z"
- content="""
-I have a workaround that requires a small patch. I'm not sure why it's not creating the mapping, but I noticed that git annex fsck has a verifyDirectMapping which will create the mapping if it doesn't exist.
-
-git annex fsck will throw an error on fixLinks and won't proceed to verifyDirectMapping if the map file doesn't exist. So, I needed a way to call verifyDirectMapping directly. My hack is to add an argument to git annex fsck to call verifyDirectMapping.
-
-My workflow is this:
-
-**repo1**:
-[[!format sh \"\"\"
-echo a > new.txt
-git annex add .
-git commit -m \"add a\"
-git copy --to origin
-git annex sync
-\"\"\"]]
-
-**repo2**:
-[[!format sh \"\"\"
-git annex sync
-git annex pull origin synced/master
-git annex fsck --verifyDirectMapping
-git annex get .
-\"\"\"]]
-
-The new file comes down cleanly.
-
-I'm sure there's a better way to do this to fix the core issue, but here's how I patched Fsck.hs as a minimal workaround
-
-[[!format diff \"\"\"
-
-diff --git a/Command/Fsck.hs b/Command/Fsck.hs
-old mode 100644
-new mode 100755
-index 9af6a4a..97aabb8
---- a/Command/Fsck.hs
-+++ b/Command/Fsck.hs
-@@ -59,12 +60,16 @@ incrementalScheduleOption :: Option
- incrementalScheduleOption = Option.field [] \"incremental-schedule\" paramTime
- \"schedule incremental fscking\"
-
-+verifyDirectMappingOption :: Option
-+verifyDirectMappingOption = Option.flag [] \"verifyDirectMapping\" \"verifies direct mappings are consistent\"
-+
- options :: [Option]
- options =
- [ fromOption
- , startIncrementalOption
- , moreIncrementalOption
- , incrementalScheduleOption
-+ , verifyDirectMappingOption
- ]
-
- seek :: [CommandSeek]
-@@ -107,18 +112,23 @@ withIncremental = withValue $ do
- start :: Maybe Remote -> Incremental -> FilePath -> (Key, Backend) -> CommandStart
- start from inc file (key, backend) = do
- numcopies <- numCopies file
-- case from of
-- Nothing -> go $ perform key file backend numcopies
-- Just r -> go $ performRemote key file backend numcopies r
-+ verify <- Annex.getFlag (Option.name verifyDirectMappingOption)
-+ if verify
-+ then go $ verifyDirectMapping key file
-+ else
-+ case from of
-+ Nothing -> go $ perform key file backend numcopies
-+ Just r -> go $ performRemote key file backend numcopies r
-
-
-\"\"\"]]
-"""]]
diff --git a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_5_2de7f6532de4cbc21737ce53a89d6525._comment b/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_5_2de7f6532de4cbc21737ce53a89d6525._comment
deleted file mode 100644
index a08bd2899..000000000
--- a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_5_2de7f6532de4cbc21737ce53a89d6525._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 5"
- date="2013-06-18T00:09:58Z"
- content="""
-I have followed the transcript (on my linux system), and cannot reproduce the non-fast-forward problem.
-
-What error does fsck throw in fixLink?
-"""]]
diff --git a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_6_80d130b5af829763be77c61a9c5ca306._comment b/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_6_80d130b5af829763be77c61a9c5ca306._comment
deleted file mode 100644
index 6c05e5665..000000000
--- a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_6_80d130b5af829763be77c61a9c5ca306._comment
+++ /dev/null
@@ -1,29 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmhfodZquCI_EEl-f3h7HkROTszlsQL6yA"
- nickname="Joe"
- subject="comment 6"
- date="2013-06-18T00:25:53Z"
- content="""
-The transcript also works fine on my linux machine.
-
-This is the git annex fsck error:
-
-[[!format sh \"\"\"
-
-(fixing content location) looking for mapping\"C:\\joe\\backup\\repo-bak\\.git\\a
-nnex\\objects\\fba\\8bb\\SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd
-78762e80a45f0bbece05f.txt\\SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5c
-cd78762e80a45f0bbece05f.txt.map\"
-
-git-annex: C:\joe\backup\repo-bak\.git/annex/objects/3V/kM/SHA256E-s7--eef0e2920
-0a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bbece05f.txt/SHA256E-s7--eef0e292
-00a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bbece05f.txt: renameFile: does n
-ot exist (No such file or directory)
-failed
-git-annex: fsck: 1 failed
-
-
-\"\"\"]]
-
-As such it can't get to verifyDirectMapping to corrrect the missing mapping
-"""]]
diff --git a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_7_ec199db851952b40e8b18922da574ea4._comment b/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_7_ec199db851952b40e8b18922da574ea4._comment
deleted file mode 100644
index 9f5dc052d..000000000
--- a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_7_ec199db851952b40e8b18922da574ea4._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 7"
- date="2013-06-18T01:38:05Z"
- content="""
-There were at least 4 windows port bugs here. (Including `git annex sync` not committing on Windows, I think!) Should now have fixed them all. This includes fixing my earlier fix to make git annex sync push to master in a bare repository, which was not working on Windows.
-"""]]
diff --git a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_8_d269fcadea9d5a668e3c6d6cf019f56a._comment b/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_8_d269fcadea9d5a668e3c6d6cf019f56a._comment
deleted file mode 100644
index feda63b4a..000000000
--- a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_8_d269fcadea9d5a668e3c6d6cf019f56a._comment
+++ /dev/null
@@ -1,353 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmhfodZquCI_EEl-f3h7HkROTszlsQL6yA"
- nickname="Joe"
- subject="comment 8"
- date="2013-06-18T02:14:01Z"
- content="""
-Thanks joey - I pulled the latest and built it. I don't think everything is working, or maybe my steps need to be updated. On the positive side, git annex fsck no longer errors out. However, I still get the fast-forward message and get annex get . gives me an error about repositories not being available.
-
-This is running my test script:
-
-[[!format sh \"\"\"
-
-C:\joe\backup>ssh joebo@xxxx.com sh testrepo.sh
-Initialized empty Git repository in /home/joebo/repo.git/
-init origin ok
-(Recording state in git...)
-commit
-ok
-git-annex: no branch is checked out
-
-C:\joe\backup>rm -rf repo
-
-C:\joe\backup>git init repo
-Initialized empty Git repository in C:/joe/backup/repo/.git/
-
-C:\joe\backup>cd repo
-
-C:\joe\backup\repo>git annex init
-init
- Detected a crippled filesystem.
-
- Enabling direct mode.
-
- Detected a filesystem without fifo support.
-
- Disabling ssh connection caching.
-ok
-warning: LF will be replaced by CRLF in C:\joe\backup\repo\.git\annex\journal\uu
-id.log.
-The file will have its original line endings in your working directory.
-(Recording state in git...)
-
-C:\joe\backup\repo>git remote add origin ssh://joebo@xxxx.com/~/repo.git
-
-C:\joe\backup\repo>echo hello 1>foo.txt
-
-C:\joe\backup\repo>git annex add .
-add foo.txt (checksum...) ok
-(Recording state in git...)
-warning: LF will be replaced by CRLF in C:\joe\backup\repo\.git\annex\journal\ae
-4_1e9_SHA256E-s8--f873eef4f852e335da367d76ce7f1973c15b8ffebf532b064df4bc691cd51a
-87.txt.log.
-The file will have its original line endings in your working directory.
-
-C:\joe\backup\repo>git commit -m \"initial commit\"
-[master (root-commit) 4450966] initial commit
- 1 file changed, 1 insertion(+)
- create mode 120000 foo.txt
-
-C:\joe\backup\repo>git annex sync
-commit
-ok
-pull origin
-warning: no common commits
-remote: Counting objects: 5, done.
-remote: Compressing objects: 100% (3/3), done.
-remote: Total 5 (delta 1), reused 0 (delta 0)
-Unpacking objects: 100% (5/5), done.
-From ssh://xxxx.com/~/repo
- * [new branch] git-annex -> origin/git-annex
-ok
-(merging origin/git-annex into git-annex...)
-(Recording state in git...)
-push origin
-Counting objects: 18, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (12/12), done.
-Writing objects: 100% (16/16), 1.41 KiB, done.
-Total 16 (delta 3), reused 0 (delta 0)
-To ssh://joebo@xxxx.com/~/repo.git
- * [new branch] git-annex -> synced/git-annex
- * [new branch] master -> synced/master
-ok
-
-C:\joe\backup\repo>git annex copy --to origin
-copy foo.txt (checking origin...) (to origin...)
-foo.txt
- 8 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 79 bytes received 31 bytes 31.43 bytes/sec
-total size is 8 speedup is 0.07
-ok
-warning: LF will be replaced by CRLF in C:\joe\backup\repo\.git\annex\journal\ae
-4_1e9_SHA256E-s8--f873eef4f852e335da367d76ce7f1973c15b8ffebf532b064df4bc691cd51a
-87.txt.log.
-The file will have its original line endings in your working directory.
-(Recording state in git...)
-
-C:\joe\backup\repo>git annex sync
-commit
-ok
-pull origin
-remote: Counting objects: 6, done.
-remote: Compressing objects: 100% (4/4), done.
-remote: Total 5 (delta 0), reused 0 (delta 0)
-Unpacking objects: 100% (5/5), done.
-From ssh://xxxx.com/~/repo
- dd2afc8..fcccfa3 git-annex -> origin/git-annex
-ok
-(merging origin/git-annex into git-annex...)
-(Recording state in git...)
-push origin
-Counting objects: 21, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (9/9), done.
-Writing objects: 100% (11/11), 896 bytes, done.
-Total 11 (delta 4), reused 0 (delta 0)
-To ssh://joebo@xxxx.com/~/repo.git
- a093010..10a7c3a git-annex -> synced/git-annex
-ok
-
-C:\joe\backup\repo>git push origin master
-Everything up-to-date
-
-C:\joe\backup\repo>cd ..
-
-C:\joe\backup>rm -rf repo-bak
-
-C:\joe\backup>git init repo-bak
-Initialized empty Git repository in C:/joe/backup/repo-bak/.git/
-
-C:\joe\backup>cd repo-bak
-
-C:\joe\backup\repo-bak>git remote add origin ssh://joebo@xxxx.com/~/repo.git
-
-C:\joe\backup\repo-bak>git fetch origin
-remote: Counting objects: 36, done.
-remote: Compressing objects: 100% (28/28), done.
-remote: Total 36 (delta 11), reused 0 (delta 0)
-Unpacking objects: 100% (36/36), done.
-From ssh://xxxx.com/~/repo
- * [new branch] git-annex -> origin/git-annex
- * [new branch] master -> origin/master
- * [new branch] synced/git-annex -> origin/synced/git-annex
- * [new branch] synced/master -> origin/synced/master
-
-C:\joe\backup\repo-bak>git merge origin/synced/master
-
-C:\joe\backup\repo-bak>git annex sync
-
- Detected a crippled filesystem.
-
- Enabling direct mode.
-
- Detected a filesystem without fifo support.
-
- Disabling ssh connection caching.
-warning: LF will be replaced by CRLF in C:\joe\backup\repo-bak\.git\annex\journa
-l\uuid.log.
-The file will have its original line endings in your working directory.
-(merging origin/git-annex origin/synced/git-annex into git-annex...)
-(Recording state in git...)
-commit
-ok
-pull origin
-ok
-push origin
-Counting objects: 18, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (6/6), done.
-Writing objects: 100% (8/8), 695 bytes, done.
-Total 8 (delta 4), reused 0 (delta 0)
-To ssh://joebo@xxxx.com/~/repo.git
- 10a7c3a..dbf4a72 git-annex -> synced/git-annex
-ok
-
-C:\joe\backup\repo-bak>git annex get .
-get foo.txt (not available)
- Try making some of these repositories available:
- 608d7025-8d33-459e-875b-84de43946980
- 608d7025-8d33-459e-875b-84de43946980
- def09afe-da97-4f07-ae90-90ea116eb8c4
-failed
-git-annex: get: 1 failed
-
-C:\joe\backup\repo-bak>cat foo.txt
-.git/annex/objects/6k/Mf/SHA256E-s8--f873eef4f852e335da367d76ce7f1973c15b8ffebf5
-32b064df4bc691cd51a87.txt/SHA256E-s8--f873eef4f852e335da367d76ce7f1973c15b8ffebf
-532b064df4bc691cd51a87.txt
-C:\joe\backup\repo-bak>cd ..
-
-C:\joe\backup>cd repo
-
-C:\joe\backup\repo>echo foo2 1>foo2.txt
-
-C:\joe\backup\repo>git annex add .
-add foo2.txt (checksum...) ok
-(Recording state in git...)
-warning: LF will be replaced by CRLF in C:\joe\backup\repo\.git\annex\journal\fb
-a_8bb_SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bbece0
-5f.txt.log.
-The file will have its original line endings in your working directory.
-
-C:\joe\backup\repo>git commit -m \"another\"
-[master 438409c] another
- 1 file changed, 1 insertion(+)
- create mode 120000 foo2.txt
-
-C:\joe\backup\repo>git annex sync
-commit
-ok
-pull origin
-remote: Counting objects: 18, done.
-remote: Compressing objects: 100% (6/6), done.
-remote: Total 8 (delta 4), reused 0 (delta 0)
-Unpacking objects: 100% (8/8), done.
-From ssh://xxxx.com/~/repo
- 10a7c3a..dbf4a72 synced/git-annex -> origin/synced/git-annex
-ok
-(merging origin/synced/git-annex into git-annex...)
-(Recording state in git...)
-push origin
-Counting objects: 25, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (12/12), done.
-Writing objects: 100% (14/14), 1.32 KiB, done.
-Total 14 (delta 3), reused 0 (delta 0)
-To ssh://joebo@xxxx.com/~/repo.git
- dbf4a72..79c01f2 git-annex -> synced/git-annex
- 4450966..438409c master -> synced/master
-ok
-
-C:\joe\backup\repo>git annex copy --to origin
-copy foo.txt (checking origin...) ok
-copy foo2.txt (checking origin...) (to origin...)
-foo2.txt
- 7 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
-
-sent 79 bytes received 31 bytes 220.00 bytes/sec
-total size is 7 speedup is 0.06
-ok
-warning: LF will be replaced by CRLF in C:\joe\backup\repo\.git\annex\journal\fb
-a_8bb_SHA256E-s7--eef0e29200a3194851e5fb4ff77d0d0aec5cd3f5ccd78762e80a45f0bbece0
-5f.txt.log.
-The file will have its original line endings in your working directory.
-(Recording state in git...)
-
-C:\joe\backup\repo>git annex sync
-commit
-ok
-pull origin
-remote: Counting objects: 6, done.
-remote: Compressing objects: 100% (4/4), done.
-remote: Total 5 (delta 0), reused 0 (delta 0)
-Unpacking objects: 100% (5/5), done.
-From ssh://xxxx.com/~/repo
- fcccfa3..eb065b0 git-annex -> origin/git-annex
-ok
-(merging origin/git-annex into git-annex...)
-(Recording state in git...)
-push origin
-Counting objects: 33, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (13/13), done.
-Writing objects: 100% (17/17), 1.27 KiB, done.
-Total 17 (delta 8), reused 0 (delta 0)
-To ssh://joebo@xxxx.com/~/repo.git
- 79c01f2..7ecf368 git-annex -> synced/git-annex
-ok
-
-C:\joe\backup\repo>cd ..
-
-C:\joe\backup>cd repo-bak
-
-C:\joe\backup\repo-bak>git annex sync
-commit
-ok
-pull origin
-remote: Counting objects: 52, done.
-remote: Compressing objects: 100% (29/29), done.
-remote: Total 36 (delta 13), reused 0 (delta 0)
-Unpacking objects: 100% (36/36), done.
-From ssh://xxxx.com/~/repo
- fcccfa3..eb065b0 git-annex -> origin/git-annex
- 4450966..438409c master -> origin/master
- dbf4a72..7ecf368 synced/git-annex -> origin/synced/git-annex
- 4450966..438409c synced/master -> origin/synced/master
-ok
-(merging origin/git-annex origin/synced/git-annex into git-annex...)
-(Recording state in git...)
-push origin
-Counting objects: 30, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (7/7), done.
-Writing objects: 100% (9/9), 732 bytes, done.
-Total 9 (delta 5), reused 0 (delta 0)
-To ssh://joebo@xxxx.com/~/repo.git
- 7ecf368..7895f60 git-annex -> synced/git-annex
- ! [rejected] master -> synced/master (non-fast-forward)
-error: failed to push some refs to 'ssh://joebo@xxxx.com/~/repo.git'
-hint: Updates were rejected because a pushed branch tip is behind its remote
-hint: counterpart. Check out this branch and merge the remote changes
-hint: (e.g. 'git pull') before pushing again.
-hint: See the 'Note about fast-forwards' in 'git push --help' for details.
-failed
-git-annex: sync: 1 failed
-
-C:\joe\backup\repo-bak>git pull origin synced/master
-From ssh://xxxx.com/~/repo
- * branch synced/master -> FETCH_HEAD
-Updating 4450966..438409c
-Fast-forward
- foo2.txt | 1 +
- 1 file changed, 1 insertion(+)
- create mode 120000 foo2.txt
-
-C:\joe\backup\repo-bak>git annex sync
-commit
-ok
-pull origin
-ok
-push origin
-Everything up-to-date
-ok
-
-C:\joe\backup\repo-bak>cat foo.txt
-.git/annex/objects/6k/Mf/SHA256E-s8--f873eef4f852e335da367d76ce7f1973c15b8ffebf5
-32b064df4bc691cd51a87.txt/SHA256E-s8--f873eef4f852e335da367d76ce7f1973c15b8ffebf
-532b064df4bc691cd51a87.txt
-C:\joe\backup\repo-bak>git annex get foo.txt
-get foo.txt (not available)
- Try making some of these repositories available:
- 608d7025-8d33-459e-875b-84de43946980
- 608d7025-8d33-459e-875b-84de43946980
- 608d7025-8d33-459e-875b-84de43946980
- 608d7025-8d33-459e-875b-84de43946980
- def09afe-da97-4f07-ae90-90ea116eb8c4
- def09afe-da97-4f07-ae90-90ea116eb8c4
-failed
-git-annex: get: 1 failed
-
-C:\joe\backup\repo-bak>
-C:\joe\backup\repo-bak>git annex fsck foo.txt
-fsck foo.txt ok
-
-C:\joe\backup\repo-bak>
-
-\"\"\"]]
-
-Perhaps I need to change my transcript to reflect the new fixes?
-
-Reverting back to my patched version, I can run the script and run git annex fsck --verifyDirectMapping and get the file cleanly. Do I need to update the server version? (I assume not)
-"""]]
diff --git a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_9_908d1b981d56107f29d8972bf11aefc8._comment b/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_9_908d1b981d56107f29d8972bf11aefc8._comment
deleted file mode 100644
index 0f9eaeb6f..000000000
--- a/doc/bugs/windows_port_-_repo_can__39__t_pull_newly_added_files_/comment_9_908d1b981d56107f29d8972bf11aefc8._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmhfodZquCI_EEl-f3h7HkROTszlsQL6yA"
- nickname="Joe"
- subject="comment 9"
- date="2013-06-18T09:58:41Z"
- content="""
-The regression appears to behere: $ git diff d80a0f62a4aa5a2a3566f29dd6bda619b1a7eabd..64f8819ae47cc27b164eb69aa846dfb0f7cc6ef3 Process.hs
-
-I rewound each commit until I no longer had the regression. This commit was clean: d80a0f62a4aa5a2a3566f29dd6bda619b1a7eabd. Something with the changes to Process.hs is causing my error.
-
-I validated by building using git checkout d80a0f62a4aa5a2a3566f29dd6bda619b1a7eabd Process.hs and the error went away.
-"""]]
diff --git a/doc/bugs/wrong_program_path_in___126____47__.config__47__git-annex__47__program.mdwn b/doc/bugs/wrong_program_path_in___126____47__.config__47__git-annex__47__program.mdwn
deleted file mode 100644
index d145fa6e6..000000000
--- a/doc/bugs/wrong_program_path_in___126____47__.config__47__git-annex__47__program.mdwn
+++ /dev/null
@@ -1,20 +0,0 @@
-## What steps will reproduce the problem?
-
-install the latest linux snapshot of git-annex (https://downloads.kitenet.net/git-annex/linux/3.20121127/git-annex-standalone-amd64.tar.gz)
-
-## What is the expected output? What do you see instead?
-
-I would expect `~/.config/git-annex/program` to contain `/home/thedward/tmp/git-annex.linux/runshell`
-
-Instead it contains `/home/thedward/tmp/git-annex.linuxrunshell`, which causes a problem next time I start the webapp (unless I manually fix it first).
-
-## What version of git-annex are you using? On what operating system?
-
-git-annex=3.20121127 on Ubuntu 12.04 LTS
-
-
-## Please provide any additional information below.
-
-Otherwise it is working great.
-
-> I've fixed this. [[done]] --[[Joey]]
diff --git a/doc/bugs/wrong_program_path_in___126____47__.config__47__git-annex__47__program/comment_1_44c11918d00ead38d40556aade98c0af._comment b/doc/bugs/wrong_program_path_in___126____47__.config__47__git-annex__47__program/comment_1_44c11918d00ead38d40556aade98c0af._comment
deleted file mode 100644
index 297eea157..000000000
--- a/doc/bugs/wrong_program_path_in___126____47__.config__47__git-annex__47__program/comment_1_44c11918d00ead38d40556aade98c0af._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkvSZ1AFJdY_1FeutZr_KWeqtzjZta1PNE"
- nickname="Thedward"
- subject="comment 1"
- date="2012-11-28T22:14:12Z"
- content="""
-Sweet!
-
-That's the fastest I've ever had a bug I reported closed.
-
-Thanks for all your hard work on this. :-)
-"""]]
diff --git a/doc/bugs/xdg-user-dir_error.mdwn b/doc/bugs/xdg-user-dir_error.mdwn
deleted file mode 100644
index 5a8ed52d7..000000000
--- a/doc/bugs/xdg-user-dir_error.mdwn
+++ /dev/null
@@ -1,8 +0,0 @@
-Run *git annex webapp* in Debian Sid with KDE.
-
-It opens the web browser with this error: **Internal Server Error** *xdg-user-dir ["DESKTOP"] exited 127*.
-
-I've tried to changing the xdg-user-dir config with no success.
-
-> This is fixed in my master branch. Workaround: Install the xdg-user-dirs
-> package. [[done]] --[[Joey]]
diff --git a/doc/bugs/xmpp_needs_one_account_per_distinct_repository.mdwn b/doc/bugs/xmpp_needs_one_account_per_distinct_repository.mdwn
deleted file mode 100644
index c917cc3d2..000000000
--- a/doc/bugs/xmpp_needs_one_account_per_distinct_repository.mdwn
+++ /dev/null
@@ -1,107 +0,0 @@
-The way [[XMPP pairing|design/assistant/XMPP]] currently works, each
-separate repository needs to use a different XMPP account. If two
-repositories use the same XMPP account, then they will be combined together
-when XMPP pairing takes place.
-
-There are two different UIs for XMPP pairing. While the same protocol
-is running behind the scenes, these UIs should be considered separately.
-
-## Share with your other devices
-
-Here, I think it makes sense to require the user to use the same XMPP
-account on all their devices (otherwise it's pairing with a friend), and
-automatically combine repositories of devices that use the same XMPP
-account.
-
-The UI is pretty clear about this:
-
- If you have multiple devices, all running git-annex, and using #
- your Jabber account #{account}, you can configure them to share #
- your files between themselves.
-
-Doing it this way avoids needing to confirm pair requests coming from the same
-XMPP account. Which means that, for example, you can have a device at home,
-and one at work, and pair them by simply initiating a pair request from one
-to the other. You don't have to travel between home and work to confirm
-the request.
-
-(Also, when you have a lot of devices, this avoids a combinatorial explosion
-of pair request confirmations.)
-
-The only problem with this is that users who want multiple repositories
-need to find multiple XMPP accounts. However, I'm inclined to think this is
-a reasonable requirement.
-
-## Share with a friend
-
-Suppose that Alice wants to share with Bob. Bob is using the same XMPP
-account for two separate repositories (B1 and B2), that are not
-themselves paired.
-
-When Alice chooses to share with Bob, a XMPP pair request is sent.
-Both of Bob's repositories see it, and both ask him to confirm.
-Bob can choose to only confirm the request in B1, and
-not in B2. This should work ok.
-
-* The UI for this only says "Pair request received from #{name}",
- it does not indicate which repository of Alice's is being paired
- with. This could be improved. If Alice has two repositories as well,
- she and Bob will want to coordinate pairing the right ones together.
- Could be fixed by just displaying the description of Alice's repository
- to Bob.
-
------
-
-Now, suppose that Alice makes a second, distinct repository (A2),
-and chooses to share it with Bob (intending to share with B2). This
-sends an XMPP pair request to both of Bob's repositories.
-
-B1 has already paired with Alice, so it assumes this
-new pair request is from a different device belonging to Alice, and it
-automatically ACKs the pair request.
-
-The result is that Alice's new A2 repository combines with B1,
-which is already combined with A1. Effectively combining all of A1, A2, B1,
-and B2, unexpectedly. **This is a bug**.
-
-Some possible fixes:
-
-1. Stop auto-accepting pair requests
- from friends we're already paired with. Require another confirmation.
-2. Or, only auto-accept pair requests from friends we're already paired with
- when they come from a repository whose UUID we already know. This
- enhancment to fix #1 makes it easier to build more robust networks of
- repositories. **done**
-
-Hmm, I don't think those fixes are sufficient. Suppose they're in place.
-Then when Alice shares A2 with Bob, both his repositories will ask him to
-confirm the pair request. He confirms in B2, and pairing proceeds.
-
-But, XMPP git push is broadcast to all clients of an XMPP account.
-So when B2 sends a push, A1 sees it, and happily merges away. The
-repositories still combine!
-
-So, we need another fix:
-
-* Send UUID in XMPP git push protocol messages. Only respond to git push
- messages from a known UUID, and ignore all others. (XMPP pairing
- already sends the UUID, so it will be known.) **done**
-
-----
-
-* Alternatively, we could say that the problem is that Bob has two
- distinct repositories using the same XMPP account, and try to prevent
- him from doing that in the first place.
-
- One way to do this would be, when configuring the
- XMPP account, scan for other repositories using the same account, and
- don't let it be used unless the user confirms they want to pair them.
- But, this doesn't seem viable because if the other repository is on
- another device, which is turned off, this check wouldn't see it.
-
- Or there could be a warning about account reuse. Doesn't seem likely to
- be effective.
-
------
-
-> [[done]]. I've put in the fixes around pairing with friends. --[[Joey]]
diff --git a/doc/bugs/xmpp_needs_one_account_per_distinct_repository/comment_1_820732c4dcb15186b4f635c50fdb0805._comment b/doc/bugs/xmpp_needs_one_account_per_distinct_repository/comment_1_820732c4dcb15186b4f635c50fdb0805._comment
deleted file mode 100644
index eec708362..000000000
--- a/doc/bugs/xmpp_needs_one_account_per_distinct_repository/comment_1_820732c4dcb15186b4f635c50fdb0805._comment
+++ /dev/null
@@ -1,19 +0,0 @@
-[[!comment format=mdwn
- username="fmarier"
- ip="121.98.93.240"
- subject="My current XMPP setup"
- date="2013-04-28T22:16:50Z"
- content="""
-Here's the way I currently use XMPP (Google Talk) on my devices:
-
-* I have a separate XMPP/Google account on each device (device1@gmail.com, device2@gmail.com, etc.). I keep them separate to protect the credentials of the other devices in case I lose one of the devices.
-* I setup git-annex to sync with a \"friend\" and have device1@gmail.com and device2@gmail.com sync with each other.
-
-I have three different repositories I'd like to manage with git-annex assistant:
-
- * R1: things I want everywhere
- * R2: things I only want on personal laptop and desktop
- * R3: things I only want on personal and work laptops
-
-So it would be great if there was a way to easily keep things separate.
-"""]]
diff --git a/doc/bugs/yesod-default_is_needed_as_a_dependancy.mdwn b/doc/bugs/yesod-default_is_needed_as_a_dependancy.mdwn
deleted file mode 100644
index 28727f97f..000000000
--- a/doc/bugs/yesod-default_is_needed_as_a_dependancy.mdwn
+++ /dev/null
@@ -1,10 +0,0 @@
-Seems like there is a needed dependancy, yesod-default is needed on OSX.
-
-<pre>
-Utility/Yesod.hs:10:8:
- Could not find module `Yesod.Default.Util'
- Use -v to see a list of the files searched for.
-make: *** [git-annex] Error 1
-</pre>
-
-> Only on OSX apparently. Weird. Added. [[done]] --[[Joey]]
diff --git a/doc/bugs/yesod-form_missing.mdwn b/doc/bugs/yesod-form_missing.mdwn
deleted file mode 100644
index ad92bd040..000000000
--- a/doc/bugs/yesod-form_missing.mdwn
+++ /dev/null
@@ -1,23 +0,0 @@
-What steps will reproduce the problem?
-
-build using cabal from a git checkout
-
-What is the expected output? What do you see instead?
-
-successful build; error message is:
-
-Assistant/WebApp/Form.hs:15:8:
- Could not find module `Yesod.Form.Fields'
- It is a member of the hidden package `yesod-form-1.2.0'.
- Perhaps you need to add `yesod-form' to the build-depends in your .cabal file.
-
-
-What version of git-annex are you using? On what operating system?
-
-git checkout commit 90b62db1defdd223294935ec0bbaac883cd20c04 on OS X Lion
-
-Please provide any additional information below.
-
-adding yesod-form to the build depends in git-annex.cabal does indeed fix the problem!
-
-> [[done]] --[[Joey]]
diff --git a/doc/bugs/youtube_web_download_gives_Prelude.undefined_in_webapp.mdwn b/doc/bugs/youtube_web_download_gives_Prelude.undefined_in_webapp.mdwn
new file mode 100644
index 000000000..2b4a62538
--- /dev/null
+++ b/doc/bugs/youtube_web_download_gives_Prelude.undefined_in_webapp.mdwn
@@ -0,0 +1,27 @@
+### Please describe the problem.
+
+I'm downloading a video with 'git annex addurl' from youtube. The webapp shows the transfer, but when I click the 'web' link it takes me to a page that says "internal server error" and "Prelude.undefined"
+
+### What steps will reproduce the problem?
+
+1. start webapp
+2. download youtube video
+3. click 'web' link on transfer in git-annex
+
+### What version of git-annex are you using? On what operating system?
+
+* Version: 5.20140717
+* OS: Debian sid
+
+### Please provide any additional information below.
+
+Not much in the logs, I see this:
+
+[[!format sh """
+
+[2014-07-25 08:40:14 BST] TransferWatcher: transfer starting: Download UUID "00000000-0000-0000-0000-000000000001" URL--quvi:https://www.youtube.com/watch,63v,61Z8_8jNLsZms Nothing
+[2014-07-25 08:40:14 BST] TransferWatcher: transfer starting: Download UUID "00000000-0000-0000-0000-000000000001" Chase_Adam_at_Startup_School_NY_2014.mp4 Nothing
+
+"""]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/builds.mdwn b/doc/builds.mdwn
index 1ff0fbd13..3d83c90d5 100644
--- a/doc/builds.mdwn
+++ b/doc/builds.mdwn
@@ -1,5 +1,30 @@
[[!meta title="git-annex autobuild overview"]]
+[[!sidebar content="""
+# last uploaded build-versions
+
+<h2>Linux i386</h2>
+<iframe width=1024 height=20em scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/i386/build-version">
+</iframe>
+<h2>Linux amd64</h2>
+<iframe width=1024 height=20em scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/amd64/build-version">
+</iframe>
+<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>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>
+<h2>Windows</h2>
+<iframe width=1024 height=20em scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/windows/build-version">
+</iframe>
+"""]]
+
+# build logs
+
<h2>Linux i386</h2>
<iframe width=1024 scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/i386/">
</iframe>
@@ -12,9 +37,11 @@
<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 Mavericks</h2>
-<iframe width=1024 scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/x86_64-apple-mavericks/">
+<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>
-<h2>Windows</h2>
-<iframe width=1024 height=1024 scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://qa.nest-initiative.org/view/msysGit/job/msysgit-git-annex-assistant-test/">
+<h2><a href="https://qa.nest-initiative.org/view/msysGit/job/msysgit-git-annex-assistant-test/">Windows</a></h2>
+<a href="https://qa.nest-initiative.org/view/msysGit/job/msysgit-git-annex-assistant-test/">here</a>
+<h2><a href="https://buildd.debian.org/status/package.php?p=git-annex&suite=sid">Debian</a></h2>
+<iframe width=1024 scrolling=no height=500px frameborder=0 marginheight=0 marginwidth=0 src="https://buildd.debian.org/status/package.php?p=git-annex&suite=sid">
</iframe>
diff --git a/doc/chunking.mdwn b/doc/chunking.mdwn
new file mode 100644
index 000000000..20a5c6088
--- /dev/null
+++ b/doc/chunking.mdwn
@@ -0,0 +1,43 @@
+Most [[special_remotes]] have support for breaking large files up into
+chunks that are stored on the remote.
+
+This can be useful to work around limitations on the size of files
+on the remote.
+
+Chunking also allows for resuming interrupted downloads and uploads.
+
+Note that git-annex has to buffer chunks in memory before they are sent to
+a remote. So, using a large chunk size will make it use more memory.
+
+To enable chunking, pass a `chunk=nnMiB` parameter to `git annex
+initremote`, specifying the chunk size.
+
+Good chunk sizes will depend on the remote, but a good starting place
+is probably `1MiB`. Very large chunks are problimatic, both because
+git-annex needs to buffer one chunk in memory when uploading, and because
+a larger chunk will make resuming interrupted transfers less efficient.
+On the other hand, when a file is split into a great many chunks,
+there can be increased overhead of making many requests to the remote.
+
+To disable chunking of a remote that was using chunking,
+pass `chunk=0` to `git annex enableremote`. Any content already stored on
+the remote using chunks will continue to be accessed via chunks, this
+just prevents using chunks when storing new content.
+
+To change the chunk size, pass a `chunk=nnMiB` parameter to
+`git annex enableremote`. This only affects the chunk sized used when
+storing new content.
+
+# old-style chunking
+
+Note that older versions of git-annex used a different chunk method, which
+was configured by passing `chunksize=nnMib` when initializing a remote.
+
+The old-style chunking had a number of problems, including being less
+efficient, and not allowing resumes of encrypted uploads.
+
+It's not possible to change a remote using that old chunking method to the
+new one, but git-annex continues to support the old-style chunking to
+support such remotes.
+
+See also: [[design document|design/assistant/chunks]]
diff --git a/doc/coding_style.mdwn b/doc/coding_style.mdwn
index 101ac4f58..6968c9958 100644
--- a/doc/coding_style.mdwn
+++ b/doc/coding_style.mdwn
@@ -72,6 +72,14 @@ that line up with the open and close punctuation.
, address = "baz"
}
+Similarly, data structures line up the leading `=` with the following `|`
+
+ data Foo
+ = Bar
+ | Baz
+ | Quux Foo
+ deriving (Eq, Ord)
+
Module imports are separated into two blocks, one for third-party modules,
and one for modules that are part of git-annex. (Additional blocks can be used
if it makes sense.)
diff --git a/doc/coding_style/comment_1_70521cf79ad06832b1d73fc2c20c68ec._comment b/doc/coding_style/comment_1_70521cf79ad06832b1d73fc2c20c68ec._comment
new file mode 100644
index 000000000..a8200f856
--- /dev/null
+++ b/doc/coding_style/comment_1_70521cf79ad06832b1d73fc2c20c68ec._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnq-RfkVpFN15SWvQ2lpSGAi0XpNQuLxKM"
+ nickname="Yuval"
+ subject="What about safe?"
+ date="2014-07-06T10:45:59Z"
+ content="""
+https://hackage.haskell.org/package/safe
+
+> A library wrapping Prelude/Data.List functions that can throw exceptions, such as head and !!. Each unsafe function has up to four variants, e.g. with tail:
+>
+> tail :: [a] -> [a], raises an error on tail [].
+
+> tailMay :: [a] -> Maybe [a], turns errors into Nothing.
+
+> tailDef :: [a] -> [a] -> [a], takes a default to return on errors.
+
+> tailNote :: String -> [a] -> [a], takes an extra argument which supplements the error message.
+
+> tailSafe :: [a] -> [a], returns some sensible default if possible, [] in the case of tail.
+"""]]
diff --git a/doc/coding_style/comment_2_a820b7c8ae7c2290eb000f61bdb5c514._comment b/doc/coding_style/comment_2_a820b7c8ae7c2290eb000f61bdb5c514._comment
new file mode 100644
index 000000000..9f9d96196
--- /dev/null
+++ b/doc/coding_style/comment_2_a820b7c8ae7c2290eb000f61bdb5c514._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 2"
+ date="2014-07-10T20:24:03Z"
+ content="""
+safe does not prevent using the unsafe prelude functions. Utility.PartialPrelude does, and provides a few safe wrappers like lastMaybe.
+"""]]
diff --git a/doc/contact.mdwn b/doc/contact.mdwn
index b2ccf8201..db9914d50 100644
--- a/doc/contact.mdwn
+++ b/doc/contact.mdwn
@@ -1,4 +1,4 @@
-Joey Hess <joey@kitenet.net> is the author of git-annex. If you need to
+Joey Hess <id@joeyh.name> is the author of git-annex. If you need to
talk about something privately, email me.
The [[forum]] is the best place to discuss git-annex.
diff --git a/doc/contribute.mdwn b/doc/contribute.mdwn
new file mode 100644
index 000000000..bc087348d
--- /dev/null
+++ b/doc/contribute.mdwn
@@ -0,0 +1,39 @@
+Help make git-annex better!
+
+## wiki gardening
+
+This website is a wiki, so you can edit and improve any page.
+
+Or, write a [[new_tip|tips]] explaining how to accomplish something with
+git-annex.
+
+## bug triage
+
+People often file [[bugs]] on git-annex that are easily resolved by helping
+them with a problem, and perhaps writing some documentation.
+
+Many bugs are also filed without enough information
+to reproduce the problem, and need to be tagged moreinfo and a comment
+posted asking the submitter for details.
+
+Joey spends a lot of time dealing with this kind of bug triage. If you can
+take the time to pick a bug that is not marked as "confirmed" or "moreinfo"
+from the list of [[bugs]], try to reproduce it and follow up either
+confirming that the problem exists, or asking the submitter for more info,
+you'll make Joey more productive!
+
+## code contributions
+
+[[download]] the source code, [[build|install/fromsource]] it
+and send patches!
+
+If you know Haskell, git-annex has lots of Haskell code that
+could be improved. See the [[coding_style]] and have at it.
+
+If you don't know Haskell, git-annex has many other coding opportunities.
+You could work to improve the Android port (Java etc) or improve the
+Javascript and CSS of the git-annex webapp, or work on porting libraries
+needed by the Windows port.
+
+To send patches, either include the patch in a bug report (small patch)
+or put up a branch in a git repository containing your changes.
diff --git a/doc/copies.mdwn b/doc/copies.mdwn
index 205d2d5b1..3e0ebc6c6 100644
--- a/doc/copies.mdwn
+++ b/doc/copies.mdwn
@@ -30,3 +30,6 @@ refuse to do so.
With N=2, in order to drop the file content from Laptop, it would need access
to both USB and Server.
+
+For more complicated requirements about which repositories contain which
+content, see [[required_content]].
diff --git a/doc/design/assistant.mdwn b/doc/design/assistant.mdwn
index daf6fce0b..052c53678 100644
--- a/doc/design/assistant.mdwn
+++ b/doc/design/assistant.mdwn
@@ -3,7 +3,7 @@ These are the design pages for the git-annex [[/assistant]].
Parts of the design is still being fleshed out, still many ideas
and use cases to add. Feel free to chip in with comments! --[[Joey]]
-See [[roadmap]] for current plans.
+See [[roadmap]] for current plans, as this list was mostly completed.
## initial development kickstarter year overview (2012-2013)
diff --git a/doc/design/assistant/blog/day_12__freebsd_redux/comment_3_5ab7808595e3b51ca4141d15fdd44743._comment b/doc/design/assistant/blog/day_12__freebsd_redux/comment_3_5ab7808595e3b51ca4141d15fdd44743._comment
new file mode 100644
index 000000000..6bcba4d3e
--- /dev/null
+++ b/doc/design/assistant/blog/day_12__freebsd_redux/comment_3_5ab7808595e3b51ca4141d15fdd44743._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="chris"
+ subject="Thanks"
+ date="2014-12-25T11:58:55Z"
+ content="""
+Thanks
+"""]]
diff --git a/doc/design/assistant/blog/day_232__headless_webapp/comment_5_7e51a197ff9970ae50cf47bd3a922257._comment b/doc/design/assistant/blog/day_232__headless_webapp/comment_5_7e51a197ff9970ae50cf47bd3a922257._comment
new file mode 100644
index 000000000..de4be2556
--- /dev/null
+++ b/doc/design/assistant/blog/day_232__headless_webapp/comment_5_7e51a197ff9970ae50cf47bd3a922257._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.22"
+ subject="comment 5"
+ date="2014-09-16T18:36:18Z"
+ content="""
+Note that --listen=address:port had to be removed.
+
+OTOH, the webapp can be run with a https certificate now, which makes remote access much more secure.
+
+The webapp will use HTTPS if it finds
+a .git/annex/privkey.pem and .git/annex/certificate.pem. Here's
+one way to generate those files, using a self-signed certificate:
+
+ openssl genrsa -out .git/annex/privkey.pem 4096
+ openssl req -new -x509 -key .git/annex/privkey.pem > .git/annex/certificate.pem
+
+"""]]
diff --git a/doc/design/assistant/chunks.mdwn b/doc/design/assistant/chunks.mdwn
index 6a92731ee..0aa389899 100644
--- a/doc/design/assistant/chunks.mdwn
+++ b/doc/design/assistant/chunks.mdwn
@@ -5,3 +5,267 @@ May be a useful starting point for [[deltas]].
May also allow for downloading different chunks of a file concurrently from
multiple remotes.
+
+Also, can allow resuming of interrupted uploads and downloads.
+
+# legacy chunking
+
+Supported by only the webdav and directory special remotes.
+
+Filenames are used for the chunks that make it easy to see which chunks
+belong together, even when encryption is used. There is also a chunkcount
+file, that similarly leaks information.
+
+It is not possible to enable chunking on a non-chunked remote.
+
+Problem: Two uploads of the same key from repos with different chunk sizes
+could lead to data loss. For example, suppose A is 10 mb chunksize, and B
+is 20 mb, and the upload speed is the same. If B starts first, when A will
+overwrite the file it is uploading for the 1st chunk. Then A uploads the
+second chunk, and once A is done, B finishes the 1st chunk and uploads its
+second. We now have [chunk 1(from A), chunk 2(from B)].
+
+# new requirements
+
+Every special remote should support chunking. (It does not make sense
+to support it for git remotes, but gcrypt remotes should support it.)
+
+S3 remotes should chunk by default, because the current S3 backend fails
+for files past a certian size. See [[bugs/Truncated_file_transferred_via_S3]].
+
+The size of chunks, as well as whether any chunking is done, should be
+configurable on the fly without invalidating data already stored in the
+remote. This seems important for usability (eg, so users can turn chunking
+on in the webapp when configuring an existing remote).
+
+Two concurrent uploaders of the same object to a remote should be safe,
+even if they're using different chunk sizes.
+
+The legacy chunk method needs to be supported for back-compat, so
+keep the chunksize= setting to enable that mode, and add a new chunk=
+setting for the new mode.
+
+# obscuring file sizes
+
+To hide from a remote any information about the sizes of files could be
+another goal of chunking. At least two things are needed for this:
+
+1. The filenames used on the remote don't indicate which chunks belong
+ together.
+
+2. The final short chunk needs to be padded with random data,
+ so that a remote sees only encrypted files with uniform sizes
+ and cannot make guesses about the kinds of data being stored.
+
+Note that padding cannot completely hide all information from an attacker
+who is logging puts or gets. An attacker could, for example, look at the
+times of puts, and guess at when git-annex has moved on to
+encrypting/decrypting the next object, and so guess at the approximate
+sizes of objects. (Concurrent uploads/downloads or random delays could be
+added to prevent these kinds of attacks.)
+
+And, obviously, if someone stores 10 tb of data in a remote, they probably
+have around 10 tb of files, so it's probably not a collection of recipes..
+
+Given its inneficiencies and lack of fully obscuring file sizes,
+padding may not be worth adding, but is considered in the designs below.
+
+# design 1
+
+Add an optional chunk field to Key. It is only present for chunk
+2 and above. Ie, SHA256-s12345--xxxxxxx is the first chunk (or whole
+object), while SHA256-s12345-c2--xxxxxxx is the second chunk.
+
+On an encrypted remote, Keys are generated with the chunk field, and then
+HMAC enrypted.
+
+Note that only using it for chunks 2+ means that git-annex can start by
+requesting the regular key, so an observer sees the same request whether
+chunked or not, and does not see eg, a pattern of failed requests for
+a non-chunked key, followed by successful requests for the chunked keys.
+(Both more efficient and perhaps more secure.)
+
+Problem: This makes putting chunks easy. But there is a problem when getting
+an object that has been chunked. If the key size is not known, we
+cannot tell when we've gotten the last chunk. (Also, we cannot strip
+padding.) Note that `addurl` sometimes generates keys w/o size info
+(particularly, it does so by design when using quvi).
+
+Problem: Also, this makes `checkPresent` hard to implement: How can it know if
+all the chunks are present, if the key size is not known?
+
+Problem: Also, this makes it difficult to download encrypted keys, because
+we only know the decrypted size, not the encrypted size, so we can't
+be sure how many chunks to get, and all chunks need to be downloaded before
+we can decrypt any of them. (Assuming we encrypt first; chunking first
+avoids this problem.)
+
+Problem: Does not solve concurrent uploads with different chunk sizes.
+
+# design 2
+
+When chunking is enabled, always put a chunk number in the Key,
+along with the chunk size.
+So, SHA256-1048576-c1--xxxxxxx for the first chunk of 1 megabyte.
+
+Before any chunks are stored, write a chunkcount file, eg
+SHA256-s12345-c0--xxxxxxx. Note that this key is the same as the original
+object's key, except with chunk number set to 0. This file contains both
+the number of chunks, and also the chunk size used. `checkPresent` downloads this
+file, and then verifies that each chunk is present, looking for keys with
+the expected chunk numbers and chunk size.
+
+This avoids problems with multiple writers using different chunk sizes,
+since they will be uploading to different files.
+
+Problem: In such a situation, some duplicate data might be stored, not
+referenced by the last chunkcount file to be written. It would not be
+dropped when the key was removed from the remote.
+
+Note: This design lets an attacker with logs tell the (appoximate) size of
+objects, by finding the small files that contain a chunk count, and
+correlating when that is written/read and when other files are
+written/read. That could be solved by padding the chunkcount key up to the
+size of the rest of the keys, but that's very innefficient; `checkPresent` is not
+designed to need to download large files.
+
+# design 3
+
+Like design 1, but add an encrypted chunk count prefix to the first object.
+This needs to be done in a way that does not let an attacker tell if the
+object has an encrypted chunk count prefix or not.
+
+This seems difficult; attacker could probably tell where the first encrypted
+part stops and the next encrypted part starts by looking for gpg headers,
+and so tell which files are the first chunks.
+
+Also, `checkPresent` would need to download some or all of the first file.
+If all, that's a lot more expensive. If only some is downloaded, an
+attacker can guess that the file that was partially downloaded is the
+first chunk in a series, and wait for a time when it's fully downloaded to
+determine which are the other chunks.
+
+Problem: Two uploads of the same key from repos with different chunk sizes
+could lead to data loss. (Same as in design 2.)
+
+# design 4
+
+Use key SHA256-s12345-S1048576-C1--xxxxxxx for the first chunk of 1 megabyte.
+
+Note that keeping the 's'ize field unchanged is necessary because it
+disambiguates eg, WORM keys. So a 'S'ize field is used to hold the chunk
+size.
+
+Instead of storing the chunk count in the special remote, store it in
+the git-annex branch.
+
+The location log does not record locations of individual chunk keys
+(too space-inneficient). Instead, look at a chunk log in the
+git-annex branch to get the chunk count and size for a key.
+
+`checkPresent` would check if any of the logged sets of chunks is
+present on the remote. It would also check if the non-chunked key is
+present, as a fallback.
+
+When dropping a key from the remote, drop all logged chunk sizes.
+(Also drop any non-chunked key.)
+
+As long as the location log and the chunk log are committed atomically,
+this guarantees that no orphaned chunks end up on a remote
+(except any that might be left by interrupted uploads).
+
+This has the best security of the designs so far, because the special
+remote doesn't know anything about chunk sizes. It uses a little more
+data in the git-annex branch, although with care (using the same timestamp
+as the location log), it can compress pretty well.
+
+## chunk log
+
+Stored in the git-annex branch, this provides a mapping `Key -> [[Key]]`.
+
+Note that a given remote uuid might have multiple sets of chunks (with
+different sizes) logged, if a key was stored on it twice using different
+chunk sizes. Also note that even when the log indicates a key is chunked,
+the object may be stored non-chunked on the remote too.
+
+For fixed size chunks, there's no need to store the list of chunk keys,
+instead the log only records the number of chunks (needed because the size
+of the parent Key may not be known), and the chunk size.
+
+Example:
+
+ 1287290776.765152s e605dca6-446a-11e0-8b2a-002170d25c55:10240 9
+
+Later, might want to support other kinds of chunks, for example ones made
+using a rsync-style rolling checksum. It would probably not make sense to
+store the full [Key] list for such chunks in the log. Instead, it might be
+stored in a file on the remote.
+
+To support such future developments, when updating the chunk log,
+git-annex should preserve unparsable values (the part after the colon).
+
+## chunk then encrypt
+
+Rather than encrypting the whole object 1st and then chunking, chunk and
+then encrypt.
+
+Reasons:
+
+1. If 2 repos are uploading the same key to a remote concurrently,
+ this allows some chunks to come from one and some from another,
+ and be reassembled without problems.
+
+2. Also allows chunks of the same object to be downloaded from different
+ remotes, perhaps concurrently, and again be reassembled without
+ problems.
+
+3. Prevents an attacker from re-assembling the chunked file using details
+ of the gpg output. Which would expose approximate
+ file size even if padding is being used to obscure it.
+
+Note that this means that the chunks won't exactly match the configured
+chunk size. gpg does compression, which might make them a
+lot smaller. Or gpg overhead could make them slightly larger. So `checkPresent`
+cannot check exact file sizes.
+
+If padding is enabled, gpg compression should be disabled, to not leak
+clues about how well the files compress and so what kind of file it is.
+
+## chunk key hashing
+
+A chunk key should hash into the same directory structure as its parent
+key. This will avoid lots of extra hash directories when using chunking
+with non-encrypted keys.
+
+Won't happen when the key is encrypted, but that is good; hashing to the
+same bucket then would allow statistical correlation.
+
+## resuming interupted transfers
+
+Resuming interrupted downloads, and uploads are both possible.
+
+Downloads: If the tmp file for a key exists, round it to the chunk size,
+and skip forward to the next needed chunk. Easy.
+
+Uploads: Check if the 1st chunk is present. If so, check the second chunk,
+etc. Once the first missing chunk is found, start uploading from there.
+
+That adds one extra checkPresent call per upload. Probably a win in most cases.
+Can be improved by making special remotes open a persistent
+connection that is used for transferring all chunks, as well as for
+checking checkPresent.
+
+Note that this is safe to do only as long as the Key being transferred
+cannot possibly have 2 different contents in different repos. Notably not
+necessarily the case for the URL keys generated for quvi.
+
+Both **done**.
+
+## parallel
+
+If 2 remotes both support chunking, uploading could upload different chunks
+to them in parallel. However, the chunk log does not currently allow
+representing the state where some chunks are on one remote and others on
+another remote.
+
+Parallel downloading of chunks from different remotes is a bit more doable.
diff --git a/doc/design/assistant/deltas.mdwn b/doc/design/assistant/deltas.mdwn
index ff4185a18..0f7d308b8 100644
--- a/doc/design/assistant/deltas.mdwn
+++ b/doc/design/assistant/deltas.mdwn
@@ -4,6 +4,24 @@ One simple way is to find the key of the old version of a file that's
being transferred, so it can be used as the basis for rsync, or any
other similar transfer protocol.
-For remotes that don't use rsync, a poor man's version could be had by
-chunking each object into multiple parts. Only modified parts need be
-transferred. Sort of sub-keys to the main key being stored.
+For remotes that don't use rsync, use a rolling checksum based chunker,
+such as BuzHash. This will produce [[chunks]], which can be stored on the
+remote as regular Keys -- where unlike the fixed size chunk keys, the
+SHA256 part of these keys is the checksum of the chunk they contain.
+
+Once that's done, it's easy to avoid uploading chunks that have been sent
+to the remote before.
+
+When retriving a new version of a file, there would need to be a way to get
+the list of chunk keys that constitute the new version. Probably best to
+store this list on the remote. Then there needs to be a way to find which
+of those chunks are available in locally present files, so that the locally
+available chunks can be extracted, and combined with the chunks that need
+to be downloaded, to reconstitute the file.
+
+To find which chucks are locally available, here are 2 ideas:
+
+1. Use a single basis file, eg an old version of the file. Re-chunk it, and
+ use its chunks. Slow, but simple.
+2. Some kind of database of locally available chunks. Would need to be kept
+ up-to-date as files are added, and as files are downloaded.
diff --git a/doc/design/assistant/inotify/comment_7_00809aaad6b68f189a9cc42af810a0a6._comment b/doc/design/assistant/inotify/comment_7_00809aaad6b68f189a9cc42af810a0a6._comment
new file mode 100644
index 000000000..7e1ad7db5
--- /dev/null
+++ b/doc/design/assistant/inotify/comment_7_00809aaad6b68f189a9cc42af810a0a6._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnwfqF4wL6l_O26RyzoBowUMvQ_955Vpao"
+ nickname="Markus"
+ subject="comment 7"
+ date="2014-06-14T06:29:55Z"
+ content="""
+FWIW: Removing the [raspi-copies-and-fills](https://github.com/simonjhall/copies-and-fills) package ('apt-get purge raspi-copies-and-fills') stops annex from printing the message over and over again. According to the package's description though, you suffer a performance penalty without the package.
+"""]]
diff --git a/doc/design/assistant/polls/Android_default_directory.mdwn b/doc/design/assistant/polls/Android_default_directory.mdwn
index 869aedf4b..9a81accd7 100644
--- a/doc/design/assistant/polls/Android_default_directory.mdwn
+++ b/doc/design/assistant/polls/Android_default_directory.mdwn
@@ -4,4 +4,4 @@ Same as the desktop webapp, users will be able to enter a directory they
want the first time they run it, but to save typing on android, anything
that gets enough votes will be included in a list of choices as well.
-[[!poll open=yes expandable=yes 66 "/sdcard/annex" 6 "Whole /sdcard" 6 "DCIM directory (photos and videos only)" 1 "Same as for regular git-annex. ~/annex/"]]
+[[!poll open=yes expandable=yes 72 "/sdcard/annex" 6 "Whole /sdcard" 7 "DCIM directory (photos and videos only)" 2 "Same as for regular git-annex. ~/annex/"]]
diff --git a/doc/design/assistant/polls/prioritizing_special_remotes.mdwn b/doc/design/assistant/polls/prioritizing_special_remotes.mdwn
index f7462af0d..3c9de2b02 100644
--- a/doc/design/assistant/polls/prioritizing_special_remotes.mdwn
+++ b/doc/design/assistant/polls/prioritizing_special_remotes.mdwn
@@ -6,7 +6,7 @@ locally paired systems, and remote servers with rsync.
Help me prioritize my work: What special remote would you most like
to use with the git-annex assistant?
-[[!poll open=yes 16 "Amazon S3 (done)" 12 "Amazon Glacier (done)" 9 "Box.com (done)" 71 "My phone (or MP3 player)" 25 "Tahoe-LAFS" 10 "OpenStack SWIFT" 31 "Google Drive"]]
+[[!poll open=yes 18 "Amazon S3 (done)" 12 "Amazon Glacier (done)" 10 "Box.com (done)" 74 "My phone (or MP3 player)" 25 "Tahoe-LAFS" 13 "OpenStack SWIFT" 35 "Google Drive"]]
This poll is ordered with the options I consider easiest to build
listed first. Mostly because git-annex already supports them and they
diff --git a/doc/design/assistant/progressbars.mdwn b/doc/design/assistant/progressbars.mdwn
index 50f424508..7de70452d 100644
--- a/doc/design/assistant/progressbars.mdwn
+++ b/doc/design/assistant/progressbars.mdwn
@@ -14,7 +14,7 @@ This is one of those potentially hidden but time consuming problems.
could use inotify. **done**
* When easily available, remotes call the MeterUpdate callback as downloads
progress. **done**
-* S3 TODO
+* S3: TODO
While it has a download progress bar, `getObject` probably buffers the whole
download in memory before returning. Leaving the progress bar to only
display progress for writing the file out of memory. Fixing this would
@@ -32,7 +32,7 @@ the MeterUpdate callback as the upload progresses.
* webdav: **done**
* S3: **done**
* glacier: **done**
-* bup: TODO
+* bup: **done**
* hook: Would require the hook interface to somehow do this, which seems
too complicated. So skipping.
diff --git a/doc/design/assistant/sshpassword.mdwn b/doc/design/assistant/sshpassword.mdwn
index e38769867..59f981bb1 100644
--- a/doc/design/assistant/sshpassword.mdwn
+++ b/doc/design/assistant/sshpassword.mdwn
@@ -10,3 +10,56 @@ securely?
This might come down to a simple change to the webapp to prompt for the
password, and then rather a lot of pain to make the webapp use HTTPS so we
can be pretty sure noone is sniffing the (localhost) connection.
+
+## ssh-askpass approach
+
+* If ssh-askpass is in PATH, or `SSH_ASKPASS` is set, do nothing.
+ (Unless webapp is run remotely.)
+ XXX not currently done; the UI would need to omit the password entry
+ fields in this case.
+* Otherwise, have the assistant set `SSH_ASKPASS` to a command that will
+ cause the webapp to read the password and forward it on. Also, set
+ DISPLAY to ensure that ssh runs the program. **done**
+
+Looking at ssh.exe, I think this will even work on Windows; it contains the
+code to run ssh-askpass. (It does work on Windows!)
+
+### securely handling the password
+
+* Maybe force upgrade webapp to https? Locally, the risk would be that
+ root could tcpdump and read password, so not large risk. If webapp
+ is being accessed remotely, absolutely: require https.
+* Use hs-securemem to store password.
+* Avoid storing password for long. Erase it after webapp setup of remote
+ is complete. Time out after 10 minutes and erase it. **done**
+* If the user is slow, the cached ssh key can exire before they finish.
+ This results in ssh being given no password, and failing. The UI
+ now detects this and suggests the user retry. **done**
+* Prompt using a html field name that does not trigger web browser password
+ saving if possible.
+
+### ssh-askpass shim, and password forwarding
+
+`SSH_ASKPASS` needs to be set to a program (probably git-annex)
+which gets the password from the webapp, and outputs it to stdout. **done**
+
+Seems to call for the webapp and program to communicate over a local
+socket (locked down so only user can access) or environment.
+Environment is not as secure (easily snooped by root).
+Local socket probably won't work on Windows. Could just use a temp file.
+
+(Currently uses a temp file with locked down perms that it's careful
+to clean up after use.)
+
+Note that the webapp can probe to see if ssh needs a password, and can
+prompt the user for it before running ssh and the ssh-askpass shim.
+This avoids some complexity, and perhaps some attack vectors,
+if the shim cannot requst an arbitrary password prompt.
+(This complexity not needed with the temp file approach..)
+
+### TODO
+
+* test on OSX
+* test on Android
+* remove the vestigial terminal on Windows and Android, since this was the
+ last thing actually using it (not easy!)
diff --git a/doc/design/assistant/sshpassword/comment_1_24399abe0a0c1de271490ee15e064760._comment b/doc/design/assistant/sshpassword/comment_1_24399abe0a0c1de271490ee15e064760._comment
new file mode 100644
index 000000000..e71806fa2
--- /dev/null
+++ b/doc/design/assistant/sshpassword/comment_1_24399abe0a0c1de271490ee15e064760._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnXybLxkPMYpP3yw4b_I6IdC3cKTD-xEdU"
+ nickname="Matt"
+ subject="comment 1"
+ date="2014-04-29T10:10:04Z"
+ content="""
+Can you do something similar for gpg-agent? Or do it instead with a ssh supported gpg-agent?
+"""]]
diff --git a/doc/design/assistant/sshpassword/comment_2_36a811bca209c7ac8a44d64bf8bc5bf3._comment b/doc/design/assistant/sshpassword/comment_2_36a811bca209c7ac8a44d64bf8bc5bf3._comment
new file mode 100644
index 000000000..8d9925af2
--- /dev/null
+++ b/doc/design/assistant/sshpassword/comment_2_36a811bca209c7ac8a44d64bf8bc5bf3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="216.145.95.162"
+ subject="comment 2"
+ date="2014-05-19T15:47:19Z"
+ content="""
+I don't feel comfortable prompting for gpg passphrases in the webapp. See [[gpgkeys]] for thoughts on this.
+"""]]
diff --git a/doc/design/assistant/syncing/efficiency.mdwn b/doc/design/assistant/syncing/efficiency.mdwn
index 7da721a2c..09bcc11b6 100644
--- a/doc/design/assistant/syncing/efficiency.mdwn
+++ b/doc/design/assistant/syncing/efficiency.mdwn
@@ -71,3 +71,7 @@ repositories have a non-git out of band signaling mechanism. This could,
for example, be used by laptopB to tell laptopA that it's trying to send
a file directly to laptopC. laptopA could then defer the upload to the
cloud for a while.
+
+## syncing only requested content
+
+See [[adhoc_routing]]
diff --git a/doc/design/assistant/telehash.mdwn b/doc/design/assistant/telehash.mdwn
index b9755736f..2ecf9ec71 100644
--- a/doc/design/assistant/telehash.mdwn
+++ b/doc/design/assistant/telehash.mdwn
@@ -11,6 +11,9 @@ git-annex (assistant) repositories.
* Rapid development, situation may change in a month or 2.
* Is it secure? A security review should be done by competant people
(not Joey). See <https://github.com/telehash/telehash.org/issues/23>
+* **Haskell version**
+ <https://github.com/alanz/htelehash/tree/v2/src/TeleHash>
+ Development on v2 in haskell is just starting up!
## implementation basics
@@ -63,8 +66,7 @@ encryption.
## separate daemon?
-A `gathd` could contain all the telehash specific code, and git-annex
-communicate with it via a local socket.
+See [[git-remote-daemon]] for a design.
Advantages:
@@ -81,12 +83,8 @@ Advantages:
exchange protocols implemented in such a daemon to allow SSH-less
transfers.
* Security holes in telehash would not need to compromise the entire
- git-annex. gathd could be sandboxed in one way or another.
+ git-annex. daemon could be sandboxed in one way or another.
Disadvantages:
-* Adds a memcopy when large files are being transferred through telehash.
- Unlikely to be a bottleneck.
* Adds some complexity.
-* What IPC to use on Windows? Might have to make git-annex communicate
- with it over its stdin/stdout there.
diff --git a/doc/design/caching_database.mdwn b/doc/design/caching_database.mdwn
index 9d688a9d4..7fd5f37eb 100644
--- a/doc/design/caching_database.mdwn
+++ b/doc/design/caching_database.mdwn
@@ -32,6 +32,19 @@ Store in the database the Ref of the branch that was used to construct it.
4. Store incremental fsck info in db.
5. Replace .map files with 3. for direct mode.
+## sqlite or not?
+
+sqllite seems like the most likely thing to work. But it does involve ugh,
+SQL. And even if that's hidden by a layer like persistent, it's still going
+to involve some technical debt (eg, database migrations).
+
+It would be great if there were some haskell thing like acid-state
+that I could use instead. But, acid-sate needs to load the whole
+DB into memory. In the comments of
+[[bugs/incremental_fsck_should_not_use_sticky_bit]] I examined several
+other haskell database-like things, and found them all wanting, except for
+possibly TCache. (And TCache is backed by persistent/sqlite anyway.)
+
## case study: persistent with sqllite
Here's a non-normalized database schema in persistent's syntax.
@@ -107,15 +120,14 @@ With this, 1000 queries takes 0.406s. Note that persistent is probably not
actually doing a join at the SQL level, so this could be sped up using
eg, esquelito.
-Update2: Using esquelito to do a join got this down to 0.250s.
-
-Code: <http://lpaste.net/101141> <http://lpaste.net/101142>
+Update2: Using esquelito to do a join got this down to 0.109s.
+See `database` branch for code.
Compare the above with 1000 calls to `associatedFiles`, which is approximately
as fast as just opening and reading 1000 files, so will take well under
0.05s with a **cold** cache.
-So, we're looking at nearly an order of magnitude slowdown using sqlite and
+So, we're looking at maybe 50% slowdown using sqlite and
persistent for associated files. OTOH, the normalized schema should
perform better when adding an associated file to a key that already has many.
diff --git a/doc/design/external_special_remote_protocol.mdwn b/doc/design/external_special_remote_protocol.mdwn
index 6fe09ff7c..cc3bfce96 100644
--- a/doc/design/external_special_remote_protocol.mdwn
+++ b/doc/design/external_special_remote_protocol.mdwn
@@ -91,38 +91,48 @@ send one of the corresponding replies listed in the next section.
The following requests *must* all be supported by the special remote.
* `INITREMOTE`
- Request that the remote initialize itself. This is where any one-time
+ Requests the remote to initialize itself. This is where any one-time
setup tasks can be done, for example creating an Amazon S3 bucket.
Note: This may be run repeatedly over time, as a remote is initialized in
different repositories, or as the configuration of a remote is changed.
(Both `git annex initremote` and `git-annex enableremote` run this.)
So any one-time setup tasks should be done idempotently.
* `PREPARE`
- Tells the special remote it's time to prepare itself to be used.
+ Tells the remote that it's time to prepare itself to be used.
Only INITREMOTE can come before this.
* `TRANSFER STORE|RETRIEVE Key File`
- Requests the transfer of a key. For Send, the File is the file to upload;
- for Receive the File is where to store the download.
+ Requests the transfer of a key. For STORE, the File is the file to upload;
+ for RETRIEVE the File is where to store the download.
Note that the File should not influence the filename used on the remote.
The filename will not contain any whitespace.
+ Note that it's important that, while a Key is being stored, CHECKPRESENT
+ not indicate it's present until all the data has been transferred.
Multiple transfers might be requested by git-annex, but it's fine for the
- program to serialize them and only do one at a time.
+ program to serialize them and only do one at a time.
* `CHECKPRESENT Key`
- Requests the remote check if a key is present in it.
+ Requests the remote to check if a key is present in it.
* `REMOVE Key`
- Requests the remote remove a key's contents.
+ Requests the remote to remove a key's contents.
The following requests can optionally be supported. If not handled,
replying with `UNSUPPORTED-REQUEST` is acceptable.
* `GETCOST`
- Requests the remote return a use cost. Higher costs are more expensive.
+ Requests the remote to return a use cost. Higher costs are more expensive.
(See Config/Cost.hs for some standard costs.)
* `GETAVAILABILITY`
- Requests the remote send back an `AVAILABILITY` reply.
+ Requests the remote to send back an `AVAILABILITY` reply.
If the remote replies with `UNSUPPORTED-REQUEST`, its availability
- is asssumed to be global. So, only remotes that are only reachable
+ is assumed to be global. So, only remotes that are only reachable
locally need to worry about implementing this.
+* `CLAIMURL Url`
+ Asks the remote if it wishes to claim responsibility for downloading
+ an url. If so, the remote should send back an `CLAIMURL-SUCCESS` reply.
+ If not, it can send `CLAIMURL-FAILURE`.
+* `CHECKURL Url`
+ Asks the remote to check if the url's content can currently be downloaded
+ (without downloading it). The remote replies with one of `CHECKURL-FAILURE`,
+ `CHECKURL-CONTENTS`, or `CHECKURL-MULTI`.
More optional requests may be added, without changing the protocol version,
so if an unknown request is seen, reply with `UNSUPPORTED-REQUEST`.
@@ -165,6 +175,24 @@ while it's handling a request.
Indicates the INITREMOTE succeeded and the remote is ready to use.
* `INITREMOTE-FAILURE ErrorMsg`
Indicates that INITREMOTE failed.
+* `CLAIMURL-SUCCESS`
+ Indicates that the CLAIMURL url will be handled by this remote.
+* `CLAIMURL-FAILURE`
+ Indicates that the CLAIMURL url wil not be handled by this remote.
+* `CHECKURL-CONTENTS Size|UNKNOWN Filename`
+ Indicates that the requested url has been verified to exist.
+ The Size is the size in bytes, or use "UNKNOWN" if the size could not be
+ determined.
+ The Filename can be empty (in which case a default is used),
+ or can specify a filename that is suggested to be used for this url.
+* `CHECKURL-MULTI Url Size|UNKNOWN Filename ...`
+ Indicates that the requested url has been verified to exist,
+ and contains multiple files, which can each be accessed using
+ their own url.
+ Note that since a list is returned, neither the Url nor the Filename
+ can contain spaces.
+* `CHECKURL-FAILURE`
+ Indicates that the requested url could not be accessed.
* `UNSUPPORTED-REQUEST`
Indicates that the special remote does not know how to handle a request.
@@ -245,6 +273,17 @@ in control.
* `GETSTATE Key`
Gets any state that has been stored for the key.
(git-annex replies with VALUE followed by the state.)
+* `SETURLPRESENT Key Url`
+ Records an url (or uri) where the Key can be downloaded from.
+* `SETURLMISSING Key Url`
+ Records that the key can no longer be downloaded from the specified
+ url (or uri).
+* `GETURLS Key Prefix`
+ Gets the recorded urls where a Key can be downloaded from.
+ Only urls that start with the Prefix will be returned. The Prefix
+ may be empty to get all urls.
+ (git-annex replies one or more times with VALUE for each url.
+ The final VALUE has an empty value, indicating the end of the url list.)
* `DEBUG message`
Tells git-annex to display the message if --debug is enabled.
@@ -286,8 +325,5 @@ start a new process the next time it needs to use a remote.
the remote. However, \n and probably \0 need to be escaped somehow in the
file data, which adds complication.
* uuid discovery during INITREMOTE.
-* Support for splitting files into chunks.
-* Support for getting and setting the list of urls that can be associated
- with a key.
* Hook into webapp. Needs a way to provide some kind of prompt to the user
in the webapp, etc.
diff --git a/doc/design/git-remote-daemon.mdwn b/doc/design/git-remote-daemon.mdwn
new file mode 100644
index 000000000..41e0c93e1
--- /dev/null
+++ b/doc/design/git-remote-daemon.mdwn
@@ -0,0 +1,173 @@
+# goals
+
+* be configured like a regular git remote, with an unusual url
+ or other configuration
+* receive notifications when a remote has received new commits,
+ and take some action
+* optionally, do receive-pack and send-pack to a remote that
+ is only accessible over an arbitrary network transport
+ (like assistant does with XMPP)
+* optionally, send/receive git-annex objects to remote
+ over an arbitrary network transport
+
+# difficulties
+
+* authentication & configuration
+* multiple nodes may be accessible over a single network transport,
+ with it desirable to sync with any/all of them. For example, with
+ XMPP, there can be multiple friends synced with. This means that
+ one git remote can map to multiple remote nodes. Specific to git-annex,
+ this means that a set of UUIDs known to be associated with the remote
+ needs to be maintained, while currently each remote can only have one
+ annex-uuid in .git/config.
+
+# payoffs
+
+* support [[assistant/telehash]]!
+* Allow running against a normal ssh git remote. This would run
+ git-annex-shell on the remote, watching for changes, and so be able to
+ notify when a commit was pushed to the remote repo. This would let the
+ assistant immediately notice and pull. So the assistant would be fully
+ usable with a single ssh remote and no other configuration!
+ **do this first**
+* clean up existing XMPP support, make it not a special case, and not
+ tightly tied to the assistant
+* git-remote-daemon could be used independantly of git-annex,
+ in any git repository.
+
+# design
+
+Let git-remote-daemon be the name. Or for git-annex,
+`git annex remotedaemon`.
+
+It runs in one of two ways:
+
+1. Forked to background, using a named pipe for the control protocol.
+2. With --foreground, the control protocol goes over stdio.
+
+Either way, behavior is the same:
+
+* Get a list of remotes to act on by looking at .git/config
+* Automatically notices when a remote has changes to branches
+ matching remote.$name.fetch, and pulls them down to the appropriate
+ location.
+* When the control protocol informs it about a new ref that's available,
+ it offers the ref to any interested remotes.
+
+# control protocol
+
+This is an asynchronous protocol. Ie, either side can send any message
+at any time, and the other side does not send a reply.
+
+It is line based and intended to be low volume and not used for large data.
+
+TODO: Expand with commands for sending/receiving git-annex objects, and
+progress during transfer.
+
+TODO: Will probably need to add something for whatever pairing is done by
+the webapp.
+
+## emitted messages
+
+* `CONNECTED uri`
+
+ Sent when a connection has been made with a remote.
+
+* `DISCONNECTED uri`
+
+ Sent when connection with a remote has been lost.
+
+* `SYNCING uri`
+
+ Indicates that a pull or a push with a remote is in progress.
+ Always followed by DONESYNCING.
+
+* `DONESYNCING uri 1|0`
+
+ Indicates that syncing with a remote is done, and either succeeded
+ (1) or failed (0).
+
+* `WARNING uri string`
+
+ A message to display to the user about a remote.
+
+## consumed messages
+
+* `PAUSE`
+
+ The user has requested a pause.
+ git-remote-daemon should close connections and idle.
+
+* `LOSTNET`
+
+ The network connection has been lost.
+ git-remote-daemon should close connections and idle.
+
+* `RESUME`
+
+ Undoes PAUSE or LOSTNET.
+ Start back up network connections.
+
+* `CHANGED ref ...`
+
+ Indicates that a ref is new or has changed. These can be offered to peers,
+ and peers that are interested in them can pull the content.
+
+* `RELOAD`
+
+ Indicates that configs have changed. Daemon should reload .git/config
+ and/or restart.
+
+ Possible config changes include adding a new remote, removing a remote,
+ or setting `remote.<name>.annex-sync` to configure whether to sync with a
+ particular remote.
+
+* `STOP`
+
+ Shut down git-remote-daemon
+
+ (When using stdio, it also should shutdown when it reaches EOF on
+ stdin.)
+
+# encryption & authentication
+
+For simplicity, the network transports have to do their own end-to-end
+encryption. Encryption is not part of this design.
+
+(XMPP does not do end-to-end encryption, but might be supported
+transitionally.)
+
+Ditto for authentication that we're talking to who we intend to talk to.
+Any public key data etc used for authentication is part of the remote's
+configuration (or hidden away in a secure chmodded file, if necessary).
+This design does not concern itself with authenticating the remote node,
+it just takes the auth token and uses it.
+
+For example, in telehash, each node has its own keypair, which is used
+or authentication and encryption, and is all that's needed to route
+messages to that node.
+
+# network level protocol
+
+How do peers communicate with one another over the network?
+
+This seems to need to be network-layer dependant. Telehash will need
+one design, and git-annex-shell on a central ssh server has a very different
+(and much simpler) design.
+
+## ssh
+
+`git-annex-shell notifychanges` is run, and speaks a simple protocol
+over stdio to inform when refs on the remote have changed.
+
+No pushing is done for CHANGED, since git handles ssh natively.
+
+This is implemented and seems to work well.
+
+## telehash
+
+TODO
+
+## xmpp
+
+Reuse [[assistant/xmpp]]
diff --git a/doc/design/git-remote-daemon/comment_1_bfa8f33a3fdb6e271dfbdd0378b5d364._comment b/doc/design/git-remote-daemon/comment_1_bfa8f33a3fdb6e271dfbdd0378b5d364._comment
new file mode 100644
index 000000000..d93bab090
--- /dev/null
+++ b/doc/design/git-remote-daemon/comment_1_bfa8f33a3fdb6e271dfbdd0378b5d364._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="http://johan.kiviniemi.name/"
+ nickname="Johan"
+ subject="Rolling hash chunking"
+ date="2014-04-04T14:16:25Z"
+ content="""
+I am not sure which page is the best for this comment, but this one seems somewhat relevant.
+
+Given that a future telehash implementation may download files from multiple peers, it might be a good idea to download files in chunks, possibly in parallel. In this case, it might be a good idea to use a rolling hash for chunking (like rsync et al). [There is a package for that on Hackage](http://hackage.haskell.org/package/hash-0.2.0.1/docs/Data-Hash-Rolling.html).
+
+git-annex could store a list of chunk checksums in `.git/annex/objects/…/SHA….chunks` whenever the repository holds a copy of the file. The checksum list would be a small fraction of the file in size, but all the checksum lists for all the files in a repository might take up too much space to store in the `git-annex` branch.
+
+When getting an object, git-annex could first download the `.chunks` file from a remote/peer and then proceed to download missing chunks in a BitTorrent-like fashion.
+
+If git-annex has an idea about what locally present object might be an earlier version of the file, it could compare the checksum lists and only download the parts that have changed (à la rsync).
+"""]]
diff --git a/doc/design/metadata.mdwn b/doc/design/metadata.mdwn
index 10e79b9f8..9da0a3626 100644
--- a/doc/design/metadata.mdwn
+++ b/doc/design/metadata.mdwn
@@ -53,7 +53,7 @@ once, and can be left alone when refining a view.
## automatically added metadata
-When annex.genmetadata is set, git annex add automatically attaches
+When `annex.genmetadata` is set, git annex add automatically attaches
some metadata to a file. Currently year and month fields, from its mtime.
There's also a post-commit-annex hook script.
diff --git a/doc/design/metadata/comment_6_fa51ae544b193122334dbae7960ab3d9._comment b/doc/design/metadata/comment_6_fa51ae544b193122334dbae7960ab3d9._comment
new file mode 100644
index 000000000..7be49a6a9
--- /dev/null
+++ b/doc/design/metadata/comment_6_fa51ae544b193122334dbae7960ab3d9._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="tdussa"
+ ip="217.84.74.69"
+ subject="Why not automatically add the whole date?"
+ date="2014-04-30T20:41:20Z"
+ content="""
+Hi,
+
+apologies if I am missing something, but from what I understand, git-annex will automatically add the year and the month from a file's mtime to its metadata if instructed to do so.
+
+So... What about the day (or the time, for that matter?)? What is the reasoning behind the decision not to add those bits automatically? And, is there a way to get git-annex to add those bits of information automatically as well (besides the obvious way of creating a pre-commit-hook script to that effect)?
+
+THX & Cheers,
+Toby.
+"""]]
diff --git a/doc/design/metadata/comment_7_04cd255a516c8520a7bc1a8fad253533._comment b/doc/design/metadata/comment_7_04cd255a516c8520a7bc1a8fad253533._comment
new file mode 100644
index 000000000..12e5042fb
--- /dev/null
+++ b/doc/design/metadata/comment_7_04cd255a516c8520a7bc1a8fad253533._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlM_DRhi_5pJrTA0HbApHR25iAgy-NBXTY"
+ nickname="Tor Arne"
+ subject="comment 7"
+ date="2014-10-01T22:43:40Z"
+ content="""
+I have the same question as Toby, is there a particular reason the whole timestamp is not stored?
+"""]]
diff --git a/doc/design/metadata/comment_8_0a7e55e7626f72f63966fa1e1d2cf100._comment b/doc/design/metadata/comment_8_0a7e55e7626f72f63966fa1e1d2cf100._comment
new file mode 100644
index 000000000..965b1932e
--- /dev/null
+++ b/doc/design/metadata/comment_8_0a7e55e7626f72f63966fa1e1d2cf100._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlM_DRhi_5pJrTA0HbApHR25iAgy-NBXTY"
+ nickname="Tor Arne"
+ subject="Can tags/metadata be used for preferred content?"
+ date="2014-10-01T22:45:36Z"
+ content="""
+Would love to be able to \"tag\" something as archived instead of moving it into a special folder. Coupled with a FinderSync extension on OS X Yosemite for right-click menu. This would allow me to also \"view\" the archive and bring things out of there by \"untagging\" it, if I understand the feature correctly?
+"""]]
diff --git a/doc/design/metadata/comment_9_f0bb62c885a925e0da5ae8ce3c5e9003._comment b/doc/design/metadata/comment_9_f0bb62c885a925e0da5ae8ce3c5e9003._comment
new file mode 100644
index 000000000..fac3bf135
--- /dev/null
+++ b/doc/design/metadata/comment_9_f0bb62c885a925e0da5ae8ce3c5e9003._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlM_DRhi_5pJrTA0HbApHR25iAgy-NBXTY"
+ nickname="Tor Arne"
+ subject="comment 9"
+ date="2014-10-01T23:35:39Z"
+ content="""
+Sorry for the noise, I see that tags _can_ be used for preferred content, excellent!
+
+But it seems metadata is tied to a key, not to a specific file/path. If I have 10 different files all with the same content (for some reason, say a simple txt file, Gemspec, or something), and I want to tag one of them as important, it doesn't mean they all are :o
+"""]]
diff --git a/doc/design/requests_routing.mdwn b/doc/design/requests_routing.mdwn
new file mode 100644
index 000000000..2391cfae9
--- /dev/null
+++ b/doc/design/requests_routing.mdwn
@@ -0,0 +1,100 @@
+## requesting content
+
+In some situations, nodes only want particular files, and not everything.
+(Or don't have the bandwidth to get everything.) A way to handle this,
+that should work in a fully ad-hoc, offline distributed network,
+suggested by Vincenzo Tozzi:
+
+* Nodes generate a request for a specific file they want, committed
+ to git somewhere.
+* This request has a TTL (of eg 3 or 4).
+* When syncing, copy the requests that a node has, and decrease their TTL
+ by 1. Requests with a TTL of 0 have timed out and are not copied.
+ (So, requests are stored in git, but on eg, per-node branches.)
+* Only copy content to nodes that have a request for it (either one
+ originating with them, or one they copied from another node).
+* Each request indicates the requesting node, so once no nodes have an
+ active request for a particular file, it's ok to drop it from the
+ transfer nodes (honoring numcopies etc of course).
+
+## simulation
+
+A simulation of a network using this method is in [[simroutes.hs]].
+
+Question: How efficient is this method? Does the network fill with many
+copies that are not needed, before the request is fulfilled?
+
+## storing requests
+
+Requests could be stored in the location tracking file.
+
+Currently:
+
+ time 0|1 uuid1
+ time 0|1 uuid2
+
+* Use negative numbers for the TTL of a request:
+
+ time -3! uuid1
+ time -2 uuid2
+
+ The `!` indicates that the request originated on
+ that node.
+* To propigate a request, set -1 * (TTL+1) in the line
+ for the uuid of the repository that is propigating it.
+ This should be done as part of the git-annex branch merge,
+ so if a location tracking file is merged, any open requests
+ get propigated to the current repository automatically.
+* When a requested file reaches a node that requested it,
+ the location is set to 1; this automatically clears the
+ request.
+* When a file has no more originating requests, clear all
+ the copied requests:
+
+ time 1 uuid1
+ time -2 uuid2
+
+ Becomes:
+
+ time 1 uuid1
+ time' 0 uuid2
+
+## generating requests
+
+ git annex request [file...]
+
+Indicates that the file is wanted in the current repository.
+
+(git annex get could also do this on failure, or suggest doing this)
+
+## acting on requests
+
+Add a preferred content expression that looks at request data:
+
+ requestedby=N
+
+Matches files that have been requested by at least N nodes.
+
+ requested
+
+Matches files that the current node has requested.
+
+### Example preferred content expressions
+
+For an immobile node that accumulates files it requests, and also
+temporarily stores files requested by other such nodes:
+
+ present or requestedby=1
+
+For a node that only transfers files between the immobile nodes:
+
+ requestedby=1
+
+For an immobile node that only accumulates files it requests, but never
+stores files requested by other nodes:
+
+ present or requested
+
+TODO: Would be nice to be able to prioritize files that more nodes are
+requesting, or that have some urgent flag set. But currently there is no
+way to do that; content is either preferred or not preferred.
diff --git a/doc/design/requests_routing/comment_1_421b14a4dd9d6c431e00333057df1627._comment b/doc/design/requests_routing/comment_1_421b14a4dd9d6c431e00333057df1627._comment
new file mode 100644
index 000000000..f2e0a857a
--- /dev/null
+++ b/doc/design/requests_routing/comment_1_421b14a4dd9d6c431e00333057df1627._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://johan.kiviniemi.name/"
+ nickname="Johan"
+ subject="comment 1"
+ date="2014-05-07T06:27:10Z"
+ content="""
+“Nodes generate a request for a specific file they want”
+
+It would be also convenient to be able to “push” a file to another node you do not have direct access to by creating a request for that file on behalf of the node.
+"""]]
diff --git a/doc/design/requests_routing/simroutes.hs b/doc/design/requests_routing/simroutes.hs
new file mode 100644
index 000000000..391816040
--- /dev/null
+++ b/doc/design/requests_routing/simroutes.hs
@@ -0,0 +1,402 @@
+-- Simulation of non-flood syncing of content, across a network of nodes.
+
+module Main where
+
+import System.Random
+import Control.Monad.Random
+import Control.Monad
+import Control.Applicative
+import Data.Ratio
+import Data.Ord
+import Data.List
+import Data.Maybe
+import qualified Data.Set as S
+import qualified Data.Map.Strict as M
+
+{-
+ - Tunable values
+ -}
+
+totalFiles :: Int
+totalFiles = 100
+
+-- How likely is a given file to be wanted by any particular node?
+probabilityFilesWanted :: Probability
+probabilityFilesWanted = 0.10
+
+-- How many different locations can each transfer node move between?
+-- (Min, Max)
+transferDestinationsRange :: (Int, Int)
+transferDestinationsRange = (2, 3)
+
+-- Controls how likely transfer nodes are to move around in a given step
+-- of the simulation.
+-- (They actually move slightly less because they may start to move and
+-- pick the same location they are at.)
+-- (Min, Max)
+transferMoveFrequencyRange :: (Probability, Probability)
+transferMoveFrequencyRange = (0.10, 1.00)
+
+-- counts both immobile and transfer nodes as hops, so double Vince's
+-- theoretical TTL of 3.
+-- (30% loss on mocambos network w/o ttl of 4!)
+maxTTL :: TTL
+maxTTL = TTL (4 * 2)
+
+numImmobileNodes :: Int
+numImmobileNodes = 10
+
+numTransferNodes :: Int
+numTransferNodes = 20
+
+numSteps :: Int
+numSteps = 100
+
+-- IO code
+main :: IO ()
+main = do
+-- initialnetwork <- evalRandIO (seedFiles totalFiles =<< genNetwork)
+ initialnetwork <- evalRandIO (seedFiles totalFiles =<< mocambosNetwork)
+ networks <- evalRandIO (simulate numSteps initialnetwork)
+ let finalnetwork = last networks
+ putStrLn $ summarize initialnetwork finalnetwork
+ putStrLn "location history of file 1:"
+ print $ trace (traceHaveFile (File 1)) networks
+ putStrLn "request history of file 1:"
+ print $ trace (traceWantFile (File 1)) networks
+-- Only pure code below :)
+
+data Network = Network (M.Map NodeName ImmobileNode) [TransferNode]
+ deriving (Show, Eq)
+
+data ImmobileNode = ImmobileNode NodeRepo
+ deriving (Show, Eq)
+
+type NodeName = String
+
+type Route = [NodeName]
+
+data TransferNode = TransferNode
+ { currentlocation :: NodeName
+ , possiblelocations :: [NodeName]
+ , movefrequency :: Probability
+ , transferrepo :: NodeRepo
+ }
+ deriving (Show, Eq)
+
+data NodeRepo = NodeRepo
+ { wantFiles :: [Request]
+ , haveFiles :: S.Set File
+ , satisfiedRequests :: S.Set Request
+ }
+ deriving (Show, Eq)
+
+data File = File Int
+ deriving (Show, Eq, Ord)
+
+randomFile :: (RandomGen g) => Rand g File
+randomFile = File <$> getRandomR (0, totalFiles)
+
+data Request = Request File TTL
+ deriving (Show, Ord)
+
+-- compare ignoring TTL
+instance Eq Request where
+ (Request f1 _) == (Request f2 _) = f1 == f2
+
+requestedFile :: Request -> File
+requestedFile (Request f _) = f
+
+requestTTL :: Request -> TTL
+requestTTL (Request _ ttl) = ttl
+
+data TTL = TTL Int
+ deriving (Show, Eq, Ord)
+
+incTTL :: TTL -> TTL
+incTTL (TTL t) = TTL (t + 1)
+
+decTTL :: TTL -> TTL
+decTTL (TTL t) = TTL (t - 1)
+
+staleTTL :: TTL -> Bool
+staleTTL (TTL t) = t < 1
+
+-- Origin of a request starts one higher than max, since the TTL
+-- will decrement the first time the Request is transferred to another node.
+originTTL :: TTL
+originTTL = incTTL maxTTL
+
+randomRequest :: (RandomGen g) => Rand g Request
+randomRequest = Request
+ <$> randomFile
+ <*> pure originTTL
+
+type Probability = Float
+
+randomProbability :: (RandomGen g) => Rand g Probability
+randomProbability = getRandomR (0, 1)
+
+-- Returns the state of the network at each step of the simulation.
+simulate :: (RandomGen g) => Int -> Network -> Rand g [Network]
+simulate n net = go n [net]
+ where
+ go 0 nets = return (reverse nets)
+ go c (prev:nets) = do
+ new <- step prev
+ go (c - 1) (new:prev:nets)
+
+-- Each step of the simulation, check if each TransferNode wants to move,
+-- and if so:
+-- 1. It and its current location exchange their Requests.
+-- 2. And they exchange any requested files.
+-- 3. Move it to a new random location.
+--
+-- Note: This implementation does not exchange requests between two
+-- TransferNodes that both arrive at the same location at the same step,
+-- and then move away in the next step.
+step :: (RandomGen g) => Network -> Rand g Network
+step (Network immobiles transfers) = go immobiles [] transfers
+ where
+ go is c [] = return (Network is c)
+ go is c (t:ts) = do
+ r <- randomProbability
+ if movefrequency t <= r
+ then case M.lookup (currentlocation t) is of
+ Nothing -> go is (c ++ [t]) ts
+ Just currentloc -> do
+ let (currentloc', t') = merge currentloc t
+ t'' <- move t'
+ go (M.insert (currentlocation t) currentloc' is) (c ++ [t'']) ts
+ else go is (c ++ [t]) ts
+
+merge :: ImmobileNode -> TransferNode -> (ImmobileNode, TransferNode)
+merge (ImmobileNode ir) t@(TransferNode { transferrepo = tr }) =
+ ( ImmobileNode (go ir tr)
+ , t { transferrepo = go tr ir }
+ )
+ where
+ go r1 r2 = r1
+ { wantFiles = wantFiles'
+ , haveFiles = haveFiles'
+ , satisfiedRequests = satisfiedRequests' `S.union` checkSatisfied wantFiles' haveFiles'
+ }
+ where
+ wantFiles' = foldr addRequest (wantFiles r1) (wantFiles r2)
+ haveFiles' = S.foldr (addFile wantFiles' satisfiedRequests') (haveFiles r1) (haveFiles r2)
+ satisfiedRequests' = satisfiedRequests r1 `S.union` satisfiedRequests r2
+
+-- Adds a file to the set, when there's a request for it, and the request
+-- has not already been satisfied.
+addFile :: [Request] -> S.Set Request -> File -> S.Set File -> S.Set File
+addFile rs srs f fs
+ | any (\sr -> f == requestedFile sr) (S.toList srs) = fs
+ | any (\r -> f == requestedFile r) rs = S.insert f fs
+ | otherwise = fs
+
+-- Checks if any requests have been satisfied, and returns them,
+-- to be added to satisfidRequests
+checkSatisfied :: [Request] -> S.Set File -> S.Set Request
+checkSatisfied want have = S.fromList (filter satisfied want)
+ where
+ satisfied r = requestTTL r == originTTL && S.member (requestedFile r) have
+
+-- Decrements TTL, and avoids adding request with a stale TTL, or a
+-- request for an already added file with the same or a lower TTL.
+addRequest :: Request -> [Request] -> [Request]
+addRequest (Request f ttl) rs
+ | staleTTL ttl' = rs
+ | any (\r -> requestTTL r >= ttl) similar = rs
+ | otherwise = r' : other
+ where
+ ttl' = decTTL ttl
+ r' = Request f ttl'
+ (other, similar) = partition (/= r') rs
+
+move :: (RandomGen g) => TransferNode -> Rand g TransferNode
+move t = do
+ newloc <- randomfrom (possiblelocations t)
+ return $ t { currentlocation = newloc }
+
+genNetwork :: (RandomGen g) => Rand g Network
+genNetwork = do
+ let immobiles = M.fromList (zip (map show [1..]) (replicate numImmobileNodes emptyImmobile))
+ transfers <- sequence (replicate numTransferNodes (mkTransfer $ M.keys immobiles))
+ return $ Network immobiles transfers
+
+emptyImmobile :: ImmobileNode
+emptyImmobile = ImmobileNode (NodeRepo [] S.empty S.empty)
+
+mkTransfer :: (RandomGen g) => [NodeName] -> Rand g TransferNode
+mkTransfer immobiles = do
+ -- Transfer nodes are given random routes. May be simplistic.
+ -- Also, some immobile nodes will not be serviced by any transfer nodes.
+ numpossiblelocs <- getRandomR transferDestinationsRange
+ possiblelocs <- sequence (replicate numpossiblelocs (randomfrom immobiles))
+ mkTransferBetween possiblelocs
+
+mkTransferBetween :: (RandomGen g) => [NodeName] -> Rand g TransferNode
+mkTransferBetween possiblelocs = do
+ currentloc <- randomfrom possiblelocs
+ movefreq <- getRandomR transferMoveFrequencyRange
+ -- transfer nodes start out with no files or requests in their repo
+ let repo = (NodeRepo [] S.empty S.empty)
+ return $ TransferNode currentloc possiblelocs movefreq repo
+
+randomfrom :: (RandomGen g) => [a] -> Rand g a
+randomfrom l = do
+ i <- getRandomR (1, length l)
+ return $ l !! (i - 1)
+
+-- Seeds the network with the given number of files. Each file is added to
+-- one of the immobile nodes of the network at random. And, one other node,
+-- at random, is selected which wants to get the file.
+seedFiles :: (RandomGen g) => Int -> Network -> Rand g Network
+seedFiles 0 network = return network
+seedFiles n network@(Network m t) = do
+ (origink, ImmobileNode originr) <- randnode
+ (destinationk, ImmobileNode destinationr) <- randnode
+ let file = File n
+ let origin = ImmobileNode $ originr
+ { haveFiles = S.insert file (haveFiles originr) }
+ let destination = ImmobileNode $ destinationr
+ { wantFiles = Request file originTTL : wantFiles destinationr }
+ let m' = M.insert origink origin $
+ M.insert destinationk destination m
+ seedFiles (n - 1) (Network m' t)
+ where
+ randnode = do
+ k <- randomfrom (M.keys m)
+ return (k, fromJust $ M.lookup k m)
+
+summarize :: Network -> Network -> String
+summarize _initial@(Network origis _) _final@(Network is _ts) = format
+ [ ("Total wanted files",
+ show (sum (overis (length . findoriginreqs . wantFiles . repo))))
+ , ("Wanted files that were not transferred to requesting node",
+ show (sum (overis (S.size . findunsatisfied . repo))))
+ , ("Nodes that failed to get files",
+ show (map withinitiallocs $ filter (not . S.null . snd)
+ (M.toList $ M.map (findunsatisfied . repo) is)))
+ , ("Total number of files on immobile nodes at end",
+ show (overis (S.size . haveFiles . repo)))
+ --, ("Immobile nodes at end", show is)
+ ]
+ where
+ findoriginreqs = filter (\r -> requestTTL r == originTTL)
+ findunsatisfied r =
+ let wantedfs = S.fromList $ map requestedFile (findoriginreqs (wantFiles r))
+ in S.difference wantedfs (haveFiles r)
+ repo (ImmobileNode r) = r
+ overis f = map f $ M.elems is
+ format = unlines . map (\(d, s) -> d ++ ": " ++ s)
+
+ withinitiallocs (name, missingfiles) = (name, S.map addinitialloc missingfiles)
+ addinitialloc f = (f, M.lookup f initiallocs)
+
+ initiallocs = M.fromList $
+ concatMap (\(k, v) -> map (\f -> (f, k)) (S.toList $ haveFiles $ repo v)) $
+ M.toList origis
+
+trace :: (Network -> S.Set NodeName) -> [Network] -> String
+trace tracer networks = show $ go [] S.empty $ map tracer networks
+ where
+ go c old [] = reverse c
+ go c old (new:l) = go ((S.toList $ new `S.difference` old):c) new l
+
+traceHaveFile :: File -> Network -> S.Set NodeName
+traceHaveFile f (Network m _) = S.fromList $ M.keys $
+ M.filter (\(ImmobileNode r) -> f `S.member` haveFiles r) m
+
+traceWantFile :: File -> Network -> S.Set NodeName
+traceWantFile f (Network m _) = S.fromList $ M.keys $
+ M.filter (\(ImmobileNode r) -> any wantf (wantFiles r)) m
+ where
+ wantf (Request rf _ttl) = rf == f
+
+mocambosNetwork :: (RandomGen g) => Rand g Network
+mocambosNetwork = do
+ let major = map (immobilenamed . fst) communities
+ let minor = map immobilenamed (concatMap snd communities)
+ majortransfer <- mapM mkTransferBetween majorroutes
+ minortransfer <- mapM mkTransferBetween (concatMap minorroutes (concat (replicate 5 communities)))
+ return $ Network
+ (M.fromList (major++minor))
+ (majortransfer ++ minortransfer)
+ where
+ immobilenamed name = (name, emptyImmobile)
+
+ -- As a simplification, this only makes 2 hop routes, between minor
+ -- and major communities; no 3-legged routes.
+ minorroutes :: (NodeName, [NodeName]) -> [Route]
+ minorroutes (major, minors) = map (\n -> [major, n]) minors
+
+communities :: [(NodeName, [NodeName])]
+communities =
+ [ ("Tainá/SP",
+ [ "badtas"
+ , "vauedo ribera"
+ , "cofundo"
+ , "jao"
+ , "fazenda"
+ ]
+ )
+ , ("Odomode/RS",
+ [ "moradadapaz"
+ , "pelotas"
+ ]
+ )
+ , ("MercadoSul/DF",
+ [ "mesquito"
+ , "kalungos"
+ ]
+ )
+ , ("Coco/PE",
+ [ "xambá"
+ , "alafin"
+ , "terreiaos"
+ ]
+ )
+ , ("Linharinho/ES",
+ [ "monte alegne"
+ ]
+ )
+ , ("Boneco/BA",
+ [ "barroso"
+ , "lagoa santa"
+ , "terravista"
+ ]
+ )
+ , ("Zumbidospalmanes/NA",
+ [ "allantana"
+ ]
+ )
+ , ("Casa Pneta/PA",
+ [ "marajó"
+ ]
+ )
+ , ("Purarue/PA",
+ [ "oriaminá"
+ ]
+ )
+ , ("Madiba/NET", [])
+ ]
+
+majorroutes :: [Route]
+majorroutes =
+ -- person's routes
+ [ ["Tainá/SP", "Odomode/RS"]
+ , ["Tainá/SP", "MercadoSul/DF"]
+ , ["MercadoSul/DF", "Boneco/BA"]
+ , ["MercadoSul/DF", "Zumbidospalmanes/NA"]
+ , ["Zumbidospalmanes/NA", "Casa Pneta/PA"]
+ , ["Casa Pneta/PA", "Purarue/PA"]
+ , ["Casa Pneta/PA", "Linharinho/ES"]
+ , ["Boneco/BA", "Coco/PE"]
+ -- internet connections
+ , ["Tainá/SP", "MercadoSul/DF", "Coco/PE", "Purarue/PA", "Odomode/RS", "Madiba/NET"]
+ , ["Tainá/SP", "MercadoSul/DF", "Coco/PE", "Purarue/PA", "Odomode/RS", "Madiba/NET"]
+ , ["Tainá/SP", "MercadoSul/DF", "Coco/PE", "Purarue/PA", "Odomode/RS", "Madiba/NET"]
+ , ["Tainá/SP", "MercadoSul/DF", "Coco/PE", "Purarue/PA", "Odomode/RS", "Madiba/NET"]
+ , ["Tainá/SP", "MercadoSul/DF", "Coco/PE", "Purarue/PA", "Odomode/RS", "Madiba/NET"]
+ ]
diff --git a/doc/design/roadmap.mdwn b/doc/design/roadmap.mdwn
index 7458468f0..1cf5fac63 100644
--- a/doc/design/roadmap.mdwn
+++ b/doc/design/roadmap.mdwn
@@ -1,18 +1,38 @@
-## roadmap
-
-Now in the
-[sustaining git-annex development](https://campaign.joeyh.name/) year
-(starting September 2013).
-
-* Month 1 [[!traillink assistant/encrypted_git_remotes]]
-* Month 2 [[!traillink assistant/disaster_recovery]]
-* Month 3 user-driven features and polishing [[!traillink todo/direct_mode_guard]] [[!traillink assistant/upgrading]]
-* Month 4 [[!traillink assistant/windows text="Windows webapp"]], Linux arm, [[!traillink todo/support_for_writing_external_special_remotes]]
-* Month 5 user-driven features and polishing
-* Month 6 get Windows out of beta, [[!traillink design/metadata text="metadata and views"]]
-* **Month 7 user-driven features and polishing**
-* Month 8 [[!traillink assistant/telehash]]
-* Month 9 [[!traillink assistant/gpgkeys]] [[!traillink assistant/sshpassword]]
-* Month 10 get [[assistant/Android]] out of beta
-* Month 11 [[!traillink assistant/chunks]] [[!traillink assistant/deltas]]
-* Month 12 user-driven features and polishing
+## ahead
+
+* [[assistant/deltas]]
+* [[assistant/gpgkeys]]
+* [[assistant/telehash]]
+* [[design/requests_routing]]
+* [[design/v6]]
+
+## now
+
+* Feb 2015 user-driven features and polishing, [[design/caching_database]]
+
+## the rearview
+
+* Jan 2015 Android 5, relative paths, workload [[tuning]]
+* Dec 2014 [[todo/extensible_addurl]], bittorrent special remote
+* Nov 2014 direct mode proxy, undo command, diffdriver
+* Oct 2014 user-driven features and polishing, S3 multipart
+* Sep 2014 vacation
+
+2013-2014 [crowdfunded](https://campaign.joeyh.name/) year
+
+* Aug 2014 user-driven features and polishing
+* Jul 2014 [[!traillink assistant/chunks]]
+* Jun 2014 polish [[assistant/Windows]] port
+* May 2014 Brazil!, [[!traillink assistant/sshpassword]]
+* Apr 2014 [[!traillink git-remote-daemon]]
+* Mar 2014 user-driven features and polishing
+* Feb 2014 get Windows out of beta, [[!traillink design/metadata text="metadata and views"]]
+* Jan 2014 user-driven features and polishing
+* Dec 2013 [[!traillink assistant/windows text="Windows webapp"]], Linux arm, external special remotes
+* Nov 2013 [[!traillink direct_mode]] guard [[!traillink assistant/upgrading]]
+* Oct 2013 [[!traillink assistant/disaster_recovery]]
+* Sep 2013 [[!traillink assistant/encrypted_git_remotes]]
+
+2012-2013 kickstarted year developing [[git-annex assistant|assistant]]
+
+2010-2011 initial git-annex development
diff --git a/doc/design/v6.mdwn b/doc/design/v6.mdwn
new file mode 100644
index 000000000..3faeb2061
--- /dev/null
+++ b/doc/design/v6.mdwn
@@ -0,0 +1,233 @@
+This page's purpose is to collect and explore plans for a future
+annex.version 6.
+
+There are two major possible changes that could go in v6 or a later
+version that would require a hard migration of git-annex repositories:
+
+1. Changing .git/annex/objects/ paths, as appear in the git-annex symlinks.
+
+2. Changing the layout of the git-annex branch in a substantial way.
+
+## object path changes
+
+Any change in this area requires the user make changes to their master
+branch, any other active branches. Old un-converted tags and other
+historical trees in git would also be broken. This is a pretty bad user
+experience. (And it bloats history with a commit that rewrites everything
+too.
+
+For this reason, any changes in this area have been avoided, going all the
+way back to v2 (2011).
+
+> git-annex had approximately 3 users at the
+> time of that migration, and as one of them, I can say it was a total PITA.
+--[[Joey]]
+
+So, there would need to be significant payoffs to justify this change.
+
+Note that changing the hash directories might also change where objects are
+stored in special remotes. Because repos can be offline or expensive to
+migrate (or both -- Glacier!) any such changes need to keep looking in the
+old locations for backwards compatability.
+
+Possible reasons to make changes:
+
+* It's annoyingly inconsistent that git-annex uses a different hash
+ directory layout for non-bare repository (on a non-crippled filesystem)
+ than is used for bare repositories and some special remotes.
+
+ Users occasionally stumble over this difference when messing with
+ internals. The code is somewhat complicated by it. In some cases,
+ git-annex checks both locations (eg, a bare repo defaults to xxx/yyy
+ but really old ones might use xX/yY for some keys).
+
+ The mixed case hash directories have caused trouble on case-insensative
+ filesystems, although that has mostly been papered over to avoid
+ problems.
+
+* The hash directories, and also the per-key directories
+ can slow down using a repository on a disk (both SSD and spinning).
+
+ <https://github.com/datalad/datalad/issues/32>
+
+ Initial benchmarks suggest that going from xX/yY/KEY/OBJ to xX/yY/OBJ
+ directories would improve speed 3x.
+
+ Presumably, removing the yY would also speed it up, unless there are too
+ many objects and the filesystem gets slow w/o the hash directories.
+
+* Removing a directory level would also reduce disk usage, see [[forum/scalability_with_lots_of_files/]] for more info.
+
+## git-annex branch changes
+
+This might involve, eg, rethinking the xxx/yyy/ hash directories used
+in the git-annex branch.
+
+Would this require a hard version transition? It might be possible to avoid
+one, but then git-annex would have to look in both the old and the new
+place. And if a un-transitioned repo was merged into a transitioned one,
+git-annex would have to look in *both* places, and union merge the two sets
+of data on the fly. This doubles the git-cat-file overhead of every
+operation involving the git-annex branch. So a hard transition would
+probably be best.
+
+Also, note that w/o a hard transition, there's the risk that a old
+git-annex version gets ahold of a git-annex branch created by a new
+git-annex version, and sees only half of the story (the un-transitioned
+files). This could be a very confusing failure mode. It doesn't help that
+the git-annex branch does not currently have any kind of
+version number embedded in it, so the old version of git-annex doesn't even
+have a way to check if it can handle the branch.
+
+Possible reasons to make changes:
+
+* There is a discussion of some possible changes to the hash directories here
+ <https://github.com/datalad/datalad/issues/17#issuecomment-68558319> with a
+ goal of reducing the overhead of the git-annex branch in the overall size
+ of the git-annex repository.
+
+ Removing the second-level hash directories might improve performance.
+ It doesn't save much space when a repository is having incremental changes
+ made to it. However, if millions of annexed objects are being added
+ in a single commit, removing the second-level hash directories does save
+ space; it halves the number of tree
+ objects[1](https://github.com/datalad/datalad/issues/17#issuecomment-68759754).
+
+ Also,
+ <https://github.com/datalad/datalad/issues/17#issuecomment-68569727>
+ suggests using xxx/yyy.log, where one log contains information for
+ multiple keys. This would probably improve performance too due to
+ caching, although in some cases git-annex would have to process extra
+ information to get to the info about the key it wants, which hurts
+ performance. The disk usage change of this method has not yet been
+ quantified.
+
+* Another reason to do it would be improving git-annex to use vector clocks,
+ instead of its current assumption that client's clocks are close enough to
+ accurate. This would presumably change the contents of the files.
+
+* While not a sufficient reason on its own, the best practices for file
+ formats in the git-annex branch has evolved over time, and there are some
+ files that have unusual formats for historical reasons. Other files have
+ modern formats, but their parsers have to cope with old versions that
+ have other formats. A hard transition would provide an opportunity to
+ clean up a lot of that.
+
+## living on the edge
+
+Rather than a hard transition, git-annex could add a v6 mode
+that could be optionally enabled when initing a repo for the first time.
+
+Users who know they need that mode could then turn it one, and get the
+benefits, while everyone else avoids a transition that doesn't benefit them
+much.
+
+There could even be multiple modes, with different tradeoffs depending on
+how the repo will be used, its size, etc. Of course that adds complexity.
+
+But the main problem with this idea is, how to avoid the foot shooting
+result of merging repo A(v5) into repo B(v6)? This seems like it would be
+all to easy for a user to do.
+
+As far as git-annex branch changes go, it might be possible for git-annex
+to paper over the problem by handling both versions in the merged git-annex
+branch, as discussed earlier. But for .git/annex/objects/ changes, there
+does not seem to be a reasonable thing for git-annex to do. When it's
+receiving an object into a mixed v5 and v6 repo, it can't know which
+location that repo expects the object file to be located in. Different
+files in the repo might point to the same object in different locations!
+Total mess. Must avoid this.
+
+Currently, annex.version is a per-local-repo setting. git-annex can't tell
+if two repos that it's merging have different annex.version's.
+
+It would be possible to add a git-annex:version file, which would work for
+git-annex branch merging. Ie, `git-annex merge` could detect if different
+git-annex branches have different versions, and refuse to merge them (or
+upgrade the old one before merging it).
+
+Also, that file could be used by git-annex, to automatically set
+annex.version when auto-initing a clone of a repo that was initted with
+a newer than default version.
+
+But git-anex:version won't prevent merging B/master into A's master.
+That merge can be done by git; nothing in git-annex can prevent it.
+
+What we could do is have a .annex-version flag file in the root of the
+repo. Then git merge would at least have a merge conflict. Note that this
+means inflicting the file on all git-annex repos, even ones used by people
+with no intention of living on the edge. And, it would take quite a while
+until all such repos get updated to contain such a file.
+
+Or, we could just document that if you initialize a repo with experimental
+annex.version, you're living on the edge and you can screw up your repo
+by merging with a repo from an old version.
+
+git-annex fsck could also fix up any broken links that do result from the
+inevitable cases where users ignore the docs.
+
+## version numbers vs configuration
+
+A particular annex.version like 5 encompasses a number of somewhat distinct
+things
+
+* git-annex branch layout
+* .git/annex/objects/ layout
+* other git stuff (like eg, the name of the HEAD branch in direct mode)
+
+If the user is specifying at `git annex init` time some nonstandard things
+they want to make the default meet their use case better, that is more
+a matter of configuration than of picking a version.
+
+For example, we could say that the user is opting out of the second-level
+object hash directories. Or we could say the user is choosing to use v6,
+which is like v5 except with different object hash directory structure.
+
+ git annex init --config annex.objects.hashdirectories 1
+ --config annex.objects.hashlower true
+ git annex init --version 6
+
+The former would be more flexible. The latter is simpler.
+
+The former also lets the user chose *no* hash directories, or
+choose 2 levels of hash directories while using the (v5 default) mixed
+case hashing.
+
+## concrete design
+
+Make git-annex:difference.log be used by newer git-annex versions than v5,
+and by nonstandard configurations.
+
+The file contents will be "timestamp uuid [value, ..]", where value is a
+serialized data type that describes divergence from v5 (since v5 and older
+don't have the git-annex:difference.log file).
+
+So, for example, "[Version 6]" could indicate that v6 is being used. Or,
+"[ObjectHashLower True, ObjectHashDirectories 1, BranchHashDirectories 1]"
+indicate a nonstandard configuration on top of v5 (this might turn out to
+be identical to v6; just make the compare equal and no problem).
+
+git-annex merge would check if it's merging in a git-annex:difference.log from
+another repo that doesn't match the git-annex:difference.log of the local repo,
+and abort. git-annex sync (and the assistant) would check the same, but
+before merging master branches either, to avoid a bad merge there.
+
+The git-annex:difference.log of a local repo could be changed by an upgrade
+or some sort of transition. When this happens, the new value is written
+for the uuid of the local repo. git-annex merge would then refuse to merge
+with remote repos until they were also transitioned.
+
+(There's perhaps some overlap here with the existing
+git-annex:transitions.log, however the current transitions involve
+forgetting history/dead remotes and so can be done repeatedly on a
+repository. Also, the current transitions can be performed on remote
+branches before merging them in; that wouldn't work well for version
+changes since those require other changes in the remote repo.)
+
+Not covered:
+
+* git-merge of other branches, such as master (can be fixed by `git annex
+ fix` or `fsck`)
+* Old versions of git-annex will ignore the version file of course,
+ and so merging such repos using them can result in pain.
+
diff --git a/doc/design/v6/comment_1_b7b4819211910556838ec37bc2b6b37b._comment b/doc/design/v6/comment_1_b7b4819211910556838ec37bc2b6b37b._comment
new file mode 100644
index 000000000..9077eada9
--- /dev/null
+++ b/doc/design/v6/comment_1_b7b4819211910556838ec37bc2b6b37b._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
+ nickname="Richard"
+ subject="comment 1"
+ date="2015-01-22T01:05:56Z"
+ content="""
+My gut feeling for incompatible changes in v6 is to somehow make v5 and below error out on all merges with a v6 repo.
+
+Conversely, v6 git-annex running in v6 repos would transition all data while merging in v5 repos.
+
+As a migration path for existing repos, you could move `git-annex` and `master` to `git-annex_v5` and `master_v5`. Once you are certain all known repos within that repo group are transitioned, either kill the v5 branches automagically or print info on cli/web UI on what needs to be run to get rid of them.
+
+Having several plain git 1+ GiB repos (i.e. without any annex objects), I would love to transition after v6 and the migration paths have been hung a month or three to dry.
+"""]]
diff --git a/doc/design/v6/comment_2_8f35254d2cd5d0c273d5392ddd857c2d._comment b/doc/design/v6/comment_2_8f35254d2cd5d0c273d5392ddd857c2d._comment
new file mode 100644
index 000000000..ef050ac93
--- /dev/null
+++ b/doc/design/v6/comment_2_8f35254d2cd5d0c273d5392ddd857c2d._comment
@@ -0,0 +1,24 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnx8kHW66N3BqmkVpgtXDlYMvr8TJ5VvfY"
+ nickname="Yaroslav"
+ subject="comment 2"
+ date="2015-01-26T19:46:12Z"
+ content="""
+\"... merging repo A(v5) into repo B(v6)? This seems like it would be all to easy for a user to do.\"
+
+it would be easy if two separate repos are inited separately of different versions and then merged. But how frequent could such situation arise? I don't think that it is not that common actually in non git-annex assistant initialized repositories, especially if \"v6\" (or some other custom) layout would be non-default.
+
+This also somewhat reflects upon \"When it's receiving an object into a mixed v5 and v6 repo, it can't know which location that repo expects the object file to be located in.\" -- how plausible/frequent would be to see a mixed v5/6 repo?
+
+\".annex-version flag file\" -- I think it is a good idea. (may be even better an .annex/version directory/file to reserve for possibly future other branch-specific, thus not for git-annex branch additions). Indeed it would take time for repos to acquire it, but imho it is ok, if added automagically by new git-annex versions. Also it is a tiny price to pay for users who do not really care about \"living on the edge\". But it also might better be coupled with having git-annex:version (i.e. version file under git-annex branch) describing layout of the git-annex branch since those two are somewhat independent, right?
+
+Also a wild idea to mitigate inconvenience for users happen they migrate repositories from old to new formats: to provide 'git annex compat-layout [version]' command which, for files with content, would generate symlinks to files in new format to locations in old, with some command to clean them up later on (e.g. 'git annex compat-layout --cleanup'). Although inefficient per-se it could be a big convenience since would eliminate need to \"migrate/rewrite\" entire history, while still making it possible to get access to previous versions. With a handling in hooks could be automated to even hide that from users entirely. or is there a big culprit I don't see?
+
+
+\"version numbers vs configuration\"
+
+having flexibility of configurations, possibly with versions simply providing enumerations to some of them, might be a great feature to have in the long run. Not sure though if it would not blow up complexity :-/
+
+Overall -- if complete transition to improved/unified v6 is too big of undertaker, allowing for custom non-default configurations while sticking to v5 as the default one and forbidding merges between different versions, could be sufficient to scale up for atypical large uses. If everyone to migrate to v6 -- more optimal layout should be well thought through to be worthwhile undertaking.
+
+"""]]
diff --git a/doc/devblog.mdwn b/doc/devblog.mdwn
index aa66b0100..73bc6dd70 100644
--- a/doc/devblog.mdwn
+++ b/doc/devblog.mdwn
@@ -1,5 +1,4 @@
-Work on git-annex is [crowdfunded](https://campaign.joeyh.name/).
-Joey blogs about his progress here on a semi-daily basis.
+Joey blogs about his work here on a semi-daily basis.
[[!sidebar content="""
[[!calendar type="month" pages="page(devblog/*)"]]
diff --git a/doc/devblog/day_-4__forgetting/comment_8_3f7045a00905b4287d950b08d5a77a82._comment b/doc/devblog/day_-4__forgetting/comment_8_3f7045a00905b4287d950b08d5a77a82._comment
new file mode 100644
index 000000000..f0ba50990
--- /dev/null
+++ b/doc/devblog/day_-4__forgetting/comment_8_3f7045a00905b4287d950b08d5a77a82._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="stp"
+ ip="188.193.207.34"
+ subject="Any update on cleaning up commands?"
+ date="2014-03-21T16:32:43Z"
+ content="""
+Is there any update on cleaning up object/file references to objects/content not at all present and lost. I would love my git annex fsck --all to show current failures and not these old files all the time.
+Thanks
+"""]]
diff --git a/doc/devblog/day_-4__forgetting/comment_9_d9121a5172f02df63364f19eae87d011._comment b/doc/devblog/day_-4__forgetting/comment_9_d9121a5172f02df63364f19eae87d011._comment
new file mode 100644
index 000000000..a104c2dd2
--- /dev/null
+++ b/doc/devblog/day_-4__forgetting/comment_9_d9121a5172f02df63364f19eae87d011._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="stp"
+ ip="24.134.205.34"
+ subject="Any update"
+ date="2014-10-01T12:47:47Z"
+ content="""
+Any update?
+"""]]
diff --git a/doc/devblog/day_133__db_and_bugfixes.mdwn b/doc/devblog/day_133__db_and_bugfixes.mdwn
index b844708dc..5ba1df20e 100644
--- a/doc/devblog/day_133__db_and_bugfixes.mdwn
+++ b/doc/devblog/day_133__db_and_bugfixes.mdwn
@@ -4,7 +4,7 @@ several stages, starting with using it for generating views, and ending(?)
with using it for direct mode file mappings.
Not sure I'm ready to dive into that yet, so instead spent the rest of the
-day working on small bugfixes and improvemnts. Only two significant ones..
+day working on small bugfixes and improvements. Only two significant ones..
Made the webapp use a constant time string comparison (from `securemem`)
to check if its auth token is valid. This could help avoid a potential
diff --git a/doc/devblog/day_139-140__traveling.mdwn b/doc/devblog/day_139-140__traveling.mdwn
new file mode 100644
index 000000000..3025e45b5
--- /dev/null
+++ b/doc/devblog/day_139-140__traveling.mdwn
@@ -0,0 +1,17 @@
+Yesterday coded up one nice improvement on the plane -- `git annex unannex`
+(and `uninit`) is now tons faster. Before it did a git commit after every
+file processed, now there's just 1 commit at the end. This required using
+some locking to prevent the `pre-commit` hook from running in a confusing
+state.
+
+Today. LibrePlanet and a surprising amount of development. I've
+added [[tips/file_manager_integration]], only for Nautilus so far.
+The main part of this was adding --notify-start and --notify-finish, which
+use dbus desktop notifications to provide feedback.
+
+(Made possible thanks to Max Rabkin for updating
+[fdo-notify](http://hackage.haskell.org/package/fdo-notify) to use the
+new dbus library, and ion for developing the initial Nautilus integration
+scripts.)
+
+Today's work and LibrePlanet visit was sponsored by Jürgen Lüters.
diff --git a/doc/devblog/day_141__f-droid_sprint.mdwn b/doc/devblog/day_141__f-droid_sprint.mdwn
new file mode 100644
index 000000000..2a9e30b55
--- /dev/null
+++ b/doc/devblog/day_141__f-droid_sprint.mdwn
@@ -0,0 +1,3 @@
+Attended at the f-droid sprint at LibrePlanet, and have been getting a
+handle on how their build server works with an eye toward adding git-annex
+to it. Not entirely successful getting vagrant to build an image yet.
diff --git a/doc/devblog/day_141__f-droid_sprint/comment_1_1cc76207020ac478747117c76d7b5f9c._comment b/doc/devblog/day_141__f-droid_sprint/comment_1_1cc76207020ac478747117c76d7b5f9c._comment
new file mode 100644
index 000000000..9971f33da
--- /dev/null
+++ b/doc/devblog/day_141__f-droid_sprint/comment_1_1cc76207020ac478747117c76d7b5f9c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmJuOOkYYguRbWhXzxihIPBavxITJIMyww"
+ nickname="Matt"
+ subject="Excellent News"
+ date="2014-03-26T14:14:35Z"
+ content="""
+It will be great to see git-annex on f-droid!
+"""]]
diff --git a/doc/devblog/day_142__digging_out.mdwn b/doc/devblog/day_142__digging_out.mdwn
new file mode 100644
index 000000000..fc2ceea36
--- /dev/null
+++ b/doc/devblog/day_142__digging_out.mdwn
@@ -0,0 +1,13 @@
+Catching up on conference backlog. 36 messages backlog remains.
+
+Fixed `git-annex-shell configlist` to automatically initialize a
+git remote when a git-annex branch had been pushed to it. This is necessary
+for gitolite to be easy to use, and I'm sure it used to work.
+
+Updated the Debian backport and made a Debian package of the
+fdo-notify haskell library used for notifications.
+
+Applied a patch from Alberto Berti to fix support for tahoe-lafs
+1.10.
+
+And various other bug fixes and small improvements.
diff --git a/doc/devblog/day_143__foolish_hiatus.mdwn b/doc/devblog/day_143__foolish_hiatus.mdwn
new file mode 100644
index 000000000..f6763dff3
--- /dev/null
+++ b/doc/devblog/day_143__foolish_hiatus.mdwn
@@ -0,0 +1,20 @@
+Last week's trip was productive, but I came home more tired than I
+realized. Found myself being snappy & stressed, so I have been on break.
+
+I did do a little git-annex dev in the past 5 days. On Saturday I
+implemented [[todo/preferred_content]] (although without the active checks
+I think it probably ought to have.) Yesterday I had a long conversation
+with the Tahoe developers about improving git-annex's tahoe integration.
+
+Today, I have been wrapping up [building propellor](http://joeyh.name/code/propellor/).
+To test its docker support, I used propellor to build and deploy a
+container that is a git-annex autobuilder. I'll be replacing the old
+autobuilder setup with this shortly, and expect to also publish docker
+images for git-annex autobuilders, so anyone who wants to can run their
+own autobuilder really easily.
+
+---
+
+I have April penciled in on the roadmap as the month to do telehash.
+I don't know if telehash-c is ready for me yet, but it has had a lot of
+activity lately, so this schedule may still work out!
diff --git a/doc/devblog/day_144__catching_up.mdwn b/doc/devblog/day_144__catching_up.mdwn
new file mode 100644
index 000000000..52e25f0d5
--- /dev/null
+++ b/doc/devblog/day_144__catching_up.mdwn
@@ -0,0 +1,12 @@
+Got caught up on all recent bugs and questions, although I still have a
+backlog of 27 older things that I really should find time for.
+
+Fixed a couple of bugs. One was that the assistant set up ssh
+`authorized_keys` that didn't work with the fish shell.
+
+Also got caught up on the current state of telehash-c. Have not quite
+gotten it to work, but it seems pretty close to being able to see it do
+something useful for the first time.
+
+Pushing out a release this evening with a good number of changes left over
+from March.
diff --git a/doc/devblog/day_144__catching_up/comment_1_311a7245dd12f1a7e432168d16041348._comment b/doc/devblog/day_144__catching_up/comment_1_311a7245dd12f1a7e432168d16041348._comment
new file mode 100644
index 000000000..f13ed82ae
--- /dev/null
+++ b/doc/devblog/day_144__catching_up/comment_1_311a7245dd12f1a7e432168d16041348._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="70.82.37.38"
+ subject="comment 1"
+ date="2014-04-02T21:28:15Z"
+ content="""
+awesome! can't wait to see telehash land! :)
+"""]]
diff --git a/doc/devblog/day_145__a_plan.mdwn b/doc/devblog/day_145__a_plan.mdwn
new file mode 100644
index 000000000..5f18ab806
--- /dev/null
+++ b/doc/devblog/day_145__a_plan.mdwn
@@ -0,0 +1,16 @@
+I have a plan for this month. While waiting for telehash, I am going to
+build [[design/git-remote-daemon]], which is the infrastructure git-annex
+will need, to use telehash. Since it's generalized to support other protocols,
+I'll be able to start using it before telehash is ready.
+
+In fact, I plan to first make it work with ssh:// remotes, where
+it will talk with git-annex-shell on the remote server. This will let the
+assistant immediately know when the server has received a commit, and that
+will simplify using the assistant with a ssh server -- no more need for
+XMPP in this case! It should also work with git-remote-gcrypt encrypted
+repositories, so also covers the case of an untrusted ssh server where
+everything is end-to-end encrypted.
+
+Building the git-annex-shell part of this should be pretty easy, and
+building enough of the [[design/git-remote-daemon]] design to support it
+also not hard.
diff --git a/doc/devblog/day_145__a_plan/comment_1_c0ceea77443be1172527ed8549f000a4._comment b/doc/devblog/day_145__a_plan/comment_1_c0ceea77443be1172527ed8549f000a4._comment
new file mode 100644
index 000000000..6bcc18bc2
--- /dev/null
+++ b/doc/devblog/day_145__a_plan/comment_1_c0ceea77443be1172527ed8549f000a4._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="2001:1928:1:9::1"
+ subject="look at mosh"
+ date="2014-04-04T14:07:51Z"
+ content="""
+you may want to look at how \"mosh\" handles authentication: http://mosh.mit.edu/
+
+from what i understand, it negociates an authentication token using SSH and then uses that to encrypt and authenticate UDP traffic. seems like similar issues here...
+"""]]
diff --git a/doc/devblog/day_146__halfway_to_git-remote-daemon.mdwn b/doc/devblog/day_146__halfway_to_git-remote-daemon.mdwn
new file mode 100644
index 000000000..977123f55
--- /dev/null
+++ b/doc/devblog/day_146__halfway_to_git-remote-daemon.mdwn
@@ -0,0 +1,17 @@
+Added `git-annex-shell notifychanges` command, which uses inotify (etc)
+to detect when git refs have changed, and informs the caller about the
+changes. This was relatively easy to write; I reused the existing inotify
+code, and factored out code for simple line-based protocols from the
+external special remote protocol. Also implemented the git-remote-daemon
+protocol. 200 lines of code total.
+
+Meanwhile, Johan Kiviniemi improved the dbus notifications, making them
+work on Ubuntu and adding icons. Awesome!
+
+There's going to be some fun to get git-annex-shell upgraded so that the
+assistant can use this new notify feaure. While I have not started working
+on the assistant side of this, you can get a jump by installing today's
+upcoming release of git-annex. I had to push this out early because there
+was a bug that prevented the webapp from running on non-gnome systems. Since
+all changes in this release only affected Linux, today's release will be a
+Linux-only release.
diff --git a/doc/devblog/day_147__git-annex_remotedaemon.mdwn b/doc/devblog/day_147__git-annex_remotedaemon.mdwn
new file mode 100644
index 000000000..0e500ec40
--- /dev/null
+++ b/doc/devblog/day_147__git-annex_remotedaemon.mdwn
@@ -0,0 +1,5 @@
+Built `git-annex remotedaemon` command today. It's buggy, but it already
+works! If you have a new enough git-annex-shell on a remote server, you can
+run "git annex remotedaemon" in a git-annex repository, and it will notice
+any pushes that get made to that remote from any other clone, and pull down
+the changes.
diff --git a/doc/devblog/day_148__too_many_documents.mdwn b/doc/devblog/day_148__too_many_documents.mdwn
new file mode 100644
index 000000000..3cb5e5baf
--- /dev/null
+++ b/doc/devblog/day_148__too_many_documents.mdwn
@@ -0,0 +1,8 @@
+Various bug triage today. Was not good for much after shuffling paper for
+the whole first part of the day, but did get a few little things done.
+
+Re <http://heartbleed.com/>, git-annex does not use OpenSSL itself,
+but when using XMPP, the remote server's key could have been intercepted
+using this new technique. Also, the git-annex autobuilds and this website
+are served over https -- working on generating new https certificates now.
+Be safe out there..
diff --git a/doc/devblog/day_149__remote_control_working.mdwn b/doc/devblog/day_149__remote_control_working.mdwn
new file mode 100644
index 000000000..56c108b7b
--- /dev/null
+++ b/doc/devblog/day_149__remote_control_working.mdwn
@@ -0,0 +1,15 @@
+[[design/git-remote-daemon]] is tied into the assistant, and working!
+Since it's not really ready yet, this is in the `remotecontrol` branch.
+
+My test case for this is two client repositories, both running
+the assistant. Both have a bare git repository, accessed over ssh,
+set up as their only remote, and no other way to keep in touch with
+one-another. When I change a file in one repository,
+the other one instantly notices the change and syncs.
+
+This is gonna be *awesome*. Much less need for XMPP. Windows will be fully
+usable even without XMPP. Also, most of the work I did today will be fully
+reused when the telehash backend gets built. The telehash-c developer is
+making noises about it being almost ready for use, too!
+
+Today's work was sponsored by Frédéric Schütz.
diff --git a/doc/devblog/day_149__signal.mdwn b/doc/devblog/day_149__signal.mdwn
new file mode 100644
index 000000000..2bcb01a72
--- /dev/null
+++ b/doc/devblog/day_149__signal.mdwn
@@ -0,0 +1,16 @@
+[[!meta title="day 150 signal"]]
+
+The git-remote-daemon now robustly handles loss of signal, with
+reconnection backoffs. And it detects if the remote ssh server has too
+old a version of git-annex-shell and the webapp will display a warning
+message.
+
+[[!img /assistant/connection.png]]
+
+Also, made the webapp show a network signal bars icon next to both
+ssh and xmpp remotes that it's currently connected with. And, updated the
+webapp's nudging to set up XMPP to now suggest either an XMPP or a ssh remote.
+
+I think that the `remotecontrol` branch is nearly ready for merging!
+
+Today's work was sponsored by Paul Tagliamonte.
diff --git a/doc/devblog/day_151__birthday_bug.mdwn b/doc/devblog/day_151__birthday_bug.mdwn
new file mode 100644
index 000000000..251bfb935
--- /dev/null
+++ b/doc/devblog/day_151__birthday_bug.mdwn
@@ -0,0 +1,18 @@
+Pushed out a new release today, fixing two important bugs, followed by a
+second release which fixed the bugs harder.
+
+Automatic upgrading was broken on OSX. The webapp will tell you upgrading
+failed, and you'll need to manually download the .dmg and install it.
+
+With help from Maximiliano Curia, finally tracked down a bug I have been
+chasing for a while where the assistant would start using a lot of CPU
+while not seeming to be busy doing anything. Turned out to be triggered by
+a scheduled fsck that was configured to run once a month with no particular
+day specified.
+
+That bug turned out to affect users who first scheduled such a fsck job
+after the 11th day of the month. So I expedited putting a release out to
+avoid anyone else running into it starting tomorrow.
+
+(Oddly, the 11th day of this month also happens to be my birthday. I did not
+expect to have to cut 2 releases today..)
diff --git a/doc/devblog/day_152__more_ssh_connection_caching.mdwn b/doc/devblog/day_152__more_ssh_connection_caching.mdwn
new file mode 100644
index 000000000..ad472b5e5
--- /dev/null
+++ b/doc/devblog/day_152__more_ssh_connection_caching.mdwn
@@ -0,0 +1,37 @@
+Made ssh connection caching be used in several more places. `git annex
+sync` will use it when pushing/pulling to a remote, as will the assistant.
+And `git-annex remotedaemon` also uses connection caching. So, when
+a push lands on a ssh remote, the assistant will immediately notice it, and
+pull down the change over the same TCP connection used for the
+notifications.
+
+This was a bit of a pain to do. Had to set `GIT_SSH=git-annex` and then
+when git invokes git-annex as ssh, it runs ssh with the connection caching
+parameters.
+
+Also, improved the network-manager and wicd code, so it detects when a
+connection has gone down. That propagates through to the remote-daemon,
+which closes all ssh connections. I need to also find out how to detect
+network connections/disconnections on OSX..
+
+Otherwise, the remote-control branch seems ready to be merged. But I want
+to test it for a while first.
+
+----
+
+Followed up on yesterday's bug with writing some test cases for
+Utility.Scheduled, which led to some more bug fixes. Luckily nothing
+I need to rush out a release over. In the end, the code got a lot
+simpler and clearer.
+
+[[!format haskell """
+-- Check if the new Day occurs one month or more past the old Day.
+oneMonthPast :: Day -> Day -> Bool
+new `oneMonthPast` old = fromGregorian y (m+1) d <= new
+ where
+ (y,m,d) = toGregorian old
+"""]]
+
+-------
+
+Today's work was sponsored by Asbjørn Sloth Tønnesen.
diff --git a/doc/devblog/day_153__remotedaemon_has_landed.mdwn b/doc/devblog/day_153__remotedaemon_has_landed.mdwn
new file mode 100644
index 000000000..5033b32b2
--- /dev/null
+++ b/doc/devblog/day_153__remotedaemon_has_landed.mdwn
@@ -0,0 +1,10 @@
+After fixing a few bugs in the `remotecontrol` branch, It's landed in
+`master`. Try a daily build today, and see if the assistant can keep in
+sync using nothing more than a remote ssh repository!
+
+So, now all the groundwork for telehash is laid too. I only need a
+telehash library to start developing on top of. Development on telehash-c
+is continuing, but I'm more excited that
+[htelehash](https://github.com/alanz/htelehash/tree/v2)
+has been revived and is being updated to the v2 protocol, seemingly quite
+quickly.
diff --git a/doc/devblog/day_153__remotedaemon_has_landed/comment_1_f19ae6b3d6f33a68e4ffe0c32f788745._comment b/doc/devblog/day_153__remotedaemon_has_landed/comment_1_f19ae6b3d6f33a68e4ffe0c32f788745._comment
new file mode 100644
index 000000000..5ff090ffd
--- /dev/null
+++ b/doc/devblog/day_153__remotedaemon_has_landed/comment_1_f19ae6b3d6f33a68e4ffe0c32f788745._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkC0W3ZQERUaTkHoks6k68Tsp1tz510nGo"
+ nickname="Georg"
+ subject=" remotedaemon in pre-built tarballs"
+ date="2014-04-17T07:40:25Z"
+ content="""
+Hi Joey,
+
+can you tell me when the pre-built Linux tarballs will include the remotedaemon?
+Are they updated on a daily basis?
+
+Best regards, Georg
+"""]]
diff --git a/doc/devblog/day_153__remotedaemon_has_landed/comment_2_fbf0c50f772e958af638d2b72dac73f5._comment b/doc/devblog/day_153__remotedaemon_has_landed/comment_2_fbf0c50f772e958af638d2b72dac73f5._comment
new file mode 100644
index 000000000..5f81fde5c
--- /dev/null
+++ b/doc/devblog/day_153__remotedaemon_has_landed/comment_2_fbf0c50f772e958af638d2b72dac73f5._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 2"
+ date="2014-04-17T19:31:30Z"
+ content="""
+The daily builds are updated on a daily basis, so already include it.
+
+The release builds are updated on each release, and so do not.
+"""]]
diff --git a/doc/devblog/day_154__catching_up.mdwn b/doc/devblog/day_154__catching_up.mdwn
new file mode 100644
index 000000000..7c49a788e
--- /dev/null
+++ b/doc/devblog/day_154__catching_up.mdwn
@@ -0,0 +1,13 @@
+Worked through message backlog today. Got it down from around 70 to just
+37. Was able to fix some bugs, including making the webapp start up more
+robustly in some misconfigurations.
+
+Added a new `findref` command which may be useful in a git `update` hook to
+deny pushes of refs if the annexed content has not been sent first.
+
+----
+
+BTW, I also added a new `reinit` command a few days ago, which can be
+useful if you're cloning back a deleted repository.
+
+Also a few days ago, I made `uninit` a *lot* faster.
diff --git a/doc/devblog/day_155__missing_bits.mdwn b/doc/devblog/day_155__missing_bits.mdwn
new file mode 100644
index 000000000..aa8fd9d4e
--- /dev/null
+++ b/doc/devblog/day_155__missing_bits.mdwn
@@ -0,0 +1,27 @@
+Sometimes you don't notice something is missing for a long time until
+it suddenly demands attention. Like today.
+
+Seems the webapp never had a way to stop using XMPP and delete the XMPP
+password. So I added one.
+
+The new support for instantly noticing changes on a ssh remote forgot to
+start up a connection to a new remote after it was created. Fixed that.
+
+(While doing some testing on Android for unrelated reasons, I noticed that
+my android tablet was pushing photos to a ssh server and my laptop
+immediately noticed and downloaded them from tere, which is an excellent
+demo. I will deploy this on my trip in Brazil next week. Yes, I'm spending
+2 weeks in Brazil with git-annex users; more on this later.)
+
+Finally, it turns out that "installing" git-annex from the standalone
+tarball, or DMG, on a server didn't make it usable by the webapp. Because
+git-annex shell is not in PATH on the server, and indeed git and rsync may
+not be in PATH either if they were installed with the git-annex bundle.
+Fixed this by making the bundle install a ~/.ssh/git-annex-wrapper, which
+the webapp will detect and use.
+
+Also, quite a lot of other bug chasing activity.
+
+----
+
+Today's work was sponsored by Thomas Koch.
diff --git a/doc/devblog/day_155__missing_bits/comment_1_76424498600ba603946035efffb88023._comment b/doc/devblog/day_155__missing_bits/comment_1_76424498600ba603946035efffb88023._comment
new file mode 100644
index 000000000..d9ee528e0
--- /dev/null
+++ b/doc/devblog/day_155__missing_bits/comment_1_76424498600ba603946035efffb88023._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="72.0.72.144"
+ subject="comment 1"
+ date="2014-04-20T23:58:51Z"
+ content="""
+thanks!
+"""]]
diff --git a/doc/devblog/day_156__release_day.mdwn b/doc/devblog/day_156__release_day.mdwn
new file mode 100644
index 000000000..7a312b234
--- /dev/null
+++ b/doc/devblog/day_156__release_day.mdwn
@@ -0,0 +1,14 @@
+I hope this will be a really good release. Didn't get all the way to
+[[design/assistant/telehash]] this month, but the remotedaemon is pretty sweet. Updated [[design/roadmap]]
+pushes telehash back again.
+
+The files in this release are now gpg signed, after recently moving the
+downloads site to a dedicated server, which has a dedicated gpg key.
+You can verify the detached signatures as an additional security check
+over trusting SSL. The automatic upgrade code doesn't check the gpg
+signatures yet.
+
+Sören Brunk has ported the webapp to Bootstrap 3.
+<https://github.com/brunksn/git-annex/tree/bootstrap3>
+The branch is not ready for merging yet (it would break the Debian stable
+backports), but that was a nice surprise.
diff --git a/doc/devblog/day_157__upgrade_checking.mdwn b/doc/devblog/day_157__upgrade_checking.mdwn
new file mode 100644
index 000000000..ff70b8093
--- /dev/null
+++ b/doc/devblog/day_157__upgrade_checking.mdwn
@@ -0,0 +1,22 @@
+Now git-annex's self-upgrade code will check the gpg signature of a
+new version before using it.
+
+To do this I had to include the gpg public keys into the
+git-annex distribution, and that raised the question of which public keys
+to include. Currently I have both the dedicated git-annex distribution
+signing key, and my own gpg key as a backup in case I somehow misplace the
+former.
+
+Also spent a while looking at the recent logs on the web server. There
+seem to be around 600 users of the assistant with
+upgrade checking enabled. That breaks down to 68% Linux amd64, 20% Linux
+i386, 11% OSX Mavericks, and 0.5% OSX Lion.
+
+Most are upgrading successfully, but there are a few that seem to
+repeatedly fail for some reason. (Not counting the OSX Lion, which will
+probably never find an upgrade available.) I hope that someone who is
+experiencing an upgrade failure gets in touch with some debug logs.
+
+In the same time period, around 450 unique hosts manually downloaded a
+git-anex distribution. Also compare with Debian popcon, which has 1200
+reporting git-annex users.
diff --git a/doc/devblog/day_158__enroute_to_Brazil.mdwn b/doc/devblog/day_158__enroute_to_Brazil.mdwn
new file mode 100644
index 000000000..cd9830f2e
--- /dev/null
+++ b/doc/devblog/day_158__enroute_to_Brazil.mdwn
@@ -0,0 +1,10 @@
+Next month the roadmap has me working on [[design/assistant/sshpassword]].
+That will be a nice UI improvement and I'd be very surprised if it takes
+more than a week, which is great.
+
+Getting a jump on it today, investigating using `SSH_ASKPASS`. It seems this
+will even work on Windows! Preliminary design in [[design/assistant/sshpassword]].
+
+Time to get on a plane to a plane to a plane to Brasilia!
+
+[[!meta date="Fri, 25 Apr 2014 16:32:36 -0400"]]
diff --git a/doc/devblog/day_159__tmp_file_cleanup.mdwn b/doc/devblog/day_159__tmp_file_cleanup.mdwn
new file mode 100644
index 000000000..d1ef58109
--- /dev/null
+++ b/doc/devblog/day_159__tmp_file_cleanup.mdwn
@@ -0,0 +1,12 @@
+Today was mostly spent driving across Brazil, but I had energy this evening
+for a little work on git-annex.
+
+Made the assistant delete old temporary files on startup. I've had
+scattered reports of a few users whose `.git/annex/tmp` contained many
+files, apparently put there by the assistant when it locks down a file
+prior to annexing it. That seems it could possibly be a bug -- or it could
+just be unclean shutdowns interrupting the assistant. Anyway, this will
+deal with any source of tmp cruft, and I made sure to preserve
+tmp files for partially downloaded content.
+
+[[!meta date="Sun, 27 Apr 2014 22:12:55 -0300"]]
diff --git a/doc/devblog/day_160__.mdwn b/doc/devblog/day_160__.mdwn
new file mode 100644
index 000000000..2c20d2f0d
--- /dev/null
+++ b/doc/devblog/day_160__.mdwn
@@ -0,0 +1,20 @@
+Reviewed Sören's updated bootstrap3 patch, which appeared while I was
+[traveling](http://joeyh.name/blog/entry/the_real_Brazil/). Sören
+kindly fixed it to work with Debian stable's old version of Yesod,
+which was quite a lot of work. The new new bootstrap3 UI looks nice,
+found a few minor issues, but expect to be able to merge it soon.
+
+Started on [[design/assistant/sshpassword]] groundwork. Added a simple
+password cache to the assistant, with automatic expiration, and made
+git-annex be able to be run by ssh as the `SSH_ASKPASS` program.
+
+The main difficulty will be changing the webapp's UI to prompt for the ssh
+password when one is needed. There are several code paths in ssh remote
+setup where a password might be needed. Since the cached password expires,
+it may need to be prompted for at any of those points. Since a new page is
+loading, it can't pop up a prompt on the current page; it needs to redirect
+to a password prompt page and then redirect back to the action that needed
+the password. ...At least, that's one way to do it.
+I'm going to sleep on it and hope I dream up a better way.
+
+[[!meta date="Tue, 29 Apr 2014 18:33:53 -0400"]]
diff --git a/doc/devblog/day_161__routing_design.mdwn b/doc/devblog/day_161__routing_design.mdwn
new file mode 100644
index 000000000..9c9e65d17
--- /dev/null
+++ b/doc/devblog/day_161__routing_design.mdwn
@@ -0,0 +1,13 @@
+I've moved out of implementation mode (unable to concentrate enough), and
+into high-level design mode.
+
+[[Syncing efficiency|design/assistant/syncing/efficiency]] has been an open TODO for years,
+to find a way to avoid flood filling the network, and find more efficient
+ways to ensure data only gets to the nodes that want it. Relatedly,
+Android devices often need a way to mark individual files they want to have.
+Had a [very productive discussion with Vince and Fernao](http://joeyh.name/blog/entry/who_needs_whiteboards_when_you_have_strange_seed_pods_from_the_jungle/)
+and I think we're heading toward a design that will address both these
+needs, as well as some more Brazil-specific use cases, about which more
+later.
+
+Today's work was sponsored by Casa do Boneco.
diff --git a/doc/devblog/day_162__routing_sim_and_massive_contribution_landed.mdwn b/doc/devblog/day_162__routing_sim_and_massive_contribution_landed.mdwn
new file mode 100644
index 000000000..a8f5313ac
--- /dev/null
+++ b/doc/devblog/day_162__routing_sim_and_massive_contribution_landed.mdwn
@@ -0,0 +1,17 @@
+Sören Brunk's massive bootstrap 3 patch has landed! This is a 43 thousand
+line diff, with 2 thousand lines after the javascript and CSS libraries are
+filtered out. Either way, the biggest patch contributed by anyone to
+git-annex so far, and excellent work.
+
+Meanwhile, I built a [[haskell program|design/assistant/syncing/simroutes.hs]] to simulate
+a network of highly distributed git-annex nodes with ad-hoc connections and
+the selective file syncing algorythm now documented at the bottom of
+[[design/assistant/syncing/efficiency]].
+
+Currently around 33% of requested files never get to their destination
+in this simulation, but this is probably because its network is randomly
+generated, and so contains disconnected islands. So next, some data entry,
+from a map that involves an Amazon not in .com, dotted with names of people
+I have recently met... :)
+
+<a href="https://downloads.kitenet.net/git-annex/mapa/mapa.jpg"><img src="https://downloads.kitenet.net/git-annex/mapa/mapa.jpg" width=1024 height=768></a>
diff --git a/doc/devblog/day_163__request_and_routing_design.mdwn b/doc/devblog/day_163__request_and_routing_design.mdwn
new file mode 100644
index 000000000..c11664a06
--- /dev/null
+++ b/doc/devblog/day_163__request_and_routing_design.mdwn
@@ -0,0 +1,3 @@
+I have a preliminary design for [[design/requests_routing]]. Won't be
+working on it immediately, but simulations show it can work well in a large
+ad-hoc network.
diff --git a/doc/devblog/day_164__back.mdwn b/doc/devblog/day_164__back.mdwn
new file mode 100644
index 000000000..48a6ce6f0
--- /dev/null
+++ b/doc/devblog/day_164__back.mdwn
@@ -0,0 +1,17 @@
+My backlog is massive -- 181 items to answer. Will probably take the rest
+of the month to get caught back up. Rather than digging into that yet,
+spent today working on the webapp's ssh password prompting.
+
+I simplified it so the password is entered on the same form as the rest
+of the server's information. That made the UI easy to build, but
+means that when a user already has a ssh key they want to use, they need
+to select "existing ssh key"; the webapp no longer probes to automatically
+detect that case.
+
+Got the ssh password prompting in the webapp basically working, and it's a
+*really* nice improvement! I even got it to work on Windows (eventually...).
+It's still only in the `sshpassword` branch, since I need to test it more
+and probably fix some bugs. In particular, when enabling a remote that
+already exists, I think it never prompts for the password yet.
+
+Today's work was sponsored by Nicola Chiapolini.
diff --git a/doc/devblog/day_165__sshpassword_merged.mdwn b/doc/devblog/day_165__sshpassword_merged.mdwn
new file mode 100644
index 000000000..4479df733
--- /dev/null
+++ b/doc/devblog/day_165__sshpassword_merged.mdwn
@@ -0,0 +1,18 @@
+Spent the day testing the sshpasswd branch. A few interesting things:
+
+* I was able to get rid of 10 lines of Windows specific code for
+ rsync.net, which had been necessary for console ssh password prompting to
+ work. Yay!
+* git-remote-gcrypt turned out to be broken when there is no controlling
+ tty. --no-tty has to be passed to gpg to avoid it falling over in this
+ case, even when a gpg agent is available to be used. I fixed this with
+ a new release of git-remote-gcrypt.
+
+Mostly the new branch just worked! And is merged...
+
+Merged a patch from Robie Basak that adds a new special remote that's sort
+of like bup but supports deletion: [[special_remotes/ddar]]
+
+Backlog: 172
+
+Today's work was sponsored by Andrew Cant.
diff --git a/doc/devblog/day_166__catching_up.mdwn b/doc/devblog/day_166__catching_up.mdwn
new file mode 100644
index 000000000..51878562e
--- /dev/null
+++ b/doc/devblog/day_166__catching_up.mdwn
@@ -0,0 +1,40 @@
+Powered through the backlog today, and got it down to 67! Probably most of
+the rest is the hard ones though.
+
+A theme today was: It's stupid hard to get git-annex-shell installed into
+PATH. While that should be the simplest thing in the world, I'm pinned
+between two problems:
+
+1. There's no single portable package format, so all the decades of
+ development nice ways to get things into PATH don't work for everybody.
+2. bash provides not a single dotfile that will work in all circumstances
+ to configure PATH. In particular, "ssh $host git-annex-shell" causes bash
+ to helpfully avoid looking at any dotfiles at all.
+
+Today's flailing to work around that inluded:
+
+* Merged a patch from Fraser Tweedale to allow `git config remote.origin.annex-shell /not/in/path/git-annex-shell`
+* Merged a patch from Justin Lebar to allow symlinking the git-annex-shell
+ etc from the standalone tarball to a directory that is in PATH. (Only
+ on Linux, not OSX yet.)
+* Improved the warning message git-annex prints when a remote server does
+ not have git-annex-shell in PATH, suggesting some things the user could
+ do to try to fix it.
+
+I've found out why OSX machines were retrying upgrades repeatedly. The
+version in the .info file did not match the actual git-annex version for
+OSX. I've fixed the info file version, but will need to come up with a
+system to avoid such mismatches.
+
+Made a few other fixes. A notable one is that dragging and dropping
+repositories in the webapp to reorder the list (and configure costs)
+had been broken since November.
+
+git-annex 5.20140421 finally got into Debian testing today, so I updated
+the backport. I recommend upgrading, especially if you're using the
+assistant with a ssh remote, since you'll get all of last month's nice
+features that make XMPP unnecessary in that configuration.
+
+----
+
+Today's work was sponsored by Geoffrey Irving.
diff --git a/doc/devblog/day_167__growing_the_community_of_git-annex_contributors.mdwn b/doc/devblog/day_167__growing_the_community_of_git-annex_contributors.mdwn
new file mode 100644
index 000000000..1408e13e2
--- /dev/null
+++ b/doc/devblog/day_167__growing_the_community_of_git-annex_contributors.mdwn
@@ -0,0 +1,11 @@
+Released git-annex 5.20140517 today. The changelog for this release
+is very unusual, because it's full of contributions from others! There are
+as many patches from others in this release as git-annex got in the first
+entire two years of its existence.
+
+I'd like to keep that going. Also, I could really use help triaging bug
+reports right now. So I have updated the **[[contribute]]** page with more
+info about easy ways to contribute to git-annex. If you read this devblog,
+you're an ideal contributor, and you don't need to know how to write
+haskell either.. So take a [[look at the page|contribute]] and see if
+you can help out.
diff --git a/doc/devblog/day_168__backlog_continued.mdwn b/doc/devblog/day_168__backlog_continued.mdwn
new file mode 100644
index 000000000..ab1956533
--- /dev/null
+++ b/doc/devblog/day_168__backlog_continued.mdwn
@@ -0,0 +1,16 @@
+Worked on triaging several bugs. Fixed an easy one, which involved the
+assistant choosing the wrong path to a repository that has multiple
+remotes. After today, backlog is down to 43, nearly pre-Brazil levels.
+
+It seems that git-remote-gcrypt [[never quite worked on OSX|bugs/remote_gcrypt_based_repos_and_conflicting_uuids]].
+It looked like it did, but a bug prevented anything being pushed to the remote.
+Tracked down and fixed that bug.
+
+This evening, getting back to working on the armel autobuilder setup
+using propellor. The autobuilder will use a pair of docker containers, one
+armel and a companion amd64, and their quite complex setup will be *almost*
+fully automated (except for the haskell library patching part).
+
+----
+
+Today's work was sponsored by Mica Semrick.
diff --git a/doc/devblog/day_169-171__juggling.mdwn b/doc/devblog/day_169-171__juggling.mdwn
new file mode 100644
index 000000000..2b34da90a
--- /dev/null
+++ b/doc/devblog/day_169-171__juggling.mdwn
@@ -0,0 +1,14 @@
+Keeping lots of things going these past few days..
+
+* Rebootstrapping the armel autobuilder with propellor.
+ Some qemu instability and the need to update haskell
+ library patches meant this took a lot of hand-holding. Finally got a
+ working setup today.
+* Designing and ordering new git-annex stickers on clear viynl backing;
+ have put off sending those to campaign contributors for too long.
+* Added a new feature to the webapp: It now remembers the ssh remotes
+ that it sets up, and makes it easy to enable them elsewhere, the same
+ as other sorts of remotes. Had a very pleasant surprise building this,
+ when I was able to reuse all the UI code for enabling rsync and gcrypt
+ remotes. I think this will be a useful feature as we transition away
+ from XMPP.
diff --git a/doc/devblog/day_172__.mdwn b/doc/devblog/day_172__.mdwn
new file mode 100644
index 000000000..7f2595cef
--- /dev/null
+++ b/doc/devblog/day_172__.mdwn
@@ -0,0 +1,7 @@
+Working on moving the android autobuilder to Docker & Propellor, which will
+finish containerizing all the autobuilds that I run. Updated
+ghc-android to use the released ghc 7.8.2, which will make it build more
+reliably.
+
+Also did bug triage. Bugs are now divided into [[bugs/confirmed]]
+and [[bugs/unconfirmed]] categories.
diff --git a/doc/devblog/day_173-174__android_rebootstrap.mdwn b/doc/devblog/day_173-174__android_rebootstrap.mdwn
new file mode 100644
index 000000000..6029b1870
--- /dev/null
+++ b/doc/devblog/day_173-174__android_rebootstrap.mdwn
@@ -0,0 +1,8 @@
+With some help from Sören, have been redoing the android build environment
+for git-annex. This included making propellor put it in a docker container,
+which was easy. But then much struggling with annoying stuff like getting
+the gnutls linking to work, and working around some dependency issues on
+hackage that make cabal's dependency resolver melt down.
+Finally succeeded after much more time than I had wanted to spend on this.
+
+[[!meta date="Mon May 27 16:36:40 JEST 2014"]]
diff --git a/doc/devblog/day_175__encoding_day.mdwn b/doc/devblog/day_175__encoding_day.mdwn
new file mode 100644
index 000000000..5e23342d5
--- /dev/null
+++ b/doc/devblog/day_175__encoding_day.mdwn
@@ -0,0 +1,20 @@
+These themed days are inaverdent, but it happened again: Nearly everything
+done today had to do with encoding issues.
+
+The big news is that it turned out everything written to files in the
+git-annex branch had unicode characters truncated to 8 bits. Now fixed so
+you should always get out the same thing you put in, no matter what
+encoding you use (but please use utf8). This affected things like storing
+repository descriptions, but worse, it affected metadata. (Also preferred
+content expressions, I suppose.)
+
+With that fixed, there are still 7 source files left that use Char8 libraries.
+There used to be more; nearly every use of those is a bug. I looked over
+the remaining uses of it, and there might be a problem with Creds using it.
+I should probably make a push to stamp out all remaining uses of Char8.
+
+Other encoding bugs were less reproducible.
+
+And just now, Sören made some progress on
+[[bugs/Bootstrap3_icons_missing_on_Android]] ... and my current theory
+is this is actually caused by an encoding issue too.
diff --git a/doc/devblog/day_176__mostly_a_day_off.mdwn b/doc/devblog/day_176__mostly_a_day_off.mdwn
new file mode 100644
index 000000000..46bf1c4db
--- /dev/null
+++ b/doc/devblog/day_176__mostly_a_day_off.mdwn
@@ -0,0 +1,8 @@
+Got a handle on the Android webapp static file problems (no, they were not
+really encoding problems!), and hopefully
+that's all fixed now. Also, only 3 modules use Char8 now. And updated the
+git-annex backport. That's all I did today.
+
+Meanwhile, a complete [[tips/ZSH_completion]] has been contributed by
+Schnouki. And, Ben Gamari sent in a patch moving from the deprecated
+MonadCatchIO-transformers library to the exceptions library.
diff --git a/doc/devblog/day_177__enabling.mdwn b/doc/devblog/day_177__enabling.mdwn
new file mode 100644
index 000000000..55a1895aa
--- /dev/null
+++ b/doc/devblog/day_177__enabling.mdwn
@@ -0,0 +1,21 @@
+After making a release yesterday, I've been fixing some bugs in the
+webapp, all to do with repository configuration stored on the git-annex
+branch. I was led into this by a strange little bug where the webapp stored
+configuration in the wrong repo in one situation. From there, I noticed
+that often when enabling an existing repository, the webapp would stomp on
+its group and preferred content and description, replacing them with
+defaults.
+
+This was a systematic problem, it had to be fixed in several places. And
+some of the fixes were quite tricky. For example, when adding a ssh
+repository, and it turns out there's already a git-annex repository at the
+entered location, it needs to avoid changing its configuration. But also,
+the configuration of that repo won't be known until after the first git
+pull from it. So it doesn't make sense to show the repository edit form
+after enabling such a repository.
+
+Also worked on a couple other bugs, and further cleaned up the [[bugs]]
+page. I think I am finally happy with how the bug list is displayed,
+with confirmed/moreinfo/etc tags.
+
+Today's work was sponsored by François Deppierraz.
diff --git a/doc/devblog/day_177__enabling/comment_1_820d29f84dade09b0e7bb7435c52fcb8._comment b/doc/devblog/day_177__enabling/comment_1_820d29f84dade09b0e7bb7435c52fcb8._comment
new file mode 100644
index 000000000..05ecdc32d
--- /dev/null
+++ b/doc/devblog/day_177__enabling/comment_1_820d29f84dade09b0e7bb7435c52fcb8._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
+ nickname="Richard"
+ subject="comment 1"
+ date="2014-06-02T13:36:00Z"
+ content="""
+Can you make the tags be displayed with background colours or some other mechanism for quick visual recognition? All \"done\" are green, all \"moreinfo\" blue(?), etc pp.
+
+
+Thanks,
+Richard
+"""]]
diff --git a/doc/devblog/day_178-179__screencast_and_what_next.mdwn b/doc/devblog/day_178-179__screencast_and_what_next.mdwn
new file mode 100644
index 000000000..fe7ba399d
--- /dev/null
+++ b/doc/devblog/day_178-179__screencast_and_what_next.mdwn
@@ -0,0 +1,12 @@
+Yesterday I recorded a new screencast, demoing using the assistant on a
+local network with a small server. [[videos/git-annex_assistant_lan]].
+That's the best screencast yet; having a real framing story was nice;
+recent improvements to git-annex are taken advantage of without being made
+a big deal; and audio and video are improved. (But there are some minor
+encoding glitches which I'd have to re-edit it to fix.)
+
+The [[design/roadmap]] has this month dedicated to improving Android.
+But I think what I'd more like to do is whatever makes the assistant usable
+by the most people. This might mean doing more on Windows, since I hear
+from many who would benefit from that. Or maybe something not related to
+porting?
diff --git a/doc/devblog/day_178-179__screencast_and_what_next/comment_1_eeba788fed45cb22f9cc2a738ceaa074._comment b/doc/devblog/day_178-179__screencast_and_what_next/comment_1_eeba788fed45cb22f9cc2a738ceaa074._comment
new file mode 100644
index 000000000..d5bb0a183
--- /dev/null
+++ b/doc/devblog/day_178-179__screencast_and_what_next/comment_1_eeba788fed45cb22f9cc2a738ceaa074._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm8BAEUyzYhORZmMuocRTk4M-3IumDm5VU"
+ nickname="luciusf0"
+ subject="Windows Support +1"
+ date="2014-06-06T21:54:38Z"
+ content="""
+I just also (like others) wanna state my strong interest in a windows port. Actually it's the only thing which is holding me back of using git-annex for real, as I live and work in a mixed-OS environment. The git-annex features would be the answers to an awful lot of our day-to-day problems, and I cannot wait to have it ready for a production environment. So -> Windows Port +1
+"""]]
diff --git a/doc/devblog/day_178-179__screencast_and_what_next/comment_2_d44e67e34615c7b00e29f307556cdd06._comment b/doc/devblog/day_178-179__screencast_and_what_next/comment_2_d44e67e34615c7b00e29f307556cdd06._comment
new file mode 100644
index 000000000..defb4a80f
--- /dev/null
+++ b/doc/devblog/day_178-179__screencast_and_what_next/comment_2_d44e67e34615c7b00e29f307556cdd06._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnBJ6Dv1glxzzi4qIzGFNa6F-mfHIvv9Ck"
+ nickname="Jim"
+ subject="Android"
+ date="2014-06-08T02:44:45Z"
+ content="""
+As I don't use Windows and git-annex is already fitting my Linux use cases perfectly, I'd have to vote for Android. FWIW, I have previously posted some thoughts on what would I see as lacking on Android [here](http://git-annex.branchable.com/forum/Controlling_content_on_mobile_device/).
+"""]]
diff --git a/doc/devblog/day_180__porting.mdwn b/doc/devblog/day_180__porting.mdwn
new file mode 100644
index 000000000..27b4eaca1
--- /dev/null
+++ b/doc/devblog/day_180__porting.mdwn
@@ -0,0 +1,13 @@
+Did work on Windows porting today. First, fixed a reversion in the last
+release, that broke the git-annex branch pretty badly on Windows, causing
+\r to be written to files on that branch that should never have DOS line
+endings. Second, fixed a long-standing bug that prevented getting a file
+from a local bare repository on Windows.
+
+Also refreshed all autobuilders to deal with the gnutls and openssl
+security holes-of-the-week. (git-annex uses gnutls only for XMPP,
+and does not use openssl itself, but a few programs bundled with it,
+like curl, do use openssl.)
+
+A nice piece of news: OSX Homebrew now contains git-annex, so it can be
+easily installed with `brew install git-annex`
diff --git a/doc/devblog/day_180__porting/comment_1_133875f4435a298b85ddfb8a2cc11a7a._comment b/doc/devblog/day_180__porting/comment_1_133875f4435a298b85ddfb8a2cc11a7a._comment
new file mode 100644
index 000000000..2aa67e823
--- /dev/null
+++ b/doc/devblog/day_180__porting/comment_1_133875f4435a298b85ddfb8a2cc11a7a._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="Tamschi"
+ ip="178.27.213.202"
+ subject="It's still impossible to use the git-annex repository on Windows."
+ date="2014-06-09T14:44:07Z"
+ content="""
+Since the bug tracker is in the same repository and branch as the main program (why?), any bugs submitted with a colon in the title will prevent access on NTFS file systems.
+There is at least one such instance, I assume it potentially affects blog posts too.
+"""]]
diff --git a/doc/devblog/day_181__tricky_merge.mdwn b/doc/devblog/day_181__tricky_merge.mdwn
new file mode 100644
index 000000000..c6bcaf8d4
--- /dev/null
+++ b/doc/devblog/day_181__tricky_merge.mdwn
@@ -0,0 +1,8 @@
+Spent most of today improving behavior when a sync or merge is
+interrupted in direct mode. It was possible for an interrupt at the wrong
+time to leave the merge committed, but the work tree not yet updated. And
+then the next sync would make a commit that reverted the merged changes!
+
+To fix this I had to avoid making any merge commit or indeed updating the
+index until after the work tree is updated. It looked intractable for a
+while; I'm still surprised I eventually succeeded.
diff --git a/doc/devblog/day_182__service.mdwn b/doc/devblog/day_182__service.mdwn
new file mode 100644
index 000000000..137725248
--- /dev/null
+++ b/doc/devblog/day_182__service.mdwn
@@ -0,0 +1,6 @@
+Have for the first time gotten git-annex to run as a proper Windows
+service, using nssm.
+([details](http://git-annex.branchable.com/todo/windows_support/#comment-a61be55862ea32e3dc30972f905bb987))
+Not quite ready yet though; doesn't run as the right user.
+
+And a few other windows porting bits.
diff --git a/doc/devblog/day_183__rubbing_sticks_together.mdwn b/doc/devblog/day_183__rubbing_sticks_together.mdwn
new file mode 100644
index 000000000..ecab37916
--- /dev/null
+++ b/doc/devblog/day_183__rubbing_sticks_together.mdwn
@@ -0,0 +1,23 @@
+Spent all day on some horrible timestamp issues on legacy systems.
+
+On FAT, timestamps have a 2s granularity, which is ok, but then Linux adds
+a temporary higher resolution cache, which is lost on unmount. This
+confused git-annex since the mtimes seemed to change and it had to
+re-checksum half the files to get unconfused, which was not good.
+I found a way to use the inode sentinal file to detect when on FAT
+and put in a workaround, without degrading git-annex everywhere else.
+
+On Windows, time zones are a utter disaster; it changes the mtime it reports
+for files after the time zone has changed. Also there's a bug in the
+haskell time library which makes it return old time zone data after a time
+zone change. (I just finished developing a fix for that bug..)
+
+Left with nothing but a few sticks, I rubbed them together, and
+actually found a way to deal with this problem too. Scary details in
+[[bugs/Windows_file_timestamp_timezone_madness]]. While I've implemented
+it, it's stuck on a branch until I find a way to make git-annex notice when
+the timezone changes while it's running.
+
+----
+
+Today's work was sponsored by Svenne Krap.
diff --git a/doc/devblog/day_184__windows_month.mdwn b/doc/devblog/day_184__windows_month.mdwn
new file mode 100644
index 000000000..c99d03e90
--- /dev/null
+++ b/doc/devblog/day_184__windows_month.mdwn
@@ -0,0 +1,22 @@
+It's officially a Windows porting month. Now that I'm half way through it
+and with the last week of the month going to be a vacation, this makes
+sense.
+
+Today, finished up dealing with the timezone/timestamp issues on Windows.
+This got stranger and stranger the closer I looked at it. After a timestamp
+change, a program that was already running will see one timestamp, while a
+program that is started after the change will see another one! My approach
+works pretty much no matter how Windows goes insane though, and always
+recovers a true timestamp. Yay.
+
+Also fixed a regression test failure on Windows, which turned out to be
+rooted in a bug in the command queue runner, which neglected to pass
+along environment overrides on Windows.
+
+Then I spent 5 hours tracking down a tricky
+test suite failure on Windows, which turned out to also
+affect FAT and be a recent reversion that has as it's
+root cause a [fun bug in git itself](http://marc.info/?l=git&m=140262402204212&w=2).
+Put in a not very good workaround. Thank goodness for test suites!
+
+Also got the arm autobuilder unstuck. Release tomorrow.
diff --git a/doc/devblog/day_185__service.mdwn b/doc/devblog/day_185__service.mdwn
new file mode 100644
index 000000000..0613ae2bf
--- /dev/null
+++ b/doc/devblog/day_185__service.mdwn
@@ -0,0 +1,6 @@
+More work on [[todo/windows_git-annex_service]], but am stuck with a
+permissions problem.
+
+Fixed a bug that prevented two assistants from syncing when there was only
+a uni-directional link between them. Only affected direct mode, and
+was introduced back when I added the direct mode guard.
diff --git a/doc/devblog/day_186__cracked_it.mdwn b/doc/devblog/day_186__cracked_it.mdwn
new file mode 100644
index 000000000..cff6130cb
--- /dev/null
+++ b/doc/devblog/day_186__cracked_it.mdwn
@@ -0,0 +1,8 @@
+After despairing of ever solving this yesterday (and for the past 6 months
+really), I've got the webapp running on Windows with no visible DOS box.
+Also have the assistant starting up in the background on login.
+
+It turns out a service was not the way to do. There is a way to write a VB
+Script that runs a "DOS" command in a hidden window, and this is what I
+used. Amazing how hard it was to work this out, probably partly because I
+don't have the Windows vocabulary to know what to look for.
diff --git a/doc/devblog/day_186__cracked_it/comment_1_288b736adf392acd0f45667b2980138d._comment b/doc/devblog/day_186__cracked_it/comment_1_288b736adf392acd0f45667b2980138d._comment
new file mode 100644
index 000000000..d85798eb8
--- /dev/null
+++ b/doc/devblog/day_186__cracked_it/comment_1_288b736adf392acd0f45667b2980138d._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="https://launchpad.net/~maestro-alubia"
+ nickname="maestro-alubia"
+ subject="Congratulations!"
+ date="2014-06-18T09:08:45Z"
+ content="""
+I really feel with you and I am glad I currently do not need to develop on/for Windows. I wish you good progress with Windows porting, so you can concentrate on the interesting stuff again :)
+
+Best regards,
+Fabian
+"""]]
diff --git a/doc/devblog/day_186__cracked_it/comment_2_d1d79e93ac420f6b3a6f8a622e8e00bd._comment b/doc/devblog/day_186__cracked_it/comment_2_d1d79e93ac420f6b3a6f8a622e8e00bd._comment
new file mode 100644
index 000000000..d6ade5c01
--- /dev/null
+++ b/doc/devblog/day_186__cracked_it/comment_2_d1d79e93ac420f6b3a6f8a622e8e00bd._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://id.clacke.se/"
+ nickname="Claes"
+ subject="VBScript + wscript to avoid DOS window"
+ date="2014-06-21T02:09:58Z"
+ content="""
+I use this technique too, to run cygwin xterm without an ugly DOS box popup.
+"""]]
diff --git a/doc/devblog/day_186__cracked_it/comment_3_8ca17a51b10b4e4a63d0672d5ce29024._comment b/doc/devblog/day_186__cracked_it/comment_3_8ca17a51b10b4e4a63d0672d5ce29024._comment
new file mode 100644
index 000000000..356453e8f
--- /dev/null
+++ b/doc/devblog/day_186__cracked_it/comment_3_8ca17a51b10b4e4a63d0672d5ce29024._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://id.clacke.se/"
+ nickname="Claes"
+ subject="VBScript + wscript to avoid DOS window"
+ date="2014-06-21T02:15:04Z"
+ content="""
+(sorry that I didn't see before that you had run into this annoying problem)
+"""]]
diff --git a/doc/devblog/day_187__release_prep.mdwn b/doc/devblog/day_187__release_prep.mdwn
new file mode 100644
index 000000000..a5207c373
--- /dev/null
+++ b/doc/devblog/day_187__release_prep.mdwn
@@ -0,0 +1,10 @@
+Last night, got logging to daemon.log working on Windows. Aside from XMPP
+not working (but it's near to being deprecated anyway), and some possible
+issues with unicode characters in filenames, the Windows port now seems in
+pretty good shape for a beta release.
+
+Today, mostly worked on fixing the release process so the metadata
+accurarely reflects the version from the autobuilder that is included in
+the release. Turns out there was version skew in the last release (now
+manually corrected). This should avoid that happening again, and also
+automates more of my release process.
diff --git a/doc/devblog/day_187__release_prep/comment_1_206692d16177c2a9ca11c0eeff545697._comment b/doc/devblog/day_187__release_prep/comment_1_206692d16177c2a9ca11c0eeff545697._comment
new file mode 100644
index 000000000..a9e982a21
--- /dev/null
+++ b/doc/devblog/day_187__release_prep/comment_1_206692d16177c2a9ca11c0eeff545697._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlnoH5btjn_BLib3_IhES5uMhrzuOiwCYo"
+ nickname="András"
+ subject="sync options?"
+ date="2014-06-19T13:16:51Z"
+ content="""
+What options will we have in this beta for windows <=> windows (local network) and windows <=> linux (remote server) synchronization? I'm interested only in non-cloud sync possibilities.
+
+(I tried to follow the developments but apparently failed...)
+
+Also thank you for working on the windows port!
+
+"""]]
diff --git a/doc/devblog/day_187__release_prep/comment_2_961fb35d9cf7d5e518f8d0bddb8626a6._comment b/doc/devblog/day_187__release_prep/comment_2_961fb35d9cf7d5e518f8d0bddb8626a6._comment
new file mode 100644
index 000000000..6abcfb7dd
--- /dev/null
+++ b/doc/devblog/day_187__release_prep/comment_2_961fb35d9cf7d5e518f8d0bddb8626a6._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.203"
+ subject="comment 2"
+ date="2014-06-19T22:13:23Z"
+ content="""
+windows to linux server (local or remote) to windows will work.
+"""]]
diff --git a/doc/devblog/day_188__back_sans_laptop.mdwn b/doc/devblog/day_188__back_sans_laptop.mdwn
new file mode 100644
index 000000000..080d6176e
--- /dev/null
+++ b/doc/devblog/day_188__back_sans_laptop.mdwn
@@ -0,0 +1,5 @@
+I am back from the beach, but my dev laptop is dead. A replacement is being
+shipped, and I have spent today getting my old netbook into a usable state
+so I can perhaps do some work using it in the meantime.
+
+(Backlog is 95 messages.)
diff --git a/doc/devblog/day_189__finally_working_again.mdwn b/doc/devblog/day_189__finally_working_again.mdwn
new file mode 100644
index 000000000..54b72b52b
--- /dev/null
+++ b/doc/devblog/day_189__finally_working_again.mdwn
@@ -0,0 +1,18 @@
+Finally back to work with a new laptop!
+
+Did one fairly major feature today: When using git-annex to pull down
+podcasts, metadata from the feed is copied into git-annex's metadata store,
+if annex.genmetadata is set. Should be great for views etc!
+
+Worked through a lot of the backlog, which is down to 47 messages now.
+
+Only other bug fix of note is a fix on Android. A recent change to git made
+it try to chmod files, which tends to fail on the horrible /sdcard
+filesystem. Patched git to avoid that.
+
+For some reason the autobuilder box rebooted while I was away, and
+somehow the docker containers didn't come back up -- so they got
+automatically rebuilt. But I have to manually finish up building the
+android and armel ones. Will be babysitting that build this evening.
+
+Today's work was sponsored by Ævar Arnfjörð Bjarmason.
diff --git a/doc/devblog/day_190__fun_fixes.mdwn b/doc/devblog/day_190__fun_fixes.mdwn
new file mode 100644
index 000000000..d3895df1f
--- /dev/null
+++ b/doc/devblog/day_190__fun_fixes.mdwn
@@ -0,0 +1,13 @@
+Spent the morning improving behavior when `commit.gpgsign` is set.
+Now git-annex will let gpg sign commits that are made when eg, manually
+running `git annex sync`, but not commits implicitly made to the git-annex
+branch. And any commits made by the assistant are not gpg signed. This was
+slightly tricky, since lots of different places in git-annex ran `git
+commit`, `git merge` and similar.
+
+Then got back to a test I left running over vacation, that added millions
+of files to a git annex repo. This was able to reproduce a problem where
+`git annex add` blew the stack and crashed at the end. There turned out to
+be two different memory issues, one was in git-annex and the other is in
+Haskell's core `getDirectoryContents`. Was able to entirely fix it,
+eventually.
diff --git a/doc/devblog/day_191__semidistracted.mdwn b/doc/devblog/day_191__semidistracted.mdwn
new file mode 100644
index 000000000..3d4b5b6ef
--- /dev/null
+++ b/doc/devblog/day_191__semidistracted.mdwn
@@ -0,0 +1,7 @@
+Got a bit distracted improving Haskell's directory listing code.
+
+Only real git-annex work today was fixing [[bugs/Assistant_merge_loop]],
+which was caused by changes in the last release (that made direct mode
+merging crash/interrupt-safe). This is a kind of ugly bug, that can result
+in the assistant making lots of empty commits in direct mode repositories.
+So, I plan to make a new release on Monday.
diff --git a/doc/devblog/day_192__release_day.mdwn b/doc/devblog/day_192__release_day.mdwn
new file mode 100644
index 000000000..ce1a38861
--- /dev/null
+++ b/doc/devblog/day_192__release_day.mdwn
@@ -0,0 +1,4 @@
+Got the release out. Had to fix various autobuilder issues. The arm autobuilder
+is unfortunatly not working currently.
+
+Updated git-annex to build with a new version of the bloomfilter library.
diff --git a/doc/devblog/day_193-194__ugly_bug.mdwn b/doc/devblog/day_193-194__ugly_bug.mdwn
new file mode 100644
index 000000000..668b7b2ab
--- /dev/null
+++ b/doc/devblog/day_193-194__ugly_bug.mdwn
@@ -0,0 +1,37 @@
+**Important** A bug [[caused the assistant to sometimes remove all files|bugs/bad_merge_commit_deleting_all_files]] from the git repository.
+You should check if your repository is ok. If the bug hit you, it should be
+possible to revert the bad commit and recover your files with no data loss.
+See the bug report for details.
+
+This affected git-annex versions since 5.20140613, and only when using the
+assistant in direct mode. It should be fixed in today's release,
+5.20140709.
+
+I'm available <urgent2014@joeyh.name> to help anyone hit by this
+unfortunate bug.
+
+This is another bug in the direct mode merge code. I'm not happy about it.
+It's particularly annoying that I can't fix up after it automatically
+(because there's no way to know if any given commit in the git history that
+deletes all the files is the result of this bug, or a legitimate deletion
+of all files).
+
+The only good thing is that the design of git-annex is pretty robust, and
+in this case, despite stupidly committing the deletion of all the files in
+the repository, git-annex did take care to preserve all their contents and
+so the problem should be able to be resolved without data loss.
+
+Unfortunately, the main autobuilder is down and I've had to spin up
+autobuilders on a different machine (thank goodness that's very automated
+now!), and so I have not been able to build the fixed git-annex for android
+yet. I hope to get that done later this evening.
+
+---
+
+Yesterday, I fixed a few (much less bad) bugs, and did some thinking about
+plans for this month. The [[design/roadmap]] suggests working on some of
+[[!traillink design/assistant/chunks]], [[!traillink design/assistant/deltas]] or [[!traillink design/assistant/gpgkeys]].
+I don't know how to do deltas yet really. Chunks is pretty easily done.
+The gpg keys stuff is pretty open ended and needs some more work to define
+some use cases. But, after today, I am more inclined to want to spend
+time on better testing and other means of avoiding this kind of situation.
diff --git a/doc/devblog/day_195-196__catching_up.mdwn b/doc/devblog/day_195-196__catching_up.mdwn
new file mode 100644
index 000000000..2c04eaa15
--- /dev/null
+++ b/doc/devblog/day_195-196__catching_up.mdwn
@@ -0,0 +1,13 @@
+Spent past 2 days catching up on backlog and doing bug triage and some
+minor bug fixes and features. Backlog is 27, lowest in quite a while so I
+feel well on top of things.
+
+I was saddened to find [this bug](http://git-annex.branchable.com/bugs/files_lost_during_upgrade/#comment-b265c796b1599d2dde649699cb54fa86)
+where I almost managed to analize the [[ugy_bug|day_193-194__ugly_bug]]'s race
+condition, but not quite (and then went on vacation). BTW, I have not heard
+from anyone else who was hit by that bug so far.
+
+The linux autobuilders are still down; their host server had a disk crash
+in an electrical outage. Might be down for a while. I would not mind
+setting up a redundant autobuilder if anyone else would like to donate a
+linux VM with 4+ gb of ram.
diff --git a/doc/devblog/day_197__autobuilder_rescuscitation.mdwn b/doc/devblog/day_197__autobuilder_rescuscitation.mdwn
new file mode 100644
index 000000000..12dada287
--- /dev/null
+++ b/doc/devblog/day_197__autobuilder_rescuscitation.mdwn
@@ -0,0 +1,14 @@
+Yay, the Linux autobuilder is back! Also fixed the Windows build.
+
+Fixed a reversion that prevented the webapp from starting
+properly on Windows, which was introduced by some bad locking when I put in
+the hack that makes it log to the log file on that platform.
+
+Various other minor fixes here and there. There are almost enough
+to do a release again soon.
+
+I've also been trying to bootstrap ghc 7.8 on arm, for Debian. There's a script
+that's supposed to allow building 7.8 using 7.6.3, dealing with a linker
+problem by using the gold linker. Hopefully that will work since otherwise
+Debian could remain stuck with an old ghc or worse lose the arm ports.
+Neither would be great for git-annex..
diff --git a/doc/devblog/day_198__branching_out.mdwn b/doc/devblog/day_198__branching_out.mdwn
new file mode 100644
index 000000000..cdb3a6d1b
--- /dev/null
+++ b/doc/devblog/day_198__branching_out.mdwn
@@ -0,0 +1,23 @@
+I have mostly been thinking about gcrypt today.
+[This issue](https://github.com/blake2-ppc/git-remote-gcrypt/issues/9)
+needs to be dealt with. The question is, does it really make sense to
+try to hide the people a git repository is encrypted for? I have
+[posted some thoughts](http://git-annex.branchable.com/bugs/using_gpg_encryption_with_multiple_keys_fails/?updated#comment-0c4f679d972c63b0b25b6aa5e851af62)
+and am coming to the viewpoint that obscuring the identities of users
+of a repository is not a problem git-annex should try to solve itself,
+although it also shouldn't get in the way of someone who is able and
+wants to do that (by using tor, etc).
+
+Finally, I decided to go ahead and add a gcrypt.publish-participants
+setting to git-remote-gcrypt, and make git-annex set that by default when
+setting up a gcrypt repository.
+
+Some promising news from the ghc build on arm. I got a working ghc, and
+even ghci works. Which would make the template haskell in the webapp etc
+avaialble on arm without the current horrible hacks. Have not managed to
+build the debian ghc package successfully yet though.
+
+Also, fixed a bug that made `git annex sync` not pull/push with a local
+repository that had not yet been initialized for use with git-annex.
+
+Today's work was sponsored by Stanley Yamane.
diff --git a/doc/devblog/day_198__branching_out/comment_1_91ce3dc707ba1ba7c5d9e57e20ffce40._comment b/doc/devblog/day_198__branching_out/comment_1_91ce3dc707ba1ba7c5d9e57e20ffce40._comment
new file mode 100644
index 000000000..7b9ba45b7
--- /dev/null
+++ b/doc/devblog/day_198__branching_out/comment_1_91ce3dc707ba1ba7c5d9e57e20ffce40._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="lex"
+ ip="2620:149:7:303:796f:ae98:a0a1:94b"
+ subject="comment 1"
+ date="2014-07-16T21:13:06Z"
+ content="""
+glad my bug inspired a blog post about it. =]
+"""]]
diff --git a/doc/devblog/day_199__ten_minute_cycle.mdwn b/doc/devblog/day_199__ten_minute_cycle.mdwn
new file mode 100644
index 000000000..56b48747e
--- /dev/null
+++ b/doc/devblog/day_199__ten_minute_cycle.mdwn
@@ -0,0 +1,6 @@
+Spent hours today in a 10-minute build/test cycle, tracking down a bug that
+caused the assistant to crash on Windows after exactly 10 minutes uptime.
+Eventually found the cause; this is fallout from last month's work
+that got it logging to the debug.log on Windows.
+
+There was more, but that was the interesting one..
diff --git a/doc/devblog/day_200__one_year_along.mdwn b/doc/devblog/day_200__one_year_along.mdwn
new file mode 100644
index 000000000..6cfab59b9
--- /dev/null
+++ b/doc/devblog/day_200__one_year_along.mdwn
@@ -0,0 +1,17 @@
+Updated the Debian backport. (Also the git-remote-gcrypt backport.)
+
+Made the assistant install a desktop file to integrate with Konqueror.
+
+Improved `git annex repair`, fixing a bug that could cause it to leave
+broken branch refs and yet think that the repair was successful.
+
+----
+
+A bit surprised to see that now been a full year since I started doing
+development funded by my campaign. Not done yet!
+
+Update on campaign rewards: <https://campaign.joeyh.name/blog/stickers_soon/>
+
+----
+
+Today's work was sponsored by Douglas Butts.
diff --git a/doc/devblog/day_201__chunky.mdwn b/doc/devblog/day_201__chunky.mdwn
new file mode 100644
index 000000000..b210702a4
--- /dev/null
+++ b/doc/devblog/day_201__chunky.mdwn
@@ -0,0 +1,12 @@
+Working on designs for better [[chunking|design/assistant/chunks]]. Having
+a hard time finding a way to totally obscure file sizes, but otherwise a
+good design seems to be coming together. I particularly like that the new
+design puts the chunk count in the Key (which is then encrypted for special
+remotes, rather than having it be some special extension.
+
+While thinking through chunking, I realized that the current chunking
+method can fail if two repositories have different chunksize settings for
+the same special remote and both upload the same key at the same time.
+Arn't races fun? The new design will eliminate this problem; in the
+meantime updated the docs to recommend never changing a remote's
+chunksize setting.
diff --git a/doc/devblog/day_202__new_chunk_groundwork.mdwn b/doc/devblog/day_202__new_chunk_groundwork.mdwn
new file mode 100644
index 000000000..c8e0ce7f6
--- /dev/null
+++ b/doc/devblog/day_202__new_chunk_groundwork.mdwn
@@ -0,0 +1,6 @@
+The design for new style chunks seems done, and I laid the groundwork for it
+today. Added chunk metadata to keys, reorganized the legacy chunking code
+for directory and webdav so it won't get (too badly) in the way, and
+implemented the chunk logs in the git-annex branch.
+
+Today's work was sponsored by LeastAuthority.com.
diff --git a/doc/devblog/day_203__in_the_weeds.mdwn b/doc/devblog/day_203__in_the_weeds.mdwn
new file mode 100644
index 000000000..a8cf1787a
--- /dev/null
+++ b/doc/devblog/day_203__in_the_weeds.mdwn
@@ -0,0 +1,39 @@
+A lil bit in the weeds on the chunking rewrite right now. I did succeed in
+writing the core chunk generation code, which can be used for every special
+remote. It was pretty hairy (needs to stream large files in constant
+memory, separating into chunks, and get the progress display right
+across operations on chunks, etc). That took most of the day.
+
+Ended up getting stuck in integrating the encryptable remote code, and had
+to revert changes that could have led to rewriting (or perhaps
+eliminating?) most of the per-remote encryption specific code.
+
+Up till now, this has supported both encrypted and non-encrypted remotes;
+it was simply passed encrypted keys for an encrypted remote:
+
+[[!format haskell """
+remove :: Key -> Annex Bool
+"""]]
+
+But with chunked encrypted keys, it seems it needs to be more complicated:
+
+[[!format haskell """
+remove' :: Maybe (Key -> Key) -> ChunkConfig -> Key -> Annex Bool
+"""]]
+
+So that when the remote is configured to use chunking, it can look up
+the chunk keys, and then encrypt them, in order to remove all the encrypted
+chunk keys.
+
+I don't like that complication, so want to find a cleaner
+abstraction. Will sleep on it.
+
+----
+
+While I was looking at the encryptable remote generator, I realized
+the remote cost was being calculated wrongly for special
+remotes that are not encrypted. Fixed that bug.
+
+----
+
+Today's work was sponsored by bak.
diff --git a/doc/devblog/day_204__mowing.mdwn b/doc/devblog/day_204__mowing.mdwn
new file mode 100644
index 000000000..b34f1ba38
--- /dev/null
+++ b/doc/devblog/day_204__mowing.mdwn
@@ -0,0 +1,64 @@
+Remained frustratingly stuck until 3 pm on the same stuff that puzzled
+me yesterday. However, 6 hours later, I have the directory
+special remote 100% working with both new chunk= and legacy chunksize=
+configuration, both with and without encryption.
+
+----
+
+So, the root of why this is was hard, since I thought about it a lot today
+in between beating my head into the wall: git-annex's internal API for remotes
+is really, really simple. It basically comes down to:
+
+[[!format haskell """
+ Remote
+ { storeKey :: Key -> AssociatedFile -> MeterUpdate -> Annex Bool
+ , retrieveKeyFile :: Key -> AssociatedFile -> FilePath -> MeterUpdate -> Annex Bool
+ , removeKey :: Key -> Annex Bool
+ , hasKey :: Key -> Annex (Either String Bool)
+ }
+"""]]
+
+This simplicity is a Good Thing, because it maps very well to REST-type
+services. And it allows for quite a lot of variety in implementations of
+remotes. Ranging from reguar git remotes, that rsync files around without
+git-annex ever loading them itself, to remotes like webdav that load
+and store files themselves, to remotes like tahoe that intentionally do not
+support git-annex's built-in encryption methods.
+
+However, the simplicity of that API means that lots of complicated stuff,
+like handling chunking, encryption, etc, has to be handled on a per-remote
+basis. Or, more generally, by `Remote -> Remote` transformers that take
+a remote and add some useful feature to it.
+
+One problem is that the API is so simple that a remote transformer that adds
+encryption is not feasible. In fact, every encryptable remote has
+had its own code that loads a file from local disk, encrypts it, and sends
+it to the remote. Because there's no way to make a remote transformer that
+converts a `storeKey` into an encrypted `storeKey`. (Ditto for retrieving
+keys.)
+
+I almost made the API more complicated today. Twice. But both times
+I ended up not, and I think that was the right choice, even though
+it meant I had to write some quite painful code.
+
+----
+
+In the end, I instead wrote a little module that pulls together supporting
+both encryption and chunking. I'm not completely happy because those
+two things should be independent, and so separate. But, 120 lines of
+code that don't keep them separate is not the end of the world.
+
+That module also contains some more powerful, less general APIs,
+that will work well with the kinds of remotes that will use it.
+
+The really nice result, is that the implementation of the directory
+special remote melts down from 267 lines of code to just 172! (Plus some
+legacy code for the old style chunking, refactored out into a file I can
+delete one day.) It's a lot cleaner too.
+
+With all this done, I expect I can pretty easily add the new style chunking
+to most git-annex remotes, and remove code from them while doing it!
+
+----
+
+Today's work was sponsored by Mark Hepburn.
diff --git a/doc/devblog/day_205__incremental.mdwn b/doc/devblog/day_205__incremental.mdwn
new file mode 100644
index 000000000..c8535d439
--- /dev/null
+++ b/doc/devblog/day_205__incremental.mdwn
@@ -0,0 +1,21 @@
+Last night, went over the new chunking interface, tightened up exception
+handling, and improved the API so that things like WebDAV will be able to
+reuse a single connection while all of a key's chunks are being downloaded.
+I am pretty happy with the interface now, and except to convert more
+special remotes to use it soon.
+
+Just finished adding a killer feature: Automatic resuming of interrupted
+downloads from chunked remotes. Sort of a poor man's rsync, that while less
+efficient and awesome, is going to work on *every* remote that gets the new
+chunking interface, from S3 to WebDAV, to all of Tobias's external special
+remotes! Even allows for things like starting a download
+from one remote, interrupting, and resuming from another one, and so on.
+
+I had forgotten about resuming while designing the chunking API. Luckily, I
+got the design right anyway. Implementation was almost trivial, and only
+took about 2 hours! (See [[!commit 9d4a766cd7b8e8b0fc7cd27b08249e4161b5380a]])
+
+I'll later add resuming of interrupted uploads. It's not hard to detect
+such uploads with only one extra query of the remote, but in principle,
+it should be possible to do it with no extra overhead, since git-annex
+already checks if all the chunks are there before starting an upload.
diff --git a/doc/devblog/day_206__zap.mdwn b/doc/devblog/day_206__zap.mdwn
new file mode 100644
index 000000000..eccee2464
--- /dev/null
+++ b/doc/devblog/day_206__zap.mdwn
@@ -0,0 +1,83 @@
+Zap! ... My internet gateway was [destroyed by lightning](https://identi.ca/joeyh/note/xogvXTFDR9CZaCPsmKZipA).
+Limping along regardless, and replacement ordered.
+
+Got resuming of uploads to chunked remotes working. Easy!
+
+----
+
+Next I want to convert the external special remotes to have these nice
+new features. But there is a wrinkle: The new chunking interface works
+entirely on ByteStrings containing the content, but the external special
+remote interface passes content around in files.
+
+I could just make it write the ByteString to a temp file, and pass the temp
+file to the external special remote to store. But then, when chunking is
+not being used, it would pointlessly read a file's content, only to write
+it back out to a temp file.
+
+Similarly, when retrieving a key, the external special remote saves it to a
+file. But we want a ByteString. Except, when not doing chunking or
+encryption, letting the external special remote save the content directly
+to a file is optimal.
+
+One approach would be to change the protocol for external special
+remotes, so that the content is sent over the protocol rather than in temp
+files. But I think this would not be ideal for some kinds of external
+special remotes, and it would probably be quite a lot slower and more
+complicated.
+
+Instead, I am playing around with some type class trickery:
+
+[[!format haskell """
+{-# LANGUAGE Rank2Types TypeSynonymInstances FlexibleInstances MultiParamTypeClasses #-}
+
+type Storer p = Key -> p -> MeterUpdate -> IO Bool
+
+-- For Storers that want to be provided with a file to store.
+type FileStorer a = Storer (ContentPipe a FilePath)
+
+-- For Storers that want to be provided with a ByteString to store
+type ByteStringStorer a = Storer (ContentPipe a L.ByteString)
+
+class ContentPipe src dest where
+ contentPipe :: src -> (dest -> IO a) -> IO a
+
+instance ContentPipe L.ByteString L.ByteString where
+ contentPipe b a = a b
+
+-- This feels a lot like I could perhaps use pipes or conduit...
+instance ContentPipe FilePath FilePath where
+ contentPipe f a = a f
+
+instance ContentPipe L.ByteString FilePath where
+ contentPipe b a = withTmpFile "tmpXXXXXX" $ \f h -> do
+ L.hPut h b
+ hClose h
+ a f
+
+instance ContentPipe FilePath L.ByteString where
+ contentPipe f a = a =<< L.readFile f
+"""]]
+
+The external special remote would be a FileStorer, so when a non-chunked,
+non-encrypted file is provided, it just runs on the FilePath with no extra
+work. While when a ByteString is provided, it's swapped out to a temp file
+and the temp file provided. And many other special remotes are ByteStorers,
+so they will just pass the provided ByteStream through, or read in the
+content of a file.
+
+I think that would work. Thoigh it is not optimal for external special
+remotes that are chunked but not encrypted. For that case, it might be worth
+extending the special remote protocol with a way to say "store a chunk of
+this file from byte N to byte M".
+
+---
+
+Also, talked with ion about what would be involved in using rolling checksum
+based chunks. That would allow for rsync or zsync like behavior, where
+when a file changed, git-annex uploads only the chunks that changed, and the
+unchanged chunks are reused.
+
+I am not ready to work on that yet, but I made some changes to the parsing
+of the chunk log, so that additional chunking schemes like this can be added
+to git-annex later without breaking backwards compatability.
diff --git a/doc/devblog/day_207__at_last.mdwn b/doc/devblog/day_207__at_last.mdwn
new file mode 100644
index 000000000..936ac98f0
--- /dev/null
+++ b/doc/devblog/day_207__at_last.mdwn
@@ -0,0 +1,34 @@
+It took 9 hours, but I finally got to make [[!commit c0dc134cded6078bb2e5fa2d4420b9cc09a292f7]],
+which both removes 35 lines of code, and adds chunking support to all
+external special remotes!
+
+The groundwork for that commit involved taking the type scheme I sketched
+out yesterday, completely failing to make it work with such high-ranked
+types, and falling back to a simpler set of types that both I and GHC seem
+better at getting our heads around.
+
+Then I also had more fun with types, when it turned out I needed to
+run encryption in the Annex monad. So I had to go convert several parts of
+the utility libraries to use MonadIO and exception lifting. Yurk.
+
+The final and most fun stumbling block caused git-annex to crash when
+retriving a file from an external special remote that had neither
+encryption not chunking. Amusingly it was because I had not put in an
+optimation (namely, just renaming the file that was retrieved in this case,
+rather than unnecessarily reading it in and writing it back out). It's
+not often that a lack of an optimisation causes code to crash!
+
+So, fun day, great result, and it should now be very simple to convert
+the bup, ddar, gcrypt, glacier, rsync, S3, and WebDAV special remotes
+to the new system. Fingers crossed.
+
+But first, I will probably take half a day or so and write a
+`git annex testremote` that can be run in a repository and does live
+testing of a special remote including uploading and downloading files.
+There are quite a lot of cases to test now, and it seems best to get
+that in place before I start changing a lot of remotes without a way to
+test everything.
+
+----
+
+Today's work was sponsored by Daniel Callahan.
diff --git a/doc/devblog/day_208__testremote.mdwn b/doc/devblog/day_208__testremote.mdwn
new file mode 100644
index 000000000..87c497fcc
--- /dev/null
+++ b/doc/devblog/day_208__testremote.mdwn
@@ -0,0 +1,10 @@
+Built `git annex testremote` today.
+
+That took a little bit longer than expected, because it actually found
+several fence post bugs in the chunking code.
+
+It also found a bug in the sample external special remote script.
+
+I am very pleased with this command. Being able to run 640 tests against
+any remote, without any possibility of damaging data already stored in the
+remote, is awesome. Should have written it a looong time ago!
diff --git a/doc/devblog/day_209__mass_conversion.mdwn b/doc/devblog/day_209__mass_conversion.mdwn
new file mode 100644
index 000000000..23de65b2a
--- /dev/null
+++ b/doc/devblog/day_209__mass_conversion.mdwn
@@ -0,0 +1,32 @@
+Have started converting lots of special remotes to the new API. Today, S3
+and hook got chunking support. I also converted several remotes to the new
+API without supporting chunking: bup, ddar, and glacier (which should
+support chunking, but there were complications).
+
+This removed 110 lines of code while adding features! And,
+I seem to be able to convert them faster than `testremote` can test them. :)
+
+Now that S3 supports chunks, they can be used to work around several
+problems with S3 remotes, including file size limits, and a memory leak in
+the underlying S3 library.
+
+The S3 conversion included caching of the S3 connection when
+storing/retrieving chunks. [Update: Actually, it turns out it didn't;
+the hS3 library doesn't support persistent connections. Another reason I
+need to switch to a better S3 library!]
+
+But the API doesn't yet support caching
+when removing or checking if chunks are present. I should probably expand
+the API, but got into some type checker messes when using generic enough
+data types to support everything. Should probably switch to `ResourceT`.
+
+Also, I tried, but failed to make `testremote` check that storing a key
+is done atomically. The best I could come up with was a test that stored a
+key and had another thread repeatedly check if the object was present on
+the remote, logging the results and timestamps. It then becomes a
+statistical problem -- somewhere toward the end of the log it's ok if the key
+has become present -- but too early might indicate that it wasn't stored
+atomically. Perhaps it's my poor knowledge of statistics, but I could not
+find a way to analize the log that reliably detected non-atomic storage.
+If someone would like to try to work on this, see the `atomic-store-test`
+branch.
diff --git a/doc/devblog/day_210__conversion_and_digression.mdwn b/doc/devblog/day_210__conversion_and_digression.mdwn
new file mode 100644
index 000000000..2629eb917
--- /dev/null
+++ b/doc/devblog/day_210__conversion_and_digression.mdwn
@@ -0,0 +1,14 @@
+Just finished converting both rsync and gcrypt to the new API,
+and testing them. Still need to fix 2 test suite failures for gcrypt.
+Otherwise, only WebDAV remains unconverted.
+
+Earlier today, I investigated switching from hS3 to
+<http://hackage.haskell.org/package/aws>. Learned its API, which seemed a
+lot easier to comprehend than the other two times I looked at it. Wrote
+some test programs, which are in the `s3-aws` branch. I was able to stream
+in large files to S3, without ever buffering them in memory (which hS3's
+API precludes). And for chunking, it can reuse an http connection.
+This seems very promising. (Also, it might eventually get Glacier support..)
+
+I have uploaded haskell-aws to Debian, and once it gets into testing and
+backports, I plan to switch git-annex over to it.
diff --git a/doc/devblog/day_211__conversion_complete.mdwn b/doc/devblog/day_211__conversion_complete.mdwn
new file mode 100644
index 000000000..5e172fae1
--- /dev/null
+++ b/doc/devblog/day_211__conversion_complete.mdwn
@@ -0,0 +1,12 @@
+Converted the webdav special remote to the new API.
+All done with converting everything now!
+
+I also updated the new API to support doing things like
+reusing the same http connection when removing and checking
+the presence of chunks.
+
+I've been working on improving the haskell DAV library, in a
+number of ways that will let me improve the webdav special remote.
+Including making changes that will let me do connection caching, and
+improving its API to support streaming content without buffering a whole
+file in memory.
diff --git a/doc/devblog/day_212__webdav_rewrite.mdwn b/doc/devblog/day_212__webdav_rewrite.mdwn
new file mode 100644
index 000000000..714800c9a
--- /dev/null
+++ b/doc/devblog/day_212__webdav_rewrite.mdwn
@@ -0,0 +1,18 @@
+Today was spent reworking so much of the webdav special remote that it was
+essentially rewritten from scratch.
+
+The main improvement is that it now keeps a http connection open and uses
+it to perform multiple actions. Before, one connection was made per action.
+This is even done for operations on chunks. So, now storing a chunked file
+in webdav makes only 2 http connections total. Before, it would take around
+10 connections *per chunk*. So a big win for performance, although there is
+still room for improvement: It would be possible to reduce that down to
+just 1 connection, and indeed keep a persistent connection reused when
+acting on multiple files.
+
+Finished up by making uploading a large (non-chunked) file to webdav not
+buffer the whole file in memory.
+
+I still need to make downloading a file from webdav not buffer it, and
+test, and then I'll be done with webdav and can move on to making
+similar changes to S3.
diff --git a/doc/devblog/day_213__newchunks_merged.mdwn b/doc/devblog/day_213__newchunks_merged.mdwn
new file mode 100644
index 000000000..42ea7a655
--- /dev/null
+++ b/doc/devblog/day_213__newchunks_merged.mdwn
@@ -0,0 +1,15 @@
+Finished up webdav, and after running `testremote` for a long time, I'm
+satisfied it's good. The newchunks branch has now been merged into master
+completely.
+
+Spent the rest of the day beginning to rework the S3 special remote to use
+the aws library. This was pretty fiddly; I want to keep all the
+configuration exactly the same, so had to do a lot of mapping from hS3
+configuration to aws configuration. Also there is some hairy stuff
+involving escaping from the ResourceT monad with responses and http
+connection managers intact.
+
+Stopped once `initremote` worked. The rest should be pretty easy, although
+Internet Archive support is blocked by
+<https://github.com/aristidb/aws/issues/119>. This is in the `s3-aws`
+branch until it gets usable.
diff --git a/doc/devblog/day_214-215__wrapping_up_recent_work.mdwn b/doc/devblog/day_214-215__wrapping_up_recent_work.mdwn
new file mode 100644
index 000000000..7e06e231b
--- /dev/null
+++ b/doc/devblog/day_214-215__wrapping_up_recent_work.mdwn
@@ -0,0 +1,16 @@
+Yesterday, finished converting S3 to use the aws library. Very happy with
+the result (no memory leaks! connection caching!), but s3-aws is not merged
+into master yet. Waiting on a new release of the aws library so as to not
+break Internet Archive S3 support.
+
+Today, spent a few hours adding more tests to `testremote`. The new tests
+take a remote, and construct a modified version that is intentionally
+unavailable. Then they make sure trying to use it fails in appropriate
+ways. This was a very good thing to test; two bugs were immediately found
+and fixed.
+
+And that wraps up several weeks of hacking on the core of git-annex's
+remotes support, which started with reworking chunking and kind of took
+on a life of its own. I plan a release of this new stuff in a week. The
+next week will be spent catching up on 117 messages of backlog that
+accumulated while I was in deep coding mode.
diff --git a/doc/devblog/day_216__various_minor_bugs.mdwn b/doc/devblog/day_216__various_minor_bugs.mdwn
new file mode 100644
index 000000000..a9c49a9dd
--- /dev/null
+++ b/doc/devblog/day_216__various_minor_bugs.mdwn
@@ -0,0 +1,16 @@
+Working on getting caught up with backlog. 73 messages remain.
+
+Several minor bugs were fixed today. All edge cases. The most edge case one
+of all, I could not fix: git-annex cannot add a file that has a newline
+in its filename, because `git cat-file --batch`'s interface does not support such
+filenames.
+
+Added a page [[documenting how verify the signatures of git-annex releases|install/verifying_downloads]].
+
+Over the past couple days, all the autobuilders have been updated to new
+dependencies needed by the recent work. Except for Windows, which needs to
+be updated to the new Haskell Platform first, so hopefully soon.
+
+Turns out that upgrading unix-compat means that inode(like) numbers are
+available even on Windows, which will make git-annex more robust there.
+Win win. ;)
diff --git a/doc/devblog/day_216__various_minor_bugs/comment_1_0d0a0e75b9446f8a1c4cc43f36569473._comment b/doc/devblog/day_216__various_minor_bugs/comment_1_0d0a0e75b9446f8a1c4cc43f36569473._comment
new file mode 100644
index 000000000..a1cc9c3b7
--- /dev/null
+++ b/doc/devblog/day_216__various_minor_bugs/comment_1_0d0a0e75b9446f8a1c4cc43f36569473._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="EskildHustvedt"
+ ip="80.202.103.55"
+ subject="comment 1"
+ date="2014-08-14T05:30:46Z"
+ content="""
+What exactly does «git-annex cannot add a file that has a space in its filename» mean? git-annex (/assistant) actually can't handle tracking any file that has a space in its filename?
+"""]]
diff --git a/doc/devblog/day_216__various_minor_bugs/comment_2_6b06b3f46f20a6d2e60684d1d59fca07._comment b/doc/devblog/day_216__various_minor_bugs/comment_2_6b06b3f46f20a6d2e60684d1d59fca07._comment
new file mode 100644
index 000000000..559689bb7
--- /dev/null
+++ b/doc/devblog/day_216__various_minor_bugs/comment_2_6b06b3f46f20a6d2e60684d1d59fca07._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 2"
+ date="2014-08-15T19:45:28Z"
+ content="""
+That was a typo. Of course, spaces are no problem. Newlines in filenames, on the other hand..
+"""]]
diff --git a/doc/devblog/day_216__various_minor_bugs/comment_3_05177e2ed414d22711dcec57a614e38c._comment b/doc/devblog/day_216__various_minor_bugs/comment_3_05177e2ed414d22711dcec57a614e38c._comment
new file mode 100644
index 000000000..4b3f0248a
--- /dev/null
+++ b/doc/devblog/day_216__various_minor_bugs/comment_3_05177e2ed414d22711dcec57a614e38c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="EskildHustvedt"
+ ip="80.202.103.55"
+ subject="comment 3"
+ date="2014-08-16T15:22:35Z"
+ content="""
+Ah, well then, that sounds a lot more reasonable. Though legal, I have yet to hear of a sane reason for using newlines in filenames.
+"""]]
diff --git a/doc/devblog/day_217__autobuilders.mdwn b/doc/devblog/day_217__autobuilders.mdwn
new file mode 100644
index 000000000..2a58e0c63
--- /dev/null
+++ b/doc/devblog/day_217__autobuilders.mdwn
@@ -0,0 +1,10 @@
+Over the past couple days, got the arm autobuilder working again. It had
+been down since June with several problems. cabal install tended to crash;
+apparenty this has something to do with threading in user-mode qemu,
+because -j1 avoids that. And strange invalid character problems were fixed
+by downgrading file-embed. Also, with Yury's help I got the Windows
+autobuilder upgraded to the new Haskell Platform and working again.
+
+Today a last few finishing touches, including getting rid of the last
+dependency on the old haskell HTTP library, since http-conduit is being
+used now. Ready for the release!
diff --git a/doc/devblog/day_218__scary_locking.mdwn b/doc/devblog/day_218__scary_locking.mdwn
new file mode 100644
index 000000000..81afb263b
--- /dev/null
+++ b/doc/devblog/day_218__scary_locking.mdwn
@@ -0,0 +1,24 @@
+Plan is to be on vacation and/or low activity this week before DebConf.
+However, today I got involved in fixing a bug that caused the assistant to
+keep files open after syncing with repositories on removable media.
+
+Part of that bug involved lock files not being opend close-on-exec, and
+while fixing that I noticed again that the locking code was scattered all
+around and rather repetitive. That led to a lot of refactoring, which is
+always fun when it involves scary locking code. Thanks goodness for
+referential transparency.
+
+Now there's a Utility.LockFile that works on both POSIX and Windows.
+Howver, that module actually exports very different functions for the two.
+While it might be tempting to try to do a portability layer, the
+two locking models are really very different, and there are lots of gotchas
+such a portability layer would face. The only API that's completely the
+same between the two is dropLock.
+
+This refactoring process and the cleaner, more expressive
+code it led to helped me spot a couple of bugs involving locking. See
+[[!commit e386e26ef207db742da6d406183ab851571047ff]]
+and [[!commit 0a4d301051e4933661b7b0a0791afa95bfe9a1d3]]
+Neither bug has ever seemed to cause
+a problem, but it's nice to be able to spot and fix such bugs before they
+do.
diff --git a/doc/devblog/day_219__catching_up_and_looking_back.mdwn b/doc/devblog/day_219__catching_up_and_looking_back.mdwn
new file mode 100644
index 000000000..8d82d8cb9
--- /dev/null
+++ b/doc/devblog/day_219__catching_up_and_looking_back.mdwn
@@ -0,0 +1,109 @@
+Yesterday and today were the first good solid days working on git-annex in a
+while. There's a big backlog, currently of 133 messages, so I have been
+concentrating on bug reports first. Happily, not many new bugs have been
+reported lately, and I've made good progress on them, fixing 5 bugs today,
+including a file descriptor leak.
+
+## catching up
+
+In this end of summer rush, I've been too busy to blog for the past 20 days,
+but not entirely too busy to work on git-annex. Two releases have been made
+in that time, and a fair amount of improvements worked on.
+
+Including a new feature: When a local git repository is cloned with `git
+clone --shared`, git-annex detects this and defaults to a special mode
+where file contents get hard linked into the clone. It also makes the cloned
+repository be untrusted, to avoid confusing numcopies counting with the
+hard links. This can be useful for temporary working repositories without
+the overhead of lots of copies of files.
+
+## looking back
+
+I want to look back further, over the crowdfunded year of work covered
+by this devblog. There were a lot of things I wanted to accomplish this
+past year, and I managed to get to most of them. As well as a few surprises.
+
+* Windows support improved more than I guessed in my wildest dreams.
+ git-annex went from working not too well on the command line to
+ being pretty solid there, as well as having a working
+ and almost polished webapp on Windows.
+ There are still warts -- it's Windows after all!
+
+* Android didn't get many improvements. Most of the time I had budgeted to
+ Android porting ended up being used on Windows porting instead. I did,
+ however, get the Android build environment cleaned up a lot from the initial
+ hacked together one, and generally kept it building and working on Android.
+
+* The [direct mode guard](http://git-annex.branchable.com/devblog/day_48__direct_mode_guard_design/)
+ was not planned, but the need for it became clear, and
+ it's dramatically reduced the amount of command-line foot-shooting
+ that goes on in direct mode.
+
+* Repository repair was planned, and I've very proud of [git-repair](http://git-repair.branchable.com/).
+ Also pleased with the webapp's UI for scheduling repository consistency
+ checks.
+ Always room for improvement in this kind of thing, but this brings a new
+ capability to both git and git-annex.
+
+* The [[external_special_remote_interface|special_remotes/external]] came
+ together beautifully. External special remotes are now just as well
+ supported as built-in ones, except the webapp cannot be used to configure
+ them.
+
+* Using git-remote-gcrypt for fully encrypted git repositories, including
+ support in the webapp for setting them (and gpg keys if necessary),
+ happened. Still needs testing/more use/improvements. Avoided doing
+ much in the area of gpg key management, which is probably good to avoid when
+ possible, but is probably needed to make this a really suitable option for
+ end users.
+
+* Telehash is still being built, and it's not clear if they've gotten it
+ to work at all yet. The v2 telehash has recently been superseded by a
+ a new v3. So I am not pleased that I didn't get git-annex working with
+ telehash, but it was outside my control. This is a problem that needs to get
+ solved outside git-annex first, either by telehash or something else.
+ The plan is to keep an eye on everything in this space, including for example,
+ Maidsafe.
+
+* In the meantime, the new notifychanges support in git-annex-shell
+ makes XMPP/telehash/whatever unnecessary in a lot of configurations.
+ git-annex's remotedaemon architecture supports that and is designed
+ to support other notification methods later. And the webapp has a lot of
+ improvements in the area of setting up ssh remotes, so fewer users will
+ be stuck with XMPP.
+
+* I didn't quite get to [[design/assistant/deltas]], but the final month
+ of work on chunking provides a lot of new features and hopefully a
+ foundation that will get to deltas eventually. There is a new haskell
+ library that's being developed with the goal of being used for git-annex
+ deltas.
+
+* I hadn't planned to make git-annex be able to upgrade itself, when installed
+ from this website. But there was a need for that, and so it happened.
+ Even got a gpg key trust path for the distribution of git-annex.
+
+* Metadata driven views was an entirely unplanned feature. The current
+ prototype is very exciting, it opens up entire new use cases.
+ I had to hold myself back to not work on it too much,
+ especially as it shaded into adding a caching database to git-annex.
+ Had too much other stuff planned to do all I wanted.
+ Clearly this is an area I want to spend more time on!
+
+Those are most of the big features and changes, but probably half
+of my work on git-annex this past year was in smaller things, and general
+maintenance. Lots of others have contributed, some with
+code (like the large effort to switch to bootstrap3),
+and others with documentation, bug reports, etc.
+
+Perhaps it's best to turn to `git diff --stat` to sum up the activity
+and see just how much both the crowdfunding campaign and
+the previous kickstarter have pushed git-annex into high gear:
+
+ campaign: 5410 files changed, 124159 insertions(+), 79395 deletions(-)
+ kickstarter: 4411 files changed, 123262 insertions(+), 13935 deletions(-)
+ year before: 1281 files changed, 7263 insertions(+), 55831 deletions(-)
+
+What's next? The hope is, no more crowdfunded campaigns where I have
+to promise the moon anytime soon. Instead, the goal is to move to a more
+mature and sustainable funding model, and continue to grow the git-annex
+community, and the spaces where it's useful.
diff --git a/doc/devblog/day_219__catching_up_and_looking_back/comment_1_16b13b2510183a9da5f960ae5765e581._comment b/doc/devblog/day_219__catching_up_and_looking_back/comment_1_16b13b2510183a9da5f960ae5765e581._comment
new file mode 100644
index 000000000..5b839b55c
--- /dev/null
+++ b/doc/devblog/day_219__catching_up_and_looking_back/comment_1_16b13b2510183a9da5f960ae5765e581._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkRGMQkg9ck_pr47JXZV_C2DJQXrO8LgpI"
+ nickname="Michael"
+ subject="Hard linking on local clone"
+ date="2014-09-13T06:28:01Z"
+ content="""
+Thanks for this feature. It will save a lot of space when working on one-off projects with big scientific datasets.
+
+Unfortunately, there is probably no easy solution to achieve similar savings across file systems. On our shared cluster individual labs have their data in separate ZFS volumes (to ease individual backup handling), but data is often shared (i.e. copied) across volumes when cloning an annex. We need expensive de-duplication on the backup-server to, at least, prevent this kind of waste to hit the backups -- but the master file server still suffers (de-duplication ratio sometimes approaching a factor of 2.0).
+"""]]
diff --git a/doc/devblog/day_219__catching_up_and_looking_back/comment_2_460c064bebb5061fcba2a6c79f039362._comment b/doc/devblog/day_219__catching_up_and_looking_back/comment_2_460c064bebb5061fcba2a6c79f039362._comment
new file mode 100644
index 000000000..a00d33dc6
--- /dev/null
+++ b/doc/devblog/day_219__catching_up_and_looking_back/comment_2_460c064bebb5061fcba2a6c79f039362._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="72.0.72.144"
+ subject="comment 2"
+ date="2014-09-14T17:38:34Z"
+ content="""
+thanks so much for your work on git-annex, joeyh. it's hard to imagine that just 4 years ago, we didn't have anything even close to this tool and how far it went since then.
+
+~~~~
+anarcat@marcos:git-annex$ pepper age
+Loading cache index... done
+git-annex is 3 years old
+git-annex's birthday is in about 1 month (October 19th)
+~~~~
+
+birthday is coming soon! :)
+
+it's also quite impressive how much work can be done in a single year with some (fairly minimal) funding to dedicate a full dev on a project. very inspiring - keep up the good work! -- [[anarcat]]
+"""]]
diff --git a/doc/devblog/day_219__catching_up_and_looking_back/comment_3_9699d5a9de5ea64fbc876352e20261c4._comment b/doc/devblog/day_219__catching_up_and_looking_back/comment_3_9699d5a9de5ea64fbc876352e20261c4._comment
new file mode 100644
index 000000000..91fc49409
--- /dev/null
+++ b/doc/devblog/day_219__catching_up_and_looking_back/comment_3_9699d5a9de5ea64fbc876352e20261c4._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="anarcat"
+ ip="70.83.139.100"
+ subject="camlistore"
+ date="2014-09-17T20:18:56Z"
+ content="""
+have you looked at [camlistore](http://camlistore.org/) at all? it's a fairly new project, but it seems like it could be an interesting backend, or at least inspiration for git-annex's design. --[[anarcat]]
+"""]]
diff --git a/doc/devblog/day_219__catching_up_and_looking_back/comment_4_23c4ede3db0ea8165311466881cfa6a2._comment b/doc/devblog/day_219__catching_up_and_looking_back/comment_4_23c4ede3db0ea8165311466881cfa6a2._comment
new file mode 100644
index 000000000..8e24916db
--- /dev/null
+++ b/doc/devblog/day_219__catching_up_and_looking_back/comment_4_23c4ede3db0ea8165311466881cfa6a2._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmH7o6q2l99M-PQolOfbR3_i5B_jtTIcAE"
+ nickname="Giovanni"
+ subject="Camlistore"
+ date="2014-09-17T20:36:43Z"
+ content="""
+anarcat, have you used it? I tried, but it is buggy. They seem to be at [\"the Archivist\"](http://git-annex.branchable.com/) group of people, but if you don't have a hard drive to store the things, everything breaks up. I paid a lot of money to Amazon because I believed I could use Camlistore to organize data stored at S3, but apparently S3 is \"just for backup\", and if it is your only storage, then Camlistore will keep fetching data over and over \"to index it\" and in the end you pay.
+
+Yes, it keeps working, so you need some server online at all times, with Camlistore running.
+"""]]
diff --git a/doc/devblog/day_219__catching_up_and_looking_back/comment_5_7997305d7ec7db072b78dd0c31ecd824._comment b/doc/devblog/day_219__catching_up_and_looking_back/comment_5_7997305d7ec7db072b78dd0c31ecd824._comment
new file mode 100644
index 000000000..91e4dc5f5
--- /dev/null
+++ b/doc/devblog/day_219__catching_up_and_looking_back/comment_5_7997305d7ec7db072b78dd0c31ecd824._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="anarcat"
+ ip="70.83.139.100"
+ subject="comment 5"
+ date="2014-09-17T20:53:01Z"
+ content="""
+i haven't tried it at all - only looked at [this one demo video](https://www.youtube.com/watch?v=yxSzQIwXM1k) that reminded me of git-annex a lot...
+"""]]
diff --git a/doc/devblog/day_220__working_through_backlog.mdwn b/doc/devblog/day_220__working_through_backlog.mdwn
new file mode 100644
index 000000000..4685e3ff0
--- /dev/null
+++ b/doc/devblog/day_220__working_through_backlog.mdwn
@@ -0,0 +1,14 @@
+Made a release yesterday, which was all bugfixes.
+
+Today, a few more bug fixes. Looked into making the webapp
+create non-bare repositories on removable drives, but before I got too far
+into the code, I noticed [there's a big problem with that idea](http://git-annex.branchable.com/forum/usability:_creating_an_archive_on_a_new_external_drive/).
+
+Rest of day was spent getting caught up on forum posts etc. I'm happy to
+read lots of good answers that have been posted while I've been away.
+Here's an excellent example: <http://git-annex.branchable.com/install/fromsource/#comment-5f8ceb060643ae71cd2adc72f0fca3f0>
+
+That led to rewriting the docs for building git-annex from source.
+New page: [[install/fromsource]].
+
+Backlog is now down to 117.
diff --git a/doc/devblog/day_221__another_fine_day_of_bugfixing.mdwn b/doc/devblog/day_221__another_fine_day_of_bugfixing.mdwn
new file mode 100644
index 000000000..0c26f5735
--- /dev/null
+++ b/doc/devblog/day_221__another_fine_day_of_bugfixing.mdwn
@@ -0,0 +1,10 @@
+Working through the forum posts and bugs. Backlog is down to 95.
+
+Discovered the first known security hole in git-annex!
+Turns out that S3 and Glacier remotes that were configured with embedcreds=yes and encryption=pubkey or encryption=hybrid
+didn't actually encrypt the AWS credentials that get embedded into the git
+repo. This doesn't affect any repos set up by the assistant.
+
+I've fixed the problem and am going to make a release soon.
+If your repo is affected, see
+[[upgrades/insecure_embedded_creds]] for what to do about it.
diff --git a/doc/devblog/day_222_preparing_for_debian_release.mdwn b/doc/devblog/day_222_preparing_for_debian_release.mdwn
new file mode 100644
index 000000000..62acc02b2
--- /dev/null
+++ b/doc/devblog/day_222_preparing_for_debian_release.mdwn
@@ -0,0 +1,12 @@
+Made two releases of git-annex, yesterday and today, which turned out to
+contain only Debian changes. So no need for other users to upgrade.
+
+This included fixing building on mips, and arm architectures.
+The mips build was running out of memory, and I was able to work around
+that. Then the arm builds broke today, because of a recent change to the
+version of llvm that has completely trashed ghc. Luckily, I was able
+to work around that too.
+
+Hopefully that will get last week's security fix into Debian testing,
+and otherwise have git-annex in Debian in good shape for the upcoming
+freeze.
diff --git a/doc/devblog/day_223__partial_commit_problem.mdwn b/doc/devblog/day_223__partial_commit_problem.mdwn
new file mode 100644
index 000000000..b2d1ec4e0
--- /dev/null
+++ b/doc/devblog/day_223__partial_commit_problem.mdwn
@@ -0,0 +1,26 @@
+`git commit $some_unlocked_file` seems like a reasonably common thing for
+someone to do, so it's surprising to find that it's a [[little bit broken|/bugs/modified_permissions_persist_after_unlock__44___commit]],
+leaving the file staged in the index after (correctly) committing the
+annexed symlink.
+
+This is caused by either a bug in git and/or by git-annex abusing the
+git post-commit hook to do something it shouldn't do, although it's not
+unique in using the post-commit hook this way. I'm talking this over with
+Junio, and the fix will depend on the result of that conversation. It might
+involve git-annex detecting this case and canceling the commit, asking the
+user to `git annex add` the file first. Or it might involve a new git hook,
+although I have not had good luck getting hooks added to git before.
+
+----
+
+Meanwhile, today I did some other bug fixing. Fixed the Internet Archive
+support for embedcreds=yes. Made `git annex map` work for remote repos
+in a directory with an implicit ".git" prefix. And fixed a
+strange problem where the repository repair code caused a `git gc` to run
+and then tripped over its pid file.
+
+I seem to have enough fixes to make another release pretty soon.
+Especially since the current release of git-annex doesn't build with yesod
+1.4.
+
+Backlog: 94 messages
diff --git a/doc/devblog/day_224-226__long_rainy_slog.mdwn b/doc/devblog/day_224-226__long_rainy_slog.mdwn
new file mode 100644
index 000000000..9c26b134b
--- /dev/null
+++ b/doc/devblog/day_224-226__long_rainy_slog.mdwn
@@ -0,0 +1,14 @@
+3 days spent redoing the Android autobuilder! The new version of
+yesod-routes generates TH splices that break the EvilSplicer. So after
+updating everything to new versions for the Nth time, I instead went back
+to older versions. The autobuilder now uses Debian jessie, instead of
+wheezy. And all haskell packages are pinned to use the same version
+as in jessie, rather than the newest versions. Since jessie is quite near
+to being frozen, this should make the autobuilder much less prone to
+getting broken by new versions of haskell packages that need patches for
+Android.
+
+I happened to stumble over <http://hackage.haskell.org/package/setenv>
+while doing that. This supports setting and unsetting environment variables
+on Windows, which I had not known a way to do from Haskell. Cleaned up
+several ugly corners of the Windows port using it.
diff --git a/doc/devblog/day_227__info.mdwn b/doc/devblog/day_227__info.mdwn
new file mode 100644
index 000000000..0b5950fe5
--- /dev/null
+++ b/doc/devblog/day_227__info.mdwn
@@ -0,0 +1,33 @@
+Today, I've expanded `git annex info` to also be able to be used on annexed files
+and on remotes. Looking at the info for an individual remote is quite
+useful, especially for answering questions like: Does the remote have
+embedded creds? Are they encrypted? Does it use chunking? Is that old style
+chunking?
+
+<pre>
+remote: rsync.net
+description: rsync.net demo remote
+uuid: 15b42f18-ebf2-11e1-bea1-f71f1515f9f1
+cost: 250.0
+type: rsync
+url: xxx@usw-s002.rsync.net:foo
+encryption: encrypted (to gpg keys: 7321FC22AC211D23 C910D9222512E3C7)
+chunking: 1 MB chunks
+</pre>
+
+<pre>
+remote: ia3
+description: test [ia3]
+uuid: 12817311-a189-4de3-b806-5f339d304230
+cost: 200.0
+type: S3
+creds: embedded in git repository (not encrypted)
+bucket: joeyh-test-17oct-3
+internet archive item: http://archive.org/details/joeyh-test-17oct-3
+encryption: not encrypted
+chunking: none
+</pre>
+
+Should be quite useful info for debugging too..
+
+Yesterday, I fixed a bug that prevented retrieving files from Glacier.
diff --git a/doc/devblog/day_229__S3_multipart.mdwn b/doc/devblog/day_229__S3_multipart.mdwn
new file mode 100644
index 000000000..caccda07a
--- /dev/null
+++ b/doc/devblog/day_229__S3_multipart.mdwn
@@ -0,0 +1,11 @@
+Some progress on the [[bugs/S3_upload_not_using_multipart]] bug. The aws
+library now includes the multipart API. However, when I dug into it, it
+looks like the API needs some changes to get the ETAG of each uploaded
+part. Once that's fixed, git-annex should be able to support S3 multipart
+uploads, although I think that git-annex's own chunking is better in most
+situations -- it supports resuming uploads and downloads better. The main
+use case for S3 multipart seems to be using git-annex to publish large
+files.
+
+Also, managed to get the backlog down from 100 to just 65 messages,
+including catching up on quite old parts of backlog.
diff --git a/doc/devblog/day_230__S3_multipart_round_2.mdwn b/doc/devblog/day_230__S3_multipart_round_2.mdwn
new file mode 100644
index 000000000..a73579df8
--- /dev/null
+++ b/doc/devblog/day_230__S3_multipart_round_2.mdwn
@@ -0,0 +1,9 @@
+More work on S3 multipart uploads, since the aws library got fixed today
+to return the ETAGs for the parts. I got multipart uploads fully working,
+including progress display.
+
+The code takes care to stream each part in from the file and out the
+socket, so I'd hoped it would have good memory behavior. However, for
+reasons I have not tracked down, something in the aws library is causing
+each part to be buffered in memory. This is a problem, since I want to
+use 1 gb as the default part size.
diff --git a/doc/devblog/day_231__S3_multipart_wrapped_up.mdwn b/doc/devblog/day_231__S3_multipart_wrapped_up.mdwn
new file mode 100644
index 000000000..df8ecb601
--- /dev/null
+++ b/doc/devblog/day_231__S3_multipart_wrapped_up.mdwn
@@ -0,0 +1,13 @@
+S3 multipart is finally completely working. I still don't understand the
+memory issue that stumped me yesterday, but rewrote the code to use a
+simpler approach, which avoids the problem. Various other issues, and
+testing it with large files, took all day.
+
+This is now merged into the `s3-aws` branch, so when that branch lands, S3
+support will massively improve, from the current situation of using a buggy
+library that buffers uploaded files in memory, and cannot support very
+large file uploads at all, to being able to support hopefully files of
+arbitrary hugeness (at least up to a few terabytes).
+
+BTW, thanks to Aristid Breitkreuz and Junji Hashimoto for working on the
+multipart support in the `aws` library.
diff --git a/doc/devblog/day_232__OSX_Yosemite.mdwn b/doc/devblog/day_232__OSX_Yosemite.mdwn
new file mode 100644
index 000000000..c8521fbd4
--- /dev/null
+++ b/doc/devblog/day_232__OSX_Yosemite.mdwn
@@ -0,0 +1,6 @@
+The OSX autobuilder has been updated to OSX 10.10 Yosemite. The
+[resulting build](https://downloads.kitenet.net/git-annex/OSX/current/10.10_Yosemite/git-annex.dmg)
+might also work on 10.9 Mavericks too, and I'd appreciate help testing that.
+
+Went ahead and fixed the [[partial commit problem|bugs/modified_permissions_persist_after_unlock__44___commit]]
+by making the pre-commit hook detect and block problimatic partial commits.
diff --git a/doc/devblog/day_233__direct_mode_proxy.mdwn b/doc/devblog/day_233__direct_mode_proxy.mdwn
new file mode 100644
index 000000000..21a2f2d00
--- /dev/null
+++ b/doc/devblog/day_233__direct_mode_proxy.mdwn
@@ -0,0 +1,29 @@
+Ever since the direct mode guard was added a year ago, direct mode has been
+a lot safer to use, but very limited in the git commands that could be run
+in a direct mode repository.
+
+The worst limitation was that there was no way to `git revert` unwanted
+changes. But also, there was no way to check out different branches,
+or run commands like `git mv`.
+
+Today I made `git annex proxy`, which allows doing all of those things,
+and more. [documentation here](http://git-annex.branchable.com/direct_mode/#index5h2)
+
+It's so flexible that I'm not sure where the boundries lie yet, but it
+seems it will work for any git command that updates both the work tree and
+the index. Some git commands only update one or the other and not both and
+won't work with the proxy. As an advanced user tool, I think this is a
+great solution. I still want to make a simpler
+[[undo command|todo/direct_mode_undo]] that can nicely integrate into file
+managers.
+
+The implementation of `git annex proxy` is
+[quite simple](http://source.git-annex.branchable.com/?p=source.git;a=blob;f=Command/Proxy.h), because it
+reuses all the complicated work tree update code that was already written
+for `git annex merge`.
+
+----
+
+And here's the lede I buried: I've gotten two years of funding to work
+on git-annex part-time!
+[Details in my personal blog](http://joeyh.name/blog/entry/continuing_to_be_pleasantly_surprised/).
diff --git a/doc/devblog/day_234__undo_undo.mdwn b/doc/devblog/day_234__undo_undo.mdwn
new file mode 100644
index 000000000..270bee5d7
--- /dev/null
+++ b/doc/devblog/day_234__undo_undo.mdwn
@@ -0,0 +1,6 @@
+Built the `git annex undo` command. This is intended to be a simple
+interface for users who have changed one file, and want to undo the change
+without the complexities of `git revert` or `git annex proxy`. It's simple
+enough that I added undo as an action in the file manager integration.
+
+And yes, you can undo an undo. :)
diff --git a/doc/devblog/day_235__thanksgiving_backlog.mdwn b/doc/devblog/day_235__thanksgiving_backlog.mdwn
new file mode 100644
index 000000000..4cc28b5a1
--- /dev/null
+++ b/doc/devblog/day_235__thanksgiving_backlog.mdwn
@@ -0,0 +1,18 @@
+Back from the holiday, catching up on traffic. Backlog stands at 113
+messages.
+
+Here's a nice tip that Giovanni added:
+[[tips/publishing_your_files_to_the_public]] (using a public S3 bucket)
+
+Just before going on break, I added a new feature that I didn't mention
+here. `git annex diffdriver` integrates git-annex with git's external diff
+driver support. So if you have a smart diff program that can diff, say,
+genome sequences, or cat videos, or something in some useful way, it
+can be hooked up to `git diff` and will be able to see the content of
+annexed files.
+
+Also today, I spent a couple hours today updating the license file included
+in the standalone git-annex builds to include the licenses of all the
+haskell libraries git-annex depends on. Which I had for some reason not
+thought to include before, despite them getting built into the git-annex
+binary.
diff --git a/doc/devblog/day_236__release_day.mdwn b/doc/devblog/day_236__release_day.mdwn
new file mode 100644
index 000000000..48cbce09d
--- /dev/null
+++ b/doc/devblog/day_236__release_day.mdwn
@@ -0,0 +1,10 @@
+Today's release has a month's accumulated changes, including several nice
+new features: `git annex undo`, `git annex proxy`, `git annex diffdriver`,
+and I was able to land the s3-aws branch in this release too, so lots of
+improvements to the S3 support.
+
+Spent several hours getting the autobuilders updated, with the haskell
+`aws` library installed. Android and armel builds are still out of date.
+
+Also fixed two Windows bugs related to the location of the bundled ssh
+program.
diff --git a/doc/devblog/day_237__extending_addurl.mdwn b/doc/devblog/day_237__extending_addurl.mdwn
new file mode 100644
index 000000000..e0129398e
--- /dev/null
+++ b/doc/devblog/day_237__extending_addurl.mdwn
@@ -0,0 +1,14 @@
+Worked on [[todo/extensible_addurl]] today. When `git annex addurl` is run,
+remotes will be asked if they claim the url, and whichever remote does will
+be used to download it, and location tracking will indicate that remote
+contains the object. This is a masive 1000 line patch touching 30 files,
+including follow-on changes in `rmurl` and `whereis` and even `rekey`.
+
+It should now be possible to build an external special remote that handles
+*.torrent and magnet: urls and passes them off to a bittorrent client for
+download, for example.
+
+Another use for this would be to make an external special remote that
+uses youtube-dl or some other program than quvi for downloading web videos.
+The builtin quvi support could probably be moved out of the web special
+remote, to a separate remote. I haven't tried to do that yet.
diff --git a/doc/devblog/day_238__extending_addurl_further.mdwn b/doc/devblog/day_238__extending_addurl_further.mdwn
new file mode 100644
index 000000000..0dd376436
--- /dev/null
+++ b/doc/devblog/day_238__extending_addurl_further.mdwn
@@ -0,0 +1,67 @@
+Some more work on the interface that lets remotes claim urls for `git annex
+addurl`. Added support for remotes suggesting a filename to use when
+adding an url. Also, added support for urls that result in multiple files
+when downloaded. The obvious use case for that is an url to a torrent that
+contains multiple files.
+
+Then, got `git annex importfeed` to also check if a remote claims an url.
+
+Finally, I put together a quick demo external remote using this new
+interface. [[special_remotes/external/git-annex-remote-torrent]]
+adds support for torrent files to git-annex, using [aria2c](http://aria2.sourceforge.net/) to download them.
+It supports multi-file torrents, but not magnet links. (I'll probably
+rewrite this more robustly and efficiently in haskell sometime soon.)
+
+Here's a demo:
+
+<pre>
+# git annex initremote torrent type=external encryption=none externaltype=torrent
+initremote torrent ok
+(Recording state in git...)
+# ls
+# git annex addurl --fast file:///home/joey/my.torrent
+ % Total % Received % Xferd Average Speed Time Time Time Current
+ Dload Upload Total Spent Left Speed
+100 198 100 198 0 0 3946k 0 --:--:-- --:--:-- --:--:-- 3946k
+addurl _home_joey_my.torrent/bar (using torrent) ok
+addurl _home_joey_my.torrent/baz (using torrent) ok
+addurl _home_joey_my.torrent/foo (using torrent) ok
+(Recording state in git...)
+# ls _home_joey_my.torrent/
+bar@ baz@ foo@
+# git annex get _home_joey_my.torrent/baz
+get _home_joey_my.torrent/baz (from torrent...)
+ % Total % Received % Xferd Average Speed Time Time Time Current
+ Dload Upload Total Spent Left Speed
+ 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-100 198 100 198 0 0 3580k 0 --:--:-- --:--:-- --:--:-- 3580k
+
+12/11 18:14:56 [NOTICE] IPv4 DHT: listening on UDP port 6946
+
+12/11 18:14:56 [NOTICE] IPv4 BitTorrent: listening on TCP port 6961
+
+12/11 18:14:56 [NOTICE] IPv6 BitTorrent: listening on TCP port 6961
+
+12/11 18:14:56 [NOTICE] Seeding is over.
+12/11 18:14:57 [NOTICE] Download complete: /home/joey/tmp/tmp.Le89hJSXyh/tor
+
+12/11 18:14:57 [NOTICE] Your share ratio was 0.0, uploaded/downloaded=0B/0B
+
+Download Results:
+gid |stat|avg speed |path/URI
+======+====+===========+=======================================================
+71f6b6|OK | 0B/s|/home/joey/tmp/tmp.Le89hJSXyh/tor/baz
+
+Status Legend:
+(OK):download completed.
+ok
+(Recording state in git...)
+# git annex find
+_home_joey_my.torrent/baz
+# git annex whereis _home_joey_my.torrent/baz
+whereis _home_joey_my.torrent/baz (2 copies)
+ 1878241d-ee49-446d-8cce-041c46442d94 -- [torrent]
+ 52412020-2bb3-4aa4-ae16-0da22ba48875 -- joey@darkstar:~/tmp/repo [here]
+
+ torrent: file:///home/joey/my.torrent#2
+ok
+</pre>
diff --git a/doc/devblog/day_239-240__bittorrent_remote.mdwn b/doc/devblog/day_239-240__bittorrent_remote.mdwn
new file mode 100644
index 000000000..3b466540f
--- /dev/null
+++ b/doc/devblog/day_239-240__bittorrent_remote.mdwn
@@ -0,0 +1,16 @@
+Spent a couple days adding a [[bittorrent_special_remote|special_remotes/bittorrent]]
+to git-annex. This is better than the demo external torrent remote I made
+on Friday: It's built into git-annex; it supports magnet links; it even
+parses aria2c's output so the webapp can display progress bars.
+
+Besides needing `aria2` to download torrents, it also currently depends on
+the `btshowmetainfo` command from the original bittorrent client (or
+bittornado). I looked into using
+<http://hackage.haskell.org/package/torrent> instead,
+but that package is out of date and doesn't currently build. I've got a
+patch fixing that, but am waiting to hear back from the library's author.
+
+There is a bit of a behavior change here; while before `git annex addurl` of
+a torrent file would add the torrent file itself to the repository, it now will
+download and add the contents of the torrent. I think/hope this behavior
+change is ok..
diff --git a/doc/devblog/day_241-242__end_of_year_cleanup.mdwn b/doc/devblog/day_241-242__end_of_year_cleanup.mdwn
new file mode 100644
index 000000000..4044ae183
--- /dev/null
+++ b/doc/devblog/day_241-242__end_of_year_cleanup.mdwn
@@ -0,0 +1,22 @@
+Took a holiday week off from git-annex development, and started a new side
+project building [shell-monad](http://joeyh.name/code/shell-monad/), which
+might eventually be used in some parts of git-annex that generate shell
+scripts.
+
+Message backlog is 165 and I have not dove back into it, but I have started
+spinning back up the development engines in preparation for new year
+takeoff.
+
+Yesterday, added some minor new features -- `git annex sync` now
+supports git remote groups, and I added a new plumbing command
+`setpresentkey` for those times when you really need to mess with
+git-annex's internal bookkeeping. Also cleaned up a lot of build warning
+messages on OSX and Windows.
+
+Today, first some improvements to make `addurl` more robust.
+Then the rest of the day was spent on Windows. Fixed (again)
+the Windows port's problem with rsync hating DOS style filenames. Got
+the rsync special remote fully working on Windows for the first time.
+
+Best of all, got the Windows autobuilder to run the test
+suite successfully, and fixed a couple test suite failures on Windows.
diff --git a/doc/devblog/day_243__android_5.mdwn b/doc/devblog/day_243__android_5.mdwn
new file mode 100644
index 000000000..96bf67268
--- /dev/null
+++ b/doc/devblog/day_243__android_5.mdwn
@@ -0,0 +1,16 @@
+I've finally been clued into why [git-annex isn't working on Android 5](http://git-annex.branchable.com/bugs/__91__Android__93___5.0_needs_PIE_executables___40__git_annex_does_not_work_on_android_5.0__41__/), and
+it seems fixing it is as easy as pie.. That is, passing -pie -FPIE to the
+linker. I've added a 5.0 build to the Android autobuilder. It is currently
+untested, so I hope to get feedback from someone with an Android 5 device;
+a [test build](http://downloads.kitenet.net/git-annex/autobuild/android/5.0/git-annex.apk) is now available.
+
+I've been working through the backlog of messages today, and gotten down
+from 170 to 128. Mostly answered a lot of interesting questions,
+such as "[Where to start reading the source code?](http://git-annex.branchable.com/install/fromsource/#comment-cb68f2aa0a598d0150db852834ea07da)"
+
+Also did some work to make git-annex check git versions at runtime more
+often, instead of assuming the git version it was built against.
+It turns out this could be done pretty inexpensively in 2 of 4 cases,
+and one of the 2 fixed was the git check-attr behavior change,
+which could lead to git-annex add hanging if used with an old version of
+git.
diff --git a/doc/devblog/day_243__android_5/comment_1_59a139108f4cf20dd7443a5fa767f614._comment b/doc/devblog/day_243__android_5/comment_1_59a139108f4cf20dd7443a5fa767f614._comment
new file mode 100644
index 000000000..a3acbbd42
--- /dev/null
+++ b/doc/devblog/day_243__android_5/comment_1_59a139108f4cf20dd7443a5fa767f614._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkGCmVc5qIJaQQgG82Hc5zzBdAVdhe2JEM"
+ nickname="Bruno"
+ subject="comment 1"
+ date="2015-01-06T01:52:03Z"
+ content="""
+I got \"error: only position independent executables (PIE) are supported\" on a Nexus 4 (Android 5.0.1)
+http://i.imgur.com/TXO4fcf.png
+"""]]
diff --git a/doc/devblog/day_244__relative_paths.mdwn b/doc/devblog/day_244__relative_paths.mdwn
new file mode 100644
index 000000000..f631dbc8f
--- /dev/null
+++ b/doc/devblog/day_244__relative_paths.mdwn
@@ -0,0 +1,14 @@
+git-annex internally uses all absolute paths all the time.
+For a couple of reasons, I'd like it to use relative paths.
+The best reason is, it would let a repository be moved while git-annex was
+running, without breaking. A lesser reason is that Windows has some
+crazy small limit on the length of a path (260 bytes?!), and using relative
+paths would avoid hitting it so often.
+
+I tried to do this today, in a `relativepaths` branch. I eventually got the
+test suite to pass, but I am very unsure about this change. A lot of random
+assumptions broke, and the test suite won't catch them all. In a few
+places, git-annex commands do change the current directory, and that
+will break with relative paths.
+
+A frustrating day.
diff --git a/doc/devblog/day_245__yak_shaving.mdwn b/doc/devblog/day_245__yak_shaving.mdwn
new file mode 100644
index 000000000..0e1a7dbaf
--- /dev/null
+++ b/doc/devblog/day_245__yak_shaving.mdwn
@@ -0,0 +1,9 @@
+Worked more on the `relativepaths` branch last night, and I am actually
+fairly happy with it now, and plan to merge it after I've run it for a bit
+longer myself.
+
+It seems that I did manage to get a git-annex executable that is built PIE
+so it will work on Android 5.0. But all the C programs like busybox
+included in the Android app also have to be built that way. Arranging for
+everything to get built twice and with the right options took up most of
+today.
diff --git a/doc/devblog/day_246__old_todos.mdwn b/doc/devblog/day_246__old_todos.mdwn
new file mode 100644
index 000000000..6957cff52
--- /dev/null
+++ b/doc/devblog/day_246__old_todos.mdwn
@@ -0,0 +1,9 @@
+Got a release out today.
+
+I'm feeling a little under the weather, so wanted something easy to do in
+the rest of the day that would be nice and constructive. Ended up going
+over the todo list. Old todos come in three groups; hard problems, already
+solved, and easy changes that never got done. I left the first group alone,
+closed many todos in the second group, and implemented a few easy changes.
+Including `git annex sync -m` and adding some more info to `git annex info
+remote`.
diff --git a/doc/devblog/day_247__hooks_and_large_files_on_windows.mdwn b/doc/devblog/day_247__hooks_and_large_files_on_windows.mdwn
new file mode 100644
index 000000000..59865b36b
--- /dev/null
+++ b/doc/devblog/day_247__hooks_and_large_files_on_windows.mdwn
@@ -0,0 +1,30 @@
+Today I got The pre-commit-annex hook working on Windows. It turns out that
+msysgit runs hook scripts even when they're not executable, and it parses
+the #! line itself. Now git-annex does too, on Windows.
+
+Also, added a new chapter to the walkthrough,
+[[walkthrough/using_special_remotes]]. They clearly needed to be mentioned,
+especially to show the workflow of running initremote in one repository,
+then syncing another repository and running enableremote to enable the same
+special remote there.
+
+Then more fun Windows porting! Turns out git-annex on Windows didn't handle
+files > 2 gb correctly; the way it was getting file size
+[uses a too small data type on Windows](https://github.com/jystic/unix-compat/issues/16).
+Luckily git-annex itself treats all file sizes as unbounded Integers,
+so I was easily able to swap in a `getFileSize` that returns correct
+values for large files.
+
+While I haven't blogged since the 13th and have not been too active until
+today, there are still a number of little improvements that have been done
+here and there.
+
+Including a fix for an interesting bug where the assistant would tell
+the remotedaemon that the network connection has been lost, twice in a row,
+and this would make the remotedeamon fail to reconnect to the remote when
+the network came up. I'm not sure what situation triggers this bug (Maybe
+machines with 2 interfaces? Or maybe a double disconnection event for 1
+interface?), but I was able to reproduce it by sending messages to the
+remotedaemon, and so fixed it.
+
+Backlog is down to 118 messages.
diff --git a/doc/devblog/day_248__workload_tuning.mdwn b/doc/devblog/day_248__workload_tuning.mdwn
new file mode 100644
index 000000000..4e106ef09
--- /dev/null
+++ b/doc/devblog/day_248__workload_tuning.mdwn
@@ -0,0 +1,54 @@
+Today I put together a lot of things I've been thinking about:
+
+* There's some evidence that git-annex needs tuning to handle some unusual
+ repositories. In particular very big repositories might benefit from
+ different object hashing.
+* It's really hard to handle [[upgrades]] that change the fundamentals of
+ how git-annex repositories work. Such an upgrade would need every
+ git-annex user to upgrade their repository, and would be very painful.
+ It's hard to imagine a change that is worth that amount of pain.
+* There are other changes some would like to see (like lower-case object
+ hash directory names) that are certianly not enough to warrant a flag
+ day repo format upgrade.
+* It would be nice to let people who want to have some flexability to play
+ around with changes, in their own repos, as long as they don't a)
+ make git-annex a lot more complicated, or b) negatively impact others.
+ (Without having to fork git-annex.)
+
+This is discussed in more depth in [[design/v6]].
+
+The solution, which I've built today, is support for
+[[tuning]] settings, when a new repository is first created. The resulting
+repository will be different in some significant way from a default
+git-annex repository, but git-annex will support it just fine.
+
+The main limitations are:
+
+* You can't change the tuning of an existing repository
+ (unless a tool gets written to transition it).
+* You absolutely don't want to merge repo B, which has been tuned in
+ nonstandard ways, into repo A which has not. Or A into B. (Unless you like
+ watching slow motion car crashes.)
+
+I built all the infrastructure for this today. Basically, the git-annex
+branch gets a record of all tunings that have been applied, and they're
+automatically propigated to new clones of a repository.
+
+And I implemented the first tunable setting:
+
+ git -c annex.tune.objecthashlower=true annex init
+
+This is definitely an experimental feature for now.
+`git-annex merge` and similar commands will detect attempts to merge
+between incompatably tuned repositories, and error out. But, there are a
+lot of ways to shoot yourself in the foot if you use this feature:
+
+* Nothing stops `git merge` from merging two incompatable repositories.
+* Nothing stops any version of git-annex older from today from merging
+ either.
+
+Now that the groundwork is laid, I can pretty easily, and inexpensively,
+add more tunable settings. The next two I plan to add are already
+documented, `annex.tune.objecthashdirectories` and
+`annex.tune.branchhashdirectories`. Most new tunables should take about 4
+lines of code to add to git-annex.
diff --git a/doc/devblog/day_249_onward.mdwn b/doc/devblog/day_249_onward.mdwn
new file mode 100644
index 000000000..dac851c54
--- /dev/null
+++ b/doc/devblog/day_249_onward.mdwn
@@ -0,0 +1,28 @@
+Made a release yesterday, and caught up on most recent messages
+earlier this week. Backlog stands at 128 messages.
+
+Had to deal with an ugly problem with /usr/bin/glacier today. Seems that
+there are multiple programs all using that name, some of them shipping in
+some linux distributions, and the one from boto fails to fail when passed
+parameters it doesn't understand. Yugh! I had to make git-annex probe to
+make sure the right glacier program is installed.
+
+I'm planning to deprecate the glacier special remote at some point.
+Instead, I'd like to make the S3 special remote support the S3-glacier
+lifecycle, so objects can be uploaded to S3, set to transition to
+glacier, and then if necessary pulled back from glacier to S3. That should
+be much simpler and less prone to break.
+
+But not yet; [haskell-aws needs glacier support added](https://github.com/aristidb/aws/issues/81).
+Or I could use the new amazonka library, but I'd rather stick with
+haskell-aws.
+
+Some other minor improvements today included adding `git annex
+groupwanted`, which makes for easier examples than using vicfg, and
+making `git annex import` support options like --include and --exclude.
+
+Also I moved a many file matching options to only be accepted by
+the commands that actually use them. Of the remaining common
+options, most of them make sense for every command to accept (eg, --force
+and --debug). It would make sense to move --backend, --notify-start/finish,
+and perhaps --user-agent. Eventually.
diff --git a/doc/devblog/day_249_onward/comment_1_80af832a132ee37a470d0586ae751f2a._comment b/doc/devblog/day_249_onward/comment_1_80af832a132ee37a470d0586ae751f2a._comment
new file mode 100644
index 000000000..d5984716d
--- /dev/null
+++ b/doc/devblog/day_249_onward/comment_1_80af832a132ee37a470d0586ae751f2a._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlOl_Hf78lWy2iVDHYIey_zc1qVBQjlJgw"
+ nickname="Stefan"
+ subject="comment 1"
+ date="2015-02-07T10:04:31Z"
+ content="""
+Please announce that deprecation well in advance, though. I feel your pain and have started to migrate to an S3->Glacier setup myself, but getting data out of Glacier is fairly expensive if done quickly.
+
+(And due to git-annex' ease of adding more data, I got a fairly large amount of backups, and would also prefer not to be stuck on an old version of git-annex just for Glacier support.)
+"""]]
diff --git a/doc/devblog/day_249_onward/comment_2_ada958a8df4da36b25a456a7700b310f._comment b/doc/devblog/day_249_onward/comment_2_ada958a8df4da36b25a456a7700b310f._comment
new file mode 100644
index 000000000..881eef278
--- /dev/null
+++ b/doc/devblog/day_249_onward/comment_2_ada958a8df4da36b25a456a7700b310f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2015-02-09T18:38:27Z"
+ content="""
+Don't worry, by "deprecate glacier", I mean at worst "refuse to make new glacier
+remotes". No plans to remove a remote that someone is using.
+"""]]
diff --git a/doc/devblog/day_250__backog_bugfixing.mdwn b/doc/devblog/day_250__backog_bugfixing.mdwn
new file mode 100644
index 000000000..9f5d3239b
--- /dev/null
+++ b/doc/devblog/day_250__backog_bugfixing.mdwn
@@ -0,0 +1,10 @@
+Plowing through the backlog today, and fixing quite a few bugs! Got the
+backlog down to 87 messages from ~140. And some of the things I got to were
+old and/or hard.
+
+About a third of the day was spent revisiting
+[[bugs/git-annex_branch_shows_commit_with_looong_commitlog]].
+I still don't understand how that behavior can happen, but I have a
+donated repository where it did happen. Made several changes to try to make
+the problem less likely to occur, and not as annoying when it does occur,
+and maybe get me more info if it does happen to someone again.
diff --git a/doc/devblog/day_251-252__dusting_off_the_roadmap.mdwn b/doc/devblog/day_251-252__dusting_off_the_roadmap.mdwn
new file mode 100644
index 000000000..0a0e50f64
--- /dev/null
+++ b/doc/devblog/day_251-252__dusting_off_the_roadmap.mdwn
@@ -0,0 +1,12 @@
+Many more little improvements made yesterday and part of today. While
+it's only been a week since the last release, it feels almost time
+to make another one, after so many recent bug fixes and small improvements.
+
+I've updated the [[design/roadmap]]. I have been operating without a
+roadmap for half a year, and it would be nice to have some plans.
+Keeping up with bug reports and requests as they come in is a fine mode
+of work, but it can feel a little aimless. It's good to have a planned out
+course, or at least some longer term goals.
+
+After the next release, I've penciled in the second half of this month to
+work on the [[design/caching_database]].
diff --git a/doc/devblog/day_253__ssh-options.mdwn b/doc/devblog/day_253__ssh-options.mdwn
new file mode 100644
index 000000000..805363f3c
--- /dev/null
+++ b/doc/devblog/day_253__ssh-options.mdwn
@@ -0,0 +1,5 @@
+Spent a couple hours to make the ssh-options git config setting be used
+in more places. Now it's used everywhere that git-annex supports ssh
+caching, including the `git pull` and `git push` done by `sync` and by the
+assistant. Also the `remotedaemon` and the gcrypt, rsync, and ddar
+special remotes.
diff --git a/doc/devblog/day__228_new_AWS.mdwn b/doc/devblog/day__228_new_AWS.mdwn
new file mode 100644
index 000000000..3003a7985
--- /dev/null
+++ b/doc/devblog/day__228_new_AWS.mdwn
@@ -0,0 +1,13 @@
+New AWS region in Germany announced today. git-annex doesn't support it
+yet, unless you're using the `s3-aws` branch.
+
+I cleaned up that branch, got it building again, and re-tested it with
+`testremote`, and then fixed a problem the test suite found that was
+caused by some changes in the haskell aws library.
+
+Unfortunately, s3-aws is [not ready to be merged](http://git-annex.branchable.com/bugs/new_AWS_region___40__eu-central-1__41__)
+because of some cabal dependency problems involving `dbus` and `random`. I did
+go ahead and update Debian's haskell-aws package to cherry-pick
+from a newer version the change needed for Inernet Archive
+support, which allows building the s3-aws branch on Debian.
+Getting closer..
diff --git a/doc/direct_mode.mdwn b/doc/direct_mode.mdwn
index 749d3a6e2..bd0cb81a0 100644
--- a/doc/direct_mode.mdwn
+++ b/doc/direct_mode.mdwn
@@ -3,8 +3,13 @@ git, and in turn point at the content of large files that is stored in
`.git/annex/objects/`. Direct mode gets rid of the symlinks.
The advantage of direct mode is that you can access files directly,
-including modifying them. The disadvantage is that most regular git
-commands cannot be used in a direct mode repository.
+including modifying them. The disadvantage is that many regular git
+commands cannot be used in a direct mode repository, since they don't
+understand how to update its working tree.
+
+[[!toc]]
+
+## enabling (and disabling) direct mode
Normally, git-annex repositories start off in indirect mode. With some
exceptions:
@@ -15,8 +20,6 @@ exceptions:
into direct mode.
* Windows always uses direct mode.
-## enabling (and disabling) direct mode
-
Any repository can be converted to use direct mode at any time, and if you
decide not to use it, you can convert back to indirect mode just as easily.
Also, you can have one clone of a repository using direct mode, and another
@@ -82,11 +85,29 @@ There are still lots of git commands you can use in direct mode. For
example, you can run `git log` on files, run `git push`, `git fetch`,
`git config`, `git remote add` etc.
+## proxing git commands in direct mode
+
+For those times when you really need to run a command like `git revert
+HEAD` in a direct mode repository, git-annex has the ability to proxy
+the command to work in direct mode.
+
+For example:
+
+ git annex proxy -- git revert HEAD
+
+ git annex proxy -- git checkout HEAD^^
+
+ git annex proxy -- git mv mydir newname
+
+This works by setting up a temporary work tree, letting the git
+command run on that work tree, and then updating the real work
+tree to reflect any changes staged or committed by the git command,
+with appropriate handling of the direct mode files.
+
## forcing git to use the work tree in direct mode
This is for experts only. You can lose data doing this, or check enormous
files directly into your git repository, and it's your fault if you do!
-Also, there should be no good reason to need to do this, ever.
Ok, with the warnings out of the way, all you need to do to make any
git command access the work tree in direct mode is pass it
diff --git a/doc/direct_mode/comment_12_7d507b6f87085a19d8dd5014f580922b._comment b/doc/direct_mode/comment_12_7d507b6f87085a19d8dd5014f580922b._comment
new file mode 100644
index 000000000..bc8f00680
--- /dev/null
+++ b/doc/direct_mode/comment_12_7d507b6f87085a19d8dd5014f580922b._comment
@@ -0,0 +1,24 @@
+[[!comment format=mdwn
+ username="http://mildred.fr/"
+ ip="82.247.184.53"
+ subject="Fixing symlinks to the annex store in direct mode"
+ date="2014-07-16T06:52:33Z"
+ content="""
+I have an issue with direct mode: I have tons of symlinks that points to the git-annex store, while in direct mode. After investigation, I found that these files don't seem to be part of the repository. I can check with:
+
+ $ git -c core.bare=false status --porcelain tr.html
+ ?? Documentation/Mozilla/developer.mozilla.org/tr.html
+
+ $ ls -l tr.html
+ lrwxrwxrwx 1 mildred mildred 205 10 juin 16:22 tr.html -> ../../../.git/annex/objects/gF/z1/SHA256E-s31895--c873982bd742ba8db6e026afee26b7ab2f75f54f587304d8c2d877db3900c0f6.html/SHA256E-s31895--c873982bd742ba8db6e026afee26b7ab2f75f54f587304d8c2d877db3900c0f6.html
+
+The link is valid, and is probably pointing to a unused file in the annex store. How to add these files back?
+
+If I was in indirect mode, I could simply use `git add tr.html` (and **not** `git annex add`). This would stage to the git staging area the symlink, and all would be well.
+
+I found that in direct mode, the same was true. The command is:
+
+ git -c core.bare=false add tr.html
+
+The file is added to the repository, and the link is converted to the target file. The question now is why? There is no hook on the add command. Could it be the annex assistant? If that didn't worked, my question would have been: how to checkout a file in direct mode?
+"""]]
diff --git a/doc/direct_mode/comment_13_5169c5541970d3b3bc1e080e07539b22._comment b/doc/direct_mode/comment_13_5169c5541970d3b3bc1e080e07539b22._comment
new file mode 100644
index 000000000..7d15fca6f
--- /dev/null
+++ b/doc/direct_mode/comment_13_5169c5541970d3b3bc1e080e07539b22._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://mildred.fr/"
+ ip="82.247.184.53"
+ subject="Re: Fixing symlinks to the annex store in direct mode"
+ date="2014-07-16T07:04:08Z"
+ content="""
+What I said was just wrong. Instead of trying on tr.html, I tried with a copy of that file. But making the copy of that file had the wanted effect, transforming the symlink to the actual file. Probably the assistant monitoring file creation, and transforming indirect file to direct file. Or perhaps the `cp` command follows symlinks by default (I thought it didn't).
+"""]]
diff --git a/doc/direct_mode/comment_14_03a02e689d92faa596de98e02b2ffe28._comment b/doc/direct_mode/comment_14_03a02e689d92faa596de98e02b2ffe28._comment
new file mode 100644
index 000000000..ce47a5eb8
--- /dev/null
+++ b/doc/direct_mode/comment_14_03a02e689d92faa596de98e02b2ffe28._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 14"
+ date="2014-07-16T17:51:28Z"
+ content="""
+I kinda wish people would post questions to the forum, and not clutter up this page..
+
+Anyway, there have been past bugs in the direct mode code that caused some files to not be checked out in direct mode, but stay as symlinks pointing at the content. That can be fixed by running `git annex fsck`. But, I am not aware of any problem that can leave a git-annex symlink that is not checked into git at all. Perhaps you copied the symlink from another location?
+"""]]
diff --git a/doc/direct_mode/comment_15_599b2285d24ae1244a1945d572b2c397._comment b/doc/direct_mode/comment_15_599b2285d24ae1244a1945d572b2c397._comment
new file mode 100644
index 000000000..d8c5e825f
--- /dev/null
+++ b/doc/direct_mode/comment_15_599b2285d24ae1244a1945d572b2c397._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmjjrCHEIa4vpDIJoBuJsrF3y8wZQElVHw"
+ nickname="Siyuan"
+ subject="Non-direct mode for Windows"
+ date="2014-10-08T15:55:04Z"
+ content="""
+Why Windows is restricted to direct mode? NTFS has symbolic links too. Is that fundamentally different from POSIX symlinks that it cannot be done?
+"""]]
diff --git a/doc/download.mdwn b/doc/download.mdwn
index 8c6f5b514..46d397fcd 100644
--- a/doc/download.mdwn
+++ b/doc/download.mdwn
@@ -26,13 +26,10 @@ The git repository has some branches:
(merge it into master if you need it)
* `no-bloom` avoids using bloom filters. (merge it into master if you need it)
* `no-s3` avoids using the S3 library (merge it into master if you need it)
-* `debian-stable` contains the latest backport of git-annex to Debian
- stable.
+* `debian-*-backport` contains the latest backport of git-annex.
* `tweak-fetch` adds support for the git tweak-fetch hook, which has
been proposed and implemented but not yet accepted into git.
* `setup` contains configuration for this website
-* `pristine-tar` contains [pristine-tar](http://kitenet.net/~joey/code/pristine-tar)
- data to create tarballs of any past git-annex release.
----
diff --git a/doc/encryption.mdwn b/doc/encryption.mdwn
index ecc908463..29cb8a0bc 100644
--- a/doc/encryption.mdwn
+++ b/doc/encryption.mdwn
@@ -17,8 +17,8 @@ remote.
You should decide whether to use encryption with a special remote before
any data is stored in it. So, `git annex initremote` requires you
to specify "encryption=none" when first setting up a remote in order
-to disable encryption. To use encryption, you run
-run `git-annex initremote` in one of these ways:
+to disable encryption. To use encryption, you run
+`git-annex initremote` in one of these ways:
* `git annex initremote newremote type=... encryption=hybrid keyid=KEYID ...`
* `git annex initremote newremote type=... encryption=shared`
@@ -29,12 +29,12 @@ run `git-annex initremote` in one of these ways:
The [[hybrid_key_design|design/encryption]] allows additional
encryption keys to be added on to a special remote later. Due to this
flexibility, it is the default and recommended encryption scheme.
-
+
git annex initremote newremote type=... [encryption=hybrid] keyid=KEYID ...
-Here the KEYID(s) are passed to `gpg` to find encryption keys.
+Here the KEYID(s) are passed to `gpg` to find encryption keys.
Typically, you will say "keyid=2512E3C7" to use a specific gpg key.
-Or, you might say "keyid=joey@kitenet.net" to search for matching keys.
+Or, you might say "keyid=id@joeyh.name" to search for matching keys.
To add a new key and allow it to access all the content that is stored
in the encrypted special remote, just run `git annex
@@ -43,7 +43,7 @@ enableremote` specifying the new encryption key:
git annex enableremote myremote keyid+=788A3F4C
While a key can later be removed from the list, note that
-that will **not** necessarily prevent the owner of the key
+it will **not** necessarily prevent the owner of the key
from accessing data on the remote (which is by design impossible to prevent,
short of deleting the remote). In fact the only sound use of `keyid-=` is
probably to replace a revoked key:
@@ -58,8 +58,8 @@ risks associated with encryption.
Alternatively, you can configure git-annex to use a shared cipher to
encrypt data stored in a remote. This shared cipher is stored,
**unencrypted** in the git repository. So it's shared among every
-clone of the git repository.
-
+clone of the git repository.
+
git annex initremote newremote type=... encryption=shared
The advantage is you don't need to set up gpg keys. The disadvantage is
@@ -74,10 +74,10 @@ and since it's exactly the way everyone else uses gpg.
git annex initremote newremote type=.... encryption=pubkey keyid=KEYID ...
-A disavantage is that is not easy to later add additional public keys
+A disadvantage is that it is not easy to later add additional public keys
to the special remote. While the `enableremote` parameters `keyid+=` and
`keyid-=` can be used, they have **no effect** on files that are already
-present on the remote. Probably the only use for these parameters is
+present on the remote. Probably the only use for these parameters is
to replace a revoked key:
git annex enableremote myremote keyid-=2512E3C7 keyid+=788A3F4C
@@ -94,7 +94,7 @@ generated (and encrypted to the given key IDs).)
## MAC algorithm
The default MAC algorithm to be applied on the filenames is HMACSHA1. A
-stronger one, for instance HMACSHA512, one can be chosen upon creation
+stronger one, for instance HMACSHA512, can be chosen upon creation
of the special remote with the option `mac=HMACSHA512`. The available
MAC algorithms are HMACSHA1, HMACSHA224, HMACSHA256, HMACSHA384, and
HMACSHA512. Note that it is not possible to change algorithm for a
diff --git a/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__.mdwn b/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__.mdwn
new file mode 100644
index 000000000..84f92ae7e
--- /dev/null
+++ b/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__.mdwn
@@ -0,0 +1,3 @@
+I have 2 clients (laptops) that would (usually) not be online at the same time. Is it possible to use git-annex for syncing these 2 clients through an encrypted server?
+
+I have tried to set this up with the assistant by using an USB-disk for copying the repository from one client to the other. The server is configured through the assistant as repository group 'transfer'. Now both clients see the encrypted ssh-server, each client copy stuff to the encrypted server, but no files are copied between the 2 clients. (In my case, running git-annex on the server is not an option. I have read through this forum, but it doesn't seem anyone has been able to get it to work.)
diff --git a/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_1_924521ad5972046bac44d2e04ec296c7._comment b/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_1_924521ad5972046bac44d2e04ec296c7._comment
new file mode 100644
index 000000000..90b47a3a9
--- /dev/null
+++ b/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_1_924521ad5972046bac44d2e04ec296c7._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnvVfFLW4CTKs7UjdiLIsOn_cxj1Jnh64I"
+ nickname="Charl"
+ subject="Change the encrypted server repository group to &quot;full backup&quot;"
+ date="2014-03-23T21:00:01Z"
+ content="""
+Have you tried changing the repository group of the encrypted server to \"full backup\" instead of \"transfer\"?
+
+I've just started experimenting with git-annex, and this setup (two possibly remote laptops, one encrypted server) seems to be working after very limited testing. I'm currently importing a larger collection of about 40000 files, will see if it still does (it seems whilst one client is transferring to the remote server, the other client laptop is not beeing synced; it did sync after my first batch of copying however.)
+"""]]
diff --git a/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_2_e2a7f34a3ccc1b6467e6da611c067d66._comment b/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_2_e2a7f34a3ccc1b6467e6da611c067d66._comment
new file mode 100644
index 000000000..b50ba4b46
--- /dev/null
+++ b/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_2_e2a7f34a3ccc1b6467e6da611c067d66._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkvN0eFnwvgw2JyTSSHw0QouytcxtPLln8"
+ nickname="Stein Roald"
+ subject="No success"
+ date="2014-03-26T19:43:24Z"
+ content="""
+Thank you, Charl, for your suggestion. I've tried it, without success. (It doesn't seem like that change changed anything on the encrypted ssh-server.)
+"""]]
diff --git a/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_3_f9a369a6ac69f091e6128990274d3228._comment b/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_3_f9a369a6ac69f091e6128990274d3228._comment
new file mode 100644
index 000000000..1e4206144
--- /dev/null
+++ b/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_3_f9a369a6ac69f091e6128990274d3228._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.41"
+ subject="comment 3"
+ date="2014-03-26T21:10:39Z"
+ content="""
+What kind of encrypted remote are you using? An encrypted rsync special remote does not include the git repository, but only the content of the files, so cannot be used in this way.
+
+If you set up a [[gcrypt special remote|special_remotes/gcrypt]], it will be encrypted and includes the full git repository, as well as the content of the files, so can be used like this.
+"""]]
diff --git a/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_4_91b422f8d55b68077245c606c4f7f87c._comment b/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_4_91b422f8d55b68077245c606c4f7f87c._comment
new file mode 100644
index 000000000..4d8915b8d
--- /dev/null
+++ b/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_4_91b422f8d55b68077245c606c4f7f87c._comment
@@ -0,0 +1,28 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkvN0eFnwvgw2JyTSSHw0QouytcxtPLln8"
+ nickname="Stein Roald"
+ subject="Need some clarification"
+ date="2014-03-28T22:49:14Z"
+ content="""
+OK, thank you Joey for your help, and I think you have made some really excellent software. I've spent a couple of days to configure gpg and understand how to use it (glad I did, it has been on my todo-list for a long time...)
+
+First to your question: When I started, I just used the git-annex assistant to \"set up a repository on a remote server using ssh\" as a \"transfer repository\". Now I'll use git-remote-gcrypt instead.
+
+Now I have 2 questions:
+
+---
+
+1) On this webpage: [[https://github.com/joeyh/git-remote-gcrypt]] these are the instructions for setting up a remote for two participants:
+
+ git remote add cryptremote gcrypt::rsync://example.com:repo
+ git config remote.cryptremote.gcrypt-participants \"KEY1 KEY2\"
+ git push cryptremote master
+
+**Question 1:** As I own both computers myself, will syncing between the 2 computers work if I only use 1 KEY (the same KEY on both computers)?
+
+---
+
+2) I am still struggling to understand git-annex assistant and the use of special remotes. Important reasons for using git-annex are backups and moving data to the cloud to free up disk space locally. If I've understood it correctly, git-annex assistant always encrypts data sent to special remotes. And it seems to me that this page [[http://git-annex.branchable.com/special_remotes/]] suggest that git-annex assistant makes it easy to transfer files between different computers that do not communicate directly. I must clearly have misunderstood something, as Joey's comment above seem to state that I can't use the assistant for setting up syncing between computers.
+
+**Question 2:** If I loose my computer, or it becomes corrupted, how can I get my files back if I don't set up special remotes as a gcrypt special remote? (And if I can't, what is the purpose of the special remotes made by the assistant?)
+"""]]
diff --git a/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_5_f6128fe75ff3453747f69f12e0fd0a5b._comment b/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_5_f6128fe75ff3453747f69f12e0fd0a5b._comment
new file mode 100644
index 000000000..8dcddbeef
--- /dev/null
+++ b/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_5_f6128fe75ff3453747f69f12e0fd0a5b._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmNu4V5fvpLlBhaCUfXXOB0MI5NXwh8SkU"
+ nickname="Adam"
+ subject="Confused"
+ date="2014-03-31T03:18:41Z"
+ content="""
+>What kind of encrypted remote are you using? An encrypted rsync special remote does not include the git repository, but only the content of the files, so cannot be used in this way.
+
+Forgive me, Joey, I've been following your work on the assistant for almost as long as you've been working on it, and I use git a little bit, but I have yet to wrap my head around the complexities of git and how git-annex and the assistant...morph them. I've read all the design docs you've written, but I still don't understand this. From reading the OP it sounds like this is exactly what the encrypted rsync special remote is for: using a transfer repo to sync two devices that don't connect directly to each other. Why would he need to use a gcrypt repo instead?
+
+Thanks for your patience. I know you get asked these basic questions over and over again.
+"""]]
diff --git a/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_6_9b90b4031a5ed26c375903b33ed65a10._comment b/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_6_9b90b4031a5ed26c375903b33ed65a10._comment
new file mode 100644
index 000000000..5fc4286b2
--- /dev/null
+++ b/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_6_9b90b4031a5ed26c375903b33ed65a10._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 6"
+ date="2014-04-02T20:11:35Z"
+ content="""
+@Adam, an encrypted special remote does not contain the git repository (the gcrypt special remote is an exception to this rule). So you need to use another method to sync the git repository between machines.
+
+@Stein Roald once you have a clone of the git repository, you have the information that git-annex needs in able to get files from encrypted special remotes.
+
+Question 1: While gcrypt supports multi-key setups, when you use the git-annex assistant to set up a gcrypt remote it only sets it up to use one key. It's left to you to arrange for this key to be on every computer that needs it. Or use command-line stuff to add additional keys later.
+
+Question 2: You can certianly use the assistant to set up syncing between computers, but the only setup that currently provides 100% end-to-end enctyption of the git repository is using gcrypt. (Special remotes are 100% end-to-end encrypted, but as I've stated several times, do not contain the git repository data.)
+Since you seemed to want 100% end to end encryption I suggested using gcrypt. There are simpler setups, like using XMPP, that encrypt everything but not end-to-end, so the XMPP server could snoop on it.
+
+If you loose your computer, you can get your files back from any other device where you've set up a clone of that repository. A backup drive, another computer , etc.
+"""]]
diff --git a/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_7_acd64ce1b08a97ddf730622272e9f611._comment b/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_7_acd64ce1b08a97ddf730622272e9f611._comment
new file mode 100644
index 000000000..f850253b1
--- /dev/null
+++ b/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_7_acd64ce1b08a97ddf730622272e9f611._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkvN0eFnwvgw2JyTSSHw0QouytcxtPLln8"
+ nickname="Stein Roald"
+ subject="comment 7"
+ date="2014-04-03T21:55:14Z"
+ content="""
+Thanks again, Joey, for your time and for your kind answers.
+
+I have tried to set up git-annex with 2 laptops, each with their own gpg-key in order to use a remote server with gcrypt (and those laptops have shared the keys with each other). I regularly use git, but so far I haven't been able to get this setup to work. But before I bother the world with these problems, I would be interested in learning how to do the following:
+
+*Question 3*: How can I use the git-annex assistant to set up a gcrypt remote (with one key)? It doesn't show up as an option as far as I can see (git-annex version: 4.20130815).
+
+*Promise*: When I get git-annex to work with gcrypt, I'll make a summary on how I did it (and maybe which mistakes I made so others can avoid them).
+"""]]
diff --git a/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_8_9baacb14fc5eb449cb13e0b4a4995fb0._comment b/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_8_9baacb14fc5eb449cb13e0b4a4995fb0._comment
new file mode 100644
index 000000000..0ecc2fb3b
--- /dev/null
+++ b/doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_8_9baacb14fc5eb449cb13e0b4a4995fb0._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="216.145.95.162"
+ subject="comment 8"
+ date="2014-05-19T16:48:09Z"
+ content="""
+4.20130815 is too old. Get a current version.
+"""]]
diff --git a/doc/forum/ARM_build_on_Zyxel_NAS.mdwn b/doc/forum/ARM_build_on_Zyxel_NAS.mdwn
new file mode 100644
index 000000000..4fe46bedb
--- /dev/null
+++ b/doc/forum/ARM_build_on_Zyxel_NAS.mdwn
@@ -0,0 +1,15 @@
+I am trying to run the linux standalone ARM build on my Zyxel NAS, but I get the following error
+
+`FATAL: kernel too old`
+
+The system runs the following:
+
+`
+uname -a
+`
+
+`
+Linux nas 2.6.31.8 #2 Thu Dec 19 14:31:05 CST 2013 armv5tel GNU/Linux
+`
+
+Help would be much appreciated.
diff --git a/doc/forum/ARM_build_on_Zyxel_NAS/comment_1_38f38755c0afd76a2b968836fec395e8._comment b/doc/forum/ARM_build_on_Zyxel_NAS/comment_1_38f38755c0afd76a2b968836fec395e8._comment
new file mode 100644
index 000000000..02d2716ac
--- /dev/null
+++ b/doc/forum/ARM_build_on_Zyxel_NAS/comment_1_38f38755c0afd76a2b968836fec395e8._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="Joey"
+ subject="""comment 1"""
+ date="2014-10-20T15:11:49Z"
+ content="""
+The git-annex arm build is built using the libc from Debian stable,
+which needs a newer version of the Linux kerenl than is on your device.
+
+It would be possible to build git-annex against an older libc, but
+not easily, which is why I don't.
+"""]]
diff --git a/doc/forum/ARM_build_on_Zyxel_NAS/comment_2_44c8f1af0cbe9ad51794e6d8d16be627._comment b/doc/forum/ARM_build_on_Zyxel_NAS/comment_2_44c8f1af0cbe9ad51794e6d8d16be627._comment
new file mode 100644
index 000000000..9cec2bf69
--- /dev/null
+++ b/doc/forum/ARM_build_on_Zyxel_NAS/comment_2_44c8f1af0cbe9ad51794e6d8d16be627._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="musella"
+ ip="84.73.42.152"
+ subject="comment 2"
+ date="2014-10-21T23:35:35Z"
+ content="""
+what is the minimal kernel version that I would need?
+
+"""]]
diff --git a/doc/forum/ARM_build_on_Zyxel_NAS/comment_3_b4f6e5ac672e8ece36cceb74ff3315dd._comment b/doc/forum/ARM_build_on_Zyxel_NAS/comment_3_b4f6e5ac672e8ece36cceb74ff3315dd._comment
new file mode 100644
index 000000000..2ff40efe6
--- /dev/null
+++ b/doc/forum/ARM_build_on_Zyxel_NAS/comment_3_b4f6e5ac672e8ece36cceb74ff3315dd._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 3"
+ date="2014-10-22T16:22:24Z"
+ content="""
+I know kernel 3.2 would work. I don't know what the minimum kernel supported by glibc 2.13 is.
+"""]]
diff --git a/doc/forum/A_tiny_filesystem__63__.mdwn b/doc/forum/A_tiny_filesystem__63__.mdwn
new file mode 100644
index 000000000..44a397e2f
--- /dev/null
+++ b/doc/forum/A_tiny_filesystem__63__.mdwn
@@ -0,0 +1,7 @@
+First of all, thanks for the amazing work! I've already tried Owncloud, SparkleShare, Unison, rsync and lsycnd. Finally I may have found the real deal.
+
+My main problem with git-annex right now is that it is not fast/reliable enough. The main issues being: broken links now and then (I've probably done something wrong) and the slow: "startup scans", "consistency checks", "attempting to fix here" and "syncing with server". (50 Giga, Work-Server-Home, setup via webapp assistant)
+
+Please, tell me if I'm wrong, but I have the impression that git-annex would get much more robust if it was 100% sure that nobody could mess with its file tree. One possibility would be to add the option (when creating a repo) to make a protected filesystem controlled by git-annex only via FUSE (not something like ShareBox). This could be a tiny filesystem (such as loggedfs) that does nothing but make sure that only git-annex can mount/change files. This would definitely add to speed (reducing checks) and stability.
+
+I'm I being too naive? Most likely there is something I'm overlooking, like the amount of work this would involve.
diff --git a/doc/forum/A_tiny_filesystem__63__/comment_1_993e3f5dbe4bcbb5b7bd9e08ab9554f3._comment b/doc/forum/A_tiny_filesystem__63__/comment_1_993e3f5dbe4bcbb5b7bd9e08ab9554f3._comment
new file mode 100644
index 000000000..aa246b5ee
--- /dev/null
+++ b/doc/forum/A_tiny_filesystem__63__/comment_1_993e3f5dbe4bcbb5b7bd9e08ab9554f3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 1"
+ date="2014-04-05T22:34:32Z"
+ content="""
+git-annex can indeed be sped up by preventing modification of files in the tree. you can do this by running \"git annex indirect\"
+"""]]
diff --git a/doc/forum/A_tiny_filesystem__63__/comment_2_af57591d42868c8aa1cc1eda43ca8b98._comment b/doc/forum/A_tiny_filesystem__63__/comment_2_af57591d42868c8aa1cc1eda43ca8b98._comment
new file mode 100644
index 000000000..1d4bc4be7
--- /dev/null
+++ b/doc/forum/A_tiny_filesystem__63__/comment_2_af57591d42868c8aa1cc1eda43ca8b98._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="2001:1928:1:9::1"
+ subject="comment 2"
+ date="2014-04-07T04:25:43Z"
+ content="""
+what's wrong with [sharebox](https://github.com/chmduquesne/sharebox-fs), actually?
+"""]]
diff --git a/doc/forum/A_tiny_filesystem__63__/comment_3_3869c0472b50d7cf5e29ac0720f4f20f._comment b/doc/forum/A_tiny_filesystem__63__/comment_3_3869c0472b50d7cf5e29ac0720f4f20f._comment
new file mode 100644
index 000000000..9c1613ca7
--- /dev/null
+++ b/doc/forum/A_tiny_filesystem__63__/comment_3_3869c0472b50d7cf5e29ac0720f4f20f._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="augusto"
+ ip="177.98.104.136"
+ subject="comment 3"
+ date="2014-04-08T22:46:18Z"
+ content="""
+When I saw Sharebox's page on Github I had the impression it was vaporware. It has a section named \"Planned Interface\" and there are no updates for quite a while.
+
+Is it working? How to install/use it?
+"""]]
diff --git a/doc/forum/Add_annex_files_outside_git_root_directory.mdwn b/doc/forum/Add_annex_files_outside_git_root_directory.mdwn
new file mode 100644
index 000000000..8d90cbf99
--- /dev/null
+++ b/doc/forum/Add_annex_files_outside_git_root_directory.mdwn
@@ -0,0 +1,24 @@
+Hi,
+
+I love the idea of git-annex, and I'm trying to do my first steps with it. I'm stuck on the following issue:
+
+When creating a git repository and annexing a file in the root directory, everything works as expected:
+
+ git init
+ git annex init "mytest"
+ echo 1 > annexfile
+ git annex add annexfile
+ # add annexfile ok
+ # (Recording state in git...)
+
+However, when I try to add a file in a subdirectory of the repository, the adding command fails without any error message:
+
+ mkdir mydir
+ echo 1 > mydir/myfile
+ git annex add mydir/myfile
+ # no message, no status change, nothing
+ # note that I can add the file in the root dir and then move it to `mydir`
+
+Am I doing something wrong here?
+
+Thank you!
diff --git a/doc/forum/Add_annex_files_outside_git_root_directory/comment_1_3d7c8917633a6632f22385b8f7a98ccf._comment b/doc/forum/Add_annex_files_outside_git_root_directory/comment_1_3d7c8917633a6632f22385b8f7a98ccf._comment
new file mode 100644
index 000000000..c0a433f94
--- /dev/null
+++ b/doc/forum/Add_annex_files_outside_git_root_directory/comment_1_3d7c8917633a6632f22385b8f7a98ccf._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-04T17:19:46Z"
+ content="""
+git-annex should have no difficulty doing that, and in fact its test
+suite includes some adds of files in subdirs.
+
+The most likely reason for this behavior would be if you have configured
+a `.gitignore` file (or other method of configuring gitignore) to
+exclude the file you want to add. If so, "git annex add --force
+mydir/myfile" would override the gitignore.
+
+Internally, git-annex add runs "git ls-files --others --exclude-standard"
+and passes it the files/dirs you specified to add, and then adds
+the files that command lists. So you can run that command and see
+what it lists too.
+"""]]
diff --git a/doc/forum/Add_annex_files_outside_git_root_directory/comment_2_312a57883d809857a69216fa47e04f17._comment b/doc/forum/Add_annex_files_outside_git_root_directory/comment_2_312a57883d809857a69216fa47e04f17._comment
new file mode 100644
index 000000000..0e5be5eec
--- /dev/null
+++ b/doc/forum/Add_annex_files_outside_git_root_directory/comment_2_312a57883d809857a69216fa47e04f17._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlJl0OCe6AJEnIFIcg-t5Rhk-lI_Y-tWUs"
+ nickname="Michael"
+ subject="comment 2"
+ date="2015-02-12T16:22:18Z"
+ content="""
+Ok, seems that I assumed incorrectly that `.gitignore` files were not valid for annex.
+
+However, if I `git add file_that_is_ignored`, I get an error message saying:
+
+ The following paths are ignored by one of your .gitignore files:
+ Use -f if you really want to add them.
+
+Would it be possible for git-annex to be consistent with git behaviour here?
+"""]]
diff --git a/doc/forum/Alternative_to_XMPP_on_Windows__63__.mdwn b/doc/forum/Alternative_to_XMPP_on_Windows__63__.mdwn
new file mode 100644
index 000000000..7edd703e0
--- /dev/null
+++ b/doc/forum/Alternative_to_XMPP_on_Windows__63__.mdwn
@@ -0,0 +1 @@
+Is there an alternative to XMPP to sync Windows machines?
diff --git a/doc/forum/Alternative_to_XMPP_on_Windows__63__/comment_1_4084abf5b26fcc92e577eea34c331a15._comment b/doc/forum/Alternative_to_XMPP_on_Windows__63__/comment_1_4084abf5b26fcc92e577eea34c331a15._comment
new file mode 100644
index 000000000..39ab7a8a6
--- /dev/null
+++ b/doc/forum/Alternative_to_XMPP_on_Windows__63__/comment_1_4084abf5b26fcc92e577eea34c331a15._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-04T17:16:43Z"
+ content="""
+The best alternative currently is to use a server with git-annex installed,
+which the windows instance can then communicate with.
+"""]]
diff --git a/doc/forum/Ambigous_argument___40__unknown_revision_or_path__41__.mdwn b/doc/forum/Ambigous_argument___40__unknown_revision_or_path__41__.mdwn
new file mode 100644
index 000000000..a4cc6a0a5
--- /dev/null
+++ b/doc/forum/Ambigous_argument___40__unknown_revision_or_path__41__.mdwn
@@ -0,0 +1,148 @@
+Okey, so I set up a repo on a client computer with files in a directory. All went fine without errors. Then I created the remote server in backup mode. Everything went well with the sync. Back at the office I now want the same repo content on this computer, so I fire up the assistant, add a local repo directory (empty of course) and then add a remote server. Then this happens
+
+ [2014-11-05 09:17:24 CET] main: Syncing with server__volume1_work_user_work
+ From ssh://git-annex-server-username_7000_.2Fvolume1.2Fwork_user.2Fwork/volume1/work_user/work
+ * [new branch] git-annex -> server__volume1_work_user_work/git-annex
+ * [new branch] master -> server__volume1_work_user_work/master
+ * [new branch] synced/git-annex -> server__volume1_work_user_work/synced/git-annex
+ * [new branch] synced/master -> server__volume1_work_user_work/synced/master
+ (merging server__volume1_work_user_work/git-annex server__volume1_work_user_work/synced/git-annex into git-annex...)
+ (Recording state in git...)
+ fatal: ambiguous argument 'refs/heads/synced/master..refs/remotes/server__volume1_work_user_work/synced/master': unknown revision or path not in the working tree.
+ Use '--' to separate paths from revisions, like this:
+ 'git <command> [<revision>...] -- [<file>...]'
+
+ Automatic merge went well; stopped before committing as requested
+ To ssh://username@git-annex-server-username_7000_.2Fvolume1.2Fwork_user.2Fwork/volume1/work_user/work/
+ 3943547..00aa6bd git-annex -> synced/git-annex
+ ! [rejected] annex/direct/master -> synced/master (non-fast-forward)
+ error: failed to push some refs to 'ssh://username@git-annex-server-username_7000_.2Fvolume1.2Fwork_user.2Fwork/volume1/work_user/work/'
+ hint: Updates were rejected because a pushed branch tip is behind its remote
+ hint: counterpart. Check out this branch and integrate the remote changes
+ hint: (e.g. 'git pull ...') before pushing again.
+ hint: See the 'Note about fast-forwards' in 'git push --help' for details.
+ [2014-11-05 09:20:09 CET] Pusher: Syncing with server__volume1_work_user_work
+ [2014-11-05 09:20:09 CET] Committer: Committing changes to git
+ (Recording state in git...)
+
+ SHA256E-s1570--7437c0b77825d2636723cde82f0094854357aec43619b7d62707b5c26c4b0379.c
+
+ 0 0% 0.00kB/s 0:00:00
+ 1,570 100% 1.50MB/s 0:00:00 (xfr#1, to-chk=0/1)
+ [2014-11-05 09:20:10 CET] Transferrer: Downloaded timing_ds20.c
+ To ssh://username@git-annex-server-username_7000_.2Fvolume1.2Fwork_user.2Fwork/volume1/work_user/work/
+ 0e52256..2515592 annex/direct/master -> synced/master
+ error: Ref refs/heads/synced/master is at 2515592b1a0b2a355b5334c315d8857619b4a9c3 but expected 0e522560b9b6f0e52f789187e2fbd9076174bc4b
+ remote: error: failed to lock refs/heads/synced/master
+ To ssh://username@git-annex-server-username_7000_.2Fvolume1.2Fwork_user.2Fwork/volume1/work_user/work/
+ ! [remote rejected] annex/direct/master -> synced/master (failed to lock)
+ error: failed to push some refs to 'ssh://username@git-annex-server-username_7000_.2Fvolume1.2Fwork_user.2Fwork/volume1/work_user/work/'
+ To ssh://username@git-annex-server-username_7000_.2Fvolume1.2Fwork_user.2Fwork/volume1/work_user/work/
+ * [new branch] git-annex -> refs/synced/a455ea74-d6fe-4f82-b796-72c20fc113fd/git-annex
+ * [new branch] annex/direct/master -> refs/synced/a455ea74-d6fe-4f82-b796-72c20fc113fd/annex/direct/master
+
+ SHA256E-s7--19d210b22987ea279fe707c89b3afdbe530537118d3bac62c722b6ec54901e5a
+
+ 0 0% 0.00kB/s 0:00:00
+ 7 100% 6.84kB/s 0:00:00 (xfr#1, to-chk=0/1)
+ [2014-11-05 09:20:13 CET] Transferrer: Downloaded somefile
+ [2014-11-05 09:20:13 CET] Pusher: Syncing with server__volume1_work_user_work
+ (Recording state in git...)
+
+ SHA256E-s7762408--27c11674fe8c0b23f469aa90342dd45bf9ec9c83108251985b3231178f0f4ed5.pdf
+
+ 0 0% 0.00kB/s 0:00:00
+ 5,406,720 69% 5.12MB/s 0:00:00
+ 7,762,408 100% 5.01MB/s 0:00:01 (xfr#1, to-chk=0/1)
+ To ssh://username@git-annex-server-username_7000_.2Fvolume1.2Fwork_user.2Fwork/volume1/work_user/work/
+ 00aa6bd..841a157 git-annex -> synced/git-annex
+ [2014-11-05 09:20:16 CET] Transferrer: Downloaded anotherfile.pdf
+
+ SHA256E-s322841--452ddf060131e1cfe44a02ee23840494d4566c4b1ad58f0131d52f17fbf65ea2.pdf
+
+And then it continues transfering the files. Then this happens
+
+ error: Ref refs/heads/synced/git-annex is at 4a802d679a5a7e2eae3c16b2ed0a8d724b665b0a but expected 45004c24db2eb24dddc04d1542d3689aa27b9507
+ remote: error: failed to lock refs/heads/synced/git-annex
+ To ssh://username@git-annex-server-username_7000_.2Fvolume1.2Fwork_user.2Fwork/volume1/work_user/work/
+ ! [remote rejected] git-annex -> synced/git-annex (failed to lock)
+ error: failed to push some refs to 'ssh://username@git-annex-server-username_7000_.2Fvolume1.2Fwork_user.2Fwork/volume1/work_user/work/'
+ [2014-11-05 10:13:48 CET] read: git ["--git-dir=/home/officeusername/work/.git","--work-tree=/home/officeusername/work","-c","core.bare=false","push","server__volume1_work_user_work","master"]
+
+ SHA256E-s115543--4aca4053b23d914ea034f06439edcb7d3d9bcc24b5d9865f5e062394ca1263e0
+
+ 0 0% 0.00kB/s 0:00:00
+ 115,543 100% 2.98MB/s 0:00:00 (xfr#1, to-chk=0/1)
+ [2014-11-05 10:13:48 CET] feed: ssh ["-S",".git/annex/ssh/abf79f467a5dcf714ddaf5162ffc09ba","-o","ControlMaster=auto","-o","ControlPersist=yes","-T","username@git-annex-server-username_7000_.2Fvolume1.2Fwork_user.2Fwork","git-annex-shell 'transferinfo' '/volume1/work_user/work/' 'SHA256E-s115543--4aca4053b23d914ea034f06439edcb7d3d9bcc24b5d9865f5e062394ca1263e0' --uuid 05bdd8d5-da30-4024-a921-0f8b1a2f33df '--' 'remoteuuid=a455ea74-d6fe-4f82-b796-72c20fc113fd' 'associatedfile=pathtosomefile' '--'"]
+ [2014-11-05 10:13:48 CET] NetWatcherFallback: trying manual pull to resolve failed pushes
+ [2014-11-05 10:13:48 CET] call: git ["--git-dir=/home/officeusername/work/.git","--work-tree=/home/officeusername/work","-c","core.bare=false","fetch","server__volume1_work_user_work"]
+ [2014-11-05 10:13:48 CET] Watcher: add symlink pathtosomefile
+ [2014-11-05 10:13:48 CET] Transferrer: Downloaded file
+ [2014-11-05 10:13:48 CET] TransferWatcher: transfer finishing: Transfer {transferDirection = Download, transferUUID = UUID "05bdd8d5-da30-4024-a921-0f8b1a2f33df", transferKey = Key {keyName = "4aca4053b23d914ea034f06439edcb7d3d9bcc24b5d9865f5e062394ca1263e0", keyBackendName = "SHA256E", keySize = Just 115543, keyMtime = Nothing, keyChunkSize = Nothing, keyChunkNum = Nothing}}
+ [2014-11-05 10:13:48 CET] Transferrer: Transferring: Download UUID "05bdd8d5-da30-4024-a921-0f8b1a2f33df" pathtosomefile2 Nothing
+ [2014-11-05 10:13:48 CET] TransferWatcher: transfer starting: Download UUID "05bdd8d5-da30-4024-a921-0f8b1a2f33df" SHA256E-s145572--50e4d0d2fa52fb6843258509637307b8efc87d31abab834e7bc3174296689e25 Nothing
+ [2014-11-05 10:13:48 CET] TransferWatcher: transfer starting: Download UUID "05bdd8d5-da30-4024-a921-0f8b1a2f33df" pathtosomefile2 Nothing
+ [2014-11-05 10:13:48 CET] read: rsync ["--progress","--inplace","--perms","-e","'ssh' '-S' '.git/annex/ssh/abf79f467a5dcf714ddaf5162ffc09ba' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=yes' '-T' 'username@git-annex-server-username_7000_.2Fvolume1.2Fwork_user.2Fwork' 'git-annex-shell ''sendkey'' ''/volume1/work_user/work/'' ''SHA256E-s145572--50e4d0d2fa52fb6843258509637307b8efc87d31abab834e7bc3174296689e25'' --uuid 05bdd8d5-da30-4024-a921-0f8b1a2f33df ''--'' ''remoteuuid=a455ea74-d6fe-4f82-b796-72c20fc113fd'' ''direct=1'' ''associatedfile=pathtosomefile2'' ''--'''","--","dummy:","/home/officeusername/work/.git/annex/tmp/SHA256E-s145572--50e4d0d2fa52fb6843258509637307b8efc87d31abab834e7bc3174296689e25"]
+ [2014-11-05 10:13:49 CET] Committer: committing 2 changes
+ [2014-11-05 10:13:49 CET] Committer: Committing changes to git
+ (Recording state in git...)
+ [2014-11-05 10:13:49 CET] feed: git ["--git-dir=/home/officeusername/work/.git","--work-tree=/home/officeusername/work","-c","core.bare=false","update-index","-z","--index-info"]
+ [2014-11-05 10:13:49 CET] read: git ["--git-dir=/home/officeusername/work/.git","--work-tree=/home/officeusername/work","-c","core.bare=false","symbolic-ref","HEAD"]
+ [2014-11-05 10:13:49 CET] read: git ["--git-dir=/home/officeusername/work/.git","--work-tree=/home/officeusername/work","-c","core.bare=false","show-ref","--hash","refs/heads/annex/direct/master"]
+ [2014-11-05 10:13:49 CET] read: git ["--git-dir=/home/officeusername/work/.git","--work-tree=/home/officeusername/work","-c","core.bare=false","write-tree"]
+ [2014-11-05 10:13:49 CET] read: git ["--git-dir=/home/officeusername/work/.git","--work-tree=/home/officeusername/work","-c","core.bare=false","rev-parse","2515592b1a0b2a355b5334c315d8857619b4a9c3:"]
+ [2014-11-05 10:13:49 CET] read: git ["--git-dir=/home/officeusername/work/.git","--work-tree=/home/officeusername/work","-c","core.bare=false","symbolic-ref","HEAD"]
+ [2014-11-05 10:13:49 CET] read: git ["--git-dir=/home/officeusername/work/.git","--work-tree=/home/officeusername/work","-c","core.bare=false","show-ref","refs/heads/annex/direct/master"]
+ [2014-11-05 10:13:49 CET] call: git ["--git-dir=/home/officeusername/work/.git","--work-tree=/home/officeusername/work","-c","core.bare=false","branch","-f","synced/master"]
+ [2014-11-05 10:13:49 CET] call: git ["--git-dir=/home/officeusername/work/.git","--work-tree=/home/officeusername/work","-c","core.bare=false","branch","-f","master"]
+ drop server__volume1_work_user_work pathtosomefile2
+ [2014-11-05 10:13:49 CET] call: ssh ["-S",".git/annex/ssh/abf79f467a5dcf714ddaf5162ffc09ba","-o","ControlMaster=auto","-o","ControlPersist=yes","-T","username@git-annex-server-username_7000_.2Fvolume1.2Fwork_user.2Fwork","git-annex-shell 'dropkey' '/volume1/work_user/work/' '--quiet' '--force' 'SHA256E-s674028--398092ddec93e33310ca8be87b4d48b2c84a873b579b80002cad3738c1461266' --uuid 05bdd8d5-da30-4024-a921-0f8b1a2f33df"]
+
+ SHA256E-s145572--50e4d0d2fa52fb6843258509637307b8efc87d31abab834e7bc3174296689e25
+
+Again it transfer some files...and then
+
+ error: Ref refs/heads/synced/git-annex is at ac6d09794a274e861db1ef00295e361e15d85ca3 but expected 4a802d679a5a7e2eae3c16b2ed0a8d724b665b0a
+ remote: error: failed to lock refs/heads/synced/git-annex
+ To ssh://username@git-annex-server-username_7000_.2Fvolume1.2Fwork_user.2Fwork/volume1/work_user/work/
+ ! [remote rejected] git-annex -> synced/git-annex (failed to lock)
+ error: failed to push some refs to 'ssh://username@git-annex-server-username_7000_.2Fvolume1.2Fwork_user.2Fwork/volume1/work_user/work/'
+ [2014-11-05 10:13:52 CET] read: git ["--git-dir=/home/officeusername/work/.git","--work-tree=/home/officeusername/work","-c","core.bare=false","push","server.me__volume1_work_user_work","master"]
+
+ 8,454,144 2% 2.67MB/s 0:02:24 [2014-11-05 10:13:53 CET] NetWatcherFallback: fallback pushing to [Remote { name ="server__volume1_work_user_work" }]
+ [2014-11-05 10:13:53 CET] call: git ["--git-dir=/home/officeusername/work/.git","--work-tree=/home/officeusername/work","-c","core.bare=false","push","server.me__volume1_work_user_work","+git-annex:refs/synced/a455ea74-d6fe-4f82-b796-72c20fc113fd/git-annex","refs/heads/annex/direct/master:refs/synced/a455ea74-d6fe-4f82-b796-72c20fc113fd/annex/direct/master"]
+
+ 12,058,624 2% 2.86MB/s 0:02:13 To ssh://username@git-annex-server-username_7000_.2Fvolume1.2Fwork_user.2Fwork/volume1/work_user/work/
+ 00aa6bd..ac6d097 git-annex -> refs/synced/a455ea74-d6fe-4f82-b796-72c20fc113fd/git-annex
+
+ 16,875,520 4% 3.34MB/s 0:01:53 [2014-11-05 10:13:55 CET] Pusher: Syncing with server__volume1_work_user_work
+
+Again
+
+ error: Ref refs/heads/synced/git-annex is at 383d9581c2722ab87647cf26f1ab8f25758866a4 but expected d158cddb1055adbe44973208d5562961acb0c42b
+ remote: error: failed to lock refs/heads/synced/git-annex
+ To ssh://username@git-annex-server-username_7000_.2Fvolume1.2Fwork_user.2Fwork/volume1/work_user/work/
+ ! [remote rejected] git-annex -> synced/git-annex (failed to lock)
+ error: failed to push some refs to 'ssh://username@git-annex-server-username_7000_.2Fvolume1.2Fwork_user.2Fwork/volume1/work_user/work/'
+ [2014-11-05 11:13:58 CET] read: git ["--git-dir=/home/officeusername/work/.git","--work-tree=/home/officeusername/work","-c","core.bare=false","push","server__volume1_work_user_work","master"]
+ ok
+ [2014-11-05 11:13:58 CET] dropped somefile (from UUID "05bdd8d5-da30-4024-a921-0f8b1a2f33df") (copies now 2) : file renamed
+ [2014-11-05 11:13:58 CET] TransferWatcher: transfer starting: Download UUID "05bdd8d5-da30-4024-a921-0f8b1a2f33df" someotherfile Nothing
+
+Then some other stuff
+
+ error: Ref refs/remotes/server__volume1_work_user_work/synced/git-annex is at 2e867456306f9ac0dd61e29c221ea3968dc4cb70 but expected 086e08a168498b84a74065c1f71e114a9868867d
+ From ssh://git-annex-server-username_7000_.2Fvolume1.2Fwork_user.2Fwork/volume1/work_user/work
+ ! 086e08a..2e86745 synced/git-annex -> server__volume1_work_user_work/synced/git-annex (unable to update local ref)
+
+And so on. When submitting this, the system is still transfering files (arrow pointing to the left, so that has to be from the server to the office computer I suppose). Checking the office computer file index by running
+
+ git ls-files | wl -l
+
+yields the expected number of files. So, in addition to the errors above this seems a bit strange to me that it is still transferring files.
+
+Thinking about the error messages above...is it so that the download and git repo updates work in parallel, so if git tries to update on a partly transferred files the checksum is wrong and then I get the errors above? If so, is the file transferred again later and is there a way to suppress the "failed to sync" in the webapp?
+
+Another thing, then I add the remote server it automatically goes into transfer mode, even though I configured it to be a backup from home before coming into the office. Maybe it is not autodetected. Would it cause problem to later change it from transfer to backup mode?
+
+Hope someone can point me in the right direction. And thanks in advance!
diff --git a/doc/forum/Android:_Encrypted_Remotes__63__.mdwn b/doc/forum/Android:_Encrypted_Remotes__63__.mdwn
new file mode 100644
index 000000000..b8342392f
--- /dev/null
+++ b/doc/forum/Android:_Encrypted_Remotes__63__.mdwn
@@ -0,0 +1,3 @@
+Hi,
+
+Does the Android app support encryption at all? The assistant allows me to create encrypted repositories but it just keeps telling me to install git-remote-gcrypt, which did not work.
diff --git a/doc/forum/Android:_Encrypted_Remotes__63__/comment_1_6b16cd372a9bd4f99d4c8b09a82ce3ed._comment b/doc/forum/Android:_Encrypted_Remotes__63__/comment_1_6b16cd372a9bd4f99d4c8b09a82ce3ed._comment
new file mode 100644
index 000000000..3edcc5f90
--- /dev/null
+++ b/doc/forum/Android:_Encrypted_Remotes__63__/comment_1_6b16cd372a9bd4f99d4c8b09a82ce3ed._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 1"
+ date="2014-07-03T19:14:37Z"
+ content="""
+Encrypted [[special_remotes]] are supported just fine on Android.
+
+As for storing the [[encrypted git repository itself on a remote|special_remotes/gcrypt]], which is what git-remote-gcrypt is used for, it would need porting that to Android. I don't think that should be very hard (it's just a rather complicated shell script and all the tools it uses are already included in the git-annex bundle). I may eventully end up reimplementing git-remote-gcrypt as part of git-annex in Haskell, since porting it to eg, Windows is likely to be a lot harder..
+"""]]
diff --git a/doc/forum/Android_version_does_not_sync.mdwn b/doc/forum/Android_version_does_not_sync.mdwn
new file mode 100644
index 000000000..4c2d288be
--- /dev/null
+++ b/doc/forum/Android_version_does_not_sync.mdwn
@@ -0,0 +1,23 @@
+Hey!
+
+I have got a Kindle Fire HD (2nd generation) and want to use Git Annex to sync my data round. However, it does not sync my data at all (my other setups, e.g. PC or laptop do work quite well). The reason for that seems to be quite simple, but I do not know how to fix that:
+
+I always get the warning message:
+
+> TransferScanner crashed: /storage/emulated/legacy/annex/.git/index: copyFile: does not exist (No such file or directory).
+
+I found the same error in the log:
+
+> git-annex: /storage/emulated/legacy/annex/.git/index: copyFile: does not exist (No such file or directory)
+> ...
+> fatal: Run with no arguments or with -c cmd
+> git-annex-shell: git-shell failed
+
+I am using the latest versions for android and arm (server, raspberry pi) from this site from today (13.07.2014)
+
+http://git-annex.branchable.com/install/
+
+I hope somebody can help me. I tried restaring the TransferScanner, restarting git-annex, restarting the OS, resetting the OS (to shipping defaults), nothing helped.
+
+Cheers,
+Stephan
diff --git a/doc/forum/Android_version_does_not_sync/comment_1_ed9e33eef2c6d651847dca9d3f7a63f6._comment b/doc/forum/Android_version_does_not_sync/comment_1_ed9e33eef2c6d651847dca9d3f7a63f6._comment
new file mode 100644
index 000000000..589b230c3
--- /dev/null
+++ b/doc/forum/Android_version_does_not_sync/comment_1_ed9e33eef2c6d651847dca9d3f7a63f6._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="sts"
+ ip="134.147.119.104"
+ subject="comment 1"
+ date="2014-07-14T09:12:13Z"
+ content="""
+Ok, I checked and the index file was missing and not sure why, but I had to manually sync one time. So I had to go in the annex folder with the command line and make a \"git annex sync\". It works pretty well now, it seems not to automatically sync my data (have to force it with \"Sync Now\"), but at least I can sync data to my tablet and thats awesome :).
+"""]]
diff --git a/doc/forum/Android_version_does_not_sync/comment_2_4eafd3e989611f835c489b379bd6ec8a._comment b/doc/forum/Android_version_does_not_sync/comment_2_4eafd3e989611f835c489b379bd6ec8a._comment
new file mode 100644
index 000000000..bf2b41263
--- /dev/null
+++ b/doc/forum/Android_version_does_not_sync/comment_2_4eafd3e989611f835c489b379bd6ec8a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 2"
+ date="2014-07-14T18:21:15Z"
+ content="""
+How did you create this repository on the android device? Normally a git repository has an index file, unless it has just been manually created with `git init` and has not yet had anything added to it. When the webapp is used to create a repository, it should always leave it with an index file already present.
+"""]]
diff --git a/doc/forum/Android_version_does_not_sync/comment_3_2a4efec37015ea44509e7ed16b36a72d._comment b/doc/forum/Android_version_does_not_sync/comment_3_2a4efec37015ea44509e7ed16b36a72d._comment
new file mode 100644
index 000000000..71c5b91d1
--- /dev/null
+++ b/doc/forum/Android_version_does_not_sync/comment_3_2a4efec37015ea44509e7ed16b36a72d._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnjX_O_VChwfDjcKlcRHbc2Aah8aYQlqts"
+ nickname="Ludovic"
+ subject="comment 3"
+ date="2014-10-05T11:01:39Z"
+ content="""
+I have the same problem.
+I checked again, removed the previous annex/ directory and created a new annex repository from the webapp. No annex/.git/index file is created.
+
+I then add a remore ssh server. The synchronisation fails with the error in the log: \"/storage/emulated/legacy/annex/.git/index: copyFile: does not exist (No such file or directory).\"
+
+Running \"git annex sync\" solved the problem.
+"""]]
diff --git a/doc/forum/Annex_slow_on_Windows__47__direct_mode.mdwn b/doc/forum/Annex_slow_on_Windows__47__direct_mode.mdwn
new file mode 100644
index 000000000..57247ac5d
--- /dev/null
+++ b/doc/forum/Annex_slow_on_Windows__47__direct_mode.mdwn
@@ -0,0 +1,11 @@
+I've been using annex for some weeks now and while I more and more love how it behaves on my Linux machines, I just can't get it working on Windows...
+
+The setup consists of two Ubuntu machines (one being an always-on server) and a Windows laptop I keep for the occasional moment of gaming. My wife's Windows machine is a candidate to join the annex setup, as well as some other computers I still use every now and then.
+
+The first thing I started annexing was my pictures folder. It consists of about 40k files and occupies about 350GB. The Ubuntu server is running a hidden service as a substitute for a DynDNS with ssh basically the only thing going out/in. First, I couldn't get annex to properly sync its data via TOR, but when I instead set up a directory special remote on the server (with the annex repository there being "bare", i.e. not containing any actual data) I got them to sync as they should.
+
+Not the Windows machine though. It's just too slow. It seems that on every sync, every add, every anything it scans... well, everything. I added some files and after an hour I checked the resource monitor which files were being accessed and it seemed to be every last one of the files present in the pictures folder. I'm not sure what's going on there, but it's really getting to the point of being a dealbreaker... I think it's something with annex only supporting direct mode repositories on Windows and all files just lying around (as that's really the only large difference between those setups), although I'm of course not entirely sure.
+
+I'd really like to run annex in indirect mode on Windows. I can't really find any information on that (except those few "official" pages that just state that annex is running in direct mode on Windows). I know that creating symlinks needs elevated priviledges on Windows, but accepting a prompt seems to be much more realistic than waiting hours for a sync.
+
+So... Is there any way to get indirect running on Windows? And if there isn't, is there any other way to speed up direct mode / Windows performance?
diff --git a/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_1_d80839f4582fc2a6269db31e30e1dbab._comment b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_1_d80839f4582fc2a6269db31e30e1dbab._comment
new file mode 100644
index 000000000..c68c72738
--- /dev/null
+++ b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_1_d80839f4582fc2a6269db31e30e1dbab._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnOSgFb3l7nL3Fs7Y9gPGJJjFiV7aJ1tek"
+ nickname="Phil"
+ subject="Same boat"
+ date="2014-07-03T19:38:15Z"
+ content="""
+I'd love to know this too. I'm setting up on 2 Windows 8.1 machines (with a 3rd Windows 7 hopefully joining the party as well as a couple of Linux boxes) but doing anything is really slow. I just ran git annex status on a 50GB, 7000 file Music repo and it took 6 minutes. I've not even setup the remotes yet but as soon as I'd added and sync'd, things slowed down. I'm running on a nippy SSD and CPU usage is around 12%.
+
+"""]]
diff --git a/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_2_593e1e01b70a2b6a15ad6bca09a80c7b._comment b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_2_593e1e01b70a2b6a15ad6bca09a80c7b._comment
new file mode 100644
index 000000000..0e357f4d6
--- /dev/null
+++ b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_2_593e1e01b70a2b6a15ad6bca09a80c7b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnOSgFb3l7nL3Fs7Y9gPGJJjFiV7aJ1tek"
+ nickname="Phil"
+ subject="comment 2"
+ date="2014-07-03T19:39:12Z"
+ content="""
+Fortunately, git annex sync is pretty quick
+"""]]
diff --git a/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_3_c4e4c596f31aa97645fe1e1527dc2c31._comment b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_3_c4e4c596f31aa97645fe1e1527dc2c31._comment
new file mode 100644
index 000000000..a97ccda2e
--- /dev/null
+++ b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_3_c4e4c596f31aa97645fe1e1527dc2c31._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 3"
+ date="2014-07-04T20:57:54Z"
+ content="""
+Yall need to tell me your git-annex versions. [[devblog/day_183__rubbing_sticks_together]] fixed a horrible slowdown that indeed causes git-annex on windows to unnecessarily look at lots of files.
+
+Also, is this using the git-annex assistant, or using git-annex at the command line that's being slow?
+
+As to using symlinks on windows, cygwin's build of git is able to handle them somehow. I have not tried to get it working with git-annex, but it seems at least possible that indirect mode could be accomplished that way.
+"""]]
diff --git a/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_4_92db0b99ada9af15a5383da41397ebd7._comment b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_4_92db0b99ada9af15a5383da41397ebd7._comment
new file mode 100644
index 000000000..39e472606
--- /dev/null
+++ b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_4_92db0b99ada9af15a5383da41397ebd7._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="171.67.172.69"
+ subject="Also in the same boat"
+ date="2014-07-07T01:12:18Z"
+ content="""
+Even worse here. git-annex looked (and still looks) so promising for exactly I want (share >100GB photos/data with my girlfriend which are on my private DSL connected server but each of us should only download whatever he currently needs for offline usage and everything should stay consistent, e.g. is one edits, adds or deletes files). However, after long testing in Windows I gave up. I had so many issues and speed was one of them. So I looked again at other solutions (ownCloud pydio) but they are not good either. unison is one thing that just works perfectly but it is not suited to sync huge stuff where just parts are available on one machine.
+
+I still put much hope in git-annex that it's useable at some point also in Windows. If there would be another of these kickstarters for that, I'd be in.
+
+One BIG dealbreaker for me is SSH. It popped up a couple of times already there is inconsistency between ssh.exe, plink.exe and %GIT_SSH%.
+But the biggest issue is that ssh.exe in Windows does not do connection sharing: For each single file a new SSH session is created! That way it works only for huge files (movies) where the overhead is small. In my tests I had smaller files, that's just unuseable.
+
+I know it's a conundrum. unison just leaves one ssh connection open, that would be nice. I know however that this requires bigger changes. But what about for example starting something in background (during a git-annex command) that leaves the SSH session open and pumps data via some IPC?
+
+Last but not least: links. I agree windows links are unuseable. But would it really be real links? What about just basic *.lnk files?
+
+
+"""]]
diff --git a/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_5_3d628c9db9ebdfd5bff92af105c47719._comment b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_5_3d628c9db9ebdfd5bff92af105c47719._comment
new file mode 100644
index 000000000..9b7b166b3
--- /dev/null
+++ b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_5_3d628c9db9ebdfd5bff92af105c47719._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="171.67.172.69"
+ subject="comment 5"
+ date="2014-07-07T01:16:21Z"
+ content="""
+One more thing: integration in TortoiseGit would be sooooooooo great! You would then even be able to let novice computer users use git-annex.
+
+I added a feature request long time ago but it's on hold: http://code.google.com/p/tortoisegit/issues/detail?id=2166
+
+I do hope that git-annex becomes more popular to increase the chance that it will be built into that...
+
+"""]]
diff --git a/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_6_db7965fa928c093233769ed52b2fcd43._comment b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_6_db7965fa928c093233769ed52b2fcd43._comment
new file mode 100644
index 000000000..90b6094fa
--- /dev/null
+++ b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_6_db7965fa928c093233769ed52b2fcd43._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="Idhup"
+ ip="178.175.139.138"
+ subject="Connection sharing workaround"
+ date="2014-07-07T10:20:23Z"
+ content="""
+I had the same issues but was able to work around most of them. I simply created keypairs on my Windows machines that allowed me to log in to my Ubuntu server. Means that while the overhead does make it smaller (I guess), the whole sync process can simply be run in the background without me having to check for a password prompt for 30 minutes, just to miss the short period during which I can enter it. Also, the actual object storage was moved to a directory special remote on the server, so Windows clients can simply automount a samba share and push the content over that line, which is less of a hazzle.
+
+Also, the speed issue got *much* better when I added all files. I still had a lot of files just lying around on my Windows machine. Once I added them all, the sync process sped up by several magnitudes. So, if https://git-annex.branchable.com/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/ can be solved, I guess I'm happy on Windows.
+"""]]
diff --git a/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_7_674f52c5e5484207db403b18efc986c6._comment b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_7_674f52c5e5484207db403b18efc986c6._comment
new file mode 100644
index 000000000..2b87a11e0
--- /dev/null
+++ b/doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_7_674f52c5e5484207db403b18efc986c6._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Idhup"
+ ip="178.175.139.138"
+ subject="typo"
+ date="2014-07-07T10:23:23Z"
+ content="""
+Slower. It's not smaller, it's slower. Gee.
+"""]]
diff --git a/doc/forum/Archive_USB_drive_not_working_as_documented.mdwn b/doc/forum/Archive_USB_drive_not_working_as_documented.mdwn
new file mode 100644
index 000000000..73c2db6de
--- /dev/null
+++ b/doc/forum/Archive_USB_drive_not_working_as_documented.mdwn
@@ -0,0 +1,171 @@
+I'm hoping to use git-annex in a project to manage large image files and maintain archived copies of them on removable USB drives. But I can't get this to work the way it's described in the walkthrough and in the "git-annex/tips/offline archive drives" example. Here's what I did:
+
+ marshal@home[~]> git-annex version
+ git-annex version: 5.20140412ubuntu1
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook external
+
+Create the local repo:
+
+ marshal@home[~]> mkdir ~/annex
+ marshal@home[~]> cd ~/annex
+ marshal@home[~/annex]> git init
+ Initialized empty Git repository in /home/marshal/annex/.git/
+ marshal@home[~/annex]> git annex init "my laptop"
+ init my laptop ok
+ (Recording state in git...)
+
+Create the remote repo (assume the warning can be ignored?)
+
+ marshal@home[~/annex]> cd /media/marshal/Sony\ USB/
+ marshal@home[/media/marshal/Sony USB]> git clone ~/annex
+ Cloning into 'annex'...
+ done.
+ warning: remote HEAD refers to nonexistent ref, unable to checkout.
+ marshal@home[/media/marshal/Sony USB]> cd annex
+ marshal@home[/media/marshal/Sony USB/annex]> git annex init "usbdrive"
+ init usbdrive ok
+ (Recording state in git...)
+
+Make them remotes of each other
+
+ marshal@home[/media/marshal/Sony USB/annex]> git remote add laptop ~/annex
+ marshal@home[/media/marshal/Sony USB/annex]> cd ~/annex
+ marshal@home[~/annex]> git remote add usbdrive /media/marshal/Sony\ USB/annex/
+
+Add some files into the local repo
+
+ marshal@home[~/annex]> cp ~/Desktop/file* .
+ marshal@home[~/annex]> git annex add .
+ add file1.m3u ok
+ add file2.sh ok
+ add file3.pdf ok
+ (Recording state in git...)
+ marshal@home[~/annex]> git commit -a -m "added files"
+ [master (root-commit) 4ea3be7] added files
+ 3 files changed, 3 insertions(+)
+ create mode 120000 file1.m3u
+ create mode 120000 file2.sh
+ create mode 120000 file3.pdf
+
+Change the preferred content settings
+
+ marshal@home[~/annex]> git annex group usbdrive archive
+ group usbdrive ok
+ (Recording state in git...)
+ marshal@home[~/annex]> git annex wanted usbdrive standard
+ wanted usbdrive ok
+ (Recording state in git...)
+
+Sync to the usbdrive repo
+
+ marshal@home[~/annex]> git annex sync usbdrive
+ commit ok
+ pull usbdrive
+ remote: Counting objects: 7, done.
+ remote: Compressing objects: 100% (3/3), done.
+ remote: Total 5 (delta 1), reused 0 (delta 0)
+ Unpacking objects: 100% (5/5), done.
+ From /media/marshal/Sony USB/annex
+ * [new branch] git-annex -> usbdrive/git-annex
+ ok
+ (merging usbdrive/git-annex into git-annex...)
+ (Recording state in git...)
+ push usbdrive
+ Counting objects: 29, done.
+ Delta compression using up to 8 threads.
+ Compressing objects: 100% (22/22), done.
+ Writing objects: 100% (25/25), 2.44 KiB | 0 bytes/s, done.
+ Total 25 (delta 3), reused 0 (delta 0)
+ To /media/marshal/Sony USB/annex/
+ * [new branch] git-annex -> synced/git-annex
+ * [new branch] master -> synced/master
+ ok
+
+Copy eveything to the usbdrive repo
+
+ marshal@home[~/annex]> git-annex copy --auto --to usbdrive
+ copy file1.m3u (to usbdrive...)
+ SHA256E-s64061--c388e2c927cb4c88c11b1b5a8e166c4d8080dc528d53954dad1ee6d4933ce3c7.m3u
+ 64,061 100% 29.84MB/s 0:00:00 (xfr#1, to-chk=0/1)
+ ok
+ copy file2.sh (to usbdrive...)
+ SHA256E-s318--b8729560cc759d2256903feaa4ba65994ccbac94f30515d52a39083ad52e1bad.sh
+ 318 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1)
+ ok
+ copy file3.pdf (to usbdrive...)
+ SHA256E-s32239--9b051067d5ef9f0cb4a01750901bf6bee3f9348e5b10138c8ef416ac8d51e5df.pdf
+ 32,239 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1)
+ ok
+ (Recording state in git...)
+
+Check to see where git-annex "thinks" the files are
+
+ marshal@home[~/annex]> git-annex whereis file1.m3u
+ whereis file1.m3u (2 copies)
+ 80fa5a68-3843-4e25-b4c9-53a8c51ba9ff -- here (my laptop)
+ d642b276-5f9b-4a5c-a42e-ea29cd9540b5 -- usbdrive
+ ok
+
+Check the filesystem results
+
+ marshal@home[~/annex]> ls -la ~/annex
+ total 48
+ drwxrwxr-x 3 marshal marshal 4096 Jul 19 14:59 .
+ drwxr-xr-x 99 marshal marshal 24576 Jul 19 14:55 ..
+ lrwxrwxrwx 1 marshal marshal 194 Jul 19 14:59 file1.m3u -> .git/annex/objects/jq/MW/SHA256E-s64061--c388e2c927cb4c88c11b1b5a8e166c4d8080dc528d53954dad1ee6d4933ce3c7.m3u/SHA256E-s64061--c388e2c927cb4c88c11b1b5a8e166c4d8080dc528d53954dad1ee6d4933ce3c7.m3u
+ lrwxrwxrwx 1 marshal marshal 188 Jul 19 14:59 file2.sh -> .git/annex/objects/1J/2K/SHA256E-s318--b8729560cc759d2256903feaa4ba65994ccbac94f30515d52a39083ad52e1bad.sh/SHA256E- s318--b8729560cc759d2256903feaa4ba65994ccbac94f30515d52a39083ad52e1bad.sh
+ lrwxrwxrwx 1 marshal marshal 194 Jul 19 14:59 file3.pdf -> .git/annex/objects/77/Wj/SHA256E-s32239--9b051067d5ef9f0cb4a01750901bf6bee3f9348e5b10138c8ef416ac8d51e5df.pdf/SHA256E-s32239--9b051067d5ef9f0cb4a01750901bf6bee3f9348e5b10138c8ef416ac8d51e5df.pdf
+ drwxrwxr-x 9 marshal marshal 4096 Jul 19 15:04 .git
+ marshal@home[~/annex]> ls -la /media/marshal/Sony\ USB/annex/
+ total 4
+ drwx------ 1 marshal marshal 144 Jul 19 14:56 .
+ drwx------ 1 marshal marshal 4096 Jul 19 14:56 ..
+ drwx------ 1 marshal marshal 448 Jul 19 14:57 .git
+
+Why is there nothing in the usbdrive repo? And worse, why is the whereis command saying there are 2 copies?
+
+But if I sync from the usbdrive repo, the files are copied
+
+ marshal@home[~/annex]> cd /media/marshal/Sony\ USB/annex/
+ marshal@home[/media/marshal/Sony USB/annex]> git-annex sync laptop
+ (merging synced/git-annex origin/git-annex into git-annex...)
+ (Recording state in git...)
+ commit ok
+ pull laptop
+ remote: Counting objects: 23, done.
+ remote: Compressing objects: 100% (8/8), done.
+ remote: Total 11 (delta 3), reused 0 (delta 0)
+ Unpacking objects: 100% (11/11), done.
+ From /home/marshal/annex
+ * [new branch] git-annex -> laptop/git-annex
+ * [new branch] master -> laptop/master
+ * [new branch] synced/master -> laptop/synced/master
+
+
+ Already up-to-date.
+ ok
+ (merging laptop/git-annex into git-annex...)
+ (Recording state in git...)
+ push laptop
+ Counting objects: 56, done.
+ Delta compression using up to 8 threads.
+ Compressing objects: 100% (24/24), done.
+ Writing objects: 100% (33/33), 2.34 KiB | 0 bytes/s, done.
+ Total 33 (delta 15), reused 0 (delta 0)
+ To /home/marshal/annex
+ * [new branch] git-annex -> synced/git-annex
+ ok
+ marshal@home[/media/marshal/Sony USB/annex]> ls -la /media/marshal/Sony\ USB/annex/
+ total 6
+ drwx------ 1 marshal marshal 456 Jul 19 15:07 .
+ drwx------ 1 marshal marshal 4096 Jul 19 14:56 ..
+ lrwxrwxrwx 1 marshal marshal 396 Jul 19 15:07 file1.m3u -> .git/annex/objects/jq/MW/SHA256E-s64061--c388e2c927cb4c88c11b1b5a8e166c4d8080dc528d53954dad1ee6d4933ce3c7.m3u/SHA256E-s64061--c388e2c927cb4c88c11b1b5a8e166c4d8080dc528d53954dad1ee6d4933ce3c7.m3u
+ lrwxrwxrwx 1 marshal marshal 384 Jul 19 15:07 file2.sh -> .git/annex/objects/1J/2K/SHA256E-s318--b8729560cc759d2256903feaa4ba65994ccbac94f30515d52a39083ad52e1bad.sh/SHA256E-s318--b8729560cc759d2256903feaa4ba65994ccbac94f30515d52a39083ad52e1bad.sh
+ lrwxrwxrwx 1 marshal marshal 396 Jul 19 15:07 file3.pdf -> .git/annex/objects/77/Wj/SHA256E-s32239--9b051067d5ef9f0cb4a01750901bf6bee3f9348e5b10138c8ef416ac8d51e5df.pdf/SHA256E-s32239--9b051067d5ef9f0cb4a01750901bf6bee3f9348e5b10138c8ef416ac8d51e5df.pdf
+ drwx------ 1 marshal marshal 448 Jul 19 15:07 .git
+
+Why did I have to sync from the usbdrive? I expected the repo setup and the --auto option to copy the files. What am I missing?
+
+Any help much appreciated.
diff --git a/doc/forum/Archive_USB_drive_not_working_as_documented/comment_1_59de1e101e5e427abb1df3a71c6f1b04._comment b/doc/forum/Archive_USB_drive_not_working_as_documented/comment_1_59de1e101e5e427abb1df3a71c6f1b04._comment
new file mode 100644
index 000000000..e7f5eea08
--- /dev/null
+++ b/doc/forum/Archive_USB_drive_not_working_as_documented/comment_1_59de1e101e5e427abb1df3a71c6f1b04._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmcS2gG2R_AIiBBOsWuxGf1yEn_l797jjU"
+ nickname="Mesar"
+ subject="comment 1"
+ date="2014-07-20T00:50:15Z"
+ content="""
+
+When you did:
+
+ marshal@home[~/annex]> git-annex copy --auto --to usbdrive
+
+this copies the file content (see .git/annex/objects/*), and updates the metadata in both repos.
+The reason why you are not seeing the files on the usb is because the metadata has not been merged into your master branch.
+This is verified by the output of:
+
+ marshal@home[/media/marshal/Sony USB/annex]> git-annex sync laptop
+
+To verify that you indeed do have the files and their content, don't do the above sync, but instead do:
+
+ marshal@home[/media/marshal/Sony USB/annex]> git annex merge
+
+the local metadata in the sync/git-annex branch will be merged in, and the local directory will be populated with the new symlinks to the content which you already have in the /media/marshal/Sony USB/annex/.git/annex/objects/*
+"""]]
diff --git a/doc/forum/Archive_USB_drive_not_working_as_documented/comment_2_3541fdd31d398a494a8fa452ac2c277f._comment b/doc/forum/Archive_USB_drive_not_working_as_documented/comment_2_3541fdd31d398a494a8fa452ac2c277f._comment
new file mode 100644
index 000000000..1ec09b0ef
--- /dev/null
+++ b/doc/forum/Archive_USB_drive_not_working_as_documented/comment_2_3541fdd31d398a494a8fa452ac2c277f._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnwSZggfi3YE0EAuxAB9jT6pMcB73V8ae4"
+ nickname="Marshal"
+ subject="comment 2"
+ date="2014-07-20T01:33:25Z"
+ content="""
+Thank you Mesar!
+
+I think I'm beginning to understand. Indeed, the files were there on the usbdrive repo (in .git/annex/objects). No need to sync or merge. I was able to drop a file from the laptop repo and get it back from the usbdrive.
+
+What is a bit unnerving, is that the symlinks are not present on the usbdrive, so it looks empty except for the .git directory.
+
+Thanks so much for clearing this up. More to explore...
+"""]]
diff --git a/doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas.mdwn b/doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas.mdwn
new file mode 100644
index 000000000..e71bf040b
--- /dev/null
+++ b/doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas.mdwn
@@ -0,0 +1,21 @@
+Hello,
+
+I am using the latest git-annex with the webui having two local folders (one over nfs) connected as a full backup group.
+
+On every reboot I get a jumping ball icon with the text:
+
+"Attempting to repair [tr2]"
+
+And the later the text:
+
+"failed to sync to tr2"
+
+The debug log is filled with entries like this, where the number of deltas is increasing:
+
+[2014-08-26 20:34:50 CEST] PushRetrier: Syncing with tr2
+fatal: pack has 15 unresolved deltas
+error: unpack failed: index-pack abnormal exit
+To /nfs/backup
+ ! [remote rejected] git-annex -> synced/git-annex (n/a (unpacker error))
+ ! [remote rejected] annex/direct/master -> synced/master (n/a (unpacker error))
+error: failed to push some refs to '/nfs/backup''
diff --git a/doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas/comment_1_a8effe196e4a040630d183803768c5a1._comment b/doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas/comment_1_a8effe196e4a040630d183803768c5a1._comment
new file mode 100644
index 000000000..41f28a0cf
--- /dev/null
+++ b/doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas/comment_1_a8effe196e4a040630d183803768c5a1._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="anders7788"
+ ip="212.247.195.173"
+ subject="comment 1"
+ date="2014-08-27T06:59:08Z"
+ content="""
+My version is:
+
+assistant version 5.20140517.4
+"""]]
diff --git a/doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas/comment_2_9f032e43b132bcad656e1337ab2551ad._comment b/doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas/comment_2_9f032e43b132bcad656e1337ab2551ad._comment
new file mode 100644
index 000000000..c139bd963
--- /dev/null
+++ b/doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas/comment_2_9f032e43b132bcad656e1337ab2551ad._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="anders7788"
+ ip="89.160.15.173"
+ subject="[Solved]"
+ date="2014-09-04T15:47:24Z"
+ content="""
+[Solved]
+
+The following of the steps at: http://git-annex.branchable.com/tips/what_to_do_when_a_repository_is_corrupted/ provided some clues and I discovered that the disk was broken. But a big thanks to git-annex which made it possible to discover this issue early!
+"""]]
diff --git a/doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas/comment_3_5a09f65c77dce3c62236c13aa90a1191._comment b/doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas/comment_3_5a09f65c77dce3c62236c13aa90a1191._comment
new file mode 100644
index 000000000..1b4c2499a
--- /dev/null
+++ b/doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas/comment_3_5a09f65c77dce3c62236c13aa90a1191._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 3"
+ date="2014-10-12T17:42:28Z"
+ content="""
+Sorry I didn't get to this earlier. I'm glad you managed to solve the problem, but there is something I am curious about: You say you had 2 folders set as full backups. Were these git repositories in their own right, or were they something else, eg directory special remotes?
+
+I ask because, if there were git repositories then the repair should have been able to pull the missing git objects from them, and fix your repository. Unless the broken disk somehow kept corrupting it, I suppose..
+"""]]
diff --git a/doc/forum/Auto_update_not_working.mdwn b/doc/forum/Auto_update_not_working.mdwn
new file mode 100644
index 000000000..1c9fa60bf
--- /dev/null
+++ b/doc/forum/Auto_update_not_working.mdwn
@@ -0,0 +1,6 @@
+Hello,
+
+I've installed to ~/software/ using the prebuilt tarballs. I'm using the assistant with auto updates set to ask. Everytime I start the assistant it claims a new that a new version of git-annex has been installed. I click Finish Upgrade, it does the upgrade and it says to have finished upgrading to version 5.20141105-g8b19598. Next boot / restart everything starts again and it upgrades always to the same version.
+
+Thanks!
+Florian
diff --git a/doc/forum/Automatically_dropping_files.mdwn b/doc/forum/Automatically_dropping_files.mdwn
new file mode 100644
index 000000000..dd47d87d6
--- /dev/null
+++ b/doc/forum/Automatically_dropping_files.mdwn
@@ -0,0 +1,7 @@
+I can make `git-annex` automatically fetch files with the [[/preferred content]] setting and the `--auto` flag, and it works almost exactly like I expect it to work.
+
+What I am missing is a way to make `git annex drop --auto` drop all files that are not wanted.
+
+I would like to work with metadata and tags in such a way that I can have clones (with views) that have only exactly those files available which carry a tag (done), and all other files automatically removed from the annex (unless that would be unsafe).
+
+Does anyone know how to achieve this?
diff --git a/doc/forum/Automatically_dropping_files/comment_1_f5fc608f9cb0edf3272b586b62050637._comment b/doc/forum/Automatically_dropping_files/comment_1_f5fc608f9cb0edf3272b586b62050637._comment
new file mode 100644
index 000000000..28c9c0a56
--- /dev/null
+++ b/doc/forum/Automatically_dropping_files/comment_1_f5fc608f9cb0edf3272b586b62050637._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="216.145.95.162"
+ subject="comment 1"
+ date="2014-05-19T15:41:05Z"
+ content="""
+`git annex drop --auto` *does* automatically drop files that are not wanted, according to your preferred content settings.
+
+If your preferred content for a repo is `metadata=tag=done`, then only files tagged \"done\" will be kept in the repository.
+
+Of course, files are only dropped if enough other copies can be verified to exist in other repositories..
+"""]]
diff --git a/doc/forum/Bare_repo_on_USB_drive_not_providing_files.mdwn b/doc/forum/Bare_repo_on_USB_drive_not_providing_files.mdwn
new file mode 100644
index 000000000..c4ac2c5b7
--- /dev/null
+++ b/doc/forum/Bare_repo_on_USB_drive_not_providing_files.mdwn
@@ -0,0 +1,17 @@
+Dear all,
+ In the first place I will explain what I want to achieve and then the way I figured out to do it. I have a lot of scientific simulations which I need to be traceable (cross check experiment version with code version, etc). I run them mostly on my ubuntu box (14.10, ext4) and store them on an indirect repo. From time to time, I find useful to work on them on my laptop (OSX 10.10, low disk space, hfs+).
+My idea was to full sync the main repo with a usb drive, and then at home get only the files I need to work from the USB drive.
+I faced a huge interoperability problem regarding the filesystem format. I tried using ext4, hfs+, fat32 and exfat. Regarding performance and stability, exfat is the only usable option between linux and osx (using hfs+ got the repo corrupted many times while writing from linux). However that forces me to use either a direct mode repo on the USB drive or a bare one.
+
+Scenario 1: Direct mode on USB drive
+While this worked in another case, in this case when setting up the repo with the assistant it deleted all symlinks from the main repo. I wasn't able to correctly do this and finally gave up.
+Can anyone help me setting up this scenario? It will be like the following:
+
+* ubuntu box (ext4): main repo, indirect mode, all files
+* usb drive (exfat): sync repo, direct mode, all files (having the files available is a plus)
+* osx laptop (hpfs+): partial repo, indirect mode, some files
+
+
+Scenario 2: Bare repo on USB drive
+In this case the bare repo gets synced, with all data (2.6Gb). However when I clone it on the laptop, I get the message that files are not available, it says that they are only on main repo. This puzzles me because files seem to be on the bare repo.
+What's wrong in this case? How can I debug this?
diff --git a/doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_1_0738174fb6984b777ec0a221502106ac._comment b/doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_1_0738174fb6984b777ec0a221502106ac._comment
new file mode 100644
index 000000000..739ccc84f
--- /dev/null
+++ b/doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_1_0738174fb6984b777ec0a221502106ac._comment
@@ -0,0 +1,30 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-12-01T22:03:52Z"
+ content="""
+You should be able to use a direct mode repo on a USB drive.
+Of course, if you delete files from there, the deletion will propigate
+to other clones of that repo. It could be that there's some bug
+with direct mode repos that causes file deletions to be incorrectly
+committed; if so you could a) revert the bad commits and b) file a bug
+report with details to reproduce the problem.
+
+As to a bare repo on a USB drive, it will work too. It sounds to me like
+you forgot to run `git annex sync` after copying the files to that repo.
+And/or forgot to run `git annex sync` before asking git-annex to get
+the files from the drive.
+
+That is to say, the fulll process would be:
+
+Plug drive into first computer, and run in that computer's repo:
+
+ git annex copy --to usbdrive
+ git annex sync
+
+And then move drive to other computer, and run in that computer's
+repo:
+
+ git annex sync
+ git annex copy --from usbdrive
+"""]]
diff --git a/doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_2_1e07d1a9ddb88c0e1d84d8d88b7b4cc4._comment b/doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_2_1e07d1a9ddb88c0e1d84d8d88b7b4cc4._comment
new file mode 100644
index 000000000..778471f5a
--- /dev/null
+++ b/doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_2_1e07d1a9ddb88c0e1d84d8d88b7b4cc4._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2014-12-02T17:33:27Z"
+ content="""
+Well, I'm glad you solved it.
+
+I'd recommend a bare repo on a USB drive because it's the simplest thing,
+but a non-bare repo will also work ok.
+"""]]
diff --git a/doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_2_65d007284287e709a8f6f07dd8630f15._comment b/doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_2_65d007284287e709a8f6f07dd8630f15._comment
new file mode 100644
index 000000000..018d69afd
--- /dev/null
+++ b/doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_2_65d007284287e709a8f6f07dd8630f15._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmTNrhkVQ26GBLaLD5-zNuEiR8syTj4mI8"
+ nickname="Juan"
+ subject="I finally solved it"
+ date="2014-12-02T01:32:34Z"
+ content="""
+I fnally made it work. I tried git-annex sync wihtout luck. What tricked me was the size of the bare repo, it made me thought that it had the files. However after I've made a git annex get on the bare repo it got all the files and after that everthing worked as expected.
+So, if I don't get you wrong, it is safer to use a bare repo on the USB drive?
+Thanks for the help.
+Best regards,
+ Juan
+"""]]
diff --git a/doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_4_3bbce5d12ece481b669be10ef9a70f40._comment b/doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_4_3bbce5d12ece481b669be10ef9a70f40._comment
new file mode 100644
index 000000000..e70066b62
--- /dev/null
+++ b/doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_4_3bbce5d12ece481b669be10ef9a70f40._comment
@@ -0,0 +1,28 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmTNrhkVQ26GBLaLD5-zNuEiR8syTj4mI8"
+ nickname="Juan"
+ subject="I think I got it working, however, same setup works different on fat and exfat"
+ date="2014-12-09T15:04:37Z"
+ content="""
+After struggling a lot, I tried to do the same but with an fat32 drive. Seems that some of the problems I'm experiencing are due to some (linux) filesystem functions working different with fat and exfat.
+Just to get this right, using repos on USB drive formatted as fat32 works perfectly under linux and mac. When I go to the exfat drive, linux fails, and osx keeps working.
+Are you able to test it?
+Steps to reproduce it:
+1)make a test repo on linux: cd /tmp; mkdir test_repo; cd test repo; git init; git annex init \"test repo on linux box\"
+2) go to exfat drive and clone it: git clone /tmp/rest_repo
+
+> git clone /home/juan/juanc/tmp/prueba_git
+Cloning into 'prueba_git'...
+error: chmod on /media/juan/USB_LIVE/tmp/test1/prueba_git/.git/config.lock failed: Function not implemented
+error: chmod on /media/juan/USB_LIVE/tmp/test1/prueba_git/.git/config.lock failed: Function not implemented
+error: chmod on /media/juan/USB_LIVE/tmp/test1/prueba_git/.git/config.lock failed: Function not implemented
+error: chmod on /media/juan/USB_LIVE/tmp/test1/prueba_git/.git/config.lock failed: Function not implemented
+error: chmod on /media/juan/USB_LIVE/tmp/test1/prueba_git/.git/config.lock failed: Function not implemented
+error: chmod on /media/juan/USB_LIVE/tmp/test1/prueba_git/.git/config.lock failed: Function not implemented
+fatal: 'origin' does not appear to be a git repository
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+
+"""]]
diff --git a/doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_5_5e6202c319e75a9758bb8c2f32152e0f._comment b/doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_5_5e6202c319e75a9758bb8c2f32152e0f._comment
new file mode 100644
index 000000000..d833e15e6
--- /dev/null
+++ b/doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_5_5e6202c319e75a9758bb8c2f32152e0f._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 5"""
+ date="2015-02-09T19:09:53Z"
+ content="""
+I had never heard of [exFAT](http://en.wikipedia.org/wiki/ExFAT) before.
+
+I guess you were mounting it in linux using the FUSE implementation of
+exFAT. It's not very surprising when FUSE filesystems leave off support
+for some syscalls. In this case, chmod.
+
+Since even git clone fails, git-annex obviously cannot work.
+
+A bare repository might be the only option if you're stuck using exFAT for
+some reason.
+"""]]
diff --git a/doc/forum/Basic_set_up_with_one_remote.mdwn b/doc/forum/Basic_set_up_with_one_remote.mdwn
new file mode 100644
index 000000000..669c281d3
--- /dev/null
+++ b/doc/forum/Basic_set_up_with_one_remote.mdwn
@@ -0,0 +1,14 @@
+Hi, I'm new to git annex and so far it's looking really useful. I'm convinced what I'm trying to achieve is possible, but I can't seem to hit upon the right combination. Here's what I'd like to set up.
+
+One server with git annex / rsync / ssh access, but configured such that it contains a history of all the files as a full backup.
+Two clients WITHOUT ssh access (these are portable machines and I'd rather not open any ports I don't absolutely have to).
+
+I've used the assistant to set up syncing between all three, using a jabber account to send signals and the server to pass on the files between the machines. This all works beautifully. But what I can't seem to get right is the server / backup aspect. If I set up the server using the assistant as a remote, and set it to "full backup" from the drop down list, it doesn't seem to have any files in the repository except in the .git/annex/objects folder. Which are all cryptic file names and not really accessible. If I run commands such as
+
+> git annex find
+
+(which should list all files as far as I can tell) in the server repository, it doesn't list any files at all. As the clients are all set up as direct repositories I can't access any history of the files there, so this doesn't seem to be quite what I'm after. The sync is working, but I really want the backup / history aspect as well.
+
+Does anyone know if what I want is possible? If so hopefully I'm close and someone can point out where I've gone wrong. I'm not afraid of the command line, but the assistant is a very convenient way to get started.
+
+Thanks for your help.
diff --git a/doc/forum/Basic_set_up_with_one_remote/comment_1_3ad06a0dbebf62e6440f549e77af59b6._comment b/doc/forum/Basic_set_up_with_one_remote/comment_1_3ad06a0dbebf62e6440f549e77af59b6._comment
new file mode 100644
index 000000000..c26261107
--- /dev/null
+++ b/doc/forum/Basic_set_up_with_one_remote/comment_1_3ad06a0dbebf62e6440f549e77af59b6._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk3HGoDpnOPob5jOjvIootmkve1-nCpRiI"
+ nickname="Kalle"
+ subject="ssh remote defaults to bare repo"
+ date="2014-05-06T06:10:06Z"
+ content="""
+Hi,
+
+When setting up a ssh remote the default is to create a repo without a human readable file structure. To achieve what you are looking for you have to initialize a git annex repo on the server and then add the remote to the clients. afaik this has to be done using the command line interface.
+
+If i remember correctly you add remotes with `git remote add ssh://example.com/path/to/annex`
+
+Cant find the docs atm (I'm commuting and at my final dest)
+
+"""]]
diff --git a/doc/forum/Basic_set_up_with_one_remote/comment_2_59e18e759c907b8adabf8c34eef08065._comment b/doc/forum/Basic_set_up_with_one_remote/comment_2_59e18e759c907b8adabf8c34eef08065._comment
new file mode 100644
index 000000000..40ed2c8b5
--- /dev/null
+++ b/doc/forum/Basic_set_up_with_one_remote/comment_2_59e18e759c907b8adabf8c34eef08065._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawl2I59wfwq505F9W0a6f7sFDcC9neWcc24"
+ nickname="Andrew"
+ subject="comment 2"
+ date="2014-05-06T12:45:05Z"
+ content="""
+OK that sounds reasonable. I'll give it a go.
+
+I don't mind so much that the remote is not human readable as I wont be browsing directly on the remote, but what I did find disconcerting is that I didn't seem to be able to access any files. For example if I lose both the client machines, how do I get access to the files on the remote?
+"""]]
diff --git a/doc/forum/Basic_set_up_with_one_remote/comment_3_5221a713ee3f65fa2740c9fa6cb1db0f._comment b/doc/forum/Basic_set_up_with_one_remote/comment_3_5221a713ee3f65fa2740c9fa6cb1db0f._comment
new file mode 100644
index 000000000..43dbb5d63
--- /dev/null
+++ b/doc/forum/Basic_set_up_with_one_remote/comment_3_5221a713ee3f65fa2740c9fa6cb1db0f._comment
@@ -0,0 +1,27 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawl2I59wfwq505F9W0a6f7sFDcC9neWcc24"
+ nickname="Andrew"
+ subject="Still missing something"
+ date="2014-05-06T17:35:20Z"
+ content="""
+On the server I ran
+
+git init
+git annex init
+
+On client I ran
+
+git init
+git annex init
+git annex direct
+
+then dropped some files in and ran
+
+git sync
+
+This didn't upload any files. I now have a broken link on the server without the actual file.
+
+When I tried to set up the server in the same way, then used the web assistant to create the repository on the client and then combine it with the manually created repository on the server, it actually worked for the first file. I could see a working link to the file it had just uploaded. But any subsequent files didn't reflect in the file structure. Additional files would show up in the .git/annex/objects folder, but again I have no way to explore these. git annex find showed nothing, git annex status showed only the first file and git log didn't show much. I tried re-adding this remote to a new annex repository, but it didn't give me access to the files or the history of the files. I'm confused!
+
+Is it me or is this not working as expected?
+"""]]
diff --git a/doc/forum/Basic_set_up_with_one_remote/comment_4_62e554a546e4b50d211f5f65446fd289._comment b/doc/forum/Basic_set_up_with_one_remote/comment_4_62e554a546e4b50d211f5f65446fd289._comment
new file mode 100644
index 000000000..8cbe86666
--- /dev/null
+++ b/doc/forum/Basic_set_up_with_one_remote/comment_4_62e554a546e4b50d211f5f65446fd289._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk3HGoDpnOPob5jOjvIootmkve1-nCpRiI"
+ nickname="Kalle"
+ subject="Some guesses"
+ date="2014-05-06T19:43:02Z"
+ content="""
+If you don't need human readable file structure on the server you don't have to initialize the annex repo. Just create a \"remote server\" repo with the assistant and set it to \"full backup\" if you want all the files there all the time. Without the \"full backup\" setting I believe only files it thinks someone else needs will be uploaded.* This might solve your problem with symlinks as `git annex sync` syncs metadata, only moving actual data if required.
+
+I'm not sure if the `git-annex find` command will work on a bare repo I can't test as all my repos are configured so that I can access the files in a normal way. Running `git-annex whereis $file` on the client should allow you to check if a file has been uploaded.
+
+
+*Massive caveat as I'm really not sure
+"""]]
diff --git a/doc/forum/Beginners_questions:_limit_content_on_special_remotes___38___use_non-git_clients_for_r__47__w_access_on_shared_git-annex_server.mdwn b/doc/forum/Beginners_questions:_limit_content_on_special_remotes___38___use_non-git_clients_for_r__47__w_access_on_shared_git-annex_server.mdwn
new file mode 100644
index 000000000..7291bd4b0
--- /dev/null
+++ b/doc/forum/Beginners_questions:_limit_content_on_special_remotes___38___use_non-git_clients_for_r__47__w_access_on_shared_git-annex_server.mdwn
@@ -0,0 +1,13 @@
+Hi!
+
+I just discovered *git-annex* as a great way to move away from Dropbox, but there are some open questions I couldn't find answers for and hope someone will be able to answer them here:
+
+I didn't completely understand how remotes are treated. As far as I understand there are two different parts to sync, the metadata (which is stored in a regular git repository) and the regular file data (or only chunks of it?). When syncing, I can choose whether I want to only sync the git (-metadata) part, or if I want to include the file contents, right?
+
+1. Is it possible to sync only a *part* of the file contents to certain remotes? For example I would want all my ebooks and photos to be synced to my remote server, but wouldn't want my private accounting and tax stuff to sync over the internet.
+2. I have several (regular) git repositories used for e.g. development. Can I store a regular (bare) git repository within a git-annex repository? Does this make sense, or should I (for whatever reason) avoid it?
+3. A great feature of the Dropbox app is the automatic upload of photos taken with my iPhone. I would like to adopt this kind of backup. So considering a remotely accessible server. Is there some way to make use of *special remotes* like WebDAV to allow uploads over a *non-git interface*?
+4. Is there a way to access files (read-only) over a non-git interface from some git-annex remote? So could I access e.g. some pdf document from a git-annex repository, when there is a WebDAV special remote? Or do I just misunderstand the concept of *special remotes*? Is there another (useful) way? Maybe some kind of (remotely accessible) web interface?
+5. Why is git-annex [not a backup system](http://git-annex.branchable.com/not/)?
+
+Thank you in advance!
diff --git a/doc/forum/Beginners_questions:_limit_content_on_special_remotes___38___use_non-git_clients_for_r__47__w_access_on_shared_git-annex_server/comment_1_871b5a42f1134a059df520993bb55268._comment b/doc/forum/Beginners_questions:_limit_content_on_special_remotes___38___use_non-git_clients_for_r__47__w_access_on_shared_git-annex_server/comment_1_871b5a42f1134a059df520993bb55268._comment
new file mode 100644
index 000000000..35346757a
--- /dev/null
+++ b/doc/forum/Beginners_questions:_limit_content_on_special_remotes___38___use_non-git_clients_for_r__47__w_access_on_shared_git-annex_server/comment_1_871b5a42f1134a059df520993bb55268._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="Replies to questions"
+ date="2015-01-28T05:34:16Z"
+ content="""
+1. Yes, see [[/preferred content]].
+2. Every time you change a file, git-annex stores that version of it indefinitely, until manually dropped or automatically expired by the git annex assistant daemon. So every time you checked out a branch or made a commit or whatever, you'd be cluttering your annex with many different versions of the same files. Since git is a pretty good way of keeping track of versions of files, and indeed syncing with other machines using `git push` and `git pull`, why would you want to put your git repos into another synchronisation system? (You can certainly tar up your git repos and put them in your annex as a backup.)
+3. Git-annex can run on Android phones but there is no iOS app. You could have some other app uploading to the server, and then the git-annex assistant could watch the directory the files were being uploaded to and automatically add the files to the annex and sync it to your workstation.
+4. If it's just a normal git remote then you can access it in the usual ways. Special remotes generally either lack knowledge of the names of your files, or this information is stored opaquely in git. That means that access via e.g. WebDAV would only let you see your files organised by SHA checksum which would be useless. So you'd want the git-annex remote you were accessing with a non-git interface to be a normal git remote, not a special remote.
+5. I think that Joey Hess wrote that git-annex is not a backup system to mean that what it does is quite different to something like duplicity, and also to mean that if you just install git-annex and create a repository, nothing is actually being backed up at all: you've got to manually add a remote, and instruct git-annex to send stuff there. You can certainly use git-annex to backup so long as you understand to what extent it is doing so.
+"""]]
diff --git a/doc/forum/Beginners_questions:_limit_content_on_special_remotes___38___use_non-git_clients_for_r__47__w_access_on_shared_git-annex_server/comment_2_68d675096d9ea32780b8ec8526544b12._comment b/doc/forum/Beginners_questions:_limit_content_on_special_remotes___38___use_non-git_clients_for_r__47__w_access_on_shared_git-annex_server/comment_2_68d675096d9ea32780b8ec8526544b12._comment
new file mode 100644
index 000000000..296505433
--- /dev/null
+++ b/doc/forum/Beginners_questions:_limit_content_on_special_remotes___38___use_non-git_clients_for_r__47__w_access_on_shared_git-annex_server/comment_2_68d675096d9ea32780b8ec8526544b12._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="janis_e"
+ subject="comment 2"
+ date="2015-01-29T08:39:02Z"
+ content="""
+Thank you for these answers, especially the 4) makes sense to me and prevented me form blowing up my repository!
+"""]]
diff --git a/doc/forum/Best_approach_for_central_sharing_and_multiple_users.mdwn b/doc/forum/Best_approach_for_central_sharing_and_multiple_users.mdwn
new file mode 100644
index 000000000..6fc104cb8
--- /dev/null
+++ b/doc/forum/Best_approach_for_central_sharing_and_multiple_users.mdwn
@@ -0,0 +1,8 @@
+Just a quick question: Can anyone recomment me a good to handle a centralized repository which is used by different users?
+
+Requirements: must work in direct mode on both sides, server is Linux, clients are Windows and operated by 2 different users.
+
+- Should the repository create bare or not?
+- Must the repository created on the server or can it also be "pushed" from one client to the server (via SSH on the server)?
+- Is there a better way for data transfer than SSH (WebDAV as in SVN)? I am still struggling with an elegant way to handle public keys in windows
+- What is the best way to not only keep meta data in sync but also the data each of the users has checked out?
diff --git a/doc/forum/Best_approach_for_central_sharing_and_multiple_users/comment_1_48ffb50b92588daec6887bf08f1b97f5._comment b/doc/forum/Best_approach_for_central_sharing_and_multiple_users/comment_1_48ffb50b92588daec6887bf08f1b97f5._comment
new file mode 100644
index 000000000..17860d037
--- /dev/null
+++ b/doc/forum/Best_approach_for_central_sharing_and_multiple_users/comment_1_48ffb50b92588daec6887bf08f1b97f5._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-11T19:31:52Z"
+ content="""
+I suggest following this screencast: [[videos/git-annex_assistant_lan]]
+
+While it talks about a local network, this will also work with a server on the internet.
+"""]]
diff --git a/doc/forum/Best_approach_for_central_sharing_and_multiple_users/comment_2_6b9a20f9707da9d2cfc3697a538d6935._comment b/doc/forum/Best_approach_for_central_sharing_and_multiple_users/comment_2_6b9a20f9707da9d2cfc3697a538d6935._comment
new file mode 100644
index 000000000..c77e9a8fd
--- /dev/null
+++ b/doc/forum/Best_approach_for_central_sharing_and_multiple_users/comment_2_6b9a20f9707da9d2cfc3697a538d6935._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="171.67.173.91"
+ subject="comment 2"
+ date="2014-07-11T21:56:29Z"
+ content="""
+Thanks, great work!
+
+I wanted to avoid the assistant so far because I feel I do not get so much control (particularly which files are synced to the clients) but I think I'll start with the assistant ...
+
+
+"""]]
diff --git a/doc/forum/Big_repository_vs._multiple_small.mdwn b/doc/forum/Big_repository_vs._multiple_small.mdwn
new file mode 100644
index 000000000..c77dd02a5
--- /dev/null
+++ b/doc/forum/Big_repository_vs._multiple_small.mdwn
@@ -0,0 +1,8 @@
+I am new to git (but extensively used SVN).
+
+In SVN I could have a big fat repository but only check out sub-trees is it.
+Is that also common in git(-annex) / recommended?
+
+E.g., should I create a big-fat repos with all data I have (personal data, music, videos, ...) and check out only the appropriate subtress or create a repository for each purpose? E.g., one for Fotos, Music, OnTheGoData, ebooks, ...
+
+What happens if I have a git-annex repository checked out at my laptop (say, d:\Files) and within it, check out another one (e.g. d:\Files\Library)?
diff --git a/doc/forum/Big_repository_vs._multiple_small/comment_1_8e21ee3c674ef6e595bdab53dd5c2356._comment b/doc/forum/Big_repository_vs._multiple_small/comment_1_8e21ee3c674ef6e595bdab53dd5c2356._comment
new file mode 100644
index 000000000..707a1cca6
--- /dev/null
+++ b/doc/forum/Big_repository_vs._multiple_small/comment_1_8e21ee3c674ef6e595bdab53dd5c2356._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://me.yahoo.com/a/FHnTlSBo1eCGJRwueeKeB6.RCaPbGMPr5jxx8A--#ce0d8"
+ nickname="Hamza"
+ subject="comment 1"
+ date="2014-04-14T15:32:34Z"
+ content="""
+In my setup I have one repository for each category (photos documents videos) it is faster then single giant repository plus it makes sharing with other people easier since you can let people clone one category at a time.
+"""]]
diff --git a/doc/forum/Big_repository_vs._multiple_small/comment_2_656c62351502492d20e8490242e51169._comment b/doc/forum/Big_repository_vs._multiple_small/comment_2_656c62351502492d20e8490242e51169._comment
new file mode 100644
index 000000000..22fa76542
--- /dev/null
+++ b/doc/forum/Big_repository_vs._multiple_small/comment_2_656c62351502492d20e8490242e51169._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="128.12.90.218"
+ subject="comment 2"
+ date="2014-04-15T18:23:13Z"
+ content="""
+Thank you, that's a good point!
+
+Does this also mean that a repository in git(-annex) is \"all or nothing\"?
+
+For example, I cannot share/clone parts of it? Or define access rights within a repository?
+
+With SVN for example, I have a big repository \"university\" and it contains all stuff of projects/research. Each individual directory is only shared with the persons whom I worked together in this particular project. In short: In git, this should not be that way, right?
+"""]]
diff --git a/doc/forum/Big_repository_vs._multiple_small/comment_3_e9c44ea364513f090844f46af2ea46a1._comment b/doc/forum/Big_repository_vs._multiple_small/comment_3_e9c44ea364513f090844f46af2ea46a1._comment
new file mode 100644
index 000000000..063260ba1
--- /dev/null
+++ b/doc/forum/Big_repository_vs._multiple_small/comment_3_e9c44ea364513f090844f46af2ea46a1._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://id.clacke.se/"
+ nickname="Claes"
+ subject="comment 3"
+ date="2014-04-17T14:04:31Z"
+ content="""
+Yeah, git does not have the concept of checking out subdirectories that subversion does. You could, however, have different branches with different content that live in the same repo and therefore share the same git-annex backend, so there could be overlap between what files are in what branch without them using up much extra disk space.
+"""]]
diff --git a/doc/forum/Big_repository_vs._multiple_small/comment_4_82e13580426dc648688e4c26e7ed91ec._comment b/doc/forum/Big_repository_vs._multiple_small/comment_4_82e13580426dc648688e4c26e7ed91ec._comment
new file mode 100644
index 000000000..e79e19814
--- /dev/null
+++ b/doc/forum/Big_repository_vs._multiple_small/comment_4_82e13580426dc648688e4c26e7ed91ec._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://me.yahoo.com/a/FHnTlSBo1eCGJRwueeKeB6.RCaPbGMPr5jxx8A--#ce0d8"
+ nickname="Hamza"
+ subject="comment 4"
+ date="2014-04-18T09:16:44Z"
+ content="""
+with git you can not checkout parts of a repo it is all or nothing but with annex you can download your files dir by dir. When you clone you get symlinks for all files but only the files you want are downloaded.
+"""]]
diff --git a/doc/forum/Big_repository_vs._multiple_small/comment_5_632aceb71dc6a4a9a4bb03de25a9b21a._comment b/doc/forum/Big_repository_vs._multiple_small/comment_5_632aceb71dc6a4a9a4bb03de25a9b21a._comment
new file mode 100644
index 000000000..182263f39
--- /dev/null
+++ b/doc/forum/Big_repository_vs._multiple_small/comment_5_632aceb71dc6a4a9a4bb03de25a9b21a._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="74.61.144.53"
+ subject="comment 5"
+ date="2014-04-19T05:38:43Z"
+ content="""
+Thanks!
+
+But what to my question regarding checking out a repository within a repository?
+
+I will most likely have a \"home\" repository which I would check out at first level.
+
+Then, within one directory I would like to (only locally!) check out another, such as \"Library\".
+
+Something like mount ... to mount one FS within another mount point.
+
+For SVN I think there exist externals for that ...
+
+Does this work?
+
+
+
+"""]]
diff --git a/doc/forum/Broken_symlinks_remain_after_drop.mdwn b/doc/forum/Broken_symlinks_remain_after_drop.mdwn
new file mode 100644
index 000000000..bc2404901
--- /dev/null
+++ b/doc/forum/Broken_symlinks_remain_after_drop.mdwn
@@ -0,0 +1,7 @@
+This is a newb question. I don't know whether this is a bug or the way git-annex is intended to function.
+
+I have two annex repos connected to each other. My idea was to have the first repository add files, which would then be moved to the second repository for storage. After moving, repo1 would be empty again, empty and clean of any symlinks.
+
+But after I 'git-annex move * --to repo2' broken symlinks remain in repo1. I don't want any broken/unused symlinks to remain in repo1 for object data it doesn't currently have (even if those files remain in the repository itself).
+
+Is there a way I can clean/remove broken symlinks to object data when those objects aren't present, so the directory only contains symlinks when the repo currently has the object data for those files?
diff --git a/doc/forum/Broken_symlinks_remain_after_drop/comment_1_d4a59b9e58d43d7a3d437e521dd5c4e1._comment b/doc/forum/Broken_symlinks_remain_after_drop/comment_1_d4a59b9e58d43d7a3d437e521dd5c4e1._comment
new file mode 100644
index 000000000..33a9cb058
--- /dev/null
+++ b/doc/forum/Broken_symlinks_remain_after_drop/comment_1_d4a59b9e58d43d7a3d437e521dd5c4e1._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 1"
+ date="2014-10-06T15:30:54Z"
+ content="""
+git-annex is behaving as expected here. The broken symlink allows you to run `git annex get` on it to get the file content back into the repository, or `git mv` to rename the file even though its content is not present, etc.
+
+You can probably accomplish what you want by using git branches. You want a branch for repo2 that has all the files, and a branch for repo1 that has only the files in repo1. git-annex doesn't maintain such branches for you, but you can probably come up with a way to create such branches (`git annex find` will be useful when scripting up a solution).
+
+Or you can adopt the approach the git-annex assistant uses for archived files -- a archive/ directory, where files are moved when they're no longer wanted in the local system, so that their symlinks don't clutter up the view, while still being easily accessible when the time comes to pull something out of the archive.
+"""]]
diff --git a/doc/forum/Broken_symlinks_remain_after_drop/comment_2_399ba969a17a41a022c69a1f7c480857._comment b/doc/forum/Broken_symlinks_remain_after_drop/comment_2_399ba969a17a41a022c69a1f7c480857._comment
new file mode 100644
index 000000000..f9225b066
--- /dev/null
+++ b/doc/forum/Broken_symlinks_remain_after_drop/comment_2_399ba969a17a41a022c69a1f7c480857._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="ghen1"
+ ip="66.41.70.34"
+ subject="comment 2"
+ date="2014-10-09T02:20:14Z"
+ content="""
+Thank you for your reply and suggestions. How could I maintain an archive folder on a local repo without those changes (moved files) being reflected in the other repos? Would this require branching as well? How does the assistant do it?
+"""]]
diff --git a/doc/forum/Can_Not_Sync_to_Git_Repo/comment_13_45132d348807fbf8ed32198e110d2caa._comment b/doc/forum/Can_Not_Sync_to_Git_Repo/comment_13_45132d348807fbf8ed32198e110d2caa._comment
new file mode 100644
index 000000000..f30f2907f
--- /dev/null
+++ b/doc/forum/Can_Not_Sync_to_Git_Repo/comment_13_45132d348807fbf8ed32198e110d2caa._comment
@@ -0,0 +1,26 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlo7XnC4EU3u_9t80JUYXV7XPnUqBQ7mD4"
+ nickname="Ryan"
+ subject="comment 13"
+ date="2014-12-19T00:09:35Z"
+ content="""
+I'm having the same problem with my direct repo:
+
+git branch -a
+ git-annex
+* master
+ synced/git-annex
+ synced/master
+ remotes/cluster/git-annex
+ remotes/cluster/master
+ remotes/cluster/synced/master
+
+git annex version
+git-annex version: 5.20140818-g10bf03a
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+local repository version: 5
+supported repository version: 5
+upgrade supported from repository versions: 0 1 2 4
+"""]]
diff --git a/doc/forum/Can_git_annex___40__mostly__41___be_an_Ubuntu_One___40__or_Dropbox...__41___substitute__63__.mdwn b/doc/forum/Can_git_annex___40__mostly__41___be_an_Ubuntu_One___40__or_Dropbox...__41___substitute__63__.mdwn
new file mode 100644
index 000000000..0b49f422f
--- /dev/null
+++ b/doc/forum/Can_git_annex___40__mostly__41___be_an_Ubuntu_One___40__or_Dropbox...__41___substitute__63__.mdwn
@@ -0,0 +1,76 @@
+Hi, I tried with several git annex versions, on 3 different clients, and using 2 different remotes (an home server and box.com) and trying out different remotes setups but I've been unable to get git annex working as I expected.
+
+
+I used the assistant for setup, I can sync files between clients just fine if they're connected at the same time, but if I sync a file from client A to the remotes when client B is off, and then later I turn off client A and power on client B, I've never been able to successfully sync files.
+
+on client B, inside .git/annex/daemon.log there's nothing interesting: just messages like:
+
+```(scanning...) [2014-06-03 14:53:26 CEST] Watcher: Performing startup scan
+
+Already up-to-date.```
+
+`git annex sync` just outputs
+
+`"commit ok"`
+
+and `git annex list`:
+
+```
+here
+
+|berdario
+
+||soloud
+
+|||web
+
+||||box.com
+
+|||||
+
+XX__X IMG_20130202_100444.jpg
+
+XXX_X cookies.png
+
+XXX_X dancingllama.png
+
+XXX_X dario_bertini_cv.pdf
+
+XX__X steam_latest.deb
+```
+
+while this is what I get on client A:
+
+```
+here
+
+|berdario
+
+||web
+
+|||box.com
+
+||||
+
+XX_X IMG_20130202_100444.jpg
+
+X__X Russian Lesson 5 - Wikibooks, open books for an open world.html
+
+XX_X cookies.png
+
+XX_X dancingllama.png
+
+XX_X dario_bertini_cv.pdf
+
+XX_X steam_latest.deb
+```
+
+(they're just a bunch of random files I'm using to test it, both clients are called berdario, soloud is the home server (currently down) and the other working remote is box.com)
+
+As you can see the russian wikibooks html file is successfully synced with the remotes, but client B is unable to see it...
+
+I tried to set the remotes as incremental backup, full backup, transfer, client (!?) but none of these settings work.
+
+Is git annex not what I'm looking for? Is it supposed to work only on contemporarily connected clients?
+
+Thanks
diff --git a/doc/forum/Can_git_annex___40__mostly__41___be_an_Ubuntu_One___40__or_Dropbox...__41___substitute__63__/comment_1_a3fbae205c0312436f8861f432643811._comment b/doc/forum/Can_git_annex___40__mostly__41___be_an_Ubuntu_One___40__or_Dropbox...__41___substitute__63__/comment_1_a3fbae205c0312436f8861f432643811._comment
new file mode 100644
index 000000000..a5baa31f3
--- /dev/null
+++ b/doc/forum/Can_git_annex___40__mostly__41___be_an_Ubuntu_One___40__or_Dropbox...__41___substitute__63__/comment_1_a3fbae205c0312436f8861f432643811._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-06-04T18:21:13Z"
+ content="""
+your box.com repository only stores encrypted file contents, it does not include the git repository. So you need to either set up XMPP, which will allow the clients to sync while they're turned on, or you need to put a git repository on a remote server, which the clients can use to sync anytime.
+
+Recent versions of git-annex allow encrypting the git repository. Use the \"remote server\" option in the webapp UI to set it up.
+"""]]
diff --git a/doc/forum/Can_git_annex___40__mostly__41___be_an_Ubuntu_One___40__or_Dropbox...__41___substitute__63__/comment_2_de49cf261c644a6e7f6ac881a48d4e6c._comment b/doc/forum/Can_git_annex___40__mostly__41___be_an_Ubuntu_One___40__or_Dropbox...__41___substitute__63__/comment_2_de49cf261c644a6e7f6ac881a48d4e6c._comment
new file mode 100644
index 000000000..552a6db2b
--- /dev/null
+++ b/doc/forum/Can_git_annex___40__mostly__41___be_an_Ubuntu_One___40__or_Dropbox...__41___substitute__63__/comment_2_de49cf261c644a6e7f6ac881a48d4e6c._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk0Sr9y7EcI5OhPk4GteZiHVxaoC0DmJ-E"
+ nickname="Dario"
+ subject="comment 2"
+ date="2014-06-05T09:10:40Z"
+ content="""
+I have set up XMPP already. I thought it was obvious, since otherwise you wouldn't even be able to share a remote with other clients (it would overwrite the contents)
+
+And the same problem happens with a remote server
+"""]]
diff --git a/doc/forum/Central_git_annex_server_that_always_keeps_one_copy.mdwn b/doc/forum/Central_git_annex_server_that_always_keeps_one_copy.mdwn
new file mode 100644
index 000000000..166a22dee
--- /dev/null
+++ b/doc/forum/Central_git_annex_server_that_always_keeps_one_copy.mdwn
@@ -0,0 +1 @@
+Is there a way to configure a central git repository that keeps track of large files with git annex so that multiple users can clone the repository but no repository clone can drop files from the server. Essentially, I'm looking for a way to have one repository that is always populated with at least one copy of each file. Other users shouldn't be able to tell that repository to drop any files (but would be able to add files it). The term "user" in that last sentence really refers to other clones...
diff --git a/doc/forum/Central_git_annex_server_that_always_keeps_one_copy/comment_1_e786c8df6e48d88cf15b555af1b8639a._comment b/doc/forum/Central_git_annex_server_that_always_keeps_one_copy/comment_1_e786c8df6e48d88cf15b555af1b8639a._comment
new file mode 100644
index 000000000..19339a3aa
--- /dev/null
+++ b/doc/forum/Central_git_annex_server_that_always_keeps_one_copy/comment_1_e786c8df6e48d88cf15b555af1b8639a._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn-TDneVW-8kwb1fyTRAJfH3l1xs2VSEmk"
+ nickname="James"
+ subject="comment 1"
+ date="2014-07-30T20:37:27Z"
+ content="""
+It might not suit all your needs but you could try using gitolite and set permissions on the git-annex branch of your repository
+http://gitolite.com/gitolite/conf.html#write-types
+
+"""]]
diff --git a/doc/forum/Central_git_annex_server_that_always_keeps_one_copy/comment_2_b0a091e11c18c8640888b0aedfbff5c5._comment b/doc/forum/Central_git_annex_server_that_always_keeps_one_copy/comment_2_b0a091e11c18c8640888b0aedfbff5c5._comment
new file mode 100644
index 000000000..35778ad9a
--- /dev/null
+++ b/doc/forum/Central_git_annex_server_that_always_keeps_one_copy/comment_2_b0a091e11c18c8640888b0aedfbff5c5._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2014-10-28T20:28:26Z"
+ content="""
+If you configure the central repository to be in the "full backup" group,
+then the assistant and `git annex sync --content` etc will send the
+contents of all files to it, and never remove the contents of files from
+it.
+
+This doesn't prevent someone manually running `git annex drop --from
+$centralrepo --force`, or similar. But then, nothing prevents users from
+using git to push annexed files to the central repo, and never sending the
+contents of the files along to it.
+
+It would be possible to make `git-annex-shell` have a config setting that
+would prevent ever dropping keys. But I'd like to talk about this use case
+more, to make sure that really makes sense.
+"""]]
diff --git a/doc/forum/Changing_files_during_git_annex_runs.mdwn b/doc/forum/Changing_files_during_git_annex_runs.mdwn
new file mode 100644
index 000000000..7ff362d1c
--- /dev/null
+++ b/doc/forum/Changing_files_during_git_annex_runs.mdwn
@@ -0,0 +1,12 @@
+Hello,
+
+I have my music git annexed, direct mode. It's about 30k files of 429GB size. Some actions take considerable time (sync, add and of course transfer to/from other repos). During this time I don't hear music because of my player changes files. :-(
+
+When is it a problem when a files changes during git annex operations?
+
+git annex get gives a wrong checksum I guess and you need to re-transfer later.
+
+What about git annex add?
+
+Thx!
+Florian
diff --git a/doc/forum/Changing_files_during_git_annex_runs/comment_1_8067077c49dafbe2afa7d182b3314df4._comment b/doc/forum/Changing_files_during_git_annex_runs/comment_1_8067077c49dafbe2afa7d182b3314df4._comment
new file mode 100644
index 000000000..312100b11
--- /dev/null
+++ b/doc/forum/Changing_files_during_git_annex_runs/comment_1_8067077c49dafbe2afa7d182b3314df4._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.111"
+ subject="comment 1"
+ date="2014-10-13T21:33:35Z"
+ content="""
+git-annex will detect things like files being changed at the same time that `git annex add` is run. It doesn't currently do a full lsof check to make sure nothing has a file open when `git annex add` is run (the assistant does do such extra checks).
+
+I don't see why syncing or transferring files to other repos should prevent your music player or whatever from using the files that you have locally present.
+
+If you're using direct mode and your music player is modifying the contents of files in the repository, then that will prevent other repositories downloading older versions of those files, since the old version is no longer present in the direct mode repository. There is the possibility for some innefficient attempts to transfer a file, that would fail because it got modified in between. git-annex detects this, but it can still waste bandwidth.
+
+(If my music player was modifying files all the time, I'd give it a good talking to; that's not the job of a music player. But, I keep my music in an indirect mode repo, so any music player would find it hard to modify annexed files anyway.)
+"""]]
diff --git a/doc/forum/Checking_for_missing_files_in_S3___40__reduced_redundancy__41__.mdwn b/doc/forum/Checking_for_missing_files_in_S3___40__reduced_redundancy__41__.mdwn
new file mode 100644
index 000000000..97299a966
--- /dev/null
+++ b/doc/forum/Checking_for_missing_files_in_S3___40__reduced_redundancy__41__.mdwn
@@ -0,0 +1,5 @@
+I would like to use git-annex with [S3 reduced redundancy storace (RRS)](https://aws.amazon.com/s3/faqs/#rrs_anchor), a cheaper S3 service with an higher chance of seeing your files disappear overnight. This means that git-annex may think that a certain files has been copied to a S3 remote while, in fact, it is no longer there.
+
+I would like to check that the files S3 are really there and, if some files are not, record that we lost that copy. In the case of S3, either the data is there and it is complete or it is not there at all, so there is no need to check the data itself, just the presence of the files.
+
+Is there a way to check that all the files that are supposed to be in a S3 remote are still there?
diff --git a/doc/forum/Checking_for_missing_files_in_S3___40__reduced_redundancy__41__/comment_2_793b3d9f78562f3aecf27dd926bbcf82._comment b/doc/forum/Checking_for_missing_files_in_S3___40__reduced_redundancy__41__/comment_2_793b3d9f78562f3aecf27dd926bbcf82._comment
new file mode 100644
index 000000000..404ba8b87
--- /dev/null
+++ b/doc/forum/Checking_for_missing_files_in_S3___40__reduced_redundancy__41__/comment_2_793b3d9f78562f3aecf27dd926bbcf82._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.114"
+ subject="comment 2"
+ date="2014-04-24T18:12:59Z"
+ content="""
+git annex fsck --fast --from $yours3remote
+"""]]
diff --git a/doc/forum/Checkout_only_some_files_with_the_assistant.mdwn b/doc/forum/Checkout_only_some_files_with_the_assistant.mdwn
new file mode 100644
index 000000000..7a2270d92
--- /dev/null
+++ b/doc/forum/Checkout_only_some_files_with_the_assistant.mdwn
@@ -0,0 +1,14 @@
+Hi,
+
+I really like git-annex for sharing contents with all my devices. But i have a problem with the assistant on my phone, i don't know how to git annex get some file but not all.
+For example i have this on a remote:
+
+repository:
+ - big file1
+ - big file2
+ - big file3
+
+I have this repository on my phone. I would like to be able to checkout out only "big file2" directly within the assistant.
+How can i achieve that?
+
+Thank you.
diff --git a/doc/forum/Checkout_only_some_files_with_the_assistant/comment_1_23d8ab1a05e3e9d3611bd12a4ba70b0c._comment b/doc/forum/Checkout_only_some_files_with_the_assistant/comment_1_23d8ab1a05e3e9d3611bd12a4ba70b0c._comment
new file mode 100644
index 000000000..85325c60c
--- /dev/null
+++ b/doc/forum/Checkout_only_some_files_with_the_assistant/comment_1_23d8ab1a05e3e9d3611bd12a4ba70b0c._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.114"
+ subject="comment 1"
+ date="2014-04-24T18:15:15Z"
+ content="""
+[[preferred_content]] expressions can be used to do that. Works best if all the files you want have some extension or are in a specific directory.
+
+There are some [[preferred_content/standard_groups]] that might do what you want, particularly the \"manual\" one.
+"""]]
diff --git a/doc/forum/Checkout_only_some_files_with_the_assistant/comment_2_bf095ff5b5af95b062ae1f7da566a279._comment b/doc/forum/Checkout_only_some_files_with_the_assistant/comment_2_bf095ff5b5af95b062ae1f7da566a279._comment
new file mode 100644
index 000000000..cf35f3541
--- /dev/null
+++ b/doc/forum/Checkout_only_some_files_with_the_assistant/comment_2_bf095ff5b5af95b062ae1f7da566a279._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="elfangor"
+ ip="176.57.244.101"
+ subject="comment 2"
+ date="2014-04-28T13:12:07Z"
+ content="""
+Thanks for your reply.
+
+The Standard group \"manual\" seems to be what i need. The last thing i'd like to now is, is there a way to do git annex get on the assistant(on the webui) on my phone? (I know i can do this on the shell opened, but it's not that easy to write from the phone.) I guess it's not implemented, and i understand that it should be a lot of work to add a file browser in the ui where you can git annex get, and git annex add from it.
+
+Thanks again for your answer, really helpfull: I have a better idea on how i will structur my git annex repositories.
+"""]]
diff --git a/doc/forum/Checkout_only_some_files_with_the_assistant/comment_3_7c026e36e1cdd52053c34638c87d793c._comment b/doc/forum/Checkout_only_some_files_with_the_assistant/comment_3_7c026e36e1cdd52053c34638c87d793c._comment
new file mode 100644
index 000000000..ae18c8caf
--- /dev/null
+++ b/doc/forum/Checkout_only_some_files_with_the_assistant/comment_3_7c026e36e1cdd52053c34638c87d793c._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="216.145.95.162"
+ subject="comment 3"
+ date="2014-05-19T15:45:57Z"
+ content="""
+There is not currently any UI to do git-annex get/drop.
+
+There is some recent work on [[tips/file_manager_integration]] which lets you use a file manager and pick files you want and files to drop. Nobody has gotten it working with android file manager yet AFAIK.
+"""]]
diff --git a/doc/forum/Comparison_with_other_big_files_solutions.mdwn b/doc/forum/Comparison_with_other_big_files_solutions.mdwn
new file mode 100644
index 000000000..cfbd12d29
--- /dev/null
+++ b/doc/forum/Comparison_with_other_big_files_solutions.mdwn
@@ -0,0 +1,11 @@
+# Comparison
+
+Based on my understanding of the http://git-annex.branchable.com/not/ page and of some research,
+I have made a draft of an [Online excel document][1] that compares different git file solutions.
+
+Feel free to edit the document and help the community to understand the different solutions out there.
+
+[1]: https://onedrive.live.com/redir?resid=C66C90783BD2C185!1200&authkey=!ACF-Ol_mG3DwQ2k&ithint=file%2c.xlsx
+
+Thank you very much,
+Alex
diff --git a/doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__.mdwn b/doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__.mdwn
new file mode 100644
index 000000000..abc2f8f26
--- /dev/null
+++ b/doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__.mdwn
@@ -0,0 +1,16 @@
+I'm having trouble sharing an rsync remote between two users (as a "transfer" repository). `git-annex` thinks `rsync` fails because it can't set the permissions on the root directory on the destination. I've added `--perms --chmod=Dug+rwxs,Fug+rw,o-rwx` to `annex-rsync-options` so all users in the specified group on the destination can create and delete files. However, I see in the logs errors like:
+
+ sending incremental file list
+ ./
+ rsync: failed to set permissions on "/home/shared-xfer/.": Operation not permitted (1)
+ 2fe/985/GPGHMACSHA1--b36ce0a18718e7ea7cf9827c2748608df7152dfc/GPGHMACSHA1--b36ce0a18718e7ea7cf9827c2748608df7152dfc
+
+ 32,768 0% 0.00kB/s 0:00:00
+ 3,359,405 100% 4.78MB/s 0:00:00 (xfr#1, to-chk=0/5)
+ rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1165) [sender=3.1.1]
+ [2014-10-18 15:16:24 EDT] chat: gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--batch","--passphrase-fd","22","--symmetric","--force-mdc","--no-textmode"]
+ [2014-10-18 15:16:24 EDT] read: rsync ["-e","'ssh' '-S' '.git/annex/ssh/blah@blah' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=yes' '-l' 'blah' '-T'","--perms","--chmod=Dug+rwxs,Fug+rw,o-rwx","--progress","--recursive","--partial","--partial-dir=.rsync-partial","/blah/.git/annex/tmp/rsynctmp/24863/","blah@blah:/home/shared-xfer/"]
+
+ rsync failed -- run git annex again to resume file transfer
+
+The transfer actually completes fine, except for setting permissions of the root directory on the destination (which I don't really care about, because I have manually set them to be correct). Is it possible for `git-annex` to copy the contents of the directory to rsync remotes? For the example above, instead of `/blah/.git/annex/tmp/rsynctmp/24863/`, `/blah/.git/annex/tmp/rsynctmp/24863/2fe` would work. I can't come up with an alternate solution for this server, except using the same remote user (which I'd prefer not to do).
diff --git a/doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__/comment_1_6a598b2a0fc6c241aa051f663dca9842._comment b/doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__/comment_1_6a598b2a0fc6c241aa051f663dca9842._comment
new file mode 100644
index 000000000..6e4186622
--- /dev/null
+++ b/doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__/comment_1_6a598b2a0fc6c241aa051f663dca9842._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-28T19:26:01Z"
+ content="""
+git-annex has to tell rsync to transfer the "24863" directory,
+otherwise rsync would not create that directory, and would then
+fail to create "24863/2fe" since its parent directory doesn't exist.
+
+Might be able to use use ACLS, I suppose, but they bring a lot of complexity.
+"""]]
diff --git a/doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__/comment_3_09b7f1dd1fa4589b3fe0be0086849bf3._comment b/doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__/comment_3_09b7f1dd1fa4589b3fe0be0086849bf3._comment
new file mode 100644
index 000000000..1d6e912bc
--- /dev/null
+++ b/doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__/comment_3_09b7f1dd1fa4589b3fe0be0086849bf3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlVB7wf1TFFrNPvM62fg78X-simVV-R1Cg"
+ nickname="Joe"
+ subject="comment 3"
+ date="2014-11-03T02:21:32Z"
+ content="""
+I was thinking that a call to `rsync /blah/.git/annex/tmp/rsynctmp/24863/2fe blah@blah:/home/shared-xfer/24863/` would work just as well, creating the necessary directories. But this requires knowing all the subdirectories of `24863`. Not sure if `git-annex` knows this.
+"""]]
diff --git a/doc/forum/Copying_and_dropping_right_after.mdwn b/doc/forum/Copying_and_dropping_right_after.mdwn
new file mode 100644
index 000000000..65680c062
--- /dev/null
+++ b/doc/forum/Copying_and_dropping_right_after.mdwn
@@ -0,0 +1,18 @@
+Hello,
+
+I have three repos horus (client, this one), astarte (transfer, remote) and external_2tb (client, connected usb). On a git annex sync --content it first copies the content to external and astarte and then dropping the content from astarte right after.
+
+ copy FLAC/Corvus Corax - Cantus Buranus/Corvus Corax - 08 - Sol solo.flac copy FLAC/Corvus Corax - Cantus Buranus/Corvus Corax - 08 - Sol solo.flac (to external_2TB...)
+ Corvus Corax - 08 - Sol solo.flac
+ 33,541,833 100% 257.72MB/s 0:00:00 (xfr#1, to-chk=0/1)
+ ok
+ copy FLAC/Corvus Corax - Cantus Buranus/Corvus Corax - 08 - Sol solo.flac copy FLAC/Corvus Corax - Cantus Buranus/Corvus Corax - 08 - Sol solo.flac (checking astarte...) (to astarte...)
+ Corvus Corax - 08 - Sol solo.flac
+ 33,541,833 100% 437.82kB/s 0:01:14 (xfr#1, to-chk=0/1)
+ ok
+ drop astarte FLAC/Corvus Corax - Cantus Buranus/Corvus Corax - 08 - Sol solo.flac ok
+
+Why copying it anyway?
+
+Regards,
+Florian
diff --git a/doc/forum/Copying_and_dropping_right_after/comment_1_87d81911964c2628ccb6156b0b631aa0._comment b/doc/forum/Copying_and_dropping_right_after/comment_1_87d81911964c2628ccb6156b0b631aa0._comment
new file mode 100644
index 000000000..dbe357d66
--- /dev/null
+++ b/doc/forum/Copying_and_dropping_right_after/comment_1_87d81911964c2628ccb6156b0b631aa0._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-01-05T20:31:10Z"
+ content="""
+This must have something to do with the preferred content settings of
+astarte. Can you show the output of this command: `git annex wanted astarte`
+"""]]
diff --git a/doc/forum/Copying_and_dropping_right_after/comment_2_87a14d14014aefc33f811bb15ea27e13._comment b/doc/forum/Copying_and_dropping_right_after/comment_2_87a14d14014aefc33f811bb15ea27e13._comment
new file mode 100644
index 000000000..b58b61a75
--- /dev/null
+++ b/doc/forum/Copying_and_dropping_right_after/comment_2_87a14d14014aefc33f811bb15ea27e13._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk9SYh6N-JUMkYkW4aOk55zC3Vr9KonDV4"
+ nickname="Florian"
+ subject="comment 2"
+ date="2015-01-14T22:01:24Z"
+ content="""
+Sorry for the late reply. I had redone my git-annex repos, but I just had exactly this behaviour again
+
+ % git annex wanted astarte
+ standard
+ % git annex group astarte
+ transfer
+
+Best Regards...
+"""]]
diff --git a/doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work.mdwn b/doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work.mdwn
new file mode 100644
index 000000000..2865441e7
--- /dev/null
+++ b/doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work.mdwn
@@ -0,0 +1,47 @@
+Posting this here because I am not sure if it is a bug or if I am missing something.
+
+I have a ~10 GB file in git-annex. I can't get it to go to S3 whatever I do.
+
+I added a S3 special remote:
+
+ git annex initremote s3-mybucket type=S3 chunk=1MiB keyid=ABCD1234 bucket=mybucket
+
+Then, I tried copying files to the remote. Small files worked, but big files don't:
+
+ $ git annex copy bigfile.tgz --to s3-mybucket
+ copy bigfile.tgz (gpg)
+ You need a passphrase to unlock the secret key for
+ user: "user"
+ 2048-bit RSA key, ID ABCD1234, created 2014-10-13 (main key ID ABCD1234)
+
+ (checking s3-mybucket...) (to s3-mybucket...)
+
+ Your proposed upload exceeds the maximum allowed size
+ failed
+ git-annex: copy: 1 failed
+
+I tried some stuff like this too:
+
+ git annex enableremote s3-mybucket chunk=100MiB
+ git annex enableremote s3-mybucket chunksize=100MiB
+
+It didn't work. Same result.
+
+ $ git annex version
+ git-annex version: 5.20140717
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 0 1 2 4
+
+The chunk size did seem to be set properly:
+
+ $ git checkout git-annex
+ $ cat remote.log
+ xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx bucket=mybucket chunk=100MiB chunksize=100MiB cipher=....
+
+I'm on OSX 10.9.4 and I installed git-annex via homebrew.
+
+Any ideas?
diff --git a/doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work/comment_1_ec390a7d521c697eb6b17e8db1dc9d1d._comment b/doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work/comment_1_ec390a7d521c697eb6b17e8db1dc9d1d._comment
new file mode 100644
index 000000000..7b8a0e1f5
--- /dev/null
+++ b/doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work/comment_1_ec390a7d521c697eb6b17e8db1dc9d1d._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.111"
+ subject="comment 1"
+ date="2014-10-15T15:25:14Z"
+ content="""
+You're using an old version of git-annex from before the recent complete rewrite of the chunking code. That old version did not support chunking for S3. QED. Upgrade.
+
+Note that your configuration has both the chunksize= and chunk= set. This is not a good idea, since they enable different types of chunking that are not compatible. If I were you, I'd delete that special remote and make a new one after upgrading, and be careful to only set `chunk=` in that new one.
+"""]]
diff --git a/doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work/comment_2_14a584567ef42d5b7955ee970200e74d._comment b/doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work/comment_2_14a584567ef42d5b7955ee970200e74d._comment
new file mode 100644
index 000000000..744b9f182
--- /dev/null
+++ b/doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work/comment_2_14a584567ef42d5b7955ee970200e74d._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://digiuser.livejournal.com/"
+ ip="67.161.4.185"
+ subject="Homebrew"
+ date="2014-10-15T15:37:34Z"
+ content="""
+Oh, ok, thank you. I am using the latest version from homebrew. Is there a way to get homebrew to install the latest version?
+
+Thanks.
+"""]]
diff --git a/doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work/comment_3_6cbd7329f1f11edf8dd90df27d45158f._comment b/doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work/comment_3_6cbd7329f1f11edf8dd90df27d45158f._comment
new file mode 100644
index 000000000..ecba0fc83
--- /dev/null
+++ b/doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work/comment_3_6cbd7329f1f11edf8dd90df27d45158f._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.111"
+ subject="comment 3"
+ date="2014-10-15T17:25:27Z"
+ content="""
+I think that if you have installed all the build deps for git-annex using homebrew, you should be able to just install git-annex from source.
+
+Or, ask the homebrewers to update the package there..
+"""]]
diff --git a/doc/forum/Corrupt_Repository_Invalid_Object.mdwn b/doc/forum/Corrupt_Repository_Invalid_Object.mdwn
new file mode 100644
index 000000000..af6d8e353
--- /dev/null
+++ b/doc/forum/Corrupt_Repository_Invalid_Object.mdwn
@@ -0,0 +1,10 @@
+One of my repositories got corrupted. I am not exactly sure how it happened (was running a series of commands) but I think I accidentally ran regular mv instead of git mv. To fix it I deleted the moved file then checkout the original link however this did not fixed the problem. I ended up with a corrupted repo. Now running any command ends with the following error,
+
+ ga sync
+ (merging origin/git-annex origin/synced/git-annex into git-annex...)
+ (Recording state in git...)
+ error: invalid object 040000 6ad564920e3d78d31c9456f5be3869a0319f9f08 for'3fd/d44'
+ fatal: git-write-tree: error building trees
+ git-annex: failed to read sha from git write-tree
+
+Was wondering how to fix this? I did run git fsck and git annex fsck but non fixed the problem.
diff --git a/doc/forum/Corrupt_Repository_Invalid_Object/comment_1_b7fd4b6212b50400342931e70684b96c._comment b/doc/forum/Corrupt_Repository_Invalid_Object/comment_1_b7fd4b6212b50400342931e70684b96c._comment
new file mode 100644
index 000000000..a62e6d345
--- /dev/null
+++ b/doc/forum/Corrupt_Repository_Invalid_Object/comment_1_b7fd4b6212b50400342931e70684b96c._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 1"
+ date="2014-04-17T19:47:54Z"
+ content="""
+git is complaining about one of the files in `.git/objects` being missing or corrupt.
+
+It's not likely that some accidental command you ran caused this. More likely a disk error or an unclean shutdown could have left the repository in this state.
+
+You can try running `git annex repair` which should be able to repair git repositories with this kind of damage.
+
+Or you can just `git clone` the repository from any other place you have it and move over .git/annex/objects and .git/config to the new repository, discarding the damaged one.
+"""]]
diff --git a/doc/forum/Corrupted_repository__44___can_not_be_repaired.mdwn b/doc/forum/Corrupted_repository__44___can_not_be_repaired.mdwn
new file mode 100644
index 000000000..e2b4357bf
--- /dev/null
+++ b/doc/forum/Corrupted_repository__44___can_not_be_repaired.mdwn
@@ -0,0 +1,40 @@
+Hey, I hope somebody can help me:
+
+I recently moved a bunch of files to another location shortly after I renamed them. The assistant was running (repo: indirect mode) and I guess the assistant was confused about whether to commit the rename changes or to fix the symlinks because of the location move (and to commit these changes). I don't know much about the internal design, but after that my repository was kinda broken. Every git command failed and also "git fsck" gave me some error messages. However, I mounted my external drive (backup repo) and tried a "git annex repair". It took quite a while, but it could fix the repo....somehow. This is the current status:
+
+ ~/private [master●] » git annex info
+ repository mode: indirect
+ trusted repositories: error: refs/remotes/extern/git-annex does not point to a valid object!
+ error: refs/remotes/extern/git-annex does not point to a valid object!
+ error: unable to resolve reference refs/heads/git-annex: Datei oder Verzeichnis nicht gefunden // (english: No such file or directory)
+ fatal: Cannot lock the ref 'refs/heads/git-annex'.
+ git-annex: git [Param "update-ref",Param "refs/heads/git-annex",Param "ea4d4b5e09bfd10c714c24ca76ab5af0625bb6a7"] failed
+
+ ~/private [master●] » git fsck
+ Checking object directories: 100% (256/256), done.
+ Checking objects: 100% (654755/654755), done.
+ error: refs/remotes/extern/git-annex does not point to a valid object!
+ error: bad ref for refs/heads/git-annex
+ Checking connectivity: 654760, done.
+ dangling blob cb2a012e65b15baf0bc51cb8ac6ab05c4ac4e543
+ dangling blob 6a48216d54be6fbf0539c86501ce9e4567ebf678
+ dangling blob 3f8f21304c6dcfc6ace92093425d7f057138b5e8
+ dangling blob 4943840264ad7c06071f510261151c28b4fb5168
+ dangling blob d67e845b06b17c3ba5b44a454d3128dea6ebe8cc
+ dangling blob 38b7e4ce06a84c03b9a0f7f3a84872b2ed202421
+ dangling blob ca0a65e010c69e02953d63f33c5f2030f793c8ff
+ dangling blob aeba65035f566ec9f18ad2ba71b155b0efd2193a
+ dangling blob d3cea542db4c2904f5c8c6dd98ca3868074e6d36
+ dangling commit fe1026edee5dcc6306f04ebe1a7762b86678db8a
+ [... some more dangling objects ...]
+
+However, git annex repair does not want to repair my repo a second time:
+
+ ~/private [master●] » git annex repair
+ Running git fsck ...
+ No problems found.
+ ok
+My directory seems to be fine, also the data (symlinks) I renamed & moved are also fine. Just the "git-annex" branch seems to be broken now and I don't know how to fix that.
+
+Cheers,
+Stephan
diff --git a/doc/forum/Corrupted_repository__44___can_not_be_repaired/comment_1_297ea9c13096f6360358b3a3e7197c03._comment b/doc/forum/Corrupted_repository__44___can_not_be_repaired/comment_1_297ea9c13096f6360358b3a3e7197c03._comment
new file mode 100644
index 000000000..63878f19e
--- /dev/null
+++ b/doc/forum/Corrupted_repository__44___can_not_be_repaired/comment_1_297ea9c13096f6360358b3a3e7197c03._comment
@@ -0,0 +1,37 @@
+[[!comment format=mdwn
+ username="sts"
+ ip="134.147.73.126"
+ subject="comment 1"
+ date="2014-07-18T09:46:01Z"
+ content="""
+I forgot, this might be interesting
+
+ git show ea4d4b5e09bfd10c714c24ca76ab5af0625bb6a7
+
+ commit ea4d4b5e09bfd10c714c24ca76ab5af0625bb6a7
+ Author: Stephan Schindel <sts@tp1.rub.de>
+ Date: Fri Jul 18 11:28:07 2014 +0200
+
+ branch created
+
+and
+
+ ~/private [master●] » git annex fsck
+ error: refs/remotes/extern/git-annex does not point to a valid object!
+ error: refs/remotes/extern/git-annex does not point to a valid object!
+ error: unable to resolve reference refs/heads/git-annex: Datei oder Verzeichnis nicht gefunden
+ fatal: Cannot lock the ref 'refs/heads/git-annex'.
+ git-annex: git [Param \"update-ref\",Param \"refs/heads/git-annex\",Param \"199fbe3e7ca1dbce99ffa04e440209eb93446374\"] failed
+
+
+and
+
+ git show 199fbe3e7ca1dbce99ffa04e440209eb93446374
+
+ commit 199fbe3e7ca1dbce99ffa04e440209eb93446374
+ Author: Stephan Schindel <sts@tp1.rub.de>
+ Date: Fri Jul 18 11:46:29 2014 +0200
+
+ branch created
+
+"""]]
diff --git a/doc/forum/Corrupted_repository__44___can_not_be_repaired/comment_2_c3aabffbe9568cf7acb4018e445f22a5._comment b/doc/forum/Corrupted_repository__44___can_not_be_repaired/comment_2_c3aabffbe9568cf7acb4018e445f22a5._comment
new file mode 100644
index 000000000..04e11a78c
--- /dev/null
+++ b/doc/forum/Corrupted_repository__44___can_not_be_repaired/comment_2_c3aabffbe9568cf7acb4018e445f22a5._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="sts"
+ ip="134.147.73.126"
+ subject="comment 2"
+ date="2014-07-18T11:17:49Z"
+ content="""
+Ok, I could fix this issue by doing a fresh clone of one of my remotes:
+
+ git clone path/to/remote
+ [move objects folder from broken repo .git/annex/objects to new clone]
+ git annex info (look for UUID or DESC)
+ git annex reinit \"DESC\"
+"""]]
diff --git a/doc/forum/Corrupted_repository__44___can_not_be_repaired/comment_3_baee46af6b2dbaf92be406ab22007a85._comment b/doc/forum/Corrupted_repository__44___can_not_be_repaired/comment_3_baee46af6b2dbaf92be406ab22007a85._comment
new file mode 100644
index 000000000..662e8a2b3
--- /dev/null
+++ b/doc/forum/Corrupted_repository__44___can_not_be_repaired/comment_3_baee46af6b2dbaf92be406ab22007a85._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 3"
+ date="2014-07-21T22:57:32Z"
+ content="""
+There was a bug in the repair code that could leave the repair incomplete like this; I've fixed it.
+
+> I recently moved a bunch of files to another location shortly after I renamed them. The assistant was running (repo: indirect mode) and I guess the assistant was confused
+
+No, I don't think that this was caused by the assistant somehow getting confused. Your git repository was missing objects that had been previously committed to git. The only way this can happen is if your computer lost data. Most commonly due to crashing or being powered off or the drive the repository is in being removed while git is in the middle of committing changes.
+"""]]
diff --git a/doc/forum/Creating_a_more_secure_shared_encryption.mdwn b/doc/forum/Creating_a_more_secure_shared_encryption.mdwn
new file mode 100644
index 000000000..5b2019f37
--- /dev/null
+++ b/doc/forum/Creating_a_more_secure_shared_encryption.mdwn
@@ -0,0 +1,7 @@
+I was wondering if there was a way to make shared encryption more secure. Here is my suggestion:
+The shared repository is encrypted using a key for the whole repository, just the way normal encryption would work.
+The server additionally keeps a copy of every user's public key.
+When a user is authorized, their repository is initialized and they receive the common key, encrypted by their public key.
+The only issue would be storage of the common key, which would have to be restricted to repository on a trusted machine.
+
+Not sure if this would be easy for you to implement, but I figured I'd submit a post detailing it, to see if maybe it was doable.
diff --git a/doc/forum/Crippled_FS:_remove_read_perms_from_dropped_files__63___.mdwn b/doc/forum/Crippled_FS:_remove_read_perms_from_dropped_files__63___.mdwn
new file mode 100644
index 000000000..18dc2fe66
--- /dev/null
+++ b/doc/forum/Crippled_FS:_remove_read_perms_from_dropped_files__63___.mdwn
@@ -0,0 +1,3 @@
+While experimenting with direct mode on Windows, I've got confused (and feeling momentary dread about apparent loss of data) many times when opening a file, and finding out that it in fact only contained the checksum; that is, was in the "dropped" state. As an **idea to prevent this confusion**, would it perhaps be possible to make the dropped files non-readable (permission denied) to the user somehow?
+
+(Background: I'm trying to build a version controlled development environment for a bunch of artists collaborating on large binaries, and making the process as fool-proof as possible is a priority.)
diff --git a/doc/forum/Crippled_FS:_remove_read_perms_from_dropped_files__63___/comment_1_53941b83ff173025934e002a26031d9b._comment b/doc/forum/Crippled_FS:_remove_read_perms_from_dropped_files__63___/comment_1_53941b83ff173025934e002a26031d9b._comment
new file mode 100644
index 000000000..243f839aa
--- /dev/null
+++ b/doc/forum/Crippled_FS:_remove_read_perms_from_dropped_files__63___/comment_1_53941b83ff173025934e002a26031d9b._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-09T19:43:07Z"
+ content="""
+I think that would be a great idea. If someone can tell me how to do that
+on Windows..
+
+Note that even if you opened such a file, and made a change, and then
+saved it, this would at the worst result in a new commit being made.
+Other repositories that have a copy of the file would not lose their
+copy, at least not immediately (`git annex dropunused` might eventually
+remove it). So, to recover from such a mistake, it suffices to run `git
+annex undo $file`.
+"""]]
diff --git a/doc/forum/Deduplication_in_direct_mode.mdwn b/doc/forum/Deduplication_in_direct_mode.mdwn
new file mode 100644
index 000000000..076d0ab5a
--- /dev/null
+++ b/doc/forum/Deduplication_in_direct_mode.mdwn
@@ -0,0 +1,18 @@
+Hi,
+
+I'm using git-annex across a number of (indirect) repositories, making heavy use of deduplication for organizing files according to various different aspects.
+
+Now I want to keep part of the files also on a VFAT device, which doesn't let me use indirect mode. In direct mode, however, git-annex "get" or "copy" places a separate copy of each file in the repository, whereas in indirect mode, it would just keep a single copy and maintain a number of (inexpensive) symbolic links. Since space on the VFAT drive is limited, I would like to just keep one, specific copy, not caring about the others. If I "drop" an unneeded copy of the file, it also gets replaced by the ASCII "link" in all other places that contained the same file. Therefore, I can either have multiple copies of the same data or none at all.
+
+Imagine you have a bunch of photos sorted into a directories in meant to make it easy to find them (same file name means same file content):
+
+./photo1.jpg
+./photo2.jpg
+./by-date/2014-10-27/photo1.jpg
+./by-date/2014-10-28/photo2.jpg
+./by-event/holiday-by-the-sea/photo1.jpg
+./by-event/her-birthday/photo2.jpg
+
+I want to keep a copy of ./photo?.jpg in the VFAT repository, but not the other (identical) files. How do I do that? Or is there really no way of doing this?
+
+Thanks.
diff --git a/doc/forum/Deduplication_in_direct_mode/comment_1_cb8eaa8c19f5bb9e145a5e4c8995a8ca._comment b/doc/forum/Deduplication_in_direct_mode/comment_1_cb8eaa8c19f5bb9e145a5e4c8995a8ca._comment
new file mode 100644
index 000000000..63367fcc1
--- /dev/null
+++ b/doc/forum/Deduplication_in_direct_mode/comment_1_cb8eaa8c19f5bb9e145a5e4c8995a8ca._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-31T20:15:58Z"
+ content="""
+There is really no way to do this.
+
+We could consider hard-linking the files, but then modifying one would
+modify the other, which is likely to be confusing. And, FAT doesn't support
+hard links anyway.
+
+I don't want to complicate git-annex's notion of whether an object is
+present or not with the possibility that it might be present for some
+files but not for others. For example, `git annex get` would then need
+to make a copy of content that was already locally present, while
+currently it knows that if the file is locally present, it has nothing to
+do.
+
+I think that the solution is to use either a better filesystem
+which can support the suprerior indirect mode, or to switch your
+repository to use the WORM backend which does not do deduplication.
+"""]]
diff --git a/doc/forum/Default_annex.largefiles.mdwn b/doc/forum/Default_annex.largefiles.mdwn
new file mode 100644
index 000000000..9da3220e6
--- /dev/null
+++ b/doc/forum/Default_annex.largefiles.mdwn
@@ -0,0 +1 @@
+I'm new to git annex, so if this has been discussed before, please forgive me. The documentation of annex.largefiles seems to say that all files are added to the annex by default. However, when I tried it, several of my smaller files were not added to the annex. I admit that I haven't tried changing this value yet. Has the default changed? I'm using the package from Arch AUR git-annex-bin. Possibly this version has a different default?
diff --git a/doc/forum/Default_annex.largefiles/comment_1_74a3ad2388e41f1ff17f64a00485a35a._comment b/doc/forum/Default_annex.largefiles/comment_1_74a3ad2388e41f1ff17f64a00485a35a._comment
new file mode 100644
index 000000000..d57e4f71d
--- /dev/null
+++ b/doc/forum/Default_annex.largefiles/comment_1_74a3ad2388e41f1ff17f64a00485a35a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-20T15:26:35Z"
+ content="""
+The default is to treat all files as "large", so any file it sees
+should be added, except for those that are `.gitignored`.
+"""]]
diff --git a/doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__.mdwn b/doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__.mdwn
new file mode 100644
index 000000000..47c327f1b
--- /dev/null
+++ b/doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__.mdwn
@@ -0,0 +1,14 @@
+Hi, I'm using the webapp and created a repository on my local computer. Then I created another remote repository (encrypted remote with gcrypt), this remote repository is selected as type "full backup".
+
+I've added some files to the local repository, then changed some of them and watched the sync happen. Then I deleted some files, and these also get synced to the remote.
+
+Now, how can I recover those files from the foreign repo, using the webapp or the command line? I could not find any solution.
+
+I tried:
+git log --diff-filter=D --summary
+and then
+git checkout 488408bfcd58eced685d9e3ca5daf55250850f5d -- .
+to recover the file listed in this remote but got the following response:
+fatal: This operation must be run in a work tree
+
+What do I miss and how does the "Restore" part work when using "full backup" remote repository?
diff --git a/doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_1_67ac7e8b53a4374baf640d32dac79030._comment b/doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_1_67ac7e8b53a4374baf640d32dac79030._comment
new file mode 100644
index 000000000..21adc4ef9
--- /dev/null
+++ b/doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_1_67ac7e8b53a4374baf640d32dac79030._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.144"
+ subject="comment 1"
+ date="2014-09-25T15:52:04Z"
+ content="""
+Yes, you need to use git to either revert the repository to a previous version that had the file, or perhaps just revert the commit where the file was deleted. Either way, this requires letting git modify files in the repository, which is prevented by direct mode. So, if you can `git annex indirect` to switch to indirect mode, your git commands will work then.
+"""]]
diff --git a/doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_2_eb6df2bfcb3892ae22050a8c5f67ee90._comment b/doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_2_eb6df2bfcb3892ae22050a8c5f67ee90._comment
new file mode 100644
index 000000000..5963d4b74
--- /dev/null
+++ b/doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_2_eb6df2bfcb3892ae22050a8c5f67ee90._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmK0703vNSIQsP1mGf-4MAPnsBZiSc6yVo"
+ nickname="Emre"
+ subject="comment 2"
+ date="2014-09-25T19:25:06Z"
+ content="""
+Thanks Joeyh, of course i guess checking stuff in git would then lose my timestamps as in the previous post. I recommend, as a feature request, to make file recovery a bit easier if possible. I'm not a git expert and definitely wont use command line stuff for doing this on the long run, unless some more intuitive commands like \"git annex list-old-versions\" or \"git annex show-deleted\" and then \"git annex restore \"filename\" version_no etc.
+"""]]
diff --git a/doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_3_15f36487383a631f16e041e2885c44ec._comment b/doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_3_15f36487383a631f16e041e2885c44ec._comment
new file mode 100644
index 000000000..99dd7e81b
--- /dev/null
+++ b/doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_3_15f36487383a631f16e041e2885c44ec._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 3"
+ date="2014-10-02T15:40:40Z"
+ content="""
+Using git does not affect the timestamps or other metadata of files stored by git-annex, which git knows nothing about. It will perhaps change the timestamps of the symlinks that git changes. It you really wanted to avoid that, you could `git clone` the repository and do all the git commands in the clone of the repository, without touching the original repo.
+
+Whether commands like `git checkout` and `git revert` are intuitive depends on how intuitive you find git, I suppose. It sure seems more intuitive to me to reuse git commands that work just fine, rather than adding a whole new set of commands.
+"""]]
diff --git a/doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_4_9293831aff5b6cef490f65d03638d34d._comment b/doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_4_9293831aff5b6cef490f65d03638d34d._comment
new file mode 100644
index 000000000..176c5d915
--- /dev/null
+++ b/doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_4_9293831aff5b6cef490f65d03638d34d._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmK0703vNSIQsP1mGf-4MAPnsBZiSc6yVo"
+ nickname="Emre"
+ subject="comment 4"
+ date="2014-10-02T21:57:02Z"
+ content="""
+If git-annex target user community are the ones with some level of git know-how, then you may be right. But I'm not one of them. The only time I use git is to clone a repo from the internet when I want to compile latest source code. Nothing more. Reverting etc are alien to me.
+
+Besides, what happens if there are multiple files in a commit but you want to revert only one file? This may be a stupid question if git is able to filter files when reverting, but accept my apologies if so, since I do not know git.
+
+I simply want to use git-annex to sync files, keeping some versions of the files in case needed.
+"""]]
diff --git a/doc/forum/Disadvantages_of_WORM:_long_filename__63__.mdwn b/doc/forum/Disadvantages_of_WORM:_long_filename__63__.mdwn
new file mode 100644
index 000000000..bff1a3ffe
--- /dev/null
+++ b/doc/forum/Disadvantages_of_WORM:_long_filename__63__.mdwn
@@ -0,0 +1,13 @@
+Hello,
+
+first, I felt very comfortable with git-annex, but now I run into problems more often, and I think they are related to the WORM backend. I use this backend for my photos, since they are big (25MB) and never modified (camera raws, I don't touch them). So I edited my `.gitattributes` to use `WORM`.
+
+The problems usually are as follows: I perform an operation, and git (I think it is git which has the problems), and the process exits with exit code 1 and tells me "cannot open binary file: File name too long". The same happens from time to time when I have filenames containing special characters such as ', which can happen when I tag my music collection. I suspect the WORM backend to cause the problems, since the file names in `.git/annex` are indeed very long and ugly beccause of all the escaping done here.
+
+I am sorry that I cannot give a recipe how to reproduce this behaviour, and sometimes it helps to enter a subdirectory and perform the operation from there, for example:
+
+`$ git annex copy --to dest Pictures` fails, but `$ cd Pictures/dir_with_problematic_file; git annex copy --to dest .` works.
+
+Is there some advice or did anyone here observe similar behaviour?
+
+Best regards, Philipp
diff --git a/doc/forum/Disadvantages_of_WORM:_long_filename__63__/comment_1_cc5502b55fb71c8fdb235ea9d17216ff._comment b/doc/forum/Disadvantages_of_WORM:_long_filename__63__/comment_1_cc5502b55fb71c8fdb235ea9d17216ff._comment
new file mode 100644
index 000000000..9cd635eba
--- /dev/null
+++ b/doc/forum/Disadvantages_of_WORM:_long_filename__63__/comment_1_cc5502b55fb71c8fdb235ea9d17216ff._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-01-05T16:47:16Z"
+ content="""
+Please show `ls -l` output listing one or more of the files with the
+problem. Also I'd need to know the filesystem your repository is using
+in order to reproduce the problem.
+
+Note that you can use `git annex migrate` to switch away from the WORM
+backend..
+"""]]
diff --git a/doc/forum/Disadvantages_of_WORM:_long_filename__63__/comment_2_d04b7adcc17a305fb1d7f1c1a3641be1._comment b/doc/forum/Disadvantages_of_WORM:_long_filename__63__/comment_2_d04b7adcc17a305fb1d7f1c1a3641be1._comment
new file mode 100644
index 000000000..a13631845
--- /dev/null
+++ b/doc/forum/Disadvantages_of_WORM:_long_filename__63__/comment_2_d04b7adcc17a305fb1d7f1c1a3641be1._comment
@@ -0,0 +1,24 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2015-01-05T17:01:12Z"
+ content="""
+I refreshed my memory and did some testing, and the WORM backend
+deals with extremely large filenames by detecting the filename length
+limitations of the filesystem where the repository is located, and if a
+WORM key is longer than the maximum filename length, it will truncate it
+down to fit.
+
+This avoids any problems in my testing, as long as the WORM keys are being
+generated and used all on filesystems with similar filename length limits.
+If you are using a version of git-annex older than 4.20131024, it won't
+do that, and you should upgrade.
+
+If you are using a mixture of filesystems, eg EXT4 and VFAT, this can still
+result in WORM key names generated on EXT4 being too long to fit on the
+VFAT filesystem. In this case, I would recommend not using WORM.
+
+Incidentially, that version also made many problimatic characters
+not be included in WORM key names, so they're more portable to eg, FAT
+filesystems.
+"""]]
diff --git a/doc/forum/Disk_usage_during___96__import__96__.mdwn b/doc/forum/Disk_usage_during___96__import__96__.mdwn
new file mode 100644
index 000000000..9ece26e33
--- /dev/null
+++ b/doc/forum/Disk_usage_during___96__import__96__.mdwn
@@ -0,0 +1,5 @@
+Does `git-annex import` move data to the working directory before moving it to `.git/annex/objects`?
+
+The reason I'm asking is that I use the split SSD/HDD setup with some annexes, i.e., everything resides on an SSD except for the git-annex objects directory.
+
+If git-annex wrote imported data to the working directoy (on the SSD) first and moved it to the objects directory (on the HDD) later, it would cause lots of unnecessary writes to the SSD.
diff --git a/doc/forum/Disk_usage_during___96__import__96__/comment_1_3ed4d9a36cacb9be96860cfaae8cee90._comment b/doc/forum/Disk_usage_during___96__import__96__/comment_1_3ed4d9a36cacb9be96860cfaae8cee90._comment
new file mode 100644
index 000000000..33638e076
--- /dev/null
+++ b/doc/forum/Disk_usage_during___96__import__96__/comment_1_3ed4d9a36cacb9be96860cfaae8cee90._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-01-05T20:08:52Z"
+ content="""
+Yes, it does; `git annex import` is implemented quite similarly to
+`copy /file .; git annex add $file'
+"""]]
diff --git a/doc/forum/Distributing_data_to_a_set_of_drives.mdwn b/doc/forum/Distributing_data_to_a_set_of_drives.mdwn
new file mode 100644
index 000000000..406379715
--- /dev/null
+++ b/doc/forum/Distributing_data_to_a_set_of_drives.mdwn
@@ -0,0 +1 @@
+Here is my situation, Say I have a repo that is 3 TBs (lets call this repo A has full copy of everything.) and I have 3 other drives all 1 TB each lets call them B C D, then I have partial checkouts on my laptops D E. What I would like to do is, have two copies of all files in A and BCD I would like to threat BCD as a group acting like a single repo so A distributes files evenly to drives in group BCD. I also want copies in D and E to not count towards num of files. As for the latter even though I set D and E as untrusted annex still counts copies on those repos If a get a file in D assistant drops a copy from one of the trusted repos A or BCD I have to move it back instead of just dropping it. Also How can I or is it possible to set BCD to act as a group so A distributes files among drives currently I can do this using find/get but it turns it into a math problem every time a add a file to A I have to manually check which disk has most space navigate to it check files with less copies then 2 and get them.
diff --git a/doc/forum/Distributing_data_to_a_set_of_drives/comment_1_f1fa72879f4e1db13bf59dea33c91624._comment b/doc/forum/Distributing_data_to_a_set_of_drives/comment_1_f1fa72879f4e1db13bf59dea33c91624._comment
new file mode 100644
index 000000000..f0c0a1c2b
--- /dev/null
+++ b/doc/forum/Distributing_data_to_a_set_of_drives/comment_1_f1fa72879f4e1db13bf59dea33c91624._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmNu4V5fvpLlBhaCUfXXOB0MI5NXwh8SkU"
+ nickname="Adam"
+ subject="comment 1"
+ date="2014-05-08T16:56:34Z"
+ content="""
+I recommend rewriting your comment. Use paragraphs and be more clear and specific.
+"""]]
diff --git a/doc/forum/Distributing_data_to_a_set_of_drives/comment_2_e13b4e5c1e6f1f503f93d521b504d5c1._comment b/doc/forum/Distributing_data_to_a_set_of_drives/comment_2_e13b4e5c1e6f1f503f93d521b504d5c1._comment
new file mode 100644
index 000000000..5843ab177
--- /dev/null
+++ b/doc/forum/Distributing_data_to_a_set_of_drives/comment_2_e13b4e5c1e6f1f503f93d521b504d5c1._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="216.145.95.162"
+ subject="comment 2"
+ date="2014-05-17T17:00:19Z"
+ content="""
+git-annex doesn't allow bonding repositories like that, but it does have repository groups which can accomplish the same thing.
+
+For example, if you put B C and D into the archive group, and set the [[preferred_content]] expression to \"standard\", then each repository will only want files that have not yet reached some other archive repository.
+
+Or, you can make up your own group name, like \"BCD\" and set the preferred content of each repository to something like \"not (copies=BCD:2)\" -- and now it will try to have 2 copies of each file on one of the drives.
+
+Once it's configured, using either the git-annex assistant, or `git annex sync --content` will copy files around according to the configuration.
+
+This will tend to fill up the first drive, or the first 2 drives, and only use subsequent drives if files don't fit on the first drive. You can use [[cost]] settings to control which drives files are put on.
+"""]]
diff --git a/doc/forum/Duplicate_entries_in_location_tracking_logs.mdwn b/doc/forum/Duplicate_entries_in_location_tracking_logs.mdwn
new file mode 100644
index 000000000..f5f135444
--- /dev/null
+++ b/doc/forum/Duplicate_entries_in_location_tracking_logs.mdwn
@@ -0,0 +1,25 @@
+I’ve noticed something odd when inspecting the history of the
+git-annex branch today. Apparently, the branch had some merge
+conflicts during sync that involved two alternative location tracking
+entries that both were for one and the same remote. Both entries only
+differed in their timestamps, and the union merge kept both, so that I
+now have .log files in the annex branch that contain duplicate parts
+like this.
+
+<pre>
+1404838274.151066s 1 a2401cfd-1f58-4441-a2b3-d9bef06220ad
+1406978406.24838s 1 a2401cfd-1f58-4441-a2b3-d9bef06220ad
+</pre>
+
+The UUID here is my local repository.
+
+The duplication also occurred in the uuid.log:
+
+<pre>
+4316c3dc-5b6d-46eb-b780-948c717b7be5 server timestamp=1404839228.113473s
+4316c3dc-5b6d-46eb-b780-948c717b7be5 server timestamp=1404847241.863051s
+</pre>
+
+Is this something to be concerned about? The situation somehow arose
+in relation to unannexing a bunch of files and rebasing the master
+branch.
diff --git a/doc/forum/Duplicate_entries_in_location_tracking_logs/comment_1_3afb76397519b8ca8b55958a344f1871._comment b/doc/forum/Duplicate_entries_in_location_tracking_logs/comment_1_3afb76397519b8ca8b55958a344f1871._comment
new file mode 100644
index 000000000..cc159bd30
--- /dev/null
+++ b/doc/forum/Duplicate_entries_in_location_tracking_logs/comment_1_3afb76397519b8ca8b55958a344f1871._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.112"
+ subject="comment 1"
+ date="2014-08-03T18:59:58Z"
+ content="""
+This is perfectly normal. The next time that file in the git-annex branch is updated for any reason, git-annex will automatically compress the two entries down to a single one. In the meantime, it has no difficulty working out which entry is more recent. This is basically why it's called a log file. ;)
+
+It would be possible to make the union merge code compress as it merges, but this would slow down union merging some, and make it a more conceptually complicated operation. Also, whether the old entry is present in the file or not, git will be storing a copy of that old entry, so it doesn't actually tend to make the git repository any larger. For more on this, see <https://joeyh.name/blog/entry/databranches/>
+"""]]
diff --git a/doc/forum/Duplicate_entries_in_location_tracking_logs/comment_2_6f327444772ee1e660a12e7442162df5._comment b/doc/forum/Duplicate_entries_in_location_tracking_logs/comment_2_6f327444772ee1e660a12e7442162df5._comment
new file mode 100644
index 000000000..6cce29757
--- /dev/null
+++ b/doc/forum/Duplicate_entries_in_location_tracking_logs/comment_2_6f327444772ee1e660a12e7442162df5._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="134.147.14.84"
+ subject="comment 2"
+ date="2014-08-04T08:05:37Z"
+ content="""
+Thanks for the info, Joey! As long as the git tracks the history anyway, this should not increase space consumption that much.
+
+Perhaps it would be useful to have something like «git annex gc» that can clean up these things manually in some situations, e. g. to compact everything before doing a «git annex forget».
+"""]]
diff --git a/doc/forum/Encrypted_Content_Remote_Daemon_.mdwn b/doc/forum/Encrypted_Content_Remote_Daemon_.mdwn
new file mode 100644
index 000000000..614d27688
--- /dev/null
+++ b/doc/forum/Encrypted_Content_Remote_Daemon_.mdwn
@@ -0,0 +1 @@
+I am currently using rsync.net to keep my notes in sync, both git repo and the content (gpg encrypted) is stored there. Instead of creating two other repos on a server that I have which has git-annex installed where I can actually use remote daemon. Is it possible to create a repo containing both the git repo and the content encrypted from the command line?
diff --git a/doc/forum/Encrypted_Content_Remote_Daemon_/comment_1_96f63e509e23c081c48302274e21db78._comment b/doc/forum/Encrypted_Content_Remote_Daemon_/comment_1_96f63e509e23c081c48302274e21db78._comment
new file mode 100644
index 000000000..eb97c2680
--- /dev/null
+++ b/doc/forum/Encrypted_Content_Remote_Daemon_/comment_1_96f63e509e23c081c48302274e21db78._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.114"
+ subject="comment 1"
+ date="2014-04-27T00:31:18Z"
+ content="""
+Why not go all the way and encrypt the git repository stored on the remote server too? [[special_remotes/gcrypt]]
+
+When you have git-annex-shell installed on the remote server, the remote daemon should work for gcrypt repositories as well as normal non-encrypted git repositories.
+"""]]
diff --git a/doc/forum/Encrypted_Content_Remote_Daemon_/comment_2_acd0ffdc3f5079265858073c2af81557._comment b/doc/forum/Encrypted_Content_Remote_Daemon_/comment_2_acd0ffdc3f5079265858073c2af81557._comment
new file mode 100644
index 000000000..a699ad640
--- /dev/null
+++ b/doc/forum/Encrypted_Content_Remote_Daemon_/comment_2_acd0ffdc3f5079265858073c2af81557._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://me.yahoo.com/a/FHnTlSBo1eCGJRwueeKeB6.RCaPbGMPr5jxx8A--#ce0d8"
+ nickname="Hamza"
+ subject="comment 2"
+ date="2014-04-28T09:14:12Z"
+ content="""
+I would love to use gcrypt and I tried it but the problem is at every sync it will ask for my pass phrase even though the key used to encrypt the repo is pass phrase less it goes through the keys in my keychain and asks me to unlock all my keys one by one.
+"""]]
diff --git a/doc/forum/Equivalent_to_git_bundle__63__.mdwn b/doc/forum/Equivalent_to_git_bundle__63__.mdwn
new file mode 100644
index 000000000..d16b91cad
--- /dev/null
+++ b/doc/forum/Equivalent_to_git_bundle__63__.mdwn
@@ -0,0 +1,10 @@
+Hi,
+
+git provides a neat way to create archives of git repos (or parts thereof): git bundle.
+
+git bundle obviously works with git annex as well, BUT those bundles don't include the actual content (in other words, only the symlinks are bundled up).
+
+Is there a way to get the git bundle functionality with git annex?
+
+THX & Cheers,
+Toby.
diff --git a/doc/forum/Equivalent_to_git_bundle__63__/comment_1_e42936a9bc36fbee69f48e32df303dee._comment b/doc/forum/Equivalent_to_git_bundle__63__/comment_1_e42936a9bc36fbee69f48e32df303dee._comment
new file mode 100644
index 000000000..af3cf569b
--- /dev/null
+++ b/doc/forum/Equivalent_to_git_bundle__63__/comment_1_e42936a9bc36fbee69f48e32df303dee._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="Bram"
+ ip="81.20.68.186"
+ subject="tar"
+ date="2014-10-03T13:44:50Z"
+ content="""
+I would say you're just looking for 'tar cf' or 'tar czf' of the root directory of your repository.
+Unless the (delta) compression that 'git bundle' would perform is a must-have...
+"""]]
diff --git a/doc/forum/Equivalent_to_git_bundle__63__/comment_2_2b8b5c237d8572fdd27202f3502bea96._comment b/doc/forum/Equivalent_to_git_bundle__63__/comment_2_2b8b5c237d8572fdd27202f3502bea96._comment
new file mode 100644
index 000000000..167353df3
--- /dev/null
+++ b/doc/forum/Equivalent_to_git_bundle__63__/comment_2_2b8b5c237d8572fdd27202f3502bea96._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="tdussa"
+ ip="217.84.78.25"
+ subject="tar -- not really"
+ date="2014-10-03T20:40:45Z"
+ content="""
+Hi,
+
+THX for your suggestion. Unfortunately, git bundle is able to carve out particular slices of a repo, which a simple tar obviously cannot do. This functionality is much desired.
+
+Cheers,
+Toby.
+"""]]
diff --git a/doc/forum/Error_from_git-annex-shell_on_creation_of_gcrypt_special_remote.mdwn b/doc/forum/Error_from_git-annex-shell_on_creation_of_gcrypt_special_remote.mdwn
new file mode 100644
index 000000000..e38e57c15
--- /dev/null
+++ b/doc/forum/Error_from_git-annex-shell_on_creation_of_gcrypt_special_remote.mdwn
@@ -0,0 +1,28 @@
+I just created a gcrypt special remote and got an error from (I think) `git-annex-shell`, though my local git-annex didn't complain and seemed to think the creation went okay.
+
+ annex $ ga initremote ma type=gcrypt encryption=hybrid gitrepo=ssh://ma/meta/s/spw/local/annex keyid=3B6D411B
+ (merging synced/git-annex into git-annex...)
+ (Recording state in git...)
+ initremote ma (encryption setup) (hybrid cipher with gpg key 0F56D0553B6D411B) gcrypt: Development version -- Repository format MAY CHANGE
+ gcrypt: Repository not found: ssh://ma/meta/s/spw/local/annex
+ gcrypt: Development version -- Repository format MAY CHANGE
+ gcrypt: Repository not found: ssh://ma/meta/s/spw/local/annex
+ gcrypt: Setting up new repository
+ gcrypt: Remote ID is :id:icUy+qU392R5L5H7g8Yk
+ Counting objects: 111456, done.
+ Compressing objects: 100% (74045/74045), done.
+ Total 111456 (delta 59312), reused 85857 (delta 33717)
+ gcrypt: Encrypting to: -r 0F56D0553B6D411B
+ gcrypt: Requesting manifest signature
+ To gcrypt::ssh://ma/meta/s/spw/local/annex
+ * [new branch] git-annex -> git-annex
+ fatal: What do you think I am? A shell?
+ git-annex-shell: git-shell failed
+ ok
+ (Recording state in git...)
+
+Further `git annex sync ma` runs go off without a hitch and the master branch gets pushed a synced/master, though it didn't get pushed on this initial creation as can be seen from the above output.
+
+Is it a bug that my local git-annex said "ok" when there was an error, or is this just a case of my local git-annex falling back to rsync instead of git-annex-shell because I didn't set up my $PATH properly on the remote? Should I be worried that my gcrypt repo wasn't set up correctly and thus can't be trusted to hold my annexed data and metadata? Thanks.
+
+Local git-annex: 5.20141125. Remote git-annex (standalone build): 5.20150113-gcf247cf.
diff --git a/doc/forum/Error_from_git-annex-shell_on_creation_of_gcrypt_special_remote/comment_1_2a69ce8607f97aabdf3cc402c1091d7a._comment b/doc/forum/Error_from_git-annex-shell_on_creation_of_gcrypt_special_remote/comment_1_2a69ce8607f97aabdf3cc402c1091d7a._comment
new file mode 100644
index 000000000..f94690b35
--- /dev/null
+++ b/doc/forum/Error_from_git-annex-shell_on_creation_of_gcrypt_special_remote/comment_1_2a69ce8607f97aabdf3cc402c1091d7a._comment
@@ -0,0 +1,30 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-04T18:09:49Z"
+ content="""
+It seems that some versions of git-shell will give this unhelpful
+error message. Newer versions instead say
+"fatal: Interactive git shell is not enabled."
+
+The initial push of the git-annex branch is not what failed.
+It seems that the attempt to run "git-annex-shell gcryptsetup"
+was what failed.
+
+My guess is that the remote server has an older version of git-annex
+installed in /usr/bin, which doesn't understand the gcryptsetup
+command, and that your newer installation of the standalone
+version is not getting run when it sshes in. (A common problem; `~/.bashrc`
+and `~/.bash_profile` are both ignored.) The old version of
+git-annex-shell then passed the "gcryptsetup" command on to git-shell,
+which I guess rejected it like that. (Not sure why.)
+
+git-annex seems to have successfully fallen back to using rsync to
+configure the ssh://ma/meta/s/spw/local/annex repository's core.gcrypt-id.
+(You might want to check that was set correctly.)
+
+Also, since it detected an old/not-working git-annex-shell on the remote,
+it will have set git.remote.ma.gcrypt to "true", rather than
+"shell", and this will cause git-annex to bypass using git-annex-shell
+and instead use direct rsync.
+"""]]
diff --git a/doc/forum/Error_from_git-annex-shell_on_creation_of_gcrypt_special_remote/comment_2_a112f0bc1a30fa41504e3f52f679053b._comment b/doc/forum/Error_from_git-annex-shell_on_creation_of_gcrypt_special_remote/comment_2_a112f0bc1a30fa41504e3f52f679053b._comment
new file mode 100644
index 000000000..7679ef0cd
--- /dev/null
+++ b/doc/forum/Error_from_git-annex-shell_on_creation_of_gcrypt_special_remote/comment_2_a112f0bc1a30fa41504e3f52f679053b._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 2"
+ date="2015-02-04T21:33:41Z"
+ content="""
+The `core.gcrypt-id` on the remote and local is correctly set (to the same thing) and `git.remote.ma.annex-gcrypt` (I assume you meant this and not `git.remote.ma.gcrypt`) on my local machine is indeed set to `true`. And the remote seems to work for all purposes I've tried to use it for. So I guess I'm okay.
+
+There is an older version in `/usr/bin` as you suggest: 3.20120523. I don't know why I didn't notice this myself before I installed the standalone build.
+
+Thank you for taking the time to reply.
+"""]]
diff --git a/doc/forum/Fast_cloning_a_repo_initially.mdwn b/doc/forum/Fast_cloning_a_repo_initially.mdwn
new file mode 100644
index 000000000..52a275786
--- /dev/null
+++ b/doc/forum/Fast_cloning_a_repo_initially.mdwn
@@ -0,0 +1,3 @@
+Is there any fast way to rsync a direct-mode (assistant) git/annex directory from one machine to another?
+
+Scenario: I was already using unison to synchronize 40GB between my desktop and laptop. I've added git annex to my desktop, but is there a way to bootstrap on my laptop without needing to re-transfer all the files? (I don't have a .git on my laptop yet but all the files are there already.)
diff --git a/doc/forum/Fast_cloning_a_repo_initially/comment_1_0db0caafe30dd1b6f15fb1679dec8f9f._comment b/doc/forum/Fast_cloning_a_repo_initially/comment_1_0db0caafe30dd1b6f15fb1679dec8f9f._comment
new file mode 100644
index 000000000..5d4aa3509
--- /dev/null
+++ b/doc/forum/Fast_cloning_a_repo_initially/comment_1_0db0caafe30dd1b6f15fb1679dec8f9f._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="24.159.78.125"
+ subject="comment 1"
+ date="2014-05-23T15:30:23Z"
+ content="""
+I don't recommend moving direct mode repositories between filesystems, because git-annex relies on the inode as one way to detect if files in a direct mode repo have changed. It will notice that all the inode numbers have changed, and fall back to a mode where it only uses mtime.
+
+Anyway, your situation is better handled by initializing a repository on the desktop, and a separate one on the laptop. Then add remotes tying the repos together, and git-annex sync will just do the right thing, including not transferring files that have already been synced to both places.
+"""]]
diff --git a/doc/forum/Fast_cloning_a_repo_initially/comment_2_e17abc209c2b3ba20158be76801ce04a._comment b/doc/forum/Fast_cloning_a_repo_initially/comment_2_e17abc209c2b3ba20158be76801ce04a._comment
new file mode 100644
index 000000000..0a07264cd
--- /dev/null
+++ b/doc/forum/Fast_cloning_a_repo_initially/comment_2_e17abc209c2b3ba20158be76801ce04a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="jamieson"
+ ip="71.11.161.246"
+ subject="Thanks!"
+ date="2014-05-23T16:11:35Z"
+ content="""
+I'll do it that way, thanks!!
+"""]]
diff --git a/doc/forum/Folders_for___34__actions__34___-_now_that_views_have_disrupted_the_file_structure__63__.mdwn b/doc/forum/Folders_for___34__actions__34___-_now_that_views_have_disrupted_the_file_structure__63__.mdwn
new file mode 100644
index 000000000..61a8c7905
--- /dev/null
+++ b/doc/forum/Folders_for___34__actions__34___-_now_that_views_have_disrupted_the_file_structure__63__.mdwn
@@ -0,0 +1,20 @@
+The _views_ functionality has made the file structure dynamic.
+
+With this in mind would it be possible/suitable to make drag and drop targets for `git-annex get` and `git-annex drop` commands?
+This would make available git annex most interesting feature to assistant users.
+
+I'm not entirely sure it's a good idea but it avoids file manager scripts and should be discoverable and easy to use.
+
+I see two possibilities:
+
+1. A folder in the annex root that contains a mirror of the tree but with only the unavailable files. Unavaliable files would then not be displayed in the live tree. Perhaps the folder can be called `remote`? Files can then be dragged from this tree to the live tree to trigger transfer of files. Any error/info gets displayed in the assistant
+2. Flat droptargets in the annex root for `drop` and `get` commands.
+
+
+Number one above makes discovering available files a bit cumbersome as you have to navigate down a parallell tree. It does make the available/remote distinction clearer which may be good for assistant users.
+
+The mechanism could be extended to include a folder or droptarget for each remote.
+
+The creation of droptargets/action folders could be triggered by a big visible button in the assistant interface **Manage Files**
+
+Is it messy?
diff --git a/doc/forum/Generating_a_Temp_View_of_Available_Files.mdwn b/doc/forum/Generating_a_Temp_View_of_Available_Files.mdwn
new file mode 100644
index 000000000..bdb8ece69
--- /dev/null
+++ b/doc/forum/Generating_a_Temp_View_of_Available_Files.mdwn
@@ -0,0 +1 @@
+Is it possible to generate a view of files currently available on the annex? My use case is that I have pretty large repo (couple of TBs) and I have partial checkouts on multiple machines instead of seeing 100s of broken symlinks I would like to just filter filter files that are present on the machine?
diff --git a/doc/forum/Getting_the_status_of_a_remotely_changed_annex_file.mdwn b/doc/forum/Getting_the_status_of_a_remotely_changed_annex_file.mdwn
new file mode 100644
index 000000000..9a2c80799
--- /dev/null
+++ b/doc/forum/Getting_the_status_of_a_remotely_changed_annex_file.mdwn
@@ -0,0 +1,75 @@
+Hello,
+
+I am trying to wrap my head around annex still. I'm creating a source local git repo, editing an annex file, and then syncing in a second repo. In that second repo I'm trying to figure out how I can get a status notifying me that a file is out of date.
+
+If I use 'annex sync --content' the files are all up to date, as expected, but what I kind of expected is 'annex status' to say something like 'files out of date, blah blah'. I am spelling out my example below.
+
+Annex version is 5.20140613
+
+
+## I create a source and target repo, and I add a git managed file and an annex managed file
+
+ $ mkdir source target
+ $ cd source
+ $ git init
+ $ git annex init
+ $ cat > gitfile
+ hi this is my git file
+ $ cat > annexfile
+ hi this is my annex file
+ $ git add gitfile
+ $ git annex add annexfile
+ $ git commit -m 'init commit'
+ $ cd ../target
+ $ git clone ../source/ .
+ $ ls -al
+ total 16
+ drwxr-xr-x 170 Jul 15 15:55 .
+ drwxr-xr-x 136 Jul 15 15:54 ..
+ drwxr-xr-x 442 Jul 15 15:55 .git
+ lrwxr-xr-x 180 Jul 15 15:55 annexfile -> .git/annex/objects/Qp/F0/SHA256E-s25--045cf30cb201c6723cb6fad9ca539f639de7f242b87775b876ef9ccb1f577ccf/SHA256E-s25--045cf30cb201c6723cb6fad9ca539f639de7f242b87775b876ef9ccb1f577ccf
+ -rw-r--r-- 23 Jul 15 15:55 gitfile
+ $ git annex sync
+ ...
+ To [base path]/target/../source/
+ * [new branch] git-annex -> synced/git-annex
+ * [new branch] master -> synced/master
+ ok
+ $ cat gitfile
+ hi this is my git file
+ $ cat annexfile
+ cat: annexfile: No such file or directory
+ $ git annex sync --content
+ $ cat annexfile
+ hi this is my annex file
+
+## So far so good. Now I'm going to edit my annexed file in source repo and see if I can find out that the file was edited in the target
+
+ $ cd ..
+ $ cd source
+ $ git annex edit annexfile
+ $ cat > annexfile
+ wow I changed my annex file
+ $ git annex add annexfile
+ $ git commit -m 'changed an annex file'
+ $ cd ..
+ $ cd target
+ $ git pull
+ $ cat annexfile
+ cat: annexfile: No such file or directory
+ $ git annex sync
+ $ ls
+ annexfile gitfile
+ $ cat annexfile
+ cat: annexfile: No such file or directory
+ $ git annex status
+ [no output]
+
+## Here is where I'd expect something saying 'annexfile is out of date', etc.
+## I can infer it because the link is missing, but I'm sure there's a more logical way.
+
+ $ git annex sync --content
+ $ cat annexfile
+ wow I changed my annex file
+
+## After I synced content all is well.
diff --git a/doc/forum/Getting_the_status_of_a_remotely_changed_annex_file/comment_1_e323c21d27bb0946993ba1438429c457._comment b/doc/forum/Getting_the_status_of_a_remotely_changed_annex_file/comment_1_e323c21d27bb0946993ba1438429c457._comment
new file mode 100644
index 000000000..78b0a9c1e
--- /dev/null
+++ b/doc/forum/Getting_the_status_of_a_remotely_changed_annex_file/comment_1_e323c21d27bb0946993ba1438429c457._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-16T18:18:00Z"
+ content="""
+As soon as git-annex syncs with a remote that has made changes to the repository, any new files or files that have been modified, and the content is not yet available in the local repository will be broken symlinks. You can generally easily see a broken symlink by running `ls`, at least with a good `ls` on eg Linux that supports colorization. (Look for the red filenames.) Many file managers also represent broken symlinks in a visual way.
+
+Or, you can run a command like `git annex whereis $file` and see if it includes \"here\" in the list of locations.
+
+Or, you can run `git annex find --not --in here` to find all files whose current content is not present.
+
+The reason `git annex status` doesn't say is that it's focused on showing you which files in the local repository have not yet been committed to git. The `git annex list` command has a similar one line per file output, but puts a \"_\" in the first column (under \"here\") if the file is not locally present.
+"""]]
diff --git a/doc/forum/Git-Annex_Android_sync_files_are_missing_on_Linuxx.mdwn b/doc/forum/Git-Annex_Android_sync_files_are_missing_on_Linuxx.mdwn
new file mode 100644
index 000000000..4f144d51e
--- /dev/null
+++ b/doc/forum/Git-Annex_Android_sync_files_are_missing_on_Linuxx.mdwn
@@ -0,0 +1,4 @@
+Hi
+I created shares between Linux and Android(using nightly 4.4). I used Assistant on both. It seems like the files from Android to Linux are all missing, at least the symlinks are broken maybe. However files from Linux to Android are fine.
+
+thanks
diff --git a/doc/forum/Git-Annex_Android_sync_files_are_missing_on_Linuxx/comment_1_72d7811990e78fba0b7fc2e1c7ee515f._comment b/doc/forum/Git-Annex_Android_sync_files_are_missing_on_Linuxx/comment_1_72d7811990e78fba0b7fc2e1c7ee515f._comment
new file mode 100644
index 000000000..9a0f2880f
--- /dev/null
+++ b/doc/forum/Git-Annex_Android_sync_files_are_missing_on_Linuxx/comment_1_72d7811990e78fba0b7fc2e1c7ee515f._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="htun"
+ ip="5.104.224.15"
+ subject="comment 1"
+ date="2014-10-17T04:57:08Z"
+ content="""
+
+
+Here is what the file is looking for symlink
+.git/annex/objects/MF/kG/SHA256E-s1589297--0ec542aabec66b1877699ef27549fe355339224680d7923078d03f375028fca1.apk/SHA256E-s1589297--0ec542aabec66b1877699ef27549fe355339224680d7923078d03f375028fca1.apk
+
+
+and here is what is in the objects SHA256E-s1589297--0ec542aabec66b1877699ef27549fe355339224680d7923078d03f375028fca1.apk/SHA256E-s1589297--0ec542aabec66b1877699ef27549fe355339224680d7923078d03f375028fca1.apk.map
+
+"""]]
diff --git a/doc/forum/Git-Annex_with_Asustor_NAS.mdwn b/doc/forum/Git-Annex_with_Asustor_NAS.mdwn
new file mode 100644
index 000000000..8d29ce023
--- /dev/null
+++ b/doc/forum/Git-Annex_with_Asustor_NAS.mdwn
@@ -0,0 +1,4 @@
+I'd like to use git-annex with my Asustor 302t NAS. It should be treated like a "simple" removable drive. I don't really know how to do this however, when scanning for "removable drives", it can't be found, when I try connecting via SSH, I receive an Error: Permission denied (publickey,password). As there is no way to insert my password before connecting.
+
+How do I setup a repository on my NAS to be synced with my laptop?
+I am using MAC OS X and the git-annex web interface currently.
diff --git a/doc/forum/Git-Annex_with_Asustor_NAS/comment_1_44445200e5b716caeec225972a5d5dce._comment b/doc/forum/Git-Annex_with_Asustor_NAS/comment_1_44445200e5b716caeec225972a5d5dce._comment
new file mode 100644
index 000000000..ae5ea41e2
--- /dev/null
+++ b/doc/forum/Git-Annex_with_Asustor_NAS/comment_1_44445200e5b716caeec225972a5d5dce._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-05-16T16:32:05Z"
+ content="""
+If your NAS is accessed over SSH, it is not a removably drive, clearly.
+
+Try starting git-annex webapp from a console, you will probably see the ssh password prompt there. Or, install ssh-askpass, or, install a current daily build of git-annex, which will prompt for the ssh password from within the webapp.
+"""]]
diff --git a/doc/forum/GitBlit_as_a_centralized_repository.mdwn b/doc/forum/GitBlit_as_a_centralized_repository.mdwn
new file mode 100644
index 000000000..884392d58
--- /dev/null
+++ b/doc/forum/GitBlit_as_a_centralized_repository.mdwn
@@ -0,0 +1,2 @@
+Is it possible to use Gitblit as a centralized repository using git-annex?
+thanks Gary
diff --git a/doc/forum/GitBlit_as_a_centralized_repository/comment_1_06bedf5fbac45415e0cc81f41b25a5a0._comment b/doc/forum/GitBlit_as_a_centralized_repository/comment_1_06bedf5fbac45415e0cc81f41b25a5a0._comment
new file mode 100644
index 000000000..91dac6305
--- /dev/null
+++ b/doc/forum/GitBlit_as_a_centralized_repository/comment_1_06bedf5fbac45415e0cc81f41b25a5a0._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-05-16T17:40:20Z"
+ content="""
+I assume gitblit is something like gitosis or gitolite. These let a user ssh in to a server to access a git repository, but they limit the commands they can run to `git-shell`. In order to use git-annex get/copy to such a repository, it needs to be able to run `git-annex-shell`, which is like git-shell but with more commands available. If gitblit can be made allow git-annex-shell to be run, it will work.
+"""]]
diff --git a/doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive.mdwn b/doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive.mdwn
new file mode 100644
index 000000000..20e435fcf
--- /dev/null
+++ b/doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive.mdwn
@@ -0,0 +1,3 @@
+I'm using Git Annex Assistant for the first time, trying to get it to mirror a directory of files from my computer to an external USB drive. I've tried setting up the second repo as a "Removable Drive" in the "full backup" repository group. I've also tried putting it in the "client" group. The result is the same, and Assistant doesn't backup any of my files to the external drive.
+
+What I get in the external drive in the directory that should contain the repo are the set of files "annex, objects, refs, config, HEAD" and they are NOT in a .git subdirectory. Aside from this I don't see any of the files Git Annex Assistant says it has synced. As this is my first time using the Assistant, I don't know if this is a bug, or if I'm just using it incorrectly. If anyone knows what is going on here, please share.
diff --git a/doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive/comment_1_a1d1ae9488924b08682b355aff51130d._comment b/doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive/comment_1_a1d1ae9488924b08682b355aff51130d._comment
new file mode 100644
index 000000000..31ed0999e
--- /dev/null
+++ b/doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive/comment_1_a1d1ae9488924b08682b355aff51130d._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk3HGoDpnOPob5jOjvIootmkve1-nCpRiI"
+ nickname="Kalle"
+ subject="This is the expected default behavior"
+ date="2014-05-17T20:49:06Z"
+ content="""
+Your files should be on the removable drive but the file structure and file names are following git annex logic and is not meant to be human readable.
+
+The default assumption (which I question) is that you will use the removable drive to transfer files between git-annex repositories. So by default you cannot read the files on devices that do not have git-annex installed.
+
+You can configure git-annex to do what you want using the `post-receive` hook. It's a bit complicated and might leave git-annex hogging your drive when you wan't to eject it but see the following:
+
+ - [[forum/USB_backup_with_files_visible/]]
+ - [[forum/Can't_get_git-annex_merge_to_work_from_git_hook/#comment-d93181e69b8bea54bc03cb335dd1d7c8]]
+
+The last post on that second link tells you exactly what to put in the `post-receive` hook in the .git/hooks folder on your removable drive.
+"""]]
diff --git a/doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive/comment_2_6649077583bc14730a08aaaca7ccb62e._comment b/doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive/comment_2_6649077583bc14730a08aaaca7ccb62e._comment
new file mode 100644
index 000000000..059d446e7
--- /dev/null
+++ b/doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive/comment_2_6649077583bc14730a08aaaca7ccb62e._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnov5q9_Cl4Ps5NoYE08yE01NLSvBANnY8"
+ nickname="Eric"
+ subject="comment 2"
+ date="2014-05-18T09:35:45Z"
+ content="""
+Okay, I understand now. Probably Assistant should only treat the external drive that way if it's in the \"transfer\" group.
+"""]]
diff --git a/doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive/comment_3_f359d9b9356de7ee10b9e725a011cc43._comment b/doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive/comment_3_f359d9b9356de7ee10b9e725a011cc43._comment
new file mode 100644
index 000000000..caec25ffd
--- /dev/null
+++ b/doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive/comment_3_f359d9b9356de7ee10b9e725a011cc43._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnov5q9_Cl4Ps5NoYE08yE01NLSvBANnY8"
+ nickname="Eric"
+ subject="comment 3"
+ date="2014-07-10T05:50:32Z"
+ content="""
+Actually, I understand the logic behind encouraging bare repositories.
+"""]]
diff --git a/doc/forum/Git_Annex_not_dropping_unused_content.mdwn b/doc/forum/Git_Annex_not_dropping_unused_content.mdwn
new file mode 100644
index 000000000..ffdebcdba
--- /dev/null
+++ b/doc/forum/Git_Annex_not_dropping_unused_content.mdwn
@@ -0,0 +1,9 @@
+I've deleted some files, but their content remains in the objects directory, and *git annex unused* does not list them.
+
+I've read in this post <http://git-annex.branchable.com/forum/git-annex_unused_not_dropping_deleted_files/> that if other branches contain the files, then it won't count them as unused. My repo appears to have a few branches left over from views I've used.
+
+ remotes/sdrive/views/(added=14_09);(tag=Shared)
+ remotes/sdrive/views/(added=14_09);Images_=_
+ remotes/sdrive/views/added=_
+
+How can I delete these? Is git annex going to create a new branch for every new view I create?
diff --git a/doc/forum/Git_Annex_not_dropping_unused_content/comment_1_da47b6af512b19cba077499f41455189._comment b/doc/forum/Git_Annex_not_dropping_unused_content/comment_1_da47b6af512b19cba077499f41455189._comment
new file mode 100644
index 000000000..d21648c9d
--- /dev/null
+++ b/doc/forum/Git_Annex_not_dropping_unused_content/comment_1_da47b6af512b19cba077499f41455189._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="ghen1"
+ subject="Solved"
+ date="2014-12-19T12:56:55Z"
+ content="""
+I've figured it out:
+
+In the annex in which the view was made (in my case *sdrive*), the views must be deleted with single-quotes:
+
+ git branch -D 'views/(added=14_09);(tag=Shared)'
+ git branch -D 'views/(added=14_09);Images_=_'
+ git branch -D 'views/added=_'
+
+In the connected annexes, for which *sdrive* is a remote, this command removes the remote branches:
+
+ git fetch -p sdrive
+
+ x [deleted] (none) -> sdrive/views/(added=14_09);(tag=Shared)
+ x [deleted] (none) -> sdrive/views/(added=14_09);Images_=_
+ x [deleted] (none) -> sdrive/views/added=_
+
+After these steps *git annex* recognized old files as unused.
+"""]]
diff --git a/doc/forum/Git_annex_assistant_can__39__t_find_rsync_nor_git-annex_on_server.mdwn b/doc/forum/Git_annex_assistant_can__39__t_find_rsync_nor_git-annex_on_server.mdwn
new file mode 100644
index 000000000..66d224b3a
--- /dev/null
+++ b/doc/forum/Git_annex_assistant_can__39__t_find_rsync_nor_git-annex_on_server.mdwn
@@ -0,0 +1,14 @@
+Hi, I'm trying to setup git annex assistant (my first time).
+When I add the server (in "transfert" mode, if that matters) I get the following error:
+
+ "Neither rsync nor git-annex are installed on the server. Perhaps you should go install them?"
+
+I manually verified that both rsync and git/git-annex are installed and available from PATH in the "annex" account and all seems to be ok.
+
+Can you suggest a way to get a more specific information on the source of the error?
+
+My first guess was that this is due to the fact that rsync and git-annex are installed in "non-standard locations". My server run NixOS (http://nixos.org) which has a completely different convention about directory hierarchy from traditional linux/unix OS (that is, no /usr/bin /usr/lib etc.). However, I tried to "cheat" by manually adding symbolic links into a /usr/bin but this didn't work either, so I might be looking in the wrong direction.
+
+Any suggestion appreciated, thank you in advance,
+
+Marco
diff --git a/doc/forum/Git_annex_assistant_can__39__t_find_rsync_nor_git-annex_on_server/comment_1_75c599cc26e7d3645f69173861d4f8be._comment b/doc/forum/Git_annex_assistant_can__39__t_find_rsync_nor_git-annex_on_server/comment_1_75c599cc26e7d3645f69173861d4f8be._comment
new file mode 100644
index 000000000..20b83372e
--- /dev/null
+++ b/doc/forum/Git_annex_assistant_can__39__t_find_rsync_nor_git-annex_on_server/comment_1_75c599cc26e7d3645f69173861d4f8be._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn26A25mnLHRtWAP587-NPwEFKzolmENL4"
+ nickname="Marco"
+ subject="Also with standalone git-annex"
+ date="2014-09-24T14:14:43Z"
+ content="""
+Update: I also tried to install the standalone distribution in the home of the annex user on the server as shown in the video (BTW, nice illustration!), but I get the same error.
+(On the client side I installed the osx app instead.)
+"""]]
diff --git a/doc/forum/Git_annex_assistant_can__39__t_find_rsync_nor_git-annex_on_server/comment_2_496e2f3a61b609ebb28ab55e5c30022b._comment b/doc/forum/Git_annex_assistant_can__39__t_find_rsync_nor_git-annex_on_server/comment_2_496e2f3a61b609ebb28ab55e5c30022b._comment
new file mode 100644
index 000000000..f0e63837c
--- /dev/null
+++ b/doc/forum/Git_annex_assistant_can__39__t_find_rsync_nor_git-annex_on_server/comment_2_496e2f3a61b609ebb28ab55e5c30022b._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.144"
+ subject="comment 2"
+ date="2014-09-25T15:42:41Z"
+ content="""
+You need to be able to `ssh yourserver which rsync` and have it succeed. That's what git-annex uses to probe if rsync etc is present.
+
+Note that, since that does not start a login shell, bash doesn't source ~/.bash* at all, or even /etc/profile. So none of the ways people add nonstandard directories to PATH will work.
+
+So, use this to check the PATH that is available on the system: `ssh yourserver 'echo $PATH'`
+"""]]
diff --git a/doc/forum/Git_annex_hangs.mdwn b/doc/forum/Git_annex_hangs.mdwn
new file mode 100644
index 000000000..a7bb35905
--- /dev/null
+++ b/doc/forum/Git_annex_hangs.mdwn
@@ -0,0 +1,2 @@
+http://stackoverflow.com/questions/26305691/git-annex-hangs
+Does anyone know what might be causing this?
diff --git a/doc/forum/Git_annex_hangs/comment_1_e6b854d4625ae3015aea9c5de71a28ef._comment b/doc/forum/Git_annex_hangs/comment_1_e6b854d4625ae3015aea9c5de71a28ef._comment
new file mode 100644
index 000000000..34df8fb97
--- /dev/null
+++ b/doc/forum/Git_annex_hangs/comment_1_e6b854d4625ae3015aea9c5de71a28ef._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 1"
+ date="2014-10-10T18:51:57Z"
+ content="""
+I have followed up there, but the basic answer is, pass --debug to see what it's doing.
+"""]]
diff --git a/doc/forum/Git_annex_hangs/comment_2_4f848771e60c38321a97361b0d1b33dd._comment b/doc/forum/Git_annex_hangs/comment_2_4f848771e60c38321a97361b0d1b33dd._comment
new file mode 100644
index 000000000..cc1b23c08
--- /dev/null
+++ b/doc/forum/Git_annex_hangs/comment_2_4f848771e60c38321a97361b0d1b33dd._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawktbkKjilg70XC9XBFpIgVhtfLYH-0UMHY"
+ nickname="Tad"
+ subject="comment 2"
+ date="2014-10-10T19:08:49Z"
+ content="""
+--debug is useful. Thanks! I have tried from scratch and added backend after creating file and that worked. I will use --debug in the future
+"""]]
diff --git a/doc/forum/Git_annex_hangs/comment_3_a07abdd1dc21a69ad6be0526edaeffc1._comment b/doc/forum/Git_annex_hangs/comment_3_a07abdd1dc21a69ad6be0526edaeffc1._comment
new file mode 100644
index 000000000..452f175a5
--- /dev/null
+++ b/doc/forum/Git_annex_hangs/comment_3_a07abdd1dc21a69ad6be0526edaeffc1._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 3"
+ date="2014-10-12T20:14:36Z"
+ content="""
+Probably the same problem reported here:
+<https://github.com/datalad/datalad/issues/12>
+
+I guess this is a mismatch between the version of git that git-annex was built with and the version it's using. In particular, git check-attr behavior varies between git older than 1.7.7 and newer, and git-annex picks the version at build time.
+
+So, I think this is a broken Ubuntu PPA, and if that's the current one, the maintainer of the PPA needs to be contacted to update the git-annex to match the git version, or depend on an appropriate git version.
+"""]]
diff --git a/doc/forum/Git_annex_hangs/comment_4_2ba5992c32753ed03ddd5c12264e9acf._comment b/doc/forum/Git_annex_hangs/comment_4_2ba5992c32753ed03ddd5c12264e9acf._comment
new file mode 100644
index 000000000..d46dea1cb
--- /dev/null
+++ b/doc/forum/Git_annex_hangs/comment_4_2ba5992c32753ed03ddd5c12264e9acf._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnjssENdbjzvblxOm4Qr8x2C-BdIV_k_y4"
+ nickname="Tadeusz"
+ subject="comment 4"
+ date="2014-10-15T15:25:27Z"
+ content="""
+I will look into PPA. I hope it won't be this slow:) How long would it take for git annex to add/modify/sync files (~100) taking up 100GB or so? Days? Hours? Minutes?
+"""]]
diff --git a/doc/forum/Git_annex_hangs/comment_5_5fd749f92343079b3916a4d32ddf39c7._comment b/doc/forum/Git_annex_hangs/comment_5_5fd749f92343079b3916a4d32ddf39c7._comment
new file mode 100644
index 000000000..892f2abf2
--- /dev/null
+++ b/doc/forum/Git_annex_hangs/comment_5_5fd749f92343079b3916a4d32ddf39c7._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 5"""
+ date="2014-10-20T15:28:01Z"
+ content="""
+Adding the files will take as long as it takes to read and hash
+the conents of those files from disk. If that's too slow, `--backend=WORM`
+will bypass the hashing, so it will take seconds.
+
+Time required to sync files depends on the bandwidth to wherever it's
+syncing with, obviously.
+"""]]
diff --git a/doc/forum/Git_annex_on_Windows/comment_8_e4e5ad0cda34bb597fe1bb804acc15e9._comment b/doc/forum/Git_annex_on_Windows/comment_8_e4e5ad0cda34bb597fe1bb804acc15e9._comment
new file mode 100644
index 000000000..3a649c501
--- /dev/null
+++ b/doc/forum/Git_annex_on_Windows/comment_8_e4e5ad0cda34bb597fe1bb804acc15e9._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.102"
+ subject="comment 8"
+ date="2014-03-20T19:50:26Z"
+ content="""
+I upgraded to msysgit 1.9.0 and git annex works in cmd.
+
+Did you tell the msysgit installer to \"Run git from the windows command prompt\"? This is the default. If you chose \"Use git bash only\" then git-annex will only work from within git bash.
+"""]]
diff --git a/doc/forum/Git_remote__63_____40__bitbucket__44___github__41__.mdwn b/doc/forum/Git_remote__63_____40__bitbucket__44___github__41__.mdwn
new file mode 100644
index 000000000..245b298ff
--- /dev/null
+++ b/doc/forum/Git_remote__63_____40__bitbucket__44___github__41__.mdwn
@@ -0,0 +1 @@
+Is it possible to use bitbucket as a remote?
diff --git a/doc/forum/Git_remote__63_____40__bitbucket__44___github__41__/comment_1_8a6de753ac0aa56f470b2aefca628388._comment b/doc/forum/Git_remote__63_____40__bitbucket__44___github__41__/comment_1_8a6de753ac0aa56f470b2aefca628388._comment
new file mode 100644
index 000000000..c6c7f6e1c
--- /dev/null
+++ b/doc/forum/Git_remote__63_____40__bitbucket__44___github__41__/comment_1_8a6de753ac0aa56f470b2aefca628388._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-09-18T17:43:44Z"
+ content="""
+You can use any git repository as a git remote in git-annex, since git-annex uses plain old git repos.
+
+You will need to add some kind of [[special_remote|special_remotes]] to hold the content of the files stored in git-annex however.
+"""]]
diff --git a/doc/forum/Git_repos_in_git_annex__63__/comment_2_8546341a561a5f55216c2f437f8ec0c2._comment b/doc/forum/Git_repos_in_git_annex__63__/comment_2_8546341a561a5f55216c2f437f8ec0c2._comment
new file mode 100644
index 000000000..90d40d8aa
--- /dev/null
+++ b/doc/forum/Git_repos_in_git_annex__63__/comment_2_8546341a561a5f55216c2f437f8ec0c2._comment
@@ -0,0 +1,32 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmNu4V5fvpLlBhaCUfXXOB0MI5NXwh8SkU"
+ nickname="Adam"
+ subject="Many months later..."
+ date="2014-05-08T16:49:26Z"
+ content="""
+Here is the relevant bug: <http://git-annex.branchable.com/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X>
+
+Here's my scenario: I have been using Dropbox for several years. I want to move to git-annex.
+
+For some time I used Bazaar repos inside Dropbox. A couple of times I accidentally modified files on one computer before another finished syncing, and the repo became mildly corrupted, but I recovered it okay.
+
+Recently I switched to git, and so far, so good. I'm careful not to make any changes to my files before Dropbox is finished syncing, so everything works fine.
+
+But when I add a directory containing a git repo to an annex, git-annex ignores the .git directory, so the repo isn't synced.
+
+I read this forum thread, and I read the bug report, but there don't appear to be any real solutions.
+
+This seems like what should be a fairly common use case: a user has a directory of simple text files, like shell scripts or org-mode files. He uses git to version-control them, and he uses Dropbox to sync the files and the git repo automatically between computers. Now the user wants to use git-annex instead, but if he does this, it will mean having to choose between:
+
+* No longer using git to version-control the files
+* Only using git on a single system, which means that he can't make commits or do any other git operations when using other systems
+* Keeping separate git repos on each system, and making the same commits manually on each one...which would be a mess
+* Keeping separate git repos on each system, and using a script to make commits automatically--which would mean commits wouldn't be any more useful than a simple timed backup script
+
+I guess I could just use git instead of Dropbox or git-annex, but then I must choose between either:
+
+* Only being able to sync repos when both systems are online
+* Having to store repos in plaintext on remote servers
+
+This is one of my primary use cases for Dropbox/git-annex. I'd really appreciate any help in figuring this out. Thanks.
+"""]]
diff --git a/doc/forum/How_To_Permanently_Delete_a_File__63__.mdwn b/doc/forum/How_To_Permanently_Delete_a_File__63__.mdwn
new file mode 100644
index 000000000..fd654079f
--- /dev/null
+++ b/doc/forum/How_To_Permanently_Delete_a_File__63__.mdwn
@@ -0,0 +1,13 @@
+Hi,
+
+We have several large git annex repos where all of the files are on remotes and we want to got through and clean up the repositories by deleting some subset of files.
+
+What is the fastest way to permanently delete files from a git annex repository with remotes?
+
+I guess I can to ``git annex drop --numcopies=0 <file>; git rm <file>``. Does that actually delete the file permanently?
+
+Is there a faster way?
+
+Thanks,
+
+Mike
diff --git a/doc/forum/How_To_Permanently_Delete_a_File__63__/comment_1_7f2cefb0991789be5a960eb9c0a9df3f._comment b/doc/forum/How_To_Permanently_Delete_a_File__63__/comment_1_7f2cefb0991789be5a960eb9c0a9df3f._comment
new file mode 100644
index 000000000..c0eb14174
--- /dev/null
+++ b/doc/forum/How_To_Permanently_Delete_a_File__63__/comment_1_7f2cefb0991789be5a960eb9c0a9df3f._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis"
+ nickname="Mike"
+ subject="comment 1"
+ date="2014-10-09T17:53:04Z"
+ content="""
+I experimented with this by making an empty directory with two empty files and one file with some content. I added them all, then ran ``git annex drop --numcopies=0 <file>; git rm <file>`` on one of the empty files.
+
+Interestingly, what happened is that git annex deleted the empty file from .git/annex/objects, but left the directory structure. In this case the link pointed to:
+
+.git/annex/objects/pX/ZJ/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+
+After the drop command what was left was the following empty directory:
+
+.git/annex/objects/pX/ZJ/SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/
+
+Also interestingly and terrifyingly, because there were two empty files, both pointed to the same object, the ``git annex drop`` command deleted the file in the objects directory, and now the second link points to nothing. The file is done.
+
+This means that if you have a git annex repository and you have two copies of a file, and you think to yourself, \"oh, let me just delete one, I don't need two\", and you use the method above, you will permanently and irrevocably delete both files. Not good.
+
+Any better ideas on how to do this?
+"""]]
diff --git a/doc/forum/How_To_Permanently_Delete_a_File__63__/comment_2_d13b456c5b3990082c16e78a50f5db91._comment b/doc/forum/How_To_Permanently_Delete_a_File__63__/comment_2_d13b456c5b3990082c16e78a50f5db91._comment
new file mode 100644
index 000000000..959ac282f
--- /dev/null
+++ b/doc/forum/How_To_Permanently_Delete_a_File__63__/comment_2_d13b456c5b3990082c16e78a50f5db91._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis"
+ nickname="Mike"
+ subject="comment 2"
+ date="2014-10-09T18:02:59Z"
+ content="""
+Tried another approach:
+
+``git annex unannex <file>; rm <file>``
+
+This does not delete the original, and it only works if you do ``git annex get <file>`` first. It won't update the remote, unless you cd into that remote and run ``git annex sync`` there. After that there is the illusion the file is done, but its content is still in .git/annex/objects. In my test case I could vim into the file in question in the objects directory and it was still there.
+
+So ``git annex drop`` deletes both copies of duplicate files and so is too dangerous to use and ``git annex unannex`` doesn't delete the file anywhere. I am a little stuck here, what do I do?
+"""]]
diff --git a/doc/forum/How_To_Permanently_Delete_a_File__63__/comment_3_854c17ff8cb38486c4bef618d1e94919._comment b/doc/forum/How_To_Permanently_Delete_a_File__63__/comment_3_854c17ff8cb38486c4bef618d1e94919._comment
new file mode 100644
index 000000000..404d12ae4
--- /dev/null
+++ b/doc/forum/How_To_Permanently_Delete_a_File__63__/comment_3_854c17ff8cb38486c4bef618d1e94919._comment
@@ -0,0 +1,24 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis"
+ nickname="Mike"
+ subject="comment 3"
+ date="2014-10-09T18:16:34Z"
+ content="""
+OK, I should have read more before writing.
+
+It seems like the procedure is described here:
+http://git-annex.branchable.com/walkthrough/unused_data/
+
+The process is:
+1. rm files or directories
+2. git annex sync in all remotes (that is a pain, I wish I only had to do it once)
+3. git annex unused
+4. git annex dropunused
+5. Repeat 4 and 5 on any repository where the data is stored
+
+That does work for me, it is just slightly cumbersome. If there is another way or if I am missing something, please let me know.
+
+Thanks,
+
+Mike
+"""]]
diff --git a/doc/forum/How_To_Permanently_Delete_a_File__63__/comment_4_9572ad02bbf6845b1ab6d7c612c12a2a._comment b/doc/forum/How_To_Permanently_Delete_a_File__63__/comment_4_9572ad02bbf6845b1ab6d7c612c12a2a._comment
new file mode 100644
index 000000000..6e8ddc595
--- /dev/null
+++ b/doc/forum/How_To_Permanently_Delete_a_File__63__/comment_4_9572ad02bbf6845b1ab6d7c612c12a2a._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 4"
+ date="2014-10-09T18:23:58Z"
+ content="""
+This post is misplaced, it is not a tip about how to use git-annex, but a question. I will be moving it to the forum after posting this comment.
+
+The right answer is probably to run: `git annex drop $file`, with no --numcopies, no --force, etc. Just let git-annex do its job; it will check the remotes to ensure that enough copies of the file exist to make it safe to drop the content of the file from the local repository. (
+Note that --numcopies=0 is very unsafe, you're asking git-annex to delete even the last copy of your data without checking when you do that.)
+
+If your goal is to get rid of every copy of this file from every repository that has a copy, I suggest just `git rm $file; git commit`, followed by running `git annex unused` in the various repositories to clean them up.
+
+There is a faster way, which is to run `git annex drop --from $remote` for each remote that has the file. If you want to get rid of every copy of the file, for sure, you could add a --force to that.
+
+git-annex deduplicates data, so it's completely expected that if two files have the same content, dropping one will remove the content of the other.
+
+I cannot reproduce any .git/annex/objects/foo empty directories being left behind by git-annex after doing that. Perhaps you are not using a current version of git-annex?
+"""]]
diff --git a/doc/forum/How_To_Permanently_Delete_a_File__63__/comment_5_9c28faabb7d7bd1e83d551e2938d3532._comment b/doc/forum/How_To_Permanently_Delete_a_File__63__/comment_5_9c28faabb7d7bd1e83d551e2938d3532._comment
new file mode 100644
index 000000000..5f6b0bf08
--- /dev/null
+++ b/doc/forum/How_To_Permanently_Delete_a_File__63__/comment_5_9c28faabb7d7bd1e83d551e2938d3532._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis"
+ nickname="Mike"
+ subject="comment 5"
+ date="2014-10-13T14:51:47Z"
+ content="""
+Sorry about the misplacement, that was a complete accident.
+
+What I am trying to do is to delete files as quickly as possible from every repository. In this case we are using git annex to move non-critical data from our main RAID drive to an external drive while still maintaining the full directory structure on the RAID drive. This is very valuable because we sometimes won't need the data for months or years, but then we may suddenly need a few files, and git annex makes it very easy to get them back. But we are talking about many terabytes and thousands and thousands of files here, and sometimes we just want to completely get rid of that data, it just takes up too much drive space. I wanted to make it as easy and safe as possible for people to just delete files from every repository, hence the question.
+
+I am nervous about using ``git annex drop --force`` because it seems to me that if there are two identical copies of a file in a repository, that command will kill the content of both... or does that only happen with ``git annex drop --numcopies=0``?
+
+I think the best solution for me seems to be the ``git rm <file>; git annex unused; git annex dropunused; git annex sync`` series of commands. It would just be nice if it were possible to achieve the same results in every repository with a simple command such as ``git annex rm --all <file>``. I recognise that this would be a dangerous command, but frankly I feel like in linux, everyone should be aware just how dangerous ``rm`` is in every context :-)
+"""]]
diff --git a/doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__.mdwn b/doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__.mdwn
new file mode 100644
index 000000000..d63af388f
--- /dev/null
+++ b/doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__.mdwn
@@ -0,0 +1,13 @@
+I have a local repo on a computer with some folder on the path
+/computer1/annex/
+
+Then I tried to run git annex on my phone and added a remote ssh repo syncing to
+/computer1/annex/mobile/ from my mobile's picture folder.
+
+But the files ending up there are:
+ls /computer1/annex/mobile/
+annex branches config description HEAD hooks info objects refs
+
+I chose "full backup"
+
+Why dont I see my pictures there, even if they are hiding in the metadata ?
diff --git a/doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_1_fc914b5998a09943fc8c1917a0e36096._comment b/doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_1_fc914b5998a09943fc8c1917a0e36096._comment
new file mode 100644
index 000000000..ac49670b9
--- /dev/null
+++ b/doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_1_fc914b5998a09943fc8c1917a0e36096._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Petter_petterson"
+ ip="89.160.15.173"
+ subject="addition"
+ date="2014-09-13T07:54:58Z"
+ content="""
+I understand that the copy of the cellphones' photos are stored on the server too, when typing git annex whereis <photo> I see that it exists on the server, but I need to be able to, at will copy out the jpg files for editing and using in other places.
+"""]]
diff --git a/doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_2_fd5257eff7f94971557c031a94ac2766._comment b/doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_2_fd5257eff7f94971557c031a94ac2766._comment
new file mode 100644
index 000000000..97724fd18
--- /dev/null
+++ b/doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_2_fd5257eff7f94971557c031a94ac2766._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
+ nickname="Justin"
+ subject="comment 2"
+ date="2014-09-14T18:57:12Z"
+ content="""
+If `/computer1/annex/` was already an annex repository you should have synced the phone to that, not to a new bare repository at `/computer1/annex/mobile/`
+"""]]
diff --git a/doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_3_5a11c45f92bae1328a5120945bee1fa0._comment b/doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_3_5a11c45f92bae1328a5120945bee1fa0._comment
new file mode 100644
index 000000000..8a9f6cd18
--- /dev/null
+++ b/doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_3_5a11c45f92bae1328a5120945bee1fa0._comment
@@ -0,0 +1,36 @@
+[[!comment format=mdwn
+ username="Petter_petterson"
+ ip="89.160.15.173"
+ subject="comment 3"
+ date="2014-09-16T08:13:59Z"
+ content="""
+Thanks Justin, but that wont work. Even pointing out a normal, non-bare repo and then adding it as a ssh remote will convert it into a bare repo. I confirmed that, and then I read this post:
+
+ http://git-annex.branchable.com/forum/Local_and_remote_in_direct_mode/
+
+that states that
+> The \"Remote server using ssh\" option in the webapp is intended to set up a bare git repository on a server, not a non-bare git repository on a client.\"
+
+I even tried to do
+ git remote add B ssh://machineB:/~/annex
+but to no avail, the created annex on machine B becomes a bare repo.
+
+The only way to do it for me was to do the following,
+Assume my cellphone is device A, and my desktop is device B:
+
+On machine B:
+
+ cd ~/DCIM
+ git init
+ git annex init \"B\"
+ git annex direct
+ echo '*/5 * * * * * cd ~/DCIM; git annex sync' > crontab
+
+On machine A:
+
+ git clone ssh://user@machineB:/home/user/DCIM
+ git annex sync
+ git annex webapp
+
+now pictures are synced to the computer in direct, non-bare format every 5 minutes. I have spent literally days on this and now I finally nailed it in a crude but working fashion.
+"""]]
diff --git a/doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_4_404a8f9daa86c20a046b4c9f9051dfc0._comment b/doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_4_404a8f9daa86c20a046b4c9f9051dfc0._comment
new file mode 100644
index 000000000..cbe73a00b
--- /dev/null
+++ b/doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_4_404a8f9daa86c20a046b4c9f9051dfc0._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 4"
+ date="2014-09-18T18:00:42Z"
+ content="""
+I have double-checked, and when I already have an existing, non-bare repository, pointing the webapp at it over ssh keeps it as a non-bare repository. As I would expect.
+
+> I even tried to do git remote add B ssh://machineB:/~/annex but to no avail, the created annex on machine B becomes a bare repo.
+
+I didn't try this because it's such a violation of the way git actually works that I just can't believe it could happen. If it does, you've found the git bug of the year.
+
+But, I think you just got confused about whether the repository existed before, or gave the wrong path to the existing repository which would result in a new, bare repository being created in the location you told it.
+
+If you really think this happens, show a transcript with enough details for me, or the git developers, to reproduce the problem.
+"""]]
diff --git a/doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_5_3dcdaef370d0df38e7285f1fa11c6bb3._comment b/doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_5_3dcdaef370d0df38e7285f1fa11c6bb3._comment
new file mode 100644
index 000000000..7bcce9706
--- /dev/null
+++ b/doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_5_3dcdaef370d0df38e7285f1fa11c6bb3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 5"
+ date="2014-09-18T18:05:33Z"
+ content="""
+It occurs to me that another way you could have gotten confused is, if ssh://machineB:/~/annex was eg, created in the first place by running the git-annex webapp on machineB, then it would be a direct mode repo. In this case, yes core.bare=true, but so does annex.direct=true. And that repository will not be a bare repo really; it will contain the same file tree as you have on your mobile.
+"""]]
diff --git a/doc/forum/How_does_git_annex_handle_swp_files.mdwn b/doc/forum/How_does_git_annex_handle_swp_files.mdwn
new file mode 100644
index 000000000..0c0773120
--- /dev/null
+++ b/doc/forum/How_does_git_annex_handle_swp_files.mdwn
@@ -0,0 +1 @@
+Sometime I edit a file with lets say Emacs in the work directory which is synced with all my other computers. Then there is this .something.swp file. This is put into the queue for sync, but if I close this before it starts the sync I get an error since the file is now gone. Then I get a failed message in the webapp. This is slightly annoying. Is there a way to fix this in some way. I can of course disable the swp use, but this is default for different programs. Is there a way to exclude files? For instance all .swp files from ever getting synced?
diff --git a/doc/forum/How_does_git_annex_handle_swp_files/comment_1_8f0b81139fb66f28f9262e919692ecbd._comment b/doc/forum/How_does_git_annex_handle_swp_files/comment_1_8f0b81139fb66f28f9262e919692ecbd._comment
new file mode 100644
index 000000000..df946a7a1
--- /dev/null
+++ b/doc/forum/How_does_git_annex_handle_swp_files/comment_1_8f0b81139fb66f28f9262e919692ecbd._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-11-05T16:14:06Z"
+ content="""
+You can set up a .gitignore file containing `*.swp` or whatever.
+"""]]
diff --git a/doc/forum/How_to_change_the_name_of_a_repo_on_S3__63__.mdwn b/doc/forum/How_to_change_the_name_of_a_repo_on_S3__63__.mdwn
new file mode 100644
index 000000000..70e3eada3
--- /dev/null
+++ b/doc/forum/How_to_change_the_name_of_a_repo_on_S3__63__.mdwn
@@ -0,0 +1,2 @@
+git-annex created a gitannexxxxxxxxxxxxxxxxxxxxx folder on S3 and I guess I'm a bit OCD but I'd like to rename it to git-annex.
+Of course I can rename it in my S3 console but where does git-annex store that name so I can also change it on my local install of git-annex.
diff --git a/doc/forum/How_to_change_the_name_of_a_repo_on_S3__63__/comment_1_be74d63e1951f515948d232e096b4862._comment b/doc/forum/How_to_change_the_name_of_a_repo_on_S3__63__/comment_1_be74d63e1951f515948d232e096b4862._comment
new file mode 100644
index 000000000..3aecea051
--- /dev/null
+++ b/doc/forum/How_to_change_the_name_of_a_repo_on_S3__63__/comment_1_be74d63e1951f515948d232e096b4862._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-05-16T16:28:40Z"
+ content="""
+If you look at the [[S3_documentation|special_remotes/S3]] you will see a `bucket` setting that does what you want. You can use `git annex enableremote` to change it.
+"""]]
diff --git a/doc/forum/How_to_change_the_name_of_a_repo_on_S3__63__/comment_2_d54a7163cfe9a94b7ba337860958e5c5._comment b/doc/forum/How_to_change_the_name_of_a_repo_on_S3__63__/comment_2_d54a7163cfe9a94b7ba337860958e5c5._comment
new file mode 100644
index 000000000..d563d061a
--- /dev/null
+++ b/doc/forum/How_to_change_the_name_of_a_repo_on_S3__63__/comment_2_d54a7163cfe9a94b7ba337860958e5c5._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="comment 2"
+ date="2014-05-16T18:08:11Z"
+ content="""
+Thanks but I realized there's no way to rename an S3 bucket so giving up on this idea...
+"""]]
diff --git a/doc/forum/How_to_completely_remove_tracking_of_a_deleted_file_in_direct_mode.mdwn b/doc/forum/How_to_completely_remove_tracking_of_a_deleted_file_in_direct_mode.mdwn
new file mode 100644
index 000000000..82fc666a0
--- /dev/null
+++ b/doc/forum/How_to_completely_remove_tracking_of_a_deleted_file_in_direct_mode.mdwn
@@ -0,0 +1,7 @@
+I am in direct mode (managing music) and have no other repositories than the one I'm in. I would like to delete a file and have git no longer track it at all.
+
+So far I've manually deleted the file and run "git annex add .", but when I run "git annex status" the file is still marked as deleted. I would like to receive no message whatsoever.
+
+I tried "git annex drop path" , "git annex unannex path", and everything else I can think of but nothing will get git annex to forget the file.
+
+I'm sure this is easy, but how do you remove a deleted file in direct mode?
diff --git a/doc/forum/How_to_completely_remove_tracking_of_a_deleted_file_in_direct_mode/comment_1_c6bd2ef90516dde928ff18ded36df625._comment b/doc/forum/How_to_completely_remove_tracking_of_a_deleted_file_in_direct_mode/comment_1_c6bd2ef90516dde928ff18ded36df625._comment
new file mode 100644
index 000000000..9b5881ad6
--- /dev/null
+++ b/doc/forum/How_to_completely_remove_tracking_of_a_deleted_file_in_direct_mode/comment_1_c6bd2ef90516dde928ff18ded36df625._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-07-02T16:57:46Z"
+ content="""
+git annex sync
+"""]]
diff --git a/doc/forum/How_to_debug_failing_sync.mdwn b/doc/forum/How_to_debug_failing_sync.mdwn
new file mode 100644
index 000000000..ad18aeb55
--- /dev/null
+++ b/doc/forum/How_to_debug_failing_sync.mdwn
@@ -0,0 +1,5 @@
+I've got a remote I setup while connected to my home network that is no longer syncing when I'm on the same network. I'm not sure how to debug the problem. Any tips?
+
+I will say that when I edit the repository in the assistant, the url it gives for the "git repository location at" field looks incorrect. It's got an extra "git-annex-" prepended to the hostname. I'm not sure how to alter that.
+
+I'm using version 5.20140517~bpo70+1, from the wheezy backports.
diff --git a/doc/forum/How_to_debug_failing_sync/comment_1_a597b868182e55e5f39394f154740534._comment b/doc/forum/How_to_debug_failing_sync/comment_1_a597b868182e55e5f39394f154740534._comment
new file mode 100644
index 000000000..2d89ecda3
--- /dev/null
+++ b/doc/forum/How_to_debug_failing_sync/comment_1_a597b868182e55e5f39394f154740534._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 1"
+ date="2014-05-29T18:15:12Z"
+ content="""
+That extra git-annex- prefix is used in ~/.ssh/config to set up the ssh keys for the repository. So it's normal.
+
+I suggest that you try running git-annex sync at the command line and paste the output so we can see how it fails.
+"""]]
diff --git a/doc/forum/How_to_debug_failing_sync/comment_2_db0a5652d76e4e568a4d7808195bc59c._comment b/doc/forum/How_to_debug_failing_sync/comment_2_db0a5652d76e4e568a4d7808195bc59c._comment
new file mode 100644
index 000000000..bf707ecb1
--- /dev/null
+++ b/doc/forum/How_to_debug_failing_sync/comment_2_db0a5652d76e4e568a4d7808195bc59c._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="go8ose"
+ ip="59.167.191.61"
+ subject="comment 2"
+ date="2014-05-30T10:28:38Z"
+ content="""
+I was shown a password prompt for the remote. Then I realised I was controlling my ~/.ssh/authorized_keys file with puppet, which would have removed the public key that annex would have added to that file. I'm sure that once I fix that up, I'll get it working again.
+
+Thanks for the CLI suggestion.
+"""]]
diff --git a/doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__.mdwn b/doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__.mdwn
new file mode 100644
index 000000000..92bf09ae2
--- /dev/null
+++ b/doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__.mdwn
@@ -0,0 +1,9 @@
+I'd like to provide a team of some non-technical Windows (=direct mode) users with the following git-shell scripts to make collaboration safer than with plain "sync":
+
+1) **update-changes-from-others.sh** -- Like sync, but don't commit any local changes. Merge them like sync, don't discard.
+
+2) **sync-all-but-deletes.sh** -- Like sync but don't commit any deletions (-> renames may become additions).
+
+3) **discard-all-my-changes.sh** -- Forcibly discard all local changes, then checkout and get latest master head.
+
+Any pointers on how to approach implementing these safely?
diff --git a/doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__/comment_1_c5226964b4b64bd47d888b5616ff970b._comment b/doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__/comment_1_c5226964b4b64bd47d888b5616ff970b._comment
new file mode 100644
index 000000000..91edd264d
--- /dev/null
+++ b/doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__/comment_1_c5226964b4b64bd47d888b5616ff970b._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-12-01T23:08:56Z"
+ content="""
+Well, if you set `remote.foo.annex-readonly` to true, then git-annex
+sync won't push changes to the remote named "foo".
+
+You could set that in .git/config, or you could do something like
+this to set it only when running the sync:
+
+git -c remote.foo.annex-readonly=true annex sync
+
+I am not sure about a good solution for sync-all-but-deletes.sh,
+although it seems like the new `git annex proxy` could perhaps
+be used to build it.
+
+discard-all-my-changes.sh could probably be implemented using the new
+`git annex proxy` command. It would be pretty unsafe though! Maybe
+instead make it first commit all local changes, and then use
+`git annex proxy -- git reset --hard origin/master`
+"""]]
diff --git a/doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__/comment_2_748d243bac14a8d55be4ac324c581c1d._comment b/doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__/comment_2_748d243bac14a8d55be4ac324c581c1d._comment
new file mode 100644
index 000000000..edef7c147
--- /dev/null
+++ b/doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__/comment_2_748d243bac14a8d55be4ac324c581c1d._comment
@@ -0,0 +1,62 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmWBvsZvSsAL8P2ye3F0OBStjFCVnOImzM"
+ nickname="Jarno"
+ subject="comment 2"
+ date="2014-12-03T20:04:42Z"
+ content="""
+Thank you, `remote.foo.annex-readonly` looks like a nice solution for the update-changes-from-other.sh!
+
+For discard-all-my-changes.sh, `reset --hard` through proxy worked otherwise nicely, but it doesn't seem to restore deletions:
+
+ $ git annex proxy -- git reset --hard origin/master
+ HEAD is now at 37aed97 git-annex automatic sync
+
+ $ echo \"A\" > test.txt
+
+ $ git annex add test.txt
+ add test.txt ok
+ (Recording state in git...)
+
+ $ git annex sync
+ commit ok
+ pull origin
+ ok
+ push origin
+ Counting objects: 17, done.
+ Delta compression using up to 8 threads.
+ Compressing objects: 100% (7/7), done.
+ Writing objects: 100% (8/8), 783 bytes | 0 bytes/s, done.
+ Total 8 (delta 4), reused 1 (delta 0)
+ To ssh://gitannex@serv-gitannex:/home/gitannex/git-annex-test.git
+ 88a25b5..0a8281d git-annex -> synced/git-annex
+ 37aed97..2978dcd annex/direct/master -> synced/master
+ ok
+
+ $ rm test.txt
+
+ $ git annex proxy -- git reset --hard origin/master
+ warning: packfile .git/objects/pack/pack-42568744cdbba46b2dd71a7f37546a52bb26684
+ 4.pack cannot be accessed
+ HEAD is now at 2978dcd git-annex automatic sync
+
+ $ ls test.txt
+ ls: test.txt: No such file or directory
+
+ $ git annex status
+ D test.txt
+
+ $ git annex version
+ git-annex version: 5.20141128-g70f997e
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feed
+ s Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SH
+ A256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar ho
+ ok external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 2 3 4
+
+Note the \"pack cannot be accessed\" after the second reset.
+
+"""]]
diff --git a/doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__/comment_3_cf9234339bad14ad9a9d3027f9066936._comment b/doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__/comment_3_cf9234339bad14ad9a9d3027f9066936._comment
new file mode 100644
index 000000000..3cf454562
--- /dev/null
+++ b/doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__/comment_3_cf9234339bad14ad9a9d3027f9066936._comment
@@ -0,0 +1,49 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmWBvsZvSsAL8P2ye3F0OBStjFCVnOImzM"
+ nickname="Jarno"
+ subject="Properly saving the changes before hard reset..?"
+ date="2014-12-03T21:46:23Z"
+ content="""
+BTW, my complete discard-all-my-changes.sh is, at the moment:
+
+ git annex add .
+ git annex proxy -- git commit -m \"Temp commit: changes to be discarded on $HOSTNAME.\"
+ git annex proxy -- git reset --hard origin/master
+ git annex get
+ git -c core.bare=false clean -dfi
+
+Is that `proxy -- git commit` even the proper way to save the changes locally before discarding, or will the branch change of the proxied commit always lose the annexed data? While testing, I've noticed that `add .` followed by `proxy -- git commit` at least sometimes replaces the contents of the changed file with a hash, with no apparent way to get them back.
+
+Example:
+
+ $ echo \"test string\" >> show-changes.sh
+
+ $ git annex add show-changes.sh
+ add show-changes.sh ok
+ (Recording state in git...)
+
+ $ git annex proxy -- git commit -m \"test\"
+ [annex/direct/master a2a594f] test
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+ $ cat show-changes.sh
+ ..\..\..\..\.git\annex\objects\QG\3J\SHA256E-s313--a05d6ed6cb73f6a95d98606d37e01
+ 4e5b65e86b9fdb8e9fedded7d36a06ea90a.sh\SHA256E-s313--a05d6ed6cb73f6a95d98606d37e
+ 014e5b65e86b9fdb8e9fedded7d36a06ea90a.sh
+
+ $ git annex get show-changes.sh
+ get show-changes.sh (not available)
+ No other repository is known to contain the file.
+ failed
+ git-annex: get: 1 failed
+
+ $ git annex fsck show-changes.sh
+ fsck show-changes.sh (fixing link) ok
+ (Recording state in git...)
+
+ $ cat show-changes.sh
+ .git\annex\objects\QG\3J\SHA256E-s313--a05d6ed6cb73f6a95d98606d37e014e5b65e86b9f
+ db8e9fedded7d36a06ea90a.sh\SHA256E-s313--a05d6ed6cb73f6a95d98606d37e014e5b65e86b
+ 9fdb8e9fedded7d36a06ea90a.sh
+
+"""]]
diff --git a/doc/forum/How_to_get_detailed_information_on_special_remotes__63__.mdwn b/doc/forum/How_to_get_detailed_information_on_special_remotes__63__.mdwn
new file mode 100644
index 000000000..415b7570e
--- /dev/null
+++ b/doc/forum/How_to_get_detailed_information_on_special_remotes__63__.mdwn
@@ -0,0 +1 @@
+How can I get information on already-configured special remotes in a repository? I'd like to find out what type a given special remote is, and which URL/bucket, encryption mode, etc. was used to set it up.
diff --git a/doc/forum/How_to_get_detailed_information_on_special_remotes__63__/comment_1_f1eca38ca0c1edb66e64ac64f0321829._comment b/doc/forum/How_to_get_detailed_information_on_special_remotes__63__/comment_1_f1eca38ca0c1edb66e64ac64f0321829._comment
new file mode 100644
index 000000000..84b67f75e
--- /dev/null
+++ b/doc/forum/How_to_get_detailed_information_on_special_remotes__63__/comment_1_f1eca38ca0c1edb66e64ac64f0321829._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-28T20:39:41Z"
+ content="""
+The latest version of git-annex adds the ability to `git annex info
+$remote` and get all the info you asked for. Enjoy!
+"""]]
diff --git a/doc/forum/How_to_get_detailed_information_on_special_remotes__63__/comment_2_73f8b7ebde5870f92bec02d15a533ef3._comment b/doc/forum/How_to_get_detailed_information_on_special_remotes__63__/comment_2_73f8b7ebde5870f92bec02d15a533ef3._comment
new file mode 100644
index 000000000..cc174870c
--- /dev/null
+++ b/doc/forum/How_to_get_detailed_information_on_special_remotes__63__/comment_2_73f8b7ebde5870f92bec02d15a533ef3._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="gernot"
+ subject="comment 2"
+ date="2014-11-09T20:30:39Z"
+ content="""
+That's perfect. Thanks, Joey!
+"""]]
diff --git a/doc/forum/How_to_get_git-annex_to_forget_a_commit__63__.mdwn b/doc/forum/How_to_get_git-annex_to_forget_a_commit__63__.mdwn
new file mode 100644
index 000000000..d5aa71b44
--- /dev/null
+++ b/doc/forum/How_to_get_git-annex_to_forget_a_commit__63__.mdwn
@@ -0,0 +1,54 @@
+I've done a `git annex add` and `git commit` on my annex which included some files I don't want to add to the annex. I've tried to reverse it all out, but whenever I `git annex add` something, the unwanted files show up in the git-annex branch.
+
+ git init forgetmenot
+ cd forgetmenot
+ git commit -m "create" --allow-empty
+ git annex init fmn
+
+ echo 'foo' > foo
+ echo 'bar' > bar
+
+ git annex add
+ git commit -m "add foo"
+
+ git log --oneline --name-only
+ # 28634c0 add foo
+ # bar
+ # foo
+ # 4a87050 create
+
+ git log --oneline --name-only git-annex
+ 74e6969 update
+ 41d/a26/SHA256E-s4--b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c.log
+ a70/4a5/SHA256E-s4--7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730.log
+ 95285ed update
+ uuid.log
+ 2135e07 branch created
+
+If you now try to get git-annex to forget by reverting *master* and *git-annex* and only adding/commiting *foo*, the master branch ends up correct, but git-annex magically remembers *bar*!
+
+ git reset --hard HEAD^
+ git branch -f git-annex git-annex^
+
+ echo 'foo' > foo
+ git annex add
+ git commit -m "add foo"
+
+ git log --oneline --name-only
+ # 1b4889e add foo
+ # foo
+ # 4a87050 create
+
+ git log --oneline --name-only git-annex
+ # 3d0b9bc update
+ # 41d/a26/SHA256E-s4--b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c.log
+ # a70/4a5/SHA256E-s4--7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730.log
+ # 2e17a19 update
+ # uuid.log
+ # 646776b branch created
+
+How is git-annex remembering this and how can I get it to completely forget?
+
+I have tried `git gc --aggressive --prune=all`, `git annex fsck --all` and `git annex drop unused` but somehow, git-annex is remembering bar existed.
+
+This is an exercise in micro-managing the git-annex branch a bit, but this situation does also cause git-annex to complain about the missing files on fsck (0 out of 2 copies) so it isn't just being a control freak! Honest! :)
diff --git a/doc/forum/How_to_get_git-annex_to_forget_a_commit__63__/comment_1_65471c42e163ac8ee6ec109f1397271b._comment b/doc/forum/How_to_get_git-annex_to_forget_a_commit__63__/comment_1_65471c42e163ac8ee6ec109f1397271b._comment
new file mode 100644
index 000000000..44b36ba60
--- /dev/null
+++ b/doc/forum/How_to_get_git-annex_to_forget_a_commit__63__/comment_1_65471c42e163ac8ee6ec109f1397271b._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="CandyAngel"
+ ip="81.111.193.130"
+ subject="comment 1"
+ date="2014-07-17T15:43:03Z"
+ content="""
+Joey has pointed me to the solution.
+
+git-annex was remembering these files due to them being present in *.git/annex/index*.
+
+A simple `rm .git/annex/index` after moving the git-annex branch to the earlier commit prevents the \"ghost\" log files from being recreated and Joey confirmed this is safe to do (git-annex automatically recreates it).
+"""]]
diff --git a/doc/forum/How_to_get_git-annex_to_forget_a_commit__63__/comment_2_cc991abd9155a8e4d935b04ba432744f._comment b/doc/forum/How_to_get_git-annex_to_forget_a_commit__63__/comment_2_cc991abd9155a8e4d935b04ba432744f._comment
new file mode 100644
index 000000000..2d15cf35e
--- /dev/null
+++ b/doc/forum/How_to_get_git-annex_to_forget_a_commit__63__/comment_2_cc991abd9155a8e4d935b04ba432744f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 2"
+ date="2014-07-17T16:05:33Z"
+ content="""
+Of course, if the repository has any git remotes, there will also be remote-tracking branches for the git-annex branch that get automatically merged back in, etc.
+"""]]
diff --git a/doc/forum/How_to_hide_broken_symlinks.mdwn b/doc/forum/How_to_hide_broken_symlinks.mdwn
new file mode 100644
index 000000000..7c92f3251
--- /dev/null
+++ b/doc/forum/How_to_hide_broken_symlinks.mdwn
@@ -0,0 +1,45 @@
+This is a method for hiding broken links using git-annex views.
+
+Each annex will need it's own name for this system to work. For this example I'll use "localdrive." After getting file content, run:
+
+ git-annex metadata --not --in=here --metadata in=localdrive . -s in-=localdrive
+ git-annex metadata --in=here --not --metadata in=localdrive . -s in+=localdrive
+ git-annex view /=*
+ git-annex vfilter in=localdrive
+
+Unused links will be hidden. Folder structures will remain the same.
+
+To switch back use:
+
+ git-annex vpop 2
+
+Because this is a lot to type, I've placed these in a bash script in the base folder (ignored with .gitignore so it isn't sent to other repos). The local repo name can be changed by editing THISREPO:
+
+ #!/bin/bash
+
+ THISREPO='localdrive'
+
+ git-annex metadata --not --in=here --metadata in=$THISREPO . -s in-=$THISREPO
+ git-annex metadata --in=here --not --metadata in=$THISREPO . -s in+=$THISREPO
+ git-annex view /=*
+ git-annex vfilter in=$THISREPO
+
+ exit 0
+
+## Hiding Broken Links in Preferred Content Repos
+
+If you have a repo with preferred content settings, this can be shortened to a single script which can be run to "refresh" the view:
+
+ #!/bin/bash
+
+ THISREPO='pcrepo'
+
+ git-annex vpop 2
+ git-annex sync
+ git-annex get --auto
+ git-annex metadata --not --in=here --metadata in=$THISREPO . -s in-=$THISREPO
+ git-annex metadata --in=here --not --metadata in=$THISREPO . -s in+=$THISREPO
+ git-annex view /=*
+ git-annex vfilter in=$THISREPO
+
+ exit 0
diff --git a/doc/forum/How_to_hide_broken_symlinks/comment_1_07a70090a9ac8f675233b08b24f55544._comment b/doc/forum/How_to_hide_broken_symlinks/comment_1_07a70090a9ac8f675233b08b24f55544._comment
new file mode 100644
index 000000000..c4f55b85b
--- /dev/null
+++ b/doc/forum/How_to_hide_broken_symlinks/comment_1_07a70090a9ac8f675233b08b24f55544._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-01-05T20:52:11Z"
+ content="""
+This works, but it's very inneficient. You're
+adding metadata (which is committed to git!) to represent location information.
+git-annex already knows about location information,
+so it could just look at it and use it to build the view.
+
+The reason I haven't implemented this yet is I'm not clear about what to do
+if a file is dropped while in a view. It seems like git-annex should update
+the view to no longer show the dropped file. But this means that any change
+to a file's presence needs to update the view, and so it entangles the
+implementation of views with a core part of git-annex. And it might be
+pretty inneficient to need to build a new view branch each time a file is
+dropped too.
+
+With your hack, the view doesn't automatically update when a file is
+dropped. Since you're using it this way, maybe you have some advice or
+thoughts about this question?
+"""]]
diff --git a/doc/forum/How_to_know_why_is_git-annex_uploading_a_file_to_a_transfer_repository.mdwn b/doc/forum/How_to_know_why_is_git-annex_uploading_a_file_to_a_transfer_repository.mdwn
new file mode 100644
index 000000000..48ad2d1d8
--- /dev/null
+++ b/doc/forum/How_to_know_why_is_git-annex_uploading_a_file_to_a_transfer_repository.mdwn
@@ -0,0 +1,3 @@
+I have git-annex set up with three clients and a transfer repository and everything was working fine, but a couple of days ago I noticed that git-annex was starting to upload to the transfer repository files that where already present on the three clients, and it hasn't stopped since. It's uploading all my files and I don't really know why.
+
+Is there a way to know why does git-annex think it needs to upload this files?
diff --git a/doc/forum/How_to_know_why_is_git-annex_uploading_a_file_to_a_transfer_repository/comment_1_17db96492e6bc0e243fc7cb62565c4c4._comment b/doc/forum/How_to_know_why_is_git-annex_uploading_a_file_to_a_transfer_repository/comment_1_17db96492e6bc0e243fc7cb62565c4c4._comment
new file mode 100644
index 000000000..6cf5541e8
--- /dev/null
+++ b/doc/forum/How_to_know_why_is_git-annex_uploading_a_file_to_a_transfer_repository/comment_1_17db96492e6bc0e243fc7cb62565c4c4._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.41"
+ subject="comment 1"
+ date="2014-03-26T17:46:30Z"
+ content="""
+A few likely reasons:
+
+* If a 4th client repository had popped up.
+* If you have configured a high number of copies, it might only be able to be met by keeping files on the transfer repository.
+* Similarly, if a repository that used to have the files has been marked as dead or deleted, more copies might be needed to make up for that.
+* For completeness, if the transfer repository accidentially had its type changed to some other kind of repository, like a full backup.
+
+You can enable debugging (start with --debug or go into the webapp's preferences) and it might say a little more, but the debugging info is not very good.
+
+The best thing is probably to look at one single file, use `git annex whereis` on the file to see what repositories contain it, and then think about how that interacts with the [[preferred_content_expression_of_the_transfer_repository|preferred_content/standard_groups]].
+"""]]
diff --git a/doc/forum/How_to_know_why_is_git-annex_uploading_a_file_to_a_transfer_repository/comment_2_e772ea0383ac690cbcbcf125258986cf._comment b/doc/forum/How_to_know_why_is_git-annex_uploading_a_file_to_a_transfer_repository/comment_2_e772ea0383ac690cbcbcf125258986cf._comment
new file mode 100644
index 000000000..27f158ea1
--- /dev/null
+++ b/doc/forum/How_to_know_why_is_git-annex_uploading_a_file_to_a_transfer_repository/comment_2_e772ea0383ac690cbcbcf125258986cf._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk9nck8WX8-ADF3Fdh5vFo4Qrw1I_bJcR8"
+ nickname="Jon Ander"
+ subject="comment 2"
+ date="2014-04-01T08:01:00Z"
+ content="""
+I thought I had already checked all does possibilities, the repositories where in the correct group and no new repositories had been added. *git annex info* didn't show anything weird and nor did *git annex whereis*. I finally found out *git annex vicfg* and I found two new repositories with no name in the repository groups. It looked something like this:
+
+ # (for )
+ group repository-hash = client
+ # (for )
+ group repository-hash = client
+
+
+No idea of how they got there, but setting both of them to unwanted solved the issue.
+"""]]
diff --git a/doc/forum/How_to_list_all_existing_metadata_types__63__.mdwn b/doc/forum/How_to_list_all_existing_metadata_types__63__.mdwn
new file mode 100644
index 000000000..43b3c1cfc
--- /dev/null
+++ b/doc/forum/How_to_list_all_existing_metadata_types__63__.mdwn
@@ -0,0 +1,15 @@
+Is there any way to list all of the existing tag and metadata field types? What I mean is, I have files tagged with several different tags, files with several metadata fields; is there any way to list all the tag and field names being used (not all the files WITH those tags)?
+
+For example, something like:
+
+ git annex metadata --listfields
+ lastchanged
+ month
+ month-lastchanged
+ year
+ year-lastchanged
+
+ git annex metadata --listtags
+ Public
+ Personal
+ Work
diff --git a/doc/forum/How_to_list_all_existing_metadata_types__63__/comment_1_a8c30f697f32a3807661a59482d79b18._comment b/doc/forum/How_to_list_all_existing_metadata_types__63__/comment_1_a8c30f697f32a3807661a59482d79b18._comment
new file mode 100644
index 000000000..3405ea4d6
--- /dev/null
+++ b/doc/forum/How_to_list_all_existing_metadata_types__63__/comment_1_a8c30f697f32a3807661a59482d79b18._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 1"
+ date="2014-10-09T19:57:54Z"
+ content="""
+git-annex doesn't currently have a way to generate those lists itself, but you could use `git annex metadata --json` to get the metadata of all files, and pipe that json into a parser to get the data you want.
+
+The output could also be parsed in non-json mode. For example, this will list the tags:
+
+ git annex metadata | grep '^ tag=' | cut -d '=' -f 2 | sort | uniq
+
+Although it's possible for metadata to contain newlines, and so parsing the json is a more reliable approach.
+
+Another nice way to see all the tags is to switch to a view of all tags:
+
+ git annex view 'tag=*'
+ ls
+"""]]
diff --git a/doc/forum/How_to_make_a_server_store_the_files.mdwn b/doc/forum/How_to_make_a_server_store_the_files.mdwn
new file mode 100644
index 000000000..1af29381f
--- /dev/null
+++ b/doc/forum/How_to_make_a_server_store_the_files.mdwn
@@ -0,0 +1 @@
+How can I make one of my servers keep a copy of the files on the server, so I can easily SFTP in and download the files. I don't want to see the .git folder, I want to see the files synced there.
diff --git a/doc/forum/How_to_make_a_server_store_the_files/comment_1_20196067475918e788afa0debc4d5ce5._comment b/doc/forum/How_to_make_a_server_store_the_files/comment_1_20196067475918e788afa0debc4d5ce5._comment
new file mode 100644
index 000000000..e65388163
--- /dev/null
+++ b/doc/forum/How_to_make_a_server_store_the_files/comment_1_20196067475918e788afa0debc4d5ce5._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-07-02T17:18:00Z"
+ content="""
+Make a non-bare git repository on the server, and make it have a git post-receive hook that runs
+\"git annex merge\"
+"""]]
diff --git a/doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__.mdwn b/doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__.mdwn
new file mode 100644
index 000000000..52a277a6e
--- /dev/null
+++ b/doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__.mdwn
@@ -0,0 +1,4 @@
+
+I'm trying to find a way of syncing data across multiple platforms, including an android device. The latter I want to sync the data so that it's on the devices SD filesystem and independent of network. As far as I can tell git-annex's client is the only one that can do this, all other self hosted storage clients I've found are only network viewers (owncloud, seafile), which is no good to me. I want to sync my ABC sheet music collection onto it, viewable independent of network access, updating changes automatically. Other parts of the data set (i.e. large collection of cannon cr2 raws), I want synced between my laptop and desktop.
+
+I've set up git annex with a central git repo and another client directory which syncs fine to the server (set as a 'full backup'). Now I want to download this whole archive onto the android device. I've set up the client on the device and it works and will upload to the server, however I can't see any way of getting it to download. Surely git-annex has the capability to pull data?
diff --git a/doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_1_c4e972c8635f2fa460cd6621f3d993c6._comment b/doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_1_c4e972c8635f2fa460cd6621f3d993c6._comment
new file mode 100644
index 000000000..d01ab8631
--- /dev/null
+++ b/doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_1_c4e972c8635f2fa460cd6621f3d993c6._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-09T20:37:49Z"
+ content="""
+Yes, it absolutely does. On Android, git-annex defaults to making
+its repository be a "source" repository, which means it doesn't try
+to get a copy of every file. You can edit the repository in the webapp,
+and select "client" and it will go ahead and download every file it can
+get. See [[preferred_content/standard_groups]].
+
+It sounds like you might want to have the android device only
+get copies of certian files, and ignore others (the raws).
+Doing that is a little more complicated; it involves writing a
+[[preferred_content]] expression. You can do this by first exiting
+the webapp, and the at the git-annex app's console:
+
+ cd /sdcard/annex
+ git annex wanted . "include=sheetmusic/* and exclude=raws/*"
+
+Then when you start the webapp back up, it will get the sheet music
+and not the raws. Adjust paths in that to suite..
+"""]]
diff --git a/doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_2_e06abc9a2f7cf055523f3d35e4eed9bc._comment b/doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_2_e06abc9a2f7cf055523f3d35e4eed9bc._comment
new file mode 100644
index 000000000..c8ba6b1f0
--- /dev/null
+++ b/doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_2_e06abc9a2f7cf055523f3d35e4eed9bc._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="robert_hickman"
+ subject="comment 2"
+ date="2015-02-10T01:40:47Z"
+ content="""
+Thank you Joey, The setting should be added to the local, with the remote set to 'full backup'?
+
+I've tried updating that setting to client but it still doesn’t seem to be working. Looking at the log, there is a line 'fatal: not a valid object name refs/remotes/adesktop_annex/annex/direct/master'. Also it appears to have attempted to sync but quit on an invalid FAT file name. Should this stop syncing altogether? Or can it just ignore/report these problem files.
+
+Also thanks for saying how to do part-downloads, I was wandering if it could do that.
+"""]]
diff --git a/doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_3_81d128be0fa60475062e795f34d920f7._comment b/doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_3_81d128be0fa60475062e795f34d920f7._comment
new file mode 100644
index 000000000..086f28e73
--- /dev/null
+++ b/doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_3_81d128be0fa60475062e795f34d920f7._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="robert_hickman"
+ subject="comment 3"
+ date="2015-02-10T01:49:39Z"
+ content="""
+I'm also seeing a duplicate parent error at the end of the log.
+
+How can I clear the log? It took quite a while to get this running so there is quite a bit of irreverent stuff in it.
+"""]]
diff --git a/doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_4_43615e11f1c6d08f5850458d540f5bac._comment b/doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_4_43615e11f1c6d08f5850458d540f5bac._comment
new file mode 100644
index 000000000..59afac274
--- /dev/null
+++ b/doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_4_43615e11f1c6d08f5850458d540f5bac._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="robert_hickman"
+ subject="comment 4"
+ date="2015-02-10T01:55:06Z"
+ content="""
+Last log content:
+
+(started...) Already up-to-date. error: duplicate parent c2aa8406693d1a3cdec09fb3be8002865cbc8d36 ignored warning: no threads support, ignoring --threads [2015-02-10 01:44:51 GMT] Pusher: Syncing with adesktop_annex warning: no threads support, ignoring --threads fatal: Unable to create '/home/annex/annex/gc.pid.lock': File exists. If no other git process is currently running, this probably means a git process crashed in this repository earlier. Make sure no other git process is running and remove the file manually to continue. To ssh://annex@git-annex-a-desktop-annex_22_annex/~/annex/ e99e004..5b09ad8 git-annex -> synced/git-annex c2aa840..f64d9e3 annex/direct/master -> synced/master error: Ref refs/heads/synced/git-annex is at 5b09ad85ff8d0ba013e4e135e386818eec0cc810 but expected e99e0040176275beb7553f89774f1b14697fccd8 error: Ref refs/heads/synced/master is at e3482dc007f109d0773cf50fd0de2ca2c213cc24 but expected c2aa8406693d1a3cdec09fb3be8002865cbc8d36 remote: error: failed to lock refs/heads/synced/git-annex remote: error: failed to lock refs/heads/synced/master To ssh://annex@git-annex-a-desktop-annex_22_annex/~/annex/ ! [remote rejected] git-annex -> synced/git-annex (failed to lock) ! [remote rejected] annex/direct/master -> synced/master (failed to lock) error: failed to push some refs to 'ssh://annex@git-annex-a-desktop-annex_22_annex/~/annex/' Already up-to-date. error: duplicate parent e3482dc007f109d0773cf50fd0de2ca2c213cc24 ignored warning: no threads support, ignoring --threads To ssh://annex@git-annex-a-desktop-annex_22_annex/~/annex/ e3482dc..e97d44a annex/direct/master -> synced/master
+"""]]
diff --git a/doc/forum/How_to_work_with_transfer_repos_manually__63__.mdwn b/doc/forum/How_to_work_with_transfer_repos_manually__63__.mdwn
new file mode 100644
index 000000000..8ec42dba4
--- /dev/null
+++ b/doc/forum/How_to_work_with_transfer_repos_manually__63__.mdwn
@@ -0,0 +1,18 @@
+Hello,
+
+I have 3 repos, desktop, external and server. desktop and server are sometimes connected, sometimes they should sync using the server. I want to do it manually without the assistent, since I love to learn it that way before I let the assistent do the work.
+
+client and desktop are "wanted standard" and "group client". server is "group transfer".
+
+desktop and server have each other and server in their remotes. server has no remotes.
+
+Is this setup fine that way?
+
+How to use it with the transfer repo?
+
+"git annex sync && git annex copy --to server --auto" after changing files?
+"git annex sync && git annex copy --from server --auto" to update?
+
+Will the on the server automatically be dropped? Or do the server needs to have a active role, i.e. called via ssh?
+
+Thanks!
diff --git a/doc/forum/How_to_work_with_transfer_repos_manually__63__/comment_1_3dec369405e6b6a4a6e5121546c03712._comment b/doc/forum/How_to_work_with_transfer_repos_manually__63__/comment_1_3dec369405e6b6a4a6e5121546c03712._comment
new file mode 100644
index 000000000..c6d3f9dae
--- /dev/null
+++ b/doc/forum/How_to_work_with_transfer_repos_manually__63__/comment_1_3dec369405e6b6a4a6e5121546c03712._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-20T15:29:41Z"
+ content="""
+If you use `git annex sync --content`, it will do a full sync,
+including uploading any necessary files to the transfer repo,
+downloading any files that are on the transfer repo, and
+dropping files from the transfer repo once they've been
+transferred to the client repos.
+"""]]
diff --git a/doc/forum/How_to_work_with_transfer_repos_manually__63__/comment_1_b8f3c09b470d99578a4a17064498dd39._comment b/doc/forum/How_to_work_with_transfer_repos_manually__63__/comment_1_b8f3c09b470d99578a4a17064498dd39._comment
new file mode 100644
index 000000000..51a473ed1
--- /dev/null
+++ b/doc/forum/How_to_work_with_transfer_repos_manually__63__/comment_1_b8f3c09b470d99578a4a17064498dd39._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk9SYh6N-JUMkYkW4aOk55zC3Vr9KonDV4"
+ nickname="Florian"
+ subject="comment 1"
+ date="2014-10-20T10:51:16Z"
+ content="""
+Ok, git annex copy --to server --auto and git annex get on the receiver did the trick.
+
+But how can I drop files from the transfer server that both clients have? I tried git annex drop . or git annex drop --auto . but it just did nothing.
+
+Thx!
+"""]]
diff --git a/doc/forum/How_to_work_with_transfer_repos_manually__63__/comment_3_be2c594bc1d162cfb1acc3a01fc284f2._comment b/doc/forum/How_to_work_with_transfer_repos_manually__63__/comment_3_be2c594bc1d162cfb1acc3a01fc284f2._comment
new file mode 100644
index 000000000..393cd4497
--- /dev/null
+++ b/doc/forum/How_to_work_with_transfer_repos_manually__63__/comment_3_be2c594bc1d162cfb1acc3a01fc284f2._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2014-10-20T18:53:31Z"
+ content="""
+git annex drop --auto --from server
+"""]]
diff --git a/doc/forum/Is_there_a_way_to_get_back_to_clean-state_after_unworking_annex_assistant_configuration_attempt__63__.mdwn b/doc/forum/Is_there_a_way_to_get_back_to_clean-state_after_unworking_annex_assistant_configuration_attempt__63__.mdwn
new file mode 100644
index 000000000..cf5a5c8be
--- /dev/null
+++ b/doc/forum/Is_there_a_way_to_get_back_to_clean-state_after_unworking_annex_assistant_configuration_attempt__63__.mdwn
@@ -0,0 +1,28 @@
+I am trying to synchronize "Linux Workstation" and "Android Tablet" with annex assistant through RSync remote and my google account.
+
+I keep failing horribly :-) I followed http://git-annex.branchable.com/assistant/remote_sharing_walkthrough/,
+but I seem to either do the steps in wrong order, because I never managed to materialize the files on my Android device.
+
+Steps went thusly:
+
+1. L) install annex on linux and run assistant and select repository dir
+2. L) add rsync remote, set folder to android_docs
+3. L) add jabber account -> I see progress bars and it seems to sync just fine
+4. A) install annex on android, specify repository
+5. A) add the "share with other devices repository"
+6. A) login with my google account
+7. A) sync fails because I am on failing wifi network
+8. A) try to add RSync remote, accidentaly specify annex folder
+9. A) realize mistake, try to remove rsync repo
+10. A) hangs on "cleaning step"
+11. A) battery dies
+12. A) charge battery, start android, move to functional wifi network
+13. A) start annex assistant, hangs in terminal (don't remember error message :-/)
+14. A) remove repo folder from android, remove annex,download apk again, reinstall
+15. A) run annex, select folder, add the "share with other devices repository", login with google account
+16. L) See fail syncing on linux "fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists."
+17. A) android seems that it finished syncig, asks for remote repository
+18. A) specify my rsync account with correct folder "android_docs"
+19. A) Could not resolve hostname git-annex-$servername-$username_$port_$directory
+
+I am starting to thing, that randomly creating and removing repositories is not the way forward, so I'd like to get to clean state and redo my setup :)
diff --git a/doc/forum/Is_there_a_way_to_get_back_to_clean-state_after_unworking_annex_assistant_configuration_attempt__63__/comment_1_d77fbbbe3a7438a1e79f175df1f69ef3._comment b/doc/forum/Is_there_a_way_to_get_back_to_clean-state_after_unworking_annex_assistant_configuration_attempt__63__/comment_1_d77fbbbe3a7438a1e79f175df1f69ef3._comment
new file mode 100644
index 000000000..8dc0692e6
--- /dev/null
+++ b/doc/forum/Is_there_a_way_to_get_back_to_clean-state_after_unworking_annex_assistant_configuration_attempt__63__/comment_1_d77fbbbe3a7438a1e79f175df1f69ef3._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawldUCypSR21BObbzC0Uf8NVd1vZnjYlXZc"
+ nickname="Adam"
+ subject="Ok, found it :-)"
+ date="2014-10-04T10:11:55Z"
+ content="""
+I think I found reliable although a bit excessive way to get back to clean state:
+
+1. stop all the running daemons
+2. on android, remove folder git-annex.home
+3. on linux, remove ~/.config/git-annex and ~/.ssh/git-annex
+4. on both attempted repositories I removed .git folder
+5. I removed everything I have stored on rsync.net
+
+Then I re-did the steps on good wifi network an plugged in to power source on both devices :-)
+It seems that important step is to wait for the annex to share the remote repo with the other device (took ~5 minutes)
+"""]]
diff --git a/doc/forum/Is_there_any_delta_handling_for_file_modifications__63__.mdwn b/doc/forum/Is_there_any_delta_handling_for_file_modifications__63__.mdwn
new file mode 100644
index 000000000..30463a496
--- /dev/null
+++ b/doc/forum/Is_there_any_delta_handling_for_file_modifications__63__.mdwn
@@ -0,0 +1,20 @@
+Hi!
+
+I have few large files, which will be slightly modified from time to time. Consider the following example:
+
+ $ git init
+ $ git annex init "somerepo"
+ $ dd if=/dev/urandom of=foo bs=50M count=1
+ $ git annex add foo
+ $ git commit -m "foo added"
+ $ git annex unlock foo
+ $ echo "modification" >> foo
+ $ git annex add foo
+ $ git -m commit "modification 1 of foo"
+ $ echo "another modification" >> foo
+ $ git annex add foo
+ $ git -m commit "modification 2 of foo"
+
+I would have expected ending up with a full copy of foo, and a delta storage for the first version and the first modification. Instead, three full-sized copies are created within the .git/annex/objects directory, even though the modifications only added a few characters.
+
+Is there any way to not always store a full copy of each file for each modification, but only a delta?
diff --git a/doc/forum/Is_there_any_delta_handling_for_file_modifications__63__/comment_1_d901ac998c9fdb844c593d782c31cc73._comment b/doc/forum/Is_there_any_delta_handling_for_file_modifications__63__/comment_1_d901ac998c9fdb844c593d782c31cc73._comment
new file mode 100644
index 000000000..bbc7df6d2
--- /dev/null
+++ b/doc/forum/Is_there_any_delta_handling_for_file_modifications__63__/comment_1_d901ac998c9fdb844c593d782c31cc73._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-04T17:53:50Z"
+ content="""
+git-annex does not do deltas. However, the bup and ddar special remotes
+can both be used to store annexed files and will automatically do delta
+compression.
+"""]]
diff --git a/doc/forum/Link_to_local_remote_instead_of_broken_link_when_possible__63__.mdwn b/doc/forum/Link_to_local_remote_instead_of_broken_link_when_possible__63__.mdwn
new file mode 100644
index 000000000..dfe8afe2c
--- /dev/null
+++ b/doc/forum/Link_to_local_remote_instead_of_broken_link_when_possible__63__.mdwn
@@ -0,0 +1,4 @@
+Hi,
+
+Suppose I have an annexed file whose content is stored on an extenal hard drive.
+When the hard drive is mounted, is it possible to have immediately access to this file without transfering it, by modifying the symlink to point to the file content on the hard drive instead of having a broken link?
diff --git a/doc/forum/Link_to_local_remote_instead_of_broken_link_when_possible__63__/comment_1_ce0464d5fca6ada9f1477831fd47ce09._comment b/doc/forum/Link_to_local_remote_instead_of_broken_link_when_possible__63__/comment_1_ce0464d5fca6ada9f1477831fd47ce09._comment
new file mode 100644
index 000000000..ee6ec690e
--- /dev/null
+++ b/doc/forum/Link_to_local_remote_instead_of_broken_link_when_possible__63__/comment_1_ce0464d5fca6ada9f1477831fd47ce09._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 1"
+ date="2014-04-02T18:25:16Z"
+ content="""
+See [[todo/union_mounting]]
+"""]]
diff --git a/doc/forum/List_annexed_files_in_chronological_order__63__.mdwn b/doc/forum/List_annexed_files_in_chronological_order__63__.mdwn
new file mode 100644
index 000000000..f4003c656
--- /dev/null
+++ b/doc/forum/List_annexed_files_in_chronological_order__63__.mdwn
@@ -0,0 +1 @@
+How can I get git-annex to list the annexed files in the order they have been added?
diff --git a/doc/forum/List_annexed_files_in_chronological_order__63__/comment_1_825c950574b3a2f083554f474c9f7b50._comment b/doc/forum/List_annexed_files_in_chronological_order__63__/comment_1_825c950574b3a2f083554f474c9f7b50._comment
new file mode 100644
index 000000000..30387e78d
--- /dev/null
+++ b/doc/forum/List_annexed_files_in_chronological_order__63__/comment_1_825c950574b3a2f083554f474c9f7b50._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-01-05T16:45:08Z"
+ content="""
+This is a general git question, not a git-annex question. That is, any
+command that can list the files in a git repo, in whatever order you want,
+will also work in a git-annex repo.
+
+You probably want to use `git log --stat`, possibly with some more options
+to control the output format.
+"""]]
diff --git a/doc/forum/Local_and_remote_in_direct_mode/comment_2_90eeb2bffdb2db8032f9a0eac630ed56._comment b/doc/forum/Local_and_remote_in_direct_mode/comment_2_90eeb2bffdb2db8032f9a0eac630ed56._comment
new file mode 100644
index 000000000..539ad1357
--- /dev/null
+++ b/doc/forum/Local_and_remote_in_direct_mode/comment_2_90eeb2bffdb2db8032f9a0eac630ed56._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Petter_petterson"
+ ip="89.160.15.173"
+ subject="comment 2"
+ date="2014-09-16T08:15:05Z"
+ content="""
+Doing git remote add B ssh://machineB:/~/annex still makes the repository on machineB a bare one, just try it and check git config -l | grep core.bare...
+"""]]
diff --git a/doc/forum/Local_and_remote_in_direct_mode/comment_3_859ec2b3a8e938073b2099fdc5781109._comment b/doc/forum/Local_and_remote_in_direct_mode/comment_3_859ec2b3a8e938073b2099fdc5781109._comment
new file mode 100644
index 000000000..f39c95c03
--- /dev/null
+++ b/doc/forum/Local_and_remote_in_direct_mode/comment_3_859ec2b3a8e938073b2099fdc5781109._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 3"
+ date="2014-09-18T17:55:21Z"
+ content="""
+Petter_petterson, I think you're mistaken about that. If you were right, that would be a massive bug in git -- nothing git-annex specific about that command after all.
+"""]]
diff --git a/doc/forum/Making_Firefox_not_dereference_symlinks_on_open.mdwn b/doc/forum/Making_Firefox_not_dereference_symlinks_on_open.mdwn
new file mode 100644
index 000000000..5680cbd02
--- /dev/null
+++ b/doc/forum/Making_Firefox_not_dereference_symlinks_on_open.mdwn
@@ -0,0 +1,3 @@
+Firefox has the nasty habit that it will force-dereference symlinks when locally opening files (i. e., opening an annexed document will cause it to be opened in .git/annex/objects/…). Since this will break relative links within HTML files, this would make Firefox pretty useless when working with a git annex containing HTML files. (Apparently this behavior is [desired](https://bugzilla.mozilla.org/show_bug.cgi?id=803999) upstream and might not be fixed.)
+
+Seems I’m not the only one who would like to work with annexed HTML files, though. On the [Debian bugtracker](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=691099), another user shared a handy shim which can be used in LD_PRELOAD and which will force Firefox to open symlinks in-place. Thought I’d share this here in case it’s of use to anyone.
diff --git a/doc/forum/Making_Firefox_not_dereference_symlinks_on_open/comment_1_a7b092f2291fa515279cf7dce23df20d._comment b/doc/forum/Making_Firefox_not_dereference_symlinks_on_open/comment_1_a7b092f2291fa515279cf7dce23df20d._comment
new file mode 100644
index 000000000..b4addb92d
--- /dev/null
+++ b/doc/forum/Making_Firefox_not_dereference_symlinks_on_open/comment_1_a7b092f2291fa515279cf7dce23df20d._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="78.48.163.229"
+ subject="comment 1"
+ date="2014-07-31T11:43:16Z"
+ content="""
+Sorry, it escaped my attention there’s a dedicated tips forum. Maybe this should be moved there.
+"""]]
diff --git a/doc/forum/Manual_commit_message_in_direct_mode.mdwn b/doc/forum/Manual_commit_message_in_direct_mode.mdwn
new file mode 100644
index 000000000..d74c36607
--- /dev/null
+++ b/doc/forum/Manual_commit_message_in_direct_mode.mdwn
@@ -0,0 +1,3 @@
+I am just returning to git-annex after some time. The last time I was using it, the [[/todo/direct_mode_guard]] was not yet in place, and I could supply my own commit messages even in a direct mode repository using `git commit`. Now that the guard is in place, is there a built-in way to provide a commit message that will be used instead of "git-annex automatic sync" by `git annex sync`?
+
+I have tried doing a manual commit with `git --git-dir=/path/to/local/.git --work-tree=/path/to/local -c core.bare=false commit -m 'Manual Commit Message'`, and it seems to work. Does this do the same thing as the part of `git annex sync` that commits any outstanding changes before syncing with remotes?
diff --git a/doc/forum/Manual_commit_message_in_direct_mode/comment_1_32f95eefec25bb127ed96248446c21b1._comment b/doc/forum/Manual_commit_message_in_direct_mode/comment_1_32f95eefec25bb127ed96248446c21b1._comment
new file mode 100644
index 000000000..bb53d4458
--- /dev/null
+++ b/doc/forum/Manual_commit_message_in_direct_mode/comment_1_32f95eefec25bb127ed96248446c21b1._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 1"
+ date="2014-05-27T16:10:29Z"
+ content="""
+Yes, you can use the `-c core.bare=false` trick to bypass the direct mode guard if you want to. Just bear in mind that it's very easy to shoot yourself in the foot by passing -a or filenames to git commit, which then checks the whole large file into git..
+"""]]
diff --git a/doc/forum/Manual_commit_message_in_direct_mode/comment_2_bf1d10067379c802ac5020d8becd6d35._comment b/doc/forum/Manual_commit_message_in_direct_mode/comment_2_bf1d10067379c802ac5020d8becd6d35._comment
new file mode 100644
index 000000000..facb5ce33
--- /dev/null
+++ b/doc/forum/Manual_commit_message_in_direct_mode/comment_2_bf1d10067379c802ac5020d8becd6d35._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnxvt4mc32O0ctvPGhhII_ZKsHUiaD2o7I"
+ nickname="William"
+ subject="comment 2"
+ date="2014-05-28T04:40:27Z"
+ content="""
+Joey, thanks for clarifying that. I learned about the perils of using regular git commands in direct mode before the guard was implemented, so I will use with care. Specifying a commit message is really the only case where I am tempted to bypass the the `git annex` subcommands in direct mode.
+
+
+"""]]
diff --git a/doc/forum/MegaAnnex_not_working..mdwn b/doc/forum/MegaAnnex_not_working..mdwn
new file mode 100644
index 000000000..3eff4b741
--- /dev/null
+++ b/doc/forum/MegaAnnex_not_working..mdwn
@@ -0,0 +1,32 @@
+When copying to a megaannex remote, it hangs after a while, and I get this:
+
+ copy Boomarks/Android (gpg) Traceback (most recent call last):
+ File "/usr/local/bin//git-annex-remote-mega", line 511, in <module>
+ common.startRemote()
+ File "/home/zack/megaannex/lib/CommonFunctions.py", line 557, in startRemote
+ sys.modules["__main__"].checkpresent(line)
+ File "/usr/local/bin//git-annex-remote-mega", line 483, in checkpresent
+ folder = setFolder(conf["folder"], common.ask("DIRHASH " + line[1]))
+ File "/usr/local/bin//git-annex-remote-mega", line 401, in setFolder
+ folder = createFolder(conf["folder"], 2)
+ File "/usr/local/bin//git-annex-remote-mega", line 378, in createFolder
+ res = m.create_folder(subject, folder)
+ File "/usr/lib/python2.7/site-packages/mega/mega.py", line 617, in create_folder
+ 'i': self.request_id})
+ File "/usr/lib/python2.7/site-packages/mega/mega.py", line 110, in _api_request
+ timeout=self.timeout)
+ File "/usr/lib/python2.7/site-packages/requests/api.py", line 88, in post
+ return request('post', url, data=data, **kwargs)
+ File "/usr/lib/python2.7/site-packages/requests/api.py", line 44, in request
+ return session.request(method=method, url=url, **kwargs)
+ File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 354, in request
+ resp = self.send(prep, **send_kwargs)
+ File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 460, in send
+ r = adapter.send(request, **kwargs)
+ File "/usr/lib/python2.7/site-packages/requests/adapters.py", line 250, in send
+ raise SSLError(e)
+ requests.exceptions.SSLError: The read operation timed out
+ (external special remote protocol error, unexpectedly received "" (unable to parse command)) failed
+
+
+Any help would be appreciated, thanks!
diff --git a/doc/forum/MegaAnnex_not_working./comment_1_5aa3fd366d4c78ca79bb58005a49791c._comment b/doc/forum/MegaAnnex_not_working./comment_1_5aa3fd366d4c78ca79bb58005a49791c._comment
new file mode 100644
index 000000000..c2e7353db
--- /dev/null
+++ b/doc/forum/MegaAnnex_not_working./comment_1_5aa3fd366d4c78ca79bb58005a49791c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-11T19:42:24Z"
+ content="""
+This looks to me like the connection to Mega fails, so either they have a server down, or a network problem, or perhaps the API that the megaannex remote was relying on might have been removed..
+"""]]
diff --git a/doc/forum/MegaAnnex_not_working./comment_2_f3eaf1ee06ebac951514d865f298f9d3._comment b/doc/forum/MegaAnnex_not_working./comment_2_f3eaf1ee06ebac951514d865f298f9d3._comment
new file mode 100644
index 000000000..e9fd01f14
--- /dev/null
+++ b/doc/forum/MegaAnnex_not_working./comment_2_f3eaf1ee06ebac951514d865f298f9d3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmqaNwDQ367zpW6cIRviLz6zJZZFODgoEI"
+ nickname="Zack"
+ subject="comment 2"
+ date="2014-07-19T12:48:08Z"
+ content="""
+I believe it may have been removed, unfortunately. :(
+"""]]
diff --git a/doc/forum/Modification_time_of_files_retained_in_synchronized_remote_copies__63__.mdwn b/doc/forum/Modification_time_of_files_retained_in_synchronized_remote_copies__63__.mdwn
new file mode 100644
index 000000000..3cd519a6d
--- /dev/null
+++ b/doc/forum/Modification_time_of_files_retained_in_synchronized_remote_copies__63__.mdwn
@@ -0,0 +1,5 @@
+I've noticed how, when files are synchronized/transferred from one repository (annex?) to another by the assistant, the files in the «remote» repository do no retain the modification time of the original files.
+From what I know git does not save file-specific metadata (ownership/timestamps/etc.).
+Since I've just started using git-annex, and I'd very much like for backup copies to retain the mtime of the originals, I would like to ask whether I am experiencing a malfunction or whether this is expected behaviour.
+
+Regards
diff --git a/doc/forum/Modification_time_of_files_retained_in_synchronized_remote_copies__63__/comment_1_2b13584998108af0522b898c5d396ba4._comment b/doc/forum/Modification_time_of_files_retained_in_synchronized_remote_copies__63__/comment_1_2b13584998108af0522b898c5d396ba4._comment
new file mode 100644
index 000000000..1d5bf00a5
--- /dev/null
+++ b/doc/forum/Modification_time_of_files_retained_in_synchronized_remote_copies__63__/comment_1_2b13584998108af0522b898c5d396ba4._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmK0703vNSIQsP1mGf-4MAPnsBZiSc6yVo"
+ nickname="Emre"
+ subject="comment 1"
+ date="2014-09-19T21:31:23Z"
+ content="""
+I just saw your post and agree with you. Maybe we shall create a bug report. I would also need to keep my files in original timestamps. (may not mind about permissions though).
+"""]]
diff --git a/doc/forum/Move_unsynced_file_in_direct_mode.mdwn b/doc/forum/Move_unsynced_file_in_direct_mode.mdwn
new file mode 100644
index 000000000..015b5f58e
--- /dev/null
+++ b/doc/forum/Move_unsynced_file_in_direct_mode.mdwn
@@ -0,0 +1,97 @@
+When I rename unsynced files in a direct mode repo, the original symlink gets removed from git, but the new symlink doesn't get added back by autocommit or by explicitly using `git annex add`.
+
+First, I create a file in a git-annex repo:
+
+ $ mkdir annex1
+ $ cd annex1
+ $ git init
+ Initialized empty Git repository in /home/cwarden/annex1/.git/
+ $ git annex init
+ init ok
+ (Recording state in git...)
+ $ echo test > test1
+ $ git annex add test1
+ add test1 ok
+ (Recording state in git...)
+ $ git annex sync
+ commit ok
+ $ ls -l
+ total 4
+ lrwxrwxrwx 1 cwarden cwarden 178 Sep 12 10:14 test1 -> .git/annex/objects/w8/pv/SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2/SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2
+ $ cat test1
+ test
+
+Now, I clone the repo and enable autocommit and direct mode in the second repo:
+
+ $ cd ..
+ $ git clone annex1 annex2
+ Cloning into 'annex2'...
+ done.
+ $ cd annex2
+ $ git config annex.autocommit true
+ $ git annex direct
+ commit
+ On branch master
+ Your branch is up-to-date with 'origin/master'.
+
+ nothing to commit, working directory clean
+ ok
+ direct ok
+
+I drop the file, then rename it:
+
+ $ git annex drop test1
+ (merging origin/git-annex into git-annex...)
+ (Recording state in git...)
+ $ mv test1 test2
+ $ ls -l
+ total 4
+ lrwxrwxrwx 1 cwarden cwarden 178 Sep 12 10:14 test2 -> .git/annex/objects/w8/pv/SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2/SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2
+ $ git annex sync
+ commit (Recording state in git...)
+ ok
+ pull origin
+ ok
+ push origin
+ Counting objects: 6, done.
+ Delta compression using up to 4 threads.
+ Compressing objects: 100% (5/5), done.
+ Writing objects: 100% (6/6), 674 bytes | 0 bytes/s, done.
+ Total 6 (delta 1), reused 0 (delta 0)
+ To /home/cwarden/annex1
+ 2772756..ffcb7a1 annex/direct/master -> synced/master
+ * [new branch] git-annex -> synced/git-annex
+ ok
+ (Recording state in git...)
+
+Now, I want to get the renamed file:
+
+ $ git annex get test2
+ $ ls -l
+ total 4
+ lrwxrwxrwx 1 cwarden cwarden 178 Sep 12 10:14 test2 -> .git/annex/objects/w8/pv/SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2/SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2
+ $ cat test2
+ cat: test2: No such file or directory
+
+Explicitly adding test2 doesn't work:
+
+ $ git annex add test2
+ $ git annex get test2
+ $ cat test2
+ cat: test2: No such file or directory
+
+`git annex fsck` doesn't help:
+
+ $ git annex fsck
+ $ cat test2
+ cat: test2: No such file or directory
+
+The only way I've found to get the renamed file back into git is to use `core.bare=false`, but the [documentation](http://git-annex.branchable.com/direct_mode/) says that "there should be no good reason to need to do this, ever".
+
+ $ git -c core.bare=false add test2
+ $ git -c core.bare=false commit -m'force renamed file back into git'
+ $ git annex get test2
+ $ cat test2
+ test
+
+Is there a better solution?
diff --git a/doc/forum/Move_unsynced_file_in_direct_mode/comment_1_12a797cba753168dfde9e6339c00f481._comment b/doc/forum/Move_unsynced_file_in_direct_mode/comment_1_12a797cba753168dfde9e6339c00f481._comment
new file mode 100644
index 000000000..73a164da2
--- /dev/null
+++ b/doc/forum/Move_unsynced_file_in_direct_mode/comment_1_12a797cba753168dfde9e6339c00f481._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-09-18T18:27:37Z"
+ content="""
+Well, you can run `git annex assistant` or `git annex watch` and it will automatically notice the moved file and commit it. I think this is what you were trying to do when you set annex.autocommit to true (which is the default so accomplished nothing).
+
+But your example does show a bug: `git annex add` should add the dangling symlink to git in direct mode, as it already does in indirect mode. Fixed in [[!commit 44e7d6e1fe6e13091adbd572f66412e3601df3c5]].
+"""]]
diff --git a/doc/forum/Move_unsynced_file_in_direct_mode/comment_2_f3aec24668c35780a033f2b035df10ee._comment b/doc/forum/Move_unsynced_file_in_direct_mode/comment_2_f3aec24668c35780a033f2b035df10ee._comment
new file mode 100644
index 000000000..971e70cdc
--- /dev/null
+++ b/doc/forum/Move_unsynced_file_in_direct_mode/comment_2_f3aec24668c35780a033f2b035df10ee._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="xn"
+ ip="71.59.214.243"
+ subject="comment 2"
+ date="2014-09-18T19:03:30Z"
+ content="""
+Thanks for tracking down that bug and for clearing up my confusion about `annex.autocommit`, Joey.
+
+I didn't realize `annex.autocommit=true` is only used by `git annex assistant` and `git annex watch`. I thought that running `git annex sync` with `annex.autocommit=true` would also commit the change.
+
+A few small changes to `git-annex(1)` could clarify:
+
+ sync [remote ...]
+ ...
+ The sync process involves first committing all local *staged* changes...
+
+ annex.autocommit
+ Set to false to prevent git-annex assistant and *git-annex watch* from automatically committing changes to files in the repository.
+
+"""]]
diff --git a/doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__.mdwn b/doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__.mdwn
new file mode 100644
index 000000000..3584569b6
--- /dev/null
+++ b/doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__.mdwn
@@ -0,0 +1,23 @@
+I've two huge annex repos (about 100G) with all my photos.
+One is on my laptop and it uses indirect mode; the other one is on my NAS and I mount it into a CIFS folder, then it uses direct mode because of the crippled fs.
+Each repo is remote of the other one. The NAS repo belongs to backup group with the standard preferred content.
+I changed about 1000 photos in my PC repo (mainly renamed them) and I wanted to sync changes to the NAS repo, so I went through this sequence:
+
+* "git annex add" and "git annex sync" on my PC => OK;
+
+* "git annex sync" on the NAS repo => it started copying all the content BUT I stopped it because I had not enough time to wait at that very moment;
+
+* again "git anne sync" on the NAS repo => I had more time to wait BUT it didn't resume the copy from the PC repo, it just said something like "all done, nothing to do"
+
+* I checked that several files were missing on the NAS that I had modified/renamed on the PC repo so I did "git annex add" again on the PC => nothing new to add, nothing to do;
+
+* I did again "git annex sync" on the PC repo => it deleted also from my PC repo all the photos that were also missing on the NAS repo;
+
+* I've also checked for unused files on the PC repo and it now gives about 1000 files.
+
+So here are my questions:
+
+1. where was I wrong?
+
+2. can I restore my photos on my PC repo (which uses indirect mode) ?
+
diff --git a/doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_1_af0ed0730645c1e3c9a4946acd48c18a._comment b/doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_1_af0ed0730645c1e3c9a4946acd48c18a._comment
new file mode 100644
index 000000000..8f2905c6f
--- /dev/null
+++ b/doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_1_af0ed0730645c1e3c9a4946acd48c18a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-06-06T18:18:36Z"
+ content="""
+It's not clear from your description when the files got deleted or why, but you can use `git log --stat` to find out. Then you can `git revert` the problem commit.
+"""]]
diff --git a/doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_2_12f3c2bb2458b69e6355c8f94bab868f._comment b/doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_2_12f3c2bb2458b69e6355c8f94bab868f._comment
new file mode 100644
index 000000000..4c30d0f4c
--- /dev/null
+++ b/doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_2_12f3c2bb2458b69e6355c8f94bab868f._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="feulif"
+ ip="151.27.145.89"
+ subject="Thank you"
+ date="2014-06-08T08:36:40Z"
+ content="""
+Thank you so much!
+That solved my problem and restored my precious photos!
+
+Now I see there are similar issues in the forum already, but I was searching for the bad keywords (like \"restore unused\") and I could not find them.
+
+By the way, your software is outstanding.
+"""]]
diff --git a/doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_3_b233b4daac32c452776e1e3d9a29f2cc._comment b/doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_3_b233b4daac32c452776e1e3d9a29f2cc._comment
new file mode 100644
index 000000000..faec248bf
--- /dev/null
+++ b/doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_3_b233b4daac32c452776e1e3d9a29f2cc._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 3"
+ date="2014-06-09T19:44:49Z"
+ content="""
+What did the bad commit that you ended up reverting look like?
+
+It seems to me that something must have went wrong due to your interrupting the first sync on the NAS. Perhaps this left it with newly added files not yet moved into place in the tree. So the next time you synced, this would cause it to see that the files seemed to have been deleted and make a commit reflecting that.
+
+This, then is a bug in how direct mode handles merges. [[bugs/direct_mode_merge_interrupt]]
+"""]]
diff --git a/doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_4_8e079e92929dcfdf19f6adec16f800e5._comment b/doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_4_8e079e92929dcfdf19f6adec16f800e5._comment
new file mode 100644
index 000000000..0e079a694
--- /dev/null
+++ b/doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_4_8e079e92929dcfdf19f6adec16f800e5._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="feulif"
+ ip="151.27.145.89"
+ subject="comment 4"
+ date="2014-06-10T18:43:34Z"
+ content="""
+Here is the log of the \"bad\" commit:
+
+ commit 38e0e1ef009b820f008b46f53c24d9835ca0f9a6
+ Author: me <me@myself.com>
+ Date: Wed Jun 4 00:04:37 2014 +0200
+
+ git-annex automatic sync
+
+ folder/subfolder1/subfolder2/photo.jpg | 1 +
+ [...]
+ [...]
+ [...]
+ folder/subfolder1/subfolderN/video.MOV | 1 +
+ 2266 files changed, 2266 insertions(+)
+
+I stopped (ctrl-c) when it was adding the video.
+"""]]
diff --git a/doc/forum/OSX_Finder_extension.mdwn b/doc/forum/OSX_Finder_extension.mdwn
new file mode 100644
index 000000000..2b0e6c374
--- /dev/null
+++ b/doc/forum/OSX_Finder_extension.mdwn
@@ -0,0 +1,5 @@
+OSX 10.10 / Yosemite introduces the [Finder Sync extension][] which allows any app / extension to display informational badges in Finder. This could be used to indicate the sync status (there are some stories which claim the extensions got added because Dropbox used an undocumented API previously). I had a quick look and it would not be too difficult to implement a simple extension which reads the metadata from the `.git/annex` directory and shows a sync / transfer status icon.
+
+Just wanted to throw the idea out there, I might even start building it.
+
+[Finder Sync Extension]: https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/Finder.html
diff --git a/doc/forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set/comment_1_a136ff877389f0930c066ba118edd9fd._comment b/doc/forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set/comment_1_a136ff877389f0930c066ba118edd9fd._comment
new file mode 100644
index 000000000..0cbf79c8d
--- /dev/null
+++ b/doc/forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set/comment_1_a136ff877389f0930c066ba118edd9fd._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.114"
+ subject="comment 1"
+ date="2014-04-24T18:08:00Z"
+ content="""
+If you use git-annex from the OSX .dmg, it will set up a ~/.ssh/git-annex-shell, which is the only command that is needed when git-annex is using an OSX server as a remote. Since version 5.20140421, the webapp will also use ~/.ssh/git-annex-wrapper, which the .dmg also sets up, to run some commands like git.
+
+The upshot is that this should not affect git-annex when installed from the .dmg on the OSX server. If you build git-annex from source yourself, you do need to make sure that it and git end up in PATH.
+"""]]
diff --git a/doc/forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set/comment_2_5fcc52a62770fb932a4a2101f5badbc0._comment b/doc/forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set/comment_2_5fcc52a62770fb932a4a2101f5badbc0._comment
new file mode 100644
index 000000000..bb8f3ee8d
--- /dev/null
+++ b/doc/forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set/comment_2_5fcc52a62770fb932a4a2101f5badbc0._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="ewen"
+ subject="Linux to OS X ~/.ssh/git-annex-shell"
+ date="2014-11-15T00:02:02Z"
+ content="""
+I installed git-annex on OS/X 10.9 (Mavericks) from the DMG file (the 10.10 DMG file from 2014-11-11, since there was no longer one linked for Mavericks -- it does seem to work locally on 10.9). Separately I installed git-annex 5.20141024~bpo70+1 on Debian Wheezy, from Backports. I created a git-annex on the OS X system, and was then trying to set up another git-annex of that on the Linux system, initiated from the Linux system. After some ssh tunnel magic (due to a firewall stopping git-annex's dream that everything can ssh into everything else without problems), I was able to \"git clone\" and \"git annex init\" on the Linux system. But ran into problems trying to initiate a \"git annex sync\" from the Linux end.
+
+In particular I got this \"bash: git-annex-shell: command not found\" report, despite the fact that the OS X side *does* have \"~/.ssh/git-annex-shell\" (apparently set up when I ran git-annex on the OS X side first), and on the OS/X side running \"~/.ssh/git-annex-shell\" does work (well it says \"bad parameters\" and gives a list of commands).
+
+It's not clear to me how git-annex is expecting that ~/.ssh/git-annex-shell will end up being found by the ssh connection initiated from the Linux side. AFAICT from \"git annex sync --debug REMOTE\" (and strace), all that the client end is running is a bare \"git-annex-shell\", so (a) it'd only be searching the path (as per original post), (b) it shouldn't be affected by the different expansion of ~ on Linux and OS/X (/home/ewen and /Users/ewen respectively -- the OS defaults), and (c) AFAICT nothing is adding ~/.ssh to the PATH. Maybe running something more from the DMG than just the command line \"git-annex\" sets something else up, which I'm expected to set up by hand, that makes \"~/.ssh/git-annex-shell\" be found?
+
+I ended up working around it by noticing that the ssh shell was reading ~/.bashrc (which adds some of my local directories to the PATH), so I was able to add yet another helper script in that directory (~/.bin/, in my case). Beware it does have to be a direct symlink to the directory with the rest of the git-annex files though, not via another symlink, because the helper scripts only do one level of readlink. After that it seems to work.
+
+(Possibly these \"make this command available on the PATH at this time\" dependencies could stand to be better documented on the OS X install page?)
+
+Ewen
+"""]]
diff --git a/doc/forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set/comment_3_521f34c340ad54cef6458a8b6cfff8a9._comment b/doc/forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set/comment_3_521f34c340ad54cef6458a8b6cfff8a9._comment
new file mode 100644
index 000000000..088aa7551
--- /dev/null
+++ b/doc/forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set/comment_3_521f34c340ad54cef6458a8b6cfff8a9._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2014-12-02T17:42:36Z"
+ content="""
+When the git-annex webapp is used to add a ssh repository, it
+installs a ssh key in `~/.ssh/authorized_keys`, which makes
+ssh run `~/.ssh/git-annex-shell` if necessary.
+
+This is not done for you if you set up a ssh remote using git at the
+commend line. In that case, arranging for git-annex-shell to be in PATH
+on the remote host somehow is left up to you.
+"""]]
diff --git a/doc/forum/Performance_implications_of_triply_nested_objects_directory.mdwn b/doc/forum/Performance_implications_of_triply_nested_objects_directory.mdwn
new file mode 100644
index 000000000..7a6e548b1
--- /dev/null
+++ b/doc/forum/Performance_implications_of_triply_nested_objects_directory.mdwn
@@ -0,0 +1,23 @@
+Posting this in case anyone might find it interesting.
+
+I had noticed impractical and abysmally slow performance when tracking a huge number of files (150k) in a git-annex. In direct mode, the repo was outright unusable, but even in indirect mode, many operations where painfully slow; even operations beyond the well-known offender, «git annex findunused», e.g., the seemingly harmless «git annex info».
+
+I also noticed that the performance was hugely improved on my (otherwise comparable) machine running btrfs, and I wondered how this might be. From previous benchmarks, I had gained the impression that ext4 and btrfs are on par, performance-wise, and you choose btrfs for the features rather than performance. Now, after trying to update my back-ups via rsync, I have had an idea how the contrast between the two machines might might be accounted for. Specifically, I noted that, after converting my 150k folder into a git-annex repo, ascertaining that the back-up is current via rsync would take ~15 minutes, where it used to take mere seconds before. This could then only be due to the demands on directory traversal introduced by the annex-layout.
+
+Accordingly, I wanted to see whether the traversal would be something that explains the difference in performance between btrfs and ext4, so I ran a tiny benchmark, traversing the .git folder on my home drive (ext4, SATA) and the backup drive (btrfs, USB3), and I was astounded by the difference:
+
+zardoz [ /mnt/bak/m-annex ]$ time tree .git >/dev/null
+
+tree .git >/dev/null 14,23s user 2,78s system 24% cpu 1:09,69 total
+
+zardoz [ ~/m-annex ]$ time tree .git >/dev/null
+
+tree .git >/dev/null 26,40s user 0,96s system 1% cpu 23:37,94 total
+
+While running, I peeked into the io using iotop, and observed around 500K/s during traversal on ext4 vs. 5M/s on btrfs.
+
+While I was aquainted with the dogma that file-systems hate to have a single folder with a bazillion files, sources on the net seem to indicate that having lots and lots of sparse folders is even worse, and given the one-file-per-folder structure of the annex objects store, this would then potentially explain the heavy thrashing on ext4.
+
+Something I am wondering now: Which operations in git-annex (or plain git) incite that sort of directory traversal? One candidate which occurred to me is «git annex unused», and the differences in performance between ext4 and btrfs are on the same order as in the above benchmark. Originally, Joey related somewhere that the search in «unused» is expensive; but if traversal is involved, it could actually be that this has even more impact than searching git history.
+
+In any case, if anyone wants to track a very large number of files via git-annex, ext4 seems to be not the ideal file-system for this.
diff --git a/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_1_068a8f120d188b8fa5d3e5b687fd02dc._comment b/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_1_068a8f120d188b8fa5d3e5b687fd02dc._comment
new file mode 100644
index 000000000..0a368b3a3
--- /dev/null
+++ b/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_1_068a8f120d188b8fa5d3e5b687fd02dc._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-14T18:33:25Z"
+ content="""
+I'm afraid that you're comparing apples (SATA drives) and oranges (USB drives).
+"""]]
diff --git a/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_2_cc0f5be21fd1523bdddc7bcf6ff04435._comment b/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_2_cc0f5be21fd1523bdddc7bcf6ff04435._comment
new file mode 100644
index 000000000..e47565d67
--- /dev/null
+++ b/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_2_cc0f5be21fd1523bdddc7bcf6ff04435._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="78.49.247.112"
+ subject="comment 2"
+ date="2014-07-14T19:34:31Z"
+ content="""
+I suppose you misread something. Note that the 60s traversal was on the (slower) /external/ drive, and the 24minute traversal on the (faster) internal one, so if anything, the results become more pronounced because of the comparison.
+
+In the meantime I converted the internal drive to btrfs, and the traversal time on SATA is now 30s, as opposed to the >20min on ext.
+"""]]
diff --git a/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_3_1133795276371c86cdd52b25a8b20c52._comment b/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_3_1133795276371c86cdd52b25a8b20c52._comment
new file mode 100644
index 000000000..6b875932d
--- /dev/null
+++ b/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_3_1133795276371c86cdd52b25a8b20c52._comment
@@ -0,0 +1,28 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="134.147.14.84"
+ subject="comment 3"
+ date="2014-07-15T07:29:37Z"
+ content="""
+The ext-community seems to
+[corroborate](http://www.redhat.com/archives/ext3-users/2013-March/msg00007.html)
+the observation that having many sparse directories scales extremely
+poorly, though this still leaves me curious as to how btrfs deals
+with.
+
+One thing I read is that btrfs stores a secondary index on directories
+and uses this index in the readdir() syscall; this secondary index
+works in such a way that inodes are likely to be traversed in
+sequential on-disk order, while for ext, the readdir() results will be
+ordered by inode number, yielding a random access pattern.
+
+I must confess I’ve always liked to think of the file-system as a
+cheap data-base, but apparently that is not such a good idea (i. e.,
+it’s not cheap at all, in the long run). On the other hand (supposing
+that operations like «git annex unused» do indeed work by traversing
+the object tree), it probably wouldn’t be easy coming up with a scheme
+that scales better. For traversal-bound operations, one might maintain
+a database, but it would be a hassle to ensure that this in always in
+sync with the file-system.
+
+"""]]
diff --git a/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_4_4e44289e6913797844e103f9cdf4c5a2._comment b/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_4_4e44289e6913797844e103f9cdf4c5a2._comment
new file mode 100644
index 000000000..ea0b82f71
--- /dev/null
+++ b/doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_4_4e44289e6913797844e103f9cdf4c5a2._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 4"
+ date="2014-07-21T17:19:42Z"
+ content="""
+<https://microca.st/clacke/note/kKMqYM4DQtOPzMe065oHiA> suggests using -I 512 -O inline_data (\"bignode\")
+"""]]
diff --git a/doc/forum/Preserving_extended_attributes.mdwn b/doc/forum/Preserving_extended_attributes.mdwn
new file mode 100644
index 000000000..5533daeea
--- /dev/null
+++ b/doc/forum/Preserving_extended_attributes.mdwn
@@ -0,0 +1,5 @@
+Hey,
+
+I was wondering if it is currently possible to let the assistant (or git-annex in general) preserve extended attributes. I didn't find any options hinting at this, although it should be possible at least in theory by using the metadata system of git-annex...
+
+Considering that some applications use extended attributes to store custom meta data (like tags etc.), I think it would be valuable to have such an option...
diff --git a/doc/forum/Problems_using_submodules_with_git-annex__63__/comment_2_26f6581b5969eb2cb77495c40de88951._comment b/doc/forum/Problems_using_submodules_with_git-annex__63__/comment_2_26f6581b5969eb2cb77495c40de88951._comment
new file mode 100644
index 000000000..a9e939834
--- /dev/null
+++ b/doc/forum/Problems_using_submodules_with_git-annex__63__/comment_2_26f6581b5969eb2cb77495c40de88951._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://mildred.fr/"
+ nickname="Mildred"
+ subject="submodules with git-annex in direct mode"
+ date="2014-04-27T14:05:20Z"
+ content="""
+Does this work well even with direct mode ?
+How is this managed in direct mode ?
+
+Coming back from direct mode to indirect mode (required when I want to run git commands) I found that the .gitmodules file was an annex symlink (to .git/annex/objects/...). I just recovered from corrupt repository and may have made mistakes, but is this a risk under normal curcumstances ?
+"""]]
diff --git a/doc/forum/Problems_when_cloning_a_repository.mdwn b/doc/forum/Problems_when_cloning_a_repository.mdwn
new file mode 100644
index 000000000..374aca26e
--- /dev/null
+++ b/doc/forum/Problems_when_cloning_a_repository.mdwn
@@ -0,0 +1,22 @@
+Hi,
+
+On a linux server I created a (direct) git annex repository:
+
+ $ ls -a
+ . .. apps attic devel games .git portable tools
+
+On a Windows client, I want to check it out:
+
+ me@client /cygdrive/c/tmp
+ $ git clone ssh://me@server/srv/data/bin bin
+ Cloning into 'bin'...
+
+But git annex checks only half of it out :-(
+
+ me@client /cygdrive/c/tmp
+ $ ls -a bin
+ . .. .git attic games
+
+Any ideas? Sorry, I am very new to git-annex (and git).
+
+Thanks!
diff --git a/doc/forum/Problems_when_cloning_a_repository/comment_1_191c091c384d8d97d24f8a77e8ff90ee._comment b/doc/forum/Problems_when_cloning_a_repository/comment_1_191c091c384d8d97d24f8a77e8ff90ee._comment
new file mode 100644
index 000000000..bb0d294c7
--- /dev/null
+++ b/doc/forum/Problems_when_cloning_a_repository/comment_1_191c091c384d8d97d24f8a77e8ff90ee._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="Xyem"
+ ip="178.79.137.64"
+ subject="comment 1"
+ date="2014-05-08T12:50:58Z"
+ content="""
+What files are in the directories that are missing?
+Are they committed into the repository?
+"""]]
diff --git a/doc/forum/Problems_when_cloning_a_repository/comment_2_74ccbb09677444478074e9eab405fbaf._comment b/doc/forum/Problems_when_cloning_a_repository/comment_2_74ccbb09677444478074e9eab405fbaf._comment
new file mode 100644
index 000000000..5f4ee08f7
--- /dev/null
+++ b/doc/forum/Problems_when_cloning_a_repository/comment_2_74ccbb09677444478074e9eab405fbaf._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="171.67.174.99"
+ subject="comment 2"
+ date="2014-05-09T01:02:22Z"
+ content="""
+Thanks.
+
+As you can see everything except attic and games is missing.
+
+As far as I understand, yes, they are committed. How can I check?
+On the server I issued
+ git annex add .
+
+\"git annex status\" does not output anything. Remember: I use direct mode.
+"""]]
diff --git a/doc/forum/Problems_when_cloning_a_repository/comment_3_3436e26dd9fe07233a070d4e95d81cdf._comment b/doc/forum/Problems_when_cloning_a_repository/comment_3_3436e26dd9fe07233a070d4e95d81cdf._comment
new file mode 100644
index 000000000..65470841a
--- /dev/null
+++ b/doc/forum/Problems_when_cloning_a_repository/comment_3_3436e26dd9fe07233a070d4e95d81cdf._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="171.67.174.99"
+ subject="comment 3"
+ date="2014-05-09T06:06:54Z"
+ content="""
+Finally I found it: https://git-annex.branchable.com/bugs/assistant_doesn__39__t_sync_empty_directories/
+
+Empty directories.
+
+Wow! I was not aware that git is actually a step BACKWARDS in this regard :-(
+
+That was already a big problem half a century ago in CVS, finally fixed in SVN and git re-introduces the issue? Sad :-(
+
+
+"""]]
diff --git a/doc/forum/Pusher_crashed__44___attempt_to_repair_hangs__44___broken_symlinks.mdwn b/doc/forum/Pusher_crashed__44___attempt_to_repair_hangs__44___broken_symlinks.mdwn
new file mode 100644
index 000000000..4c1bcc129
--- /dev/null
+++ b/doc/forum/Pusher_crashed__44___attempt_to_repair_hangs__44___broken_symlinks.mdwn
@@ -0,0 +1,77 @@
+Sorry that I put all this in the same thread but I don't know what happened and how it is related.
+
+I have just a simple setup: git-annex client with assistant (Windows 7) and on a server (Debian, no assistant).
+
+Suddenly weird things started to happen
+
+1.) On Windows, when I start the assistant, it writes "Attempting to repair THINKTANK:c:\data\annex [here]" but it runs forever and never stops
+
+2.) On Windows, when I get "Pusher crashed: failed to read sha from git write-tree [Restart Thread]". When I click "Restart Thread" nothing happens but the message from (1) persists.
+
+3.) When I run "git annex fsck" on the client I get thousands of messages like
+
+ fsck Fotos/2014/DSC_0303.JPG
+ ** No known copies exist of Fotos/2014/DSC_0303.JPG
+ failed
+
+Here the same:
+
+ $ git annex whereis "Fotos/2014/DSC_0303.JPG"
+ whereis Fotos/2014/DSC_0303.JPG (0 copies) failed
+ git-annex: whereis: 1 failed
+
+4.) When I do "git annex status" a whole bunch of files are displayed with "M" (modified) although they are not, they are not even checked out and should be only at the server ...
+
+5.) On the server, files that should ALWAYS be on the server (configured as "full backup") suddenly wiped data that was also made available on the client. The symlinks are dangling symlinks and contain just binary data:
+
+ ls -l
+ lrwxrwxrwx 1 4 Aug 2 08:55 DSC_0011.JPG -> ????
+ lrwxrwxrwx 1 4 Aug 2 08:55 DSC_0012.JPG -> ????
+ lrwxrwxrwx 1 4 Aug 2 08:55 DSC_0013.JPG -> ????
+ lrwxrwxrwx 1 4 Aug 2 08:55 DSC_0014.JPG -> ????
+ lrwxrwxrwx 1 4 Aug 2 08:55 DSC_0015.JPG -> ????
+ lrwxrwxrwx 1 4 Aug 2 08:55 DSC_0018.JPG -> ????
+ lrwxrwxrwx 1 4 Aug 2 08:55 DSC_0019.JPG -> ????
+ lrwxrwxrwx 1 4 Aug 2 08:55 DSC_0020.JPG -> ????
+
+6.) "git annex fsck" on the server is still successful, returning no errors!
+
+7.) Manually executing "git annex sync --content" on both sides does not change anything and does not output any error messages.
+
+8.) On the client:
+
+ $ git annex group here
+ error: invalid object 100644 3b3767ae65e5c6d2e3835af3d55fbf2f9e145c8b for '000/0e6/SHA256Es193806--b6d4689fba8e15acd6497f9a7e584c93ea0c8c2199ad32eadac79d59b9f49814.JPG.log'
+ fatal: git-write-tree: error building trees
+ manual
+ (Recording state in git...)
+ git-annex: failed to read sha from git write-tree
+
+ $ git annex wanted here
+ error: invalid object 100644 3b3767ae65e5c6d2e3835af3d55fbf2f9e145c8b for '000/0e6/SHA256Es193806--b6d4689fba8e15acd6497f9a7e584c93ea0c8c2199ad32eadac79d59b9f49814.JPG.log'
+ fatal: git-write-tree: error building trees
+ exclude="*" and present
+ git-annex: failed to read sha from git write-tree
+
+9.) Ok I don't know what happened I did nothing special but it seems that the repository is broken :( :(
+
+ $ git annex --verbose --debug repair
+ [...]
+ [2014-08-02 13:27:38 Pacific Daylight Time] read: git ["--git-dir=C:\\Data\\annex\\.git","--work-tree=C:\\Data\\annex","-c","core.bare=false","show","ef3fe549f457783dbbd877b467b4e54b0ebc813c"]
+ Running git fsck ...
+
+ git-annex: DeleteFile "C:\\Data\\annex\\.git\\objects\\2a\\54bb281c80c91ea7a732c0d48db0c5acc0ca2c": permission denied (Access is denied.)
+ failed
+ git-annex: repair: 1 failed
+
+But this file exists, I can read, write and delete to this file manually, there is definitely no permission denied ...
+
+
+
+Oh no, so desparate :-( Any ideas?
+
+As it seems the client repository is broken but how can it be then that also files on the server repository get deleted which shouldn't be deleted?
+And how can it be that there are not only broken symlinks but symlinks that have just binary garbage as target and "fsck" returns success?
+
+(I am happy to share all log files privately but I do not want to publish them here because they contain sensitive data)
+
diff --git a/doc/forum/Pusher_crashed__44___attempt_to_repair_hangs__44___broken_symlinks/comment_1_c89b64b0dc7c5a760a84a9d2cfd8982c._comment b/doc/forum/Pusher_crashed__44___attempt_to_repair_hangs__44___broken_symlinks/comment_1_c89b64b0dc7c5a760a84a9d2cfd8982c._comment
new file mode 100644
index 000000000..38bd4daf8
--- /dev/null
+++ b/doc/forum/Pusher_crashed__44___attempt_to_repair_hangs__44___broken_symlinks/comment_1_c89b64b0dc7c5a760a84a9d2cfd8982c._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="128.12.90.218"
+ subject="comment 1"
+ date="2014-09-12T02:47:37Z"
+ content="""
+I try it once again - any hints for me?
+I haven't done anything since then because I do not know how to proceed here (except creating everything new from scratch).
+
+Is more information needed? If yes, what?
+"""]]
diff --git a/doc/forum/Pusher_crashed__44___attempt_to_repair_hangs__44___broken_symlinks/comment_2_c511691c4ea6c77e63ef85c28c921be9._comment b/doc/forum/Pusher_crashed__44___attempt_to_repair_hangs__44___broken_symlinks/comment_2_c511691c4ea6c77e63ef85c28c921be9._comment
new file mode 100644
index 000000000..3ca5ec6d2
--- /dev/null
+++ b/doc/forum/Pusher_crashed__44___attempt_to_repair_hangs__44___broken_symlinks/comment_2_c511691c4ea6c77e63ef85c28c921be9._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2015-02-09T20:56:15Z"
+ content="""
+You see "-> ???" for symlink targets, and you are unable to delete
+files that you own, and git is unable to read objects that should be in the
+repository.
+
+This all suggests that your disk is broken. You need to check your
+filesystem for corruption, etc.
+"""]]
diff --git a/doc/forum/Recover_files__44___annex_stuck.mdwn b/doc/forum/Recover_files__44___annex_stuck.mdwn
new file mode 100644
index 000000000..b3e46471f
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck.mdwn
@@ -0,0 +1,28 @@
+I have a directory with 6TB of data in it. I tried to use git annex to back it up to three 3TB drives, I didn't want to use RAID as it sucks, and I didn't want to use tar as I wanted my files easily available.
+
+I added my remotes successfully, then I ran ``git annex add .``
+
+That mostly worked, although it understandably took ages, although it missed several GB of files here and there.
+
+Next I tried to do ``git commit -a -m added``, hoping that this would copy all of my files to the remotes. It didn't it just died with the error
+
+ fatal: No HEAD commit to compare with (yet)
+ fatal: No HEAD commit to compare with (yet)
+ Stack space overflow: current size 8388608 bytes.
+ Use `+RTS -Ksize -RTS' to increase it.
+
+So I freaked out and decided to undo the mess and just go with tar instead, since at this point every git command takes multiple minutes and fails with the same error as above.
+
+I tried to run ``git anne unannex .``, but I got this error:
+
+``
+unannex GWAS/by-download-number/27081.log.gz fatal: No HEAD commit to compare with (yet)
+``
+
+So now I can't do anything without committing the files it seems, and I somehow need to grow the git cache, although when I search online for `+RTS -Ksize -RTS', I get nothing.
+
+Does anyone know how to increase the cache size, or how to unannex the files without this HEAD error?
+
+Thanks,
+
+Mike
diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_10_6d85c3ec73ddc0682d9643f4d5eeda70._comment b/doc/forum/Recover_files__44___annex_stuck/comment_10_6d85c3ec73ddc0682d9643f4d5eeda70._comment
new file mode 100644
index 000000000..1a8cca600
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck/comment_10_6d85c3ec73ddc0682d9643f4d5eeda70._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis"
+ nickname="Mike"
+ subject="comment 10"
+ date="2014-06-18T20:15:42Z"
+ content="""
+``git ls-files --cached | wc -l`` returns: 1882028
+
+As far as I can tell, the largest objects in .git/objects are 65kb, there are just a bunch of them (257). Also, my repo contains 1,886,125 files and directories total, most in a single directory (after git annex add completed, that one directory contained 8.3GB of symlinks.
+
+``git-annex add .`` just completed successfully, I am now running ``git commit -a -m added``, it is chugging away and taking its time.
+
+Is there an obvious upper limit to the number of files or the total size of files that git annex can handle? For example, is 1 million files too many? How about 6TB? or 9TB? For this repo I think I have a little less than 2m files, and the total size of the repo is greater than 6TB. Is that too much? Should I split it into multiple repos?
+
+I also have a question just about the utility of git-annex for this purpose. I don't need to backup this data, I just want to have it off the big hard drive and onto a bunch of small drives. I have added 3 4TB drives as remotes and I want all of the data stored on them, I will take them offline and put them in a safe. Ideally my file and directory structure will remain intact as symlinks, and then when I want to access a file in the future, I can run ``git annex get <file>``, connect the drive that git annex tells me to, and then get that file, use it, and then drop it when I am done. From all of my reading it seems like that is a good usage for git annex, but I want to check with you and see if that makes sense to you. Also, can I just run ``git annex drop --auto --numcopies=1`` to get git annex to move all of the files to my remote repositories?
+
+Thanks for all of your help, and let me know if there are any other debug steps you would like me to run. I am still waiting for git commit to run, and for an exact repo size for you.
+"""]]
diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_11_52e799bb6f24a1ebed58fad6cebd3a71._comment b/doc/forum/Recover_files__44___annex_stuck/comment_11_52e799bb6f24a1ebed58fad6cebd3a71._comment
new file mode 100644
index 000000000..d5fc3e7ae
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck/comment_11_52e799bb6f24a1ebed58fad6cebd3a71._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.203"
+ subject="comment 11"
+ date="2014-06-18T20:54:31Z"
+ content="""
+Ok, my suspicion is that the root problem is having a large number of file in a single directory. That would cause the git tree objects to get big, and it may
+be that git-annex somewhere buffers a whole tree object in memory, although I cannot think of where off the top of my head.
+
+git-annex scales to any size of files (limited only by checksumming time unless you use the WORM backend to avoid checksumming). git-annex tries to scale at least as good as git does to a large quantity of files in a repository. git doesn't handle a million files in a repository very fast, due to a number of issues including how the index works. I have never tested git-annex with more than 1 million files, and not all in the same directory.
+
+Other than the number of files, your use case seems reasonable. `git annex drop` will drop files that you have already copied to enough of the remotes (using eg, `git-annex copy`).
+
+Above you show a git-annex add failing after 5 files. I suspect you truncated that output, and it processed rather more files. git-annex only says \"(Recording state in git...)\" once it's added all the files, or after it's added around 10 thousand files and still has more to do). It seems to have failed at the point where the files are staged into the index.
+
+I'm building a 2 million file in one directory repo on a fast server now to see if I can reproduce this.
+"""]]
diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_12_686a285bc7e950aae67856c47e7cb21e._comment b/doc/forum/Recover_files__44___annex_stuck/comment_12_686a285bc7e950aae67856c47e7cb21e._comment
new file mode 100644
index 000000000..0428dfd30
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck/comment_12_686a285bc7e950aae67856c47e7cb21e._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis"
+ nickname="Mike"
+ subject="comment 12"
+ date="2014-06-18T22:28:27Z"
+ content="""
+Yes, you are right. ``git-annex add`` got through almost all of the files in the first run, which I did a week ago, I am not sure how long it took, several days I think (which is fine, time isn't that important here).
+
+I re-ran ``git-annex add .`` yesterday after having trouble with ``git commit``, which is when I uncovered these problems. I think you are right that the problem appears when git-annex is staging files into the index. No problems occurred during checksumming or moving files.
+
+Also, the repo isn't as large as I thought, it if 4.1TB, so it makes sense that the issue is number of files, not files size.
+
+``git add`` and ``git commit`` are now working fine, all git operations (e.g. ``git status``) are now taking around 30s to 1 min, which is acceptable.
+
+I am going to try and move the data to the remotes now. Is there anything special I need to do since the remotes are smaller than the current repo? The remotes are just single drives with ext4 filesystems and an empty repo on them. I ideally want to fill each drive as much as possible, and have the current repo contain no files, how do I do that? Can I just run ``git-annex move --to mito_backup1`` and then when it is full run a second command of ``git-annex move --to mito_backup2``. Is it better to use ``git-annex copy`` instead of ``move`` and then use ``drop`` after?
+
+Thanks!
+"""]]
diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_13_a4d62d494b340458e6535d573bade965._comment b/doc/forum/Recover_files__44___annex_stuck/comment_13_a4d62d494b340458e6535d573bade965._comment
new file mode 100644
index 000000000..e68933b5c
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck/comment_13_a4d62d494b340458e6535d573bade965._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.203"
+ subject="comment 13"
+ date="2014-06-18T22:43:08Z"
+ content="""
+It will be faster to use `git annex move`, assuming you want to only have 1 copy of each file, and not more. git-annex will stop storing files on a drive once it gets close to full (annex.diskreserve), and you can safely interrupt it and switch to the next drive.
+
+Do you have any special git configuration? In particular I'm curious about any annex.queuesize setting, which if set to something really high would make `git annex add` buffer a lot of filenames and stage them all at once. (However, I just noticed that annex.queuesize didn't cause as large a queue to be used as intended, so it would need to have been set to some really enormous value to run it out of stack space.)
+
+Also, see [[scalability]].
+"""]]
diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_14_c10f0fe1440ccd170804a433db2267ee._comment b/doc/forum/Recover_files__44___annex_stuck/comment_14_c10f0fe1440ccd170804a433db2267ee._comment
new file mode 100644
index 000000000..71c8d239d
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck/comment_14_c10f0fe1440ccd170804a433db2267ee._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis"
+ nickname="Mike"
+ subject="comment 14"
+ date="2014-06-18T22:51:28Z"
+ content="""
+As far as I know I am using the defaults, I didn't customize anything. I am thinking of switching to the WORM backend though as I think it will make things a little faster, but I haven't done that yet.
+
+Also, I actually compiled cabal-install with the ghc flag ``-rtsopts`` and git-annex with flags ``-rtsopts -with-rtsopts=-K1000m``. Due to the amount of memory available, I am not worried if git-annex leaks memory and uses 1GB of memory during operations, but I have been watching it with htop, and its memory usage is usually very small.
+
+
+"""]]
diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_15_14446cafac6c33a3f95b5344c42c0bef._comment b/doc/forum/Recover_files__44___annex_stuck/comment_15_14446cafac6c33a3f95b5344c42c0bef._comment
new file mode 100644
index 000000000..bc1faa82c
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck/comment_15_14446cafac6c33a3f95b5344c42c0bef._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis"
+ nickname="Mike"
+ subject="comment 15"
+ date="2014-06-19T21:19:01Z"
+ content="""
+Everything seems to be working fine now, but I have another question:
+
+Is there any way to speed up the copying of many small files? It looks like git-annex is calling rsync for each individual file, which is very fast for large files, but on my directories with many small files, the total speed is working on to just a few MB an hour - it has only transferred 1GB in the last 4 hours.
+
+I am using the WORM backed with the ``-b WORM`` flag, but I wonder if there is a different move method implemented? For example many calls to ``mv`` will be much faster than many calls to ``rsync``.
+
+Thanks!
+"""]]
diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_16_63c19f58b7e95e39ba25a735bdcc0bcf._comment b/doc/forum/Recover_files__44___annex_stuck/comment_16_63c19f58b7e95e39ba25a735bdcc0bcf._comment
new file mode 100644
index 000000000..c55edddf9
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck/comment_16_63c19f58b7e95e39ba25a735bdcc0bcf._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.203"
+ subject="comment 16"
+ date="2014-06-19T22:16:21Z"
+ content="""
+git-annex could be made to always use cp for local transfers, see Remote/Git.hs rsyncOrCopyFile and change `ifM (sameDeviceIds src dest) (docopy, dorsync)` to just `docopy`
+
+However, I doubt that will be a significant speedup. It's more likely that the overhead around copying a file and updating the location tracking etc adds up with millions of small files.
+"""]]
diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_17_8e5c7572ab8d1f0e41fedf6f805b942a._comment b/doc/forum/Recover_files__44___annex_stuck/comment_17_8e5c7572ab8d1f0e41fedf6f805b942a._comment
new file mode 100644
index 000000000..4761bcf3a
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck/comment_17_8e5c7572ab8d1f0e41fedf6f805b942a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis"
+ nickname="Mike"
+ subject="comment 17"
+ date="2014-06-21T01:56:48Z"
+ content="""
+Would git-annex be able to detect if I manually moved some files? At this point it looks like the transfer will take multiple weeks... if I just moved the files from .git/annex directly from one repo to the other I could make the transfer significantly faster, but would that corrupt the repo?
+"""]]
diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_18_e5357c63107f79571bd3ff609b4406a7._comment b/doc/forum/Recover_files__44___annex_stuck/comment_18_e5357c63107f79571bd3ff609b4406a7._comment
new file mode 100644
index 000000000..0398980b4
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck/comment_18_e5357c63107f79571bd3ff609b4406a7._comment
@@ -0,0 +1,26 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 18"
+ date="2014-07-04T18:03:54Z"
+ content="""
+You can manually move files and use `git annex fsck`, but it is not likely to be any faster.
+
+---
+
+After letting a 2 million file import run while I was away on vacation, I came back to it, and it indeed ran out of memory:
+
+<pre>
+add 999996 ok
+add 999997 ok
+(Recording state in git...)
+[2014-06-21 11:49:28 JEST] feed: xargs [\"-0\",\"git\",\"--git-dir=/home/joey/tmp/r/.git\",\"--work-tree=/home/joey/tmp/r\",\"add\",\"--\"]
+add 999998 ok
+add 999999 ok
+[2014-06-21 11:49:49 JEST] read: git [\"--git-dir=/home/joey/tmp/r/.git\",\"--work-tree=/home/joey/tmp/r\",\"diff\",\"--name-only\",\"--diff-filter=T\",\"-z\",\"--\",\".\"]
+(Recording state in git...)
+[2014-06-21 11:52:24 JEST] feed: xargs [\"-0\",\"git\",\"--git-dir=/home/joey/tmp/r/.git\",\"--work-tree=/home/joey/tmp/r\",\"add\",\"--\"]
+Stack space overflow: current size 8388608 bytes.
+Use `+RTS -Ksize -RTS' to increase it.
+</pre>
+"""]]
diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_19_3316652073710f39965cd49ceea5c4ff._comment b/doc/forum/Recover_files__44___annex_stuck/comment_19_3316652073710f39965cd49ceea5c4ff._comment
new file mode 100644
index 000000000..828b07d41
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck/comment_19_3316652073710f39965cd49ceea5c4ff._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 19"
+ date="2014-07-04T18:18:41Z"
+ content="""
+[[bugs/runs_of_of_memory_adding_2_million_files]]
+"""]]
diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_1_d605f755c363d56cf5f1060ad06ee173._comment b/doc/forum/Recover_files__44___annex_stuck/comment_1_d605f755c363d56cf5f1060ad06ee173._comment
new file mode 100644
index 000000000..18c1c0e9b
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck/comment_1_d605f755c363d56cf5f1060ad06ee173._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.203"
+ subject="comment 1"
+ date="2014-06-18T16:22:13Z"
+ content="""
+What version of git-annex are you using? And what version of git? Is your git-annex repository in direct mode or indirect mode?
+"""]]
diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_2_f3ee184a4d3b8d82a8a362a6c03a54a3._comment b/doc/forum/Recover_files__44___annex_stuck/comment_2_f3ee184a4d3b8d82a8a362a6c03a54a3._comment
new file mode 100644
index 000000000..7c46785bf
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck/comment_2_f3ee184a4d3b8d82a8a362a6c03a54a3._comment
@@ -0,0 +1,54 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis"
+ nickname="Mike"
+ subject="Frustrating"
+ date="2014-06-18T16:29:31Z"
+ content="""
+OK, this is a little frustrating. I found this post from three years ago: [[http://git-annex.branchable.com/forum/Problems_with_large_numbers_of_files/]] and I decided to try a newer version of git-annex.
+
+I uninstalled ghc and haskell from Scientific Linux because all of these Red Hat based distros have ancient packages.
+
+I installed the latest git from source, the latest ghc linux x86_64 binary, and then the latest haskell platform from source. Then I used cabal to install all dependencies for git annex with ``cabal install --only-dependencies git-annex``. Finally I installed git annex from source.
+
+I then tried to run ``git-annex add .`` in my directory and got the following error:
+
+ #> git annex add .
+ add AllStudies.txt.csv.gz ok
+ add GWAS/action.txt.gz ok
+ add GWAS/archive/dump2.txt.gz ok
+ add GWAS/archive/dump3.txt.gz ok
+ add GWAS/by-download-number/27080.log.gz ok
+ (Recording state in git...)
+ Stack space overflow: current size 8388608 bytes.
+ Use `+RTS -Ksize -RTS' to increase it.
+
+
+Ok, I was hoping that the latest version would just work, no luck. So I did what it told me to:
+
+``git-annex +RTS -K1000000 -RTS add .``
+
+That gave the error:
+
+``
+ git-annex: Most RTS options are disabled. Link with -rtsopts to enable them.
+``
+
+Grr.
+
+So I went into the Makefile and added the line ``-rtsopts -with-rtsopts=\"-K1000m\"`` after every call to ghc I could find. I also added ``ghc-options: -with-rtsopts=\"-K100000\"`` to my ~/.cabal/config file.
+
+Now when I run ``make`` I get this error:
+
+
+ if [ \"cabal \" = ./Setup ]; then ghc --make Setup; fi
+ cabal configure
+ cabal: Most RTS options are disabled. Link with -rtsopts to enable them.
+ make: *** [Build/SysConfig.hs] Error 1
+
+
+Do I have to manually compile the entire Haskell Platform with the -rtsopts flag in order to get this to work?
+
+I can't find any easy-to-follow information anywhere that shows me how to just increase the memory limit. My server has 48 cores, 192GB of memory, over 1TB of scratch space, and over 60TB of storage. I really want to be able to use git-annex to easily move files from our large RAID arrays onto archive drives, and be able to intelligently get that data back whenever I want, I don't understand why I am being limited to 8MB of memory for this.
+
+Any advice would be fantastic, thank you.
+"""]]
diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_3_341b47663d133411587ec70ef2b178c6._comment b/doc/forum/Recover_files__44___annex_stuck/comment_3_341b47663d133411587ec70ef2b178c6._comment
new file mode 100644
index 000000000..77a7c93c8
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck/comment_3_341b47663d133411587ec70ef2b178c6._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis"
+ nickname="Mike"
+ subject="Version"
+ date="2014-06-18T16:32:32Z"
+ content="""
+Hi Joeyh,
+
+Thanks for the reply. I am using git version 2.0.0.390.gcb682f8, not sure what version of git-annex, but I downloaded it from github about 20 minutes ago.
+
+Thanks!
+
+-Mike
+"""]]
diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_4_66c0d9284d5edbac189a64b03c4fe50a._comment b/doc/forum/Recover_files__44___annex_stuck/comment_4_66c0d9284d5edbac189a64b03c4fe50a._comment
new file mode 100644
index 000000000..5d153e248
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck/comment_4_66c0d9284d5edbac189a64b03c4fe50a._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.203"
+ subject="comment 4"
+ date="2014-06-18T16:35:29Z"
+ content="""
+You can find out the version of git-annex by running: git-annex version
+
+You can find out if your repository is in direct or indirect mode by running: git config annex.direct
+"""]]
diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_5_8b32f6597f447f88bee7a80698fb4df6._comment b/doc/forum/Recover_files__44___annex_stuck/comment_5_8b32f6597f447f88bee7a80698fb4df6._comment
new file mode 100644
index 000000000..cf656f3ea
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck/comment_5_8b32f6597f447f88bee7a80698fb4df6._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis"
+ nickname="Mike"
+ subject="Versions"
+ date="2014-06-18T16:40:14Z"
+ content="""
+``git-annex version`` returns:
+
+ git-annex version: 5.20140618-gc2f1c63
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+ local repository version: unknown
+ supported repository version: 5
+ upgrade supported from repository versions: 0 1 2 4
+
+``git config annex.direct`` exits with error code 1 and doesn't return any information, however I never explicitly set direct mode, and the repository is all symlinked, so my assumption is that it is in indirect mode. Would direct mode be better for such a large repo?
+"""]]
diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_6_4cc81169e99a453cdb6e83e57e638f37._comment b/doc/forum/Recover_files__44___annex_stuck/comment_6_4cc81169e99a453cdb6e83e57e638f37._comment
new file mode 100644
index 000000000..52e04dfc8
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck/comment_6_4cc81169e99a453cdb6e83e57e638f37._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis"
+ nickname="Mike"
+ subject="Reinstall GHC or Cabal?"
+ date="2014-06-18T16:49:35Z"
+ content="""
+Do I need to reinstall ghc or cabal with rtsopts enabled somehow in order to be able to compile git-annex with -K1000m?
+"""]]
diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_7_2d104cf4682e04906f8ca0ced7288cf1._comment b/doc/forum/Recover_files__44___annex_stuck/comment_7_2d104cf4682e04906f8ca0ced7288cf1._comment
new file mode 100644
index 000000000..6ea7b45f6
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck/comment_7_2d104cf4682e04906f8ca0ced7288cf1._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.203"
+ subject="comment 7"
+ date="2014-06-18T17:14:40Z"
+ content="""
+Ok, so the repository is in indirect mode, and this rules out a large quantity of problems that could have been caused by direct mode (no, I don't recommend using direct mode).
+
+If you want to build git-annex with the +RTS option enabled, you just need to pass -rtsopts to ghc when building git-annex. (Not -with-rtsopts ...)
+That *might* let you pump up the memory and bypass whatever the problem is, or at least find out how much memory it's trying to allocate, which might be a useful clue. But I would be much more interested in debugging and fixing the actual problem, since git-annex should not normally need to allocate a 8+ mb chunk of memory.
+
+The \"No HEAD commit to compare with (yet)\" failure mode was removed from git in 2011. You must have been using old versions of git and git-annex before you upgraded. Perhaps they have left the repository in some broken state.
+
+What size does `du -hsc .git/objects` report? How about `du -h .git/index`?
+
+Are git commands that do not involve git-annex still taking a long time to run or failing in some way? (Note that `git commit` has a hook that runs git-annex; you can bypass that with `git commit --no-verify`)
+"""]]
diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_8_d356c4fce9f1197e5292f9dedf85bbc9._comment b/doc/forum/Recover_files__44___annex_stuck/comment_8_d356c4fce9f1197e5292f9dedf85bbc9._comment
new file mode 100644
index 000000000..df1af4f06
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck/comment_8_d356c4fce9f1197e5292f9dedf85bbc9._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmwjQzWgiD7_I3zw-_91rMRf_6qoThupis"
+ nickname="Mike"
+ subject="comment 8"
+ date="2014-06-18T17:31:58Z"
+ content="""
+The git available through yum is git 1.7.1, which looks like it was released in 2010 or earlier. (I really wish I had a different version of linux on this server). It is possible that in some way screwed up the repo.
+
+I figured out how to compile cabal and git-annex with rtsopts, so I can now set higher memory levels, but I am happy to help debug the problem too, as I would really love a fully functional git-annex.
+
+git commands now run quickly, thanks to the new git I think.
+
+``du -hsc .git/objects`` returns: ``8.1G .git/objects``
+
+``du -h .git/index`` returns: ``437M .git/index``
+
+I am currently running the command ``git-annex +RTS -K1000m -RTS add .``, it is chugging away doing something, but is not printing any messages yet after 11 minutes of running, it is a 6TB directory though, and there are a lot of concurrent IO operations on that disk right now.
+
+I am also running ``du -h --max-depth=1`` on the root repo directory, and also ``find | wc -l``, so that I can tell you the exact size of the dir and the total number of files too. These operations combined may take more than an hour though, I will send details when the commands complete.
+
+Let me know if you want me to stop the ``git-annex +RTS -K1000m -RTS add .`` command and run git-annex some other way.
+"""]]
diff --git a/doc/forum/Recover_files__44___annex_stuck/comment_9_856c7e1575f5d99530ecd54004315487._comment b/doc/forum/Recover_files__44___annex_stuck/comment_9_856c7e1575f5d99530ecd54004315487._comment
new file mode 100644
index 000000000..c092d99f5
--- /dev/null
+++ b/doc/forum/Recover_files__44___annex_stuck/comment_9_856c7e1575f5d99530ecd54004315487._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.203"
+ subject="comment 9"
+ date="2014-06-18T17:36:44Z"
+ content="""
+Both of those du's look extremely large. How many files are listed by `git ls-files --cached | wc -l` ?
+
+I don't think that there's any point in running `git annex add` while you're still having some problem. I am curious though how much memory the git-annex add you have running has used.
+
+If I were you, I'd look in .git/objects for large files (> 100kb, say).
+"""]]
diff --git a/doc/forum/Recovering_deleted_file_in_direct_mode.mdwn b/doc/forum/Recovering_deleted_file_in_direct_mode.mdwn
new file mode 100644
index 000000000..9dc1bdaf1
--- /dev/null
+++ b/doc/forum/Recovering_deleted_file_in_direct_mode.mdwn
@@ -0,0 +1,13 @@
+I accidentally deleted a file from a git-annex repository with a plain "rm". How can I restore it from other repositories that have it?
+
+I tried using
+
+ git annex copy --from $REMOTE $REMOVED_FILE
+
+but git-annex complaints about
+
+ $REMOVED_FILE not found
+
+I suppose that I could switch to indirect mode and do checkout and older version, but I'd prefer not to. My repository contains thousands of quite big files; it would take a lot of time and the probability of something going wrong during the conversion is quite high (see other bugs reported during import).
+
+I'm using git-annex 5.20141024-g613f396.
diff --git a/doc/forum/Recovering_deleted_file_in_direct_mode/comment_1_a3e6fc93669ec76656c84793d1f59149._comment b/doc/forum/Recovering_deleted_file_in_direct_mode/comment_1_a3e6fc93669ec76656c84793d1f59149._comment
new file mode 100644
index 000000000..0b23bbc78
--- /dev/null
+++ b/doc/forum/Recovering_deleted_file_in_direct_mode/comment_1_a3e6fc93669ec76656c84793d1f59149._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-28T19:22:54Z"
+ content="""
+> the probability of something going wrong during the conversion is quite high (see other bugs reported during import)
+
+I don't know what bugs you speak of. If the probability of something going
+wrong is quite high, then you must have a reproducible test case. Submit a
+bug with such a test case, and I can fix it.
+"""]]
diff --git a/doc/forum/Recovering_deleted_file_in_direct_mode/comment_2_98c01a756c5f2dda28cffa5dd1dea385._comment b/doc/forum/Recovering_deleted_file_in_direct_mode/comment_2_98c01a756c5f2dda28cffa5dd1dea385._comment
new file mode 100644
index 000000000..007160ab2
--- /dev/null
+++ b/doc/forum/Recovering_deleted_file_in_direct_mode/comment_2_98c01a756c5f2dda28cffa5dd1dea385._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 2"
+ date="2014-11-12T21:00:41Z"
+ content="""
+A new `git annex proxy` command was just added that allows safely running commands like `git revert` in a direct mode repsitory.
+
+So, you might do:
+
+ rm myfile # oops!
+ git annex sync
+ git annex proxy -- git revert HEAD
+ git annex get myfile
+
+The sync is needed to commit the deletion, and then that commit gets reverted. Finally, you can use git-annex get to download the file from some other repository that still has a copy. (Assuming you didn't delete the last copy.)
+"""]]
diff --git a/doc/forum/Recovery_after_freeze_while_importing_files.mdwn b/doc/forum/Recovery_after_freeze_while_importing_files.mdwn
new file mode 100644
index 000000000..f67e7fb44
--- /dev/null
+++ b/doc/forum/Recovery_after_freeze_while_importing_files.mdwn
@@ -0,0 +1,3 @@
+My PC froze while git-annex was in the process of importing a file. It was in the final stage of updating git status when the freeze occurred. git status shows the imported file under "changes to be committed" as "new file."
+
+I don't know how git-annex works under the hood, so I don't know how the freeze might've affected the repo. I don't want to lose my files. What do you recommend is the best way of recovering from this and making sure there are no errors?
diff --git a/doc/forum/Recovery_after_freeze_while_importing_files/comment_1_d033b77b9417468e13076ff9302f2963._comment b/doc/forum/Recovery_after_freeze_while_importing_files/comment_1_d033b77b9417468e13076ff9302f2963._comment
new file mode 100644
index 000000000..c9d004c7a
--- /dev/null
+++ b/doc/forum/Recovery_after_freeze_while_importing_files/comment_1_d033b77b9417468e13076ff9302f2963._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-12-02T17:09:24Z"
+ content="""
+Doesn't sound like a problem. Have you tried committing the file?
+"""]]
diff --git a/doc/forum/Recovery_after_freeze_while_importing_files/comment_2_e14f330de3e9ebfa9a99c32e65d59d11._comment b/doc/forum/Recovery_after_freeze_while_importing_files/comment_2_e14f330de3e9ebfa9a99c32e65d59d11._comment
new file mode 100644
index 000000000..3a897cc02
--- /dev/null
+++ b/doc/forum/Recovery_after_freeze_while_importing_files/comment_2_e14f330de3e9ebfa9a99c32e65d59d11._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="ghen1"
+ subject="comment 2"
+ date="2014-12-18T11:28:35Z"
+ content="""
+I did, and everything seems fine.
+"""]]
diff --git a/doc/forum/Reloading_.git__47__config_mid-sync.mdwn b/doc/forum/Reloading_.git__47__config_mid-sync.mdwn
new file mode 100644
index 000000000..0c2ef14fd
--- /dev/null
+++ b/doc/forum/Reloading_.git__47__config_mid-sync.mdwn
@@ -0,0 +1 @@
+There are some settings (rsync bandwidth settings are my use case) I'd like to reload after assistant starts, possibly mid-sync. Does assistant support SIGHUP, etc? What's the correct way to change bandwidth settings?
diff --git a/doc/forum/Reloading_.git__47__config_mid-sync/comment_1_69e8879e0fed0e1b1589a721f9c6e3c7._comment b/doc/forum/Reloading_.git__47__config_mid-sync/comment_1_69e8879e0fed0e1b1589a721f9c6e3c7._comment
new file mode 100644
index 000000000..d39b21ffb
--- /dev/null
+++ b/doc/forum/Reloading_.git__47__config_mid-sync/comment_1_69e8879e0fed0e1b1589a721f9c6e3c7._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="24.159.78.125"
+ subject="comment 1"
+ date="2014-07-23T15:02:04Z"
+ content="""
+Assistant does not support SIGHUP. There is a menu item (top right menu) that can restart it.
+"""]]
diff --git a/doc/forum/Remove_variants_from_all_repositories___40__and_possibly_restore_the_original_naming__41__.mdwn b/doc/forum/Remove_variants_from_all_repositories___40__and_possibly_restore_the_original_naming__41__.mdwn
new file mode 100644
index 000000000..8a62a6e40
--- /dev/null
+++ b/doc/forum/Remove_variants_from_all_repositories___40__and_possibly_restore_the_original_naming__41__.mdwn
@@ -0,0 +1 @@
+I, by mistake, added some files directly to the remote locations and my local repository, afterwards, using `git annex get '*'` to get "all" the new files from the remotes I created some `file.variant-xxxx.ext` files. For me this is undesirable. I'm sure the files are almost the same (I'm presuming some metadata got changed, they are audio files) so I want to remove one keeping the other and removing the `variant-xxxx` string. Is there a way this is possible without manually drooping/renaming all these files?
diff --git a/doc/forum/Remove_variants_from_all_repositories___40__and_possibly_restore_the_original_naming__41__/comment_1_dfc64d8618e07177bb196d9af4474698._comment b/doc/forum/Remove_variants_from_all_repositories___40__and_possibly_restore_the_original_naming__41__/comment_1_dfc64d8618e07177bb196d9af4474698._comment
new file mode 100644
index 000000000..7f3105890
--- /dev/null
+++ b/doc/forum/Remove_variants_from_all_repositories___40__and_possibly_restore_the_original_naming__41__/comment_1_dfc64d8618e07177bb196d9af4474698._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-01-05T20:12:56Z"
+ content="""
+Probably the best thing to do is to use `git log --stat`
+to find the commits that were made on the remote that added the conflicting
+files. Also find the merge commit that created the variant
+files. You can then `git revert` the merge commit, and follow up by `git
+revert` the commits that added the conflicting files. This will bring your
+working tree back to the state it was in originally.
+
+Alternatively, if your current repo has the contents present for
+the variants of the files you want to keep, while the remote repos contain
+the contents of the variants you want to delete, you could use this command
+to delete the variants that don't have their contents in the local repo:
+
+ git annex find --include='*.variant-*' --not --in here --print0 | xargs -0 rm
+"""]]
diff --git a/doc/forum/Removing_git-annex_repo/comment_1_58fcceb96647a8c7f33d188ae908f3bd._comment b/doc/forum/Removing_git-annex_repo/comment_1_58fcceb96647a8c7f33d188ae908f3bd._comment
new file mode 100644
index 000000000..d03ca6b4e
--- /dev/null
+++ b/doc/forum/Removing_git-annex_repo/comment_1_58fcceb96647a8c7f33d188ae908f3bd._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.144"
+ subject="comment 1"
+ date="2014-09-25T15:44:16Z"
+ content="""
+chmod u+w -R ~/annex/.git
+"""]]
diff --git a/doc/forum/Require_a_local_copy_of_all_new_files_without_explicitly_calling___34__get__34___or___34__sync__34__.mdwn b/doc/forum/Require_a_local_copy_of_all_new_files_without_explicitly_calling___34__get__34___or___34__sync__34__.mdwn
new file mode 100644
index 000000000..9c19b9b8c
--- /dev/null
+++ b/doc/forum/Require_a_local_copy_of_all_new_files_without_explicitly_calling___34__get__34___or___34__sync__34__.mdwn
@@ -0,0 +1,9 @@
+Greetings. Here is my desired usage scenario:
+
+I have setup a server and three laptops which I am syncing over ssh. Each laptop may access the server, but because different people are using each of the laptops, they may not sync between laptops for security/privacy.
+
+Each of the laptops will be adding content to the repository, and each of the laptops will be using the new content that the others have added.
+
+Currently, in order to make all content available to all users, I'm having to ssh into the server and use `git annex get .` every time new content is added from one of the laptops, which is a pain. Is there a way to require a local copy of all content in a given repository so that is pulled/pushed automatically? I would like for each laptop to be able to add new content to their copies of the repository and sync with the server, after which each other laptop can access the content through the server.
+
+Thanks!
diff --git a/doc/forum/Require_a_local_copy_of_all_new_files_without_explicitly_calling___34__get__34___or___34__sync__34__/comment_1_8adf9c6d2a3ef29120703bfa1b8f9ae2._comment b/doc/forum/Require_a_local_copy_of_all_new_files_without_explicitly_calling___34__get__34___or___34__sync__34__/comment_1_8adf9c6d2a3ef29120703bfa1b8f9ae2._comment
new file mode 100644
index 000000000..12aef2473
--- /dev/null
+++ b/doc/forum/Require_a_local_copy_of_all_new_files_without_explicitly_calling___34__get__34___or___34__sync__34__/comment_1_8adf9c6d2a3ef29120703bfa1b8f9ae2._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-07-21T19:46:44Z"
+ content="""
+This is generally handled by using either `git annex sync --content`, which will make the laptops upload new files to the server before they push the git repository to it, or by using the git-annex assistant (on the laptops or perhaps on the server) to automatically copy files. Either way, you configure [[preferred_content]] settings to control which repositories want which files.
+"""]]
diff --git a/doc/forum/Restricting_SSH_+_supply_key.mdwn b/doc/forum/Restricting_SSH_+_supply_key.mdwn
new file mode 100644
index 000000000..59dd72fdc
--- /dev/null
+++ b/doc/forum/Restricting_SSH_+_supply_key.mdwn
@@ -0,0 +1,7 @@
+Just two very simple questions:
+
+1.) Is there a way to restrict the SSH key for git annex by supplying a command= ? Even better, is it also possible to supply a directory in which the repository is? (I do not want chroot - too complicated but a soft check would be sufficient for me).
+
+2.) Can I tell git and git-ssh which pubkey to use WITHOUT changing system-/user wide config (e.g.., .ssh/*)? If it is indeed not possible, what's the best way to do it in Windows?
+
+Thanks!
diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_10_8bbd0b6488c23ce8b182bd6b1765c94b._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_10_8bbd0b6488c23ce8b182bd6b1765c94b._comment
new file mode 100644
index 000000000..2bcf658b9
--- /dev/null
+++ b/doc/forum/Restricting_SSH_+_supply_key/comment_10_8bbd0b6488c23ce8b182bd6b1765c94b._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="ooooh"
+ date="2014-07-16T22:21:36Z"
+ content="""
+Thank *you* for taking the time to figure that out!
+
+I agree on moving the .vbs files. I have done so. (Well, you have to run the git-annex-uninstall.exe to remove the old ones, but that shouldn't matter.)
+Testing of an autobuild would be appreciated.
+"""]]
diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_11_3b946519c9f52569ce60ac04bdc3380a._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_11_3b946519c9f52569ce60ac04bdc3380a._comment
new file mode 100644
index 000000000..628305377
--- /dev/null
+++ b/doc/forum/Restricting_SSH_+_supply_key/comment_11_3b946519c9f52569ce60ac04bdc3380a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""fixed"""
+ date="2014-10-28T20:19:04Z"
+ content="""
+I seem to have forgotten to follow up here, but I think I fixed
+this problem some time ago, in [[!commit 5afc8b28e03f4d242fa81a9a93384714d12d4e5c]].
+"""]]
diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_1_cac35ac1ac0b300ddfac5ffc74291bce._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_1_cac35ac1ac0b300ddfac5ffc74291bce._comment
new file mode 100644
index 000000000..edcb5307e
--- /dev/null
+++ b/doc/forum/Restricting_SSH_+_supply_key/comment_1_cac35ac1ac0b300ddfac5ffc74291bce._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-10T19:41:54Z"
+ content="""
+1. Yes, use [[git-annex-shell]].
+
+2. The best way to do this is to use a dummy hostname in the git url for the remote. Then in .ssh/config, you can add a Host stanza that sets the real Hostname and also specifies the IdentityFile to use for that host.
+
+Incidentially, the git-annex webapp takes care of both of these things for you automatically when setting up a remote on a ssh server.
+"""]]
diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_2_e9803dd1794b4d078efa9435ff5ba295._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_2_e9803dd1794b4d078efa9435ff5ba295._comment
new file mode 100644
index 000000000..e3ae82116
--- /dev/null
+++ b/doc/forum/Restricting_SSH_+_supply_key/comment_2_e9803dd1794b4d078efa9435ff5ba295._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="171.67.173.91"
+ subject="comment 2"
+ date="2014-07-11T21:43:11Z"
+ content="""
+Hey Joey,
+
+Cool, that's great! Thanks!
+
+As for the client side. I assume you probably don't know too much about the git setup on Windows ... but maybe (or someone else has an idea :)
+
+1.) The ssh client config for git is \"c:\Program Files (x86)\Git\etc\ssh\ssh_config\" which is *very* unhandy since it's system wide! If it would at least be in the user profile ... (as mentioned, within the \".git\" directory of the repository would be the best)
+
+2.) Even if I create a \"Host\" and use \"IdentityFile\", ssh still queries the agent! This is absolutely unwanted and slows down things! I have a particular key \"git-annex.key\" and *only* this should be tried - no agent. The reason why the agent is especially problematic for me is that I use a special agent which \"locks\" itself after some inactivity and requires to re-enter the passwords.
+
+Thank you!
+
+"""]]
diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_3_1c3beb859e76cb69d2bacd2473ec72b7._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_3_1c3beb859e76cb69d2bacd2473ec72b7._comment
new file mode 100644
index 000000000..5412405e7
--- /dev/null
+++ b/doc/forum/Restricting_SSH_+_supply_key/comment_3_1c3beb859e76cb69d2bacd2473ec72b7._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 3"
+ date="2014-07-14T20:20:28Z"
+ content="""
+Re the ssh config on Windows, my windows VM has a per-user .ssh/config inside c:\Documents and Settings\$user. This is where the assistant stores configurations so I know it works.
+
+The soution to ssh still trying to use the agent is probably to set \"IdentitiesOnly yes\" in the stanza for a host. This is what the assistant does, anyway.
+"""]]
diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_4_1c541fc9a44e5cfb13c7d3ef0eeba2c7._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_4_1c541fc9a44e5cfb13c7d3ef0eeba2c7._comment
new file mode 100644
index 000000000..cba554860
--- /dev/null
+++ b/doc/forum/Restricting_SSH_+_supply_key/comment_4_1c541fc9a44e5cfb13c7d3ef0eeba2c7._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="128.12.90.218"
+ subject="comment 4"
+ date="2014-07-15T03:11:18Z"
+ content="""
+Hi Joey,
+
+Sorry that I bother so much with this.
+Thank you so much for your answer. At least with the command line it works now. I had it in %USERPROFILE%/.ssh/ssh_config (where I think it's supposed to be) rather than %USERPROFILE%/.ssh/config. In this file I have a stanza \"Host annex\" with Hostname, Port and IdentityFile set. When I call \"ssh annex\" from the command line everything works. It seems that it also works when I use e.g. \"git annex sync\" from the command line.
+
+However, if I use the webapp, the daemon.log is full of:
+
+ Please make sure you have the correct access rights
+ and the repository exists.
+ ssh: Could not resolve hostname annex: hostname nor servname provided, or not known
+ fatal: Could not read from remote repository.
+
+Is it possible that the assistant ignores the ssh config or does something differently?
+
+Thanks again!
+
+"""]]
diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_5_4dbd5605f2638de0a3edfb3886a47938._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_5_4dbd5605f2638de0a3edfb3886a47938._comment
new file mode 100644
index 000000000..26792873d
--- /dev/null
+++ b/doc/forum/Restricting_SSH_+_supply_key/comment_5_4dbd5605f2638de0a3edfb3886a47938._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="128.12.90.218"
+ subject="comment 5"
+ date="2014-07-15T04:03:16Z"
+ content="""
+After some debugging I found another weird thing which is I think the reason. If I execute
+ git annex get file.jpg
+
+everything works. But if I do
+
+ \"c:\program files (x86)\git\bin\git.exe\" annex get file.jpg
+
+it fails, claiming it can't connect to host \"annex\". I found that there are 3 (!) git.exe installed. When I choose
+
+ \"c:\program files (x86)\git\cmd\git.exe\" annex get file.jpg
+
+it works again. When I use \"which git\" in cygwin, it also points me to the \"cmd/git.exe\" version.
+So I think this is a bug and git annex assistant should call the executeable in \"cmd\" rather than \"bin\".
+Why are there three versions of git.exe at all (one more is in directory libexec/git-core)?
+
+"""]]
diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_6_a9c5b424a6acb2da152bf87b2e7617bb._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_6_a9c5b424a6acb2da152bf87b2e7617bb._comment
new file mode 100644
index 000000000..ef15c43a2
--- /dev/null
+++ b/doc/forum/Restricting_SSH_+_supply_key/comment_6_a9c5b424a6acb2da152bf87b2e7617bb._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 6"
+ date="2014-07-15T19:20:13Z"
+ content="""
+msgit seems to install it in both places, I am not sure why. Either one works ok when I try to use them. The msgit installer puts \"c:\program files (x86)\git\cmd\\" into PATH so I assume that's the one you're supposed to use.
+"""]]
diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_7_93b7c2a5947fb6904c88cd5c120e404c._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_7_93b7c2a5947fb6904c88cd5c120e404c._comment
new file mode 100644
index 000000000..caeec29e5
--- /dev/null
+++ b/doc/forum/Restricting_SSH_+_supply_key/comment_7_93b7c2a5947fb6904c88cd5c120e404c._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="128.12.90.218"
+ subject="comment 7"
+ date="2014-07-15T20:33:07Z"
+ content="""
+Thanks Joey,
+
+The problem is more that git-annex assistant takes the wrong (which is in \"bin\" rather than \"cmd\"). I think this is a bug. Because this way the connection does not work in git-annex assistant the same way it does not work with the version in \"bin\" ...
+
+I think when git-annex assistant just calls the git.exe from path (which should be cmd/git.exe) then it should work.
+
+Regards
+Niki
+
+"""]]
diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_8_beaa350751eca4642545d1b83e528dd7._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_8_beaa350751eca4642545d1b83e528dd7._comment
new file mode 100644
index 000000000..0d236d5e5
--- /dev/null
+++ b/doc/forum/Restricting_SSH_+_supply_key/comment_8_beaa350751eca4642545d1b83e528dd7._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 8"
+ date="2014-07-16T18:10:09Z"
+ content="""
+git-annex only ever runs git from PATH; I never hardcode paths to programs.
+
+You can verify this by running it with the --debug flag to see the exact commands it runs.
+"""]]
diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_9_2faceeaf0d39f82e5d624eae19e4ca53._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_9_2faceeaf0d39f82e5d624eae19e4ca53._comment
new file mode 100644
index 000000000..8ed240a81
--- /dev/null
+++ b/doc/forum/Restricting_SSH_+_supply_key/comment_9_2faceeaf0d39f82e5d624eae19e4ca53._comment
@@ -0,0 +1,31 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="204.17.143.10"
+ subject="comment 9"
+ date="2014-07-16T20:54:54Z"
+ content="""
+Hi Joey,
+
+Thanks for taking care about all these Windows troubles (Windows and POSIX is unfortunately a big mess).
+
+I finally found the issue now and maybe the bug is related to msysgit. I guess you don't know too much about it so I will report to the msysgit folks.
+
+However, there is still an (easy to fix) \"bug\" related to git-annex I think. I shortly describe the issue and a possible fix:
+
+1.) As mentioned above, from the 3 git.exe, only the one in \"cmd\" should be called! It seems to be a wrapper for the \"bin\"-version. If the git.exe from \"bin\" is called something with the environment is wrong (e.g., ssh_config can not be found)
+
+2.) cmd/git.exe is in %PATH% so usually no problem
+
+3.) However, git-annex-autostart.vbs is in \"bin\" folder. Therefore, when called from there PWD is the \"bin\" folder and when calling \"git.exe\" without absolute path, this overwrites %PATH% because it's the current directory (of course, such behavior does not appear on UNIX).
+
+4.) Now the git-annex assistant daemon always calls the wrong git.exe resulting in a broken config
+
+
+Short term fix for users: Create a shortcut to git-annex-autostart.vbs and change the working directory to anything else
+
+Long term fix for git-annex option 1: Do a chdir in the vbs file before calling git. This is not so good because where to?
+
+Long term fix for git-annex option 2: Just place the vbs files in the parent directory (where \"Git Bash.vbs\" is). This looks like the cleanest solution to me.
+
+
+"""]]
diff --git a/doc/forum/Retrieve_previous_version_in_direct_mode/comment_5_1360b936aa389a0ab5e5e453824b2ece._comment b/doc/forum/Retrieve_previous_version_in_direct_mode/comment_5_1360b936aa389a0ab5e5e453824b2ece._comment
new file mode 100644
index 000000000..c921758b4
--- /dev/null
+++ b/doc/forum/Retrieve_previous_version_in_direct_mode/comment_5_1360b936aa389a0ab5e5e453824b2ece._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="How to do this on Mac OSX"
+ date="2014-05-08T22:46:49Z"
+ content="""
+So I have a local repository on my MBP and a backup repository on S3.
+How do I now restore OLD or deleted file versions on my MBP with git-annex assistant?
+"""]]
diff --git a/doc/forum/Revert_to_a_precedent_state_in_direct_mode.mdwn b/doc/forum/Revert_to_a_precedent_state_in_direct_mode.mdwn
new file mode 100644
index 000000000..08aa843cf
--- /dev/null
+++ b/doc/forum/Revert_to_a_precedent_state_in_direct_mode.mdwn
@@ -0,0 +1,3 @@
+I have made some mistakes while using `git annex import` in direct mode. Now I see that some files have been erroneously added and there are other problems. I have not yet used `git annex sync`.
+
+How can I tell git-annex in direct mode (or bare git) to forget about all these changes and revert back to the last known good (pre-import) state? This means also removing the few imported files and recreate their links.
diff --git a/doc/forum/Revert_to_a_precedent_state_in_direct_mode/comment_1_1ae9f7defbab44621c3108973a4f683a._comment b/doc/forum/Revert_to_a_precedent_state_in_direct_mode/comment_1_1ae9f7defbab44621c3108973a4f683a._comment
new file mode 100644
index 000000000..88f7fc895
--- /dev/null
+++ b/doc/forum/Revert_to_a_precedent_state_in_direct_mode/comment_1_1ae9f7defbab44621c3108973a4f683a._comment
@@ -0,0 +1,26 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-06-04T19:03:05Z"
+ content="""
+I wish that I had a good answer for you, but since you're using direct mode, I really do not!
+
+You can run this to see the status:
+
+ git -c core.bare=false status
+
+That's safe. Everything below has a good chance of losing data if not used carefully.
+
+You can run a command like this to *delete* an unwanted file (that is shown as a new file in the above).
+
+ git -c core.bare=false rm -f unwanted_file
+
+If the status shows a file as being modified, you can run this to throw away the modified version. This does not put back the old version! It will leave you with a broken symlink.
+
+ git -c core.bare=false reset modified_file
+ git -c core.bare=false checkout modified_file
+ git annex fsck
+
+If you're lucky, you can then `git annex get` to get the old version from some other repository that still has it.
+"""]]
diff --git a/doc/forum/Revert_to_a_precedent_state_in_direct_mode/comment_2_0bcfc0e89de7072bfdf1e3cdeaa16a1b._comment b/doc/forum/Revert_to_a_precedent_state_in_direct_mode/comment_2_0bcfc0e89de7072bfdf1e3cdeaa16a1b._comment
new file mode 100644
index 000000000..36102071b
--- /dev/null
+++ b/doc/forum/Revert_to_a_precedent_state_in_direct_mode/comment_2_0bcfc0e89de7072bfdf1e3cdeaa16a1b._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmWBvsZvSsAL8P2ye3F0OBStjFCVnOImzM"
+ nickname="Jarno"
+ subject="How about with the 'proxy' command?"
+ date="2014-11-28T18:47:17Z"
+ content="""
+Why does this not work?
+
+ git annex proxy -- git reset HEAD
+
+"""]]
diff --git a/doc/forum/Revert_to_a_precedent_state_in_direct_mode/comment_3_e49a37f92a3dd7d386e1e5f37ab37df4._comment b/doc/forum/Revert_to_a_precedent_state_in_direct_mode/comment_3_e49a37f92a3dd7d386e1e5f37ab37df4._comment
new file mode 100644
index 000000000..fc3e9c6ba
--- /dev/null
+++ b/doc/forum/Revert_to_a_precedent_state_in_direct_mode/comment_3_e49a37f92a3dd7d386e1e5f37ab37df4._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2014-12-01T22:40:05Z"
+ content="""
+Yes, the new `git annex proxy` command was added partly thanks to this
+thread, and you can use it like that.
+
+There's also a new `git annex undo` command that's easier to use than the
+proxy command. It just undoes the last change you made to the file or
+directory you specify.
+"""]]
diff --git a/doc/forum/SSH_remote_transfers_queued_but_no_movement.mdwn b/doc/forum/SSH_remote_transfers_queued_but_no_movement.mdwn
new file mode 100644
index 000000000..de5001f00
--- /dev/null
+++ b/doc/forum/SSH_remote_transfers_queued_but_no_movement.mdwn
@@ -0,0 +1,3 @@
+I created a local repository using the assistant, followed by setting up a remote ssh 'full backup' repository. While the assistant is running, changes in the local repository are detected and transfers are initiated, but they stay at 0%. How can I go about trouble-shooting this? I've made the remote annex directories 777 permissions for testing, but no change.
+
+Thanks
diff --git a/doc/forum/SSH_remote_transfers_queued_but_no_movement/comment_1_fea4e2317f850d6166480cddba088ae5._comment b/doc/forum/SSH_remote_transfers_queued_but_no_movement/comment_1_fea4e2317f850d6166480cddba088ae5._comment
new file mode 100644
index 000000000..d9bf5a97f
--- /dev/null
+++ b/doc/forum/SSH_remote_transfers_queued_but_no_movement/comment_1_fea4e2317f850d6166480cddba088ae5._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-09-18T19:41:39Z"
+ content="""
+First, take a look at the output of `ps fax` .. you should see a `git-annex assistant` process and near it there ought to be a `git annex transferkeys` process. See if that process has any children under it, like perhaps a rsync. If so, it might just be stalled talking to the host for some reason.
+
+The best way to debug it further is probably to run `git annex copy --to $remote` at the command line, passing the name of your remote repository. See if it also stalls there. If so, add a --debug and you can see the actual rsync commands it's using, and perhaps work out the problem from there.
+"""]]
diff --git a/doc/forum/Sending_requests_across_the_network.mdwn b/doc/forum/Sending_requests_across_the_network.mdwn
new file mode 100644
index 000000000..db5322477
--- /dev/null
+++ b/doc/forum/Sending_requests_across_the_network.mdwn
@@ -0,0 +1,15 @@
+Hi,
+
+Is it possible to have git-annex send requests across the repository network? Say I have a network topology like this:
+Home (annex) <-> Cloud (S3) <-> Laptop (annex)
+
+Home has all files, cloud has zero, and laptop has subset of files. Let's also assume Laptop can't talk to Home directly (maybe it's behind a NAT), but both Home and Laptop are connected to the internet.
+If I'm away on my laptop, can I retrieve a file from Home "through" Cloud?
+
+That is, Laptop checking its remotes and none of them have the file I want, so it checks remotes of remotes, etc. I'm not sure if git-annex knows the topology (seems likely considering it can generate the graphviz image). It also seems there is a communication medium of Jabber/XMPP where it could communicate between internet-connected git-annex servers (which might not otherwise be able to talk to each other directly)? So the fact that Cloud isn't a git-annex server, just a dumb key/value store would be okay?
+
+I realize that I could set it up so Home mirrors everything to Cloud and then that eventually mirrors over to Laptop, but let's assume both Cloud and Laptop have small storage capacities, so on-demand fetching would be needed.
+
+This is basically the same usecase as the USB transfer drive to sync two annexes not on the same network, but automated.
+
+Thanks!
diff --git a/doc/forum/Sending_requests_across_the_network/comment_1_8ff713d4c968705061bf2044ea0fe5a0._comment b/doc/forum/Sending_requests_across_the_network/comment_1_8ff713d4c968705061bf2044ea0fe5a0._comment
new file mode 100644
index 000000000..8cb4575c1
--- /dev/null
+++ b/doc/forum/Sending_requests_across_the_network/comment_1_8ff713d4c968705061bf2044ea0fe5a0._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://ypid.wordpress.com/"
+ ip="213.153.84.215"
+ subject="preferred content …"
+ date="2014-07-02T07:26:59Z"
+ content="""
+Hi
+
+This can be accomplished with the use of [[/preferred_content/]].
+"""]]
diff --git a/doc/forum/Sending_requests_across_the_network/comment_2_cb29e5346a8775d87d30b18b7fc005a7._comment b/doc/forum/Sending_requests_across_the_network/comment_2_cb29e5346a8775d87d30b18b7fc005a7._comment
new file mode 100644
index 000000000..87e6976fe
--- /dev/null
+++ b/doc/forum/Sending_requests_across_the_network/comment_2_cb29e5346a8775d87d30b18b7fc005a7._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 2"
+ date="2014-07-02T17:25:51Z"
+ content="""
+The network topology shown has only a S3 special remote connecting the two repositories. This only provides a place to store file contents, it does not allow syncing the contents of git repositories.
+
+You need either XMPP(Jabber) for that, or a git remote on some other server. Once there is a way for the git repository to sync, the Home repository will see when Laptop is missing a file it wants (configured via the preferred content mentioned above), and upload it to S3.
+"""]]
diff --git a/doc/forum/Shared_Encryption_does_not_Work_as_Expected.mdwn b/doc/forum/Shared_Encryption_does_not_Work_as_Expected.mdwn
new file mode 100644
index 000000000..660006a5b
--- /dev/null
+++ b/doc/forum/Shared_Encryption_does_not_Work_as_Expected.mdwn
@@ -0,0 +1,11 @@
+I recently started to set up a share that would be synced between multiple machines. Since I control all of them I thought it might be cool to try using the suggested "shared encryption". This seems to have been a mistake.
+
+My project folder is now a big mess of symlinks to read-only files.
+
+I can fix this with a "cp -RH" and get my data back and I can muddle through fixing the permissions but this leads me to two conclusions:
+
+1. I did something wrong but I don't know what. Should I have created the ssh remote first and the local repo second?
+
+2. This feature should either be hidden or the UI should be much more explicit about how to use it properly. This cost me quite a bit of time and frustration.
+
+I really like git-annex so I would appreciate any comments or suggestions.
diff --git a/doc/forum/Shared_Encryption_does_not_Work_as_Expected/comment_1_793c71a1efcf160e1829bec3ef0b1be6._comment b/doc/forum/Shared_Encryption_does_not_Work_as_Expected/comment_1_793c71a1efcf160e1829bec3ef0b1be6._comment
new file mode 100644
index 000000000..25424d4a0
--- /dev/null
+++ b/doc/forum/Shared_Encryption_does_not_Work_as_Expected/comment_1_793c71a1efcf160e1829bec3ef0b1be6._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://openid.stackexchange.com/user/e65e6d0e-58ba-41de-84cc-1f2ba54cf574"
+ nickname="Mica Semrick"
+ subject="details"
+ date="2014-11-16T04:42:36Z"
+ content="""
+Hello,
+
+It is hard to say what happened without an error message or description of what you did. Perhaps you can share those details.
+"""]]
diff --git a/doc/forum/Shared_Encryption_does_not_Work_as_Expected/comment_2_6b603265a2fc78bd2df54102bf94234f._comment b/doc/forum/Shared_Encryption_does_not_Work_as_Expected/comment_2_6b603265a2fc78bd2df54102bf94234f._comment
new file mode 100644
index 000000000..bec7954c8
--- /dev/null
+++ b/doc/forum/Shared_Encryption_does_not_Work_as_Expected/comment_2_6b603265a2fc78bd2df54102bf94234f._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2014-12-02T17:37:49Z"
+ content="""
+Symlinks to read-only files in .git/annex/objects is how a git-annex
+repository normally looks.
+
+Perhaps you want to use [[direct_mode]]?
+
+This has nothing to do with shared encryption that I can see.
+"""]]
diff --git a/doc/forum/Sharing_annex_with_local_clones/comment_4_5c870c49d8093e1a2895224cc6e91ca0._comment b/doc/forum/Sharing_annex_with_local_clones/comment_4_5c870c49d8093e1a2895224cc6e91ca0._comment
new file mode 100644
index 000000000..5bdaa1700
--- /dev/null
+++ b/doc/forum/Sharing_annex_with_local_clones/comment_4_5c870c49d8093e1a2895224cc6e91ca0._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkr_KjpfjbrD4ln15NsBBn7c9j90U6uwqY"
+ nickname="Nicolas"
+ subject="comment 4"
+ date="2014-11-04T23:05:46Z"
+ content="""
+On file system not supporting reflink is there another solution for sharing annex with local clones ?
+"""]]
diff --git a/doc/forum/Sharing_annex_with_local_clones/comment_5_0bf4c0aa3258b156a3df794d5fabb6a2._comment b/doc/forum/Sharing_annex_with_local_clones/comment_5_0bf4c0aa3258b156a3df794d5fabb6a2._comment
new file mode 100644
index 000000000..5fb2eaec6
--- /dev/null
+++ b/doc/forum/Sharing_annex_with_local_clones/comment_5_0bf4c0aa3258b156a3df794d5fabb6a2._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 5"""
+ date="2014-11-06T19:50:54Z"
+ content="""
+Yes, there's another option since git-annex version 5.20140915.
+
+annex.hardlink can be set to true, and then `git annex get` will
+simply hardlink the files into place.
+
+Note the caution about using this option:
+
+ Use with caution -- This can invalidate numcopies counting,
+ since with hard links, fewer copies of a file can exist. So, it
+ is a good idea to mark a repository using this setting as
+ untrusted.
+
+And, there's a nice easy way to set up local clone that is configured this way:
+
+ When a repository is set up using git clone --shared, git-annex
+ init will automatically set annex.hardlink and mark the reposi‐
+ tory as untrusted.
+"""]]
diff --git a/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff.mdwn b/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff.mdwn
new file mode 100644
index 000000000..3d93d8026
--- /dev/null
+++ b/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff.mdwn
@@ -0,0 +1,22 @@
+I'm using git-annex to manage my photos on my laptop, and have my NAS (which is just a debian linux system with lots of disks) as one of my remotes. I use my NAS as a backup, and to free up space on my laptop.
+
+But somehow I now have lots of directories in my main root directory of the photos directory. it looks like [0-9a-f][0-9a-f][0-9a-f], so I have 000, ... a00, ... ddd, ..., all the way to fff. Thousands of them. Each one has a few directories that also match [0-9a-f][0-9a-f][0-9a-f], and each one has a file with names of the git annex object filename.
+
+e.g.:
+
+ $ cat e1d/760/SHA256-s4061375--7909e266f340ff8bc692e073e776ceda267042adf790275a2d851f2c7eb1ca83.log
+ 1338931894.759394s 1 1adfa84c-af51-11e1-b075-0b1206d553bc
+ 1338992164.202818s 1 721d82ae-afbb-11e1-b78f-f396ebf52c05
+ 1339862991.346546s 1 721d82ae-afbb-11e1-b78f-f396ebf52c05
+ 1339946933.224915s 1 224d85b4-b86f-11e1-b11e-3333ce526126
+ 1339964057.205993s 1 224d85b4-b86f-11e1-b11e-3333ce526126
+ 1343495865.083951s 1 721d82ae-afbb-11e1-b78f-f396ebf52c05
+ 1344788941.403528s 1 721d82ae-afbb-11e1-b78f-f396ebf52c05
+ 1351802706.679542s 1 721d82ae-afbb-11e1-b78f-f396ebf52c05
+ 1362423729.820711s 1 721d82ae-afbb-11e1-b78f-f396ebf52c05
+
+My remote (NAS) has these files & directories as well as my laptop. The regular photo directory hierarchy is there as well, the files work, can be copied etc. "git status" say nothing has changed. Those files are tracked by git (they have lot messages). Everything just works, it's just that there's loads of these directories? Can I remove them? How can I clear it up? I can't remember when these directories/files were added, I only noticed it today.
+
+I don't know if I had my remote (NAS) as a bare git repo and used it as that, then somehow used it as a non-bare one, would that cause this?
+
+Can I remove them? Where did they come from? What's going on?
diff --git a/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff/comment_1_20147b287fd995fa8ac9e868b5974d8a._comment b/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff/comment_1_20147b287fd995fa8ac9e868b5974d8a._comment
new file mode 100644
index 000000000..1f5018e34
--- /dev/null
+++ b/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff/comment_1_20147b287fd995fa8ac9e868b5974d8a._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-10T19:50:38Z"
+ content="""
+The files that you describe are normally tucked away on the git-annex branch of the git repository, where they're neither seen nor heard.
+
+The most likely cause of your problem would be if you have done a \"git checkout git-annex\" ... or worse, a \"git merge git-annex\".
+
+So, check what branch you have checked out, and if it's the git-annex branch, you'll want to change back to master. If you've got master checked out and have these files, you can use `git log --stat` and see if there's a commit that added a bunch of these files to your master branch. Then you can revert that commit.
+"""]]
diff --git a/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff/comment_2_f6d977a534264b4368401e1b13628931._comment b/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff/comment_2_f6d977a534264b4368401e1b13628931._comment
new file mode 100644
index 000000000..e90238063
--- /dev/null
+++ b/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff/comment_2_f6d977a534264b4368401e1b13628931._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://launchpad.net/~rorymcc"
+ nickname="rorymcc"
+ subject="comment 2"
+ date="2014-08-11T18:37:46Z"
+ content="""
+Thanks for your reply. I think I might have done a \"git merge git-annex\" at some point (or many times), because I thought that was what you were supposed to do... :( PEBKAC I'll try to fix up my repository. Thanks.
+"""]]
diff --git a/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff/comment_3_d534da276b79a40fdb7d8d158f6eae26._comment b/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff/comment_3_d534da276b79a40fdb7d8d158f6eae26._comment
new file mode 100644
index 000000000..214444c61
--- /dev/null
+++ b/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff/comment_3_d534da276b79a40fdb7d8d158f6eae26._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://launchpad.net/~rorymcc"
+ nickname="rorymcc"
+ subject="comment 3"
+ date="2014-08-11T18:41:05Z"
+ content="""
+Would just standard \"git rm ./000/\" etc. in master be OK? Instead of hunting down and reverting all the commits?
+"""]]
diff --git a/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff/comment_4_8c817d08ca9d94a1228fb21cd0b15744._comment b/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff/comment_4_8c817d08ca9d94a1228fb21cd0b15744._comment
new file mode 100644
index 000000000..74a3a2a75
--- /dev/null
+++ b/doc/forum/Somehow_have_lots_of_directories_in_root:_000...ffff/comment_4_8c817d08ca9d94a1228fb21cd0b15744._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 4"
+ date="2014-08-12T17:50:15Z"
+ content="""
+Sure, it's fine to delete the files. The same info will be committed to git either way.
+"""]]
diff --git a/doc/forum/Special_remote_public_key_encryption_issue.mdwn b/doc/forum/Special_remote_public_key_encryption_issue.mdwn
new file mode 100644
index 000000000..aed35ad31
--- /dev/null
+++ b/doc/forum/Special_remote_public_key_encryption_issue.mdwn
@@ -0,0 +1,18 @@
+I'm unable to set up a standard architecture: 2 computers sharing some files, talking via a jabber account and transferring files via e.g. box.com.
+Steps:
+
+Computer 1:
+a) Install git-annex, open up the assistant, create a new repository, add a jabber account
+b) Add a box.com account using
+WEBDAV_USERNAME=[username] WEBDAV_PASSWORD=[password] git annex initremote box.com type=webdav url=https://dav.box.com/dav/git-annex chunksize=75mb encryption=pubkey keyid=[key id].
+All seemed fine.
+
+Computer 2:
+a) same
+b) at this point I saw the option of adding box.com as a cloud storage. I clicked enable and got the message
+
+user error (gpg ["--quiet","--trust-model","always","--decrypt"] exited 2)
+
+In the meantime, on Computer 1 I saw the same option. I clicked enable and got the same message.
+
+It all works fine if I use shared encryption.
diff --git a/doc/forum/Special_remote_public_key_encryption_issue/comment_1_a9caafea017a3c148f89d4ddeee15a4c._comment b/doc/forum/Special_remote_public_key_encryption_issue/comment_1_a9caafea017a3c148f89d4ddeee15a4c._comment
new file mode 100644
index 000000000..6c5a35c3a
--- /dev/null
+++ b/doc/forum/Special_remote_public_key_encryption_issue/comment_1_a9caafea017a3c148f89d4ddeee15a4c._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-05-16T18:22:26Z"
+ content="""
+Which is why the assistant uses shared encryption by default..
+
+You have set up a webdav repository using a gpg key that is on computer 1. To be able to access this repository on computer 2 you'll need to either copy the gpg private key from computer 1, or give computer 2 its own key and, on computer 1, add that key as one that can access the webdav repository.
+"""]]
diff --git a/doc/forum/Special_remote_public_key_encryption_issue/comment_2_adfa582d611ca501e21110282df07315._comment b/doc/forum/Special_remote_public_key_encryption_issue/comment_2_adfa582d611ca501e21110282df07315._comment
new file mode 100644
index 000000000..8e2753530
--- /dev/null
+++ b/doc/forum/Special_remote_public_key_encryption_issue/comment_2_adfa582d611ca501e21110282df07315._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="hyperio"
+ ip="62.31.92.216"
+ subject="Still not working"
+ date="2014-05-17T12:22:17Z"
+ content="""
+Thank you for your reply. I copied over the public key from computer 2 to computer 1 and tried to add it using git annex enableremote box.com keyid+=[keyid]. I am then asked for the passphrase for my private key on computer 1. Afterwards I am asked for the passphrase for the private key on computer 2... why? Obviously I don't have it so I get
+
+gpg: can't query passphrase in batch mode
+gpg: decryption failed: secret key not available
+
+git-annex: user error (gpg [\"--quiet\",\"--trust-model\",\"always\",\"--batch\",\"--decrypt\"] exited 2)
+
+Why would I need computer 2's secret key? Or I might just get it completely wrong.
+Also, can the passphrase be remembered somewhere, so that I can use the assistant? (otherwise I think it won't work, because I would have to type the passphrase at every synchronisation attempt).
+
+Sorry for my confusion, thanks for your support.
+"""]]
diff --git a/doc/forum/Special_remote_public_key_encryption_issue/comment_3_eac16bf98a6e87461ba2f3ab7e990b2b._comment b/doc/forum/Special_remote_public_key_encryption_issue/comment_3_eac16bf98a6e87461ba2f3ab7e990b2b._comment
new file mode 100644
index 000000000..692b307b1
--- /dev/null
+++ b/doc/forum/Special_remote_public_key_encryption_issue/comment_3_eac16bf98a6e87461ba2f3ab7e990b2b._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="216.145.95.162"
+ subject="comment 3"
+ date="2014-05-17T17:02:15Z"
+ content="""
+I dont think it's possible for gpg to prompt for a passphrase when all it has is a public key, so I think you copied the private key too.
+
+gpg agents can cache your passphrase.
+"""]]
diff --git a/doc/forum/Special_remote_public_key_encryption_issue/comment_6_097f52aaf178340b3abb5bfc80f0d447._comment b/doc/forum/Special_remote_public_key_encryption_issue/comment_6_097f52aaf178340b3abb5bfc80f0d447._comment
new file mode 100644
index 000000000..93fa8b5b9
--- /dev/null
+++ b/doc/forum/Special_remote_public_key_encryption_issue/comment_6_097f52aaf178340b3abb5bfc80f0d447._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="hyperio"
+ ip="62.31.92.216"
+ subject="Still not working"
+ date="2014-05-17T17:25:39Z"
+ content="""
+I exported the public key on computer 2 with gpg --armor --export [keyid] and just imported it on computer 1...
+"""]]
diff --git a/doc/forum/Ssh_remote_on_NAS.mdwn b/doc/forum/Ssh_remote_on_NAS.mdwn
new file mode 100644
index 000000000..27bca5a51
--- /dev/null
+++ b/doc/forum/Ssh_remote_on_NAS.mdwn
@@ -0,0 +1,34 @@
+Hello,
+
+I finally have git annex working on my NAS (QNAP TS-119P II) thanks to the stand-alone arm pre-build package.
+
+I've just extracted all the files on my NAS and I've linked all the exec files from the git-annex.linux folder to links placed in a path folder, so that I can run git annex everywhere on the NAS.
+
+ [~] # git annex version
+ git-annex version: 5.20140528-g92a0591
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+
+Now I'm trying to set it up as an SSH remote of my laptop repository, but I get this error:
+
+ git clone ssh://admin@nas:/share/HDA_DATA/myDir ./
+ Cloning into '.'...
+ admin@nas's password:
+ sh: git-upload-pack: command not found
+ fatal: Could not read from remote repository.
+
+ Please make sure you have the correct access rights
+ and the repository exists.
+
+I've checked that git-upload-pack is available both on my laptop and on the NAS and the "myDir" folder is supposed to be readable for the admin user on the NAS, even if the user I use on the laptop and on the NAS for git annex is different from the one I use to login. In fact, if I try to scp files from the annex folder then I don't get any permissions error.
+
+ scp admin@192.168.132.66:/share/HDA_DATA/myDir/* ./
+ admin@192.168.132.66's password:
+ doctest 100% 5 0.0KB/s 0.0KB/s 00:00
+ doctest2 100% 51 0.1KB/s 0.1KB/s 00:01
+
+Is there something else I should look at, in order to fix it and make it work?
+
+Thanks,
+Fabio
diff --git a/doc/forum/Ssh_remote_on_NAS/comment_1_1dd8a0d0e70a1fb36fce62e89c99b404._comment b/doc/forum/Ssh_remote_on_NAS/comment_1_1dd8a0d0e70a1fb36fce62e89c99b404._comment
new file mode 100644
index 000000000..6563a9bb6
--- /dev/null
+++ b/doc/forum/Ssh_remote_on_NAS/comment_1_1dd8a0d0e70a1fb36fce62e89c99b404._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-11T19:46:05Z"
+ content="""
+How did you set your PATH? Note that the bash shell provides a lot of dotfiles which you can set the PATH in -- and reuses to read any single one of them when a noninteractive login is made to run a command.
+
+It might help to install git on the NAS. It's included in the git-annex tarball, but not in a way that will put it on PATH; only in a way that will let git-annex use it.
+"""]]
diff --git a/doc/forum/Ssh_remote_on_NAS/comment_2_261601313d8825c52322949b8509bc74._comment b/doc/forum/Ssh_remote_on_NAS/comment_2_261601313d8825c52322949b8509bc74._comment
new file mode 100644
index 000000000..1cc8fb444
--- /dev/null
+++ b/doc/forum/Ssh_remote_on_NAS/comment_2_261601313d8825c52322949b8509bc74._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="feulif"
+ ip="20.133.1.1"
+ subject="comment 2"
+ date="2014-07-15T18:03:56Z"
+ content="""
+> How did you set your PATH? Note that the bash shell provides a lot of dotfiles which you can set the PATH in -- and reuses to read any single one of them when a noninteractive login is made to run a command.
+
+Actually I didn't set the PATH: I've just sim-linked executable files from git-annex stand-alone folder to a directory that was in my PATH already.
+
+> It might help to install git on the NAS. It's included in the git-annex tarball, but not in a way that will put it on PATH; only in a way that will let git-annex use it.
+
+It was installed, bud I've removed it because it was \"conflicting\" with the one used by git-annex. That is, when I ran any \"git annex ...\" command, git was complaining it could not find git-annex (because my nas was running the installed git binary file).
+Without git, I don't have this conflict anymore and I can effectively use git-annex when I'm logged in my NAS, but I still can't add it as an SSH remote.
+
+"""]]
diff --git a/doc/forum/Ssh_remote_on_NAS/comment_3_ed602f4f972b78bce4f62bdfca8cfe47._comment b/doc/forum/Ssh_remote_on_NAS/comment_3_ed602f4f972b78bce4f62bdfca8cfe47._comment
new file mode 100644
index 000000000..7ddb9dc8d
--- /dev/null
+++ b/doc/forum/Ssh_remote_on_NAS/comment_3_ed602f4f972b78bce4f62bdfca8cfe47._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 3"
+ date="2014-07-15T18:55:58Z"
+ content="""
+I don't think it was a good idea to remove git from the NAS. To set up a git remote, you necessarily need to have git installed on the remote.
+
+`git annex` should work as long as git-annex is somewhere in PATH -- unless your build of git is very strange and does not check PATH for git-foo commands.
+Even if this was the case, you could run `git-annex` instead.
+"""]]
diff --git a/doc/forum/Ssh_remote_on_NAS/comment_4_423244f174123318f1ece7b5794aeea5._comment b/doc/forum/Ssh_remote_on_NAS/comment_4_423244f174123318f1ece7b5794aeea5._comment
new file mode 100644
index 000000000..9b0a03ecf
--- /dev/null
+++ b/doc/forum/Ssh_remote_on_NAS/comment_4_423244f174123318f1ece7b5794aeea5._comment
@@ -0,0 +1,28 @@
+[[!comment format=mdwn
+ username="feulif"
+ ip="151.27.171.22"
+ subject="comment 4"
+ date="2014-07-17T22:24:45Z"
+ content="""
+First of all, I understand this is more a nas-related issue rather than a git-annex-related one, so thank you for your support and valuable software.
+
+But I'm still struggling with this error.
+
+Now I've reinstalled git on the NAS and, as previously, I can run every git command when I'm logged in.
+But when I try to sync my PC with the git remote on the NAS, then I get this error:
+
+
+ git annex sync
+ sh: git-annex-shell: command not found
+ sh: git-upload-pack: command not found
+ fatal: Could not read from remote repository.
+
+ Please make sure you have the correct access rights
+ and the repository exists.
+ commit
+ ok
+ git-annex: no branch is checked out
+
+Can this be really related to some access right? What user is git annex using when syncing with an SSH remote (e.g. admin) ? the one I specified when setting up the remote? where is it complaining about git-upload-pack non found, on the nas or on the PC I'm syncing from?
+
+"""]]
diff --git a/doc/forum/Ssh_remote_on_NAS/comment_5_07348ed61ccdd93417365f1525a05bf2._comment b/doc/forum/Ssh_remote_on_NAS/comment_5_07348ed61ccdd93417365f1525a05bf2._comment
new file mode 100644
index 000000000..c8e631226
--- /dev/null
+++ b/doc/forum/Ssh_remote_on_NAS/comment_5_07348ed61ccdd93417365f1525a05bf2._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 5"""
+ date="2014-10-28T20:26:08Z"
+ content="""
+git-upload-pack is a git command, which is not present in PATH
+on your NAS when git sshes in and tries to run it.
+"""]]
diff --git a/doc/forum/Stale_keys_and_.cache_files_left_in_.git__47__annex__47__objects.mdwn b/doc/forum/Stale_keys_and_.cache_files_left_in_.git__47__annex__47__objects.mdwn
new file mode 100644
index 000000000..043a3f2db
--- /dev/null
+++ b/doc/forum/Stale_keys_and_.cache_files_left_in_.git__47__annex__47__objects.mdwn
@@ -0,0 +1,39 @@
+I recently migrated some of my repositories from WORM to SHA1E, and
+noticed after finishing conversion and dropping all WORM keys that
+there are some stale files and directories left over in the
+.git/annex/objects directory. These seem to fall into two categories:
+
+1. There are some empty directories meant for WORM-keys. Strangely, I
+don’t believe the content of these keys has ever been present on this
+machine, and the corresponding .log files do not contain the local
+UUID. What might be the deal with those?
+
+Another set of empty WORM directories housed content I unannexed and
+checked into regular git on my other remote, and then pulled locally.
+A subsequent «dropunused» seems to have left the empty directories
+after dropping their content.
+
+I suppose the stale directories can be safely pruned away?
+
+One thing I noticed is that, while the terminal leaf in the objects
+directory is usually sticky (mode +t), the stale directories to
+content I unannexed are all non-sticky. Maybe this gives some
+indication where things got stuck? A few (though not all) of the other
+terminal directories are non-sticky, as well.
+
+2. There are some .map and .cache files leftover in
+.git/annex/objects. This is an indirect repository, but I briefly
+switched it to direct once. The stale files seem to belong to content
+with which I had some difficulties when «git annex add»’ing the files
+(I recall I had to add them multiple times before they were correctly
+indexed). I now examined these files again and noticed they were
+tracked via regular git. I «git rm»’ed them and readded them into the
+annex. Can the stale .cache and .map files be safely deleted?
+
+I noticed some of these keys have the format
+«WORM-s123-m-123456789--name», with an additional dash before the
+mtime. Has there been a format change, or does this indicate a
+problem?
+
+Best regards,
+Z.
diff --git a/doc/forum/Stale_keys_and_.cache_files_left_in_.git__47__annex__47__objects/comment_1_2aa80b317863a99e676a375d907d0e84._comment b/doc/forum/Stale_keys_and_.cache_files_left_in_.git__47__annex__47__objects/comment_1_2aa80b317863a99e676a375d907d0e84._comment
new file mode 100644
index 000000000..34cbb011a
--- /dev/null
+++ b/doc/forum/Stale_keys_and_.cache_files_left_in_.git__47__annex__47__objects/comment_1_2aa80b317863a99e676a375d907d0e84._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 1"
+ date="2014-10-02T16:23:35Z"
+ content="""
+I cannot see a way that eg, `dropunused` could leave empty object directories. The few functions that remove content from a repository call `cleanObjectLoc` to prune the empty directories that result. Of course, the empty directories can be safely removed.
+
+IIRC older versions of direct mode might have made stale .cache and .map before. They can be deleted if you're not using direct mode.
+
+The only way I can see that a dash could come before the 'm' and the mtime is if the mtime were negative. I don't know how that would happen, but the code has certainly never put a dash there, and
+WORM-s123-m-123456789--name is not a valid git-annex key; git-annex cannot parse it.
+"""]]
diff --git a/doc/forum/Standard_groups__47__preferred_contents.mdwn b/doc/forum/Standard_groups__47__preferred_contents.mdwn
new file mode 100644
index 000000000..89e2b848c
--- /dev/null
+++ b/doc/forum/Standard_groups__47__preferred_contents.mdwn
@@ -0,0 +1,14 @@
+Sorry that I am not stop asking questions - I am trying to wrap my head around annex still - and I do not fully understand the standard groups/preferred contents yet.
+
+
+First, basic: Is the "preferred content group" an attribute of a repository or of a remote? E.g., when I use assistant, I can set this property for a *remote* repository. Will this property be synced to all other clients then or is it only valid for this particular client?
+
+Second, I think the standard groups do still not cover what I want and I wonder if this could be done with preferred contents somehow? What I want:
+
+* Generally only the structure should be synced, no contents (i.e. "manual" is the closest)
+
+* When I (manually) do "git annex get" on a file this file should be synced whenever it changes locally *or* remotely (until I drop it again). Currently it seems that when it changes remotely, it is "dropped" again so I need to manually use "git annex get" again
+
+* When I (manually) do "git annex get" on a directory, it should be (recursively) synced whenever it or any file changes locally or remotely (until I drop it again). Currently nothing seems to sync at all in this case (except the meta data)
+
+Thanks!
diff --git a/doc/forum/Standard_groups__47__preferred_contents/comment_1_143aa3095d7222c869c36a5039282e35._comment b/doc/forum/Standard_groups__47__preferred_contents/comment_1_143aa3095d7222c869c36a5039282e35._comment
new file mode 100644
index 000000000..343a049e7
--- /dev/null
+++ b/doc/forum/Standard_groups__47__preferred_contents/comment_1_143aa3095d7222c869c36a5039282e35._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="sts"
+ ip="134.147.73.126"
+ subject="comment 1"
+ date="2014-07-18T21:16:50Z"
+ content="""
+> First, basic: Is the \"preferred content group\" an attribute of a repository or of a remote? E.g., when I use assistant, I can set this property for a remote repository. Will this property be synced to all other clients then or is it only valid for this particular client?
+
+Yeah, it syncs the content group between the remotes, so you have to set it only in one repository and the information gets synced across the network.
+
+> Second, I think the standard groups do still not cover what I want and I wonder if this could be done with preferred contents somehow? What I want:
+> Generally only the structure should be synced, no contents (i.e. \"manual\" is the closest)
+
+Well, I guess you have to manually create a git repo (but no annex repo!) on your remote. Once you add the remote the assistant should tell you that he can only sync the metadata, but no contents.
+
+"""]]
diff --git a/doc/forum/Standard_groups__47__preferred_contents/comment_2_65bef012eb113986a2e9b02470a6cbd1._comment b/doc/forum/Standard_groups__47__preferred_contents/comment_2_65bef012eb113986a2e9b02470a6cbd1._comment
new file mode 100644
index 000000000..df204b058
--- /dev/null
+++ b/doc/forum/Standard_groups__47__preferred_contents/comment_2_65bef012eb113986a2e9b02470a6cbd1._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmMLeU-zCzx2mc5pL2XT8a1UNkQwHAHjg8"
+ nickname="daniele"
+ subject="comment 2"
+ date="2014-07-19T00:38:58Z"
+ content="""
+ Generally only the structure should be synced, no contents (i.e. \"manual\" is the closest)
+ Currently it seems that when it changes remotely, it is \"dropped\" again so I need to manually use \"git annex get\" again
+
+Maybe this could work?
+
+(in preferred content) exclude=\"*\" and present
+
+So that what is present is preferred and not dropped, everything else is not downloaded unless the user explicitly asks to get it.
+"""]]
diff --git a/doc/forum/Standard_groups__47__preferred_contents/comment_3_202a7e2820e0adf079ccd14a7993ad25._comment b/doc/forum/Standard_groups__47__preferred_contents/comment_3_202a7e2820e0adf079ccd14a7993ad25._comment
new file mode 100644
index 000000000..523aa742a
--- /dev/null
+++ b/doc/forum/Standard_groups__47__preferred_contents/comment_3_202a7e2820e0adf079ccd14a7993ad25._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="204.17.143.10"
+ subject="comment 3"
+ date="2014-07-22T00:11:34Z"
+ content="""
+Unfortunately the same :(
+
+Testcase:
+1.) Create a file 'file' on the server, git annex add/sync etc.
+2.) On the client: git annex wanted here 'exclude=\"*\" and present'
+3.) On the client: git annex get file . The file is now present on the client
+4.) Change the file on the server, git annex sync
+5.) git annex sync --content on the client
+
+Result: File is dropped again on client
+
+
+
+
+"""]]
diff --git a/doc/forum/Standard_groups__47__preferred_contents/comment_4_e0faf9ebd3162e0de860eba0fd28c67c._comment b/doc/forum/Standard_groups__47__preferred_contents/comment_4_e0faf9ebd3162e0de860eba0fd28c67c._comment
new file mode 100644
index 000000000..50acdbc4a
--- /dev/null
+++ b/doc/forum/Standard_groups__47__preferred_contents/comment_4_e0faf9ebd3162e0de860eba0fd28c67c._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="204.17.143.10"
+ subject="comment 4"
+ date="2014-07-22T00:24:46Z"
+ content="""
+... and for the directories the same:
+
+1.) Create a (sub-)directory 'subdir' with files and sync everything
+2.) On the client: git annex get subdir . The subdirectory is now present, all files under it downloaded.
+3.) On the server create a new file in 'subdir' and git annex add; git annex sync --content
+4.) git annex sync --content on the client
+
+Result: Content of the files is not synced to client
+"""]]
diff --git a/doc/forum/Standard_groups__47__preferred_contents/comment_5_eb47696244931173bddcbeb8d5f78637._comment b/doc/forum/Standard_groups__47__preferred_contents/comment_5_eb47696244931173bddcbeb8d5f78637._comment
new file mode 100644
index 000000000..fa5c47ee2
--- /dev/null
+++ b/doc/forum/Standard_groups__47__preferred_contents/comment_5_eb47696244931173bddcbeb8d5f78637._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmMLeU-zCzx2mc5pL2XT8a1UNkQwHAHjg8"
+ nickname="daniele"
+ subject="comment 5"
+ date="2014-07-22T00:29:20Z"
+ content="""
+wait, is the group working together with the preferred content?
+
+Usually you set a repository in a group and then you tell annex that particular group has this preferred content expression (which by default is set to 'standard'). So you could add the repo to 'client' group then set the group 'client' to that preferred content expression. If you only want that particular client to have that expression you can play around with \"groupwanted\", or even define your own group I guess.
+
+Use \"git annex vicfg\" to quickly check both \"group\" and \"wanted\" settings together.
+
+"""]]
diff --git a/doc/forum/Standard_groups__47__preferred_contents/comment_6_c70c9fa97bce8e4eb9b3880d8f843aef._comment b/doc/forum/Standard_groups__47__preferred_contents/comment_6_c70c9fa97bce8e4eb9b3880d8f843aef._comment
new file mode 100644
index 000000000..435d7f7d2
--- /dev/null
+++ b/doc/forum/Standard_groups__47__preferred_contents/comment_6_c70c9fa97bce8e4eb9b3880d8f843aef._comment
@@ -0,0 +1,25 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="204.17.143.10"
+ subject="comment 6"
+ date="2014-07-23T05:20:47Z"
+ content="""
+Hi daniele,
+
+I am not completely sure what you mean but I as far as I understand as soon as I set \"wanted\" to anything other than \"default\" the standard groups do not apply at all.
+I can't use vicfg because I use windows and this command hangs ... probably because there is no vi.
+
+However, I can still check the expressions:
+
+ $ git annex group here
+ manual
+ $ git annex wanted here
+ exclude=\"*\" and present
+ $
+
+Have you tried this? Does it work in your case?
+Because the standard preferred contents also contains \"present\" so I assume it would behave the same.
+Is maybe \"present\" broken or the behavior different than expected?
+
+
+"""]]
diff --git a/doc/forum/Standard_groups__47__preferred_contents/comment_7_413593ea0663874196305c9eb602e7c4._comment b/doc/forum/Standard_groups__47__preferred_contents/comment_7_413593ea0663874196305c9eb602e7c4._comment
new file mode 100644
index 000000000..32bfa6bc0
--- /dev/null
+++ b/doc/forum/Standard_groups__47__preferred_contents/comment_7_413593ea0663874196305c9eb602e7c4._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 7"""
+ date="2014-10-28T20:23:55Z"
+ content="""
+See [[bugs/present_files__47__directories_are_dropped_after_a_sync]]
+"""]]
diff --git a/doc/forum/Standards_usage_pattern__63__.mdwn b/doc/forum/Standards_usage_pattern__63__.mdwn
new file mode 100644
index 000000000..280e909a5
--- /dev/null
+++ b/doc/forum/Standards_usage_pattern__63__.mdwn
@@ -0,0 +1,8 @@
+Hi,
+
+I have few devices: 2x android, 2x windows, 2x linux and I would like to share at least one folder on all of them.
+None of the devices have public IPs and some regularly change location (work laptops). Because the XMPP support is missing on windows I couldn't find a way to synchronize the repositories (the keys) or did I miss something in the documentation?
+How can I archieve "seamless" synchronization when I start the webapp on the devices?
+
+Thank you,
+Karol
diff --git a/doc/forum/Standards_usage_pattern__63__/comment_1_1ccbfaefe3bbaf767e999cd1c61debfb._comment b/doc/forum/Standards_usage_pattern__63__/comment_1_1ccbfaefe3bbaf767e999cd1c61debfb._comment
new file mode 100644
index 000000000..d96585f9b
--- /dev/null
+++ b/doc/forum/Standards_usage_pattern__63__/comment_1_1ccbfaefe3bbaf767e999cd1c61debfb._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk9SYh6N-JUMkYkW4aOk55zC3Vr9KonDV4"
+ nickname="Florian"
+ subject="comment 1"
+ date="2014-11-19T22:01:19Z"
+ content="""
+I think you need at least one server that is reachable from every device and serves as a transfer repository. XMPP is only needed to inform peers about changes. Usual the assistant performs a startup check and detects changes that way. You can't sync content over XMPP.
+All that is very afaik, I hope for corrections if wrong.
+"""]]
diff --git a/doc/forum/Starting_assistant_from_CLI.mdwn b/doc/forum/Starting_assistant_from_CLI.mdwn
new file mode 100644
index 000000000..8a4bc3d1b
--- /dev/null
+++ b/doc/forum/Starting_assistant_from_CLI.mdwn
@@ -0,0 +1,9 @@
+I am unable to start the git-annex assistant/webapp.
+
+I use OpenBox as desktop manager and the assistant/webapp is not available through the menu.
+
+Trying to use the CLI, all my attempts fail with a message saying that it(?) is not a git repository!? Since the video show that on first start the assistant/webapp allows a choice of a directory and then creates it, I am not sure as to what git initialized directory does the assistant/webapp requires in this instance. And I also guess that means invoking the webapp from that directory rather than from the directory that contains the standalone git-annex.
+
+Any help would be appreciated as git-annex really seems to be the app I am looking for. :)
+
+Thanks
diff --git a/doc/forum/Starting_assistant_from_CLI/comment_1_afd51ddb0f1bb3cac528e1d96829ef83._comment b/doc/forum/Starting_assistant_from_CLI/comment_1_afd51ddb0f1bb3cac528e1d96829ef83._comment
new file mode 100644
index 000000000..05c7a12d4
--- /dev/null
+++ b/doc/forum/Starting_assistant_from_CLI/comment_1_afd51ddb0f1bb3cac528e1d96829ef83._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://me.yahoo.com/a/FHnTlSBo1eCGJRwueeKeB6.RCaPbGMPr5jxx8A--#ce0d8"
+ nickname="Hamza"
+ subject="comment 1"
+ date="2014-04-14T15:35:17Z"
+ content="""
+running,
+
+ git annex webapp
+
+should launch the web app.
+"""]]
diff --git a/doc/forum/Starting_assistant_from_CLI/comment_2_76c34c00cf2065809b15a594023a688b._comment b/doc/forum/Starting_assistant_from_CLI/comment_2_76c34c00cf2065809b15a594023a688b._comment
new file mode 100644
index 000000000..d0ce4b28f
--- /dev/null
+++ b/doc/forum/Starting_assistant_from_CLI/comment_2_76c34c00cf2065809b15a594023a688b._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlqL3QbH6hrzf4XT-OW5IcMj6zSrMWl2dg"
+ nickname="Michel"
+ subject="comment 2"
+ date="2014-04-14T22:45:23Z"
+ content="""
+Unfortunately, no, I tried this and many other variants, (I tried again just now, to be sure, and I still get the \"git-annex: Not in a git repository.\" message.
+
+Thanks for trying to help. It is very much appreciated.
+
+"""]]
diff --git a/doc/forum/Starting_assistant_from_CLI/comment_3_f7826867f78b1adbfc2dad2fad4d6720._comment b/doc/forum/Starting_assistant_from_CLI/comment_3_f7826867f78b1adbfc2dad2fad4d6720._comment
new file mode 100644
index 000000000..fbe70c403
--- /dev/null
+++ b/doc/forum/Starting_assistant_from_CLI/comment_3_f7826867f78b1adbfc2dad2fad4d6720._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 3"
+ date="2014-04-17T20:48:56Z"
+ content="""
+Yes, the webapp is supposed to be able to be started from anywhere.
+
+1. If you make a git annex repository and run `git annex webapp` from inside it, it'll start up the webapp on that repository.
+2. If `~/.config/git-annex/autostart` lists some git repositories, the webapp will start up in the first listed one.
+3. Otherwise, the webapp will walk you through making a new repository.
+
+Most likely problem then is #2. If you used the webapp once, say in ~/annex and then deleted ~/annex/.git directory, it would try to start up in ~/annex, but it's no longer a git repository so it cannot start. This was a bug, so I've fixed it.
+You could work around that problem by deleting `~/.config/git-annex/autostart` too.
+
+If it's some other problem, you can work around it by going the #1 route and making a git repository by hand (\"git init annex; cd annex; git annex init\") and running the webapp in there.
+"""]]
diff --git a/doc/forum/Starting_assistant_from_CLI/comment_4_fa7055a232a1dcb743db47308f7acf0b._comment b/doc/forum/Starting_assistant_from_CLI/comment_4_fa7055a232a1dcb743db47308f7acf0b._comment
new file mode 100644
index 000000000..4eea29c5f
--- /dev/null
+++ b/doc/forum/Starting_assistant_from_CLI/comment_4_fa7055a232a1dcb743db47308f7acf0b._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlqL3QbH6hrzf4XT-OW5IcMj6zSrMWl2dg"
+ nickname="Michel"
+ subject="comment 4"
+ date="2014-04-18T00:20:47Z"
+ content="""
+Thank you.
+
+The problem was indeed with having a file containing a non-existent ~/.config/git-annex/autostart.
+
+I can now continue my evaluation of what looks like a very fine and useful piece of software.
+
+Thanks again for the help.
+"""]]
diff --git a/doc/forum/Storing_git_repos_in_git-annex.mdwn b/doc/forum/Storing_git_repos_in_git-annex.mdwn
new file mode 100644
index 000000000..964040cf0
--- /dev/null
+++ b/doc/forum/Storing_git_repos_in_git-annex.mdwn
@@ -0,0 +1,27 @@
+I tried to use the [old thread](http://git-annex.branchable.com/forum/Git_repos_in_git_annex__63__/?updated#comment-9fca5cf31ccfd3d78c78cb65f7672340) for this, but threads don't get bumped when they are updated, so I guess I'll have to start a new one...
+
+Here is the relevant [bug report](http://git-annex.branchable.com/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X).
+
+Here's my scenario: I have been using Dropbox for several years. I want to move to git-annex.
+
+For some time I used Bazaar repos inside Dropbox. A couple of times I accidentally modified files on one computer before another finished syncing, and the repo became mildly corrupted, but I recovered it okay.
+
+Recently I switched from bzr to git, and so far, so good. I'm careful not to make any changes to my files before Dropbox is finished syncing, so everything works fine.
+
+Now I'm testing git-annex as a replacement for Dropbox again. But when I add a directory containing a git repo to an annex, git-annex ignores the .git directory, so the repo isn't synced.
+
+I read this forum thread, and I read the bug report, but there don't appear to be any real solutions.
+
+This seems like what should be a fairly common use case: a user has a directory of simple text files, like shell scripts or org-mode files. He uses git to version-control them, and he uses Dropbox to sync the files and the git repo automatically between computers. Now the user wants to use git-annex instead, but if he does this, it will mean having to choose between:
+
+* No longer using git to version-control the files
+* Only using git on a single system, which means that he can't make commits or do any other git operations when using other systems
+* Keeping separate git repos on each system, and making the same commits manually on each one...which would be a mess
+* Keeping separate git repos on each system, and using a script to make commits automatically--which would mean commits wouldn't be any more useful than a simple timed backup script
+
+I guess I could just use git instead of Dropbox or git-annex, but then I must choose between either:
+
+* Only being able to sync repos when both systems are online
+* Having to store repos in plaintext on remote servers
+
+This is one of my primary use cases for Dropbox/git-annex. I'd really appreciate any help in figuring this out. Thanks.
diff --git a/doc/forum/Storing_git_repos_in_git-annex/comment_1_ac7b52c0b0f75d79760ffe6a9b5c8759._comment b/doc/forum/Storing_git_repos_in_git-annex/comment_1_ac7b52c0b0f75d79760ffe6a9b5c8759._comment
new file mode 100644
index 000000000..cb5b39ffc
--- /dev/null
+++ b/doc/forum/Storing_git_repos_in_git-annex/comment_1_ac7b52c0b0f75d79760ffe6a9b5c8759._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-05-16T17:29:15Z"
+ content="""
+Why not just use git the way it's designed: Make a git repository on one computer. Clone to another computer. Commit changes on either whenever you like, and pull/push whenever you like. No need for any dropbox to help git sync, it can do so perfectly well on its own.
+
+If you have a lot of repositories, see <http://myrepos.branchable.com/>
+
+I continue to be unimpressed and unmotived by this use case. Posting more forum threads with the same lame reasons won't help. But at least you did say:
+
+> For some time I used Bazaar repos inside Dropbox. A couple of times I accidentally modified files on one computer before another finished syncing
+, and the repo became mildly corrupted, but I recovered it okay.
+
+> Recently I switched to git, and so far, so good. I'm careful not to make any changes to my files before Dropbox is finished syncing, so everythin
+g works fine.
+
+So, you used dropbox, and corrupted data. But that was ok. And now you're very careful to avoid doing things that will corrupt data. But that's ok. Yeah, that seems like a really good decision, given all the excellent possibilities out there.`</snark>`
+"""]]
diff --git a/doc/forum/Storing_git_repos_in_git-annex/comment_3_3bec1f02ff1a61791e3cbb428c7acb4c._comment b/doc/forum/Storing_git_repos_in_git-annex/comment_3_3bec1f02ff1a61791e3cbb428c7acb4c._comment
new file mode 100644
index 000000000..69da79a89
--- /dev/null
+++ b/doc/forum/Storing_git_repos_in_git-annex/comment_3_3bec1f02ff1a61791e3cbb428c7acb4c._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmNu4V5fvpLlBhaCUfXXOB0MI5NXwh8SkU"
+ nickname="Adam"
+ subject="comment 3"
+ date="2014-05-17T00:23:02Z"
+ content="""
+Well, like Pere, I am rather surprised by your response, Joey. I've been an enthusiastic supporter and follower of git-annex for a long time now, and have been looking forward to using it. I didn't expect a snarky reply...and you said yourself that it was snarky. Maybe you had a bad day or something? :)
+
+I don't understand why this request or idea is so controversial to you. I have several computers, and I use git to store basic text files like shell scripts and config files--a very common situation. I use Dropbox to sync them automatically between computers. I could use just git, and push/pull manually, but the whole point of having computers is for them to do things for me, automatically. The purpose of the git-annex assistant, as I understand it, is to do exactly that. Doing the push/pull manually would be a step backwards. And giving up manual control of the git repository, losing the ability to track changes to my files, would be a huge step backwards.
+
+This seems like it must be a very common use case among Linux users, especially ones who use the shell, git, etc. If git-annex isn't good for this situation, what is? Surely there's a better way than opening a shell and running \"git pull\" every time I walk from one computer to the other.
+"""]]
diff --git a/doc/forum/Storing_git_repos_in_git-annex/comment_4_76ddbd27cc2f3785bb5aaebb0bb6e087._comment b/doc/forum/Storing_git_repos_in_git-annex/comment_4_76ddbd27cc2f3785bb5aaebb0bb6e087._comment
new file mode 100644
index 000000000..9d0b024c1
--- /dev/null
+++ b/doc/forum/Storing_git_repos_in_git-annex/comment_4_76ddbd27cc2f3785bb5aaebb0bb6e087._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmNu4V5fvpLlBhaCUfXXOB0MI5NXwh8SkU"
+ nickname="Adam"
+ subject="comment 4"
+ date="2014-05-17T00:41:04Z"
+ content="""
+I should have also mentioned, the network topology is an issue that git-annex helps solve. When my computers are on the same LAN, they could obviously sync directly with each other using git. But when they are not on the same network, or when one of them is not online, a transfer repo is needed. Dropbox and git-annex make this simple by handling it for me.
+
+But if I did all my syncing with git manually, it could end up being quite a mess. If I took my laptop with me and left the house without syncing it first, I'd have to sync with my server on the Internet. But if I forgot to push from my desktop computer before I left, the server would be out-of-date, and I'd be stuck.
+
+Dropbox handles this for me by automatically syncing as soon as I make changes. git-annex does the same thing, but doesn't work with nested git repos. But giving up the nested git repo would mean giving up version control of my files. As a developer, you understand why that's not an option! :)
+
+Again, this seems like a very natural problem to run into, and I don't understand why it is controversial to want git-annex to handle this the way Dropbox or other sync software (e.g. SpiderOak, Wuala) can.
+"""]]
diff --git a/doc/forum/Storing_git_repos_in_git-annex/comment_5_f9520cbc6669622aa342acad35581943._comment b/doc/forum/Storing_git_repos_in_git-annex/comment_5_f9520cbc6669622aa342acad35581943._comment
new file mode 100644
index 000000000..95bf6a0d4
--- /dev/null
+++ b/doc/forum/Storing_git_repos_in_git-annex/comment_5_f9520cbc6669622aa342acad35581943._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://me.yahoo.com/a/FHnTlSBo1eCGJRwueeKeB6.RCaPbGMPr5jxx8A--#ce0d8"
+ nickname="Hamza"
+ subject="comment 5"
+ date="2014-05-18T12:55:47Z"
+ content="""
+My, 2 cents. I used to do the same keep my git repos in Dropbox. I do not push/pull to dropbox I just keep them in there so they sync between my machines. My use case is that I am in the middle of a change and I need to switch computers (home/office) I can continue where I left of on another machine otherwise you have to make wierd commits with broken code. So IMHO it is perfectly reasonable for a single person to keep his git repo in git-annex assuming I don't use it as a central repo where other people pull push.
+
+Plus one giant problem with git annex is that there is no way to revert a file in direct repo. It only sync and reverting to old files take a lot of effort (convert to indirect checkout commit save file to a temp location convert back to direct mode place the file back its place.) with a git repo in annex I can just use git to revert files.
+
+On the other hand, git likes to create a lot of small files and sync them can take a lot of time. annex copies on file at a time.
+
+That said, at one point I did experiment putting a git repo in annex for testing (using --git-dir option) it did work so it should not be that big of a deal to add the support.
+"""]]
diff --git a/doc/forum/Storing_git_repos_in_git-annex/comment_9_d5676400e7148b7d3408f2bdb3d54b7d._comment b/doc/forum/Storing_git_repos_in_git-annex/comment_9_d5676400e7148b7d3408f2bdb3d54b7d._comment
new file mode 100644
index 000000000..23610fa71
--- /dev/null
+++ b/doc/forum/Storing_git_repos_in_git-annex/comment_9_d5676400e7148b7d3408f2bdb3d54b7d._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnaYy6kTuKAHmsa4BtGls2oqa42Jo2w2v0"
+ nickname="Pere"
+ subject="So, you are more clever than your users, isn't?"
+ date="2014-05-16T18:13:34Z"
+ content="""
+Joey, your comment is really disappointing. I also use Dropbox as a central git repo and it works great for me. Maybe you find this stupid, but there is a lot of people with good reasons to do so. I agree that this is your software project, thus you have the right not to support this use case, but you don't have the right to treat the users that want this feature as you did in your comment. Next time you do a new crowdfunding campaign, I not sure I'll be between the donors again.
+"""]]
diff --git a/doc/forum/Sync_files_from_remote_to_remote.mdwn b/doc/forum/Sync_files_from_remote_to_remote.mdwn
new file mode 100644
index 000000000..a723c33f3
--- /dev/null
+++ b/doc/forum/Sync_files_from_remote_to_remote.mdwn
@@ -0,0 +1,5 @@
+Not sure if this use case is supported, but I have the following setup - I use git-annex to store my Lightroom catalog and photos. My local machine does not contain all files, `.mov` files for example are excluded via the preferred content mechanism. The full backup is on a remote server using ssh.
+
+Now I want to create another copy of the data (encrypted) from my local machine to a USB stick or similar. I found that the locally excluded files are not synced. In order to copy all the data I first need to change the preferred content config, execute `git-annex get` to fetch the data, then copy via `git-annex sync myusbremote --content`, then change the local preferred content pattern, then run `git annex drop --auto` to delete the local unwanted content again.
+
+I was wondering if there's a way to sync from one remote to another, without storing any data locallly ? Something like `git-annex sync --from ... --to ...`.
diff --git a/doc/forum/Sync_files_from_remote_to_remote/comment_1_c5247657a5b3cd68fd55112efe97ef99._comment b/doc/forum/Sync_files_from_remote_to_remote/comment_1_c5247657a5b3cd68fd55112efe97ef99._comment
new file mode 100644
index 000000000..66ee6ce6a
--- /dev/null
+++ b/doc/forum/Sync_files_from_remote_to_remote/comment_1_c5247657a5b3cd68fd55112efe97ef99._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://openid.stackexchange.com/user/e65e6d0e-58ba-41de-84cc-1f2ba54cf574"
+ nickname="Mica Semrick"
+ subject="assistant or cron"
+ date="2015-01-11T04:00:04Z"
+ content="""
+I'd either (1) run the assistant on your server or (2) write a simple cron script that runs git-annex sync --content on the server.
+"""]]
diff --git a/doc/forum/Sync_files_from_remote_to_remote/comment_2_634e399d21271f26f7f77c15c5fb132b._comment b/doc/forum/Sync_files_from_remote_to_remote/comment_2_634e399d21271f26f7f77c15c5fb132b._comment
new file mode 100644
index 000000000..4a0038f9d
--- /dev/null
+++ b/doc/forum/Sync_files_from_remote_to_remote/comment_2_634e399d21271f26f7f77c15c5fb132b._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="Jan"
+ subject="comment 2"
+ date="2015-01-11T08:54:52Z"
+ content="""
+this would work, but the server is on a remote machine and the USB drive I want to sync to is connected to my local machine.
+"""]]
diff --git a/doc/forum/Sync_files_from_remote_to_remote/comment_3_b89701582b40e2c337a1a49733877210._comment b/doc/forum/Sync_files_from_remote_to_remote/comment_3_b89701582b40e2c337a1a49733877210._comment
new file mode 100644
index 000000000..73c9cc0bc
--- /dev/null
+++ b/doc/forum/Sync_files_from_remote_to_remote/comment_3_b89701582b40e2c337a1a49733877210._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnm19dBCRphmtjXfopm_NpvnRwz-qIJ2Tw"
+ nickname="Remi"
+ subject="May be use a prefered content expression about what is in the usb stick"
+ date="2015-01-11T09:14:47Z"
+ content="""
+Is there a full git repos on the usb stick? if yes You could add a remote on it and run `git annex --content` from there.
+
+You could also try to change the preferred content of your local machine to include something like \"--not --in=usb\". With this you local repos will download file not in the usb stick, copy it to the usb stick and then remove it from the local repos. (I didn't check exactly the syntax of the preferred content, so my expression could be incorrect, but I hope you get the idea)
+"""]]
diff --git a/doc/forum/Sync_files_from_remote_to_remote/comment_4_b3ad93e032c3c9d2312970711540bf92._comment b/doc/forum/Sync_files_from_remote_to_remote/comment_4_b3ad93e032c3c9d2312970711540bf92._comment
new file mode 100644
index 000000000..ad730a3ea
--- /dev/null
+++ b/doc/forum/Sync_files_from_remote_to_remote/comment_4_b3ad93e032c3c9d2312970711540bf92._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="Jan"
+ subject="comment 4"
+ date="2015-01-13T09:35:10Z"
+ content="""
+Thanks for your answers. But I want to encrypt the content, so initialising a repo on the stick is not a possibility if I understand it correctly. And wouldn't `--not --in=usb` exclude a lot of content I actually want ? (Haven't tried it yet)
+"""]]
diff --git a/doc/forum/Sync_files_from_remote_to_remote/comment_5_bdf293d30692311983d0586231535bd4._comment b/doc/forum/Sync_files_from_remote_to_remote/comment_5_bdf293d30692311983d0586231535bd4._comment
new file mode 100644
index 000000000..4ea668070
--- /dev/null
+++ b/doc/forum/Sync_files_from_remote_to_remote/comment_5_bdf293d30692311983d0586231535bd4._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnm19dBCRphmtjXfopm_NpvnRwz-qIJ2Tw"
+ nickname="Remi"
+ subject="comment 5"
+ date="2015-01-13T12:45:47Z"
+ content="""
+Well my idea wasn't to have only this in the preferred content. You
+can use \"or\" expression.
+
+That said, I've just check the manual, and it seem that there is no --in for
+preferred content... But you could add your usb repos say to the
+archival group (git annex group usb archival), Then use something like
+like `\"include=* and ( exclude=*.mov or not inallgroup=archival )\"`
+(this is untested, but I hope you get the idea).
+
+With such a preferred content, you local repository should get (and
+keep) the .mov not in usb, and should drop them when they are send
+there.
+
+"""]]
diff --git a/doc/forum/Sync_files_from_remote_to_remote/comment_6_fda62d735035213f2a0b5b2fc95991ab._comment b/doc/forum/Sync_files_from_remote_to_remote/comment_6_fda62d735035213f2a0b5b2fc95991ab._comment
new file mode 100644
index 000000000..9ab809aea
--- /dev/null
+++ b/doc/forum/Sync_files_from_remote_to_remote/comment_6_fda62d735035213f2a0b5b2fc95991ab._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 6"""
+ date="2015-01-20T18:51:06Z"
+ content="""
+Remi's idea of using [[preferred_content]] can be made to work.
+
+There's no `git annex copy --from A --to B`. It would need to locally spool
+each file into the current repo, and being an unusual corner case has not
+seemed worth doing so far.
+"""]]
diff --git a/doc/forum/Sync_only_what_is_not_available_from_my_central_git_repo.mdwn b/doc/forum/Sync_only_what_is_not_available_from_my_central_git_repo.mdwn
new file mode 100644
index 000000000..223e5eaed
--- /dev/null
+++ b/doc/forum/Sync_only_what_is_not_available_from_my_central_git_repo.mdwn
@@ -0,0 +1,7 @@
+I work in a distributed startup. We have a master repository on GitHub. At the office we have modern hunky Linux desktops (seriously more powerful than any of our laptops).
+
+I (and others) have hard deadlines at the end of the day (typically child commitments). If I leave from a meeting or brainstorming session without having pushed all of my work into the cloud then I cannot continue working from home. This is because our office is behind multiple levels of NAT over which we have no control. Hence I am unable to remote into my machine in order to push work up to GitHub or scp it to my laptop.
+
+Is there a way to get git-annex to sync only files that do not correspond to git objects available from our GitHub repository? Because our source tree is quite large (2.5GB including tests and test data) I would not want git-annex to sync the entire tree. And when I checkout a different branch I would not want git-annex to sync all changes between the previously checked-out branch and the new branch. Rather I would like git-annex to discard any previously synced objects, note the identity of the new branch and the values of all files (object) not available from the upstream state of that branch on GitHub.
+
+Thanks in advance for any suggestions.
diff --git a/doc/forum/Sync_only_what_is_not_available_from_my_central_git_repo/comment_1_b31d02c97447996495de73705ac39f71._comment b/doc/forum/Sync_only_what_is_not_available_from_my_central_git_repo/comment_1_b31d02c97447996495de73705ac39f71._comment
new file mode 100644
index 000000000..b7f343b13
--- /dev/null
+++ b/doc/forum/Sync_only_what_is_not_available_from_my_central_git_repo/comment_1_b31d02c97447996495de73705ac39f71._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="gjost"
+ ip="75.140.92.244"
+ subject="comment 1"
+ date="2014-05-20T15:19:35Z"
+ content="""
+> If I leave from a meeting or brainstorming session without having pushed all of my work into the cloud then I cannot continue working from home. This is because our office is behind multiple levels of NAT over which we have no control. Hence I am unable to remote into my machine in order to push work up to GitHub or scp it to my laptop.
+
+This is not a git-annex solution, but you could use Pagekite to SSH to your work machine from home.
+
+
+"""]]
diff --git a/doc/forum/Sync_only_what_is_not_available_from_my_central_git_repo/comment_2_098465ae8af32931779d2cd63750d5dc._comment b/doc/forum/Sync_only_what_is_not_available_from_my_central_git_repo/comment_2_098465ae8af32931779d2cd63750d5dc._comment
new file mode 100644
index 000000000..95a8721df
--- /dev/null
+++ b/doc/forum/Sync_only_what_is_not_available_from_my_central_git_repo/comment_2_098465ae8af32931779d2cd63750d5dc._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.3"
+ subject="comment 2"
+ date="2014-05-21T18:11:45Z"
+ content="""
+It seems to me that simply running `git annex sync --content` before you go home would do what you need. Have you tried using git-annex?
+
+Some of the things you're saying don't entirely make sense to me, and so I suspect you're perhaps worrying about problems that don't exist, or that git-annex deals with nicely.
+"""]]
diff --git a/doc/forum/This_account_is_restricted_by_rssh._Allowed_commands:_scp_rsync__160__.mdwn b/doc/forum/This_account_is_restricted_by_rssh._Allowed_commands:_scp_rsync__160__.mdwn
new file mode 100644
index 000000000..932c78a9a
--- /dev/null
+++ b/doc/forum/This_account_is_restricted_by_rssh._Allowed_commands:_scp_rsync__160__.mdwn
@@ -0,0 +1,5 @@
+Hello,
+
+I'm using the git-annex assistant (in Mac Mavericks) and I'm trying to create a new remote rsync repo, I have the details and everything but I can't do it over ssh, I need the call to use rsync otherwise I get: **This account is restricted by rssh. Allowed commands: scp rsync ** . Can this be changed manually? How can I create a remote rsync repo?
+
+Thanks
diff --git a/doc/forum/This_account_is_restricted_by_rssh._Allowed_commands:_scp_rsync__160__/comment_1_68e911629da672473bd6188407a68be2._comment b/doc/forum/This_account_is_restricted_by_rssh._Allowed_commands:_scp_rsync__160__/comment_1_68e911629da672473bd6188407a68be2._comment
new file mode 100644
index 000000000..b6fa2d1a1
--- /dev/null
+++ b/doc/forum/This_account_is_restricted_by_rssh._Allowed_commands:_scp_rsync__160__/comment_1_68e911629da672473bd6188407a68be2._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 1"
+ date="2014-10-02T15:33:58Z"
+ content="""
+You can set it up manually at the command line, and one it's set up, the assistant will be able to transfer files to it using rsync. See [[special_remotes/rsync]] for some setup examples. Note that the rsync server will need to be configured, somehow, to let you log in without giving a password -- one typical way this might be set up is using .ssh/authorized_keys on the rsync server.
+
+The assistant doesn't try to set up rsync special remotes because this is not very common, and there's no one way it can use to set up a ssh key so it can log in without a password
+that will work across different rsync server setups. It does support setting up rsync.net just because that's one I know how to handle.
+
+
+"""]]
diff --git a/doc/forum/Tracking_a_directory_with_some_hg_and_git_repositories/comment_4_c889050d3079edefc4633451bd5baff8._comment b/doc/forum/Tracking_a_directory_with_some_hg_and_git_repositories/comment_4_c889050d3079edefc4633451bd5baff8._comment
new file mode 100644
index 000000000..55f9f2534
--- /dev/null
+++ b/doc/forum/Tracking_a_directory_with_some_hg_and_git_repositories/comment_4_c889050d3079edefc4633451bd5baff8._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnvVfFLW4CTKs7UjdiLIsOn_cxj1Jnh64I"
+ nickname="Charl"
+ subject="use case: changing workstations mid-way through development session"
+ date="2014-03-23T21:22:15Z"
+ content="""
+An important use case for me with automatic synchronization, is being able to change computers mid-way through a development session. I used to do this with dropbox for years: I'd work in a git checkout, then take another laptop to go work elsewhere, and just continue in the \"same\" synchronized git repo. Having to remember to commit and push a long list of repos before changing workstations is error-prone. Also, I prefer to commit when a discrete atom of work has been completed, and to push when a topic branch is good and ready to be merged (for example), not every time that I feel like changing workstations. :) Dropbox never dropped a stitch in all this time. As long as all laptops are in a 1) connected and 2) synced up state, switching is possible.
+
+The limitation of not being able to sync the .git directories in git checkouts means that this use case can't currently be supported by git-annex (assistant). Is a work-around possible, or is this something that can't ever be supported due to the limitations of git itself?
+
+"""]]
diff --git a/doc/forum/Two_computers__44___one_networked_repository__44___no_Jabber_-_how_to_setup_sync__63___.mdwn b/doc/forum/Two_computers__44___one_networked_repository__44___no_Jabber_-_how_to_setup_sync__63___.mdwn
new file mode 100644
index 000000000..64426eb4d
--- /dev/null
+++ b/doc/forum/Two_computers__44___one_networked_repository__44___no_Jabber_-_how_to_setup_sync__63___.mdwn
@@ -0,0 +1,7 @@
+Hello there,
+
+I've got two computers, let's call them Alice and Bob, which should share the same repository. Alice and Bob are never online at the same time, and the remote repository setup as "transfer file repository" is an account on Box.com. So Jabber is obviously no option.
+
+I've tried setting up this with the webapp, but it's not working as intended: Bob never pulls the content from Alice from the remote repository.
+
+How can I setup this to make it work with the remote repository in the web app? I am kinda at a loss right now.
diff --git a/doc/forum/Two_computers__44___one_networked_repository__44___no_Jabber_-_how_to_setup_sync__63___/comment_1_b90aef011d853ad9feb6f8edc08bf7d9._comment b/doc/forum/Two_computers__44___one_networked_repository__44___no_Jabber_-_how_to_setup_sync__63___/comment_1_b90aef011d853ad9feb6f8edc08bf7d9._comment
new file mode 100644
index 000000000..11e06cd40
--- /dev/null
+++ b/doc/forum/Two_computers__44___one_networked_repository__44___no_Jabber_-_how_to_setup_sync__63___/comment_1_b90aef011d853ad9feb6f8edc08bf7d9._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-01-20T19:15:50Z"
+ content="""
+Since Alice and Bob are never online at the same time, you need
+a central git repository somewhere.
+
+This could be on a linux server, perhaps even with git-annex installed.
+Or, you could just make a repository on github or gitorious. No need
+for git-annex.
+
+Wherever it is, add the central repository as a git remote on Alice and
+Bob, and they'll each use it to drop off the current state of their
+git repo, and sync up with the changes from each other.
+"""]]
diff --git a/doc/forum/USB_backup_with_files_visible/comment_10_b90b18ca57f9299f1920254bb2aa699b._comment b/doc/forum/USB_backup_with_files_visible/comment_10_b90b18ca57f9299f1920254bb2aa699b._comment
new file mode 100644
index 000000000..763a3ce54
--- /dev/null
+++ b/doc/forum/USB_backup_with_files_visible/comment_10_b90b18ca57f9299f1920254bb2aa699b._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 10"
+ date="2014-11-25T20:41:56Z"
+ content="""
+When you actually think about how users would try to use this proposed system, you get here: <http://git-annex.branchable.com/forum/usability:_creating_an_archive_on_a_new_external_drive/> Ie, if a removable drive shows all of a user's files, then they'll try to edit them, and since the assistant can't run on removable drives (makes them kinda hard to remove), such changes by the user won't get committed.
+"""]]
diff --git a/doc/forum/USB_backup_with_files_visible/comment_9_dfb830fb00c10b797c3d26179e6dfefd._comment b/doc/forum/USB_backup_with_files_visible/comment_9_dfb830fb00c10b797c3d26179e6dfefd._comment
new file mode 100644
index 000000000..f73f18671
--- /dev/null
+++ b/doc/forum/USB_backup_with_files_visible/comment_9_dfb830fb00c10b797c3d26179e6dfefd._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmicVKRM8vJX4wPuAwlLEoS2cjmFXQkjkE"
+ nickname="Thomas"
+ subject="post-receive hook is not an option with FAT drives"
+ date="2014-11-20T15:53:29Z"
+ content="""
+Hi Joey,
+
+I tried to solve this use case with a post-receive hook and had to realize that FAT does not support the executable bit and thus the hook doesn't run. I've found several requests for the use case described here and I think it would be desirable, if the assistant/webapp could solve it without commandline-hacks.
+
+So I want to stick my thumbdrive in my work desktop and the assistant notices that it's available and starts copying stuff on it and runs git annex merge afterwards.
+
+I also had to manually set annex.diskreserve to a smaller value since annex wants to reserve more space (10G) than is available on most thumb drives. I think git-annex init should be more clever about the default diskreserve value, e.g. set it to a percentage of the total disk size.
+"""]]
diff --git a/doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_2_f9eef3019fe690e90c1228d62a16f70a._comment b/doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_2_f9eef3019fe690e90c1228d62a16f70a._comment
new file mode 100644
index 000000000..7f761419c
--- /dev/null
+++ b/doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_2_f9eef3019fe690e90c1228d62a16f70a._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnNqLKszWk9EoD4CDCqNXJRIklKFBCN1Ao"
+ nickname="maurizio"
+ subject="even a client repository you had once but have now deleted"
+ date="2014-07-09T22:08:44Z"
+ content="""
+if this client repository has been deleted, why does it still have an impact? What is the user supposed to do to use a transfer repository if some day another client which was deleted has existed?
+
+Old repositories seem to remain for ever in the webapp. You can try to delete them with the webapp, they will stay there. You can disable them, they will stay there. If you want to try to delete them again in the webapp, you first have to enable them again and nothing ever happens. There seems to be basically no way to delete repositories which have some day existed...
+"""]]
diff --git a/doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_3_7fb74f7fab6c1baff4ffc270cf15ef0a._comment b/doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_3_7fb74f7fab6c1baff4ffc270cf15ef0a._comment
new file mode 100644
index 000000000..df8333cb3
--- /dev/null
+++ b/doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_3_7fb74f7fab6c1baff4ffc270cf15ef0a._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 3"
+ date="2014-07-11T19:29:06Z"
+ content="""
+The webapp certianly allows deleting repositories.
+
+But, you can always go in and manually do it:
+
+<pre>
+git annex dead $uuid
+git annex group $uuid unwanted
+</pre>
+"""]]
diff --git a/doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_4_5925b609aff0954f2860269cff107284._comment b/doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_4_5925b609aff0954f2860269cff107284._comment
new file mode 100644
index 000000000..31a7e63d8
--- /dev/null
+++ b/doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_4_5925b609aff0954f2860269cff107284._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnNqLKszWk9EoD4CDCqNXJRIklKFBCN1Ao"
+ nickname="maurizio"
+ subject="comment 4"
+ date="2014-07-17T19:48:30Z"
+ content="""
+I may be facing one unexpected behavior, but your statement that the \"webapp certainely allows to delete repositories\" does not match my experience. It does offer this option, but this option has failed on me so many times that I have learnt to live with a couple of repositories disabled, sitting here. Trying to delete them starts some process (emptying the repository, starting deletion process) but ends up in nothing. At least one of them does not seem to have a name anymore (probably what you refer to as $uuid) since only the part in square bracket is visible in the webapp. I concluded that this was what the webapp was supposed to do.
+"""]]
diff --git a/doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_5_45062d5776f8aefb0850d70f2a517c75._comment b/doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_5_45062d5776f8aefb0850d70f2a517c75._comment
new file mode 100644
index 000000000..3dbae84a0
--- /dev/null
+++ b/doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_5_45062d5776f8aefb0850d70f2a517c75._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnNqLKszWk9EoD4CDCqNXJRIklKFBCN1Ao"
+ nickname="maurizio"
+ subject="comment 5"
+ date="2014-07-18T08:13:08Z"
+ content="""
+by the way: the commands you suggest do not seem to match what I read here:
+
+http://git-annex.branchable.com/forum/How_to_delete_a_remote__63__/
+
+
+"""]]
diff --git a/doc/forum/Ubuntu_PPA/comment_8_feecd478a4d44cb5ffc7020c646174ba._comment b/doc/forum/Ubuntu_PPA/comment_8_feecd478a4d44cb5ffc7020c646174ba._comment
new file mode 100644
index 000000000..51fde1f03
--- /dev/null
+++ b/doc/forum/Ubuntu_PPA/comment_8_feecd478a4d44cb5ffc7020c646174ba._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawntodrSgODU27WUCyN2PV7TC14YMkyaoxQ"
+ nickname="Dennis"
+ subject="Ubuntu Trusty 14.04"
+ date="2015-01-24T03:19:41Z"
+ content="""
+I am running into the same issue with Ubuntu Trusty 14.04. The version shipped is 5.20140412ubuntu1, but I would like to try a more recent version to see if an issue I experience still persists. Is there any up-to-date PPA available for Trusty?
+"""]]
diff --git a/doc/forum/Understanding___34__deletion__34___and___34__dropping__34_____38___cleanup_of_history.mdwn b/doc/forum/Understanding___34__deletion__34___and___34__dropping__34_____38___cleanup_of_history.mdwn
new file mode 100644
index 000000000..9c6c3df73
--- /dev/null
+++ b/doc/forum/Understanding___34__deletion__34___and___34__dropping__34_____38___cleanup_of_history.mdwn
@@ -0,0 +1,9 @@
+Hi!
+
+I have a few questions according to deletion and dropping with git-annex:
+
+1. I couldn't figure out what unused files really are. What is *unused* related to? (Head of) branches? How does a file become unused?
+2. If I'm working in indirect mode, I can safely `git rm` files and restore them later, by checking out the corresponding commit. Consider several git-annex repos being in sync, where the repository contains a nested directory structure. Is there a way to completely remove all deletes files within some directory (which might but not must be the root of the repo), that have been deleted for more than X days? For example I would want to run something like `git annex drop-deleted --from-folder some/subdirectory/ --older-than 5`. Is there a way to achieve this?
+3. Just like 2, is there a way to remove (the content of) all non-current *versions* of all file that are older than Y days?
+
+Thanks in advance!
diff --git a/doc/forum/Understanding___34__deletion__34___and___34__dropping__34_____38___cleanup_of_history/comment_1_08dbad67df1d8f07d3883c6fed2fe0c4._comment b/doc/forum/Understanding___34__deletion__34___and___34__dropping__34_____38___cleanup_of_history/comment_1_08dbad67df1d8f07d3883c6fed2fe0c4._comment
new file mode 100644
index 000000000..84ec31fd8
--- /dev/null
+++ b/doc/forum/Understanding___34__deletion__34___and___34__dropping__34_____38___cleanup_of_history/comment_1_08dbad67df1d8f07d3883c6fed2fe0c4._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-04T19:55:54Z"
+ content="""
+`git-annex unused` finds files that are not used by the heads of any
+branches or tags. These files may still be referred to in individual
+commits in git history, or there could be no commits at all that
+refer to them. It's up to you to decide whether these are really
+"unused" or not.
+
+git-annex doesn't currently have an concept of file age. You can
+look at git history to find that out, but it's quite expensive
+to do that for a lot of files, and so a --older-than option
+would make it pretty slow.
+"""]]
diff --git a/doc/forum/Update_on_remote_repo.mdwn b/doc/forum/Update_on_remote_repo.mdwn
new file mode 100644
index 000000000..4977c4159
--- /dev/null
+++ b/doc/forum/Update_on_remote_repo.mdwn
@@ -0,0 +1,6 @@
+Hello,
+
+using the git-annex assistant I can activate auto update on the client machines. What about the server that serves as transfer repository? It needs to have git-annex installed. Is there any possibility of auto update there? What is the recommended procedure?
+
+Thanks,
+Florian
diff --git a/doc/forum/Update_on_remote_repo/comment_1_d58cfe914d6c36d8bff8d1342e1c2102._comment b/doc/forum/Update_on_remote_repo/comment_1_d58cfe914d6c36d8bff8d1342e1c2102._comment
new file mode 100644
index 000000000..d4a7a62e6
--- /dev/null
+++ b/doc/forum/Update_on_remote_repo/comment_1_d58cfe914d6c36d8bff8d1342e1c2102._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-12-02T17:05:05Z"
+ content="""
+You can run the git-annex assistant in any (non-bare) git repository,
+including one on the server.
+
+A git post-receive hook is another way to update a repository on
+a server. See [[tips/setup_a_public_repository_on_a_web_site]]
+"""]]
diff --git a/doc/forum/User_name_with_whitespace_not_working_with___34____40__+__41___Local_computer__34__.mdwn b/doc/forum/User_name_with_whitespace_not_working_with___34____40__+__41___Local_computer__34__.mdwn
new file mode 100644
index 000000000..45880d27e
--- /dev/null
+++ b/doc/forum/User_name_with_whitespace_not_working_with___34____40__+__41___Local_computer__34__.mdwn
@@ -0,0 +1,7 @@
+When using the "(+) Local computer" feature, I get the error message
+
+Internal Server Error: wrong number of words in ssh public key
+
+This is due to the use of pattern matching in this line https://github.com/RichiH/git-annex/blob/master/Assistant/Ssh.hs#L73 and because the key comment contains spaces. And of course it cotains spaces, on windows people often use their full name as user name. I will fill a bug later.
+
+My question is, how can I work around this bug? The client with this public key is running windows. How can I influence or at least see how this public key looks like? I could not find any documentation on this.
diff --git a/doc/forum/User_name_with_whitespace_not_working_with___34____40__+__41___Local_computer__34__/comment_1_f803fc1fb340587fc4b55640fbae6604._comment b/doc/forum/User_name_with_whitespace_not_working_with___34____40__+__41___Local_computer__34__/comment_1_f803fc1fb340587fc4b55640fbae6604._comment
new file mode 100644
index 000000000..e0f28a20d
--- /dev/null
+++ b/doc/forum/User_name_with_whitespace_not_working_with___34____40__+__41___Local_computer__34__/comment_1_f803fc1fb340587fc4b55640fbae6604._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-04T18:04:51Z"
+ content="""
+Please report bugs at [[bugs]], not in the forum.
+
+I've fixed this one.
+"""]]
diff --git a/doc/forum/Using_git-annex.mdwn b/doc/forum/Using_git-annex.mdwn
new file mode 100644
index 000000000..0e2be4e81
--- /dev/null
+++ b/doc/forum/Using_git-annex.mdwn
@@ -0,0 +1,73 @@
+Hi,
+
+I have created a git annex repo, added data. I then went to check it out in another location in the following way (my goal is to checkout origin, add a test file, push it back to origin).
+ git clone ../test_repo/
+
+ 282 17:19 cd test_repo/
+
+ 283 17:19 ls
+
+ 284 17:19 git status
+
+ 285 17:22 git annex init DEV
+
+ 286 17:22 touch test.txt
+
+ 287 17:22 vi test.txt
+
+ 288 17:22 git annex merge
+
+ 289 17:22 git annex add test.txt
+
+ 290 17:22 git commit -am "test"
+
+ 291 17:23 git push origin master git-annex
+
+However I am getting the following error
+
+Counting objects: 3, done.
+
+Delta compression using up to 48 threads.
+
+Compressing objects: 100% (3/3), done.
+
+Writing objects: 100% (3/3), 364 bytes | 0 bytes/s, done.
+
+Total 3 (delta 1), reused 0 (delta 0)
+
+remote: error: refusing to update checked out branch: refs/heads/master
+
+remote: error: By default, updating the current branch in a non-bare repository
+
+remote: error: is denied, because it will make the index and work tree inconsistent
+
+remote: error: with what you pushed, and will require 'git reset --hard' to match
+
+remote: error: the work tree to HEAD.
+
+remote: error:
+
+remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
+
+remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
+
+remote: error: its current branch; however, this is not recommended unless you
+
+remote: error: arranged to update its work tree to match what you pushed in some
+
+remote: error: other way.
+
+remote: error:
+
+remote: error: To squelch this message and still keep the default behaviour, set
+
+remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
+
+To /test_repo/
+
+ ! [remote rejected] master -> master (branch is currently checked out)
+
+error: failed to push some refs to '/test_repo/'
+
+
+What am I missing?
diff --git a/doc/forum/Using_git-annex/comment_1_ac386ca07e9aaf009c264f3deed83832._comment b/doc/forum/Using_git-annex/comment_1_ac386ca07e9aaf009c264f3deed83832._comment
new file mode 100644
index 000000000..9e0e8ff66
--- /dev/null
+++ b/doc/forum/Using_git-annex/comment_1_ac386ca07e9aaf009c264f3deed83832._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-31T20:40:18Z"
+ content="""
+git does not allow pushing into a non-bare repsitory. This is why
+bare repositories exist.
+
+You have basically 3 choices:
+
+1. Go to the first repo you made, and `git pull` from the other repo
+ into it. Pulling in this direction will work.
+2. Set up a bare repo that both the non-bare repos use.
+3. Use `git annex sync`, which avoids this problem. You need to run
+ it in both repos in order to get them to sync with one-another.
+"""]]
diff --git a/doc/forum/Using_git-annex/comment_2_bf5e13a490e16943acd2732f093695fc._comment b/doc/forum/Using_git-annex/comment_2_bf5e13a490e16943acd2732f093695fc._comment
new file mode 100644
index 000000000..97ec4fb98
--- /dev/null
+++ b/doc/forum/Using_git-annex/comment_2_bf5e13a490e16943acd2732f093695fc._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawktbkKjilg70XC9XBFpIgVhtfLYH-0UMHY"
+ nickname="Tad"
+ subject="comment 2"
+ date="2014-11-06T15:39:12Z"
+ content="""
+Ok so when I create my origin and after I add files to it, when I run git annex sync I get
+
+Invalid command: 'git-annex-shell 'configlist' '/~/gitfile.git''
+ You appear to be using ssh to clone a git:// URL.
+ Make sure your core.gitProxy config option and the
+ GIT_PROXY_COMMAND environment variable are NOT set.
+warning: no common commits
+
+and then it hangs. Is git-annex not accepting git via ssh?
+"""]]
diff --git a/doc/forum/Using_git-annex/comment_3_471c9268b028f47ef3fac3f0be14b2b1._comment b/doc/forum/Using_git-annex/comment_3_471c9268b028f47ef3fac3f0be14b2b1._comment
new file mode 100644
index 000000000..4dfa8916d
--- /dev/null
+++ b/doc/forum/Using_git-annex/comment_3_471c9268b028f47ef3fac3f0be14b2b1._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2014-11-06T19:42:33Z"
+ content="""
+git-annex certianly works with git over ssh. You seem to not have git-annex
+installed on your git server, which will limit what you can do with it.
+
+I cannot find the message "You appear to be using ssh to clone a git:// URL."
+in either git or git-annex's code base. Perhaps the message is coming from
+something like gitosis or gitolite on your git server?
+
+It's hard to give advice when you're not said anything about how you've set
+things up.
+"""]]
diff --git a/doc/forum/Using_git-annex_as_a_library/comment_3_ac52304a096ebc66967352efaffb060a._comment b/doc/forum/Using_git-annex_as_a_library/comment_3_ac52304a096ebc66967352efaffb060a._comment
new file mode 100644
index 000000000..cda6e0799
--- /dev/null
+++ b/doc/forum/Using_git-annex_as_a_library/comment_3_ac52304a096ebc66967352efaffb060a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Alexcei"
+ ip="92.255.239.77"
+ subject="comment 3"
+ date="2014-03-25T05:43:36Z"
+ content="""
+With version 5.20140127 first approach became impossible. Why did you decide to remove json supported by the majority of command?
+"""]]
diff --git a/doc/forum/Using_git-annex_as_a_library/comment_4_d502fea60bf3a82f8a50f72a90a80c25._comment b/doc/forum/Using_git-annex_as_a_library/comment_4_d502fea60bf3a82f8a50f72a90a80c25._comment
new file mode 100644
index 000000000..642fda2fe
--- /dev/null
+++ b/doc/forum/Using_git-annex_as_a_library/comment_4_d502fea60bf3a82f8a50f72a90a80c25._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.41"
+ subject="comment 4"
+ date="2014-03-26T18:31:30Z"
+ content="""
+I didn't. I removed the --json options from commands that didn't necessarily output valid json when used with it. There are numerous commands that support --json (find, whereis, info, status, metadata, examinekey), and I'm open to adding it to other commands -- but it's probably not feasible to make commands like `get` output json, since their output includes progress info printed by rsync etc.
+"""]]
diff --git a/doc/forum/Using_git-annex_as_a_library/comment_5_a4ab4173620b72ac0a24d575fa9c810c._comment b/doc/forum/Using_git-annex_as_a_library/comment_5_a4ab4173620b72ac0a24d575fa9c810c._comment
new file mode 100644
index 000000000..70f2ad935
--- /dev/null
+++ b/doc/forum/Using_git-annex_as_a_library/comment_5_a4ab4173620b72ac0a24d575fa9c810c._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmkuFJVGp6WVvJtIV5JYb8IqN8mRvSGQdI"
+ nickname="Emilio Jesús"
+ subject="Would you accept a patch?"
+ date="2014-08-03T01:18:54Z"
+ content="""
+Dear Joey,
+
+I am also interested in using git-annex as a Haskell library, would you accept a patch to the .cabal file then?
+
+Thanks,
+Emilio
+"""]]
diff --git a/doc/forum/Using_git-annex_as_a_library/comment_6_45d9520ebc13d1b4fd88c25abc61f1b4._comment b/doc/forum/Using_git-annex_as_a_library/comment_6_45d9520ebc13d1b4fd88c25abc61f1b4._comment
new file mode 100644
index 000000000..8591e79aa
--- /dev/null
+++ b/doc/forum/Using_git-annex_as_a_library/comment_6_45d9520ebc13d1b4fd88c25abc61f1b4._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 6"
+ date="2014-08-12T17:48:34Z"
+ content="""
+There are a couple of problems with using the haskell code as a library that would need to be addressed:
+
+* I can't guarantee much about providing every interface in a compatible way going forward. It might make sense to pick out some key interfaces and make those stable, but I don't know what the right choices would be.
+* If all of git-annex is a library, `cabal build` will build everything a second time. This is annoying when trying to do a fast edit/build/test cycle, but I don't know a way to make cabal not do it. AFAIK cabal build flags cannot be used to disable building a library.
+"""]]
diff --git a/doc/forum/Using_the_Git-Annex_Assistant_as_a_Backup_and_Syncing_Service.mdwn b/doc/forum/Using_the_Git-Annex_Assistant_as_a_Backup_and_Syncing_Service.mdwn
new file mode 100644
index 000000000..8d3c84024
--- /dev/null
+++ b/doc/forum/Using_the_Git-Annex_Assistant_as_a_Backup_and_Syncing_Service.mdwn
@@ -0,0 +1,5 @@
+I'm looking to use the Git-Annex Assistant to backup a single repository that is present on and synced between two computers (a home and a working computer). Ideally, each computer uses rsync.net for both of these service, while at the same time treating the cloud storage service as untrusted (so anything stored or tranferred through there is encrypted). Is it possible to do this using solely rsync.net (without the addition of some XMPP service)? According to the software, using shared encryption allows anyone with a clone of the repository to decrypt files on a remote, but the simplest way to make this clone seems to be to first clone to a removable drive, and then from the drive to the second computer (and then deleting the records of the clone to the drive). I'm unsure if by then setting up the backup at rsync.net for the second computer, whether the software will create a second backup that acts independently of the first, neglecting any syncing, or if it will recognize the backup as one of the same repository. I'm also unsure as to whether the software will even sync if the backup is recognized, or whether a tranfer repository at rsync.net is also necessary to complete the setup. Could you perhaps give me some advice on how to achieve this setup, or point me to some information that may help me along?
+
+(If the setup is unclear, I'm essentially trying to replicate something like SpiderOak with the Git-Annex Assistant, without using an XMPP service)
+
+[Edit: It may be easier to just use Git-Annex (no assistant), so that works too]
diff --git a/doc/forum/Using_the_Git-Annex_Assistant_as_a_Backup_and_Syncing_Service/comment_1_7070f6e7e05fba7686d8620d62906a83._comment b/doc/forum/Using_the_Git-Annex_Assistant_as_a_Backup_and_Syncing_Service/comment_1_7070f6e7e05fba7686d8620d62906a83._comment
new file mode 100644
index 000000000..07cc63434
--- /dev/null
+++ b/doc/forum/Using_the_Git-Annex_Assistant_as_a_Backup_and_Syncing_Service/comment_1_7070f6e7e05fba7686d8620d62906a83._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 1"
+ date="2014-10-02T15:54:44Z"
+ content="""
+rsync.net alone is not sufficient, because it's only used for storing the (encrypted) contents of files, not for syncing the git repository, or finding out when there other computer has made a change to the repository.
+
+You can use rsync.net plus xmpp. However, xmpp is not encrypted when it passes through the xmpp server.
+
+A fully encrypted option is to install git-anex on a server accessible by ssh, and then use the assistant to set up an encrypted git repository on the server. No xmpp needed in this configuration.
+"""]]
diff --git a/doc/forum/View_performance_with_7__44__000_files.mdwn b/doc/forum/View_performance_with_7__44__000_files.mdwn
new file mode 100644
index 000000000..21491c77f
--- /dev/null
+++ b/doc/forum/View_performance_with_7__44__000_files.mdwn
@@ -0,0 +1,26 @@
+I've imported about half of my photos into an annex on an external HDD,
+using metadata extensively for EXIF info, including place names.
+
+Checking out a new view is slower than I expected, at ~6 minutes.
+Is this expected behavior, am I pushing the limits of file count already?
+
+Is there anything I can do to speed things up?
+
+ % ls -1 | wc -l
+ 7050
+
+ % git branch -vv
+ git-annex 4e590d4 update
+ * master 985ba54 add jen's phone backups
+ views/Year=_;Month=_;Address=_ 795a58b refs/heads/views/Year=_;Month=_;Address=_
+
+ % /usr/bin/time -p git annex view "Year=*" "Address=*"
+ view (searching...)
+
+ Checking out files: 100% (12789/12789), done.
+ Switched to branch 'views/Year=_;Address=_'
+ ok
+ real 376.80
+ user 17.98
+ sys 9.66
+
diff --git a/doc/forum/View_performance_with_7__44__000_files/comment_1_e45ea752100d09d29efb6136a722eab3._comment b/doc/forum/View_performance_with_7__44__000_files/comment_1_e45ea752100d09d29efb6136a722eab3._comment
new file mode 100644
index 000000000..cf6f140b2
--- /dev/null
+++ b/doc/forum/View_performance_with_7__44__000_files/comment_1_e45ea752100d09d29efb6136a722eab3._comment
@@ -0,0 +1,34 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmvzzyDA8uXFz8yokeCrepbh8PwWe_WrjE"
+ nickname="Michael"
+ subject="debug output"
+ date="2014-06-16T14:17:06Z"
+ content="""
+So after looking for a debug flag, I see that it's spending all its time in cat-file, which I guess is probably not a surprise:
+
+ % /usr/bin/time -p git annex view \"Year=*\" \"Address=*\" -d
+ view [2014-06-16 06:29:12 PDT] read: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"symbolic-ref\",\"HEAD\"]
+ [2014-06-16 06:29:12 PDT] read: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"show-ref\",\"refs/heads/master\"]
+ [2014-06-16 06:29:12 PDT] read: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"symbolic-ref\",\"HEAD\"]
+ [2014-06-16 06:29:12 PDT] read: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"show-ref\",\"refs/heads/master\"]
+ (searching...)
+ [2014-06-16 06:29:12 PDT] read: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"ls-files\",\"--cached\",\"-z\",\"--\",\"/Volumes/Four TB Backup/Photos\"]
+ [2014-06-16 06:29:12 PDT] feed: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"update-index\",\"-z\",\"--index-info\"]
+ [2014-06-16 06:29:12 PDT] chat: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"hash-object\",\"-w\",\"--stdin-paths\",\"--no-filters\"]
+ [2014-06-16 06:29:12 PDT] read: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"show-ref\",\"git-annex\"]
+ [2014-06-16 06:29:12 PDT] read: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"show-ref\",\"--hash\",\"refs/heads/git-annex\"]
+ [2014-06-16 06:29:12 PDT] read: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"log\",\"refs/heads/git-annex..4e590d433e01886e2823c3316d18b7e3cbafe227\",\"--oneline\",\"-n1\"]
+ [2014-06-16 06:29:12 PDT] chat: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"cat-file\",\"--batch\"]
+ [2014-06-16 06:34:54 PDT] read: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"write-tree\"]
+ [2014-06-16 06:34:55 PDT] chat: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"commit-tree\",\"c0fd1ea9ccae70a7353a2e787089b88115a42b7a\"]
+ [2014-06-16 06:34:55 PDT] call: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"update-ref\",\"refs/heads/views/Year=_;Address=_\",\"249c37d78e45d1fccfcb00f40337e05cb69fb64c\"]
+
+ [2014-06-16 06:34:55 PDT] call: git [\"--git-dir=/Volumes/Four TB Backup/Photos/.git\",\"--work-tree=/Volumes/Four TB Backup/Photos\",\"checkout\",\"views/Year=_;Address=_\"]
+ Checking out files: 100% (12789/12789), done.
+ Switched to branch 'views/Year=_;Address=_'
+ ok
+ real 362.14
+ user 18.16
+ sys 7.70
+
+"""]]
diff --git a/doc/forum/View_performance_with_7__44__000_files/comment_2_b1942eed65e9b5c046095a094191a38c._comment b/doc/forum/View_performance_with_7__44__000_files/comment_2_b1942eed65e9b5c046095a094191a38c._comment
new file mode 100644
index 000000000..91259f335
--- /dev/null
+++ b/doc/forum/View_performance_with_7__44__000_files/comment_2_b1942eed65e9b5c046095a094191a38c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 2"
+ date="2014-06-16T17:52:34Z"
+ content="""
+View's don't scale to lots of files yet. Discussed in [[design/caching_database]]
+"""]]
diff --git a/doc/forum/View_performance_with_7__44__000_files/comment_3_e6e19339c9d72cf8eaae32ef4269e850._comment b/doc/forum/View_performance_with_7__44__000_files/comment_3_e6e19339c9d72cf8eaae32ef4269e850._comment
new file mode 100644
index 000000000..01ac676cb
--- /dev/null
+++ b/doc/forum/View_performance_with_7__44__000_files/comment_3_e6e19339c9d72cf8eaae32ef4269e850._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmvzzyDA8uXFz8yokeCrepbh8PwWe_WrjE"
+ nickname="Michael"
+ subject="comment 3"
+ date="2014-06-16T18:19:20Z"
+ content="""
+@joeyh, thanks - is that code all up to date here: https://github.com/joeyh/git-annex/tree/database ?
+
+I'd be interested in helping test it.
+"""]]
diff --git a/doc/forum/Walkthrough_for_direct_mode__63__.mdwn b/doc/forum/Walkthrough_for_direct_mode__63__.mdwn
new file mode 100644
index 000000000..b3fae2944
--- /dev/null
+++ b/doc/forum/Walkthrough_for_direct_mode__63__.mdwn
@@ -0,0 +1 @@
+Hello Joey, I would be very much interested in a walkthrough for direct mode, as detailed as the one currently published. I see the comments in the current walkthrough on some differences to direct mode, but to me it is not obvious what best practices for git-annex use would be in direct mode, with and without the assistant. For a mix of Linux, OS X and Windows installations in the homes, it may also be interesting to see how to best set up the individual machines. Many thanks -
diff --git a/doc/forum/Want_to_stop_using_Git-Annex.mdwn b/doc/forum/Want_to_stop_using_Git-Annex.mdwn
new file mode 100644
index 000000000..a076cf1b0
--- /dev/null
+++ b/doc/forum/Want_to_stop_using_Git-Annex.mdwn
@@ -0,0 +1,9 @@
+Hi
+
+I created a git annex repo in one of my drives. But now all my files have turned into symbolic links.
+I need to remove the git repo and get my files back. How can I do that.
+
+Some of the softwares am using will not follow symbolic links, so need put the files back properly as soon as possible.
+
+Please help.
+Thank you in advance :)
diff --git a/doc/forum/Want_to_stop_using_Git-Annex/comment_1_32e37515bd4f5d22ff9aedd3c9d98046._comment b/doc/forum/Want_to_stop_using_Git-Annex/comment_1_32e37515bd4f5d22ff9aedd3c9d98046._comment
new file mode 100644
index 000000000..9937e5d0c
--- /dev/null
+++ b/doc/forum/Want_to_stop_using_Git-Annex/comment_1_32e37515bd4f5d22ff9aedd3c9d98046._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://ypid.wordpress.com/"
+ ip="213.153.84.215"
+ subject="Direct mode"
+ date="2014-06-27T07:36:40Z"
+ content="""
+Hi
+
+[[direct_mode/]] is your friend.
+"""]]
diff --git a/doc/forum/Want_to_stop_using_Git-Annex/comment_2_e29e6d052ef3677ad7d5615721f3fe33._comment b/doc/forum/Want_to_stop_using_Git-Annex/comment_2_e29e6d052ef3677ad7d5615721f3fe33._comment
new file mode 100644
index 000000000..0eddeb201
--- /dev/null
+++ b/doc/forum/Want_to_stop_using_Git-Annex/comment_2_e29e6d052ef3677ad7d5615721f3fe33._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 2"
+ date="2014-07-02T17:04:29Z"
+ content="""
+git annex uninit
+"""]]
diff --git a/doc/forum/Web_app_on_server_without_X11__63__.mdwn b/doc/forum/Web_app_on_server_without_X11__63__.mdwn
new file mode 100644
index 000000000..cb880cf29
--- /dev/null
+++ b/doc/forum/Web_app_on_server_without_X11__63__.mdwn
@@ -0,0 +1,3 @@
+When I run git-annex-webapp, a browser is opened and I am redirected to the assistant. However, how can I run the web app and just have it start the server process without opening a browser, and navigating to the page from a remote computer?
+
+Thanks!
diff --git a/doc/forum/Web_app_on_server_without_X11__63__/comment_1_bee409ad389e5fb5f3e8de4b5c68278d._comment b/doc/forum/Web_app_on_server_without_X11__63__/comment_1_bee409ad389e5fb5f3e8de4b5c68278d._comment
new file mode 100644
index 000000000..f428ece1e
--- /dev/null
+++ b/doc/forum/Web_app_on_server_without_X11__63__/comment_1_bee409ad389e5fb5f3e8de4b5c68278d._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="Xyem"
+ ip="81.111.193.130"
+ subject="comment 1"
+ date="2014-09-10T14:32:21Z"
+ content="""
+[Running the assistant headless](http://git-annex.branchable.com/design/assistant/blog/day_232__headless_webapp/).
+
+Hope this helps.
+"""]]
diff --git a/doc/forum/What_does___34__disable__47__enable_expiry_after_X_days__34___mean__63__.mdwn b/doc/forum/What_does___34__disable__47__enable_expiry_after_X_days__34___mean__63__.mdwn
new file mode 100644
index 000000000..e95e27a75
--- /dev/null
+++ b/doc/forum/What_does___34__disable__47__enable_expiry_after_X_days__34___mean__63__.mdwn
@@ -0,0 +1 @@
+Git-annex assistant configuration has an item saying "disable/enable expiry after X days". What does it mean? Am I the only one confused by this?
diff --git a/doc/forum/What_does___34__disable__47__enable_expiry_after_X_days__34___mean__63__/comment_1_face45c85e4713325bb23bbca7b07502._comment b/doc/forum/What_does___34__disable__47__enable_expiry_after_X_days__34___mean__63__/comment_1_face45c85e4713325bb23bbca7b07502._comment
new file mode 100644
index 000000000..adae1861a
--- /dev/null
+++ b/doc/forum/What_does___34__disable__47__enable_expiry_after_X_days__34___mean__63__/comment_1_face45c85e4713325bb23bbca7b07502._comment
@@ -0,0 +1,28 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-31T20:21:52Z"
+ content="""
+Well, let's see.. You've gone into the Configuration and picked "Unused
+files". The full text in front of you is:
+
+<pre>
+Managing unused files
+
+Old versions of files and deleted files can be preserved inside this repository.
+
+This might be useful, if you ever need to access those old or deleted files. But they'll also use up disk space. There are three ways to deal with this
+
+1. Set up a backup or archive repository, on a removable drive or in the cloud, and the unused files will be moved to it, freeing up space.
+ [Add a new repository]
+2. Or, you can let unused files expire after a period of time.
+ [Disable expiry / Enable expiry] after [7] days. [Save changes]
+</pre>
+
+So yes, if I read only item #2, and possibly skip the first sentence of it
+and look at only the "Disable expiry / Enable expiry",
+it seems a litte confusing, possibly, but if I read the 2 paragraphs
+of explaination above it, not so much?
+
+What do you find confusing about this form as a whole?
+"""]]
diff --git a/doc/forum/Where_is_the_content__63__.mdwn b/doc/forum/Where_is_the_content__63__.mdwn
new file mode 100644
index 000000000..0d79bbb09
--- /dev/null
+++ b/doc/forum/Where_is_the_content__63__.mdwn
@@ -0,0 +1,8 @@
+On Android 4.4.4, I can install the most recent git annex. I want to join a git annex running on my linux server. Git annex on android seems to be able to contact remote, and it asks if I want to 'merge' with it. I hope that did not mean erase the remote. Anyway, the sync says it is proceeding, but when it is done, I cannot find a folder with remote copies of files.
+
+I figure either it worked, or it destroyed my remote.
+
+After new install, I have folders /sdcard/annex and /sdcard/git-annex.home. I don't find a new folder with name of remote repo, don't understand why.
+
+Help?
+
diff --git a/doc/forum/Where_is_the_content__63__/comment_1_812e1cf740cbfa449ab3ef4dd5f2df08._comment b/doc/forum/Where_is_the_content__63__/comment_1_812e1cf740cbfa449ab3ef4dd5f2df08._comment
new file mode 100644
index 000000000..423bd82d2
--- /dev/null
+++ b/doc/forum/Where_is_the_content__63__/comment_1_812e1cf740cbfa449ab3ef4dd5f2df08._comment
@@ -0,0 +1,132 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkpIIYg6Fl7OFsOHVPEchZYj68A3dk4lVg"
+ nickname="Paul"
+ subject="install log"
+ date="2014-07-15T12:02:59Z"
+ content="""
+Installation starting to /data/data/ga.androidterm
+ac90d4f57076a59cac3a8017b89ac9b5ab4e5021
+installing busybox
+installing git-annex
+installing git-shell
+installing git-upload-pack
+installing git
+installing gpg
+installing rsync
+installing ssh
+installing ssh-keygen
+linking ./libexec/git-core/git-show to git
+linking ./libexec/git-core/git-cherry-pick to git
+linking ./libexec/git-core/git-revert to git
+linking ./libexec/git-core/git-rerere to git
+linking ./libexec/git-core/git to git
+linking ./libexec/git-core/git-cat-file to git
+linking ./libexec/git-core/git-archive to git
+linking ./libexec/git-core/git-apply to git
+linking ./libexec/git-core/git-repack to git
+linking ./libexec/git-core/git-replace to git
+linking ./libexec/git-core/git-verify-pack to git
+linking ./libexec/git-core/git-name-rev to git
+linking ./libexec/git-core/git-grep to git
+linking ./libexec/git-core/git-format-patch to git
+linking ./libexec/git-core/git-log to git
+linking ./libexec/git-core/git-read-tree to git
+linking ./libexec/git-core/git-fast-export to git
+linking ./libexec/git-core/git-mktag to git
+linking ./libexec/git-core/git-cherry to git
+linking ./libexec/git-core/git-stage to git
+linking ./libexec/git-core/git-blame to git
+linking ./libexec/git-core/git-help to git
+linking ./libexec/git-core/git-tag to git
+linking ./libexec/git-core/git-column to git
+linking ./libexec/git-core/git-clone to git
+linking ./libexec/git-core/git-pack-redundant to git
+linking ./libexec/git-core/git-rev-list to git
+linking ./libexec/git-core/git-ls-files to git
+linking ./libexec/git-core/git-update-index to git
+linking ./libexec/git-core/git-merge-tree to git
+linking ./libexec/git-core/git-shortlog to git
+linking ./libexec/git-core/git-pack-refs to git
+linking ./libexec/git-core/git-fsck to git
+linking ./libexec/git-core/git-mv to git
+linking ./libexec/git-core/git-index-pack to git
+linking ./libexec/git-core/git-upload-archive to git
+linking ./libexec/git-core/git-unpack-file to git
+linking ./libexec/git-core/git-merge-recursive to git
+linking ./libexec/git-core/git-checkout to git
+linking ./libexec/git-core/git-mailsplit to git
+linking ./libexec/git-core/git-whatchanged to git
+linking ./libexec/git-core/git-remote-fd to git
+linking ./libexec/git-core/git-fsck-objects to git
+linking ./libexec/git-core/git-diff to git
+linking ./libexec/git-core/git-diff-tree to git
+linking ./libexec/git-core/git-check-ref-format to git
+linking ./libexec/git-core/git-status to git
+linking ./libexec/git-core/git-annotate to git
+linking ./libexec/git-core/git-bisect--helper to git
+linking ./libexec/git-core/git-mktree to git
+linking ./libexec/git-core/git-check-ignore to git
+linking ./libexec/git-core/git-clean to git
+linking ./libexec/git-core/git-merge to git
+linking ./libexec/git-core/git-var to git
+linking ./libexec/git-core/git-get-tar-commit-id to git
+linking ./libexec/git-core/git-remote-ext to git
+linking ./libexec/git-core/git-stripspace to git
+linking ./libexec/git-core/git-send-pack to git
+linking ./libexec/git-core/git-fetch to git
+linking ./libexec/git-core/git-ls-remote to git
+linking ./libexec/git-core/git-init to git
+linking ./libexec/git-core/git-notes to git
+linking ./libexec/git-core/git-commit to git
+linking ./libexec/git-core/git-receive-pack to git
+linking ./libexec/git-core/git-prune to git
+linking ./libexec/git-core/git-update-server-info to git
+linking ./libexec/git-core/git-gc to git
+linking ./libexec/git-core/git-show-ref to git
+linking ./libexec/git-core/git-merge-subtree to git
+linking ./libexec/git-core/git-describe to git
+linking ./libexec/git-core/git-branch to git
+linking ./libexec/git-core/git-checkout-index to git
+linking ./libexec/git-core/git-prune-packed to git
+linking ./libexec/git-core/git-ls-tree to git
+linking ./libexec/git-core/git-hash-object to git
+linking ./libexec/git-core/git-push to git
+linking ./libexec/git-core/git-for-each-ref to git
+linking ./libexec/git-core/git-verify-tag to git
+linking ./libexec/git-core/git-diff-files to git
+linking ./libexec/git-core/git-check-attr to git
+linking ./libexec/git-core/git-mailinfo to git
+linking ./libexec/git-core/git-check-mailmap to git
+linking ./libexec/git-core/git-fetch-pack to git
+linking ./libexec/git-core/git-diff-index to git
+linking ./libexec/git-core/git-add to git
+linking ./libexec/git-core/git-config to git
+linking ./libexec/git-core/git-merge-ours to git
+linking ./libexec/git-core/git-symbolic-ref to git
+linking ./libexec/git-core/git-init-db to git
+linking ./libexec/git-core/git-pack-objects to git
+linking ./libexec/git-core/git-rm to git
+linking ./libexec/git-core/git-write-tree to git
+linking ./libexec/git-core/git-show-branch to git
+linking ./libexec/git-core/git-fmt-merge-msg to git
+linking ./libexec/git-core/git-count-objects to git
+linking ./libexec/git-core/git-reset to git
+linking ./libexec/git-core/git-reflog to git
+linking ./libexec/git-core/git-rev-parse to git
+linking ./libexec/git-core/git-update-ref to git
+linking ./libexec/git-core/git-patch-id to git
+linking ./libexec/git-core/git-commit-tree to git
+linking ./libexec/git-core/git-merge-file to git
+linking ./libexec/git-core/git-credential to git
+linking ./libexec/git-core/git-unpack-objects to git
+linking ./libexec/git-core/git-bundle to git
+linking ./libexec/git-core/git-merge-index to git
+linking ./libexec/git-core/git-remote to git
+linking ./libexec/git-core/git-merge-base to git
+linking ./bin/git-upload-archive to git
+linking ./bin/git-receive-pack to git
+linking ./libexec/git-core/git-shell to git-shell
+linking ./libexec/git-core/git-upload-pack to git-upload-pack
+Installation complete
+
+"""]]
diff --git a/doc/forum/Where_is_the_content__63__/comment_2_5e2cfdfab6c4f84fe7a19447b417b5a7._comment b/doc/forum/Where_is_the_content__63__/comment_2_5e2cfdfab6c4f84fe7a19447b417b5a7._comment
new file mode 100644
index 000000000..45b7b024e
--- /dev/null
+++ b/doc/forum/Where_is_the_content__63__/comment_2_5e2cfdfab6c4f84fe7a19447b417b5a7._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 2"
+ date="2014-07-15T18:37:34Z"
+ content="""
+It'll be in `/sdcard/annex` by defualt, unless you told the webapp to put it somewhere else when it asked where to put the repository. `/sdcard/annex` is a git repository which should contain all the files from the remote (not in any separate subdirectory, that's not how git works). If it does not, you can run commands like `git log --stat` in that repository to see what files have been added/removed, or `git annex status` to check the status of the files.
+"""]]
diff --git a/doc/forum/Where_is_the_content__63__/comment_3_bd4cbc8f256a94ffde4f57d2c406a9ec._comment b/doc/forum/Where_is_the_content__63__/comment_3_bd4cbc8f256a94ffde4f57d2c406a9ec._comment
new file mode 100644
index 000000000..5b736b410
--- /dev/null
+++ b/doc/forum/Where_is_the_content__63__/comment_3_bd4cbc8f256a94ffde4f57d2c406a9ec._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkpIIYg6Fl7OFsOHVPEchZYj68A3dk4lVg"
+ nickname="Paul"
+ subject="text relocations refusal"
+ date="2014-07-16T02:19:27Z"
+ content="""
+I'm afraid I've ruined the remote repo. For directory, I wrote \"mediashare\" because that's where I want copy to go. i don't want it in default \"annex\". In git assistant, it is unclearbwhst directory means. Mount point for cooy of remote?
+
+Well, this is all I get now...
+
+1|u0_a127@manta:/sdcard $ cd annex
+u0_a127@manta:/sdcard/annex $ git annex status
+WARNING: linker: git-annex has text relocations. This is wasting memory and is a security risk. Please fix.
+
+
+"""]]
diff --git a/doc/forum/Where_is_the_content__63__/comment_4_a36b35d47472b5db779b0489bf3d4893._comment b/doc/forum/Where_is_the_content__63__/comment_4_a36b35d47472b5db779b0489bf3d4893._comment
new file mode 100644
index 000000000..69b929810
--- /dev/null
+++ b/doc/forum/Where_is_the_content__63__/comment_4_a36b35d47472b5db779b0489bf3d4893._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 4"
+ date="2014-07-16T20:41:17Z"
+ content="""
+That warning about text relocations always happens on Android and is not relevant to whatever problem you're having.
+
+If git-annex status does not print anything else, then it seems you have a git-annex repository in /sdcard/annex. If you entered \"mediashare\" in the webapp, you might have another repository in another location. When you open the webapp, it tells you the location of the repository in the upper-right corner -- \"Repository: $location\"
+"""]]
diff --git a/doc/forum/Why_is_git_annex_status_slow__63__.mdwn b/doc/forum/Why_is_git_annex_status_slow__63__.mdwn
new file mode 100644
index 000000000..5c659b61d
--- /dev/null
+++ b/doc/forum/Why_is_git_annex_status_slow__63__.mdwn
@@ -0,0 +1,20 @@
+It seems that `git annex status` is much slower than `git status`, at least in direct mode. The man page does not give any hint about why it should be slower.
+
+Does `git annex status` do something that `git status` does not?
+
+Here is an example in a repo with 8000+ files in direct mode and with no modified files:
+
+
+ $ time git -c core.bare=false status --porcelain > /dev/null
+
+ real 0m0.096s
+ user 0m0.042s
+ sys 0m0.071s
+
+ $ time git annex status
+
+ real 0m17.144s
+ user 0m10.555s
+ sys 0m1.934s
+
+It is strange to see that `git annex status` is ~200 times slower than the bare `git status`.
diff --git a/doc/forum/Why_is_git_annex_status_slow__63__/comment_1_a5139c5a9fc94486cf62fc9a9fa9f8d9._comment b/doc/forum/Why_is_git_annex_status_slow__63__/comment_1_a5139c5a9fc94486cf62fc9a9fa9f8d9._comment
new file mode 100644
index 000000000..f21fcac48
--- /dev/null
+++ b/doc/forum/Why_is_git_annex_status_slow__63__/comment_1_a5139c5a9fc94486cf62fc9a9fa9f8d9._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-11-03T17:08:50Z"
+ content="""
+`git status` looks at the index and work tree. In an indirect mode
+repository, `git annex status` does too, and is not significantly slower.
+
+In direct mode, `git annex status` has to look up from git the key
+that corresponds to each file in the work tree. This is the main
+thing that slows it down.
+
+(See the code for details, it's quite clear.)
+
+The best workaround is proably to pass git-annex status a subdirectory
+that you're interested in, so it can only look at the contents of that one
+directory.
+"""]]
diff --git a/doc/forum/Windows_installation_notes.mdwn b/doc/forum/Windows_installation_notes.mdwn
new file mode 100644
index 000000000..3fb25ec05
--- /dev/null
+++ b/doc/forum/Windows_installation_notes.mdwn
@@ -0,0 +1,146 @@
+[[!toc]]
+
+# Introduction
+
+Hello.
+
+I've installed git-annex and git-annex assistant on Windows 7 in a corp environment (hello gotchas!).
+
+In this post I'll describe issues I encountered, how I fixed them, recommendations I have for the installer, and some results from a couple `git annex test` runs.
+
+# Background
+
+My regular domain user doesn't have permissions to write to `C:\Program Files (x86)`, so I use a secondary domain user which is in the Administrators group. I use "Run as different user" to run installers, etc. (cf. "Run as Administrator")
+
+During msysgit installation I checked "only bash, don't add to path, don't integrate with Explorer" etc, since I like my third-party applications isolated.
+
+# The installer
+
+## Where to install `git-annex.exe`
+
+The nightly build of git-annex/assistant from NEST (20140908) only prompts for the base path of the msysgit location and it installs files in `$BASE/bin` and `$BASE/cmd`... I'll try manually copying files post-install to mitigate the path issues described in other posts on this forum.
+
+The msysgit installer (1.9.4-preview20140815) presents a certain screen with three radio options:
+
+1. git bash only
+2. just git in `cmd.exe`
+3. git + unix tools in `cmd.exe`.
+
+I *think* this is the meaning of each:
+
+1. cmd.exe's PATH is not touched.
+2. `$GITBASE/cmd` is added to PATH
+3. `$GITBASE/bin` is added to PATH
+
+Therefore, I think that if you do something so that `git-annex.exe` is added to both $GITBASE/cmd and $GITBASE/bin (perhaps a symlink or even a .lnk file) then all three user preference options will be covered.
+
+All I did was copy `$BASE/cmd/git-annex.exe` to `$BASE/bin/git-annex.exe` and now both `git annex` and `git-annex` work in my msysgit "git bash" console. I didn't test `cmd.exe` since I selected option 1 in the msysgit installer.
+
+## Installer locations: user profile or system-wide?
+
+I found a shortcut for the webapp in Start Menu/Startup ... for the wrong user. Please prompt the user during the installation: "Install startup link system-wide or for current user?"
+
+# git annex test results
+
+## `$HOME` defaulted to some mapped drive, whoops!
+
+The test suite has been running since before I started this post. Is that normal? :)
+
+I notice that it emits "Detected a crippled filesystem", "Enabling direct mode." and other messages again and again. If those checks are expensive, maybe the result should be memoized/cached.
+
+Oh goodness, the test is reading and writing to my "home directory": a remote filesystem I never use. It's slow. I'll have to configure msysgit to use a different, more local `$HOME`. This a common problem on this workstation. I'll let the test finish in case it reveals something useful to you, but this will not be how I use it going forward...
+
+I am unable to attach `testWithMappedDriveHomeDirConsoleOutput.txt` to this post. 1 out of 84 tests failed. Here is the only case sensitive occurrence of FAIL in the console output, with some lines of context.
+
+ OK
+ info: Detected a filesystem without fifo support.
+ Disabling ssh connection caching.
+ Detected a crippled filesystem.
+ Enabling direct mode.
+ git-annex: Data.BloomFilter.Util.suggestSizing: capacity too large to represent
+ FAIL
+ Exception: user error (git-annex ["info","--json"] exited 1)
+ version: Detected a filesystem without fifo support.
+ Disabling ssh connection caching.
+ Detected a crippled filesystem.
+ Enabling direct mode.
+ git-annex version: 5.20140908-g378fbb1
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash
+
+## test results with local NTFS `$HOME`
+
+...The console output is scrolling by much more quickly.
+
+2 out of 84 tests failed.
+
+ prop_past_sane: OK
+ +++ OK, passed 1000 tests.
+ prop_duration_roundtrips: OK
+ +++ OK, passed 1000 tests.
+ prop_metadata_sane: OK
+ +++ OK, passed 1000 tests.
+ prop_metadata_serialize: OK
+ +++ OK, passed 1000 tests.
+ prop_branchView_legal: OK
+ +++ OK, passed 1000 tests.
+ prop_view_roundtrips: OK
+ +++I nOiKt, Tpeasstsse
+ d 1 0i0n0i tt:e sts.
+ prop_viewedFile_rountrips: FAIL
+ *** Failed! Falsifiable (after 51 tests and 1 shrink):
+ "a:"
+ Use --quickcheck-replay '50 592211036 1831676953' to reproduce.
+ Unit Tests
+ add sha1dup: init test repo
+ Detected a filesystem without fifo support.
+
+ Disabling ssh connection caching.
+
+and
+
+ OK
+ info: Detected a filesystem without fifo support.
+ Disabling ssh connection caching.
+ Detected a crippled filesystem.
+ Enabling direct mode.
+ git-annex: Data.BloomFilter.Util.suggestSizing: capacity too large to represent
+ FAIL
+ Exception: user error (git-annex ["info","--json"] exited 1)
+ version: Detected a filesystem without fifo support.
+ Disabling ssh connection caching.
+ Detected a crippled filesystem.
+ Enabling direct mode.
+ git-annex version: 5.20140908-g378fbb1
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash
+
+...Note the corruption. I think this happens when I drag the scroll bar while console output is being emitted. (msysgit's problem?) I would presume and hope that this is a "display only" issue. UPDATE: see section Corruption below.
+
+# .vbs failure
+
+I copied the `git-annex.lnk` out of my admin user's start menu onto my desktop and double clicked it. `wscript.exe` got stuck in a loop where new copies were being spawned over and over again (and old copies dieing at the same rate).
+
+I think I know why. `git-annex.exe` isn't on the path... but `git-annex.lnk` is in the CWD (Desktop in this case). Yeah, that is the problem. The vbs attempts to run "git-annex webapp", and this .lnk points to a valid "executable": `git-annex-webapp.vbs`... So it just calls itself with an argument over and over again.
+
+Workaround: invoke `git annex webapp` from the normal git bash console.
+
+# Corruption?
+
+In some section above I speculated that the "jittery" corruption I was seeing in my console was a "display only" problem caused by scrolling around while new characters were being printed to the console. Now, I don't think so.
+
+The corruption can be seen in the Log in the webapp. Here's an example from the top of the log:
+
+ [2014-09-08 13:37:45 Central Daylight Time] main: starting assistant version 5.20140908-g378fbb1
+ Launching web browser on file://d:\annex\.git\annex\webapp.html
+ [2014-09-08 13:37:45 Central Daylight Time] Cronner: You should enable consistency checking to protect your data.
+ (scanning...) [2014-09-08 13:37:45 Central Daylight Time] Watcher: Performing startup scan
+ (started...) rreerrcceevvcc::vv ::ff aaffiiaalliieellddee dd(( NN((ooNN ooee rreerrrroorrrroo))rr
+
+ ))
+
+I have no clue about this! (Well... "I think it's trying to communicate!")
+
+# Conclusion
+
+I hope this information is helpful. I've enabled the 'email comments to me' option on this post and I'd be happy to perform further tests upon request.
+
+Cheers!
diff --git a/doc/forum/Workflow_for_adding_files.mdwn b/doc/forum/Workflow_for_adding_files.mdwn
new file mode 100644
index 000000000..cb631543f
--- /dev/null
+++ b/doc/forum/Workflow_for_adding_files.mdwn
@@ -0,0 +1,32 @@
+What is the correct way to add/modify files such that the changes are synchronized?
+
+Suppose I have a server "server" and a windows client "client" (more after some time); everything direct mode.
+
+I created the repos on the server:
+
+ cd bin
+ git init
+ git annex init server
+ git annex direct
+ git annex add .
+ git annex sync
+
+On the (Windows) client using cygwin:
+
+ git annex clone ssh://me@server:/srv/bin
+ cd bin
+ git annex init client
+
+Then I want to add files on the client:
+
+ git annex add tools
+ git annex sync
+
+At this point I wonder that the data is not copied to the server but only metadata!
+I then used
+
+ git annex sync --content
+
+but then everything from the server is leeched as well (as if I could have called "git annex get .")
+
+What is the intented workflow such that added/modified files on the client always go to the server, modified/new files from the server are always pulled but ONLY if I previously got the file/directory via "get annex get"?
diff --git a/doc/forum/Workflow_for_adding_files/comment_1_a60dae97db827bc641d6256d1f382b5f._comment b/doc/forum/Workflow_for_adding_files/comment_1_a60dae97db827bc641d6256d1f382b5f._comment
new file mode 100644
index 000000000..9774e69bf
--- /dev/null
+++ b/doc/forum/Workflow_for_adding_files/comment_1_a60dae97db827bc641d6256d1f382b5f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnJO6OKamxo1HDLwdV-W3KV4GhJ5Qitl9M"
+ nickname="Frederik"
+ subject="comment 1"
+ date="2014-05-15T00:57:23Z"
+ content="""
+Check the description for manual out on [[http://git-annex.branchable.com/preferred_content/standard_groups/]]. I believe that's what you'll need.
+"""]]
diff --git a/doc/forum/Workflow_for_adding_files/comment_2_28dd15ac50f79fb07bacf8b8326c7edc._comment b/doc/forum/Workflow_for_adding_files/comment_2_28dd15ac50f79fb07bacf8b8326c7edc._comment
new file mode 100644
index 000000000..c11be2667
--- /dev/null
+++ b/doc/forum/Workflow_for_adding_files/comment_2_28dd15ac50f79fb07bacf8b8326c7edc._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk9SYh6N-JUMkYkW4aOk55zC3Vr9KonDV4"
+ nickname="Florian"
+ subject="comment 2"
+ date="2014-06-18T07:35:31Z"
+ content="""
+Just to be sure I understood the topic, this would be achieved in putting the repo in the manual transfer group?
+
+manual
+
+This gives you nearly full manual control over what content is stored in the repository. This allows using the assistant without it trying to keep a local copy of every file. Instead, you can manually run git annex get, git annex drop, etc to manage content. Only content that is already present is wanted.
+
+The exception to this manual control is that content that a client repository would not want is not wanted. So, files in archive directories are not wanted once their content has reached an archive repository.
+
+present and ($client)
+
+(Where $client is a copy of the preferred content expression used for clients.)
+<<<
+"""]]
diff --git a/doc/forum/XMPP_problem_behind_router.mdwn b/doc/forum/XMPP_problem_behind_router.mdwn
new file mode 100644
index 000000000..5eec76a07
--- /dev/null
+++ b/doc/forum/XMPP_problem_behind_router.mdwn
@@ -0,0 +1,3 @@
+I'm trying to configure a jabber account for use with git-annex, but it seems that something's wrong as soon as I try to go through my router (wired or wireless). Compared to directly connecting to my modem, wireshark shows a lot of TCP retransmissions, eventually resulting in "Unable to connect to the Jabber server. Maybe you entered the wrong password? (Error message: host gmail.com:5222 failed: connect: timeout (Connection timed out))" in the webapp.
+
+I've tried to configure the account both in the webapp and manually in the .git/annex/creds/xmpp file, but it doesn't seem to make a difference. It's able to connect if I directly connect it to my modem, so I'm fairly sure it's not a problem at my computer or with the credentials. It doesn't appear to be a problem at the firewall on the router, but I could certainly be missing something. Are there some other tests I could try to narrow down the problem?
diff --git a/doc/forum/XMPP_problem_behind_router/comment_1_25a7f8dc5cf14cda4d76b2f8c6ca77d5._comment b/doc/forum/XMPP_problem_behind_router/comment_1_25a7f8dc5cf14cda4d76b2f8c6ca77d5._comment
new file mode 100644
index 000000000..04b1965c0
--- /dev/null
+++ b/doc/forum/XMPP_problem_behind_router/comment_1_25a7f8dc5cf14cda4d76b2f8c6ca77d5._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://me.yahoo.com/a/wbh0dY54mcPwTpeOweuPQ8JiZrH3hg--#9b726"
+ nickname="Joe"
+ subject="comment 1"
+ date="2014-09-23T01:15:23Z"
+ content="""
+I forgot to mention that XMPP via other clients (e.g., empathy) works fine.
+"""]]
diff --git a/doc/forum/XMPP_problem_behind_router/comment_2_3186ebe32c30764b9fd53625dd3e4eda._comment b/doc/forum/XMPP_problem_behind_router/comment_2_3186ebe32c30764b9fd53625dd3e4eda._comment
new file mode 100644
index 000000000..63387ae3d
--- /dev/null
+++ b/doc/forum/XMPP_problem_behind_router/comment_2_3186ebe32c30764b9fd53625dd3e4eda._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.144"
+ subject="comment 2"
+ date="2014-09-25T15:48:39Z"
+ content="""
+I don't think that google XMPP server is at gmail.com. This suggests that the SRV record lookup to get from the email server to the xmpp server failed somehow. So, I'd look for a issue on the router's DNS server, or perhaps reconfigure DNS to bypass that server.
+"""]]
diff --git a/doc/forum/XMPP_problem_behind_router/comment_3_7fa8fe8cb92993c935ba2dbfb2aef728._comment b/doc/forum/XMPP_problem_behind_router/comment_3_7fa8fe8cb92993c935ba2dbfb2aef728._comment
new file mode 100644
index 000000000..d8ee076f6
--- /dev/null
+++ b/doc/forum/XMPP_problem_behind_router/comment_3_7fa8fe8cb92993c935ba2dbfb2aef728._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://me.yahoo.com/a/wbh0dY54mcPwTpeOweuPQ8JiZrH3hg--#9b726"
+ nickname="Joe"
+ subject="comment 3"
+ date="2014-09-29T01:38:14Z"
+ content="""
+Thanks, that seemed to be the problem! My router's dnsmasq had the 'filterwin2k' option set, which apparently [blocks queries for SRV records](http://wiki.openwrt.org/doc/howto/dhcp.dnsmasq#sip-phones.and.dnsmasq). This may be fixed in newer OpenWRT versions, but my device is no longer supported.
+"""]]
diff --git a/doc/forum/__171__Locking__187___files_until_synced.mdwn b/doc/forum/__171__Locking__187___files_until_synced.mdwn
new file mode 100644
index 000000000..129927bdc
--- /dev/null
+++ b/doc/forum/__171__Locking__187___files_until_synced.mdwn
@@ -0,0 +1,7 @@
+I’m currently trying to set up a sync which involves an SQLite3 database file that should always be in the same state on all systems at all times (since there is no readily available way of merging the data). Basically, I’m looking for a practical way that gives me some help in making sure the files never drift apart between my remotes. Since I’m forgetful and might forget syncing the repo before going home from the office, I was wondering whether there might be a good way to assist me in this. Has anyone had some good ideas in this direction, or is there a canonical solution?
+
+It occurred to me one way would be to instate a hook somewhere that links the database to /dev/null in all other remotes (so the software will fail to work if I start it without having synced), but it seems tricky. I guess would have to involve per-remote branches, which will be hard to do, since I need to use direct mode.
+
+A less complex method might be forcing a sync before shutting down the system resp. when booting up.
+
+Maybe other folks have had ideas for a practical, yet robust solution.
diff --git a/doc/forum/__171__Locking__187___files_until_synced/comment_1_8bf59f47fee0a8d5741fe209b5899863._comment b/doc/forum/__171__Locking__187___files_until_synced/comment_1_8bf59f47fee0a8d5741fe209b5899863._comment
new file mode 100644
index 000000000..d327a58b4
--- /dev/null
+++ b/doc/forum/__171__Locking__187___files_until_synced/comment_1_8bf59f47fee0a8d5741fe209b5899863._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 1"
+ date="2014-07-08T17:31:53Z"
+ content="""
+This is something git's distributed nature preludes. You might frankly be better with one of the centralized VCSs that supports locking in this specific case. Or, you can do some kind of \"lock server\" that the clients contact, layering a centralized approach on top of git.
+"""]]
diff --git a/doc/forum/__171__Locking__187___files_until_synced/comment_2_0c683547a6178e4303f0b1ed1f5605a5._comment b/doc/forum/__171__Locking__187___files_until_synced/comment_2_0c683547a6178e4303f0b1ed1f5605a5._comment
new file mode 100644
index 000000000..b76f35da5
--- /dev/null
+++ b/doc/forum/__171__Locking__187___files_until_synced/comment_2_0c683547a6178e4303f0b1ed1f5605a5._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="134.147.14.84"
+ subject="comment 2"
+ date="2014-07-09T07:07:27Z"
+ content="""
+Yea, it’s basically just the isolated one file that needs «locking», so one could just try a different route. The idea with keeping state on a server sounds like a pretty good idea. I could just «echo» via SSH to my webserver some info on who has the file locked; then I could wrap the program that uses the SQLite3 DB in a script that checks whether it’s safe.
+"""]]
diff --git a/doc/forum/__34__Lost__34___data__63___Maybe_a_bug__63__.mdwn b/doc/forum/__34__Lost__34___data__63___Maybe_a_bug__63__.mdwn
new file mode 100644
index 000000000..20f6d696a
--- /dev/null
+++ b/doc/forum/__34__Lost__34___data__63___Maybe_a_bug__63__.mdwn
@@ -0,0 +1,14 @@
+Hey,
+
+I lost some symlinks to my data and I do not know how to recover them. I was in view mode with some tag folders already there. I added _new_ files from outside annex into some folder and 'git annex add' those files.
+
+What I expected: Git-Annex should add those files to the annex, move the symlinks to the root of the annex (because there is no other way to tell where to put them) and tag them with the specific tag. That is the way I would like to work, first tag, then organize in folder structure.
+
+Now that seems not to be a scenario which has been respected? Because I don't see my files... anywhere. Not in master branch nor in the view branch (I already did 'git annex vpop'). If that is not supported and never will be git-annex should not accept data from the outside world if it is currently in view mode.
+
+Now, how do I get my symlinks back? I guess the content is still there, but the links are missing and I don't find any reference or history log to revert that. 'git annex unused' does not show them either.
+
+I hope somebody can help me :)
+
+Cheers,
+Stephan
diff --git a/doc/forum/__34__Lost__34___data__63___Maybe_a_bug__63__/comment_1_52e4453432184524d84d88f6382cac9d._comment b/doc/forum/__34__Lost__34___data__63___Maybe_a_bug__63__/comment_1_52e4453432184524d84d88f6382cac9d._comment
new file mode 100644
index 000000000..2ecde6390
--- /dev/null
+++ b/doc/forum/__34__Lost__34___data__63___Maybe_a_bug__63__/comment_1_52e4453432184524d84d88f6382cac9d._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="sts"
+ ip="134.147.240.107"
+ subject="comment 1"
+ date="2014-08-11T11:39:44Z"
+ content="""
+OK, I could find the commit where I have added the data. I can 'git show' the commit and see the keys. I can also checkout the commit and I can see my data. Now I tried to create symlinks based on the keys I found in the commit, so whats the right way?
+
+ git annex examinekey SHA256E-s1390161393--1dcba6e914ad6a9133d374e3c55fbf9a58f036e64298262692c7f8e7cdb65852.mkv
+ SHA256E-s1390161393--1dcba6e914ad6a9133d374e3c55fbf9a58f036e64298262692c7f8e7cdb65852.mkv
+
+ git annex fromkey SHA256E-s1390161393--1dcba6e914ad6a9133d374e3c55fbf9a58f036e64298262692c7f8e7cdb65852.mkv e01.mkv
+ git-annex: key (SHA256E-s1390161393--1dcba6e914ad6a9133d374e3c55fbf9a58f036e64298262692c7f8e7cdb65852.mkv) is not present in backend
+
+I am not sure what to do now :-/.
+"""]]
diff --git a/doc/forum/__34__Lost__34___data__63___Maybe_a_bug__63__/comment_2_4d80b96e788d233706fa8f3e363d2f76._comment b/doc/forum/__34__Lost__34___data__63___Maybe_a_bug__63__/comment_2_4d80b96e788d233706fa8f3e363d2f76._comment
new file mode 100644
index 000000000..e9122c069
--- /dev/null
+++ b/doc/forum/__34__Lost__34___data__63___Maybe_a_bug__63__/comment_2_4d80b96e788d233706fa8f3e363d2f76._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 2"
+ date="2014-08-12T17:57:26Z"
+ content="""
+views are a somewhat new feature that still needs work, and you will find this question of what to do about a file added while in a view in the todo list [[here|design/metadata]].
+
+Since views are just git branches, you can check out the view branch where you added the file, and it'll still be there. You could merge the branch (probably not a good idea since the filenames are moved around in the view).
+
+Using `fromkey` will also work, if you have the right key and the content is present in the annex -- I just tested it.
+"""]]
diff --git a/doc/forum/__34__Preseeding__34___a_special_remote.mdwn b/doc/forum/__34__Preseeding__34___a_special_remote.mdwn
new file mode 100644
index 000000000..4b1342598
--- /dev/null
+++ b/doc/forum/__34__Preseeding__34___a_special_remote.mdwn
@@ -0,0 +1,5 @@
+I have a remote repository that I have yet to add as a remote into git-annex, but which already contains data that I want git-annex to manage. I already know what the SHA256 hashes and sizes of all the files are, and I can arrange them to match what git-annex will expect.
+
+Is there a way that I can tell git-annex about the presence of the data, to save me having to download and re-upload everything, in a way that is safe? What I want seems to be similar to "git annex reinject" but for special remotes (and I'll take care of the renaming), but I don't see anything in the manpage that looks likely.
+
+I can quite easily create and commit the symlinks with correctly predicted names in my master branch. Will git-annex will treat these correctly?
diff --git a/doc/forum/__34__Preseeding__34___a_special_remote/comment_1_b0c46d0eba900d0f6169a2c698d7a222._comment b/doc/forum/__34__Preseeding__34___a_special_remote/comment_1_b0c46d0eba900d0f6169a2c698d7a222._comment
new file mode 100644
index 000000000..6fae5c62e
--- /dev/null
+++ b/doc/forum/__34__Preseeding__34___a_special_remote/comment_1_b0c46d0eba900d0f6169a2c698d7a222._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.3"
+ subject="comment 1"
+ date="2014-05-21T17:41:22Z"
+ content="""
+If you also have the files present locally, you can simply do `git annex copy --fast --to remote`. git-annex copy will first check to see if the remote has the file; seeing that it does it will update the location log.
+
+Another option, if you have shell access on the remote is to simply set up a git repository there, move the files into it and `git annex add` them, and merge that into your local repository.
+
+There is not currently any way to set the [[location_tracking]] information to tell git-annex that a file has appeared on a remote. Of course, you can modify the git-annex branch manually to do so. See [[internals]].
+"""]]
diff --git a/doc/forum/__34__Preseeding__34___a_special_remote/comment_2_5e63f5e6f45c11cc86b293ce8acad77f._comment b/doc/forum/__34__Preseeding__34___a_special_remote/comment_2_5e63f5e6f45c11cc86b293ce8acad77f._comment
new file mode 100644
index 000000000..cdbf1e76d
--- /dev/null
+++ b/doc/forum/__34__Preseeding__34___a_special_remote/comment_2_5e63f5e6f45c11cc86b293ce8acad77f._comment
@@ -0,0 +1,65 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkexhIpGcYa22aPQtLm-StpHiF-MHYPh5w"
+ nickname="Robie"
+ subject="Solved"
+ date="2014-06-01T13:55:58Z"
+ content="""
+Thanks to Joey for pointing me in the right direction. I got this working now.
+
+There are approximately three steps:
+
+1. Obtain a mapping of git-annex key to friendly name, and rename all entries
+in the special remote to their git-annex keys.
+
+2. Create and commit symlinks in the `master` branch (or wherever you want them).
+
+3. Add location tracking entries to the `git-annex` branch for all entries.
+
+First, I created an \"index\" file describing the contents of my special remote,
+in the form \"KEY NAME\" where KEY is the git-annex key (I used SHA256) and NAME
+is the name I want to use for each file.
+
+## Step 1: Map and rename
+
+In my case I was \"importing\" a ddar remote, so I wrote a quick script
+(https://github.com/basak/ddar/blob/master/contrib/git-annex-convert.py) to
+generate this index as well as rename all ddar archive members to their
+git-annex keys instead.
+
+## Step 2: Create and commit symlinks
+
+Then, I created symlinks in my master branch using:
+
+ exec 3<index
+ while read key name <&3; do ln -s `git annex examinekey --format='.git/annex/objects/${hashdirmixed}${key}/${key}' \"$key\"` \"$name\"; git add \"$name\"; done
+ git commit -m'Import ddar repository contents'
+ exec 3<&-
+
+## Step 3: Add to location tracking
+
+First I set three variables:
+
+ remote_name=ddar # set to the name of the ddar git-annex special remote
+
+ uuid=`git config remote.\"$remote_name\".annex-uuid`
+ now=`printf %6fs $(date +%s)`
+
+Then I added the entries from `index` into location tracking as follows:
+
+ git checkout git-annex
+ exec 3<index
+ while read key name <&3; do log=`git annex examinekey --format='${hashdirlower}${key}.log' \"$key\"`; mkdir -p `dirname \"$log\"`; echo \"$now 1 $uuid\" >> \"$log\";git add \"$log\";done
+ exec 3<&-
+ git commit -m'Import knowledge of ddar repository contents'
+
+## Verifying
+
+`git-annex fsck --from ddar --fast` checks that the keys expected in the
+special remote can be found (replace the special remote name as needed).
+
+Skipping `--fast` will download all data to verify it. I didn't do this -
+instead I just sampled one entry which seemed to be OK.
+
+
+
+"""]]
diff --git a/doc/forum/__34__git_annex_lock__34___very_slow_for_big_repo/comment_4_a4fd212cb066cd53d0d66eb09f3b39a8._comment b/doc/forum/__34__git_annex_lock__34___very_slow_for_big_repo/comment_4_a4fd212cb066cd53d0d66eb09f3b39a8._comment
new file mode 100644
index 000000000..ecb5ba913
--- /dev/null
+++ b/doc/forum/__34__git_annex_lock__34___very_slow_for_big_repo/comment_4_a4fd212cb066cd53d0d66eb09f3b39a8._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="josch"
+ ip="2001:638:709:5:2ad2:44ff:fe4b:56aa"
+ subject="thanks a lot!"
+ date="2014-06-23T15:13:34Z"
+ content="""
+Thank you for the answer to this problem!
+
+I put 150k emails in maildir format in git annex. Adding them took a couple of hours and so did the first full sync. But after that things didnt noticibly slow down - that was a surprise!
+
+What but then I wanted to do a one-time sync using rsync. I didnt find out how to tell rsync to follow symlinks at the destination instead of replacing symlinks with normal files. So I first unlocked the 150k emails (which was moderately quick and probably only I/O bound) and then did the rsync using the --checksum option which worked well as well. The problems started when I wanted to lock the whole thing again. This took ages and even after two days it did not output that it was adding files at all. So I used `find -type f | split -a3 -l100` and then `for f in x*; do echo $f; git annex add `echo \`cat $f\``; rm $f; done`. This started off well and I could finally see files being added. Unfortunately when I came back after a couple of hours, the progress slowed down to a crawl of only one file every few seconds.
+
+The solution was to just `git checkout -- Mail` everything. This finished in a matter of seconds and left the new mail which was copied over by rsync intact.
+
+Thanks a lot for the tip!
+
+Let me hereby also report that git annex seems to work without problems when using it with offlineimap and notmuch. At least I did not run into any problems with that setup yet.
+"""]]
diff --git a/doc/forum/__91__announce__93___metadata_extration_utility.mdwn b/doc/forum/__91__announce__93___metadata_extration_utility.mdwn
new file mode 100644
index 000000000..3214f36d9
--- /dev/null
+++ b/doc/forum/__91__announce__93___metadata_extration_utility.mdwn
@@ -0,0 +1,30 @@
+Let me announce 'metatag', a simple metadata extraction utility.
+
+The Design Idea is to make it completely event driven. There are string matching rules over added metadata,
+who invoke engines when matched, which in turn add more metadata and so on.
+Thus the whole metadata extraction process is controlled by those easily configurable rules. Processing a file or
+directory just starts by adding "/=filename" to the metadata, everything else bootstraps from that. After metadata
+got extracted there are exporters which implement different backends for storing this metadata (currently only a
+'print' and a 'gitannex' exporter are implemented)
+
+While still in a infancy state it already works for me. It now needs more rules and engines for metadata extraction
+and some more efforts to 'standardize' generated metadata. I'd like to welcome comments and contributions.
+
+A README about it can be found at
+
+ <http://git.pipapo.org/?p=metatag;a=blob_plain;f=README>
+
+The code is available under git from
+
+ git clone git://git.pipapo.org/metatag
+
+To make the contribution barrier as low as possible there is a public pushable 'mob' repository where everyone can
+send changes too at `git://git.pipapo.org/mob/metatag`
+
+after installing it, using it on a annexed directory is like
+
+ metatag -r -O gitannex,gitexclude -o gitannex:-stat ./
+
+There is a mailinglist for the project, you can subscribe at
+
+ <http://lists.pipapo.org/cgi-bin/mailman/listinfo/metatag>
diff --git a/doc/forum/add_only_binary_files__63__.mdwn b/doc/forum/add_only_binary_files__63__.mdwn
new file mode 100644
index 000000000..4b40db5dd
--- /dev/null
+++ b/doc/forum/add_only_binary_files__63__.mdwn
@@ -0,0 +1 @@
+Is there a way to only add binary files with git annex add command?
diff --git a/doc/forum/add_only_binary_files__63__/comment_1_7ce3be5bafd62ce5ed78bcd9323039cc._comment b/doc/forum/add_only_binary_files__63__/comment_1_7ce3be5bafd62ce5ed78bcd9323039cc._comment
new file mode 100644
index 000000000..e53cb1f0f
--- /dev/null
+++ b/doc/forum/add_only_binary_files__63__/comment_1_7ce3be5bafd62ce5ed78bcd9323039cc._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 1"
+ date="2014-10-06T15:36:54Z"
+ content="""
+If you can configure `annex.largefiles` to match only binary files, then `git annex add` will respect it, and only add those files.
+
+For example, if you were working on a game written in C, and wanted to use git-annex only for the game art, but not the source code, you could configure it:
+
+ git config annex.largefiles 'largerthan=100kb and not (include=*.c or include=*.h)'
+
+This doesn't currently support looking at the file content to determine eg, its MIME type. That's been suggested as an added feature before.
+
+More simply, if you `git add` the non-binary files yourself first, `git annex add` will skip over those files and only add the other files.
+"""]]
diff --git a/doc/forum/adding_files_without_hashing_them.mdwn b/doc/forum/adding_files_without_hashing_them.mdwn
new file mode 100644
index 000000000..a9aef308f
--- /dev/null
+++ b/doc/forum/adding_files_without_hashing_them.mdwn
@@ -0,0 +1 @@
+I would like to be able to add files without having to hash its contents (like WORM) but being able to modify them and record its changes. Is this possible? In other words, I would like to provide other not-that-expensive mechanism for identifying files of a particular version.
diff --git a/doc/forum/adding_files_without_hashing_them/comment_1_c3113d7aff6b64a325a32b8b281df605._comment b/doc/forum/adding_files_without_hashing_them/comment_1_c3113d7aff6b64a325a32b8b281df605._comment
new file mode 100644
index 000000000..56577ca1a
--- /dev/null
+++ b/doc/forum/adding_files_without_hashing_them/comment_1_c3113d7aff6b64a325a32b8b281df605._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.22"
+ subject="comment 1"
+ date="2014-09-16T19:50:41Z"
+ content="""
+You can edit files that use the WORM backend, as long as the editing changes their size or mtime, or both. If neither changes, git-annex won't be able to keep your edits separate when using WORM.
+
+A perhaps safer compromise can be to use the WORM backend initially, but them `git annex migrate --backend=SHA256E` when you have spare CPU cycles.
+
+Or, when you commit a change to a file that had been using WORM, use `git annex add $wormy_file --backend=SHA256E` to make the new version use the better backend.
+"""]]
diff --git a/doc/forum/adding_remote_bup_repo_using_ssh.mdwn b/doc/forum/adding_remote_bup_repo_using_ssh.mdwn
new file mode 100644
index 000000000..1c13d7f8e
--- /dev/null
+++ b/doc/forum/adding_remote_bup_repo_using_ssh.mdwn
@@ -0,0 +1,42 @@
+I have two machines connected to my home network. machine A. Machine A has a git-annex repo which stores the data using a remote bup repo. The bup repo resides on Machine A itself. Now, I want to set up the same kind of environment in Machine B ( git annex repo backed down by bup remote). The only condition is that I need to re-use the bup repo in the machine A. So I went up like this:
+
+ git clone ssh://192.168.1.33/path/to/git-annex-repo-on-machine-a
+
+This succeeded. The next step was to add a reference to the bup repo on machine A to this new git-annex repo in machine B. I went about like this:
+
+ git annex initremote mybup type=bup encryption=none buprepo=192.168.1.33:/path/to/bup-repo-on-machine-a
+
+This seems to work OK, except the fact that the following shows up:
+
+ Reinitialized existing Git repository in /Users/XXX/.bup/
+ Reinitialized existing Git repository in /Users/path/to/bup-repo-on-machine-a
+
+*Q1*: Why does git-annex create bup repos on the local folder while initializaing a remote bup repo?
+
+After that, I tried to get the file from the git repo using
+
+ git annex get <file> --from mybup
+
+..And nothing happened. This is the debug output from the last command :
+
+ read: git ["--git-dir=/private/tmp/annexed-setups/.git","--work-tree=/private/tmp/annexed-setups","show-ref","git-annex"]
+ read: git ["--git-dir=/private/tmp/annexed-setups/.git","--work-tree=/private/tmp/annexed-setups","show-ref","--hash","refs/heads/git-annex"]
+ read: git ["--git-dir=/private/tmp/annexed-setups/.git","--work-tree=/private/tmp/annexed-setups","log","refs/heads/git- annex..c9af31cb3e563657e83b8b8e1f9a8de1ff690e4f","-n1","--pretty=%H"]
+ read: git ["--git-dir=/private/tmp/annexed-setups/.git","--work-tree=/private/tmp/annexed-setups","log","refs/heads/git-annex..b7b2af7f94af4770d5b4da7231bc3e41c0a6129d","-n1","--pretty=%H"]
+ read: git ["--git-dir=/private/tmp/annexed-setups/.git","--work-tree=/private/tmp/annexed-setups","log","refs/heads/git-annex..7b1017c5e68ec5a2b298b899bf723d0093fa0c7c","-n1","--pretty=%H"]
+ chat: git ["--git-dir=/private/tmp/annexed-setups/.git","--work-tree=/private/tmp/annexed-setups","cat-file","--batch"]
+ read: git ["--git-dir=/private/tmp/annexed-setups/.git","--work-tree=/private/tmp/annexed-setups","ls-files","--cached","-z","--","file.iso"]
+
+The file was not obtained from the remote. However, when I did
+
+ git annex fsck --from mybup
+
+This resolved all the files properly and then when I did a
+
+ git annex list.
+
+it showed all files to be reachable from the mybup repo.
+
+*Q2* Is this the correct workflow?
+*Q3* Do I need to do a [costly] fsck for bup remote to properly work over ssh?
+
diff --git a/doc/forum/adding_remote_bup_repo_using_ssh/comment_1_d1ab38bccc415a94fa3906f7f5e823f3._comment b/doc/forum/adding_remote_bup_repo_using_ssh/comment_1_d1ab38bccc415a94fa3906f7f5e823f3._comment
new file mode 100644
index 000000000..bd9d01459
--- /dev/null
+++ b/doc/forum/adding_remote_bup_repo_using_ssh/comment_1_d1ab38bccc415a94fa3906f7f5e823f3._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-01-20T16:05:31Z"
+ content="""
+IIRC bup always initializes ~/.bup, even when using a remote repository.
+
+Your mistake is that you have run `git annex initremote` twice -- so now
+git-annex knows about two different remotes, which both happen to be backed
+by the same bup repository -- but git-annex doesn't know that.
+
+Instead, you should run `git annex initremote` in one repository, and then
+use `git annex enableremote` in clones of that repository to enable your
+bup remote.
+
+You will probably want to kill off the redundant bup remote with `git annex
+dead mybup` and then using `git annex enableremote` to enable the other one.
+"""]]
diff --git a/doc/forum/adding_remote_bup_repo_using_ssh/comment_2_6698ecb746e6edb25130c8dbceb36fc0._comment b/doc/forum/adding_remote_bup_repo_using_ssh/comment_2_6698ecb746e6edb25130c8dbceb36fc0._comment
new file mode 100644
index 000000000..233ee8809
--- /dev/null
+++ b/doc/forum/adding_remote_bup_repo_using_ssh/comment_2_6698ecb746e6edb25130c8dbceb36fc0._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2015-01-20T16:44:21Z"
+ content="""
+I've added a new section to the walkthrough about this:
+<http://git-annex.branchable.com/walkthrough/using_special_remotes/>
+"""]]
diff --git a/doc/forum/annex_merge_creates___34__synced__47____42____34___branches.mdwn b/doc/forum/annex_merge_creates___34__synced__47____42____34___branches.mdwn
new file mode 100644
index 000000000..b4f02bc56
--- /dev/null
+++ b/doc/forum/annex_merge_creates___34__synced__47____42____34___branches.mdwn
@@ -0,0 +1,7 @@
+Hi,
+
+when I fetch from a central repository and `git annex merge` a synced/master branch is created. How can I disable this behaviour?
+
+Or is there a better workflow for getting and pushing updates from/to a central git repo?
+
+bye
diff --git a/doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_1_4667fadb05c594b0a212bf455ee65298._comment b/doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_1_4667fadb05c594b0a212bf455ee65298._comment
new file mode 100644
index 000000000..90643ca9b
--- /dev/null
+++ b/doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_1_4667fadb05c594b0a212bf455ee65298._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.22"
+ subject="comment 1"
+ date="2014-09-16T18:22:11Z"
+ content="""
+Why is this a problem? You can delete the branch at any time of course if it's in the way.
+
+It would be possible for `git-annex sync` to avoid creating the synced/master branch at all when syncing with a bare git repository, but this would actually make it less efficient and slower. Where currently it makes one push, updating the remote's master branch when possible, and forcing an update of its synced/master branch at the same time, it would instead need to first try to update remote's master, then check if that succeeded and if not force the update of synced/master. Also, it's not clear how to check if the push to master succeeded, since something else might update it further in a race.
+
+I suppose that `git annex sync/merge` could delete the local synced/* branches once it was done merging them. This wouldn't prevent `git pull` from pulling down those branches, though.
+"""]]
diff --git a/doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_2_cb6971a766a28bd8c094d0b986272c65._comment b/doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_2_cb6971a766a28bd8c094d0b986272c65._comment
new file mode 100644
index 000000000..5db94a7a0
--- /dev/null
+++ b/doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_2_cb6971a766a28bd8c094d0b986272c65._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlog_5wIICaMcrKTexlFNA6IO6UTp323aE"
+ nickname="Torkaly"
+ subject="comment 2"
+ date="2014-09-17T08:47:03Z"
+ content="""
+Thank you for the answer.
+
+There are no origin/synced/* branches, only a origin/git-annex and the local git-annex branch. What i need git annex merge to do, is to merge the fetched remote git-annex with the local git-annex. There is no need for creating or merging the synced-branches as there are no.
+
+"""]]
diff --git a/doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_3_1a0384edd20cc379e53fe7d7f650f7e2._comment b/doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_3_1a0384edd20cc379e53fe7d7f650f7e2._comment
new file mode 100644
index 000000000..cb80c07f9
--- /dev/null
+++ b/doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_3_1a0384edd20cc379e53fe7d7f650f7e2._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 3"
+ date="2014-09-18T17:39:19Z"
+ content="""
+`git annex merge` does not create any synced/* branches. These branches will be pulled down by `git pull` or `git annex sync`.
+"""]]
diff --git a/doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_4_79219e920a6beb4bd3265571f59f51cb._comment b/doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_4_79219e920a6beb4bd3265571f59f51cb._comment
new file mode 100644
index 000000000..8e0764948
--- /dev/null
+++ b/doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_4_79219e920a6beb4bd3265571f59f51cb._comment
@@ -0,0 +1,36 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlog_5wIICaMcrKTexlFNA6IO6UTp323aE"
+ nickname="Torkaly"
+ subject="comment 4"
+ date="2014-09-19T18:22:36Z"
+ content="""
+delete the *synced/master* branch:
+```
+$ git branch -d synced/master
+Branch synced/master entfernt (war 20ec8b3).
+```
+
+then call *annex merge*:
+```
+$ git annex merge
+merge git-annex ok
+```
+
+check branches:
+```
+$ git branch -a
+ git-annex
+* master
+ synced/master
+ remotes/origin/git-annex
+ remotes/origin/master
+```
+and there is the *synced/master* branch again.
+
+But that's not my problem. My problem was: how to use annex with a central repository.
+I done that by deleting all remote synced/* branches. And now I'm updating the git-annex branch by `git fetch`ing and
+`git annex merge`ing again.
+
+PS: the MD for code blocks is broken
+
+"""]]
diff --git a/doc/forum/armhf_binary.mdwn b/doc/forum/armhf_binary.mdwn
new file mode 100644
index 000000000..442fb121d
--- /dev/null
+++ b/doc/forum/armhf_binary.mdwn
@@ -0,0 +1,3 @@
+Does a armhf binary tarball exist anywhere? I'm running Ubuntu trusty on a armhf platform (beagleboard), and the repository package is out of date. I might try to get the standalone armel binary working using multiarch, but that seems only slightly less painful than compiling from scratch.
+
+Or am I better off changing to a debian boot image, and be done with it?
diff --git a/doc/forum/armhf_binary/comment_1_9ca7ff6cb1f5dfc1e5ce8527e7e0a45f._comment b/doc/forum/armhf_binary/comment_1_9ca7ff6cb1f5dfc1e5ce8527e7e0a45f._comment
new file mode 100644
index 000000000..9a1e3a4af
--- /dev/null
+++ b/doc/forum/armhf_binary/comment_1_9ca7ff6cb1f5dfc1e5ce8527e7e0a45f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 1"
+ date="2014-08-15T15:58:02Z"
+ content="""
+The standalone armel build should work fine on armhf, assuming that the kernel supports EABI, which I'm pretty sure it does (or multiarch armel would not work).
+"""]]
diff --git a/doc/forum/armhf_binary/comment_2_743ecf263d1ec1bc4f24e32c0a178f2b._comment b/doc/forum/armhf_binary/comment_2_743ecf263d1ec1bc4f24e32c0a178f2b._comment
new file mode 100644
index 000000000..864d5f23c
--- /dev/null
+++ b/doc/forum/armhf_binary/comment_2_743ecf263d1ec1bc4f24e32c0a178f2b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="justinl"
+ ip="184.17.213.135"
+ subject="works"
+ date="2014-09-10T17:59:48Z"
+ content="""
+Yep, the standalone armel build worked perfectly. Thanks!
+"""]]
diff --git a/doc/forum/assistant_created_encrypted__backup_remote:_Howto_restore__63__/comment_3_1ecea12a4be5ad09013cddb62df6ab20._comment b/doc/forum/assistant_created_encrypted__backup_remote:_Howto_restore__63__/comment_3_1ecea12a4be5ad09013cddb62df6ab20._comment
new file mode 100644
index 000000000..aaf373589
--- /dev/null
+++ b/doc/forum/assistant_created_encrypted__backup_remote:_Howto_restore__63__/comment_3_1ecea12a4be5ad09013cddb62df6ab20._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://me.yahoo.com/a/W6vhceUml87q0GB9MGH1qEeteW8-#ee26a"
+ nickname="Leandro"
+ subject="comment 3"
+ date="2014-05-17T17:39:04Z"
+ content="""
+So, just to clarify things a little bit: Suppose that you have a remote at box.com (shared encrypted), then the CEO at box.com would eventually be able to decrypt your files easily since the keys are store in the git repository without encryption. Is that right?
+"""]]
diff --git a/doc/forum/assistant_created_encrypted__backup_remote:_Howto_restore__63__/comment_4_af4bc222d1479482bd83952353c97f05._comment b/doc/forum/assistant_created_encrypted__backup_remote:_Howto_restore__63__/comment_4_af4bc222d1479482bd83952353c97f05._comment
new file mode 100644
index 000000000..7b7b86c30
--- /dev/null
+++ b/doc/forum/assistant_created_encrypted__backup_remote:_Howto_restore__63__/comment_4_af4bc222d1479482bd83952353c97f05._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="216.145.95.162"
+ subject="comment 4"
+ date="2014-05-19T15:38:14Z"
+ content="""
+No, box.com cannot decrypt your files, because the git repository is not stored on box.com.
+"""]]
diff --git a/doc/forum/assistant_created_encrypted__backup_remote:_Howto_restore__63__/comment_5_c1d247fa128c0a0fc899284f5f95002c._comment b/doc/forum/assistant_created_encrypted__backup_remote:_Howto_restore__63__/comment_5_c1d247fa128c0a0fc899284f5f95002c._comment
new file mode 100644
index 000000000..474bd6673
--- /dev/null
+++ b/doc/forum/assistant_created_encrypted__backup_remote:_Howto_restore__63__/comment_5_c1d247fa128c0a0fc899284f5f95002c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmK0703vNSIQsP1mGf-4MAPnsBZiSc6yVo"
+ nickname="Emre"
+ subject="Understanding"
+ date="2014-09-19T21:24:19Z"
+ content="""
+If box does not have the encryption keys in this \"shared encryption\" scenario and if you had only your computer and this remote repo, does that mean losing your computer (ie your git repository) would mean also losing access to those encrypted content? So, actually an encrypted remote, even if marked as full backup, is not actually a backup unless you have a 3rd computer that has the same git repo, in the case of losing your original computer or accidentally wiping it...
+"""]]
diff --git a/doc/forum/assistant_created_encrypted__backup_remote:_Howto_restore__63__/comment_6_cf877a3502802492cd2bc3012cb2d779._comment b/doc/forum/assistant_created_encrypted__backup_remote:_Howto_restore__63__/comment_6_cf877a3502802492cd2bc3012cb2d779._comment
new file mode 100644
index 000000000..3765a67cc
--- /dev/null
+++ b/doc/forum/assistant_created_encrypted__backup_remote:_Howto_restore__63__/comment_6_cf877a3502802492cd2bc3012cb2d779._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.144"
+ subject="comment 6"
+ date="2014-09-25T15:59:34Z"
+ content="""
+Right.
+
+So, I think I should go change the description displayed by the webapp to \"full backup (file contents only)\" and \"full backup (entire git repository)\" or so. It's a little hard to word it precisely without making it hard to understand.
+
+Or, the webapp could display a nudge to make a clone when no other clones of the git repository exist. I think that's probably more valuable, so [[todo_added|todo/webapp_nudge_when_less_than_numcopies_clones]].
+"""]]
diff --git a/doc/forum/best_practices_for_importing_photos__63__.mdwn b/doc/forum/best_practices_for_importing_photos__63__.mdwn
new file mode 100644
index 000000000..2f57f3b35
--- /dev/null
+++ b/doc/forum/best_practices_for_importing_photos__63__.mdwn
@@ -0,0 +1,13 @@
+What are everyone's tips for importing photos to make best use of metadata and views?
+
+Let's assume there's no need to be compatible with a photo manager app, but we may be importing lots of duplicates, and while content deduplication is great, I'd like to avoid naming problems too.
+
+Do you bother to rename your photos?
+
+Do you use EXIF metadata as git-annex metadata? Selectively or wholesale, with all the redundant tags in EXIF?
+
+If you do use a photo manager app, do you need to do anything special to make that work?
+
+Thanks for your responses everyone!
+
+-mike
diff --git a/doc/forum/best_practices_for_importing_photos__63__/comment_1_37f0ae4b552ec2a4a144ddcdc17c8453._comment b/doc/forum/best_practices_for_importing_photos__63__/comment_1_37f0ae4b552ec2a4a144ddcdc17c8453._comment
new file mode 100644
index 000000000..3d17874ad
--- /dev/null
+++ b/doc/forum/best_practices_for_importing_photos__63__/comment_1_37f0ae4b552ec2a4a144ddcdc17c8453._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="Xyem"
+ ip="178.79.137.64"
+ subject="comment 1"
+ date="2014-04-15T14:25:04Z"
+ content="""
+git-annex's metadata and views made me stop hopping between programs (digikam, tagsistant etc.) to organise my photos (I had even just started working on my own FUSE tagging filesystem which was effectively going to be tagsistant, but with a git-annex'y backend).
+
+As usual, my method is probably a little odd :)
+
+Photos are 'git import'ed into a $(uuidgen) directory (so no worries about filename collisions) and tagged with media=Photograph and tag=untagged. Then I go through them and add relevant tags (one of which is \"xbmc\", no prizes for guessing how that works with the views :]) and move them into a more appropriate directory structure, using gqview and its \"sort manager\". This is really nice and fast, due to it only copying/moving symlinks!
+
+One thing I'm considering doing it putting a shim between git-annex and gqview, so that it generates entries in the sort manager which are appropriate for the current view. So, for example, if the view is location=*, the sort manager would have:
+
+ location=Malta
+ location=York
+
+While it wouldn't get updated if I create new tags (by creating directories in the view), it would save a lot of time creating them every time the view changes.
+"""]]
diff --git a/doc/forum/best_practices_for_importing_photos__63__/comment_2_7f96f0fe0fc073321bd7c5bbd9048425._comment b/doc/forum/best_practices_for_importing_photos__63__/comment_2_7f96f0fe0fc073321bd7c5bbd9048425._comment
new file mode 100644
index 000000000..349ee432a
--- /dev/null
+++ b/doc/forum/best_practices_for_importing_photos__63__/comment_2_7f96f0fe0fc073321bd7c5bbd9048425._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 2"
+ date="2014-04-17T20:11:59Z"
+ content="""
+It seems to me that there is a lot of cruft in EXIF that I would not want to bloat my git-annex branch with storing. That's why [[tips/automatically_adding_metadata]] imports only the listed fields. It's easy to add fields later and re-run the metadata importer on your existing files.
+
+I have not gotten as far as having any best practices to share. :)
+
+"""]]
diff --git a/doc/forum/big_overhead.mdwn b/doc/forum/big_overhead.mdwn
new file mode 100644
index 000000000..f16b95942
--- /dev/null
+++ b/doc/forum/big_overhead.mdwn
@@ -0,0 +1,46 @@
+[[!meta title="unreachable git objects"]]
+
+Hi,
+
+I am been seeing quite big overheads using `git-annex`. Is this is normal?
+
+The `.git/objects` folder is explosive in my system, often being larger
+than the content watched by git-annex. Here's the actual statistics
+of my git-annex folders, where the fourth column is calculated as col3/(col2-col3).
+
+[[!table data="""
+folder,size,size .git,relative size
+conf.annex,777536,720100,12.537433
+doc.annex,20351624,11260204,1.2385528
+images.annex,817064,435580,1.1418041
+misc.annex,803328,572476,2.4798399
+music.annex,23756116,9192740,0.63122314"""]]
+
+That is, four of five repos require more space for the `.git` folder than the actual files. Most of this comes from the `objects` folder.
+
+Number of files:
+
+[[!table data="""
+folder,no. files,no files .git,relative size
+conf.annex,11350,9539,5.2672557
+doc.annex,84954,66824,3.6858246
+images.annex,92787,91285,60.775632
+misc.annex,95461,95160,316.14618
+music.annex,16414,13520,4.6717346
+"""]]
+
+
+I use the assistant web interface, and direct
+mode. I use two laptops running Linux that are synchronized
+directly over LAN at home or via a transfer repo on a ssh server
+where git-annex is installed. The latter is set up using the web interface and the gcrypt repo.
+[Mostly, the transfer repo isn't working
+and I often end up with only symlinks on the computer where I did not edit the file in question,
+but this is probably unrelated.]
+
+I have previously tried to fix it using `git gc` or `git annex forget`, but it doesn't seem to significantly reduce the sizes, and what it helps isn't persistent.
+
+Is this kind of 'overhead' something that one must accept when using
+`git-annex` or do such numbers indicate that something is wrong?
+
+Thanks.
diff --git a/doc/forum/big_overhead/comment_10_d5f4e353e7f711d8c38cdcc222339bca._comment b/doc/forum/big_overhead/comment_10_d5f4e353e7f711d8c38cdcc222339bca._comment
new file mode 100644
index 000000000..2ebd56d30
--- /dev/null
+++ b/doc/forum/big_overhead/comment_10_d5f4e353e7f711d8c38cdcc222339bca._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 10"
+ date="2014-09-18T17:27:36Z"
+ content="""
+In the meantime, I've been looking over the Annex.Branch code.
+
+`stageJournal` is only ever called in code paths that commit the updated index, so those code paths cannot result in dangling objects unless git-annex is interrupted before it can commit. (This may explain some of my own repos having a few dangling refs, that were not commits; I could have ctrl-c'd git-annex.)
+
+It's possible for a forced update of the local git-annex branch, done by eg a push from another repo, to overwrite a commit made to it. In this case, the git-annex index is merged with the branch, resulting in a new commit, and the old commit that was overwritten will indeed be dangling. However, `git annex sync` doesn't overwrite the git-annex branch; it pushes to synced/git-annex, or does a `taggedPush` to a private ref. It is the case that both those pushes are forced pushes, so can overwrite a branch ref and leave the old commit it pointed to dangling. In the case of `taggedPush`, the old commit should be a parent of the new, so it won't dangle. In the case of synced/git-annex being overwritten, the old commit could dangle, but only until whatever repo pushed it syncs again, at which time it should get incorporated as one of the parents of the new synced/git-annex it pushes. So, I don't see how long-term dangling commits could happen this way, except for in the case where a repository stops syncing/goes missing/rebases its git-annex branch (ie, git-annex forget is used). (This may explain the 2 dangling commits I found on elephant; we did delete some clones of that repository recently.)
+
+At this point I'm not convinced that the dangling objects I found in my own repos are due to some systematic problem, the above seems like it could explain them, and the above is not a problem on the class of the one Rasmus is having. Of course, it's hard to be sure you've spotted all possible ways that a resource leak can happen, and that's what these dangling objects basically are.
+"""]]
diff --git a/doc/forum/big_overhead/comment_11_cbf25217e4149f2cfad4e2bf94f2b4ca._comment b/doc/forum/big_overhead/comment_11_cbf25217e4149f2cfad4e2bf94f2b4ca._comment
new file mode 100644
index 000000000..e2a74068d
--- /dev/null
+++ b/doc/forum/big_overhead/comment_11_cbf25217e4149f2cfad4e2bf94f2b4ca._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 11"
+ date="2014-09-18T17:32:09Z"
+ content="""
+I knew I *had* used \"Initial commit\" somewhere ... etckeeper uses that message. And commits as root. Could an etckeeper repo have somehow gotten merged into your git-annex repo? Seems strange, and the filenames and contents don't really look like /etc to me, but it otherwise somewhat fits.
+"""]]
diff --git a/doc/forum/big_overhead/comment_12_475d5af95adcfcd3a51e10f270205eb7._comment b/doc/forum/big_overhead/comment_12_475d5af95adcfcd3a51e10f270205eb7._comment
new file mode 100644
index 000000000..53e15b764
--- /dev/null
+++ b/doc/forum/big_overhead/comment_12_475d5af95adcfcd3a51e10f270205eb7._comment
@@ -0,0 +1,71 @@
+[[!comment format=mdwn
+ username="rasmus"
+ ip="146.185.23.178"
+ subject="comment 12"
+ date="2014-09-19T00:43:56Z"
+ content="""
+Hi Joey,
+
+Thanks for giving the thread a more appropriate title and thanks for the helpful messages.
+
+Let me start with the easy points:
+
+
+* Looking at my log file of installed packages I have never used `etckeeper` on my system. So unless it could have entered through `annex` then I think we can rule that one out.
+* According to `git log` the repos are from January 2014 where I restarted my repos.
+
+
+ commit 029a8e76ab5f66aa4390987130985550a1ccd69c
+ Author: Rasmus <w530@domain.eu>
+ Date: Thu Jan 23 21:06:13 2014 +0100
+
+ created repository
+
+
+* When I start git repos I typically just use \"init\" so I don't think I did the 2012 commits.
+* I checked out one of the 74mb files. When I do `file test.blob` it shows `test.blob: GPG symmetrically encrypted data (CAST5 cipher)`. But none of my normal passwords worked. Could such a gpg'ed file be from local network connections where the assistant asks for a passphrase? I'm pretty sure that my transfer repo has only been using `gcrypt` and I believe I \"restarted\" my repos because I switched to `gcrypt` repos. Also, my transfer repo is 10Gb as well which sounds big for transfer repo.
+
+I performed a similar \"analysis\" on the `conf.annex` repo which should contain mostly no binary files (some 16x16 pngs etc).
+
+`conf.annex` has 727 unreachable objects and 3477 commits in total. Of these 338 are commits. Here's an example of a larger commit message of an unreachable commit.
+
+ commit 601c10f9512e8d3502d9dd52ef409560ebb5b7e0
+ Author: root <root@localhost>
+ Date: Mon Dec 31 19:00:01 2012 -0400
+
+ Initial commit
+
+ diff --git a/6fbbea493cdec9d912d256374199cc4c012022d35524c8789a7aceeb953442a5 b/6fbbea493cdec9d912d256374199cc4c012022d35524c8789a7aceeb953442a5
+ new file mode 100644
+ index 0000000..ea5fcc3
+ Binary files /dev/null and b/6fbbea493cdec9d912d256374199cc4c012022d35524c8789a7aceeb953442a5 differ
+ diff --git a/91bd0c092128cf2e60e1a608c31e92caf1f9c1595f83f2890ef17c0e4881aa0a b/91bd0c092128cf2e60e1a608c31e92caf1f9c1595f83f2890ef17c0e4881aa0a
+ new file mode 100644
+ index 0000000..a86c1a9
+ Binary files /dev/null and b/91bd0c092128cf2e60e1a608c31e92caf1f9c1595f83f2890ef17c0e4881aa0a differ
+ diff --git a/9da3fcfc1635c674012c35d90c21adce3c35440e629d64fe117fe349a6b3e194 b/9da3fcfc1635c674012c35d90c21adce3c35440e629d64fe117fe349a6b3e194
+ new file mode 100644
+ index 0000000..ef1d71c
+ Binary files /dev/null and b/9da3fcfc1635c674012c35d90c21adce3c35440e629d64fe117fe349a6b3e194 differ
+ diff --git a/ad4ae79c29b3756f7e41257db7454f3c319112d06385a8bc12d28209a82f2594 b/ad4ae79c29b3756f7e41257db7454f3c319112d06385a8bc12d28209a82f2594
+ new file mode 100644
+ index 0000000..61d3e5b
+ Binary files /dev/null and b/ad4ae79c29b3756f7e41257db7454f3c319112d06385a8bc12d28209a82f2594 differ
+ diff --git a/bd0e9cb492077e0c090bc62892c8de438c51a956c8215b2c68de7caa7e2431cc b/bd0e9cb492077e0c090bc62892c8de438c51a956c8215b2c68de7caa7e2431cc
+ new file mode 100644
+ index 0000000..92e9bd7
+ Binary files /dev/null and b/bd0e9cb492077e0c090bc62892c8de438c51a956c8215b2c68de7caa7e2431cc differ
+
+Across all commits 6006 objects are mentioned, but only 371 are unique.
+
+I checked out one blob and again `file` reports `GPG symmetrically encrypted data (CAST5 cipher)`. Interesting for `conf.annex` I get this line when trying to decrypt
+
+ gpg: DBG: cleared passphrase cached with ID: SBF83A0F822D0F664
+
+
+For `doc.annex` I get
+
+ gpg: DBG: cleared passphrase cached with ID: S32DEAD1E8DD06A4D
+
+And on my other computer I see a third ID. I'm not sure if this means anything when files are symmetrically encrypted, though.
+"""]]
diff --git a/doc/forum/big_overhead/comment_13_1c8cc992f04fc63179094c494bd25025._comment b/doc/forum/big_overhead/comment_13_1c8cc992f04fc63179094c494bd25025._comment
new file mode 100644
index 000000000..229ef256a
--- /dev/null
+++ b/doc/forum/big_overhead/comment_13_1c8cc992f04fc63179094c494bd25025._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="I know what it is now"
+ date="2014-09-19T02:43:22Z"
+ content="""
+These objects are the ones written by git-remote-gcrypt when pushing to a remote. That's why the weird dates, root pseudo-commit, crazy filenames, and big gpg encrypted blobs. All countermeasures that git-remote-gcrypt uses to keep your encrypted git remote safe and not leak information about what's in it.
+
+So, this is a bug in git-remote-gcrypt. It needs to clean these objects up after pushing them! (Also after failed pushes.)
+"""]]
diff --git a/doc/forum/big_overhead/comment_14_cbfb3d557915258e72c65a4e84df77a9._comment b/doc/forum/big_overhead/comment_14_cbfb3d557915258e72c65a4e84df77a9._comment
new file mode 100644
index 000000000..87632c909
--- /dev/null
+++ b/doc/forum/big_overhead/comment_14_cbfb3d557915258e72c65a4e84df77a9._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 14"
+ date="2014-09-19T02:59:36Z"
+ content="""
+<https://github.com/bluss/git-remote-gcrypt/issues/16>
+"""]]
diff --git a/doc/forum/big_overhead/comment_15_b973529bae549bcbaaae792f0403989b._comment b/doc/forum/big_overhead/comment_15_b973529bae549bcbaaae792f0403989b._comment
new file mode 100644
index 000000000..a875cc34e
--- /dev/null
+++ b/doc/forum/big_overhead/comment_15_b973529bae549bcbaaae792f0403989b._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="rasmus"
+ ip="217.130.110.20"
+ subject="comment 15"
+ date="2014-09-19T06:29:58Z"
+ content="""
+Brilliant! Thanks for taking time to analyze the issue and taking the bug to `gcrypt`.
+
+[I'm surprised that a different key than my git-annex key is used and that it's a symmetric key, but I will explore the technology on my own].
+"""]]
diff --git a/doc/forum/big_overhead/comment_1_0c184520c30a89bd2604ab7c0eb7ac45._comment b/doc/forum/big_overhead/comment_1_0c184520c30a89bd2604ab7c0eb7ac45._comment
new file mode 100644
index 000000000..20c2ff6c0
--- /dev/null
+++ b/doc/forum/big_overhead/comment_1_0c184520c30a89bd2604ab7c0eb7ac45._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm8wY171R5c4u_jPmB6LU6n6Px2xePM4sE"
+ nickname="Efraim"
+ subject="comment 1"
+ date="2014-09-07T14:09:05Z"
+ content="""
+have you tried from the command line `git annex unused` to see if you have unused files in your repo? From the assistant, the option under configuration -> Unused files gives you an option to expire old files after a period of time so they get deleted from your repo.
+"""]]
diff --git a/doc/forum/big_overhead/comment_2_13a017c6c84511894ded2d89d86eb541._comment b/doc/forum/big_overhead/comment_2_13a017c6c84511894ded2d89d86eb541._comment
new file mode 100644
index 000000000..25d010fe1
--- /dev/null
+++ b/doc/forum/big_overhead/comment_2_13a017c6c84511894ded2d89d86eb541._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="rasmus"
+ ip="109.201.154.150"
+ subject="comment 2"
+ date="2014-09-07T15:17:25Z"
+ content="""
+Thanks for help, Efraim.
+
+I'm not sure this is it. On my other laptop, where the above statics were not calculated the `.git` folder of `doc.annex` is 26Gb (contents is 8.6Gb). Meanwhile, unused files are 0.6Gb. In `conf.annex` the `.git` folder is 3.2Gb, content is 70Mb and unused files is 2.2Mb. I used the web interface to find the size of unused files.
+"""]]
diff --git a/doc/forum/big_overhead/comment_3_b4761cacc02396b5bdf34bcf3457cb91._comment b/doc/forum/big_overhead/comment_3_b4761cacc02396b5bdf34bcf3457cb91._comment
new file mode 100644
index 000000000..f090e5b25
--- /dev/null
+++ b/doc/forum/big_overhead/comment_3_b4761cacc02396b5bdf34bcf3457cb91._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://id.clacke.se/"
+ nickname="Claes"
+ subject="repack parameters"
+ date="2014-09-07T21:53:10Z"
+ content="""
+Because git-annex tracks all the events of an annexed file for each repo -- added, dropped, copied etc -- and it tracks these in one object per file in the git-annex branch, it does indeed create a lot of objects. To improve both space and performance I made sure to add `git gc --auto` as a post-commit hook, as the objects in my case can quickly reach the tens or even hundreds of thousands.
+
+To further improve performance and space, you can choose to set `pack.window` and `pack.depth` to vastly higher values than the defaults (10 and 50, respectively), because there is a large amount of objects with very similar content. I did a `git repack --window 2500 --depth 1000 -f -a d` and brought down my repo from 3 GiB (packed!) to 300 MiB. Make sure to have a lot of memory and CPU available when doing this, or it will take forever. You can set `pack.window` ridiculously high if you like, as long as you limit it with `pack.windowMemory`, so that it makes use of all your available memory for comparing objects and finding the optimal delta.
+"""]]
diff --git a/doc/forum/big_overhead/comment_4_633f8538f368220eaca82b8bbfe9b49d._comment b/doc/forum/big_overhead/comment_4_633f8538f368220eaca82b8bbfe9b49d._comment
new file mode 100644
index 000000000..a0001f71e
--- /dev/null
+++ b/doc/forum/big_overhead/comment_4_633f8538f368220eaca82b8bbfe9b49d._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="rasmus"
+ ip="109.201.154.209"
+ subject="Re: repack parameters"
+ date="2014-09-08T13:20:36Z"
+ content="""
+Thanks for your tips, Claes. I was really aware of `git repack` and that set of parameters.
+
+I didn't mention, but sadly I'd run `git gc` on the repos just before collecting the above numbers.
+
+I tried to repack two repositories -- `doc.annex` and `config.annex` -- using the values you suggested. However, it did not have any measurable effect (less than 100mb in both cases).
+
+The number of unused files seem to be (much) less than 500 files in the repos.
+
+BTW: All of the extra size is in the `.git/objects/` folder. `.git/annex/` is quite small (always much less than 1GB). Would that indicate that large files are checked in with git sans annex somehow?
+"""]]
diff --git a/doc/forum/big_overhead/comment_5_599092b8d4f1fc8f378796328ef42931._comment b/doc/forum/big_overhead/comment_5_599092b8d4f1fc8f378796328ef42931._comment
new file mode 100644
index 000000000..ee91a5b2b
--- /dev/null
+++ b/doc/forum/big_overhead/comment_5_599092b8d4f1fc8f378796328ef42931._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="rasmus"
+ ip="109.201.154.183"
+ subject="comment 5"
+ date="2014-09-08T13:48:03Z"
+ content="""
+So `git prune` worked wonders on my repos, getting rid of GBs of stuff in the `.git/objects` folders. I don't know why they weren't picked up by `git gc`. In retrospect, it was perhaps a bit careless of me to run `git prune` directly, but hopefully I will be OK. . .
+"""]]
diff --git a/doc/forum/big_overhead/comment_6_adb4b4e7eb4dac7760f3425bae6cbbc2._comment b/doc/forum/big_overhead/comment_6_adb4b4e7eb4dac7760f3425bae6cbbc2._comment
new file mode 100644
index 000000000..0bc1763a3
--- /dev/null
+++ b/doc/forum/big_overhead/comment_6_adb4b4e7eb4dac7760f3425bae6cbbc2._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="rasmus"
+ ip="193.145.48.43"
+ subject="comment 6"
+ date="2014-09-10T12:07:53Z"
+ content="""
+Seems `git prune` only worked as a temporary fix. My `doc.annex/.git/objects` is 3.6Gb after two days. I don't get why `git` sans `annex` is checking in stuff -- which I assume is the reason it's stored in `.git/objects`.
+"""]]
diff --git a/doc/forum/big_overhead/comment_7_a762eb55addf81c1c5350c7968598d0f._comment b/doc/forum/big_overhead/comment_7_a762eb55addf81c1c5350c7968598d0f._comment
new file mode 100644
index 000000000..1ec6a6eef
--- /dev/null
+++ b/doc/forum/big_overhead/comment_7_a762eb55addf81c1c5350c7968598d0f._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 7"
+ date="2014-09-17T20:20:40Z"
+ content="""
+There are a few things that can cause git to leave unreachable objects. These include: Rebasing; interrupting a pull before it updates the refs; running git add on a file and then changing the file's content and adding it a second time before committing.
+
+I can think of one case where this happens when using git-annex at the command line: `git annex add $file; git mv $file other-directory; git commit` will result in a dangling object storing the old symlink target before the file was moved.
+
+It'd be useful to investigate, by using `git fsck --unreachable` to get a list of currently unreachable objects, and then use `git show` to look at the objects and try to determine where they came from. Ie, are they symlink targets or are they git-annex location log files (formatted as columns of timestamps and uuids). Any unreachable commits would be the most useful to investigate.
+
+I see a few loose objects here and there in my annexes, but not very many, and git-gc has cleaned up old ones (> 1 month old). Some of them seem to be location log files. I see those in both repositories where I use the assistant, and repositories where I use only command line git-annex. I was able to find 2 unreachable commits in a repository that runs the assistant full-time; both commits were \"merging origin/synced/git-annex into git-annex\". This suggests to me that perhaps the assistant merged the git-annex branch but that merge was overwritten by another thread that committed changes to the branch at the same time.
+
+You should also check the size of inodes on your system; a thousand small loose objects in .git/objects does not normally take up gigabytes of space; with typical inode sizes it might use up a few megabytes. With 1 mb inodes, those same thousand files would use 1 gb..
+"""]]
diff --git a/doc/forum/big_overhead/comment_8_4a66f57c6c0bdc6123618cb69a719be5._comment b/doc/forum/big_overhead/comment_8_4a66f57c6c0bdc6123618cb69a719be5._comment
new file mode 100644
index 000000000..fdbebf4e4
--- /dev/null
+++ b/doc/forum/big_overhead/comment_8_4a66f57c6c0bdc6123618cb69a719be5._comment
@@ -0,0 +1,65 @@
+[[!comment format=mdwn
+ username="rasmus"
+ ip="217.130.110.20"
+ subject="comment 8"
+ date="2014-09-18T11:28:45Z"
+ content="""
+Hi Joey,
+
+Thanks for your careful reply.
+
+Easy things first:
+
+I *never* add anything from the terminal, though I may do checks and `git annex get`, since sometimes the assistance actually grab the updated files. Until recently I started git annex automatically on boot, but at the moment it simply renders my laptop useless for too long -- presumably due to the errors investigated here.
+
+I use btrfs (don't ask me why). Searching online, I did not find a way to find the size of inodes, but I assume that it's sensible? tune2fs doesn't work but as I understand it is designed for ext*.
+
+What takes up space in my `.git/objects` is files of several Mb. So at the moment the `pack` folder is 700mb. In the next biggest folder there's three files that are 73,4mb and 8 files that are 4kb. This pattern repeats. A couple of large files (73,4 shows up quite a bit as well as 45) and many small files.
+
+I have an astonishing amount of dangling objects. In the `doc.annex` `git rev-list HEAD --count` gives 27354. In this repo I have 1108 unreachable blobs and commits, respectively 569 and 539. This probably explains why `git prune` solves my problem but I don't understand why all these large files reappears when I sync -- even after having run `git prune` on both laptops. Could they come from the `annex` on my remote server?
+
+`git show` isn't nice on blobs, but here is an example of a dangling commit
+
+
+ commit 478425bef867782e8ff22aca24316e9421288c49
+ Author: root <root@localhost>
+ Date: Mon Dec 31 19:00:01 2012 -0400
+
+ Initial commit
+
+ diff --git a/6e5039464b41f39088a4aece64ced787aa2b04ec2dd5ac6f6c6ca4b9a06a99e5 b/6e5039464b41f39088a4aece64ced787aa2b04ec2dd5ac6f6c6ca4b9a06a99e5
+ new file mode 100644
+ index 0000000..af12763
+ Binary files /dev/null and b/6e5039464b41f39088a4aece64ced787aa2b04ec2dd5ac6f6c6ca4b9a06a99e5 differ
+ diff --git a/8ae4ee273eb540fb71b78152d10010ea2dd3d1bb82afe410ecf3d811cb72bd6d b/8ae4ee273eb540fb71b78152d10010ea2dd3d1bb82afe410ecf3d811cb72bd6d
+ new file mode 100644
+ index 0000000..0a6af91
+ Binary files /dev/null and b/8ae4ee273eb540fb71b78152d10010ea2dd3d1bb82afe410ecf3d811cb72bd6d differ
+ diff --git a/91bd0c092128cf2e60e1a608c31e92caf1f9c1595f83f2890ef17c0e4881aa0a b/91bd0c092128cf2e60e1a608c31e92caf1f9c1595f83f2890ef17c0e4881aa0a
+ new file mode 100644
+ index 0000000..26d921e
+ Binary files /dev/null and b/91bd0c092128cf2e60e1a608c31e92caf1f9c1595f83f2890ef17c0e4881aa0a differ
+ diff --git a/9f7728197cfcd9792eef1ff5930a4ab580e38e64291037130f1ad0914e34a1fc b/9f7728197cfcd9792eef1ff5930a4ab580e38e64291037130f1ad0914e34a1fc
+ new file mode 100644
+ index 0000000..2a92974
+ Binary files /dev/null and b/9f7728197cfcd9792eef1ff5930a4ab580e38e64291037130f1ad0914e34a1fc differ
+ diff --git a/ac801235d97275e761efa12a76ee009472cae8549a0835d5be8bd3f6657047fb b/ac801235d97275e761efa12a76ee009472cae8549a0835d5be8bd3f6657047fb
+ new file mode 100644
+ index 0000000..543430c
+ Binary files /dev/null and b/ac801235d97275e761efa12a76ee009472cae8549a0835d5be8bd3f6657047fb differ
+ diff --git a/d400d0f616a980ea5e3ef68a1f9d670d1eeccbd27f34d1cb7ea976e1f98e2fb7 b/d400d0f616a980ea5e3ef68a1f9d670d1eeccbd27f34d1cb7ea976e1f98e2fb7
+ new file mode 100644
+ index 0000000..7b7eadd
+ Binary files /dev/null and b/d400d0f616a980ea5e3ef68a1f9d670d1eeccbd27f34d1cb7ea976e1f98e2fb7 differ
+ diff --git a/e988a26fbabe3f498e2a564096948eafb289ccadfb186423c1f63c5a3b2c19db b/e988a26fbabe3f498e2a564096948eafb289ccadfb186423c1f63c5a3b2c19db
+ new file mode 100644
+ index 0000000..3bd1dfa
+ Binary files /dev/null and b/e988a26fbabe3f498e2a564096948eafb289ccadfb186423c1f63c5a3b2c19db differ
+
+There are several things I don't understand. Why is the author root? I never run `git annex` with `sudo` or as root. I think the date is bogus. I'm pretty sure I wasn't even running `git annex` in 2012 much less working with this repo. . . What is weird is that this is the date for *all* lost commits! (Same for Author). Over all lost commits there are 2352 binary files that differ. Of these there are 284 unique hashes. . . I don't know what this means other than my repo being seriously messed up. I don't understand what I did wrong to end up in this state as I have been fairly careful in mainly using the `webapp`.
+
+I wonder if the best way to proceed is to start over, or whether this repo can be recovered.
+
+Thanks,
+Rasmus
+"""]]
diff --git a/doc/forum/big_overhead/comment_9_5fa681ea0d6bd0dcac7142d40df9d54f._comment b/doc/forum/big_overhead/comment_9_5fa681ea0d6bd0dcac7142d40df9d54f._comment
new file mode 100644
index 000000000..856f326f4
--- /dev/null
+++ b/doc/forum/big_overhead/comment_9_5fa681ea0d6bd0dcac7142d40df9d54f._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 9"
+ date="2014-09-18T16:54:10Z"
+ content="""
+That is a very strange commit by every metric. Weird author, weird date, weird filenames in it (not files that git-annex uses!), with apparently some weird binary content (which git-annex would not be committing). Even a weird commit message -- git-annex never makes a commit with a message of \"Initial commit\", and as far as I can tell using `git log -S`, it never has. (OTOH, it's a pretty common example message used in eg, git documentation.) So, I feel pretty sure that dangling commit was not made by git-annex.
+
+I think you need to take a look at some of the 4+mb unreachable blobs, to get some idea of what these files are. One way is to use git-show on the hash of one of the blobs to get its content, and then, perhaps pass it to `file` or `strings`. Or, you could stop the assistant, `git checkout 478425bef867782e8ff22aca24316e9421288c49` and have a look at this strange tree that was apparently committed in 2012 to see what's in there.
+
+It might be possible that the dangling commits come somehow from the remote server. I'm not 100% sure, but I think that a git pack can end up with dangling objects in it, and then git can pull down that pack to get other, non-dangling objects. You should use `git show` on the server on some of the dangling shas to see if they are present there.
+"""]]
diff --git a/doc/forum/canceling_wrong_repository_merge.mdwn b/doc/forum/canceling_wrong_repository_merge.mdwn
new file mode 100644
index 000000000..e2d7009c0
--- /dev/null
+++ b/doc/forum/canceling_wrong_repository_merge.mdwn
@@ -0,0 +1,3 @@
+so i mistakenly merged two unrelated repos together. i have "canceled" the merge as in reverted it by removing the created files, but then those zillion of small files will stick around the git repository forever.
+
+is there a way to use something like `git annex forget` for this? i know about things like [git rebase --onto](https://sethrobertson.github.io/GitFixUm/fixup.html#remove_deep) but that won't propagate across all repositories... can git-annex give me a hand here? --[[anarcat]]
diff --git a/doc/forum/canceling_wrong_repository_merge/comment_1_7230f2be014afcb40514ef521d53c170._comment b/doc/forum/canceling_wrong_repository_merge/comment_1_7230f2be014afcb40514ef521d53c170._comment
new file mode 100644
index 000000000..4f82b38e6
--- /dev/null
+++ b/doc/forum/canceling_wrong_repository_merge/comment_1_7230f2be014afcb40514ef521d53c170._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ subject="comment 1"
+ date="2015-02-11T15:05:32Z"
+ content="""
+it turns out that using [this procedure](https://sethrobertson.github.io/GitFixUm/fixup.html#remove_deep) worked for me. i just had to reproduce it on all remotes.
+"""]]
diff --git a/doc/forum/comprehension_question:_repository_vs._working_copy_in_direct_mode.mdwn b/doc/forum/comprehension_question:_repository_vs._working_copy_in_direct_mode.mdwn
new file mode 100644
index 000000000..350bcd7bd
--- /dev/null
+++ b/doc/forum/comprehension_question:_repository_vs._working_copy_in_direct_mode.mdwn
@@ -0,0 +1,10 @@
+(I put this in a separate topic because it is a different question)
+
+I still do not fully understand when (in direct mode!) a file is in the work copy and when in the repository.
+Because what git-annex always refers to a "repository" is actually a repository (i.e., the server part for subversion) *and* a work copy (the client part in subversion), right? (except for bare repositories which have only the former)
+
+When I change a file in the work copy, I still need to "git annex sync", right? But do I also need to "git annex sync --content" to move the changes from the work copy to the repository?
+
+Because I have a headless server where the annex should also be accessed via samba. When files are added/changed, the annex clients do not see the changes until I manually do a couple of "git annex sync" and "git annex sync --content" (it's not deterministic yet for me how often).
+
+Is this the intended behavior? If yes, is there a better way to automatically sync the changes on the headless server other than a cron job?
diff --git a/doc/forum/comprehension_question:_repository_vs._working_copy_in_direct_mode/comment_1_a6b4db0cefa439f72b97089d48dfacbd._comment b/doc/forum/comprehension_question:_repository_vs._working_copy_in_direct_mode/comment_1_a6b4db0cefa439f72b97089d48dfacbd._comment
new file mode 100644
index 000000000..327c05705
--- /dev/null
+++ b/doc/forum/comprehension_question:_repository_vs._working_copy_in_direct_mode/comment_1_a6b4db0cefa439f72b97089d48dfacbd._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-07-21T19:54:15Z"
+ content="""
+A git repository is a `.git` directory (or `git.bare` for a bare repository).
+
+A working tree is the directory that contains the `.git` directory.
+
+That is standard git terminology; git-annex does not change this at all really. The only difference is that a file added to git-annex is in both the repository and the working tree at the same time, rather than their being 2 local copies of the file (which would need twice the disk space so not good for large files).
+
+`git annex sync` commits any changes to files in the working tree, and pushes those changes to other remotes. You need to pass --content to also make git-annex upload the files to other remotes. Once a remote has been pushed to, you can run `git annex merge` in it to update its working tree to reflect the pushed changes (`git annex sync` also does that merge).
+
+To automatically sync changes to remotes, you can run the git-annex assistant.
+"""]]
diff --git a/doc/forum/could_not_read_from_remote_repository/comment_2_cf7d5e231675921c3d98faab3613c92f._comment b/doc/forum/could_not_read_from_remote_repository/comment_2_cf7d5e231675921c3d98faab3613c92f._comment
new file mode 100644
index 000000000..6775d9278
--- /dev/null
+++ b/doc/forum/could_not_read_from_remote_repository/comment_2_cf7d5e231675921c3d98faab3613c92f._comment
@@ -0,0 +1,49 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnX1msQxnLoSeu7q-i-c9BWghonsN7Qmns"
+ nickname="Jan Ulrich"
+ subject="Same error after deleting .ssh/git-annex-shell"
+ date="2014-06-11T15:53:17Z"
+ content="""
+Hi,
+
+I get the error before and after I deleted .ssh/git-annex-shell on my Ubuntu desktop:
+
+ janulrimacbook2:Movies juh$ git annex sync
+ commit ok
+ pull sokrates.local_Videos
+ bash: /home/juh/.ssh/git-annex-shell: Datei oder Verzeichnis nicht gefunden
+ fatal: Could not read from remote repository.
+
+ Please make sure you have the correct access rights
+ and the repository exists.
+ failed
+ push sokrates.local_Videos
+ bash: /home/juh/.ssh/git-annex-shell: Datei oder Verzeichnis nicht gefunden
+ fatal: Could not read from remote repository.
+
+ Please make sure you have the correct access rights
+ and the repository exists.
+
+ Pushing to sokrates.local_Videos failed.
+
+ (non-fast-forward problems can be solved by setting receive.denyNonFastforwards to false in the remote's git config)
+ failed
+ git-annex: sync: 2 failed
+
+Git-annex version on macbook:
+
+ git-annex version: 5.20140605-gc2add53
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV FsEvents XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 0 1 2 4
+
+Git-annex version on Ubuntu desktop:
+
+ git-annex version: 5.20140517
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+"""]]
diff --git a/doc/forum/differenc_in_webapp_icons__63__.mdwn b/doc/forum/differenc_in_webapp_icons__63__.mdwn
new file mode 100644
index 000000000..3b4f355a1
--- /dev/null
+++ b/doc/forum/differenc_in_webapp_icons__63__.mdwn
@@ -0,0 +1,4 @@
+Hi,
+
+I'm wondering what the difference between the network signal and network sync icons are in the web-app? Nothing stands out to me why some repos have one some the other?
+
diff --git a/doc/forum/differenc_in_webapp_icons__63__/comment_1_c38e2692b13a1b76777bf88312a03966._comment b/doc/forum/differenc_in_webapp_icons__63__/comment_1_c38e2692b13a1b76777bf88312a03966._comment
new file mode 100644
index 000000000..69777eaff
--- /dev/null
+++ b/doc/forum/differenc_in_webapp_icons__63__/comment_1_c38e2692b13a1b76777bf88312a03966._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.114"
+ subject="comment 1"
+ date="2014-04-26T23:03:46Z"
+ content="""
+The signal icon shows when there's a direct connection to another repositoriry. This leats your repository immediately learn when there is a change, triggering a sync. Without any signal icons, there's no fast syncing when changes are made, so the webapp will prompt for you to set up such a connection.
+"""]]
diff --git a/doc/forum/difference_between_full_backup_and_number_of_copies__63__.mdwn b/doc/forum/difference_between_full_backup_and_number_of_copies__63__.mdwn
new file mode 100644
index 000000000..4223a2ded
--- /dev/null
+++ b/doc/forum/difference_between_full_backup_and_number_of_copies__63__.mdwn
@@ -0,0 +1,9 @@
+If I have three repositories setup in the git annex webui as:
+
+full backup,
+
+and every file put into one of the repos seems to be propagated to the other two,
+
+what is the usage of the setting "number of copies" which is default to 1 but can be increased to 2 or 3? Does this setting matter in this context?
+
+I'm using assistant version 5.20140517.4
diff --git a/doc/forum/difference_between_full_backup_and_number_of_copies__63__/comment_1_df1850059a7a3006db7cb5c588dac3d7._comment b/doc/forum/difference_between_full_backup_and_number_of_copies__63__/comment_1_df1850059a7a3006db7cb5c588dac3d7._comment
new file mode 100644
index 000000000..e58f5402b
--- /dev/null
+++ b/doc/forum/difference_between_full_backup_and_number_of_copies__63__/comment_1_df1850059a7a3006db7cb5c588dac3d7._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm8wY171R5c4u_jPmB6LU6n6Px2xePM4sE"
+ nickname="Efraim"
+ subject="comment 1"
+ date="2014-08-31T07:09:52Z"
+ content="""
+number of copies is the minimum number of copies that can exist when you try to drop a file from a repository/without git-annex telling you that you don't have enough copies and should protect your data better. A full backup by default tries to get every file it can get its hands on, including old versions.
+"""]]
diff --git a/doc/forum/dot_git_slash_annex_slash_tmp/comment_14_92b1e8956513dbf52da31cec3f58e2c5._comment b/doc/forum/dot_git_slash_annex_slash_tmp/comment_14_92b1e8956513dbf52da31cec3f58e2c5._comment
new file mode 100644
index 000000000..b84e663cc
--- /dev/null
+++ b/doc/forum/dot_git_slash_annex_slash_tmp/comment_14_92b1e8956513dbf52da31cec3f58e2c5._comment
@@ -0,0 +1,104 @@
+[[!comment format=mdwn
+ username="http://alan.petitepomme.net/"
+ nickname="Alan Schmitt"
+ subject="comment 14"
+ date="2014-04-04T11:07:31Z"
+ content="""
+I just discovered there were 30GB in this tmp directory. Here are the file names. It seems that the file names are partial (they are missing some characters: it seems most file names are missing the last 16 characters and the file extension). As I'm in dire need of disk space, I'm going to delete this files now.
+
+ schmitta@top-wifi ~/D/a/.g/a/tmp (GIT_DIR!)> pwd
+ /Users/schmitta/Documents/annex/.git/annex/tmp
+ schmitta@top-wifi ~/D/a/.g/a/tmp (GIT_DIR!)> ls -al
+ total 73802184
+ drwxr-xr-x 91 schmitta staff 3094 16 mar 11:15 .
+ drwxr-xr-x 34 schmitta staff 1156 4 avr 12:58 ..
+ -r--r--r--@ 6 schmitta staff 132882914 8 déc 20:17 12426.
+ -r--r--r--@ 6 schmitta staff 113471066 8 déc 20:15 12426.2-
+ -r--r--r--@ 6 schmitta staff 148673586 8 déc 20:24 12427.
+ -r--r--r--@ 6 schmitta staff 96197733 8 déc 20:09 12427.2-
+ -r--r--r--@ 6 schmitta staff 132882914 8 déc 20:17 12489.
+ -r--r--r--@ 6 schmitta staff 113471066 8 déc 20:15 12489.2-
+ -r--r--r--@ 6 schmitta staff 148673586 8 déc 20:24 12490.
+ -r--r--r--@ 6 schmitta staff 96197733 8 déc 20:09 12490.2-
+ -r--r--r--@ 6 schmitta staff 132882914 8 déc 20:17 12498.
+ -r--r--r--@ 6 schmitta staff 113471066 8 déc 20:15 12498.2-
+ -r--r--r--@ 6 schmitta staff 148673586 8 déc 20:24 12499.
+ -r--r--r--@ 6 schmitta staff 96197733 8 déc 20:09 12499.2-
+ -r--r--r--@ 6 schmitta staff 132882914 8 déc 20:17 12504.
+ -r--r--r--@ 6 schmitta staff 113471066 8 déc 20:15 12504.2-
+ -r--r--r--@ 6 schmitta staff 148673586 8 déc 20:24 12505.
+ -r--r--r--@ 6 schmitta staff 96197733 8 déc 20:09 12505.2-
+ -r--r--r--@ 6 schmitta staff 132882914 8 déc 20:17 12562.
+ -r--r--r--@ 6 schmitta staff 113471066 8 déc 20:15 12562.2-
+ -r--r--r--@ 6 schmitta staff 148673586 8 déc 20:24 12563.
+ -r--r--r--@ 6 schmitta staff 96197733 8 déc 20:09 12563.2-
+ -r--r--r-- 2 schmitta staff 1237391994 21 déc 19:27 BTSM With Flowerchild Li562
+ -r--r--r-- 2 schmitta staff 1097868668 18 déc 13:24 BTSM with Flowerchild 562
+ -r--r--r-- 3 schmitta staff 181962494 1 déc 05:19 Cosmos - A Personal Voyage - Episod422
+ -r--r--r-- 3 schmitta staff 199341564 17 déc 14:28 Cosmos - A Personal Voyage - Episod423
+ -r--r--r-- 3 schmitta staff 196677905 9 jan 08:36 Cosmos - A Personal Voyage - Episod424
+ -r--r--r-- 3 schmitta staff 196671683 26 déc 19:36 Cosmos - A Personal Voyage - Episod425
+ -r--r--r-- 3 schmitta staff 199297657 19 jan 14:33 Cosmos - A Personal Voyage - Episod426
+ -r--r--r-- 3 schmitta staff 194250261 18 jan 17:10 Cosmos - A Personal Voyage - Episod427
+ -r--r--r-- 3 schmitta staff 216726281 16 jan 16:26 Cosmos - A Personal Voyage - Episod428
+ -r--r--r-- 3 schmitta staff 204634401 16 jan 12:17 Cosmos - A Personal Voyage - Episod429
+ -r--r--r-- 3 schmitta staff 179412519 11 jan 11:29 Cosmos - A Personal Voyage - Episod430
+ -r--r--r-- 3 schmitta staff 181962494 1 déc 05:19 Cosmos - A Personal Voyage - Episod572
+ -r--r--r-- 3 schmitta staff 199341564 17 déc 14:28 Cosmos - A Personal Voyage - Episod573
+ -r--r--r-- 3 schmitta staff 196677905 9 jan 08:36 Cosmos - A Personal Voyage - Episod574
+ -r--r--r-- 3 schmitta staff 196671683 26 déc 19:36 Cosmos - A Personal Voyage - Episod575
+ -r--r--r-- 3 schmitta staff 199297657 19 jan 14:33 Cosmos - A Personal Voyage - Episod576
+ -r--r--r-- 3 schmitta staff 194250261 18 jan 17:10 Cosmos - A Personal Voyage - Episod577
+ -r--r--r-- 3 schmitta staff 216726281 16 jan 16:26 Cosmos - A Personal Voyage - Episod578
+ -r--r--r-- 3 schmitta staff 204634401 16 jan 12:17 Cosmos - A Personal Voyage - Episod579
+ -r--r--r-- 3 schmitta staff 179412519 11 jan 11:29 Cosmos - A Personal Voyage - Episod580
+ -r--r--r-- 3 schmitta staff 237284500 15 mai 2012 Cosmos - A Personal Voyage - Episode422
+ -r--r--r-- 3 schmitta staff 207386296 28 jan 18:39 Cosmos - A Personal Voyage - Episode423
+ -r--r--r-- 3 schmitta staff 194659898 28 jan 20:35 Cosmos - A Personal Voyage - Episode424
+ -r--r--r-- 3 schmitta staff 221944244 11 jan 07:18 Cosmos - A Personal Voyage - Episode425
+ -r--r--r-- 3 schmitta staff 237284500 15 mai 2012 Cosmos - A Personal Voyage - Episode572
+ -r--r--r-- 3 schmitta staff 207386296 28 jan 18:39 Cosmos - A Personal Voyage - Episode573
+ -r--r--r-- 3 schmitta staff 194659898 28 jan 20:35 Cosmos - A Personal Voyage - Episode574
+ -r--r--r-- 3 schmitta staff 221944244 11 jan 07:18 Cosmos - A Personal Voyage - Episode575
+ -r--r--r-- 1 schmitta staff 166417358 25 nov 08:47 Icy Plays - Kerbal Space Program - Better Than Starting Mann456
+ -r--r--r-- 2 schmitta staff 1110410229 28 déc 00:40 Kerbal Space Program - BTSM With Flowerchild Li562
+ -r--r--r-- 1 schmitta staff 898936971 26 déc 06:22 Let's Play Minecraft Better Than Wolves Ep 10 _ HARDCORE _ Ooooh le petit mat572
+ -r--r--r-- 1 schmitta staff 816306596 27 déc 05:08 Let's Play Minecraft Better Than Wolves Ep 11 _ HARDCORE _ Un peu de cannabis pour le moral 572
+ -r--r--r-- 1 schmitta staff 897143936 27 déc 10:42 Let's Play Minecraft Better Than Wolves Ep 12 _ HARDCORE _ Chaud l'enf572
+ -r--r--r-- 1 schmitta staff 922364739 29 déc 08:30 Let's Play Minecraft Better Than Wolves Ep 13 _ HARDCORE _ Walking dea572
+ -r--r--r-- 1 schmitta staff 1321555505 1 jan 02:15 Let's Play Minecraft Better Than Wolves Ep 14 l HARDCORE l Couvre572
+ -r--r--r-- 1 schmitta staff 889592223 5 jan 02:07 Let's Play Minecraft Better Than Wolves Ep 15 l HARDCORE l Pa572
+ -r--r--r-- 1 schmitta staff 153571799 6 jan 03:56 Let's Play Minecraft Better Than Wolves Ep 16 l HARDCORE l Point de s572
+ -r--r--r-- 1 schmitta staff 1036932250 9 jan 07:36 Let's Play Minecraft Better Than Wolves Ep 17 l HARDCORE l Satané meuh572
+ -r--r--r-- 1 schmitta staff 1289798767 11 jan 22:08 Let's Play Minecraft Better Than Wolves Ep 18 l HARDCORE l Un Moulin572
+ -r--r--r-- 1 schmitta staff 1582120875 19 jan 15:39 Let's Play Minecraft Better Than Wolves Ep 19 l HARDCORE l Explosion de ca572
+ -r--r--r-- 1 schmitta staff 728469432 13 fév 07:02 Let's Play Minecraft Better Than Wolves Ep 2 _ HARDCORE _ Préparation pour l'explorat422
+ -r--r--r-- 1 schmitta staff 911653518 22 jan 13:35 Let's Play Minecraft Better Than Wolves Ep 20 l HARDCORE l Minesha572
+ -r--r--r-- 1 schmitta staff 1377428597 28 jan 08:43 Let's Play Minecraft Better Than Wolves Ep 21 l HARDCORE l Terreur en sous-sol o_O !572
+ -r--r--r-- 1 schmitta staff 1376224927 4 fév 03:24 Let's Play Minecraft Better Than Wolves Ep 22 l HARDCORE l Machinerie infern572
+ -r--r--r-- 1 schmitta staff 1102293665 13 fév 03:56 Let's Play Minecraft Better Than Wolves Ep 23 l HARDCORE l Piston chenil572
+ -r--r--r-- 1 schmitta staff 1835677068 19 fév 09:14 Let's Play Minecraft Better Than Wolves Ep 24 l HARDCORE l Piston chenille et o_Oce572
+ -r--r--r-- 1 schmitta staff 753740284 30 déc 19:31 Let's Play Minecraft Better Than Wolves Ep 3 _ HARDCORE _ First pioche en fer422
+ -r--r--r-- 1 schmitta staff 1019022279 30 déc 18:38 Let's Play Minecraft Better Than Wolves Ep 5 _ HARDCORE _ Fonderie super desi572
+ -r--r--r-- 1 schmitta staff 788714805 30 déc 17:47 Let's Play Minecraft Better Than Wolves Ep 6 _ HARDCORE _ Minage de la mor572
+ -r--r--r-- 1 schmitta staff 778987710 23 déc 19:56 Let's Play Minecraft Better Than Wolves Ep 7 _ HARDCORE _ Diamant572
+ -r--r--r-- 1 schmitta staff 644564981 23 déc 23:06 Let's Play Minecraft Better Than Wolves Ep 8 _ HARDCORE _ Et le poulet ma572
+ -r--r--r-- 1 schmitta staff 871173289 24 déc 10:44 Let's Play Minecraft Better Than Wolves Ep 9 _ HARDCORE _ Araignée verte de la jun572
+ -r--------@ 4 schmitta staff 149520850 14 aoû 2010 OPLSS10-Mc422
+ -r--------@ 4 schmitta staff 95020824 14 aoû 2010 OPLSS10-Mc423
+ -r--------@ 4 schmitta staff 98980596 1 sep 2010 OPLSS10-Mc424
+ -r--------@ 4 schmitta staff 207525348 1 sep 2010 OPLSS10-Mc425
+ -r--------@ 4 schmitta staff 149520850 14 aoû 2010 OPLSS10-Mc534
+ -r--------@ 4 schmitta staff 95020824 14 aoû 2010 OPLSS10-Mc535
+ -r--------@ 4 schmitta staff 98980596 1 sep 2010 OPLSS10-Mc536
+ -r--------@ 4 schmitta staff 207525348 1 sep 2010 OPLSS10-Mc537
+ -r--------@ 4 schmitta staff 149520850 14 aoû 2010 OPLSS10-Mc572
+ -r--------@ 4 schmitta staff 95020824 14 aoû 2010 OPLSS10-Mc573
+ -r--------@ 4 schmitta staff 98980596 1 sep 2010 OPLSS10-Mc574
+ -r--------@ 4 schmitta staff 207525348 1 sep 2010 OPLSS10-Mc575
+ -r--r--r--@ 2 schmitta staff 150781568 10 mar 13:34 XD300-23_68HighlightsAResearchCntAugHuma469
+ -r--r--r--@ 2 schmitta staff 145745487 10 mar 13:36 XD300-24_68HighlightsAResearchCntAugHuma469
+ -r--r--r--@ 2 schmitta staff 142414085 10 mar 13:36 XD300-25_68HighlightsAResearchCntAugHuma469
+ -r--------@ 2 schmitta staff 548973365 7 jan 20:21 laumond-20120119449.mp4
+ -r--r--r--@ 2 schmitta staff 1820482781 8 mar 18:15 salt-020131469
+"""]]
diff --git a/doc/forum/dot_git_slash_annex_slash_tmp/comment_15_839e29d41de9dcc8f01dfdc585a51d12._comment b/doc/forum/dot_git_slash_annex_slash_tmp/comment_15_839e29d41de9dcc8f01dfdc585a51d12._comment
new file mode 100644
index 000000000..36ad14e57
--- /dev/null
+++ b/doc/forum/dot_git_slash_annex_slash_tmp/comment_15_839e29d41de9dcc8f01dfdc585a51d12._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="216.145.95.162"
+ subject="comment 15"
+ date="2014-05-19T15:43:52Z"
+ content="""
+Since version 5.20140517, the git-annex assistant will automatically clean up stale tmp files on startup.
+
+If not using the assistant, you can do it yourself..
+
+So far, all the tmp files people have been kind enough to share the details about with me seem to be created by the assistant when it locks a file down. I know this can result in dangling files if the computer is rebooted while the assistant is in the middle of doing that.
+"""]]
diff --git a/doc/forum/downloading_from_moodle.mdwn b/doc/forum/downloading_from_moodle.mdwn
new file mode 100644
index 000000000..ad38d7f1f
--- /dev/null
+++ b/doc/forum/downloading_from_moodle.mdwn
@@ -0,0 +1,76 @@
+my school uses moodle for our classes. We have to sign in and then manually click to download each file, assignment and video uploaded. I asked the school's tech administrator if there was a direct way I could access the videos through the ssh access they've given us to one of the servers, but he said it wasn't possible.
+
+when I click on the link shown, the location I see is: http://moodle.jct.ac.il/mod/resource/view.php?id=135374
+Inspect element gives more information. the response from the server is:
+
+ Remote Address:147.161.6.59:80
+ Request URL:http://moodle.jct.ac.il/mod/resource/view.php?id=135374
+ Request Method:GET
+ Status Code:303 See Other
+ Request Headersview source
+ Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
+ Accept-Encoding:gzip,deflate,sdch
+ Accept-Language:en-US,en;q=0.8,he;q=0.6
+ Connection:keep-alive
+ Cookie:visid_incap_97364=qJx2WaKqQfGidGf9VfM6QWrnlFIAAAAAQUIPAAAAAAC5EXcbt00vqNu9jdVDwEDN; __utma=98014340.1409421308.1381214363.1381214363.1390387318.2; __utmz=98014340.1381214363.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); MoodleSession5771=7s1cfqfo4ahdtmna5h7vserg97; MOODLEID1_5771=%257F%25D39%2522N%25B4%25AFY
+ DNT:1
+ Host:moodle.jct.ac.il
+ Referer:http://moodle.jct.ac.il/course/view.php?id=20151
+ User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36
+ Query String Parametersview sourceview URL encoded
+ id:135374
+ Response Headersview source
+ Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
+ Connection:Keep-Alive
+ Content-Encoding:gzip
+ Content-Language:he
+ Content-Length:503
+ Content-Type:text/html
+ Date:Mon, 16 Jun 2014 12:31:22 GMT
+ Expires:Thu, 19 Nov 1981 08:52:00 GMT
+ Keep-Alive:timeout=15, max=100
+ Location:http://moodle.jct.ac.il/pluginfile.php/288409/mod_resource/content/0/movie%205773/150151.5773.week1.wmv?forcedownload=1
+ Pragma:no-cache
+ Server:Apache/2.2.14 (Ubuntu)
+ Vary:Accept-Encoding
+ X-Powered-By:PHP/5.3.2-1ubuntu4.24
+
+this then pulls the following:
+
+ Remote Address:147.161.6.59:80
+ Request URL:http://moodle.jct.ac.il/pluginfile.php/288409/mod_resource/content/0/movie%205773/150151.5773.week1.wmv?forcedownload=1
+ Request Method:GET
+ Status Code:200 OK
+ Request Headersview source
+ Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
+ Accept-Encoding:gzip,deflate,sdch
+ Accept-Language:en-US,en;q=0.8,he;q=0.6
+ Connection:keep-alive
+ Cookie:visid_incap_97364=qJx2WaKqQfGidGf9VfM6QWrnlFIAAAAAQUIPAAAAAAC5EXcbt00vqNu9jdVDwEDN; __utma=98014340.1409421308.1381214363.1381214363.1390387318.2; __utmz=98014340.1381214363.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); MoodleSession5771=7s1cfqfo4ahdtmna5h7vserg97; MOODLEID1_5771=%257F%25D39%2522N%25B4%25AFY
+ DNT:1
+ Host:moodle.jct.ac.il
+ Referer:http://moodle.jct.ac.il/course/view.php?id=20151
+ User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36
+ Query String Parametersview sourceview URL encoded
+ forcedownload:1
+ Response Headersview source
+ Accept-Ranges:bytes
+ Cache-Control:max-age=86400
+ Connection:Keep-Alive
+ Content-Disposition:attachment; filename="150151.5773.week1.wmv"
+ Content-Length:1353673203
+ Content-Type:application/x-forcedownload
+ Date:Mon, 16 Jun 2014 12:31:23 GMT
+ ETag:675e7d2cffd7a79afd8686c59ff2533f9e3508b7
+ Expires:Tue, 17 Jun 2014 12:31:23 GMT
+ Keep-Alive:timeout=15, max=99
+ Last-Modified:Fri, 19 Jul 2013 17:06:54 GMT
+ Pragma:
+ Server:Apache/2.2.14 (Ubuntu)
+ X-Powered-By:PHP/5.3.2-1ubuntu4.24
+
+when I right-click on the second one in the inspect element window, I can select "copy as cURL" i get:
+
+ curl 'http://moodle.jct.ac.il/pluginfile.php/288409/mod_resource/content/0/movie%205773/150151.5773.week1.wmv?forcedownload=1' -H 'DNT: 1' -H 'Accept-Encoding: gzip,deflate,sdch' -H 'Accept-Language: en-US,en;q=0.8,he;q=0.6' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Referer: http://moodle.jct.ac.il/course/view.php?id=20151' -H 'Cookie: visid_incap_97364=qJx2WaKqQfGidGf9VfM6QWrnlFIAAAAAQUIPAAAAAAC5EXcbt00vqNu9jdVDwEDN; __utma=98014340.1409421308.1381214363.1381214363.1390387318.2; __utmz=98014340.1381214363.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); MoodleSession5771=7s1cfqfo4ahdtmna5h7vserg97; MOODLEID1_5771=%257F%25D39%2522N%25B4%25AFY' -H 'Connection: keep-alive' --compressed
+
+if I append " > week1.wmv" to the end of that output it downloads fine. How can I add this file to a git-annex repo?
diff --git a/doc/forum/downloading_from_moodle/comment_1_3f677130d268de4288e87cfa86ea055c._comment b/doc/forum/downloading_from_moodle/comment_1_3f677130d268de4288e87cfa86ea055c._comment
new file mode 100644
index 000000000..a489859ad
--- /dev/null
+++ b/doc/forum/downloading_from_moodle/comment_1_3f677130d268de4288e87cfa86ea055c._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-06-16T17:55:13Z"
+ content="""
+`git annex addurl` does not support storing cookies needed to access files. I doubt that makes sense anyway, since most login cookies expire.
+
+So, your best bet seems to just be to `git annex add` the file after you download it.
+"""]]
diff --git a/doc/forum/downloading_from_moodle/comment_2_dcef60ec144f123dadd165fb602ab950._comment b/doc/forum/downloading_from_moodle/comment_2_dcef60ec144f123dadd165fb602ab950._comment
new file mode 100644
index 000000000..152900433
--- /dev/null
+++ b/doc/forum/downloading_from_moodle/comment_2_dcef60ec144f123dadd165fb602ab950._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 2"
+ date="2014-06-16T17:59:20Z"
+ content="""
+Another option would be to set up some kind of http proxy that adds the login cookie to requests.. If you really wanted to use `git annex addurl`.
+"""]]
diff --git a/doc/forum/downloading_from_moodle/comment_3_d3efb767bf9b20f96242dcf64817bd4b._comment b/doc/forum/downloading_from_moodle/comment_3_d3efb767bf9b20f96242dcf64817bd4b._comment
new file mode 100644
index 000000000..c9b101225
--- /dev/null
+++ b/doc/forum/downloading_from_moodle/comment_3_d3efb767bf9b20f96242dcf64817bd4b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 3"
+ date="2014-06-16T18:04:48Z"
+ content="""
+Actually, a simpler option may be to set `annex.http-headers` in the git config, to the appropriate http headers that set the cookie.
+"""]]
diff --git a/doc/forum/drop__47__whereis_not_showing_gcrypted_special_ssh_remote.mdwn b/doc/forum/drop__47__whereis_not_showing_gcrypted_special_ssh_remote.mdwn
new file mode 100644
index 000000000..9445539b4
--- /dev/null
+++ b/doc/forum/drop__47__whereis_not_showing_gcrypted_special_ssh_remote.mdwn
@@ -0,0 +1,11 @@
+I have my laptop, my server and my usb drive. My server is a gcrypted remote via ssh. My laptop is just a repo that's referenced as a remote with a filepath.
+
+I do git annex copy --to server, and let it copy stuff. I repeat the same thing for the usb drive.
+
+I run git annex sync and it does the whole sync dance successfully. it pushes stuff to both the usb drive and the server.
+
+Afterwards, I do git annex whereis, and I only get 2 copies showing - my laptop and my usb drive. Likewise, since I set numcopies to 2, it won't let me drop anything at all, because it doesn't know there's a copy on my server.
+
+Anything I can do about this? (What further info do you need?)
+
+I should probably add that my server is a ubuntu machine, and so it runs version 5.20140412ubuntu1. My laptop runs a more recent 5.20140717-g5a7d4ff.
diff --git a/doc/forum/drop__47__whereis_not_showing_gcrypted_special_ssh_remote/comment_1_968bc2be595008790e9b93d82342714c._comment b/doc/forum/drop__47__whereis_not_showing_gcrypted_special_ssh_remote/comment_1_968bc2be595008790e9b93d82342714c._comment
new file mode 100644
index 000000000..45699f443
--- /dev/null
+++ b/doc/forum/drop__47__whereis_not_showing_gcrypted_special_ssh_remote/comment_1_968bc2be595008790e9b93d82342714c._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="annexuser123"
+ ip="88.65.52.206"
+ subject="comment 1"
+ date="2014-08-04T18:00:00Z"
+ content="""
+To add further to this, the gcrypted remote does not show up in either the usb drive's git annex info, nor the laptop's git annex info.
+
+Despite that, I can push to it and copy to it.
+"""]]
diff --git a/doc/forum/drop__47__whereis_not_showing_gcrypted_special_ssh_remote/comment_2_2c14d88e55ea7d4edc90ce0091025f32._comment b/doc/forum/drop__47__whereis_not_showing_gcrypted_special_ssh_remote/comment_2_2c14d88e55ea7d4edc90ce0091025f32._comment
new file mode 100644
index 000000000..a181940d2
--- /dev/null
+++ b/doc/forum/drop__47__whereis_not_showing_gcrypted_special_ssh_remote/comment_2_2c14d88e55ea7d4edc90ce0091025f32._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 2"
+ date="2014-10-02T15:48:02Z"
+ content="""
+Sorry that it took me so long to get back to you.
+
+The git remote that corresponds to your server should have an annex-uuid setting. (Eg, remote.server.annex-uuid.) Look up the uuid. Then look in `git-annex info`. I'd expect the uuid to be listed there. It might be that somehow two repositories got the same uuid set (probability says no, but things find ways to break). If that did happen, I think it would replicate what you've reported, and in that case, the server's uuid would be listed by `git annex info`, but perhaps it would have the name of the usb drive.
+"""]]
diff --git a/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__.mdwn b/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__.mdwn
new file mode 100644
index 000000000..2fd18f988
--- /dev/null
+++ b/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__.mdwn
@@ -0,0 +1,24 @@
+I have Ubuntu and Debian systems, playing with git-annex. This is not mission critical data, just testing. I ended up with an extra duplicate of the media files on the laptop.
+
+The whereis listing is lots and lots like this:
+
+whereis 00-Unsorted/2008-RobustStats-AmerPsyc.pdf (3 copies)
+ 67e69242-d57c-4b50-aaf9-74876b899962
+ 9e0bc9e4-f8bf-11e3-b9c1-9b4158540a9d -- pols110.pols.ku.edu_mediashare (
+pdf and mp3)
+ d82d2e6f-9200-49cf-86a3-1d674a768971 -- here (pauljohn@dellap14:~/medias
+hare)
+ok
+
+(I'm pretty sure) This happened because I copied the media files to /home/pauljohn/mediashare/manuscripts manually, and then I used the git-annex assistant to set up the remote linkage to same content, from the workstation, and it apparently copied in a whole new set.
+
+How to clean this up? Without erasing everything and starting over?
+
+Can I guess?
+
+Open a terminal and git remove manually 67e69242-d57c-4b50-aaf9-74876b899962 ???
+
+Thanks in advance if you care to advise me :)
+
+Paul Johnson
+http://pj.freefaculty.org
diff --git a/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_1_bb6d749b758b17178227929bf7327fe1._comment b/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_1_bb6d749b758b17178227929bf7327fe1._comment
new file mode 100644
index 000000000..d528331ce
--- /dev/null
+++ b/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_1_bb6d749b758b17178227929bf7327fe1._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://openid.stackexchange.com/user/e65e6d0e-58ba-41de-84cc-1f2ba54cf574"
+ nickname="Mica Semrick"
+ subject="comment 1"
+ date="2014-06-24T04:24:12Z"
+ content="""
+You should first try `git-annex unused` and if that doesn't work just `git-annex drop` the unwanted files.
+"""]]
diff --git a/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_2_d834df30633f7d5569797ee818cf38c3._comment b/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_2_d834df30633f7d5569797ee818cf38c3._comment
new file mode 100644
index 000000000..1f2cf2ff5
--- /dev/null
+++ b/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_2_d834df30633f7d5569797ee818cf38c3._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkpIIYg6Fl7OFsOHVPEchZYj68A3dk4lVg"
+ nickname="Paul"
+ subject="please explain"
+ date="2014-07-01T13:45:08Z"
+ content="""
+Sorry. I just don't understand.
+what am I doing wrong? How to remove extra copy:
+
+<pre>
+whereis WaldTest/Vaeth_WaldTest.pdf (3 copies)
+ 67e69242-d57c-4b50-aaf9-74876b899962
+ 9e0bc9e4-f8bf-11e3-b9c1-9b4158540a9d -- pols110.pols.ku.edu_mediashare (pdf and mp3)
+ d82d2e6f-9200-49cf-86a3-1d674a768971 -- here (pauljohn@dellap14:~/mediashare)
+ok
+pauljohn@dellap14:~/mediashare/manuscripts$ git annex drop 67e69242-d57c-4b50-aaf9-74876b899962
+git-annex: 67e69242-d57c-4b50-aaf9-74876b899962 not found
+pauljohn@dellap14:~/mediashare/manuscripts$ git annex drop WaldTest/67e69242-d57c-4b50-aaf9-74876b899962
+git-annex: WaldTest/67e69242-d57c-4b50-aaf9-74876b899962 not found
+"""]]
diff --git a/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_3_1e02eff33c9fa7bea03aa6d58b910175._comment b/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_3_1e02eff33c9fa7bea03aa6d58b910175._comment
new file mode 100644
index 000000000..b0061a9d0
--- /dev/null
+++ b/doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_3_1e02eff33c9fa7bea03aa6d58b910175._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 3"
+ date="2014-07-03T19:20:49Z"
+ content="""
+\"67e69242-d57c-4b50-aaf9-74876b899962\" is the UUID of a git annnex repository that git-annex has on record as containing the file. Since it does not have a description set (which normally gets done automatically when setting up the repository), and is not one of the remotes of the repository where you ran `git annex whereis`, it's a bit hard to tell what repository that is.
+
+What I would do in this situation is:
+
+1. Look around my computers for a repository with that UUID. You can run this command in a repository to see its uuid: `git config annex.uuid`
+2. If I found it, I'd run `git annex describe here \"something sensible\"` and maybe set it up as a remote of other repositories and then `git annex drop` the data from it if desired.
+3. If I was unable to find the repository, I might assume it was one I created before, and have removed. Then I'd tell git-annex that: `git annex dead 67e69242-d57c-4b50-aaf9-74876b899962` (if it turns out I was wrong and the repository turns up later, this can always be reversed by running `git annex semitrust 67e69242-d57c-4b50-aaf9-74876b899962`)
+"""]]
diff --git a/doc/forum/empty_directory_handling.mdwn b/doc/forum/empty_directory_handling.mdwn
new file mode 100644
index 000000000..b806b2e2f
--- /dev/null
+++ b/doc/forum/empty_directory_handling.mdwn
@@ -0,0 +1,3 @@
+I've just tried using git annex assistant for the first time, to synchronize a shared directory between machines. This shared directory contains a collection of bare git repositories for various projects. Unfortunately this doesn't seem to work, as to be recognised as valid bare repos, they need to have the ref/heads and ref/tags subdirectories. git annex assistant fails to synchronise these, as they are empty.
+
+What should I do? How can I make git annex reproduce the source directory structure when synchronising?
diff --git a/doc/forum/empty_directory_handling/comment_1_34ac97b9337b6230ed8a4748203fe543._comment b/doc/forum/empty_directory_handling/comment_1_34ac97b9337b6230ed8a4748203fe543._comment
new file mode 100644
index 000000000..edf4984ea
--- /dev/null
+++ b/doc/forum/empty_directory_handling/comment_1_34ac97b9337b6230ed8a4748203fe543._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-07-02T17:02:31Z"
+ content="""
+This is not a good idea. See <http://git-annex.branchable.com/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X/#comment-29b91a7381453104e7bceea5e552cb85>
+"""]]
diff --git a/doc/forum/empty_directory_handling/comment_2_73a39e28d5a09ac342cb4195d263d91e._comment b/doc/forum/empty_directory_handling/comment_2_73a39e28d5a09ac342cb4195d263d91e._comment
new file mode 100644
index 000000000..250c08adf
--- /dev/null
+++ b/doc/forum/empty_directory_handling/comment_2_73a39e28d5a09ac342cb4195d263d91e._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmlO6w9_FAVe3v6MdnkePxaTJqp0RPbGhM"
+ nickname="Tim"
+ subject="comment 2"
+ date="2014-07-04T04:00:25Z"
+ content="""
+Thanks - that thread was helpful. I now realise that what I was trying to do was not sensible, and I'll have to work out another approach.
+"""]]
diff --git a/doc/forum/error:_refs__47__heads__47__git-annex_does_not_point_to_a_valid_object__33__.mdwn b/doc/forum/error:_refs__47__heads__47__git-annex_does_not_point_to_a_valid_object__33__.mdwn
new file mode 100644
index 000000000..a39951bb5
--- /dev/null
+++ b/doc/forum/error:_refs__47__heads__47__git-annex_does_not_point_to_a_valid_object__33__.mdwn
@@ -0,0 +1,17 @@
+for the command:
+
+ $ git annex info
+
+I get the following output:
+
+ repository mode: direct
+ trusted repositories: error: refs/heads/git-annex does not point to a valid object!
+ error: refs/heads/git-annex does not point to a valid object!
+ error: invalid object 100644 993859515190743e9bed7fc8e697d5ac4e2d03a0 for '01d/56e/SHA256E-s209799168--cb8450b63c699c5f8fb121e51ed7e387258d57c851b256af0e5ceeae9542ffd8.me.avi.log'
+ fatal: git-write-tree: error building trees
+ git-annex: failed to read sha from git write-tree
+
+Please help,
+Yuval Langer.
+
+BTW, the code formatting is kinda weird. Could you help with that as well?
diff --git a/doc/forum/error:_refs__47__heads__47__git-annex_does_not_point_to_a_valid_object__33__/comment_1_d370b044da3bfebf9e4c90ce1e243587._comment b/doc/forum/error:_refs__47__heads__47__git-annex_does_not_point_to_a_valid_object__33__/comment_1_d370b044da3bfebf9e4c90ce1e243587._comment
new file mode 100644
index 000000000..cf7601d40
--- /dev/null
+++ b/doc/forum/error:_refs__47__heads__47__git-annex_does_not_point_to_a_valid_object__33__/comment_1_d370b044da3bfebf9e4c90ce1e243587._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-05-15T20:22:40Z"
+ content="""
+This means that a git commit's data has gotten lost somehow. You can verify that by trying
+
+ git show 993859515190743e9bed7fc8e697d5ac4e2d03a0
+
+The most common reason for this to happen is if the system is shutdown unexpectedly while git-annex is running. Or, if this repository is on a removable drive, if it got removed before the data could be written.
+
+You can probably fix the problem by running:
+
+ git annex repair
+
+(Code formatting: Use 4 spaces.)
+"""]]
diff --git a/doc/forum/example_of_massively_disconnected_operation.mdwn b/doc/forum/example_of_massively_disconnected_operation.mdwn
index 00a5d8d6c..78ed6784b 100644
--- a/doc/forum/example_of_massively_disconnected_operation.mdwn
+++ b/doc/forum/example_of_massively_disconnected_operation.mdwn
@@ -4,7 +4,7 @@ So, I synced it back up! :) --[[Joey]]
<pre>
commit 4151f4595fe6205d4aed653617ab23eb3335130a
-Author: Joey Hess <joey@kitenet.net>
+Author: Joey Hess <id@joeyh.name>
Date: Tue Oct 26 02:18:03 2010 -0400
joey> git pull
diff --git a/doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks.mdwn b/doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks.mdwn
new file mode 100644
index 000000000..3ee7fae84
--- /dev/null
+++ b/doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks.mdwn
@@ -0,0 +1,27 @@
+Dear all,
+ I had (snif!) and indirect repo with 2.7 of pdf files with filenames were manually added by me with author and title, and took years of work. I had them in a git annex repo from quite some time.
+Now I'm trying to sync them to an usb drive. Main repo lives in an ubuntu box with ext4 filesystem. I failed many times to do this, both on fat and exfat external drives (direct).
+As I was failing, I tried to to a test on the same local filesystem. So I have my main repo in /home/juan/papers and the other in /tmp/papers.
+While trying to sync them using the assistant, i noticed that most of the folders and symlinks from the main repo just dissapeared.
+I still have them in .git/annex/objects but I don't know how to recover the links.
+I must say I'm an everyday git user, and big fan of git-annex but I'm trying to use it for six months without luck. I think I will quit after recovering the data, if possible.
+
+EDIT 1
+-------
+After digging around a bit, I found that I had the keys, and could find out the original filename, for example:
+
+ git log --stat -S 1279
+ commit a6362df13d728037875320a457182acb073d08ea
+ Author: Juan Cardelino <x@gmail.com>
+ Date: Fri Nov 21 11:25:31 2014 -0200
+
+ 2013_august/feature_matching_by_searching_maximum_clique_on_high_order_association.pdf | 1 +
+ LevelSets/fedkiw/stanford2002-06.pdf | 1 +
+ new/nfa/00106994.pdf | 1 +
+ 3 files changed, 3 insertions(+)
+
+How can I recover them?
+
+EDIT 2
+-------
+Seems that I overwritten my repo with a new repo. Because git log only shows 4 entries from today. Is it possible that the webapp has made that?
diff --git a/doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks/comment_1_3167052f67706797b00423a50f2ae7f1._comment b/doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks/comment_1_3167052f67706797b00423a50f2ae7f1._comment
new file mode 100644
index 000000000..dd07c1924
--- /dev/null
+++ b/doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks/comment_1_3167052f67706797b00423a50f2ae7f1._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-12-01T21:56:45Z"
+ content="""
+Well, git-annex just uses a regular git repo. It should not be possible to
+fully lose data. I suggest you run `git log
+--stat` and see if a commit deleted all your files. If so, you can revert
+that commit.
+
+If the git log really is only 4 commits deep, perhaps you got some other
+branch checked out somehow. Run `git reflog` to see the history of what
+branches have been checked out before, and you can use `git checkout` to go
+back to one of those past checkouts.
+
+Or, failing all that, you showed a commit
+a6362df13d728037875320a457182acb073d08ea which had one of your files,
+so `git checkout a6362df13d728037875320a457182acb073d08ea` will check out
+the tree as it appeared at the time of that commit.
+
+This is all git 101. AFAICS, you have not lost any data, and need to become
+more familiar with the basics of git.
+"""]]
diff --git a/doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks/comment_2_0082ac7a148db69293a4e37fa6d6c891._comment b/doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks/comment_2_0082ac7a148db69293a4e37fa6d6c891._comment
new file mode 100644
index 000000000..06832ca8b
--- /dev/null
+++ b/doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks/comment_2_0082ac7a148db69293a4e37fa6d6c891._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2014-12-02T17:34:41Z"
+ content="""
+I'm glad you were able to solve it!
+
+Now that you know what the bad commit is, can you tell me what it looks
+like? The assistant should not be committing deletions of all files,
+unless all files actually were deleted...
+"""]]
diff --git a/doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks/comment_2_6411aa3e6f5c1515845f3223bbcdabf1._comment b/doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks/comment_2_6411aa3e6f5c1515845f3223bbcdabf1._comment
new file mode 100644
index 000000000..6e9c75aaf
--- /dev/null
+++ b/doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks/comment_2_6411aa3e6f5c1515845f3223bbcdabf1._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmTNrhkVQ26GBLaLD5-zNuEiR8syTj4mI8"
+ nickname="Juan"
+ subject="I figured it out"
+ date="2014-12-02T01:48:38Z"
+ content="""
+I'm not new to git, and I perfectly know how to revert commits, however, I was confused about how git annex and git play together. In particular I tried to use it as a black box with the assistant and that was a bad idea.
+After adding the usb drive as remote with the assitant, all symlinks got deleted. However, doing a checkout to the commit that messed up everything I got thing back to normal.
+Sadly, your message arrived a couple of hours late, I could have saved me a lot of time.
+Thanks for taking the time to answer.
+Sorry for the previous rant.
+Best regards,
+ Juan
+"""]]
diff --git a/doc/forum/faking_location_information.mdwn b/doc/forum/faking_location_information.mdwn
new file mode 100644
index 000000000..7c84e12e3
--- /dev/null
+++ b/doc/forum/faking_location_information.mdwn
@@ -0,0 +1,19 @@
+Hi
+
+I am using git-annex even if people I exchange data with (currently) don‘t use it for there data. My idea behind this is that I would like to know from where I got a file, whom I gave a file and who does (probably) still have a copy of the file. To do this you need to trick git-annex location tracking feature a bit. I successfully managed to achieve this in a simple data exchange which only consisted of me coping over files to one of my git-annex repos. I did the following to make git-annex believe that the files are in two repos without the need to *copy* them around the repos.
+
+This is what I did in this simple case:
+
+1. mounted the drive from someone
+2. made a clone of my git-annex repo on the filesystem which should hold the copy of the data
+3. initialized the cloned repo with `git annex init "Drive from person X"`
+4. imported the files to the cloned repo with `git annex import --duplicate $path_to_files_from_person_x`
+5. `git annex sync` in the cloned repo
+6. `git annex sync` in main repo
+7. `git annex move . --to origin` in the cloned repo
+
+The impotent part (and the limit) here was that you can not sync these two repos after you moved files to the main repo. The problem is that there will be situations where I will have to sync them also after moving files around (for example if I want to store new files in multiple repos (and not just one main repo), or if I also want to copy files over to drives from someone).
+
+Note: I have also worked out a solution to allow someone to choose which files he/she would like to get as described [on superuser.com](http://superuser.com/a/717689).
+
+Are there better ways to fake location information then the thing I came up with (except making multiple repos for one person/drive)? Can multiple remotes be merged to one remote?
diff --git a/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory.mdwn b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory.mdwn
new file mode 100644
index 000000000..ee0b49eb6
--- /dev/null
+++ b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory.mdwn
@@ -0,0 +1,112 @@
+I'm getting this error, not exactly sure why... Here's the output of running git annex sync in my pictures folder:
+
+ [2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","git-annex"]
+ [2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","--hash","refs/heads/git-annex"]
+ [2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..7bf55ad4463cad9389cbb11e48334d151aacf45f","--oneline","-n1"]
+ [2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..f3331818fc79b6e9523e483b9d97aaec5c8da845","--oneline","-n1"]
+ [2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..6c3bee76aa98f5c789ddf89450b3bd52658171a6","--oneline","-n1"]
+ [2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..9329bf7ae5609b19e81d9605fdc990c87c5816dc","--oneline","-n1"]
+ [2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..ad7115c6108170dc54095f74632db339dbca4cdd","--oneline","-n1"]
+ [2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] chat: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","cat-file","--batch"]
+ [2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] read: git ["config","--null","--list"]
+ commit
+ [2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","ls-files","--stage","-z","--others","--exclude-standard","--","C:\\Users\\Name\\Pictures"]
+ [2014-06-29 12:43:59 Mitteleuropäische Sommerzeit] chat: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","cat-file","--batch"]
+ (Recording state in git...)
+ [2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","Hochzeit von NameB und NameC/2013-08-18_MVI_0583.MOV"]
+ fatal: Out of memory? mmap failed: No such file or directory
+ [2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","Hochzeit von NameB und NameC/2013-08-18_MVI_0582.MOV"]
+ fatal: Out of memory? mmap failed: No such file or directory
+ [2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","Hochzeit von NameB und NameC/2013-08-18_MVI_0417.MOV"]
+ fatal: Out of memory? mmap failed: No such file or directory
+ [2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","Hochzeit von NameB und NameC/2013-08-17_MVI_9701.MOV"]
+ fatal: Out of memory? mmap failed: No such file or directory
+ [2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2014/Hochzeit von Jana und Stefan/MVI_7168.MOV"]
+ [2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2456.JPG"]
+ [2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2452.JPG"]
+ [2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2450.JPG"]
+ [2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2449.JPG"]
+ [2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2448.JPG"]
+ [2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2447.JPG"]
+ [2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2443.JPG"]
+ [2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2439.JPG"]
+ [2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2436.JPG"]
+ [2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2431.JPG"]
+ [2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2430.JPG"]
+ [2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2425.JPG"]
+ [2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2424.JPG"]
+ [2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2423.JPG"]
+ [2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2421.JPG"]
+ [2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2418.JPG"]
+ [2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2417.JPG"]
+ [2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2416.JPG"]
+ [2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2415.JPG"]
+ [2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2411.JPG"]
+ [2014-06-29 12:49:58 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2409.JPG"]
+ [2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2406.JPG"]
+ [2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2405.JPG"]
+ [2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2404.JPG"]
+ [2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2403.JPG"]
+ [2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2402.JPG"]
+ [2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2400.JPG"]
+ [2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2394.JPG"]
+ [2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2392.JPG"]
+ [2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2012/Event/IMG_2390.JPG"]
+ [2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0446.JPG"]
+ [2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0445.JPG"]
+ [2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0444.JPG"]
+ [2014-06-29 12:49:59 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0443.JPG"]
+ [2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0442.JPG"]
+ [2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0441.JPG"]
+ [2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0440.JPG"]
+ [2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0438.JPG"]
+ [2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0437.JPG"]
+ [2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0436.JPG"]
+ [2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0435.JPG"]
+ [2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0434.JPG"]
+ [2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0433.JPG"]
+ [2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0432.JPG"]
+ [2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0431.JPG"]
+ [2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0368.JPG"]
+ [2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0367.JPG"]
+ [2014-06-29 12:50:00 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0366.JPG"]
+ [2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0365.JPG"]
+ [2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","add","-f","2005/Amsterdam/CIMG0364.JPG"]
+ [2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","--head"]
+ [2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","diff-index","-z","--raw","--no-renames","-l0","--cached","HEAD"]
+ [2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","symbolic-ref","HEAD"]
+ [2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","--hash","refs/heads/annex/direct/master"]
+ [2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","write-tree"]
+ [2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","rev-parse","ec008c688692d3156b1aececf33a388f43e8c868:"]
+ ok
+ [2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","symbolic-ref","HEAD"]
+ [2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","refs/heads/annex/direct/master"]
+ [2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","--verify","-q","refs/heads/synced/master"]
+ [2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/annex/direct/master..refs/heads/synced/master","--oneline","-n1"]
+ pull HomeServerLocal
+ [2014-06-29 12:50:01 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","fetch","HomeServerLocal"]
+ [2014-06-29 12:50:02 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","--verify","-q","refs/remotes/HomeServerLocal/annex/direct/master"]
+ [2014-06-29 12:50:02 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/annex/direct/master..refs/remotes/HomeServerLocal/annex/direct/master","--oneline","-n1"]
+ [2014-06-29 12:50:02 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","--verify","-q","refs/remotes/HomeServerLocal/synced/master"]
+ [2014-06-29 12:50:02 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/synced/master..refs/remotes/HomeServerLocal/synced/master","--oneline","-n1"]
+ ok
+ [2014-06-29 12:50:02 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","git-annex"]
+ [2014-06-29 12:50:02 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","--hash","refs/heads/git-annex"]
+ [2014-06-29 12:50:02 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..7bf55ad4463cad9389cbb11e48334d151aacf45f","--oneline","-n1"]
+ [2014-06-29 12:50:02 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..f3331818fc79b6e9523e483b9d97aaec5c8da845","--oneline","-n1"]
+ [2014-06-29 12:50:02 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..6c3bee76aa98f5c789ddf89450b3bd52658171a6","--oneline","-n1"]
+ [2014-06-29 12:50:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..9329bf7ae5609b19e81d9605fdc990c87c5816dc","--oneline","-n1"]
+ [2014-06-29 12:50:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/heads/git-annex..ad7115c6108170dc54095f74632db339dbca4cdd","--oneline","-n1"]
+ [2014-06-29 12:50:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","branch","-f","synced/master"]
+ [2014-06-29 12:50:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","branch","-f","master"]
+ [2014-06-29 12:50:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","--verify","-q","refs/remotes/HomeServerLocal/synced/master"]
+ [2014-06-29 12:50:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/remotes/HomeServerLocal/synced/master..refs/heads/synced/master","--oneline","-n1"]
+ [2014-06-29 12:50:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","show-ref","--verify","-q","refs/remotes/HomeServerLocal/git-annex"]
+ [2014-06-29 12:50:03 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","log","refs/remotes/HomeServerLocal/git-annex..git-annex","--oneline","-n1"]
+ push HomeServerLocal
+ [2014-06-29 12:50:03 Mitteleuropäische Sommerzeit] call: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","push","HomeServerLocal","+git-annex:synced/git-annex","annex/direct/master:synced/master"]
+ Everything up-to-date
+ [2014-06-29 12:50:04 Mitteleuropäische Sommerzeit] read: git ["--git-dir=C:\\Users\\Name\\Pictures\\.git","--work-tree=C:\\Users\\Name\\Pictures","push","HomeServerLocal","master"]
+ ok
+
+Any idea? Thanks in advance...
diff --git a/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_1_d98a155fa01d10ecff9058d79290156d._comment b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_1_d98a155fa01d10ecff9058d79290156d._comment
new file mode 100644
index 000000000..989ab1a6a
--- /dev/null
+++ b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_1_d98a155fa01d10ecff9058d79290156d._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="Idhup"
+ ip="91.58.248.157"
+ subject="System"
+ date="2014-06-29T19:26:42Z"
+ content="""
+Forgot to tell: This is a Win7 x64 system, running git 1.9.2.msysgit.0 and
+
+git-annex version: 5.20140517-gee56d21
+build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash
+key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+"""]]
diff --git a/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_2_3b9ea7a1254ac5b50a5ab59cd331ec3f._comment b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_2_3b9ea7a1254ac5b50a5ab59cd331ec3f._comment
new file mode 100644
index 000000000..2a575e059
--- /dev/null
+++ b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_2_3b9ea7a1254ac5b50a5ab59cd331ec3f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 2"
+ date="2014-07-04T17:55:45Z"
+ content="""
+<http://git-annex.branchable.com/bugs/git_annex_add_out_of_memory__63___mmap_failed:_No_such_file_or_directory/>
+"""]]
diff --git a/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_3_5ee300034819c5825c676cd7e3af659f._comment b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_3_5ee300034819c5825c676cd7e3af659f._comment
new file mode 100644
index 000000000..55345537e
--- /dev/null
+++ b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_3_5ee300034819c5825c676cd7e3af659f._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="Idhup"
+ ip="91.58.248.157"
+ subject="Didn't work"
+ date="2014-07-06T17:46:01Z"
+ content="""
+Repacking in cygwin towards a smaller packsize did not help. I shrinked it down to 2 MB per packfile, I still got the errors.
+
+When checking the debug output, you can see that git crashes when adding some large-ish .mov files. I'm not even sure if git's supposed to add them or if something went wrong with Windows/DirectMode. I executed git reset to remove pending additions that weren't supposed to be there, but to no avail.
+
+Any ideas on how to fix that?
+"""]]
diff --git a/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_4_cf7f5c91d3c15f72d2a714b7362c1197._comment b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_4_cf7f5c91d3c15f72d2a714b7362c1197._comment
new file mode 100644
index 000000000..4b250a3e2
--- /dev/null
+++ b/doc/forum/fatal:_Out_of_memory__63___mmap_failed:_No_such_file_or_directory/comment_4_cf7f5c91d3c15f72d2a714b7362c1197._comment
@@ -0,0 +1,30 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 4"
+ date="2014-07-10T20:16:28Z"
+ content="""
+[2014-06-29 12:49:57 Mitteleuropäische Sommerzeit] call: git [\"--git-dir=C:\\Users\\Name\\Pictures\\.git\",\"--work-tree=C:\\Users\\Name\\Pictures\",\"add\",\"-f\",\"Hochzeit von NameB und NameC/2013-08-17_MVI_9701.MOV\"]
+
+When does git-annex in direct mode run \"git add -f\"? In stageDirect, when a file has been modified that is not an annexed file, but already has been committed directly to git.
+
+This certainly points in the direction of what the problem is with the repository. I think you need to take a look at `git log --stat \"Hochzeit von NameB und NameC/2013-08-18_MVI_0583.MOV\"` and see if it has been committed to git as a symlink or if it is indeed being stored as a Bin file in git.
+
+Here's how the log would look for a regular git-annexed symlink:
+
+<pre>
+ $somefile | 1 +
+ 1 file changed, 1 insertion(+)
+</pre>
+
+And here for a binary file stored in git:
+
+<pre>
+ $somefile | Bin 0 -> 1016920 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+</pre>
+
+If you find the latter in the log, then the author and commit message of the commit adding it would be interesting.
+
+Hypothesis: Perhaps this repository started off on a Linux or OSX system, and you were using a git-annex older than 5.20131118, when the direct mode guard was added. You might have added this file back then and accidentially committed it directly to git.
+"""]]
diff --git a/doc/forum/files_being_dropped_undesirably.mdwn b/doc/forum/files_being_dropped_undesirably.mdwn
new file mode 100644
index 000000000..2a4d1bf7c
--- /dev/null
+++ b/doc/forum/files_being_dropped_undesirably.mdwn
@@ -0,0 +1,47 @@
+I currently am using 3 repositories for my personal annex, and on each of them I'm running the assistant (they are normal git annex repositories). However all my files are migrating to my work desktop. My other two repositories seem to keep dropping them.
+
+Last night on my laptop I did a "git annex get *" to pull _all_ the files onto it. I saw in the .git/annex/daemon.log that each file was being dropped as soon as it was gotten. The output of "git annex get" showed files being transfered across, and the .git/annex/daemon.log showed files being dropped straight away. Currently I'd like to keep all my files on all my repositories (and perhaps later I'll revise that).
+
+Could someone please help me understand why annex is dropping my files, and what I could do to keep them on all my repositories?
+
+Here is the output of a get for a single file:
+
+ ~/Documents/personal-annex $ git annex get 2014/09/15/IMG_1123.JPG
+ get 2014/09/15/IMG_1123.JPG (from pea15.local_Documents_annexpersonal...)
+ SHA256E-s1841221--deeaa13935907ad606f941397bb57432c1eccfd5c361b8c16d2b19bfbe8437a6.JPG
+ 1,841,221 100% 11.40MB/s 0:00:00 (xfr#1, to-chk=0/1)
+ ok
+ (Recording state in git...)
+
+
+Here is the corresponding daemon.log output:
+
+ [2014-10-09 09:11:34 AEDT] Committer: Committing changes to git
+ [2ok
+ (Recording state in git...)
+ (Recording state in git...)
+ (Recording state in git...)
+ drop 2014/09/15/IMG_1123.JPG 01(checking pea15.local_Documents_annexpersonal...) 4-10-09 09:11:34 AEDT] Pusher: Syncing with pea15.local_Documents_annexpersonal
+ [2014-10-09 09:11:35 AEDT] Committer: Committing changes to git
+ To ssh://geoffc@git-annex-pea-15-geoffc_Documents.2Fannex.2Dpersonal/~/Documents/annex-personal/
+ 04742c0..d1a5a36 git-annex -> synced/git-annex
+ [2014-10-09 09:11:38 AEDT] Pusher: Syncing with pea15.local_Documents_annexpersonal
+ Everything up-to-date
+
+
+And here is a snippet from my .git/config:
+
+ [annex]
+ uuid = 57c4e6d1-0c6b-4c49-a235-4119d3864c14
+ version = 5
+ direct = true
+ #diskreserve = 2 gigabyte
+ autoupgrade = ask
+ debug = false
+ expireunused = false
+ autocommit = true
+ [remote "pea15.local_Documents_annexpersonal"]
+ url = ssh://geoffc@git-annex-pea-15-geoffc_Documents.2Fannex.2Dpersonal/~/Documents/annex-personal/
+ fetch = +refs/heads/*:refs/remotes/pea15.local_Documents_annexpersonal/*
+ annex-uuid = 2ef6bbfe-662f-48ba-aa52-8e2f82bcfb15
+ annex-cost = 175.0
diff --git a/doc/forum/files_being_dropped_undesirably/comment_1_d03f8ed7d3f3da58612bf238c1790fb4._comment b/doc/forum/files_being_dropped_undesirably/comment_1_d03f8ed7d3f3da58612bf238c1790fb4._comment
new file mode 100644
index 000000000..887b12ac9
--- /dev/null
+++ b/doc/forum/files_being_dropped_undesirably/comment_1_d03f8ed7d3f3da58612bf238c1790fb4._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="Bram"
+ ip="81.20.68.186"
+ subject="Group and wanted expression"
+ date="2014-10-09T12:09:58Z"
+ content="""
+What are the group and wanted expressions for your repository?
+
+ git annex group .
+ git annex wanted .
+"""]]
diff --git a/doc/forum/files_being_dropped_undesirably/comment_2_7d885abebfec789348639494b1bb1829._comment b/doc/forum/files_being_dropped_undesirably/comment_2_7d885abebfec789348639494b1bb1829._comment
new file mode 100644
index 000000000..7bdb9243c
--- /dev/null
+++ b/doc/forum/files_being_dropped_undesirably/comment_2_7d885abebfec789348639494b1bb1829._comment
@@ -0,0 +1,24 @@
+[[!comment format=mdwn
+ username="go8ose"
+ ip="203.26.118.202"
+ subject="Group and wanted expression"
+ date="2014-10-09T22:19:01Z"
+ content="""
+Here is the group and wanted output on my laptop (that is dropping all the files):
+
+ ~/Documents/personal-annex $ git annex group .
+ unwanted
+ ~/Documents/personal-annex $ git annex wanted .
+ standard
+
+Here is the output on my desktop (that seems to be keeping all the files):
+
+ ~/Documents/annex-personal $ git annex group .
+
+ ~/Documents/annex-personal $ git annex wanted .
+
+
+
+
+Reading the manpage suggests I might want to change this. However I haven't seen in the man page a list of the standard predefined groups, nor an explanation of how each predefined group behaves. Is that documented somewhere else?
+"""]]
diff --git a/doc/forum/files_being_dropped_undesirably/comment_3_7c70b58f89408304055eefb1b166ef2e._comment b/doc/forum/files_being_dropped_undesirably/comment_3_7c70b58f89408304055eefb1b166ef2e._comment
new file mode 100644
index 000000000..00d511596
--- /dev/null
+++ b/doc/forum/files_being_dropped_undesirably/comment_3_7c70b58f89408304055eefb1b166ef2e._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="go8ose"
+ ip="203.26.118.202"
+ subject="comment 3"
+ date="2014-10-09T22:31:49Z"
+ content="""
+To answer my question about documentation on the 'groups' and 'wanted' features, I've found [[preferred_content]] and [[preferred_content/standard_groups]].
+
+In my case I've now setup my laptop to use group 'client' for the '.' repository. Similarly I've set 'client' on my desktop. I found my home server was already set to 'backup'. I still don't understand \"git annex\" well enough to know what's going on. I thought with these settings that running \"git annex get --auto\" on my laptop would have fetched all the files, but it didn't. A \"git annex get *\" is fetching all the files though, so I'm achieving what I want.
+"""]]
diff --git a/doc/forum/folder_size_question.mdwn b/doc/forum/folder_size_question.mdwn
new file mode 100644
index 000000000..51d11ca8b
--- /dev/null
+++ b/doc/forum/folder_size_question.mdwn
@@ -0,0 +1,3 @@
+For test purposes I copied a folder into my local repository to do some tests.
+I now had a look at the original folder size and the size of the repository and compared it to the original folder and the repo is about 2x bigger. How come?
+=> http://screencast.com/t/Tvqe5P22Ux
diff --git a/doc/forum/folder_size_question/comment_1_782cbf836335d86ff29853c34f00fec3._comment b/doc/forum/folder_size_question/comment_1_782cbf836335d86ff29853c34f00fec3._comment
new file mode 100644
index 000000000..36bb93df3
--- /dev/null
+++ b/doc/forum/folder_size_question/comment_1_782cbf836335d86ff29853c34f00fec3._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-05-16T17:02:29Z"
+ content="""
+I don't have bandwidth to watch screencasts, so I can only guess.
+
+My first guess would be that you used `git add` to check the files into a git repository. This will exactly double the disk space, since each file is now stored in .git/ as well as in the working tree. This is a problem that git-annex solves.
+
+If you'd like to provide more information (cut and paste of details is useful), I can perhaps make more informed guesses. Or you could use `du` so see which files are taking up more space than you expect.
+"""]]
diff --git a/doc/forum/folder_size_question/comment_2_391aa62e4d8c496a58be4707522d8edb._comment b/doc/forum/folder_size_question/comment_2_391aa62e4d8c496a58be4707522d8edb._comment
new file mode 100644
index 000000000..f031deb81
--- /dev/null
+++ b/doc/forum/folder_size_question/comment_2_391aa62e4d8c496a58be4707522d8edb._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="comment 2"
+ date="2014-05-16T17:15:59Z"
+ content="""
+I don't recall doing anything besides using the git annex assistant...
+
+That link is just a screen shot...
+
+anyway here is more info:
+
+du -h -s git-annex/*
+ 38M git-annex/Finance
+8.0K git-annex/archive
+
+BUT if I check the folder git-annex's properties it says:
+
+45 980 806 bytes (80,4 MB on disk) for 8 420 items
+
+Is that normal?
+"""]]
diff --git a/doc/forum/folder_size_question/comment_3_1e850dbe36fafe0505b60dd2ce0bd5d7._comment b/doc/forum/folder_size_question/comment_3_1e850dbe36fafe0505b60dd2ce0bd5d7._comment
new file mode 100644
index 000000000..978ffcf51
--- /dev/null
+++ b/doc/forum/folder_size_question/comment_3_1e850dbe36fafe0505b60dd2ce0bd5d7._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 3"
+ date="2014-05-16T19:07:10Z"
+ content="""
+Sounds to me like some GUI thing that is confused in some way. Which is, in my experience not unusual when it comes to GUI things and the actual size of files on disk. I'd trust `du`.
+"""]]
diff --git a/doc/forum/folder_size_question/comment_4_907f3b1cfe745abf94a6a8ba0dbd4396._comment b/doc/forum/folder_size_question/comment_4_907f3b1cfe745abf94a6a8ba0dbd4396._comment
new file mode 100644
index 000000000..a32e9177a
--- /dev/null
+++ b/doc/forum/folder_size_question/comment_4_907f3b1cfe745abf94a6a8ba0dbd4396._comment
@@ -0,0 +1,25 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="comment 4"
+ date="2014-05-17T10:56:22Z"
+ content="""
+I thinks its all the small files.
+
+ du -hs /Users/ovi/Sharing/git-annex/
+ 77M /Users/ovi/Sharing/git-annex/
+
+ du -hs /Users/ovi/Sharing/git-annex/Finance/
+ 38M /Users/ovi/Sharing/git-annex/Finance/
+
+ du -hs /Users/ovi/Sharing/git-annex/.git/
+ 39M /Users/ovi/Sharing/git-annex/.git/
+
+The GUI shows:
+ 46 136 859 bytes (80,6 MB on disk) for 8 002 items
+
+And the hidden .git folder shows:
+ 7 373 616 bytes (41 MB on disk) for 7 625 items
+
+So apparently there are a lot of very small files, smaller than the blocksize hence the info is skewed? Anyway, I think its alright?
+"""]]
diff --git a/doc/forum/gadu_-_git-annex_disk_usage/comment_13_8e0e86ae716ff018025808f417e1f7f6._comment b/doc/forum/gadu_-_git-annex_disk_usage/comment_13_8e0e86ae716ff018025808f417e1f7f6._comment
new file mode 100644
index 000000000..b62b05ad8
--- /dev/null
+++ b/doc/forum/gadu_-_git-annex_disk_usage/comment_13_8e0e86ae716ff018025808f417e1f7f6._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkWHj0RxNMfuwvFzo2d-V6vBKOYwW_Fnfk"
+ nickname="Andrew"
+ subject="Update on determining disk usage"
+ date="2015-01-22T06:29:36Z"
+ content="""
+I just had a look at this question today as I learn git-annex. I think the commands have changed since the last comment. However, there remain several ways to determine disk usage, for example in the folder `Music`
+
+ git annex info Music
+
+but you could also use `du` with
+
+ du --human-readable --dereference Music
+"""]]
diff --git a/doc/forum/gcrypt_os_x_app_vs_brew.mdwn b/doc/forum/gcrypt_os_x_app_vs_brew.mdwn
new file mode 100644
index 000000000..98a2d5f5d
--- /dev/null
+++ b/doc/forum/gcrypt_os_x_app_vs_brew.mdwn
@@ -0,0 +1,18 @@
+Gcrypt remotes work when using the git-annex command bundled in the git-annex.app. But gcrypt doesn't work when git-annex is installed via home-brew (brew install git-annex).
+
+The initial push will work, any subsequent commands (push/pull) will fail with:
+
+ gpg: anonymous recipient; trying secret key...
+ gpg: anonymous recipient; trying secret key...
+ gpg: anonymous recipient; trying secret key...
+ gpg: anonymous recipient; trying secret key...
+ gpg: decryption failed: No secret key
+ gcrypt: Failed to decrypt manifest!
+
+In both cases (app/brew) it tries the same keys. The app version will use its own version of gpg, which will trigger password prompts. With the brew version gpgtools is used, so I won't get any prompts. (Keychain)
+
+I tried "echo i | gpg -e -R XX -R XX | gpg -d" with the same recipients as the repo. It works well.
+
+Has anybody hints or ideas what to try next?
+
+Best, Jean-Louis
diff --git a/doc/forum/gcrypt_os_x_app_vs_brew/comment_1_cce5e2c16720cc8e32a4a479f50ce6b3._comment b/doc/forum/gcrypt_os_x_app_vs_brew/comment_1_cce5e2c16720cc8e32a4a479f50ce6b3._comment
new file mode 100644
index 000000000..bcf094073
--- /dev/null
+++ b/doc/forum/gcrypt_os_x_app_vs_brew/comment_1_cce5e2c16720cc8e32a4a479f50ce6b3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Ganwell"
+ ip="178.174.3.221"
+ subject="Problem solved"
+ date="2014-08-14T23:53:05Z"
+ content="""
+It turns out gpgtools will save to wrong passphrase to the keychain without complaining. Thats why standard gpg worked and gpgtools didn't: There was a typo in the passphrase in the keychain.
+"""]]
diff --git a/doc/forum/gcrypt_os_x_app_vs_brew/comment_2_8df8ba1ccea0f68110593ed90a9cad6d._comment b/doc/forum/gcrypt_os_x_app_vs_brew/comment_2_8df8ba1ccea0f68110593ed90a9cad6d._comment
new file mode 100644
index 000000000..fcdfba41d
--- /dev/null
+++ b/doc/forum/gcrypt_os_x_app_vs_brew/comment_2_8df8ba1ccea0f68110593ed90a9cad6d._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 2"
+ date="2014-08-15T16:04:08Z"
+ content="""
+Note that you can avoid the trying of multiple keys by doing `git config gcrypt.publish-participants true` -- this is done by default by the assistant when setting up new gcrypt remotes. It needs my branch of git-remote-gcrypt, which is included in the osx app, I don't know which one is being used in brew.
+"""]]
diff --git a/doc/forum/gcrypt_os_x_app_vs_brew/comment_3_be4de1663a37f49a4e42d6b21c0178fe._comment b/doc/forum/gcrypt_os_x_app_vs_brew/comment_3_be4de1663a37f49a4e42d6b21c0178fe._comment
new file mode 100644
index 000000000..99f3b7cbe
--- /dev/null
+++ b/doc/forum/gcrypt_os_x_app_vs_brew/comment_3_be4de1663a37f49a4e42d6b21c0178fe._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="Ganwell"
+ ip="46.14.43.36"
+ subject="brew doesn't include git-remote-gcrypt"
+ date="2014-08-19T21:54:16Z"
+ content="""
+Brew doesn't include git-remote-gcrypt, so I installed your fork of it manually. That works well and if you use a symlink to include it in the PATH you can easily update (pull) the repo. If one can install git-remote-gcrypt using brew, I don't know how.
+
+Best, Jean-Louis
+"""]]
diff --git a/doc/forum/ghost_semitrusted_repositories.mdwn b/doc/forum/ghost_semitrusted_repositories.mdwn
new file mode 100644
index 000000000..9e00178b7
--- /dev/null
+++ b/doc/forum/ghost_semitrusted_repositories.mdwn
@@ -0,0 +1,28 @@
+I had one repo on HDD and another in an USB drive. After mount point changed, I went to the HDD repo folder and tried to use git remote-set url to point it to the new location, however I think I ended in a weird state. git-annex info shows this:
+
+ git-annex info
+ repository mode: indirect
+ trusted repositories: 0
+ semitrusted repositories: 5
+ 00000000-0000-0000-0000-000000000001 -- web
+ 26c0c4ba-6489-4416-a054-670d373f09bd -- juan@invasor.local:/Volumes/sapo_hfs/live/papers
+ 61158820-db14-45b9-b9f9-8619d956388e -- [usb_papers]
+ d4456c86-fa2b-43a7-a132-027915390cf6 -- usb_papers
+ fed56814-08c6-11e3-bf3c-af5da9f7f388 -- sapo [here]
+ untrusted repositories: 0
+ transfers in progress: none
+ available local disk space: 255.46 gigabytes (+1 megabyte reserved)
+ local annex keys: 1252
+ local annex size: 2.55 gigabytes
+ annexed files in working tree: 1297
+ size of annexed files in working tree: 2.7 gigabytes
+ bloom filter size: 16 mebibytes (0.3% full)
+ backend usage:
+ SHA256E: 2549
+
+usb_papers was the original usb repo, and now a new one [usb_papers] shows. webapp shows only sapo[here] and [usb_papers], the other 2 repos are unknown. I was digging around but couldn't find a way to remove them.
+Seems that the webapp managed to use the new URL, but said something about "fixing repo".
+Any suggestions?
+Thanks in advance.
+Best regards,
+ Juan
diff --git a/doc/forum/ghost_semitrusted_repositories/comment_1_99bea1a964da9c5603b8cfbdc19bcde8._comment b/doc/forum/ghost_semitrusted_repositories/comment_1_99bea1a964da9c5603b8cfbdc19bcde8._comment
new file mode 100644
index 000000000..ced8645e2
--- /dev/null
+++ b/doc/forum/ghost_semitrusted_repositories/comment_1_99bea1a964da9c5603b8cfbdc19bcde8._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-11T19:40:32Z"
+ content="""
+ 61158820-db14-45b9-b9f9-8619d956388e -- [usb_papers]
+
+This is the git remote you currently have set up.
+
+ d4456c86-fa2b-43a7-a132-027915390cf6 -- usb_papers
+
+This is the old remote from before.
+
+Take a look at the repository in the USB drive, and see what its annex.uuid is set to. git-annex doesn't change the UUID after a repository is set up, so the fact that you have two different UUIDs is puzzling.
+
+If you really wanted to, you could remove the old repository from the list by running: `git annex dead d4456c86-fa2b-43a7-a132-027915390cf6`
+But I would want to get to the bottom of what happened before doing that.
+"""]]
diff --git a/doc/forum/ghost_semitrusted_repositories/comment_2_fe5fe5539d06c6b1ef69f3ed805f1ab4._comment b/doc/forum/ghost_semitrusted_repositories/comment_2_fe5fe5539d06c6b1ef69f3ed805f1ab4._comment
new file mode 100644
index 000000000..931783a0e
--- /dev/null
+++ b/doc/forum/ghost_semitrusted_repositories/comment_2_fe5fe5539d06c6b1ef69f3ed805f1ab4._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmTNrhkVQ26GBLaLD5-zNuEiR8syTj4mI8"
+ nickname="Juan"
+ subject="web remote"
+ date="2014-07-15T13:19:42Z"
+ content="""
+Ok. Got it. And what's up with the web remote? Why is it there, I didn't add that one.
+"""]]
diff --git a/doc/forum/ghost_semitrusted_repositories/comment_3_588325ef52c80cfc67d1dd80a9d5bd13._comment b/doc/forum/ghost_semitrusted_repositories/comment_3_588325ef52c80cfc67d1dd80a9d5bd13._comment
new file mode 100644
index 000000000..1cdceff0d
--- /dev/null
+++ b/doc/forum/ghost_semitrusted_repositories/comment_3_588325ef52c80cfc67d1dd80a9d5bd13._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 3"
+ date="2014-07-15T18:56:31Z"
+ content="""
+It's there to represent the world wide web when using eg, `git annex addurl`
+"""]]
diff --git a/doc/forum/git-annes_assistant_+_MAC_OSX_questions.mdwn b/doc/forum/git-annes_assistant_+_MAC_OSX_questions.mdwn
new file mode 100644
index 000000000..d32e01a6e
--- /dev/null
+++ b/doc/forum/git-annes_assistant_+_MAC_OSX_questions.mdwn
@@ -0,0 +1,16 @@
+After spending the whole last night playing with it, I think I have it figured out:
+
+it runs on my Macbook and I have added a free 50GB box.com account as archive and an S3 bucket as full-backup and set the min. number of file occurrences to keep to 2 so IF I delete anything on my Macbook, this should make sure I definitely have 2 more occurrences of each file on two separate storages.
+
+BUT here come the problems/questions
+
+- say I add a folder called: Documents, it has now apparently successfully synced to box.com and S3. I say apparently because there is no tool in the assistant to check
+- I can't seem to figure out how to delete the log of the assistant, its getting quite longish
+- I can't seem to figure out how to upgrade from 5.20140420 to 5.20140421
+- I move a file from a local repo to the archive folder but nothing happens except git-annex recording the move: (Recording state in git...) /Users/ovi/Sharing/git-annex/Finance/1-564 Erkl. z. Gebiets- u. Steuereigenschaft 08_04.pdf still has writers, not adding [2014-05-09 17:22:43 SAST] Committer: Committing changes to git
+- the assistant doesn'T have any kind of gui for retrieving/deleting/finding stuff - I'm no stranger to the command line but I can't figure out how to add the /Applications/gitannex.app.5.20140421/Contents/MacOS to my path and if I go there and run runshell, most git-annex commands tell me: not in a git repository so all I can do right now, is look at things :-/
+- reading the description on the kickstarter page I must say I expected more. This is in no way comparable to Dropbox.
+
+Don't get me wrong, this is the most promising project of its kind I came across if I can be pointed in the right direction :-)
+
+P.S. How does it work on the "inside"? i.e. I edit a file and git-annex picks it up and "syncs" - what is synced? The whole file? A diff? How can one restore older versions or even look to see what versions are available?
diff --git a/doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_1_e661f31acd08a6459842f7f95e5c062b._comment b/doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_1_e661f31acd08a6459842f7f95e5c062b._comment
new file mode 100644
index 000000000..9b524ea3b
--- /dev/null
+++ b/doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_1_e661f31acd08a6459842f7f95e5c062b._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="partially solved"
+ date="2014-05-11T09:32:32Z"
+ content="""
+I managed to add the path and now I can use git annex command line.
+All my other questions and remarks are still open though :-)
+"""]]
diff --git a/doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_2_e71a9d1fcf1f945fec0b7834b6038e91._comment b/doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_2_e71a9d1fcf1f945fec0b7834b6038e91._comment
new file mode 100644
index 000000000..d11f641a6
--- /dev/null
+++ b/doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_2_e71a9d1fcf1f945fec0b7834b6038e91._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkYmMFDdf3GJ9Oba6NCVkzGc4JyB9WavMs"
+ nickname="Xinruo"
+ subject="comment 2"
+ date="2014-05-11T15:15:50Z"
+ content="""
+> say I add a folder called: Documents, it has now apparently successfully synced to box.com and S3. I say apparently because there is no tool in the assistant to check
+
+From the command line, git annex whereis FILE will tell you which remotes have the file, or git annex list will list out this for a directory
+
+> I can't seem to figure out how to delete the log of the assistant, its getting quite longish
+
+They live in .git/annex/daemon.log*
+
+> I can't seem to figure out how to upgrade from 5.20140420 to 5.20140421
+
+> I move a file from a local repo to the archive folder but nothing happens except git-annex recording the move: (Recording state in git...) /Users/ovi/Sharing/git-annex/Finance/1-564 Erkl. z. Gebiets- u. Steuereigenschaft 08_04.pdf still has writers, not adding [2014-05-09 17:22:43 SAST] Committer: Committing changes to git
+
+It says the pdf still has writers.. Maybe the file is locked by another program? In this case the file is not going to be annexed, I believe, until the lock is revoked.
+
+"""]]
diff --git a/doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_3_372d9da8295d093b8b316f0a48b60ee1._comment b/doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_3_372d9da8295d093b8b316f0a48b60ee1._comment
new file mode 100644
index 000000000..93f9ef414
--- /dev/null
+++ b/doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_3_372d9da8295d093b8b316f0a48b60ee1._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="comment 3"
+ date="2014-05-12T11:03:59Z"
+ content="""
+So basically, I need to check the log for a specific commit and then restore that one?
+No way to list i.e. all commits for a folder and restore the whole folder?
+Or list all commits for a fiel and then restore that one?
+
+Still learning all of this, any hints welcome.
+"""]]
diff --git a/doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_4_573537a49e082515bfb1be84c91b5d1b._comment b/doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_4_573537a49e082515bfb1be84c91b5d1b._comment
new file mode 100644
index 000000000..01aac5111
--- /dev/null
+++ b/doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_4_573537a49e082515bfb1be84c91b5d1b._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="comment 4"
+ date="2014-06-21T13:03:11Z"
+ content="""
+Any feedback on my last questions?
+Is there a road map somewhere? Need to figure out if this is going somewhere soon or if I should look for another solution?
+Any other kickstarter campaigns you're planning? Wouldn't mind chipping in if it means this goes somewhere fast(er) ;-)
+"""]]
diff --git a/doc/forum/git-annex:_map:_1_failed.mdwn b/doc/forum/git-annex:_map:_1_failed.mdwn
new file mode 100644
index 000000000..10be60ca5
--- /dev/null
+++ b/doc/forum/git-annex:_map:_1_failed.mdwn
@@ -0,0 +1,12 @@
+What exactly does that mean?
+I got that while exploring the git annex command:
+
+shiny-2:git-annex ovi$ pwd
+/Users/ovi/Sharing/git-annex
+shiny-2:git-annex ovi$ git annex map
+map /Users/ovi/Sharing/git-annex ok
+
+ running: dot -Tx11 /Users/ovi/Sharing/git-annex/.git/annex/map.dot
+
+failed
+git-annex: map: 1 failed
diff --git a/doc/forum/git-annex:_map:_1_failed/comment_1_35ff3256e823ab8cfc53276a2123ad5f._comment b/doc/forum/git-annex:_map:_1_failed/comment_1_35ff3256e823ab8cfc53276a2123ad5f._comment
new file mode 100644
index 000000000..d1beb5909
--- /dev/null
+++ b/doc/forum/git-annex:_map:_1_failed/comment_1_35ff3256e823ab8cfc53276a2123ad5f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-05-16T16:29:54Z"
+ content="""
+`dot` is a command from the graphviz package. Perhaps you do not have it installed.
+"""]]
diff --git a/doc/forum/git-annex:_map:_1_failed/comment_2_b0826073ebbd2847f4ab0d9bdba2dce5._comment b/doc/forum/git-annex:_map:_1_failed/comment_2_b0826073ebbd2847f4ab0d9bdba2dce5._comment
new file mode 100644
index 000000000..b8841dd36
--- /dev/null
+++ b/doc/forum/git-annex:_map:_1_failed/comment_2_b0826073ebbd2847f4ab0d9bdba2dce5._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="comment 2"
+ date="2014-05-16T17:21:09Z"
+ content="""
+indeed I didn't have it... was it stated somewhere that I need it?
+
+Busy installing it now... going to kill my 3g Connection :-/
+
+sudo port install graphviz
+---> Computing dependencies for graphviz
+---> Dependencies to be installed: autoconf m4 automake fontconfig freetype gd2 jpeg libvpx tiff xpm xorg-libXext xorg-libX11 xorg-kbproto xorg-libXau xorg-xproto xorg-libXdmcp xorg-libxcb xorg-libpthread-stubs xorg-xcb-proto xorg-xextproto xorg-libXt xorg-libsm xorg-libice gts netpbm jasper jbigkit libLASi pango Xft2 xrender xorg-renderproto cairo libpixman xorg-xcb-util gobject-introspection libtool harfbuzz graphite2 poppler curl lcms2 openjpeg15 poppler-data urw-fonts webp xorg-libXaw xorg-libXmu
+"""]]
diff --git a/doc/forum/git-annex_and_tagfs/comment_2_8769d6e57061023c0828af3e38faafba._comment b/doc/forum/git-annex_and_tagfs/comment_2_8769d6e57061023c0828af3e38faafba._comment
new file mode 100644
index 000000000..2bb4ec273
--- /dev/null
+++ b/doc/forum/git-annex_and_tagfs/comment_2_8769d6e57061023c0828af3e38faafba._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="exaos"
+ subject="Be eager for the TagFS features on git-annex."
+ date="2014-12-09T01:15:23Z"
+ content="""
+Cann't wait to see these implemented. But I don't know programming. :-(
+"""]]
diff --git a/doc/forum/git-annex_and_tagfs/comment_3_d96948c444f9f485a329420b7c9e3b16._comment b/doc/forum/git-annex_and_tagfs/comment_3_d96948c444f9f485a329420b7c9e3b16._comment
new file mode 100644
index 000000000..4bc1ccc1f
--- /dev/null
+++ b/doc/forum/git-annex_and_tagfs/comment_3_d96948c444f9f485a329420b7c9e3b16._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="Xyem"
+ subject="comment 3"
+ date="2014-12-15T08:38:58Z"
+ content="""
+Do the [metadata views](http://git-annex.branchable.com/tips/metadata_driven_views/) not do what you want?
+"""]]
diff --git a/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__.mdwn b/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__.mdwn
new file mode 100644
index 000000000..e091460dc
--- /dev/null
+++ b/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__.mdwn
@@ -0,0 +1 @@
+So, you provide ARM build. But you probably don't know that my NAS box runs OABI. No, you don't know, you can't know, and you shouldn't know. The only thing worth knowing is that writing great software in obscure and esoteric languages drastically limits its usage, impact, and collaboration around it. So, any idea of writing git-annex implementation in a sane, interpreted, "just works" language, e.g. Python? Thanks.
diff --git a/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_1_29eda7ec1519f339d5b3601559fe0bb0._comment b/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_1_29eda7ec1519f339d5b3601559fe0bb0._comment
new file mode 100644
index 000000000..1cf6c84d6
--- /dev/null
+++ b/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_1_29eda7ec1519f339d5b3601559fe0bb0._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://svario.it/gioele"
+ nickname="gioele"
+ subject="comment 1"
+ date="2014-08-24T10:41:58Z"
+ content="""
+> git-annex implementation in a sane, interpreted, \"just works\" language, e.g. Python? Thanks.
+
+Good luck finding anything that works on OARM. Python itself does not support OABI:
+
+> This issue remains as \"won't fix\". ARM is supported; just OABI is not, and never will be. If anybody needs that, they will have to maintain their own fork of Python.
+
+(from <http://bugs.python.org/issue1762561#msg158974>)
+"""]]
diff --git a/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_2_a2b2183ee86377cdfef7c3acbe9552fb._comment b/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_2_a2b2183ee86377cdfef7c3acbe9552fb._comment
new file mode 100644
index 000000000..32318b404
--- /dev/null
+++ b/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_2_a2b2183ee86377cdfef7c3acbe9552fb._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawld54zdyk6b0W4jXnssSO_j2Nn3W1uVsUE"
+ nickname="Paul"
+ subject="comment 2"
+ date="2014-08-24T11:04:21Z"
+ content="""
+Python on this system \"just works\". That's because Python is a project with a real community, so if one pundit said \"not supported\", dozen of people shrugged and typed \"make\", then packed up result for thousands to use.
+
+But don't get carried away by OABI, that was just one random example how deployment of git-annex is problematic. There're bigger issues like community involvement, being able to investigate and resolve issues, submit patches, bring new working ideas, make git-annex development and lifecycle sustainable, in the end - as vividly cared by the author.
+
+"""]]
diff --git a/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_3_5605d42a68b3140cb660eb710ce5031e._comment b/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_3_5605d42a68b3140cb660eb710ce5031e._comment
new file mode 100644
index 000000000..8e613dd21
--- /dev/null
+++ b/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_3_5605d42a68b3140cb660eb710ce5031e._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawld54zdyk6b0W4jXnssSO_j2Nn3W1uVsUE"
+ nickname="Paul"
+ subject="comment 3"
+ date="2014-08-24T18:29:23Z"
+ content="""
+Sure, that's the plan. But first I'm doing my homework to understand how it got to that and how community copes with that. Maybe I don't get something and every open-source project should have a notice like: \"Installation from scratch. This is not recommended.\" (http://git-annex.branchable.com/install/). Interested in building software you run? Interested to help? Get lost, you won't get it. Am I surprised? Nope, I'm doing my homework and know where that Haskell thing came from. A piece of Microsoft was largely involved with it, so no surprise of such attitudes.
+
+Surely I'm not the only one who got jaundiced eye on git-annex: https://github.com/tv42/big : \"big is not like git-annex, because: it's not written in Haskell, so it might even work across distribution upgrades and platforms\". Certainly, stories of cvsup and unison, which are now where they should be - rest in peace, didn't help. So, once again, I'm interested to know how other people deal with this lack of proper compilation instructions, ability to get simple and easy tweaks, etc. - short of not using it, which seems to be a popular choice, despite all the git-annex coolness (I for one have been having its deployment in my queue fro half a year, instead of spending exactly a weekend to do tweaks I need and contribute them back).
+
+
+"""]]
diff --git a/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_4_f56508164c71b2080150bc354e5de4b7._comment b/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_4_f56508164c71b2080150bc354e5de4b7._comment
new file mode 100644
index 000000000..8afa4c6fb
--- /dev/null
+++ b/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_4_f56508164c71b2080150bc354e5de4b7._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawld54zdyk6b0W4jXnssSO_j2Nn3W1uVsUE"
+ nickname="Paul"
+ subject="comment 4"
+ date="2014-08-24T18:31:25Z"
+ content="""
+Previous comment was written in response to a comment suggesting me to rewrite it in Python myself - which was then removed for some reason.
+
+"""]]
diff --git a/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_5_c8cdb0faa342fe1f9407ad4c97e6bc3c._comment b/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_5_c8cdb0faa342fe1f9407ad4c97e6bc3c._comment
new file mode 100644
index 000000000..e58191a7f
--- /dev/null
+++ b/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_5_c8cdb0faa342fe1f9407ad4c97e6bc3c._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="Ganwell"
+ ip="178.174.3.166"
+ subject="How I solved it..."
+ date="2014-08-26T23:03:09Z"
+ content="""
+I decided it was a bit harsh, so I removed comment. Here is how I solved problem:
+
+I have a server without much storage which runs the git-annex process, the data is stored on the NAS mounted via iSCSI. I never even thought of trying to compile git-annex on a NAS. I did things like that many years ago and it used to much time, whether the language was, common or not, didn't change much. Missing floating point units on the NAS killed performance of the programms I wanted to run anyways.
+"""]]
diff --git a/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_6_25ce5eddeb1b65aacd5d86e09c3719b8._comment b/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_6_25ce5eddeb1b65aacd5d86e09c3719b8._comment
new file mode 100644
index 000000000..f9fa78e38
--- /dev/null
+++ b/doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_6_25ce5eddeb1b65aacd5d86e09c3719b8._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.22"
+ subject="comment 6"
+ date="2014-09-16T19:19:00Z"
+ content="""
+There is too much negativity on this page, starting perhaps with its title.
+
+The \"this is not recommended\" is not because we don't want people to build git-annex from source. It's to try to dissuade users who just want to get git-annex installed, and who would be scared off by a transient build failure, from building from source, when there are many builds provided by Linux distributions, etc that would be better choices for them to get started. Hopefully the new page and new wording gets this across better: \"Experienced users should not find it too hard to build and install it from source.\"
+
+If someone wants to reimplement git-annex, or parts of it, I think that the existing documentation (eg [[internals]]) should get them most of the way there.
+
+"""]]
diff --git a/doc/forum/git-annex_sync_content_available_from_which_version__63__.mdwn b/doc/forum/git-annex_sync_content_available_from_which_version__63__.mdwn
new file mode 100644
index 000000000..511a0ba0c
--- /dev/null
+++ b/doc/forum/git-annex_sync_content_available_from_which_version__63__.mdwn
@@ -0,0 +1,12 @@
+Hi,
+
+I'm on a centos 6.4 64bits & installed git-annex
+version : git-annex-3.20120522-2.1.el6.x86_64
+
+From my understanding of the help page, I should be able to sync content with :
+
+git annex sync --content
+
+but it is not recognized. The help tells me I may be able to use "get" but I'm unclear how...
+
+Thanks for any help
diff --git a/doc/forum/git-annex_sync_content_available_from_which_version__63__/comment_1_104e1b7e7643844f221f85dcbe9c9c4b._comment b/doc/forum/git-annex_sync_content_available_from_which_version__63__/comment_1_104e1b7e7643844f221f85dcbe9c9c4b._comment
new file mode 100644
index 000000000..3b7967e32
--- /dev/null
+++ b/doc/forum/git-annex_sync_content_available_from_which_version__63__/comment_1_104e1b7e7643844f221f85dcbe9c9c4b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-06-05T17:32:33Z"
+ content="""
+This feature was added in 5.20140210, which can be easily seen by reading the changelog.
+"""]]
diff --git a/doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved.mdwn b/doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved.mdwn
new file mode 100644
index 000000000..a4386add7
--- /dev/null
+++ b/doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved.mdwn
@@ -0,0 +1 @@
+The settings don't seem to be saving. If I edit it, then immediately open the file again, the settings are what they were before. This happens no matter what repo I do it from.
diff --git a/doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_1_81111f59caea9f70cb9d597381e42c96._comment b/doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_1_81111f59caea9f70cb9d597381e42c96._comment
new file mode 100644
index 000000000..27a719853
--- /dev/null
+++ b/doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_1_81111f59caea9f70cb9d597381e42c96._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 1"
+ date="2014-10-12T17:26:35Z"
+ content="""
+Please paste the line that you've configured, and then show how it looks when you open vicfg again.
+"""]]
diff --git a/doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_2_8ca9156d21d9f3db0d83d6aa9b69caa0._comment b/doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_2_8ca9156d21d9f3db0d83d6aa9b69caa0._comment
new file mode 100644
index 000000000..467d45740
--- /dev/null
+++ b/doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_2_8ca9156d21d9f3db0d83d6aa9b69caa0._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="ghen1"
+ ip="66.41.70.34"
+ subject="comment 2"
+ date="2014-10-12T21:03:01Z"
+ content="""
+The custom settings I had made before (the rest are still commented out):
+trust a8372263-6eba-47e2-9604-3e2c9bbb6d42 = trusted
+wanted 3e2bcb1e-39ad-4863-a9ce-a18a262644c1 = present or (not include=/Books/*)
+wanted a8372263-6eba-47e2-9604-3e2c9bbb6d42 = present or include=/Books/*
+
+I am trying to comment them out again.
+
+Based on your answer, I guessed that these settings don't just reset to default when they are commented out, so I tried changing the above trusted setting to semitrusted, and sure enough it worked.
+
+So it seems once these settings are made they can't be commented out again, and any invalid settings are ignored?
+"""]]
diff --git a/doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_3_9da6ca0250ab0dcfc9a012df75e2e711._comment b/doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_3_9da6ca0250ab0dcfc9a012df75e2e711._comment
new file mode 100644
index 000000000..375ee1254
--- /dev/null
+++ b/doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_3_9da6ca0250ab0dcfc9a012df75e2e711._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 3"
+ date="2014-10-12T23:26:27Z"
+ content="""
+vicfg won't accept invalid input, if you make a type in the syntax it'll land you back in the editor with the problem line marked.
+
+But right, commenting out a line does not reset it to the default. Basically, once one of these settings is changed, there is no longer a default to go back to. You have to leave the line uncommented and change the value to what you want it to be. Ie, \"= semitrusted\" for the trust levels, and \"= \" for the wanted expressions.
+
+I think that vicfg should avoid this [[todo/vicfg_comment_gotcha]] and have filed that as a todo item.
+"""]]
diff --git a/doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_4_55c52c45f3aaddfb63a1f53efe2ee582._comment b/doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_4_55c52c45f3aaddfb63a1f53efe2ee582._comment
new file mode 100644
index 000000000..0e73c4869
--- /dev/null
+++ b/doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_4_55c52c45f3aaddfb63a1f53efe2ee582._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2014-10-20T15:40:38Z"
+ content="""
+Right. In the meantime, I've fixed the behavior of vicfg when deleting
+lines, so it resets them to the default automatically.
+"""]]
diff --git a/doc/forum/git:___39__annex__39___is_not_a_git_command_error_after_installing.mdwn b/doc/forum/git:___39__annex__39___is_not_a_git_command_error_after_installing.mdwn
new file mode 100644
index 000000000..ac6560e49
--- /dev/null
+++ b/doc/forum/git:___39__annex__39___is_not_a_git_command_error_after_installing.mdwn
@@ -0,0 +1,38 @@
+Installed git and git annex precisely as directed on my Windows 7 system, but 'git annex test' fails with above mentioned error - as if it's not been installed.
+I tried uninstalling and reinstalling
+
+These are the contents of my git directory (from git bash prompt):
+
+-rw-r--r-- 1 iainso Administ 708 Dec 17 21:23 Git Bash.vbs
+
+-rw-r--r-- 1 iainso Administ 46106 Dec 17 21:23 ReleaseNotes.rtf
+
+drwxr-xr-x 147 iainso Administ 40960 Jan 29 14:44 bin
+
+drwxr-xr-x 51 iainso Administ 12288 Jan 29 16:10 cmd
+
+drwxr-xr-x 3 iainso Administ 0 Jan 29 14:44 doc
+
+drwxr-xr-x 13 iainso Administ 4096 Jan 29 14:44 etc
+
+-rw-r--r-- 1 iainso Administ 103 Jan 28 18:38 git-annex-autostart.vbs
+
+-rw-r--r-- 1 iainso Administ 232368 Jan 28 18:38 git-annex-licenses.txt
+
+-rwxr-xr-x 1 iainso Administ 49799 Jan 29 16:10 git-annex-uninstall.exe
+
+-rw-r--r-- 1 iainso Administ 88 Jan 28 18:38 git-annex-webapp.vbs
+
+drwxr-xr-x 4 iainso Administ 0 Jan 29 14:44 git-cheetah
+
+drwxr-xr-x 11 iainso Administ 4096 Jan 29 14:44 lib
+
+drwxr-xr-x 3 iainso Administ 0 Jan 29 14:43 libexec
+
+drwxr-xr-x 9 iainso Administ 0 Jan 29 14:44 share
+
+drwxr-xr-x 5 iainso Administ 0 Jan 29 14:44 ssl
+
+-rw-r--r-- 1 iainso Administ 635621 Jan 29 14:44 unins000.dat
+
+-rwxr-xr-x 1 iainso Administ 1244929 Jan 29 14:42 unins000.exe
diff --git a/doc/forum/git:___39__annex__39___is_not_a_git_command_error_after_installing/comment_1_8a2e3be32800b7b8a6fa78bbdcba7608._comment b/doc/forum/git:___39__annex__39___is_not_a_git_command_error_after_installing/comment_1_8a2e3be32800b7b8a6fa78bbdcba7608._comment
new file mode 100644
index 000000000..b856d79fd
--- /dev/null
+++ b/doc/forum/git:___39__annex__39___is_not_a_git_command_error_after_installing/comment_1_8a2e3be32800b7b8a6fa78bbdcba7608._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk53Hn5PfMJ9Y0rmLdAeRGmgq7XSGWcoNA"
+ nickname="Iain"
+ subject="comment 1"
+ date="2015-01-29T16:28:59Z"
+ content="""
+Solved it, you need to add git/cmd to your windows path variable
+"""]]
diff --git a/doc/forum/git:___39__annex__39___is_not_a_git_command_error_after_installing/comment_2_451b3c89d1b98212d5c21efa4e535424._comment b/doc/forum/git:___39__annex__39___is_not_a_git_command_error_after_installing/comment_2_451b3c89d1b98212d5c21efa4e535424._comment
new file mode 100644
index 000000000..9d09e096d
--- /dev/null
+++ b/doc/forum/git:___39__annex__39___is_not_a_git_command_error_after_installing/comment_2_451b3c89d1b98212d5c21efa4e535424._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2015-02-04T17:51:26Z"
+ content="""
+Msysgit will add itself to the PATH if you check that box at installation
+time. If not, you probably can't run "git" either..
+"""]]
diff --git a/doc/forum/git_annex_assistant_-_Changing_repository_information.mdwn b/doc/forum/git_annex_assistant_-_Changing_repository_information.mdwn
new file mode 100644
index 000000000..c4ef39a8f
--- /dev/null
+++ b/doc/forum/git_annex_assistant_-_Changing_repository_information.mdwn
@@ -0,0 +1 @@
+Here's one thing I don't fully understand yet. If I add a remote repository, like an archive repository on Box—or if I want to change a transfer repository to an archive repository—do I need to add it or change it separately on each of my computers? Or just one?
diff --git a/doc/forum/git_annex_assistant_-_Changing_repository_information/comment_1_cde71a410200a7478180748fdcde0352._comment b/doc/forum/git_annex_assistant_-_Changing_repository_information/comment_1_cde71a410200a7478180748fdcde0352._comment
new file mode 100644
index 000000000..fa0c61517
--- /dev/null
+++ b/doc/forum/git_annex_assistant_-_Changing_repository_information/comment_1_cde71a410200a7478180748fdcde0352._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 1"
+ date="2014-04-17T20:59:43Z"
+ content="""
+This information is stored on the git-annex branch, and so it is synced between repositories with the rest of git-annex's data. You only need to change it in one place.. But it's also fine to change it in multiple places if necessary.
+"""]]
diff --git a/doc/forum/git_annex_assistant_repository_history__63__.mdwn b/doc/forum/git_annex_assistant_repository_history__63__.mdwn
new file mode 100644
index 000000000..d357b7887
--- /dev/null
+++ b/doc/forum/git_annex_assistant_repository_history__63__.mdwn
@@ -0,0 +1,7 @@
+Hi,
+
+Even after googling for a while, I'm still having a hard time finding an answer for this:
+
+How can I access the revision history information for an annex-assistant repository? For example, to recover a file on one computer that another computer deleted. Or, to view how another computer modified a file.
+
+Thanks!
diff --git a/doc/forum/git_annex_assistant_repository_history__63__/comment_1_6f87f31e18cefedcc6bce95dbeb85a0b._comment b/doc/forum/git_annex_assistant_repository_history__63__/comment_1_6f87f31e18cefedcc6bce95dbeb85a0b._comment
new file mode 100644
index 000000000..7425ef1eb
--- /dev/null
+++ b/doc/forum/git_annex_assistant_repository_history__63__/comment_1_6f87f31e18cefedcc6bce95dbeb85a0b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-01-15T18:59:01Z"
+ content="""
+The repository is just a git repository, so you can use whatever git tools
+you like to examine its history. For example, gitk.
+"""]]
diff --git a/doc/forum/git_annex_drop_not_freeing_space_on_filesystem.mdwn b/doc/forum/git_annex_drop_not_freeing_space_on_filesystem.mdwn
new file mode 100644
index 000000000..93f64f78c
--- /dev/null
+++ b/doc/forum/git_annex_drop_not_freeing_space_on_filesystem.mdwn
@@ -0,0 +1,25 @@
+I am using git-annex to store the output of a build process that produces large binary files (~1GB). These files are built on a number of workers which then commit the files to a central server (git annex add && copy to origin)
+
+I am trying to delete some of the older builds but have been unable to see any disk space be freed on the server (Disk usage is identical before and after the delete).
+
+ df -h
+ mcchicken-srv://repo 284G 114G 157G 43% /srv/repo
+
+To delete the files I have performed the following:
+
+* git clone <repo-url>
+* git annex drop <1gb_file>
+* git rm <1gb_file>
+* git commit
+* git annex sync
+* [log into server]
+* git annex sync
+* git annex unused
+* git annex dropunused
+
+
+I have also tried other variations of the above technique that I have found online, but to no avail.
+
+In all cases the files appear to not be in the repo when a clone is performed, However the disk usage on the server never decreases.
+
+How would I delete the older builds in a manner that will free up disk space?
diff --git a/doc/forum/git_annex_drop_not_freeing_space_on_filesystem/comment_1_ce1b32c2765edb695e5d9dc8f0ac86e3._comment b/doc/forum/git_annex_drop_not_freeing_space_on_filesystem/comment_1_ce1b32c2765edb695e5d9dc8f0ac86e3._comment
new file mode 100644
index 000000000..eb0903def
--- /dev/null
+++ b/doc/forum/git_annex_drop_not_freeing_space_on_filesystem/comment_1_ce1b32c2765edb695e5d9dc8f0ac86e3._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-09T17:09:43Z"
+ content="""
+`git annex drop` removes the file's content from the local repository.
+It does not affect other repositories, such as in your case the server.
+You could use `git annex drop --from origin` to remove the file from
+the origin repository.
+
+If `git annex unused` is not listing the deleted file as unused, there
+must be some git tag or branch that still refers to it.
+
+Also, `git annex dropunused` won't remove the last copy of a file unless you pass
+`--force`
+"""]]
diff --git a/doc/forum/git_annex_ls___47___metadata_in_git_annex_whereis/comment_3_24c54ed70220974b98700bf717d1e770._comment b/doc/forum/git_annex_ls___47___metadata_in_git_annex_whereis/comment_3_24c54ed70220974b98700bf717d1e770._comment
new file mode 100644
index 000000000..67ff59d32
--- /dev/null
+++ b/doc/forum/git_annex_ls___47___metadata_in_git_annex_whereis/comment_3_24c54ed70220974b98700bf717d1e770._comment
@@ -0,0 +1,29 @@
+[[!comment format=mdwn
+ username="sudoman"
+ ip="216.15.125.93"
+ subject="ls symlink workaround; idea for a solution"
+ date="2014-09-29T18:58:23Z"
+ content="""
+as a workaround, you could make a bash alias for `ls -l` -> `ls -lL`. the problem with this is that links to other links are fully dereferenced.
+
+what looks like this in a non-git-annex directory with `ls -lh`:
+
+ total 3.8M
+ -rw-r--r-- 1 sudoman sudoman 3.8M Sep 29 13:56 42x3551_02.pdf
+ lrwxrwxrwx 1 sudoman sudoman 14 Sep 29 14:00 tmp -> 42x3551_02.pdf
+
+looks like this in an indirect git annex repo with `ls -lhL`:
+
+ total 7.5M
+ -r--r--r-- 1 sudoman sudoman 3.8M Sep 29 13:56 42x3551_02.pdf
+ -r--r--r-- 1 sudoman sudoman 3.8M Sep 29 13:56 tmp
+
+
+the ls alias is a bit hackish, but for some purposes it's an improvement.
+
+rsync may work as desired when using a command like `rsync -l --safe-links` (haven't tried it. users might want to experiment by adding `--exclude` to that command.)
+
+
+a potential solution for ls (and cp) could be the inclusion of a patched version under `git annex util ls`. writing shim programs using `LD_PRELOAD` instead of patching may drastically reduce the amount of code needing future security updates.
+
+"""]]
diff --git a/doc/forum/git_annex_sync:_only_git-annex.mdwn b/doc/forum/git_annex_sync:_only_git-annex.mdwn
new file mode 100644
index 000000000..84ae140cd
--- /dev/null
+++ b/doc/forum/git_annex_sync:_only_git-annex.mdwn
@@ -0,0 +1,3 @@
+Hi,
+
+i have an already existing git repository with a branch (*master*) and i added git annex to it (*git annex init*). Now i want to synchronise the file tracking information with annex through *git annex sync*, but keep the master branch unsynchronised (i want push/pull it manually as there are not only annexed files but also code). What is the best approach for my setup?
diff --git a/doc/forum/git_annex_sync:_only_git-annex/comment_1_2be68ed36a1e6bfc896d5aea9463d3c7._comment b/doc/forum/git_annex_sync:_only_git-annex/comment_1_2be68ed36a1e6bfc896d5aea9463d3c7._comment
new file mode 100644
index 000000000..bf90184aa
--- /dev/null
+++ b/doc/forum/git_annex_sync:_only_git-annex/comment_1_2be68ed36a1e6bfc896d5aea9463d3c7._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-20T15:19:13Z"
+ content="""
+Sounds like you should just use normal `git push`/`git pull` commands.
+Works fine with git-annex.
+
+Just be sure to include the `git-annex` branch in your pushes.
+Eg, `git push origin master git-annex`
+
+You'll probably want to run `git annex merge` after pulling, to merge the
+local and remote git-annex branches.
+"""]]
diff --git a/doc/forum/git_annex_sync:_only_git-annex/comment_2_50e137e4d278dfd0103a41aff0cfa3a9._comment b/doc/forum/git_annex_sync:_only_git-annex/comment_2_50e137e4d278dfd0103a41aff0cfa3a9._comment
new file mode 100644
index 000000000..10f3792b3
--- /dev/null
+++ b/doc/forum/git_annex_sync:_only_git-annex/comment_2_50e137e4d278dfd0103a41aff0cfa3a9._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlog_5wIICaMcrKTexlFNA6IO6UTp323aE"
+ nickname="Torkaly"
+ subject="comment 2"
+ date="2014-10-22T08:56:43Z"
+ content="""
+Thank you for your response.
+
+So annex looks like it's not really designed to work with an existing git repository, but only standalone?!
+"""]]
diff --git a/doc/forum/git_annex_sync:_only_git-annex/comment_3_7753f8276478e0e05c10dba2b84bbc49._comment b/doc/forum/git_annex_sync:_only_git-annex/comment_3_7753f8276478e0e05c10dba2b84bbc49._comment
new file mode 100644
index 000000000..49a61c0b7
--- /dev/null
+++ b/doc/forum/git_annex_sync:_only_git-annex/comment_3_7753f8276478e0e05c10dba2b84bbc49._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 3"
+ date="2014-10-22T16:18:16Z"
+ content="""
+I struggle to see how you could draw that conclusion from what I said.
+
+git-annex will work fine in an existing git repository. You can mix regular git commands like `git add`, `git push`, `git pull`, `git merge` with git-annex commands like `git annex add`, `git annex copy --to origin`, `git annex get`, `git annex merge`, in the same repository.
+
+The `git annex sync` command effcetively runs `git commit; git pull; git annex merge; git push; git annex copy --to origin; git annex get`. If you don't want to run all those commands at once, you don't want to run `git annex sync`. That will not prevent you from using git-annex in any way.
+"""]]
diff --git a/doc/forum/git_annex_sync:_only_git-annex/comment_5_52010f21a15d76d68986aa1fba29aaf1._comment b/doc/forum/git_annex_sync:_only_git-annex/comment_5_52010f21a15d76d68986aa1fba29aaf1._comment
new file mode 100644
index 000000000..cee2a9bd2
--- /dev/null
+++ b/doc/forum/git_annex_sync:_only_git-annex/comment_5_52010f21a15d76d68986aa1fba29aaf1._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlog_5wIICaMcrKTexlFNA6IO6UTp323aE"
+ nickname="Torkaly"
+ subject="comment 5"
+ date="2014-10-29T18:51:29Z"
+ content="""
+Hi,
+
+thank you for your response. I just want to control my branches (master, dev and so on ...) by myself, without sync/master or sync/dev and without merging it automatically. But the git-annex branch should be populated between the repositories \"magically\" (some kind of \"git annex syncannex\"). As annex can't deliver such a basic functionality i assumed, that it was not designed to work with existing \"real\" git repositories.
+"""]]
diff --git a/doc/forum/git_annex_sync:_only_git-annex/comment_6_df94154fbbc4edbf7ff658f61bde48b5._comment b/doc/forum/git_annex_sync:_only_git-annex/comment_6_df94154fbbc4edbf7ff658f61bde48b5._comment
new file mode 100644
index 000000000..8772255eb
--- /dev/null
+++ b/doc/forum/git_annex_sync:_only_git-annex/comment_6_df94154fbbc4edbf7ff658f61bde48b5._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-31T20:25:40Z"
+ content="""
+I have explained clearly in comment #1 above how to do what you want to do,
+using git-annex, so it is a pity if still think that "annex
+can't deliver such a basic functionality".
+
+It can. I have explained how. I don't know how to explain any better.
+"""]]
diff --git a/doc/forum/git_annex_whereis_--json_output_with_two_variables_with_same_name.mdwn b/doc/forum/git_annex_whereis_--json_output_with_two_variables_with_same_name.mdwn
new file mode 100644
index 000000000..0cc7ae530
--- /dev/null
+++ b/doc/forum/git_annex_whereis_--json_output_with_two_variables_with_same_name.mdwn
@@ -0,0 +1,21 @@
+Hi Joey,
+
+I'm trying to extract data from a git annex whereis --json, but discovered that in json, the output has two values with same name.
+For instance:
+
+{
+ "command":"whereis",
+ "file":"filename.webm",
+ "note":"3 copies",
+ "whereis":[
+ {"uuid":"1b7d69fe-22e2-11e4-bc47-279f5115dfde","description":"chasqui","here":false},
+ {"uuid":"e5cc9824-450b-4340-b30f-c2d92c6a52f7","description":"coco","here":false},
+ {"uuid":"f84a1327-febb-4199-a106-9c3fd2288826","description":"[dpadua]","here":false}],
+ "note":"\t1b7d69fe-22e2-11e4-bc47-279f5115dfde -- chasqui\n \te5cc9824-450b-4340-b30f-c2d92c6a52f7 -- coco\n \tf84a1327-febb-4199-a106-9c3fd2288826 -- [dpadua]\n",
+ "untrusted":[],
+ "success":true
+}
+
+When I read the json from another program, it gets only the second value (and I wanted the first, the number of copies). I'm using git-annex version 5.20140831+b1
+
+
diff --git a/doc/forum/git_annex_whereis_--json_output_with_two_variables_with_same_name/comment_1_3bfde59729b904aa1ef815427dd35ae6._comment b/doc/forum/git_annex_whereis_--json_output_with_two_variables_with_same_name/comment_1_3bfde59729b904aa1ef815427dd35ae6._comment
new file mode 100644
index 000000000..a027b5276
--- /dev/null
+++ b/doc/forum/git_annex_whereis_--json_output_with_two_variables_with_same_name/comment_1_3bfde59729b904aa1ef815427dd35ae6._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 1"
+ date="2014-10-10T17:09:32Z"
+ content="""
+The \"3 copies\" string is not meant to be machine-parsable anyway. Why don't you just look at the whereis object in the json, and count the number of items in its list, which will give you the number of copies.
+"""]]
diff --git a/doc/forum/git_annex_whereis_--json_output_with_two_variables_with_same_name/comment_2_d08a955a11953cc783f09bfba180dbd6._comment b/doc/forum/git_annex_whereis_--json_output_with_two_variables_with_same_name/comment_2_d08a955a11953cc783f09bfba180dbd6._comment
new file mode 100644
index 000000000..02bd6de1f
--- /dev/null
+++ b/doc/forum/git_annex_whereis_--json_output_with_two_variables_with_same_name/comment_2_d08a955a11953cc783f09bfba180dbd6._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkR2dZjxqujBXcitvsP_PeWG8A-LfLU_tg"
+ nickname="Fernão"
+ subject="comment 2"
+ date="2014-10-10T18:18:04Z"
+ content="""
+nice, it worked =)
+"""]]
diff --git a/doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_7_15d918ededb5b8375b0ca13d0b3523ff._comment b/doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_7_15d918ededb5b8375b0ca13d0b3523ff._comment
new file mode 100644
index 000000000..1ca6b80ad
--- /dev/null
+++ b/doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_7_15d918ededb5b8375b0ca13d0b3523ff._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlog_5wIICaMcrKTexlFNA6IO6UTp323aE"
+ nickname="Torkaly"
+ subject="comment 7"
+ date="2014-10-17T11:00:06Z"
+ content="""
+Is there a way just to sync *git-annex* branch with the *git annex sync* command? As we have an already existing git branch and want to push/pull *master* manually.
+"""]]
diff --git a/doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_8_dcc3f2c6d55006776610e8d770b61d12._comment b/doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_8_dcc3f2c6d55006776610e8d770b61d12._comment
new file mode 100644
index 000000000..35983e802
--- /dev/null
+++ b/doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_8_dcc3f2c6d55006776610e8d770b61d12._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 8"""
+ date="2014-10-20T15:25:13Z"
+ content="""
+@Torkaly just `git pull` as usual, and then run `git annex merge`
+to auto-merge the git-anne branches. Then `git push origin git-annex`
+to push the git-annex branch.
+"""]]
diff --git a/doc/forum/how_to_commit_removed_files_as_repo-droped_entries.mdwn b/doc/forum/how_to_commit_removed_files_as_repo-droped_entries.mdwn
new file mode 100644
index 000000000..30250b12e
--- /dev/null
+++ b/doc/forum/how_to_commit_removed_files_as_repo-droped_entries.mdwn
@@ -0,0 +1,9 @@
+I have following usecase:
+
+I want to use a central repos for xbmc/kodi where I can play and delete files from kodi somethimes also with a random file manager. But I normaly if a file gets deleted and synced with git annex sync it deletes the file "head" in every repository.
+
+I would like if its only a git annex drop of the content, if thats was the last copy ok then its ok for me that its gone. But if its not the last copy it shhould just delete it from this repo but not delete the heads of the other repositories.
+
+I know that the actual file is still in the other repositories but the entry is gone, I would love if it would be more like a git annex drop instead of a git rm.
+
+Can I do that with setting this repos readonly or is my usecase not supported/doable with git annex?
diff --git a/doc/forum/how_to_commit_removed_files_as_repo-droped_entries/comment_1_a9a4baebfb647898a76ee3d5ab6febfd._comment b/doc/forum/how_to_commit_removed_files_as_repo-droped_entries/comment_1_a9a4baebfb647898a76ee3d5ab6febfd._comment
new file mode 100644
index 000000000..0312ac8db
--- /dev/null
+++ b/doc/forum/how_to_commit_removed_files_as_repo-droped_entries/comment_1_a9a4baebfb647898a76ee3d5ab6febfd._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-09T17:15:19Z"
+ content="""
+One way to do this is to switch to a different branch. Then, deletion
+of a file won't propigate to other repositories, that don't have that
+same branch checked out.
+
+Or, see <http://git-annex.branchable.com/tips/file_manager_integration/>
+-- file managers can be taught to run `git annex drop` rather than deleting
+files. Perhaps xbmc/kodi could be too..
+"""]]
diff --git a/doc/forum/how_to_commit_removed_files_as_repo-droped_entries/comment_2_68392de15bae234de1332b8bc80cc2ff._comment b/doc/forum/how_to_commit_removed_files_as_repo-droped_entries/comment_2_68392de15bae234de1332b8bc80cc2ff._comment
new file mode 100644
index 000000000..829402e58
--- /dev/null
+++ b/doc/forum/how_to_commit_removed_files_as_repo-droped_entries/comment_2_68392de15bae234de1332b8bc80cc2ff._comment
@@ -0,0 +1,26 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn4bbuawnh-nSo9pAh8irYAcV4MQCcfdHo"
+ nickname="Stefan"
+ subject="a workaround"
+ date="2015-02-10T05:00:01Z"
+ content="""
+Hacked together a small line that would convert my deletion to a annex drop, would be needed to be used in a cronjob or something like that:
+
+git st -s | grep \"^ D .*\" | tee >(git checkout -- `grep -oE \"\S*$\"`) >(git annex drop `grep -oE \"\S*$\"`)
+
+I guess it works only in indirect mode, maybe a git annex fsck before it would be good? (adding --force to the drop command would be good too I think)
+
+So either I rethink my usecase, maybe its ok that its a deletion or use something like that. I am not shure yet.
+I find it somethimes a bit hard to track unused files down and delete em (over several remotes).
+
+So I like the direct mode, and some programs still have problems using that files, as example du dont give you real size except you use -D of files, and even nautilus supports basicly dropping files, you cant drop on other repository with it.
+
+maybe I should also look how to easily remote git annex from some trees then I would be more willing to just play with that files around and go back to normal more painless, or I start with a smaller directory.
+
+the real fun I guess happens if you automate things like cloning of some paths to another remote as soon as its available I guess. I also dont like the interfaces to annex to much,
+mv /mnt/share/file_x /path
+ is just simpler than
+git annex move file_x --from=kodi --to=local-repos
+
+but thats maybe just practise :)
+"""]]
diff --git a/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__.mdwn b/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__.mdwn
new file mode 100644
index 000000000..e7de59210
--- /dev/null
+++ b/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__.mdwn
@@ -0,0 +1,5 @@
+I fear that while using git annex I will at some point accidentally `git add` some small files and not notice it until the only way to fix the problem is to rewrite history. What would be the best way to prevent myself from ever `git add`-ing a file into my annex repository instead of `git annex add`-ing it?
+
+And secondly, how can I best search in my git annex repository whether I already did this mistake in the past or not? Currently I'm using this which returns everything that's not a symlink or a git submodule:
+
+ git ls-files -s | awk ' $1 != 120000 && $1 != 160000 { print $4 }'
diff --git a/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_1_440dcd19ea2512f968858b780c2a2913._comment b/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_1_440dcd19ea2512f968858b780c2a2913._comment
new file mode 100644
index 000000000..166d549fd
--- /dev/null
+++ b/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_1_440dcd19ea2512f968858b780c2a2913._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="Xyem"
+ ip="178.79.137.64"
+ subject="comment 1"
+ date="2014-06-25T10:35:07Z"
+ content="""
+I'm not sure if you can prevent 'git add' but you can at least prevent it getting commited with the pre-commit hook. Mine is this:
+
+ #!/bin/sh
+
+ FILES=$(find -name \".git\" -prune -o -type f -not -name \".gitignore\" -print);
+ FILE_COUNT=$(echo -n \"$FILES\" | wc -l)
+
+ if [ $FILE_COUNT -gt 0 ]; then
+ echo \"$FILE_COUNT non-symlink files found.\"
+ echo \"$FILES\"
+ exit 1
+ fi
+
+ # automatically configured by git-annex
+ git annex pre-commit .
+"""]]
diff --git a/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_2_e9b70386774996a3d0446faaa3219120._comment b/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_2_e9b70386774996a3d0446faaa3219120._comment
new file mode 100644
index 000000000..bc8acf020
--- /dev/null
+++ b/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_2_e9b70386774996a3d0446faaa3219120._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="josch"
+ ip="2001:638:709:5:2ad2:44ff:fe4b:56aa"
+ subject="comment 2"
+ date="2014-06-27T04:50:03Z"
+ content="""
+Xyem, your method does not work well because it finds all regular files in the whole annex directory and does not only check for those that are to be committed.
+"""]]
diff --git a/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_3_3dbd76accad2df2fff14b55452c828ef._comment b/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_3_3dbd76accad2df2fff14b55452c828ef._comment
new file mode 100644
index 000000000..d8f681a1b
--- /dev/null
+++ b/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_3_3dbd76accad2df2fff14b55452c828ef._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Xyem"
+ ip="178.79.137.64"
+ subject="comment 3"
+ date="2014-06-27T12:02:08Z"
+ content="""
+That is intentional. In my use case, there should never be any regular files in this particular annex at all. If there are, it means I have missed something! :)
+"""]]
diff --git a/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_4_bfb4758fdb2a4afafd9c4d45de5c5c6b._comment b/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_4_bfb4758fdb2a4afafd9c4d45de5c5c6b._comment
new file mode 100644
index 000000000..de2a279a7
--- /dev/null
+++ b/doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_4_bfb4758fdb2a4afafd9c4d45de5c5c6b._comment
@@ -0,0 +1,28 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnWvnTWY6LrcPB4BzYEBn5mRTpNhg5EtEg"
+ nickname="Bence"
+ subject="comment 4"
+ date="2015-01-15T16:15:21Z"
+ content="""
+Based on the above, I'm using this script in the `pre-commit` hook.
+
+It gets the staged files and checks if they are links or not. If a file being committed is not a link (maybe it was added with `git add filename` ???), the script aborts the commit.
+
+ #!/bin/sh
+
+ # Don't allow files to be added to the normal repo.
+ stagedfiles=$(git diff --cached --name-only);
+ echo \"$stagedfiles\" | while IFS= read -r file; do
+ if [ ! -L \"$file\" ]; then
+ echo \"[Error] The file \\"$file\\" should not be added to the repo.\";
+ echo \"#Remove from the index and add with git-annex:\";
+ echo \"\$ git rm --cached \\"$file\\" && git annex add \\"$file\\"\";
+ exit 1;
+ #else
+ # echo \"OK : $file\";
+ fi;
+ done;
+
+ # automatically configured by git-annex
+ git annex pre-commit .
+"""]]
diff --git a/doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit.mdwn b/doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit.mdwn
new file mode 100644
index 000000000..960f563ce
--- /dev/null
+++ b/doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit.mdwn
@@ -0,0 +1,9 @@
+Been using Unison for a while to sync a folder at three different computers (can be on or off simultanously). However, I've for different reasons been looking for a different solution. Here comes git annex.e
+
+I started out with one computer, generated a new repo locally and at the server (a synology nas) with the assistant. Then i put all my files into the local directory and the files uploaded to the server. All good. I put the local computer in client mode and the server in backup mode. Then i configured a second computer with an empty repo folder, was asked to join repos, did that. Also put this computer in client mode and the server in backup. After a while all the files was located in the second computers repo directory. Yes, I was confident this was the way to go.
+
+Howewer, doing the same with my laptop was not successful at all. After similar setup as above it only downloaded about 5% of the data. Bummer. While I tried to study the logs I thought I should check the second computers repo. That was modified and a lot of files where gone. Wow...of course I have backup, but I was hoping for a proper and consistent operation.
+
+So what causes this? Should I not put the server in backup mode? Anyone have an idea?
+
+Other thoughts?
diff --git a/doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_1_a0551431a57ccab2463f2a6d43553337._comment b/doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_1_a0551431a57ccab2463f2a6d43553337._comment
new file mode 100644
index 000000000..99fa06512
--- /dev/null
+++ b/doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_1_a0551431a57ccab2463f2a6d43553337._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawncVeolylM8VoRbWhIYDlfGhIP69-aNXm4"
+ nickname="Espen"
+ subject="comment 1"
+ date="2014-10-10T07:14:36Z"
+ content="""
+Okey, came in to the office today to check the first computer I set up. It lacks all the files except the ones located on the third computer. So all sites are synced (only a lot of files are dropped). Seems something happened while the third computer was set up that caused just a few files to sync from the backup server and then git somehow thought that was it and then synced computer one, two and the server according to files present on computer three (obviously way to few files). This is slightly worrisome and I wonder what caused this. I'll inspect the log files for the transfer on computer three when I get home.
+
+Can anyone of you confirm that having this setup should not cause problems:
+
+computer 1 - client mode
+computer 2 - client mode
+computer 3 - client mode
+backup unit/nas - backup mode
+"""]]
diff --git a/doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_2_e96e8cf6e08e3a21bfcefbc202e78fe2._comment b/doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_2_e96e8cf6e08e3a21bfcefbc202e78fe2._comment
new file mode 100644
index 000000000..fa0f49120
--- /dev/null
+++ b/doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_2_e96e8cf6e08e3a21bfcefbc202e78fe2._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlM_DRhi_5pJrTA0HbApHR25iAgy-NBXTY"
+ nickname="Tor Arne"
+ subject="comment 2"
+ date="2014-10-14T22:13:44Z"
+ content="""
+Did you figure this one out?
+"""]]
diff --git a/doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_3_2ad4c1a4bfe00c22444ab878c84a8830._comment b/doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_3_2ad4c1a4bfe00c22444ab878c84a8830._comment
new file mode 100644
index 000000000..8c42c43fd
--- /dev/null
+++ b/doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_3_2ad4c1a4bfe00c22444ab878c84a8830._comment
@@ -0,0 +1,47 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawncVeolylM8VoRbWhIYDlfGhIP69-aNXm4"
+ nickname="Espen"
+ subject="comment 3"
+ date="2014-10-15T17:32:10Z"
+ content="""
+Finally had some time today to lock at the logs. However, I started from scratch. Created a local repo with the assistant, transferred some real files into the local repo dir (not .git of course). Waiting until everything was added etc. Then I created the remote server repo and it immediately started to transfer files from the local repo to the remote. Then I was slightly surprised when I got back home and saw this in the logfile:
+
+----- cut -----
+
+somefile
+
+ 32,768 1% 0.00kB/s 0:00:00 To ssh://someserverrepodir
+ * [new branch] git-annex -> synced/git-annex
+ * [new branch] annex/direct/master -> synced/master
+error: Ref refs/heads/synced/git-annex is at 112bb35566a0ee9434fb74524cdced45792bf8ed but expected 0000000000000000000000000000000000000000
+error: Ref refs/heads/synced/master is at d593f3c3a5090009789154bd60c3390d9a1b90d6 but expected 0000000000000000000000000000000000000000
+remote: error: failed to lock refs/heads/synced/git-annex
+remote: error: failed to lock refs/heads/synced/master
+To ssh://someserverrepodir
+ ! [remote rejected] git-annex -> synced/git-annex (failed to lock)
+ ! [remote rejected] annex/direct/master -> synced/master (failed to lock)
+error: failed to push some refs to 'ssh://someserverrepodir'
+
+ 1,966,080 96% 1.73MB/s 0:00:00
+ 2,034,254 100% 1.79MB/s 0:00:01 (xfr#1, to-chk=0/1)
+fatal: 'someserverrepodescription' does not appear to be a git repository
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+fatal: 'someserverrepodescription' does not appear to be a git repository
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+fatal: 'someserverrepodescription' does not appear to be a git repository
+fatal: Could not read from remote repository.
+
+Please make sure you have the correct access rights
+and the repository exists.
+[2014-10-13 21:58:05 CEST] Transferrer: Uploaded somefile
+
+----- cut -----
+
+This was a total surprise to me. If this was the stuff that made the previous setup fail, I don not know, but I will try to track down this error first. I would be quite surprised if it indeed was a permission issue. Also visible is an upload session for one of the files...that seems to go on fine and is probably not related to the error at all. This was the only error printed once during the entire transfer/sync process. Thought the first thing I would check was the size and number of files in the local and remote directory, but I'm not really sure how to do this with all the git stuff around on the remote. Typically \"git ls-files | wc -l\" or similar gets me going on the local repo. How would I do this on the remote (in backup mode if that counts)?
+"""]]
diff --git a/doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_4_44639388349a9ea5eabda9ebf79817b3._comment b/doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_4_44639388349a9ea5eabda9ebf79817b3._comment
new file mode 100644
index 000000000..c97438d8a
--- /dev/null
+++ b/doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_4_44639388349a9ea5eabda9ebf79817b3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawncVeolylM8VoRbWhIYDlfGhIP69-aNXm4"
+ nickname="Espen"
+ subject="comment 4"
+ date="2014-10-15T17:34:52Z"
+ content="""
+Sorry, forgot to format the text and the typo. Can I edit my own comments?
+"""]]
diff --git a/doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_5_339123ab87b69b11d6e999ad6eaf6df5._comment b/doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_5_339123ab87b69b11d6e999ad6eaf6df5._comment
new file mode 100644
index 000000000..58bed56e5
--- /dev/null
+++ b/doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_5_339123ab87b69b11d6e999ad6eaf6df5._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawncVeolylM8VoRbWhIYDlfGhIP69-aNXm4"
+ nickname="Espen"
+ subject="comment 5"
+ date="2014-10-15T17:44:55Z"
+ content="""
+Did a quick \"du -h\" on both directories. Local is 27 and remote is 23.7 GB, so some data is obviously missing on the remote. Also, how do I increase either the permitted size of one log file, or the number of log files stored? Seems the logs where rotated over the whole allowed log batch and size before the job was done during the night, so difficult to tell if there were more errors.
+"""]]
diff --git a/doc/forum/ignore_changes_made_by_a_remote.mdwn b/doc/forum/ignore_changes_made_by_a_remote.mdwn
new file mode 100644
index 000000000..3659774b4
--- /dev/null
+++ b/doc/forum/ignore_changes_made_by_a_remote.mdwn
@@ -0,0 +1,8 @@
+Hi,
+
+I have two repo one in direct (on windows) and one in indirect mode. From time to time the files in the direct repo are replaced by empty files however running git annex fsck always solves it.
+The problem is that today I did run git annex sync before running git annex fsck and git annex has then created two -variants for each of my files one empty and one with the content.
+I guess the easier for me is to just scrap that repo and make a new one however how do I prevent the changes to propagate now? I guess that if I now run git annex sync on my other repo all those small files are going to have linked created for them there as well.
+
+I hope this is clear,
+Thanks in advance.
diff --git a/doc/forum/ignore_changes_made_by_a_remote/comment_1_825676069d2e1554499b76fd8c306c30._comment b/doc/forum/ignore_changes_made_by_a_remote/comment_1_825676069d2e1554499b76fd8c306c30._comment
new file mode 100644
index 000000000..e758aa8a7
--- /dev/null
+++ b/doc/forum/ignore_changes_made_by_a_remote/comment_1_825676069d2e1554499b76fd8c306c30._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 1"
+ date="2014-04-02T20:02:19Z"
+ content="""
+I don't see any need to scrap the repository. Since you have an indirect mode repository, you can use `git log` in there to find commits you don't like, and run `git revert` to revert them. So if a bad commit comes down from windows, you can just undo it. That's why we use git, yes?
+
+I'm much more curious about the circumstances that cause empty files to end up in the direct mode repository.
+"""]]
diff --git a/doc/forum/ignore_changes_made_by_a_remote/comment_2_dff49b72f7e072fddaf68584beb97f3c._comment b/doc/forum/ignore_changes_made_by_a_remote/comment_2_dff49b72f7e072fddaf68584beb97f3c._comment
new file mode 100644
index 000000000..394a609b4
--- /dev/null
+++ b/doc/forum/ignore_changes_made_by_a_remote/comment_2_dff49b72f7e072fddaf68584beb97f3c._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="bvaa"
+ ip="86.82.68.238"
+ subject="comment 2"
+ date="2014-04-03T19:20:31Z"
+ content="""
+Ok it makes indeed sense.
+Regarding the empty files I am going to try to find out where that happens and if I can reproduce.
+Thanks.
+"""]]
diff --git a/doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__.mdwn b/doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__.mdwn
new file mode 100644
index 000000000..b5b38ce3c
--- /dev/null
+++ b/doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__.mdwn
@@ -0,0 +1,37 @@
+I'm storing hundreds of gigabytes of data on a S3 remote, and often when I try to copy to my remote using this type of command:
+
+ git annex copy newdir/* --to my-s3-remote
+
+I'll get a little bit of the way uploading some large file (which is in chunks) and then something like this:
+
+ copy newdir/file1.tgz (gpg) (checking my-s3-remote...) (to my-s3-remote...)
+
+ 3% 2.2MB/s 11h14m
+
+ ErrorMisc "<socket: 16>: Data.ByteString.hGetLine: timeout (Operation timed out)"
+
+ failed
+
+ copy newdir/file2.tgz (checking my-s3-remote...) (to my-s3-remote...)
+
+ 15% 2.3MB/s 3h40m
+
+ ErrorMisc "<socket: 16>: Data.ByteString.hGetLine: resource vanished (Connection reset by peer)"
+
+ failed
+
+ copy newdir/file3.tgz (checking my-s3-remote...) (checking my-s3-remote...) (checking my-s3-remote...) (checking my-s3-remote...) (checking my-s3-remote...) (checking my-s3-remote...) (checking my-s3-remote...) ok
+
+One common cause of this is if my Internet connection is intermittent. But even when my connection seems steady, it can happen. I'm willing to chalk that up to network problems elsewhere though.
+
+If I keep just hitting "up enter" to re-execute the command each time it fails, eventually everything gets up there.
+
+But this can actually take weeks, because often uploading these big files, I'll let it go overnight, and then wake up every morning and find out with dismay that it has failed again.
+
+My questions:
+
+- Is there a way to make it automatically retry? I am sure that upon any of these errors, an immediate automatic reply would amost assuredly work.
+
+- If not, is there at least a way to make it pick up where it left off? Even though I'm using chunks, it seems to start the file over again.
+
+Thanks.
diff --git a/doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__/comment_1_82820ce711b87b092a21e31fd381ffce._comment b/doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__/comment_1_82820ce711b87b092a21e31fd381ffce._comment
new file mode 100644
index 000000000..2ab0a8ebb
--- /dev/null
+++ b/doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__/comment_1_82820ce711b87b092a21e31fd381ffce._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-01-05T20:23:40Z"
+ content="""
+The git-annex assistant will automatically retry uploads/downloads, if you
+want to use it.
+
+Or, you can use a simple loop until git-annex succeeds:
+
+ while ! git-annex annex copy newdir/* --to my-s3-remote ; do echo retry ; done
+
+As to picking up where it left off, make sure you have a recent
+release of git-annex, and then you can enable chunking for a S3
+remote. git-annex can then resume an upload or download starting
+at the next chunk that needs to be transferred.
+
+See [[chunking]].
+"""]]
diff --git a/doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__/comment_2_160e80583b647eae53aa120ca734e34a._comment b/doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__/comment_2_160e80583b647eae53aa120ca734e34a._comment
new file mode 100644
index 000000000..cb2188efd
--- /dev/null
+++ b/doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__/comment_2_160e80583b647eae53aa120ca734e34a._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="http://digiuser.livejournal.com/"
+ subject="Is there a way to make this upload all files that have not been uploaded yet?"
+ date="2015-01-08T02:37:51Z"
+ content="""
+Let's say I want my S3 repo to have all files in it that are in my current repo. Is there a variation of this while loop that will keep uploading until it's done?
+
+I recognize I could use annex assistant but let's say I just want to do it this way.
+"""]]
diff --git a/doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__/comment_3_6d81a41edf052e310e1f80cc6add3c09._comment b/doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__/comment_3_6d81a41edf052e310e1f80cc6add3c09._comment
new file mode 100644
index 000000000..05e0cd3e3
--- /dev/null
+++ b/doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__/comment_3_6d81a41edf052e310e1f80cc6add3c09._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 3"
+ date="2015-01-08T18:13:47Z"
+ content="""
+That's what the while loop above does; runs the git-annex command, and retries it until it succeeds.
+"""]]
diff --git a/doc/forum/local_subtree_and_broken_symlinks.mdwn b/doc/forum/local_subtree_and_broken_symlinks.mdwn
new file mode 100644
index 000000000..de6dd6e49
--- /dev/null
+++ b/doc/forum/local_subtree_and_broken_symlinks.mdwn
@@ -0,0 +1,21 @@
+Here's a simple example on a repository with three branches, where we'll be adding images-annex as a subtree into master.
+
+ $ git branch
+ git-annex
+ images-annex
+ * master
+ $ git subtree add --squash --prefix=images/ images-annex
+ Added dir 'images'
+ $ ls
+ FILE_A FILE_B images/
+
+...checkout images-annex, make changes, commit...
+
+ $ git checkout master
+ $ git subtree pull --squash --prefix=images/ . images-annex
+ From .
+ * branch images-annex -> FETCH_HEAD
+ Merge made by the 'recursive' strategy.
+ ...(files created/modified/etc)
+
+I have tried a few different methods for merging the subtree in and so far have not been able to keep git-annex links up to date. Running `git-annex fix .` does what it's supposed to but then git sees everything as modified. Is this entirely the expected behavior because of the --prefix? I have not used subtrees much before but the model appears to be very helpful for what I'm trying to do.
diff --git a/doc/forum/local_subtree_and_broken_symlinks/comment_1_779cc4e49cb4da8aea7f5743e6257f21._comment b/doc/forum/local_subtree_and_broken_symlinks/comment_1_779cc4e49cb4da8aea7f5743e6257f21._comment
new file mode 100644
index 000000000..e6ccb814f
--- /dev/null
+++ b/doc/forum/local_subtree_and_broken_symlinks/comment_1_779cc4e49cb4da8aea7f5743e6257f21._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="24.159.78.125"
+ subject="comment 1"
+ date="2014-07-30T14:55:16Z"
+ content="""
+Known bug: [[bugs/Git_annexed_files_symlink_are_wrong_when_submodule_is_not_in_the_same_path]]
+
+I don't think there's much likelyhood of a fix though. Using direct mode probably works around the problem. Or you can use something like myrepos instead of git subtrees.
+"""]]
diff --git a/doc/forum/lsof_resource_use_problems.mdwn b/doc/forum/lsof_resource_use_problems.mdwn
new file mode 100644
index 000000000..f15b81fe9
--- /dev/null
+++ b/doc/forum/lsof_resource_use_problems.mdwn
@@ -0,0 +1,42 @@
+When the assistant runs lsof on my file system, the lsof process consumes a horrendous amount of memory (>11GB). This forces a large amount of swapping, and brings the system to its knees until the process exits. The same thing occurs when I run lsof manually, but this is currently making the assistant unusable for me. Is this normal when running lsof on a large number of files, or is something wrong with my particular setup?
+
+An example of resource usage from top, and some system details:
+
+---
+ PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
+ 33735 username 1 23 0 28208M 11507M pfault 0 0:07 58.50% lsof
+---
+ [username@hostname /mnt/media]$ uname -a
+ FreeBSD hostname 9.2-RELEASE-p10 FreeBSD 9.2-RELEASE-p10 #0 r262572+4fb5adc: Wed Aug 6 17:07:16 PDT 2014 root@build3.ixsystems.com:/fusion/jkh/921/freenas/os-base/amd64/fusion/jkh/921/freenas/FreeBSD/src/sys/FREENAS.amd64 amd64
+---
+ [username@hostname /mnt/media]$ lsof -h
+ lsof 4.88
+---
+ [username@hostname /mnt/media]$ git annex info
+ repository mode: direct
+ trusted repositories: 0
+ semitrusted repositories: 1
+ d03b21fc-666d-457d-b953-0ca0ac7393d8 -- [hostname_media_indirect]
+ untrusted repositories: 2
+ 00000000-0000-0000-0000-000000000001 -- web
+ 31497a4d-290e-409a-9fd2-20c7340c245b -- hostname_mnt/media [here]
+ transfers in progress: none
+ available local disk space: 780.1 gigabytes (+10 gigabytes reserved)
+ local annex keys: 41576
+ local annex size: 943.95 gigabytes (+ 49 unknown size)
+ annexed files in working tree: 41887
+ size of annexed files in working tree: 945.14 gigabytes (+ 50 unknown size)
+ bloom filter size: 16 mebibytes (8.3% full)
+ backend usage:
+ SHA512E: 81518
+ WORM: 1846
+ URL: 99
+---
+ [username@hostname /mnt/media]$ git annex version
+ git-annex version: 5.20140817
+ build flags: Assistant Webapp Webapp-secure Pairing S3 WebDAV Kqueue XMPP DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 0 1 2 4
diff --git a/doc/forum/lsof_resource_use_problems/comment_1_a5e5d410545fa7f93f08936ec6aeee42._comment b/doc/forum/lsof_resource_use_problems/comment_1_a5e5d410545fa7f93f08936ec6aeee42._comment
new file mode 100644
index 000000000..55312113e
--- /dev/null
+++ b/doc/forum/lsof_resource_use_problems/comment_1_a5e5d410545fa7f93f08936ec6aeee42._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.111"
+ subject="comment 1"
+ date="2014-10-13T21:21:18Z"
+ content="""
+That seems very wrong.. On my linux system here, I can `lsof /` and it uses 4 kb total, and runs in 0.09 seconds, to report on 3500 open files.
+
+But, I don't know about freebsd. lsof may be more expensive there for some reason, like needing to look in kernel memory rather than in /proc perhaps? But expensive to the tune of gigabytes of space used, that must be lsof misbehaving.
+"""]]
diff --git a/doc/forum/manual_update_of_.git__47__annex__47__objects/comment_2_a7bbf304b26650a786e358bdc01e3069._comment b/doc/forum/manual_update_of_.git__47__annex__47__objects/comment_2_a7bbf304b26650a786e358bdc01e3069._comment
new file mode 100644
index 000000000..5468ed3d0
--- /dev/null
+++ b/doc/forum/manual_update_of_.git__47__annex__47__objects/comment_2_a7bbf304b26650a786e358bdc01e3069._comment
@@ -0,0 +1,33 @@
+[[!comment format=mdwn
+ username="rasmus"
+ ip="109.201.154.177"
+ subject="But how to clean this folder?"
+ date="2014-03-20T21:55:26Z"
+ content="""
+Joey,
+
+I have sometimes experienced that there is way too much content in the `.git/annex/objects` folder. For instance, my terminal emulator recently crashed during a sync which seemed to create a lot of folders.
+
+In the annex repo where this happened I now got way too many folders (annex sometimes complain about no. of inodes or something like that) and I don't know how to clean it correctly.
+
+Here's a \"screenshot\":
+
+ [doc.annex] $ ls -a
+ . .. documents .git .gitignore
+ [doc.annex] $ find . -type d | wc -l
+ 38568
+ [doc.annex] $ git annex fsck > /dev/null 2>&1
+ [doc.annex] $ find . -type d | wc -l
+ 38568
+ [doc.annex] $ git annex repair > /dev/null 2>&1
+ [doc.annex] $ find . -type d | wc -l
+ 38568
+ [doc.annex] $ find documents -type d | wc -l
+ 1513
+ [doc.annex] $ find .git/annex/objects -type d | wc -l
+ 36712
+
+This is a `direct`-mode repo. With `.git/objectcts` I can use `git gc`. How can I tell annex to tidy up? I have tried `fsck`, `repair` and `forget`.
+
+Any hints on how to deal with this? Other than manually clean up by deleting `.git/annex/objects` and rerunning `fsck`?
+"""]]
diff --git a/doc/forum/manual_update_of_.git__47__annex__47__objects/comment_3_a855096b683c4c4f84e72c797e065d59._comment b/doc/forum/manual_update_of_.git__47__annex__47__objects/comment_3_a855096b683c4c4f84e72c797e065d59._comment
new file mode 100644
index 000000000..2271e04ff
--- /dev/null
+++ b/doc/forum/manual_update_of_.git__47__annex__47__objects/comment_3_a855096b683c4c4f84e72c797e065d59._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.41"
+ subject="comment 3"
+ date="2014-03-26T19:09:07Z"
+ content="""
+1. This followup question seems to have nothing to do with the original question. (The aswer to the original question was `git annex fsck --fast`.)
+2. I find it hard to believe that a crashing terminal emulator will create a lot of folders.
+3. You show 36k subdirectories in .git/annex/objects. If I make a *tiny* 100 mb ext2 filesystem, it has 26k inodes. A 200 mb filesystem has 50k. So we're talking about a number of directories that is only large when using hardware from 1996.
+
+I'm not convinced yet that anything is wrong, or that there's anything you can do to improve matters. In any case, see [[todo/wishlist:_pack_metadata_in_direct_mode]].
+"""]]
diff --git a/doc/forum/metadata_limits.mdwn b/doc/forum/metadata_limits.mdwn
new file mode 100644
index 000000000..523db70d8
--- /dev/null
+++ b/doc/forum/metadata_limits.mdwn
@@ -0,0 +1,10 @@
+Hello,
+
+I was wondering what `The metadata values can contain absolutely anything you like -- but you're recommended to keep it simple and reasonably short.` listed on the [[metadata]] page really means?
+
+
+Here is my use case (which is part of a larger solution)...
+
+I've been storing my photos in git annex for a while (years perhaps), I (or actually the wife) tried to find one and couldn't, so I'm thinking I need to add metadata (Tags and captions, etc) to each picture. I was looking for ways to do so. I was actually considering using gthumb or shotwell or similar to create the tags and somehow pull that out and associate it with the file (either with a plugin or program) and then sort out how to distribute the metadata with the pics. The git annex metadata seems like a reasonable solution for keeping metadata with the pictures. The question is in this case, how long can the text in say a caption tag before git-annex has problems? I could probably do something like caption-<seq> to handle really long captions, but then captions are short by definition, so perhaps I should say description instead. And for this particular use case, I am aware this doesn't solve the problem of actually creating the data, just trying to sort out if get annex metadata to the right solution to tie the metadata to a pic, err file.
+
+
diff --git a/doc/forum/metadata_limits/comment_1_a20bbe49f2f23d23131221ec79c8b973._comment b/doc/forum/metadata_limits/comment_1_a20bbe49f2f23d23131221ec79c8b973._comment
new file mode 100644
index 000000000..d296a1cb9
--- /dev/null
+++ b/doc/forum/metadata_limits/comment_1_a20bbe49f2f23d23131221ec79c8b973._comment
@@ -0,0 +1,28 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-12-02T18:39:34Z"
+ content="""
+There's no particular size limit for metadata. But things may not scale
+well past some size.
+
+Having a big metadata value could make git-annex be a little slow when
+dealing with metadata, since it has to parse the metadata log file.
+So if you stored say, 1 mb in metadata, that's one mb of disk IO and data
+processing every time git-annex looks at the metadata for that file.
+
+All the metadata for a file will also be buffered in memory when git-annex
+is looking at that file's metadata. So `git-annex view` would use 1 mb or
+so more memory in the above example. (But git-annex only looks at one
+file's metadata at a time, so its memory use won't grow if you have a lot
+of files with metadata.)
+
+Also of course, the metadata is stored in git, and so it will make your git
+repository bigger.
+
+I would not expect any reasonable description of a photo to be large enough
+for its size to be a problem.
+
+I'd even feel ok with putting the full text of a license in as metadata
+(GPL is 30kb, and git would deduplicate redundant license metadata).
+"""]]
diff --git a/doc/forum/metadata_limits/comment_2_4e8995ccd5fc2e5ee5d89a0780e5df9d._comment b/doc/forum/metadata_limits/comment_2_4e8995ccd5fc2e5ee5d89a0780e5df9d._comment
new file mode 100644
index 000000000..097558f86
--- /dev/null
+++ b/doc/forum/metadata_limits/comment_2_4e8995ccd5fc2e5ee5d89a0780e5df9d._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://jamestechnotes.com/"
+ nickname="James"
+ subject="comment 2"
+ date="2014-12-02T22:37:33Z"
+ content="""
+Thanks Joey.
+
+Now to sort out how to create the data ;) -- [[james]]
+"""]]
diff --git a/doc/forum/misctmp_filling_up.mdwn b/doc/forum/misctmp_filling_up.mdwn
new file mode 100644
index 000000000..a633760c9
--- /dev/null
+++ b/doc/forum/misctmp_filling_up.mdwn
@@ -0,0 +1,11 @@
+My directory .git/annex/misctmp is quite filled up with files like P39923, P33083, and also with 7 characters P310000 up to P331998. The beginning of these filenames may come from the annexed files, which all start with 'P3'.
+
+There is a total of 12198 of them (4.0TB... yes this repo is quite big ;)).
+
+Each of those has the content of individual annexed files (about 300-400MB targzipped files). Sometimes they are hard liked to each other, up to 8 copies.
+
+Since I have copied+dropped the whole repo content to other repos, there should be nothing left locally. I have verified several of those files (the annexed files which are identical to the misctmp/* files), are they indeed are located elsewhere, and not "here".
+
+So I was wondering if it is safe to remove them, and why are they not listed by git annex unused?
+
+Thanks for your help!!
diff --git a/doc/forum/misctmp_filling_up/comment_1_2739dec72fe0950dd070c8fab9fbd751._comment b/doc/forum/misctmp_filling_up/comment_1_2739dec72fe0950dd070c8fab9fbd751._comment
new file mode 100644
index 000000000..9d1713745
--- /dev/null
+++ b/doc/forum/misctmp_filling_up/comment_1_2739dec72fe0950dd070c8fab9fbd751._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.114"
+ subject="comment 1"
+ date="2014-04-27T00:16:49Z"
+ content="""
+You can delete them.
+
+AFAIK this should only happen if the assistant is interrupted while it's adding files. I plan to make the assistant clean up old tmp files on startup.
+"""]]
diff --git a/doc/forum/misctmp_filling_up/comment_2_440081b5e2b9b5b19e8cd5db3649a976._comment b/doc/forum/misctmp_filling_up/comment_2_440081b5e2b9b5b19e8cd5db3649a976._comment
new file mode 100644
index 000000000..5048f601e
--- /dev/null
+++ b/doc/forum/misctmp_filling_up/comment_2_440081b5e2b9b5b19e8cd5db3649a976._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmdbVIGiDH8KarAGAy8y2FHJD_F990JzXI"
+ nickname="François"
+ subject="comment 2"
+ date="2014-04-27T05:21:48Z"
+ content="""
+Indeed I had to interrupt the add a few times.
+
+Thanks!
+"""]]
diff --git a/doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository.mdwn b/doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository.mdwn
new file mode 100644
index 000000000..b9500fa10
--- /dev/null
+++ b/doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository.mdwn
@@ -0,0 +1,19 @@
+I have a Desktop computer at home and another at work, and work from home every other day. I'd like to use git-annex assistant to keep my git checkouts in sync across both of them. I may be a bit unusual in that I don't always commit before going home.
+
+I also would like to have anything in the git stash synchronized between the two, the .git/config file, etc.
+
+So to be clear, I have a file structure like the following:
+
+ ./annex/.git
+ ./annex/project/README.md
+ ./annex/project/.git
+ ./annex/project2/README.md
+ ./annex/project2/.git
+
+In my testing it seems that the "project/.git" folders aren't synchronized between my two desktops, even though the rest of the files are. A workaround is to rename "project/.git" to something else, like "project/.gitfoo", and then use --git-dir when issuing my git commands.
+
+Is this something that can be worked around? I apologize if this is covered elsewhere, as I wasn't thinking of the right terms to search for.
+
+I've looked through the code and can't find anything obvious. I imagine this is because git hard-codes all ".git" subdirectories as something it should ignore.
+
+Is there a better workaround? I realize this is probably a niche use case.
diff --git a/doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_1_419b27cb1c71bce021ef9f2e471aa92e._comment b/doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_1_419b27cb1c71bce021ef9f2e471aa92e._comment
new file mode 100644
index 000000000..8d698b1ba
--- /dev/null
+++ b/doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_1_419b27cb1c71bce021ef9f2e471aa92e._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="jewel"
+ ip="23.30.55.105"
+ subject="comment 1"
+ date="2014-10-12T05:22:03Z"
+ content="""
+Now I've found the relevant bug: `http://git-annex.branchable.com/bugs/Can__39__t_add_a_git_repo_to_git_annex:___34__Invalid_path_repo__47__.git__47__X__34___for_many_X`.
+
+Note the symlink workaround near the end. A quick test shows that it's working great. I'll try it out for a few months and report back.
+"""]]
diff --git a/doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_2_dae4c7a42080dd89150159b2946839b1._comment b/doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_2_dae4c7a42080dd89150159b2946839b1._comment
new file mode 100644
index 000000000..2f574c8fe
--- /dev/null
+++ b/doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_2_dae4c7a42080dd89150159b2946839b1._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 2"
+ date="2014-10-12T17:30:23Z"
+ content="""
+This is fundamentally not a good idea. All it takes is one conflict inside the .git directories, and your git repositories will be trashed/corrupted. The page you link to has comments explaining why.
+"""]]
diff --git a/doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_3_9d9fa65559ba4bb0e4676289b5a65684._comment b/doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_3_9d9fa65559ba4bb0e4676289b5a65684._comment
new file mode 100644
index 000000000..483ff007e
--- /dev/null
+++ b/doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_3_9d9fa65559ba4bb0e4676289b5a65684._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="jewel"
+ ip="23.30.55.105"
+ subject="comment 3"
+ date="2014-10-12T19:04:00Z"
+ content="""
+Thanks for the warning. I'll keep hourly incremental backups (using obnam) on each computer just in case something terrible happens.
+"""]]
diff --git a/doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_4_4e89b3590cc33b2565cd173ef7c85013._comment b/doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_4_4e89b3590cc33b2565cd173ef7c85013._comment
new file mode 100644
index 000000000..b32abd3ec
--- /dev/null
+++ b/doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_4_4e89b3590cc33b2565cd173ef7c85013._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlM_DRhi_5pJrTA0HbApHR25iAgy-NBXTY"
+ nickname="Tor Arne"
+ subject="comment 4"
+ date="2014-10-14T22:09:37Z"
+ content="""
+If I use git-annex to keep my home and work computer in sync, the conflict would only happen if I somehow manage to make a change in the git repo on one machine that's not propagated to the other straight away (eg, network down), and I then modify the git repo of the other as well?
+
+Could git-annex have a different merge strategy in this case, not try to merge anything under .git and give a warning?
+
+"""]]
diff --git a/doc/forum/multiple_urls_for_the_same_UUID/comment_5_7237986a34228282c6b764309afc1d57._comment b/doc/forum/multiple_urls_for_the_same_UUID/comment_5_7237986a34228282c6b764309afc1d57._comment
new file mode 100644
index 000000000..3014e6c04
--- /dev/null
+++ b/doc/forum/multiple_urls_for_the_same_UUID/comment_5_7237986a34228282c6b764309afc1d57._comment
@@ -0,0 +1,33 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkMTPqZZWoz396ABpx6nh3osxKQCFaSW6M"
+ nickname="Mark"
+ subject="annex sync when inside an itinerant repository"
+ date="2015-02-12T12:54:21Z"
+ content="""
+I'm having trouble with this where the different remotes have the same URL but different UUIDs. My situation is a repository on a USB drive that can be plugged into one of two machines and used to transport large files between them. On each machine there is a local repository in a consistent location, so I can rely on paths to things in the repos being consistent across machines. Each repo obviously has a different UUID. The USB repo has remotes for local filesystem access and remotes for over-the-network access as a convenience - something like this:
+
+ [remote \"host1\"]
+ url = /m/stuff
+ fetch = +refs/heads/*:refs/remotes/host1/*
+ annex-uuid = ce6175ba-4a0d-49e6-88b1-615dac7a37c1
+ [remote \"host1-net\"]
+ url = ssh://host1.network/m/stuff
+ fetch = +refs/heads/*:refs/remotes/host1/*
+ annex-uuid = ce6175ba-4a0d-49e6-88b1-615dac7a37c1
+ [remote \"host2\"]
+ url = /m/stuff
+ fetch = +refs/heads/*:refs/remotes/host2/*
+ annex-uuid = f7e3fbe8-f7f5-4231-a885-a72a46680d0b
+ [remote \"host2-net\"]
+ url = ssh://host2.network/m/stuff
+ fetch = +refs/heads/*:refs/remotes/host2/*
+ annex-uuid = f7e3fbe8-f7f5-4231-a885-a72a46680d0b
+
+The over-the-network path is useful for keeping everything in sync, but it doesn't have enough bandwidth to sensibly sync the content as well.
+
+If I run 'git annex sync' in this repository while it's attached to host1 I'd hope it would sync with host1 and host2-net, as those are the URLs through which the two repositories can be reached. What actually happens is that it syncs with all of the repositories and updates the annex-uuid of remote 'host2' to be the UUID of the host1 repository. It also obviously gets a bit confused because it updates the remote branches for host2 from host1.
+
+Is there some way to configure it so that sync works with all repositories based on unique uuid values, rather than all remotes?
+
+
+"""]]
diff --git a/doc/forum/multiple_urls_for_the_same_UUID/comment_6_392819ba657569a1b997b58aa921a0ad._comment b/doc/forum/multiple_urls_for_the_same_UUID/comment_6_392819ba657569a1b997b58aa921a0ad._comment
new file mode 100644
index 000000000..783b9a41a
--- /dev/null
+++ b/doc/forum/multiple_urls_for_the_same_UUID/comment_6_392819ba657569a1b997b58aa921a0ad._comment
@@ -0,0 +1,25 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnm19dBCRphmtjXfopm_NpvnRwz-qIJ2Tw"
+ nickname="Remi"
+ subject="comment 6"
+ date="2015-02-12T14:47:38Z"
+ content="""
+I had the same problem, and I solved it using a host specific directory with symlink:
+
+On host \"host1\", I've a directory named \"/home/me/host1/\" that contain a symlink \"mygitrepos\" to \"/home/me/mygitrepos/\".
+On host \"host2\", I've a directory named \"/home/me/host2/\" that contain a symlink \"mygitrepos\" to \"/home/me/mygitrepos/\".
+
+On the usb drive, the remote are set as:
+
+ [remote \\"host1\\"]
+ url = /home/me/host1/mygitrepos
+ fetch = +refs/heads/*:refs/remotes/host1/*
+ annex-uuid = ce6175ba-4a0d-49e6-88b1-615dac7a37c1
+ [remote \\"host2\\"]
+ url = /home/me/host2/mygitrepos
+ fetch = +refs/heads/*:refs/remotes/host2/*
+ annex-uuid = f7e3fbe8-f7f5-4231-a885-a72a46680d0b
+
+(I didn't set the net remote, but it should work). With this added indirection I protect myself against git (and git-annex) confusion.
+
+"""]]
diff --git a/doc/forum/multiple_urls_for_the_same_UUID/comment_7_276cb5d94cbd10e9fc7d1cf4ac607273._comment b/doc/forum/multiple_urls_for_the_same_UUID/comment_7_276cb5d94cbd10e9fc7d1cf4ac607273._comment
new file mode 100644
index 000000000..a80bffe10
--- /dev/null
+++ b/doc/forum/multiple_urls_for_the_same_UUID/comment_7_276cb5d94cbd10e9fc7d1cf4ac607273._comment
@@ -0,0 +1,27 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 7"""
+ date="2015-02-12T20:25:12Z"
+ content="""
+You have two configured git remotes, host1 and host2, with the same
+"url = /m/stuff". Only one of these remotes can be accessed at a time,
+depending on where the drive is docked.
+
+So, why not just combine those two remote configs
+into a single remote. Call it "host".
+
+git-annex will automatically notice when the uuid of the repository
+pointed to by "host" changes, and it will update the .git/config
+appropriately.
+
+That BTW, happens to be just how I use git-annex with my own USB drive,
+and it works great.
+
+---
+
+git annex sync will still try to sync with "host1-net" and "host2-net", as well
+as which ever one of the two "host" points to. There's a small redundancy
+there, but since it will sync with "host" first, as it knows local file
+access is less expensive, the redundant sync will not involve much work.
+
+"""]]
diff --git a/doc/forum/new_linux_arm_tarball_build/comment_10_5f9735ec62478c99b8c814055206cff0._comment b/doc/forum/new_linux_arm_tarball_build/comment_10_5f9735ec62478c99b8c814055206cff0._comment
new file mode 100644
index 000000000..eb3995eb1
--- /dev/null
+++ b/doc/forum/new_linux_arm_tarball_build/comment_10_5f9735ec62478c99b8c814055206cff0._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmH9ARM62C6zcEpzh2muCs4wq-GkLRntgQ"
+ nickname="Randy"
+ subject="raspbian"
+ date="2014-04-16T10:59:10Z"
+ content="""
+This works fairly well for me on Raspian. However I am getting the same error as Justin.
+
+ ERROR: ld.so: object '/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so' from /etc/ld.so.preload cannot be preloaded: ignored.
+
+I'm ignoring the errors for now, but it's a lot of noise that actually makes it slightly difficult to see the important output.
+"""]]
diff --git a/doc/forum/new_linux_arm_tarball_build/comment_11_859c44046b00fe885f6878cfe0e46360._comment b/doc/forum/new_linux_arm_tarball_build/comment_11_859c44046b00fe885f6878cfe0e46360._comment
new file mode 100644
index 000000000..7be8a6731
--- /dev/null
+++ b/doc/forum/new_linux_arm_tarball_build/comment_11_859c44046b00fe885f6878cfe0e46360._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 11"
+ date="2014-04-17T19:39:41Z"
+ content="""
+I can't see any good way to prevent ld-linux.so from preloading things listed in `/etc/ld.so.preload`. I don't know why raspbian wants to preload that -- probably for optimisation purposes?
+
+I could modify the ld-linux.so shipped in the git-annex tarball, but that way lies pointless complication..
+"""]]
diff --git a/doc/forum/new_linux_arm_tarball_build/comment_12_35ade68d62e95036344ad33db3279c21._comment b/doc/forum/new_linux_arm_tarball_build/comment_12_35ade68d62e95036344ad33db3279c21._comment
new file mode 100644
index 000000000..ba6468a3f
--- /dev/null
+++ b/doc/forum/new_linux_arm_tarball_build/comment_12_35ade68d62e95036344ad33db3279c21._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmH9ARM62C6zcEpzh2muCs4wq-GkLRntgQ"
+ nickname="Randy"
+ subject="comment 12"
+ date="2014-04-18T13:38:13Z"
+ content="""
+There is no need to modify anything here. The errors were mostly just confusing at first and made me wonder if it was working properly. It is indeed working perfectly! Thanks!!!
+"""]]
diff --git a/doc/forum/new_linux_arm_tarball_build/comment_13_36f48c30894b9b225b812ba5e5b2f504._comment b/doc/forum/new_linux_arm_tarball_build/comment_13_36f48c30894b9b225b812ba5e5b2f504._comment
new file mode 100644
index 000000000..312082ae1
--- /dev/null
+++ b/doc/forum/new_linux_arm_tarball_build/comment_13_36f48c30894b9b225b812ba5e5b2f504._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnClfG_kAo0drU5dVZiTRXo9WnqjW4I5dA"
+ nickname="Julian"
+ subject="comment 13"
+ date="2014-12-06T17:04:04Z"
+ content="""
+Unfortunately, it isn't working for me on DS214 (MARVELL Armada XP MV78230) and DSM 5.1-5004 Update 2.
+git is installed, git-annex tar extracted and runshell worked. Within this shell git-annex seems to work (e.g. git-annex init works)
+
+However, git-annex is complaining that git-annex is not installed on remote when I try to add the NAS as a remote.
+
+I guess it is related to the fact that git-annex-shell is not working on the NAS. When I execute git-annex-shell it gives:
+/volume1/homes/julian/bin/git-annex.linux/shimmed/git-annex-shell/git-annex-shell: error while loading shared libraries: /volume1/homes/julian/bin/git-annex.linux/shimmed/git-annex-shell/git-annex-shell: file too short
+Actually /volume1/homes/julian/bin/git-annex.linux/shimmed/git-annex-shell/git-annex-shell has 0 Bytes.
+
+I can't execute git-annex-shell inside the bin folder due to permission issues. I tried to change the file permissions but it didn't help.
+"""]]
diff --git a/doc/forum/new_linux_arm_tarball_build/comment_14_67021b6d239690c9d18e8630aa2254ff._comment b/doc/forum/new_linux_arm_tarball_build/comment_14_67021b6d239690c9d18e8630aa2254ff._comment
new file mode 100644
index 000000000..fd9591d9d
--- /dev/null
+++ b/doc/forum/new_linux_arm_tarball_build/comment_14_67021b6d239690c9d18e8630aa2254ff._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 14"""
+ date="2014-12-06T20:25:06Z"
+ content="""
+@Julian, shimmed/git-annex-shell/git-annex-shell is supposed to be a hard
+link to shimmed/git-annex/git-annex. Maybe there's a problem with hard
+links on your NAS? A symlink would also work I think.
+"""]]
diff --git a/doc/forum/original_filename_on_s3.mdwn b/doc/forum/original_filename_on_s3.mdwn
new file mode 100644
index 000000000..7ecaab4e1
--- /dev/null
+++ b/doc/forum/original_filename_on_s3.mdwn
@@ -0,0 +1,5 @@
+I understand that [[special_remotes/S3/]] is seen as a "backend" storage mechanism, but since S3 files are available directly on the web, it would be nice to have the real filenames up there.
+
+Is there a way to set that up? I know about [[tips/publishing_your_files_to_the_public/]], but it assumes you have a local git repo with all the data in the first place, something which may not be available...
+
+my use case is that we have ~1TB of files already stored in S3 under specific filenames, and those filenames are how the files are accessed on the main website. changing all those filenames would be a significant burden... i'm not even sure this can be done cheaply on S3 in the first place. --[[anarcat]]
diff --git a/doc/forum/overmounting_repository_at_home.mdwn b/doc/forum/overmounting_repository_at_home.mdwn
new file mode 100644
index 000000000..2bac1994f
--- /dev/null
+++ b/doc/forum/overmounting_repository_at_home.mdwn
@@ -0,0 +1,12 @@
+Consider the following scenario:
+
+- A Server which holds the full repository
+- A Laptop with a small disk, cloned the repository
+
+Now when i am online i'd just like to mount the repository from the server on over to the client, shadowing the local repository. But when offline and the server is not
+mounted the local repository takes place.
+
+The Question is now what would be a viable concept to get this right. Especially will the assistant become confused when it runs on the server side and locally on the laptop
+while the mount is in effect. Would it be sensible not to mount the whole repository tree but only parts like `.git/annex` or `.git/annex/objects`?
+
+Not tried this yet, but I am wondering whats the most viable approach would be.
diff --git a/doc/forum/overmounting_repository_at_home/comment_1_399ac5014c489698e1e45deec4db7311._comment b/doc/forum/overmounting_repository_at_home/comment_1_399ac5014c489698e1e45deec4db7311._comment
new file mode 100644
index 000000000..90ce2ae40
--- /dev/null
+++ b/doc/forum/overmounting_repository_at_home/comment_1_399ac5014c489698e1e45deec4db7311._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://openid.stackexchange.com/user/e65e6d0e-58ba-41de-84cc-1f2ba54cf574"
+ nickname="Mica Semrick"
+ subject="sounds like a bad idea... but..."
+ date="2014-06-24T04:18:51Z"
+ content="""
+From the few details you give, this sounds like a bad idea. git-annex tells different repos apart by using a UUID. You can see this UUID in `.git/config`.
+
+But if you are really insistent on doing this, you could always system link the folder to the spot you want it, then write a script that mounts the server in an arbitrary location and redoes the system link. I'd try this on a copy of the data or with some data that doesn't matter before going for it.
+"""]]
diff --git a/doc/forum/overmounting_repository_at_home/comment_2_d006d89ba204568cdee0731b6251ec1a._comment b/doc/forum/overmounting_repository_at_home/comment_2_d006d89ba204568cdee0731b6251ec1a._comment
new file mode 100644
index 000000000..2413948b7
--- /dev/null
+++ b/doc/forum/overmounting_repository_at_home/comment_2_d006d89ba204568cdee0731b6251ec1a._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="cehteh"
+ ip="217.8.62.137"
+ subject="comment 2"
+ date="2014-06-24T14:03:01Z"
+ content="""
+I know that this is a bad idea right now when done in a naive approach, I am wondering if git-annex could be made aware of this case and how it could be implemented.
+A immature idea for example would be only to overmount the .git/annex/objects folder and let the git-annex check if the objects lay on a different device, if so, refuse to do operation on the object store.
+
+I started this thread to figure out if there is some interest in such functionality and if so, polishing it out to see how it could be done.
+"""]]
diff --git a/doc/forum/overmounting_repository_at_home/comment_3_3734b50c37cbec675813cbeca7bf4ce9._comment b/doc/forum/overmounting_repository_at_home/comment_3_3734b50c37cbec675813cbeca7bf4ce9._comment
new file mode 100644
index 000000000..029e9eba0
--- /dev/null
+++ b/doc/forum/overmounting_repository_at_home/comment_3_3734b50c37cbec675813cbeca7bf4ce9._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://ypid.wordpress.com/"
+ ip="213.153.84.215"
+ subject="Already on todo list"
+ date="2014-06-24T16:58:05Z"
+ content="""
+As is appears to me, the feature you are suggesting is already on \"the todo list\" as [[union_mounting|todo/union_mounting]]. I would also really appreciate this feature …
+"""]]
diff --git a/doc/forum/performance_and_multiple_replication_problems/comment_5_8df6cc8b72e0e78c7380f7d471124498._comment b/doc/forum/performance_and_multiple_replication_problems/comment_5_8df6cc8b72e0e78c7380f7d471124498._comment
new file mode 100644
index 000000000..f881942f9
--- /dev/null
+++ b/doc/forum/performance_and_multiple_replication_problems/comment_5_8df6cc8b72e0e78c7380f7d471124498._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="134.147.14.84"
+ subject="comment 5"
+ date="2014-07-08T12:26:58Z"
+ content="""
+Something to keep in mind for some point in the future: btrfs supports an efficient method by which one can inquire exactly which files have changed since a specified point in time, where the point in time is measured by a unit called «generation».
+
+A program can request the current «generation» index, and later ask btrfs which files have changed after that index, without needing to walk the file-system. This is currently implemented in the user-space program «btrfs filesystem find-new». While it’s called «find-new», this not only find newly created files, but also changed files.
+
+Currently, it seems one needs to be super-user to use «find-new», because it lists changed files for complete subvolumes, but since generations are stored per-file, in the future there will likely be a user-space method for regular users.
+"""]]
diff --git a/doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517.mdwn b/doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517.mdwn
new file mode 100644
index 000000000..0d226d5df
--- /dev/null
+++ b/doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517.mdwn
@@ -0,0 +1,13 @@
+ [2014-05-18 22:38:21 SAST] main: starting assistant version 5.20140517-g0aed6d9
+ Already up-to-date.
+
+ (scanning...) [2014-05-18 22:38:22 SAST] Watcher: Performing startup scan
+ gpg: WARNING: unsafe permissions on homedir `/var/folders/m6/zkd11n111m38ff37zbtgq0lr0000gp/T/git-annex-gpg.tmp.0'
+ gpg: keyring `/Applications/git-annex.app/Contents/MacOS/trustedkeys.gpg' created
+ gpg: Signature made Sun May 18 04:16:11 2014 SAST using DSA key ID XXXXXXXX
+ gpg: Can't check signature: public key not found
+ (started...)
+
+And still facing:
+
+ git-annex-remote-skydrive is not installed in PATH (/Applications/git-annex.app/Contents/MacOS/bundle:/Applications/git-annex.app/Contents/MacOS/bundle:/usr/bin:/bin:/usr/sbin:/sbin)
diff --git a/doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517/comment_1_807d7da99f732f2fa5f9d3cb1ba9f1a1._comment b/doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517/comment_1_807d7da99f732f2fa5f9d3cb1ba9f1a1._comment
new file mode 100644
index 000000000..0cd6a21d9
--- /dev/null
+++ b/doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517/comment_1_807d7da99f732f2fa5f9d3cb1ba9f1a1._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="comment 1"
+ date="2014-06-21T13:07:51Z"
+ content="""
+What exactly are safe permissions?
+"""]]
diff --git a/doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517/comment_2_92a7509fc42ab2347d57f080081d14b5._comment b/doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517/comment_2_92a7509fc42ab2347d57f080081d14b5._comment
new file mode 100644
index 000000000..4767ae75b
--- /dev/null
+++ b/doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517/comment_2_92a7509fc42ab2347d57f080081d14b5._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 2"
+ date="2014-07-03T19:49:03Z"
+ content="""
+That error message seems to occur when git-annex is trying to upgrade itself to a newer version, but for some reason the temporary directory it uses for gpg allows some other user to write to it. Perhaps because of a wacky umask, I don't know. AFAICS it's only a warning and the upgrade still works, but I have made git-annex force a sane umask when creating this temp directory.
+"""]]
diff --git a/doc/forum/possible_gpg_issue.mdwn b/doc/forum/possible_gpg_issue.mdwn
new file mode 100644
index 000000000..5a3d9390b
--- /dev/null
+++ b/doc/forum/possible_gpg_issue.mdwn
@@ -0,0 +1,28 @@
+Hi,
+
+I'm having an issue and not sure if it's to do with git-annex or something external. I'm on Ubuntu 14.04, and have been using git-annex for several months without this issue, but it suddenly started (possibly) after several packages were updated via apt-get upgrade.
+
+We have two remotes configured, one is a local (LAN) smb share, the other is on Amazon S3. We're using shared encryption on the S3 remote, and no encryption on the smb remote.
+
+The problem that started happening recently is when copying to the smb remote. There is no problem copying from the remote, and no problem reading or writing to the drive outside of git-annex. However, copying to the remote fails after it seems to copy most or all of the file and then hang on a gpg step. Again, there is no encryption on this remote. The other S3 remote with shared encryption has no issues. Other devices on the LAN, all OS X, have no issues writing to the remote.
+
+I don't have enough info to necessarily claim this is a bug in git-annex, but I'm not sure what to poke at next to try to figure it out. Any help or advice would be greatly appreciated.
+
+Below is the debug output from a failed git annex copy command.
+
+ cw@ubuntu$ git annex copy annexedfile --to smbremote --debug
+ [2014-11-07 15:35:13 PST] read: git ["--git-dir=/repobase/.git","--work-tree=/repobase","show-ref","git-annex"]
+ [2014-11-07 15:35:13 PST] read: git ["--git-dir=/repobase/.git","--work-tree=/repobase","show-ref","--hash","refs/heads/git-annex"]
+ [2014-11-07 15:35:13 PST] read: git ["--git-dir=/repobase/.git","--work-tree=/repobase","log","refs/heads/git-annex..aa8813d486939544701359dc28fa7b0916917961","--oneline","-n1"]
+ [2014-11-07 15:35:13 PST] read: git ["--git-dir=/repobase/.git","--work-tree=/repobase","log","refs/heads/git-annex..097d5b482d6856ce22814a0c2c5eee43e3e030e4","--oneline","-n1"]
+ [2014-11-07 15:35:13 PST] chat: git ["--git-dir=/repobase/.git","--work-tree=/repobase","cat-file","--batch"]
+ [2014-11-07 15:35:13 PST] read: git ["--git-dir=/repobase/.git","--work-tree=/repobase","ls-files","--cached","-z","--","annexedfile"]
+ copy annexedfile (gpg) (to smbremote...)
+ [2014-11-07 15:35:13 PST] chat: gpg ["--quiet","--trust-model","always","--batch","--passphrase-fd","11","--symmetric","--force-mdc","--no-textmode"]
+ 95% 0.0 B/s 0s/mnt/annex/tmp/GPGHMACSHA1--a097a9b653d1facbe7d37d0e8f9f580261d9adef/GPGHMACSHA1--a097a9b653d1facbe7d37d0e8f9f580261d9adef: hClose: does not exist (Host is down)
+ failed
+ git-annex: copy: 1 failed
+ cw@ubuntu$
+
+Thanks,
+cw
diff --git a/doc/forum/possible_gpg_issue/comment_1_c5a33ff375cddd001e6cb7be8d0ce940._comment b/doc/forum/possible_gpg_issue/comment_1_c5a33ff375cddd001e6cb7be8d0ce940._comment
new file mode 100644
index 000000000..9c43e38a7
--- /dev/null
+++ b/doc/forum/possible_gpg_issue/comment_1_c5a33ff375cddd001e6cb7be8d0ce940._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://openid.stackexchange.com/user/e65e6d0e-58ba-41de-84cc-1f2ba54cf574"
+ nickname="Mica Semrick"
+ subject="is your samba share mounted?"
+ date="2014-11-10T05:08:39Z"
+ content="""
+You should make sure your samba share is mounted and you can read/write to it.
+"""]]
diff --git a/doc/forum/possible_gpg_issue/comment_2_e5ea7fc9be496f71516a238522193744._comment b/doc/forum/possible_gpg_issue/comment_2_e5ea7fc9be496f71516a238522193744._comment
new file mode 100644
index 000000000..ffc69036d
--- /dev/null
+++ b/doc/forum/possible_gpg_issue/comment_2_e5ea7fc9be496f71516a238522193744._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawknHkJJRE0K7_G4sG3YgOkAaihnw0eg9Ao"
+ nickname="Chad"
+ subject="comment 2"
+ date="2014-11-10T18:06:11Z"
+ content="""
+Yes, the drive is mounted rw for all users with no username or password required to connect. There is no problem copying from the drive, and no problem reading or writing to it outside of git-annex.
+"""]]
diff --git a/doc/forum/possible_gpg_issue/comment_3_d505b6e5050d2afa7c8543e21918193d._comment b/doc/forum/possible_gpg_issue/comment_3_d505b6e5050d2afa7c8543e21918193d._comment
new file mode 100644
index 000000000..ade7846db
--- /dev/null
+++ b/doc/forum/possible_gpg_issue/comment_3_d505b6e5050d2afa7c8543e21918193d._comment
@@ -0,0 +1,31 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2014-12-01T21:36:40Z"
+ content="""
+The relevant error message seems to be this:
+
+ hClose: does not exist (Host is down)
+
+Which doesn't point at gpg being the problem to me. git-annex is trying to
+close a file after writing it, and that's failing with EHOSTDOWN. Not a usual
+error code, but then you're using a network filesystem, which has many unusual
+failure modes.
+
+The next step would probably be to strace git-annex to see what syscall
+is failing. Looks like it might be close(2), but then again hClose might be
+doing something else first.
+
+It's possible that this has something to do with the SMB share not supporting
+some POSIX filesystem feature that git-annex uses. Lack of support for fcntl
+locking is a problem with NFS, dunno about SMB.
+
+What would probably work better would be to set up a
+[[directory special remote|special_remotes/directory]] on the SMB share.
+That requires a lot less from the filesystem than a full-fledged git remote
+does.
+
+(Two parts of what you said don't make sense to me BTS. I see no evidence of it hanging in the transcript, so am unclear why
+you said it was hanging, as opposed to gracefully failing. And, you said the SMB remote was not configured to use encryption, but it's clearly
+encrypted in the transcript.)
+"""]]
diff --git a/doc/forum/possible_gpg_issue/comment_4_e52099d461d0df99040f664a3af23caf._comment b/doc/forum/possible_gpg_issue/comment_4_e52099d461d0df99040f664a3af23caf._comment
new file mode 100644
index 000000000..a2e7bd631
--- /dev/null
+++ b/doc/forum/possible_gpg_issue/comment_4_e52099d461d0df99040f664a3af23caf._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawknHkJJRE0K7_G4sG3YgOkAaihnw0eg9Ao"
+ nickname="Chad"
+ subject="comment 4"
+ date="2014-12-02T22:51:24Z"
+ content="""
+Thanks so much. I'll try digging some more into the syscalls and see what I can figure out. We do have it set up as a directory remote.
+
+To clarify, when I said it was \"hanging\" maybe that wasn't a good word choice. What I meant was that it very quickly gets to 95% or 100% progress, then freezes and does nothing for a while, before ultimately reporting the error and exiting.
+
+Also I take back what I said about it not using encryption. It is. I was confused by the fact that there are unencrypted files on the disk, but it turns out they are all from a long time ago, perhaps before we started using encryption. Everything more recent is encrypted.
+
+Thanks!
+-c
+
+
+"""]]
diff --git a/doc/forum/possible_gpg_issue/comment_5_a0c8afc2d8583d30073b62396b254a6e._comment b/doc/forum/possible_gpg_issue/comment_5_a0c8afc2d8583d30073b62396b254a6e._comment
new file mode 100644
index 000000000..7011e7fd5
--- /dev/null
+++ b/doc/forum/possible_gpg_issue/comment_5_a0c8afc2d8583d30073b62396b254a6e._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawknHkJJRE0K7_G4sG3YgOkAaihnw0eg9Ao"
+ nickname="Chad"
+ subject="comment 5"
+ date="2014-12-03T01:05:17Z"
+ content="""
+Yeah, it's close returning the error. As far as I can tell the calls involving that file are:
+
+ open(path, O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = fh
+ fstat(fh, {st_mode=S_IFREG|0755, st_size=sz, ...}) = 0
+ ftruncate(fh, 0) = 0
+ ioctl(fh, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, ptr) = -1 ENOTTY (Inappropriate ioctl for device)
+ write(fh, data, len) x 60
+ close(fh) = -1 EHOSTDOWN (Host is down)
+
+All the calls to write appear to succeed, followed by the call to close that fails. Maybe the previously failed ioctl command has something to do with it? I guess as was mentioned previously, there may be an operation the device doesn't support, but the weird thing is this used to work fine.
+"""]]
diff --git a/doc/forum/possible_gpg_issue/comment_6_2a0120d6b586594cfd9baabbd6605373._comment b/doc/forum/possible_gpg_issue/comment_6_2a0120d6b586594cfd9baabbd6605373._comment
new file mode 100644
index 000000000..84c9c5b4f
--- /dev/null
+++ b/doc/forum/possible_gpg_issue/comment_6_2a0120d6b586594cfd9baabbd6605373._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 6"""
+ date="2015-02-09T18:41:23Z"
+ content="""
+Sorry about the delay getting back to this.. It's great you were able
+to provide the strace.
+
+I don't think that the ioctl is at fault. That seems to be something
+that's done by the IO layer when opening a handle. It does not involve
+locking.
+
+Looks to me like the writes get buffered and it fails to flush to the SMB
+server on close.
+"""]]
diff --git a/doc/forum/public__44___read_only_annex_without_location_tracking.mdwn b/doc/forum/public__44___read_only_annex_without_location_tracking.mdwn
new file mode 100644
index 000000000..88f8b21c2
--- /dev/null
+++ b/doc/forum/public__44___read_only_annex_without_location_tracking.mdwn
@@ -0,0 +1,7 @@
+I would like to use a public, read only annex to publish photos. I have a server, running gitolite, with git-annex setup, which I use successfully to sync content between my own devices.
+
+But, with a public annex, I would like the view of the repository available from the server to be that only the server has the content, and not to have, or give out any of the location tracking information about any other annexes?
+
+A more concrete example would be, how do I get a photo in to git annex locally, and then push this to the server for public access, without publishing information about my local repository?
+
+From the public annexes I have looked at, this does not appear to be done. So I am unsure if this is even possible, however it seems a desirable thing to do?
diff --git a/doc/forum/public__44___read_only_annex_without_location_tracking/comment_1_47262f048a87fd6b781090f880a9bf99._comment b/doc/forum/public__44___read_only_annex_without_location_tracking/comment_1_47262f048a87fd6b781090f880a9bf99._comment
new file mode 100644
index 000000000..99ed6f25a
--- /dev/null
+++ b/doc/forum/public__44___read_only_annex_without_location_tracking/comment_1_47262f048a87fd6b781090f880a9bf99._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 1"
+ date="2014-07-03T19:35:21Z"
+ content="""
+There's not a way to do it yet.
+
+The fundamental problem is that there is a variety of information stored on the git-annex branch, including location tracking information that you don't want (locations on non-public repositories), location tracking information you do want (locations on public repositories), urls, metadata, repository configurations and descriptions (some for public and some for non-public repositories). It seems fairly hard to draw a line. And once a line is drawn, there would be two diverged git-annex branches on the public and private repos, and the private repo would need to synthesize an updated version of the public branch every time it synced.
+
+Instead, the last time this came up, I added the remote.<name>.annex-readonly setting. This allows for at least having a private repository (or a whole network of repositories that all communicate together but remain private) that pulls changes from a public repo, but avoids making changes to it. Certainly not a complete solution, since changes have to be contributed to the public repo in some out-of-band way, like perhaps using git-format-patch and git-am.
+"""]]
diff --git a/doc/forum/public__44___read_only_annex_without_location_tracking/comment_2_ec3ff6487c9e5c89c7e508d72518bd50._comment b/doc/forum/public__44___read_only_annex_without_location_tracking/comment_2_ec3ff6487c9e5c89c7e508d72518bd50._comment
new file mode 100644
index 000000000..ad74e6866
--- /dev/null
+++ b/doc/forum/public__44___read_only_annex_without_location_tracking/comment_2_ec3ff6487c9e5c89c7e508d72518bd50._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="cbaines"
+ ip="82.19.50.118"
+ subject="comment 2"
+ date="2014-07-03T20:13:20Z"
+ content="""
+Thanks for your response.
+
+The method you describe sounds like it might just do. I'll have a try, and see if it works out :)
+"""]]
diff --git a/doc/forum/recovery_from_failed_merge.mdwn b/doc/forum/recovery_from_failed_merge.mdwn
new file mode 100644
index 000000000..802c66e51
--- /dev/null
+++ b/doc/forum/recovery_from_failed_merge.mdwn
@@ -0,0 +1,7 @@
+Starting the assistant version 5.20140613 on my repository (~60GB), it performed a merge
+with an offline-repository, deleting a large part of the files.
+Since the repo is in direct mode, I cannot do a git revert. The other repo is not available anymore
+
+Any way of getting them back?
+Also, du shows me that the .git/annex/objects folder has approximately the size of my repo before the incident.
+
diff --git a/doc/forum/recovery_from_failed_merge/comment_1_84e5b55d473d16bc9bdba5d88dc29bc3._comment b/doc/forum/recovery_from_failed_merge/comment_1_84e5b55d473d16bc9bdba5d88dc29bc3._comment
new file mode 100644
index 000000000..3f61d8cb9
--- /dev/null
+++ b/doc/forum/recovery_from_failed_merge/comment_1_84e5b55d473d16bc9bdba5d88dc29bc3._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-06-16T17:58:22Z"
+ content="""
+All your files are still there..
+
+You can either use `git annex indirect` to switch to indirect mode and then `git revert`, or you could git clone the repo to someplace else, do the revert there, and then run `git annex sync` in first the clone and then in the direct mode repo to sync the reversion back.
+"""]]
diff --git a/doc/forum/remembering_state.mdwn b/doc/forum/remembering_state.mdwn
new file mode 100644
index 000000000..3edc193bc
--- /dev/null
+++ b/doc/forum/remembering_state.mdwn
@@ -0,0 +1,5 @@
+so i am wondering how better to remember the state of a repository.
+
+the use case is this: i have this part of my music collection which i consider to be my "favorites". i would like to have only those on an external hard drive, but also on my portable music player. so i cloned my main music collection to the external hard drive and did `git annex get` on the files i wanted there. now i want to replicate that to the music player - how would i go around doing that? if i clone that repo again, it will all have empty symlinks and i would have to reproduce the same process all over again, which i can script, but it seems a little quirky...
+
+ideas? --[[anarcat]]
diff --git a/doc/forum/remembering_state/comment_1_4a6ac5f50dfa5a17a0f0ccd0c2e7a466._comment b/doc/forum/remembering_state/comment_1_4a6ac5f50dfa5a17a0f0ccd0c2e7a466._comment
new file mode 100644
index 000000000..bc9a07223
--- /dev/null
+++ b/doc/forum/remembering_state/comment_1_4a6ac5f50dfa5a17a0f0ccd0c2e7a466._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlQeMMI82sfgZ9lim_9GqLkc4fsd0Z3Qt8"
+ nickname="Ronald"
+ subject="comment 1"
+ date="2014-05-14T09:08:22Z"
+ content="""
+I'm still learning git-annex myself, but I think you can make a new branch 'favorites'. Sort out your favorite music and make a checkout on your external HDD and music player. In the walkthrough you can see how that works.
+"""]]
diff --git a/doc/forum/remembering_state/comment_2_1b02d3713a2986bc027d166589a11c3f._comment b/doc/forum/remembering_state/comment_2_1b02d3713a2986bc027d166589a11c3f._comment
new file mode 100644
index 000000000..3c3f393a6
--- /dev/null
+++ b/doc/forum/remembering_state/comment_2_1b02d3713a2986bc027d166589a11c3f._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkYmMFDdf3GJ9Oba6NCVkzGc4JyB9WavMs"
+ nickname="Xinruo"
+ subject="comment 2"
+ date="2014-05-15T02:07:06Z"
+ content="""
+I think a better solution is to use http://git-annex.branchable.com/tips/metadata_driven_views/
+You can tag the files as favorites, then use get --metadata tag=favorites to get only favorites files.
+"""]]
diff --git a/doc/forum/remembering_state/comment_3_b48775ea1e90b061b084f61a4a9baca5._comment b/doc/forum/remembering_state/comment_3_b48775ea1e90b061b084f61a4a9baca5._comment
new file mode 100644
index 000000000..2b349527c
--- /dev/null
+++ b/doc/forum/remembering_state/comment_3_b48775ea1e90b061b084f61a4a9baca5._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 3"
+ date="2014-05-15T20:01:14Z"
+ content="""
+While you can certianly use views for this, I tend to do the same with my sound files without view, but just using location tracking info. I have a set of music I'm currently listening to, and want to have more or less the same files on multiple computers as I have on my laptop. With maybe a bit more on some computers with more space. So, I do:
+
+ git annex sync
+ git annex get --in darkstar
+
+Where \"darkstar\" is the name of the repository on my laptop.
+
+Another nice trick that also takes advantage of the location tracking logs is this to get back some files you dropped temporarily to free up space:
+
+ git annex get --in='here@{yesterday}'
+
+
+"""]]
diff --git a/doc/forum/remembering_state/comment_4_cbebcc6ed4bdae6815c0576475e96f6a._comment b/doc/forum/remembering_state/comment_4_cbebcc6ed4bdae6815c0576475e96f6a._comment
new file mode 100644
index 000000000..c4bf94390
--- /dev/null
+++ b/doc/forum/remembering_state/comment_4_cbebcc6ed4bdae6815c0576475e96f6a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="70.83.139.100"
+ subject="comment 4"
+ date="2014-05-21T18:02:51Z"
+ content="""
+i like @yesterday, that's a neat trick that would have basically resolved my problem here. thanks!
+"""]]
diff --git a/doc/forum/remote_server_client_repositories_are_bare__33____63__/comment_3_32bf10cf837db16566dcc99d0b9aaf67._comment b/doc/forum/remote_server_client_repositories_are_bare__33____63__/comment_3_32bf10cf837db16566dcc99d0b9aaf67._comment
new file mode 100644
index 000000000..bf302f7c8
--- /dev/null
+++ b/doc/forum/remote_server_client_repositories_are_bare__33____63__/comment_3_32bf10cf837db16566dcc99d0b9aaf67._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkftzaCvV7EDKVDfJhsQZ3E1Vn-0db516w"
+ nickname="Edward"
+ subject="One snag"
+ date="2014-07-28T19:37:04Z"
+ content="""
+I setup a non-bare repo on a server by following the above steps (git init, git annex init, then add it as a Remote Server from elsewhere and combine repos). It worked, but I hit a snag and needed to add another step.
+
+After git init, you're not sitting on any branch yet, and that seems to have prevented the assistant from doing anything to synchronize the working tree on the server. After I did \"git checkout synced/master\", it started working.
+"""]]
diff --git a/doc/forum/remote_server_client_repositories_are_bare__33____63__/comment_4_cd04cfaf97f200d5e581b83bb8d018b2._comment b/doc/forum/remote_server_client_repositories_are_bare__33____63__/comment_4_cd04cfaf97f200d5e581b83bb8d018b2._comment
new file mode 100644
index 000000000..5213a7f95
--- /dev/null
+++ b/doc/forum/remote_server_client_repositories_are_bare__33____63__/comment_4_cd04cfaf97f200d5e581b83bb8d018b2._comment
@@ -0,0 +1,26 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkRW96vF6lsjg57muQ4nPnQqJJUAKGKGzw"
+ nickname="Catalin"
+ subject="Caveat with 'git checkout synced/master'"
+ date="2014-12-26T07:43:18Z"
+ content="""
+There's at least one caveat with the 'git checkout synced/master' workaround. When the local assistant next tries to sync with the remote, it will try to push, and the remote will refuse the push into the currently checked out branch:
+
+[2014-12-26 02:40:10 EST] main: Syncing with nyc.nanobit.org_annex
+remote: error: refusing to update checked out branch: refs/heads/synced/master
+remote: error: By default, updating the current branch in a non-bare repository
+remote: error: is denied, because it will make the index and work tree inconsistent
+remote: error: with what you pushed, and will require 'git reset --hard' to match
+remote: error: the work tree to HEAD.
+remote: error:
+remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
+remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
+remote: error: its current branch; however, this is not recommended unless you
+remote: error: arranged to update its work tree to match what you pushed in some
+remote: error: other way.
+remote: error:
+remote: error: To squelch this message and still keep the default behaviour, set
+remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
+To ssh://catalinp@git-annex-nyc.nanobit.org-catalinp_22_annex/~/annex/
+ ! [remote rejected] annex/direct/master -> synced/master (branch is currently checked out)
+"""]]
diff --git a/doc/forum/repair_stuck_on_ls-tree_command.mdwn b/doc/forum/repair_stuck_on_ls-tree_command.mdwn
new file mode 100644
index 000000000..3ff9f56c5
--- /dev/null
+++ b/doc/forum/repair_stuck_on_ls-tree_command.mdwn
@@ -0,0 +1,54 @@
+Hi,
+
+I have run the git annex repair command on one of my repositories and it has been running for 38h hours now. I have monitored the process and its sons with htop and it seems that git annex repair is stuck.
+
+It repeatedly launches the following command:
+
+ git --git-dir=/home/vincent/photos2/.git --work-tree=/home/vincent/photos2 ls-tree --full-tree -z -r -- 5fe5193e079631c0ceac0688ae0a6c1636491b61
+
+I have tried to execute it by hand and it produces a lot of output. I have redirected it into some file in order to count the content produced by this command.
+
+ vincent@berlioz:~/photos2/.git$ git --git-dir=/home/vincent/photos2/.git --work-tree=/home/vincent/photos2 ls-tree --full-tree -z -r -- 5fe5193e079631c0ceac0688ae0a6c1636491b61 > /tmp/ls-tree
+ vincent@berlioz:/tmp$ wc ls-tree
+ 0 232525 11611220 ls-tree
+
+Could this cause some troubles to git-annex ? Maybe my repository is just too big and it demands some time to deal with the whole thing?
+
+Before doing the git annex repair command I have tried to delete a distant annex (hosted on a raspberry pi, running an arm raspbian) from this one, using the git annex webapp website. Since it was kind of stuck I asked webapp to shutdown. I ran git annex repair for some time. It looked like stuck. I stopped it, then tried git fsck. It ran well. I tried git annex fsck, it took all my RAM and swap. The process was eating 14 Giga bytes of memory. I tried git gc and the same memory problem occured. I ran git annex repair again and it has been running for 38 hours now. I am lost. Please help.
+
+ vincent@berlioz:~$ LANG=C apt-cache policy git-annex
+ git-annex:
+ Installed: 5.20141125
+ Candidate: 5.20141125
+ Package pin: 5.20141125
+ Version table:
+ *** 5.20141125 950
+ 400 http://ftp.fr.debian.org/debian/ testing/main amd64 Packages
+ 50 http://ftp.fr.debian.org/debian/ unstable/main amd64 Packages
+ 100 /var/lib/dpkg/status
+ 3.20120629 950
+ 900 http://ftp.fr.debian.org/debian/ wheezy/main amd64 Packages
+
+ vincent@berlioz:~/photos2$ du -sh .
+ 152G .
+
+Info gathered from another client annex:
+
+ vincent@tigrou:/mnt/mars/images/photos2$ git annex info
+ repository mode: indirect
+ trusted repositories: 0
+ semitrusted repositories: 11
+ 8<------------skipped repositories list------------->8
+ untrusted repositories: 1
+ a357bb9e-7a9d-4112-b74c-13707e2c7f85 -- vincent@rhett:~/photos [gateway]
+ transfers in progress: none
+ available local disk space: 945.91 gigabytes (+1 megabyte reserved)
+ bad keys size: 368 bytes (clean up with git-annex unused)
+ local annex keys: 76070
+ local annex size: 383.91 gigabytes
+ annexed files in working tree: 59117
+ size of annexed files in working tree: 319.73 gigabytes
+ bloom filter size: 16 mebibytes (15.2% full)
+ backend usage:
+ SHA256E: 101902
+ SHA256: 33285
diff --git a/doc/forum/repair_stuck_on_ls-tree_command/comment_10_791c50f8a2284b704e34cacf15637341._comment b/doc/forum/repair_stuck_on_ls-tree_command/comment_10_791c50f8a2284b704e34cacf15637341._comment
new file mode 100644
index 000000000..3058cbaa0
--- /dev/null
+++ b/doc/forum/repair_stuck_on_ls-tree_command/comment_10_791c50f8a2284b704e34cacf15637341._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="vho"
+ subject="comment 10"
+ date="2014-12-18T10:27:07Z"
+ content="""
+This one should work:
+https://www.dropbox.com/s/t7b406wm6m3vm6c/photos2.tar.xz.gpg?dl=0
+
+ $ md5sum photos2.tar.xz.gpg
+ df2b9bde3d1ad23d9f3c4247d2f5b21a photos2.tar.xz.gpg
+ $ sha1sum photos2.tar.xz.gpg
+ cac6f8c07a1d95fb48e3d9aa0f4699a2c77c00d598 photos2.tar.xz.gpg
+
+"""]]
diff --git a/doc/forum/repair_stuck_on_ls-tree_command/comment_11_1d951126a9633b206dffbc77bfc65f6a._comment b/doc/forum/repair_stuck_on_ls-tree_command/comment_11_1d951126a9633b206dffbc77bfc65f6a._comment
new file mode 100644
index 000000000..a569fcbdf
--- /dev/null
+++ b/doc/forum/repair_stuck_on_ls-tree_command/comment_11_1d951126a9633b206dffbc77bfc65f6a._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 11"""
+ date="2015-02-09T21:13:28Z"
+ content="""
+Finally got back to this. I downloaded the file.
+
+You may be able to fix your repository by running `git annex forget`
+
+I guess this is the same problem described in
+[[bugs/git-annex_branch_shows_commit_with_looong_commitlog]]
+"""]]
diff --git a/doc/forum/repair_stuck_on_ls-tree_command/comment_1_9555c925516ce3be83b4dd17d587100f._comment b/doc/forum/repair_stuck_on_ls-tree_command/comment_1_9555c925516ce3be83b4dd17d587100f._comment
new file mode 100644
index 000000000..f2c7a67d2
--- /dev/null
+++ b/doc/forum/repair_stuck_on_ls-tree_command/comment_1_9555c925516ce3be83b4dd17d587100f._comment
@@ -0,0 +1,37 @@
+[[!comment format=mdwn
+ username="vho"
+ subject="Update"
+ date="2014-12-01T15:47:23Z"
+ content="""
+It seems I could sort things of.
+
+I have run git annex sync from another annex. It took 30 minutes but could synchronize with the slow annex. Then I launched git annex sync on the slow annex (the one which seemed to had troubles with the repair command). It took 278 minutes, used all my ram and swap, but managed to end successfully.
+
+I launched git annex sync again today, another 279 minutes:
+
+ vincent@berlioz:~/photos2$ time git annex sync
+ commit ok
+ pull tigrou
+ Error reading response length from authentication socket.
+ Compression automatique du dépôt en tâche de fond pour optimiser les performances.
+ Voir \"git help gc\" pour toute information sur le nettoyage manuel.
+ ok
+ pull gateway
+ Compression automatique du dépôt en tâche de fond pour optimiser les performances.
+ Voir \"git help gc\" pour toute information sur le nettoyage manuel.
+ ok
+ push gateway
+ fatal: The remote end hung up unexpectedly
+
+ Pushing to gateway failed.
+
+ (non-fast-forward problems can be solved by setting receive.denyNonFastforwards to false in the remote's git config)
+ failed
+ git-annex: sync: 1 failed
+
+ real 279m27.760s
+ user 7m15.159s
+ sys 3m4.340s
+
+I will try to do some git gc.
+"""]]
diff --git a/doc/forum/repair_stuck_on_ls-tree_command/comment_2_17327b90d09f8dd0bf7f359c16cf69dd._comment b/doc/forum/repair_stuck_on_ls-tree_command/comment_2_17327b90d09f8dd0bf7f359c16cf69dd._comment
new file mode 100644
index 000000000..fa046da21
--- /dev/null
+++ b/doc/forum/repair_stuck_on_ls-tree_command/comment_2_17327b90d09f8dd0bf7f359c16cf69dd._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2014-12-02T17:24:30Z"
+ content="""
+According to the ls-tree output you posted, the git tree object
+5fe5193e079631c0ceac0688ae0a6c1636491b61 is somehow 11 mb
+in size, which seems quite enormous, since a git tree object
+is just a list of files in a directory in the repo.
+
+Does your repository actually contain a directory that big?
+(This seems unlikely, since git annex info says there are only 59117 annxed
+files.)
+
+What is in the output of `git-ls-tree 5fe5193e079631c0ceac0688ae0a6c1636491b61`
+that is so enormous?
+
+I think you need to figure this out to get anywhere, because it's quite
+strange. Or, if you're willing to put the git repository someplace
+(minus .git/annex/), I could take a look at it.
+"""]]
diff --git a/doc/forum/repair_stuck_on_ls-tree_command/comment_2_2ae0c755f5a0bf5c93afe5e081fcb915._comment b/doc/forum/repair_stuck_on_ls-tree_command/comment_2_2ae0c755f5a0bf5c93afe5e081fcb915._comment
new file mode 100644
index 000000000..da2f90797
--- /dev/null
+++ b/doc/forum/repair_stuck_on_ls-tree_command/comment_2_2ae0c755f5a0bf5c93afe5e081fcb915._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="vho"
+ subject="Still stuck"
+ date="2014-12-02T09:59:20Z"
+ content="""
+vincent@berlioz:~/photos2$ git config --global pack.packSizeLimit 100m
+vincent@berlioz:~/photos2$ git config --global pack.windowMemory 100m
+vincent@berlioz:~/photos2$ git config --global pack.threads 1
+vincent@berlioz:~/photos2$ time git gc
+error: pack-objects died of signal 9
+error: failed to run repack
+
+real 21m29.451s
+user 1m31.414s
+sys 0m9.141s
+
+:(
+
+"""]]
diff --git a/doc/forum/repair_stuck_on_ls-tree_command/comment_4_875f9e36a94264a92eb097e9f4bda444._comment b/doc/forum/repair_stuck_on_ls-tree_command/comment_4_875f9e36a94264a92eb097e9f4bda444._comment
new file mode 100644
index 000000000..77f7a8535
--- /dev/null
+++ b/doc/forum/repair_stuck_on_ls-tree_command/comment_4_875f9e36a94264a92eb097e9f4bda444._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="vho"
+ subject="comment 4"
+ date="2014-12-02T21:11:39Z"
+ content="""
+Thanks for your time and help.
+
+http://hobeika.fr/~vincent/git/ls-tree
+
+ vincent@berlioz:~$ wc -l /tmp/ls-tree
+ 4103 /tmp/ls-tree
+
+ vincent@berlioz:~/photos2$ du -sh --exclude=.git/annex
+ 863M .
+
+I'll have to find some place to store that.
+
+Yet I don't think my repository holds such a big directory since there are no problems on other annexes.
+
+"""]]
diff --git a/doc/forum/repair_stuck_on_ls-tree_command/comment_5_d5c29dc4ea49542f7053bf2e83e0f07f._comment b/doc/forum/repair_stuck_on_ls-tree_command/comment_5_d5c29dc4ea49542f7053bf2e83e0f07f._comment
new file mode 100644
index 000000000..5af49a7e4
--- /dev/null
+++ b/doc/forum/repair_stuck_on_ls-tree_command/comment_5_d5c29dc4ea49542f7053bf2e83e0f07f._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnPgn611P6ym5yyL0BS8rUzO0_ZKRldMt0"
+ nickname="Samuel"
+ subject="Not so big tree"
+ date="2014-12-03T07:36:22Z"
+ content="""
+The output of the ls-tree command suggests this tree is the git-annex branch at some point in time.
+
+I tried on my photos annex to ls-tree the git-annex branch and got.
+
+ $ git ls-tree -r --full-tree git-annex | wc
+ 156405 625620 23685538
+
+My git-annex tree is about 22Mib in size, that means twice bigger than yours (no
+dumb joke intended) and I don't suffer such problem.
+
+"""]]
diff --git a/doc/forum/repair_stuck_on_ls-tree_command/comment_6_061770159851c0f06a962937dff035b9._comment b/doc/forum/repair_stuck_on_ls-tree_command/comment_6_061770159851c0f06a962937dff035b9._comment
new file mode 100644
index 000000000..5f73e65cf
--- /dev/null
+++ b/doc/forum/repair_stuck_on_ls-tree_command/comment_6_061770159851c0f06a962937dff035b9._comment
@@ -0,0 +1,30 @@
+[[!comment format=mdwn
+ username="vho"
+ subject="Trying to make git gc pass with a huge swap"
+ date="2014-12-11T16:52:16Z"
+ content="""
+I have created a 100 GB swap file and ran git gc again.
+It ate my 8 GB of RAM + 38 GB of swap. It ended successfully:
+
+ vincent@berlioz:~/photos2$ time git gc --aggressive
+ Décompte des objets: 2263783, fait.
+ Compression des objets: 100% (2253014/2253014), fait.
+ Écriture des objets: 100% (2263783/2263783), fait.
+ Total 2263783 (delta 1567807), reused 284965 (delta 0)
+ Suppression des objets dupliqués: 100% (256/256), fait.
+ Vérification de la connectivité: 2263783, fait.
+
+ real 110m18.565s
+ user 37m38.225s
+ sys 3m23.457s
+
+Yet the following git annex sync didn't do better than previous ones and took 285 minutes to complete.
+
+I am going to check my hard disk drive to see if there aren't any third party problem.
+
+ vincent@berlioz:~/photos2$ du -sh --exclude=.git/annex
+ 510M .
+
+Yet it shrank by 300 MB.
+
+"""]]
diff --git a/doc/forum/repair_stuck_on_ls-tree_command/comment_7_5d9e5fd148d5f9e918ad818e07009d69._comment b/doc/forum/repair_stuck_on_ls-tree_command/comment_7_5d9e5fd148d5f9e918ad818e07009d69._comment
new file mode 100644
index 000000000..b27b50377
--- /dev/null
+++ b/doc/forum/repair_stuck_on_ls-tree_command/comment_7_5d9e5fd148d5f9e918ad818e07009d69._comment
@@ -0,0 +1,30 @@
+[[!comment format=mdwn
+ username="vho"
+ subject="update"
+ date="2014-12-18T00:43:22Z"
+ content="""
+Hi,
+
+I have uploaded the repository to:
+http://dl.free.fr/bczxhyOhy
+
+You can decrypt it with your gpg key. It weights 200 Mo.
+
+Moreover when I try to run git annex whereis on files present only on the defective annex from another annex I get the following error:
+
+ $ git annex whereis IMG_4701.JPG
+ whereis IMG_4701.JPG (0 copies) failed
+ git-annex: whereis: 1 failed
+
+I guess the defective annex could not completely synchronize with the others.
+
+I also tried to look at the git tree with gitk --all.
+Well there seems to be a lot of commit with message update (recovery from race)
+I am forced to kill gitk because it starts lagging a lot.
+
+Hopefully you will be able to provide me some hints on how to resolve this issue.
+
+Best regards
+--
+vho
+"""]]
diff --git a/doc/forum/repair_stuck_on_ls-tree_command/comment_8_726c9a887b7df1833d7aef3bdce50517._comment b/doc/forum/repair_stuck_on_ls-tree_command/comment_8_726c9a887b7df1833d7aef3bdce50517._comment
new file mode 100644
index 000000000..f79b16f19
--- /dev/null
+++ b/doc/forum/repair_stuck_on_ls-tree_command/comment_8_726c9a887b7df1833d7aef3bdce50517._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="vho"
+ subject="(recovery from race)"
+ date="2014-12-18T00:46:09Z"
+ content="""
+git show 7dc2be23ddb9bda2edc0f01d4bbec2fdb5216763 seems quite abnormal.
+"""]]
diff --git a/doc/forum/repair_stuck_on_ls-tree_command/comment_9_163cdd18380a13aaa13d68d516af1e30._comment b/doc/forum/repair_stuck_on_ls-tree_command/comment_9_163cdd18380a13aaa13d68d516af1e30._comment
new file mode 100644
index 000000000..f0d02075b
--- /dev/null
+++ b/doc/forum/repair_stuck_on_ls-tree_command/comment_9_163cdd18380a13aaa13d68d516af1e30._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="vho"
+ subject="failed upload"
+ date="2014-12-18T09:18:14Z"
+ content="""
+It seems the upload failed at some point. I am going to share it somewhere else
+"""]]
diff --git a/doc/forum/repo_corruption_in_usb_external_drive.mdwn b/doc/forum/repo_corruption_in_usb_external_drive.mdwn
new file mode 100644
index 000000000..989126837
--- /dev/null
+++ b/doc/forum/repo_corruption_in_usb_external_drive.mdwn
@@ -0,0 +1,41 @@
+I'm sorry to ask this again, but I'm not being able to find my previous message regarding this issue. I'm finding very hard to find older posts in forums. Is there a way to search for all my posted messages?
+Anyway, after some automount problems (changed mount point name), my usb repo (direct) ended in a weird state.
+See for instance the screenshot: <http://picpaste.com/git-annex-problem-eZvOl90y.jpg>
+
+In addition making a git-annex info gives the following:
+
+ * repository mode: direct
+ * trusted repositories: error: refs/heads/master does not point to a valid object!
+ * error: refs/heads/synced/git-annex does not point to a valid object!
+ * error: refs/heads/synced/master does not point to a valid object!
+ * error: refs/remotes/sapo/annex/direct/master does not point to a valid object!
+ * error: refs/remotes/sapo/git-annex does not point to a valid object!
+ * error: refs/remotes/sapo/master does not point to a valid object!
+ * error: refs/synced/1912d5a7-3929-47f0-8e25-a071d7079cc4/git-annex does not point to a valid object!
+ * error: refs/synced/1912d5a7-3929-47f0-8e25-a071d7079cc4/master does not point to a valid object!
+ * error: refs/heads/master does not point to a valid object!
+ * error: refs/heads/synced/git-annex does not point to a valid object!
+ * error: refs/heads/synced/master does not point to a valid object!
+ * error: refs/remotes/sapo/annex/direct/master does not point to a valid object!
+ * error: refs/remotes/sapo/git-annex does not point to a valid object!
+ * error: refs/remotes/sapo/master does not point to a valid object!
+ * error: refs/synced/1912d5a7-3929-47f0-8e25-a071d7079cc4/git-annex does not point to a valid object!
+ * error: refs/synced/1912d5a7-3929-47f0-8e25-a071d7079cc4/master does not point to a valid object!
+ * fatal: index file smaller than expected
+ * git-annex: failed to read sha from git write-tree
+
+
+What should I do? delete the usb repo and start again. Thank god this is just a trial.
+
+What happens if a file gets corrupted. Lets say it is corrupted in repo A, and fine in repo B. Will the good copy be overridden?
+
+git-repair takes a long time and seems to be stuck there, or maybe it just takes a long time (10Gb repo). Is this normal?
+ > git-annex repair
+ Running git fsck ...
+ Initialized empty Git repository in /tmp/tmprepo.1/.git/
+ Trying to recover missing objects from remote sapo.
+ Unpacking all pack files.
+ Unpacking objects: 100% (348848/348848), done.
+
+
+Thanks in advance.
diff --git a/doc/forum/repo_corruption_in_usb_external_drive/comment_1_d9122bb0cc3551d92877c299a25b9c9e._comment b/doc/forum/repo_corruption_in_usb_external_drive/comment_1_d9122bb0cc3551d92877c299a25b9c9e._comment
new file mode 100644
index 000000000..ff325983d
--- /dev/null
+++ b/doc/forum/repo_corruption_in_usb_external_drive/comment_1_d9122bb0cc3551d92877c299a25b9c9e._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-15T18:50:29Z"
+ content="""
+It's normal for git-repair to take a long time.
+
+git-annex uses checksums to detect if a file gets corrupted.
+"""]]
diff --git a/doc/forum/retrieving_previous_versions/comment_2_e9251f66154e49a77be661c4b4918e18._comment b/doc/forum/retrieving_previous_versions/comment_2_e9251f66154e49a77be661c4b4918e18._comment
new file mode 100644
index 000000000..04d7b8e6f
--- /dev/null
+++ b/doc/forum/retrieving_previous_versions/comment_2_e9251f66154e49a77be661c4b4918e18._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlbKgUeSjtEVC2PoXZsOEcQqTDwI52fsb8"
+ nickname="John"
+ subject="what is stored?"
+ date="2014-11-25T20:57:29Z"
+ content="""
+I have an image 'logo.jpg' that is 100kb. I am using indirect mode.
+I add the logo to the annex; my understanding is that the file contents is stored in .git/annex/....
+
+I do more work in Photoshop to improve logo.jpg. Now, I have a new version of 'logo.jpg' that is 150kb.
+I add this new version of logo.jpg to the annex.
+
+Does the .git/annex area now contain two instances of the logo.jpg contents, one for the 100kb and one for the 150kb, with metadata pointing to each?
+
+
+"""]]
diff --git a/doc/forum/retrieving_previous_versions/comment_3_5b0ca6fbc000727bf78f5fc4ba34b91a._comment b/doc/forum/retrieving_previous_versions/comment_3_5b0ca6fbc000727bf78f5fc4ba34b91a._comment
new file mode 100644
index 000000000..e8497dbbb
--- /dev/null
+++ b/doc/forum/retrieving_previous_versions/comment_3_5b0ca6fbc000727bf78f5fc4ba34b91a._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2014-12-01T22:30:16Z"
+ content="""
+Yes, both versions of the file are stored in `.git/annex/objects`,
+unless you move them to some other repository, or unless
+you use `git annex dropunused` to delete the old version.
+"""]]
diff --git a/doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__.mdwn b/doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__.mdwn
new file mode 100644
index 000000000..2a22d6ee7
--- /dev/null
+++ b/doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__.mdwn
@@ -0,0 +1,13 @@
+When trying to setup an rsync.net repo I always get the following error:
+
+Permission denied, please try again.
+Permission denied, please try again.
+Received disconnect from 114.xxx.xxx.xxx: 2: Too many authentication failures for 2*****
+
+I can ssh into the account without any problems and couldn't find anything, which would have helped me any further.
+Any ideas? Is the problem sitting in front of the computer? Is it a bug?
+
+Thanks.
+David
+
+This is happening on Mavericks (10.9)
diff --git a/doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__/comment_1_7754e2cfb72b034effe8642c1b3e593e._comment b/doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__/comment_1_7754e2cfb72b034effe8642c1b3e593e._comment
new file mode 100644
index 000000000..d29f6482c
--- /dev/null
+++ b/doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__/comment_1_7754e2cfb72b034effe8642c1b3e593e._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn_3tllXjSmtgm__aGr9Z4gVNFgJgGyJ30"
+ nickname="David Alan"
+ subject="comment 1"
+ date="2014-04-02T15:58:57Z"
+ content="""
+This problem also exists, when connecting to other ssh remote servers.
+The error msg would be:
+
+ Failed to ssh to the server. Transcript: Permission denied, please try again. Received disconnect from 80.xxx.xxx.xxx: 2: Too many authentication failures for ssh-xxxxxx-git-annex-assist
+"""]]
diff --git a/doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__/comment_2_04e1da4352ef9f9be90253ea726e5f24._comment b/doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__/comment_2_04e1da4352ef9f9be90253ea726e5f24._comment
new file mode 100644
index 000000000..3181c4fe0
--- /dev/null
+++ b/doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__/comment_2_04e1da4352ef9f9be90253ea726e5f24._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 2"
+ date="2014-04-02T19:41:29Z"
+ content="""
+What version of git-annex?
+
+Do you have ssh-askpass installed?
+
+You might try running git webapp from a terminal, in case ssh is unable to prompt for the password in a window using ssh-askpass.
+"""]]
diff --git a/doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__/comment_3_84aceb9a9d3e5bd14c044861f47e3b9d._comment b/doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__/comment_3_84aceb9a9d3e5bd14c044861f47e3b9d._comment
new file mode 100644
index 000000000..ef70eea48
--- /dev/null
+++ b/doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__/comment_3_84aceb9a9d3e5bd14c044861f47e3b9d._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn_3tllXjSmtgm__aGr9Z4gVNFgJgGyJ30"
+ nickname="David Alan"
+ subject="comment 3"
+ date="2014-04-03T00:31:14Z"
+ content="""
+I'm running Version: 5.20140318-gdcf93d0. Do I have to install a ssh-askpass manually? I only found one thread referring to ssh-askpass, but didn't really know what to do with that information. So, no I don't have it installed as far as I know... _I_ never did anyway...
+
+Do I need it? Did I miss something in the docs?
+"""]]
diff --git a/doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__/comment_4_2cd17d01edeb230197865e6ea0884de0._comment b/doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__/comment_4_2cd17d01edeb230197865e6ea0884de0._comment
new file mode 100644
index 000000000..bfb4c2d74
--- /dev/null
+++ b/doc/forum/rsync.net:_Too_many_authentication_failures_for___42____42____42____42____42__/comment_4_2cd17d01edeb230197865e6ea0884de0._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="216.145.95.162"
+ subject="comment 4"
+ date="2014-05-19T16:46:55Z"
+ content="""
+I suggest you upgrade to yesterday's release. It moves ssh password prompting during repository setup into a field in the webapp, so should avoid this class of problems.
+"""]]
diff --git a/doc/forum/rsync_asking_for_an_unknown_password.mdwn b/doc/forum/rsync_asking_for_an_unknown_password.mdwn
new file mode 100644
index 000000000..1126c31ea
--- /dev/null
+++ b/doc/forum/rsync_asking_for_an_unknown_password.mdwn
@@ -0,0 +1,60 @@
+Hello,
+
+I am on OS X, using version 5.20140613. I installed using brew.
+
+I have a really simple example where I'm trying to use local rsync to test transfer between two repos. It keeps asking me for a password over and over. I do not know what password it is.
+
+I'm literally doing just this:
+
+ $ cd annex-tests
+ $ mkdir target
+ $ mkdir source
+ $ cat > source/text
+ hi this is a test
+ $ cd source
+ $ git init
+ Initialized empty Git repository in /Users/me/Documents/annex-tests/source/.git/
+ $ git annex init
+ init ok
+ (Recording state in git...)
+ $ git annex initremote rsync-login type=rsync rsyncurl=me@localhost:/Users/me/Documents/annex-tests/target encryption=none
+ initremote rsync-login ok
+ (Recording state in git...)
+ $ git annex describe rsync-login "test rsync url with a login"
+ describe rsync-login ok
+ (Recording state in git...)
+ $ git annex add text
+ add text ok
+ (Recording state in git...)
+ $ git annex sync rsync-login --content
+ commit ok
+ copy text copy text (checking rsync-login...) Password:
+ Password:
+ Password:
+ Password:
+ Password:
+
+I try a blank password, I try my login password, I tried 'none' (the encryption type), I try everything.. no dice
+
+So right off the bat let me explain a few things.
+
+1 - Why not use rsa keys? Because I was having the exact same problem and I wanted to make it even easier and use login/password
+
+2 - Why not use the webapp since a few forum posts say you can set passwords in there? because my annex doesn't seem to recognize the command.
+
+ $ git annex webapp
+ git-annex: unknown command webapp
+
+3 - I verified my rsync command/url appears ok by doing the following. The password for that command is as expected, it is my username password:
+
+ $ cat > test2
+ hi test
+ $ rsync test2 me@localhost:/Users/me/Documents/annex-tests/target
+ Password:
+ $ cat /Users/me/Documents/annex-tests/target/test2
+ hi test
+
+
+Any help will be appreciated!
+
+
diff --git a/doc/forum/rsync_asking_for_an_unknown_password/comment_1_f23d1c04a27625089eaef5b4bb7f8456._comment b/doc/forum/rsync_asking_for_an_unknown_password/comment_1_f23d1c04a27625089eaef5b4bb7f8456._comment
new file mode 100644
index 000000000..b76183872
--- /dev/null
+++ b/doc/forum/rsync_asking_for_an_unknown_password/comment_1_f23d1c04a27625089eaef5b4bb7f8456._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-11T18:41:32Z"
+ content="""
+Re brew not being built with support for the webapp, I suggest you file a bug on brew about this. IIRC they were, or were planning to include the webapp in the build. They may have lost track of that.
+
+Now, what does rsyncurl=me@localhost:/Users/me/Documents/annex-tests/target say? It says to use rsync with the \"url\" me@localhost:/Users/me/Documents/annex-tests/target. What does rsync do with that url? It tries to ssh into localhost, as user \"me\". There's no magic here. I don't know why your login password isn't working, but you can verify by passing --debug to git-annex that it just runs rsync with the url you've given it.
+
+BTW, are you sure you want to use a rsync special remote at all, rather than a regular git remote using ssh?
+"""]]
diff --git a/doc/forum/rsync_asking_for_an_unknown_password/comment_2_ce4b399fdb2f04e30bd8a951994f1c80._comment b/doc/forum/rsync_asking_for_an_unknown_password/comment_2_ce4b399fdb2f04e30bd8a951994f1c80._comment
new file mode 100644
index 000000000..494aaa235
--- /dev/null
+++ b/doc/forum/rsync_asking_for_an_unknown_password/comment_2_ce4b399fdb2f04e30bd8a951994f1c80._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk3JJvaarUKd7xShCMze_kpHVcuCzFrWTI"
+ nickname="Lucas"
+ subject="comment 2"
+ date="2014-07-15T16:18:01Z"
+ content="""
+Well I got the password issue straightened out (was me, don't ask).
+
+Both the rsync and git via ssh are working well, thanks!
+"""]]
diff --git a/doc/forum/s3_server_side_encryption.mdwn b/doc/forum/s3_server_side_encryption.mdwn
new file mode 100644
index 000000000..f7b64921b
--- /dev/null
+++ b/doc/forum/s3_server_side_encryption.mdwn
@@ -0,0 +1,9 @@
+AWS S3 offers a feature to enable server-side encryption of files.
+If I understand correctly, this is enabled by sending a specific HTTP header with the request to upload the file in question.
+So, this header needs to be set every time we want to upload a new file.
+
+Is this feature already supported / being considered for future versions?
+
+If not, am I correct in assuming it would have to be implemented in https://github.com/joeyh/git-annex/blob/master/Remote/S3.hs ?
+
+Thank you
diff --git a/doc/forum/s3_server_side_encryption/comment_1_68345d01b016abf96c226d2bfa17c641._comment b/doc/forum/s3_server_side_encryption/comment_1_68345d01b016abf96c226d2bfa17c641._comment
new file mode 100644
index 000000000..1dbf60047
--- /dev/null
+++ b/doc/forum/s3_server_side_encryption/comment_1_68345d01b016abf96c226d2bfa17c641._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-01-05T20:33:13Z"
+ content="""
+I have not looked into this particular S3 feature, since I see little point
+in using it. git-annex can encrypt files client-side before sending to S3,
+which is much better.
+
+However, you can probably configure git-annex to send the header.
+See the `x-amx-meta-*` option documented in [[special_remotes/S3]].
+If the header was named encryptplz and needed to be set to
+"canhazsecurityburger", you would enable it with something like:
+
+ git annex enableremote mys3remote x-amz-meta-encryptplz=canhazsecurityburger
+"""]]
diff --git a/doc/forum/s3_server_side_encryption/comment_2_b2ccef6dc00d58e103ac0fda48ee94d3._comment b/doc/forum/s3_server_side_encryption/comment_2_b2ccef6dc00d58e103ac0fda48ee94d3._comment
new file mode 100644
index 000000000..f3d8c94bc
--- /dev/null
+++ b/doc/forum/s3_server_side_encryption/comment_2_b2ccef6dc00d58e103ac0fda48ee94d3._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawne3YCXovu_ERUYNpH46AVo0FlgyQwt3HI"
+ nickname="Pierre"
+ subject="comment 2"
+ date="2015-01-05T20:47:31Z"
+ content="""
+Thanks for your reponse. I'll try specifying the header as you are suggesting.
+
+FYI, one reason for not handling encryption locally is to not have to manage encryption keys. If multiple people need to be able to decrypt the data, I would have to manage all their keys.
+"""]]
diff --git a/doc/forum/s3_server_side_encryption/comment_3_3eb57b98e4136b8550ea5d19393fe967._comment b/doc/forum/s3_server_side_encryption/comment_3_3eb57b98e4136b8550ea5d19393fe967._comment
new file mode 100644
index 000000000..cee29d877
--- /dev/null
+++ b/doc/forum/s3_server_side_encryption/comment_3_3eb57b98e4136b8550ea5d19393fe967._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2015-01-05T21:09:47Z"
+ content="""
+Using git-annex's encryption=shared will have the same
+key management ease as letting Amazon encrypt.
+
+In both cases you're putting the shared encryption key into the
+configuration of a git-annex S3 remote. Anyone who can access the git
+repository can access the encryption key.
+"""]]
diff --git a/doc/forum/s3_server_side_encryption/comment_4_71d6c2356af8974cb848c3574cf3eb6d._comment b/doc/forum/s3_server_side_encryption/comment_4_71d6c2356af8974cb848c3574cf3eb6d._comment
new file mode 100644
index 000000000..7cfa0195b
--- /dev/null
+++ b/doc/forum/s3_server_side_encryption/comment_4_71d6c2356af8974cb848c3574cf3eb6d._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawne3YCXovu_ERUYNpH46AVo0FlgyQwt3HI"
+ nickname="Pierre"
+ subject="comment 4"
+ date="2015-01-05T21:19:37Z"
+ content="""
+Ok, thank you!
+"""]]
diff --git a/doc/forum/scalability_with_lots_of_files.mdwn b/doc/forum/scalability_with_lots_of_files.mdwn
new file mode 100644
index 000000000..3bbd877cf
--- /dev/null
+++ b/doc/forum/scalability_with_lots_of_files.mdwn
@@ -0,0 +1,43 @@
+What is git-annex's [[scalability]] with large (10k+) number of files and a few (~10) repositories?
+
+I have had difficult times maintaining a music archive of around 20k files, spread around 17 repositories.
+
+`ncdu` tells me, of the actual files in the direct repository:
+
+<pre>
+$ ncdu --exclude .git
+ Total disk usage: 109,3GiB Apparent size: 109,3GiB Items: 23771
+</pre>
+
+Now looking at the git-annex metadata:
+
+<pre>
+$ time git clone -b git-annex /srv/mp3
+Cloning into 'mp3'...
+done.
+Checking out files: 100% (31207/31207), done.
+0.69user 1.72system 0:04.65elapsed 51%CPU (0avgtext+0avgdata 47732maxresident)k
+40inputs+489552outputs (1major+2906minor)pagefaults 0swaps
+$ git branch
+ annex/direct/master
+* git-annex
+ master
+$ wc -l uuid.log
+7 uuid.log
+$ find -type f | wc
+ 31429 62214 3013920
+$ du -sh .
+361M .
+$ du -sch * | tail -1
+243M total
+</pre>
+
+So basically, it looks like the git-annex location tracking takes up around 243M, 361M if we include git's history of it (I assume). This means around 8KiB of storage per file, and 4KiB/file for history (git is doing a pretty good job here). (8KiB kind of makes sense here: one file for the tracking log (4KiB) and another directory to hold it (another 4KiB)...)
+
+Is that about right? Are there ways to compress that somehow? Could I at least drop the *history* of that from git without too much harm - that would already save 120MiB...
+
+That repository is around 18 months old.
+
+(It's interesting to notice the limitation of the "one file per record" storage format here: since git-annex has so many little files, and all of those take at least $blocksize (it seems like it's 4KB here), it takes up space pretty quickly. Another good point for git here: packing files together saves a *lot* of space! Could files be packed *before* being stored in the git-annex branch? or is that totally stupid. :)
+
+Thanks! --[[anarcat]]
diff --git a/doc/forum/scalability_with_lots_of_files/comment_1_b9bb0a71d81b8cbc2a751bb7bab84812._comment b/doc/forum/scalability_with_lots_of_files/comment_1_b9bb0a71d81b8cbc2a751bb7bab84812._comment
new file mode 100644
index 000000000..0a58c1c71
--- /dev/null
+++ b/doc/forum/scalability_with_lots_of_files/comment_1_b9bb0a71d81b8cbc2a751bb7bab84812._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-04T19:21:07Z"
+ content="""
+Git automatically packs loose object files after a while, which includes
+git-annex branch files. See `git-gc --help`.
+
+It also delta compresses files, and git-annex's log files will delta
+compress and compress pretty well, so your du's of a checked out git-annex
+branch don't mean much.
+
+As far as I can tell, your git repository is 118mb in size, including
+the git-annex branch and all history.
+
+You can use `git annex forget` to drop historical location tracking
+info for files.
+"""]]
diff --git a/doc/forum/schedule_repository___91__expression__93__.mdwn b/doc/forum/schedule_repository___91__expression__93__.mdwn
new file mode 100644
index 000000000..0904dbb03
--- /dev/null
+++ b/doc/forum/schedule_repository___91__expression__93__.mdwn
@@ -0,0 +1 @@
+what sort of options can we use in the expression field? from the [git annex bible](http://git-annex.branchable.com/git-annex/) it suggests for incremental fscks, but I'm wondering if it can run shell scripts or `git annex importurl` lines too.
diff --git a/doc/forum/schedule_repository___91__expression__93__/comment_1_b123b657a92897017973927e3e47673b._comment b/doc/forum/schedule_repository___91__expression__93__/comment_1_b123b657a92897017973927e3e47673b._comment
new file mode 100644
index 000000000..a0c4e8222
--- /dev/null
+++ b/doc/forum/schedule_repository___91__expression__93__/comment_1_b123b657a92897017973927e3e47673b._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.22"
+ subject="comment 1"
+ date="2014-09-16T18:13:18Z"
+ content="""
+Only fscking can be scheduled. From the man page:
+
+ These actions are available: \"fsck self\", \"fsck UUID\"
+
+It won't be expanded to allow arbitrary commands, because that would let anyone who you share an annex with schedule arbitrary commands to run on your computer..
+"""]]
diff --git a/doc/forum/some_symlinks_left_in_direct_mode.mdwn b/doc/forum/some_symlinks_left_in_direct_mode.mdwn
new file mode 100644
index 000000000..1f4e447ee
--- /dev/null
+++ b/doc/forum/some_symlinks_left_in_direct_mode.mdwn
@@ -0,0 +1,5 @@
+Dear all,
+ I have a repository in direct mode which still has some symlinks pointing to .git/annex/objects. Is there a way to turn them back into regular files. I don't recall why this happen, I guess I started on indirect mode and after that I converted it to direct mode.
+Thanks in advance.
+Best regards,
+ Juan
diff --git a/doc/forum/some_symlinks_left_in_direct_mode/comment_1_fd8d8107861453f0aa6b2c390e369307._comment b/doc/forum/some_symlinks_left_in_direct_mode/comment_1_fd8d8107861453f0aa6b2c390e369307._comment
new file mode 100644
index 000000000..29e8b7490
--- /dev/null
+++ b/doc/forum/some_symlinks_left_in_direct_mode/comment_1_fd8d8107861453f0aa6b2c390e369307._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-12-02T18:53:32Z"
+ content="""
+Well, it's normal to have broken symlinks if the content of a file
+is not present. `git annex get` will get the file content
+and replace the symlink with it.
+
+If the symlink is not broken, you can run `git annex fsck` on the file
+and it will notice and fix this inconsistency.
+
+Some old versions of git-annex had bugs in direct mode that could result
+in files being left as symlinks like that. I have not seen any bugs
+lately in that area. If you have a way to get a repository into that
+state, file a bug report with a test case.
+"""]]
diff --git a/doc/forum/some_symlinks_left_in_direct_mode/comment_2_63f61caf28e834d48e12467bf09b2e3d._comment b/doc/forum/some_symlinks_left_in_direct_mode/comment_2_63f61caf28e834d48e12467bf09b2e3d._comment
new file mode 100644
index 000000000..47d8a5bec
--- /dev/null
+++ b/doc/forum/some_symlinks_left_in_direct_mode/comment_2_63f61caf28e834d48e12467bf09b2e3d._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmTNrhkVQ26GBLaLD5-zNuEiR8syTj4mI8"
+ nickname="Juan"
+ subject="going back to indirect mode fixed it"
+ date="2014-12-03T18:35:58Z"
+ content="""
+I went back to indirect mode and stayed there. Every file is now accesible. I don't know what happened.
+Thanks.
+"""]]
diff --git a/doc/forum/special_remote_for_IMAP/comment_4_0f8e01c453afb02aebf44b3fb2c9a7c1._comment b/doc/forum/special_remote_for_IMAP/comment_4_0f8e01c453afb02aebf44b3fb2c9a7c1._comment
new file mode 100644
index 000000000..6e39fd730
--- /dev/null
+++ b/doc/forum/special_remote_for_IMAP/comment_4_0f8e01c453afb02aebf44b3fb2c9a7c1._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmH7o6q2l99M-PQolOfbR3_i5B_jtTIcAE"
+ nickname="Giovanni"
+ subject="comment 4"
+ date="2014-09-12T18:57:07Z"
+ content="""
+Does this somehow scan the IMAP server for attachments already there?
+"""]]
diff --git a/doc/forum/ssh_key_setup_woes_in_Android.mdwn b/doc/forum/ssh_key_setup_woes_in_Android.mdwn
new file mode 100644
index 000000000..87e2dd25f
--- /dev/null
+++ b/doc/forum/ssh_key_setup_woes_in_Android.mdwn
@@ -0,0 +1,15 @@
+I'm trying to set up a ssh remote on Android using the latest 5.20140421. For some
+reason the assistant fails to set up passwordless login on the remote server. It
+adds the required line in `.ssh/authorized_keys` on the server side, but it still
+keeps asking for the password for every connection. Nothing suspicious appears in
+the assistant's log. Also, if I set up a ssh remote on a different directory on the
+same server, a new key is generated and added to `authorized_keys`, but the passwordless
+login still doesn't work.
+
+I didn't file a bug since this would make for a very lousy bug report. How could I
+look more into what's causing this? Where should the generated keys reside on the
+Android filesystem?
+
+I think it would be useful for the assistant to check that the generated ssh keys are
+working properly, and inform the user and/or try to set them up again if there is a
+problem, instead of silently falling back to asking for the login password on the console.
diff --git a/doc/forum/ssh_key_setup_woes_in_Android/comment_1_f16fbff27a449409699f3dbcf9590622._comment b/doc/forum/ssh_key_setup_woes_in_Android/comment_1_f16fbff27a449409699f3dbcf9590622._comment
new file mode 100644
index 000000000..1b2d9a185
--- /dev/null
+++ b/doc/forum/ssh_key_setup_woes_in_Android/comment_1_f16fbff27a449409699f3dbcf9590622._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="216.145.95.162"
+ subject="comment 1"
+ date="2014-05-19T15:50:34Z"
+ content="""
+There have been recent improvements in the assistant's handling of ssh keys. This includes no more prompting for ssh keys in the console, ever. Instead, the ssh remote setup would presumably fail if the ssh key didn't work for some reason.
+
+To debug your problem, you need to use the shell. I would first try running \"git annex get\" or \"git annex copy\" or \"git annex drop\" on a file, and verify that it prompts for the ssh password. Then, take a look at /sdcard/git-annex.home/.ssh/config, and see if you can ssh to the special hostname set up there, from android, and if it asks for a password. If so, ssh -v might be interesting, as it should show it presenting the ssh key to the server.
+"""]]
diff --git a/doc/forum/ssh_vs_cifs__47__webdav.mdwn b/doc/forum/ssh_vs_cifs__47__webdav.mdwn
new file mode 100644
index 000000000..62bb9d3d9
--- /dev/null
+++ b/doc/forum/ssh_vs_cifs__47__webdav.mdwn
@@ -0,0 +1,7 @@
+Hello,
+
+I'm new to git-annex and I would like to know which is the best method to deploy it for my case. I would like to have a central repo in my Synology NAS but with files to be able to browse files (not a bare repo). This repo will not have remotes configured. The mobile clients will use the central repo to exchange files. I thinks that this setup is totally valid x-D. Now my question is more related to how to share the repo in the Synology NAS. I am considering to use cifs/webdav for LAN/WAN access to the repo or SSH for LAN/WAN access. Which is the recommended setup? Which is the most optimum setup in terms of bandwidth or cpu usage (the CPU of my synology NAS is ARM). Thanks in advance and for this great piece of software!
+
+Best regards,
+
+Christian
diff --git a/doc/forum/sync_stages_deletions_on_remote.mdwn b/doc/forum/sync_stages_deletions_on_remote.mdwn
new file mode 100644
index 000000000..73a51d0b0
--- /dev/null
+++ b/doc/forum/sync_stages_deletions_on_remote.mdwn
@@ -0,0 +1,72 @@
+I'm having an issue with 2 repos: one on my laptop, the other on my NAS. Both are in indirect mode, running Arch Linux, and have the latest Git version. Laptop has git-annex 5.20140411-gda795e0, NAS has 5.20140319-g9aa31b7 (from prebuilt tarballs).
+
+The issue is quite simple. When I `git-annex add` new files on my laptop, commit them, and then `git-annex sync` them, they show up as staged for deletion on my NAS.
+
+ laptop $ git annex add some-file
+ laptop $ git commit -m "Add some-file"
+ laptop $ git annex sync
+ commit ok
+ pull ds413j
+ ok
+ push ds413j
+ Counting objects: 133, done.
+ Delta compression using up to 8 threads.
+ Compressing objects: 100% (78/78), done.
+ Writing objects: 100% (80/80), 10.64 KiB | 0 bytes/s, done.
+ Total 80 (delta 12), reused 0 (delta 0)
+ To ssh://**/**
+ 1dcd188..8ef4249 git-annex -> synced/git-annex
+ c0f45a6..21711d6 master -> synced/master
+ ok
+ laptop $ ssh $NAS
+ nas $ git status
+ On branch master
+ Changes to be committed:
+ (use "git reset HEAD <file>..." to unstage)
+
+ deleted: some-file
+
+ nas $
+
+If I run `git annex sync` on the NAS, it will create a new commit that deletes that file. So I have to play with `git reset`/`git checkout` by hand to make sure that the new file won't be deleted.
+
+I'm not sure when this started, but I think it was after I did some stupid mistake (`git checkout -B master synced/master`, kill a `git annex sync` with Ctrl+C, or something else that even resulted in my non-bare repo to have "bare=true" in .git/config...). And I haven't yet been able to fix this.
+
+Any idea what can have caused this, how to fix it, and how to prevent it from happening again in the future?
+
+.git/config on NAS:
+
+ [core]
+ repositoryformatversion = 0
+ filemode = true
+ logallrefupdates = true
+ [annex]
+ uuid = d54ae60a-1f59-403c-923f-32ea3bf2d00f
+ version = 5
+ diskreserve = 1 megabyte
+ autoupgrade = ask
+ debug = false
+
+.git/config on laptop:
+
+ [core]
+ repositoryformatversion = 0
+ filemode = true
+ bare = false
+ logallrefupdates = true
+ [branch "master"]
+ [annex]
+ uuid = f20cb506-945d-4c78-af1a-0aa884bb899b
+ version = 5
+ diskreserve = 20 gigabytes
+ autoupgrade = ask
+ debug = false
+ expireunused = 7d
+ genmetadata = true
+ [push]
+ default = matching
+ [remote "ds413j"]
+ url = ssh://**/**
+ fetch = +refs/heads/*:refs/remotes/ds413j/*
+ annex-uuid = d54ae60a-1f59-403c-923f-32ea3bf2d00f
+ annex-sync = true
diff --git a/doc/forum/sync_stages_deletions_on_remote/comment_1_2b639066095e450c2d9be3b2775d24b3._comment b/doc/forum/sync_stages_deletions_on_remote/comment_1_2b639066095e450c2d9be3b2775d24b3._comment
new file mode 100644
index 000000000..24495fd02
--- /dev/null
+++ b/doc/forum/sync_stages_deletions_on_remote/comment_1_2b639066095e450c2d9be3b2775d24b3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://schnouki.net/"
+ nickname="Schnouki"
+ subject="comment 1"
+ date="2014-04-17T12:16:41Z"
+ content="""
+Here's the output of `git annex sync --debug` (for a different commit): <http://ix.io/bJZ>
+"""]]
diff --git a/doc/forum/sync_stages_deletions_on_remote/comment_2_da5775526a2a476b6ead1cd1a735b8bd._comment b/doc/forum/sync_stages_deletions_on_remote/comment_2_da5775526a2a476b6ead1cd1a735b8bd._comment
new file mode 100644
index 000000000..a3076faf7
--- /dev/null
+++ b/doc/forum/sync_stages_deletions_on_remote/comment_2_da5775526a2a476b6ead1cd1a735b8bd._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 2"
+ date="2014-04-17T19:28:59Z"
+ content="""
+`git annex sync` will push changes to your NAS, but this does not cause the work tree there to be updated. You must be running some command on the NAS that gets it work tree into the state you show. You need to tell us what that command is, since it seems to be where things are going wrong. Maybe you're running the git-annex assistant on the NAS, or maybe you run `git annex sync` on the NAS.
+"""]]
diff --git a/doc/forum/sync_stages_deletions_on_remote/comment_3_9e07593228915936fadcf90373be9f4e._comment b/doc/forum/sync_stages_deletions_on_remote/comment_3_9e07593228915936fadcf90373be9f4e._comment
new file mode 100644
index 000000000..fb9020252
--- /dev/null
+++ b/doc/forum/sync_stages_deletions_on_remote/comment_3_9e07593228915936fadcf90373be9f4e._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://schnouki.net/"
+ nickname="Schnouki"
+ subject="comment 3"
+ date="2014-04-22T14:59:47Z"
+ content="""
+Not running the assistant (freshly rebooted NAS, checked with `ps ax | grep annex`), not running any other git command. Still happened, until a few minutes ago: I found the cause for this issue... and it's quite frustrating.
+
+Every now and then, I interrupt a running `git annex sync` with Ctrl+C. And sometimes this causes my NAS repository to end up with `bare = true` in its `.git/config`. When this happens, I just remove the offending line and call it a day. Now I just added a `bare = false` line to that file, and that solved the problem. It seems that somehow, if you don't explicitely tell git that your repo is not bare, it considers it as a bare repository -- and the final push from `git annex sync` actually updates the `master` branch without updating the work tree.
+
+This is probably not a bug in git-annex, but rather a weird behaviour in git -- and for sure something I didn't expect to happend. But anyway it works now :) Leaving this here in case it helps other people.
+
+Joey, thanks again for your time and your help.
+"""]]
diff --git a/doc/forum/sync_stages_deletions_on_remote/comment_4_e5a3dc34c6229ec40bc999c3cab28041._comment b/doc/forum/sync_stages_deletions_on_remote/comment_4_e5a3dc34c6229ec40bc999c3cab28041._comment
new file mode 100644
index 000000000..710392daa
--- /dev/null
+++ b/doc/forum/sync_stages_deletions_on_remote/comment_4_e5a3dc34c6229ec40bc999c3cab28041._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.114"
+ subject="comment 4"
+ date="2014-04-24T18:22:16Z"
+ content="""
+git sets bare = false in newly created non-bare repositories. Perhaps this is why? It seems likely that git has an inconsistent default if there's no configuration. Sounds worth filing a bug on git for. OTOH, messing with .git/config in nonstandard ways seems like a good way to cause yourself random pain too.
+"""]]
diff --git a/doc/forum/taskwarrior/comment_2_4b3d70501763f6d36c927ae37bbd33c2._comment b/doc/forum/taskwarrior/comment_2_4b3d70501763f6d36c927ae37bbd33c2._comment
new file mode 100644
index 000000000..ec6bcb952
--- /dev/null
+++ b/doc/forum/taskwarrior/comment_2_4b3d70501763f6d36c927ae37bbd33c2._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://me.yahoo.com/a/FHnTlSBo1eCGJRwueeKeB6.RCaPbGMPr5jxx8A--#ce0d8"
+ nickname="Hamza"
+ subject="comment 2"
+ date="2014-04-14T15:27:48Z"
+ content="""
+Using direct mode would replace symlinks with actual files.
+"""]]
diff --git a/doc/forum/telehash_syncing.mdwn b/doc/forum/telehash_syncing.mdwn
new file mode 100644
index 000000000..3a5266506
--- /dev/null
+++ b/doc/forum/telehash_syncing.mdwn
@@ -0,0 +1,10 @@
+Hi
+
+I have read some info about telehash. It looks verry promising. I was wondering though how syncing will work. For example. I have 2 computers. Normal PC and a laptop. Mostly only one is on at a time.
+
+* Sync messages will be sent over telehash protocoll ?
+* What if I push some changes (they will be synced to a shared repository) and laptop is not online. How will git-annex know what to sync from a shared repository ?
+* Do you plan to send files/commits directly to online clients ? If 2 friends are online at the same time.
+* What will happen with data on a shared repository if all clients have synced content ? Will it be deleted since it is not longer needed ?
+
+I was thinking of a model where you sync directly (if possible), and just drop shared content to repo for offline users. Whan everyone have pulled content it may be removed from shared repo.
diff --git a/doc/forum/tips:_special__95__remotes__47__hook_with_tahoe-lafs/comment_9_2592749c2f02b3e151896e31acba359b._comment b/doc/forum/tips:_special__95__remotes__47__hook_with_tahoe-lafs/comment_9_2592749c2f02b3e151896e31acba359b._comment
new file mode 100644
index 000000000..ba58643b9
--- /dev/null
+++ b/doc/forum/tips:_special__95__remotes__47__hook_with_tahoe-lafs/comment_9_2592749c2f02b3e151896e31acba359b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmsz4weoPXV2oEtv3zpo9dOxn_SEPz-7Iw"
+ nickname="Zooko"
+ subject="more notes about Tahoe-LAFS performance"
+ date="2014-04-21T07:18:06Z"
+ content="""
+In case anyone is reading this thread: https://github.com/zooko/tahoe-lafs/blob/3c13c138cf09e83d2f8001888e2a7de85564d406/docs/frontends/key-value-store.rst
+"""]]
diff --git a/doc/forum/trouble_with_multiple_remotes_syncing_to_gcrypt_based_ssh_repo_.mdwn b/doc/forum/trouble_with_multiple_remotes_syncing_to_gcrypt_based_ssh_repo_.mdwn
new file mode 100644
index 000000000..95cfe2538
--- /dev/null
+++ b/doc/forum/trouble_with_multiple_remotes_syncing_to_gcrypt_based_ssh_repo_.mdwn
@@ -0,0 +1,7 @@
+Hi,
+
+Is anyone having difficulties with the assistant and gpg-agent? Particularly with multiple repos syncing to a crypt backup?
+
+It seems to work for a while and then according to the error logs I can't decrypt the manifest...I'm wondering if there is some sort of locking involved that only lets one repo sync to a gcrypt repo at a time? I can't think why the gpg-agent would stop providing the key.
+
+I also have a rather horrible time with gpg-agent in general: I now start each repos git annex assistant individually in the shell (from which I can confirm the gpg-agent is working) rather than launch the web-app direct.
diff --git a/doc/forum/trouble_with_multiple_remotes_syncing_to_gcrypt_based_ssh_repo_/comment_1_4ad9a6a7cf5678ac0bc6d46a54f64cd3._comment b/doc/forum/trouble_with_multiple_remotes_syncing_to_gcrypt_based_ssh_repo_/comment_1_4ad9a6a7cf5678ac0bc6d46a54f64cd3._comment
new file mode 100644
index 000000000..3ec016744
--- /dev/null
+++ b/doc/forum/trouble_with_multiple_remotes_syncing_to_gcrypt_based_ssh_repo_/comment_1_4ad9a6a7cf5678ac0bc6d46a54f64cd3._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnXybLxkPMYpP3yw4b_I6IdC3cKTD-xEdU"
+ nickname="Matt"
+ subject="comment 1"
+ date="2014-04-29T10:16:11Z"
+ content="""
+hmmm - a command line based git annex sync always works. So either the assistant has a separate locking mechanism or the assistant is somehow losing the gpg-agent environment. Does the assistant restart/respawn itself and lose access to the gpg-agent env?
+
+I'm somewhat clutching at straws here.
+"""]]
diff --git a/doc/forum/trouble_with_multiple_remotes_syncing_to_gcrypt_based_ssh_repo_/comment_2_82dc18ed14879936d04133f248879fb9._comment b/doc/forum/trouble_with_multiple_remotes_syncing_to_gcrypt_based_ssh_repo_/comment_2_82dc18ed14879936d04133f248879fb9._comment
new file mode 100644
index 000000000..30bc72f54
--- /dev/null
+++ b/doc/forum/trouble_with_multiple_remotes_syncing_to_gcrypt_based_ssh_repo_/comment_2_82dc18ed14879936d04133f248879fb9._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnXybLxkPMYpP3yw4b_I6IdC3cKTD-xEdU"
+ nickname="Matt"
+ subject="comment 2"
+ date="2014-04-30T12:25:55Z"
+ content="""
+I see in the comments here a possible explanation...
+
+https://git-annex.branchable.com/bugs/GPG_passphrase_repeated_prompt/
+"""]]
diff --git a/doc/forum/unannex_--fast_+_uninit_leaves_files_in_.git__47__annex__47__objects__63__.mdwn b/doc/forum/unannex_--fast_+_uninit_leaves_files_in_.git__47__annex__47__objects__63__.mdwn
new file mode 100644
index 000000000..c746e3d6d
--- /dev/null
+++ b/doc/forum/unannex_--fast_+_uninit_leaves_files_in_.git__47__annex__47__objects__63__.mdwn
@@ -0,0 +1,47 @@
+I have been trying to uninit a very large directory and ran into problems.
+
+`git annex unannex` seems to be completely infeasible because of how long it takes, also it seemed to grow the directory enormously, probably because it copies large files and then waits to delete them?
+
+I tried unannexing with the following commands instead:
+
+ `git annex get --from=backup`
+ `git annex unannex --fast`
+ `git annex uninit`
+
+This does what it is supposed to it seems, it hard links all copies of files. However, the unint step gives the following message:
+
+ git-annex: Not fully uninitialized
+ Some annexed data is still left in /science/carlo/GR_Coverage_Manuscript_Revisions_140616/.git/annex/objects/
+ This may include deleted files, or old versions of modified files.
+
+ If you don't care about preserving the data, just delete the
+ directory.
+
+ Or, you can move it to another location, in case it turns out
+ something in there is important.
+
+ Or, you can run `git annex unused` followed by `git annex dropunused`
+ to remove data that is not used by any tag or branch, which might
+ take care of all the data.
+
+ Then run `git annex uninit` again to finish.
+
+However, running `git annex unused` returns nothing.
+
+When I run `du -l -h --max-depth=1` I get the following output:
+
+ 646G ./01-Collate_New_Species_Data
+ 6.3G ./02-Prep_Annotations
+ 1.8T ./03-Map_Riboprofiling_Data
+ 111G ./04-Generate_Preprocessed_Files
+ 94G ./05-Det_Codon_Specfic_Occupancy
+ 3.6T ./.git
+ 6.2T .
+
+The .git/annex/objects directory remains 3.5TB in size, while the root directory, minus the contents of .git is only 2.7TB.
+
+I want to delete the .git folder to free up space, but I am very nervous now, because it looks like there is extra data in git annex that isn't present in the main directory. I don't want that to be lost, that would be a complete disaster.
+
+I tried the exact same process on a test directory, and it seemed to work completely, but losing this data would be an absolute disaster, so I don't want to risk it.
+
+Any thoughts?
diff --git a/doc/forum/unannex_--fast_+_uninit_leaves_files_in_.git__47__annex__47__objects__63__/comment_1_4aaf93801119b36a01e452c7bb0fc7e9._comment b/doc/forum/unannex_--fast_+_uninit_leaves_files_in_.git__47__annex__47__objects__63__/comment_1_4aaf93801119b36a01e452c7bb0fc7e9._comment
new file mode 100644
index 000000000..86cd83d3a
--- /dev/null
+++ b/doc/forum/unannex_--fast_+_uninit_leaves_files_in_.git__47__annex__47__objects__63__/comment_1_4aaf93801119b36a01e452c7bb0fc7e9._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-20T15:33:02Z"
+ content="""
+Well, are there any files in your repository (outside .git) that
+are still symlinks to content in .git? If not, you know that
+every file in the repository's working tree has been unannexed
+ok.
+
+The remaining files in .git/annex/objects are not unused, so some branch or tag
+must refer to those files.
+
+You might try running `git log --stat -S'KEY'`
+where KEY is the basename name of one of the files in .git/annex/objects.
+This will find commits to the repo that refer to that object, so you'll
+know where it was used and what filename corresponded to it.
+"""]]
diff --git a/doc/forum/unrelated_repositories_sync.mdwn b/doc/forum/unrelated_repositories_sync.mdwn
new file mode 100644
index 000000000..030fb380d
--- /dev/null
+++ b/doc/forum/unrelated_repositories_sync.mdwn
@@ -0,0 +1,15 @@
+I have no idea how to search for this here, so I'll just go the "lazy web" approach and just ask.
+
+Say I have two "conference" repos. One is the famous [conference procedings](https://github.com/RichiH/conference_proceedings) repo, and another one is a totally unrelated repo of local conferences that are not of world-wide significance. Let's call this second repo `presentations`.
+
+I would like to have my videos of both repos in a single repo.
+
+Can I add the `conference procedings` repo as a git remote to the `presentations` repo and have it do the right thing?
+
+In fact, I'm not even sure what the right thing would be here, I guess that's the first thing I would like to clear up. But I would like to do things like what the new [[metadata]] system does. For example, I would have only the "Debian" directory from `conference procedings` in my `presentations` repo.
+
+How would that work? Would I need to do some [subtree merging](http://git-scm.com/book/ch6-7.html) magic? or `git subtree`? or submodules? or should i just use myrepos and pretend I never brought up this idea?
+
+thanks! -- [[anarcat]]
+
+related: [[tips/migrating_two_seperate_disconnected_directories_to_git_annex/]] - but that creates a merged repo...
diff --git a/doc/forum/unrelated_repositories_sync/comment_1_c899b7b05a96d14e25c2efadff3b4e52._comment b/doc/forum/unrelated_repositories_sync/comment_1_c899b7b05a96d14e25c2efadff3b4e52._comment
new file mode 100644
index 000000000..7df8a0eb9
--- /dev/null
+++ b/doc/forum/unrelated_repositories_sync/comment_1_c899b7b05a96d14e25c2efadff3b4e52._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 1"
+ date="2014-04-02T19:51:06Z"
+ content="""
+It might help if you think about these two different repositories as branches. You have 2 branches with different files in them, and you want to produce a third branch with some mix of the two.
+
+I think git is perfectly capable of doing that. Where it gets hairy is dealing with merges when either of the 2 repositories change going forward. The same as if you've forked and modified source code, you will need to do *something* to resolve merges.
+"""]]
diff --git a/doc/forum/update_via_cabal_fails.mdwn b/doc/forum/update_via_cabal_fails.mdwn
new file mode 100644
index 000000000..aae8461c6
--- /dev/null
+++ b/doc/forum/update_via_cabal_fails.mdwn
@@ -0,0 +1,35 @@
+I tried to update git-annex via cabal. It fails due to lens not installing:
+
+ juh@sokrates:~$ cabal update
+ Downloading the latest package list from hackage.haskell.org
+ juh@sokrates:~$ cabal install git-annex
+ Resolving dependencies...
+ In order, the following will be installed:
+ lens-4.2 (new version)
+ DAV-0.6.2 (reinstall) changes: http-client-0.3.1.1 -> 0.3.3.1,
+ http-client-tls-0.2.1.1 added, http-types-0.8.4 -> 0.8.5, lens-4.1.2 -> 4.2,
+ network-2.4.1.2 added, optparse-applicative-0.7.0.2 added, xml- conduit-1.2.0.1
+ -> 1.2.0.2, xml-hamlet-0.4.0.8 added
+ git-annex-5.20140707 (new package)
+ Warning: Note that reinstalls are always dangerous. Continuing anyway...
+ [1 of 1] Compiling Main ( /tmp/lens-4.2-3107/lens-4.2/Setup. lhs, /tmp/lens-4.2-3107/lens-4.2/dist/setup/Main.o )
+ Linking /tmp/lens-4.2-3107/lens-4.2/dist/setup/setup ...
+ Configuring lens-4.2...
+ Building lens-4.2...
+ Preprocessing library lens-4.2...
+
+ src/Control/Lens/Internal/Zoom.hs:47:8:
+ Could not find module `Control.Monad.Trans.Except'
+ Perhaps you meant
+ Control.Monad.Trans.Cont (from transformers-0.3.0.0)
+ Control.Monad.Trans.Error (from transformers-0.3.0.0)
+ Control.Monad.Trans.List (from transformers-0.3.0.0)
+ Use -v to see a list of the files searched for.
+ Failed to install lens-4.2
+ cabal: Error: some packages failed to install:
+ DAV-0.6.2 depends on lens-4.2 which failed to install.
+ git-annex-5.20140707 depends on lens-4.2 which failed to install.
+ lens-4.2 failed during the building phase. The exception was:
+ ExitFailure 1
+
+I am not an experienced user of cabal. So any hints to solve the conflicts are appreciated.
diff --git a/doc/forum/update_via_cabal_fails/comment_1_e1235dc2acd3bac3dd51b7614dabbb88._comment b/doc/forum/update_via_cabal_fails/comment_1_e1235dc2acd3bac3dd51b7614dabbb88._comment
new file mode 100644
index 000000000..71fd0e60f
--- /dev/null
+++ b/doc/forum/update_via_cabal_fails/comment_1_e1235dc2acd3bac3dd51b7614dabbb88._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 1"
+ date="2014-07-09T17:58:48Z"
+ content="""
+It seems like you must have transformers-compat 0.1.1, and lens's dependency is slightly wrong, accepting that extremly old version. You'll need to upgrade it.
+"""]]
diff --git a/doc/forum/usability:_creating_an_archive_on_a_new_external_drive.mdwn b/doc/forum/usability:_creating_an_archive_on_a_new_external_drive.mdwn
new file mode 100644
index 000000000..a6bc0b7bd
--- /dev/null
+++ b/doc/forum/usability:_creating_an_archive_on_a_new_external_drive.mdwn
@@ -0,0 +1,13 @@
+story: i got a new drive from the store. plug it in. it's recognized by XFCE and mounted automatically. turns out it's NTFS, but Debian doesn't seem to mind.
+
+go in the assistant, add it as an "External drive", make it a "full backup" and let it sync.
+
+expected result: i see files
+
+actual result: i see a bare git repository.
+
+if i first `git init` the directory so it's not bare, at least i get a better handle on it: i can sync with the assistant, then `git merge synced/master` to see the files.
+
+really confusing to me, sorry if it's a dupe...
+
+workaround: use the commandline: `git clone <repo>` and `git annex get`. --[[anarcat]]
diff --git a/doc/forum/usability:_creating_an_archive_on_a_new_external_drive/comment_1_27b5283c65c402f330263426e4ca6ac1._comment b/doc/forum/usability:_creating_an_archive_on_a_new_external_drive/comment_1_27b5283c65c402f330263426e4ca6ac1._comment
new file mode 100644
index 000000000..1b5508f97
--- /dev/null
+++ b/doc/forum/usability:_creating_an_archive_on_a_new_external_drive/comment_1_27b5283c65c402f330263426e4ca6ac1._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.22"
+ subject="comment 1"
+ date="2014-09-16T18:07:54Z"
+ content="""
+I started to make this change, and then I realized this problem: If a non-bare repository is made on an external drive, then to the user this is another place they can edit their files. Which means they will expect their changes made there to be committed. Which is highly problematic, because the assistant cannot be left running on an external drive or it won't be able to be unmounted. Or, a periodic `git annex add; git annex sync` could be run on the external drive, but that is a more expensive process (especially when run on a slow drive) and would not meet the expectations of users of the assistant that their changes will promptly propagate.
+
+So, I feel that leaving bare repositories is actually the best choice.
+"""]]
diff --git a/doc/forum/usability:_creating_an_archive_on_a_new_external_drive/comment_2_b3a6b5ff0aaddd78903fc7bc7fbd6ee2._comment b/doc/forum/usability:_creating_an_archive_on_a_new_external_drive/comment_2_b3a6b5ff0aaddd78903fc7bc7fbd6ee2._comment
new file mode 100644
index 000000000..e264c8f08
--- /dev/null
+++ b/doc/forum/usability:_creating_an_archive_on_a_new_external_drive/comment_2_b3a6b5ff0aaddd78903fc7bc7fbd6ee2._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="70.83.139.100"
+ subject="comment 2"
+ date="2014-09-16T20:35:23Z"
+ content="""
+i wouldn't expect those changes to be committed. it's an external drive, and unless i manually sync it, it should take into account my changes.
+
+i am more surprised by the bare repository than i would be surprised by my changes not propagating back, i think. --[[anarcat]]
+"""]]
diff --git a/doc/forum/usability:_creating_an_archive_on_a_new_external_drive/comment_3_aab934c0e37771d7f834d2567a9e76a1._comment b/doc/forum/usability:_creating_an_archive_on_a_new_external_drive/comment_3_aab934c0e37771d7f834d2567a9e76a1._comment
new file mode 100644
index 000000000..50d97fa26
--- /dev/null
+++ b/doc/forum/usability:_creating_an_archive_on_a_new_external_drive/comment_3_aab934c0e37771d7f834d2567a9e76a1._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 3"
+ date="2014-11-25T21:26:44Z"
+ content="""
+Of course you wouldn't expect that, I've explained the problem to you and you're technically adept and know about issues with keeping open files on removable drives.
+
+However, I have to consider the affordances of what the assistant sets up, and the natural affordance of a drive containing a directory with your files in it is to be able edit those files. And when changes in every other clone of that directory get automatically synced, the expectation would be for the same to hold true on this directory on the removable drive.
+
+I can see perhaps having the assistant run `git annex merge` in a removable repo after pushing to it (but `git annex sync` should not do that; violates least surprise for a git pull+merge+push wrapper like that to affect the work trees of other repos). As long as the assistant defaults to making removable repos bare, it won't expose normal users to the problem, and only advanced users who know how to set up non-bare repos.
+
+If this is only for advanced users though, it (both assistant and `git annex sync`) could just as well run a configurable command on a removable repo after pushing to it. Or, the advanced user could use their skillz to make the removable drive be formatted with a reasonable filesystem that allows executable files, and then set up a git post-receive hook.
+"""]]
diff --git a/doc/forum/usability:_what_are_those_arrow_things__63__.mdwn b/doc/forum/usability:_what_are_those_arrow_things__63__.mdwn
new file mode 100644
index 000000000..cde7d8d50
--- /dev/null
+++ b/doc/forum/usability:_what_are_those_arrow_things__63__.mdwn
@@ -0,0 +1,29 @@
+# Introduction
+
+i want to relate a usability story that happens fairly regularly when I show git-annex to people. the story goes like this.
+
+# The story
+
+Antoine sat down at his computer saying, "i have this great movie collection I want to share with you, my friend, because the fair use provisions allow for that, and I use this great git-annex tool that allows me to sync my movie collection between different places". His friend Charlie, a Linux user only vaguely familiar with the internals of how his operating system or legal system actually works, reads this as "yay free movies" and wholeheartedly agrees to lend himself to the experiment.
+
+Antoine creates a user account for Charlie on his home computer, because he doesn't want to have to do everything himself. "That way you can choose which movies you want, because you probably don't want my complete movie collection!" Charlie emphatically responds: "right, I only have my laptop and this USB key here, so I don't think I can get it all".
+
+Charlie logs into Antoine's computer, named `marcos`. Antoine shows Charlie where the movies are located (`/srv/video`) through the file browser (Thunar, for the record). Charlie inserts his USB key into `marcos` and a new icon for the USB key shows up. Then Charlie finds a video he likes, copies and pastes it into the USB key. But instead of a familiar progress bar, Charlie is prompted with a dialog that says "Le système de fichiers ne gère pas les liens symboliques." (Antoine is french, so excuse him, this weird message says that the filesystem doesn't support symbolic links.) Puzzled, Charlie tries to copy the file to his home directory instead. This works better, but the file has a little arrow on it, which seems odd to Charlie. He then asks Antoine for advice.
+
+Antoine then has no solution but to convert the git-annex repository into direct mode, something which takes a significant amount of time and is actually [[designated as "untrusted"|direct_mode]] in the documentation. In fact, so much so that he actually did [[screw up his repository magnificently|bugs/direct_command_leaves_repository_inconsistent_if_interrupted]] because he freaked out when `git-annex direct` started and interrupted it because he tought it would take too long.
+
+# Technical analysis
+
+Now I understand it is not necessarily `git-annex`'s responsability if Thunar (or Nautilus, for that matter), doesn't know how to properly deal with symlinks (hint: just dereference the damn thing already). Maybe I should file a bug about this against thunar? I also understand that symlinks are useful to ensure the security of the data hosted in `git-annex`, and that I could have used direct mode in the first place. But I like to track changes in git to those files, and direct mode makes that really difficult.
+
+I didn't file this as a bug because I want to start the conversation, but maybe it should qualify as a usability bug. As things stand, this is one of the biggest hurdle in teaching people about git annex.
+
+(The other being "how do i actually use git annex to sync those files instead of just copying them by hand", but that's for another story!)
+
+-- [[anarcat]]
+
+# Followup
+
+Here is a bug report filed against Thunar, with a patch to fix this behavior: https://bugzilla.xfce.org/show_bug.cgi?id=11065
+
+Similar bugs would need to be filed against Nautilus, at the very least, but probably other file managers, which makes this task a little daunting, to say the least. -- [[anarcat]]
diff --git a/doc/forum/usability:_what_are_those_arrow_things__63__/comment_1_bf34c169c725f9504e0f2114ba53be4b._comment b/doc/forum/usability:_what_are_those_arrow_things__63__/comment_1_bf34c169c725f9504e0f2114ba53be4b._comment
new file mode 100644
index 000000000..86099c0d5
--- /dev/null
+++ b/doc/forum/usability:_what_are_those_arrow_things__63__/comment_1_bf34c169c725f9504e0f2114ba53be4b._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 1"
+ date="2014-08-12T19:49:35Z"
+ content="""
+If I wanted to share files with someone, I'd set them up with a direct mode repository and link it to my (probably indirect mode) repository.
+
+The question then becomes, how can this person decide which files to get if they don't want to or cannot get everything. I think that [[tips/File_manager_integration]] is a pretty good answer, although it does involve adding extensions to file managers. At least it involves adding something, rather than convincing a suprisingly large number of people that their ideas about symlinks are wrong. There are other possible answers, like building a file selection UI into the webapp..
+"""]]
diff --git a/doc/forum/usability:_what_are_those_arrow_things__63__/comment_2_364ce8b369fd0ba7ddaec3127840ff39._comment b/doc/forum/usability:_what_are_those_arrow_things__63__/comment_2_364ce8b369fd0ba7ddaec3127840ff39._comment
new file mode 100644
index 000000000..32ecdf0df
--- /dev/null
+++ b/doc/forum/usability:_what_are_those_arrow_things__63__/comment_2_364ce8b369fd0ba7ddaec3127840ff39._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="70.83.139.100"
+ subject="comment 2"
+ date="2014-08-12T19:56:58Z"
+ content="""
+the problem with this is that you end up having two copies of the same files (the direct and indirect repositories). also, the switch to direct mode exploded (because i screwed up, granted)....
+
+i have been thinking more and more than the webapp needs to have some sort of file manager as well, but that seems like a huge undertaking...
+
+a better file manager integration could certainly allow to improve this experience. for me the requirements would be:
+
+* \"clone this repo to\" - make a copy of this git annex repo to the specified target
+* \"annex-copy those files to\" - the above + a file-transfer-like dialog that would track the total file transfer (as opposed to \"begin/end\" of single files, see also [[todo/do_not_bug_me_about_intermediate_files/]])
+* probably some more stuff
+"""]]
diff --git a/doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__.mdwn b/doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__.mdwn
new file mode 100644
index 000000000..76f03452d
--- /dev/null
+++ b/doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__.mdwn
@@ -0,0 +1,20 @@
+Dear all,
+ From some time now I am wondering about a way to index a set of files, lets say PDF documents. The idea is to have a unique identifier for each file and to cross-reference using this identifier. For instance, I use a project management (PM) software (web based) on a public server of my university. Then I have a set of tasks saying, review document X, or Y. And those documents are stored on an internal server of my lab.
+I see several options:
+
+1. Upload the required documents to the PM site and directly link
+2. Share online my internal server and use the URL of the docs in the PM
+3. Just use the unique identifier in the PM, and then look in git annex for that ID
+4. Use some sort of document management system (DMS)
+
+Options 1 and 2 are impractical for several reasons. Option 4 usually requires that your files are inside the DMS.
+So my questions are:
+
+* Do you think this is doable with git-annex?
+* Is there an easy way to ask it: give me the document with this index?
+* I think the best answer for this question is: git annex find --include '*' --format='${key} ${file}' | grep <KEY>
+* And conversely, how do I find the key of a certain document?
+
+Thanks in advance.
+Best,
+ Juan
diff --git a/doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__/comment_1_955f3aac12c1ddb41267c5a23ccb79e3._comment b/doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__/comment_1_955f3aac12c1ddb41267c5a23ccb79e3._comment
new file mode 100644
index 000000000..069d41c10
--- /dev/null
+++ b/doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__/comment_1_955f3aac12c1ddb41267c5a23ccb79e3._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 1"
+ date="2014-07-03T19:10:53Z"
+ content="""
+To make git-annex output the key of a file, run: `git annex lookupkey $file`
+
+I don't know if the git-annex key is appropriate for your use-case. If the files never get changed, then it's a nice stable identifier. If ongoing changes are made to a file, and you want to link to the most recent version, the key would not be useful.
+
+You might also look at git-annex's [[metadata]]; you could make up some metadata field and value and attach it to a file, and it would persist as the file was modified.
+"""]]
diff --git a/doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__/comment_2_0aff36755f49afddd5482a602a1ccd2b._comment b/doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__/comment_2_0aff36755f49afddd5482a602a1ccd2b._comment
new file mode 100644
index 000000000..2ef754f16
--- /dev/null
+++ b/doc/forum/use_case:_unique_indentifier_of_objets___40__doi_like__41__/comment_2_0aff36755f49afddd5482a602a1ccd2b._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmTNrhkVQ26GBLaLD5-zNuEiR8syTj4mI8"
+ nickname="Juan"
+ subject="comment 2"
+ date="2014-07-09T15:32:49Z"
+ content="""
+If I get this right, the key will change every time the file is changed.
+If that's the case, seems that it won't be useful for my case.
+Thanks for the time.
+"""]]
diff --git a/doc/forum/using_git-annex_with_lightroom.mdwn b/doc/forum/using_git-annex_with_lightroom.mdwn
new file mode 100644
index 000000000..605f2b903
--- /dev/null
+++ b/doc/forum/using_git-annex_with_lightroom.mdwn
@@ -0,0 +1,6 @@
+I'm using git-annex to sync my photos across multiple computers, and it works beautifully. I would also like to sync Lightroom catalogues. The photo editing program creates a *.lrdata directory where it stores the edits in its own tree format. Merging two such directories obviously creates a mess.
+
+Is there an elegant way to tell git-annex to treat the whole directory as a single file and overwrite the whole directory structure at once? I'm guessing the same problem occurs with mac os packages.
+
+Many thanks!
+Alex
diff --git a/doc/forum/using_git-annex_with_lightroom/comment_1_ec977efd277f0644767a4fc7064e4baf._comment b/doc/forum/using_git-annex_with_lightroom/comment_1_ec977efd277f0644767a4fc7064e4baf._comment
new file mode 100644
index 000000000..e7e1fa9a6
--- /dev/null
+++ b/doc/forum/using_git-annex_with_lightroom/comment_1_ec977efd277f0644767a4fc7064e4baf._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 1"
+ date="2014-10-02T15:23:18Z"
+ content="""
+There's not really a way to handle this sort of thing. I suggest that you put *.lrdata in `.gitignore`
+"""]]
diff --git a/doc/forum/using_git-annex_with_lightroom/comment_2_4dc4f1ea91c72418843a682fab1854d2._comment b/doc/forum/using_git-annex_with_lightroom/comment_2_4dc4f1ea91c72418843a682fab1854d2._comment
new file mode 100644
index 000000000..d0626d4c7
--- /dev/null
+++ b/doc/forum/using_git-annex_with_lightroom/comment_2_4dc4f1ea91c72418843a682fab1854d2._comment
@@ -0,0 +1,28 @@
+[[!comment format=mdwn
+ username="Jan"
+ subject="comment 2"
+ date="2015-01-10T10:37:11Z"
+ content="""
+I had the same problem an got Lightroom to work nicely with the following configuration.
+
+Place catalog and photo data in the same directory tree, for example:
+
+
+ /Lightroom/2015/2015-01-10/IMG_4432.JPG
+ /Lightroom/2015/2015-01-10/IMG_4433.JPG
+ ...
+ /Lightroom/Catalog/Lightroom 5 Catalog.lrcat
+ /Lightroom/Catalog/Lightroom 5 Catalog Previews.lrdata
+ /Lightroom/Catalog/Backups
+
+
+Now the image data and Lightroom metadata (= catalog) can be archived at the same time. In order to prevent temporary files and previews to get annexed use the following `.gitignore`:
+
+
+ */*.lrdata
+ Temporary Folder*/
+ */Temporary Import Data*/
+ *.lock
+
+The downside is that previews will have to get regenerated on other machines which pull this data, but I don't use it to share my Lightroom config across computers but as an archival tool.
+"""]]
diff --git a/doc/forum/view_from_numeric_values.mdwn b/doc/forum/view_from_numeric_values.mdwn
new file mode 100644
index 000000000..e1fc48a0f
--- /dev/null
+++ b/doc/forum/view_from_numeric_values.mdwn
@@ -0,0 +1,9 @@
+Hi Joey,
+
+it would be nice when views could take numeric comparisons as filters.
+
+ git annex metadata -s length=273.0 john_cage_4_33.mp3
+
+ git annex view length<=300
+
+... here is the catch, < and > don't work well in shell, this needs some other Syntax. I think the underlying machinery (using numeric comparisons instead globs) should be quite trivial. Any Ideas about a Syntax?
diff --git a/doc/forum/view_from_numeric_values/comment_1_f3c440f3f0104002a0020ba96ddcf87b._comment b/doc/forum/view_from_numeric_values/comment_1_f3c440f3f0104002a0020ba96ddcf87b._comment
new file mode 100644
index 000000000..4df3034a2
--- /dev/null
+++ b/doc/forum/view_from_numeric_values/comment_1_f3c440f3f0104002a0020ba96ddcf87b._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="cehteh"
+ ip="217.8.62.137"
+ subject="consistent syntax"
+ date="2014-03-25T15:25:43Z"
+ content="""
+Further thinking led to the idea to use the test(1) like syntax to filter matches.
+
+ git annex view length=.* -lt 300 -gt 30 -o -eq 273 bpm=.* -eq 0
+
+"""]]
diff --git a/doc/forum/view_from_numeric_values/comment_2_2414e1a8cfd154c339d8fc0e4a630ae9._comment b/doc/forum/view_from_numeric_values/comment_2_2414e1a8cfd154c339d8fc0e4a630ae9._comment
new file mode 100644
index 000000000..ff4fcc551
--- /dev/null
+++ b/doc/forum/view_from_numeric_values/comment_2_2414e1a8cfd154c339d8fc0e4a630ae9._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.41"
+ subject="comment 2"
+ date="2014-03-26T17:53:28Z"
+ content="""
+I'm a little bit worried about the potential to reinvent SQL, badly. ;)
+
+As shown in your example, once you have ranges, it's natural to also want disjunctions, and then probably parenthesized expressions, and suddenly things are very complicated.
+
+Also, it's important that views remain reversable, so that committing a moved file in a view can unambiguously calculate the new metadata for it. I think that quickly becomes hard when adding these complications.
+"""]]
diff --git a/doc/forum/view_from_numeric_values/comment_3_7879a11cc9767cdaac14f9993182dc25._comment b/doc/forum/view_from_numeric_values/comment_3_7879a11cc9767cdaac14f9993182dc25._comment
new file mode 100644
index 000000000..da6dded17
--- /dev/null
+++ b/doc/forum/view_from_numeric_values/comment_3_7879a11cc9767cdaac14f9993182dc25._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="cehteh"
+ ip="217.8.62.137"
+ subject="comment 3"
+ date="2014-03-26T18:55:41Z"
+ content="""
+I'm a little bit worried about the potential to reinvent SQL, badly. ;)
+
+As shown in your example, once you have ranges, it's natural to also want disjunctions, and then probably parenthesized expressions, and suddenly things are very complicated.
+
+Also, it's important that views remain reversable, so that committing a moved file in a view can unambiguously calculate the new metadata for it. I think that quickly becomes hard when adding these complications.
+
+"""]]
diff --git a/doc/forum/view_from_numeric_values/comment_4_517c7659654a6fc608eb3332053df8a4._comment b/doc/forum/view_from_numeric_values/comment_4_517c7659654a6fc608eb3332053df8a4._comment
new file mode 100644
index 000000000..90cb1c22a
--- /dev/null
+++ b/doc/forum/view_from_numeric_values/comment_4_517c7659654a6fc608eb3332053df8a4._comment
@@ -0,0 +1,28 @@
+[[!comment format=mdwn
+ username="cehteh"
+ ip="217.8.62.137"
+ subject="comment 4"
+ date="2014-03-26T20:03:51Z"
+ content="""
+I agree with you that things must stay simple. All what should be done is having the same effects like normal globs but adding arithmetic comparisons to it (could you think about a globbing extension over numeric values?). Then the generated views will have the same properties/semnatic as the normal glob'ed views without other side effects (if you want to go that far, this would even hold true for disjunct, parenthesized and otherwise complex expression).
+
+Example (how it should work, except my bug report 'set metadata on wrong files')
+
+ git annex metadata a.txt -s foo=bar -s num=1
+ git annex metadata b.txt -s foo=baz -s num=2
+ git annex metadata c.txt -s foo=barf -s num=3
+
+ git annex view foo=bar* num=* -ne 2
+
+should give
+ ./bar/1/a.txt ./barf/3/c.txt
+
+am I right now than one could
+
+ mkdir -p ./baz/2
+ mv /bar/1/a.txt ./baz/2
+
+to change the metadata of a.txt, despite the foo=baz and num=2 fields where initially filtered out when creating the view?
+If this assumption is true then having arithmetic filters, no matter how complex they are won't change the existing semantics over what globs do.
+
+"""]]
diff --git a/doc/forum/view_including_files_with_no_tags.mdwn b/doc/forum/view_including_files_with_no_tags.mdwn
new file mode 100644
index 000000000..7ed64fc7d
--- /dev/null
+++ b/doc/forum/view_including_files_with_no_tags.mdwn
@@ -0,0 +1,5 @@
+Hi
+
+Is it possible to create a view which also includes files with no tag?
+
+I use something like `git annex view 'rating=*'` to view files sorted by rating but this view does not include files which don‘t have a rating yet. What I was looking for is a way to show tagged files and untagged files in one view.
diff --git a/doc/forum/view_including_files_with_no_tags/comment_1_b0aafc023fbec33af268576c4c199af3._comment b/doc/forum/view_including_files_with_no_tags/comment_1_b0aafc023fbec33af268576c4c199af3._comment
new file mode 100644
index 000000000..ec58308b7
--- /dev/null
+++ b/doc/forum/view_including_files_with_no_tags/comment_1_b0aafc023fbec33af268576c4c199af3._comment
@@ -0,0 +1,24 @@
+[[!comment format=mdwn
+ username="Xyem"
+ ip="87.194.19.134"
+ subject="comment 1"
+ date="2014-03-25T08:54:23Z"
+ content="""
+This is a TODO:
+
+http://git-annex.branchable.com/design/metadata/
+
+ unmatched files in filtered branches
+
+ TODO Files not matching the view should be able to be included in the filtered branch, in a special location, an \"other\" directory.
+
+In the meantime, I do this before switching to the view:
+
+ git annex metadata -s fieldIwant?=untagged
+
+This shows the files without any \"fieldIwant\" in the directory \"untagged\". Afterwards, I could (but don't need to in my workflow, it automatically gets removed), do this to remove it:
+
+ git annex metadata -s fieldIwant-=untagged
+
+What the \"?=\" does is add that metadata only if the \"fieldIwant\" hasn't been set at all.
+"""]]
diff --git a/doc/forum/view_including_files_with_no_tags/comment_2_5ae9d5308371bdb1f94342c9f9b01aff._comment b/doc/forum/view_including_files_with_no_tags/comment_2_5ae9d5308371bdb1f94342c9f9b01aff._comment
new file mode 100644
index 000000000..3f16a163f
--- /dev/null
+++ b/doc/forum/view_including_files_with_no_tags/comment_2_5ae9d5308371bdb1f94342c9f9b01aff._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://ypid.wordpress.com/"
+ ip="213.153.84.215"
+ subject="Perfect"
+ date="2014-03-25T20:11:26Z"
+ content="""
+This works great. Nice workaround, thanks very much.
+"""]]
diff --git a/doc/forum/views___40__branches__41___never_get_deleted.mdwn b/doc/forum/views___40__branches__41___never_get_deleted.mdwn
new file mode 100644
index 000000000..bba7762da
--- /dev/null
+++ b/doc/forum/views___40__branches__41___never_get_deleted.mdwn
@@ -0,0 +1,16 @@
+Hello everyone,
+I would like to know if this is normal behavior or if it's a problem with my repository:
+
+Whenever I set a view with
+
+git annex view attr="\*"'
+
+a new branch representing the selected view gets created, as expected. The problem is that when I switch back to master ('git checkout master' or even 'git annex vpop') the view branch stays there, and all subsequent operations on the annex also consider the view branch, resulting a great slowdown if one has done many views (attr="this", attr="that", etc.). Is this normal? If so, why is it necessary for the branch to stay on? Does it speed up going back to the branch? Redoing git annex view attr="*" does not seem to take less time.
+
+Am I doing it wrong? Should I be deleting used view branches on my own? How?
+
+thanks for your replies.
+
+**EDIT:** I just found out that even if I delete view branches with git branch -D "views/attr=_" (which I'm not sure I should be doing), the branches are still checked when doing "git annex unused". That is, "git annex unused" lists "checking..." a whole lot of past views/branches which are not even there anymore (not listed with "git branch"). I also suspect that this is preventing deleted (git-rm) files from being collected from "unused". Is this a problem with my repo? Any way to fix this?
+
+=== git-annex version: **5.20140529-gb71f9bf** ===
diff --git a/doc/forum/views___40__branches__41___never_get_deleted/comment_1_ff53fa0b5f0c4a6554a37e3309e26925._comment b/doc/forum/views___40__branches__41___never_get_deleted/comment_1_ff53fa0b5f0c4a6554a37e3309e26925._comment
new file mode 100644
index 000000000..61fcbfeb4
--- /dev/null
+++ b/doc/forum/views___40__branches__41___never_get_deleted/comment_1_ff53fa0b5f0c4a6554a37e3309e26925._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-06-04T18:04:30Z"
+ content="""
+You can delete the view branches if you like. I have considered making moving views clean up old branches, but I have also considered reusing existing view branches when popping back to an old view.
+
+git-annex unused can't look at branches that aren't there. Perhaps you have pushed the view branches to a remote repository, and it's checking those branches of the remote? See git branch -a.
+
+I think that it makes sense for unused to ignore (local) view branches, since these are by definition supposed to be views of an existing branch, so looking at the branch should be sufficient (and if the view is out of date and has files that have since been deleted from the branch, the user's intent is not to preserve those from unused reaping). So, made that change.
+"""]]
diff --git a/doc/forum/views___40__branches__41___never_get_deleted/comment_3_1d4a3f4e83b288262e291262a6636602._comment b/doc/forum/views___40__branches__41___never_get_deleted/comment_3_1d4a3f4e83b288262e291262a6636602._comment
new file mode 100644
index 000000000..0a5d61e54
--- /dev/null
+++ b/doc/forum/views___40__branches__41___never_get_deleted/comment_3_1d4a3f4e83b288262e291262a6636602._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmYMS6tQ8q9k1fylGyA9Q6fdFzRBotME2Q"
+ nickname="tom"
+ subject="EDIT reply comment:"
+ date="2014-06-04T19:44:18Z"
+ content="""
+> *You can delete the view branches if you like. I have considered making moving views clean up old branches, but I have also considered reusing existing view branches when popping back to an old view.*
+
+Alright, I'd very much welcome anyone of the two possibilities as I'm making heavy use of views and would benefit from any of the two solutions.
+
+> *Perhaps you have pushed the view branches to a remote repository, and it's checking those branches of the remote? See git branch -a.*
+
+That's it! Solution for future reference: The remote branches referenced in local repo did not exist anymore in any repo (I had deleted them earlier from the remote) so \"git push origin --delete \<branchname\>\" wouldn't work. This other command worked very well in cleaning up the overwhelming missing remote views all in one go: \"git fetch --prune \<remote\>\"
+
+> *I think that it makes sense for unused to ignore (local) view branches, since these are by definition supposed to be views of an existing branch, so looking at the branch should be sufficient. So, made that change.*
+
+Thanks a lot! It makes perfect sense, looking forward to it on the next release.
+
+Now, it seems that even after pruning the view branches on the remote, *unused* would still not collect deleted files. I'm wondering if this is because there are other offline repos (backups which are not practical to take out of their resting place) I have not yet synchronized. I can see their main branches with git branch -a: remotes/oldbackup/git-annex, remotes/oldbackup/master, remotes/oldbackup/synced/git-annex, remotes/oldbackup/synced/master. Does this mean that until all repos (even the offline ones I never sync and work mostly as a backup for old stuff) are synchronized, 'unused' won't collect the deleted files? If so, is there a workaround for this?
+
+"""]]
diff --git a/doc/forum/views___40__branches__41___never_get_deleted/comment_3_4e96e5325fd12e48f190fe551a6ac07e._comment b/doc/forum/views___40__branches__41___never_get_deleted/comment_3_4e96e5325fd12e48f190fe551a6ac07e._comment
new file mode 100644
index 000000000..7ac31b1e9
--- /dev/null
+++ b/doc/forum/views___40__branches__41___never_get_deleted/comment_3_4e96e5325fd12e48f190fe551a6ac07e._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmYMS6tQ8q9k1fylGyA9Q6fdFzRBotME2Q"
+ nickname="tom"
+ subject="added comment"
+ date="2014-06-04T22:41:40Z"
+ content="""
+Specifically I'm looking for a workaround that would make this behavior possible in this use case:
+
+The user decides some file in the local repository are not needed anymore, they are not needed to be in any repository at all and wants to reclaim the space as soon as possible (or at least make the files available to 'unused' for later removal). Removing the content the from local repository (git-rm ?) the space can be immediately reclaimed in the local hard drive, without the need to connect and sync unavailable/far remotes. As the other remotes and old backups become available and sync, they delete the unused content as well (or at least make it available to 'unused').
+
+Is there a way to achieve this?
+"""]]
diff --git a/doc/forum/views___40__branches__41___never_get_deleted/comment_4_a4764b5bfb08ebe90430ea14fcb6e8e0._comment b/doc/forum/views___40__branches__41___never_get_deleted/comment_4_a4764b5bfb08ebe90430ea14fcb6e8e0._comment
new file mode 100644
index 000000000..762e4db53
--- /dev/null
+++ b/doc/forum/views___40__branches__41___never_get_deleted/comment_4_a4764b5bfb08ebe90430ea14fcb6e8e0._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 4"
+ date="2014-06-05T17:35:31Z"
+ content="""
+`git annex drop --force $file; git rm $file`
+
+Makes sense in some situations anyway..
+"""]]
diff --git a/doc/forum/views___40__branches__41___never_get_deleted/comment_5_02e08dffb01246010b390aeef8f32234._comment b/doc/forum/views___40__branches__41___never_get_deleted/comment_5_02e08dffb01246010b390aeef8f32234._comment
new file mode 100644
index 000000000..a9b72087e
--- /dev/null
+++ b/doc/forum/views___40__branches__41___never_get_deleted/comment_5_02e08dffb01246010b390aeef8f32234._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmYMS6tQ8q9k1fylGyA9Q6fdFzRBotME2Q"
+ nickname="tom"
+ subject="comment 5"
+ date="2014-06-06T09:57:32Z"
+ content="""
+ah, I get it. Thanks!
+"""]]
diff --git a/doc/forum/warning:_remote_HEAD_refers_to_nonexistent_ref__44___unable_to_checkout.mdwn b/doc/forum/warning:_remote_HEAD_refers_to_nonexistent_ref__44___unable_to_checkout.mdwn
new file mode 100644
index 000000000..f57e0ee83
--- /dev/null
+++ b/doc/forum/warning:_remote_HEAD_refers_to_nonexistent_ref__44___unable_to_checkout.mdwn
@@ -0,0 +1,69 @@
+I am struggling for so long time, everytime getting different errors :( :(
+
+I digged up my backup and started from scratch. Still not working.
+
+On the (linux) server (directory contains already files):
+
+ cd bin
+ git init
+ git annex init server
+ git annex direct
+ git annex add .
+
+Then, on the Windows client:
+
+ $ git clone ssh://me@server/srv/data/bin bin
+ Cloning into 'bin'...
+ warning: remote HEAD refers to nonexistent ref, unable to checkout.
+
+What's going on here?
+
+EDIT: Of course, I would not ask if everything would work as expected. But the client repository in windows is always empty, no matter what I do (issueing git annex init, git add remote, git annex sync, ...) does not seem to help me ...
+
+EDIT2: When I continue on the windows side (despite the warning):
+
+ cd bin
+ git annex init client
+ git annex sync
+ Permission denied (publickey,keyboard-interactive).
+ (merging origin/git-annex origin/synced/git-annex into git-annex...)
+ (Recording state in git...)
+
+ Remote origin does not have git-annex installed; setting annex-ignore
+ commit ok
+ pull origin Already up-to-date!
+ Merge made by the 'recursive' strategy.
+
+
+ ok
+ push origin To ssh://me@server/srv/data/bin
+ b79922f..4fe0505 git-annex -> synced/git-annex
+ 2f6a601..02a2603 annex/direct/master -> synced/master
+
+ ok
+
+
+But that's not true, git-annex is definitely installed on the server (it's just the Debian package and it resides in /usr/bin/git-annex). In any case, the client repository is still empty
+
+EDIT3: Struggle, struggle, ...
+
+Finally, for whatever reason, the client dir is not empty. What seems to be missing on the server was:
+
+ git annex sync
+
+but this is never written (also not in the walkthrough). Can anyone tell me if it's required and why?
+
+Furthermore, even that I "see" at least the file references now, I am not able to get them:
+
+ $ git annex get apps
+ get apps/gitignore (not available)
+ Try making some of these repositories available:
+ 10d0ffd8-f499-4b55-83e6-ff58cd98edc5 -- server
+
+ (Note that these git remotes have annex-ignore set: origin)
+ failed
+ git-annex: get: 1 failed
+
+That's an SSH remote, it *is* available! What is meant by that?
+
+
diff --git a/doc/forum/warning:_remote_HEAD_refers_to_nonexistent_ref__44___unable_to_checkout/comment_1_c0d9758be80d1a349ffe82c80075bebd._comment b/doc/forum/warning:_remote_HEAD_refers_to_nonexistent_ref__44___unable_to_checkout/comment_1_c0d9758be80d1a349ffe82c80075bebd._comment
new file mode 100644
index 000000000..3601e2639
--- /dev/null
+++ b/doc/forum/warning:_remote_HEAD_refers_to_nonexistent_ref__44___unable_to_checkout/comment_1_c0d9758be80d1a349ffe82c80075bebd._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="171.67.174.99"
+ subject="comment 1"
+ date="2014-05-10T21:20:36Z"
+ content="""
+I think, although not sure, that all of this is related of failing/inconsistent ssh calls.
+
+I filed a bug here: https://git-annex.branchable.com/bugs/git-annex_ignores_GIT__95__SSH
+
+The problem is that failure in ssh does not result in proper error messages in git-annex, resulting in inconsistent repositories.
+"""]]
diff --git a/doc/forum/warning:_remote_HEAD_refers_to_nonexistent_ref__44___unable_to_checkout/comment_2_c28dae2eb0ab825ee6d43735e04a18a3._comment b/doc/forum/warning:_remote_HEAD_refers_to_nonexistent_ref__44___unable_to_checkout/comment_2_c28dae2eb0ab825ee6d43735e04a18a3._comment
new file mode 100644
index 000000000..97671a2c5
--- /dev/null
+++ b/doc/forum/warning:_remote_HEAD_refers_to_nonexistent_ref__44___unable_to_checkout/comment_2_c28dae2eb0ab825ee6d43735e04a18a3._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 2"
+ date="2014-05-16T16:49:09Z"
+ content="""
+After you add a file to a git repository, you have to git commit it. Using git-annex is no different. The walkthrough shows using `git commit`: <http://git-annex.branchable.com/walkthrough/adding_files/>; you can use `git-annex sync` if you prefer.
+
+<pre>
+Permission denied (publickey,keyboard-interactive).
+ (merging origin/git-annex origin/synced/git-annex into git-annex...)
+ (Recording state in git...)
+
+ Remote origin does not have git-annex installed; setting annex-ignore
+</pre>
+
+git-annex uses a heuristic to determine if git-annex-shell is not installed on a remote server: It tries to run it, and if that fails, it tries to run git fetch. If that succeeds it assumes this means it can log into the server, but git-annex-shell is not installed.
+
+Above, that heuristic seems to have failed; you seem to have given the wrong password or something so it didn't run git-annex-shell, but then it was able to log in for the git fetch.
+
+You will need to run this command to fix it up: `git config remote.origin.annex-ignore false`
+"""]]
diff --git a/doc/forum/webapp_and_manual_mode/comment_3_f0739bf4304a91a5d4ec33ac2421c966._comment b/doc/forum/webapp_and_manual_mode/comment_3_f0739bf4304a91a5d4ec33ac2421c966._comment
new file mode 100644
index 000000000..04369e7cd
--- /dev/null
+++ b/doc/forum/webapp_and_manual_mode/comment_3_f0739bf4304a91a5d4ec33ac2421c966._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="Also confused by the manual mode"
+ date="2014-05-18T06:39:54Z"
+ content="""
+@Joeyh: would you mind explaining the modes maybe on their own wiki page?
+I've got most of them but the sense and functioning of the manual method escapes me :-/
+"""]]
diff --git a/doc/forum/webapp_does_not_start.mdwn b/doc/forum/webapp_does_not_start.mdwn
new file mode 100644
index 000000000..3003af7d0
--- /dev/null
+++ b/doc/forum/webapp_does_not_start.mdwn
@@ -0,0 +1,72 @@
+Sorry, I have again an issue :(
+
+What could be the problem that the webapp is not starting (in Windows)? git annex just exists without messages, connection to localhost failes of course
+
+ me@laptop /cygdrive/c/Data
+ $ git annex --verbose --debug webapp
+
+ me@laptop /cygdrive/c/Data
+ $
+
+If I run it within an annexed directory I get at least one message - but it still immideately exits:
+
+ me@laptop /cygdrive/c/Data/annex
+ $ git annex --verbose --debug webapp
+ [2014-07-11 19:06:58 Pacific Daylight Time] chat: git-annex ["--verbose","--debug","webapp"]
+
+ me@laptop /cygdrive/c/Data/annex
+ $
+
+ git-annex version: 5.20140707-g8116d10
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 2 3 4
+
+
+EDIT:
+1.) Interestingly, also "git annex test" fails:
+
+ [...]
+ ok
+ push origin To C:/Data/.t\repo
+ bcc4611..91f5218 git-annex -> synced/git-annex
+ 6f47922..92c578a annex/direct/master -> synced/master
+
+ ok
+ add ../dir2/foo ok
+ (Recording state in git...)
+ FAIL
+ Exception: .t/tmprepo9/.git/annex/journal: getDirectoryContents: permission denied (Access is denied.)
+
+ 2 out of 83 tests failed
+ (This could be due to a bug in git-annex, or an incompatability
+ with utilities, such as git, installed on this system.)
+
+
+
+2.) There's really something very weird going on. At the beginning it worked. Then it stopped (as per above). Sometimes, when I start it using "Git Bash" it works. But then not any more.
+3.) Rebooting the machine does not help
+
+EDIT once again:
+4.) I am afraid there is something big broken. Suddenly I could start the daemon again. The thing I did was to delete my complete annex.
+But if I shutdown the daemon now I get:
+
+ $ git annex webapp
+ Launching web browser on file://C:\cygwin\tmp\webapp85796.html
+
+ Detected a filesystem without fifo support.
+
+ Disabling ssh connection caching.
+
+ Detected a crippled filesystem.
+
+ Enabling direct mode.
+
+ (Recording state in git...)
+ WebApp crashed: ExitFailu
+
+... and the whole loop starts again. webapp daemon does not start as long as I delete the annex. Interestingly this is independent from %USERPROFILE%\.config. Deleting this directory does not change anything. So somehow git-annex "knows" that there is somewhere an annex and fails if it is.
+
diff --git a/doc/forum/webapp_does_not_start/comment_1_dd27d30ce305562a1552f46c87b1cd27._comment b/doc/forum/webapp_does_not_start/comment_1_dd27d30ce305562a1552f46c87b1cd27._comment
new file mode 100644
index 000000000..cd3a7d3bc
--- /dev/null
+++ b/doc/forum/webapp_does_not_start/comment_1_dd27d30ce305562a1552f46c87b1cd27._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-14T19:05:32Z"
+ content="""
+git-annex stores the locations of repositories in `.config/git-annex/autostart` in what passes for a home directory on Windows.
+
+Are you sure it doesn't manage to at least open a web browser tab, possibly one with an error in it? This would be easy to miss if you have a lot of tabs open. I seem to have partially reproduced this, at least that's the behavior I see.
+
+The root of the problem seems to be that it thinks the daemon is running, but it's not. So it just opens the web browser and then stops. After I deleted .git/annex/daemon*, and .git/annex/url and .git/annex/daemon.log, `git annex webapp` worked again.
+"""]]
diff --git a/doc/forum/webapp_does_not_start/comment_2_ef37f40288a1181ca619ae13b0f7a994._comment b/doc/forum/webapp_does_not_start/comment_2_ef37f40288a1181ca619ae13b0f7a994._comment
new file mode 100644
index 000000000..551f51845
--- /dev/null
+++ b/doc/forum/webapp_does_not_start/comment_2_ef37f40288a1181ca619ae13b0f7a994._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 2"
+ date="2014-07-14T20:06:03Z"
+ content="""
+I think that I have fixed this problem. The Windows autobuilder should produce a fixed build within an hour.
+"""]]
diff --git a/doc/forum/webapp_does_not_start/comment_3_6e625dba9f7fa36bf9c7e9d77fbadeff._comment b/doc/forum/webapp_does_not_start/comment_3_6e625dba9f7fa36bf9c7e9d77fbadeff._comment
new file mode 100644
index 000000000..296e066a7
--- /dev/null
+++ b/doc/forum/webapp_does_not_start/comment_3_6e625dba9f7fa36bf9c7e9d77fbadeff._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="128.12.90.218"
+ subject="comment 3"
+ date="2014-07-15T05:43:35Z"
+ content="""
+Thank you, really really great. This part seems to work again.
+For some reason, the assistant takes the wrong (?) git.exe (as I described here: http://git-annex.branchable.com/forum/Restricting_SSH_+_supply_key/)
+"""]]
diff --git a/doc/forum/weird_view_file_naming.mdwn b/doc/forum/weird_view_file_naming.mdwn
new file mode 100644
index 000000000..1520c6ad3
--- /dev/null
+++ b/doc/forum/weird_view_file_naming.mdwn
@@ -0,0 +1,13 @@
+Very quick one, if anyone has to share experience with views (i would find them useful to get partial checkout views, as long as I can find a special setup to preserve the tree/filenames hyerarchy):
+
+by using (filtering) views I am getting file names changed to include the (orignal) dir name,
+for instance:
+
+2008/pippo.doc
+
+after a git annex view 2008/=*, comes out as pippo_%2008%.doc
+is this avoidable ?
+
+(i've been trying to follow metadata walkthrough etc. but i always get the dirname in the filename between percents...)
+
+btw: version is 5.20141105
diff --git a/doc/forum/weird_view_file_naming/comment_1_24a44f94194231bb8efe9b20ee311d4c._comment b/doc/forum/weird_view_file_naming/comment_1_24a44f94194231bb8efe9b20ee311d4c._comment
new file mode 100644
index 000000000..5ce5ed6ea
--- /dev/null
+++ b/doc/forum/weird_view_file_naming/comment_1_24a44f94194231bb8efe9b20ee311d4c._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkJafmCf-sg9_OM0pynFYM3AO4WCgJiaMI"
+ nickname="Michele"
+ subject="what I was trying to do is probabily done better with sparse checkouts"
+ date="2014-11-26T11:46:04Z"
+ content="""
+therefore instead of tagging the files _and_ placing them into subdirectories (which somehow seems confounding views reperesentation), i'll be using sparse checkout for the subdirectories I need.
+
+i'll be looking in sparse checkouts so that i have separate trees checked out from same annex ( see http://git-annex.branchable.com/forum/sparse_git_checkouts_with_annex/ )
+
+cheers
+"""]]
diff --git a/doc/forum/weird_view_file_naming/comment_2_2ff3002e45a7443f0502243b3690df9d._comment b/doc/forum/weird_view_file_naming/comment_2_2ff3002e45a7443f0502243b3690df9d._comment
new file mode 100644
index 000000000..a78231438
--- /dev/null
+++ b/doc/forum/weird_view_file_naming/comment_2_2ff3002e45a7443f0502243b3690df9d._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2014-12-01T22:00:54Z"
+ content="""
+This naming is necessary to deal with the problem that a view could
+contain two files with the name name. So the directory is included to
+work around it.
+
+Menomic: `%` looks sort of like a `/`
+"""]]
diff --git a/doc/forum/whereis_command_with_file_names_instead_of_hashes.mdwn b/doc/forum/whereis_command_with_file_names_instead_of_hashes.mdwn
new file mode 100644
index 000000000..6b4b3bf01
--- /dev/null
+++ b/doc/forum/whereis_command_with_file_names_instead_of_hashes.mdwn
@@ -0,0 +1,7 @@
+Hi
+
+I have a laptop, server and a regular PC. Laptop and PC are using same "backup" repo on server. Thay all get notified via ssh. My goal is to have synchronization and backup in one remote repo. When I wan to list all files on all repos i do:
+
+ git-annex whereis -A (some files do fail. Don't know why)
+
+But that displays hashes. Not file names. How can to list file names on all repos instead of hashes ?
diff --git a/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_1_4eaca07152916adc18032fb404e4dd92._comment b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_1_4eaca07152916adc18032fb404e4dd92._comment
new file mode 100644
index 000000000..3ad0becfe
--- /dev/null
+++ b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_1_4eaca07152916adc18032fb404e4dd92._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://ypid.wordpress.com/"
+ ip="213.153.84.215"
+ subject="-A --all operate on all versions of all files"
+ date="2014-07-07T07:42:03Z"
+ content="""
+Hi
+
+`-A` operates on all the files even on files which are not accessible from your current working directory. If you omit the `-A` then filenames will be printed.
+"""]]
diff --git a/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_2_94b43ac23ff8332b35723422eede8997._comment b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_2_94b43ac23ff8332b35723422eede8997._comment
new file mode 100644
index 000000000..2ab6b8e0b
--- /dev/null
+++ b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_2_94b43ac23ff8332b35723422eede8997._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkNE-H4vEcbcGndxq5daT8qUb7yIf7r1OE"
+ nickname="Łukasz"
+ subject="comment 2"
+ date="2014-07-07T08:40:57Z"
+ content="""
+Yes they will be omitted. I just want to list files that are on my laptop (for example) and on remote repo.
+"""]]
diff --git a/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_3_45ffa6dd17667ecd6685f85f34046eff._comment b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_3_45ffa6dd17667ecd6685f85f34046eff._comment
new file mode 100644
index 000000000..b0d48ef99
--- /dev/null
+++ b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_3_45ffa6dd17667ecd6685f85f34046eff._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://ypid.wordpress.com/"
+ ip="213.153.84.215"
+ subject="git annex whereis --in origin"
+ date="2014-07-07T09:45:48Z"
+ content="""
+So you only want to see whereis for files which are present on certain annexes? You can use `git annex whereis --in e64553d0-779a-4c79-939a-d5b7f3e56a57` or `git annex whereis --in origin` (modify the repo names).
+
+Have a look on [QUERY COMMANDS](/git-annex/).
+"""]]
diff --git a/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_4_d459fbcf0db59b821ae67f4949e48103._comment b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_4_d459fbcf0db59b821ae67f4949e48103._comment
new file mode 100644
index 000000000..24643f063
--- /dev/null
+++ b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_4_d459fbcf0db59b821ae67f4949e48103._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkNE-H4vEcbcGndxq5daT8qUb7yIf7r1OE"
+ nickname="Łukasz"
+ subject="comment 4"
+ date="2014-07-07T10:05:06Z"
+ content="""
+git-annex whereis --not --in here
+
+Does not display anything.
+
+git-annex whereis --not --in here -A
+
+Displays files on remote only. Every file has an additional message (0 copies) failed. This displays hash names. How to display file names ? I am 100% sure that my remote repo has some files that are not present on laptop or PC.
+"""]]
diff --git a/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_5_e52a8c9cb418fbc2e2cba71f37bd44ad._comment b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_5_e52a8c9cb418fbc2e2cba71f37bd44ad._comment
new file mode 100644
index 000000000..eff34edb6
--- /dev/null
+++ b/doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_5_e52a8c9cb418fbc2e2cba71f37bd44ad._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkNE-H4vEcbcGndxq5daT8qUb7yIf7r1OE"
+ nickname="Łukasz"
+ subject="comment 5"
+ date="2014-07-07T10:06:03Z"
+ content="""
+One more thing. I am using indirect mode with assistant. If that matters in some way.
+"""]]
diff --git a/doc/future_proofing/comment_1_2614eb2e9b7b23fa9bb4251c0d025909._comment b/doc/future_proofing/comment_1_2614eb2e9b7b23fa9bb4251c0d025909._comment
new file mode 100644
index 000000000..dbe429fa9
--- /dev/null
+++ b/doc/future_proofing/comment_1_2614eb2e9b7b23fa9bb4251c0d025909._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="https://launchpad.net/~electrichead"
+ nickname="electrichead"
+ subject="Regarding accessing files in a time capsule..."
+ date="2014-08-25T15:51:00Z"
+ content="""
+Imagine a rather contrived doomsday scenario: the file paths and/or basenames are important and, for some reason, the symlinks are not present (perhaps they got deleted, or aren't supported). `git` and `git-annex` no longer exist and let's assume knowledge of `git` internals is not useful here. All the *content* is there, stored under hashed file names under `.git/annex/objects`.
+
+I may be missing something obvious but I think options for restoring file paths include:
+
+ - direct mode bypasses this issue; all the files are right there.
+ - the WORM backend perhaps carries enough information in the object file names to work with.
+ - file content/metadata may be sufficient to easily recreate a sensible directory structure in some cases, so no worries.
+
+These first two options may represent compromises in various use-cases and the last may not be applicable or, if it is, practical. The object-path mapping could trivially be backed up in plain text in lieu of these. Like I said, I may be overlooking something here that makes this unnecessary or even a non-concern (actually, I've convinced myself it's not a serious concern in most of the use-cases I've considered, but crossing i's and dotting t's).
+"""]]
diff --git a/doc/git-annex-shell.mdwn b/doc/git-annex-shell.mdwn
index c866154ac..e43d51657 100644
--- a/doc/git-annex-shell.mdwn
+++ b/doc/git-annex-shell.mdwn
@@ -26,7 +26,12 @@ first "/~/" or "/~user/" is expanded to the specified home directory.
* configlist directory
This outputs a subset of the git configuration, in the same form as
- `git config --list`
+ `git config --list`. This is used to get the annex.uuid of the remote
+ repository.
+
+ When run in a repository that does not yet have an annex.uuid, one
+ will be created, as long as a git-annex branch has already been pushed to
+ the repository.
* inannex directory [key ...]
@@ -60,6 +65,11 @@ first "/~/" or "/~user/" is expanded to the specified home directory.
This commits any staged changes to the git-annex branch.
It also runs the annex-content hook.
+* notifychanges
+
+ This is used by `git-annex remotedaemon` to be notified when
+ refs in the remote repository are changed.
+
* gcryptsetup gcryptid
Sets up a repository as a gcrypt repository.
@@ -96,6 +106,9 @@ changed.
If set, disallows any command that could modify the repository.
+ Note that this does not prevent passing commands on to git-shell.
+ For that, you also need ...
+
* GIT_ANNEX_SHELL_LIMITED
If set, disallows running git-shell to handle unknown commands.
@@ -113,7 +126,7 @@ git-shell(1)
# AUTHOR
-Joey Hess <joey@kitenet.net>
+Joey Hess <id@joeyh.name>
<http://git-annex.branchable.com/>
diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn
index 32c8ec266..d9d515d41 100644
--- a/doc/git-annex.mdwn
+++ b/doc/git-annex.mdwn
@@ -31,7 +31,7 @@ content from the key-value store.
# EXAMPLES
# git annex get video/hackity_hack_and_kaxxt.mov
- get video/_why_hackity_hack_and_kaxxt.mov (not available)
+ get video/hackity_hack_and_kaxxt.mov (not available)
I was unable to access these remotes: server
Try making some of these repositories available:
5863d8c0-d9a9-11df-adb2-af51e6559a49 -- my home file server
@@ -62,10 +62,14 @@ subdirectories).
* `add [path ...]`
- Adds files in the path to the annex. Files that are already checked into
- git, or that git has been configured to ignore will be silently skipped.
- (Use `--force` to add ignored files.) Dotfiles are skipped unless explicitly
- listed.
+ Adds files in the path to the annex. If no path is specified, adds
+ files from the current directory and below.
+
+ Files that are already checked into git, or that git has been configured
+ to ignore will be silently skipped. (Use `--force` to add ignored files.)
+
+ Dotfiles are skipped unless explicitly listed, or the --include-dotfiles
+ option is used.
* `get [path ...]`
@@ -75,6 +79,10 @@ subdirectories).
Normally git-annex will choose which repository to copy the content from,
but you can override this using the `--from` option.
+
+ Rather than specifying a filename, the `--all` option can be used to
+ get all available versions of all files, or the --key=KEY`
+ option can be used to get a specified key.
* `drop [path ...]`
@@ -135,11 +143,14 @@ subdirectories).
* `sync [remote ...]`
Use this command when you want to synchronize the local repository with
- one or more of its remotes. You can specify the remotes to sync with;
- the default is to sync with all remotes. Or specify `--fast` to sync with
- the remotes with the lowest annex-cost value.
-
- The sync process involves first committing all local changes,
+ one or more of its remotes. You can specify the remotes (or remote
+ groups) to sync with by name; the default if none are specified is to
+ sync with all remotes.
+ Or specify `--fast` to sync with the remotes with the
+ lowest annex-cost value.
+
+ The sync process involves first committing any local changes to files
+ that have previously been added to the repository,
then fetching and merging the `synced/master` and the `git-annex` branch
from the remote repositories, and finally pushing the changes back to
those branches on the remote repositories. You can use standard git
@@ -163,10 +174,12 @@ subdirectories).
This behavior can be overridden by configuring the preferred content of
a repository. See see PREFERRED CONTENT below.
+ The `--message` or `-m` option can be used to specify a commit message.
+
* `merge`
- This performs the same merging that is done by the sync command, but
- without pushing or pulling any data.
+ This performs the same merging (and merge conflict resolution)
+ that is done by the sync command, but without pushing or pulling any data.
One way to use this is to put `git annex merge` into a repository's
post-receive hook. Then any syncs to the repository will update its working
@@ -205,8 +218,10 @@ subdirectories).
is there at a future point, specify `--relaxed`. (Implies `--fast`.)
Normally the filename is based on the full url, so will look like
- "www.example.com_dir_subdir_bigfile". For a shorter filename, specify
- `--pathdepth=N`. For example, `--pathdepth=1` will use "dir/subdir/bigfile",
+ "www.example.com_dir_subdir_bigfile". In some cases, addurl is able to
+ come up with a better filename based on other information. Or, for a
+ shorter filename, specify `--pathdepth=N`. For example,
+ `--pathdepth=1` will use "dir/subdir/bigfile",
while `--pathdepth=3` will use "bigfile". It can also be negative;
`--pathdepth=-2` will use the last two parts of the url.
@@ -215,9 +230,12 @@ subdirectories).
alternate locations from which the file can be downloaded. In this mode,
addurl can be used both to add new files, or to add urls to existing files.
- When quvi is installed, urls are automatically tested to see if they
+ When `quvi` is installed, urls are automatically tested to see if they
point to a video hosting site, and the video is downloaded instead.
+ Urls to torrent files (including magnet links) will cause the content of
+ the torrent to be downloaded, using `aria2c`.
+
* `rmurl file url`
Record that the file is no longer available at the url.
@@ -254,6 +272,11 @@ subdirectories).
(Note that using `--deduplicate` or `--clean-duplicates` with the WORM
backend does not look at file content, but filename and mtime.)
+
+ To control which files are imported, many of the MATCHING OPTIONS can
+ be used.
+
+ git annex import /dir --include='*.png'
* `importfeed [url ...]`
@@ -264,13 +287,29 @@ subdirectories).
Use `--template` to control where the files are stored.
The default template is '${feedtitle}/${itemtitle}${extension}'
- (Other available variables: feedauthor, itemauthor, itemsummary, itemdescription, itemrights, itemid)
+ (Other available variables: feedauthor, itemauthor, itemsummary, itemdescription, itemrights, itemid, itempubdate, title, author)
The `--relaxed` and `--fast` options behave the same as they do in addurl.
-
+
When quvi is installed, links in the feed are tested to see if they
are on a video hosting site, and the video is downloaded. This allows
- importing eg, youtube playlists.
+ importing e.g., youtube playlists.
+
+* `undo [filename|directory] ...`
+
+ When passed a filename, undoes the last change that was made to that
+ file.
+
+ When passed a directory, undoes the last change that was made to the
+ contents of that directory.
+
+ Running undo a second time will undo the undo, returning the working
+ tree to the same state it had before. In order for undoing an undo of
+ staged changes, any staged changes are first committed by the
+ undo command.
+
+ Note that this does not undo get/drop of a file's content; it only
+ operates on the file tree committed to git.
* `watch`
@@ -314,7 +353,7 @@ subdirectories).
This disables running a local web browser, and outputs the url you
can use to open the webapp.
- When using the webapp on a remote computer, you'll almost certianly
+ When using the webapp on a remote computer, you'll almost certainly
want to enable HTTPS. The webapp will use HTTPS if it finds
a .git/annex/privkey.pem and .git/annex/certificate.pem. Here's
one way to generate those files, using a self-signed certificate:
@@ -383,7 +422,7 @@ subdirectories).
The name of the remote is the same name used when originally
creating that remote with "initremote". Run "git annex enableremote"
- with no parameters to get a list of special remote names.
+ without any name to get a list of special remote names.
Some special remotes may need parameters to be specified every time.
For example, the directory special remote requires a directory= parameter.
@@ -420,7 +459,7 @@ subdirectories).
Run without a number to get the current value.
When git-annex is asked to drop a file, it first verifies that the
- required number of copies can be satisfied amoung all the other
+ required number of copies can be satisfied among all the other
repositories that have a copy of the file.
This can be overridden on a per-file basis by the annex.numcopies setting
@@ -452,6 +491,8 @@ subdirectories).
Adds a repository to a group, such as "archival", "enduser", or "transfer".
The groupname must be a single word.
+ Omit the groupname to show the current groups that a repository is in.
+
* `ungroup repository groupname`
Removes a repository from a group.
@@ -468,6 +509,21 @@ subdirectories).
Without an expression, displays the current preferred content setting
of the repository.
+* `groupwanted groupname [expression]`
+
+ Sets or displays the groupwanted expression. This will be used by
+ repositories that are in the group, and that have their preferred
+ content expression set to "groupwanted".
+
+ For example, to configure a group named redundantarchive, and
+ make repositories in the group want to contain 3 copies of every file:
+
+ git annex groupwanted redundantarchive "not (copies=redundantarchive:3)"
+ for repo in foo bar baz; do
+ git annex group $repo redundantarchive
+ git annex wanted $repo groupwanted
+ done
+
* `schedule repository [expression]`
When run with an expression, configures scheduled jobs to run at a
@@ -487,9 +543,9 @@ subdirectories).
As part of the switch to direct mode, any changed files will be committed.
- Note that git commands that operate on the work tree are often unsafe to
- use in direct mode repositories, and can result in data loss or other
- bad behavior.
+ Note that git commands that operate on the work tree will refuse to
+ run in direct mode repositories. Use `git annex proxy` to safely run such
+ commands.
* `indirect`
@@ -502,7 +558,7 @@ subdirectories).
* `fsck [path ...]`
With no parameters, this command checks the whole annex for consistency,
- and warns about or fixes any problems found. This is a good compliment to
+ and warns about or fixes any problems found. This is a good complement to
`git fsck`.
With parameters, only the specified files are checked.
@@ -638,7 +694,8 @@ subdirectories).
`--format`. The default output format is the same as `--format='${file}\\n'`
These variables are available for use in formats: file, key, backend,
- bytesize, humansize, keyname, hashdirlower, hashdirmixed, mtime.
+ bytesize, humansize, keyname, hashdirlower, hashdirmixed, mtime (for
+ the mtime field of a WORM key).
* `whereis [path ...]`
@@ -663,17 +720,19 @@ subdirectories).
To generate output suitable for the gource visualization program,
specify `--gource`.
-* `info [directory ...]`
+* `info [directory|file|remote|uuid ...]`
- Displays some statistics and other information, including how much data
- is in the annex and a list of all known repositories.
+ Displays statistics and other information for the specified item,
+ which can be a directory, or a file, or a remote, or the uuid of a
+ repository.
- To only show the data that can be gathered quickly, use `--fast`.
+ When no item is specified, displays statistics and information
+ for the repository as a whole.
- When a directory is specified, shows a differently formatted info
- display for that directory. In this mode, all of the matching
- options can be used to filter the files that will be included in
- the information.
+ When a directory is specified, the MATCHING OPTIONS can be used
+ to select the files in the directory that are included in the statistics.
+
+ To only show the data that can be gathered quickly, use `--fast`.
For example, suppose you want to run "git annex get .", but
would first like to see how much disk space that will use.
@@ -707,12 +766,13 @@ subdirectories).
* `metadata [path ...] [-s field=value -s field+=value -s field-=value ...] [-g field]`
- Each file can have any number of metadata fields attached to it,
- which each in turn have any number of values.
-
+ The content of a file can have any number of metadata fields
+ attached to it to describe it. Each metadata field can in turn
+ have any number of values.
+
This command can be used to set metadata, or show the currently set
metadata.
-
+
To show current metadata, run without any -s parameters. The --json
option will enable json output.
@@ -741,7 +801,7 @@ subdirectories).
and checks out the view branch. Only files in the current branch whose
metadata matches all the specified field values and tags will be
shown in the view.
-
+
Multiple values for a metadata field can be specified, either by using
a glob (`field="*"`) or by listing each wanted value. The resulting view
will put files in subdirectories according to the value of their fields.
@@ -776,9 +836,9 @@ subdirectories).
Changes the current view, adding an additional level of directories
to categorize the files.
- For example, when the view is by author/tag, `vadd year=*` will
- change it to year/author/tag.
-
+ For example, when the view is by author/tag, `vadd year=*` will
+ change it to year/author/tag.
+
So will `vadd year=2014 year=2013`, but limiting the years in view
to only those two.
@@ -840,6 +900,17 @@ subdirectories).
repository, and remove all of git-annex's other data, leaving you with a
git repository plus the previously annexed files.
+* `reinit uuid|description`
+
+ Normally, initializing a repository generates a new, unique identifier
+ (UUID) for that repository. Occasionally it may be useful to reuse a
+ UUID -- for example, if a repository got deleted, and you're
+ setting it back up.
+
+ Use this with caution; it can be confusing to have two existing
+ repositories with the same UUID. Also, you will probably want to run
+ a fsck.
+
# PLUMBING COMMANDS
* `pre-commit [path ...]`
@@ -903,6 +974,11 @@ subdirectories).
stdio protocol, which is intentionally not documented (as it may change
at any time).
+* `setpresentkey key uuid [1|0]`
+
+ This plumbing-level command changes git-annex's records about whether
+ the specified key is present in a remote with the specified uuid.
+
* `rekey [file key ...]`
This plumbing-level command is similar to migrate, but you specify
@@ -911,15 +987,93 @@ subdirectories).
With `--force`, even files whose content is not currently available will
be rekeyed. Use with caution.
+* `findref [ref]`
+
+ This is similar to the find command, but instead of finding files in the
+ current work tree, it finds files in the specified git ref.
+
+* `proxy -- git cmd [options]`
+
+ Only useful in a direct mode repository, this runs the specified git
+ command with a temporary work tree, and updates the working tree to
+ reflect any changes staged or committed by the git command.
+
+ For example, to revert the most recent change that was committed
+ to the repository:
+
+ git annex proxy -- git revert HEAD
+
+ To check out a past version of the repository:
+
+ git annex proxy -- git checkout HEAD^^
+
+ To rename a directory:
+
+ git annex proxy -- git mv mydir newname
+
+* `resolvemerge`
+
+ Resolves a conflicted merge, by adding both conflicting versions of the
+ file to the tree, using variants of their filename. This is done
+ automatically when using `git annex sync` or `git annex merge`.
+
+ Note that only merge conflicts that involve an annexed file are resolved.
+ Merge conflicts between two files that are not annexed will not be
+ automatically resolved.
+
+* `diffdriver`
+
+ This is an external git diff driver shim. Normally, when using `git diff`
+ with an external git driver, the symlinks to annexed files are not set up
+ right, so the external git driver cannot read them in order to perform
+ smart diffing of their contents. This command works around the problem,
+ by passing the fixed up files to the real external diff driver.
+
+ To use, just configure git to use "git-annex diffdriver -- cmd params --"
+ as the external diff command, where cmd is the real external diff
+ command you want to use, and params are any extra parameters to pass
+ to it. Note the trailing "--", which is required.
+
+ For example, set `GIT_EXTERNAL_DIFF=git-annex diffdriver -- j-c-diff --`
+
+* `remotedaemon`
+
+ Detects when network remotes have received git pushes and fetches from them.
+
+* `xmppgit`
+
+ This command is used internally to perform git pulls over XMPP.
+
+# TESTING COMMANDS
+
* `test`
This runs git-annex's built-in test suite.
There are several parameters, provided by Haskell's tasty test framework.
+ Pass --help for details.
-* `xmppgit`
+* `testremote remote`
- This command is used internally to perform git pulls over XMPP.
+ This tests a remote by generating some random objects and sending them to
+ the remote, then redownloading them, removing them from the remote, etc.
+
+ It's safe to run in an existing repository (the repository contents are
+ not altered), although it may perform expensive data transfers.
+
+ To perform a smaller set of tests, use --fast.
+
+ The --size option can be used to tune the size of the generated objects.
+
+ Testing a single remote will use the remote's configuration,
+ automatically varying the chunk sizes, and with simple shared encryption
+ enabled and disabled.
+
+* `fuzztest`
+
+ Generates random changes to files in the current repository,
+ for use in testing the assistant. This is dangerous, so it will not
+ do anything unless --forced.
# OPTIONS
@@ -1053,6 +1207,19 @@ subdirectories).
Overrides the User-Agent to use when downloading files from the web.
+* `--notify-finish`
+
+ Caused a desktop notification to be displayed after each successful
+ file download and upload.
+
+ (Only supported on some platforms, e.g. Linux with dbus. A no-op when
+ not supported.)
+
+* `--notify-start`
+
+ Caused a desktop notification to be displayed when a file upload
+ or download has started, or when a file is dropped.
+
* `-c name=value`
Overrides git configuration settings. May be specified multiple times.
@@ -1225,7 +1392,9 @@ no equivilant to `--in`.
When a repository is in one of the standard predefined groups, like "backup"
and "client", setting its preferred content to "standard" will use a
-built-in preferred content expression developed for that group.
+built-in preferred content expression developed for that group. Or,
+setting its preferred content to "groupwanted" will make it use whatever
+groupwanted expression you set for the group.
# SCHEDULED JOBS
@@ -1236,7 +1405,7 @@ to e.g., fsck a repository on a removable drive when the drive gets
connected.
The scheduled jobs can be configured using `git annex vicfg` or
-`git annex schedule`.
+`git annex schedule`.
These actions are available: "fsck self", "fsck UUID" (where UUID
is the UUID of a remote to fsck). After the action comes the duration
@@ -1292,7 +1461,7 @@ Here are all the supported configuration settings.
This is a deprecated setting. You should instead use the
`git annex numcopies` command to configure how many copies of files
- are kept acros all repositories.
+ are kept across all repositories.
This config setting is only looked at when `git annex numcopies` has
never been configured.
@@ -1302,8 +1471,12 @@ Here are all the supported configuration settings.
* `annex.genmetadata`
Set this to `true` to make git-annex automatically generate some metadata
- when adding files to the repository. In particular, it stores
- year and month metadata, from the file's modification date.
+ when adding files to the repository.
+
+ In particular, it stores year and month metadata, from the file's
+ modification date.
+
+ When importfeed is used, it stores additional metadata from the feed.
* `annex.queuesize`
@@ -1339,9 +1512,24 @@ Here are all the supported configuration settings.
* `annex.alwayscommit`
By default, git-annex automatically commits data to the git-annex branch
- after each command is run. To disable these commits,
- set to `false`. Then data will only be committed when
- running `git annex merge` (or by automatic merges) or `git annex sync`.
+ after each command is run. If you have a series
+ of commands that you want to make a single commit, you can
+ run the commands with `-c annex.alwayscommit=false`. You can later
+ commit the data by running `git annex merge` (or by automatic merges)
+ or `git annex sync`.
+
+* `annex.hardlink`
+
+ Set this to `true` to make file contents be hard linked into the
+ repository when possible, instead of a more expensive copy.
+
+ Use with caution -- This can invalidate numcopies counting, since
+ with hard links, fewer copies of a file can exist. So, it is a good
+ idea to mark a repository using this setting as untrusted.
+
+ When a repository is set up using `git clone --shared`, git-annex init
+ will automatically set annex.hardlink and mark the repository as
+ untrusted.
* `annex.delayadd`
@@ -1355,7 +1543,7 @@ Here are all the supported configuration settings.
Controls what the assistant does about unused file contents
that are stored in the repository.
-
+
The default is `false`, which causes
all old and unused file contents to be retained, unless the assistant
is able to move them to some other repository (such as a backup repository).
@@ -1450,6 +1638,14 @@ Here are all the supported configuration settings.
The command will only be run once *all* running git-annex processes
are finished using the remote.
+* `remote.<name>.annex-shell`
+
+ Specify an alternative git-annex-shell executable on the remote
+ instead of looking for "git-annex-shell" on the PATH.
+
+ This is useful if the git-annex-shell program is outside the PATH
+ or has a non-standard name.
+
* `remote.<name>.annex-ignore`
If set to `true`, prevents git-annex
@@ -1517,7 +1713,7 @@ Here are all the supported configuration settings.
These options are passed after other applicable rsync options,
so can be used to override them. For example, to limit upload bandwidth
- to 10Kbye/s, set `--bwlimit 10`.
+ to 10Kbyte/s, set `--bwlimit 10`.
* `remote.<name>.annex-rsync-download-options`
@@ -1566,6 +1762,10 @@ Here are all the supported configuration settings.
Options to pass to quvi when using it to find the url to download for a
video.
+* `annex.aria-torrent-options`
+
+ Options to pass to aria2c when using it to download a torrent.
+
* `annex.http-headers`
HTTP headers to send when downloading from the web. Multiple lines of
@@ -1592,7 +1792,7 @@ Here are all the supported configuration settings.
In the command line, %file is replaced with the file that should be
erased.
- For example, to use the wipe command, set it to `wipe -f %file`
+ For example, to use the wipe command, set it to `wipe -f %file`.
* `remote.<name>.rsyncurl`
@@ -1606,6 +1806,12 @@ Here are all the supported configuration settings.
the location of the bup repository to use. Normally this is automatically
set up by `git annex initremote`, but you can change it if needed.
+* `remote.<name>.ddarrepo`
+
+ Used by ddar special remotes, this configures
+ the location of the ddar repository to use. Normally this is automatically
+ set up by `git annex initremote`, but you can change it if needed.
+
* `remote.<name>.directory`
Used by directory special remotes, this configures
@@ -1652,6 +1858,12 @@ Here are all the supported configuration settings.
Used by hook special remotes and external special remotes to record
the type of the remote.
+* `annex.tune.objecthash1`, `annex.tune.objecthashlower`, `annex.tune.branchhash1`
+
+ These can be passed to `git annex init` to tune the repository.
+ They cannot be safely changed in a running repository.
+ For details, see <http://git-annex.branchable.com/tuning/>.
+
# CONFIGURATION VIA .gitattributes
The key-value backend used when adding a new file to the annex can be
@@ -1681,7 +1893,7 @@ not honor the settings from .gitattributes.
Also note that when using views, only the toplevel .gitattributes file is
preserved in the view, so other settings in other files won't have any
-efffect.
+effect.
# FILES
@@ -1697,7 +1909,7 @@ used by git-annex.
`~/.config/git-annex/autostart` is a list of git repositories
to start the git-annex assistant in.
-`.git/hooks/pre-commit-annex` in your git repsitory will be run whenever
+`.git/hooks/pre-commit-annex` in your git repository will be run whenever
a commit is made, either by git commit, git-annex sync, or the git-annex
assistant.
@@ -1711,7 +1923,7 @@ should be included, in, for example, `/usr/share/doc/git-annex/`.
# AUTHOR
-Joey Hess <joey@kitenet.net>
+Joey Hess <id@joeyh.name>
<http://git-annex.branchable.com/>
diff --git a/doc/git-union-merge.mdwn b/doc/git-union-merge.mdwn
index 8e3c34f8f..d0ceb3a8f 100644
--- a/doc/git-union-merge.mdwn
+++ b/doc/git-union-merge.mdwn
@@ -31,7 +31,7 @@ File modes are not currently merged.
# AUTHOR
-Joey Hess <joey@kitenet.net>
+Joey Hess <id@joeyh.name>
<http://git-annex.branchable.com/>
diff --git a/doc/index.mdwn b/doc/index.mdwn
index 57bfe2408..fd166212e 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -39,7 +39,8 @@ files with git.
----
-git-annex is [[Free Software|license]]
+git-annex is [[Free Software|license]], written in [Haskell](http://www.haskell.org/).
+You can [[contribute]]!
git-annex's wiki is powered by [Ikiwiki](http://ikiwiki.info/) and
hosted by [Branchable](http://branchable.com/).
diff --git a/doc/install.mdwn b/doc/install.mdwn
index ecbf11a15..618f32dfa 100644
--- a/doc/install.mdwn
+++ b/doc/install.mdwn
@@ -2,30 +2,33 @@
[[!table format=dsv header=yes data="""
detailed instructions | quick install
-[[OSX]] | [download git-annex.app](http://downloads.kitenet.net/git-annex/OSX/current/)
-[[Android]] | [download git-annex.apk](http://downloads.kitenet.net/git-annex/android/current/) **beta**
-[[Linux|linux_standalone]] | [download prebuilt linux tarball](http://downloads.kitenet.net/git-annex/linux/current/)
+[[OSX]] | [download git-annex.app](https://downloads.kitenet.net/git-annex/OSX/current/)
+&nbsp;&nbsp;[[OSX/Homebrew]] | `brew install git-annex`
+[[Android]] | [download git-annex.apk](https://downloads.kitenet.net/git-annex/android/current/) **beta**
+[[Linux|linux_standalone]] | [download prebuilt linux tarball](https://downloads.kitenet.net/git-annex/linux/current/)
&nbsp;&nbsp;[[Debian]] | `apt-get install git-annex`
&nbsp;&nbsp;[[Ubuntu]] | `apt-get install git-annex`
&nbsp;&nbsp;[[Fedora]] | `yum install git-annex`
&nbsp;&nbsp;[[FreeBSD]] | `pkg_add -r hs-git-annex`
-&nbsp;&nbsp;[[ArchLinux]] | `yaourt -Sy git-annex`
+&nbsp;&nbsp;[[ArchLinux]] | `yaourt -Sy git-annex-bin`
&nbsp;&nbsp;[[NixOS]] | `nix-env -i git-annex`
&nbsp;&nbsp;[[Gentoo]] | `emerge git-annex`
&nbsp;&nbsp;[[ScientificLinux5]] |
&nbsp;&nbsp;[[openSUSE]] |
-[[Windows]] | [download installer](http://downloads.kitenet.net/git-annex/windows/current/) **alpha**
+&nbsp;&nbsp;[[Docker]] |
+[[Windows]] | [download installer](https://downloads.kitenet.net/git-annex/windows/current/) **beta**
"""]]
-## Using cabal
+All the download links above use https for security. For added security, see
+[[verifying_downloads]].
-As a haskell package, git-annex can be installed from source pretty easily
-[[using cabal|cabal]].
+## Building it yourself
-## Installation from scratch
-
-This is not recommended, but if you really want to, see [[fromscratch]].
+git-annex is [[Free Software|license]], written in [Haskell](http://www.haskell.org/).
+Experienced users should not find it too hard to build and install
+it [[from source|fromsource]].
## See also
+
[[autobuild overview|builds]]
diff --git a/doc/install/Android.mdwn b/doc/install/Android.mdwn
index 537f6d518..62ecfb638 100644
--- a/doc/install/Android.mdwn
+++ b/doc/install/Android.mdwn
@@ -10,6 +10,7 @@ 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)
@@ -18,6 +19,7 @@ open it to install.
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/)
@@ -27,11 +29,8 @@ of Bath CS department.
git-annex can be built from source for Android.
1. Run `standalone/android/buildchroot` as root (requires debootstrap).
- This builds a chroot with an `androidbuilder` user.
+ This builds a chroot with a `builder` user.
The rest of the build will run in this chroot as that user.
-2. Then run `standalone/android/install-haskell-packages`
- Note that this will break from time to time as new versions of packages
- are released, and the patches it applies have to be updated when
- this happens.
+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.
diff --git a/doc/install/Android/comment_10_4b565e73f02f0e84bdf7e686b0d7bf5f._comment b/doc/install/Android/comment_10_4b565e73f02f0e84bdf7e686b0d7bf5f._comment
new file mode 100644
index 000000000..6ab3dbd4a
--- /dev/null
+++ b/doc/install/Android/comment_10_4b565e73f02f0e84bdf7e686b0d7bf5f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://lj.rossia.org/users/imz/"
+ ip="79.165.57.121"
+ subject="re F-Droid"
+ date="2014-05-03T14:58:02Z"
+ content="""
+See also <http://git-annex.branchable.com/todo/custom_f-droid_repo/>.
+"""]]
diff --git a/doc/install/ArchLinux.mdwn b/doc/install/ArchLinux.mdwn
index 807387e0b..43b7d132e 100644
--- a/doc/install/ArchLinux.mdwn
+++ b/doc/install/ArchLinux.mdwn
@@ -1,20 +1,23 @@
-There is a non-official source package for git-annex in
-[AUR](https://aur.archlinux.org/packages.php?ID=44272).
+There are four non non-official packages for git-annex in the Arch Linux User Repository. Any of these may be installed manually per [AUR guidelines](https://wiki.archlinux.org/index.php/AUR_User_Guidelines#Installing_packages) or using a wrapper such as [`yaourt`](https://wiki.archlinux.org/index.php/yaourt) shown below.
-You can then build it yourself or use a wrapper for AUR
-such as yaourt:
+1. The simplest method is to use the [git-annex-bin](https://aur.archlinux.org/packages/git-annex-bin/) package based on the [prebuilt Linux tarballs](http://downloads.kitenet.net/git-annex/linux/current/). This package includes many of the binary shims from the pre-built package. Although common Linux system utilities have been stripped in favor of normal dependencies, the pre-configured Haskell libraries included out of the box make this an easy install. The disadvantage is the resulting installation is a bit on the heavy side at nearly 100M.
-<pre>
-$ yaourt -Sy git-annex
-</pre>
+ $ yaourt -Sy git-annex-bin
-----
+2. A more traditional source package is available at [git-annex](https://aur.archlinux.org/packages/git-annex/). This depends on a large number of Haskell packages available from a third party repository or through Cabal. You must either enable a 3rd party repo that has the dependencies or have a working Cabal installation. Unless you know what you are doing this is a bit problematic and some intervention may be required to get this option to work. The state of available dependency versions also varies so this may not work at all times.
-I'm told the AUR has some dependency problems currently.
-If it doesn't work, you can just use cabal:
+ $ yaourt -Sy git-annex
-<pre>
-pacman -S git rsync curl wget gnupg openssh cabal-install
-cabal update
-cabal install git-annex --bindir=$HOME/bin
-</pre>
+3. A development package is available at [git-annex-git](https://aur.archlinux.org/packages/git-annex-git/) that functions similarly to the source package but builds directly from the HEAD of the git repository rather that the last official release.
+
+ $ yaourt -Sy git-annex-git
+
+4. A Cabal sandbox build is also available
+
+ $ yaourt -Sy git-annex-cabal
+
+Finally you may choose to forgo the Arch Linux package system entirely and install git-annex directly through cabal.
+
+ $ pacman -S git rsync curl wget gnupg openssh cabal-install
+ $ cabal update
+ $ cabal install git-annex --bindir=$HOME/bin
diff --git a/doc/install/ArchLinux/comment_1_da5919c986d2ae187bc2f73de9633978._comment b/doc/install/ArchLinux/comment_1_da5919c986d2ae187bc2f73de9633978._comment
deleted file mode 100644
index d4db23292..000000000
--- a/doc/install/ArchLinux/comment_1_da5919c986d2ae187bc2f73de9633978._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlwYMdU0H7P7MMlD0v_BcczO-ZkYHY4zuY"
- nickname="Morris"
- subject="Arch Linux"
- date="2012-10-17T13:21:24Z"
- content="""
-For Arch Linux there should be the AUR package [git-annex-bin](https://aur.archlinux.org/packages.php?ID=63503) mentioned, because it's easier to install (no haskell dependencies to be installed) and is based on the prebuild linux binary tarball.
-"""]]
diff --git a/doc/install/ArchLinux/comment_5_cbc960cd78bf5b90e3bb6cb605d6d970._comment b/doc/install/ArchLinux/comment_5_cbc960cd78bf5b90e3bb6cb605d6d970._comment
deleted file mode 100644
index b3ed0846b..000000000
--- a/doc/install/ArchLinux/comment_5_cbc960cd78bf5b90e3bb6cb605d6d970._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://alerque.com/"
- nickname="Caleb"
- subject="Out of date"
- date="2013-12-28T22:04:24Z"
- content="""
-The AUR package you reference is woefully out of date. I have updated the standalone variant so it might be worth using that until the maintainer catches up.
-
- yaourt -Sy git-annex-standalone
-"""]]
diff --git a/doc/install/ArchLinux/comment_6_1d597d6a95f9c2df7dae6e98813e4865._comment b/doc/install/ArchLinux/comment_6_1d597d6a95f9c2df7dae6e98813e4865._comment
new file mode 100644
index 000000000..9f158347b
--- /dev/null
+++ b/doc/install/ArchLinux/comment_6_1d597d6a95f9c2df7dae6e98813e4865._comment
@@ -0,0 +1,36 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmqWbWVRH2k9spSMqKfIXBP1G3ekkj9Igg"
+ nickname="Rado"
+ subject="problem installing using cabal: language-javascript missing"
+ date="2014-03-28T22:38:04Z"
+ content="""
+Configuring gnuidn-0.2.1...
+cabal: The program c2hs is required but it could not be found.
+Failed to install gnuidn-0.2.1
+Configuring language-javascript-0.5.9...
+cabal: The program happy version >=1.18.5 is required but it could not be
+found.
+Failed to install language-javascript-0.5.9
+cabal: Error: some packages failed to install:
+git-annex-5.20140320 depends on language-javascript-0.5.9 which failed to
+install.
+gnuidn-0.2.1 failed during the configure step. The exception was:
+ExitFailure 1
+hjsmin-0.1.4.6 depends on language-javascript-0.5.9 which failed to install.
+language-javascript-0.5.9 failed during the configure step. The exception was:
+ExitFailure 1
+network-protocol-xmpp-0.4.6 depends on gnuidn-0.2.1 which failed to install.
+yesod-static-1.2.2.4 depends on language-javascript-0.5.9 which failed to
+install.
+[r-c@rc-laptop ~]$ cabal install language-javascript
+Resolving dependencies...
+Configuring language-javascript-0.5.9...
+cabal: The program happy version >=1.18.5 is required but it could not be
+found.
+Failed to install language-javascript-0.5.9
+cabal: Error: some packages failed to install:
+language-javascript-0.5.9 failed during the configure step. The exception was:
+ExitFailure 1
+
+Can you help how to solve?
+"""]]
diff --git a/doc/install/ArchLinux/comment_7_2d708977e2fad6b68803494576382df5._comment b/doc/install/ArchLinux/comment_7_2d708977e2fad6b68803494576382df5._comment
new file mode 100644
index 000000000..3d7826bc1
--- /dev/null
+++ b/doc/install/ArchLinux/comment_7_2d708977e2fad6b68803494576382df5._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://alerque.com/"
+ nickname="Caleb"
+ subject="dep problems"
+ date="2014-03-28T22:50:37Z"
+ content="""
+@rado The Haskel dependencies can be a nightmare to sort out for the un-initiated. You can side-step the whole issue by uninstalling the pre-built version that that has all the dependencies built in out of the box.
+
+Just grab the git-annex-bin package from the AUR and be done with it. (The -bin and -standalone packages recently merged so there is just -bin now).
+"""]]
diff --git a/doc/install/ArchLinux/comment_8_5b5f5e0b64e5bfb1ea12e8b251c6fb5f._comment b/doc/install/ArchLinux/comment_8_5b5f5e0b64e5bfb1ea12e8b251c6fb5f._comment
new file mode 100644
index 000000000..3e6d6b3a8
--- /dev/null
+++ b/doc/install/ArchLinux/comment_8_5b5f5e0b64e5bfb1ea12e8b251c6fb5f._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmqWbWVRH2k9spSMqKfIXBP1G3ekkj9Igg"
+ nickname="Rado"
+ subject="I solved it installing dependencies....but dont know hot to start it..."
+ date="2014-03-29T07:45:19Z"
+ content="""
+cabal install gsasl
+cabal install happy
+cabal install language-javascript
+cabal install alex
+cabal install c2hs
+
+after installing writing in terminal: git-annex, git-annex webapp does nothing...
+can you help how to start git-annex?
+"""]]
diff --git a/doc/install/Debian/comment_10_d5da996e106d2e4d8a822aa9bcc78596._comment b/doc/install/Debian/comment_10_d5da996e106d2e4d8a822aa9bcc78596._comment
deleted file mode 100644
index a03038dc8..000000000
--- a/doc/install/Debian/comment_10_d5da996e106d2e4d8a822aa9bcc78596._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 10"
- date="2013-05-30T19:42:05Z"
- content="""
-As of today, I have backported everything except for haskell-lens, haskell-dav, and haskell-network-protocol-xmpp. The last is the only real blocker (I can build a backport without webdav support..).
-
-The haskell-network-protocol-xmpp in stable is actually ok, except it needs to be rebuilt against the haskell-gnutls I uploaded today. This fixes a bad segfault bug. I don't know how to handle this situation in backports TBH, and so am stuck waiting for a newer version of haskell-network-protocol-xmpp to reach testing, to get around backport's requirements that the backport version be in testing.
-
-In other words, it'll happen in 2 to 5 weeks, probably..
-"""]]
diff --git a/doc/install/Debian/comment_11_84283676da247c401bc9b4bb12c2b453._comment b/doc/install/Debian/comment_11_84283676da247c401bc9b4bb12c2b453._comment
deleted file mode 100644
index 4507f36db..000000000
--- a/doc/install/Debian/comment_11_84283676da247c401bc9b4bb12c2b453._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://hands.com/~phil/"
- nickname="hands"
- subject="comment 11"
- date="2013-05-30T19:56:07Z"
- content="""
-Fair enough -- that's more positive than I was expecting TBH -- Thanks Joey :-)
-"""]]
diff --git a/doc/install/Debian/comment_11_b44ed53973ac26eedd3838df28f74a7e._comment b/doc/install/Debian/comment_11_b44ed53973ac26eedd3838df28f74a7e._comment
new file mode 100644
index 000000000..45925cdd9
--- /dev/null
+++ b/doc/install/Debian/comment_11_b44ed53973ac26eedd3838df28f74a7e._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="chris"
+ subject="Easy"
+ date="2014-12-23T08:18:31Z"
+ content="""
+Easy to install.
+"""]]
diff --git a/doc/install/Debian/comment_12_0aca83b055d0a9dd8589c50250a8bbea._comment b/doc/install/Debian/comment_12_0aca83b055d0a9dd8589c50250a8bbea._comment
deleted file mode 100644
index 419520c80..000000000
--- a/doc/install/Debian/comment_12_0aca83b055d0a9dd8589c50250a8bbea._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmF3Klaj8Q0Czfh1F3jaLF6issqeAhmru4"
- nickname="Keith"
- subject="Wheezy Support"
- date="2013-07-05T21:21:39Z"
- content="""
-Joey,
-
-What's the status on the wheezy backport. I'm itching to try the assistant.
-
-thanks,
-Keith
-"""]]
diff --git a/doc/install/Debian/comment_13_167a091764e5e99ec0f35a65e95a22de._comment b/doc/install/Debian/comment_13_167a091764e5e99ec0f35a65e95a22de._comment
deleted file mode 100644
index 9f05fea93..000000000
--- a/doc/install/Debian/comment_13_167a091764e5e99ec0f35a65e95a22de._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.254.222"
- subject="comment 13"
- date="2013-07-07T17:21:10Z"
- content="""
-I remain stuck where I was stuck previously on the backport. In the meantime, use [[Linux_standalone]] :(
-"""]]
diff --git a/doc/install/Debian/comment_16_89f67da4a4a6a626a7db9c6674b244b6._comment b/doc/install/Debian/comment_16_89f67da4a4a6a626a7db9c6674b244b6._comment
new file mode 100644
index 000000000..563be1c6c
--- /dev/null
+++ b/doc/install/Debian/comment_16_89f67da4a4a6a626a7db9c6674b244b6._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm9ocq1Kb0WL-cz-LPpvd2Xm-q8tIQvqXA"
+ nickname="Dominik"
+ subject="debian squeeze"
+ date="2014-05-16T22:58:52Z"
+ content="""
+I'm tring to set up a bare repo on a debian squeeze server and sync it to windows client. Unfortunately the direct mode does not seem to be available for the git-annex version (3.20120629~bpo60+2
+) in the squeeze-backports
+
+Would you be able to update the version in that repository? Thank you for your hard work! Git-annex is awesome
+"""]]
diff --git a/doc/install/Debian/comment_17_ef7f3e88d61833e51f0302e938343818._comment b/doc/install/Debian/comment_17_ef7f3e88d61833e51f0302e938343818._comment
new file mode 100644
index 000000000..cd42becc2
--- /dev/null
+++ b/doc/install/Debian/comment_17_ef7f3e88d61833e51f0302e938343818._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="216.145.95.162"
+ subject="comment 17"
+ date="2014-05-17T17:03:31Z"
+ content="""
+Debian squeeze has an extremely ancient ghc compiler, and it would be a mammoth undertaking to build current git-annex using that.
+
+Use the linux standalone build instead.
+"""]]
diff --git a/doc/install/Debian/comment_5_38e6399083e10a6a274f35bddc15d4ac._comment b/doc/install/Debian/comment_5_38e6399083e10a6a274f35bddc15d4ac._comment
deleted file mode 100644
index fae6c4df8..000000000
--- a/doc/install/Debian/comment_5_38e6399083e10a6a274f35bddc15d4ac._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawk3eiQwrpDGJ3MJb9NWB84m4tzQ6XjVZnY"
- nickname="Allard"
- subject="wheezy support"
- date="2012-11-23T20:47:58Z"
- content="""
-Hey Joey,
-
-As a backer, I'd like to see a backport of git annex assistant to wheezy.
-
-It is currently impossible to get this assistant in wheezy without compiling it with cabal.
-
-It would be nice to see it in backports or something :)
-
-Best,
-
-Allard
-"""]]
diff --git a/doc/install/Debian/comment_6_2e7bbdbaabbfb9d89de22e913066e822._comment b/doc/install/Debian/comment_6_2e7bbdbaabbfb9d89de22e913066e822._comment
deleted file mode 100644
index c4ce6b32a..000000000
--- a/doc/install/Debian/comment_6_2e7bbdbaabbfb9d89de22e913066e822._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://svend.ciffer.net/"
- ip="2001:4978:f:52e::2"
- subject="comment 6"
- date="2012-11-23T21:38:29Z"
- content="""
-The git-annex packages in unstable install on testing (wheezy).
-"""]]
diff --git a/doc/install/Debian/comment_9_97eaed998ffd1ed79585075ed5cff06e._comment b/doc/install/Debian/comment_9_97eaed998ffd1ed79585075ed5cff06e._comment
deleted file mode 100644
index d58f294b6..000000000
--- a/doc/install/Debian/comment_9_97eaed998ffd1ed79585075ed5cff06e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://hands.com/~phil/"
- nickname="hands"
- subject="any chance of a wheezy-backports upload?"
- date="2013-05-30T18:43:52Z"
- content="""
-I note that the instructions at the top of the page suggest that one can install the unstable version into wheezy, but as mentioned by [mey.vn](#comment-f9811cbd46471d4159d09d814ac9cf15) this is not the case with 4.20130521 (on amd64 at least) because of the libc6 version dependency. That being the case, it would be really nice to see this in wheezy-backports as well, or would that require backporting a huge pile of haskell as well? (in which case I can see why you're not keen).
-"""]]
diff --git a/doc/install/Docker.mdwn b/doc/install/Docker.mdwn
new file mode 100644
index 000000000..d79f95105
--- /dev/null
+++ b/doc/install/Docker.mdwn
@@ -0,0 +1,42 @@
+There is not yet a pre-built Docker image for git-annex. However, it's
+easy to add it to an image.
+
+For example:
+
+ docker run -i -t joeyh/debian-unstable apt-get install git-annex
+
+# containers for autobuilders
+
+The git-annex Linux autobuilds are built using Docker containers.
+Most of these are not published, but you can build your own. (See below.)
+
+Since the Android autobuilder container can take quite a lot of work to get
+built, it is published. `docker pull joeyh/git-annex-android-builder`
+
+So's the armel autobuilder container.
+`docker pull joeyh/git-annex-armel-builder`, and its companion container
+`docker pull joeyh/git-annex-armel-companion`
+
+# building autobuilder containers using Propellor
+
+The Docker containers are built using
+[Propellor](http://joeyh.name/code/propellor). To generate your own image,
+Just install Propellor and add this to its `config.hs`:
+
+[[!format haskell """
+import qualified Propellor.Property.SiteSpecific.GitAnnexBuilder as GitAnnexBuilder
+
+ , host "your.machine.net"
+ & Docker.configured
+ & Docker.docked (GitAnnexBuilder.standardAutoBuilderContainer dockerImage "amd64" 15 "2h")
+"""]]
+
+This will autobuild every hour at :15, and the autobuilt image will be
+left inside the container in /home/builder/gitbuilder/out/
+
+# container for backport building
+
+For building the Debian stable backport, the container
+`joeyh/git-annex-wheezy-backport` is used. This is nothing special, it
+just has the right versions of build dependencies installed from Debian
+stable and backports.
diff --git a/doc/install/Fedora.mdwn b/doc/install/Fedora.mdwn
index c1769a10d..9c31165f8 100644
--- a/doc/install/Fedora.mdwn
+++ b/doc/install/Fedora.mdwn
@@ -3,6 +3,8 @@ git-annex is available in recent versions of Fedora.
Should be as simple as: `yum install git-annex`
+Note: Fedora's build does not currently include the git-annex webapp.
+
----
To install the latest version of git-annex on Fedora 18 and later, you can use `cabal`:
diff --git a/doc/install/Fedora/comment_7_4832d271dcc63a6cd1c40fe38ad5e367._comment b/doc/install/Fedora/comment_7_4832d271dcc63a6cd1c40fe38ad5e367._comment
new file mode 100644
index 000000000..ec9308b70
--- /dev/null
+++ b/doc/install/Fedora/comment_7_4832d271dcc63a6cd1c40fe38ad5e367._comment
@@ -0,0 +1,24 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkJafmCf-sg9_OM0pynFYM3AO4WCgJiaMI"
+ nickname="Michele"
+ subject="building fails on fedora 19"
+ date="2014-05-26T15:31:10Z"
+ content="""
+latest version (git-annex-5.20140517) during cabal install git-annex I encounter this:
+
+[[!format sh \"\"\"
+[266 of 457] Compiling Remote.WebDAV ( Remote/WebDAV.hs, dist/build/git-annex/git-annex-tmp/Remote/WebDAV.o )
+
+Remote/WebDAV.hs:380:32:
+ Constructor `StatusCodeException' should have 3 arguments, but has been given 2
+ In the pattern: StatusCodeException s _
+ In an equation for `matchStatusCodeException':
+ matchStatusCodeException want (StatusCodeException s _)
+ | s == want = Just ()
+ | otherwise = Nothing
+Failed to install git-annex-5.20140517
+cabal: Error: some packages failed to install:
+git-annex-5.20140517 failed during the building phase. The exception was:
+ExitFailure 1
+\"\"\"]]
+"""]]
diff --git a/doc/install/Fedora/comment_8_80e167cde1a6511683a8f6e8029c0da6._comment b/doc/install/Fedora/comment_8_80e167cde1a6511683a8f6e8029c0da6._comment
new file mode 100644
index 000000000..e649ff759
--- /dev/null
+++ b/doc/install/Fedora/comment_8_80e167cde1a6511683a8f6e8029c0da6._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 8"
+ date="2014-05-27T16:08:14Z"
+ content="""
+@Michele, you seem to have an old version of the haskell DAV library installed. The simple solutions is probably `cabal install DAV` to upgrade to the new one.
+
+(The complex solution is to edit the file and copy the line 2 lines above the error, or fix the ifdefs somehow to work with whatever combination of versions of DAV and http-client or http-conduit you have installed.)
+"""]]
diff --git a/doc/install/Linux_standalone.mdwn b/doc/install/Linux_standalone.mdwn
index 4e654febc..fbb3b97ab 100644
--- a/doc/install/Linux_standalone.mdwn
+++ b/doc/install/Linux_standalone.mdwn
@@ -1,13 +1,13 @@
If your Linux distribution does not have git-annex packaged up for you,
-you can either build it [[fromscratch]], or you can use a handy
+you can either build it [[fromsource]], or you can use a handy
prebuilt tarball of the most recent release.
This tarball should work on most Linux systems. It has basically no
dependencies and is self-contained.
-* i386: [download tarball](https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-i386.tar.gz)
-* amd64: [download tarball](https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz)
-* armel: [download tarball](https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-armel.tar.gz)
+* x86-32: [download tarball](https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-i386.tar.gz)
+* x86-64: [download tarball](https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz)
+* arm: [download tarball](https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-armel.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
@@ -18,7 +18,7 @@ Alternatively, you can unpack the tarball, and add the directory to your
PATH. This lets you use `git annex`, without overriding your system's
own versions of git, etc.
-The armel version can be installed on NAS devices and other embedded ARM
+The arm version can be installed on NAS devices and other embedded ARM
linux systems.
* [[tips/Synology_NAS_and_git_annex]]
@@ -29,6 +29,6 @@ linux systems.
A daily build is also available, thanks to Mesar Hameed and the University
of Bath CS department.
-* i386: [download tarball](https://downloads.kitenet.net/git-annex/autobuild/i386/git-annex-standalone-i386.tar.gz) ([build logs](https://downloads.kitenet.net/git-annex/autobuild/i386/))
-* amd64: [download tarball](https://downloads.kitenet.net/git-annex/autobuild/amd64/git-annex-standalone-amd64.tar.gz) ([build logs](https://downloads.kitenet.net/git-annex/autobuild/amd64/))
-* armel: [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/))
+* x86-32: [download tarball](https://downloads.kitenet.net/git-annex/autobuild/i386/git-annex-standalone-i386.tar.gz) ([build logs](https://downloads.kitenet.net/git-annex/autobuild/i386/))
+* x86-64: [download tarball](https://downloads.kitenet.net/git-annex/autobuild/amd64/git-annex-standalone-amd64.tar.gz) ([build logs](https://downloads.kitenet.net/git-annex/autobuild/amd64/))
+* 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/))
diff --git a/doc/install/NixOS.mdwn b/doc/install/NixOS.mdwn
index 115f9fa53..e9730b285 100644
--- a/doc/install/NixOS.mdwn
+++ b/doc/install/NixOS.mdwn
@@ -2,5 +2,9 @@ Users of the [Nix package manager](http://nixos.org/) can install it by running:
nix-env -i git-annex
+When including it in a NixOS configuration.nix file, the name of the reference to the package is
+
+ haskellPackages.gitAnnex
+
The build status of the package within Nix can be seen on the [Hydra Build
Farm](http://hydra.nixos.org/job/nixpkgs/trunk/gitAndTools.gitAnnex).
diff --git a/doc/install/NixOS/comment_1_4e487ddd2654a8a992c1538b9c3bf003._comment b/doc/install/NixOS/comment_1_4e487ddd2654a8a992c1538b9c3bf003._comment
new file mode 100644
index 000000000..8424b632d
--- /dev/null
+++ b/doc/install/NixOS/comment_1_4e487ddd2654a8a992c1538b9c3bf003._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn3p4i4lk_zMilvjnJ9sS6g2nerpgz0Fjc"
+ nickname="Matthias"
+ subject="build failure"
+ date="2014-06-09T15:13:18Z"
+ content="""
+Building git-annex with Nix 1.7 fails for me. Error:
+
+ trying https://git.samba.org/?p=rsync.git;a=commitdiff_plain;h=0dedfbce2c1b851684ba658861fe9d620636c56a
+ % Total % Received % Xferd Average Speed Time Time Time Current
+ Dload Upload Total Spent Left Speed
+ 100 2277 0 2277 0 0 2805 0 --:--:-- --:--:-- --:--:-- 5735
+ output path `/nix/store/w6l1c3cdr52arymv3zgwly7razwnsdll-CVE-2014-2855.patch' should have sha256 hash `1jpwwdf07naqxc8fv1lspc95jgk50j5j3wvf037bjay2qzpwjmvf', instead has `0j1pqmwsqc5mh815x28izi4baki2y2r5q8k7ma1sgs4xsgjc4rk8'
+ building path(s) `/nix/store/85v7c8b3ygpfj8m8bk98kcygf29qcbq7-cacert-20131205.pem.bz2'
+ cannot build derivation `/nix/store/im9p1y2xbh08yrwp5yggj1ii884wv3ql-rsync-3.1.0.drv': 1 dependencies couldn't be built
+ killing process 2599
+ cannot build derivation `/nix/store/sl48cnm06m7mcqxjfj2b0yv8am3blqr3-git-annex-5.20140517.drv': 1 dependencies couldn't be built
+ error: build of `/nix/store/sl48cnm06m7mcqxjfj2b0yv8am3blqr3-git-annex-5.20140517.drv' failed
+
+Someone has an idea what Nix expects me to do in this situation?
+"""]]
diff --git a/doc/install/OSX.mdwn b/doc/install/OSX.mdwn
index 1719c1bfc..7d272be58 100644
--- a/doc/install/OSX.mdwn
+++ b/doc/install/OSX.mdwn
@@ -3,7 +3,7 @@
[[!img /assistant/osx-app.png align=right link=/assistant]]
For easy installation, use the prebuilt app bundle.
-* 10.9 Mavericks: [git-annex.dmg](https://downloads.kitenet.net/git-annex/OSX/current/10.9_Mavericks/git-annex.dmg)
+* 10.10 Yosemite / 10.9 Mavericks: [git-annex.dmg](https://downloads.kitenet.net/git-annex/OSX/current/10.10_Yosemite/git-annex.dmg)
* 10.8.2 Mountain Lion: [git-annex.dmg.bz2](https://downloads.kitenet.net/git-annex/OSX/current/10.8.2_Mountain_Lion/git-annex.dmg.bz2) **warning: not being updated any longer**
* 10.7.5 Lion: [git-annex.dmg](https://downloads.kitenet.net/git-annex/OSX/current/10.7.5_Lion/git-annex.dmg) **warning: not being updated any longer**
@@ -20,46 +20,21 @@ several more. Handy if you don't otherwise have git installed.
## autobuilds
-[[Joey]] autobuilds the app for Mavericks.
+[[Joey]] autobuilds the app for 10.10 Yosemite
+(also reported to work on 10.9 Mavericks).
+Thanks to Kevin McKenzie for hosting the autobuilder.
-* [autobuild of git-annex.dmg](https://downloads.kitenet.net/git-annex/autobuild/x86_64-apple-mavericks/git-annex.dmg) ([build logs](https://downloads.kitenet.net/git-annex/autobuild/x86_64-apple-mavericks/))
+* [autobuild of git-annex.dmg](https://downloads.kitenet.net/git-annex/autobuild/x86_64-apple-yosemite/git-annex.dmg) ([build logs](https://downloads.kitenet.net/git-annex/autobuild/x86_64-apple-yosemite/))
-## using Brew
+## using Homebrew
-<pre>
-brew update
-brew install haskell-platform git ossp-uuid md5sha1sum coreutils gnutls libidn gsasl pkg-config libxml2
-brew link libxml2 --force
-cabal update
-mkdir $HOME/bin
-PATH=$HOME/bin:$PATH
-PATH=$HOME/.cabal/bin:$PATH
-cabal install c2hs --bindir=$HOME/bin
-cabal install gnuidn
-cabal install git-annex --bindir=$HOME/bin
-</pre>
+git-annex is now [[available in Homebrew|Homebrew]]!
## using MacPorts
-Install the Haskell Platform from [[http://hackage.haskell.org/platform/mac.html]].
-The version provided by Macports is too old to work with current versions of git-annex.
-Then execute
+git-annex is not available in MacPorts, but can be built from source using
+MacPorts tools. See [[MacPorts]].
-<pre>
-sudo port install git-core ossp-uuid md5sha1sum coreutils gnutls libxml2 libgsasl pkgconfig
-sudo cabal update
-PATH=$HOME/bin:$PATH
-cabal install c2hs git-annex --bindir=$HOME/bin
-</pre>
+## building it yourself
-## PATH setup
-
-Do not forget to add to your PATH variable your ~/bin folder. In your .bashrc, for example:
-<pre>
-PATH=$HOME/bin:$PATH
-</pre>
-
-See also:
-
-* [[forum/OSX__39__s_haskell-platform_statically_links_things]]
-* [[forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set]]
+See [[porting]].
diff --git a/doc/install/OSX/Homebrew.mdwn b/doc/install/OSX/Homebrew.mdwn
new file mode 100644
index 000000000..bd9a840b0
--- /dev/null
+++ b/doc/install/OSX/Homebrew.mdwn
@@ -0,0 +1,21 @@
+[Homebrew](http://brew.sh/) has [a formula](https://github.com/Homebrew/homebrew/commits/master/Library/Formula/git-annex.rb) for git-annex.
+
+Homebrew users can simply run `brew install git-annex` to install git-annex.
+
+## buiding git-annex from sources
+
+This is the old recipe for building git-annex from source, using
+packages from homebrew. Useful if you want a newer version than the version
+in homebrew.
+
+<pre>
+brew install haskell-platform git ossp-uuid md5sha1sum coreutils gnutls libidn gsasl pkg-config libxml2
+brew link libxml2 --force
+cabal update
+mkdir $HOME/bin
+PATH=$HOME/bin:$PATH
+PATH=$HOME/.cabal/bin:$PATH
+cabal install c2hs --bindir=$HOME/bin
+cabal install gnuidn
+cabal install git-annex --bindir=$HOME/bin
+</pre>
diff --git a/doc/install/OSX/MacPorts.mdwn b/doc/install/OSX/MacPorts.mdwn
new file mode 100644
index 000000000..379e42d12
--- /dev/null
+++ b/doc/install/OSX/MacPorts.mdwn
@@ -0,0 +1,27 @@
+This is not a recommended way to install git-annex. Use [[HomeBrew]] or the
+prebuilt app bundle instead.
+
+But if you really want to use MacPorts:
+
+Install the Haskell Platform from [[http://hackage.haskell.org/platform/mac.html]].
+The version provided by Macports is too old to work with current versions of git-annex.
+Then execute
+
+<pre>
+sudo port install git-core ossp-uuid md5sha1sum coreutils gnutls libxml2 libgsasl pkgconfig
+sudo cabal update
+PATH=$HOME/bin:$PATH
+cabal install c2hs git-annex --bindir=$HOME/bin
+</pre>
+
+## PATH setup
+
+Do not forget to add to your PATH variable your ~/bin folder. In your .bashrc, for example:
+<pre>
+PATH=$HOME/bin:$PATH
+</pre>
+
+See also:
+
+* [[forum/OSX__39__s_haskell-platform_statically_links_things]]
+* [[forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set]]
diff --git a/doc/install/OSX/comment_21_987f1302f56107c926b6daf83e124654._comment b/doc/install/OSX/MacPorts/comment_21_987f1302f56107c926b6daf83e124654._comment
index e7d42b534..e7d42b534 100644
--- a/doc/install/OSX/comment_21_987f1302f56107c926b6daf83e124654._comment
+++ b/doc/install/OSX/MacPorts/comment_21_987f1302f56107c926b6daf83e124654._comment
diff --git a/doc/install/OSX/comment_3_47a77a03040fe628109bd54f82f9ad7a._comment b/doc/install/OSX/MacPorts/comment_3_47a77a03040fe628109bd54f82f9ad7a._comment
index 69f3f0fee..69f3f0fee 100644
--- a/doc/install/OSX/comment_3_47a77a03040fe628109bd54f82f9ad7a._comment
+++ b/doc/install/OSX/MacPorts/comment_3_47a77a03040fe628109bd54f82f9ad7a._comment
diff --git a/doc/install/OSX/comment_4_bbe99673033e4c48c8bb3db24ee419f9._comment b/doc/install/OSX/comment_4_bbe99673033e4c48c8bb3db24ee419f9._comment
deleted file mode 100644
index f3838e890..000000000
--- a/doc/install/OSX/comment_4_bbe99673033e4c48c8bb3db24ee419f9._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 4"
- date="2012-12-10T17:00:43Z"
- content="""
-For those that care, I've updated my autobuilder to the latest version of haskell-platform 2012.4.0.0 and it appears to be building correctly.
-"""]]
diff --git a/doc/install/OSX/comment_8_b94193a0583605920effa7179a6164d9._comment b/doc/install/OSX/comment_8_b94193a0583605920effa7179a6164d9._comment
new file mode 100644
index 000000000..902d87dd7
--- /dev/null
+++ b/doc/install/OSX/comment_8_b94193a0583605920effa7179a6164d9._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 8"
+ date="2014-08-15T19:26:07Z"
+ content="""
+@David, the bundle contains the man page since a while.
+
+@Michael, the best way to get a git-annex that does not use those bundled programs is probably to instead install it using homebrew.
+"""]]
diff --git a/doc/install/OSX/comment_9_f11f726d1fee3c4c91f3c984e792037d._comment b/doc/install/OSX/comment_9_f11f726d1fee3c4c91f3c984e792037d._comment
new file mode 100644
index 000000000..afc7268e1
--- /dev/null
+++ b/doc/install/OSX/comment_9_f11f726d1fee3c4c91f3c984e792037d._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn3p4i4lk_zMilvjnJ9sS6g2nerpgz0Fjc"
+ nickname="Matthias"
+ subject="Why different versions?"
+ date="2014-09-23T10:59:32Z"
+ content="""
+Why are there different versions for 10.7, 10.8, 10.9 anyway? Is it not possible to produce an executable compatible with all these? I mean, it's the same architecture and executable format, not? I guess there has to be a reason, explanations are welcome :-)
+"""]]
diff --git a/doc/install/OSX/porting.mdwn b/doc/install/OSX/porting.mdwn
new file mode 100644
index 000000000..7aeb1c12c
--- /dev/null
+++ b/doc/install/OSX/porting.mdwn
@@ -0,0 +1,7 @@
+If you cannot get a OSX build of git-annex suitable for your computer,
+from eg [[HomeBrew]] or the regular [[OSX]] prebuilt app, you
+can try building git-annex from source on OSX, using haskell's cabal package
+manager.
+
+For general instructions on building git-annex from source see
+[[install/fromsource]]
diff --git a/doc/install/OSX/comment_10_cd2120552ef894a37933b328136fa4cc._comment b/doc/install/OSX/porting/comment_10_cd2120552ef894a37933b328136fa4cc._comment
index c2b43b2dd..c2b43b2dd 100644
--- a/doc/install/OSX/comment_10_cd2120552ef894a37933b328136fa4cc._comment
+++ b/doc/install/OSX/porting/comment_10_cd2120552ef894a37933b328136fa4cc._comment
diff --git a/doc/install/OSX/comment_11_740fa80e2e54e6fb570f820ff1f56440._comment b/doc/install/OSX/porting/comment_11_740fa80e2e54e6fb570f820ff1f56440._comment
index d0c74d609..d0c74d609 100644
--- a/doc/install/OSX/comment_11_740fa80e2e54e6fb570f820ff1f56440._comment
+++ b/doc/install/OSX/porting/comment_11_740fa80e2e54e6fb570f820ff1f56440._comment
diff --git a/doc/install/OSX/comment_12_a84028080578a8b60115b6c4ef823627._comment b/doc/install/OSX/porting/comment_12_a84028080578a8b60115b6c4ef823627._comment
index cc57cbdfb..cc57cbdfb 100644
--- a/doc/install/OSX/comment_12_a84028080578a8b60115b6c4ef823627._comment
+++ b/doc/install/OSX/porting/comment_12_a84028080578a8b60115b6c4ef823627._comment
diff --git a/doc/install/OSX/comment_13_d6f1db401858ffea23c123db49f5b296._comment b/doc/install/OSX/porting/comment_13_d6f1db401858ffea23c123db49f5b296._comment
index 875db34f1..875db34f1 100644
--- a/doc/install/OSX/comment_13_d6f1db401858ffea23c123db49f5b296._comment
+++ b/doc/install/OSX/porting/comment_13_d6f1db401858ffea23c123db49f5b296._comment
diff --git a/doc/install/OSX/comment_14_035f856923276b0edad879e196e94097._comment b/doc/install/OSX/porting/comment_14_035f856923276b0edad879e196e94097._comment
index 1072dbc39..1072dbc39 100644
--- a/doc/install/OSX/comment_14_035f856923276b0edad879e196e94097._comment
+++ b/doc/install/OSX/porting/comment_14_035f856923276b0edad879e196e94097._comment
diff --git a/doc/install/OSX/comment_15_336e0acb00e84943715e69917643a69e._comment b/doc/install/OSX/porting/comment_15_336e0acb00e84943715e69917643a69e._comment
index 05f5654bc..05f5654bc 100644
--- a/doc/install/OSX/comment_15_336e0acb00e84943715e69917643a69e._comment
+++ b/doc/install/OSX/porting/comment_15_336e0acb00e84943715e69917643a69e._comment
diff --git a/doc/install/OSX/comment_16_1befafa862b7d07b1f6e57c0182497cf._comment b/doc/install/OSX/porting/comment_16_1befafa862b7d07b1f6e57c0182497cf._comment
index 0098e745d..0098e745d 100644
--- a/doc/install/OSX/comment_16_1befafa862b7d07b1f6e57c0182497cf._comment
+++ b/doc/install/OSX/porting/comment_16_1befafa862b7d07b1f6e57c0182497cf._comment
diff --git a/doc/install/OSX/comment_17_19c08b2c6c2c5cd88bf96d2bcbbd9055._comment b/doc/install/OSX/porting/comment_17_19c08b2c6c2c5cd88bf96d2bcbbd9055._comment
index 8955ab20b..8955ab20b 100644
--- a/doc/install/OSX/comment_17_19c08b2c6c2c5cd88bf96d2bcbbd9055._comment
+++ b/doc/install/OSX/porting/comment_17_19c08b2c6c2c5cd88bf96d2bcbbd9055._comment
diff --git a/doc/install/OSX/comment_18_537fad5d8854e765499d47602d1ab398._comment b/doc/install/OSX/porting/comment_18_537fad5d8854e765499d47602d1ab398._comment
index 9d8d8f755..9d8d8f755 100644
--- a/doc/install/OSX/comment_18_537fad5d8854e765499d47602d1ab398._comment
+++ b/doc/install/OSX/porting/comment_18_537fad5d8854e765499d47602d1ab398._comment
diff --git a/doc/install/OSX/comment_19_18d4377f4ded5604d395d73783ba82c9._comment b/doc/install/OSX/porting/comment_19_18d4377f4ded5604d395d73783ba82c9._comment
index f244951e8..f244951e8 100644
--- a/doc/install/OSX/comment_19_18d4377f4ded5604d395d73783ba82c9._comment
+++ b/doc/install/OSX/porting/comment_19_18d4377f4ded5604d395d73783ba82c9._comment
diff --git a/doc/install/OSX/comment_22_6b5f44a98f9d37a1c6ecfe19a60fe6c5._comment b/doc/install/OSX/porting/comment_22_6b5f44a98f9d37a1c6ecfe19a60fe6c5._comment
index 7dfa48132..7dfa48132 100644
--- a/doc/install/OSX/comment_22_6b5f44a98f9d37a1c6ecfe19a60fe6c5._comment
+++ b/doc/install/OSX/porting/comment_22_6b5f44a98f9d37a1c6ecfe19a60fe6c5._comment
diff --git a/doc/install/OSX/comment_23_3d82a270dd4b0159f4aab5675166e1e3._comment b/doc/install/OSX/porting/comment_23_3d82a270dd4b0159f4aab5675166e1e3._comment
index 08792aa21..08792aa21 100644
--- a/doc/install/OSX/comment_23_3d82a270dd4b0159f4aab5675166e1e3._comment
+++ b/doc/install/OSX/porting/comment_23_3d82a270dd4b0159f4aab5675166e1e3._comment
diff --git a/doc/install/OSX/comment_24_b9d3563a2cc3d769f27876e028dc344d._comment b/doc/install/OSX/porting/comment_24_b9d3563a2cc3d769f27876e028dc344d._comment
index 4b4bf3eb7..4b4bf3eb7 100644
--- a/doc/install/OSX/comment_24_b9d3563a2cc3d769f27876e028dc344d._comment
+++ b/doc/install/OSX/porting/comment_24_b9d3563a2cc3d769f27876e028dc344d._comment
diff --git a/doc/install/OSX/comment_27_2a60108a440231ba83f5a54b6bcc5488._comment b/doc/install/OSX/porting/comment_27_2a60108a440231ba83f5a54b6bcc5488._comment
index 9a5b9c9c1..9a5b9c9c1 100644
--- a/doc/install/OSX/comment_27_2a60108a440231ba83f5a54b6bcc5488._comment
+++ b/doc/install/OSX/porting/comment_27_2a60108a440231ba83f5a54b6bcc5488._comment
diff --git a/doc/install/OSX/comment_27_d453510b9bb62072a4c663206c12c8a4._comment b/doc/install/OSX/porting/comment_27_d453510b9bb62072a4c663206c12c8a4._comment
index cc9b44c1a..cc9b44c1a 100644
--- a/doc/install/OSX/comment_27_d453510b9bb62072a4c663206c12c8a4._comment
+++ b/doc/install/OSX/porting/comment_27_d453510b9bb62072a4c663206c12c8a4._comment
diff --git a/doc/install/OSX/comment_28_0970bfd63137ea48701dff6aea1b4bcb._comment b/doc/install/OSX/porting/comment_28_0970bfd63137ea48701dff6aea1b4bcb._comment
index a672a70c4..a672a70c4 100644
--- a/doc/install/OSX/comment_28_0970bfd63137ea48701dff6aea1b4bcb._comment
+++ b/doc/install/OSX/porting/comment_28_0970bfd63137ea48701dff6aea1b4bcb._comment
diff --git a/doc/install/OSX/comment_29_8622ed56c6a8034c20fb311418d94003._comment b/doc/install/OSX/porting/comment_29_8622ed56c6a8034c20fb311418d94003._comment
index c0552d9d9..c0552d9d9 100644
--- a/doc/install/OSX/comment_29_8622ed56c6a8034c20fb311418d94003._comment
+++ b/doc/install/OSX/porting/comment_29_8622ed56c6a8034c20fb311418d94003._comment
diff --git a/doc/install/OSX/comment_30_ce58633ef5b2f8f4caa7e626358f33be._comment b/doc/install/OSX/porting/comment_30_ce58633ef5b2f8f4caa7e626358f33be._comment
index 9fcf7aa03..9fcf7aa03 100644
--- a/doc/install/OSX/comment_30_ce58633ef5b2f8f4caa7e626358f33be._comment
+++ b/doc/install/OSX/porting/comment_30_ce58633ef5b2f8f4caa7e626358f33be._comment
diff --git a/doc/install/OSX/comment_31_09084a7b3cf06bfa3add0f4991476ffe._comment b/doc/install/OSX/porting/comment_31_09084a7b3cf06bfa3add0f4991476ffe._comment
index df9134194..df9134194 100644
--- a/doc/install/OSX/comment_31_09084a7b3cf06bfa3add0f4991476ffe._comment
+++ b/doc/install/OSX/porting/comment_31_09084a7b3cf06bfa3add0f4991476ffe._comment
diff --git a/doc/install/OSX/comment_32_a46d8e3e7795b9afb1e1c2be943d12af._comment b/doc/install/OSX/porting/comment_32_a46d8e3e7795b9afb1e1c2be943d12af._comment
index 290da58f8..290da58f8 100644
--- a/doc/install/OSX/comment_32_a46d8e3e7795b9afb1e1c2be943d12af._comment
+++ b/doc/install/OSX/porting/comment_32_a46d8e3e7795b9afb1e1c2be943d12af._comment
diff --git a/doc/install/OSX/comment_33_203a36322b3c453c05c8906c64e62e06._comment b/doc/install/OSX/porting/comment_33_203a36322b3c453c05c8906c64e62e06._comment
index 7e2853a4e..7e2853a4e 100644
--- a/doc/install/OSX/comment_33_203a36322b3c453c05c8906c64e62e06._comment
+++ b/doc/install/OSX/porting/comment_33_203a36322b3c453c05c8906c64e62e06._comment
diff --git a/doc/install/OSX/comment_34_874ff01f27911baf6ef0f559d5d5f5a0._comment b/doc/install/OSX/porting/comment_34_874ff01f27911baf6ef0f559d5d5f5a0._comment
index 45b62b770..45b62b770 100644
--- a/doc/install/OSX/comment_34_874ff01f27911baf6ef0f559d5d5f5a0._comment
+++ b/doc/install/OSX/porting/comment_34_874ff01f27911baf6ef0f559d5d5f5a0._comment
diff --git a/doc/install/OSX/comment_8_38d9c2eea1090674de2361274eab5b0e._comment b/doc/install/OSX/porting/comment_8_38d9c2eea1090674de2361274eab5b0e._comment
index bdc1698b7..bdc1698b7 100644
--- a/doc/install/OSX/comment_8_38d9c2eea1090674de2361274eab5b0e._comment
+++ b/doc/install/OSX/porting/comment_8_38d9c2eea1090674de2361274eab5b0e._comment
diff --git a/doc/install/OSX/comment_9_35bf3812db6f3ef25da9b3bc84f147c5._comment b/doc/install/OSX/porting/comment_9_35bf3812db6f3ef25da9b3bc84f147c5._comment
index afb733443..afb733443 100644
--- a/doc/install/OSX/comment_9_35bf3812db6f3ef25da9b3bc84f147c5._comment
+++ b/doc/install/OSX/porting/comment_9_35bf3812db6f3ef25da9b3bc84f147c5._comment
diff --git a/doc/install/Ubuntu/comment_13_7964374bb2332940677eea570bdb0b69._comment b/doc/install/Ubuntu/comment_13_7964374bb2332940677eea570bdb0b69._comment
new file mode 100644
index 000000000..25ac3e381
--- /dev/null
+++ b/doc/install/Ubuntu/comment_13_7964374bb2332940677eea570bdb0b69._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawntodrSgODU27WUCyN2PV7TC14YMkyaoxQ"
+ nickname="Dennis"
+ subject="Ubuntu Trusty 14.04"
+ date="2015-01-24T03:20:48Z"
+ content="""
+I am searching for current packages for Ubuntu Trusty 14.04. The version shipped is 5.20140412ubuntu1, but I would like to try a more recent version to see if an issue I experience still persists. Is there any up-to-date PPA available for Trusty?
+"""]]
diff --git a/doc/install/Ubuntu/comment_14_b511063001af2e2170bef657cf016ff2._comment b/doc/install/Ubuntu/comment_14_b511063001af2e2170bef657cf016ff2._comment
new file mode 100644
index 000000000..472ff6730
--- /dev/null
+++ b/doc/install/Ubuntu/comment_14_b511063001af2e2170bef657cf016ff2._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawltxdgYMUK4CMJh3jC8AlegwyoiHA9Ka7o"
+ nickname="Justin"
+ subject="Trusty PPA"
+ date="2015-01-27T18:24:50Z"
+ content="""
+@Dennis, I just got a backport of the latest release (5.20150113) running under trusty. This was my first attempt at backporting software and it ended up being a fairly big project. I had to pull in a lot of haskell dependencies from vivid in order to get this to build.
+
+I'll attempt to keep this PPA up-to-date as long as I don't have to do too much more build dep wrangling.
+
+<https://launchpad.net/~jtgeibel/+archive/ubuntu/ppa?field.series_filter=trusty>
+"""]]
diff --git a/doc/install/Windows.mdwn b/doc/install/Windows.mdwn
index 66df7921e..5080fc9cb 100644
--- a/doc/install/Windows.mdwn
+++ b/doc/install/Windows.mdwn
@@ -1,25 +1,26 @@
git-annex now does Windows!
-* First, [install git](http://git-scm.com/downloads)
+* First, [install git](http://git-scm.com/downloads) (msysgit 1.9 or newer is needed)
+ _Be sure to tell the msysgit installer to add git to the PATH._
+ That is, select "Use Git from the Windows Command Prompt"
* Then, [install git-annex](https://downloads.kitenet.net/git-annex/windows/current/)
This port is now in reasonably good shape for command-line use of
-git-annex. The assistant and webapp are still in an early state.
-See [[todo/windows_support]] for current status.
+git-annex. The assistant and webapp are also usable. There are some known
+problems and parts that don't work. See [[todo/windows_support]] for
+current status.
-The autobuilder is not currently able to run the test suite, so
-testing git-annex on Windows is up to you! To check that the build of
-git-annex works in your Windows system, you are encouraged to run the test
-suite before using git-annex on real data. After installation, run `git
-annex test`. There will be a lot of output; the important thing is that it
-should end with "All tests passed".
+To verify that the build of git-annex works in your Windows system, you are
+encouraged to run the test suite before using git-annex on real data. After
+installation, run `git annex test`. There will be a lot of output; the
+important thing is that it should end with "All tests passed".
## autobuilds
A daily build is also available, thanks to Yury V. Zaytsev and
[NEST](http://nest-initiative.org/).
-* [download](https://qa.nest-initiative.org/view/msysGit/job/msysgit-git-annex-assistant-test/lastSuccessfulBuild/artifact/git-annex/git-annex-installer.exe) ([build logs](https://qa.nest-initiative.org/view/msysGit/job/msysgit-git-annex-assistant-test/))
+* [download](https://downloads.kitenet.net/git-annex/autobuild/windows/) ([build logs](https://qa.nest-initiative.org/view/msysGit/job/msysgit-git-annex-assistant-test/))
## building it yourself
@@ -34,5 +35,5 @@ Once the prerequisites are installed, run:
cd gitannex
build
-(To build the git-annex installer, you also need to install the NulSoft
+(To build the git-annex installer, you also need to install the NullSoft
installer system.)
diff --git a/doc/install/cabal.mdwn b/doc/install/cabal.mdwn
deleted file mode 100644
index 3270dd0f9..000000000
--- a/doc/install/cabal.mdwn
+++ /dev/null
@@ -1,58 +0,0 @@
-As a haskell package, git-annex can be installed using cabal.
-
-This involves building a lot of haskell packages from source, and so it has
-a lot of moving parts, and it's not uncommon for it to be broken from time
-to time.
-
-If you are not comfortable tracking down and dealing with library build
-problems, installing git-annex with cabal is probably not the right choice
-for you!
-
-## prerequisites
-
-Start by installing the [Haskell Platform][]. In Debian, this is as
-simple as:
-
- sudo apt-get install haskell-platform
-
- [Haskell Platform]: http://hackage.haskell.org/platform/
-
-## minimal build
-
-This builds git-annex without some features that require C libraries, that
-can be harder to get installed. This is plenty to get started using it,
-although it does not include the assistant or webapp.
-
- cabal update
- PATH=$HOME/bin:$PATH
- cabal install git-annex --bindir=$HOME/bin -f"-assistant -webapp -webdav -pairing -xmpp -dns"
-
-## full build
-
-To build with all features enabled, including the assistant and webapp,
-you will need to install several C libraries and their headers,
-including libgnutls, libgsasl, libxml2, and zlib. Then run:
-
- cabal update
- PATH=$HOME/bin:$PATH
- cabal install c2hs --bindir=$HOME/bin
- cabal install git-annex --bindir=$HOME/bin
-
-## building from git checkout
-
-But maybe you want something newer (or older). Then [[download]] the version
-you want, and use cabal as follows inside its source tree:
-
- cabal update
- PATH=$HOME/bin:$PATH
- cabal install c2hs --bindir=$HOME/bin
- cabal install --only-dependencies
- cabal configure
- cabal build
- cabal install --bindir=$HOME/bin
-
-## EKG
-
-When building with cabal, you can optionally enable the
-[[EKG monitoring interface|ekg]]. This is great for debugging resource
-usage problems.
diff --git a/doc/install/comment_1_0aa16754fb08d8f2a54c8c3f78b6c187._comment b/doc/install/comment_1_0aa16754fb08d8f2a54c8c3f78b6c187._comment
new file mode 100644
index 000000000..1bf53f02a
--- /dev/null
+++ b/doc/install/comment_1_0aa16754fb08d8f2a54c8c3f78b6c187._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm7eqCMh_B7mxE0tnchbr0JoYu11FUAFRY"
+ nickname="Stéphane"
+ subject="Old versions from distributions (e.g. Debian stable) fail with online instructions."
+ date="2014-06-28T15:36:12Z"
+ content="""
+Hello everyone.
+
+Be aware that your distribution's package may be very old.
+For example, at the time I write this, latest Debian stable is Debian 7.5 which is 2 months old.
+But git-annex package there is two *years* old (tomorrow, it will be exactly two yezrs old).
+
+So, beware. If following [online walkthrough](https://git-annex.branchable.com/walkthrough/), either install a more recent git-annex (e.g. from [Debain backports](http://backports.debian.org/Instructions/)) or follow instructions from your local `/usr/share/doc/git-annex/html/walkthrough.html` instead.
+"""]]
diff --git a/doc/install/fromscratch.mdwn b/doc/install/fromscratch.mdwn
deleted file mode 100644
index 46ee5a055..000000000
--- a/doc/install/fromscratch.mdwn
+++ /dev/null
@@ -1,27 +0,0 @@
-To install git-annex from scratch, you need a lot of stuff. Really
-quite a lot.
-
-* Haskell stuff
- * [The Haskell Platform](http://haskell.org/platform/) (GHC 7.4 or newer)
- * A ton of haskell libraries. Rather than try to list them all here,
- see git-annex.cabal. Probably the easiest way to install them:
- `cabal update; cabal install git-annex --only-dependencies`
-* Shell commands
- * [git](http://git-scm.com/) (1.7.2 or newer; 1.8.5 or newer recommended)
- * [xargs](http://savannah.gnu.org/projects/findutils/)
- * [rsync](http://rsync.samba.org/)
- * [curl](http://http://curl.haxx.se/) (optional, but recommended)
- * [wget](http://www.gnu.org/software/wget/) (optional)
- * [sha*sum](ftp://ftp.gnu.org/gnu/coreutils/) (optional)
- * [gpg](http://gnupg.org/) (optional; needed for encryption)
- * [lsof](ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/)
- (optional; recommended for watch mode)
- * [gcrypt](https://github.com/joeyh/git-remote-gcrypt)
- (optional)
- * [nocache](https://github.com/Feh/nocache)
- (optional)
- * multicast DNS support, provided on linux by [nss-mdns](http://www.0pointer.de/lennart/projects/nss-mdns/)
- (optional; recommended for the assistant to support pairing well)
- * [ikiwiki](http://ikiwiki.info) (optional; used to build the docs)
-
-Then just [[download]] git-annex and run: `make; make install`
diff --git a/doc/install/fromsource.mdwn b/doc/install/fromsource.mdwn
new file mode 100644
index 000000000..98a517b14
--- /dev/null
+++ b/doc/install/fromsource.mdwn
@@ -0,0 +1,74 @@
+So you want to build git-annex from source. This is encouraged for
+users with experience building code from source. But the build may
+require some care and feeding. This page will start with the easy
+methods and work up to the harder ones.
+
+## prerequisites
+
+Start by installing the
+[Haskell Platform](http://hackage.haskell.org/platform/).
+
+In Debian, this is as simple as:
+
+ sudo apt-get install haskell-platform
+
+## downloading the source code
+
+The easiest way is using git; see [[download]] or just:
+
+ git clone git://git-annex.branchable.com/ git-annex
+
+Or, you can use cabal to get the source code:
+
+ cabal update; cabal unpack git-annex
+
+## building from source on Debian
+
+This is the method used by git-annex's author, and so it's the one most
+likely to work without problems.
+
+First, install everything git-annex needs to build:
+
+ sudo apt-get build-dep git-annex
+
+Now you can build git-annex by running either `make` or `cabal build`
+inside the source tree.
+
+## minimal build with cabal
+
+This can be done anywhere, and builds git-annex without some features that
+require C libraries, that can be harder to get installed. This is plenty to
+get started using it, although it does not include the assistant or webapp.
+
+Inside the source tree, run:
+
+ cabal configure -f"-assistant -webapp -webdav -pairing -xmpp -dns"
+ cabal install --only-dependencies
+ cabal build
+ PATH=$HOME/bin:$PATH
+ cabal install --bindir=$HOME/bin
+
+Be warned that this involves building a lot of Haskell libraries from
+source, and so it has a lot of moving parts, and it's not uncommon for it
+to be broken from time to time.
+
+## full build with cabal
+
+To build with all features enabled, including the assistant and webapp,
+you will need to install several C libraries and their headers,
+including libgnutls, libgsasl, libxml2, and zlib. How to do that for
+your OS is beyond the scope of this page.
+
+Once the C libraries are installed, run inside the source tree:
+
+ cabal configure
+ cabal install --only-dependencies
+ cabal build
+ PATH=$HOME/bin:$PATH
+ cabal install --bindir=$HOME/bin
+
+## EKG
+
+When building with cabal, you can optionally enable the
+[[EKG monitoring interface|ekg]]. This is great for debugging resource
+usage problems. Just pass `-f+EKG` to `cabal configure`
diff --git a/doc/install/cabal/comment_10_7ebe353b05d4df29897dc9a4f45c8a91._comment b/doc/install/fromsource/comment_10_7ebe353b05d4df29897dc9a4f45c8a91._comment
index 5b813baba..5b813baba 100644
--- a/doc/install/cabal/comment_10_7ebe353b05d4df29897dc9a4f45c8a91._comment
+++ b/doc/install/fromsource/comment_10_7ebe353b05d4df29897dc9a4f45c8a91._comment
diff --git a/doc/install/cabal/comment_11_0d06702e6e0ae3cd331cf748a9f6f273._comment b/doc/install/fromsource/comment_11_0d06702e6e0ae3cd331cf748a9f6f273._comment
index 94919710f..94919710f 100644
--- a/doc/install/cabal/comment_11_0d06702e6e0ae3cd331cf748a9f6f273._comment
+++ b/doc/install/fromsource/comment_11_0d06702e6e0ae3cd331cf748a9f6f273._comment
diff --git a/doc/install/cabal/comment_12_b93ca271dffca3f948645d3e1326c1d9._comment b/doc/install/fromsource/comment_12_b93ca271dffca3f948645d3e1326c1d9._comment
index 8d9c97898..8d9c97898 100644
--- a/doc/install/cabal/comment_12_b93ca271dffca3f948645d3e1326c1d9._comment
+++ b/doc/install/fromsource/comment_12_b93ca271dffca3f948645d3e1326c1d9._comment
diff --git a/doc/install/cabal/comment_13_3dac019cda71bf99878c0a1d9382323b._comment b/doc/install/fromsource/comment_13_3dac019cda71bf99878c0a1d9382323b._comment
index 80e3a6ad1..80e3a6ad1 100644
--- a/doc/install/cabal/comment_13_3dac019cda71bf99878c0a1d9382323b._comment
+++ b/doc/install/fromsource/comment_13_3dac019cda71bf99878c0a1d9382323b._comment
diff --git a/doc/install/cabal/comment_14_14b46470593f84f8c3768a91cb77bdab._comment b/doc/install/fromsource/comment_14_14b46470593f84f8c3768a91cb77bdab._comment
index 93fca1653..93fca1653 100644
--- a/doc/install/cabal/comment_14_14b46470593f84f8c3768a91cb77bdab._comment
+++ b/doc/install/fromsource/comment_14_14b46470593f84f8c3768a91cb77bdab._comment
diff --git a/doc/install/cabal/comment_15_c3a5b0aad28a90e0bb8da31a430578eb._comment b/doc/install/fromsource/comment_15_c3a5b0aad28a90e0bb8da31a430578eb._comment
index fc64af234..fc64af234 100644
--- a/doc/install/cabal/comment_15_c3a5b0aad28a90e0bb8da31a430578eb._comment
+++ b/doc/install/fromsource/comment_15_c3a5b0aad28a90e0bb8da31a430578eb._comment
diff --git a/doc/install/cabal/comment_16_4faf214f97f9516898d7c17d743ef825._comment b/doc/install/fromsource/comment_16_4faf214f97f9516898d7c17d743ef825._comment
index be14b3908..be14b3908 100644
--- a/doc/install/cabal/comment_16_4faf214f97f9516898d7c17d743ef825._comment
+++ b/doc/install/fromsource/comment_16_4faf214f97f9516898d7c17d743ef825._comment
diff --git a/doc/install/cabal/comment_17_2a9d6807a3a13815c824985521757167._comment b/doc/install/fromsource/comment_17_2a9d6807a3a13815c824985521757167._comment
index c0b570dfb..c0b570dfb 100644
--- a/doc/install/cabal/comment_17_2a9d6807a3a13815c824985521757167._comment
+++ b/doc/install/fromsource/comment_17_2a9d6807a3a13815c824985521757167._comment
diff --git a/doc/install/cabal/comment_18_1efa0c7a963ec452fc6336fbe4964f6e._comment b/doc/install/fromsource/comment_18_1efa0c7a963ec452fc6336fbe4964f6e._comment
index e3a523e22..e3a523e22 100644
--- a/doc/install/cabal/comment_18_1efa0c7a963ec452fc6336fbe4964f6e._comment
+++ b/doc/install/fromsource/comment_18_1efa0c7a963ec452fc6336fbe4964f6e._comment
diff --git a/doc/install/cabal/comment_19_6f42f9234f9ff6a2ca6bbb4d2643843e._comment b/doc/install/fromsource/comment_19_6f42f9234f9ff6a2ca6bbb4d2643843e._comment
index 27a3e8c62..27a3e8c62 100644
--- a/doc/install/cabal/comment_19_6f42f9234f9ff6a2ca6bbb4d2643843e._comment
+++ b/doc/install/fromsource/comment_19_6f42f9234f9ff6a2ca6bbb4d2643843e._comment
diff --git a/doc/install/fromsource/comment_1_9d085e460553fa045999ab7cb945cdec._comment b/doc/install/fromsource/comment_1_9d085e460553fa045999ab7cb945cdec._comment
new file mode 100644
index 000000000..1b68d0f8c
--- /dev/null
+++ b/doc/install/fromsource/comment_1_9d085e460553fa045999ab7cb945cdec._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="azul"
+ ip="91.36.153.149"
+ subject="cabal fails to resolve dependencies"
+ date="2014-06-19T08:49:05Z"
+ content="""
+I tried this on ubuntu 14.04 without any previous haskell installs and cabal failed to resolve the dependencies:
+
+rejecting: optparse-applicative-0.9.0 (conflict: hjsmin =>
+optparse-applicative>=0.7 && <0.9)
+
+[full log](paste.debian.net/105771/)
+"""]]
diff --git a/doc/install/cabal/comment_1_f04df6bcd50d1d01eb34868bb00ac35c._comment b/doc/install/fromsource/comment_1_f04df6bcd50d1d01eb34868bb00ac35c._comment
index b280d3d3d..b280d3d3d 100644
--- a/doc/install/cabal/comment_1_f04df6bcd50d1d01eb34868bb00ac35c._comment
+++ b/doc/install/fromsource/comment_1_f04df6bcd50d1d01eb34868bb00ac35c._comment
diff --git a/doc/install/cabal/comment_20_0f553be2a4c666e3bed58b2bce549406._comment b/doc/install/fromsource/comment_20_0f553be2a4c666e3bed58b2bce549406._comment
index 288c0e017..288c0e017 100644
--- a/doc/install/cabal/comment_20_0f553be2a4c666e3bed58b2bce549406._comment
+++ b/doc/install/fromsource/comment_20_0f553be2a4c666e3bed58b2bce549406._comment
diff --git a/doc/install/cabal/comment_21_f91a6ec21e96eced73ea9579fd8cbd15._comment b/doc/install/fromsource/comment_21_f91a6ec21e96eced73ea9579fd8cbd15._comment
index ef8a3d2a3..ef8a3d2a3 100644
--- a/doc/install/cabal/comment_21_f91a6ec21e96eced73ea9579fd8cbd15._comment
+++ b/doc/install/fromsource/comment_21_f91a6ec21e96eced73ea9579fd8cbd15._comment
diff --git a/doc/install/cabal/comment_22_2f27b78215f97ade1986ca806c634cb3._comment b/doc/install/fromsource/comment_22_2f27b78215f97ade1986ca806c634cb3._comment
index d7ff05617..d7ff05617 100644
--- a/doc/install/cabal/comment_22_2f27b78215f97ade1986ca806c634cb3._comment
+++ b/doc/install/fromsource/comment_22_2f27b78215f97ade1986ca806c634cb3._comment
diff --git a/doc/install/cabal/comment_23_c34d2b1d95830a3e58671a5b566a1758._comment b/doc/install/fromsource/comment_23_c34d2b1d95830a3e58671a5b566a1758._comment
index 03a5b87ce..03a5b87ce 100644
--- a/doc/install/cabal/comment_23_c34d2b1d95830a3e58671a5b566a1758._comment
+++ b/doc/install/fromsource/comment_23_c34d2b1d95830a3e58671a5b566a1758._comment
diff --git a/doc/install/cabal/comment_24_40cbde8ec067b3a860e6df1a9bea5f76._comment b/doc/install/fromsource/comment_24_40cbde8ec067b3a860e6df1a9bea5f76._comment
index 3bb160546..3bb160546 100644
--- a/doc/install/cabal/comment_24_40cbde8ec067b3a860e6df1a9bea5f76._comment
+++ b/doc/install/fromsource/comment_24_40cbde8ec067b3a860e6df1a9bea5f76._comment
diff --git a/doc/install/cabal/comment_25_8a7664e6f9271718dc607a0782366c5b._comment b/doc/install/fromsource/comment_25_8a7664e6f9271718dc607a0782366c5b._comment
index 929956ede..929956ede 100644
--- a/doc/install/cabal/comment_25_8a7664e6f9271718dc607a0782366c5b._comment
+++ b/doc/install/fromsource/comment_25_8a7664e6f9271718dc607a0782366c5b._comment
diff --git a/doc/install/cabal/comment_26_bd455c732639728bce2bfc39e32871d2._comment b/doc/install/fromsource/comment_26_bd455c732639728bce2bfc39e32871d2._comment
index 5b1f06023..5b1f06023 100644
--- a/doc/install/cabal/comment_26_bd455c732639728bce2bfc39e32871d2._comment
+++ b/doc/install/fromsource/comment_26_bd455c732639728bce2bfc39e32871d2._comment
diff --git a/doc/install/cabal/comment_27_c080e9239b6eec88d329c28da7bb4141._comment b/doc/install/fromsource/comment_27_c080e9239b6eec88d329c28da7bb4141._comment
index 4c007c9ad..4c007c9ad 100644
--- a/doc/install/cabal/comment_27_c080e9239b6eec88d329c28da7bb4141._comment
+++ b/doc/install/fromsource/comment_27_c080e9239b6eec88d329c28da7bb4141._comment
diff --git a/doc/install/cabal/comment_28_15951dd070a675300420eea137a28ef9._comment b/doc/install/fromsource/comment_28_15951dd070a675300420eea137a28ef9._comment
index 19a570cae..19a570cae 100644
--- a/doc/install/cabal/comment_28_15951dd070a675300420eea137a28ef9._comment
+++ b/doc/install/fromsource/comment_28_15951dd070a675300420eea137a28ef9._comment
diff --git a/doc/install/cabal/comment_29_ac082dca67f4a29b06070c0283130f52._comment b/doc/install/fromsource/comment_29_ac082dca67f4a29b06070c0283130f52._comment
index 524a0db0c..524a0db0c 100644
--- a/doc/install/cabal/comment_29_ac082dca67f4a29b06070c0283130f52._comment
+++ b/doc/install/fromsource/comment_29_ac082dca67f4a29b06070c0283130f52._comment
diff --git a/doc/install/cabal/comment_2_a69d17c55e56a707ec6606d5cdddee25._comment b/doc/install/fromsource/comment_2_a69d17c55e56a707ec6606d5cdddee25._comment
index 5a7beea37..5a7beea37 100644
--- a/doc/install/cabal/comment_2_a69d17c55e56a707ec6606d5cdddee25._comment
+++ b/doc/install/fromsource/comment_2_a69d17c55e56a707ec6606d5cdddee25._comment
diff --git a/doc/install/fromsource/comment_2_b7954521d9ab40622b665f278dd72e17._comment b/doc/install/fromsource/comment_2_b7954521d9ab40622b665f278dd72e17._comment
new file mode 100644
index 000000000..949ee0abf
--- /dev/null
+++ b/doc/install/fromsource/comment_2_b7954521d9ab40622b665f278dd72e17._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="azul"
+ ip="91.36.173.120"
+ subject="conflict solved"
+ date="2014-06-20T06:13:09Z"
+ content="""
+`apt-get install happy alex libghc-hjsmin-dev`
+solved the problem for me. The hjsmin lib was probably crucial. It seems a bunch of dependencies can also be installed as debs rather than through cabal.
+`standalone/android/buildchroot-inchroot` gave me a clue.
+"""]]
diff --git a/doc/install/cabal/comment_30_ad639c07cb79e89406e95c1dafce3a01._comment b/doc/install/fromsource/comment_30_ad639c07cb79e89406e95c1dafce3a01._comment
index f068944b0..f068944b0 100644
--- a/doc/install/cabal/comment_30_ad639c07cb79e89406e95c1dafce3a01._comment
+++ b/doc/install/fromsource/comment_30_ad639c07cb79e89406e95c1dafce3a01._comment
diff --git a/doc/install/cabal/comment_31_4763b24a29627d55f465b9ea260ea7ec._comment b/doc/install/fromsource/comment_31_4763b24a29627d55f465b9ea260ea7ec._comment
index 224c1dc19..224c1dc19 100644
--- a/doc/install/cabal/comment_31_4763b24a29627d55f465b9ea260ea7ec._comment
+++ b/doc/install/fromsource/comment_31_4763b24a29627d55f465b9ea260ea7ec._comment
diff --git a/doc/install/cabal/comment_32_1d34c294486c85b1149675fa5861ae35._comment b/doc/install/fromsource/comment_32_1d34c294486c85b1149675fa5861ae35._comment
index 8b2ae67f9..8b2ae67f9 100644
--- a/doc/install/cabal/comment_32_1d34c294486c85b1149675fa5861ae35._comment
+++ b/doc/install/fromsource/comment_32_1d34c294486c85b1149675fa5861ae35._comment
diff --git a/doc/install/cabal/comment_33_8d4dfc33cada6091c30d3a43ce404b8b._comment b/doc/install/fromsource/comment_33_8d4dfc33cada6091c30d3a43ce404b8b._comment
index 8fab5a45f..8fab5a45f 100644
--- a/doc/install/cabal/comment_33_8d4dfc33cada6091c30d3a43ce404b8b._comment
+++ b/doc/install/fromsource/comment_33_8d4dfc33cada6091c30d3a43ce404b8b._comment
diff --git a/doc/install/cabal/comment_34_38451e751add6daf479b559c4b6a7c61._comment b/doc/install/fromsource/comment_34_38451e751add6daf479b559c4b6a7c61._comment
index 619e79012..619e79012 100644
--- a/doc/install/cabal/comment_34_38451e751add6daf479b559c4b6a7c61._comment
+++ b/doc/install/fromsource/comment_34_38451e751add6daf479b559c4b6a7c61._comment
diff --git a/doc/install/cabal/comment_35_4d44e4531e6686bd340f26836ad40026._comment b/doc/install/fromsource/comment_35_4d44e4531e6686bd340f26836ad40026._comment
index 899e4fc01..899e4fc01 100644
--- a/doc/install/cabal/comment_35_4d44e4531e6686bd340f26836ad40026._comment
+++ b/doc/install/fromsource/comment_35_4d44e4531e6686bd340f26836ad40026._comment
diff --git a/doc/install/fromsource/comment_36_2a095a5af53a356bd29abd22a9cb1bea._comment b/doc/install/fromsource/comment_36_2a095a5af53a356bd29abd22a9cb1bea._comment
new file mode 100644
index 000000000..f6e0d8503
--- /dev/null
+++ b/doc/install/fromsource/comment_36_2a095a5af53a356bd29abd22a9cb1bea._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkNcHu5T1Pxzl-r2co9vf6SxXYWubv2P04"
+ nickname="Matthew"
+ subject="I did indeed get problems on Ubuntu 13.04"
+ date="2014-06-25T01:01:43Z"
+ content="""
+The issues I had were version mismatches when resolving dependencies of git-annex.
+
+It seems that when you install haskell-platform package with apt-get, it installs a bunch of haskell dependencies as apt packages, yet those aren't needed for any other system packages. So some people here who complain about version mismatches might not have intended to install any Haskell libraries with apt, they just come along for the ride by default.
+
+I can't remember the exact ones, but I ended up uninstalling some of the stuff that gets auto-installed along with haskell-platform, and using cabal to build those. Then all the git-annex dependencies worked.
+
+Why 13.04 in this day and age? Using Zentyal as a home server/gateway, and it currently runs on 13.04.
+
+This method might not work if you installed other apt packages that _do_ need those apt-based Haskell libraries. But if git-annex is all you need that uses the Haskell platform, might work.
+"""]]
diff --git a/doc/install/fromsource/comment_37_f33e1a4575dccc20b0d3d7c00e6db709._comment b/doc/install/fromsource/comment_37_f33e1a4575dccc20b0d3d7c00e6db709._comment
new file mode 100644
index 000000000..daf7d0b5a
--- /dev/null
+++ b/doc/install/fromsource/comment_37_f33e1a4575dccc20b0d3d7c00e6db709._comment
@@ -0,0 +1,69 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmveNWaFIL1zEehHr_0416bKBzsul5tGlE"
+ nickname="Daniel"
+ subject="Install fails horribly"
+ date="2014-07-10T23:11:51Z"
+ content="""
+```
+lyriondesktop:/home/zilti/tmp # cabal install c2hs
+Resolving dependencies...
+Configuring c2hs-0.17.2...
+Building c2hs-0.17.2...
+Preprocessing executable 'c2hs' for c2hs-0.17.2...
+[ 1 of 26] Compiling Data.DLists ( src/Data/DLists.hs, dist/build/c2hs/c2hs-tmp/Data/DLists.o )
+[ 2 of 26] Compiling Control.StateTrans ( src/Control/StateTrans.hs, dist/build/c2hs/c2hs-tmp/Control/StateTrans.o )
+
+src/Control/StateTrans.hs:77:1: Warning:
+ Module `Prelude' does not export `catch'
+[ 3 of 26] Compiling Data.Errors ( src/Data/Errors.hs, dist/build/c2hs/c2hs-tmp/Data/Errors.o )
+[ 4 of 26] Compiling Data.Attributes ( src/Data/Attributes.hs, dist/build/c2hs/c2hs-tmp/Data/Attributes.o )
+[ 5 of 26] Compiling Text.Lexers ( src/Text/Lexers.hs, dist/build/c2hs/c2hs-tmp/Text/Lexers.o )
+[ 6 of 26] Compiling Control.StateBase ( src/Control/StateBase.hs, dist/build/c2hs/c2hs-tmp/Control/StateBase.o )
+[ 7 of 26] Compiling Data.NameSpaces ( src/Data/NameSpaces.hs, dist/build/c2hs/c2hs-tmp/Data/NameSpaces.o )
+[ 8 of 26] Compiling C2HS.C.Attrs ( src/C2HS/C/Attrs.hs, dist/build/c2hs/c2hs-tmp/C2HS/C/Attrs.o )
+[ 9 of 26] Compiling C2HS.C.Builtin ( src/C2HS/C/Builtin.hs, dist/build/c2hs/c2hs-tmp/C2HS/C/Builtin.o )
+[10 of 26] Compiling Paths_c2hs ( dist/build/autogen/Paths_c2hs.hs, dist/build/c2hs/c2hs-tmp/Paths_c2hs.o )
+[11 of 26] Compiling C2HS.Config ( src/C2HS/Config.hs, dist/build/c2hs/c2hs-tmp/C2HS/Config.o )
+[12 of 26] Compiling C2HS.Switches ( src/C2HS/Switches.hs, dist/build/c2hs/c2hs-tmp/C2HS/Switches.o )
+[13 of 26] Compiling C2HS.Version ( src/C2HS/Version.hs, dist/build/c2hs/c2hs-tmp/C2HS/Version.o )
+[14 of 26] Compiling System.CIO ( src/System/CIO.hs, dist/build/c2hs/c2hs-tmp/System/CIO.o )
+[15 of 26] Compiling Control.State ( src/Control/State.hs, dist/build/c2hs/c2hs-tmp/Control/State.o )
+[16 of 26] Compiling C2HS.State ( src/C2HS/State.hs, dist/build/c2hs/c2hs-tmp/C2HS/State.o )
+[17 of 26] Compiling C2HS.CHS.Lexer ( src/C2HS/CHS/Lexer.hs, dist/build/c2hs/c2hs-tmp/C2HS/CHS/Lexer.o )
+
+src/C2HS/CHS/Lexer.hs:612:16: Warning:
+ Defined but not used: `lexeme'
+[18 of 26] Compiling C2HS.CHS ( src/C2HS/CHS.hs, dist/build/c2hs/c2hs-tmp/C2HS/CHS.o )
+[19 of 26] Compiling C2HS.Gen.Header ( src/C2HS/Gen/Header.hs, dist/build/c2hs/c2hs-tmp/C2HS/Gen/Header.o )
+[20 of 26] Compiling C2HS.C.Trav ( src/C2HS/C/Trav.hs, dist/build/c2hs/c2hs-tmp/C2HS/C/Trav.o )
+[21 of 26] Compiling C2HS.C.Names ( src/C2HS/C/Names.hs, dist/build/c2hs/c2hs-tmp/C2HS/C/Names.o )
+[22 of 26] Compiling C2HS.C ( src/C2HS/C.hs, dist/build/c2hs/c2hs-tmp/C2HS/C.o )
+[23 of 26] Compiling C2HS.Gen.Monad ( src/C2HS/Gen/Monad.hs, dist/build/c2hs/c2hs-tmp/C2HS/Gen/Monad.o )
+
+src/C2HS/Gen/Monad.hs:227:10: Warning:
+ Orphan instance: instance Read Ident
+[24 of 26] Compiling C2HS.C.Info ( src/C2HS/C/Info.hs, dist/build/c2hs/c2hs-tmp/C2HS/C/Info.o )
+[25 of 26] Compiling C2HS.Gen.Bind ( src/C2HS/Gen/Bind.hs, dist/build/c2hs/c2hs-tmp/C2HS/Gen/Bind.o )
+
+src/C2HS/Gen/Bind.hs:971:43: Warning:
+ In the use of `posColumn' (imported from Language.C.Data.Position):
+ Deprecated: \"column number information is inaccurate in presence of macros - do not rely on it.\"
+
+src/C2HS/Gen/Bind.hs:789:10: Warning:
+ Orphan instance: instance Num CInteger
+[26 of 26] Compiling Main ( src/Main.hs, dist/build/c2hs/c2hs-tmp/Main.o )
+Linking dist/build/c2hs/c2hs ...
+Installing executable(s) in /root/.cabal/bin
+Installed c2hs-0.17.2
+lyriondesktop:/home/zilti/tmp # cabal install git-annex
+Resolving dependencies...
+Configuring gnuidn-0.2.1...
+cabal: The program c2hs is required but it could not be found.
+Failed to install gnuidn-0.2.1
+cabal: Error: some packages failed to install:
+git-annex-5.20140709 depends on gnuidn-0.2.1 which failed to install.
+gnuidn-0.2.1 failed during the configure step. The exception was:
+ExitFailure 1
+network-protocol-xmpp-0.4.6 depends on gnuidn-0.2.1 which failed to install.
+```
+"""]]
diff --git a/doc/install/fromsource/comment_38_5c1e96221154a4ae4ebd636232044ced._comment b/doc/install/fromsource/comment_38_5c1e96221154a4ae4ebd636232044ced._comment
new file mode 100644
index 000000000..7c44518d9
--- /dev/null
+++ b/doc/install/fromsource/comment_38_5c1e96221154a4ae4ebd636232044ced._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 38"
+ date="2014-07-11T18:30:55Z"
+ content="""
+@Daniel, I suggest you either follow the instuctions above, or if you don't want to follow the instructions, follow the error messages. :P In this case, the instructions say to do:
+
+> PATH=$HOME/bin:$PATH
+> cabal install c2hs --bindir=$HOME/bin
+
+Which is exactly to work around the problem that we can see in your transcript: `Installing executable(s) in /root/.cabal/bin`
+
+Also, to reiterate the top of the page: If you are not comfortable tracking down and dealing with library build problems, installing git-annex with cabal is probably not the right choice for you!
+
+"""]]
diff --git a/doc/install/fromsource/comment_39_a86057d7e6d47113330f79e1812c3a5d._comment b/doc/install/fromsource/comment_39_a86057d7e6d47113330f79e1812c3a5d._comment
new file mode 100644
index 000000000..7573b4784
--- /dev/null
+++ b/doc/install/fromsource/comment_39_a86057d7e6d47113330f79e1812c3a5d._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkftzaCvV7EDKVDfJhsQZ3E1Vn-0db516w"
+ nickname="Edward"
+ subject="GHC 7.8 Issue"
+ date="2014-08-20T20:06:01Z"
+ content="""
+Just an FYI: I tried to \"cabal install --only-dependencies\" with GHC 7.8 and it fails because DAV-1.0.1 is pulling in lens-3.10.3 which is not compatible with GHC 7.8 due to changes in Typeable.
+
+I don't have enough experience with cabal to figure out why it's not trying to use a newer version of lens.
+"""]]
diff --git a/doc/install/cabal/comment_3_55bed050bdb768543dbe1b86edec057d._comment b/doc/install/fromsource/comment_3_55bed050bdb768543dbe1b86edec057d._comment
index 7a53b2b64..7a53b2b64 100644
--- a/doc/install/cabal/comment_3_55bed050bdb768543dbe1b86edec057d._comment
+++ b/doc/install/fromsource/comment_3_55bed050bdb768543dbe1b86edec057d._comment
diff --git a/doc/install/fromsource/comment_3_a3bf3ce57ea73515a059267f25b816eb._comment b/doc/install/fromsource/comment_3_a3bf3ce57ea73515a059267f25b816eb._comment
new file mode 100644
index 000000000..1fade16c3
--- /dev/null
+++ b/doc/install/fromsource/comment_3_a3bf3ce57ea73515a059267f25b816eb._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="azul"
+ ip="91.36.173.120"
+ subject="c2hs required for cabal to install dependencies"
+ date="2014-06-20T06:35:35Z"
+ content="""
+Next thing i ran into was missing c2hs.
+So
+`apt-get install c2hs` before running the cabal install otherwise...
+
+<pre>
+$ cabal install git-annex --only-dependencies
+Resolving dependencies...
+Configuring gnuidn-0.2.1...
+cabal: The program c2hs is required but it could not be found.
+Failed to install gnuidn-0.2.1
+cabal: Error: some packages failed to install:
+gnuidn-0.2.1 failed during the configure step. The exception was:
+ExitFailure 1
+network-protocol-xmpp-0.4.6 depends on gnuidn-0.2.1 which failed to install.
+</pre>
+
+"""]]
diff --git a/doc/install/fromsource/comment_45_d9cccbb9620cc8218e72b5380fd89a05._comment b/doc/install/fromsource/comment_45_d9cccbb9620cc8218e72b5380fd89a05._comment
new file mode 100644
index 000000000..e8666b04e
--- /dev/null
+++ b/doc/install/fromsource/comment_45_d9cccbb9620cc8218e72b5380fd89a05._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.22"
+ subject="no need for c2hs"
+ date="2014-09-16T19:28:09Z"
+ content="""
+The c2hs mentioned in some of the above comments is not needed any longer; ghc 7.6.3 and newer come with a hsc2hs command that is used.
+"""]]
diff --git a/doc/install/fromsource/comment_46_954de34275d33bc4590927f911761563._comment b/doc/install/fromsource/comment_46_954de34275d33bc4590927f911761563._comment
new file mode 100644
index 000000000..c0f283f4b
--- /dev/null
+++ b/doc/install/fromsource/comment_46_954de34275d33bc4590927f911761563._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.22"
+ subject="comment 46"
+ date="2014-09-16T19:33:11Z"
+ content="""
+Britt's comment is spot on, but git-annex tries pretty hard to work with lots of older versions of haskell libraries, as well as the latest and greatest. So it should be ok to install haskell libraries with apt-get and use them to build git-annex, as the (revised) instructions above show.
+
+What tends not to work so well is use apt-get to install older versions of haskell libraries and then cabal install on top to add newer stuff. Gets complicated and I'd recommend not going there. The instructions above show using either apt-get or cabal to install the haskell libraries, but not both.
+"""]]
diff --git a/doc/install/fromsource/comment_47_6de25c1e450e1e3b1d18d2c76235ccb8._comment b/doc/install/fromsource/comment_47_6de25c1e450e1e3b1d18d2c76235ccb8._comment
new file mode 100644
index 000000000..2edb95e21
--- /dev/null
+++ b/doc/install/fromsource/comment_47_6de25c1e450e1e3b1d18d2c76235ccb8._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="thnetos"
+ subject="Where to start reading the source code?"
+ date="2014-12-15T22:04:06Z"
+ content="""
+Do you have any recommendations for the overall haskell architecture of the project? Where to start looking if I want to read through the source code?
+"""]]
diff --git a/doc/install/fromsource/comment_48_9c08300c5d172ba9223042a00c8acb2b._comment b/doc/install/fromsource/comment_48_9c08300c5d172ba9223042a00c8acb2b._comment
new file mode 100644
index 000000000..4e58da1bb
--- /dev/null
+++ b/doc/install/fromsource/comment_48_9c08300c5d172ba9223042a00c8acb2b._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""where to start reading the source code"""
+ date="2015-01-05T20:58:50Z"
+ content="""
+@thnetos, great question!
+
+Annex.hs is a key starting place, as it defines git-annex's main monad.
+If you like learning code bases bottom-up, Types/* has files for
+the main data types used in git-annex, such as Key and UUID and Remote and
+GitConfig.
+
+Command/* gets you the implementation of any particular git-annex command
+you are interested in. Or Remote/* for any particular special remote.
+
+I recommend running "make tags" and then your editor should be able to use
+the tags file to bounce around in the source code.
+"""]]
diff --git a/doc/install/cabal/comment_4_2ff7f8a3b03bea7e860248829d595bd1._comment b/doc/install/fromsource/comment_4_2ff7f8a3b03bea7e860248829d595bd1._comment
index 4a04303ce..4a04303ce 100644
--- a/doc/install/cabal/comment_4_2ff7f8a3b03bea7e860248829d595bd1._comment
+++ b/doc/install/fromsource/comment_4_2ff7f8a3b03bea7e860248829d595bd1._comment
diff --git a/doc/install/fromsource/comment_4_765334858ef1eedff2c5d89ed42aa7f6._comment b/doc/install/fromsource/comment_4_765334858ef1eedff2c5d89ed42aa7f6._comment
new file mode 100644
index 000000000..66615dac7
--- /dev/null
+++ b/doc/install/fromsource/comment_4_765334858ef1eedff2c5d89ed42aa7f6._comment
@@ -0,0 +1,37 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawld54zdyk6b0W4jXnssSO_j2Nn3W1uVsUE"
+ nickname="Paul"
+ subject="comment 4"
+ date="2014-08-24T11:53:11Z"
+ content="""
+@azul, thanks for hints, but it still fails. No wonders though - this is Haskell, kids.
+
+~~~~
+$ cabal install git-annex --only-dependencies
+Resolving dependencies...
+cabal: Could not resolve dependencies:
+trying: git-annex-5.20140817
+trying: git-annex-5.20140817:+webapp
+trying: git-annex-5.20140817:+s3
+trying: git-annex-5.20140817:+dns
+trying: dns-1.4.3
+trying: yesod-1.2.6.1
+trying: yesod-auth-1.3.4.2
+trying: http-client-0.3.7.1
+trying: http-client-0.3.7.1:+network-uri
+trying: hS3-0.5.8
+trying: hxt-9.3.1.6
+trying: hxt-9.3.1.6:-network-uri
+rejecting: network-2.6.0.1, 2.6.0.0 (conflict: hxt-9.3.1.6:network-uri =>
+network>=2.4 && <2.6)
+rejecting: network-2.5.0.0, 2.4.2.3, 2.4.2.2, 2.4.2.1, 2.4.2.0, 2.4.1.2,
+2.4.1.1, 2.4.1.0, 2.4.0.1, 2.4.0.0, 2.3.2.0, 2.3.1.1, 2.3.1.0, 2.3.0.14,
+2.3.0.13, 2.3.0.12, 2.3.0.11, 2.3.0.10, 2.3.0.9, 2.3.0.8, 2.3.0.7, 2.3.0.6,
+2.3.0.5, 2.3.0.4, 2.3.0.3, 2.3.0.2, 2.3.0.1, 2.3 (conflict:
+http-client-0.3.7.1:network-uri => network>=2.6)
+rejecting: network-2.2.3.1, 2.2.3, 2.2.1.10, 2.2.1.9, 2.2.1.8, 2.2.1.7,
+2.2.1.6, 2.2.1.5, 2.2.1.4, 2.2.1.3, 2.2.1.2, 2.2.1.1, 2.2.1, 2.2.0.1, 2.2.0.0,
+2.1.0.0, 2.0 (conflict: dns => network>=2.3)
+~~~~
+
+"""]]
diff --git a/doc/install/fromsource/comment_5_4aea55dc5b24d84e0953382ccfea1a01._comment b/doc/install/fromsource/comment_5_4aea55dc5b24d84e0953382ccfea1a01._comment
new file mode 100644
index 000000000..c14b75bc0
--- /dev/null
+++ b/doc/install/fromsource/comment_5_4aea55dc5b24d84e0953382ccfea1a01._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmfEGTjv4GsWkSG2lpuBitRDxVkml7yEQg"
+ nickname="Britt"
+ subject="Installing debs"
+ date="2014-09-16T02:16:28Z"
+ content="""
+@azul - the problem with installing dependencies from apt-get is that the Ubuntu haskell packages are rather old. It shouldn't be this way (and it has gotten a LOT better - I suggest installing the newest version of the Haskell Platform that you can), but often cabal will complain about a package it is unable to install because it failed on the install of that package's dependencies. You should try to cabal install $FAILED_DEPENDENCY (not an actual env variable), and you will often get more informative error messages - some packages require non-haskell dependencies (take gtk3, for instance) which cabal doesn't know how to handle at this point, because that would require some cross platform foo (cabal install runs on Windows and OSX, which don't have native package managers at all).
+
+@Paul - It looks like you ran into a bug, because http-client no longer depends on network>=2.6, it now can take network 2.4 - 2.6 or 2.6 or greater. If you try again it should work.
+
+Please don't be put off by haskell because of things like this - git annex is a very large and complicated project, and developing on large projects such as this pretty much require you to have pretty recent versions of all haskell packages. I really suggest you take a look at this book http://learnyouahaskell.com/introduction. Haskell is a beautiful language and it doesn't have to be esoteric, academic, or difficult at all. It's obvious since you are attempting to build this from source that you are either interested in haskell or you are only interested in the development of git-annex. Either way, it would behoove you to read that book. It is short, full of great examples, and it even has pleasant illustrations. It may look like a children's book, but by the end of it you will know how to use all of the major monads (you may not know what a monad is, but that isn't really that important anyway - you just need to know how they are used).
+"""]]
diff --git a/doc/install/cabal/comment_5_8789fc27466714faa5a3a7a6b8ec6e5d._comment b/doc/install/fromsource/comment_5_8789fc27466714faa5a3a7a6b8ec6e5d._comment
index 59bdbdd13..59bdbdd13 100644
--- a/doc/install/cabal/comment_5_8789fc27466714faa5a3a7a6b8ec6e5d._comment
+++ b/doc/install/fromsource/comment_5_8789fc27466714faa5a3a7a6b8ec6e5d._comment
diff --git a/doc/install/cabal/comment_6_5afb2d081e8b603bc338cd460ad9317d._comment b/doc/install/fromsource/comment_6_5afb2d081e8b603bc338cd460ad9317d._comment
index 1ff7b4f76..1ff7b4f76 100644
--- a/doc/install/cabal/comment_6_5afb2d081e8b603bc338cd460ad9317d._comment
+++ b/doc/install/fromsource/comment_6_5afb2d081e8b603bc338cd460ad9317d._comment
diff --git a/doc/install/cabal/comment_7_129c4f2e404c874e5adfa52902a81104._comment b/doc/install/fromsource/comment_7_129c4f2e404c874e5adfa52902a81104._comment
index 40b202d4e..40b202d4e 100644
--- a/doc/install/cabal/comment_7_129c4f2e404c874e5adfa52902a81104._comment
+++ b/doc/install/fromsource/comment_7_129c4f2e404c874e5adfa52902a81104._comment
diff --git a/doc/install/cabal/comment_8_738c108f131e3aab0d720bc4fd6a81fd._comment b/doc/install/fromsource/comment_8_738c108f131e3aab0d720bc4fd6a81fd._comment
index 536f30da0..536f30da0 100644
--- a/doc/install/cabal/comment_8_738c108f131e3aab0d720bc4fd6a81fd._comment
+++ b/doc/install/fromsource/comment_8_738c108f131e3aab0d720bc4fd6a81fd._comment
diff --git a/doc/install/cabal/comment_9_5ddbba419d96a7411f7edddaa4d7b739._comment b/doc/install/fromsource/comment_9_5ddbba419d96a7411f7edddaa4d7b739._comment
index 3284c8caa..3284c8caa 100644
--- a/doc/install/cabal/comment_9_5ddbba419d96a7411f7edddaa4d7b739._comment
+++ b/doc/install/fromsource/comment_9_5ddbba419d96a7411f7edddaa4d7b739._comment
diff --git a/doc/install/verifying_downloads.mdwn b/doc/install/verifying_downloads.mdwn
new file mode 100644
index 000000000..b3664488f
--- /dev/null
+++ b/doc/install/verifying_downloads.mdwn
@@ -0,0 +1,33 @@
+When you download a git-annex package from downloads.kitenet.net,
+as listed in [[install]], you should use a https connection. That provides
+some security, but here's some more.
+
+The downloaded package's integrity can be verified by checking that
+it was signed using the right GPG key, specifically the git-annex
+distribution signing key. To do this, you need to download the .sig
+file accompanying your package. Just append .sig to the url.
+
+For example, on Linux:
+
+ $ wget https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz
+ $ wget https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz.sig
+
+You can then download the public key, and check that the package is signed
+with it.
+
+ $ wget https://downloads.kitenet.net/git-annex/gpg-pubkey.asc
+ $ gpg --import gpg-pubey.asc
+ $ gpg --verify git-annex-standalone-*.tar.gz.sig
+
+(The git-annex assistant can automatically upgrade git-annex, and when it
+does, it always checks the signature like that.)
+
+But, how do you know that the gpg-pubkey.asc you downloaded
+is the right key? The answer is the GPG web of trust.
+
+* Joey Hess generates these git-annex packages,
+ and has a GPG key, [C910D9222512E3C7 Joey Hess <id@joeyh.name>](http://pgp.cs.uu.nl/stats/2512E3C7.html), which has
+ been verified and signed by many people.
+* Joey's GPG key has signed the git-annex distribution signing key.
+
+Don't take this page's word about this, check it yourself!
diff --git a/doc/internals.mdwn b/doc/internals.mdwn
index 0c5124d0b..a562d6067 100644
--- a/doc/internals.mdwn
+++ b/doc/internals.mdwn
@@ -2,7 +2,9 @@ In the world of git, we're not scared about internal implementation
details, and sometimes we like to dive in and tweak things by hand. Here's
some documentation to that end.
-## `.git/annex/objects/aa/bb/*/*`
+## The .git/ directory
+
+### `.git/annex/objects/aa/bb/*/*`
This is where locally available file contents are actually stored.
Files added to the annex get a symlink checked into git that points
@@ -15,7 +17,7 @@ See [[hashing]] for details.
Each subdirectory has the [[name_of_a_key|key_format]] in one of the
[[key-value_backends|backends]]. The file inside also has the name of the key.
This two-level structure is used because it allows the write bit to be removed
-from the subdirectories as well as from the files. That prevents accidentially
+from the subdirectories as well as from the files. That prevents accidentally
deleting or changing the file contents. See [[lockdown]] for details.
In [[direct_mode]], file contents are not stored in here, and instead
@@ -27,11 +29,11 @@ Also in [[direct_mode]], some additional data is stored in these directories.
changed, and `.map` files contain a list of file(s) in the work directory
that contain the key.
-# `.git/annex/tmp/`
+### `.git/annex/tmp/`
This directory contains partially transferred objects.
-# `.git/annex/misctmp/`
+### `.git/annex/misctmp/`
This is a temp directory for miscellaneous other temp files.
@@ -39,26 +41,26 @@ While .git/annex/objects and .git/annex/tmp can be put on different
filesystems if desired, .git/annex/misctmp
has to be on the same filesystem as the work tree and git repository.
-# `.git/annex/bad/`
+### `.git/annex/bad/`
git-annex fsck puts any bad objects it finds in here.
-# `.git/annex/transfers/`
+### `.git/annex/transfers/`
Contains information files for uploads and downloads that are in progress,
as well as any that have failed. Used especially by the assistant.
It is safe to delete these files.
-# `.git/annex/ssh/`
+### `.git/annex/ssh/`
ssh connection caching files are written in here.
-# `.git/annex/index`
+### `.git/annex/index`
-This is a git index file which git-annex uses for commits to the git-annex
-branch.
+This is a git index file which git-annex uses to stage files
+when preparing commits to the git-annex branch.
-# `.git/annex/journal/`
+### `.git/annex/journal/`
git-annex uses this to journal changes to the git-annex branch,
before committing a set of changes.
@@ -67,13 +69,9 @@ before committing a set of changes.
This branch is managed by git-annex, with the contents listed below.
-The file `.git/annex/index` is a separate git index file it uses
-to accumulate changes for the git-annex branch.
-Also, `.git/annex/journal/` is used to record changes before they
-are added to git.
-
-This branch operates on objects exclusively. No file names will ever
-be stored in this branch.
+This branch is not connected to your master, etc branches. It it used for
+internal tracking of information about git-annex repositories and annexed
+objects.
The files stored in this branch are all designed to be auto-merged
using git's [[union merge driver|git-union-merge]]. So each line
@@ -150,10 +148,17 @@ Files matching the expression are preferred to be retained in the
repository, while files not matching it are preferred to be stored
somewhere else.
+## `required-content.log`
+
+Used to indicate which repositories are required to contain which file
+contents.
+
+File format is identical to preferred-content.log.
+
## `group-preferred-content.log`
Contains standard preferred content settings for groups. (Overriding or
-supplimenting the ones built into git-annex.)
+supplementing the ones built into git-annex.)
The file format is one line per group, staring with a timestamp, then a
space, then the group name followed by a space and then the preferred
@@ -177,8 +182,9 @@ Example:
## `aaa/bbb/*.log.web`
These log files record urls used by the
-[[web_special_remote|special_remotes/web]]. Their format is similar
-to the location tracking files, but with urls rather than UUIDs.
+[[web_special_remote|special_remotes/web]] and sometimes by other remotes.
+Their format is similar to the location tracking files, but with urls
+rather than UUIDs.
## `aaa/bbb/*.log.rmt`
@@ -200,7 +206,7 @@ values.
Lines are timestamped, and record when values are added (`field +value`),
but also when values are removed (`field -value`). Removed values
are retained in the log so that when merging an old line that sets a value
-that was later unset, the value is not accidentially added back.
+that was later unset, the value is not accidentally added back.
For example:
@@ -209,8 +215,21 @@ For example:
The value can be completely arbitrary data, although it's typically
reasonably short. If the value contains any whitespace
-(including \r or \r), it will be base64 encoded. Base64 encoded values
-are indicated by prefixing them with "!"
+(including \r or \n), it will be base64 encoded. Base64 encoded values
+are indicated by prefixing them with "!".
+
+## `aaa/bbb/*.log.cnk`
+
+These log files are used when objects are stored in chunked form on
+remotes. They record the size(s) of the chunks, and the number of chunks.
+
+For example, this logs that a remote has an object stored using both
+9 chunks of 1 mb size, and 1 chunk of 10 mb size.
+
+ 1287290776.765152s e605dca6-446a-11e0-8b2a-002170d25c55:10240 9
+ 1287290776.765153s e605dca6-446a-11e0-8b2a-002170d25c55:102400 1
+
+(When those chunks are removed from the remote, the 9 is changed to 0.)
## `schedule.log`
@@ -219,7 +238,7 @@ Used to record scheduled events, such as periodic fscks.
The file format is simply one line per repository, with the uuid followed by a
space and then its schedule, followed by a timestamp.
-There can be multiple events in the schedule, separated by "; "
+There can be multiple events in the schedule, separated by "; ".
The format of the scheduled events is the same described in
the SCHEDULED JOBS section of the man page.
@@ -238,3 +257,12 @@ Example:
ForgetGitHistory 1387325539.685136s
ForgetDeadRemotes 1387325539.685136s
+
+## `difference.log`
+
+Used when a repository has fundamental differences from other repositories,
+that should prevent merging.
+
+Example:
+
+ e605dca6-446a-11e0-8b2a-002170d25c55 [ObjectHashLower] timestamp=1422387398.30395s
diff --git a/doc/internals/comment_3_5a26ee5aab274f321a4ea6f8527f53bd._comment b/doc/internals/comment_3_5a26ee5aab274f321a4ea6f8527f53bd._comment
new file mode 100644
index 000000000..099f4c8ca
--- /dev/null
+++ b/doc/internals/comment_3_5a26ee5aab274f321a4ea6f8527f53bd._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="134.147.14.84"
+ subject="comment 3"
+ date="2014-09-15T10:34:36Z"
+ content="""
+Some documentation that would be nice having added in the appropriate places:
+
+* Exactly how is the index file being used? Is this just a copy of the git index file that we would get when checking out the git-annex branch? Why is the file kept around? Which sort of operations are done on the index, e.g. when doing git annex add?
+
+* For all time-stamped data-structures: Exactly which significance does the time-stamp have? E.g., for uuid.log, is this the date the name was changed?
+"""]]
diff --git a/doc/internals/hashing.mdwn b/doc/internals/hashing.mdwn
index cc4bc6456..bdc259b63 100644
--- a/doc/internals/hashing.mdwn
+++ b/doc/internals/hashing.mdwn
@@ -36,3 +36,8 @@ string, but where that would normally encode the bits using the 16 characters
0-9a-f, this instead uses the 32 characters "0123456789zqjxkmvwgpfZQJXKMVWGPF".
The first 2 letters of the resulting string are the first directory, and the
second 2 are the second directory.
+
+## chunk keys
+
+The same hash directory is used for a chunk key as would be used for the
+key that it's a chunk of.
diff --git a/doc/internals/hashing/comment_2_086ea37acf15e2a8694b8386222b73f6._comment b/doc/internals/hashing/comment_2_086ea37acf15e2a8694b8386222b73f6._comment
new file mode 100644
index 000000000..04a35232d
--- /dev/null
+++ b/doc/internals/hashing/comment_2_086ea37acf15e2a8694b8386222b73f6._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnx8kHW66N3BqmkVpgtXDlYMvr8TJ5VvfY"
+ nickname="Yaroslav"
+ subject="comment 2"
+ date="2014-12-04T20:26:47Z"
+ content="""
+1c to support Péter's statement:
+
+ $> git annex examinekey --format='${hashdirmixed}' \"SHA256E-s0--e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"
+ pX/ZJ/%
+"""]]
diff --git a/doc/internals/hashing/comment_3_19b7d20ca392078f14f9f10992f288ec._comment b/doc/internals/hashing/comment_3_19b7d20ca392078f14f9f10992f288ec._comment
new file mode 100644
index 000000000..6ba3e097f
--- /dev/null
+++ b/doc/internals/hashing/comment_3_19b7d20ca392078f14f9f10992f288ec._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="josch"
+ subject="any particular reason for the chosen characters for base32 encoding"
+ date="2015-01-31T17:13:57Z"
+ content="""
+are the characters \"0123456789zqjxkmvwgpfZQJXKMVWGPF\" chosen randomly for the base32 encoding or was there a reason to choose exactly these?
+"""]]
diff --git a/doc/internals/hashing/comment_4_7642d6ce5fd4d37d464b05d0b4f869c6._comment b/doc/internals/hashing/comment_4_7642d6ce5fd4d37d464b05d0b4f869c6._comment
new file mode 100644
index 000000000..ee20eada7
--- /dev/null
+++ b/doc/internals/hashing/comment_4_7642d6ce5fd4d37d464b05d0b4f869c6._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2015-02-04T17:14:24Z"
+ content="""
+The only reason for the letter choice is that it avoids making random
+words with possibly unintentional meanings..
+"""]]
diff --git a/doc/internals/key_format.mdwn b/doc/internals/key_format.mdwn
index ac52bddea..52fb80395 100644
--- a/doc/internals/key_format.mdwn
+++ b/doc/internals/key_format.mdwn
@@ -1,6 +1,6 @@
A git-annex key has this format:
- BACKEND-sNNNN-mNNNN--NAME
+ BACKEND[-sNNNN][-mNNNN][-SNNNN-CNNNN]--NAME
For example:
@@ -10,14 +10,20 @@ For example:
are always upper-cased.
* The name field at the end has a format dependent on the backend. It is
always the last field, and is prefixed with "--". Unlike other fields,
- it may contain "-" in its content. It should not contain newline characters;
- otherwise nearly anything goes.
+ it may contain "-" in its content. It should not contain newline
+ characters or "/"; otherwise nearly anything goes.
* The "-s" field is optional, and is the size of the content in bytes.
* The "-m" field is optional, and is the mtime of the file when it was
added to git-annex, expressed as seconds from the epoch.
This is currently only used by the WORM backend.
+* The "-S" and "-C" fields are only used for keys that are chunks
+ of some other key. "-S" is the size of the chunk, and "-c" is the chunk
+ number (starting at 1).
* Other fields could be added in the future, if needed.
-* Fields may appear, in any order (though always before the name field).
+
+git-annex always puts the fields in the order shown above when serializing
+a key. It can parse keys with the fields in other orders (although the name
+field must always come last).
The `git annex examinekey` command can be used to extract information from
a key.
diff --git a/doc/internals/lockdown/comment_1_caa8b378e8c35177083e6cc2f6937180._comment b/doc/internals/lockdown/comment_1_caa8b378e8c35177083e6cc2f6937180._comment
new file mode 100644
index 000000000..2260e2f80
--- /dev/null
+++ b/doc/internals/lockdown/comment_1_caa8b378e8c35177083e6cc2f6937180._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnLM6CIUo2loSFNTLPDdBgAEoz9ehP2hz8"
+ nickname="Duncan"
+ subject="Having the write bit not set can cause problems with automated usage (e.g. build systems)"
+ date="2014-12-02T23:16:57Z"
+ content="""
+I'm using a git-annex to store build artefacts on a remote bare repo. Some of these artefacts are used in subsequent builds, which clone the artefacts repo, and use 'git annex get' to retrieve the artefacts of interest.
+
+Unfortunately, I've had to add a little kludge along the following lines to my build script fragment:
+
+ git annex get ${file}
+ find .git/annex/objects -type d -exec chmod +w {} \;
+
+This is necessary because I need to ensure that the cloned git repo is able to be deleted at all times (I'm using yocto/openembedded and it may want to delete the clone for a variety of reasons).
+"""]]
diff --git a/doc/internals/lockdown/comment_2_7bf74adb5556b7fc74a94e751c5fd3d6._comment b/doc/internals/lockdown/comment_2_7bf74adb5556b7fc74a94e751c5fd3d6._comment
new file mode 100644
index 000000000..72d24a283
--- /dev/null
+++ b/doc/internals/lockdown/comment_2_7bf74adb5556b7fc74a94e751c5fd3d6._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm_YXzEdPHzbSGVwtmTR7g1BqDtTnIBB5s"
+ nickname="Matthias"
+ subject="File immutability"
+ date="2015-01-07T12:06:15Z"
+ content="""
+# setcap cap_linux_immutable+ep /usr/bin/git-annex
+
+After doing that, git-annex is able to make files immutable, so the additional directory is not needed any more.
+Even on file systems / in environments where that is not possible, in some situations file lookup speed is way more important than not being able to delete the target of a symlink.
+
+I have no idea how to code in Haskell, so if somebody else could add an appropriate always/never/only-when-necessary config option I'd be very happy, and my media server would not have any more hiccups when switching songs …
+"""]]
diff --git a/doc/metadata.mdwn b/doc/metadata.mdwn
index 9f3c314fa..f1f0ceab7 100644
--- a/doc/metadata.mdwn
+++ b/doc/metadata.mdwn
@@ -1,7 +1,7 @@
-git-annex allows you to store arbitrary metadata about files stored in the
-git-annex repository. The metadata is stored in the `git-annex` branch, and
-so is automatically kept in sync with the rest of git-annex's state, such
-as [[location_tracking]] information.
+git-annex allows you to store arbitrary metadata about the content of files
+stored in the git-annex repository. The metadata is stored in the
+`git-annex` branch, and so is automatically kept in sync with the rest of
+git-annex's state, such as [[location_tracking]] information.
Some of the things you can do with metadata include:
@@ -12,7 +12,7 @@ Some of the things you can do with metadata include:
or without particular metadata.
For example `git annex find --metadata tag=foo --or --metadata tag=bar`
* Using it in [[preferred_content]] expressions.
- For example "tag=important or not author=me"
+ For example "metadata=tag=important or not metadata=author=me"
Each file (actually the underlying key) can have any number of metadata
fields, which each can have any number of values. For example, to tag
@@ -21,7 +21,7 @@ applies to the file.
The field names are limited to alphanumerics (and `[_-.]`), and are case
insensitive. The metadata values can contain absolutely anything you
-like -- but you're recommended to keep it simple and reasonably short.
+like -- but you're recommended to keep it simple and [[reasonably short|forum/metadata_limits]]
Here are some metadata fields that git-annex has special support for:
diff --git a/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_2_341b567722797eb02bd96ffada431b0c._comment b/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_2_341b567722797eb02bd96ffada431b0c._comment
new file mode 100644
index 000000000..e155225e1
--- /dev/null
+++ b/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_2_341b567722797eb02bd96ffada431b0c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnx8kHW66N3BqmkVpgtXDlYMvr8TJ5VvfY"
+ nickname="Yaroslav"
+ subject="I wondered if there is any even simple fuse wrapper for git-annex?"
+ date="2014-12-16T16:34:06Z"
+ content="""
+sharebox seems aiming to achieve what assistant is aiming for (synchronization). In my usecase I wondered if there is a simple(r) FUSE wrapper for git-annex which would just 'annex get' any file which is requested (for reading).
+"""]]
diff --git a/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_3_d6f6e7181f30094339a49ab420bee380._comment b/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_3_d6f6e7181f30094339a49ab420bee380._comment
new file mode 100644
index 000000000..f32de2fba
--- /dev/null
+++ b/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_3_d6f6e7181f30094339a49ab420bee380._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="CandyAngel"
+ subject="comment 3"
+ date="2014-12-16T16:56:05Z"
+ content="""
+@Yaroslav: I made one of these while I was messing with FUSE but found I didn't use it much.
+
+If I can find it, I'll post it somewhere or if you really want it, I can just write a (much) better one!
+"""]]
diff --git a/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_4_ab0d45c5058595a71656035c962c1143._comment b/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_4_ab0d45c5058595a71656035c962c1143._comment
new file mode 100644
index 000000000..a527f9b02
--- /dev/null
+++ b/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_4_ab0d45c5058595a71656035c962c1143._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnx8kHW66N3BqmkVpgtXDlYMvr8TJ5VvfY"
+ nickname="Yaroslav"
+ subject="comment 4"
+ date="2014-12-16T20:42:28Z"
+ content="""
+what could I say to a \"much better one\" offer, besides \"GO AHEAD\" and \"Thank you in advance\"! :)
+
+I wonder though what joey thinks about possible utility of a basic fuse wrapper for annex, and possibly shipping it along?
+
+My primary use-case would be primarily oriented for testing, e.g. if I would like to run a (sub)collection of tests (e.g. on travis) which rely on having some data from annex available, now I would need either provide some project/language specific wrapping which would check if file is available or not and then fetch it. With FUSE I thought I could just do that transparently without requiring any per-project coding/setup. Similar use-case would be analysis of some large datasets, once again, without requiring pre-fetching them in entirety and/or piece-by-piece fetching.
+Another possible additional usecase/mode could also be -- expose only available files under FUSE. If easy to \"trigger\" it would help to provide that \"lean\" view I was blurbing about (https://github.com/datalad/datalad/issues/25) although it would be quite a suboptimal workaround (since if directory is heavily loaded with broken links, it would take a while for FUSE handler to first traverse the tree anyways)
+"""]]
diff --git a/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_5_b92045c91d92da7db794aed2c67dde0d._comment b/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_5_b92045c91d92da7db794aed2c67dde0d._comment
new file mode 100644
index 000000000..de3a2a8b1
--- /dev/null
+++ b/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_5_b92045c91d92da7db794aed2c67dde0d._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="CandyAngel"
+ subject="comment 5"
+ date="2014-12-18T09:26:17Z"
+ content="""
+Having the lean view would be easy to implement either as an option you pass when mounting or something you can toggle by touching a file ($MNT/.config/lean/{on,off}).
+
+Regarding fetching of files, how would you like it to behave? My previous one would return EBUSY while downloading a file and ENODATA if it wasn't available and couldn't be fetched. I could, for example, make unavailable files appear as normal files (containing text regarding the download state) until they are available, then they become symlinks. What would work best for you?
+"""]]
diff --git a/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_6_6f3b5d5a5781b3a570f46481dc2ebca2._comment b/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_6_6f3b5d5a5781b3a570f46481dc2ebca2._comment
new file mode 100644
index 000000000..f505b347d
--- /dev/null
+++ b/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_6_6f3b5d5a5781b3a570f46481dc2ebca2._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnx8kHW66N3BqmkVpgtXDlYMvr8TJ5VvfY"
+ nickname="Yaroslav"
+ subject="unavailable files"
+ date="2014-12-18T16:37:13Z"
+ content="""
+for my use cases the best would be if FUSE simply didn't return until file becomes available. Making an option to return immediately with EBUSY/ENODATA could also be generally useful but not in my case :-/
+I wonder if any timeout would kick in in some use-cases if it takes too long?
+"""]]
diff --git a/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_7_6202ae898f24b3e02bc343d0fd2ac35a._comment b/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_7_6202ae898f24b3e02bc343d0fd2ac35a._comment
new file mode 100644
index 000000000..127fe773c
--- /dev/null
+++ b/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_7_6202ae898f24b3e02bc343d0fd2ac35a._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="CandyAngel"
+ subject="comment 7"
+ date="2014-12-19T08:40:06Z"
+ content="""
+Okie dokie, I'll see what I can do.
+
+Can you give me an idea of the annex file properties (file size, count, files per directory, directory count) etc. please?
+"""]]
diff --git a/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_8_884a0b9571544a95fad55cb5fc5963d8._comment b/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_8_884a0b9571544a95fad55cb5fc5963d8._comment
new file mode 100644
index 000000000..3032f162d
--- /dev/null
+++ b/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_8_884a0b9571544a95fad55cb5fc5963d8._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnx8kHW66N3BqmkVpgtXDlYMvr8TJ5VvfY"
+ nickname="Yaroslav"
+ subject="typical repos"
+ date="2014-12-19T14:05:22Z"
+ content="""
+Thanks for doing it and asking for detail!!!
+Repositories will vary quite a bit. I am currently testing how big we could actually make them (see https://github.com/datalad/datalad/issues/17) ;)
+
+Meanwhile here are sample few available for git clone/testing:
+
+https://github.com/datalad/nih--videocast a good collection of heavyish video files
+http://psydata.ovgu.de/forrest_gump/.git/ a good single dataset with probably a somewhat typical amount of data
+http://data.pymvpa.org/datasets/haxby2001/.git/ relatively small dataset with typical data sizes
+"""]]
diff --git a/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_9_32b5d0fb9c328fbcd8105dfa31f032d3._comment b/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_9_32b5d0fb9c328fbcd8105dfa31f032d3._comment
new file mode 100644
index 000000000..a0239f342
--- /dev/null
+++ b/doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_9_32b5d0fb9c328fbcd8105dfa31f032d3._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 9"""
+ date="2015-01-05T20:38:40Z"
+ content="""
+My concern about using FUSE has always been that I don't much like it
+when open() hangs indefinitely, with no progress indication, and
+is either downloading some large file from the network or .. just hung.
+
+That doesn't strike me as a nice user interface in general,
+which is why I avoided using FUSE for the assistant.
+
+It might make sense in the batch use cases Yaroslav gave. If something
+nice is developed, I would not be against including it in git-annex.
+(Bonus if it's implemented in haskell.)
+"""]]
diff --git a/doc/news/version_4.20130827/comment_1_937cbaccf235d6d9118aacd49058bb4f._comment b/doc/news/version_4.20130827/comment_1_937cbaccf235d6d9118aacd49058bb4f._comment
deleted file mode 100644
index 293938867..000000000
--- a/doc/news/version_4.20130827/comment_1_937cbaccf235d6d9118aacd49058bb4f._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="http://sunny256.sunbase.org/"
- nickname="sunny256"
- subject="Missing from the downloads.kitenet.net annex"
- date="2013-08-29T18:05:38Z"
- content="""
-Great release, thanks a lot. It's missing from the annex at downloads.kitenet.net, though.
-
-Cheers,<br />
-Øyvind (sunny256)
-"""]]
diff --git a/doc/news/version_4.20130827/comment_2_faa5cf0645728b4ade850a691fa472db._comment b/doc/news/version_4.20130827/comment_2_faa5cf0645728b4ade850a691fa472db._comment
deleted file mode 100644
index 0002e8607..000000000
--- a/doc/news/version_4.20130827/comment_2_faa5cf0645728b4ade850a691fa472db._comment
+++ /dev/null
@@ -1,25 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.8.7"
- subject="comment 2"
- date="2013-08-29T18:26:00Z"
- content="""
-It seems to be there on downloads.kitenet.net. When I run `git log` in there I see commit 82de1ed1a354e389bc71a15af1a3e67b5bd56f23 which added the release to the annex, and all the files seem to be present. For example, git-annex-standalone-amd64.tar.gz is pointing at the key `SHA256E-s20143752--388c33138185fb2eb5fdb00bf2155a9168e5a76501216887ea1ffa7ada06b776.tar.gz`, which is right.
-
-<pre>
-joey@wren:~>wget http://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz
---2013-08-29 14:25:00-- http://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz
-Resolving downloads.kitenet.net (downloads.kitenet.net)... 2001:41c8:125:49::10, 80.68.85.49
-Connecting to downloads.kitenet.net (downloads.kitenet.net)|2001:41c8:125:49::10|:80... connected.
-HTTP request sent, awaiting response... 200 OK
-Length: 20143752 (19M) [application/x-gzip]
-Saving to: ‘git-annex-standalone-amd64.tar.gz’
-
-100%[======================================>] 20,143,752 48.9MB/s in 0.4s
-
-2013-08-29 14:25:01 (48.9 MB/s) - ‘git-annex-standalone-amd64.tar.gz’ saved [20143752/20143752]
-
-joey@wren:~>sha256sum git-annex-standalone-amd64.tar.gz
-388c33138185fb2eb5fdb00bf2155a9168e5a76501216887ea1ffa7ada06b776 git-annex-standalone-amd64.tar.gz
-</pre>
-"""]]
diff --git a/doc/news/version_4.20130827/comment_3_ad156d6199b525884114ff823d265bf7._comment b/doc/news/version_4.20130827/comment_3_ad156d6199b525884114ff823d265bf7._comment
deleted file mode 100644
index 538395f90..000000000
--- a/doc/news/version_4.20130827/comment_3_ad156d6199b525884114ff823d265bf7._comment
+++ /dev/null
@@ -1,39 +0,0 @@
-[[!comment format=mdwn
- username="http://sunny256.sunbase.org/"
- nickname="sunny256"
- subject="comment 3"
- date="2013-08-30T11:43:44Z"
- content="""
-Hm, commit 82de1ed1a3 doesn't exist here after git-annex sync. This is the output from another computer, running Linux Mint 15:
-
- $ ga sync
- commit
- ok
- pull linode
- ok
- pull kitenet
- WARNING: gnome-keyring:: couldn't connect to: /run/user/sunny/keyring-WSsS6N/pkcs11: No such file or directory
- ok
- push linode
- Everything up-to-date
- ok
- push kitenet
- WARNING: gnome-keyring:: couldn't connect to: /run/user/sunny/keyring-WSsS6N/pkcs11: No such file or directory
- WARNING: gnome-keyring:: couldn't connect to: /run/user/sunny/keyring-WSsS6N/pkcs11: No such file or directory
- error: Cannot access URL http://downloads.kitenet.net/.git/, return code 22
- fatal: git-http-push failed
- failed
- git-annex: sync: 1 failed
- $ git log -1
- commit e4d2f03d9b37b2fac9508bf755ff7619bf46590c (HEAD, linode/synced/master, linode/master, linode/HEAD, kitenet/synced/master, kitenet/master, synced/master, master)
- Author: Joey Hess <joey@kitenet.net>
- Date: 3 weeks ago
-
- update
- 2013-08-30 13:36:37 sunny@passp:~/src/other/annex/downloads.kitenet.net/git-annex (master u=)
- $ git log 82de1ed1a354e389bc71a15af1a3e67b5bd56f23
- fatal: bad object 82de1ed1a354e389bc71a15af1a3e67b5bd56f23
-
-There's some warnings from gnome-keyring and a failed push (sorry about that, happens automatically), but the fetch from kitenet seems to succeed.
-
-"""]]
diff --git a/doc/news/version_4.20130827/comment_4_877061eb24d9d9543cc9cd229906bd64._comment b/doc/news/version_4.20130827/comment_4_877061eb24d9d9543cc9cd229906bd64._comment
deleted file mode 100644
index 5828a36c7..000000000
--- a/doc/news/version_4.20130827/comment_4_877061eb24d9d9543cc9cd229906bd64._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://sunny256.sunbase.org/"
- nickname="sunny256"
- subject="comment 4"
- date="2013-08-30T11:49:20Z"
- content="""
-And some additional info, I'm using `http://downloads.kitenet.net/.git/` as the address to your annex. Maybe this repo is missing a `git update-server-info` in the `post-update` hook or something.
-"""]]
diff --git a/doc/news/version_4.20130827/comment_5_8991648dda991768e3a58477a4c3c923._comment b/doc/news/version_4.20130827/comment_5_8991648dda991768e3a58477a4c3c923._comment
deleted file mode 100644
index 55fa6d10a..000000000
--- a/doc/news/version_4.20130827/comment_5_8991648dda991768e3a58477a4c3c923._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.8.7"
- subject="sorry for delay.."
- date="2013-09-03T18:07:34Z"
- content="""
-That's weird.. I have a post-update hook that runs git-update-server-info, but I reproduced the problem, and manually running that fixed it.
-
-Guess I will need to keep an eye on this at the next release to see if it was a one-off problem..
-"""]]
diff --git a/doc/news/version_5.20140116/comment_1_a5e85a3258ae8a241674dda4172b3e94._comment b/doc/news/version_5.20140116/comment_1_a5e85a3258ae8a241674dda4172b3e94._comment
deleted file mode 100644
index 172753a76..000000000
--- a/doc/news/version_5.20140116/comment_1_a5e85a3258ae8a241674dda4172b3e94._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://launchpad.net/~maestro-alubia"
- nickname="maestro-alubia"
- subject="Sources?"
- date="2014-01-22T19:00:05Z"
- content="""
-Where can I find the sources tarball? It is not at the usual places http://hackage.haskell.org/package/git-annex or http://hdiff.luite.com/packages/archive/git-annex/
-"""]]
diff --git a/doc/news/version_5.20140116/comment_2_016ef01507edd6baa26c6c9a90f35ed7._comment b/doc/news/version_5.20140116/comment_2_016ef01507edd6baa26c6c9a90f35ed7._comment
deleted file mode 100644
index 07378711d..000000000
--- a/doc/news/version_5.20140116/comment_2_016ef01507edd6baa26c6c9a90f35ed7._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.249"
- subject="comment 2"
- date="2014-01-22T20:25:44Z"
- content="""
-Something seems to have prevented the upload getting onto hackage. I have re-run the upload in case that helps.
-
-But, you can always get the source by `git clone git://git-annex.branchable.com/` or see the install link in the sidebar.
-"""]]
diff --git a/doc/news/version_5.20140116/comment_3_e4b6899c3b12fc260806ba8d36df6158._comment b/doc/news/version_5.20140116/comment_3_e4b6899c3b12fc260806ba8d36df6158._comment
deleted file mode 100644
index a88367f29..000000000
--- a/doc/news/version_5.20140116/comment_3_e4b6899c3b12fc260806ba8d36df6158._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://launchpad.net/~maestro-alubia"
- nickname="maestro-alubia"
- subject="comment 3"
- date="2014-01-22T21:20:31Z"
- content="""
-Thanks, it worked! I needed the source tarball for an updated Gentoo ebuild.
-"""]]
diff --git a/doc/news/version_5.20140127/comment_1_776574c242235d9256da287048e38dc0._comment b/doc/news/version_5.20140127/comment_1_776574c242235d9256da287048e38dc0._comment
deleted file mode 100644
index da9672e19..000000000
--- a/doc/news/version_5.20140127/comment_1_776574c242235d9256da287048e38dc0._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="EskildHustvedt"
- ip="80.202.103.101"
- subject="comment 1"
- date="2014-01-28T19:48:27Z"
- content="""
-Could you kick the standalone builder? No standalone build for this release yet.
-"""]]
diff --git a/doc/news/version_5.20140127/comment_2_aea5d528f3e0fdc81d0ea83d65f48812._comment b/doc/news/version_5.20140127/comment_2_aea5d528f3e0fdc81d0ea83d65f48812._comment
deleted file mode 100644
index 88a884aa0..000000000
--- a/doc/news/version_5.20140127/comment_2_aea5d528f3e0fdc81d0ea83d65f48812._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.199"
- subject="comment 2"
- date="2014-01-28T21:51:32Z"
- content="""
-I forgot to update all the builds for this release, until just now.
-"""]]
diff --git a/doc/news/version_5.20140210.mdwn b/doc/news/version_5.20140210.mdwn
deleted file mode 100644
index 3049e9d47..000000000
--- a/doc/news/version_5.20140210.mdwn
+++ /dev/null
@@ -1,42 +0,0 @@
-git-annex 5.20140210 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * --in can now refer to files that were located in a repository at
- some past date. For example, --in="here@{yesterday}"
- * Fixed direct mode annexed content locking code, which is used to
- guard against recursive file drops.
- * This is the first beta-level release of the Windows port with important
- fixes (see below).
- (The webapp and assistant are still alpha-level on Windows.)
- * sync --content: Honor annex-ignore configuration.
- * sync: Don't try to sync with xmpp remotes, which are only currently
- supported when using the assistant.
- * sync --content: Re-pull from remotes after downloading content,
- since that can take a while and other changes may be pushed in the
- meantime.
- * sync --content: Reuse smart copy code from copy command, including
- handling and repairing out of date location tracking info.
- Closes: #[737480](http://bugs.debian.org/737480)
- * sync --content: Drop files from remotes that don't want them after
- getting them.
- * sync: Fix bug in automatic merge conflict resolution code when used
- on a filesystem not supporting symlinks, which resulted in it losing
- track of the symlink bit of annexed files.
- * Added ways to configure rsync options to be used only when uploading
- or downloading from a remote. Useful to eg limit upload bandwidth.
- * Fix initremote with encryption=pubkey to work with S3, glacier, webdav,
- and external special remotes.
- * Avoid building with DAV 0.6 which is badly broken (see #737902).
- * Fix dropping of unused keys with spaces in their name.
- * Fix build on platforms not supporting the webapp.
- * Document in man page that sshcaching uses ssh ControlMaster.
- Closes: #[737476](http://bugs.debian.org/737476)
- * Windows: It's now safe to run multiple git-annex processes concurrently
- on Windows; the lock files have been sorted out.
- * Windows: Avoid using unix-compat's rename, which refuses to rename
- directories.
- * Windows: Fix deletion of repositories by test suite and webapp.
- * Windows: Test suite 100% passes again.
- * Windows: Fix bug in symlink calculation code.
- * Windows: Fix handling of absolute unix-style git repository paths.
- * Android: Avoid crashing when unable to set file mode for ssh config file
- due to Android filesystem horribleness."""]] \ No newline at end of file
diff --git a/doc/news/version_5.20140210/comment_1_97065912d6a204c7387d7de5e48de420._comment b/doc/news/version_5.20140210/comment_1_97065912d6a204c7387d7de5e48de420._comment
deleted file mode 100644
index fed533c60..000000000
--- a/doc/news/version_5.20140210/comment_1_97065912d6a204c7387d7de5e48de420._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="rasmus"
- ip="94.34.129.197"
- subject="Bug?"
- date="2014-02-11T00:36:45Z"
- content="""
-In this build git annex gets confused with my username of rsync backends. My username is annex@server but it keeps asking about rasmus@server (commandline and web interface). Should I open a bug report about this? Or is this a new feature that I haven't configured properly?
-"""]]
diff --git a/doc/news/version_5.20140210/comment_2_e589892996ca7cca3febdbf0f2cc379b._comment b/doc/news/version_5.20140210/comment_2_e589892996ca7cca3febdbf0f2cc379b._comment
deleted file mode 100644
index 74e5f0745..000000000
--- a/doc/news/version_5.20140210/comment_2_e589892996ca7cca3febdbf0f2cc379b._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.172"
- subject="comment 2"
- date="2014-02-11T00:48:35Z"
- content="""
-I think you need to check your remote is configured properly before filing a bug report. But, there has been no change that is intended to lead to such a behavior.
-"""]]
diff --git a/doc/news/version_5.20140221.mdwn b/doc/news/version_5.20140221.mdwn
deleted file mode 100644
index 50f85496e..000000000
--- a/doc/news/version_5.20140221.mdwn
+++ /dev/null
@@ -1,28 +0,0 @@
-git-annex 5.20140221 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * metadata: New command that can attach metadata to files.
- * --metadata can be used to limit commands to acting on files
- that have particular metadata.
- * Preferred content expressions can use metadata=field=value
- to limit them to acting on files that have particular metadata.
- * view: New command that creates and checks out a branch that provides
- a structured view of selected metadata.
- * vfilter, vadd, vpop, vcycle: New commands for operating within views.
- * pre-commit: Update metadata when committing changes to locations
- of annexed files within a view.
- * Add progress display for transfers to/from external special remotes.
- * unused: Fix to actually detect unused keys when in direct mode.
- * fsck: When run with --all or --unused, while .gitattributes
- annex.numcopies cannot be honored since it's operating on keys
- instead of files, make it honor the global numcopies setting,
- and the annex.numcopies git config setting.
- * trust, untrust, semitrust, dead: Warn when the trust level is
- overridden in .git/config.
- * glacier: Do not try to run glacier value create when an existing glacier
- remote is enabled.
- * fsck: Refuse to do anything if more than one of --incremental, --more,
- and --incremental-schedule are given, since it's not clear which option
- should win.
- * Windows webapp: Can set up box.com, Amazon S3, and rsync.net remotes
- * Windows webapp: Can create repos on removable drives.
- * Windows: Ensure HOME is set, as needed by bundled cygwin utilities."""]] \ No newline at end of file
diff --git a/doc/news/version_5.20140221/comment_1_d50bff4ee026db3397333e8ded7c5940._comment b/doc/news/version_5.20140221/comment_1_d50bff4ee026db3397333e8ded7c5940._comment
deleted file mode 100644
index 7b28c905f..000000000
--- a/doc/news/version_5.20140221/comment_1_d50bff4ee026db3397333e8ded7c5940._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnWvnTWY6LrcPB4BzYEBn5mRTpNhg5EtEg"
- nickname="Bence"
- subject="Metadata for the win! "
- date="2014-02-26T07:03:32Z"
- content="""
-Awesome. Finally one can store the public url of a file which is in a special remote. Think about Google Drive: a file uploaded there can be shared from the command line if it's public url is known (and stored in metadata when uploaded). The flickr special remote could also make benefit of this: a file doesn't have to be searched to locate in flickr if the ids are stored in metadata.
-"""]]
diff --git a/doc/news/version_5.20140227.mdwn b/doc/news/version_5.20140227.mdwn
deleted file mode 100644
index 57f0c9a53..000000000
--- a/doc/news/version_5.20140227.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-git-annex 5.20140227 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * metadata: Field names limited to alphanumerics and a few whitelisted
- punctuation characters to avoid issues with views, etc.
- * metadata: Field names are now case insensative.
- * When constructing views, metadata is available about the location of the
- file in the view's reference branch. Allows incorporating parts of the
- directory hierarchy in a view.
- For example `git annex view tag=* podcasts/=*` makes a view in the form
- tag/showname.
- * --metadata field=value can now use globs to match, and matches
- case insensatively, the same as git annex view field=value does.
- * annex.genmetadata can be set to make git-annex automatically set
- metadata (year and month) when adding files.
- * Make annex.web-options be used in several places that call curl.
- * Fix handling of rsync remote urls containing a username,
- including rsync.net.
- * Preserve metadata when staging a new version of an annexed file.
- * metadata: Support --json
- * webapp: Fix creation of box.com and Amazon S3 and Glacier
- repositories, broken in 5.20140221.
- * webdav: When built with DAV 0.6.0, use the new DAV monad to avoid
- locking files, which is not needed by git-annex's use of webdav, and
- does not work on Box.com.
- * webdav: Fix path separator bug when used on Windows.
- * repair: Optimise unpacking of pack files, and avoid repeated error
- messages about corrupt pack files.
- * Add build dep on regex-compat to fix build on mipsel, which lacks
- regex-tdfa.
- * Disable test suite on sparc, which is missing optparse-applicative.
- * Put non-object tmp files in .git/annex/misctmp, leaving .git/annex/tmp
- for only partially transferred objects."""]] \ No newline at end of file
diff --git a/doc/news/version_5.20140306.mdwn b/doc/news/version_5.20140306.mdwn
deleted file mode 100644
index ef302495b..000000000
--- a/doc/news/version_5.20140306.mdwn
+++ /dev/null
@@ -1,34 +0,0 @@
-git-annex 5.20140306 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * sync: Fix bug in direct mode that caused a file that was not
- checked into git to be deleted when there was a conflicting
- merge with a remote.
- * webapp: Now supports HTTPS.
- * webapp: No longer supports a port specified after --listen, since
- it was buggy, and that use case is better supported by setting up HTTPS.
- * annex.listen can be configured, instead of using --listen
- * annex.startupscan can be set to false to disable the assistant's startup
- scan.
- * Probe for quvi version at run time.
- * webapp: Filter out from Switch Repository list any
- repositories listed in autostart file that don't have a
- git directory anymore. (Or are bare)
- * webapp: Refuse to start in a bare git repository.
- * assistant --autostart: Refuse to start in a bare git repository.
- * webapp: Don't list the public repository group when editing a
- git repository; it only makes sense for special remotes.
- * view, vfilter: Add support for filtering tags and values out of a view,
- using !tag and field!=value.
- * vadd: Allow listing multiple desired values for a field.
- * view: Refuse to enter a view when no branch is currently checked out.
- * metadata: To only set a field when it's not already got a value, use
- -s field?=value
- * Run .git/hooks/pre-commit-annex whenever a commit is made.
- * sync: Automatically resolve merge conflict between and annexed file
- and a regular git file.
- * glacier: Pass --region to glacier checkpresent.
- * webdav: When built with a new enough haskell DAV (0.6), disable
- the http response timeout, which was only 5 seconds.
- * webapp: Include no-pty in ssh authorized\_keys lines.
- * assistant: Smarter log file rotation, which takes free disk space
- into account."""]] \ No newline at end of file
diff --git a/doc/news/version_5.20141219.mdwn b/doc/news/version_5.20141219.mdwn
new file mode 100644
index 000000000..74d228c52
--- /dev/null
+++ b/doc/news/version_5.20141219.mdwn
@@ -0,0 +1,20 @@
+git-annex 5.20141219 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * Webapp: When adding a new box.com remote, use the new style chunking.
+ Thanks, Jon Ander Peñalba.
+ * External special remote protocol now includes commands for setting
+ and getting the urls associated with a key.
+ * Urls can now be claimed by remotes. This will allow creating,
+ for example, a external special remote that handles magnet: and
+ *.torrent urls.
+ * Use wget -q --show-progress for less verbose wget output,
+ when built with wget 1.16.
+ * Added bittorrent special remote.
+ * addurl behavior change: When downloading an url ending in .torrent,
+ it will download files from bittorrent, instead of the old behavior
+ of adding the torrent file to the repository.
+ * Added Recommends on aria2.
+ * When possible, build with the haskell torrent library for parsing
+ torrent files. As a fallback, can instead use btshowmetainfo from
+ bittornado | bittorrent.
+ * Fix build with -f-S3."""]] \ No newline at end of file
diff --git a/doc/news/version_5.20141231.mdwn b/doc/news/version_5.20141231.mdwn
new file mode 100644
index 000000000..ee385fda3
--- /dev/null
+++ b/doc/news/version_5.20141231.mdwn
@@ -0,0 +1,14 @@
+git-annex 5.20141231 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * vicfg: Avoid crashing on badly encoded config data.
+ * Work around statfs() overflow on some XFS systems.
+ * sync: Now supports remote groups, the same way git remote update does.
+ * setpresentkey: A new plumbing-level command.
+ * Run shutdown cleanup actions even if there were failures processing
+ the command. Among other fixes, this means that addurl will stage
+ added files even if adding one of the urls fails.
+ * bittorrent: Fix locking problem when using addurl file://
+ * Windows: Fix local rsync filepath munging (fixes 26 test suite failures).
+ * Windows: Got the rsync special remote working.
+ * Windows: Fix handling of views of filenames containing '%'
+ * OSX: Switched away from deprecated statfs64 interface."""]] \ No newline at end of file
diff --git a/doc/news/version_5.20150113.mdwn b/doc/news/version_5.20150113.mdwn
new file mode 100644
index 000000000..b1730a93e
--- /dev/null
+++ b/doc/news/version_5.20150113.mdwn
@@ -0,0 +1,25 @@
+git-annex 5.20150113 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * unlock: Don't allow unlocking files that have never been committed to git
+ before, to avoid an intractable problem that prevents the pre-commit
+ hook from telling if such a file is intended to be an annexed file or not.
+ * Avoid re-checksumming when migrating from hash to hashE backend.
+ Closes: #[774494](http://bugs.debian.org/774494)
+ * Fix build with process 1.2.1.0.
+ * Android: Provide a version built with -fPIE -pie to support Android 5.0.
+ * sync: Fix an edge case where syncing in a bare repository would try to
+ merge and so fail.
+ * Check git version at runtime, rather than assuming it will be the same
+ as the git version used at build time when running git-checkattr and
+ git-branch remove.
+ * Switch to using relative paths to the git repository.
+ - This allows the git repository to be moved while git-annex is running in
+ it, with fewer problems.
+ - On Windows, this avoids some of the problems with the absurdly small
+ MAX\_PATH of 260 bytes. In particular, git-annex repositories should
+ work in deeper/longer directory structures than before.
+ * Generate shorter keys for WORM and URL, avoiding keys that are longer
+ than used for SHA256, so as to not break on systems like Windows that
+ have very small maximum path length limits.
+ * Bugfix: A file named HEAD in the work tree could confuse some git commands
+ run by git-annex."""]] \ No newline at end of file
diff --git a/doc/news/version_5.20150113/comment_1_e1da6b6d532d8eb08373347de3a4f7ec._comment b/doc/news/version_5.20150113/comment_1_e1da6b6d532d8eb08373347de3a4f7ec._comment
new file mode 100644
index 000000000..952865509
--- /dev/null
+++ b/doc/news/version_5.20150113/comment_1_e1da6b6d532d8eb08373347de3a4f7ec._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="anarcat"
+ subject="comment 1"
+ date="2015-01-13T18:09:52Z"
+ content="""
+> * sync: Fix an edge case where syncing in a bare repository would try to merge and so fail.
+
+i think i just saw that bug yesterday, glad to see it fixed so quickly!
+"""]]
diff --git a/doc/news/version_5.20150205.mdwn b/doc/news/version_5.20150205.mdwn
new file mode 100644
index 000000000..778705dbc
--- /dev/null
+++ b/doc/news/version_5.20150205.mdwn
@@ -0,0 +1,34 @@
+git-annex 5.20150205 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * info: Can now display info about a given uuid.
+ * Added to remote/uuid info: Count of the number of keys present
+ on the remote, and their size. This is rather expensive to calculate,
+ so comes last and --fast will disable it.
+ * info remote: Include the date of the last sync with the remote.
+ * sync: Added --message/-m option like git commit.
+ * remotedaemon: Fix problem that could prevent ssh connections being
+ made after two LOSTNET messages were received in a row (perhaps due to
+ two different network interfaces being brought down).
+ * Fix build failure when wget is not installed.
+ * Fix wording of message displayed when unable to get a file that
+ is available in untrusted repositories.
+ * addurl: When a Content-Disposition header suggests a filename to use,
+ addurl will consider using it, if it's reasonable and doesn't conflict
+ with an existing file. (--file overrides this)
+ * Fix default repository description created by git annex init,
+ which got broken by the relative path changes in the last release.
+ * init: Repository tuning parameters can now be passed when initializing a
+ repository for the first time. For details, see
+ http://git-annex.branchable.com/tuning/
+ * merge: Refuse to merge changes from a git-annex branch of a repo
+ that has been tuned in incompatible ways.
+ * Support annex.tune.objecthash1, annex.tune.objecthashlower, and
+ annex.tune.branchhash1.
+ * Remove support for building without cryptohash.
+ * Added MD5 and MD5E backends.
+ * assistant: Fix local pairing when ssh pubkey comment contains spaces.
+ * Avoid using fileSize which maxes out at just 2 gb on Windows.
+ Instead, use hFileSize, which doesn't have a bounded size.
+ Fixes support for files &gt; 2 gb on Windows.
+ * Windows: Fix running of the pre-commit-annex hook.
+ * Windows: Fix S3 special remote; need to call withSocketsDo. Thanks, Trent."""]] \ No newline at end of file
diff --git a/doc/not.mdwn b/doc/not.mdwn
index 3b7cdc1cf..baf43c2b8 100644
--- a/doc/not.mdwn
+++ b/doc/not.mdwn
@@ -5,7 +5,7 @@
system. For a backup system that uses git and that git-annex supports
storing data in, see [[special_remotes/bup]].
-* git-annex is not a filesystem or DropBox clone. However, the git-annex
+* git-annex is not a filesystem or Dropbox clone. However, the git-annex
[[assistant]] is addressing some of the same needs in its own unique ways.
(There is also a FUSE filesystem built on top of git-annex, called
[ShareBox](https://github.com/chmduquesne/sharebox-fs).)
diff --git a/doc/not/comment_14_837e3699014b73e8f2bd2a668eea9eef._comment b/doc/not/comment_14_837e3699014b73e8f2bd2a668eea9eef._comment
new file mode 100644
index 000000000..01eb17b86
--- /dev/null
+++ b/doc/not/comment_14_837e3699014b73e8f2bd2a668eea9eef._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmhufs6QGCQXnUEc6qrCcQIZTomUDKNeAQ"
+ nickname="Jeff"
+ subject="Git annex in a strange direct with .git/annex/objects mode"
+ date="2014-04-21T21:03:24Z"
+ content="""
+I'm doing something perhaps unreasonable and weird, and I'm wondering if there's a better way.
+
+I'm running a wget -mbc of a particular web site. It replicates down to a tree.
+Then I'm ingesting the content into git annex via the normal 'git annex add' sequence.
+
+Later, when I'm going to update my replica of the website, I am running a 'git annex unlock' on the whole tree (90 gig in this case), and then running the 'wget -mbc ; git annex add' command sequence again.
+
+Is there any mechanism to convince git-annex to scan the file, and ingest (copy) it into objects if it is new content, while leaving the original files unlocked? This would give me the ability to avoid the 'git annex unlock' copy operation, which is lengthy.
+
+I'm aware this is inherently space inefficient.
+
+I'm sure there's some other problem with this idea that I'm missing.
+
+Thanks.
+
+
+"""]]
diff --git a/doc/not/comment_15_ac7396ca125abb80a42f9aaaf61a6ab4._comment b/doc/not/comment_15_ac7396ca125abb80a42f9aaaf61a6ab4._comment
new file mode 100644
index 000000000..369acad22
--- /dev/null
+++ b/doc/not/comment_15_ac7396ca125abb80a42f9aaaf61a6ab4._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 15"
+ date="2014-05-16T18:59:47Z"
+ content="""
+@Jeff, why did you post that comment here? Please use the [[forum]] for questions.
+
+(You may find it useful to use direct mode, or `git annex import --skip-duplicates` or something.)
+"""]]
diff --git a/doc/preferred_content.mdwn b/doc/preferred_content.mdwn
index af76a0e7b..31e614919 100644
--- a/doc/preferred_content.mdwn
+++ b/doc/preferred_content.mdwn
@@ -1,7 +1,7 @@
git-annex tries to ensure that the configured number of [[copies]] of your
data always exist, and leaves it up to you to use commands like `git annex
get` and `git annex drop` to move the content to the repositories you want
-to contain it. But sometimes, it can be good to have more fine-grained
+to contain it. But often, it can be good to have more fine-grained
control over which content is wanted by which repositories. Configuring
this allows the git-annex assistant as well as
`git annex get --auto`, `git annex drop --auto`, `git annex sync --content`,
@@ -33,9 +33,9 @@ If it doesn't, the repository wants to drop its content
To check at the command line which files are matched by preferred content
settings, you can use the --want-get and --want-drop options.
-For example, "git annex find --want-get --not --in ." will find all the
-files that "git annex get --auto" will want to get, and "git annex find
---want-drop --in ." will find all the files that "git annex drop --auto"
+For example, `git annex find --want-get --not --in .` will find all the
+files that `git annex get --auto` will want to get, and `git annex find
+--want-drop --in .` will find all the files that `git annex drop --auto`
will want to drop.
The expressions are very similar to the matching options documented
@@ -125,8 +125,8 @@ But, you can do more complicated things, for example:
The "groupwanted" keyword can be used to refer to a preferred content
expression that is associated with a group. This is like the "standard"
-keyword, but you can set up groupwanted preferred content expressions
-using `git annex vicfg`.
+keyword, but you can configure the preferred content expressions
+using `git annex groupwanted`.
Note that when writing a groupwanted preferred content expression,
you can use all of the keywords listed above, including "standard".
@@ -134,7 +134,8 @@ you can use all of the keywords listed above, including "standard".
For example, to make a variant of the standard client preferred content
expression that does not want files in the "out" directory, you
-could set `groupwanted client = standard and exclude=out/*`.
+could run: `git annex groupwanted client "standard and exclude=out/*"`
+
Then repositories that are in the client group and have their preferred
content expression set to "groupwanted" will use that, while
other client repositories that have their preferred content expression
@@ -144,6 +145,50 @@ Or, you could make a new group, with your own custom preferred content
expression tuned for your needs, and every repository you put in this
group and make its preferred content be "groupwanted" will use it.
+For example, the archive group only wants to archive 1 copy of each file,
+spread amoung every repository in the group.
+Here's how to configure a group named redundantarchive, that instead
+wants to contain 3 copies of each file:
+
+ git annex groupwanted redundantarchive "not (copies=redundantarchive:3)"
+ for repo in foo bar baz; do
+ git annex group $repo redundantarchive
+ git annex wanted $repo groupwanted
+ done
+
+### difference: metadata matching
+
+This:
+
+ git annex get --metadata tag=done
+
+becomes
+
+ metadata=tag=done
+
+### difference: unused
+
+The --unused option makes git-annex operate on every key that `git annex
+unused` has determined to be unused. The corresponding `unused` keyword
+in a preferred content expression also matches those keys.
+
+However, the latter doesn't make git-annex consider those keys. So
+when git-annex is only checking preferred content expressions against files
+in the repository (which are obviously used), `unused` in a preferred
+content expression won't match anything.
+
+So when is `unused` useful in a preferred content expression?
+
+Using `git annex sync --content --all` will ensure that all keys, including
+unused ones, are examined and the preferred content expressions followed.
+Similarly, `git annex sync --content --unused` will only look at the unused
+keys.
+
+The git-annex assistant periodically scans for unused files, and
+moves them to some repository whose preferred content expression
+matches "unused". (Or, if annex.expireunused is set, it may just delete
+them.)
+
## upgrades
It's important that all clones of a repository can understand one-another's
diff --git a/doc/preferred_content/standard_groups.mdwn b/doc/preferred_content/standard_groups.mdwn
index dd73b669f..80f512d87 100644
--- a/doc/preferred_content/standard_groups.mdwn
+++ b/doc/preferred_content/standard_groups.mdwn
@@ -1,19 +1,28 @@
git-annex comes with some built-in [[preferred_content]] settings, that can
be used with repositories that are in special groups. To make a
repository use one of these, just set its preferred content expression
-to "standard", and put it in one of these groups.
+to "standard", and put it in one of these groups. For example, to put the current
+repository in the manual group and use this group to control the preferred
+content, run
+
+ git annex wanted . standard
+ git annex group . manual
+
+In the webapp, just edit the repository and select the group.
(Note that most of these standard expressions also make the repository
want to get any content that is only currently available on untrusted and
dead repositories. So if an untrusted repository gets connected,
any repository that can will back it up.)
+The following standard groups are available:
+
### client
All content is wanted, unless it's for a file in a "archive" directory,
which has reached an archive repository, or is unused.
-`(((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or roughlylackingcopies=1`
+`(((exclude=*/archive/* and exclude=archive/*) or (not (copies=archive:1 or copies=smallarchive:1))) and not unused) or approxlackingcopies=1`
### transfer
@@ -63,7 +72,7 @@ All content is wanted, unless it's already been archived somewhere else.
`(not (copies=archive:1 or copies=smallarchive:1)) or approxlackingcopies=1`
Note that if you want to archive multiple copies (not a bad idea!),
-you can set `groupwanted archive` to a version of
+you can set `git-annex groupwanted archive` to a version of
the above preferred content expression with a larger number of copies
than 1. Then make the archive repositories have a preferred
content expression of "groupwanted" in order to use your modified
diff --git a/doc/preferred_content/standard_groups/comment_1_026e47e425d06c4b2580238b3187a379._comment b/doc/preferred_content/standard_groups/comment_1_026e47e425d06c4b2580238b3187a379._comment
new file mode 100644
index 000000000..9a06d3791
--- /dev/null
+++ b/doc/preferred_content/standard_groups/comment_1_026e47e425d06c4b2580238b3187a379._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="http://mildred.fr/"
+ ip="2a01:e35:2f7b:8350:290:f5ff:feea:5546"
+ subject="difference between source and unwanted"
+ date="2014-04-02T22:25:26Z"
+ content="""
+What's the difference between `source` and `unwanted` ?
+
+- `source` (`not copies=1`) will keep files that have less than 1 copies, meaning zero copies, meaning no files.
+- `unwanted` will exclude all files.
+
+Both gets to the same results, all files are moved elsewhere. Right?
+"""]]
diff --git a/doc/preferred_content/standard_groups/comment_2_460bae34ba7c05357318a202b2932d25._comment b/doc/preferred_content/standard_groups/comment_2_460bae34ba7c05357318a202b2932d25._comment
new file mode 100644
index 000000000..c877a9222
--- /dev/null
+++ b/doc/preferred_content/standard_groups/comment_2_460bae34ba7c05357318a202b2932d25._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 2"
+ date="2014-04-02T22:44:14Z"
+ content="""
+@Mildred, I think both preferred content expressions will do the same thing. There is, however a difference between the groups: The webapp notices when all files have gone from an unwanted repository, and will help the user finish deleting the repository.
+"""]]
diff --git a/doc/privacy.mdwn b/doc/privacy.mdwn
index 190379f20..3ac4b1eec 100644
--- a/doc/privacy.mdwn
+++ b/doc/privacy.mdwn
@@ -32,7 +32,7 @@ remote.
## bug reporting
-When you file a [[bug]] report on git-annex, you may need to provide
+When you file a [[bug|bugs]] report on git-annex, you may need to provide
debugging output or details about your repository. In general, git-annex
does not sanitize `--debug` output at all, so it may include the names of
files or other repository details. You should review any debug or other
diff --git a/doc/publicrepos.mdwn b/doc/publicrepos.mdwn
index 77950a62e..d52633628 100644
--- a/doc/publicrepos.mdwn
+++ b/doc/publicrepos.mdwn
@@ -4,14 +4,26 @@ the public repositories that you can clone to try out git-annex.
* [downloads.kitenet.net](http://downloads.kitenet.net/)
`git clone https://downloads.kitenet.net/.git/`
Various downloads of things produced by Joey Hess, including git-annex
- builds.
-* [debconf-share](https://downloads.kitenet.net/.git/)
+ builds and videos.
+
+* debconf-share
`git clone http://annex.debconf.org/debconf-share/.git/`
[DebConf](http://debconf.org/) Media, photos, videos, etc.
+
* [conference-proceedings](https://github.com/RichiH/conference_proceedings)
`git clone https://github.com/RichiH/conference_proceedings.git`
A growing collection of videos of technology conferences.
Submit a pull request to add your own!
+* [ocharles's papers](https://github.com/ocharles/papers)
+ Lots of CS papers read by [Oliver](http://ocharles.org.uk/blog/).
+
+* [MRI brain scan data](http://studyforrest.org/pages/access.html)
+ `git clone http://psydata.ovgu.de/forrest_gump/.git studyforrest`
+ High-resolution, ultra-highfield fMRI dataset on auditory perception.
+
+* [rejuvyesh's papers](https://github.com/rejuvyesh/papers)
+ Quite a few AI papers read by [rejuvyesh](http://rejuvyesh.com)
+
This is a wiki -- add your own public repository to the list!
See [[tips/centralized_git_repository_tutorial]].
diff --git a/doc/related_software.mdwn b/doc/related_software.mdwn
index 1b5579628..f2b8e601b 100644
--- a/doc/related_software.mdwn
+++ b/doc/related_software.mdwn
@@ -11,4 +11,11 @@ designed to interoperate with it.
utility, with a `-A` switch that enables git-annex support.
* Emacs Org mode can auto-commit attached files to git-annex.
* [git annex darktable integration](https://github.com/xxv/darktable-git-annex)
-* [Nautilus file manager ingegration](https://gist.github.com/ion1/9660286)
+* [Magit](http://github.com/magit/magit), an Emacs mode for Git, has
+ [an extension](https://github.com/magit/magit-annex) for git annex.
+* [DataLad](http://datalad.org/) uses git-annex to provide access to
+ scientific data available from various sources.
+* The [Baobáxia](https://github.com/RedeMocambos/baobaxia) project
+ built by the Brazilian [Mocambos network](http://www.mocambos.net/)
+ is [using git-annex to connect isolated communities](http://www.modspil.dk/itpolitik/baob_xia.html).
+ Repositories sync over satellite internet and/or sneakernet.
diff --git a/doc/required_content.mdwn b/doc/required_content.mdwn
new file mode 100644
index 000000000..91c5614a8
--- /dev/null
+++ b/doc/required_content.mdwn
@@ -0,0 +1,17 @@
+Required content settings can be configured to do more complicated
+things than just setting the required number of [[copies]] of your data.
+For example, you could require that data be archived in at least two
+archival repositories, and also require that one copy be stored offsite.
+
+The format of required content expressions is the same as
+[[preferred_content]] expressions.
+
+Required content settings can be edited using `git annex vicfg`.
+Each repository can have its own settings, and other repositories will
+try to honor those settings when interacting with it.
+
+While [[preferred_content]] expresses a preference, it can be overridden
+by simply using `git annex drop`. On the other hand, required content
+settings are enforced; `git annex drop` will refuse to drop a file if
+doing so would violate its required content settings.
+(Although even this can be overridden using `--force`).
diff --git a/doc/scalability.mdwn b/doc/scalability.mdwn
index 9a4ff95ef..cdc148e2f 100644
--- a/doc/scalability.mdwn
+++ b/doc/scalability.mdwn
@@ -13,11 +13,6 @@ git-annex is designed for scalability. The key points are:
but git-annex is designed so that it does not need to hold all
the details about your repository in memory.
- The one exception is that [[todo/git-annex_unused_eats_memory]],
- because it *does* need to hold the whole repo state in memory. But
- that is still considered a bug, and hoped to be solved one day.
- Luckily, that command is not often used.
-
* Many files can be managed. The limiting factor is git's own
limitations in scaling to repositories with a lot of files, and as git
improves this will improve. Scaling to hundreds of thousands of files
diff --git a/doc/scalability/comment_1_a6656ae397277719d67d0953a28fe1d8._comment b/doc/scalability/comment_1_a6656ae397277719d67d0953a28fe1d8._comment
new file mode 100644
index 000000000..5c0038e80
--- /dev/null
+++ b/doc/scalability/comment_1_a6656ae397277719d67d0953a28fe1d8._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmiPEySoakXDQ4OUAmC9neEOZW17W1KvlU"
+ nickname="Francesco Saverio"
+ subject="Default value of annex.queuesize"
+ date="2015-01-14T15:45:46Z"
+ content="""
+What is the default value of :
+
+ annex.queuesize
+
+Without knowing the default value it is impossible to increase it :) thank you
+"""]]
diff --git a/doc/scalability/comment_2_71c7c3aa97284602d0f64c11a98d1782._comment b/doc/scalability/comment_2_71c7c3aa97284602d0f64c11a98d1782._comment
new file mode 100644
index 000000000..a6ca05c2b
--- /dev/null
+++ b/doc/scalability/comment_2_71c7c3aa97284602d0f64c11a98d1782._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2015-01-15T18:56:42Z"
+ content="""
+annex.queuesize default is documented on the man page. Currently 10240
+commands.
+"""]]
diff --git a/doc/special_remotes.mdwn b/doc/special_remotes.mdwn
index e3004d2cf..e6c1e6da5 100644
--- a/doc/special_remotes.mdwn
+++ b/doc/special_remotes.mdwn
@@ -10,12 +10,14 @@ They cannot be used by other git commands though.
* [[S3]] (Amazon S3, and other compatible services)
* [[Amazon_Glacier|glacier]]
* [[bup]]
+* [[ddar]]
* [[gcrypt]] (encrypted git repositories!)
* [[directory]]
* [[rsync]]
* [[webdav]]
* [[tahoe]]
* [[web]]
+* [[bittorrent]]
* [[xmpp]]
* [[hook]]
@@ -39,6 +41,7 @@ for using git-annex with various services:
* [[Usenet|forum/nntp__47__usenet special remote]]
* [chef-vault](https://github.com/3ofcoins/knife-annex/)
* [hubiC](https://github.com/Schnouki/git-annex-remote-hubic)
+* [pCloud](https://github.com/tochev/git-annex-remote-pcloud)
Want to add support for something else? [[Write your own!|external]]
@@ -79,3 +82,21 @@ on special remotes, instead use `git annex unused --from`. Example:
(To remove unwanted data: git-annex dropunused --from mys3 NUMBER)
$ git annex dropunused --from mys3 1
dropunused 12948 (from mys3...) ok
+
+## Testing special remotes
+
+To make sure that a special remote is working correctly, you can use the
+`git annex testremote` command. This expects you to have set up the remote
+as usual, and it then runs a lot of tests, using random data. It's
+particularly useful to test new implementations of special remotes.
+
+By default it will upload and download files of around 1MiB to the remote
+it tests; the `--size` parameter can adjust it test using smaller files.
+
+It's safe to use this command even when you're already storing data in a
+remote; it won't touch your existing files stored on the remote.
+
+For most remotes, it also won't bloat the remote with any data, since
+it cleans up the stuff it uploads. However, the bup, ddar, and tahoe
+special remotes don't support removal of uploaded files, so be careful
+with those.
diff --git a/doc/special_remotes/S3.mdwn b/doc/special_remotes/S3.mdwn
index 5291a4eb6..59af40e0b 100644
--- a/doc/special_remotes/S3.mdwn
+++ b/doc/special_remotes/S3.mdwn
@@ -1,8 +1,9 @@
This special remote type stores file contents in a bucket in Amazon S3
or a similar service.
-See [[tips/using_Amazon_S3]] and
-[[tips/Internet_Archive_via_S3]] for usage examples.
+See [[tips/using_Amazon_S3]],
+[[tips/Internet_Archive_via_S3]], and [[tips/using_Google_Cloud_Storage]]
+for usage examples.
## configuration
@@ -20,6 +21,9 @@ the S3 remote.
* `keyid` - Specifies the gpg key to use for [[encryption]].
+* `chunk` - Enables [[chunking]] when storing large files.
+ `chunk=1MiB` is a good starting point for chunking.
+
* `embedcreds` - Optional. Set to "yes" embed the login credentials inside
the git repository, which allows other clones to also access them. This is
the default when gpg encryption is enabled; the credentials are stored
@@ -30,7 +34,8 @@ the S3 remote.
embedcreds without gpg encryption.
* `datacenter` - Defaults to "US". Other values include "EU",
- "us-west-1", and "ap-southeast-1".
+ "us-west-1", "us-west-2", "ap-southeast-1", "ap-southeast-2", and
+ "sa-east-1".
* `storageclass` - Default is "STANDARD". If you have configured git-annex
to preserve multiple [[copies]], consider setting this to "REDUCED_REDUNDANCY"
@@ -43,11 +48,24 @@ the S3 remote.
so by default, a bucket name is chosen based on the remote name
and UUID. This can be specified to pick a bucket name.
+* `partsize` - Amazon S3 only accepts uploads up to a certian file size,
+ and storing larger files requires a multipart upload process.
+
+ Setting `partsize=1GiB` is recommended for Amazon S3 when not using
+ chunking; this will cause multipart uploads to be done using parts
+ up to 1GiB in size. Note that setting partsize to less than 100MiB
+ will cause Amazon S3 to reject uploads.
+
+ This is not enabled by default, since other S3 implementations may
+ not support multipart uploads or have different limits,
+ but can be enabled or changed at any time.
+ time.
+
* `fileprefix` - By default, git-annex places files in a tree rooted at the
top of the S3 bucket. When this is set, it's prefixed to the filenames
used. For example, you could set it to "foo/" in one special remote,
and to "bar/" in another special remote, and both special remotes could
then use the same bucket.
-* `x-amz-*` are passed through as http headers when storing keys
+* `x-amz-meta-*` are passed through as http headers when storing keys
in S3.
diff --git a/doc/special_remotes/bittorrent.mdwn b/doc/special_remotes/bittorrent.mdwn
new file mode 100644
index 000000000..437bb23a2
--- /dev/null
+++ b/doc/special_remotes/bittorrent.mdwn
@@ -0,0 +1,31 @@
+Similar to the [[web]] special remote, git-annex can use BitTorrent as
+a source for files that are added to the git-annex repository.
+
+It supports both `.torrent` files, and `magnet:` links. When you run `git
+annex addurl` with either of these, it will download the contents of the
+torrent and add it to the git annex repository.
+
+See [[tips/using_the_web_as_a_special_remote]] for usage examples.
+
+git-annex uses [aria2](http://aria2.sourceforge.net/) to download torrents.
+
+If git-annex is not built using the haskell torrent library to parse
+torrents, it also needs the needs the `btshowmetainfo` program, from
+either bittornado or the original BitTorrent client.
+
+## notes
+
+Currently git-annex only supports downloading content from a torrent;
+it cannot upload or remove content.
+
+Multi-file torrents are supported; to handle them, `git annex addurl`
+will add a directory containing all the files from the torrent.
+
+It's hard to say if a torrent is healthy enough to let a file be downloaded
+from it, and harder to predict if a torrent will stay healthy. So,
+git-annex takes a cautious approach and when dropping a file, won't
+treat this special remote as one of the required [[copies]]. It's probably
+a good idea to configure git-annex to fully distrust this remote, by
+running `git annex untrust bittorrent`
+
+This feature is available only from version `5.20141219`.
diff --git a/doc/special_remotes/bup.mdwn b/doc/special_remotes/bup.mdwn
index f2d465e77..ca5056917 100644
--- a/doc/special_remotes/bup.mdwn
+++ b/doc/special_remotes/bup.mdwn
@@ -19,16 +19,17 @@ for example; or clone bup's git repository to further back it up.
These parameters can be passed to `git annex initremote` to configure bup:
-* `encryption` - One of "none", "hybrid", "shared", or "pubkey".
- See [[encryption]].
-
-* `keyid` - Specifies the gpg key to use for [[encryption]].
-
* `buprepo` - Required. This is passed to `bup` as the `--remote`
to use to store data. To create the repository,`bup init` will be run.
Example: "buprepo=example.com:/big/mybup" or "buprepo=/big/mybup"
(To use the default `~/.bup` repository on the local host, specify "buprepo=")
+* `encryption` - One of "none", "hybrid", "shared", or "pubkey".
+ See [[encryption]]. Note that using encryption will prevent
+ de-duplication of content stored in the buprepo.
+
+* `keyid` - Specifies the gpg key to use for [[encryption]].
+
Options to pass to `bup split` when sending content to bup can also
be specified, by using `git config annex.bup-split-options`. This
can be used to, for example, limit its bandwidth.
diff --git a/doc/special_remotes/bup/comment_12_fca579678edde073716f099c767767e1._comment b/doc/special_remotes/bup/comment_12_fca579678edde073716f099c767767e1._comment
new file mode 100644
index 000000000..0babee600
--- /dev/null
+++ b/doc/special_remotes/bup/comment_12_fca579678edde073716f099c767767e1._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkEYZEqLf3Aj_FGV7S0FvsMplmGqqb555M"
+ nickname="Sergiusz"
+ subject="bup-join local-arch/2014-12-03-235617 "
+ date="2014-12-04T19:38:07Z"
+ content="""
+How can I restore the previous commit from bup archives created with bup-split? Yes, I know I can use bup-join local-arch~1 git notation, but I would like to use bup-join local-arch/2014-12-03-235617 (bup-ls local-arch results) ...but this method does not work ...
+
+s.
+"""]]
diff --git a/doc/special_remotes/comment_21_5c11e69c28b9ed4cbe238a36c0839a47._comment b/doc/special_remotes/comment_21_5c11e69c28b9ed4cbe238a36c0839a47._comment
deleted file mode 100644
index 1645e03e6..000000000
--- a/doc/special_remotes/comment_21_5c11e69c28b9ed4cbe238a36c0839a47._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.64"
- subject="comment 21"
- date="2013-11-24T15:58:30Z"
- content="""
-@Bence the closest I have is some tests of particular special remotes inside Test.hs. The shell equivilant of that code is:
-
-[[!format sh \"\"\"
-set -e
-git annex copy file --to remote # tests store
-git annex drop file # tests checkpresent when remote has file
-git annex move file --from remote # tests retrieve and remove
-\"\"\"]]
-"""]]
diff --git a/doc/special_remotes/comment_22_308afc586b86c66bbb3437d63864d9cb._comment b/doc/special_remotes/comment_22_308afc586b86c66bbb3437d63864d9cb._comment
new file mode 100644
index 000000000..c642f3975
--- /dev/null
+++ b/doc/special_remotes/comment_22_308afc586b86c66bbb3437d63864d9cb._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmp1ThsNNAbSn46ju-gwFELfStlhl8usJo"
+ nickname="donkeyicydragon"
+ subject="Enhancing special remotes as backup spaces"
+ date="2014-04-22T21:08:49Z"
+ content="""
+Hi Joey,
+
+I am thinking about using google drive as an encrypted backup for my important files. However, I fear that if all my git annex repositories are unrecoverable that the encrypted data on the special remote will not help me much. Assuming I have backed up my gpg key I still get a bunch of decrypted files but the folder structure is lost. Would it be possible to implement something like a safety feature that also uploads an (encrypted) tar of all symlinks (pointing to the respective encrypted files) of the (current/or master-branch) git working tree?
+
+I am almost sure this is already implementable using hooks however I could not find information on which types of hooks are available. I am looking for one that is triggered once after all copy/move operations to a special remote are finished. Can you point me in the right direction?
+
+Marek
+
+
+"""]]
diff --git a/doc/special_remotes/comment_23_0f5440e0e54cf7ac2a68b1ba115b0930._comment b/doc/special_remotes/comment_23_0f5440e0e54cf7ac2a68b1ba115b0930._comment
new file mode 100644
index 000000000..6ec99abc9
--- /dev/null
+++ b/doc/special_remotes/comment_23_0f5440e0e54cf7ac2a68b1ba115b0930._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 23"
+ date="2014-05-16T19:11:00Z"
+ content="""
+@donkeyicydragon one way to accomplish that would be to just tar up `.git` -- excluding `.git/annex/objects` and add that to git-annex like any other file. You could make a git post-commit hook that does that, but that seems overboard.
+
+Or, you could just make a git clone of your repo to a local removable drive, and use that as a local backup.
+"""]]
diff --git a/doc/special_remotes/ddar.mdwn b/doc/special_remotes/ddar.mdwn
new file mode 100644
index 000000000..8de86e2c7
--- /dev/null
+++ b/doc/special_remotes/ddar.mdwn
@@ -0,0 +1,40 @@
+This special remote type stores file contents in a
+[ddar](https://github.com/basak/ddar) repository. This provides easy
+de-duplication when you use git-annex to manage many files that are similar.
+
+Unlike bup, ddar uses its own storage format, which allows for both creation
+and deletion of de-deduplicated files. In addition to using local storage, ddar
+archives can be remote, providing that ddar is installed on the remote machine
+and ssh is available to it.
+
+See [[walkthrough/using_ddar]] for usage examples.
+
+## encryption
+
+Encryption is nominally supported, but is not useful. Since effective
+encryption necessarily obfuscates file contents, similar areas across different
+files are no longer visible to ddar and cannot be de-duplicated.
+
+## compression
+
+The same caveat with encryption also generally applies to compression, since
+file compression changes file contents such that similar regions across files
+no longer appear similar. An exception is `gzip --rsyncable`, which is
+specifically designed to work around this issue. This is the only compression
+mechanism with which de-duplication remains effective.
+
+## configuration
+
+These parameters can be passed to `git annex initremote` to configure ddar:
+
+* `encryption` - One of "none", "hybrid", "shared", or "pubkey".
+ See [[encryption]]. However, note that encryption renders all de-duplication
+ineffective.
+
+* `keyid` - Specifies the gpg key to use for [[encryption]].
+
+* `ddarrepo` - Required. This is passed to `ddar` as the path to the ddar
+ archive to use. If it doesn't exist, the ddar repository will be created
+ automatically when a file is first copied to it. To use a remote ddar
+ repository, use a colon (`:`) to separate the hostname from the remote path.
+ Example: "ddarrepo=example.com:/big/myddar" or "ddarrepo=/big/myddar"
diff --git a/doc/special_remotes/directory.mdwn b/doc/special_remotes/directory.mdwn
index b79cf7544..6279024ec 100644
--- a/doc/special_remotes/directory.mdwn
+++ b/doc/special_remotes/directory.mdwn
@@ -25,13 +25,11 @@ remote:
* `keyid` - Specifies the gpg key to use for [[encryption]].
-* `chunksize` - Avoid storing files larger than the specified size in the
- directory. For use on directories on mount points that have file size
- limitations. The default is to never chunk files.
- The value can use specified using any commonly used units.
- Example: `chunksize=100 megabytes`
- Note that enabling chunking on an existing remote with non-chunked
- files is not recommended.
+* `chunk` - Enables [[chunking]] when storing large files.
+
+* `chunksize` - Deprecated version of chunk parameter above.
+ Do not use for new remotes. It is not safe to change the chunksize
+ setting of an existing remote.
Setup example:
diff --git a/doc/special_remotes/external.mdwn b/doc/special_remotes/external.mdwn
index d96999693..010f2a17b 100644
--- a/doc/special_remotes/external.mdwn
+++ b/doc/special_remotes/external.mdwn
@@ -14,14 +14,18 @@ It's not hard!
* Install it in PATH.
* When the user runs `git annex initremote foo type=external externaltype=$bar`,
it will use your program.
+* See [[design/external_special_remote_protocol]] for what the program
+ needs to do. There's an example at the end of this page.
* If things don't seem to work, pass `--debug` and you'll see, amoung other
things, a transcript of git-annex's communication with your program.
* If you build a new special remote, please add it to the list
of [[special_remotes]].
+Here's an example of using an external special remote to add torrent
+support to git-annex: [[external/git-annex-remote-torrent]]
+
Here's a simple shell script example, which can easily be adapted
to run whatever commands you need. Or better, re-written in some better
-language of your choice. See [[design/external_special_remote_protocol]]
-for the details.
+language of your choice.
[[!inline pages="special_remotes/external/example.sh" feeds=no]]
diff --git a/doc/special_remotes/external/example.sh b/doc/special_remotes/external/example.sh
index 5152ccc28..8fed9f4aa 100755
--- a/doc/special_remotes/external/example.sh
+++ b/doc/special_remotes/external/example.sh
@@ -128,14 +128,25 @@ while read line; do
STORE)
# Store the file to a location
# based on the key.
- # XXX when possible, send PROGRESS
+ # XXX when at all possible, send PROGRESS
calclocation "$key"
mkdir -p "$(dirname "$LOC")"
- if runcmd cp "$file" "$LOC"; then
+ # Store in temp file first, so that
+ # CHECKPRESENT does not see it
+ # until it is all stored.
+ mkdir -p "$mydirectory/tmp"
+ tmp="$mydirectory/tmp/$key"
+ if runcmd cp "$file" "$tmp" \
+ && runcmd mv -f "$tmp" "$LOC"; then
echo TRANSFER-SUCCESS STORE "$key"
else
echo TRANSFER-FAILURE STORE "$key"
fi
+
+ mkdir -p "$(dirname "$LOC")"
+ # The file may already exist, so
+ # make sure we can overwrite it.
+ chmod 644 "$LOC" 2>/dev/null || true
;;
RETRIEVE)
# Retrieve from a location based on
diff --git a/doc/special_remotes/external/git-annex-remote-torrent b/doc/special_remotes/external/git-annex-remote-torrent
new file mode 100755
index 000000000..4df1f8154
--- /dev/null
+++ b/doc/special_remotes/external/git-annex-remote-torrent
@@ -0,0 +1,203 @@
+#!/bin/sh
+# This is a demo git-annex external special remote program,
+# which adds basic torrent download support to git-annex.
+#
+# Uses aria2c. Also needs the original bittorrent (or bittornado) for the
+# btshowmetainfo command.
+#
+# Install in PATH as git-annex-remote-torrent
+#
+# Enable remote by running:
+# git annex initremote torrent type=external encryption=none externaltype=torrent
+# git annex untrust torrent
+#
+# Copyright 2014 Joey Hess; licenced under the GNU GPL version 3 or higher.
+
+set -e
+
+# This program speaks a line-based protocol on stdin and stdout.
+# When running any commands, their stdout should be redirected to stderr
+# (or /dev/null) to avoid messing up the protocol.
+runcmd () {
+ "$@" >&2
+}
+
+# Gets a VALUE response and stores it in $RET
+getvalue () {
+ read resp
+ # Tricky POSIX shell code to split first word of the resp,
+ # preserving all other whitespace
+ case "${resp%% *}" in
+ VALUE)
+ RET="$(echo "$resp" | sed 's/^VALUE \?//')"
+ ;;
+ *)
+ RET=""
+ ;;
+ esac
+}
+
+# Get a list of all known torrent urls for a key,
+# storing it in a temp file.
+geturls () {
+ key="$1"
+ tmp="$2"
+
+ echo GETURLS "$key"
+ getvalue
+ while [ -n "$RET" ]; do
+ if istorrent "$RET"; then
+ echo "$RET" >> "$tmp"
+ fi
+ getvalue
+ done
+}
+
+# Does the url end in .torrent?
+# Note that we use #N on the url to indicate which file
+# from a multi-file torrent is wanted.
+istorrent () {
+ echo "$1" | egrep -q "\.torrent(#.*)?$"
+}
+
+# Download a single file from a torrent.
+#
+# Note: Does not support resuming interrupted transfers.
+# Note: Does not feed progress info back to git-annex, and since
+# the destination file is only populated at the end, git-annex will fail
+# to display a progress bar for this download.
+downloadtorrent () {
+ torrent="$1"
+ n="$2"
+ dest="$3"
+
+ tmpdir="$(mktemp -d)"
+
+ # aria2c will create part of the directory structure
+ # contained in the torrent. It may download parts of other files
+ # in addition to the one we asked for. So, we need to find
+ # out the filename we want, and look for it.
+ wantdir="$(btshowmetainfo "$torrent" | grep "^directory name: " | sed "s/^directory name: //" || true)"
+ if [ -n "$wantdir" ]; then
+ wantfile="$(btshowmetainfo "$torrent" | grep '^ ' | sed 's/^ //' | head -n "$n" | tail -n 1 | sed 's/ ([0-9]*)$//')"
+ if ! runcmd aria2c --select-file="$n" "$torrent" -d "$tmpdir"; then
+ false
+ fi
+ else
+ wantfile="$(btshowmetainfo "$torrent" | egrep "^file name.*: " | sed "s/^file name.*: //")"
+ wantdir=.
+ if ! runcmd aria2c "$torrent" -d "$tmpdir"; then
+ false
+ fi
+ fi
+ if [ -e "$tmpdir/$wantdir/$wantfile" ]; then
+ mv "$tmpdir/$wantdir/$wantfile" "$dest"
+ rm -rf "$tmpdir"
+ else
+ rm -rf "$tmpdir"
+ false
+ fi
+}
+
+# This has to come first, to get the protocol started.
+echo VERSION 1
+
+while read line; do
+ set -- $line
+ case "$1" in
+ INITREMOTE)
+ echo INITREMOTE-SUCCESS
+ ;;
+ PREPARE)
+ echo PREPARE-SUCCESS
+ ;;
+ CLAIMURL)
+ url="$2"
+ if istorrent "$url"; then
+ echo CLAIMURL-SUCCESS
+ else
+ echo CLAIMURL-FAILURE
+ fi
+ ;;
+ CHECKURL)
+ url="$2"
+ # List contents of torrent.
+ tmp=$(mktemp)
+ if ! runcmd curl -o "$tmp" "$url"; then
+ echo CHECKURL-FAILURE
+ else
+ oldIFS="$IFS"
+ IFS="
+"
+ printf "CHECKURL-MULTI"
+ n=0
+ for l in $(btshowmetainfo "$tmp" | grep '^ ' | sed 's/^ //'); do
+ # Note that the file cannot contain spaces.
+ file="$(echo "$l" | sed 's/ ([0-9]*)$//' | sed 's/ /_/g')"
+ size="$(echo "$l" | sed 's/.* (\([0-9]*\))$/\1/')"
+ n=$(expr $n + 1)
+ printf " $url#$n $size $file"
+ done
+ if [ "$n" = 0 ]; then
+ file="$(btshowmetainfo "$tmp" | egrep "^file name.*: " | sed "s/^file name.*: //")"
+ size="$(btshowmetainfo "$tmp" | egrep "^file size.*: " | sed "s/^file size.*: \([0-9]*\).*/\1/")"
+ printf " $url $size $file"
+ fi
+ printf "\n"
+ IFS="$oldIFS"
+ fi
+ rm -f "$tmp"
+ ;;
+ TRANSFER)
+ key="$3"
+ file="$4"
+ case "$2" in
+ STORE)
+ echo TRANSFER-FAILURE STORE "$key" "upload not supported"
+ ;;
+ RETRIEVE)
+ urltmp=$(mktemp)
+ geturls "$key" "$urltmp"
+ url="$(head "$urltmp")" || true
+ rm -f "$urltmp"
+ if [ -z "$url" ]; then
+ echo TRANSFER-FAILURE RETRIEVE "$key" "no known torrent urls for this key"
+ else
+ tmp=$(mktemp)
+ if ! runcmd curl -o "$tmp" "$url"; then
+ echo TRANSFER-FAILURE RETRIEVE "$key" "failed downloading torrent file from $url"
+ else
+ filenum="$(echo "$url" | sed 's/(.*#\(\d*\)/\1/')"
+ if downloadtorrent "$tmp" "$filenum" "$file"; then
+ echo TRANSFER-SUCCESS RETRIEVE "$key"
+ else
+ echo TRANSFER-FAILURE RETRIEVE "$key" "failed to download torrent contents from $url"
+ fi
+ fi
+ rm -f "$tmp"
+ fi
+ ;;
+ esac
+ ;;
+ CHECKPRESENT)
+ key="$2"
+ # Let's just assume that torrents are never present
+ # for simplicity.
+ echo CHECKPRESENT-UNKNOWN "$key" "cannot reliably check torrent status"
+ ;;
+ REMOVE)
+ key="$2"
+ # Remove all torrent urls for the key.
+ tmp=$(mktemp)
+ geturls "$key" "$tmp"
+ for url in $(cat "$tmp"); do
+ echo SETURLMISSING "$key" "$url"
+ done
+ rm -f "$tmp"
+ echo REMOVE-SUCCESS "$key"
+ ;;
+ *)
+ echo UNSUPPORTED-REQUEST
+ ;;
+ esac
+done
diff --git a/doc/special_remotes/gcrypt.mdwn b/doc/special_remotes/gcrypt.mdwn
index ac98c43bb..d5f3f7b5b 100644
--- a/doc/special_remotes/gcrypt.mdwn
+++ b/doc/special_remotes/gcrypt.mdwn
@@ -13,7 +13,7 @@ These parameters can be passed to `git annex initremote` to configure
gcrypt:
* `encryption` - One of "none", "hybrid", "shared", or "pubkey".
- See [[encryption]].
+ Required. See [[encryption]].
* `keyid` - Specifies the gpg key to use for encryption of both the files
git-annex stores in the repository, as well as to encrypt the git
@@ -24,6 +24,8 @@ gcrypt:
for gcrypt to use. This repository should be either empty, or an existing
gcrypt repositry.
+* `chunk` - Enables [[chunking]] when storing large files.
+
* `shellescape` - See [[rsync]] for the details of this option.
## notes
@@ -43,3 +45,8 @@ way git-remote-gcrypt encrypts the git repository, you will need to somehow
force it to re-push everything again, so that the encrypted repository can
be decrypted by the added keys. Probably this can be done by setting
`GCRYPT_FULL_REPACK` and doing a forced push of branches.
+
+Recent versions of git-annex configure `remote.<name>`gcrypt-publish-participants` when
+setting up a gcrypt repository. This is done to avoid unncessary gpg
+passphrase prompts, but it does publish the gpg keyids that can decrypt the
+repository. Unset it if you need to obscure that.
diff --git a/doc/special_remotes/glacier.mdwn b/doc/special_remotes/glacier.mdwn
index b55b9adbb..fe784c453 100644
--- a/doc/special_remotes/glacier.mdwn
+++ b/doc/special_remotes/glacier.mdwn
@@ -6,7 +6,7 @@ installed.
The unusual thing about Amazon Glacier is the multiple-hour delay it takes
to retrieve information out of Glacier. To deal with this, commands like
"git-annex get" request Glacier start the retrieval process, and will fail
-due to the data not yet being available. You can then wait appriximately
+due to the data not yet being available. You can then wait approximately
four hours, re-run the same command, and this time, it will actually
download the data.
diff --git a/doc/special_remotes/glacier/comment_8_a04bb5f27c1a7cfffe881903f973dbec._comment b/doc/special_remotes/glacier/comment_8_a04bb5f27c1a7cfffe881903f973dbec._comment
new file mode 100644
index 000000000..4fc831959
--- /dev/null
+++ b/doc/special_remotes/glacier/comment_8_a04bb5f27c1a7cfffe881903f973dbec._comment
@@ -0,0 +1,24 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlhaXbLZQ5uQ6fM2kV0n8bj6IwZjx2CLeM"
+ nickname="Shane"
+ subject="Annex can't find Glacier remote"
+ date="2014-06-26T05:50:38Z"
+ content="""
+I'm setting up git-annex with glacier-cli for the first time. I have installed git-annex via Yum and glacier-cli according to the instructions on Github. The `glacier` command is in my path. I did not set up hooks with Git annex as it appears that using hooks for glacier is no longer required.
+
+Here is my version information for git-annex:
+
+ $ git-annex version
+ git-annex version: 3.20120523
+ local repository version: 3
+ default repository version: 3
+ supported repository versions: 3
+ upgrade supported from repository versions: 0 1 2
+
+When I attempt to add my Glacier remote, here is what I see:
+
+ $ git annex initremote glacier type=glacier keyid=ABCDEFG
+ git-annex: Unknown remote type glacier
+
+Is there something else I need to do in order to correctly install Glacier integration with git-annex? I'm having trouble finding up-to-date information that describes the installation process.
+"""]]
diff --git a/doc/special_remotes/glacier/comment_9_89c4506e079c299fd098d0fe746d032a._comment b/doc/special_remotes/glacier/comment_9_89c4506e079c299fd098d0fe746d032a._comment
new file mode 100644
index 000000000..ae8c27ee2
--- /dev/null
+++ b/doc/special_remotes/glacier/comment_9_89c4506e079c299fd098d0fe746d032a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="that is an ancient version of git-annex, Shane"
+ date="2014-07-02T17:11:24Z"
+ content="""
+The first git-annex release to support glacier without using hooks was 3.20121126.
+"""]]
diff --git a/doc/special_remotes/hook.mdwn b/doc/special_remotes/hook.mdwn
index 8cf31ed02..0bb76d98a 100644
--- a/doc/special_remotes/hook.mdwn
+++ b/doc/special_remotes/hook.mdwn
@@ -36,6 +36,8 @@ These parameters can be passed to `git annex initremote`:
* `keyid` - Specifies the gpg key to use for [[encryption]].
+* `chunk` - Enables [[chunking]] when storing large files.
+
## hooks
Each type of hook remote is specified by a collection of hook commands.
diff --git a/doc/special_remotes/rsync.mdwn b/doc/special_remotes/rsync.mdwn
index b2a9d23f5..2271cbc2a 100644
--- a/doc/special_remotes/rsync.mdwn
+++ b/doc/special_remotes/rsync.mdwn
@@ -2,26 +2,26 @@ This special remote type rsyncs file contents to somewhere else.
Setup example:
- # git annex initremote myrsync type=rsync rsyncurl=rsync://rsync.example.com/myrsync keyid=joey@kitenet.net
+ # git annex initremote myrsync type=rsync rsyncurl=rsync://rsync.example.com/myrsync keyid=id@joeyh.name encryption=shared
# git annex describe myrsync "rsync server"
Or for using rsync over SSH
- # git annex initremote myrsync type=rsync rsyncurl=ssh.example.com:/myrsync keyid=joey@kitenet.net
+ # git annex initremote myrsync type=rsync rsyncurl=ssh.example.com:/myrsync keyid=id@joeyh.name encryption=shared
# git annex describe myrsync "rsync server"
## configuration
These parameters can be passed to `git annex initremote` to configure rsync:
+* `rsyncurl` - Required. This is the url or `hostname:/directory` to
+ pass to rsync to tell it where to store content.
+
* `encryption` - One of "none", "hybrid", "shared", or "pubkey".
See [[encryption]].
* `keyid` - Specifies the gpg key to use for [[encryption]].
-* `rsyncurl` - Required. This is the url or `hostname:/directory` to
- pass to rsync to tell it where to store content.
-
* `shellescape` - Optional. Set to "no" to avoid shell escaping normally
done when using rsync over ssh. That escaping is needed with typical
setups, but not with some hosting providers that do not expose rsynced
@@ -30,6 +30,10 @@ These parameters can be passed to `git annex initremote` to configure rsync:
quote (`'`) character. If that happens, you can run enableremote
setting shellescape=no.
+* `chunk` - Enables [[chunking]] when storing large files.
+ This is typically not a win for rsync, so no need to enable it.
+ But, it makes this interoperate with the [[directory]] special remote.
+
The `annex-rsync-options` git configuration setting can be used to pass
parameters to rsync.
diff --git a/doc/special_remotes/tahoe.mdwn b/doc/special_remotes/tahoe.mdwn
index afe8c11da..df1ca620f 100644
--- a/doc/special_remotes/tahoe.mdwn
+++ b/doc/special_remotes/tahoe.mdwn
@@ -22,8 +22,12 @@ daemon as needed.
These parameters can be passed to `git annex initremote` to configure
the tahoe remote.
+* `shared-convergence-secret` - Optional. Can be useful to set to
+ allow tahoe to deduplicate information. By default, a new
+ shared-convergence-secret is created for each tahoe remote.
+
* `embedcreds` - Optional. Set to "yes" embed the tahoe credentials
- (specifically the introducer furl and shared-convergence-secret)
+ (specifically the introducer-furl and shared-convergence-secret)
inside the git repository, which allows other clones to also use them
in order to access the tahoe grid.
diff --git a/doc/special_remotes/webdav.mdwn b/doc/special_remotes/webdav.mdwn
index 251075b09..100de8c20 100644
--- a/doc/special_remotes/webdav.mdwn
+++ b/doc/special_remotes/webdav.mdwn
@@ -29,14 +29,12 @@ the webdav remote.
be created as needed. Use of a https URL is strongly
encouraged, since HTTP basic authentication is used.
-* `chunksize` - Avoid storing files larger than the specified size in
- WebDAV. For use when the WebDAV server has file size
- limitations. The default is to never chunk files.
- The value can use specified using any commonly used units.
- Example: `chunksize=75 megabytes`
- Note that enabling chunking on an existing remote with non-chunked
- files is not recommended.
+* `chunk` - Enables [[chunking]] when storing large files.
+
+* `chunksize` - Deprecated version of chunk parameter above.
+ Do not use for new remotes. It is not safe to change the chunksize
+ setting of an existing remote.
Setup example:
- # WEBDAV_USERNAME=joey@kitenet.net WEBDAV_PASSWORD=xxxxxxx git annex initremote box.com type=webdav url=https://www.box.com/dav/git-annex chunksize=75mb keyid=joey@kitenet.net
+ # WEBDAV_USERNAME=id@joeyh.name WEBDAV_PASSWORD=xxxxxxx git annex initremote box.com type=webdav url=https://dav.box.com/dav/git-annex chunk=10mb keyid=id@joeyh.name
diff --git a/doc/special_remotes/webdav/comment_10_2c087a132c2203ac20636800bf73dfa7._comment b/doc/special_remotes/webdav/comment_10_2c087a132c2203ac20636800bf73dfa7._comment
new file mode 100644
index 000000000..48f89ca41
--- /dev/null
+++ b/doc/special_remotes/webdav/comment_10_2c087a132c2203ac20636800bf73dfa7._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnq-RfkVpFN15SWvQ2lpSGAi0XpNQuLxKM"
+ nickname="Yuval"
+ subject="re: Change Password"
+ date="2014-05-04T19:09:55Z"
+ content="""
+I have Carl's problem as well. Changed box.com's password and now things are crazy.
+"""]]
diff --git a/doc/special_remotes/webdav/comment_11_cde4fccaf551ba1eab8235ebf6654316._comment b/doc/special_remotes/webdav/comment_11_cde4fccaf551ba1eab8235ebf6654316._comment
new file mode 100644
index 000000000..267fc3580
--- /dev/null
+++ b/doc/special_remotes/webdav/comment_11_cde4fccaf551ba1eab8235ebf6654316._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 11"
+ date="2014-05-16T18:19:21Z"
+ content="""
+You can change the webdav password by running:
+
+WEBDAV_USERNAME=whatever WEBDAV_PASSWORD=newpassword git annex enableremote $remotename
+"""]]
diff --git a/doc/special_remotes/webdav/comment_12_76423262fceeced32ab18fa38ed53bdb._comment b/doc/special_remotes/webdav/comment_12_76423262fceeced32ab18fa38ed53bdb._comment
new file mode 100644
index 000000000..3d15fc0fb
--- /dev/null
+++ b/doc/special_remotes/webdav/comment_12_76423262fceeced32ab18fa38ed53bdb._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnmF_9CAtfqdZkC4e-_dCX-rK5bqh4RWkw"
+ nickname="Carl"
+ subject="comment 12"
+ date="2014-05-17T20:47:00Z"
+ content="""
+I tried it, but I do have som troubles. Changing password seemed to have worked. At least I do think it did say OK. Any further action generates the following response:
+
+$ git annex fsck --from box.com3 Literatur/Science/Papers/Modén/2006.pdf
+
+fsck Literatur/Science/Papers/Modén/2006.pdf (gpg) (checking box.com3...) (StatusCodeException (Status {statusCode = 401, statusMessage = \"Unauthorized\"}) [(\"Server\",\"nginx\"),(\"Date\",\"Sat, 17 May 2014 19:04:51 GMT\"),(\"Content-Type\",\"application/xml; charset=utf-8\"),(\"Content-Length\",\"235\"),(\"Connection\",\"keep-alive\"),(\"Vary\",\"Host\"),(\"WWW-Authenticate\",\"Basic realm=\\"dav.box.com\\"\"),(\"X-Response-Body-Start\",\"<?xml version=\\"1.0\\" encoding=\\"utf-8\\"?>\n<d:error xmlns:d=\\"DAV:\\" xmlns:s=\\"http://sabredav.org/ns\\">\n <s:exception>Sabre_DAV_Exception_NotAuthenticated</s:exception>\n <s:message>Username or password does not match</s:message>\n</d:error>\n\")] (CJ {expose = []})) failed
+git-annex: fsck: 1 failed
+
+It seems it is not available to use the correct password. I tried to use initremote and create a new remote, and this works. In the end no data is lost, as three copies out of my four are still there. I will keep my old remote around for some time if there is any sort of errorfinding that can be done.
+"""]]
diff --git a/doc/special_remotes/webdav/comment_14_2390020fa7daac8a6d3e8b713bd3b8e7._comment b/doc/special_remotes/webdav/comment_14_2390020fa7daac8a6d3e8b713bd3b8e7._comment
new file mode 100644
index 000000000..b6f624a62
--- /dev/null
+++ b/doc/special_remotes/webdav/comment_14_2390020fa7daac8a6d3e8b713bd3b8e7._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmZilYULa6CDEGfuagoDlesyakBgnf-dF8"
+ nickname="Maarten"
+ subject="Box.com and unknown CA?"
+ date="2014-05-21T04:07:36Z"
+ content="""
+When trying to enable box.com for jabber sharing, I get:
+
+ WebDAV failed to write file: TlsException (HandshakeFailed (Error_Protocol (\"certificate has unknown CA\",True,UnknownCa))): user error
+
+How can I debug this situation?
+"""]]
diff --git a/doc/special_remotes/webdav/comment_14_45e3b7094d0611b2e082be352f74151a._comment b/doc/special_remotes/webdav/comment_14_45e3b7094d0611b2e082be352f74151a._comment
new file mode 100644
index 000000000..c7c2aafb0
--- /dev/null
+++ b/doc/special_remotes/webdav/comment_14_45e3b7094d0611b2e082be352f74151a._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="https://olivier.mehani.name/"
+ nickname="olivier-mehani"
+ subject="comment 14"
+ date="2014-11-05T22:57:21Z"
+ content="""
+I have a similar problem to Maarten's, with some potential differences:
+* The WebDAV server is actually an ownCloud 7 instance;
+* The WebDAV server's SSL cert is issued by CAcert (whose root keys are otherwise installed on my system);
+* The cetificate lists the WebDAV VHost's name as an Subject Alt Name rather than its Common Name.
+
+ $ WEBDAV_USERNAME=shtrom WEBDAV_PASSWORD=correcthorsebatterystaple git annex initremote owncloud type=webdav url=https://owncloud/remote.php/webdav/annexdav chunk=10mb encryption=none
+ initremote owncloud (testing WebDAV server...)
+ git-annex: WebDAV failed to write file: TlsException (HandshakeFailed (Error_Protocol (\"certificate rejected: [NameMismatch \\"owncloud\\"]\",True,CertificateUnknown))): user error
+failed
+ git-annex: initremote: 1 failed
+
+"""]]
diff --git a/doc/special_remotes/webdav/comment_15_d43673b8c8ed3534f31d026098ab673c._comment b/doc/special_remotes/webdav/comment_15_d43673b8c8ed3534f31d026098ab673c._comment
new file mode 100644
index 000000000..4e78113ac
--- /dev/null
+++ b/doc/special_remotes/webdav/comment_15_d43673b8c8ed3534f31d026098ab673c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn6NYODTE1Sy9YZoi2pvb6i-lcq3dYBxZI"
+ nickname="Karol"
+ subject="android client"
+ date="2014-11-17T18:34:12Z"
+ content="""
+I am stuck at the same problem as Maarten, I cannot create box.com repository..
+"""]]
diff --git a/doc/special_remotes/webdav/comment_9_b8f17efe524bb45a3e16705996df1265._comment b/doc/special_remotes/webdav/comment_9_b8f17efe524bb45a3e16705996df1265._comment
new file mode 100644
index 000000000..365bf7042
--- /dev/null
+++ b/doc/special_remotes/webdav/comment_9_b8f17efe524bb45a3e16705996df1265._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnmF_9CAtfqdZkC4e-_dCX-rK5bqh4RWkw"
+ nickname="Carl"
+ subject="Change Password"
+ date="2014-05-02T12:30:58Z"
+ content="""
+I want to change the password that I use on a webdav service (Heartbleed mitigration). What do I need to do to in git annex to make it have access to the new password? Thanks in anvance.
+"""]]
diff --git a/doc/sync/comment_11_7683879f6982c0eb0aa39b66ff5a5ea9._comment b/doc/sync/comment_11_7683879f6982c0eb0aa39b66ff5a5ea9._comment
new file mode 100644
index 000000000..430322975
--- /dev/null
+++ b/doc/sync/comment_11_7683879f6982c0eb0aa39b66ff5a5ea9._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn3p4i4lk_zMilvjnJ9sS6g2nerpgz0Fjc"
+ nickname="Matthias"
+ subject="sync slow with content switch"
+ date="2014-04-22T20:37:05Z"
+ content="""
+I noticed that in a test with 2 local repositories and around 2'000 files \"git annex sync\" is still very fast, but \"git annex sync --content\" takes multiple seconds. Is this avoidable?
+
+I have a central repo and client repos. I want to copy all content to the central repo after a commit. Right now, I use \"git annex group central backup\", \"git annex wanted central standard\", and a hook that triggers \"git annex sync --content\" after each commit. Maybe there is a more efficient way to do this? Thanks for sharing thoughts.
+"""]]
diff --git a/doc/sync/comment_12_2fea14fa314ddb7ab645a5cca5a95fd9._comment b/doc/sync/comment_12_2fea14fa314ddb7ab645a5cca5a95fd9._comment
new file mode 100644
index 000000000..b7e2ea189
--- /dev/null
+++ b/doc/sync/comment_12_2fea14fa314ddb7ab645a5cca5a95fd9._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://mshri.livejournal.com/"
+ ip="129.170.212.202"
+ subject="Sync specific branch or ignore a branch during sync"
+ date="2014-04-25T15:37:53Z"
+ content="""
+
+I too feel that syncing all remotes by default is the right thing to do, but I think it should be limited to the 'master' and 'git-annex' branch. I often create branches that I want to keep local and do not want them to be synced. But I want 'master' and 'git-annex' branches to be synced with all remotes.
+
+So it would be nice to able to set an option to sync all branches or just the 'master' and 'git-annex' or to able to ignore some branches during git annex sync
+
+Shri
+
+"""]]
diff --git a/doc/sync/comment_13_690f66be9cefe28844d8df653b7a0331._comment b/doc/sync/comment_13_690f66be9cefe28844d8df653b7a0331._comment
new file mode 100644
index 000000000..08ea5e843
--- /dev/null
+++ b/doc/sync/comment_13_690f66be9cefe28844d8df653b7a0331._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="134.147.14.84"
+ subject="comment 13"
+ date="2014-05-15T08:28:09Z"
+ content="""
+I agree with mshri. It’s confusing to have every local branch wind up on every remote (and it hinders «git annex unused»).
+
+I tried working around this by just including relevant branches in the «fetch» refspec, but this will only work until another remote pushes the branches again.
+"""]]
diff --git a/doc/sync/comment_14_db342785a4dade30b5b75cb95031bed1._comment b/doc/sync/comment_14_db342785a4dade30b5b75cb95031bed1._comment
new file mode 100644
index 000000000..66798dbb1
--- /dev/null
+++ b/doc/sync/comment_14_db342785a4dade30b5b75cb95031bed1._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="134.147.14.84"
+ subject="comment 14"
+ date="2014-05-15T08:58:26Z"
+ content="""
+Added a wishlist item <http://git-annex.branchable.com/todo/Allow_syncing_only_selected_branches/>
+"""]]
diff --git a/doc/sync/comment_15_168e0ab10b4084e13df1a3058fa7e8a9._comment b/doc/sync/comment_15_168e0ab10b4084e13df1a3058fa7e8a9._comment
new file mode 100644
index 000000000..94d34a2a8
--- /dev/null
+++ b/doc/sync/comment_15_168e0ab10b4084e13df1a3058fa7e8a9._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 15"
+ date="2014-05-15T19:53:16Z"
+ content="""
+We seem to have some rumor going around that `git annex sync` pushes all branches. It does not. It pushes only the git-annex branch and the currently checked out branch.
+"""]]
diff --git a/doc/sync/comment_16_96096f994fc55f921f2b24b274f998f7._comment b/doc/sync/comment_16_96096f994fc55f921f2b24b274f998f7._comment
new file mode 100644
index 000000000..587444d36
--- /dev/null
+++ b/doc/sync/comment_16_96096f994fc55f921f2b24b274f998f7._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 16"
+ date="2014-05-15T19:54:54Z"
+ content="""
+@Matthias, `git annex sync --content` has to check each file to see if any other repository wants it. This is necessarily going to get slow when there are a lot of files. The assistant does a similar syncing but uses some tricks to avoid scanning all the files too often, while still managing to keep them all in sync -- it can do this since it's a long-running daemon and is aware when files have changed.
+"""]]
diff --git a/doc/sync/comment_17_44a4ae4685c4bf2b4e7c61897eb3ff80._comment b/doc/sync/comment_17_44a4ae4685c4bf2b4e7c61897eb3ff80._comment
new file mode 100644
index 000000000..ac808ef8c
--- /dev/null
+++ b/doc/sync/comment_17_44a4ae4685c4bf2b4e7c61897eb3ff80._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm_YXzEdPHzbSGVwtmTR7g1BqDtTnIBB5s"
+ nickname="Matthias"
+ subject="comment 17"
+ date="2015-01-22T22:04:09Z"
+ content="""
+git sync … >> fetches from each remote
+
+Well, I have two git annex-ed repositories where \"git remote -v\" properly lists the other repo, and \"git annex sync foo\" manages to pull from foo, but \"git annex sync\" without a remote name simply does a local sync. Also, neither command pushes anything anywhere.
+
+So, where does \"git annex\" get its list of remotes from? What could prevent it from accessing them?
+
+
+"""]]
diff --git a/doc/sync/comment_18_838fb249cd5be83962770d5cc394389a._comment b/doc/sync/comment_18_838fb249cd5be83962770d5cc394389a._comment
new file mode 100644
index 000000000..094a0b933
--- /dev/null
+++ b/doc/sync/comment_18_838fb249cd5be83962770d5cc394389a._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 18"""
+ date="2015-02-04T19:12:23Z"
+ content="""
+If a remote has "remote.<name>.annex-sync" set to false in the git
+config, `git-annex sync` will skip that remote unless you specify the name.
+That's probably what's going on in your case.
+"""]]
diff --git a/doc/templates/buglist.tmpl b/doc/templates/buglist.tmpl
new file mode 100644
index 000000000..a5d93e9bb
--- /dev/null
+++ b/doc/templates/buglist.tmpl
@@ -0,0 +1,25 @@
+<div class="archivepage">
+<TMPL_IF PERMALINK>
+<a href="<TMPL_VAR PERMALINK>"><TMPL_VAR TITLE></a>
+<TMPL_ELSE>
+<a href="<TMPL_VAR PAGEURL>"><TMPL_VAR TITLE></a>
+</TMPL_IF>
+<TMPL_IF TAGS>
+<TMPL_LOOP TAGS>
+ [<TMPL_VAR LINK>]
+</TMPL_LOOP>
+</TMPL_IF>
+<br />
+<span class="archivepagedate">
+Posted <TMPL_VAR CTIME>
+<TMPL_IF AUTHOR>
+by <span class="author">
+<TMPL_IF AUTHORURL>
+<a href="<TMPL_VAR AUTHORURL>"><TMPL_VAR AUTHOR></a>
+<TMPL_ELSE>
+<TMPL_VAR AUTHOR>
+</TMPL_IF>
+</span>
+</TMPL_IF>
+</span>
+</div>
diff --git a/doc/thanks.mdwn b/doc/thanks.mdwn
index 8959342b5..4b86a45d9 100644
--- a/doc/thanks.mdwn
+++ b/doc/thanks.mdwn
@@ -4,7 +4,17 @@ you individually, but until I meet all 1500 of you, this page will have to
do. You have my most sincere thanks. --[[Joey]]
(If I got your name wrong, or you don't want it publically posted here,
-email <joey@kitenet.net>.)
+email <id@joeyh.name>.)
+
+## 2014-2015
+
+<img alt="NSF logo" src="https://www.nsf.gov/images/logos/nsf1.gif">
+
+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/).
+
+Thanks also to these folks for their support: martin f. krafft and John Byrnes.
## 2013-2014
@@ -71,7 +81,7 @@ Jawurek, Johan Herland, Gian-Maria Daffre, Justine Lam, Ori Livneh, Arnaud
Berthomier, Chad Horohoe, Lois DeFiore, Lieven Baes, Patrick Wheeler, James
Kim, Carlos Trijueque Albarran, Ritesh Nadhani, chesty, Andre Pereira,
Eskild Hustvedt, David Wagner, Maximiliano Curia, András Széll, Allan
-Holman, Thomas Langewouters, Anonymous, Yannick Leyendecker, Peter
+Holman, Thomas Langewouters, Anonymous, Peter Daengeli, Josh Taylor, Abhishek Dasgupta, Maarten Aertsen, Mark Sheppard,
Daengeli, Josh Taylor, Abhishek Dasgupta, Maarten Aertsen, Mark Sheppard,
Markus Engström, Samuel Tardieu, Geog Wechslberger, Abdó Roig, Dmitry
Markushevich, Sergio Rubio, Jim Paris, Vivek Gani, Brock Spratlen, Nathan
@@ -124,9 +134,11 @@ Poobalasubramanian, Alexandre Garel, David Clark, Jeff Johnson,
Mica Semrick, Paul Staab, Rémi Vanicat, Martin Holtschneider, Jan Ivar
Beddari, Peter Simons, Thomas Koch, Justin Geibel, Guillaume DELVIT, Shanti
Bouchez, Oliver Brandt, François Deppierraz, Chad Walstrom, Tim Mattison,
-Jakub Antoni Tyszko, and 30 anonymous bitcoin users
+Jakub Antoni Tyszko, Casa do Boneco, Florian Tham,
+and 30 anonymous bitcoin users
-With an especial thanks to the WikiMedia foundation.
+With an especial thanks to the WikiMedia foundation,
+and Rede Mocambos.
## 2012-2013
diff --git a/doc/tips/Bup_repositories_in_git-annex.mdwn b/doc/tips/Bup_repositories_in_git-annex.mdwn
new file mode 100644
index 000000000..542dc2f58
--- /dev/null
+++ b/doc/tips/Bup_repositories_in_git-annex.mdwn
@@ -0,0 +1,51 @@
+I'd like to share my setup for keeping [bup](https://github.com/bup/bup/) repositories in git-annex.¹
+I'm not sure if this is a *good* tip, so comments are welcome.
+
+The purpose of this setup is to (kind of) bring encryption to bup,
+and make it easy to keep bup backups in untrusted storage by making use of the encryption modes and backends provided by git-annex.
+This approach can be used to make encrypted *backups of bup repositories*;
+it can not replace encrypted filesystems such as EncFS or S3QL
+which wouldn't necessarily require local bup repositories but also can't be combined with storage like Amazon Glacier.
+
+To add a bup repository to git-annex, initialize a regular indirect git-annex repository,
+and make the bup repository a subdirectory of it.²
+Then `git annex add $BUP_REPO/objects/packs`, i.e. the location of the large data files (.pack & .par2).
+The rest of the bup repository should be tracked by Git (`git add $BUP_REPO`).³
+This way the repository stays fully functional.
+
+After a bup-save the following steps will synchronize all remotes:⁴
+
+ git annex add $BUP_REPO/objects/pack
+ git add $BUP_REPO
+ git commit -m "Backup on $(date)"
+ git annex sync --content
+
+In my current setup, the git-annex repositories are located on a local file server.
+Various clients use bup to create backups on the server.
+This server also makes backups of other servers.
+Afterwards, it uploads the annexed data to Glacier
+(via an [encrypted S3 special remote](/special_remotes/S3/)),
+and pushes the small Git repositories to an S3QL filesystem and another off-site server.
+Using these repositories (and my GPG key) the bup repositories could be recovered.
+
+It may be important to note that in order to be able to *access* a bup repository,
+*all* files have to be available locally.
+Bup will not function if any pack files are missing (maybe this can be improved?).
+
+-----
+
+¹) Not to be confused with git-annex's [bup special remote](/special_remotes/bup/).
+
+²) You can't initialize git-annex repositories directly inside bup repositories
+because git-annex will (rightfully) identify them as bare git repositories and set itself up accordingly.
+
+³) I've come up with these .gitignore rules to exclude potentially large files not needed for recovery:
+
+ /bup_repo/bupindex*
+ /bup_repo/objects/pack/bup.bloom
+ /bup_repo/objects/pack/midx*midx
+ /bup_repo/objects/tmp*.pack
+ /bup_repo/index-cache/
+
+⁴) `git annex sync` might not be the safest command to use because it would merge changes from the remotes.
+However, assuming normal bup usage, external changes to the bup repository are not to be expected.
diff --git a/doc/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo/comment_5_3062c0794ecd7c6237efae66f4d9b62f._comment b/doc/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo/comment_5_3062c0794ecd7c6237efae66f4d9b62f._comment
new file mode 100644
index 000000000..e8ef98d99
--- /dev/null
+++ b/doc/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo/comment_5_3062c0794ecd7c6237efae66f4d9b62f._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlcfH7xkyz1kyG_neK4GcFFfFWuIY7l_6A"
+ nickname="Primiano"
+ subject="large scale rewrite tips"
+ date="2015-01-06T22:55:20Z"
+ content="""
+I recently had the need of re-kind-of-annexing an unusually large repo (one of the largest?).
+With some tricks and the right code I managed to get it down to 170000 commits in 19 minutes and extracing ~8GB of blobs.
+Attaching the link here as I feel it might be helpful for very large projects (where git-filter-branch can become prohibitively slow)
+
+[https://www.primianotucci.com/blog/large-scale-git-history-rewrites](https://www.primianotucci.com/blog/large-scale-git-history-rewrites)
+
+"""]]
diff --git a/doc/tips/Synology_NAS_and_git_annex/comment_1_ef7e19f1fd2005eb7cc74509ffb92766._comment b/doc/tips/Synology_NAS_and_git_annex/comment_1_ef7e19f1fd2005eb7cc74509ffb92766._comment
new file mode 100644
index 000000000..e7a1db937
--- /dev/null
+++ b/doc/tips/Synology_NAS_and_git_annex/comment_1_ef7e19f1fd2005eb7cc74509ffb92766._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnrP-0DGtHDJbWSXeiyk0swNkK1aejoN3c"
+ nickname="sebastien"
+ subject="new dev site for syno dsm 5.0"
+ date="2014-03-25T10:20:46Z"
+ content="""
+There is a new website with documentation to create App for new synology dsm 5.0 here : http://www.synology.com/en-us/support/developer
+A good way to distribute git annex to lot of people ? :)
+"""]]
diff --git a/doc/tips/Synology_NAS_and_git_annex/comment_2_5e723ccf026fe970ad31207f9f036b69._comment b/doc/tips/Synology_NAS_and_git_annex/comment_2_5e723ccf026fe970ad31207f9f036b69._comment
new file mode 100644
index 000000000..60122bb13
--- /dev/null
+++ b/doc/tips/Synology_NAS_and_git_annex/comment_2_5e723ccf026fe970ad31207f9f036b69._comment
@@ -0,0 +1,30 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawllyDAwjTPuM6G2d3eKE481V0qGXRKtF8s"
+ nickname="Pieter"
+ subject="Syncing metadata only with Synology NAS and git annex"
+ date="2014-10-06T12:03:35Z"
+ content="""
+I am not able to get full syncing working. It says \"syncing enabled (metadata only)\".
+When I click on Actions -> Edit it says:
+
+Just a git repository.
+
+This repository is not currently set up as a git annex; only git metadata is synced with this repository.
+
+If this repository's ssh server has git-annex installed, you can upgrade this repository to a full git annex, which will store the contents of your files, not only their metadata.
+
+When I try to upgrade the repository it does not work. The log says:
+
+sh: git-annex-shell: not found
+
+rsync: connection unexpectedly closed (0 bytes received so far) [sender]
+
+rsync error: remote command not found (code 127) at io.c(226) [sender=3.1.1]
+
+I'm using Version: 5.20140717 on the Linux Ubuntu 14.10.
+
+Ssh'ing from Ubuntu to gituser@synology works fine and shows the git-annex-shell options
+
+Any ideas?
+
+"""]]
diff --git a/doc/tips/Synology_NAS_and_git_annex/comment_3_8beb2b4b79c7787a92689aaad3bfc452._comment b/doc/tips/Synology_NAS_and_git_annex/comment_3_8beb2b4b79c7787a92689aaad3bfc452._comment
new file mode 100644
index 000000000..681b001d0
--- /dev/null
+++ b/doc/tips/Synology_NAS_and_git_annex/comment_3_8beb2b4b79c7787a92689aaad3bfc452._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 3"
+ date="2014-10-06T15:51:38Z"
+ content="""
+Pieter, I suspect you didn't follow the part of the instructions where it says to run \"./runshell\" on the NAS. If you didn't do that, there will be no ~/.ssh/git-annex-shell script set up.
+
+You have put git-annex-shell in your PATH somehow, but you probably did it by editing a bash dotfile. Those files are used for interactive login shells, but not when git-annex is sshing noninteractively into the NAS to run git-annex-shell.
+"""]]
diff --git a/doc/tips/Synology_NAS_and_git_annex/comment_4_b04a1245378d3580432e85dff8eefdec._comment b/doc/tips/Synology_NAS_and_git_annex/comment_4_b04a1245378d3580432e85dff8eefdec._comment
new file mode 100644
index 000000000..b0eb9bdfa
--- /dev/null
+++ b/doc/tips/Synology_NAS_and_git_annex/comment_4_b04a1245378d3580432e85dff8eefdec._comment
@@ -0,0 +1,26 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnjDzZkA6SzZHgT5_Jy3Rw3s7m_W3-oNLY"
+ nickname="Antoni"
+ subject="Process seems to hang on Synology"
+ date="2015-01-22T20:18:12Z"
+ content="""
+I think I've completed the setup correctly, as I
+
+* am able to execute git-annex-shell on the server
+* locally running ``git-annex sync`` triggers the git-annex process on the server
+
+However, once I provide the password to the key on my local machine, nothing seemingly happens - there is no output after the password prompt.
+
+The repository I'm trying to sync with the remote on the server is ~200 mb and is in my lan.
+
+When monitoring the remote server, I see the following in process being triggered:
+
+````
+31433 31431 amk D 656m270.7 7.1 /volume1/homes/amk/bin/git-annex.linux//lib/ld-linux.so.3 --library-path /volume1/homes/amk/bin/git-annex.linux//etc/ld.so.conf.d:/volume1/homes/amk/bin/git-annex.linux//usr/lib/arm-linux-gnueabi/audit:/volume1/homes/amk/bin/git-annex.linux//usr/lib/arm-linux-gnueabi/gconv:/volume1/homes/amk/bin/git-annex.linux//usr/lib:/volume1/homes/amk/bin/git-annex.linux//usr/lib/arm-linux-gnueabi:/volume1/homes/amk/bin/git-annex.linux//lib:/volume1/homes/amk/bin/git-annex.linux//lib/arm-linux-gnueabi: /volume1/homes/amk/bin/git-annex.linux/shimmed/git-annex-shell/git-annex-shell -c git-annex-shell 'configlist' '/volume1/homes/amk/archive/annex'
+````
+
+The memory usage goes up graudally, reaching well over 200mb, hogging the cpu significantly. I have never used git-annex before, so I'm not sure what else I should be looking for. This is what the server runs on:
+``armv7l GNU/Linux synology_armada370_214se``
+
+Is this an issue caused by the host architecture mismatch?
+"""]]
diff --git a/doc/tips/Synology_NAS_and_git_annex/comment_5_7e4ec2b22fb15e653d3b2274493e460c._comment b/doc/tips/Synology_NAS_and_git_annex/comment_5_7e4ec2b22fb15e653d3b2274493e460c._comment
new file mode 100644
index 000000000..af36ba513
--- /dev/null
+++ b/doc/tips/Synology_NAS_and_git_annex/comment_5_7e4ec2b22fb15e653d3b2274493e460c._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 5"""
+ date="2015-02-04T19:16:36Z"
+ content="""
+@Antoni git-annex-shell configlist does not do anything that would
+normally make it use much memory at all.
+
+You might find strace or similar tools useful to figure out what's going
+on.
+"""]]
diff --git a/doc/tips/Synology_NAS_and_git_annex/comment_6_954fc1b423208928fafdeb8cdac47c50._comment b/doc/tips/Synology_NAS_and_git_annex/comment_6_954fc1b423208928fafdeb8cdac47c50._comment
new file mode 100644
index 000000000..b9d037bd1
--- /dev/null
+++ b/doc/tips/Synology_NAS_and_git_annex/comment_6_954fc1b423208928fafdeb8cdac47c50._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 6"""
+ date="2015-02-11T17:05:15Z"
+ content="""
+There's a bug report for the memory use hang now:
+[[bugs/git-annex_on_NAS_eats_all_memory]]
+"""]]
diff --git a/doc/tips/ZSH_completion.mdwn b/doc/tips/ZSH_completion.mdwn
new file mode 100644
index 000000000..f3ececd46
--- /dev/null
+++ b/doc/tips/ZSH_completion.mdwn
@@ -0,0 +1,13 @@
+ZSH users, here's some good news: after 2 years of silence, the completion function for git-annex has been updated. It now supports *all* git-annex commands (as of 5.20140517) and has many improvements for completing arguments, remotes, groups, and backends.
+
+To install it:
+
+1. make sure your have Python 3 installed (as `python3` somewhere in your `$PATH`; tested with 3.4, should work with 3.2+)
+2. get it from [GitHub](https://github.com/Schnouki/git-annex-zsh-completion)
+3. copy `_git-annex` to somewhere in your `$fpath` (I use `$HOME/.config/zsh/completion`)
+4. run `autoload -U path/to/_git-annex`
+5. type `git annex <TAB>`
+
+This is very far from being perfect, but it's (IMHO) better than nothing. If you have any issue or suggestion, please [tell me](https://github.com/Schnouki/git-annex-zsh-completion/issues)!
+
+Many thanks to Frank Terbeck and Valentin Haenel, the original authors of this completion function ([source](https://github.com/esc/git-annex-zsh-completion)).
diff --git a/doc/tips/automatically_adding_metadata.mdwn b/doc/tips/automatically_adding_metadata.mdwn
index c3f50bb39..e6d02defa 100644
--- a/doc/tips/automatically_adding_metadata.mdwn
+++ b/doc/tips/automatically_adding_metadata.mdwn
@@ -17,7 +17,7 @@ like photos, mp3s, etc.
Now any fields you list in metadata.extract to will be extracted and
stored when files are committed.
-To get a list of all possible fields, run: `extract -L | sed ' ' _`
+To get a list of all possible fields, run: `extract -L | sed 's/ /_/g'`
By default, if a git-annex already has a metadata field for a file,
its value will not be overwritten with metadata taken from files.
diff --git a/doc/tips/automatically_adding_metadata/comment_2_bd64a53914107bc000c887b4d4bdf6af._comment b/doc/tips/automatically_adding_metadata/comment_2_bd64a53914107bc000c887b4d4bdf6af._comment
new file mode 100644
index 000000000..13b3865e1
--- /dev/null
+++ b/doc/tips/automatically_adding_metadata/comment_2_bd64a53914107bc000c887b4d4bdf6af._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="2001:1928:1:9::1"
+ subject="comment 2"
+ date="2014-04-01T04:18:10Z"
+ content="""
+is there a way for this to be done globally, without having to install and configure the hook for each repository? it seems like a fairly useful feature that could be factored in git-annex itself (as opposed to be shipped as a shell script)...
+
+also, is there a way to retroactively parse the tags from existing files (as opposed to only new files added to the repo).
+
+thanks
+"""]]
diff --git a/doc/tips/automatically_adding_metadata/comment_3_02e5314f827d17d482343e8f22c42fd9._comment b/doc/tips/automatically_adding_metadata/comment_3_02e5314f827d17d482343e8f22c42fd9._comment
new file mode 100644
index 000000000..644ece527
--- /dev/null
+++ b/doc/tips/automatically_adding_metadata/comment_3_02e5314f827d17d482343e8f22c42fd9._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 3"
+ date="2014-04-17T20:15:07Z"
+ content="""
+@anarcat, I have modified [[pre-commit-annex]] so if it's passed already annexed files, it'll extract their metadata.
+
+So this can be used to add metadata to files added before you installed the hook, or if you've configured more fields to be extracted.
+"""]]
diff --git a/doc/tips/automatically_adding_metadata/comment_4_cd3c8e2f45db93576d1b82cfbfbe601b._comment b/doc/tips/automatically_adding_metadata/comment_4_cd3c8e2f45db93576d1b82cfbfbe601b._comment
new file mode 100644
index 000000000..f6b2773eb
--- /dev/null
+++ b/doc/tips/automatically_adding_metadata/comment_4_cd3c8e2f45db93576d1b82cfbfbe601b._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnW_CrhP9p50n9UUhTg_a9glyKWSvnrjRQ"
+ nickname="Michele"
+ subject="direct mode pre-commit hooks [on windows]"
+ date="2015-01-20T12:43:24Z"
+ content="""
+seemingly pre-commit hooks are not being called on windows, it could have to do with git annex sync bypassing them when doing commits ?
+
+on the other side genmetadata works. although that is not enough for me since I'd want to preserve complete last modification date/time and I was in the process of modifying the supplied pre-commit script to call for \"stat %Y\" (which btw is working fine on windows, while the last binaries for extract are failing there).
+
+am I correct in assuming that direct mode [on windows at least] bypasses hooks [namely pre-commit as well as pre-commit-annex] ?
+"""]]
diff --git a/doc/tips/automatically_adding_metadata/comment_5_888f0a77405d616a0d51a6176b44f605._comment b/doc/tips/automatically_adding_metadata/comment_5_888f0a77405d616a0d51a6176b44f605._comment
new file mode 100644
index 000000000..29f5cecb4
--- /dev/null
+++ b/doc/tips/automatically_adding_metadata/comment_5_888f0a77405d616a0d51a6176b44f605._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 5"""
+ date="2015-01-20T16:52:28Z"
+ content="""
+@Michele git annex sync in a direct mode repository does bypass the
+pre-commit hook. However, it will try to run the pre-commit-annex hook.
+
+Most likely, the hook script does not appear executable on Windows, so
+git-annex cannot run it.
+"""]]
diff --git a/doc/tips/automatically_adding_metadata/comment_6_34f0c55d09ddee3de642f6b25a9f6269._comment b/doc/tips/automatically_adding_metadata/comment_6_34f0c55d09ddee3de642f6b25a9f6269._comment
new file mode 100644
index 000000000..ab5bc7b76
--- /dev/null
+++ b/doc/tips/automatically_adding_metadata/comment_6_34f0c55d09ddee3de642f6b25a9f6269._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 6"""
+ date="2015-01-20T17:19:34Z"
+ content="""
+@Michele after testing, git-annex on Windows seems to not see a file that
+does have the executable bit set as executable. I have opened a bug report
+[[bugs/windows_isExecutable_fail]], and worked around the problem now.
+"""]]
diff --git a/doc/tips/automatically_adding_metadata/comment_7_94877b21bf80374c2874b971f26f0e55._comment b/doc/tips/automatically_adding_metadata/comment_7_94877b21bf80374c2874b971f26f0e55._comment
new file mode 100644
index 000000000..74bd60224
--- /dev/null
+++ b/doc/tips/automatically_adding_metadata/comment_7_94877b21bf80374c2874b971f26f0e55._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnW_CrhP9p50n9UUhTg_a9glyKWSvnrjRQ"
+ nickname="Michele"
+ subject="pre-commit is OK on windows now - auto adding last mod datetime"
+ date="2015-01-30T11:48:24Z"
+ content="""
+@Joey just tested a nightly build and now pre-commit-annex is called, and with my modifications it autoadds last modified times for content.
+Trivially it's just the matter of adding:
+
+ field=\"datemod\"
+ value=$(stat -c %Y $f)
+ addmeta \"$f\" \"$field\" \"$value\"
+
+to the body of the process() function to the supplied pre-commit-annex script.
+thanks
+"""]]
diff --git a/doc/tips/automatically_adding_metadata/pre-commit-annex b/doc/tips/automatically_adding_metadata/pre-commit-annex
index f300bd731..fe818d032 100755
--- a/doc/tips/automatically_adding_metadata/pre-commit-annex
+++ b/doc/tips/automatically_adding_metadata/pre-commit-annex
@@ -1,6 +1,11 @@
#!/bin/sh
+#
# This script can be used to add git-annex metadata to files when they're
-# committed.
+# committed. It is typically installed as .git/hooks/pre-commit-annex
+#
+# You can also run this script by hand, passing it the names of files
+# already checked into git-annex, and it will extract/refresh the git-annex
+# metadata from the files.
#
# Copyright 2014 Joey Hess <id@joeyh.name>
# License: GPL-3+
@@ -12,8 +17,6 @@ if [ -z "$want" ]; then
exit 0
fi
-echo "$want"
-
case "$(git config --bool metadata.overwrite || true)" in
true)
overwrite=1
@@ -46,7 +49,8 @@ fi
IFS="
"
-for f in $(git diff-index --name-only --cached $against); do
+
+process () {
if [ -e "$f" ]; then
for l in $(extract "$f" | egrep "$want"); do
field="${l%% - *}"
@@ -54,4 +58,14 @@ for f in $(git diff-index --name-only --cached $against); do
addmeta "$f" "$field" "$value"
done
fi
-done
+}
+
+if [ -n "$*" ]; then
+ for f in $@; do
+ process "$f"
+ done
+else
+ for f in $(git diff-index --name-only --cached $against); do
+ process "$f"
+ done
+fi
diff --git a/doc/tips/centralised_repository:_starting_from_nothing.mdwn b/doc/tips/centralised_repository:_starting_from_nothing.mdwn
index b12246d36..7018697a0 100644
--- a/doc/tips/centralised_repository:_starting_from_nothing.mdwn
+++ b/doc/tips/centralised_repository:_starting_from_nothing.mdwn
@@ -16,7 +16,6 @@ Clone that to the laptop:
laptop$ cd /other
laptop$ git clone ssh://server//one/git/m
Cloning into 'm'...
- Warning: No xauth data; using fake authentication data for X11 forwarding.
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 5 (delta 0), reused 0 (delta 0)
@@ -28,18 +27,9 @@ Clone that to the laptop:
init laptop ok
laptop$
-Merge the `git-annex` repository (this is the bit that is often
-overlooked!):
-
- laptop$ git annex merge
- merge . (merging "origin/git-annex" into git-annex...)
- ok
- laptop$
-
Add some content:
laptop$ git annex addurl http://kitenet.net/~joey/screencasts/git-annex_coding_in_haskell.ogg
- "kitenet.net_~joey_screencasts_git-annex_coding_in_haskell.ogg"
addurl kitenet.net_~joey_screencasts_git-annex_coding_in_haskell.ogg (downloading http://kitenet.net/~joey/screencasts/git-annex_coding_in_haskell.ogg ...) --2011-12-15 08:13:10-- http://kitenet.net/~joey/screencasts/git-annex_coding_in_haskell.ogg
Resolving kitenet.net (kitenet.net)... 2001:41c8:125:49::10, 80.68.85.49
Connecting to kitenet.net (kitenet.net)|2001:41c8:125:49::10|:80... connected.
@@ -53,6 +43,9 @@ Add some content:
(checksum...) ok
(Recording state in git...)
+
+Don't forget to commit it:
+
laptop$ git commit -m 'See Joey play.'
[master (root-commit) 106e923] See Joey play.
1 files changed, 1 insertions(+), 0 deletions(-)
@@ -61,7 +54,7 @@ Add some content:
All fine, now push it back to the centralised master:
- laptop$ git push
+ laptop$ git push origin master
Counting objects: 20, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (11/11), done.
@@ -71,5 +64,8 @@ All fine, now push it back to the centralised master:
3ba1386..ad3bc9e git-annex -> git-annex
laptop$
+You'll probably want to use `git annex copy --to origin` to copy the
+annexed file contents to the server. See the [[walkthrough]] for details.
+
You can add more "client" repositories by following the `laptop`
sequence of operations.
diff --git a/doc/tips/centralized_git_repository_tutorial.mdwn b/doc/tips/centralized_git_repository_tutorial.mdwn
index 00283829f..8088e7d23 100644
--- a/doc/tips/centralized_git_repository_tutorial.mdwn
+++ b/doc/tips/centralized_git_repository_tutorial.mdwn
@@ -47,7 +47,7 @@ This file is available directly from the web; so git-annex can download it:
(Recording state in git...)
# git commit -a -m 'added a screencast I made'
-Feel free the rename the files, etc, using normal git commands:
+Feel free to rename the files, etc, using normal git commands:
# git mv Haskell_Amuse_Bouche-b9FagOVqxmI.mp4 Haskell_Amuse_Bouche.mp4
# git mv kitenet.net_~joey_screencasts_git-annex_coding_in_haskell.ogg git-annex_coding_in_haskell.ogg
diff --git a/doc/tips/centralized_git_repository_tutorial/comment_3_8894229043935e70089caf67f0cc4ddb._comment b/doc/tips/centralized_git_repository_tutorial/comment_3_8894229043935e70089caf67f0cc4ddb._comment
new file mode 100644
index 000000000..b0324d47a
--- /dev/null
+++ b/doc/tips/centralized_git_repository_tutorial/comment_3_8894229043935e70089caf67f0cc4ddb._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn8d6WBPNtmyeANT-gjlN19QnCTQ0psRPs"
+ nickname="James"
+ subject="S3 special remote?"
+ date="2015-01-22T21:52:13Z"
+ content="""
+Is it possible to use special remotes (like S3) with this centralized method?
+
+Public web content works fine, but I've had no luck with S3.
+"""]]
diff --git a/doc/tips/centralized_git_repository_tutorial/comment_4_b496622537d2491854b02884acf1672c._comment b/doc/tips/centralized_git_repository_tutorial/comment_4_b496622537d2491854b02884acf1672c._comment
new file mode 100644
index 000000000..9ef4ddd1d
--- /dev/null
+++ b/doc/tips/centralized_git_repository_tutorial/comment_4_b496622537d2491854b02884acf1672c._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2015-02-04T19:29:01Z"
+ content="""
+You can add any kind of special remotes to such a repository.
+
+Each clone from the central repository will need to have `git annex
+enableremote` used to enable any special remote(s) you need to use
+from that clone.
+"""]]
diff --git a/doc/tips/deleting_unwanted_files.mdwn b/doc/tips/deleting_unwanted_files.mdwn
new file mode 100644
index 000000000..8c09b42aa
--- /dev/null
+++ b/doc/tips/deleting_unwanted_files.mdwn
@@ -0,0 +1,40 @@
+It's quite hard to delete a file from a git repository once it's checked in and pushed to origin. This is normally ok, since git repositories contain mostly small files, and a good thing since losing hard work stinks.
+
+With git-annex this changes some: Very large files can be managed with git-annex, and it's not uncommon to be done with such a file and want to delete it. So, git-annex provides a number of ways to handle this, while still trying to avoid accidental foot shooting that would lose the last copy of an important file.
+
+## the garbage collecting method
+
+In this method, you just remove annexed files whenever you want, and commit the changes. This is probably the most natural way to go.
+
+In an indirect mode repo, you can do this the same way you would in a regular git repository. For example, `git rm foo; git commit -m "removed foo"`. This leaves the contents of the files still in the annex, not really deleted yet.
+
+If you have a direct mode repo, you can't run `git rm` in it. Instead, you can just delete files using `rm` or your file manager, and then run `git annex sync` to commit the deletion. That will delete the file's content from your disk. Even if it's the only copy of the file!
+
+Either way, deleting files can leave some garbage lying around in either the local repository, or other repositories that contained a copy of the content of the file you deleted. Eventually you'll want to free up some disk space used by one of these repositories, and then it's time to take out the garbage.
+
+To collect the garbage, you can run `git annex unused` inside the repository which you want to slim down. That will list files stored in the annex that are not used by any git branches or tags. Followed by `git annex dropunused 1-10` to delete a range of the unused files from the annex.
+
+In recent versions of git-annex, `git annex dropunused` checks that enough other copies of a file's content exist in other repositories before deleting it, so this won't ever delete the last copy of some file. This is a good default, because these unused files are still referred to by some commits in the git history, and you might want to retain the full history of every version of a file.
+
+But, let's say you don't care about that, you only want to keep files that are in use by branches and tags. Then you can use `git annex dropunused --force` with a range of files, which will delete them even if it's the last copy.
+
+Finally, sometimes you want to remove unused files from a special remote. To accomplish this, pass `--from remotename` to the unused and dropunused commands, and they will act on
+files stored in that remote, rather than on the local repository.
+
+## let the assistant take care of it
+
+If you're using the git-annex assistant, you don't normally need to worry about this. Just delete files however you normally would. The assistant will try to migrate unused file contents away from your local repository and store them in whatever backup repositories you've set up.
+
+## delete all the copies method
+
+You have a file. You want that file to immediately vanish from the face of the earth to the best of your abilities.
+
+Note that, since git-annex deduplicates files by default, any files with
+the same content will be removed by these commands.
+
+1. `git annex drop --force file`
+2. `git annex whereis file`
+3. `git annex drop --force file --from $repo` repeat for each repository listed by the whereis command
+4. `rm file; git annex sync`
+
+Of course, if you have offline backup repositories that contain this file, you'll have to bring them online before you can drop it from them, etc.
diff --git a/doc/tips/downloading_podcasts.mdwn b/doc/tips/downloading_podcasts.mdwn
index d412a73bf..7805f84cb 100644
--- a/doc/tips/downloading_podcasts.mdwn
+++ b/doc/tips/downloading_podcasts.mdwn
@@ -23,7 +23,8 @@ there's a --template option. The default is
`--template='${feedtitle}/${itemtitle}${extension}'`
Other available template variables:
-feedauthor, itemauthor, itemsummary, itemdescription, itemrights, itemid
+feedauthor, itemauthor, itemsummary, itemdescription, itemrights, itemid,
+itempubdate, author, title.
## catching up
@@ -67,3 +68,12 @@ and transferring to your laptop on demand.
If your git-annex is also built with quvi support, you can also use
`git annex importfeed` on youtube playlists. It will automatically download
the videos linked to by the playlist.
+
+## metadata
+
+As well as storing the urls for items imported from a feed, git-annex can
+store additional [[metadata]], like the author, and itemdescription.
+This can then be looked up later, used in [[metadata_driven_views]], etc.
+
+To make all available metadata from the feed be stored:
+`git config annex.genmetadata true`
diff --git a/doc/tips/downloading_podcasts/comment_21_98a1dacc8d264ff31801e6c5c5f2612d._comment b/doc/tips/downloading_podcasts/comment_21_98a1dacc8d264ff31801e6c5c5f2612d._comment
new file mode 100644
index 000000000..eebc00ad9
--- /dev/null
+++ b/doc/tips/downloading_podcasts/comment_21_98a1dacc8d264ff31801e6c5c5f2612d._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Sazius"
+ ip="62.78.213.233"
+ subject="comment 21"
+ date="2014-07-01T20:52:06Z"
+ content="""
+For some podcast feeds I typically wish to view the description of the show before I decide to download it or not. Is there some way to perform that use case using git annex? I know `itemdescription` is something I can include in the template for the filename, but the descriptions can be really long... doesn't seem very elegant to have that in the file name. Could the description for example be included as metadata of the item?
+"""]]
diff --git a/doc/tips/downloading_podcasts/comment_22_00cc7a2fb936d7ea3d5d3764a1637663._comment b/doc/tips/downloading_podcasts/comment_22_00cc7a2fb936d7ea3d5d3764a1637663._comment
new file mode 100644
index 000000000..2fba1b57d
--- /dev/null
+++ b/doc/tips/downloading_podcasts/comment_22_00cc7a2fb936d7ea3d5d3764a1637663._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="metadata"
+ date="2014-07-03T18:25:32Z"
+ content="""
+Good idea, Sazius!
+
+I've made importfeed store the metadata, as long as annex.genmetadata is set in .git/config.
+"""]]
diff --git a/doc/tips/downloading_podcasts/comment_23_62603cda8e581a2eb2cc799dffe8a740._comment b/doc/tips/downloading_podcasts/comment_23_62603cda8e581a2eb2cc799dffe8a740._comment
new file mode 100644
index 000000000..13909c27c
--- /dev/null
+++ b/doc/tips/downloading_podcasts/comment_23_62603cda8e581a2eb2cc799dffe8a740._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="ewen"
+ subject="itempubdate"
+ date="2015-01-03T22:01:37Z"
+ content="""
+Using a `--template='${feedtitle}/${itempubdate}-${itemtitle}${extension}'` with a libsyn RSS feed (eg, [Poly Weekly](http://polyweekly.libsyn.com/rss)), I found that `itempubdate` was expanding to \"none\", even though there is a date with each entry in the RSS, eg,
+
+ <pubDate>Fri, 26 Dec 2014 15:25:38 +0000</pubDate>
+
+Maybe the date string cannot be parsed? But it does look like a fairly typical datestamp to me. If the cause is the mixed-case in the tag, could `pubDate` be supported in addition to `pubdate`? (AFAICT [`pubDate` is the standardised mix of lower/upper case](http://validator.w3.org/feed/docs/rss2.html), but maybe not the most common, in which case supporting both `pubDate` and `pubdate` might help?) As seen with `git-annex version: 5.20141024~bpo70+1`, installed from Debian Backports; AFAICT it's still the latest release to make it to backports.
+
+For now I'm just omitting \"itempubdate\" from my template.
+
+Ewen
+"""]]
diff --git a/doc/tips/downloading_podcasts/comment_24_e75af243654d15bc7b917fcd888bcf2f._comment b/doc/tips/downloading_podcasts/comment_24_e75af243654d15bc7b917fcd888bcf2f._comment
new file mode 100644
index 000000000..25deb97b4
--- /dev/null
+++ b/doc/tips/downloading_podcasts/comment_24_e75af243654d15bc7b917fcd888bcf2f._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""pubDate"""
+ date="2015-01-05T22:55:06Z"
+ content="""
+@ewen, I tested that feed and it is able to get the pubDate from it and
+parses it ok.
+
+Most likely, your version of git-annex is not built with a new enough
+version of the haskell feed library. Version 0.3.9 or newer is needed to be
+able to extract pubdates. For example, Debian stable doesn't have a new
+enough version.
+"""]]
diff --git a/doc/tips/dumb_metadata_extraction_from_xbmc.mdwn b/doc/tips/dumb_metadata_extraction_from_xbmc.mdwn
new file mode 100644
index 000000000..e3611ec30
--- /dev/null
+++ b/doc/tips/dumb_metadata_extraction_from_xbmc.mdwn
@@ -0,0 +1,29 @@
+I wanted to get the list of movies I haven't seen yet in XBMC, and i'm lazy. So I'll use [[metadata]] to be able to extract those movies only, for the road for example.
+
+First I fiddled around with shell scripts to extract the list of those films, which in XBMC-speak means that have a `NULL playCount`. Since there are two ways that XMBC can represent those files (in a `stack://` if there is multiple files for the movie or not), there are two scripts. For "stacked" movies:
+
+ echo 'SELECT files.strFileName FROM movie JOIN files ON files.idFile=movie.idFile JOIN path ON path.idPath=files.idPath WHERE playCount IS NULL AND files.strFileName LIKE "stack://%";' | sqlite3 /home/video/.xbmc/userdata/Database/MyVideos75.db | sed "s#stack://##;s/, /\n/g" | sed "s#/home/media/video/##"
+
+And the rest:
+
+ echo 'SELECT path.strPath || files.strFileName FROM movie JOIN files ON files.idFile=movie.idFile JOIN path ON path.idPath=files.idPath WHERE playCount IS NULL AND files.strFileName NOT LIKE "stack://%";' | sqlite3 /home/video/.xbmc/userdata/Database/MyVideos75.db | sed "s#/home/media/video/##"
+
+Also notice how I remove the absolute prefix for the annex so that i can refer to files as a relative path.
+
+So this quick and dirty hack could have been used to mark files as "new". Unfortunately, this won't unmark them when the playcount increases. So instead I think this should be a field, and we need to extract the playcount. Play around with shell scripting enough to get sick, get back into bad perl habits and you'll end up with this nasty script: [[git-annex-xbmc-playcount.pl]].
+
+After the script is ran, you can sort the files by play count with:
+
+ git annex view "playCount=*"
+
+Or just show the files that haven't been played yet:
+
+ git annex view playCount=0
+
+Use `git checkout master` to reset the view. Note that the above will flatten the tree hierarchy, which you may not want. Try this in that case:
+
+ git annex view playCount=0 films/=*
+
+For more information, see [[tips/metadata_driven_views/]].
+
+-- [[anarcat]]
diff --git a/doc/tips/dumb_metadata_extraction_from_xbmc/git-annex-xbmc-playcount.pl b/doc/tips/dumb_metadata_extraction_from_xbmc/git-annex-xbmc-playcount.pl
new file mode 100644
index 000000000..85b97188f
--- /dev/null
+++ b/doc/tips/dumb_metadata_extraction_from_xbmc/git-annex-xbmc-playcount.pl
@@ -0,0 +1,227 @@
+#! /usr/bin/perl -w
+
+use Getopt::Long;
+use Pod::Usage;
+
+my $help = 0;
+my $usage = 0;
+my $dryrun = 0;
+my $verbose = 0;
+my $path = '';
+my $annex = '';
+my $home = $ENV{'HOME'};
+
+sub main() {
+ checkargs();
+ if (!$path) {
+ $path = $home . '/.xbmc/userdata/Database';
+ }
+ print("# checking XBMC directory '$path'\n") if ($verbose);
+ $dbpath = finddb($path);
+ if (!$dbpath) {
+ pod2usage("$0: can't find a XBMC database in '$path'.");
+ }
+ print("# using database '$dbpath'\n") if ($verbose);
+ checkdb();
+}
+
+# list videos database, find the latest one
+# modified version of
+# http://stackoverflow.com/questions/4651092/getting-the-list-of-files-sorted-by-modification-date-in-perl
+sub finddb($) {
+ my $path = shift(@_);
+ opendir my($dirh), $path or die "can't opendir $path: $!";
+ my @flist = sort { -M $a <=> -M $b } # Sort by modification time
+ map { "$path/$_" } # We need full paths for sorting
+ grep { /^MyVideos.*\.db$/ }
+ readdir $dirh;
+ closedir $dirh;
+ if ($#flist > 0) {
+ return $flist[0];
+ }
+ else {
+ return 0;
+ }
+}
+
+sub checkargs() {
+ pod2usage(1) if $help;
+ pod2usage(-exitval => 0, -verbose => 2) if $usage;
+
+ GetOptions('h|?' => \$help,
+ 'help|usage' => \$usage,
+ # we want to operate on relative links, so set this to
+ # the common annex to the git annex repo
+ 'annex=s' => \$annex,
+ 'path=s' => \$path,
+ 'home=s' => \$home,
+ 'dryrun|n' => \$dryrun,
+ 'verbose|v' => \$verbose,
+ )
+ or die("Error parsing commandline\n");
+}
+
+sub checkdb() {
+ my @lines = `echo 'SELECT playCount, path.strPath, files.strFileName FROM movie JOIN files ON files.idFile=movie.idFile JOIN path ON path.idPath=files.idPath;' | sqlite3 $dbpath`;
+ print "# finding files...\n" if $verbose;
+ for (@lines) {
+ my ($count, $dir, $file) = split /\|/;
+ chomp $file;
+ # empty or non-numeric count is zero
+ if ($count !~ /[0-9]/) {
+ $count = 0;
+ }
+ print "# $dir/$file\n" if $verbose;
+ if ($file =~ s#stack://##) {
+ for (split /,/, $file) {
+ s/$annex//;
+ s/^ //;
+ s/ $//;
+ my @cmd = (qw(git annex metadata --set), "playCount=$count", $_);
+ if ($dryrun) {
+ print join(' ', @cmd) . "\n";
+ }
+ else {
+ system(@cmd);
+ }
+ }
+ }
+ else {
+ $dir =~ s/$annex//;
+ my @cmd = (qw(git annex metadata --set), "playCount=$count", "$dir$file");
+ if ($dryrun) {
+ print join(' ', @cmd) . "\n";
+ }
+ else {
+ system(@cmd);
+ }
+ }
+ }
+}
+
+main();
+
+__END__
+=encoding utf8
+
+=head1 NAME
+
+git-annex-xbmc-playcount - register XBMC playcounts as git-annex metadata
+
+=head1 SYNOPSIS
+
+git-annex-xbmc-playcount [--path .xbmc/userdata/Database]
+
+ Options:
+ -h short usage
+ --help complete help
+ --dryrun, -n do nothing and show the commands that would be ran
+ --annex path to the git-annex repo
+ --home the home directory where the .xbmc directory is located
+ --path the location of the Database directory of XBMC, overrides --home
+ --verbose show interaction details with the database
+
+=head1 DESCRIPTION
+
+This program will look into the XBMC database for the "playcount"
+field to register that number as metadata in the git-annex repository.
+
+=head1 OPTIONS
+
+=over 8
+
+=item B<--dryrun>
+
+Do nothing but show all the steps that would be ran. The output can be
+piped through a POSIX shell after inspection. B<-n> is an alias of
+this command. Example:
+
+ git-annex-xbmc-playcount -n | tee runme
+ # inspect the output
+ sh < runme
+
+=item B<--annex>
+
+This option allows the user to specify the root of the git-annex
+repository, which is then stripped off the paths found in the XBMC
+database.
+
+=item B<--home>
+
+Home of the user running XBMC. If not specified, defaults to the $HOME
+environment variables. The script will look into
+B<$home/.xbmc/userdata/Database> for a file matching
+B<^MyVideos.*\.db$> and will fail if none is found.
+
+=item B<--path>
+
+Manually specify the path to B<.xbmc/userdata/Database>. This
+overrides B<--home>.
+
+Note that this doesn't point directly to the datbase itself, because
+there are usually many database files and we want to automatically
+find the latest. This may be a stupid limitation.
+
+=item B<--verbose>
+
+Show more information about path discovery. Doesn't obstruct
+B<--dryrun> output because lines are prefixed with C<#>.
+
+=back
+
+=head1 EXAMPLES
+
+You have a git annex in B</srv/video> and XBMC is ran as the
+B<video> user and you want to be cautious:
+
+ $ ./git-annex-xbmc-playcount.pl --home /home/video/ -n --annex /srv/video/ | tee set-metadata
+ git annex metadata --set playCount=0 films/Animal.Farm.1954.DVDRip.DivX-MDX.avi
+
+This looks about right, set the metadata:
+
+ $ git annex metadata --set playCount=0 films/Animal.Farm.1954.DVDRip.DivX-MDX.avi
+ metadata films/Animal.Farm.1954.DVDRip.DivX-MDX.avi
+ lastchanged=2014-10-04@22-17-42
+ playCount=0
+ playCount-lastchanged=2014-10-04@22-17-42
+ ok
+ (Recording state in git...)
+
+=head1 ENVIRONMENT
+
+B<$HOME> is looked into to find the B<.xbmc> home directory if none of
+B<--home> or B<--path> is specified.
+
+=head1 FILES
+
+=over 8
+
+=item B<$HOME/.xbmc/userdata/Database/MyVideos.*\.db>
+
+This is where we assume the SQLite database of videos XBMC uses is
+stored.
+
+=back
+
+=head1 BUGS
+
+If there are pipes (C<|>) in filenames, the script may fail to find
+the files properly. We would need to rewrite the database code to use
+B<DBD::SQLite>(3pm) instead of a pipe to B<sqlite3>(1).
+
+=head1 LIMITATIONS
+
+It took longer writing this help than writing the stupid script.
+
+The script will not tag files not yet detected by XBMC.
+
+The script is not incremental, so it will repeatedly add the same
+counts to files it has already found.
+
+=head1 SEE ALSO
+
+B<git-annex>(1), B<xbmc>(1)
+
+=head1 AUTHOR
+
+Written by Antoine Beaupré <anarcat@debian.org>
diff --git a/doc/tips/emacs_integration.mdwn b/doc/tips/emacs_integration.mdwn
index 2390474a4..3eeff788a 100644
--- a/doc/tips/emacs_integration.mdwn
+++ b/doc/tips/emacs_integration.mdwn
@@ -21,5 +21,5 @@ file`; otherwise it will "git add" it.
----
-[magit-annex](https://github.com/kyleam/magit-annex) adds magit support
-for a few features, including adding files and syncing.
+[magit-annex](https://github.com/magit/magit-annex) adds git annex
+operations to Magit.
diff --git a/doc/tips/file_manager_integration.mdwn b/doc/tips/file_manager_integration.mdwn
new file mode 100644
index 000000000..4429b9093
--- /dev/null
+++ b/doc/tips/file_manager_integration.mdwn
@@ -0,0 +1,115 @@
+Integrating git-annex and your file manager provides an easy way to select
+annexed files to get or drop. The file manager can also be used to undo
+changes to file managed by git-annex.
+
+[[!toc]]
+
+## GNOME (nautilus)
+
+Recent git-annex comes with built-in integration for Nautilus.
+
+[[!img assistant/nautilusmenu.png]]
+
+[[!img assistant/downloadnotification.png]]
+
+This is set up by git-annex creating simple scripts in
+`~/.local/share/nautilus/scripts`, with names like "git-annex get"
+
+## KDE (Dolphin/Konqueror)
+
+Even more recent git-annex comes with built-in integration with Konqueror.
+
+[[!img assistant/konquerormenu.png]]
+
+This is set up by git-annex creating a
+`~/.kde/share/kde4/services/ServiceMenus/git-annex.desktop file.
+
+## XFCE (Thunar)
+
+XFCE uses the Thunar file manager, which can also be easily configured to
+allow for custom actions. Just go to the "Configure custom actions..." item
+in the "Edit" menu, and create a custom action for get, drop, and undo with the
+following commands:
+
+ git-annex drop --notify-start --notify-finish -- %F
+
+for drop, and for get:
+
+ git-annex get --notify-start --notify-finish -- %F
+
+and for undo:
+
+ git-annex undo --notify-start --notify-finish -- %F
+
+This gives me the resulting config on disk, in `.config/Thunar/uca.xml`:
+
+ <action>
+ <icon>git-annex</icon>
+ <name>git-annex get</name>
+ <unique-id>1396278104182858-3</unique-id>
+ <command>git-annex get --notify-start --notify-finish -- %F</command>
+ <description>get the files from a remote git annex repository</description>
+ <patterns>*</patterns>
+ <directories/>
+ <audio-files/>
+ <image-files/>
+ <other-files/>
+ <text-files/>
+ <video-files/>
+ </action>
+ <action>
+ <icon>git-annex</icon>
+ <name>git-annex drop</name>
+ <unique-id>1396278093174843-2</unique-id>
+ <command>git-annex drop --notify-start --notify-finish -- %F</command>
+ <description>drop the files from the local repository</description>
+ <patterns>*</patterns>
+ <directories/>
+ <audio-files/>
+ <image-files/>
+ <other-files/>
+ <text-files/>
+ <video-files/>
+ </action>
+
+The complete instructions on how to setup actions is [in the XFCE documentation](http://docs.xfce.org/xfce/thunar/custom-actions).
+
+## OS X (Finder)
+
+For OS X, it is possible to get context menus in Finder. Due to how OS X
+deals with sym links, one needs to operate on folders if using indirect
+mode. Direct mode operation has not been tested.
+
+1. Open Automator and create a new Service.
+2. Using the Drop down menus in the top create the sentence "Service receives selected folders in Finder.app" to have it work on folders. For direct mode operation it is probably reasonable to select "files or folders".
+3. Add a "Run shell script" element and fill in line with the following script:
+
+ #!/usr/bin/bash
+ source ~/.bash_profile
+ for f in "$@"
+ do
+ cd "$(dirname "$f")" && git-annex get "$f"
+ done
+
+The purpose of the first line is there to get git-annex on to the path. The
+reason for the for loop is in case multiple files or folders are marked
+when running the context menu command.
+
+Finally save the the workflow under the name for which it should be listed in the context menu.
+
+## your file manager here
+
+Edit this page and add instructions!
+
+## general
+
+If your file manager can run a command on a file, it should be easy to
+integrate git-annex with it. A simple script will suffice:
+
+ #!/bin/sh
+ git-annex get --notify-start --notify-finish -- "$@"
+
+The --notify-start and --notify-stop options make git-annex display a
+desktop notification. This is useful to give the user an indication that
+their action took effect. Desktop notifications are currently only
+implemented for Linux.
diff --git a/doc/tips/file_manager_integration/comment_1_0f82520f415b4715946358658e1799a8._comment b/doc/tips/file_manager_integration/comment_1_0f82520f415b4715946358658e1799a8._comment
new file mode 100644
index 000000000..2dedcc884
--- /dev/null
+++ b/doc/tips/file_manager_integration/comment_1_0f82520f415b4715946358658e1799a8._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnmF_9CAtfqdZkC4e-_dCX-rK5bqh4RWkw"
+ nickname="Carl"
+ subject="Finder added"
+ date="2014-04-23T13:19:02Z"
+ content="""
+For some reason I do not manage to get the shell script to pretty print. I can also supply a screenshot of the Automator, but do not manage to upload it to the wiki.
+"""]]
diff --git a/doc/tips/file_manager_integration/comment_2_9cb6b7fcb8e33a75efd2f92d7e40a9c5._comment b/doc/tips/file_manager_integration/comment_2_9cb6b7fcb8e33a75efd2f92d7e40a9c5._comment
new file mode 100644
index 000000000..ad3e4c0b4
--- /dev/null
+++ b/doc/tips/file_manager_integration/comment_2_9cb6b7fcb8e33a75efd2f92d7e40a9c5._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 2"
+ date="2014-04-23T17:49:09Z"
+ content="""
+@Carl, I've fixed the formatting. To add a picture, you'd need to send me a pull request adding it to the git repo.
+"""]]
diff --git a/doc/tips/file_manager_integration/comment_3_e7096737268cf66fce2709e9e4937f51._comment b/doc/tips/file_manager_integration/comment_3_e7096737268cf66fce2709e9e4937f51._comment
new file mode 100644
index 000000000..1c3c7eeb5
--- /dev/null
+++ b/doc/tips/file_manager_integration/comment_3_e7096737268cf66fce2709e9e4937f51._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="72.0.72.144"
+ subject="comment 3"
+ date="2014-10-01T02:02:39Z"
+ content="""
+for some reason this doesn't work in gnome2. i had to add the shortcuts in /usr/share/nautilus-scripts (iirc). --[[anarcat]]
+"""]]
diff --git a/doc/tips/flickrannex/comment_14_c728f10074d194efa8b2c60e97d275e7._comment b/doc/tips/flickrannex/comment_14_c728f10074d194efa8b2c60e97d275e7._comment
new file mode 100644
index 000000000..f625d6bc0
--- /dev/null
+++ b/doc/tips/flickrannex/comment_14_c728f10074d194efa8b2c60e97d275e7._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="72.0.72.144"
+ subject="great job on that plugin!"
+ date="2014-04-15T04:47:17Z"
+ content="""
+it's pretty awesome to have 1TB of free storage like that out there... but for storing photos, it could be improved - I filed a few bugs on the github repo here:
+
+https://github.com/TobiasTheViking/flickrannex/issues/created_by/anarcat?state=open
+
+thanks!
+"""]]
diff --git a/doc/tips/flickrannex/comment_15_2dd75800e4db58761fcbbd1954a36f1f._comment b/doc/tips/flickrannex/comment_15_2dd75800e4db58761fcbbd1954a36f1f._comment
new file mode 100644
index 000000000..67f7d3b74
--- /dev/null
+++ b/doc/tips/flickrannex/comment_15_2dd75800e4db58761fcbbd1954a36f1f._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmvzzyDA8uXFz8yokeCrepbh8PwWe_WrjE"
+ nickname="Michael"
+ subject="current status?"
+ date="2014-08-08T16:00:18Z"
+ content="""
+Hi, just wondering what the current status of this plugin is.
+The repo at TobiasTheViking looks a little odd - it has a few large commits from January with an unknown author, and the last one appears to completely remove the main script.
+
+What's going on? does it need a fork?
+"""]]
diff --git a/doc/tips/flickrannex/comment_16_2f65093ec9f6d67d2cfe5b5fae201123._comment b/doc/tips/flickrannex/comment_16_2f65093ec9f6d67d2cfe5b5fae201123._comment
new file mode 100644
index 000000000..f45aad147
--- /dev/null
+++ b/doc/tips/flickrannex/comment_16_2f65093ec9f6d67d2cfe5b5fae201123._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmvzzyDA8uXFz8yokeCrepbh8PwWe_WrjE"
+ nickname="Michael"
+ subject="a more recent fork"
+ date="2014-08-08T16:03:24Z"
+ content="""
+Just a note that I poked around on github and saw a more recent cleaned up version in this fork: https://github.com/magthe/flickrannex/tree/devo
+
+
+"""]]
diff --git a/doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_10_4440a80d64c60c7312d5c405d54e607a._comment b/doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_10_4440a80d64c60c7312d5c405d54e607a._comment
index 4ee70bcd7..b1031646f 100644
--- a/doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_10_4440a80d64c60c7312d5c405d54e607a._comment
+++ b/doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_10_4440a80d64c60c7312d5c405d54e607a._comment
@@ -9,7 +9,7 @@
Sorry, I ment that the file containing the symmetric encryption key should obviously not be used to encrypt itself, it would be stored in the repository \"unencrypted\" (but protected with a passphrase)
-> store a non-encrypted gpg key alongside the repsitory encrypted with it, but then you have to rely on a passphrase for all your security.
+> store a non-encrypted gpg key alongside the repository encrypted with it, but then you have to rely on a passphrase for all your security.
Exactly. I think such a mode be a great addition. It might not be as secure as encryption based on a private key - depending on the passphrase strength -, but it would certainly be a lot more convenient and portable (and still much more secure than the shared encryption method).
"""]]
diff --git a/doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_9_3784e0c828cd60b6a9075c2d32d070cc._comment b/doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_9_3784e0c828cd60b6a9075c2d32d070cc._comment
index 24e5f5b83..7a452e8f0 100644
--- a/doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_9_3784e0c828cd60b6a9075c2d32d070cc._comment
+++ b/doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_9_3784e0c828cd60b6a9075c2d32d070cc._comment
@@ -8,7 +8,7 @@
Then you would need to decrypt the repository in order get the key you need to decrypt the repository. The impossibility of this design is why I didn't do that!
-It would certainly be possible to store a non-encrypted gpg key alongside the repsitory encrypted with it, but then you have to rely on a passphrase for all your security.
+It would certainly be possible to store a non-encrypted gpg key alongside the repository encrypted with it, but then you have to rely on a passphrase for all your security.
You should file a bug report for the bug you saw..
"""]]
diff --git a/doc/tips/googledriveannex/comment_2_c98c00e87bc921158c9c3698fd9f89c9._comment b/doc/tips/googledriveannex/comment_2_c98c00e87bc921158c9c3698fd9f89c9._comment
new file mode 100644
index 000000000..e90903b19
--- /dev/null
+++ b/doc/tips/googledriveannex/comment_2_c98c00e87bc921158c9c3698fd9f89c9._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawl64jV2rE8GMogJ6XuqESSkz78RVBgVdGw"
+ nickname="Mesut"
+ subject="I can't add google drive as remote"
+ date="2014-04-10T07:55:56Z"
+ content="""
+Hi,
+
+I am new to git-annex and I want to use google drive as remote but I can't.
+
+I create syslink to `googledriveannex` in `/usr/local/bin`.
+
+When I execute below command, command waiting but not make anything:
+
+`$ git annex initremote googledrive type=external externaltype=googledrive encryption=shared folder=gitannex`
+
+`initremote googledrive (encryption setup)` # Waiting but does not do anything.
+
+What I am doing wrong?
+
+Thanks for helps
+
+"""]]
diff --git a/doc/tips/googledriveannex/comment_3_e7ba5620c0946874f0ae1287f99d1177._comment b/doc/tips/googledriveannex/comment_3_e7ba5620c0946874f0ae1287f99d1177._comment
new file mode 100644
index 000000000..c80dbf01f
--- /dev/null
+++ b/doc/tips/googledriveannex/comment_3_e7ba5620c0946874f0ae1287f99d1177._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 3"
+ date="2014-04-17T20:58:41Z"
+ content="""
+@Mesut, I think you're doing everything right. It can take a long time for the highly secure gpg key to be generated. Sit tight and let it finish, or you can pass --fast to generate a key that is a tiny bit less secure.
+"""]]
diff --git a/doc/tips/googledriveannex/comment_4_239091adaea6ae39fa9a4d9719667a98._comment b/doc/tips/googledriveannex/comment_4_239091adaea6ae39fa9a4d9719667a98._comment
new file mode 100644
index 000000000..7c9675045
--- /dev/null
+++ b/doc/tips/googledriveannex/comment_4_239091adaea6ae39fa9a4d9719667a98._comment
@@ -0,0 +1,41 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmp1ThsNNAbSn46ju-gwFELfStlhl8usJo"
+ nickname="donkeyicydragon"
+ subject="Googledrive annex on second repository"
+ date="2014-04-19T20:45:23Z"
+ content="""
+Hi Johnny,
+
+I wrote a patch for googledriveannex that fixed this problem for me. First you add the google drive special remote in repo1 then you clone repo1 into repo2. In repo2 you do \"git annex enableremote googldrivespecialremotename\" and it should work.
+The problem was that the init method, that is called by git annex when a special remote is first created but also when it is enabled somewhere else, did not factor in the possibility that it had already been created.
+I will simultaneously submit the patch to the author of the special remote plugin but here it is for you to quickly get going:
+
+ diff --git a/git-annex-remote-googledrive b/git-annex-remote-googledrive
+ index 49cd917..c8e70f3 100755
+ --- a/git-annex-remote-googledrive
+ +++ b/git-annex-remote-googledrive
+ @@ -330,13 +330,16 @@ def initremote(line):
+ oauth = os.getenv(\"OAUTH\") or \"\"
+ encryption = common.getConfig(\"encryption\")
+ myfolder = common.getConfig(\"folder\")
+ - stored_creds = sys.modules[\"__main__\"].login({\"oauth\": oauth})
+ - if len(myfolder) and stored_creds:
+ - common.sprint('SETCONFIG myfolder ' + myfolder + '')
+ - common.sprint('SETCONFIG stored_creds ' + json.dumps(stored_creds) + '')
+ - common.sprint('INITREMOTE-SUCCESS')
+ + if not common.getConfig(\"stored_creds\"):
+ + stored_creds = sys.modules[\"__main__\"].login({\"oauth\": oauth})
+ + if len(myfolder) and stored_creds:
+ + common.sprint('SETCONFIG myfolder ' + myfolder + '')
+ + common.sprint('SETCONFIG stored_creds ' + json.dumps(stored_creds) + '')
+ + common.sprint('INITREMOTE-SUCCESS')
+ + else:
+ + common.sprint('INITREMOTE-FAILURE You need to set OAUTH environment variables and folder and encryption parameters when running initremote.')
+ else:
+ - common.sprint('INITREMOTE-FAILURE You need to set OAUTH environment variables and folder and encryption parameters when running initremote.')
+ + common.sprint('INITREMOTE-SUCCESS')
+ common.log(\"Done\")
+
+ def prepare(line):
+ --
+"""]]
diff --git a/doc/tips/googledriveannex/comment_5_b547ee81946e14975f082f22ccbea035._comment b/doc/tips/googledriveannex/comment_5_b547ee81946e14975f082f22ccbea035._comment
new file mode 100644
index 000000000..93b7fc508
--- /dev/null
+++ b/doc/tips/googledriveannex/comment_5_b547ee81946e14975f082f22ccbea035._comment
@@ -0,0 +1,29 @@
+[[!comment format=mdwn
+ username="hugo"
+ ip="37.160.8.232"
+ subject="'content-length' error"
+ date="2014-10-05T19:40:23Z"
+ content="""
+I moved a big PDF to Google Drive (with shared encryption).
+
+Now, when I try to get it again:
+
+ get Documents/Guyau - The Non-Religion of the Future, nonreligionoffut00guyarich.pdf (from googledrive...) (gpg)
+ Traceback (most recent call last):
+ File \"/usr/bin/git-annex-remote-googledrive\", line 411, in <module>
+ common.startRemote()
+ File \"/usr/share/googledriveannex-git/lib/CommonFunctions.py\", line 555, in startRemote
+ sys.modules[\"__main__\"].transfer(line)
+ File \"/usr/bin/git-annex-remote-googledrive\", line 372, in transfer
+ if getFile(line[2], \" \".join(line[3:]), folder):
+ File \"/usr/bin/git-annex-remote-googledrive\", line 257, in getFile
+ ret = common.fetchPage({\"link\": download_url, \"headers\": [(\"Authorization\", \"Bearer \" + credentials.access_token)], \"progress\": \"true\"})
+ File \"/usr/share/googledriveannex-git/lib/CommonFunctions.py\", line 207, in fetchPage
+ totalsize = int(con.headers['content-length'])
+ File \"/usr/lib/python2.7/rfc822.py\", line 388, in __getitem__
+ return self.dict[name.lower()]
+ KeyError: 'content-length'
+
+It works for smaller files. Is there a limit on the file size?
+
+"""]]
diff --git a/doc/tips/googledriveannex/comment_6_3a693129a0928b327c7ac4ef45c96acb._comment b/doc/tips/googledriveannex/comment_6_3a693129a0928b327c7ac4ef45c96acb._comment
new file mode 100644
index 000000000..122cdc898
--- /dev/null
+++ b/doc/tips/googledriveannex/comment_6_3a693129a0928b327c7ac4ef45c96acb._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="hugo"
+ ip="37.160.8.232"
+ subject="Re: 'content-length' error "
+ date="2014-10-05T19:43:04Z"
+ content="""
+The Google Drive interface tells me:
+
+Size 29,776,826 bytes
+"""]]
diff --git a/doc/tips/googledriveannex/comment_7_3a645a0cd1e4c939b7a4b8a97a0e9b03._comment b/doc/tips/googledriveannex/comment_7_3a645a0cd1e4c939b7a4b8a97a0e9b03._comment
new file mode 100644
index 000000000..970a5e7b5
--- /dev/null
+++ b/doc/tips/googledriveannex/comment_7_3a645a0cd1e4c939b7a4b8a97a0e9b03._comment
@@ -0,0 +1,26 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 7"
+ date="2014-10-06T15:23:59Z"
+ content="""
+Hugo, I didn't write this code, but it looks to me like you could work around the problem by changing line 207 of lib/CommonFunctions.py:
+
+<pre>
+diff --git a/lib/CommonFunctions.py b/lib/CommonFunctions.py
+index 050b93e..083f5d6 100644
+--- a/lib/CommonFunctions.py
++++ b/lib/CommonFunctions.py
+@@ -204,7 +204,7 @@ def fetchPage(params={}):
+ if get(\"progress\"):
+ data = False
+ tdata = \"\"
+- totalsize = int(con.headers['content-length'])
++ totalsize = 0
+ chunksize = totalsize / 100
+ if chunksize < 4096:
+ chunksize = 4096
+</pre>
+
+Probably the API used to return a content-length header, and no longer does, or doesn't do so reliably. It does not seem to be used for anything too important -- this change will break git-annex's progress display a little bit, perhaps.
+"""]]
diff --git a/doc/tips/googledriveannex/comment_8_7df56c426b27f12dfde09edf345cb76b._comment b/doc/tips/googledriveannex/comment_8_7df56c426b27f12dfde09edf345cb76b._comment
new file mode 100644
index 000000000..d9bcc333c
--- /dev/null
+++ b/doc/tips/googledriveannex/comment_8_7df56c426b27f12dfde09edf345cb76b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="hugo"
+ ip="79.212.203.201"
+ subject="Re: comment 7 Re: 'content-length' error "
+ date="2014-10-06T16:45:03Z"
+ content="""
+Thanks Joey, I was able to get the file after this modification. I’ll make a pull request on Github.
+"""]]
diff --git a/doc/tips/megaannex/comment_1_eec701662debd2a78c48243dbcebf59a._comment b/doc/tips/megaannex/comment_1_eec701662debd2a78c48243dbcebf59a._comment
new file mode 100644
index 000000000..8b4b7f82b
--- /dev/null
+++ b/doc/tips/megaannex/comment_1_eec701662debd2a78c48243dbcebf59a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-07-21T19:56:13Z"
+ content="""
+Note that there has apparently been an API break, so this special remote may not work anymore. See: <http://git-annex.branchable.com/forum/MegaAnnex_not_working./>
+"""]]
diff --git a/doc/tips/megaannex/comment_2_c1158b7ec15646d64cae8215ce845642._comment b/doc/tips/megaannex/comment_2_c1158b7ec15646d64cae8215ce845642._comment
new file mode 100644
index 000000000..99da0e370
--- /dev/null
+++ b/doc/tips/megaannex/comment_2_c1158b7ec15646d64cae8215ce845642._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkzwmw_zyMpZC9_J7ey--woeYPoZkAOgGw"
+ nickname="dxtrish"
+ subject="comment 2"
+ date="2014-09-07T21:16:09Z"
+ content="""
+Because megaannex apparently isn't working nowadays I have created a compatible program in Go. I think it should handle everything except REMOVE right now.
+
+You can find it on github: https://github.com/dxtr/megaannex-go
+"""]]
diff --git a/doc/tips/metadata_driven_views.mdwn b/doc/tips/metadata_driven_views.mdwn
index 17ebc6869..1826ed1ce 100644
--- a/doc/tips/metadata_driven_views.mdwn
+++ b/doc/tips/metadata_driven_views.mdwn
@@ -6,7 +6,7 @@ keeps track of.
One nice way to use the metadata is through **views**. You can ask
git-annex to create a view of files in the currently checked out branch
-that have certian metadata. Once you're in a view, you can move and copy
+that have certain metadata. Once you're in a view, you can move and copy
files to adjust their metadata further. Rather than the traditional
hierarchical directory structure, views are dynamic; you can easily
refine or reorder a view.
@@ -106,9 +106,9 @@ by tag.
# tree -d
2014
|-- work
- |-- todo
+ |-- todo
|-- urgent
- `-- done
+ `-- done
2013
|-- work
`-- done
diff --git a/doc/tips/metadata_driven_views/comment_1_1d6793701fd8a1a66bae04662cf853ce._comment b/doc/tips/metadata_driven_views/comment_1_1d6793701fd8a1a66bae04662cf853ce._comment
new file mode 100644
index 000000000..808a332af
--- /dev/null
+++ b/doc/tips/metadata_driven_views/comment_1_1d6793701fd8a1a66bae04662cf853ce._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlFZFMFm-AapYAgV_V5X9HRJxWvhdiX9fY"
+ nickname="Reiner"
+ subject="comment 1"
+ date="2014-03-24T21:11:31Z"
+ content="""
+I have played around with views and found out that I can create new tags by creating directories in the view and that I can created files in those new directories that are not contained in the original working tree. The behavoiur of git annex in this behaviour is a bit strange.
+
+Assume for example you have a file \"foo\" with tag \"t1\" and switch to the tag view. Then create a directory \"t2\" and a file \"bar\" in it. Add the file, sync, and switch back to the master branch. If you enter the tag view again, the directory \"t2\" will be vanished, i.e. your newly created file is gone, too. This is not surprising, as the file has never been added to the original working tree. However, another \"git annex sync\" will restore the file.
+
+I am unsure what behaviour I would expect, maybe it shouldn't be possible to files to a view in the first place, or newly created files might be collected in a separate branch. On the other hand, it seems reasonable to add a new file with a new tag at the same time. Anyway, I found it confusing that I can seemingly lose a file like this. It took me a bit of time to figure out that another sync recovers the file.
+"""]]
diff --git a/doc/tips/metadata_driven_views/comment_2_13ae4e3668b693c0eefaca23b88515cf._comment b/doc/tips/metadata_driven_views/comment_2_13ae4e3668b693c0eefaca23b88515cf._comment
new file mode 100644
index 000000000..3ec563311
--- /dev/null
+++ b/doc/tips/metadata_driven_views/comment_2_13ae4e3668b693c0eefaca23b88515cf._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawln3ckqKx0x_xDZMYwa9Q1bn4I06oWjkog"
+ nickname="Michael"
+ subject="possible to have a view based on file location info?"
+ date="2014-06-08T03:55:24Z"
+ content="""
+For example, I'd like to have a view that only contains files present in this git-annex repository (no dangling symlinks).
+
+"""]]
diff --git a/doc/tips/metadata_driven_views/comment_3_196f55e52a5d8a8f061603ab87ad04ad._comment b/doc/tips/metadata_driven_views/comment_3_196f55e52a5d8a8f061603ab87ad04ad._comment
new file mode 100644
index 000000000..e522ed837
--- /dev/null
+++ b/doc/tips/metadata_driven_views/comment_3_196f55e52a5d8a8f061603ab87ad04ad._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnPgn611P6ym5yyL0BS8rUzO0_ZKRldMt0"
+ nickname="Samuel"
+ subject="git annex view */=podcast"
+ date="2014-08-19T06:11:50Z"
+ content="""
+Hi,
+
+Would it be hard to handle the wildcard character in the location view before the = sign.
+
+ git annex foo/=*
+
+works but
+
+ git annex *=/bar
+
+does not.
+"""]]
diff --git a/doc/tips/owncloudannex/comment_8_6579203d726f4a39db02fcdda156e12c._comment b/doc/tips/owncloudannex/comment_8_6579203d726f4a39db02fcdda156e12c._comment
new file mode 100644
index 000000000..c0295be03
--- /dev/null
+++ b/doc/tips/owncloudannex/comment_8_6579203d726f4a39db02fcdda156e12c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn97aJ3CN48pBix54RDHRhqtBzeklNEbSA"
+ nickname="Manuel"
+ subject="advantage of owncloudannex over webdav remote?"
+ date="2015-01-08T18:00:48Z"
+ content="""
+It seems that owncloud can also be accessed using the webdav remote. Does owncloudannex offer any features which aren't implemented in the webdav remote?
+"""]]
diff --git a/doc/tips/publishing_your_files_to_the_public.mdwn b/doc/tips/publishing_your_files_to_the_public.mdwn
new file mode 100644
index 000000000..3845ae3e9
--- /dev/null
+++ b/doc/tips/publishing_your_files_to_the_public.mdwn
@@ -0,0 +1,55 @@
+# Creating a special S3 remote to hold files shareable by URL
+
+(In this example, I'll assume you'll be creating a bucket in S3 named **public-annex** and a special remote in git-annex, which will store its files in the previous bucket, named **public-s3**, but change these names if you are going to do the thing for real)
+
+First, in the AWS dashboard, go to (or create) the bucket you will use at S3 and add a public get policy to it:
+
+ {
+ "Version": "2008-10-17",
+ "Statement": [
+ {
+ "Sid": "AllowPublicRead",
+ "Effect": "Allow",
+ "Principal": {
+ "AWS": "*"
+ },
+ "Action": "s3:GetObject",
+ "Resource": "arn:aws:s3:::public-annex/*"
+ }
+ ]
+ }
+
+Then set up your special [S3](http://git-annex.branchable.com/special_remotes/S3/) remote with (at least) these options:
+
+ git annex initremote public-s3 type=s3 encryption=none bucket=public-annex chunk=0
+
+This way git-annex will upload the files to this repo, (when you call `git annex copy [FILES...] --to public-s3`) without encrypting them and without chunking them, and, because of the policy of the bucket, they will be accessible by anyone with the link.
+
+Following the example, the files will be accessible at `http://public-annex.s3.amazonaws.com/KEY` where `KEY` is the file key created by git-annex and which you can discover running
+
+ git annex lookupkey FILEPATH
+
+This way you can share a link to each file you have at your S3 remote.
+
+___________________
+
+## Sharing all links in a folder
+
+To share all the links in a given folder, for example, you can go to that folder and run (this is an example with the _fish_ shell, but I'm sure you can do the same in _bash_, I just don't know exactly):
+
+ for filename in (ls)
+ echo $filename": https://public-annex.s3.amazonaws.com/"(git annex lookupkey $filename)
+ end
+
+## Sharing all links matching certain metadata
+
+The same applies to all the filters you can do with git-annex.
+
+For example, let's share links to all the files whose _author_'s name starts with "Mario" and are, in fact, stored at your public-s3 remote.
+However, instead of just a list of links we will output a markdown-formatted list of the filenames linked to their S3 urls:
+
+ for filename in (git annex find --metadata "author=Mario*" --and --in public-s3)
+ echo "* ["$filename"](https://public-annex.s3.amazonaws.com/"(git annex lookupkey $filename)")"
+ end
+
+Very useful.
diff --git a/doc/tips/publishing_your_files_to_the_public/comment_1_48f545ce26dbec944f96796ed3b9204d._comment b/doc/tips/publishing_your_files_to_the_public/comment_1_48f545ce26dbec944f96796ed3b9204d._comment
new file mode 100644
index 000000000..6ee85367e
--- /dev/null
+++ b/doc/tips/publishing_your_files_to_the_public/comment_1_48f545ce26dbec944f96796ed3b9204d._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""nice tip"""
+ date="2014-12-01T22:59:58Z"
+ content="""
+Thanks Giovanni for that nice tip!
+
+You can additionally publish the whole git repository
+by eg pushing it to github. (Not if it contains private files
+or if you have embedded encryption keys or credentials though.)
+
+You can tell git-annex the public url for the files too, and then others
+can just clone the git repository and use git-annex to download the files
+from S3.
+
+You could set that up by running something like this:
+
+ for filename in $(git annex find --in public-s3); do
+ git annex addurl --file "$filename" https://public-annex.s3.amazonaws.com/"$(git annex lookupkey $filename)"
+ done
+"""]]
diff --git a/doc/tips/shared_git_annex_directory_between_multiple_users/comment_1_01db8cf9dff016bd8e0498d36f325418._comment b/doc/tips/shared_git_annex_directory_between_multiple_users/comment_1_01db8cf9dff016bd8e0498d36f325418._comment
new file mode 100644
index 000000000..4b7b516c5
--- /dev/null
+++ b/doc/tips/shared_git_annex_directory_between_multiple_users/comment_1_01db8cf9dff016bd8e0498d36f325418._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="madduck"
+ ip="2001:a60:f0fb:0:224:d7ff:fe04:c82c"
+ subject="Does not work"
+ date="2014-04-06T10:48:06Z"
+ content="""
+This does not seem to work, even with latest git-annex. I think it's because git-annex [[!debbug desc=\"creates files without honouring +s on the parent directory\" 729757]]. I just found out it also doesn't honour default ACLs. I hope this can be fixed soon.
+"""]]
diff --git a/doc/tips/skydriveannex/comment_10_c3465b5587548dea56b80b32cd66d653._comment b/doc/tips/skydriveannex/comment_10_c3465b5587548dea56b80b32cd66d653._comment
new file mode 100644
index 000000000..58b6c9077
--- /dev/null
+++ b/doc/tips/skydriveannex/comment_10_c3465b5587548dea56b80b32cd66d653._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="Syncing not working :-/"
+ date="2014-05-17T19:52:33Z"
+ content="""
+Error log says:
+
+ git-annex-remote-skydrive is not installed in PATH (/Applications/git-annex.app/Contents/MacOS/bundle:/Applications/git-annex.app/Contents/MacOS/bundle:/Applications/git-annex.app/Contents/MacOS/bundle:/Applications/git-annex.app/Contents/MacOS/bundle:/Applications/git-annex.app/Contents/MacOS/bundle:/Applications/git-annex.app/Contents/MacOS/bundle:/Applications/git-annex.app/Contents/MacOS/bundle:/Applications/git-annex.app/Contents/MacOS/bundle:/usr/bin:/bin:/usr/sbin:/sbin)
+
+BUT I did a symlink, I even did 2 to 2 different locations that are in my path:
+
+ cd /Users/ovi/skydriveannex/
+ ln -sf `pwd`/git-annex-remote-skydrive /usr/bin/git-annex-remote-skydrive
+ ln -sf `pwd`/git-annex-remote-skydrive /opt/local/bin/git-annex-remote-skydrive
+"""]]
diff --git a/doc/tips/skydriveannex/comment_1_bf383481b2bbb962fbfe783b9f2f213a._comment b/doc/tips/skydriveannex/comment_1_bf383481b2bbb962fbfe783b9f2f213a._comment
new file mode 100644
index 000000000..5bca3dfee
--- /dev/null
+++ b/doc/tips/skydriveannex/comment_1_bf383481b2bbb962fbfe783b9f2f213a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="working for git-annex assistant?"
+ date="2014-05-13T18:40:31Z"
+ content="""
+Will following these steps lead to the Skydrive repo being visible and recognized by the assistant too?
+"""]]
diff --git a/doc/tips/skydriveannex/comment_2_1f747018b35ab8accd2bf0905e6ad926._comment b/doc/tips/skydriveannex/comment_2_1f747018b35ab8accd2bf0905e6ad926._comment
new file mode 100644
index 000000000..0c737129b
--- /dev/null
+++ b/doc/tips/skydriveannex/comment_2_1f747018b35ab8accd2bf0905e6ad926._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 2"
+ date="2014-05-16T16:26:50Z"
+ content="""
+The assistant will use any repositories you set up, no matter how you set them up.
+"""]]
diff --git a/doc/tips/skydriveannex/comment_3_8b9444006734262693f71e50a40eae1d._comment b/doc/tips/skydriveannex/comment_3_8b9444006734262693f71e50a40eae1d._comment
new file mode 100644
index 000000000..892462cb3
--- /dev/null
+++ b/doc/tips/skydriveannex/comment_3_8b9444006734262693f71e50a40eae1d._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="Hitting trouble"
+ date="2014-05-16T17:49:59Z"
+ content="""
+ shiny-2:skydriveannex ovi$ git annex initremote skydrive type=external externaltype=skydrive encryption=shared folder=git-annex
+ git-annex: First run: git-annex init
+ shiny-2:skydriveannex ovi$
+
+Above wasn't mentioned in the tutorial so I tried it:
+
+ shiny-2:skydriveannex ovi$ git-annex init
+ init ok
+ (Recording state in git...)
+ shiny-2:skydriveannex ovi$
+
+What now? Never got asked about any OAUTH...
+"""]]
diff --git a/doc/tips/skydriveannex/comment_4_8b01dc6ca1082a8c24ff65fec9d759d8._comment b/doc/tips/skydriveannex/comment_4_8b01dc6ca1082a8c24ff65fec9d759d8._comment
new file mode 100644
index 000000000..7edc9d414
--- /dev/null
+++ b/doc/tips/skydriveannex/comment_4_8b01dc6ca1082a8c24ff65fec9d759d8._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="comment 4"
+ date="2014-05-16T17:51:29Z"
+ content="""
+And no link was opened automatically
+"""]]
diff --git a/doc/tips/skydriveannex/comment_5_1d220d96945d497f3a93b5d848eb3995._comment b/doc/tips/skydriveannex/comment_5_1d220d96945d497f3a93b5d848eb3995._comment
new file mode 100644
index 000000000..f6a4c7415
--- /dev/null
+++ b/doc/tips/skydriveannex/comment_5_1d220d96945d497f3a93b5d848eb3995._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 5"
+ date="2014-05-16T19:03:34Z"
+ content="""
+You have to run git-annex init before you can use other git-annex commands. I think if you run git annex initremote now, it will work.
+"""]]
diff --git a/doc/tips/skydriveannex/comment_6_a7a3afdc7eed9a0eda48dcb57f1e87c6._comment b/doc/tips/skydriveannex/comment_6_a7a3afdc7eed9a0eda48dcb57f1e87c6._comment
new file mode 100644
index 000000000..d589a676c
--- /dev/null
+++ b/doc/tips/skydriveannex/comment_6_a7a3afdc7eed9a0eda48dcb57f1e87c6._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="comment 6"
+ date="2014-05-16T19:25:03Z"
+ content="""
+tried it but no luck:
+
+ git annex initremote skydrive type=external externaltype=skydrive encryption=shared folder=git-annex
+ initremote skydrive (encryption setup) (shared cipher) env: python2: No such file or directory
+ git-annex: external special remote protocol error, unexpectedly received \"\" (unable to parse command)
+"""]]
diff --git a/doc/tips/skydriveannex/comment_7_7fcd9c6b5e2a3fc7b753eeac06164036._comment b/doc/tips/skydriveannex/comment_7_7fcd9c6b5e2a3fc7b753eeac06164036._comment
new file mode 100644
index 000000000..d789a8d94
--- /dev/null
+++ b/doc/tips/skydriveannex/comment_7_7fcd9c6b5e2a3fc7b753eeac06164036._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="making some progress"
+ date="2014-05-17T19:08:16Z"
+ content="""
+Figured out how to solve that:
+ which python
+ /opt/local/bin/python
+ shiny-2:git-annex ovi$ sudo ln -s `which python` /usr/bin/python2
+
+The URL opened in my browser, I allowed access, waited for the redirect, copied the URL, hit the next problem:
+
+ OAUTH='https://login.live.com/oauth20_desktop.srf?code=hidden_on_purpose' git annex initremote skydrive type=external externaltype=skydrive encryption=shared folder=git-annex
+initremote skydrive (encryption setup) (shared cipher) 21:06:27 [skydriveannex-0.2.1] <module> : 'Starting'
+ 21:06:27 [skydriveannex-0.2.1] login : 'EXCEPTION api.auth_get_token:ImportError('No module named requests',)'
+ git-annex: You need to set OAUTH environment variables and folder and encryption parameters when running initremote.
+"""]]
diff --git a/doc/tips/skydriveannex/comment_8_856eaa1b167033aede91a937099c7833._comment b/doc/tips/skydriveannex/comment_8_856eaa1b167033aede91a937099c7833._comment
new file mode 100644
index 000000000..0fc61da00
--- /dev/null
+++ b/doc/tips/skydriveannex/comment_8_856eaa1b167033aede91a937099c7833._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="Done! Success!"
+ date="2014-05-17T19:23:06Z"
+ content="""
+realized I need requests. to install I need pip.
+
+ sudo port install py27-pip
+
+ pip install requests
+
+ login : 'EXCEPTION api.auth_get_token:ImportError('No module named six',)'
+
+ pip install six
+
+Finished! Seems to be working and I can see this repository in my assistant!
+"""]]
diff --git a/doc/tips/skydriveannex/comment_9_cfcf767a1bf07957b76d7f44ef8a9500._comment b/doc/tips/skydriveannex/comment_9_cfcf767a1bf07957b76d7f44ef8a9500._comment
new file mode 100644
index 000000000..614e74c98
--- /dev/null
+++ b/doc/tips/skydriveannex/comment_9_cfcf767a1bf07957b76d7f44ef8a9500._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="QUESTION"
+ date="2014-05-17T19:29:37Z"
+ content="""
+Wondering about this:
+
+ encryption=shared
+
+I read what it means: http://git-annex.branchable.com/encryption/
+
+But now I'm wondering how the repos which I set up via the assistant have been setup. when setting them up I only had the choice between \"encrypt all files\" and \"disable encryption\" so how can I check what settings my other repos are using?
+"""]]
diff --git a/doc/tips/transmission_integration.mdwn b/doc/tips/transmission_integration.mdwn
new file mode 100644
index 000000000..12f556b90
--- /dev/null
+++ b/doc/tips/transmission_integration.mdwn
@@ -0,0 +1,11 @@
+[[This simple script|transmission_integration/transmission_integration.sh]] will make sure files downloaded by the
+[Transmission BitTorrent client](https://www.transmissionbt.com/) will
+be added into git-annex.
+
+To enable it, install it to /usr/local/bin and add the following to
+your settings.json:
+
+ "script-torrent-done-enabled": true,
+ "script-torrent-done-filename": "/usr/local/bin/transmission-git-annex-add",
+
+-- [[users/anarcat]]
diff --git a/doc/tips/transmission_integration/transmission_integration.sh b/doc/tips/transmission_integration/transmission_integration.sh
new file mode 100644
index 000000000..8b4dcd4d0
--- /dev/null
+++ b/doc/tips/transmission_integration/transmission_integration.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+
+set -e
+
+# environment from transmission:
+# TR_APP_VERSION
+# TR_TIME_LOCALTIME
+# TR_TORRENT_DIR
+# TR_TORRENT_HASH
+# TR_TORRENT_ID
+# TR_TORRENT_NAME
+# source: https://trac.transmissionbt.com/wiki/Scripts
+
+if [ -z "$TR_APP_VERSION" ]; then
+ echo "missing expected $TR_APP_VERSION from Transmission"
+ exit 1
+fi
+
+message="transmission adding torrent '$TR_TORRENT_NAME'
+
+TR_APP_VERSION: $TR_APP_VERSION
+TR_TIME_LOCALTIME: $TR_TIME_LOCALTIME
+TR_TORRENT_DIR: $TR_TORRENT_DIR
+TR_TORRENT_HASH: $TR_TORRENT_HASH
+TR_TORRENT_ID: $TR_TORRENT_ID
+TR_TORRENT_NAME: $TR_TORRENT_NAME
+"
+
+# heredocs preserve newlines
+cat <<EOF
+$message
+EOF
+# add the actual torrent and commit whatever's left to commit
+cd "$TR_TORRENT_DIR"
+git annex add "$TR_TORRENT_NAME" && \
+git commit -F- <<EOF
+$message
+EOF
diff --git a/doc/tips/using_Amazon_S3.mdwn b/doc/tips/using_Amazon_S3.mdwn
index 0c68c7387..d6f621786 100644
--- a/doc/tips/using_Amazon_S3.mdwn
+++ b/doc/tips/using_Amazon_S3.mdwn
@@ -14,7 +14,7 @@ like "2512E3C7"
Next, create the S3 remote, and describe it.
- # git annex initremote cloud type=S3 keyid=2512E3C7
+ # git annex initremote cloud type=S3 chunk=1MiB keyid=2512E3C7
initremote cloud (encryption setup with gpg key C910D9222512E3C7) (checking bucket) (creating bucket in US) (gpg) ok
# git annex describe cloud "at Amazon's US datacenter"
describe cloud ok
@@ -24,8 +24,8 @@ repository use the same S3 remote is easy:
# cd /media/usb/annex
# git pull laptop
- # git annex initremote cloud
- initremote cloud (gpg) (checking bucket) ok
+ # git annex enableremote cloud
+ enableremote cloud (gpg) (checking bucket) ok
Now the remote can be used like any other remote.
diff --git a/doc/tips/using_Amazon_S3/comment_10_43f3f12a83e3ace1674eae395b865409._comment b/doc/tips/using_Amazon_S3/comment_10_43f3f12a83e3ace1674eae395b865409._comment
new file mode 100644
index 000000000..fa306212f
--- /dev/null
+++ b/doc/tips/using_Amazon_S3/comment_10_43f3f12a83e3ace1674eae395b865409._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkPIqJZ88VZEVqLhLOd1LMdYXcy6bAW9qE"
+ nickname="Lemao"
+ subject="comment 10"
+ date="2015-01-07T23:53:32Z"
+ content="""
+My bad. I didn't realize git annex creates a new branch. After I pushed it, the clone was able to enableremote and I was able to get the file.
+
+"""]]
diff --git a/doc/tips/using_Amazon_S3/comment_11_70b4e62aabb93d078811cbdcd3cced20._comment b/doc/tips/using_Amazon_S3/comment_11_70b4e62aabb93d078811cbdcd3cced20._comment
new file mode 100644
index 000000000..678908686
--- /dev/null
+++ b/doc/tips/using_Amazon_S3/comment_11_70b4e62aabb93d078811cbdcd3cced20._comment
@@ -0,0 +1,24 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn8d6WBPNtmyeANT-gjlN19QnCTQ0psRPs"
+ nickname="James"
+ subject="comment 11"
+ date="2015-01-22T22:16:46Z"
+ content="""
+Even after enableremote I can't get from s3.
+
+
+ get Docs.zip (from s3...)
+
+ Unable to access these remotes: s3
+
+ Try making some of these repositories available:
+ 02b4e373-02b1-42b9-8285-c353c047895c -- my laptop
+ f287b4f7-4e5a-4734-bd6b-62b1f4498838 -- [s3]
+
+ (Note that these git remotes have annex-ignore set: origin)
+ failed
+ git-annex: get: 1 failed
+
+
+This is after all branches are pushed from my original repo. Any suggestions?
+"""]]
diff --git a/doc/tips/using_Amazon_S3/comment_12_d00472bf4ac5f7b2212073c081ba04c2._comment b/doc/tips/using_Amazon_S3/comment_12_d00472bf4ac5f7b2212073c081ba04c2._comment
new file mode 100644
index 000000000..9494e118f
--- /dev/null
+++ b/doc/tips/using_Amazon_S3/comment_12_d00472bf4ac5f7b2212073c081ba04c2._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn8d6WBPNtmyeANT-gjlN19QnCTQ0psRPs"
+ nickname="James"
+ subject="RE: last comment"
+ date="2015-01-23T01:02:18Z"
+ content="""
+RE: my last comment
+
+The reason I couldn't get it to work is because I didn't have proper read access to the bucket. My bad for not checking first but it would be great it there was a clearer error message from git-annex and/or a way to get more detailed information on the s3 extension (-d doesn't do much).
+
+Regardless git-annex is pretty cool, thanks to all the maintainers for their hard work.
+"""]]
diff --git a/doc/tips/using_Amazon_S3/comment_3_32acba030c2ad252e2f7027075e4303e._comment b/doc/tips/using_Amazon_S3/comment_3_32acba030c2ad252e2f7027075e4303e._comment
new file mode 100644
index 000000000..e83ade0c7
--- /dev/null
+++ b/doc/tips/using_Amazon_S3/comment_3_32acba030c2ad252e2f7027075e4303e._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="annexuser"
+ ip="64.71.7.82"
+ subject="Altering AWS credentials"
+ date="2014-04-15T21:59:43Z"
+ content="""
+If I revoke old AWS credentials and create new ones, how would I inform git-annex of the change to `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`?
+"""]]
diff --git a/doc/tips/using_Amazon_S3/comment_4_92df5a9f923beafba55a1c455728112e._comment b/doc/tips/using_Amazon_S3/comment_4_92df5a9f923beafba55a1c455728112e._comment
new file mode 100644
index 000000000..5bcf34b74
--- /dev/null
+++ b/doc/tips/using_Amazon_S3/comment_4_92df5a9f923beafba55a1c455728112e._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 4"
+ date="2014-04-17T19:44:55Z"
+ content="""
+You can use `git annex enableremote` to change an existing remote's configuration. So this should work:
+
+ # export AWS_ACCESS_KEY_ID=\"newRANDOMGOBBLDEYGOOK\"
+ # export AWS_SECRET_ACCESS_KEY=\"news3kr1t\"
+ # git annex enableremote cloud
+
+"""]]
diff --git a/doc/tips/using_Amazon_S3/comment_5_6b288e06010bedbb71e0afed6b427704._comment b/doc/tips/using_Amazon_S3/comment_5_6b288e06010bedbb71e0afed6b427704._comment
new file mode 100644
index 000000000..320a09d63
--- /dev/null
+++ b/doc/tips/using_Amazon_S3/comment_5_6b288e06010bedbb71e0afed6b427704._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkmN2ZZIdYNiFKmEH7rz4jMb6sYsx_dptA"
+ nickname="Jack William"
+ subject="What if you do not want to encrypt?"
+ date="2014-09-07T18:35:19Z"
+ content="""
+Once use case for GIT with Amazon S3 is to maintain a web site on S3 you can easily update from a local machine. In that case you would not want to encrypt. Is encryption optional? This isn't clear from the instructions.
+"""]]
diff --git a/doc/tips/using_Amazon_S3/comment_6_3b6c74b40ea666389ac04b52ab0819a0._comment b/doc/tips/using_Amazon_S3/comment_6_3b6c74b40ea666389ac04b52ab0819a0._comment
new file mode 100644
index 000000000..0fce69dad
--- /dev/null
+++ b/doc/tips/using_Amazon_S3/comment_6_3b6c74b40ea666389ac04b52ab0819a0._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://schnouki.net/"
+ nickname="Schnouki"
+ subject="comment 6"
+ date="2014-09-09T12:48:59Z"
+ content="""
+Jack, if you don't want to use encryption you can use `encryption=none` as documented [here](http://git-annex.branchable.com/special_remotes/S3/).
+
+I'm not sure exactly what you're trying to do, but please note that you files won't be easily available on S3: they will be named as git-annex keys, with long and unreadable names such as \"SHA256E-s6311--c7533fdd259d872793b7298cbb56a1912e80c52a845661b0b9ff391c65ee2abc.html\" instead of \"index.html\".
+"""]]
diff --git a/doc/tips/using_Amazon_S3/comment_7_cf6755d88463878f2ea6e4c300899027._comment b/doc/tips/using_Amazon_S3/comment_7_cf6755d88463878f2ea6e4c300899027._comment
new file mode 100644
index 000000000..3c7b817f7
--- /dev/null
+++ b/doc/tips/using_Amazon_S3/comment_7_cf6755d88463878f2ea6e4c300899027._comment
@@ -0,0 +1,33 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmH7o6q2l99M-PQolOfbR3_i5B_jtTIcAE"
+ nickname="Giovanni"
+ subject="How to publish your files to the public"
+ date="2014-09-13T15:29:18Z"
+ content="""
+I don't know if this is what Jack wanted, but you can upload your files to S3 and let them be accessible through a public URL.
+
+First, go to (or create) the bucket you will use at [S3](https://console.aws.amazon.com/s3/) and add a public get policy to it:
+
+```
+ {
+ \"Version\": \"2008-10-17\",
+ \"Statement\": [
+ {
+ \"Sid\": \"AllowPublicRead\",
+ \"Effect\": \"Allow\",
+ \"Principal\": {
+ \"AWS\": \"*\"
+ },
+ \"Action\": \"s3:GetObject\",
+ \"Resource\": \"arn:aws:s3:::BUCKETNAME/*\"
+ }
+ ]
+ }
+```
+
+Then set up your special remote with the options `encryption=none`, `bucket='BUCKETNAME'` `chunk=0` (and any others you want).
+
+Your files will be accessible through `http://BUCKETNAME.s3-website-LOCATION.amazonaws.com/KEY` where location is the one specified through the options `datacenter` and KEY is the SHA-SOMETHING hash of the file, created by git annex and accessible if you run `git annex lookupkey FILEPATH`.
+
+This way you can share a link to each file you have at your S3 remote.
+"""]]
diff --git a/doc/tips/using_Amazon_S3/comment_8_4f9c2f6627f8ed3423bcc8b7bf2f76cb._comment b/doc/tips/using_Amazon_S3/comment_8_4f9c2f6627f8ed3423bcc8b7bf2f76cb._comment
new file mode 100644
index 000000000..0616e0c87
--- /dev/null
+++ b/doc/tips/using_Amazon_S3/comment_8_4f9c2f6627f8ed3423bcc8b7bf2f76cb._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkPIqJZ88VZEVqLhLOd1LMdYXcy6bAW9qE"
+ nickname="Lemao"
+ subject="comment 8"
+ date="2015-01-07T13:54:23Z"
+ content="""
+I use github as my central git repository and I would like to use S3 to store large files with annex. Since the s3 remote in .git/config is not stored in github, how do I make sure I reconnect to the same s3 bucket in case I delete my local clone? Reinitializing the remote will create a completely new bucket.
+
+I would also be a good idea to centralize git-annex folders inside a single bucket so I keep the global namespace under control and can narrow down the permissioning.
+"""]]
diff --git a/doc/tips/using_Amazon_S3/comment_9_47e4ea77d0262d332d86a06d7aaeddd8._comment b/doc/tips/using_Amazon_S3/comment_9_47e4ea77d0262d332d86a06d7aaeddd8._comment
new file mode 100644
index 000000000..277e1c02b
--- /dev/null
+++ b/doc/tips/using_Amazon_S3/comment_9_47e4ea77d0262d332d86a06d7aaeddd8._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 9"
+ date="2015-01-07T17:25:43Z"
+ content="""
+Lemao, make sure you have pushed your git-annex branch to your central git repository.
+
+When you clone that repo elsewhere, you can add the S3 remote by running `git annex enableremote cloud` (replace \"cloud\" with whatever name you originally picked when you used `git annex initremote` to set up the S3 remote in the first place.
+
+git-annex stores the necessary configuration of the S3 remote on the git-annex branch.
+"""]]
diff --git a/doc/tips/using_Google_Cloud_Storage/comment_2_0843bfb776b8b6d5de4de7fda4489f34._comment b/doc/tips/using_Google_Cloud_Storage/comment_2_0843bfb776b8b6d5de4de7fda4489f34._comment
new file mode 100644
index 000000000..5a888348e
--- /dev/null
+++ b/doc/tips/using_Google_Cloud_Storage/comment_2_0843bfb776b8b6d5de4de7fda4489f34._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlPfB0_GcGJ827kZqRE1PF4D23rxpfOeg4"
+ nickname="Björn"
+ subject="Can't find developer API key and secret"
+ date="2014-06-01T21:25:54Z"
+ content="""
+According to the last comment, and this page:
+* https://developers.google.com/storage/docs/migrating#keys
+
+there's supposed to be a \"Interoperable Access\" menu option, something I can't find. Note that both the previous comment and this page refers to Googles old Developer Console.
+
+I can find a few things under \"APIs and Auth\" => \"Credentials\" under the heading \"Public API access\", but no matter what kind of key I try to create I can't get anything other than an API key. No secrets here, and no \"Show\"-button for newly created keys.
+
+Another thing worth mentioning is that these API keys I'm seeing do not like described in that first link in this comment. It's much longer, contains both upper- and lowercase and also contains dashes.
+"""]]
diff --git a/doc/tips/using_Google_Cloud_Storage/comment_3_9738f145014d8eae1f1aae7c39e71d31._comment b/doc/tips/using_Google_Cloud_Storage/comment_3_9738f145014d8eae1f1aae7c39e71d31._comment
new file mode 100644
index 000000000..cd8caecc7
--- /dev/null
+++ b/doc/tips/using_Google_Cloud_Storage/comment_3_9738f145014d8eae1f1aae7c39e71d31._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlPfB0_GcGJ827kZqRE1PF4D23rxpfOeg4"
+ nickname="Björn"
+ subject="comment 3"
+ date="2014-06-17T19:18:09Z"
+ content="""
+I just found the \"Interoperable access\" thing. The instructions from Google (linked in previous comments) are not perfect.
+
+After step 4 click \"Google Cloud Storage\", then at the bottom you have a heading called \"Interoperable Access\" where you have to activate it for this project.
+
+Then it appears at the bottom of the left hand menu.
+"""]]
diff --git a/doc/tips/using_box.com_as_a_special_remote.mdwn b/doc/tips/using_box.com_as_a_special_remote.mdwn
index ac59834f5..2edd200b1 100644
--- a/doc/tips/using_box.com_as_a_special_remote.mdwn
+++ b/doc/tips/using_box.com_as_a_special_remote.mdwn
@@ -5,9 +5,9 @@ for providing 50 gb of free storage if you sign up with its Android client.
git-annex can use Box as a [[special remote|special_remotes]].
Recent versions of git-annex make this very easy to set up:
- WEBDAV_USERNAME=you@example.com WEBDAV_PASSWORD=xxxxxxx git annex initremote box.com type=webdav url=https://dav.box.com/dav/git-annex chunksize=75mb encryption=shared
+ WEBDAV_USERNAME=you@example.com WEBDAV_PASSWORD=xxxxxxx git annex initremote box.com type=webdav url=https://dav.box.com/dav/git-annex chunk=50mb encryption=shared
-Note the use of chunksize; Box has a 100 mb maximum file size, and this
+Note the use of [[chunking]]; Box has a 100 mb maximum file size, and this
breaks up large files into chunks before that limit is reached.
# old davfs2 method
@@ -42,7 +42,7 @@ using the webdav special remote.
* Create `~/.davfs2/secrets`. This file contains your Box.com login and password.
Your login is probably the email address you signed up with.
- echo "/media/box.com joey@kitenet.net mypassword" > ~/.davfs2/secrets
+ echo "/media/box.com id@joeyh.name mypassword" > ~/.davfs2/secrets
chmod 600 ~/.davfs2/secrets
* Now you should be able to mount Box, as a non-root user:
@@ -58,7 +58,7 @@ Create the special remote, in your git-annex repository.
** This example is non-encrypted; fill in your gpg key ID for a securely
encrypted special remote! **
- git annex initremote box.com type=directory directory=/media/box.com chunksize=2mb encryption=none
+ git annex initremote box.com type=directory directory=/media/box.com chunk=2mb encryption=none
Now git-annex can copy files to box.com, get files from it, etc, just like
with any other special remote.
diff --git a/doc/tips/using_gitolite_with_git-annex.mdwn b/doc/tips/using_gitolite_with_git-annex.mdwn
index fcc3f96c3..31f34c6fb 100644
--- a/doc/tips/using_gitolite_with_git-annex.mdwn
+++ b/doc/tips/using_gitolite_with_git-annex.mdwn
@@ -3,19 +3,79 @@ manager. Here's how to add git-annex support to gitolite, so you can
`git annex copy` files to a gitolite repository, and `git annex get`
files from it.
-Warning : The method described here works with gitolite version g2, avaible in the g2 branch on github. There is an experimental support for g3 in the git-annex branch, if you tested it please add some feedback.
-
A nice feature of using gitolite with git-annex is that users can be given
read-only access to a repository, and this allows them to `git annex get`
file contents, but not change anything.
First, you need new enough versions:
-* gitolite 2.2 is needed -- this version contains a git-annex-shell ADC
+* the current `master` branch of gitolite works with git-annex (tested 2014-04-19),
+ but v3.5.3 and earlier v3.x require use of the `git-annex` branch.
+* gitolite 2.2 also works -- this version contains a git-annex-shell ADC
and supports "ua" ADCs.
* git-annex 3.20111016 or newer needs to be installed on the gitolite
server. Don't install an older version, it wouldn't be secure!
+### Instructions for gitolite `master` branch
+
+To setup gitolite to work with git-annex, you can follow the instructions on the gitolite website,
+and just add `'git-annex-shell ua',` to the ENABLE list in `~/.gitolite.rc`.
+
+Here are more detailed instructions:
+
+1: Create a `git` user
+
+<pre>
+sudo adduser \
+ --system \
+ --shell /bin/bash \
+ --gecos 'git version control' \
+ --group \
+ --disabled-password \
+ --home /home/git git
+</pre>
+
+2: Copy a public SSH key for the user you want to be the gitolite administrator.
+In the instructions below, I placed the key in a file named `/home/git/me.pub`.
+
+3: Clone and install gitolite
+
+First switch to the `git` user (e.g. `sudo su - git`) and then run:
+
+<pre>
+cd
+git clone https://github.com/sitaramc/gitolite.git
+mkdir -p bin
+./gitolite/install -ln
+</pre>
+
+4: Add `~/bin` to `PATH`
+
+Make sure that `~/bin` is in the `PATH`, since that's where gitolite installed its binary. Do something like this:
+
+<pre>
+echo 'export PATH=/home/git/bin:$PATH' >> .profile
+export PATH=/home/git/bin:$PATH
+</pre>
+
+5: Configure gitolite
+
+Edit `~/.gitolite.rc` to enable the git-annex-shell command.
+Find the `ENABLE` list and add this line in there somewhere:
+
+<pre>
+'git-annex-shell ua',
+</pre>
+
+Now run gitolite's setup:
+
+<pre>
+gitolite setup -pk me.pub
+rm me.pub
+</pre>
+
+### Instructions for gitolite 2.2
+
And here's how to set it up. The examples are for gitolite as installed
on Debian with apt-get, but the changes described can be made to any
gitolite installation, just with different paths.
diff --git a/doc/tips/using_gitolite_with_git-annex/comment_19_33c19097b6f2b48dfe09ec4c8d952d06._comment b/doc/tips/using_gitolite_with_git-annex/comment_19_33c19097b6f2b48dfe09ec4c8d952d06._comment
new file mode 100644
index 000000000..636794aba
--- /dev/null
+++ b/doc/tips/using_gitolite_with_git-annex/comment_19_33c19097b6f2b48dfe09ec4c8d952d06._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnftLWVOF0DUdXr2HSW4IKzuqtW8V7X3YU"
+ nickname="Adrian"
+ subject="How can the git annex init command be called on the server?"
+ date="2014-03-25T06:58:56Z"
+ content="""
+The latest commit in the gitolite repository \"git-annex support, finally in master!\" looks really promissing. I'm currently using ubuntu trusty with updated gitolite3 package and the configuration provided by Khaije. One line needs to be changed: 'git-annex-shell' => 'ua', instead of 'git-annex-shell' =>1,
+
+However, one little detail is still open for me. I need to call the server side \"git annex init\" on the server (sudo su gitolite3; cd ~/repositories/testing.git && git annex init). I cannot find a way to initialize the server from client side. E.g. git annex init && git push --all is not enough. The man page describes git annex initremote for other server types but not for gitolite remotes. Wouldn't we need something similar for gitolite as well? Or is there a better solution which I do not recognize?
+
+"""]]
diff --git a/doc/tips/using_gitolite_with_git-annex/comment_20_c82af00db3dd74ee9bfe12668e76e57b._comment b/doc/tips/using_gitolite_with_git-annex/comment_20_c82af00db3dd74ee9bfe12668e76e57b._comment
new file mode 100644
index 000000000..45ff960f4
--- /dev/null
+++ b/doc/tips/using_gitolite_with_git-annex/comment_20_c82af00db3dd74ee9bfe12668e76e57b._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.41"
+ subject="comment 20"
+ date="2014-03-26T18:24:30Z"
+ content="""
+@Adrian, that's good news. It would be helpful if someone could update the top of this page to document how to use git-annex with the new version of gitolite.
+This is a wiki..
+
+You're not supposed to need to use initremote when dealing with normal git remotes. It seems that something got lost that automatically initialize the remote repository in this situation. I've fixed it so that it will be set up when `git-annex-shell configlist` is run.
+
+(@wayne, this fixes the problem you reported too..)
+"""]]
diff --git a/doc/tips/using_gitolite_with_git-annex/comment_21_d2feaaf22d41413048dabf706d1b267e._comment b/doc/tips/using_gitolite_with_git-annex/comment_21_d2feaaf22d41413048dabf706d1b267e._comment
new file mode 100644
index 000000000..2746ee41b
--- /dev/null
+++ b/doc/tips/using_gitolite_with_git-annex/comment_21_d2feaaf22d41413048dabf706d1b267e._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn26WQjIP5fnMgQF_L_k3Q3UrR5v8mjRTY"
+ nickname="Ellis"
+ subject="Worked for me, updated wiki"
+ date="2014-04-19T09:41:11Z"
+ content="""
+I tried the `master` branch of gitolite today on my server, and it works fine! Updated the wiki with the commands I used to setup gitolite.
+"""]]
diff --git a/doc/tips/using_gitolite_with_git-annex/comment_22_90ead0e1fe8615fe11f6f1bd7dcd7e84._comment b/doc/tips/using_gitolite_with_git-annex/comment_22_90ead0e1fe8615fe11f6f1bd7dcd7e84._comment
new file mode 100644
index 000000000..6f959c0d7
--- /dev/null
+++ b/doc/tips/using_gitolite_with_git-annex/comment_22_90ead0e1fe8615fe11f6f1bd7dcd7e84._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk3gWkz5Qgy5qEa-myg8KWtiTrHSKW1x7Q"
+ nickname="Nicolas"
+ subject="Using Gitolite 3.6.1"
+ date="2014-09-11T00:11:32Z"
+ content="""
+Hi!
+
+I've made a fresh install of Gitolite 3.6.1 and got this error when trying to sync :
+
+FATAL: bad git-annex-shell command: git-annex-shell 'configlist' '/nicolas.git' at /home/git/bin/commands/git-annex-shell line 25, <DATA> line 1.
+
+"""]]
diff --git a/doc/tips/using_the_web_as_a_special_remote.mdwn b/doc/tips/using_the_web_as_a_special_remote.mdwn
index 62ef58b69..087d2e24b 100644
--- a/doc/tips/using_the_web_as_a_special_remote.mdwn
+++ b/doc/tips/using_the_web_as_a_special_remote.mdwn
@@ -104,6 +104,18 @@ feed is "http://gdata.youtube.com/feeds/api/playlists/PL4F80C7D2DC8D9B6C"
More details about youtube feeds at <http://googlesystem.blogspot.com/2008/01/youtube-feeds.html>
-- `git-annex importfeed` should handle all of them.
+## bittorrent
+
+The [[bittorrent_special_remote|special_remotes/bittorrent]] lets git-annex
+also download the content of torrent files, and magnet links to torrents.
+
+You can simply pass the url to a torrent to `git annex addurl`
+the same as any other url.
+
+You have to have [aria2](http://aria2.sourceforge.net/)
+and bittornado (or the original bittorrent) installed for this
+to work.
+
## podcasts
This is done using `git annex importfeed`. See [[downloading podcasts]].
diff --git a/doc/tips/using_the_web_as_a_special_remote/comment_11_9889828caa47aad88267d0ec35f2240d._comment b/doc/tips/using_the_web_as_a_special_remote/comment_11_9889828caa47aad88267d0ec35f2240d._comment
new file mode 100644
index 000000000..ccd27bf3c
--- /dev/null
+++ b/doc/tips/using_the_web_as_a_special_remote/comment_11_9889828caa47aad88267d0ec35f2240d._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="thnetos"
+ subject="How to get the URL of an added file?"
+ date="2014-12-18T18:56:57Z"
+ content="""
+Once a file has been added with either `addurl` or `importfeed`, how can I get the URL of the file or feed from git-annex?
+"""]]
diff --git a/doc/tips/using_the_web_as_a_special_remote/comment_12_2ce018f181e039b5dd52e2b712f63eea._comment b/doc/tips/using_the_web_as_a_special_remote/comment_12_2ce018f181e039b5dd52e2b712f63eea._comment
new file mode 100644
index 000000000..7e3d8c9c7
--- /dev/null
+++ b/doc/tips/using_the_web_as_a_special_remote/comment_12_2ce018f181e039b5dd52e2b712f63eea._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 12"""
+ date="2014-12-18T19:59:54Z"
+ content="""
+You can see the url(s) of a file when you run `git annex whereis $file`
+"""]]
diff --git a/doc/tips/using_the_web_as_a_special_remote/comment_5_5ee9717e74ca2afed98e81fc0ea98a95._comment b/doc/tips/using_the_web_as_a_special_remote/comment_5_5ee9717e74ca2afed98e81fc0ea98a95._comment
new file mode 100644
index 000000000..b1060147f
--- /dev/null
+++ b/doc/tips/using_the_web_as_a_special_remote/comment_5_5ee9717e74ca2afed98e81fc0ea98a95._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="Xyem"
+ ip="87.194.19.134"
+ subject="comment 5"
+ date="2014-04-04T15:25:39Z"
+ content="""
+Adding videos from youtube ends up with it using the URL backend, even without fast.
+
+ $ git init quvitest
+ $ cd quvitest/
+ $ git annex init
+ $ git annex addurl https://www.youtube.com/watch?v=mghhLqu31cQ
+ (... file is downloaded ...)
+ $ find .git/annex/objects/ -type f
+ .git/annex/objects/1J/Wp/URL--quvi&chttps&c%%www.youtube.com%watch,63v,61mghhLqu31cQ/URL--quvi&chttps&c%%www.youtube.com%watch,63v,61mghhLqu31cQ
+
+Is migrating manually required or should I log a bug?
+"""]]
diff --git a/doc/tips/using_the_web_as_a_special_remote/comment_6_dceb15bd656e69eefa3ca975d9d642de._comment b/doc/tips/using_the_web_as_a_special_remote/comment_6_dceb15bd656e69eefa3ca975d9d642de._comment
new file mode 100644
index 000000000..0c39eb183
--- /dev/null
+++ b/doc/tips/using_the_web_as_a_special_remote/comment_6_dceb15bd656e69eefa3ca975d9d642de._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 6"
+ date="2014-04-07T20:07:45Z"
+ content="""
+Using the URL backend for youtube is intentional. Youtube may serve up different encodings for the same video over time, and this way git-annex treats them all as equvilant. If you want to \"freeze\" the repository to the current one, use `git annex migrate`, and be prepared for `git annex get --from web` to not work long term.
+"""]]
diff --git a/doc/tips/using_the_web_as_a_special_remote/comment_7_0bde977c62a53c90cb20491936bc399d._comment b/doc/tips/using_the_web_as_a_special_remote/comment_7_0bde977c62a53c90cb20491936bc399d._comment
new file mode 100644
index 000000000..df5b0ef41
--- /dev/null
+++ b/doc/tips/using_the_web_as_a_special_remote/comment_7_0bde977c62a53c90cb20491936bc399d._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnkXKIAfgPsuV-EJpXm3jCc3q9IZwzvCcw"
+ nickname="Garrett"
+ subject="Default pathdepth"
+ date="2014-05-08T21:36:00Z"
+ content="""
+Is there away to change the default pathdepth so I do not need to add --pathdepth=-1 everything I run addurl?
+"""]]
diff --git a/doc/tips/using_the_web_as_a_special_remote/comment_8_3f32d536f51d5e9908953caf5736b0a0._comment b/doc/tips/using_the_web_as_a_special_remote/comment_8_3f32d536f51d5e9908953caf5736b0a0._comment
new file mode 100644
index 000000000..c3403500a
--- /dev/null
+++ b/doc/tips/using_the_web_as_a_special_remote/comment_8_3f32d536f51d5e9908953caf5736b0a0._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnvr2UPmp7ABeH0yI8KGAHCqFhl91Ju4Tc"
+ nickname="Calvin"
+ subject="HTTP Authentication?"
+ date="2014-09-29T21:37:44Z"
+ content="""
+Hi!
+
+I have a somewhat interesting use case. My course notes require HTTP authentication. This is possible with wget, but is there any way to make git annex do it?
+
+[wget authentication stuff!](http://stackoverflow.com/questions/4272770/wget-with-authentication)
+
+It would be nice to have the user and pass encrypted with GPG too. This might be a strange use case, but I can see other people wanting to do something like this in the future.
+
+Thanks!
+"""]]
diff --git a/doc/tips/using_the_web_as_a_special_remote/comment_9_b420b1f320d620a9909cce5086c549bf._comment b/doc/tips/using_the_web_as_a_special_remote/comment_9_b420b1f320d620a9909cce5086c549bf._comment
new file mode 100644
index 000000000..d6b194d69
--- /dev/null
+++ b/doc/tips/using_the_web_as_a_special_remote/comment_9_b420b1f320d620a9909cce5086c549bf._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.55"
+ subject="comment 9"
+ date="2014-09-30T18:09:04Z"
+ content="""
+For urls using http basic auth, you can use the standard url form, http://username:password@example.org/url/ , which should work with `git annex addurl`. The url, including the password, will be stored in the git-annex branch though. If you want to protect the password from being exposed to anyone who gets a clone of the repository, just download manually, and then `git annex add` the file.
+"""]]
diff --git a/doc/tips/what_to_do_when_a_repository_is_corrupted.mdwn b/doc/tips/what_to_do_when_a_repository_is_corrupted.mdwn
index 80cb046d9..78f4977a2 100644
--- a/doc/tips/what_to_do_when_a_repository_is_corrupted.mdwn
+++ b/doc/tips/what_to_do_when_a_repository_is_corrupted.mdwn
@@ -19,4 +19,9 @@ on the drive.
* Check for any problems with the annexed data: `cd $good; git annex fsck`
* Now you can remove the corrupted repository, the new one is ready to use.
+Alternatively, recent versions of git-annex have a `git annex repair`
+command that uses <http://git-repair.branchable.com/> to repair a
+repository in-place. The git-annex assistant will detect most corruptions
+and offer to run the repair for you automatically.
+
--[[Joey]]
diff --git a/doc/tips/what_to_do_when_a_repository_is_corrupted/comment_1_c3543190eae2af594f3e050057e80db6._comment b/doc/tips/what_to_do_when_a_repository_is_corrupted/comment_1_c3543190eae2af594f3e050057e80db6._comment
new file mode 100644
index 000000000..3954bef0d
--- /dev/null
+++ b/doc/tips/what_to_do_when_a_repository_is_corrupted/comment_1_c3543190eae2af594f3e050057e80db6._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnq-RfkVpFN15SWvQ2lpSGAi0XpNQuLxKM"
+ nickname="Yuval"
+ subject="Automation"
+ date="2014-04-27T11:34:44Z"
+ content="""
+Could this step be automated?
+"""]]
diff --git a/doc/tips/what_to_do_when_a_repository_is_corrupted/comment_2_025178c2b11affe2d42a87544b897dc8._comment b/doc/tips/what_to_do_when_a_repository_is_corrupted/comment_2_025178c2b11affe2d42a87544b897dc8._comment
new file mode 100644
index 000000000..beb177d00
--- /dev/null
+++ b/doc/tips/what_to_do_when_a_repository_is_corrupted/comment_2_025178c2b11affe2d42a87544b897dc8._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmZilYULa6CDEGfuagoDlesyakBgnf-dF8"
+ nickname="Maarten"
+ subject="comment 2"
+ date="2014-05-23T23:50:58Z"
+ content="""
+What if the drive is destroyed? How would I re-initialize a new drive to act as a substitute for the remote that was just lost?
+"""]]
diff --git a/doc/tips/what_to_do_when_a_repository_is_corrupted/comment_3_9a6bae9c0326ecc7610f5415db20f49e._comment b/doc/tips/what_to_do_when_a_repository_is_corrupted/comment_3_9a6bae9c0326ecc7610f5415db20f49e._comment
new file mode 100644
index 000000000..870d7b93f
--- /dev/null
+++ b/doc/tips/what_to_do_when_a_repository_is_corrupted/comment_3_9a6bae9c0326ecc7610f5415db20f49e._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.36"
+ subject="comment 3"
+ date="2014-05-24T18:29:03Z"
+ content="""
+@Maarten git clone from one of the other clones of the repository to the new drive. Also, recent versions of git-annex have a `git annex reinit` command that can be used to easily initialize a repository with the same settings as a repository that was lost.
+"""]]
diff --git a/doc/todo.mdwn b/doc/todo.mdwn
index 79552298b..62224c3be 100644
--- a/doc/todo.mdwn
+++ b/doc/todo.mdwn
@@ -1,4 +1,4 @@
-This is git-annex's todo list. Link items to [[todo/done]] when done.
+This is git-annex's todo list. Link items to [[todo/done]] when done. A more complete [[design/roadmap/]] is also available.
[[!inline pages="./todo/* and !./todo/done and !link(done)
and !*/Discussion" actions=yes postform=yes show=0 archive=yes]]
diff --git a/doc/todo/A_Way_To_Extract_Previous_Versions_of_a_File_From_a_Direct_Repo.mdwn b/doc/todo/A_Way_To_Extract_Previous_Versions_of_a_File_From_a_Direct_Repo.mdwn
new file mode 100644
index 000000000..c8c2dd83e
--- /dev/null
+++ b/doc/todo/A_Way_To_Extract_Previous_Versions_of_a_File_From_a_Direct_Repo.mdwn
@@ -0,0 +1,25 @@
+One problem I keep having when using a direct repo is that in order to get to the previous versions of a file you have to convert that repo to indirect and then checkout previous commits this becomes problematic when the repo in question is large conversion takes a long time and applications gets confused if there are open files from the repo as they go from actual files to symlinks. Is it possible to have a separate annex command that will checkout a previous version of a file to a different directory so we can replace/inspect it.
+
+> I recently added a `git annex proxy` command, which can be used
+> to amoung other things, rewind a direct mode repo to have some old
+> version checked out.
+>
+> For example, you can do: `git annex proxy git checkout old-version`
+> And then the old version of all annexed files will be checked out.
+>
+> If the old version of a file is not available, it'll be a broken
+> symlink and you can then use `git annex get` etc to get the content from
+> some remote.
+>
+> Once you have the old version of the file, you can
+> make a copy, and then switch back to the present with `git annex proxy
+> git checkout annex/direct/master`. Then you can add the copy of the old
+> version of the file to the repo, or whatever.
+>
+> Or, sometimes more simply, you can `git annex proxy git revert $commit`
+> to revert a commit that made an unwanted change to a file.
+>
+> Or, simpler still, `git annex undo $file` will undo the last change
+> that git-annex committed to that file, bringing back the old version.
+>
+> So, this seems [[done]]! --[[Joey]]
diff --git a/doc/todo/A_Way_To_Extract_Previous_Versions_of_a_File_From_a_Direct_Repo/comment_1_6f477af942aeb98683a56bcf0e819a38._comment b/doc/todo/A_Way_To_Extract_Previous_Versions_of_a_File_From_a_Direct_Repo/comment_1_6f477af942aeb98683a56bcf0e819a38._comment
new file mode 100644
index 000000000..e97e40f62
--- /dev/null
+++ b/doc/todo/A_Way_To_Extract_Previous_Versions_of_a_File_From_a_Direct_Repo/comment_1_6f477af942aeb98683a56bcf0e819a38._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="92.227.51.179"
+ subject="comment 1"
+ date="2014-05-13T20:25:22Z"
+ content="""
+I’ve added a bug on basically the same issue.
+http://git-annex.branchable.com/bugs/Revert_to_old_file_version_in_direct_mode___40__VFAT__41__/
+
+One problem is that if your direct-mode repo is on VFAT, you can’t even switch to indirect mode temporarily.
+"""]]
diff --git a/doc/todo/A_Way_To_Extract_Previous_Versions_of_a_File_From_a_Direct_Repo/comment_2_45c22f596a18d5dc2331cfeef8c767fa._comment b/doc/todo/A_Way_To_Extract_Previous_Versions_of_a_File_From_a_Direct_Repo/comment_2_45c22f596a18d5dc2331cfeef8c767fa._comment
new file mode 100644
index 000000000..200210a02
--- /dev/null
+++ b/doc/todo/A_Way_To_Extract_Previous_Versions_of_a_File_From_a_Direct_Repo/comment_2_45c22f596a18d5dc2331cfeef8c767fa._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="92.227.51.179"
+ subject="comment 2"
+ date="2014-05-17T14:18:31Z"
+ content="""
+It occured to me that one could do something like that by «git show
+earlier-commit:file > filename». A problem with this is that a
+subsequent «get» will get the old content, but won’t put it in place
+until invoking «fsck».
+
+"""]]
diff --git a/doc/todo/A_Way_To_Extract_Previous_Versions_of_a_File_From_a_Direct_Repo/comment_3_cbca264d86fe733b8106a4bf50c0c6ff._comment b/doc/todo/A_Way_To_Extract_Previous_Versions_of_a_File_From_a_Direct_Repo/comment_3_cbca264d86fe733b8106a4bf50c0c6ff._comment
new file mode 100644
index 000000000..265e0995a
--- /dev/null
+++ b/doc/todo/A_Way_To_Extract_Previous_Versions_of_a_File_From_a_Direct_Repo/comment_3_cbca264d86fe733b8106a4bf50c0c6ff._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="92.227.51.179"
+ subject="comment 3"
+ date="2014-05-17T14:24:20Z"
+ content="""
+Plus it seems that the file can’t be dropped normally afterwards.
+"""]]
diff --git a/doc/todo/Bittorrent-like_features.mdwn b/doc/todo/Bittorrent-like_features.mdwn
index 41988a422..f1075a124 100644
--- a/doc/todo/Bittorrent-like_features.mdwn
+++ b/doc/todo/Bittorrent-like_features.mdwn
@@ -29,6 +29,8 @@ Another thing, this would be completely trackerless. You just use remote groups
This was originally posted [[as a forum post|forum/Wishlist:_Bittorrent-like_transfers]] by [[users/GLITTAH]].
+Update: note how [[design/assistant/telehash/]] may be able to answer this specific use case.
+
Using an external client (addurl torrent support)
=================================================
@@ -43,3 +45,5 @@ or even better:
This way, a torrent would just become another source for a specific file. When we `get` the file, it fires up `$YOUR_FAVORITE_TORRENT_CLIENT` to download the file.
That way we avoid the implementation complexity of shoving a complete bittorrent client within the assistant. The `get` operation would block until the torrent is downloaded, i guess... --[[anarcat]]
+
+> This is now [[implemented|special_remotes/bittorrent/]]. Including magnet link support, and multi-file torrent support. Leaving todo item open for the blue-sky stuff at top. --[[Joey]]
diff --git a/doc/todo/Bittorrent-like_features/comment_5_194dd0e8404ea72af9fb6ff34b994998._comment b/doc/todo/Bittorrent-like_features/comment_5_194dd0e8404ea72af9fb6ff34b994998._comment
new file mode 100644
index 000000000..620c82e97
--- /dev/null
+++ b/doc/todo/Bittorrent-like_features/comment_5_194dd0e8404ea72af9fb6ff34b994998._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="2001:1928:1:9::1"
+ subject="comment 5"
+ date="2014-04-01T04:43:16Z"
+ content="""
+re #3, sure, magnet link support would be awesome as well but i'd prefer to start with something i could digest more easily.
+
+looking at the source, it seems to me that the [quvi implementation](http://source.git-annex.branchable.com/?p=source.git;a=commitdiff;h=46b6d75) could serve as an example as to how this would work. more particularly, there's this concept of a [downloader](http://source.git-annex.branchable.com/?p=source.git;a=commitdiff;h=46b6d75#patch5) that can be used to tap into `addurl` directly. there's a check to see if the downloader is supported, for example.
+
+so we would need:
+
+1. see if the URL / magnet link can be turned into a .torrent somehow
+2. figure out what the filename(s!) will be
+3. start the torrent and wait for its completion, ideally with some progress bar
+
+i asked around to see if transmission-remote could do this, because it would be nice if we could use an existing daemon (instead of having to rebootstrap the whole DHT at every download). so far, I can't see how it could be done cleanly - maybe we would need to use the simpler \"bittorrent\" commandline client, or maybe tap into libtorrent...
+
+in any case, one of the key problems here is that addurl assumes that the URL maps to a single file, not a directory full of file, which is the way bittorrent works. I am not sure how to fix that assumption.
+"""]]
diff --git a/doc/todo/Bittorrent-like_features/comment_6_489505da4143fb1c2bf21e7af695cdef._comment b/doc/todo/Bittorrent-like_features/comment_6_489505da4143fb1c2bf21e7af695cdef._comment
new file mode 100644
index 000000000..678bb109b
--- /dev/null
+++ b/doc/todo/Bittorrent-like_features/comment_6_489505da4143fb1c2bf21e7af695cdef._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmHp5oVW8Z9v_vHs5FRtlYj80TYMQWVTS0"
+ nickname="dhead"
+ subject="comment 6"
+ date="2014-06-10T02:18:43Z"
+ content="""
+What about Syncthing protocol ?
+https://github.com/calmh/syncthing/blob/master/protocol/PROTOCOL.md
+"""]]
diff --git a/doc/todo/Build_for_Synology_DSM.mdwn b/doc/todo/Build_for_Synology_DSM.mdwn
deleted file mode 100644
index 650500756..000000000
--- a/doc/todo/Build_for_Synology_DSM.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-It would be wonderful if a pre-built package would be available for Synology NAS. Basically, this is an ARM-based Linux. It has most of the required shell commands either out of the box or easily available (through ipkg). But I think it would be difficult to install the Haskell compiler and all the required modules, so it would probably be better to cross-compile targeting ARM.
-
-> [[done]]; the standalone armel tarball has now been tested working on
-> Synology. --[[Joey]]
diff --git a/doc/todo/Build_for_Synology_DSM/comment_10_e351084d9a83db3fd6d9d983227a6410._comment b/doc/todo/Build_for_Synology_DSM/comment_10_e351084d9a83db3fd6d9d983227a6410._comment
deleted file mode 100644
index b62a929d7..000000000
--- a/doc/todo/Build_for_Synology_DSM/comment_10_e351084d9a83db3fd6d9d983227a6410._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkwjBDXkP9HAQKhjTgThGOxUa1B99y_WRA"
- nickname="Franck"
- subject="comment 10"
- date="2013-06-02T17:23:43Z"
- content="""
-I updated the C program to simplify it so it uses a static path for `_chrooter`. In the previous version, I suspect that one can play with symlinks and use it to get a root shell. So, if `_chrooter` is not installed in `/opt/bin` this file has to be edited too before compilation.
-"""]]
diff --git a/doc/todo/Build_for_Synology_DSM/comment_11_cc67a584f5c460a6fb63cf099c20e573._comment b/doc/todo/Build_for_Synology_DSM/comment_11_cc67a584f5c460a6fb63cf099c20e573._comment
deleted file mode 100644
index 324fa8423..000000000
--- a/doc/todo/Build_for_Synology_DSM/comment_11_cc67a584f5c460a6fb63cf099c20e573._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkwjBDXkP9HAQKhjTgThGOxUa1B99y_WRA"
- nickname="Franck"
- subject="comment 11"
- date="2013-06-03T09:55:54Z"
- content="""
-A last update and I stop spamming this thread: I've implemented access control and simplified customisation. All this has been moved to https://bitbucket.org/franckp/gasp
-
-"""]]
diff --git a/doc/todo/Build_for_Synology_DSM/comment_12_94023593d294b9cf69090fcfd6ca0e5a._comment b/doc/todo/Build_for_Synology_DSM/comment_12_94023593d294b9cf69090fcfd6ca0e5a._comment
deleted file mode 100644
index 39c243ec4..000000000
--- a/doc/todo/Build_for_Synology_DSM/comment_12_94023593d294b9cf69090fcfd6ca0e5a._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlJEI45rGczFAnuM7gRSj4C6s9AS9yPZDc"
- nickname="Kevin"
- subject="SynoCommunity"
- date="2013-06-26T18:12:39Z"
- content="""
-Creating an installable git-annex package available via [SynoCommunity](http://www.synocommunity.com/) would be awesome. They have created [cross-compilation tools](https://github.com/SynoCommunity/spksrc) to help build the packages and integrate the start/stop scripts with the package manager.
-
-"""]]
diff --git a/doc/todo/Build_for_Synology_DSM/comment_13_314255fd503d125b5aeae2f62acfd592._comment b/doc/todo/Build_for_Synology_DSM/comment_13_314255fd503d125b5aeae2f62acfd592._comment
deleted file mode 100644
index 3c54a9271..000000000
--- a/doc/todo/Build_for_Synology_DSM/comment_13_314255fd503d125b5aeae2f62acfd592._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnrP-0DGtHDJbWSXeiyk0swNkK1aejoN3c"
- nickname="sebastien"
- subject="comment 13"
- date="2013-08-06T12:18:35Z"
- content="""
-I post an issue to github synocommunity for that, i hope somenone have some time to package this great features.
-"""]]
diff --git a/doc/todo/Build_for_Synology_DSM/comment_15_9525cd0d75ff4c15182d10a855774b69._comment b/doc/todo/Build_for_Synology_DSM/comment_15_9525cd0d75ff4c15182d10a855774b69._comment
deleted file mode 100644
index c3edf99e2..000000000
--- a/doc/todo/Build_for_Synology_DSM/comment_15_9525cd0d75ff4c15182d10a855774b69._comment
+++ /dev/null
@@ -1,30 +0,0 @@
-[[!comment format=mdwn
- username="lorenzo"
- ip="84.75.27.69"
- subject="Running Debian squeeze binaries on libc 2.5 based NAS"
- date="2013-10-27T23:56:26Z"
- content="""
-Following the suggestions in this page I tried to run the binaries that debian provides on my Lacie NetworkSpace which is another one of these NAS devices with old libc. After uploading the binaries and required libraries and using `LD_LIBRARY_PATH` to force the loader to use the version I uploaded of the libraries I was still having a segfault (similar to what Franck was experiencing) while running git-annex in a chroot was working.
-
-It turns out that it is possible to solve the problem without having to use chroot by not loading the binary directly but by substituting it with a script that calls the correct `ld-linux.so.3`. Assume you have uncompressed the files from the deb packages in `/opt/git-annex`.
-
-First create a directory `/opt/git-annex/usr/bin/git-annex.exec` and copy the executable `/opt/git-annex/usr/bin/git-annex` there.
-
-Then create script `/opt/git-annex/usr/bin/git-annex` with the following contents:
-
- #!/bin/bash
-
- PREFIX=/opt/git-annex
-
- export GCONV_PATH=$PREFIX/usr/lib/gconv
-
- exec $PREFIX/lib/ld-linux.so.3 --library-path $PREFIX/lib/:$PREFIX/usr/lib/ $PREFIX/usr/bin/git-annex.exec/git-annex \"$@\"
-
-The `GCONV_PATH` setting is important to prevent the app from failing with the message:
-
- git-annex.exec: mkTextEncoding: invalid argument (Invalid argument)
-
-The original executable is moved to a different directory instead of being simply renamed to make sure that `$0` is correct when the executable starts. The parameter for the linker `--library-path` is used instead of the environment variable `LD_LIBRARY_PATH` to make sure that the programs exec'ed by git-annex do not have the variable set.
-
-Some more info about the approach: [[http://www.novell.com/coolsolutions/feature/11775.html]]
-"""]]
diff --git a/doc/todo/Build_for_Synology_DSM/comment_15_c12f525ef4cbe42cdf20fec0d53c8d86._comment b/doc/todo/Build_for_Synology_DSM/comment_15_c12f525ef4cbe42cdf20fec0d53c8d86._comment
deleted file mode 100644
index 007199f5b..000000000
--- a/doc/todo/Build_for_Synology_DSM/comment_15_c12f525ef4cbe42cdf20fec0d53c8d86._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.87"
- subject="comment 15"
- date="2013-12-16T05:55:29Z"
- content="""
-Following the example of @lorenzo, I have made all the git-annex Linux standalone builds include glibc and shims to make the linker use it.
-
-Now that there's a [[forum/new_linux_arm_tarball_build]], it may *just work* on Synology.
-"""]]
diff --git a/doc/todo/Build_for_Synology_DSM/comment_1_4059016fa8da6af7a3eba8966821e8eb._comment b/doc/todo/Build_for_Synology_DSM/comment_1_4059016fa8da6af7a3eba8966821e8eb._comment
deleted file mode 100644
index 074ba998c..000000000
--- a/doc/todo/Build_for_Synology_DSM/comment_1_4059016fa8da6af7a3eba8966821e8eb._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-05-24T15:55:42Z"
- content="""
-There are already git-annex builds for arm available from eg, Debian. There's a good chance that, assuming you match up the arm variant (armel, armhf, etc) and that the NAS uses glibc and does not have too old a version, that the binary could just be copied in, possibly with some other libraries, and work. This is what's done for the existing Linux standalone builds.
-
-So, I look at this bug report as \"please add a standalone build for arm\", not as a request to support a specific NAS which I don't have ;)
-"""]]
diff --git a/doc/todo/Build_for_Synology_DSM/comment_2_8900c2985ab68b3b566c9f5d326471d6._comment b/doc/todo/Build_for_Synology_DSM/comment_2_8900c2985ab68b3b566c9f5d326471d6._comment
deleted file mode 100644
index 40e6398f0..000000000
--- a/doc/todo/Build_for_Synology_DSM/comment_2_8900c2985ab68b3b566c9f5d326471d6._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkwjBDXkP9HAQKhjTgThGOxUa1B99y_WRA"
- nickname="Franck"
- subject="comment 2"
- date="2013-05-24T21:31:44Z"
- content="""
-I tried to run the binary from the Debian package, unfortunately, after installing tons of libraries, git-annex fails complaining that GLIBC is not recent enough. Perhaps a static build for ARM (armel) can solve the problem? Thanks again for your help!
-"""]]
diff --git a/doc/todo/Build_for_Synology_DSM/comment_3_f2b77368473d42b7f21e9d51d6415b58._comment b/doc/todo/Build_for_Synology_DSM/comment_3_f2b77368473d42b7f21e9d51d6415b58._comment
deleted file mode 100644
index 651edacd7..000000000
--- a/doc/todo/Build_for_Synology_DSM/comment_3_f2b77368473d42b7f21e9d51d6415b58._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 3"
- date="2013-05-25T04:42:22Z"
- content="""
-Which Debian package? Different ones link to different libcs.
-
-(It's not really possible to statically link something with as many dependencies as git-annex on linux anymore, unfortunately.)
-"""]]
diff --git a/doc/todo/Build_for_Synology_DSM/comment_4_a55fea734044c270ceb10adf9c8d9a76._comment b/doc/todo/Build_for_Synology_DSM/comment_4_a55fea734044c270ceb10adf9c8d9a76._comment
deleted file mode 100644
index 50ae82ca0..000000000
--- a/doc/todo/Build_for_Synology_DSM/comment_4_a55fea734044c270ceb10adf9c8d9a76._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkwjBDXkP9HAQKhjTgThGOxUa1B99y_WRA"
- nickname="Franck"
- subject="comment 4"
- date="2013-05-25T07:40:13Z"
- content="""
-I've actually tried several ones: 4.20130521 on sid, 3.20120629~bpo60+2 on squeeze-backports, 3.20120629 on wheezy and jessie, plus a package for Ubuntu 11.02. All of them try to load GLIBC 2.6/2.7 while my system has 2.5 only... I'll try a different approach: install Debian in a chroot on the NAS and extract all the required files, including all libraries.
-"""]]
diff --git a/doc/todo/Build_for_Synology_DSM/comment_5_59865ada057c640ac29855c65cf45dd9._comment b/doc/todo/Build_for_Synology_DSM/comment_5_59865ada057c640ac29855c65cf45dd9._comment
deleted file mode 100644
index 725025283..000000000
--- a/doc/todo/Build_for_Synology_DSM/comment_5_59865ada057c640ac29855c65cf45dd9._comment
+++ /dev/null
@@ -1,23 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkwjBDXkP9HAQKhjTgThGOxUa1B99y_WRA"
- nickname="Franck"
- subject="comment 5"
- date="2013-05-25T10:03:24Z"
- content="""
-Unfortunately, chroot approach does not work either. While git-annex works fine when I'm in the chroot, it doesn't work any more outside. If I don't copy libc, I get a version error (just like before so this is normal):
-
- git-annex: /lib/libc.so.6: version `GLIBC_2.7' not found (required by /opt/share/git-annex/bin/git-annex)
- git-annex: /lib/libc.so.6: version `GLIBC_2.6' not found (required by /opt/share/git-annex/bin/git-annex)
- git-annex: /lib/libc.so.6: version `GLIBC_2.7' not found (required by /opt/share/git-annex/lib/libgmp.so.10)
-
-When I copy libc from the Debian chroot, then, it complains about libpthread:
-
- git-annex: relocation error: /lib/libpthread.so.0: symbol __default_rt_sa_restorer, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference
-
-If then I copy libpthread also, I get:
-
- Illegal instruction (core dumped)
-
-So, I'm stuck... :-(
-I'll try to find a way using the version in the chroot instead of trying to export it to the host system...
-"""]]
diff --git a/doc/todo/Build_for_Synology_DSM/comment_6_6d860b1ad8816077b5fa596a71b12d5c._comment b/doc/todo/Build_for_Synology_DSM/comment_6_6d860b1ad8816077b5fa596a71b12d5c._comment
deleted file mode 100644
index 417293db3..000000000
--- a/doc/todo/Build_for_Synology_DSM/comment_6_6d860b1ad8816077b5fa596a71b12d5c._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawln3ckqKx0x_xDZMYwa9Q1bn4I06oWjkog"
- nickname="Michael"
- subject="bind mount"
- date="2013-05-25T15:55:52Z"
- content="""
-You could bind-mount (e.g. mount -o bind /data /chroot/data ) your main Synology fs into the chroot for git-annex to use.
-"""]]
diff --git a/doc/todo/Build_for_Synology_DSM/comment_7_19ef2d293ba3bc7ece443d7278371c3f._comment b/doc/todo/Build_for_Synology_DSM/comment_7_19ef2d293ba3bc7ece443d7278371c3f._comment
deleted file mode 100644
index 47d092331..000000000
--- a/doc/todo/Build_for_Synology_DSM/comment_7_19ef2d293ba3bc7ece443d7278371c3f._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkwjBDXkP9HAQKhjTgThGOxUa1B99y_WRA"
- nickname="Franck"
- subject="comment 7"
- date="2013-05-25T19:01:29Z"
- content="""
-This is indeed what I'm doing. But I need to make a wrapper that will call the command in the chroot. Thanks for the tip anyway. :-)
-"""]]
diff --git a/doc/todo/Build_for_Synology_DSM/comment_8_609b7ad87dfbba49ec1f8c6fc2739ccd._comment b/doc/todo/Build_for_Synology_DSM/comment_8_609b7ad87dfbba49ec1f8c6fc2739ccd._comment
deleted file mode 100644
index 8a3490956..000000000
--- a/doc/todo/Build_for_Synology_DSM/comment_8_609b7ad87dfbba49ec1f8c6fc2739ccd._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmqz6wCn-Q1vzrsHGvEJHOt_T5ZESilxhc"
- nickname="Sören"
- subject="comment 8"
- date="2013-05-26T13:50:31Z"
- content="""
-I have a Synology NAS too, so I thought I could try to run git-annex in a Debian chroot.
-As it [turns out](http://forum.synology.com/wiki/index.php/What_kind_of_CPU_does_my_NAS_have), my model (DS213+) runs on a PowerPC CPU instead of ARM. Unfortunately, it isn't compatible with PPC in Debian either because it is a different PowerPC variant.
-There is an unofficial Debian port called [powerpcspe](http://wiki.debian.org/PowerPCSPEPort), but ghc doesn't build there yet for [some reason](http://buildd.debian-ports.org/status/package.php?p=git-annex&suite=sid).
-
-Any chance that there will be a build for this architecture at some point in the future or should I better look for another NAS? ;-)
-"""]]
diff --git a/doc/todo/Build_for_Synology_DSM/comment_9_d94a73b9a07c5cadf191005f817fd59a._comment b/doc/todo/Build_for_Synology_DSM/comment_9_d94a73b9a07c5cadf191005f817fd59a._comment
deleted file mode 100644
index c8b45fc60..000000000
--- a/doc/todo/Build_for_Synology_DSM/comment_9_d94a73b9a07c5cadf191005f817fd59a._comment
+++ /dev/null
@@ -1,29 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkwjBDXkP9HAQKhjTgThGOxUa1B99y_WRA"
- nickname="Franck"
- subject="comment 9"
- date="2013-06-02T13:14:56Z"
- content="""
-Hi, I finally succeeded! :-)
-
-Here are the main steps:
-
- 1. install `debian-chroot` on the NAS
- 2. create an account `gitannex` in Debian
- 3. configure git on this account (this is important otherwise git complains and fails) `git config --global user.email YOUR_EMAIL` and `git config --global user.name YOUR_NAME`
- 4. install `gcc` on the NAS (using `ipkg`)
- 5. download the files here: https://www.dropbox.com/sh/b7z68a730aj3mnm/95nFOzE1QP
- 6. edit `_chrooter` to fit your settings (probably there is nothing to change if your Debian is freshly installed)
- 7. run `make install`, everything goes to `/opt/bin`, if you change this, you should also edit line 17 in file `gasp`
- 8. create an account `gitannex` on the NAS (doesn't need to be the same name as in Debian, but I feel it is easier)
- 9. edit its `.ssh/authorized_keys` to prefix lines as follows `command=\"gasp\" THE_PUBLIC_KEY_AS_USUAL`
- 10. it should work
- 11. the repositories will be in the Debian account, but it's easy to symlink them in the NAS account if you wish
-
-The principle is as follows: `command=\"gasp\"` allows to launch `gasp` on SSH connexion instead of the original command given to `ssh`. This command is retrieved by `gasp` and prefixed with `chrooter-` (so, eg, running `ssh git` on the client results in running `chrooter-git` on the NAS). `chrooter-*` commands are symlinks to `chrooter`, this is a setuid root binary that launches `_chrooter`. (This intermediary binary is necessary because `_chrooter` is a script which cannot be setuid, and setuid is required for the chroot and identity change.) Finally, `_chrooter` starts the `debian-chroot` service, chroot to the target dir, changes identity and eventually launches the original command as if it was lauched directly by `gitannex` user in Debian. `_chrooter` and `gasp` are Python scripts, I did not use shell in order to avoid error-prone issues with spaces in arguments (that need to be passed around several times in the process).
-
-I'll try now to add command-line parameters to `gasp` in order to restrict the commands that can be run through SSH and the repositories allowed.
-
-Cheers,
-Franck
-"""]]
diff --git a/doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client.mdwn b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client.mdwn
index 941ac9e5a..941ac9e5a 100644
--- a/doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client.mdwn
+++ b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client.mdwn
diff --git a/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_10_e33dddf4d1f104107c86800a0a9a89b2._comment b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_10_e33dddf4d1f104107c86800a0a9a89b2._comment
new file mode 100644
index 000000000..0e2c11656
--- /dev/null
+++ b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_10_e33dddf4d1f104107c86800a0a9a89b2._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ subject="comment 10"
+ date="2014-11-25T21:28:56Z"
+ content="""
+[[forum/usability:_creating_an_archive_on_a_new_external_drive]] has discussion of why the assistant cannot do this by default.
+"""]]
diff --git a/doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_1_25eb2d7d0a9cdd1c55df0cec68472723._comment b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_1_25eb2d7d0a9cdd1c55df0cec68472723._comment
index 282e78298..282e78298 100644
--- a/doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_1_25eb2d7d0a9cdd1c55df0cec68472723._comment
+++ b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_1_25eb2d7d0a9cdd1c55df0cec68472723._comment
diff --git a/doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_2_9e9b96e5113a50533251e946c2560d81._comment b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_2_9e9b96e5113a50533251e946c2560d81._comment
index da1fcbc0f..da1fcbc0f 100644
--- a/doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_2_9e9b96e5113a50533251e946c2560d81._comment
+++ b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_2_9e9b96e5113a50533251e946c2560d81._comment
diff --git a/doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_3_6b091198ddd6ed709b076df1296aeb77._comment b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_3_6b091198ddd6ed709b076df1296aeb77._comment
index 48d1b2604..48d1b2604 100644
--- a/doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_3_6b091198ddd6ed709b076df1296aeb77._comment
+++ b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_3_6b091198ddd6ed709b076df1296aeb77._comment
diff --git a/doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_4_118b588685b535cca4c02eb6ef297c67._comment b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_4_118b588685b535cca4c02eb6ef297c67._comment
index 8ad0de3a5..8ad0de3a5 100644
--- a/doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_4_118b588685b535cca4c02eb6ef297c67._comment
+++ b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_4_118b588685b535cca4c02eb6ef297c67._comment
diff --git a/doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_5_5cead277493e1c020e16be6f9245fe33._comment b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_5_5cead277493e1c020e16be6f9245fe33._comment
index 26b472dc7..26b472dc7 100644
--- a/doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_5_5cead277493e1c020e16be6f9245fe33._comment
+++ b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_5_5cead277493e1c020e16be6f9245fe33._comment
diff --git a/doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_6_0f135f97c2808dce094628dc6608e617._comment b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_6_0f135f97c2808dce094628dc6608e617._comment
index 3fadb6219..3fadb6219 100644
--- a/doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_6_0f135f97c2808dce094628dc6608e617._comment
+++ b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_6_0f135f97c2808dce094628dc6608e617._comment
diff --git a/doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_7_1d6f47f9e6cf935f19d68af6d5aa92fa._comment b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_7_1d6f47f9e6cf935f19d68af6d5aa92fa._comment
index 03d9950bc..03d9950bc 100644
--- a/doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_7_1d6f47f9e6cf935f19d68af6d5aa92fa._comment
+++ b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_7_1d6f47f9e6cf935f19d68af6d5aa92fa._comment
diff --git a/doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_8_c5758fdb32348b9cd804ff17d27864e1._comment b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_8_c5758fdb32348b9cd804ff17d27864e1._comment
index 1ef87e6a6..1ef87e6a6 100644
--- a/doc/bugs/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_8_c5758fdb32348b9cd804ff17d27864e1._comment
+++ b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_8_c5758fdb32348b9cd804ff17d27864e1._comment
diff --git a/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_9_3f0bfc5a79aa59ac76a6968aacda6655._comment b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_9_3f0bfc5a79aa59ac76a6968aacda6655._comment
new file mode 100644
index 000000000..d370bb28d
--- /dev/null
+++ b/doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_9_3f0bfc5a79aa59ac76a6968aacda6655._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="72.0.72.144"
+ subject="confusing..."
+ date="2014-05-14T05:04:01Z"
+ content="""
+this is still really confusing. having to create the repo by hand is a really confusing step - i have setup an external drive to have my files with me as i move around, having to go through hoops to find them in a bare repository seems contrary to the spirit of \"future proofing\" inherent to git annex.
+
+the solution i found was to `git init` the repo on the removable drive before adding it through the webapp. i hope this can eventually be fixed, as it led to confusion among many other users (e.g. [[forum/Accessing_files_in_bare_repository/]], [[bugs/Adding a repository as a \"remote server\" creates a bare repository next to the existing one/]], [[forum/remote server client repositories are bare!?/]] and so on). --[[anarcat]]
+"""]]
diff --git a/doc/todo/Check_if_an_upgrade_is_available_in_the_webapp.mdwn b/doc/todo/Check_if_an_upgrade_is_available_in_the_webapp.mdwn
deleted file mode 100644
index e102606ca..000000000
--- a/doc/todo/Check_if_an_upgrade_is_available_in_the_webapp.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-Especially on Mac OSX (and Windows, and maybe Android), it would be great to be able to check in the webapp if an upgrade is available. A deeper integration with these OS would be even better: for example on Mac OSX, an icon on the status bar list available upgrades for some programs, including LibreOffice and others which are not installed by default.
-
-Also, it would be great to be able to download and install git-annex upgrades directly from the webapp.
-
-> comprehensively [[done]]; [[design/assistant/upgrading]] --[[Joey]]
diff --git a/doc/todo/Check_if_an_upgrade_is_available_in_the_webapp/comment_1_c904182f6bff8b1a42070bbc038eb34e._comment b/doc/todo/Check_if_an_upgrade_is_available_in_the_webapp/comment_1_c904182f6bff8b1a42070bbc038eb34e._comment
deleted file mode 100644
index 750e3b83a..000000000
--- a/doc/todo/Check_if_an_upgrade_is_available_in_the_webapp/comment_1_c904182f6bff8b1a42070bbc038eb34e._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.246"
- subject="comment 1"
- date="2013-11-15T20:51:18Z"
- content="""
-I have thought about doing this, especially if there is ever a security hole in git-annex.
-
-All it needs is a file containing the version number to be written along-side the git-annex build, and git-annex knowing if it was built as a standalone build, and should check that.
-
-As for actually performing the upgrade:
-
-* Easy on Linux
-* Not sure on OSX.. Is it possible to use hdiutil attach to replace a dmg while a program contained in it is currently running?
-* Probably impossible on Android, at least not without using double the space. Probably better to get git-annex into an app store.
-* Doable on Windows, but would need git-annex to be distributed in a form that was not a installer.exe.
-"""]]
diff --git a/doc/todo/Check_if_an_upgrade_is_available_in_the_webapp/comment_2_ebe7a75ca291e7f749bfe9f46d10909d._comment b/doc/todo/Check_if_an_upgrade_is_available_in_the_webapp/comment_2_ebe7a75ca291e7f749bfe9f46d10909d._comment
deleted file mode 100644
index d06fe3961..000000000
--- a/doc/todo/Check_if_an_upgrade_is_available_in_the_webapp/comment_2_ebe7a75ca291e7f749bfe9f46d10909d._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlzlNQbf6wBgv9j6-UqfpXcQyAYMF8S3t4"
- nickname="Tim"
- subject="comment 2"
- date="2014-01-12T09:19:31Z"
- content="""
-I am pretty sure you know about it, but have you seen https://f-droid.org/? I was rather surprised that git-annex isn't yet listed in that \"store\".
-"""]]
diff --git a/doc/todo/Chunks_support_in_all_special_remotes.mdwn b/doc/todo/Chunks_support_in_all_special_remotes.mdwn
new file mode 100644
index 000000000..6d25ba684
--- /dev/null
+++ b/doc/todo/Chunks_support_in_all_special_remotes.mdwn
@@ -0,0 +1,10 @@
+The special remote `directory` support files split in chunks, other special remotes do not.
+
+Support for chunks is useful, for example, to be able to upload large files over slow, unreliable connections or to minimize the amount of data to be sent when only part of a big file has been changed.
+
+Couldn't the code used to split, checksum and reconstruct the files in the `directory` remote be used also in all the other special remotes?
+
+> [[done]]; nearly all special remotes support chunking now, and the ones
+> that don't omit it for their own reasons, for example bup is not sped up
+> by using chunks, and glacier needs some additional work to support them.
+> --[[Joey]]
diff --git a/doc/todo/Chunks_support_in_all_special_remotes/comment_1_d12604dbeb42bbb6850425d237cb01e7._comment b/doc/todo/Chunks_support_in_all_special_remotes/comment_1_d12604dbeb42bbb6850425d237cb01e7._comment
new file mode 100644
index 000000000..93ff8e53f
--- /dev/null
+++ b/doc/todo/Chunks_support_in_all_special_remotes/comment_1_d12604dbeb42bbb6850425d237cb01e7._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-11T20:17:05Z"
+ content="""
+See [[design/assistant/chunks]]
+"""]]
diff --git a/doc/todo/Configuring_metadata_view_filenames.mdwn b/doc/todo/Configuring_metadata_view_filenames.mdwn
new file mode 100644
index 000000000..220c47001
--- /dev/null
+++ b/doc/todo/Configuring_metadata_view_filenames.mdwn
@@ -0,0 +1 @@
+Currently, in a git annex view, filenames take the form basename%path%.ext. I understand that this is a carefully drafted mapping to allow changes to be merged back into metadata. However, maybe it would be possible to make the separator ('%') and the order (e.g. path%basename.ext instead) configurable?
diff --git a/doc/todo/Configuring_metadata_view_filenames/comment_1_08f8f27e5a8dbd80a91ffd9fd6f64e6c._comment b/doc/todo/Configuring_metadata_view_filenames/comment_1_08f8f27e5a8dbd80a91ffd9fd6f64e6c._comment
new file mode 100644
index 000000000..b498df631
--- /dev/null
+++ b/doc/todo/Configuring_metadata_view_filenames/comment_1_08f8f27e5a8dbd80a91ffd9fd6f64e6c._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-04T19:38:58Z"
+ content="""
+git-annex really doesn't care what filenames are used with in a view.
+It only needs to ensure that each file gets a unique filename. Which
+is why the directory is included in the filename, to avoid conflicts
+if 2 files with the same name appear in different directories.
+
+It would probably be better to make it avoid needing to include the
+directory in the filename unless there is such a conflict, rather than
+adding complexity configuring that.
+
+However, since views are currently built by streaming the contents of the
+branch to git update-index, git-annex can't just eg, examine the working
+tree to see if a conflicting file exists. It seems it would need to keep
+a map of the files it's added to the view branch so far, and check against
+the map. But that would make memory use scale with the number of files in
+the view, which I'd prefer to avoid..
+
+I'm going to move this from bugs to todo.
+"""]]
diff --git a/doc/todo/Deduplicate_archive___40__i.e._zip__41___files.mdwn b/doc/todo/Deduplicate_archive___40__i.e._zip__41___files.mdwn
new file mode 100644
index 000000000..c551b08d7
--- /dev/null
+++ b/doc/todo/Deduplicate_archive___40__i.e._zip__41___files.mdwn
@@ -0,0 +1,9 @@
+I've just come across this issue and I'm not sure if git-annex is the right place to put it, but in case it is easy enough to do.. may as well ask!
+
+In this scenario, an online service (Bandcamp), automatically creates the archive file when downloading an album each and every time you download it. This results in identical files inside a zip, but different hashes due to the slightly different timestamps on the archive itself.
+
+Would it be possible for git-annex to be able to detect this scenario (in a manner similar to zipcmp) and redirect an add/import to the already existing copy?
+
+I've found this due to trying to decommission an old annex by `git annex import --clean-duplicates ~/annex_old/.git/annex/objects` and finding these files being left.
+
+[[done]] --[[Joey]]
diff --git a/doc/todo/Deduplicate_archive___40__i.e._zip__41___files/comment_1_619840f2337b018ff165565325cf1a61._comment b/doc/todo/Deduplicate_archive___40__i.e._zip__41___files/comment_1_619840f2337b018ff165565325cf1a61._comment
new file mode 100644
index 000000000..19548edb3
--- /dev/null
+++ b/doc/todo/Deduplicate_archive___40__i.e._zip__41___files/comment_1_619840f2337b018ff165565325cf1a61._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 1"
+ date="2014-08-12T19:51:38Z"
+ content="""
+All you need to do is unzip your zip file, and then `git annex add` or `git annex import` its contents. It will then automatically deduplicate.
+
+Due to the way compression works, two zip (or gz) files with identical contents but different checksums are unlikely to share many bytes in common. So git-annex cannot help with de-duplicating unless you unzip them.
+"""]]
diff --git a/doc/todo/Enhancement:_git_annex_whereis_KEY.mdwn b/doc/todo/Enhancement:_git_annex_whereis_KEY.mdwn
deleted file mode 100644
index 604bc5566..000000000
--- a/doc/todo/Enhancement:_git_annex_whereis_KEY.mdwn
+++ /dev/null
@@ -1,19 +0,0 @@
-### Please describe the problem.
-
-Great work on git annex! One possible enhancement occured to me: It would be very useful though if the "whereis" command would support looking up the location of files by arbitrary keys. This way one could inspect the location of old content which is not currently checked-out in the tree.
-
-In a related vein, the "unused" command could report old filenames or describe the associated commits. Tracking old versions is a great feature of your git-based approach, but currently, tasks such as pruning selected content seem unwiedly. Though I might be missing existing solutions. You can easily "cut-off" the history by forcing a drop of all unused content. It would be cool if one could somehow "address" old versions by filename and commit/date and selectively drop just these. The same could go for the "whereis" command, where one could e.g. query which remote holds content which was stored under some filename at some specific date.
-
-Thanks Cheers!
-
-> I agree that it's useful to run whereis on a specific key. This can
-> now be done using `git annex whereis --key KEY`
-> [[done]] --[[Joey]]
->
-> To report old filenames, unused would have to search back through the
-> contents of symlinks in old versions of the repo, to find symlinks that
-> referred to a key. The best way I know how to do that is `git log -S$KEY`,
-> which is what unused suggests you use. But this is slow --
-> searching for a single key in one of my repos takes 25 seconds.
-> That's why it doesn't do it for you.
->
diff --git a/doc/todo/Expose_auto-merge_for_manual__44___local_merges.mdwn b/doc/todo/Expose_auto-merge_for_manual__44___local_merges.mdwn
new file mode 100644
index 000000000..c2cf26f83
--- /dev/null
+++ b/doc/todo/Expose_auto-merge_for_manual__44___local_merges.mdwn
@@ -0,0 +1,9 @@
+The automatic conflict resolution currently seems to only work within
+the context of sync, when merging «synced/foo» into «foo». It would be
+convenient if this functionality were exposed for manual merges
+between local branches.
+
+E.g., one might invoke «git annex merge» or «git annex autoresolve»
+after «git merge» when conflicts are found.
+
+> [[done]] as resolvemerge. --[[Joey]]
diff --git a/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running.mdwn b/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running.mdwn
new file mode 100644
index 000000000..7f7a482b9
--- /dev/null
+++ b/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running.mdwn
@@ -0,0 +1,5 @@
+I’m just experimenting with git-annex on a repo of ~150k files in about the same number of directories (WORM-backend). Calling, e.g., «git annex status» will take several minutes while stat()-ing all the files (for changes, I presume).
+
+This might already be on you todo list, but I was wondering whether it is possible to increase the performance of «annex status» (or related commands) when «annex watch» is running in the background. In that case, «status» could rely on cached data built-up at some point during initialization, plus based on the data that was accumulated via inotify. (Hopefully, all this won’t even be needed anymore on btrfs at some point in the future.)
+
+(I’m not very knowledgable in these things, so just out of curiosity: I noticed that, even though the «status» invocation takes ages, no HDD activity occurs and all the metadata is probably already in the Linux caches from a run I conducted immediately beforehand. Why do you figure that is? Is context switching so hugely expensive?)
diff --git a/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_1_e5f2630591ffa7758ca4250a061a8589._comment b/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_1_e5f2630591ffa7758ca4250a061a8589._comment
new file mode 100644
index 000000000..446562f85
--- /dev/null
+++ b/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_1_e5f2630591ffa7758ca4250a061a8589._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-10T19:37:38Z"
+ content="""
+Neither `git annex watch` nor the `assistant` persistently store any data about the files in the repository in memory. They cannot speed up `git annex status`.
+
+I'm not sure what's the point of running `git annex status` while the daemon is running, since the daemon will normally immediately notice changes and commit them. The status output should thus generally be empty.
+
+FWIW, `git annex status` takes 0.3s in my largest repo (55k files), on an SSD. That's in indirect mode, and the time is almost completely spent in running `git ls-files --modified`, which is probably about as fast as it can be. In a direct mode repository, it will be rather slower, since it has to query git for the key that was last committed for each file, in order to look up that key's info and see if the file has been modified.
+"""]]
diff --git a/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_2_f8a5cc905d5b06bdbb1a778ab866a28c._comment b/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_2_f8a5cc905d5b06bdbb1a778ab866a28c._comment
new file mode 100644
index 000000000..315569ca1
--- /dev/null
+++ b/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_2_f8a5cc905d5b06bdbb1a778ab866a28c._comment
@@ -0,0 +1,44 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="134.147.14.84"
+ subject="comment 2"
+ date="2014-07-11T11:46:08Z"
+ content="""
+Yes, you’re probably right that the benefit of this is slim when the
+watching daemon auto-adds new files. So the «status» output would
+never change and show the status that upheld before starting the
+daemon.
+
+The reason I brought this up that I recall reading a comment of yours
+somewhere on the site, to the effect that the assistant can sometimes
+speed up certain operations, because it can make certain valid
+assumptions on the state of the repo due to the fact that the
+assistant has been monitoring it. I don’t recall what those operations
+were, though. That’s why it occurred to me whether there might be a
+daemon that just monitors via inotify, and neither adds nor syncs, and
+only provides information to certain commands to speed things up under
+some circumstances.
+
+In general, is it accurate to say that git-annex mostly takes the
+«space» option when making a space/time-trade-offs? I noticed that the
+memory consumption is really slim most of the time, and wondered
+whether there might be options of speeding operations up by relying on
+more memory instead (perhaps also doing persistent caching). On the
+other hand, in some regards you are probably committed to the
+time/memory trade-offs taken by vanilla git, so maybe there’s not much
+room for improvement, git-annex wise…
+
+Maybe direct-mode repos on the order of 100k’s of files are just not
+practical. I’m using indirect mode for my really big repos now, and
+it’s now responsive enough to use (except for «annex unused», which is
+inherently expensive, as you once explained). At least commiting won’t
+take tens of minutes that way. I’ll just have to make the software
+play nicely with the symlinks.
+
+BTW, the file-system seems to have a huge impact on this. My large
+direct mode annex is practically unusable on ext (tens of minutes per
+commit), but still usable on btrfs (a few minutes). I’m migrating one
+disk to btrfs at home and will do some controlled benchmarks then. The
+added bonus is that directories don’t always take up a full block.
+
+"""]]
diff --git a/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_3_626c629654508d0d948ece849d43ed86._comment b/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_3_626c629654508d0d948ece849d43ed86._comment
new file mode 100644
index 000000000..58cf33c10
--- /dev/null
+++ b/doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_3_626c629654508d0d948ece849d43ed86._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="134.147.14.84"
+ subject="comment 3"
+ date="2014-07-11T11:54:26Z"
+ content="""
+Ah, interesting, some caching ideas are already discussed at [https://git-annex.branchable.com/design/caching_database/].
+"""]]
diff --git a/doc/todo/Feature_Request:_Sync_Now_Button_in_Webapp.mdwn b/doc/todo/Feature_Request:_Sync_Now_Button_in_Webapp.mdwn
deleted file mode 100644
index e224215fc..000000000
--- a/doc/todo/Feature_Request:_Sync_Now_Button_in_Webapp.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-One Problem I am having is that I could never get the xmpp pairing to work so whenever I switch machines I have to manually run sync once on the command line to get the changes. Is it possible to have a sync now button of some sort that will trigger a sync on the repos?
-
-> moved from forum; [[done]] --[[Joey]]
diff --git a/doc/todo/Feature_Request:_Sync_Now_Button_in_Webapp/comment_1_0d5c90eb0e8fe61b82a19c5fea343613._comment b/doc/todo/Feature_Request:_Sync_Now_Button_in_Webapp/comment_1_0d5c90eb0e8fe61b82a19c5fea343613._comment
deleted file mode 100644
index a5f631d50..000000000
--- a/doc/todo/Feature_Request:_Sync_Now_Button_in_Webapp/comment_1_0d5c90eb0e8fe61b82a19c5fea343613._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnR6E5iUghMWdUGlbA9CCs8DKaoigMjJXw"
- nickname="Efraim"
- subject="comment 1"
- date="2014-03-06T20:37:36Z"
- content="""
-not quite a sync button, but when I want to force sync now I turn off and turn on sync for one of the repos from the webapp and then it syncs.
-"""]]
diff --git a/doc/todo/Feature_Request:_Sync_Now_Button_in_Webapp/comment_2_196552002d70390e8b52b4af61dca903._comment b/doc/todo/Feature_Request:_Sync_Now_Button_in_Webapp/comment_2_196552002d70390e8b52b4af61dca903._comment
deleted file mode 100644
index 41e05bf6e..000000000
--- a/doc/todo/Feature_Request:_Sync_Now_Button_in_Webapp/comment_2_196552002d70390e8b52b4af61dca903._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.146"
- subject="comment 2"
- date="2014-03-06T22:12:27Z"
- content="""
-I've added a \"Sync now\" to the menu for each remote. So can be used to sync with an individual remote, or if picked from the menu for the local repository, it causes it to try to sync with every one if its remotes at once.
-"""]]
diff --git a/doc/todo/LIst_of_Available_Remotes_in_Webapp.mdwn b/doc/todo/LIst_of_Available_Remotes_in_Webapp.mdwn
new file mode 100644
index 000000000..89274bb8d
--- /dev/null
+++ b/doc/todo/LIst_of_Available_Remotes_in_Webapp.mdwn
@@ -0,0 +1 @@
+When using git-annex in a distributed fashion (lots of repos everywhere) It is easy to lose track of which remotes has a particular repo and enable it. Currently I have to run `git annex info` and see which remotes are available then add them through the webapp. Would it be possible to make webapp show all repos not just the ones it is syncing give an option to enable it.
diff --git a/doc/todo/LIst_of_Available_Remotes_in_Webapp/comment_1_23fe2f3cd44c4357a385452dcd5eedef._comment b/doc/todo/LIst_of_Available_Remotes_in_Webapp/comment_1_23fe2f3cd44c4357a385452dcd5eedef._comment
new file mode 100644
index 000000000..9e22dafca
--- /dev/null
+++ b/doc/todo/LIst_of_Available_Remotes_in_Webapp/comment_1_23fe2f3cd44c4357a385452dcd5eedef._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 1"
+ date="2014-04-17T20:54:18Z"
+ content="""
+I chose to make the webapp only show available remotes when it knows how to enable them. So it will show S3 special remotes, Box.com special remotes, etc. This avoids cluttering up the display of a shared repository with a list of all of your friend's removable drives, for example.
+
+I would like to make the webapp smarter about handling repositories on remote ssh servers. As long as the server name is in the global DNS, the webapp could easily walk the user through setting up such a remote. The missing piece is that nothing is logged in remotes.log for these remotes, and so the assistant doesn't know the server name.
+"""]]
diff --git a/doc/todo/Limit_file_revision_history.mdwn b/doc/todo/Limit_file_revision_history.mdwn
deleted file mode 100644
index 48b44dea2..000000000
--- a/doc/todo/Limit_file_revision_history.mdwn
+++ /dev/null
@@ -1,117 +0,0 @@
-Hi, I am assuming to use git-annex-assistant for two usecases, but I would like to ask about the options or planed roadmap for dropped/removed files from the repository.
-
-Usecases:
-
-1. sync working directory between laptop, home computer, work komputer
-2. archive functionality for my photograps
-
-Both usecases have one common factor. Some files might become obsolate and
-in long time frame nobody is interested to keep their revisions. Let's
-assume photographs. Usuall workflow I take is to import all photograps to
-filesystem, then assess (select) the good ones I want to keep and then
-process them what ever way.
-
-Problem with git-annex(-assistant) I have is that it start to revision all
-of the files at the time they are added to directory. This is welcome at
-first but might be an issue if you are used to put 80% of the size of your
-imported files to trash.
-
-I am aware of what git-annex is not. I have been reading documentation for
-"git-annex drop" and "unused" options including forums. I do understand
-that I am actually able to delete all revisions of the file if I will drop
-it, remove it and if I will run git annex unused 1..###. (on all synced
-repositories).
-
-I actually miss the option to have above process automated/replicated to the other synced repositories.
-
-I would formulate the 'use case' requirements for git-annex as:
-
-* command to drop an file including revisions from all annex repositories?
- (for example like moving a file to /trash folder) that will schedulle
- it's deletition)
-* option to keep like max. 10 last revisions of the file?
-* option to keep only previous revisions if younger than 6 months from now?
-
-Finally, how to specify a feature request for git-annex?
-
-> By moving it here ;-) --[[Joey]]
-
-> So, let's spec out a design.
->
-> * Add preferred content terminal to configure whether a repository wants
-> to hang on to unused content. Simply `unused`.
-> (It cannot include a timestamp, because there's
-> no way repos can agree on about when a key became unused.) **done**
-> * In order to quickly match that terminal, the Annex monad will need
-> to keep a Set of unused Keys. This should only be loaded on demand.
-> **done**
-> NB: There is some potential for a great many unused Keys to cause
-> memory usage to balloon.
-> * Client repositories will end their preferred content with
-> `and (not unused)`. Transfer repositories too, because typically
-> only client repos connect to them, and so otherwise unused files
-> would build up there. Backup repos would want unused files. I
-> think that archive repos would too. **done**
-> * Make the assistant check for unused files periodically. Exactly
-> how often may need to be tuned, but once per day seems reasonable
-> for most repos. Note that the assistant could also notice on the
-> fly when files are removed and mark their keys as unused if that was
-> the last associated file. (Only currently possible in direct mode.)
-> **done**
-> * After scanning for unused files, it makes sense for the
-> assistant to queue transfers of unused files to any remotes that
-> do want them (eg, backup remotes). If the files can successfully be
-> sent to a remote, that will lead to them being dropped locally as
-> they're not wanted.
-> * Add a git config setting like annex.expireunused=7d. This causes
-> *deletion* of unused files after the specified time period if they are
-> not able to be moved to a repo that wants them.
-> (The default should be annex.expireunused=false.)
-> * How to detect how long a file has been unused? We can't look at the
-> time stamp of the object; we could use the mtime of the .map file,
-> that that's direct mode only and may be replaced with a database
-> later. Seems best to just keep a unused log file with timestamps.
-> **done**
-> * After the assistant scans for unused files, if annex.expireunused
-> is not set, and there is some significant quantity of unused files
-> (eg, more than 1000, or more than 1 gb, or more than the amount of
-> remaining free disk space),
-> it can pop up a webapp alert asking to configure it. **done**
-> * Webapp interface to configure annex.expireunused. Reasonable values
-> are no expiring, or any number of days. **done**
->
-> [[done]] This does not cover every use case that was requested.
-> But I don't see a cheap way to ensure it keeps eg the past 10 versions of
-> a file. I guess that if you care about that, you leave
-> annex.expireunused=false, and set up a backup repository where the unused
-> files will be moved to.
->
-> Note that since the assistant uses direct mode by default, old versions
-> of modififed files are not guaranteed to be retained. But they very well
-> might be. For example, if a file is replicated to 2 clients, and one
-> client directly edits it, or deletes it, it loses the old version,
-> but the other client will still be storing that old version.
->
-> ## Stability analysis for unused in preferred content expressions
->
-> This is tricky, because two repos that are otherwise entirely
-> in sync may have differing opinons about whether a key is unused,
-> depending on when each last scanned for unused keys.
->
-> So, this preferred content terminal is *not stable*.
-> It may be possible to write preferred content expressions
-> that constantly moved such keys around without reaching a steady state.
->
-> Example:
->
-> A and B are clients directly connected, and both also connected
-> to BACKUP.
->
-> A deletes F. B syncs with A, and runs unused check; decides F
-> is unused. B sends F to BACKUP. B will then think A doesn't want F,
-> and will drop F from A. Next time A runs a full transfer scan, it will
-> *not* find F (because the file was deleted!). So it won't get F back from
-> BACKUP.
->
-> So, it looks like the fact that unused files are not going to be
-> looked for on the full transfer scan seems to make this work out ok.
diff --git a/doc/todo/Move_ssh_config_to___126____47__ssh__47__git-annex__47__config.mdwn b/doc/todo/Move_ssh_config_to___126____47__ssh__47__git-annex__47__config.mdwn
index 5dc063100..419b6795e 100644
--- a/doc/todo/Move_ssh_config_to___126____47__ssh__47__git-annex__47__config.mdwn
+++ b/doc/todo/Move_ssh_config_to___126____47__ssh__47__git-annex__47__config.mdwn
@@ -5,3 +5,5 @@ Instead of storing config for each remote in ~/.ssh/config, which mixes the user
I'm using git-annex 4.20130601 on a Debian Testing/Unstable/Experimental mix.
[[!tag design/assistant]]
+
+[[wontfix]]
diff --git a/doc/todo/New_special_remote_suggeston_-_clean_directory.mdwn b/doc/todo/New_special_remote_suggeston_-_clean_directory.mdwn
index 9fd3c5a20..98dd58d5e 100644
--- a/doc/todo/New_special_remote_suggeston_-_clean_directory.mdwn
+++ b/doc/todo/New_special_remote_suggeston_-_clean_directory.mdwn
@@ -13,3 +13,11 @@ This special remote could be thought of as the 'least common denominator of spec
First and foremost, this can't be (really really shouldn't be) a trusted remote; my wife could accidentally delete all files on the NAS while I am away. So my local git-annex shouldn't assume the NAS counts towards numcopies (unless I'm a real masochist).
Secondly, what to do when files change/are added/removed on the special remote? Probably the same thing that the assistant does with everything. The only thing special is that new/modified files will need to be copied locally from this special remote before being added to the annex (to get hash and such).
+
+> This is not feaisble given git-annex's design. If I wanted to
+> make something completely unlike git-annex, I suppose it could be done,
+> but it's off topic here. [[wontfix|done]].
+>
+> If you want to use git-annex on a Synology NAS, the arm standalone build
+> will work, and then you can use the command-line, or the assistant
+> to maintain a git repository that contains your files as desired. --[[Joey]]
diff --git a/doc/todo/Not_working_on_Android-x86/comment_3_6b609af60bf1c477139e40eba5cb0c4e._comment b/doc/todo/Not_working_on_Android-x86/comment_3_6b609af60bf1c477139e40eba5cb0c4e._comment
new file mode 100644
index 000000000..e4ac8f820
--- /dev/null
+++ b/doc/todo/Not_working_on_Android-x86/comment_3_6b609af60bf1c477139e40eba5cb0c4e._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.191"
+ subject="comment 3"
+ date="2014-04-20T21:01:50Z"
+ content="""
+Samsung Galaxy Tab 3 (GT-P5210) also needs this.
+
+Each new git-annex builder takes me days to set up, and is an ongoing drain to keep running. I would much rather walk someone else through setting one up, unless this becomes a very common architecture for android.
+"""]]
diff --git a/doc/todo/Option_for_browser_to_launch_webapp_with.mdwn b/doc/todo/Option_for_browser_to_launch_webapp_with.mdwn
deleted file mode 100644
index dae601169..000000000
--- a/doc/todo/Option_for_browser_to_launch_webapp_with.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-Firefox is my default browser, but as we all know, it doesn't load quickly. If I don't have Firefox running but I want to access the git-annex webapp, I'd rather launch the webapp in some small, quick browser like QupZilla than wait for Firefox to load.
-
-Could git-annex have a setting, maybe a "webapp --browser" option and/or a setting in the config file, to specify the browser to launch?
-
-> git-annex uses the standard `git config web.browser` if you set it.
-> [[done]]
-> --[[Joey]]
diff --git a/doc/todo/Pause_all_transfers_in_all_annexes_watched_by_the_assistant.mdwn b/doc/todo/Pause_all_transfers_in_all_annexes_watched_by_the_assistant.mdwn
new file mode 100644
index 000000000..2ce33f726
--- /dev/null
+++ b/doc/todo/Pause_all_transfers_in_all_annexes_watched_by_the_assistant.mdwn
@@ -0,0 +1,11 @@
+## Use case:
+
+You have a few annexes that the assistant is watching for you. You're somewhere with poor wifi speed. You also just added a bunch of big files to a few annexes. Now all of a sudden your connection suffers and you want an easy way to pause all transfers until you're on a faster connection without losing the automatic 'add' and such of the assistant (iow: without having to shutdown the daemon).
+
+## Proposal:
+
+A "Pause all transfers" button in the webapp that pauses all transfers from all annexes the assistant is watching.
+
+It should toggle to "Resume all transfers" when pushed so you can also easily start the transfers again when you get somewhere else.
+
+This may or may not make more sense if the webapp showed all watched repos in a single view (instead of the separate pages/views as it is now).
diff --git a/doc/todo/Please_abort_build_if___34__make_test__34___fails.mdwn b/doc/todo/Please_abort_build_if___34__make_test__34___fails.mdwn
deleted file mode 100644
index 592b5e077..000000000
--- a/doc/todo/Please_abort_build_if___34__make_test__34___fails.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-A failure during "make test" should be signalled to the caller by means of
-a non-zero exit code. Without that signal, it's very hard to run the
-regression test suite in an automated fashion.
-
-> git-annex used to have a Makefile that ignored make test exit status,
-> but that was fixed in commit dab5bddc64ab4ad479a1104748c15d194e138847,
-> in October 6th. [[done]] --[[Joey]]
diff --git a/doc/todo/Please_add_support_for_monad-control_0.3.x.mdwn b/doc/todo/Please_add_support_for_monad-control_0.3.x.mdwn
deleted file mode 100644
index f82224991..000000000
--- a/doc/todo/Please_add_support_for_monad-control_0.3.x.mdwn
+++ /dev/null
@@ -1,9 +0,0 @@
-Git-annex doesn't compile with the latest version of monad-control. Would it be hard to support that new version?
-
-> I have been waiting for it to land in Debian before trying to
-> deal with its changes.
->
-> There is now a branch in git called `new-monad-control` that will build
-> with the new monad-control. --[[Joey]]
-
->> Now merged to master. [[done]] --[[Joey]]
diff --git a/doc/todo/Provide_a___34__git_annex_satisfy__95__num__95__copies__34___command.mdwn b/doc/todo/Provide_a___34__git_annex_satisfy__95__num__95__copies__34___command.mdwn
deleted file mode 100644
index cbd01181f..000000000
--- a/doc/todo/Provide_a___34__git_annex_satisfy__95__num__95__copies__34___command.mdwn
+++ /dev/null
@@ -1,16 +0,0 @@
-Please provide a command that basically performs something like:
-
-git get --auto
-for i in `git remote`; do git copy -to $i --auto; done
-
-
-The use case is this:
-I have a very large repo (300.000 files) in three places. Now I want the fastest possible way to ensure, that every file exists in annex.numcopies. This should scan every file one time and then get it or copy it to other repos as needed. Right now, I make one "git annex get --auto" in every repo, which is is a waste of time, since most of the files never change anyway!
-
-> Now `git annex sync --content` does effectivly just what the shown for
-> loop does. [[done]]
->
-> The only difference is that copy --auto proactively downloads otherwise
-> unwanted files to satisfy numcopies, and sync --content does not.
-> We need a [[preferred_content_numcopies_check]] to solve that.
-> --[[Joey]]
diff --git a/doc/todo/Recovering_from_a_bad_sync.mdwn b/doc/todo/Recovering_from_a_bad_sync.mdwn
new file mode 100644
index 000000000..d60406568
--- /dev/null
+++ b/doc/todo/Recovering_from_a_bad_sync.mdwn
@@ -0,0 +1,31 @@
+Instead of using `sync origin` for the first sync and a simple `sync` for the other syncs,
+
+ # on pc1
+ git annex init "pc1"
+ git annex direct
+ git annex add .
+ git annex sync origin # remote specified on the first sync
+
+ # add some files
+ git annex add .
+ git annex sync
+
+I used `sync` first and only later I used `sync origin`
+
+ # on pc1
+ git annex init "pc1"
+ git annex direct
+ git annex add .
+ git annex sync
+
+ # add some files
+ git annex add .
+ git annex sync origin # remote specified on a later sync
+
+These sequences of commands create two completely different git histories.
+
+More important, if one clones on pc2 the first repository, they will see both the pc1 remote and the pc2 remote. Instead, if one clones on pc2 the repository created by the second combination of commands, they will see only the pc2 remote.
+
+What commands should I use on pc1 to fix the history so that when pc2 clones from the origin repository it will see both the pc1 remote and its own local remote?
+
+> [[done]]; fixed per my comments. --[[Joey]]
diff --git a/doc/todo/Recovering_from_a_bad_sync/comment_1_6f5f518a3190534b737203787149ef3c._comment b/doc/todo/Recovering_from_a_bad_sync/comment_1_6f5f518a3190534b737203787149ef3c._comment
new file mode 100644
index 000000000..fc354be3d
--- /dev/null
+++ b/doc/todo/Recovering_from_a_bad_sync/comment_1_6f5f518a3190534b737203787149ef3c._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-14T18:27:43Z"
+ content="""
+If this is a todo item at all, it may make sense to make `git annex sync` sync even with git remotes that have no annex-uuid.
+
+As far as solving the problem, I think you just need to sync more in order to get the full list of remotes propigated around to all the remotes. Sync automatically merges disconnected git histories no matter how they got that way or how long they have been disconnected or diverged.
+"""]]
diff --git a/doc/todo/Recovering_from_a_bad_sync/comment_2_e494df56dcede4d14bcaa4cdbf3da4f5._comment b/doc/todo/Recovering_from_a_bad_sync/comment_2_e494df56dcede4d14bcaa4cdbf3da4f5._comment
new file mode 100644
index 000000000..011129336
--- /dev/null
+++ b/doc/todo/Recovering_from_a_bad_sync/comment_2_e494df56dcede4d14bcaa4cdbf3da4f5._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 2"
+ date="2014-07-14T18:38:58Z"
+ content="""
+It seems that the person who filed this todo item also filed [[bugs/sync does not commit with alwasycommit = false]] and got pretty confused by that.
+
+So, repurposing this todo item to be about perhaps syncing with remotes that have no annex-uuid by default.
+"""]]
diff --git a/doc/todo/Recovering_from_a_bad_sync/comment_3_4d4904bcbf97401c7c11338f32577f96._comment b/doc/todo/Recovering_from_a_bad_sync/comment_3_4d4904bcbf97401c7c11338f32577f96._comment
new file mode 100644
index 000000000..1d173f0ef
--- /dev/null
+++ b/doc/todo/Recovering_from_a_bad_sync/comment_3_4d4904bcbf97401c7c11338f32577f96._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 3"
+ date="2014-07-15T18:23:50Z"
+ content="""
+Making `git annex sync` automatically sync with remotes with no annex-uuid is more complicated than I first thought.
+
+In the case of a remote accessed over ssh, `git annex sync` already does sync with such a remote. Of course, it will set annex-ignore on it, since it has no annex-uuid. (Needed eg, for github, or just for preventing a repo from being used by git-annex if you don't want it to be.) Still, the git branches get synced, which is the behavior that we want.
+
+So, only local remotes are affected. Note that `git annex assistant` automatically git-annex inits the local remote when it lacks a uuid, and syncs with it. That seems ok.
+
+However `git annex sync` currently ignores the local remote when it has no uuid. Seems that this happens due to a bug, not intentionally. tryGitConfigRead tries to bootstrap up an annex state to read the repos's config, but this cannot be done in a repo that is not yet initialized. Result is the repo state is not read, and so it's treated as a local remote that is not currently available (ie, a disconnected disk).
+"""]]
diff --git a/doc/todo/Recursive_addurl_simlar_to_wget_--recursive.mdwn b/doc/todo/Recursive_addurl_simlar_to_wget_--recursive.mdwn
new file mode 100644
index 000000000..629a9a120
--- /dev/null
+++ b/doc/todo/Recursive_addurl_simlar_to_wget_--recursive.mdwn
@@ -0,0 +1,9 @@
+## Use Case
+
+I want to import a bunch of files that are hosted somewhere, they nicely sorted by year and such. Instead of addurl'ing each by hand (or writing a custom script each time this happens) I want to simply:
+
+git-annex addurl --recursive http://somehost.tld/somedir/
+
+For sanity, mimicking wget closely with default depth of 5, but customizable with the --level switch.
+
+> [[done]] --[[Joey]]
diff --git a/doc/todo/Recursive_addurl_simlar_to_wget_--recursive/comment_1_4ecd9ddba1b63b571555ec9bef18e2d8._comment b/doc/todo/Recursive_addurl_simlar_to_wget_--recursive/comment_1_4ecd9ddba1b63b571555ec9bef18e2d8._comment
new file mode 100644
index 000000000..72326c478
--- /dev/null
+++ b/doc/todo/Recursive_addurl_simlar_to_wget_--recursive/comment_1_4ecd9ddba1b63b571555ec9bef18e2d8._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.244"
+ subject="comment 1"
+ date="2014-04-07T20:10:51Z"
+ content="""
+Recursively traversing websites is *hard*, so I would rather leave it out of git-annex.
+"""]]
diff --git a/doc/todo/S3.mdwn b/doc/todo/S3.mdwn
deleted file mode 100644
index 7e417336f..000000000
--- a/doc/todo/S3.mdwn
+++ /dev/null
@@ -1,24 +0,0 @@
-Support Amazon S3 as a file storage backend.
-
-There's a haskell library that looks good. Not yet in Debian.
-
-Multiple ways of using S3 are possible. Currently implemented as
-a special type of git remote.
-
-Before this can be close, I need to fix:
-
-## encryption
-
-TODO
-
-## unused checking
-
-One problem is `git annex unused`. Currently it only looks at the local
-repository, not remotes. But if something is dropped from the local repo,
-and you forget to drop it from S3, cruft can build up there.
-
-This could be fixed by adding a hook to list all keys present in a remote.
-Then unused could scan remotes for keys, and if they were not used locally,
-offer the possibility to drop them from the remote.
-
-[[done]]
diff --git a/doc/todo/S3_multipart_interruption_cleanup.mdwn b/doc/todo/S3_multipart_interruption_cleanup.mdwn
new file mode 100644
index 000000000..adb5fd2cb
--- /dev/null
+++ b/doc/todo/S3_multipart_interruption_cleanup.mdwn
@@ -0,0 +1,14 @@
+When a multipart S3 upload is being made, and gets interrupted,
+the parts remain in the bucket, and S3 may charge for them.
+
+I am not sure what happens if the same object gets uploaded again. Is S3
+nice enough to remove the old parts? I need to find out..
+
+If not, this needs to be dealt with somehow. One way would be to configure an
+expiry of the uploaded parts, but this is tricky as a huge upload could
+take arbitrarily long. Another way would be to record the uploadid and the
+etags of the parts, and then resume where it left off the next time the
+object is sent to S3. (Or at least cancel the old upload; resume isn't
+practical when uploading an encrypted object.)
+
+It could store that info in either the local FS or the git-annex branch.
diff --git a/doc/todo/Slow_transfer_for_a_lot_of_small_files./comment_1_fa76bc744e30aaeed4a3b3e2fe3dd75e._comment b/doc/todo/Slow_transfer_for_a_lot_of_small_files./comment_1_fa76bc744e30aaeed4a3b3e2fe3dd75e._comment
new file mode 100644
index 000000000..c877f9359
--- /dev/null
+++ b/doc/todo/Slow_transfer_for_a_lot_of_small_files./comment_1_fa76bc744e30aaeed4a3b3e2fe3dd75e._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnKT33H9qVVGJOybP00Zq2NZmNAyB65mic"
+ nickname="Lucas"
+ subject="comment 1"
+ date="2014-11-12T07:58:07Z"
+ content="""
+Opening multiple connections to a host can be preferable sometimes and it's unlikely to be an issue at all for the larger remotes like Google, Microsoft or S3.
+
+For example, the OneDrive provider spends a lot of time sitting around waiting for initialisation between uploads. Using, say 5 threads instead of 1 would allow it to continue doing things while it waits.
+
+Multiple connections can also vastly improve upload speeds for users with congested home internet connections.
+"""]]
diff --git a/doc/todo/Slow_transfer_for_a_lot_of_small_files./comment_2_80d1080bf6e82bd8aaccde9d7c1669c7._comment b/doc/todo/Slow_transfer_for_a_lot_of_small_files./comment_2_80d1080bf6e82bd8aaccde9d7c1669c7._comment
new file mode 100644
index 000000000..d531914ab
--- /dev/null
+++ b/doc/todo/Slow_transfer_for_a_lot_of_small_files./comment_2_80d1080bf6e82bd8aaccde9d7c1669c7._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://launchpad.net/~krastanov-stefan"
+ nickname="krastanov-stefan"
+ subject="Status of this issue"
+ date="2014-12-27T15:18:42Z"
+ content="""
+I was unable to find a way to tell git-annex that certain remotes should receive multiple transfers in parallel. Is this implemented yet or on the roadmap? If neither would modifying the webapp to bear this logic without touching git-annex itself be a solution (asking mainly because it can be done with a greasemonkey script)?
+"""]]
diff --git a/doc/todo/Speed_up___39__import_--clean-duplicates__39__.mdwn b/doc/todo/Speed_up___39__import_--clean-duplicates__39__.mdwn
new file mode 100644
index 000000000..34c21ab01
--- /dev/null
+++ b/doc/todo/Speed_up___39__import_--clean-duplicates__39__.mdwn
@@ -0,0 +1,7 @@
+I'm currently in the process of gutting old (some broken) git-annex's and cleaning out download directories from before I started using git-annex.
+
+To do this, I am running `git annex import --clean--duplicates $PATH` on the directories I want to clear out but sometimes, this takes a unnecessarily long time.
+
+For example, git-annex will calculate the digest for a huge file (30GB+) in $TARGET, even though there are no files in the annex of that size.
+
+It's a common shortcut to check for duplicate sizes first to eliminate definite non-matches really quickly. Can this be added to git-annex's `import` in some way or is this a no-go due to the constant memory constraint?
diff --git a/doc/todo/Speed_up___39__import_--clean-duplicates__39__/comment_1_9268c639d3d21cce4ca7b60d08e9cb65._comment b/doc/todo/Speed_up___39__import_--clean-duplicates__39__/comment_1_9268c639d3d21cce4ca7b60d08e9cb65._comment
new file mode 100644
index 000000000..8584d5ae8
--- /dev/null
+++ b/doc/todo/Speed_up___39__import_--clean-duplicates__39__/comment_1_9268c639d3d21cce4ca7b60d08e9cb65._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="24.159.78.125"
+ subject="interesting idea"
+ date="2014-07-30T15:03:46Z"
+ content="""
+This could be done in constant space using a bloom filter of known file sizes. Files with wrong sizes would sometimes match, but no problem, it would then just do the work it does now.
+
+However, to build such a filter, git-annex would need to do a scan of all keys it knows about. This would take approximately as long to run as `git annex unused` does. It might make sense to only build the filter if it runs into a fairly large file. Alternatively, a bloom filter of file sizes could be cached and updated on the fly as things change (but this gets pretty complex).
+"""]]
diff --git a/doc/todo/Speed_up___39__import_--clean-duplicates__39__/comment_2_9c6688901ef20badd834419202627d5c._comment b/doc/todo/Speed_up___39__import_--clean-duplicates__39__/comment_2_9c6688901ef20badd834419202627d5c._comment
new file mode 100644
index 000000000..e372b405e
--- /dev/null
+++ b/doc/todo/Speed_up___39__import_--clean-duplicates__39__/comment_2_9c6688901ef20badd834419202627d5c._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="Xyem"
+ ip="81.111.193.130"
+ subject="comment 2"
+ date="2014-08-01T09:05:45Z"
+ content="""
+Could be tested out with an additional flag `--with-size-bloom` on import?
+
+It would then build a bloom (and use a cached one with --fast) and do the usual import.
+
+So I could do this:
+
+ # Bloom is created and the import is done using it
+ git annex import --clean-duplicates --with-size-bloom $TARGET
+
+ # Previously created bloom is used
+ git annex import --clean-duplicates --with-size-bloom --fast $TARGET2
+ git annex import --clean-duplicates --with-size-bloom --fast $TARGET3
+
+I can implement this behaviour in Perl with Bloom::Filter and let you know how it performs if that would be useful to you..?
+"""]]
diff --git a/doc/todo/Sync_repo_names__63__.mdwn b/doc/todo/Sync_repo_names__63__.mdwn
deleted file mode 100644
index d3bb59f04..000000000
--- a/doc/todo/Sync_repo_names__63__.mdwn
+++ /dev/null
@@ -1,10 +0,0 @@
-It's very confusing to me that the same repo viewed from different client systems can have different names and descriptions. This implies that making changes to a remote repo from one system only affects how that system sees the repo, but it seems to affect how the entire git-annex "pair" or "network of repos" sees it.
-
-I think it would be good if the names and descriptions of repos were synced across clients.
-
-> The descriptions of repositories are synced. (They're stored in git-annex:uuid.log)
->
-> git allows for the same repository to be referred to using as many different remote names as you want to set up. git-annex inherits this,
-> and I can't see this changing; there are very good reasons for remotes to
-> have this flexability. [[done]]
-> --[[Joey]]
diff --git a/doc/todo/Time_Stamping_of_Events_in_Webapp.mdwn b/doc/todo/Time_Stamping_of_Events_in_Webapp.mdwn
new file mode 100644
index 000000000..0762f47ba
--- /dev/null
+++ b/doc/todo/Time_Stamping_of_Events_in_Webapp.mdwn
@@ -0,0 +1,3 @@
+Currently events happening in the webapp (sync upload etc. on the right) has no time stamp thus user has no way to tell when was the last sync happened. Which is problematic when not using XMPP and repos lag behind.
+
+> [[dup|done]] of <http://git-annex.branchable.com/todo/wishlist__91__minor__93__:_add_time_stamps_to_annex_log_popups_in_webapp/> --[[Joey]]
diff --git a/doc/todo/Use_a_remote_as_a_sharing_site_for_files_with_obfuscated_URLs/comment_2_735afa6f87a93cdf333c17da32010620._comment b/doc/todo/Use_a_remote_as_a_sharing_site_for_files_with_obfuscated_URLs/comment_2_735afa6f87a93cdf333c17da32010620._comment
new file mode 100644
index 000000000..b2e6c0dac
--- /dev/null
+++ b/doc/todo/Use_a_remote_as_a_sharing_site_for_files_with_obfuscated_URLs/comment_2_735afa6f87a93cdf333c17da32010620._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="2001:1928:1:9::1"
+ subject="comment 2"
+ date="2014-04-07T04:35:39Z"
+ content="""
+i wonder if the assistant or the new daemon couldn't do this job as well... -- [[anarcat]]
+"""]]
diff --git a/doc/todo/Use_bitcoin-mining_ASICs_for_hashing__63__.mdwn b/doc/todo/Use_bitcoin-mining_ASICs_for_hashing__63__.mdwn
deleted file mode 100644
index 48c136b26..000000000
--- a/doc/todo/Use_bitcoin-mining_ASICs_for_hashing__63__.mdwn
+++ /dev/null
@@ -1,18 +0,0 @@
-This is just an idea, and I have no idea if it would work (that's why I'm asking):
-
-**Would it be possible to use ASICs made for Bitcoin mining inside git-annex to offload the hashing of files?**
-
-I got the idea, because I have two RaspberryPis here:
-
-- one runs my git-annex archive. It is really slow at hashing, so I resorted to using the WORM backend
-- another one runs 2 old-ish ASIC miners. They are just barely "profitable" right now, so in a few months they will be obsolete
-
-Both devices to some kind of `SHA256`. I have a feeling this is either extremely easy or extremely complicated to do… :)
-
-> git-annex uses binaries such as `sha256sum` for hashing large files (large is
-> currently hardcoded as bigger than 1MB). If you insert a binary with the same
-> interface as `sha256sum` into your `$PATH`, git-annex will automatically use
-> it. If you want to use ASIC hashing even for small files, you need to tweak
-> `Backend/Hash.hs`. --[[HelmutGrohne]]
-
->> [[done]] --[[Joey]]
diff --git a/doc/todo/Use_bitcoin-mining_ASICs_for_hashing__63__/comment_1_a93805a8088402c6dc32d2b9785fcc7d._comment b/doc/todo/Use_bitcoin-mining_ASICs_for_hashing__63__/comment_1_a93805a8088402c6dc32d2b9785fcc7d._comment
deleted file mode 100644
index 952978834..000000000
--- a/doc/todo/Use_bitcoin-mining_ASICs_for_hashing__63__/comment_1_a93805a8088402c6dc32d2b9785fcc7d._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.172"
- subject="comment 1"
- date="2014-02-20T17:42:10Z"
- content="""
-I feel that Helmut has the right approach to this general type of thing.
-
-I doubt that bitcoin ASICs feature a fast data transfer bus, because bitcoin is a pretty low-data-volume protocol. Additionally AIUI, bitcoin ASICs get their speed by hashing in parallel, which allows them to try many variations of a block at once. So they probably rely on most of the data remaining the same and only a small amount changing. So it's doubtful this would be a win.
-"""]]
diff --git a/doc/todo/Views_Demo.mdwn b/doc/todo/Views_Demo.mdwn
index 2587642e3..54704afa6 100644
--- a/doc/todo/Views_Demo.mdwn
+++ b/doc/todo/Views_Demo.mdwn
@@ -11,3 +11,5 @@ So, are you considering a metadata syntax that can support complex metadata? One
FWIW,
Bob
+
+> [[closing|done]]; requested feature was already present --[[Joey]]
diff --git a/doc/todo/Wishlist:_Import_youtube_playlists.mdwn b/doc/todo/Wishlist:_Import_youtube_playlists.mdwn
deleted file mode 100644
index 4826d9d24..000000000
--- a/doc/todo/Wishlist:_Import_youtube_playlists.mdwn
+++ /dev/null
@@ -1,30 +0,0 @@
-Hi,
-
-it would be great if the importfeed command would be able to read feeds generated by youtube (like for playlists). The youtube playlist feed contains links to separate youtube video pages, which quvi handles just fine. Currently I use the following python script:
-
- #!/usr/bin/env python
- import feedparser
- import sys
- d = feedparser.parse('http://gdata.youtube.com/feeds/api/playlists/%s' % sys.argv[1])
- for entry in d.entries:
- print entry.link
-
-and then
-
- kasimon@pc:~/annex/YouTube/debconf13$ youtube-playlist-urls PLz8ZG1e9MPlzefklz1Gv79icjywTXycR- | xargs git annex addurl --fast
- addurl Welcome_talk.webm ok
- addurl Bits_from_the_DPL.webm ok
- addurl Debian_Cosmology.webm ok
- addurl Bits_from_the_DPL.webm ok
- addurl Debian_Cosmology.webm ok
- addurl Debian_on_Google_Compute_Engine.webm ok
- ^C
-
-to create a backup of youtube media I'd like to keep.
-
-It would be great if this functionality could be integrated directly into git annex.
-
-Best
-Karsten
-
-> [[done]] --[[Joey]]
diff --git a/doc/todo/Wishlist:_Import_youtube_playlists/comment_1_4235cbbb0c6f9d83524c970c4588cb2e._comment b/doc/todo/Wishlist:_Import_youtube_playlists/comment_1_4235cbbb0c6f9d83524c970c4588cb2e._comment
deleted file mode 100644
index 3e3c4be82..000000000
--- a/doc/todo/Wishlist:_Import_youtube_playlists/comment_1_4235cbbb0c6f9d83524c970c4588cb2e._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.227"
- subject="comment 1"
- date="2013-12-29T18:21:32Z"
- content="""
-Ok, so importfeed looks for items in a feed with enclosures, but this feed is not a podcast feed. So it needs to look for some of the `<links>`
-to find pages that quvi supports. (There might be other links that are not video pages, for all I know. Looks like `getItemLink` finds the right links and then I just need to filter through quvi.
-"""]]
diff --git a/doc/todo/Wishlist:_disable_auto-repair_for_the_assistant.mdwn b/doc/todo/Wishlist:_disable_auto-repair_for_the_assistant.mdwn
new file mode 100644
index 000000000..972247c84
--- /dev/null
+++ b/doc/todo/Wishlist:_disable_auto-repair_for_the_assistant.mdwn
@@ -0,0 +1,3 @@
+Auto-repair takes up a lot of computing power, greatly slowing down the machine. It also still happens very often here, several times a month on different hardware, leading it to become an annoyance (and it would be easier and faster to perform manual repairs if that should be required).
+
+Therefore I'd like a setting that makes the assistant not attempt to repair on its own. Either not do anything at all, or display a message about it instead.
diff --git a/doc/todo/Wishlist:_disable_auto-repair_for_the_assistant/comment_1_3274820a0d1f10c505f15cd29a37b95a._comment b/doc/todo/Wishlist:_disable_auto-repair_for_the_assistant/comment_1_3274820a0d1f10c505f15cd29a37b95a._comment
new file mode 100644
index 000000000..d4839cb1d
--- /dev/null
+++ b/doc/todo/Wishlist:_disable_auto-repair_for_the_assistant/comment_1_3274820a0d1f10c505f15cd29a37b95a._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.3"
+ subject="comment 1"
+ date="2014-05-21T18:29:16Z"
+ content="""
+What auto-repair are you referring to?
+
+If you schedule a fsck of the repository in the webapp, then when that finds a problem with the git repository, it will be repaired. So if you don't want this, remove any scheduled fsck jobs.
+
+The assistant also detects a few common problems at startup that prevent it from working, such as a corrupt index file, and automatically repairs those. These repairs only happen at startup. If the index file is corrupt, it has to delete it and re-add every file to the repository, which is expensive, but otherwise it would be completely non-functional.
+"""]]
diff --git a/doc/todo/Wishlist:_disable_auto-repair_for_the_assistant/comment_2_2cf5aef3f1d340c4ed6249ef94c1b607._comment b/doc/todo/Wishlist:_disable_auto-repair_for_the_assistant/comment_2_2cf5aef3f1d340c4ed6249ef94c1b607._comment
new file mode 100644
index 000000000..015dd8cd7
--- /dev/null
+++ b/doc/todo/Wishlist:_disable_auto-repair_for_the_assistant/comment_2_2cf5aef3f1d340c4ed6249ef94c1b607._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.3"
+ subject="comment 2"
+ date="2014-05-21T18:35:42Z"
+ content="""
+Note that this is asking for a workaround for the bug [[bugs/Auto-repair_greatly_slows_down_the_machine]]. I would rather get to the bottom of that bug, but need more information to do so.
+"""]]
diff --git a/doc/todo/Wishlist:_disable_auto-repair_for_the_assistant/comment_3_6c53d82e62b2d269a941ba967d05adf5._comment b/doc/todo/Wishlist:_disable_auto-repair_for_the_assistant/comment_3_6c53d82e62b2d269a941ba967d05adf5._comment
new file mode 100644
index 000000000..07b1b2557
--- /dev/null
+++ b/doc/todo/Wishlist:_disable_auto-repair_for_the_assistant/comment_3_6c53d82e62b2d269a941ba967d05adf5._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="EskildHustvedt"
+ ip="80.202.103.55"
+ subject="comment 3"
+ date="2014-05-21T19:18:19Z"
+ content="""
+I'm referring to the large auto-repairs of the actual git repository, as mentioned in the bug report you are referring to. I was under the impression that the fscks also did the equivalent of 'git annex fsck' (which is greatly desired, even without the 'git fsck' checks). I realize it is a sort of workaround, but it is because the 'annex fsck' bit is desired, while the 'git annex repair' bit makes my computer unusable, the last time for over 24 hours, while it was running (at which point I needed to kill it and perform a manual repair).
+"""]]
diff --git a/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode.mdwn b/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode.mdwn
new file mode 100644
index 000000000..196b8f420
--- /dev/null
+++ b/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode.mdwn
@@ -0,0 +1,8 @@
+Please let me know if there already is a way of achieving this; I’ve googled around a lot, but could not find any information pertaining to my particular problem.
+
+I am using direct mode in a bunch of repositories where I need quick write access to content and where I am not interested in preserving history. Some of these repositories do contain regular symlinks, however. Now, I suppose that in indirect repos, the way of adding symlinks would be to just «git add» them. However, since these are direct mode repos, I cannot do this.
+
+Is there already a good way of adding symlinks in direct mode? If not, I would find it useful if there were one.
+
+Best regards,
+T.
diff --git a/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode/comment_1_6c6e192bc0f70a386cd4275f98e1bd6f._comment b/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode/comment_1_6c6e192bc0f70a386cd4275f98e1bd6f._comment
new file mode 100644
index 000000000..83ccf32de
--- /dev/null
+++ b/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode/comment_1_6c6e192bc0f70a386cd4275f98e1bd6f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="134.147.14.84"
+ subject="comment 1"
+ date="2014-07-07T12:48:07Z"
+ content="""
+Can it be considered safe adding symlinks via «git -c core.bare=false add symlink; git -c core.bare=false commit -m Update»? If not, is there a better way?
+"""]]
diff --git a/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode/comment_2_8e22cfdbeb2c841870a623cf4c7baf60._comment b/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode/comment_2_8e22cfdbeb2c841870a623cf4c7baf60._comment
new file mode 100644
index 000000000..b88ec65ae
--- /dev/null
+++ b/doc/todo/__171__git_annex_add__187___for_symlinks_in_direct_mode/comment_2_8e22cfdbeb2c841870a623cf4c7baf60._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 2"
+ date="2014-07-10T19:54:30Z"
+ content="""
+That is safe, but you have to be very careful anytime you override with -c core.bare=false. For example, if you did a `git commit -a`, it would commit your large files directly into git, which you don't want.
+
+
+"""]]
diff --git a/doc/todo/__91__FR__93___No_consistency_check_while_on_battery-only.mdwn b/doc/todo/__91__FR__93___No_consistency_check_while_on_battery-only.mdwn
new file mode 100644
index 000000000..815ce6a1b
--- /dev/null
+++ b/doc/todo/__91__FR__93___No_consistency_check_while_on_battery-only.mdwn
@@ -0,0 +1,14 @@
+I hope this has not been mentioned before. I only found in mentioned in a comment of a devblog post.
+
+### Please describe the problem.
+With `git annex assistant` running, consistency checks is sometimes triggered while the computer is battery-powered (as opposed to plugged into AC).
+
+### What steps will reproduce the problem?
+Configure `git annex assistant` to make consistency check daily (or whatever the default is), unplug from power and wait.
+
+### What version of git-annex are you using? On what operating system?
+`5.20141231` on Archlinux 64 bit. (From the changelog I guess it's also present in the newest version).
+
+### Please provide any additional information below.
+
+It would be nice if one could toggle whether consistency check may run while not plugged into AC.
diff --git a/doc/todo/__91__FR__93___No_consistency_check_while_on_battery-only/comment_1_b557db02c3719152d392fa454c9c5ce5._comment b/doc/todo/__91__FR__93___No_consistency_check_while_on_battery-only/comment_1_b557db02c3719152d392fa454c9c5ce5._comment
new file mode 100644
index 000000000..99de27120
--- /dev/null
+++ b/doc/todo/__91__FR__93___No_consistency_check_while_on_battery-only/comment_1_b557db02c3719152d392fa454c9c5ce5._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-04T19:48:10Z"
+ content="""
+I agree this would be nice. However, how to detect if it's on battery?
+
+Debian has a `on_ac_power` command which is rather complicated; 88 lines of
+code that deal with APM, PMU (powerpc), and two different kernel interfaces
+for ACPI (new sysfs and old /proc/acpi).
+
+Then there's OSX, Windows, Android..
+
+I'm going to move this from bugs to todo.
+"""]]
diff --git a/doc/todo/__91__FR__93___No_consistency_check_while_on_battery-only/comment_2_374567f37635613a5d671c877d601367._comment b/doc/todo/__91__FR__93___No_consistency_check_while_on_battery-only/comment_2_374567f37635613a5d671c877d601367._comment
new file mode 100644
index 000000000..bf6179b72
--- /dev/null
+++ b/doc/todo/__91__FR__93___No_consistency_check_while_on_battery-only/comment_2_374567f37635613a5d671c877d601367._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="rasmus"
+ subject="comment 2"
+ date="2015-02-10T18:33:20Z"
+ content="""
+Yeah, probably it's more complicated than just checking `/sys/class/power_supply/BAT0/`... There's something called [`pmset`](https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/pmset.1.html) for macs, but I don't have a mac so I don't know how relevant it is. For Windows there seems also to be some sort of [api](https://msdn.microsoft.com/en-us/library/windows/desktop/aa372659%28v=vs.85%29.aspx), but again I don't know anything about windows...
+"""]]
diff --git a/doc/todo/__96__git_annex_import_--lazy__96___--_Delete_everything_that__39__s_in_the_source_directory_and_also_in_the_target_annex.mdwn b/doc/todo/__96__git_annex_import_--lazy__96___--_Delete_everything_that__39__s_in_the_source_directory_and_also_in_the_target_annex.mdwn
deleted file mode 100644
index 996c03461..000000000
--- a/doc/todo/__96__git_annex_import_--lazy__96___--_Delete_everything_that__39__s_in_the_source_directory_and_also_in_the_target_annex.mdwn
+++ /dev/null
@@ -1,29 +0,0 @@
-As per IRC
-
- 22:13:10 < RichiH> joeyh: btw, i have been pondering a `git annex import --lazy` or some such which basically goes through a directory and deletes everything i find in the annex it run from
- 22:50:39 < joeyh> not sure of the use case
- 23:41:06 < RichiH> joeyh: the use case is "i have important a ton of data into my annexes. now, i am going through the usual crud of cp -ax'ed, rsync'ed, and other random 'new disk, move stuff around and just put a full dump over there' file dumps and would like to delete everything that's annexed already"
- 23:41:33 < RichiH> joeyh: that would allow me to spend time on dealing with the files which are not yet annexed
- 23:41:54 < RichiH> instead of verifying file after file which has been imported already
- 23:43:19 < joeyh> have you tried just running git annex import in a subdirectory and then deleting the dups?
- 23:45:34 < joeyh> or in a separate branch for that matter, which you could then merge in, etc
- 23:54:08 < joeyh> Thinking anout it some more, it would need to scan the whole work tree to see what keys were there, and populate a lookup table. I prefer to avoid things that need git-annex to do such a large scan and use arbitrary amounts of memory.
- 00:58:11 < RichiH> joeyh: that would force everything into the annex, though
- 00:58:20 < RichiH> a plain import, that is
- 00:58:53 < RichiH> in a usual data dump directory, there's tons of stuff i will never import
- 00:59:00 < RichiH> i want to delete large portions of it
- 00:59:32 < RichiH> but getting rid of duplicates first allows me to spend my time focused on stuff humans are good at: deciding
- 00:59:53 < RichiH> whereas the computer can focus on stuff it's good at: mindless comparision of bits
- 01:00:15 < RichiH> joeyh: as you're saying this is complex, maybe i need to rephrase
- 01:01:40 < RichiH> what i envision is git annex import --foo to 1) decide what hashing algorithm should be used for this file 2) hash that file 3) look into the annex if that hash is annexed 3a) optionally verify numcopies within the annex 4) delete the file in the source directory
- 01:01:47 < RichiH> and then move on to the next file
- 01:02:00 < RichiH> if the hash does not exist in the annex, leave it alone
- 01:02:50 < RichiH> if the hash exists in annex, but numcopies is not fulfilled, just import it as a normal import would
- 01:03:50 < RichiH> that sounds quite easy, to me; in fact i will prolly script it if you decide not to implement it
- 01:04:07 < RichiH> but i think it's useful for a _lot_ of people who migrate tons of data into annexes
- 01:04:31 < RichiH> thus i would rather see this upstream and not hacked locally
-
-The only failure mode I see in the above is "file has been dropped elsewhere, numcopies not fulfilled, but that info is not synched to the local repo, yet" -- This could be worked around by always importing the data.
-
-> [[done]] as `git annex import --deduplicate`.
-> --[[Joey]]
diff --git a/doc/todo/__96__git_annex_import_--lazy__96___--_Delete_everything_that__39__s_in_the_source_directory_and_also_in_the_target_annex/comment_1_0cc16eb17151309113cec6d1cccf203d._comment b/doc/todo/__96__git_annex_import_--lazy__96___--_Delete_everything_that__39__s_in_the_source_directory_and_also_in_the_target_annex/comment_1_0cc16eb17151309113cec6d1cccf203d._comment
deleted file mode 100644
index 0b4e22e7c..000000000
--- a/doc/todo/__96__git_annex_import_--lazy__96___--_Delete_everything_that__39__s_in_the_source_directory_and_also_in_the_target_annex/comment_1_0cc16eb17151309113cec6d1cccf203d._comment
+++ /dev/null
@@ -1,20 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 1"
- date="2013-08-06T14:22:03Z"
- content="""
-To expand a bit on the use case:
-
-I have several migration directories which I simply moved to new systems or disks with the help of `cp -ax` or `rsync`.
-As I don't _need_ the data per se and merely want to hold on to it in case I ever happen to need it again and as disk space is laughably cheap, I have a lot of duplicates.
-While I can at least detect bit flips with the help of checksum lists, cleaning those duplicates of duplicated duplicates is quite some effort.
-To make things worse, photos, music, videos, letter and whatnot are thrown into the same container directories.
-
-All in all, getting data out of those data dumps and into a clean structure is quite an effort.
-`git annex import --lazy` would help with this effort as I could start with the first directory, sort stuff by hand, and annex it.
-As soon as data lives in any of my annexes, I could simply run `git annex import --lazy` to get rid of all duplicates while retaining the unannexed files.
-Iterating through this process a few times, I will be left with clean annexes on the one hand and stuff I can simply delete on the other hand.
-
-I could script all this by hand on my own machine, but I am _certain_ that others would find easy, integrated, and unit tested support for whittling down data dumps over time useful.
-"""]]
diff --git a/doc/todo/__96__git_annex_status__47__version__96___should_print_the_local_OS.mdwn b/doc/todo/__96__git_annex_status__47__version__96___should_print_the_local_OS.mdwn
deleted file mode 100644
index 9c2afecb4..000000000
--- a/doc/todo/__96__git_annex_status__47__version__96___should_print_the_local_OS.mdwn
+++ /dev/null
@@ -1,6 +0,0 @@
-That would make assessing weird reports like [[bugs/Should_UUID__39__s_for_Remotes_be_case_sensitive__63__/]] easier and quicker.
-
-> No, if people want to file a bug report, it's up to them to tell me
-> relevant details about their OS. I'm not going down the rathole
-> of making git-annex muck about trying to gather such information.
-> [[done]] --[[Joey]]
diff --git a/doc/todo/__96__git_annex_sync_--auto__96___or___96__git_annex_auto__96___--_synchronize_symlinks__44___tracking_info__44___and_actual_data.mdwn b/doc/todo/__96__git_annex_sync_--auto__96___or___96__git_annex_auto__96___--_synchronize_symlinks__44___tracking_info__44___and_actual_data.mdwn
deleted file mode 100644
index ae0894955..000000000
--- a/doc/todo/__96__git_annex_sync_--auto__96___or___96__git_annex_auto__96___--_synchronize_symlinks__44___tracking_info__44___and_actual_data.mdwn
+++ /dev/null
@@ -1,6 +0,0 @@
-As per DebConf13: Introduce a one-shot command to synchronize everything,
-including data, with the other remotes.
-
-Especially useful for the debconf annex.
-
-> [[done]]; `git annex sync --content` --[[Joey]]
diff --git a/doc/todo/add_--exclude_option_to_git_annex_find.mdwn b/doc/todo/add_--exclude_option_to_git_annex_find.mdwn
deleted file mode 100644
index a797e97f5..000000000
--- a/doc/todo/add_--exclude_option_to_git_annex_find.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-Seems pretty self-explanatory.
-
-> This was already implemented, the --exclude option can be used
-> for find as well as most any other subcommand. --[[Joey]] [[done]]
diff --git a/doc/todo/add_-all_option.mdwn b/doc/todo/add_-all_option.mdwn
deleted file mode 100644
index 2f25759c2..000000000
--- a/doc/todo/add_-all_option.mdwn
+++ /dev/null
@@ -1,22 +0,0 @@
-`--all` would make git-annex operate on either every key with content
-present (or in some cases like `get` and `copy --from` on
-every keys with content not present).
-
-This would be useful when a repository has a history with deleted files
-whose content you want to keep (so you're not using `dropunused`).
-Or when you have a lot of branches and just want to be able to fsck
-every file referenced in any branch (or indeed, any file referenced in any
-ref). It could also be useful (or even a
-good default) in a bare repository.
-
-A problem with the idea is that `.gitattributes` values for keys not
-currently in the tree would not be available (without horrific anounts of
-grubbing thru history to find where/when the key used to exist). So
-`numcopies` set via `.gitattributes` would not work. This would be a
-particular problem for `drop` and for `--auto`.
-
---[[Joey]]
-
-> [[done]]. The .gitattributes problem was solved simply by not
-> supporting `drop --all`. `--auto` also cannot be mixed with --all for
-> similar reasons. --[[Joey]]
diff --git a/doc/todo/add_a_git_backend.mdwn b/doc/todo/add_a_git_backend.mdwn
deleted file mode 100644
index 2b224710e..000000000
--- a/doc/todo/add_a_git_backend.mdwn
+++ /dev/null
@@ -1,18 +0,0 @@
-There should be a backend where the file content is stored.. in a git
-repository!
-
-This way, you know your annexed content is safe & versioned, but you only
-have to deal with the pain of git with large files in one place, and can
-use all of git-annex's features everywhere else.
-
-> Speaking as a future user, do very, very much want. -- RichiH
-
->> Might also be interesting to use `bup` in the git backend, to work
->> around git's big file issues there. So git-annex would pull data out
->> of the git backend using bup. --[[Joey]]
-
->>> Very much so. Generally speaking, having one or more versioned storage back-ends with current data in the local annexes sounds incredibly useful. Still being able to get at old data in via the back-end and/or making offline backups of the full history are excellent use cases. -- RichiH
-
-[[done]], the bup special remote type is written! --[[Joey]]
-
-> Yay! -- RichiH
diff --git a/doc/todo/add_an_icon_for_the_.desktop_file.mdwn b/doc/todo/add_an_icon_for_the_.desktop_file.mdwn
deleted file mode 100644
index 56428ff4b..000000000
--- a/doc/todo/add_an_icon_for_the_.desktop_file.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-Maybe add the icon /usr/share/doc/git-annex/html/logo.svg to the .desktp file.
-
-> [[done]] long ago.. --[[Joey]]
diff --git a/doc/todo/add_metadata_to_annexed_files.mdwn b/doc/todo/add_metadata_to_annexed_files.mdwn
deleted file mode 100644
index 3d81677cb..000000000
--- a/doc/todo/add_metadata_to_annexed_files.mdwn
+++ /dev/null
@@ -1,14 +0,0 @@
-I would like to attach metadata to annexed files (objects) without
-cluttering the workdir with files containing this metadata. A common use
-case would be to add titles to my photo collection that could than end up
-in a generated photo album.
-
-Depending on the implementation it might also be possible to use the metadata facility for a threaded commenting system.
-
-The first question is whether the metadata is attached to the objects and
-thus shared by all paths pointing to the same data object or to paths in
-the worktree. I've no preference here at this point.
-
-> This is [[done]]; see [[design/metadata]].
-> The metadata is attached to objects, not to files.
-> --[[Joey]]
diff --git a/doc/todo/add_metadata_to_annexed_files/comment_1_38af9b352020194e9ace34d7dde188cf._comment b/doc/todo/add_metadata_to_annexed_files/comment_1_38af9b352020194e9ace34d7dde188cf._comment
deleted file mode 100644
index 8460300a7..000000000
--- a/doc/todo/add_metadata_to_annexed_files/comment_1_38af9b352020194e9ace34d7dde188cf._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.63"
- subject="comment 1"
- date="2013-08-24T19:58:54Z"
- content="""
-I don't know if git-annex is the right vehicle to fix this. It seems that a more generic fix that would work in non-git-annex repos would be better.
-
-I can answer your question though: The metadata such as urls and locations that git-annex stores in the git-annex branch is attached to objects, and not to work tree paths.
-"""]]
diff --git a/doc/todo/allow_removing_jabber_configuration.mdwn b/doc/todo/allow_removing_jabber_configuration.mdwn
new file mode 100644
index 000000000..62370258d
--- /dev/null
+++ b/doc/todo/allow_removing_jabber_configuration.mdwn
@@ -0,0 +1,5 @@
+right now it is unclear through the webapp how to unconfigure a jabber
+account, which is especially critical considering the password needs to be
+stored in the clear (where?). -- [[anarcat]]
+
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/todo/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address.mdwn b/doc/todo/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address.mdwn
index a7b30ded5..f5088ccee 100644
--- a/doc/todo/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address.mdwn
+++ b/doc/todo/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address.mdwn
@@ -1,3 +1,5 @@
+[[!meta title="webapp does not accept ssh alias for ssh remote"]]
+
What steps will reproduce the problem?
Using the assistant, create an SSH remote. Try to use an alias as the name
diff --git a/doc/todo/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address/comment_1_6b71a390fd16f593216793aec590d9a8._comment b/doc/todo/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address/comment_1_6b71a390fd16f593216793aec590d9a8._comment
new file mode 100644
index 000000000..6f4d00b2b
--- /dev/null
+++ b/doc/todo/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address/comment_1_6b71a390fd16f593216793aec590d9a8._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
+ nickname="Justin"
+ subject="comment 1"
+ date="2014-05-22T20:05:54Z"
+ content="""
+A temporary workaround is to add an entry to /etc/hosts until the remote is added.
+"""]]
diff --git a/doc/todo/assistant_git_sync_laddering.mdwn b/doc/todo/assistant_git_sync_laddering.mdwn
deleted file mode 100644
index 7dbc6480a..000000000
--- a/doc/todo/assistant_git_sync_laddering.mdwn
+++ /dev/null
@@ -1,10 +0,0 @@
-When the [[design/assistant]] is running on a pair of remotes, I've seen
-them get out of sync, such that every pull and merge results in a conflict,
-that then has to be auto-resolved.
-
-This seems similar to the laddering problem described in this old bug:
-[[bugs/making_annex-merge_try_a_fast-forward]]
-
---[[Joey]]
-
-Think I've fixed this. [[done]] --[[Joey]]
diff --git a/doc/todo/assistant_smarter_archive_directory_handling.mdwn b/doc/todo/assistant_smarter_archive_directory_handling.mdwn
deleted file mode 100644
index fa5a3e4fc..000000000
--- a/doc/todo/assistant_smarter_archive_directory_handling.mdwn
+++ /dev/null
@@ -1,31 +0,0 @@
-Client repos do not want files in archive directories. This can turn
-out to be confusing to users who are using archive directories for their
-own purposes and not aware of this special case in the assistant. It can
-seem like the assistant is failing to sync their files.
-
-I thought, first, that it should have a checkbox to enable the archive
-directory behavior.
-
-However, I think I have a better idea. Change the preferred content
-expression for clients, so they want files in archive directories, *until*
-those files land in an archive.
-
-This way, only users who set up an archive repo get this behavior. And they
-asked for it by setting up that repo!
-
-Also, the new behavior will mean that files in archive directories still
-propigate around to clients. Consider this topology:
-
- client A ---- client B ---- archive
-
-If a file is created in client A, and moved to an archive directory before
-it syncs to B, it will never get to the archive, and will continue wasting
-space on A. With the new behavior, A and B serve as effectively, transfer
-repositories for archived content.
-
-Something vaguely like this should work as the preferred content
-expression for the clients:
-
- exclude=archive/* or (include=archive/* and (not (copies=archive:1 or copies=smallarchive:1)))
-
-> [[done]] --[[Joey]]
diff --git a/doc/todo/assistant_threaded_runtime.mdwn b/doc/todo/assistant_threaded_runtime.mdwn
deleted file mode 100644
index 03ba66acf..000000000
--- a/doc/todo/assistant_threaded_runtime.mdwn
+++ /dev/null
@@ -1,40 +0,0 @@
-The [[design/assistant]] would be better if git-annex used ghc's threaded
-runtime (`ghc -threaded`).
-
-Currently, whenever the assistant code runs some external command, all
-threads are blocked waiting for it to finish.
-
-For transfers, the assistant works around this problem by forking separate
-upload processes, and not waiting on them until it sees an indication that
-they have finished the transfer. While this works, it's messy.. threaded
-would be better.
-
-When pulling, pushing, and merging, the assistant runs external git
-commands, and this does block all other threads. The threaded runtime would
-really help here.
-
-[[done]]; the assistant now builds with the threaded runtime.
-Some work still remains to run certian long-running external git commands
-in their own threads to prevent them blocking things, but that is easy to
-do, now. --[[Joey]]
-
----
-
-Currently, git-annex seems unstable when built with the threaded runtime.
-The test suite tends to hang when testing add. `git-annex` occasionally
-hangs, apparently in a futex lock. This is not the assistant hanging, and
-git-annex does not otherwise use threads, so this is surprising. --[[Joey]]
-
-> I've spent a lot of time debugging this, and trying to fix it, in the
-> "threaded" branch. There are still deadlocks. --[[Joey]]
-
->> Fixed, by switching from `System.Cmd.Utils` to `System.Process`
->> --[[Joey]]
-
----
-
-It would be possible to not use the threaded runtime. Instead, we could
-have a child process pool, with associated continuations to run after a
-child process finishes. Then periodically do a nonblocking waitpid on each
-process in the pool in turn (waiting for any child could break anything not
-using the pool!). This is probably a last resort...
diff --git a/doc/todo/auto_remotes.mdwn b/doc/todo/auto_remotes.mdwn
deleted file mode 100644
index 715dea720..000000000
--- a/doc/todo/auto_remotes.mdwn
+++ /dev/null
@@ -1,29 +0,0 @@
-It should be possible for clones to learn about how to contact
-each other without remotes needing to always be explicitly set
-up. Say that `.git-annex/remote.log` is maintained by git-annex
-to contain:
-
- UUID hostname URI
-
-The URI comes from configured remotes and maybe from
-`file://$(pwd)`, or even `ssh://$(hostname -f)`
-for the current repo. This format will merge without
-conflicts or data loss.
-
-Then when content is belived to be in a UUID, and no
-configured remote has it, the remote.log can be consulted and
-URIs that look likely tried. (file:// ones if the hostname
-is the same (or maybe always -- a removable drive might tend
-to be mounted at the same location on different hosts),
-otherwise ssh:// ones.)
-
-Question: When should git-annex update the remote.log?
-(If not just on init.) Whenever it reads in a repo's remotes?
-
-> This sounds useful and the log should be updated every time any remote is being accessed. A counter or timestamp (yes, distributed times may be wrong/different) could be used to auto-prune old entries via a global and per-remote config setting. -- RichiH
-
----
-
-I no longer think I'd use this myself, I find that my repositories quickly
-grow the paths I actually use, somewhat organically. Unofficial paths
-across university quads come to mind. [[done]] --[[Joey]]
diff --git a/doc/todo/auto_remotes/discussion.mdwn b/doc/todo/auto_remotes/discussion.mdwn
deleted file mode 100644
index b9e1522a8..000000000
--- a/doc/todo/auto_remotes/discussion.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-Remotes log should probably be stored in ".git/annex/remote.log"
-instead of ".git-annex/remote.log" to prevent leaking credentials.
-
-> The idea is to distribute the info between repositories, which is
-> why it'd go in `.git-annex`. Of course that does mean that repository
-> location information would be included, and if that'd not desirable
-> this feature would need to be turned off. --[[Joey]]
diff --git a/doc/todo/automatic_bookkeeping_watch_command.mdwn b/doc/todo/automatic_bookkeeping_watch_command.mdwn
deleted file mode 100644
index 28b02aff2..000000000
--- a/doc/todo/automatic_bookkeeping_watch_command.mdwn
+++ /dev/null
@@ -1,15 +0,0 @@
-A "git annex watch" command would help make git-annex usable by users who
-don't know how to use git, or don't want to bother typing the git commands.
-It would run, in the background, watching via inotify for changes, and
-automatically annexing new files, etc.
-
-The blue sky goal would be something automated like dropbox, except fully
-distributed. All files put into the repository would propagate out
-to all the other clones of it, as network links allow. Note that while
-dropbox allows modifying files, git-annex freezes them upon creation,
-so this would not be 100% equivalent to dropbox. --[[Joey]]
-
-This is a big project with its own [[design pages|design/assistant]].
-
-> [[done]].. at least, we have a watch command an an assistant, which
-> is still being developed. --[[Joey]]
diff --git a/doc/todo/avoid_unnecessary_union_merges.mdwn b/doc/todo/avoid_unnecessary_union_merges.mdwn
deleted file mode 100644
index 5cd4b6437..000000000
--- a/doc/todo/avoid_unnecessary_union_merges.mdwn
+++ /dev/null
@@ -1,20 +0,0 @@
-Some commands cause a union merge unnecessarily. For example, `git annex add`
-modifies the location log, which first requires reading the current log (if
-any), which triggers a merge.
-
-Would be good to avoid these unnecessary union merges. First because it's
-faster and second because it avoids a possible delay when a user might
-ctrl-c and leave the repo in an inconsistent state. In the case of an add,
-the file will be in the annex, but no location log will exist for it (fsck
-fixes that).
-
-It may be that all that's needed is to modify Annex.Branch.change
-to read the current value, without merging. Then commands like `get`, that
-query the branch, will still cause merges, and commands like `add` that
-only modify it, will not. Note that for a command like `get`, the merge
-occurs before it has done anything, so ctrl-c should not be a problem
-there.
-
-This is a delicate change, I need to take care.. --[[Joey]]
-
-> [[done]] (assuming I didn't miss any cases where this is not safe!) --[[Joey]]
diff --git a/doc/todo/backendSHA1.mdwn b/doc/todo/backendSHA1.mdwn
deleted file mode 100644
index 8c16b75ad..000000000
--- a/doc/todo/backendSHA1.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-This backend is not finished.
-
-In particular, while files can be added using it, git-annex will not notice
-when their content changes, and will not create a new key for the new sha1
-of the net content.
-
-[[done]]; use unlock subcommand and commit changes with git
diff --git a/doc/todo/branching.mdwn b/doc/todo/branching.mdwn
deleted file mode 100644
index f65849584..000000000
--- a/doc/todo/branching.mdwn
+++ /dev/null
@@ -1,159 +0,0 @@
-[[done]] !!!
-
-The use of `.git-annex` to store logs means that if a repo has branches
-and the user switched between them, git-annex will see different logs in
-the different branches, and so may miss info about what remotes have which
-files (though it can re-learn).
-
-An alternative would be to store the log data directly in the git repo
-as `pristine-tar` does. Problem with that approach is that git won't merge
-conflicting changes to log files if they are not in the currently checked
-out branch.
-
-It would be possible to use a branch with a tree like this, to avoid
-conflicts:
-
-key/uuid/time/status
-
-As long as new files are only added, and old timestamped files deleted,
-there would be no conflicts.
-
-A related problem though is the size of the tree objects git needs to
-commit. Having the logs in a separate branch doesn't help with that.
-As more keys are added, the tree object size will increase, and git will
-take longer and longer to commit, and use more space. One way to deal with
-this is simply by splitting the logs among subdirectories. Git then can
-reuse trees for most directories. (Check: Does it still have to build
-dup trees in memory?)
-
-Another approach would be to have git-annex *delete* old logs. Keep logs
-for the currently available files, or something like that. If other log
-info is needed, look back through history to find the first occurance of a
-log. Maybe even look at other branches -- so if the logs were on master,
-a new empty branch could be made and git-annex would still know where to
-get keys in that branch.
-
-Would have to be careful about conflicts when deleting and bringing back
-files with the same name. And would need to avoid expensive searching thru
-all history to try to find an old log file.
-
-## fleshed out proposal
-
-Let's use one branch per uuid, named git-annex/$UUID.
-
-- I came to realize this would be a good idea when thinking about how
- to upgrade. Each individual annex will be upgraded independantly,
- so each will want to make a branch, and if the branches aren't distinct,
- they will merge conflict for sure.
-- TODO: What will need to be done to git to make it push/pull these new
- branches?
-- A given repo only ever writes to its UUID branch. So no conflicts.
- - **problem**: git annex move needs to update log info for other repos!
- (possibly solvable by having git-annex-shell update the log info
- when content is moved using it)
-- (BTW, UUIDs probably don't compress well, and this reduces the bloat of having
- them repeated lots of times in the tree.)
-- Per UUID branches mean that if it wants to find a file's location
- among configured remotes, it can examine only their branches, if
- desired.
-- It's important that the per-repo branches propigate beyond immediate
- remotes. If there is a central bare repo, that means push --all. Without
- one, it means that when repo B pulls from A, and then C pulls from B,
- C needs to get A's branch -- which means that B should have a tracking
- branch for A's branch.
-
-In the branch, only one file is needed. Call it locationlog. git-annex
-can cache location log changes and write them all to locationlog in
-a single git operation on shutdown.
-
-- TODO: what if it's ctrl-c'd with changes pending? Perhaps it should
- collect them to .git/annex/locationlog, and inject that file on shutdown?
-- This will be less overhead than the current staging of all the log files.
-
-The log is not appended to, so in git we have a series of commits each of
-which replaces the log's entire contens.
-
-To find locations of a key, all (or all relevant) branches need to be
-examined, looking backward through the history of each until a log
-with a indication of the presense/absense of the key is found.
-
-- This will be less expensive for files that have recently been added
- or transfered.
-- It could get pretty slow when digging deeper.
-- Only 3 places in git-annex will be affected by any slowdown: move --from,
- get and drop. (Update: Now also unused, whereis, fsck)
-
-## alternate
-
-As above, but use a single git-annex branch, and keep the per-UUID
-info in their own log files. Hope that git can auto-merge as long as
-each observing repo only writes to its own files. (Well, it can, but for
-non-fast-forward merges, the git-annex branch would need to be checked out,
-which is problimatic.)
-
-Use filenames like:
-
- <observing uuid>/<location uuid>
-
-That allows one repo to record another's state when doing a
-`move`.
-
-## outside the box approach
-
-If the problem is limited to only that the `.git-annex/` files make
-branching difficult (and not to the related problem that commits to them
-and having them in the tree are sorta annoying), then a simple approach
-would be to have git-annex look in other branches for location log info
-too.
-
-The problem would then be that any locationlog lookup would need to look in
-all other branches (any branch could have more current info after all),
-which could get expensive.
-
-## way outside the box approach
-
-Another approach I have been mulling over is keeping the log file
-branch checked out in .git/annex/logs/ -- this would be a checkout of a git
-repository inside a git repository, using "git fake bare" techniques. This
-would solve the merge problem, since git auto merge could be used. It would
-still mean all the log files are on-disk, which annoys some. It would
-require some tighter integration with git, so that after a pull, the log
-repo is updated with the data pulled. --[[Joey]]
-
-> Seems I can't use git fake bare exactly. Instead, the best option
-> seems to be `git clone --shared` to make a clone that uses
-> `.git/annex/logs/.git` to hold its index etc, but (mostly) uses
-> objects from the main repo. There would be some bloat,
-> as commits to the logs made in there would not be shared with the main
-> repo. Using `GIT_OBJECT_DIRECTORY` might be a way to avoid that bloat.
-
-## notes
-
-Another approach could be to use git-notes. It supports merging branches
-of notes, with union merge strategy (a hook would have to do this after
-a pull, it's not done automatically).
-
-Problem: Notes are usually attached to git
-objects, and there are no git objects corresponding to git-annex keys.
-
-Problem: Notes are not normally copied when cloning.
-
-------
-
-## elminating the merge problem
-
-Most of the above options are complicated by the problem of how to merge
-changes from remotes. It should be possible to deal with the merge
-problem generically. Something like this:
-
-* We have a local branch `B`.
-* For remotes, there are also `origin/B`, `otherremote/B`, etc.
-* To merge two branches `B` and `foo/B`, construct a merge commit that
- makes each file have all lines that were in either version of the file,
- with duplicates removed (probably). Do this without checking out a tree.
- -- now implemented as git-union-merge
-* As a `post-merge` hook, merge `*/B` into `B`. This will ensure `B`
- is always up-to-date after a pull from a remote.
-* When pushing to a remote, nothing need to be done, except ensure
- `B` is either successfully pushed, or the push fails (and a pull needs to
- be done to get the remote's changes merged into `B`).
diff --git a/doc/todo/build_a_user_guide.mdwn b/doc/todo/build_a_user_guide.mdwn
new file mode 100644
index 000000000..97414391b
--- /dev/null
+++ b/doc/todo/build_a_user_guide.mdwn
@@ -0,0 +1,3 @@
+there's a lot of good documentation on this wiki, but it's hard to find sometimes. it's also unclear if we should look in the [[git-annex]] manpage or elsewhere in the wiki or where. this is a typical problem with the use of wikis for documentation: it's there, but hard to find. it doesn't mean a wiki shouldn't be used but, as with any user manual, special care needs to be taken about structure, organisation and making sure the manual is exhaustive.
+
+a good example of this problem is [[todo/document_standard_groups_more_extensively_in_the_UI]]. --[[anarcat]]
diff --git a/doc/todo/checkout.mdwn b/doc/todo/checkout.mdwn
deleted file mode 100644
index 50da2d62e..000000000
--- a/doc/todo/checkout.mdwn
+++ /dev/null
@@ -1,23 +0,0 @@
-The checkout subcommand replaces the symlink that normally points at a
-file's content, with a copy of the file. Once you've checked a file out,
-you can edit it, and `git commit` it. On commit, git-annex will detect
-if the file has been changed, and if it has, `add` its content to the
-annex.
-
-> Internally, this will need to store the original symlink to the file, in
-> `.git/annex/checkedout/$filename`.
->
-> * git-annex uncheckout moves that back
-> * git-annex pre-commit hook checks each file being committed to see if
-> it has a symlink there, and if so, removes the symlink and adds the new
-> content to the annex.
->
-> And it seems the file content should be copied, not moved or hard linked:
->
-> * Makes sure other annexes can find it if transferring it from
-> this annex.
-> * Ensures it's always available for uncheckout.
-> * Avoids the last copy of a file's content being lost when
-> the checked out file is modified.
-
-[[done]]
diff --git a/doc/todo/clear_file_names_in_special_remotes.mdwn b/doc/todo/clear_file_names_in_special_remotes.mdwn
new file mode 100644
index 000000000..1b6a9f935
--- /dev/null
+++ b/doc/todo/clear_file_names_in_special_remotes.mdwn
@@ -0,0 +1,13 @@
+To properly use amazon AWS S3 for CDN, we need to publish videos to S3. Ideally, we would like to do this via git-annex as the back-end of video.debian.net is being migrated to git-annex by me, atm.
+
+Obviously, we will need clear text names and proper directory structure, not SHA512E file names. This would need to be supported by the S3 special remote.
+
+I talked to TobiasTheViking in the past and he hinted at a reasonably clean way to do this, but that a clean solution would need support from git-annex. I will link him to this page and ask him to supply whatever info is needed.
+
+
+Thanks,
+Richard
+
+> This is not feaisble given git-annex's design. If I wanted to
+> make something completely unlike git-annex, I suppose it could be done,
+> but it's off topic here. [[wontfix|done]] --[[Joey]]
diff --git a/doc/todo/clear_file_names_in_special_remotes/comment_1_630f17c9a7ce9a77d5d5867a6e0c799b._comment b/doc/todo/clear_file_names_in_special_remotes/comment_1_630f17c9a7ce9a77d5d5867a6e0c799b._comment
new file mode 100644
index 000000000..7ca8e1916
--- /dev/null
+++ b/doc/todo/clear_file_names_in_special_remotes/comment_1_630f17c9a7ce9a77d5d5867a6e0c799b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.41"
+ subject="comment 1"
+ date="2014-03-26T17:26:37Z"
+ content="""
+I don't see how this can possibly be done. A single git-annex object can have any number of file names, which can change at any time.
+"""]]
diff --git a/doc/todo/clear_file_names_in_special_remotes/comment_2_823c279683ac3f39c921be3fcbf6bfe2._comment b/doc/todo/clear_file_names_in_special_remotes/comment_2_823c279683ac3f39c921be3fcbf6bfe2._comment
new file mode 100644
index 000000000..b7f5a409e
--- /dev/null
+++ b/doc/todo/clear_file_names_in_special_remotes/comment_2_823c279683ac3f39c921be3fcbf6bfe2._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
+ nickname="Richard"
+ subject="comment 2"
+ date="2014-03-26T22:32:18Z"
+ content="""
+In that case, we would need to export the same file name several times, just like direct mode does.
+
+Could files be tracked via metadata? And yes, fsck would be... interesting...
+"""]]
diff --git a/doc/todo/clear_file_names_in_special_remotes/comment_3_4704e465025b543e47c18d565abd2747._comment b/doc/todo/clear_file_names_in_special_remotes/comment_3_4704e465025b543e47c18d565abd2747._comment
new file mode 100644
index 000000000..a925cb2de
--- /dev/null
+++ b/doc/todo/clear_file_names_in_special_remotes/comment_3_4704e465025b543e47c18d565abd2747._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.41"
+ subject="comment 3"
+ date="2014-03-27T17:44:46Z"
+ content="""
+Sounds like \"I want a pony to me\".
+"""]]
diff --git a/doc/todo/custom_f-droid_repo.mdwn b/doc/todo/custom_f-droid_repo.mdwn
index d4ec3e1f3..7d32d45d5 100644
--- a/doc/todo/custom_f-droid_repo.mdwn
+++ b/doc/todo/custom_f-droid_repo.mdwn
@@ -1,3 +1,3 @@
It would be great to have a custom f-droid repo "alla guardianproject.info" (before getting git-annex into the main f-droid repo).
-See https://github.com/guardianproject/fdroid-repo (https://guardianproject.info/repo/).
+See <https://github.com/guardianproject/fdroid-repo> (<https://guardianproject.info/repo/>).
diff --git a/doc/todo/custom_f-droid_repo/comment_4_55f05624f0e939f7b8d0c505285e5690._comment b/doc/todo/custom_f-droid_repo/comment_4_55f05624f0e939f7b8d0c505285e5690._comment
new file mode 100644
index 000000000..a122aae92
--- /dev/null
+++ b/doc/todo/custom_f-droid_repo/comment_4_55f05624f0e939f7b8d0c505285e5690._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://lj.rossia.org/users/imz/"
+ ip="79.165.57.121"
+ subject="this topic in their Submission Queue"
+ date="2014-05-03T14:59:11Z"
+ content="""
+I opened [a request to add git-annex](https://f-droid.org/forums/topic/git-annex/) in the F-Droid's submission queue about a year ago.
+
+Just posting here the link, so that all the discussion (not much) can be found by those interested.
+
+"""]]
diff --git a/doc/todo/custom_f-droid_repo/comment_6_de4229f04daf48a153e2f44f57a05a3b._comment b/doc/todo/custom_f-droid_repo/comment_6_de4229f04daf48a153e2f44f57a05a3b._comment
new file mode 100644
index 000000000..033e35377
--- /dev/null
+++ b/doc/todo/custom_f-droid_repo/comment_6_de4229f04daf48a153e2f44f57a05a3b._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://lj.rossia.org/users/imz/"
+ ip="79.165.57.121"
+ subject=" clarification: a custom F-Droid server just to post your updated apps"
+ date="2014-05-03T15:57:55Z"
+ content="""
+If I've understood Efraim correctly, he means that someone (perhaps, Joey) can run a custom F-Droid server with Joey's builds of the app **copied to the repo as is (without rebuilding there)**, so that those using an F-Droid client would get the updates through this standard path (for them) instead of manually looking for updates here.
+
+Like from a custom APT repository run not by Debian (in this case -- F-Droid team), but by an independent developer who is providing package builds not avaialble in Debian by building the packages himself, signing them, and putting them into his own APT repo (indexing them).
+
+"""]]
diff --git a/doc/todo/direct_mode_guard.mdwn b/doc/todo/direct_mode_guard.mdwn
deleted file mode 100644
index bb7f90897..000000000
--- a/doc/todo/direct_mode_guard.mdwn
+++ /dev/null
@@ -1,105 +0,0 @@
-Currently [[/direct_mode]] allows the user to point many normally safe
-git commands at his foot and pull the trigger. At LCA2013, a git-annex
-user suggested modifying direct mode to make this impossible.
-
-One way to do it would be to move the .git directory. Instead, make there
-be a .git-annex directory in direct mode repositories. git-annex would know
-how to use it, and would be extended to support all known safe git
-commands, passing parameters through, and in some cases verifying them.
-
-So, for example, `git annex commit` would run `git commit --git-dir=.git-annex`
-
-However, `git annex commit -a` would refuse to run, or even do something
-intelligent that does not involve staging every direct mode file.
-
-----
-
-One source of problems here is that there is some overlap between git-annex
-and git commands. Ie, `git annex add` cannot be a passthrough for `git
-add`. The git wrapper could instead be another program, or it could be
-something like `git annex git add`
-
---[[Joey]]
-
-----
-
-Or, no git wrapper could be provided. Limit the commands to only git-annex
-commands. This should be all that is needed to manage a direct mode
-repository simply, and if the user is doing something complicated that
-needs git access, they can set `GIT_DIR=.git-annex` and be careful not to
-shoot off their foot. (Or can just switch to indirect mode!)
-
-This wins on simplicity, and if it's the wrong choice a git wrapper
-can be added later. --[[Joey]]
-
----
-
-Implementation: Pretty simple really. Already did the hard lifting to
-support `GIT_DIR`, so only need to override the default git directory
-in direct mode when that's not set to `.git-annex`.
-
-A few things hardcode ".git", including Assistant.Threads.Watcher.ignored
-and `Seek.withPathContents`, and parts of `Git.Construct`.
-
----
-
-Transition: git-annex should detect when it's in a direct mode repository
-with a .git directory and no .git-annex directory, and transparently
-do the move to transition to the new scheme. (And remember that `git annex
-indirect` needs to move it back.)
-
-# alternative approach: move index
-
-Rather than moving .git, maybe move .git/index?
-
-This would cause git to think that all files in the tree were deleted.
-So git commit -a would make a commit that removes them from git history.
-But, the files in the work tree are not touched by this.
-
-Also, git checkout, git merge, and other things that manipulate the work
-tree refuse to do anything if they'd change a file that they think is
-untracked.
-
-Hmm, this does't solve the user accidentially running git add on an annexed
-file; the whole file still gets added.
-
-# alternative approach: fake bare repo
-
-Set core.bare to true. This prevents all work tree operations,
-so prevents any foot shooting. It still lets the user run commands like
-git log, even on files in the tree, and git fetch, and push, and git
-config, etc.
-
-Even better, it integrates with other tools, like `mr`, so they know
-it's a git repo.
-
-This seems really promising. But of course, git-annex has its own set of
-behaviors in a bare repo, so will need to recognise that this repo is not
-really bare, and avoid them.
-
-> [[done]]!! --[[Joey]]
-
-(Git may also have some bare repo behaviors that are unwanted. One example
-is that git allows pushes to the current branch in a bare repo,
-even when `receive.denyCurrentBranch` is set.)
-
-> This is indeed a problem. Indeed, `git annex sync` successfully
-> pushes changes to the master branch of a fake bare direct mode repo.
->
-> And then, syncing in the repo that was pushed to causes the changes
-> that were pushed to the master branch to get reverted! This happens
-> because sync commits; commit sees that files are staged in index
-> differing from the (pushed) master, and commits the "changes"
-> which revert it.
->
-> Could fix this using an update hook, to reject the updated of the master
-> branch. However, won't work on crippled filesystems! (No +x bit)
->
-> Could make git annex sync detect this. It could reset the master
-> branch to the last one committed, before committing. Seems very racy
-> and hard to get right!
->
-> Could make direct mode operate on a different branch, like
-> `annex/direct/master` rather than `master`. Avoid pushing to that
-> branch (`git annex sync` can map back from it to `master` and push there
-> instead). A bit clumsy, but works.
diff --git a/doc/todo/direct_mode_guard/comment_1_431b6e1577bbd30b07dce9002a8fe1a2._comment b/doc/todo/direct_mode_guard/comment_1_431b6e1577bbd30b07dce9002a8fe1a2._comment
deleted file mode 100644
index 01cddc8a3..000000000
--- a/doc/todo/direct_mode_guard/comment_1_431b6e1577bbd30b07dce9002a8fe1a2._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawn-KDr_Z4CMkjS0v_TxQ08SzAB5ecHG3K0"
- nickname="Glen"
- subject="This sounds good"
- date="2013-06-25T10:30:07Z"
- content="""
-I think we might have been talking about this feature.. Seems like a good idea to me.
-
-Glen
-"""]]
diff --git a/doc/todo/direct_mode_guard/comment_2_85bdb9dc601b87bd7c77150d7b0a5cde._comment b/doc/todo/direct_mode_guard/comment_2_85bdb9dc601b87bd7c77150d7b0a5cde._comment
deleted file mode 100644
index 7cf37a917..000000000
--- a/doc/todo/direct_mode_guard/comment_2_85bdb9dc601b87bd7c77150d7b0a5cde._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawm7AuSfii_tCkLyspL6Mr0ATlO6OxLNYOo"
- nickname="Georg"
- subject="comment 2"
- date="2013-09-20T11:29:04Z"
- content="""
-Maybe make a git sub-namespace of commands. Yeah, I know, something like git annex git-add sounds a bit on the verbose side, but it would allow access to possibly all git commands regardless of name clashes.
-"""]]
diff --git a/doc/todo/direct_mode_undo.mdwn b/doc/todo/direct_mode_undo.mdwn
new file mode 100644
index 000000000..926222d97
--- /dev/null
+++ b/doc/todo/direct_mode_undo.mdwn
@@ -0,0 +1,86 @@
+A fairly common request is that a repo is using direct mode, and the user
+has made some change, and now wants to undo it. Since direct mode doesn't
+allow using `git revert`, the repo would need to be switched to indirect
+mode first, which can range from annoying to really annoying to impossible
+(on eg FAT).
+
+## general approach
+
+`git annex proxy $gitcmd` could:
+
+1. check out a local clone of the repo
+2. run "git $gitcmd" inside the clone
+3. Merge any changes from the clone back into the direct mode repo
+ and update the work tree the same as is done by `git annex merge`.
+4. If a different branch was checked out in the clone, update the repo
+ to have that same branch checked out.
+
+This is a general bypass for the direct mode guard. It should work anywhere
+(even on FAT). It avoids problems like `git commit -a` being unsafe in
+direct mode, since running such a command in a local clone, which does not
+use direct mode is always safe.
+
+Beyond handling undo, #4 means that this can be used to check
+out past versions of the repo (eg, `git annex proxy checkout HEAD^^`)
+
+One problem with it is that it can only operate on changes that have been
+committed. If you've just accidentially deleted a file and want to undo
+that, and haven't run `git annex sync` to commit it, you can't revert it.
+
+The need to make a local clone will make it a bit slow, since the whole
+work tree will need to be set up. It might be possible to reuse the clone
+next time (after resetting it to reflect the current HEAD).
+
+Some things like the reflog and local branches don't get cloned, so
+git commands that try to act on those wouldn't work. Maybe it would be
+better to make it use a separate work tree, but the same .git directory?
+Then step #3 would instead update the direct mode work tree to refect
+the new HEAD, and step #4 would not be needed.
+
+> This is done.. But, I think an undo command would also be good
+> to do, as a nicer user interface that can integrate well with a file
+> manager. --[[Joey]]
+
+## git annex undo
+
+I don't want to recapitulate all of the git commands in git-annex for
+direct mode. So I don't want to add `git annex revert` and `git annex
+branch` etc, etc.
+
+So, adding `git annex undo` feels like a step down a slippery slope. But it
+might be justified as providing just enough functionality to make direct
+mode a lot more useful, without trying to recapitulate all the flexability
+of git. Like `git annex merge` and `git annex sync` also do.
+
+Another use case is binding `git annex undo $file` to an action in a file
+manager.
+
+Here's a design for undo:
+
+1. Can be passed one or more files. Which may or may not exist in the work tree.
+2. First, commits the current state of the files as staged in the index,
+ or in the working tree. This may involve checksumming modified files.
+3. Then, for each file, looks back through git history, to find the commit
+ just before the most recent change that was made to that file.
+ Stage the version of the file as it was in that commit.
+4. Updates work tree, and leaves the changes staged
+ but not committed. (To allow the user to bundle up multiple undos in a
+ single commit).
+6. Does not get or drop content. The content may even be completely
+ missing after an undo.
+
+Note that undoing an undo should get back to the original state. This is
+why #2 commits changes first. This way, if a file has a staged change,
+it gets committed, and then that commit is reverted, resulting in another
+commit. Which a later run of undo can in turn revert. If it didn't commit,
+the history about the staged change that was reverted would be lost.
+
+What about undoing changes to a whole directory? Recursively undoing
+the last change to each file would be expensive, and likely confusing.
+Instead, when a directory is passed, it could find the most recent commit
+that touched files in that directory, and undo the changes to those files.
+
+> [[done]] --[[Joey]]
+
+Also, --depth could make undo look for an older commit than the most
+recent one to affect the specified file.
diff --git a/doc/todo/do_not_bug_me_about_intermediate_files.mdwn b/doc/todo/do_not_bug_me_about_intermediate_files.mdwn
new file mode 100644
index 000000000..99a8f5b19
--- /dev/null
+++ b/doc/todo/do_not_bug_me_about_intermediate_files.mdwn
@@ -0,0 +1,7 @@
+[[!meta title="--notify-finish operates on a per-file, not per-process basis"]]
+
+so this is another UX pickyness, but it seems important to me.
+
+i like the new [[desktop notifications|tips/file_manager_integration]], but they are little too verbose. when i choose "git annex get" on the folder, if there's a lot of files, it will flood me with all the files being transfered in a mostly incomprehensible list of files being transfered.
+
+what i would expect is more: "starting transfer of folder X", "transfer of folder X finished!", only two message per item i chose. this is especially a problem with DVD backups, which have a bunch of small files (screenshots, .nfos and so on) and large video files - so it seems the thing has finished transfering, while it's only partly done. --[[anarcat]]
diff --git a/doc/todo/do_not_commit_with_empty_messages.mdwn b/doc/todo/do_not_commit_with_empty_messages.mdwn
new file mode 100644
index 000000000..3c6c8415a
--- /dev/null
+++ b/doc/todo/do_not_commit_with_empty_messages.mdwn
@@ -0,0 +1,15 @@
+it seems that `git-annex` sometimes does commits with empty commit messages. this makes rebasing git-annex branches much much harder than they need to, because rebase freaks out on those weird commits:
+
+<pre>
+anarcat@marcos:video$ git rebase --continue
+Waiting for Emacs...
+Aborting commit due to empty commit message.
+Could not commit staged changes.
+</pre>
+
+This was trying to fix [[a broken merge|forum/canceling_wrong_repository_merge/]]... --[[anarcat]]
+
+> While I think it's silly to use empty dummy commit messages when there
+> is nothing of value to say about the commit, I guess I can add value
+> by putting in the name of the repository where the commit was made. So,
+> [[done]] --[[Joey]]
diff --git a/doc/todo/do_not_commit_with_empty_messages/comment_1_3cff336e58c26eafade4a37b0c9e0634._comment b/doc/todo/do_not_commit_with_empty_messages/comment_1_3cff336e58c26eafade4a37b0c9e0634._comment
new file mode 100644
index 000000000..c2cd7833f
--- /dev/null
+++ b/doc/todo/do_not_commit_with_empty_messages/comment_1_3cff336e58c26eafade4a37b0c9e0634._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-02-11T17:15:04Z"
+ content="""
+It's completely legal for git commits to have empty commit messages. Why
+would rebase care? Seems like a bug in rebase.
+
+Note that only the git-annex assistant currently uses empty commit
+messages.
+"""]]
diff --git a/doc/todo/do_not_commit_with_empty_messages/comment_2_46a80050beba50360b1c212a9ab5a6b2._comment b/doc/todo/do_not_commit_with_empty_messages/comment_2_46a80050beba50360b1c212a9ab5a6b2._comment
new file mode 100644
index 000000000..0ce37dc7c
--- /dev/null
+++ b/doc/todo/do_not_commit_with_empty_messages/comment_2_46a80050beba50360b1c212a9ab5a6b2._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ subject="git bug indeed"
+ date="2015-02-11T18:14:34Z"
+ content="""
+i agree. this does seems like a bug in git. i tried various ways of coercing git into doing what i need, but in the end just ended up adding comments to those commits.
+
+i thought of reporting this to the mailing list, but it turns out there's already patches floating around to fix a bunch of issues with rebase:
+
+<http://search.gmane.org/?query=rebase+empty+commit+message&group=gmane.comp.version-control.git>
+
+in particular:
+
+<http://article.gmane.org/gmane.comp.version-control.git/255411/>
+
+not sure what those will become.
+"""]]
diff --git a/doc/todo/document_standard_groups_more_extensively_in_the_UI.mdwn b/doc/todo/document_standard_groups_more_extensively_in_the_UI.mdwn
new file mode 100644
index 000000000..1e9afdef9
--- /dev/null
+++ b/doc/todo/document_standard_groups_more_extensively_in_the_UI.mdwn
@@ -0,0 +1,14 @@
+i have been using git-annex for a while now, yet I still can't quite wrap my head around [[preferred_content/standard groups]], especially how they are documented in about/repogroups in the assistant web interface. i have repeatedly synced files where they shouldn't have been synced (usually by setting the repo as "client" or "transfer") and also destroyed files I wanted to keep by setting it to "unwanted" (actually, that was by pressing the "delete" button on the repo, which i didn't expect to drop the files on the remote...)
+
+i have been able to understand a lot of what's going on by trial and error and by decrypting the [[preferred_content]] expressions on the wiki.
+
+it seems to me the [[preferred_content/standard groups]] wiki page and the `about/repogroups` URL in the assistant should be merged:
+
+ 1. the assistant should be more explicit: maybe it should have examples of what will happen in some cases to give an idea. maybe "stories" like "a transfer repo is for when you have two client repos that can't talk to each other, so you use a transfer repo, e.g. a portable hard drive, to transfer files between them". having the actual, current [[preferred_content]] expressions from the [[preferred_content/standard groups]] groups page would also help, maybe in a smaller font to not scare people of
+ 2. the [[preferred_content/standard groups]] wiki page should be expanded to include narratives like the ones that are in the `about/repogroups` page of the assistant. that way people looking at the software from the outside can understand the mechanics better
+
+ideally, that documentation would be the one and the same so that a change on one side would reflect on the other.
+
+in fact, having an inline manual in the assistant would be a must: we want this thing to work offline, so it should be able to access this wiki, or whatever of it is shipped with git-annex.
+
+that way we wouldn't have this kind of inconsistencies... more generally, maybe we could even [[build a user guide]]! -- [[anarcat]]
diff --git a/doc/todo/does_not_preserve_timestamps.mdwn b/doc/todo/does_not_preserve_timestamps.mdwn
new file mode 100644
index 000000000..0d8f2371d
--- /dev/null
+++ b/doc/todo/does_not_preserve_timestamps.mdwn
@@ -0,0 +1,16 @@
+### Please describe the problem.
+I see that files are synced between my computers with git-annex but the timestamps do not match. The one that receives files always puts the current time of file creation on the file.
+
+### What steps will reproduce the problem?
+Install git-annex on two computers. Connect with XMPP. Then add cloud storage with shared encryption for transferring files. Since you want also backup, choose "full backup" as the type of cloud storage.
+
+
+### What version of git-annex are you using? On what operating system?
+Downloaded binary package dated 13/09/2014 amd64 Ubuntu 14.04.
+
+
+### Please provide any additional information below.
+
+Files are in sync. For example, I move a file from a directory to my synced annex directory. It contains timestamp of 01/01/2010 for example. Once the file gets transferred to the remote computer, it gets current time, for example 20/09/2014 rather than keeping 01/01/2010.
+
+All computers are linux based, ext4 filesystems. File transfers are done through shared encryption rsync remote.
diff --git a/doc/todo/does_not_preserve_timestamps/comment_1_caf5e5cb17f4d05fff8c2fab661cd93f._comment b/doc/todo/does_not_preserve_timestamps/comment_1_caf5e5cb17f4d05fff8c2fab661cd93f._comment
new file mode 100644
index 000000000..48ec44d2b
--- /dev/null
+++ b/doc/todo/does_not_preserve_timestamps/comment_1_caf5e5cb17f4d05fff8c2fab661cd93f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.144"
+ subject="comment 1"
+ date="2014-09-23T20:27:25Z"
+ content="""
+The closest git comes to storing a timestamp is the date of the last commit of a file for mtime, and first commit for ctime. However, those are pretty expensive to look up for a given file. And git doesn't try to preserve timestamps in checkouts at all, which argues that git-annex, at least at the command line, should not either.
+"""]]
diff --git a/doc/todo/does_not_preserve_timestamps/comment_2_c337fca1474b5b78f61ad6f421138ae4._comment b/doc/todo/does_not_preserve_timestamps/comment_2_c337fca1474b5b78f61ad6f421138ae4._comment
new file mode 100644
index 000000000..4b5a750cf
--- /dev/null
+++ b/doc/todo/does_not_preserve_timestamps/comment_2_c337fca1474b5b78f61ad6f421138ae4._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmK0703vNSIQsP1mGf-4MAPnsBZiSc6yVo"
+ nickname="Emre"
+ subject="comment 2"
+ date="2014-09-23T20:58:10Z"
+ content="""
+Thanks Joey for the comment.
+
+But when syncing two repos, timestamps are critical at least for my use case. I can't lose this info. Even if it's expensive.
+
+Appreciate if you can consider to add it for direct mode repos, ie when a file is synced to another repo and created there, it shall carry at least the mtime of the file in source repo. Owncloud sync does it, btsync does it, although I know git-annex is different than those.
+"""]]
diff --git a/doc/todo/does_not_preserve_timestamps/comment_3_9a3eeddc46e5a420575f00cb47caf703._comment b/doc/todo/does_not_preserve_timestamps/comment_3_9a3eeddc46e5a420575f00cb47caf703._comment
new file mode 100644
index 000000000..ba34823d4
--- /dev/null
+++ b/doc/todo/does_not_preserve_timestamps/comment_3_9a3eeddc46e5a420575f00cb47caf703._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmK0703vNSIQsP1mGf-4MAPnsBZiSc6yVo"
+ nickname="Emre"
+ subject="comment 3"
+ date="2014-09-23T21:15:29Z"
+ content="""
+Btw, git storing the last commit time as Mtime is not enough, it shall store the original timestamp of the file, not the date of commit. Hope I could explain and hope this is something doable.
+"""]]
diff --git a/doc/todo/does_not_preserve_timestamps/comment_4_99b064259fc2e3c6eb83c3da3b2d3bac._comment b/doc/todo/does_not_preserve_timestamps/comment_4_99b064259fc2e3c6eb83c3da3b2d3bac._comment
new file mode 100644
index 000000000..08de75619
--- /dev/null
+++ b/doc/todo/does_not_preserve_timestamps/comment_4_99b064259fc2e3c6eb83c3da3b2d3bac._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://svario.it/gioele"
+ nickname="gioele"
+ subject="comment 4"
+ date="2014-09-24T07:15:09Z"
+ content="""
+You can try to store the timestamps just before commit and restore them on checkout.
+
+Have a look at [metastore](https://github.com/przemoc/metastore): it is a ready-made solution for plain git. Maybe you can adapt it to git-annex.
+"""]]
diff --git a/doc/todo/does_not_preserve_timestamps/comment_5_c95c8b9bd617830604500213c962fc7a._comment b/doc/todo/does_not_preserve_timestamps/comment_5_c95c8b9bd617830604500213c962fc7a._comment
new file mode 100644
index 000000000..7632548cd
--- /dev/null
+++ b/doc/todo/does_not_preserve_timestamps/comment_5_c95c8b9bd617830604500213c962fc7a._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlM_DRhi_5pJrTA0HbApHR25iAgy-NBXTY"
+ nickname="Tor Arne"
+ subject="comment 5"
+ date="2014-10-01T22:02:43Z"
+ content="""
+I was just about to start using git-annex for my data when I saw this bug report, which unfortunately is a blocker. Persisting basic metadata of files that are synced seems like a core feature of a file sync/transfer tool, so I'm really hoping this can be solved somehow :/
+
+"""]]
diff --git a/doc/todo/does_not_preserve_timestamps/comment_6_b99e00d0bc4258c4cb28b544b19ea3b8._comment b/doc/todo/does_not_preserve_timestamps/comment_6_b99e00d0bc4258c4cb28b544b19ea3b8._comment
new file mode 100644
index 000000000..67fe25595
--- /dev/null
+++ b/doc/todo/does_not_preserve_timestamps/comment_6_b99e00d0bc4258c4cb28b544b19ea3b8._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlM_DRhi_5pJrTA0HbApHR25iAgy-NBXTY"
+ nickname="Tor Arne"
+ subject="comment 6"
+ date="2014-10-01T22:39:01Z"
+ content="""
+Isn't this what the metadata feature does though? http://git-annex.branchable.com/design/metadata/
+
+With annex.genmetadata true set, it should store year and mont (but not day/time? if so why not?
+
+Is the missing piece of the puzzle to apply the metadata again on checkout?
+"""]]
diff --git a/doc/todo/dumb_plaindir_remote___40__e.g._for_NAS_mounts__41__.mdwn b/doc/todo/dumb_plaindir_remote___40__e.g._for_NAS_mounts__41__.mdwn
deleted file mode 100644
index 09123cb4c..000000000
--- a/doc/todo/dumb_plaindir_remote___40__e.g._for_NAS_mounts__41__.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-I've an external USB hard disc attached to my (fritzbox) router that is only accessible through SMB/CIFS. I'd like have all my annexed files on this drive in kind of direct-mode so that I can also access the files without git-annex.
-
-I tried to put a direct-mode repo on the drive but this is painfully slow. The git-annex process than runs on my desktop and accesses the repo over SMB over the slow fritzbox over USB.
-
-I'd wish that git-annex could be told to just use a (mounted) folder as a direct-mode remote.
-
-> [[done]]; dup. --[[Joey]]
diff --git a/doc/todo/dumb_plaindir_remote___40__e.g._for_NAS_mounts__41__/comment_1_5ed9a2336b432b842c1805add6d96509._comment b/doc/todo/dumb_plaindir_remote___40__e.g._for_NAS_mounts__41__/comment_1_5ed9a2336b432b842c1805add6d96509._comment
deleted file mode 100644
index bff1b2fcd..000000000
--- a/doc/todo/dumb_plaindir_remote___40__e.g._for_NAS_mounts__41__/comment_1_5ed9a2336b432b842c1805add6d96509._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.64"
- subject="comment 1"
- date="2013-11-23T19:03:58Z"
- content="""
-It's not clear to me what you are requesting here.
-
-You seem to say that running git-annex inside a mountpoint is slow. Ok. So, what possible changes to git-annex could make it fast, given that the bottleneck is the SMB/USB?
-"""]]
diff --git a/doc/todo/dumb_plaindir_remote___40__e.g._for_NAS_mounts__41__/comment_2_e6ba58c5c31ba23a4575f1189689946f._comment b/doc/todo/dumb_plaindir_remote___40__e.g._for_NAS_mounts__41__/comment_2_e6ba58c5c31ba23a4575f1189689946f._comment
deleted file mode 100644
index d60cb2d4d..000000000
--- a/doc/todo/dumb_plaindir_remote___40__e.g._for_NAS_mounts__41__/comment_2_e6ba58c5c31ba23a4575f1189689946f._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnR6E5iUghMWdUGlbA9CCs8DKaoigMjJXw"
- nickname="Efraim"
- subject="comment 2"
- date="2013-11-26T09:26:53Z"
- content="""
-perhaps he's looking to be able to expand the addurl option to include file://path/to/video.mp4, or for over smb://... , to import a file without changing its location to being inside the annex.
-"""]]
diff --git a/doc/todo/dumb_plaindir_remote___40__e.g._for_NAS_mounts__41__/comment_3_e53cbc5765819de2d3c742e6cd4d77cd._comment b/doc/todo/dumb_plaindir_remote___40__e.g._for_NAS_mounts__41__/comment_3_e53cbc5765819de2d3c742e6cd4d77cd._comment
deleted file mode 100644
index 23b59574f..000000000
--- a/doc/todo/dumb_plaindir_remote___40__e.g._for_NAS_mounts__41__/comment_3_e53cbc5765819de2d3c742e6cd4d77cd._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmicVKRM8vJX4wPuAwlLEoS2cjmFXQkjkE"
- nickname="Thomas"
- subject="never mind"
- date="2013-12-01T18:34:05Z"
- content="""
-grossmeier.net did a much better job to explain what I want:
-[[New special remote suggeston - clean directory]]
-
-Please close this issue as duplicate of the above.
-"""]]
diff --git a/doc/todo/exclude_files_on_a_given_remote.mdwn b/doc/todo/exclude_files_on_a_given_remote.mdwn
deleted file mode 100644
index e8bb357d3..000000000
--- a/doc/todo/exclude_files_on_a_given_remote.mdwn
+++ /dev/null
@@ -1,18 +0,0 @@
-Say I have some files on remote A. But I'm away from it, and transferring
-files from B to C. I'd like to avoid transferring any files I already have
-on A.
-
-Something like:
-
- git annex copy --to C --exclude-on A
-
-This would not contact A, just use its cached location log info.
-
-I suppose I might also sometime want to only act on files that are
-thought/known to be on A.
-
- git annex drop --only-on A
-
---[[Joey]]
-
-[[done]]
diff --git a/doc/todo/extensible_addurl.mdwn b/doc/todo/extensible_addurl.mdwn
new file mode 100644
index 000000000..44b19fef0
--- /dev/null
+++ b/doc/todo/extensible_addurl.mdwn
@@ -0,0 +1,88 @@
+`git annex addurl` supports regular urls, as well as detecting videos that
+quvi can download. We'd like to extend this to support extensible uri
+handling.
+
+Use cases range from torrent download support, to pulling data
+from scientific data repositories that use their own APIs.
+
+The basic idea is to have external special remotes (or perhaps built-in
+ones in some cases), which addurl can use to download an object, referred
+to by some uri-like thing. The uri starts with "$downloader:" to indicate
+that it's not a regular url and so is not handled by the web special
+remote.
+
+ git annex addurl torrent:$foo
+ git annex addurl CERN:$bar
+
+Problem: This requires mapping from the name of the downloader, which is
+probably the same as the git-annex-remote-$downloader program implementing
+the special remote protocol (but not always), to the UUID of a remote.
+That's assuming we want location tracking to be able to know that a file is
+both available from CERN and from a torrent, for example.
+
+Solution: Add a new method to remotes:
+
+ claimUrl :: Maybe (URLString -> Annex Bool)
+
+Remotes that implement this method (including special remotes) will
+be queried when such an uri is added, to see which claims it.
+
+Once the remote is known, addurl --file will record that the Key is present
+on that remote, and record the uri in the url log.
+
+----
+
+What about using addurl to add a new file? In this mode, the Key is not yet
+known. addurl currently handles this by generating a dummy Key for the url
+(hitting the url to get its size), and running a Transfer using the dummy
+key that downloads from the web. Once the download is done, the dummy Key
+is upgraded to the final Key.
+
+Something similar could be done for other remotes, but the url log for the
+dummy key would need to have the url added to it, for the remote to know
+what to download, and then that could be removed after the download. Which
+causes ugly churn in git, and would leave a mess if interrupted.
+
+One option is to add another new method to remotes:
+
+ downloadUrl :: Maybe (URLString -> Annex FilePath)
+
+Or, the url log could have support added for recording temporary key
+urls in memory. (done)
+
+Another problem is that the size of the Key isn't known. addurl
+could always operate in relaxed mode, where it generates a size-less Key.
+Or, yet another method could be added: (done)
+
+ sizeUrl :: URLString -> Annex (Maybe Integer)
+
+----
+
+Retrieval of the Key works more or less as usual. The only
+difference being that remotes that support this interface can look
+at the url log to find the one with the right "$downloader:" prefix,
+and so know where to download from. (Much as the web special remote already
+does.)
+
+Prerequisite: Expand the external special remote interface to support
+accessing the url log. (done)
+
+----
+
+It would also be nice to be able to easily configure a regexp that normal
+urls, if they match, are made to use a particular downloader. So, for
+torrents, this would make matching urls have torrent: prefixed to them.
+
+ git config annex.downloader.torrent.regexp '(^magnet:|\.torrent$)'
+
+It might also be useful to allow bypassing the complexity of the external
+special remote interface, and let a downloader be specified simply by:
+
+ git config annex.downloader.torrent.command 'aria2c %url $file'
+
+This could be implemented in either the web special remote or even in an
+external special remote.
+
+Some other discussion at <https://github.com/datalad/datalad/issues/10>
+
+> [[done]]! --[[Joey]]
diff --git a/doc/todo/extensible_addurl/comment_1_5dca2eb8ee9e8676d372cd4bc6934975._comment b/doc/todo/extensible_addurl/comment_1_5dca2eb8ee9e8676d372cd4bc6934975._comment
new file mode 100644
index 000000000..857df4254
--- /dev/null
+++ b/doc/todo/extensible_addurl/comment_1_5dca2eb8ee9e8676d372cd4bc6934975._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnx8kHW66N3BqmkVpgtXDlYMvr8TJ5VvfY"
+ nickname="Yaroslav"
+ subject="allow multiple urls"
+ date="2014-12-04T21:59:25Z"
+ content="""
+echoing https://github.com/datalad/datalad/issues/9 \"parallel download of a file from multiple URLs (and special remotes?)\"
+might be worth adding e.g.
+
+git config annex.downloader.torrent.allowmultiple True
+
+and then using downloader which could fetch from multiple originating URLs simultaneously. In respect to aria2 (which seems to not support ATM specification of the output filename) see
+https://github.com/tatsuhiro-t/aria2/issues/190
+"""]]
diff --git a/doc/todo/extensible_addurl/comment_2_0e27f12c998a3ac4f0d4c3d4c9898d26._comment b/doc/todo/extensible_addurl/comment_2_0e27f12c998a3ac4f0d4c3d4c9898d26._comment
new file mode 100644
index 000000000..191cc3ff7
--- /dev/null
+++ b/doc/todo/extensible_addurl/comment_2_0e27f12c998a3ac4f0d4c3d4c9898d26._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2014-12-05T17:45:57Z"
+ content="""
+I think this issue of multiple files in a torrent is another place that
+using an external special remote (or maybe one built into git-annex)
+is better than just specifying a download command. A special remote for
+torrents could use a temp directory that accumulates all the files in the
+torrent, and then pluck out specific files as git-annex requests them.
+
+When git-annex exits, the special remote could clean up any unused files.
+"""]]
diff --git a/doc/todo/fast_migrate.mdwn b/doc/todo/fast_migrate.mdwn
new file mode 100644
index 000000000..1571d880a
--- /dev/null
+++ b/doc/todo/fast_migrate.mdwn
@@ -0,0 +1,16 @@
+Moved this comment to todo list --[[Joey]]
+
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnfM7ZF0Q5U9k1LljyDXH37cuXU5Gx6gtM"
+ nickname="A"
+ subject="fast migrate"
+ date="2014-07-05T08:21:20Z"
+ content="""
+dear Joey and everybody else,
+ some time ago I used \"git annex migrate\" to bring all my repositories up-to-date; after that I found (to my dismay) that some keys are SHA256, some others are SHA256E, so my data is not really deduplicated ; now, it would possible to migrate from SHAnnnE to SHAnnn (and vice versa) very fast... but currently AFAICS git-annex recomputes the whole checksum, and this (on my USB2.0 old disks) takes forever; may somebody please implement a fast migration?
+"""]]
+
+> Certianly doable, for $hashE to $hash. Probably about an hour's work.
+> --[[Joey]]
+
+>> [[done]] --[[Joey]]
diff --git a/doc/todo/faster_gnupg_cipher.mdwn b/doc/todo/faster_gnupg_cipher.mdwn
deleted file mode 100644
index f5ff062d2..000000000
--- a/doc/todo/faster_gnupg_cipher.mdwn
+++ /dev/null
@@ -1,9 +0,0 @@
-Apparently newer gnupg has support for hardware-accelerated AES-NI. It
-would be good to have an option to use that. I also wonder if using the
-same symmetric key for many files presents a security issues (and whether
-using GPG keys directly would be more secure).
-
-> [[done]]; you can now use encryption=pubkey when setting up a special
-> remote to use pure public keys without the hybrid symmetric key scheme.
-> Which you choose is up to you. Also, annex.gnupg-options can configure
-> the ciphers used. --[[Joey]]
diff --git a/doc/todo/faster_gnupg_cipher/comment_1_8f61f7c724a8224e61c015be68f43db7._comment b/doc/todo/faster_gnupg_cipher/comment_1_8f61f7c724a8224e61c015be68f43db7._comment
deleted file mode 100644
index 1bf550cdf..000000000
--- a/doc/todo/faster_gnupg_cipher/comment_1_8f61f7c724a8224e61c015be68f43db7._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.145"
- subject="comment 1"
- date="2013-08-01T17:10:56Z"
- content="""
-There is a remote.name.annex-gnupg-options git-config setting that can be used to pass options to gpg on a per-remote basis.
-
-> also wonder if using the same symmetric key for many files presents a security issues (and whether using GPG keys directly would be more secure).
-
-I am not a cryptographer, but I have today run this question by someone with a good amount of crypo knowledge. My understanding is that reusing a symmetric key is theoretically vulnerable to eg known-plaintext or chosen-plaintext attacks. And that modern ciphers like AES and CAST (gpg default) are designed to resist such attacks.
-
-If someone was particularly concerned about these attack vectors, it would be pretty easy to add a mode where git-annex uses public key encryption directly. With the disadvantage, of course, that once a file was sent to a special remote and encrypted for a given set of public keys, other keys could not later be granted access to it.
-"""]]
diff --git a/doc/todo/faster_gnupg_cipher/comment_2_36e1f227a320527653500b445f7c001c._comment b/doc/todo/faster_gnupg_cipher/comment_2_36e1f227a320527653500b445f7c001c._comment
deleted file mode 100644
index 08f69d6b8..000000000
--- a/doc/todo/faster_gnupg_cipher/comment_2_36e1f227a320527653500b445f7c001c._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 2"
- date="2013-08-02T07:21:50Z"
- content="""
-Using symmetric keys is significantly cheaper, computation-wise.
-
-The scheme of encrypting symmetric keys with asymmetric ones is ancient, well-proven, and generally accepted as a good approach.
-
-Using per-key files makes access control more fine-grained and is only a real performance issue once while creating the private key and a little bit every time more than one file needs to be decrypted as more than one symmetric key needs to be taken care of.
-"""]]
diff --git a/doc/todo/faster_gnupg_cipher/comment_3_bd0c975494333dfe558de048d888ace8._comment b/doc/todo/faster_gnupg_cipher/comment_3_bd0c975494333dfe558de048d888ace8._comment
deleted file mode 100644
index d0b98b7f6..000000000
--- a/doc/todo/faster_gnupg_cipher/comment_3_bd0c975494333dfe558de048d888ace8._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="guilhem"
- ip="129.16.20.209"
- subject="comment 3"
- date="2013-08-19T13:44:35Z"
- content="""
-AES-NI acceleration will be used by default providing you're using
-the new modularized GnuPG (v2.x) and libgcrypt ≥ 1.5.0. Of course it
-only speeds up AES encryption, while GnuPG uses CAST by default; you can
-either set `personal-cipher-preferences` to AES or AES256 in your
-`gpg.conf` or, as joeyh hinted at, set `remote.<name>.annex-gnupg-options`
-as described in the manpage.
-
-By the way, I observed a significant speed up when using `--compress-algo none`.
-Image, music and video files are typically hard to compress further, and it seems
-that's where gpg spent most of its time, at least on the few files I benchmarked.
-"""]]
diff --git a/doc/todo/faster_rsync_remotes.mdwn b/doc/todo/faster_rsync_remotes.mdwn
deleted file mode 100644
index 8c40b2816..000000000
--- a/doc/todo/faster_rsync_remotes.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-Using an rsync remote is currently very slow when there are a lot of files, since rsync appears to be called for each file copied. It would be awesome if each call to rsync was amortized to copy many files; rsync is very good at copying many small files quickly.
-
-> [[done]]; bug submitter was apparently not using a version
-> with rsync connection caching. --[[Joey]]
diff --git a/doc/todo/faster_rsync_remotes/comment_1_0bc3ee0ae563357675eeccf42461e59a._comment b/doc/todo/faster_rsync_remotes/comment_1_0bc3ee0ae563357675eeccf42461e59a._comment
deleted file mode 100644
index 2f320fee2..000000000
--- a/doc/todo/faster_rsync_remotes/comment_1_0bc3ee0ae563357675eeccf42461e59a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.145"
- subject="comment 1"
- date="2013-08-01T16:06:42Z"
- content="""
-I cannot see a way to do this using rsync's current command-line interface. Ideas how to do it welcomed.
-"""]]
diff --git a/doc/todo/faster_rsync_remotes/comment_2_ccf6f75450c89ca498c8130054f8d32d._comment b/doc/todo/faster_rsync_remotes/comment_2_ccf6f75450c89ca498c8130054f8d32d._comment
deleted file mode 100644
index 67b5feab0..000000000
--- a/doc/todo/faster_rsync_remotes/comment_2_ccf6f75450c89ca498c8130054f8d32d._comment
+++ /dev/null
@@ -1,24 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawln4uCaqZRd5_nRQ-iLcJyGctIdw8ebUiM"
- nickname="Edward"
- subject="Just put multiple source files"
- date="2013-08-01T16:29:04Z"
- content="""
-It seems like you can just put multiple source files on the command line:
-
- ed@ed-Ubu64 /tmp$ touch a b c d
- ed@ed-Ubu64 /tmp$ mkdir test
- ed@ed-Ubu64 /tmp$ rsync -avz a b c d test
- sending incremental file list
- a
- b
- c
- d
-
- sent 197 bytes received 88 bytes 570.00 bytes/sec
- total size is 0 speedup is 0.00
- ed@ed-Ubu64 /tmp$ ls test
- a b c d
-
-It also appears to work with remote transfers too.
-"""]]
diff --git a/doc/todo/faster_rsync_remotes/comment_3_2f6a9d23cb8351fbf0f60ed93752e76e._comment b/doc/todo/faster_rsync_remotes/comment_3_2f6a9d23cb8351fbf0f60ed93752e76e._comment
deleted file mode 100644
index 1911048be..000000000
--- a/doc/todo/faster_rsync_remotes/comment_3_2f6a9d23cb8351fbf0f60ed93752e76e._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.145"
- subject="comment 3"
- date="2013-08-01T16:58:49Z"
- content="""
-git-annex needs to build a specific directory structure on the rsync remote though. It seems it would need to build the whole tree locally, containing only the files it wants to send.
-
-When using encryption, it would need to encrypt all the files it's going to send and store them locally until it's built the tree. That could use a lot of disk space.
-
-Also, there's the problem of checking which files are already present in the remote, to avoid re-encrypting and re-sending them. Currently this is done by running rsync with the url of the file, and checking its exit code. rsync does not seem to have an interface that would allow checking multiple files in one call. So any optimisation of the number of rsync calls would only eliminate 1/2 of the current number.
-
-When using ssh:// urls, the rsync special remote already uses ssh connection caching, which I'd think would eliminate most of the overhead. (If you have a version of git-annex older than 4.20130417, you should upgrade to get this feature.) It should not take very long to start up a new rsync over a cached ssh connection. rsync:// is probably noticably slower.
-"""]]
diff --git a/doc/todo/faster_rsync_remotes/comment_4_3a2f45defebae3dde336ee5f40c26d7e._comment b/doc/todo/faster_rsync_remotes/comment_4_3a2f45defebae3dde336ee5f40c26d7e._comment
deleted file mode 100644
index 44d7d5511..000000000
--- a/doc/todo/faster_rsync_remotes/comment_4_3a2f45defebae3dde336ee5f40c26d7e._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawln4uCaqZRd5_nRQ-iLcJyGctIdw8ebUiM"
- nickname="Edward"
- subject="Thanks"
- date="2013-08-01T17:03:23Z"
- content="""
-I am using an old version of git-annex. I'll try the newer one and see if the connection caching helps!
-"""]]
diff --git a/doc/todo/file_copy_progress_bar.mdwn b/doc/todo/file_copy_progress_bar.mdwn
deleted file mode 100644
index 847c1d1eb..000000000
--- a/doc/todo/file_copy_progress_bar.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-Find a way to copy a file with a progress bar, while still preserving
-stat. Easiest way might be to use pv and fix up the permissions etc
-after?
-
-[[done]]
diff --git a/doc/todo/find_unused_in_any_commit.mdwn b/doc/todo/find_unused_in_any_commit.mdwn
new file mode 100644
index 000000000..11bbbd726
--- /dev/null
+++ b/doc/todo/find_unused_in_any_commit.mdwn
@@ -0,0 +1,14 @@
+`git annex unused` only looks at tags and branches. Some users would like
+to drop any objects that are not pointed to by any commit, but keep any
+object that any commit ever referenced.
+
+This could be a switch, like --ever.
+
+The implementation would need to walk the history of all branches and check
+all commits. This would tend to be slow. It could look at tags+branches as
+it does now as a first pass, and only do the slow part if there are objects
+not referred to by the tags+branches. And, it could stop looking through
+the whole commit history if there were no more objects to check. Still,
+gonna be slooow. Another optimisation would be to get only the objects
+changed by the commit, and not look at the whole tree as it appeared on
+each commit. --[[Joey]]
diff --git a/doc/todo/find_unused_in_any_commit/comment_1_cecdf4e8600fbcf5d1541e35a91fb37b._comment b/doc/todo/find_unused_in_any_commit/comment_1_cecdf4e8600fbcf5d1541e35a91fb37b._comment
new file mode 100644
index 000000000..04fe62666
--- /dev/null
+++ b/doc/todo/find_unused_in_any_commit/comment_1_cecdf4e8600fbcf5d1541e35a91fb37b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnRFOsnEk8AJg1mXlq3mJDdt1YdYepozE8"
+ nickname="Murmel"
+ subject="Other loop strategy?"
+ date="2014-11-13T21:42:57Z"
+ content="""
+My motiviation to have such a feature is to free space if a key is unused in the \"--ever\" sense. I think it is no problem if this is a slow operation, as you don't use it often. How about this strategy: Loop over keys, for each key find out with something like \"git log -S\" if it is used.
+"""]]
diff --git a/doc/todo/fsck.mdwn b/doc/todo/fsck.mdwn
deleted file mode 100644
index 1dcaad9a5..000000000
--- a/doc/todo/fsck.mdwn
+++ /dev/null
@@ -1,11 +0,0 @@
-add a git annex fsck that finds keys that have no referring file
-
-(done)
-
-* Need per-backend fsck support. sha1 can checksum all files in the annex.
- WORM can check filesize.
-
-* Both can check that annex.numcopies is satisfied. Probably only
- querying the locationlog, not doing an online verification.
-
-[[done]]
diff --git a/doc/todo/fsck_special_remotes.mdwn b/doc/todo/fsck_special_remotes.mdwn
deleted file mode 100644
index 7196baafe..000000000
--- a/doc/todo/fsck_special_remotes.mdwn
+++ /dev/null
@@ -1,13 +0,0 @@
-`git annex fsck --from remote`
-
-Basically, this needs to receive each file in turn from the remote, to a
-temp file, and then run the existing fsck code on it. Could be quite
-expensive, but sometimes you really want to check.
-
-An unencrypted directory special remote could be optimised, by not actually
-copying the file, just dropping a symlink, etc.
-
-The WORM backend doesn't care about file content, so it would be nice to
-avoid transferring the content at all, and only send the size.
-
-> [[done]] --[[Joey]]
diff --git a/doc/todo/git-annex-shell.mdwn b/doc/todo/git-annex-shell.mdwn
deleted file mode 100644
index a9e3b43ed..000000000
--- a/doc/todo/git-annex-shell.mdwn
+++ /dev/null
@@ -1,15 +0,0 @@
-[[done]]
-
-I've been considering adding a `git-annex-shell` command. This would
-be similar to `git-shell` (and in fact would pass unknown commands off to
-`git-shell`).
-
-## Reasons
-
-* Allows locking down an account to only be able to use git-annex (and
- git).
-* Avoids needing to construct complex shell commands to run on the remote
- system. (Mostly already avoided by the plumbing level commands.)
-* Could possibly allow multiple things to be done with one ssh connection
- in future.
-* Allows expanding `~` and `~user` in repopath on the remote system.
diff --git a/doc/todo/git-annex_ignores_GIT__95__SSH.mdwn b/doc/todo/git-annex_ignores_GIT__95__SSH.mdwn
new file mode 100644
index 000000000..9af05496a
--- /dev/null
+++ b/doc/todo/git-annex_ignores_GIT__95__SSH.mdwn
@@ -0,0 +1,39 @@
+### Please describe the problem.
+
+git uses environment variable GIT_SSH to determine SSH client.
+
+I set it to plink.exe because I extensively use pageant infrastructure and do NOT want to have 2 systems lying around.
+
+Unfortunately git-annex seems to ignore that.
+
+Even worse, it results in unpredicted behavior because the git part works (e.g. clone) whereas annex/rsync does not resulting in half-ok repositories without meaningful error messages.
+
+It only becomes evident when ssh.exe in the git repository is deleted.
+
+### What steps will reproduce the problem?
+
+Set %GIT_SSH% and remove ssh.exe
+
+You will get
+
+ git-annex: ssh: createProcess: does not exist (No such file or directory)
+ failed
+ git-annex: drop: 1 failed
+
+### What version of git-annex are you using? On what operating system?
+
+Windows 8,
+
+ $ git annex version
+ git-annex version: 5.20140411-gda795e0
+ build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV DNS Feeds Quvi TDFA CryptoHash
+ key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
+ remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier hook external
+ local repository version: 5
+ supported repository version: 5
+ upgrade supported from repository versions: 2 3 4
+
+
+### Please provide any additional information below.
+
+
diff --git a/doc/todo/git-annex_ignores_GIT__95__SSH/comment_1_958dd21d7e981232f03b4516521ac226._comment b/doc/todo/git-annex_ignores_GIT__95__SSH/comment_1_958dd21d7e981232f03b4516521ac226._comment
new file mode 100644
index 000000000..c13c3d089
--- /dev/null
+++ b/doc/todo/git-annex_ignores_GIT__95__SSH/comment_1_958dd21d7e981232f03b4516521ac226._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-05-16T16:42:41Z"
+ content="""
+This is good spotting of a git configuration that git-annex does not support.
+
+However, I doubt that even if I made it use `GIT_SSH`, it would be useful. git-annex uses several features that are probably unique to openssh, including connection caching. While you could disable annex.sshcaching and perhaps get a different ssh to work, it would be much slower.
+"""]]
diff --git a/doc/todo/git-annex_ignores_GIT__95__SSH/comment_2_319a7e8122e7bc25d9399ba463a16158._comment b/doc/todo/git-annex_ignores_GIT__95__SSH/comment_2_319a7e8122e7bc25d9399ba463a16158._comment
new file mode 100644
index 000000000..1294196ba
--- /dev/null
+++ b/doc/todo/git-annex_ignores_GIT__95__SSH/comment_2_319a7e8122e7bc25d9399ba463a16158._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="divB"
+ ip="171.67.172.81"
+ subject="comment 2"
+ date="2014-05-17T23:58:19Z"
+ content="""
+Hi Joey,
+
+Thanks for your answer. In my opinion, this would be an important requirement for various reasons:
+
+1.) It is very confusing and results in unpredictable errors. I spent days in finding out what caused all the weird stuff that happened. Even if it is not supported, an error message or at least warning should be issued.
+
+2.) At least in Windows, plink.exe is the quasi-standard SSH client. All SW I am aware of supports at least plink.exe as alternative to openssh (SVN, git, unison, ...). Even within cygwin I often use plink for X11 forwarding etc. If features like SSH caching do not work with that it's totally fine.
+
+3.) Even for a unix environment, it is critical to be able to use a wrapper (or at least to configure SSH parameters). In my opinion, this should and must work consistently (git, git-annex and rsync). For example what if I have a dedicated public key for a repository and to not want to use %HOME%\.ssh\id_rsa ?
+For unison, I use a wrapper my_ssh.cmd which wraps specialized parameters (in particular SSH key, port) with plink.exe to ssh.exe's interface. Similarly, I might be interested in disabling agent functionality and use GSSAPI etc. etc.
+
+A little bit OT now: I already wondered if and how inefficient git-annex is in this regard. For example, if I sync content, it seems that ssh opens a new connection for each file! (at least each file results in a signing request in my agent). This happens even if I use ssh.exe. Is there anything wrong?
+
+Thanks
+
+"""]]
diff --git a/doc/todo/git-annex_ignores_GIT__95__SSH/comment_3_cc1936f18721a912bb77903be6c4a45f._comment b/doc/todo/git-annex_ignores_GIT__95__SSH/comment_3_cc1936f18721a912bb77903be6c4a45f._comment
new file mode 100644
index 000000000..ff50c0599
--- /dev/null
+++ b/doc/todo/git-annex_ignores_GIT__95__SSH/comment_3_cc1936f18721a912bb77903be6c4a45f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm5WyknJirJJridJjiPNgrlYxGG9xrZBvA"
+ nickname="Daniel"
+ subject="comment 3"
+ date="2014-06-06T10:49:27Z"
+ content="""
+Agreed. I'd rather lose connection caching than have to maintain both putty keys and openssh keys on my windows machines.
+"""]]
diff --git a/doc/todo/git-annex_unused_eats_memory.mdwn b/doc/todo/git-annex_unused_eats_memory.mdwn
deleted file mode 100644
index 760a6ccf5..000000000
--- a/doc/todo/git-annex_unused_eats_memory.mdwn
+++ /dev/null
@@ -1,32 +0,0 @@
-`git-annex unused` has to compare large sets of data
-(all keys with content present in the repository,
-with all keys used by files in the repository), and so
-uses more memory than git-annex typically needs.
-
-It used to be a lot worse (hundreds of megabytes).
-
-Now it only needs enough memory to store a Set of all Keys that currently
-have content in the annex. On a lightly populated repository, it runs in
-quite low memory use (like 8 mb) even if the git repo has 100 thousand
-files. On a repository with lots of file contents, it will use more.
-
-Still, I would like to reduce this to a purely constant memory use,
-as running in constant memory no matter the repo size is a git-annex design
-goal.
-
-One idea is to use a bloom filter.
-For example, construct a bloom filter of all keys used by files in
-the repository. Then for each key with content present, check if it's
-in the bloom filter. Since there can be false positives, this might
-miss finding some unused keys. The probability/size of filter
-could be tunable.
-
-> Fixed in `bloom` branch in git. --[[Joey]]
->> [[done]]! --[[Joey]]
-
-Another way might be to scan the git log for files that got removed
-or changed what key they pointed to. Correlate with keys with content
-currently present in the repository (possibly using a bloom filter again),
-and that would yield a shortlist of keys that are probably not used.
-Then scan thru all files in the repo to make sure that none point to keys
-on the shortlist.
diff --git a/doc/todo/git_annex_init_:_include_repo_description_and__47__or_UUID_in_commit_message.mdwn b/doc/todo/git_annex_init_:_include_repo_description_and__47__or_UUID_in_commit_message.mdwn
deleted file mode 100644
index be7e2dacc..000000000
--- a/doc/todo/git_annex_init_:_include_repo_description_and__47__or_UUID_in_commit_message.mdwn
+++ /dev/null
@@ -1,13 +0,0 @@
-Would help alot when having to add large(ish) amounts of remotes.
-
-Maybe detect this kind of commit message and ask user whether to automatically add them? See [[auto_remotes]]:
-> Question: When should git-annex update the remote.log? (If not just on init.) Whenever it reads in a repo's remotes?
-
-----
-
-I'm not sure that the above suggestion is going down a path that really
-makes sense. If you want a list of repository UUIDs and descriptions,
-it's there in machine-usable form in `.git-annex/uuid.log`, there is no
-need to try to pull this info out of git commit messages. --[[Joey]]
-
-[[done]]
diff --git a/doc/todo/git_annex_open.mdwn b/doc/todo/git_annex_open.mdwn
new file mode 100644
index 000000000..8cb32bd0a
--- /dev/null
+++ b/doc/todo/git_annex_open.mdwn
@@ -0,0 +1,9 @@
+I had an idea the other night that there could be a `git annex open` command. What this would do would be the following:
+
+* if the file is already present locally: just `xdg-open` it
+* if it is not present and cannot be streamed: `git annex get "$@" && xdg-open "$@"`
+* if it can be streamed: `git annex get "$@"` and `xdg-open` when enough content has been streamed that we are confident it will play completely (unless network conditions change)
+
+This would need some [[metadata]] support partly to guess if the file can be streamed, but also to find the content. It would also assume some more intelligence in `git annex get` where git annex would have progress information (maybe through [[chunking]]?).
+
+How does that idea sound? --[[anarcat]]
diff --git a/doc/todo/git_annex_open/comment_1_67d90a1cb104d98e816354d96e1b0306._comment b/doc/todo/git_annex_open/comment_1_67d90a1cb104d98e816354d96e1b0306._comment
new file mode 100644
index 000000000..e1b442d17
--- /dev/null
+++ b/doc/todo/git_annex_open/comment_1_67d90a1cb104d98e816354d96e1b0306._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-11-10T17:11:52Z"
+ content="""
+Hmm, well, there have been requests for access to files as they're being
+get-ed before. This does have the advantage of providing that,
+but I don't know if I like trying in xdg-open, which might not always
+be the way a user wants to open a file.
+
+git-annex does have progress info available while a file is being
+transferred. (If nothing else, it tends to know the key size, and can
+see the file size.) However I don't know how it could tell if "enough"
+of the file was available to stream it.
+
+I guess what I'd be most comfortable with is putting in plumbing.
+Like making `examinekey` be able to report the temporary file
+that is used when a key is being downloaded. It might also make sense to
+have a bit of plumbing that waits for a file being downloaded to get
+to X% complete, or something.
+"""]]
diff --git a/doc/todo/gitolite_and_gitosis_support.mdwn b/doc/todo/gitolite_and_gitosis_support.mdwn
deleted file mode 100644
index 2fca83986..000000000
--- a/doc/todo/gitolite_and_gitosis_support.mdwn
+++ /dev/null
@@ -1,39 +0,0 @@
-gitosis and gitolite should support git-annex being used to send/receive
-files from the repositories they manage. Users with read-only access
-could only get files, while users with write access could also put and drop
-files.
-
-Doing this right requires modifying both programs, to add [[git-annex-shell]]
-to the list of things they can run, and only allow through appropriate
-git-annex-shell subcommands to read-only users.
-
-I have posted an RFC for modifying gitolite to the
-[gitolite mailing list](http://groups.google.com/group/gitolite?lnk=srg).
-
-> I have not developed a patch yet, but all that git-annex needs is a way
-> to ssh to the server and run the git-annex-shell command there.
-> git-annex-shell is very similar to git-shell. So, one way to enable
-> it is simply to set GL_ADC_PATH to a directory containing git-annex-shell.
->
-> But, that's not optimal, since git-annex-shell will send off receive-pack
-> commands to git, which would bypass gitolite's permissions checking.
-> Also, it makes sense to limit readonly users to only download, not
-> upload/delete files from git-annex. Instead, I suggest adding something
-> like this to gitolite's config:
-
- # If set, users with W access can write file contents into the git-annex,
- # and users with R access can read file contents from the git-annex.
- $GL_GIT_ANNEX = 0;
-
-> If this makes sense, I'm sure I can put a patch together for your
-> review. It would involve modifying gl-auth-command so it knows how
-> to run git-annex-shell, and how to parse out the "verb" from a
-> git-annex-shell command line, and modifying R_COMMANDS and W_COMMANDS.
-
-As I don't write python, someone else is needed to work on gitosis.
---[[Joey]]
-
-> [[done]]; support for gitolite is in its `pu` branch, and some changes
-> made to git-annefor gitolite is in its `pu` branch, and some changes
-> made to git-annex. Word is gitosis is not being maintained so I won't
-> worry about try to support it. --[[Joey]]
diff --git a/doc/todo/gitrm.mdwn b/doc/todo/gitrm.mdwn
deleted file mode 100644
index e41c33462..000000000
--- a/doc/todo/gitrm.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-how to handle git rm file? (should try to drop keys that have no
-referring file, if it seems safe..)
-
-[[done]] -- I think that git annex unused and dropunused are the best
-solution to this.
diff --git a/doc/todo/http_git_annex_404_retry.mdwn b/doc/todo/http_git_annex_404_retry.mdwn
deleted file mode 100644
index 69680f0a1..000000000
--- a/doc/todo/http_git_annex_404_retry.mdwn
+++ /dev/null
@@ -1,18 +0,0 @@
-A repository like http://annex.debconf.org/debconf-share/ has a git repo
-published via http. When getting files from such a repo, git-annex tries
-two urls. One url would be used by a bare repo, and the other by a non-bare
-repo. (This is due to the directory hashing change.) Result is every file
-download from a non-bare http repo starts with a 404 and then it retries
-with the right url.
-
-Since git-annex already downloads the .git/config to find the uuid of the
-http repo, it could also look at it to see if the repo is bare. If not,
-set a flag, and try the two urls in reverse order, which would almost
-always avoid this 404 problem.
-
-(The real solution is probably to flag day and get rid of the old-style
-directory hashing, but that's been discussed elsewhere.)
-
---[[Joey]]
-
-[[done]]
diff --git a/doc/todo/http_headers.mdwn b/doc/todo/http_headers.mdwn
deleted file mode 100644
index 9f61bdc93..000000000
--- a/doc/todo/http_headers.mdwn
+++ /dev/null
@@ -1,8 +0,0 @@
-The IA would find it useful to be able to control the http headers
-git-annex get, addurl, etc uses. This will allow setting cookies, for
-example.
-
-* annex-web-headers=blah
-* Perhaps also annex-web-headers-command=blah
-
-[[done]]
diff --git a/doc/todo/immutable_annexed_files.mdwn b/doc/todo/immutable_annexed_files.mdwn
deleted file mode 100644
index b26838e95..000000000
--- a/doc/todo/immutable_annexed_files.mdwn
+++ /dev/null
@@ -1,8 +0,0 @@
-> josh: Do you do anything in git-annex to try to make the files immutable?
-> For instance, removing write permission, or even chattr?
-> joey: I don't, but that's a very good idea
-> josh: Oh, I just thought of another slightly crazy but handy idea.
-> josh: I'd hate to run into a program which somehow followed the symlink and then did an unlink to replace the file.
-> josh: To break that, you could create a new directory under annex's internal directory for each file, and make the directory have no write permission.
-
-[[done]] and done --[[Joey]]
diff --git a/doc/todo/incremental_fsck.mdwn b/doc/todo/incremental_fsck.mdwn
deleted file mode 100644
index 7c56328b9..000000000
--- a/doc/todo/incremental_fsck.mdwn
+++ /dev/null
@@ -1,24 +0,0 @@
-Justin Azoff realized git-annex should have an incremental fsck.
-
-This requires storing the last fsck time of each object.
-
-I would not be strongly opposed to sqlite, but I think there are other
-places the data could be stored. One possible place is the mode or mtime
-of the .git/annex/objects/xx/yy/$key directories (the parent directories
-of where the content is stored). Perhaps the sticky bit could be used to
-indicate the content has been fsked, and the mtime indicate the time
-of last fsck. Anything that dropped or put in content would need to
-clear the sticky bit. --[[Joey]]
-
-> Basic incremental fsck is done now.
->
-> Some enhancements would include:
->
-> * --max-age=30d Once the incremental fsck completes and was started 30 days ago,
-> start a new one.
-> * --time-limit --size-limit --file-limit: Limit how long the fsck runs.
-
->> Calling this [[done]]. The `--incremental-schedule` option
->> allows scheduling time between incremental fscks. `--time-limit` is
->> done. I implemented `--smallerthan` independently. Not clear what
->> `--file-limit` would be. --[[Joey]]
diff --git a/doc/todo/incremental_fsck/comment_1_609b21141dd5686b2c0eaef2b8d63229._comment b/doc/todo/incremental_fsck/comment_1_609b21141dd5686b2c0eaef2b8d63229._comment
deleted file mode 100644
index 709ba078c..000000000
--- a/doc/todo/incremental_fsck/comment_1_609b21141dd5686b2c0eaef2b8d63229._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
- nickname="Justin"
- subject="comment 1"
- date="2012-09-20T14:11:57Z"
- content="""
-I have a [proof of concept written in python](https://github.com/JustinAzoff/git-annex-background-fsck/blob/master/git-annex-background-fsck).
-
-You can run it and point it the root of an annex or to a subdirectory. In my brief testing it seems to work :-)
-
-the goal would be to have options like
-
- git annex fsck /data/annex --check-older-than 1w --check-for 2h --max-load-avg 0.5
-"""]]
diff --git a/doc/todo/inject_on_import.mdwn b/doc/todo/inject_on_import.mdwn
new file mode 100644
index 000000000..d33267987
--- /dev/null
+++ b/doc/todo/inject_on_import.mdwn
@@ -0,0 +1,63 @@
+Would it be possible to add an `--inject` option to import?
+
+Say, for example, I have an annex on computer A which has a subset of files and a directory of files which are potentional duplicates of files in the annex.
+
+I would like to do something like this:
+
+ mkdir ~/annex/import
+ cd ~/annex/import
+ git annex import --deduplicate --inject ~/directory/of/files
+
+This would do the same as `--deduplicate`, except if the file is not present in the annex, it would be injected. For example:
+
+Annex knows about A and B, A is present but B is not.
+$DIR contains A, B and C.
+
+A would be deleted from $DIR due to `--deduplicate`.
+B would be injected into the repo (making it present) due to `--inject`, then deleted from $DIR.
+C would be added to the annex, resulting in this
+
+ $ ls ~/annex/import
+ C
+
+> You seem to have described exactly what --deduplicate already does.
+> For example:
+
+<pre>
+# mkdir x
+# cd x
+# l
+# git init
+Initialized empty Git repository in /home/joey/tmp/x/.git/
+# git annex init
+init ok
+(Recording state in git...)
+# echo hello > foo
+# git annex add foo
+add foo ok
+(Recording state in git...)
+# mkdir ../src
+# echo hello > ../src/bar
+# echo new > ../src/baz
+# git annex import --deduplicate ../src
+import src/bar (duplicate) ok
+import src/baz ok
+(Recording state in git...)
+# ls
+foo@ src/
+# ls ../src/
+# ls src
+baz@
+</pre>
+
+> And, if you look at the documentation for --deduplicate,
+> this is what it says:
+
+<pre>
+ To only import files whose content has not been seen
+ before by git-annex, use the --deduplicate option.
+ Duplicate files will be deleted from the import loca‐
+ tion.
+</pre>
+
+> So, [[done]] I suppose... --[[Joey]]
diff --git a/doc/todo/integrate_support_for_spideroak_as_archive__47__backup.mdwn b/doc/todo/integrate_support_for_spideroak_as_archive__47__backup.mdwn
new file mode 100644
index 000000000..c71df466c
--- /dev/null
+++ b/doc/todo/integrate_support_for_spideroak_as_archive__47__backup.mdwn
@@ -0,0 +1,9 @@
+SpiderOak is a great backup service and many of us have unlimited accounts with them since World Backup Day. That makes SpiderOak a very interesting candidate for use as an archive or backup node. I can think of only two ways to go about this:
+
+1. Designate one of your computers as an archive/backup and use spideroak independantly to sync that archive. This is very unattractive, since it makes the spideroak backup completely unknown to git-annex.
+
+2. Integrate the SpiderOak CLI tool somehow as a remote. I don't know to what extent this would be possible, but if it were, that'd be awesome. And a lot of work, presumably.
+
+Bonus option:
+
+3. Can the SpiderOak API be useful? https://spideroak.com/faq/questions/37/how_do_i_use_the_spideroak_web_api/
diff --git a/doc/todo/integrate_support_for_spideroak_as_archive__47__backup/comment_1_a47ea814f6d7727bbd0eeca6d1fd3219._comment b/doc/todo/integrate_support_for_spideroak_as_archive__47__backup/comment_1_a47ea814f6d7727bbd0eeca6d1fd3219._comment
new file mode 100644
index 000000000..7790a7f2d
--- /dev/null
+++ b/doc/todo/integrate_support_for_spideroak_as_archive__47__backup/comment_1_a47ea814f6d7727bbd0eeca6d1fd3219._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="216.145.95.162"
+ subject="comment 1"
+ date="2014-05-19T15:05:49Z"
+ content="""
+If spideroak has a CLI tool that can get/put/delete individual files, it should be quite easy to use [[the_external_special_remote|special_remotes/external]] to support it. The demo shell script could be used as a starting place.
+
+I built that so that others can easily write special remotes, and so unless spideroak's CLI is free software, I don't anticipate working on this myself.
+"""]]
diff --git a/doc/todo/link_file_to_remote_repo_feature.mdwn b/doc/todo/link_file_to_remote_repo_feature.mdwn
deleted file mode 100644
index d6b41e805..000000000
--- a/doc/todo/link_file_to_remote_repo_feature.mdwn
+++ /dev/null
@@ -1,52 +0,0 @@
-I have two repos, using SHA1 backend and both using git.
-The first one is a laptop, the second one is a usb drive.
-
-When I drop a file on the laptop repo, the file is not available on that repo until I run *git annex get*
-But when the usb drive is plugged in the file is actually available.
-
-How about adding a feature to link some/all files to the remote repo?
-
-e.g.
-We have *railscasts/196-nested-model-form-part-1.mp4* file added to git, and only available on the usb drive:
-
- $ git annex whereis 196-nested-model-form-part-1.mp4
- whereis 196-nested-model-form-part-1.mp4 (1 copy)
- a7b7d7a4-2a8a-11e1-aebc-d3c589296e81 -- origin (Portable usb drive)
-
-I can see the link with:
-
- $ cd railscasts
- $ ls -ls 196*
- 8 lrwxr-xr-x 1 framallo staff 193 Dec 20 05:49 196-nested-model-form-part-1.mp4 -> ../.git/annex/objects/Wz/6P/SHA256-s16898930--43679c67cd968243f58f8f7fb30690b5f3f067574e318d609a01613a2a14351e/SHA256-s16898930--43679c67cd968243f58f8f7fb30690b5f3f067574e318d609a01613a2a14351e
-
-I save this in a variable just to make the example more clear:
-
- ID=".git/annex/objects/Wz/6P/SHA256-s16898930--43679c67cd968243f58f8f7fb30690b5f3f067574e318d609a01613a2a14351e/SHA256-s16898930--43679c67cd968243f58f8f7fb30690b5f3f067574e318d609a01613a2a14351e"
-
-The file doesn't exist on the local repo:
-
- $ ls ../$ID
- ls: ../$ID: No such file or directory
-
-however I can create a link to access that file on the remote repo.
-First I create a needed dir:
-
- $ mkdir ../.git/annex/objects/Wz/6P/SHA256-s16898930--43679c67cd968243f58f8f7fb30690b5f3f067574e318d609a01613a2a14351e/
-
-Then I link to the remote file:
-
- $ ln -s /mnt/usb_drive/repo_folder/$ID ../$ID
-
-now I can open the file in the laptop repo.
-
-
-I think it could be easy to implement. Maybe It's a naive approach, but looks apealing.
-Checking if it's a real file or a link shouldn't impact on performance.
-The limitation is that it would work only with remote repos on local dirs
-
-Also allows you to have one directory structure like AFS or other distributed FS. If the file is not local I go to the remote server.
-Which is great for apps like Picasa, Itunes, and friends that depends on the file location.
-
-> This is a duplicate of [[union_mounting]]. So closing it: [[done]].
->
-> It's a good idea, but making sure git-annex correctly handles these links in all cases is a subtle problem that has not yet been tackled. --[[Joey]]
diff --git a/doc/todo/make_status_show_staged_files.mdwn b/doc/todo/make_status_show_staged_files.mdwn
new file mode 100644
index 000000000..cd2de5bce
--- /dev/null
+++ b/doc/todo/make_status_show_staged_files.mdwn
@@ -0,0 +1,23 @@
+### Please describe the problem.
+
+`git annex status` does not report the fact that some files have been added but not yet committed.
+
+### What steps will reproduce the problem?
+
+ $ # alwayscommit = false
+ $ echo "new" > new-file
+ $ git annex status
+ ? new-file
+ $ git annex add
+ add new-file
+ $ git annex status
+ $
+
+Using the `git status` command directly will show the added files
+
+ $ git -c core.bare=false status --porcelain | grep -v '^ T'
+ AT new-file
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex version: 5.20141024-g613f396
diff --git a/doc/todo/make_status_show_staged_files/comment_1_3874f5da5a300b7d443e1ad6373b4099._comment b/doc/todo/make_status_show_staged_files/comment_1_3874f5da5a300b7d443e1ad6373b4099._comment
new file mode 100644
index 000000000..7e7cc139b
--- /dev/null
+++ b/doc/todo/make_status_show_staged_files/comment_1_3874f5da5a300b7d443e1ad6373b4099._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-11-03T17:03:34Z"
+ content="""
+It's documentation says it shows files that have been deleted/modified/are
+not checked into git. Not staged files.
+
+So, this is not a bug report, it's a request to make git annex status list
+more files.
+"""]]
diff --git a/doc/todo/makefile:_respect___36__PREFIX.mdwn b/doc/todo/makefile:_respect___36__PREFIX.mdwn
deleted file mode 100644
index 995ef809f..000000000
--- a/doc/todo/makefile:_respect___36__PREFIX.mdwn
+++ /dev/null
@@ -1,25 +0,0 @@
-The `Makefile` should respect a `PREFIX` passed on the commandline so git-annex can be installed in (say) `$HOME`.
-
-Simple patch:
-
-[[!format diff """
-diff --git a/Makefile b/Makefile
-index b8995b2..5b1a6d4 100644
---- a/Makefile
-+++ b/Makefile
-@@ -3,7 +3,7 @@ all=git-annex $(mans) docs
-
- GHC?=ghc
- GHCMAKE=$(GHC) $(GHCFLAGS) --make
--PREFIX=/usr
-+PREFIX?=/usr
- CABAL?=cabal # set to "./Setup" if you lack a cabal program
-
- # Am I typing :make in vim? Do a fast build.
-"""]]
-
---[[anarcat]]
-
-> [[done]] --[[Joey]]
-
-> > thanks! ;) --[[anarcat]]
diff --git a/doc/todo/mdwn2man:_make_backticks_bold.mdwn b/doc/todo/mdwn2man:_make_backticks_bold.mdwn
deleted file mode 100644
index 21707a309..000000000
--- a/doc/todo/mdwn2man:_make_backticks_bold.mdwn
+++ /dev/null
@@ -1,22 +0,0 @@
-The traditionnal way of marking commandline flags in a manpage is with a `.B` (for Bold, I guess). It doesn't seem to be used by mdwn2man, which makes the manpage look a little more dull than it could.
-
-The following patch makes those options come out more obviously:
-
-[[!format diff """
-diff --git a/Build/mdwn2man b/Build/mdwn2man
-index ba5919b..7f819ad 100755
---- a/Build/mdwn2man
-+++ b/Build/mdwn2man
-@@ -8,6 +8,7 @@ print ".TH $prog $section\n";
-
- while (<>) {
- s{(\\?)\[\[([^\s\|\]]+)(\|[^\s\]]+)?\]\]}{$1 ? "[[$2]]" : $2}eg;
-+ s/\`([^\`]*)\`/\\fB$1\\fP/g;
- s/\`//g;
- s/^\s*\./\\&./g;
- if (/^#\s/) {
-"""]]
-
-I tested it against the git-annex manpage and it seems to work well. --[[anarcat]]
-
-> [[done]], thanks --[[Joey]]
diff --git a/doc/todo/merge_in_ram___40__disk__41____63__.mdwn b/doc/todo/merge_in_ram___40__disk__41____63__.mdwn
new file mode 100644
index 000000000..42090f673
--- /dev/null
+++ b/doc/todo/merge_in_ram___40__disk__41____63__.mdwn
@@ -0,0 +1,8 @@
+git-annex is great. But for my repos the merge and recording state operations take forever.
+
+(merging fotos_enc_pg/synced/git-annex into git-annex...)
+
+Since git-annex is another branch (than master) and git usually needs a worktree for merging I assume that git-annex branch is temporarily checked out somewhere. Would it be possible to move this operation to RAM? Or a RAM-Disk?
+
+> No, it is not checked out. All operations are done with the most
+> effective available git plumbing. [[done]] --[[Joey]]
diff --git a/doc/todo/network_remotes.mdwn b/doc/todo/network_remotes.mdwn
deleted file mode 100644
index 42efa832f..000000000
--- a/doc/todo/network_remotes.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-Support for remote git repositories (ssh:// specifically can be made to
-work, although the other end probably needs to have git-annex
-installed..)
-
-[[done]], at least get and put work..
diff --git a/doc/todo/nicer_whereis_output.mdwn b/doc/todo/nicer_whereis_output.mdwn
deleted file mode 100644
index 871eee01a..000000000
--- a/doc/todo/nicer_whereis_output.mdwn
+++ /dev/null
@@ -1,100 +0,0 @@
-We had some informal discussions on IRC about improving the output of the `whereis` command.
-
-[[!toc levels=2]]
-
-First version: columns
-======================
-
-[[mastensg]] started by implementing a [simple formatter](https://gist.github.com/mastensg/6500982) that would display things in columns [screenshot](http://www.ping.uio.no/~mastensg/whereis.png)
-
-Second version: Xs
-==================
-
-After some suggestions from [[joey]], [[mastensg]] changed the format slightly ([screenshot](http://www.ping.uio.no/~mastensg/whereis2.png)):
-
-[[!format txt """
-17:01:34 <joeyh> foo
-17:01:34 <joeyh> |bar
-17:01:34 <joeyh> ||baz (untrusted)
-17:01:34 <joeyh> |||
-17:01:34 <joeyh> XXx 3? img.png
-17:01:36 <joeyh> _X_ 1! bigfile
-17:01:37 <joeyh> XX_ 2 zort
-17:01:39 <joeyh> __x 1?! maybemissing
-17:02:09 * joeyh does a s/\?/+/ in the above
-17:02:24 <joeyh> and decrements the counters for untrusted
-17:03:37 <joeyh> __x 0+! maybemissing
-"""]]
-
-Third version: incremental
-==========================
-
-Finally, [[anarcat]] worked on making it run faster on large repositories, in a [fork](https://gist.github.com/anarcat/6502988) of that first gist. Then paging was added (so headers are repeated).
-
-Fourth version: tuning and blocked
-==================================
-
-[[TobiasTheViking]] provided some bugfixes, and the next step was to implement the trusted/untrusted detection, and have a counter.
-
-This required more advanced parsing of the remotes, and instead of starting to do some JSON parsing, [[anarcat]] figured it was time to learn some Haskell instead.
-
-Current status: needs merge
-===========================
-
-So right now, the most recent version of the python script is in [anarcat's gist](https://gist.github.com/anarcat/6502988) and works reasonably well. However, it doesn't distinguish between trusted and untrusted repos and so on.
-
-Furthermore, we'd like to see this factored into the `whereis` command directly. A [raw.hs](http://codepad.org/miVJb5oK) file has been programmed by `mastensg`, and is now available in the above gist. It fits the desired output and prototypes, and has been `haskellized` thanks to [[guilhem]].
-
-Now we just need to merge those marvelous functions in `Whereis.hs` - but I can't quite figure out where to throw that code, so I'll leave it to someone more familiar with the internals of git-annex. The most recent version is still in [anarcat's gist](https://gist.github.com/anarcat/6502988). --[[anarcat]]
-
-Desired output
---------------
-
-The output we're aiming for is:
-
- foo
- |bar
- ||baz (untrusted)
- |||
- XXx 2+ img.png
- _X_ 1! bigfile
- XX_ 2 zort
- __x 0+! maybemissing
-
-Legend:
-
- * `_` - file missing from repo
- * `x` - file may be present in untrusted repo
- * `X` - file is present in trusted repo
- * `[0-9]` - number of copies present in trusted repos
- * `+` - indicates there may be more copies present
- * `!` - indicates only one copy is left
-
-Implementation notes
---------------------
-
-[[!format txt """
-20:48:18 <joeyh> if someone writes me a headerWhereis :: [(RemoteName, TrustLevel)] -> String and a formatWhereis :: [(RemoteName, TrustLevel, UUID)] -> [UUD] -> FileName -> String , I can do the rest ;)
-20:49:22 <joeyh> make that second one formatWhereis :: [(RemoteName, TrueLevel, Bool)] -> FileName -> String
-20:49:37 <joeyh> gah, typos
-20:49:45 <joeyh> suppose you don't need the RemoteName either
-"""]]
-
-> So, I incorporated this, in a new remotes command.
-> Showing all known repositories seemed a bit much
-> (I have 30-some known repositories in some cases),
-> so just showing configured remotes seems a good simplification.
-> [[done]]
-> --[[Joey]]
-
-> > I would have prefered this to be optional since I don't explicitely configure all remotes in git, especially if I can't reach them all the time (e.g. my laptop). It seems to me this should at least be an option, but I am confused as to why `Remote.List.remoteList` doesn't list all remotes the same way `Remote.remote_list` does... Also, it's unfortunate that the +/!/count flags have been dropped, it would have been useful... Thanks for the merge anyways! --[[done]]
-> >
-> > The more I look at this, the more i think there are a few things wrong with the new `remotes` command.
-> >
-> > 1. the name is confusing: being a git addict, I would expect the `git annex remote` command to behave like the `git remote` command: list remotes, add remotes, remove remotes and so on. it would actually be useful to have such a command (which would replace `initremote`, I guess). i recommend replacing the current `whereis` command, even if enabled through a special flag
-> >
-> > 2. its behavior is inconsistent with other git annex commands: `git annex status`, for example, lists information about all remotes, regardless of whether they are configured in git. `remotes` (whatever it's called), should do the same, or at least provide an option to allow the user to list files on all remotes. The way things stand, there is no way to list files on non-git remotes, even if they are added explicitely as a remote, if the remote is not actually reachable: the files are just marked as absent (even thought `whereis` actually finds them). i recommend showing all remotes regardless, either opt-in or opt-out using a flag.
-> >
-> > 3. having the `!` flag, at least, would be useful because it would allow users to intuitively grep for problematic files without having to learn extra syntax. same with + and having an explicit count.
-> >
-> > thanks. --[[anarcat]]
diff --git a/doc/todo/notifications.mdwn b/doc/todo/notifications.mdwn
new file mode 100644
index 000000000..d332d1029
--- /dev/null
+++ b/doc/todo/notifications.mdwn
@@ -0,0 +1,6 @@
+Just started today with git-annex and it looks great replacement for proprietary syncing solutions (well in allot of aspects it's much better than proprietary solutions) but I do believe desktop and email notifications are must have features.
+
+I think these services would be nice to have: growl, libnotify, email, twitter (publicly sharing with a group or repository stored on public server for users to download).
+
+> git-annex has desktop notifications. I think that if you want something
+> beyond that, you should script it. So, [[done]] --[[Joey]]
diff --git a/doc/todo/object_dir_reorg_v2.mdwn b/doc/todo/object_dir_reorg_v2.mdwn
deleted file mode 100644
index 49666ddc7..000000000
--- a/doc/todo/object_dir_reorg_v2.mdwn
+++ /dev/null
@@ -1,25 +0,0 @@
-Several things suggest now would be a good time to reorgaize the object
-directory. This would be annex.version=2. It will be slightly painful for
-all users, so this should be the *last* reorg in the forseeable future.
-
-1. Remove colons from filenames, for [[bugs/fat_support]]
-
-2. Add hashing, since some filesystems do suck (like er, fat at least :)
- [[forum/hashing_objects_directories]]
- (Also, may as well hash .git-annex/* while at it -- that's what
- really gets big.)
-
-3. Add filesize metadata for [[bugs/free_space_checking]]. (Currently only
- present in WORM, and in an ad-hoc way.)
-
-4. Perhaps use a generic format that will allow further metadata to be
- added later. For example,
- "bSHA1,s101111,kf3101c30bb23467deaec5d78c6daa71d395d1879"
-
- (Probably everything after ",k" should be part of the key, even if it
- contains the "," separator character. Otherwise an escaping mechanism
- would be needed.)
-
-[[done]] now!
-
-Although [[bugs/free_space_checking]] is not quite there --[[Joey]]
diff --git a/doc/todo/object_dir_reorg_v2/comment_1_ba03333dc76ff49eccaba375e68cb525._comment b/doc/todo/object_dir_reorg_v2/comment_1_ba03333dc76ff49eccaba375e68cb525._comment
deleted file mode 100644
index 261c2a51f..000000000
--- a/doc/todo/object_dir_reorg_v2/comment_1_ba03333dc76ff49eccaba375e68cb525._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 1"
- date="2011-03-16T01:16:48Z"
- content="""
-If you support generic meta-data, keep in mind that you will need to do conflict resolution. Timestamps may not be synched across all systems, so keeping a log of old metadata could be used, sorting by history and using the latest. Which leaves the situation of two incompatible changes. This would probably mean manual conflict resolution. You will probably have thought of this already, but I still wanted to make sure this is recorded. -- RichiH
-"""]]
diff --git a/doc/todo/object_dir_reorg_v2/comment_2_81276ac309959dc741bc90101c213ab7._comment b/doc/todo/object_dir_reorg_v2/comment_2_81276ac309959dc741bc90101c213ab7._comment
deleted file mode 100644
index 9785f1989..000000000
--- a/doc/todo/object_dir_reorg_v2/comment_2_81276ac309959dc741bc90101c213ab7._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 2"
- date="2011-03-16T01:19:25Z"
- content="""
-Hmm, I added quite a few comments at work, but they are stuck in moderation. Maybe I forgot to log in before adding them. I am surprised this one appeared immediately. -- RichiH
-"""]]
diff --git a/doc/todo/object_dir_reorg_v2/comment_3_79bdf9c51dec9f52372ce95b53233bb2._comment b/doc/todo/object_dir_reorg_v2/comment_3_79bdf9c51dec9f52372ce95b53233bb2._comment
deleted file mode 100644
index 886941be7..000000000
--- a/doc/todo/object_dir_reorg_v2/comment_3_79bdf9c51dec9f52372ce95b53233bb2._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 1"
- date="2011-03-15T14:08:41Z"
- content="""
-What is the potential time-frame for this change? As I am not using git-annex for production yet, I can see myself waiting to avoid any potential hassle.
-
-Supporting generic metadata seems like a great idea. Though if you are going this path, wouldn't it make sense to avoid metastore for mtime etc and support this natively without outside dependencies?
-
--- RichiH
-"""]]
diff --git a/doc/todo/object_dir_reorg_v2/comment_4_93aada9b1680fed56cc6f0f7c3aca5e5._comment b/doc/todo/object_dir_reorg_v2/comment_4_93aada9b1680fed56cc6f0f7c3aca5e5._comment
deleted file mode 100644
index 475359abb..000000000
--- a/doc/todo/object_dir_reorg_v2/comment_4_93aada9b1680fed56cc6f0f7c3aca5e5._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 4"
- date="2011-03-16T03:22:45Z"
- content="""
-Well, I spent a few hours playing this evening in the 'reorg' branch in git. It seems to be shaping up pretty well; type-based refactoring in haskell makes these kind of big systematic changes a matter of editing until it compiles. And it compiles and test suite passes. But, so far I've only covered 1. 3. and 4. on the list, and have yet to deal with upgrades.
-
-I'd recommend you not wait before using git-annex. I am committed to provide upgradability between annexes created with all versions of git-annex, going forward. This is important because we can have offline archival drives that sit unused for years. Git-annex will upgrade a repository to current standard the first time it sees it, and I hope the upgrade will be pretty smooth. It was not bad for the annex.version 0 to 1 upgrade earlier. The only annoyance with upgrades is that it will result in some big commits to git, as every symlink in the repo gets changed, and log files get moved to new names.
-
-(The metadata being stored with keys is data that a particular backend can use, and is static to a given key, so there are no merge issues (and it won't be used to preserve mtimes, etc).)
-"""]]
diff --git a/doc/todo/object_dir_reorg_v2/comment_5_821c382987f105da72a50e0a5ce61fdc._comment b/doc/todo/object_dir_reorg_v2/comment_5_821c382987f105da72a50e0a5ce61fdc._comment
deleted file mode 100644
index 2032bce3c..000000000
--- a/doc/todo/object_dir_reorg_v2/comment_5_821c382987f105da72a50e0a5ce61fdc._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 5"
- date="2011-03-16T15:51:30Z"
- content="""
-Hashing & segmenting seems to be around the corner, which is nice :)
-
-Is there a chance that you will optionally add mtime to your native metadata store? If yes, I'd rather wait for v2 to start with the native system from the start. If not, I will probably set it up tonight.
-
-PS: While posting from work, my comments are held for moderation once again. I am somewhat confused as to why this happens when I can just submit directly from home. And yes, I am using the same auth provider and user in both cases.
-"""]]
diff --git a/doc/todo/object_dir_reorg_v2/comment_6_8834c3a3f1258c4349d23aff8549bf35._comment b/doc/todo/object_dir_reorg_v2/comment_6_8834c3a3f1258c4349d23aff8549bf35._comment
deleted file mode 100644
index ff86e3970..000000000
--- a/doc/todo/object_dir_reorg_v2/comment_6_8834c3a3f1258c4349d23aff8549bf35._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 6"
- date="2011-03-16T16:32:52Z"
- content="""
-The mtime cannot be stored for all keys. Consider a SHA1 key. The mtime is irrelevant; 2 files with different mtimes, when added to the SHA1 backend, should get the same key.
-
-Probably our spam filter doesn't like your work IP.
-"""]]
diff --git a/doc/todo/object_dir_reorg_v2/comment_7_42501404c82ca07147e2cce0cff59474._comment b/doc/todo/object_dir_reorg_v2/comment_7_42501404c82ca07147e2cce0cff59474._comment
deleted file mode 100644
index fc866c57a..000000000
--- a/doc/todo/object_dir_reorg_v2/comment_7_42501404c82ca07147e2cce0cff59474._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 7"
- date="2011-03-16T21:05:38Z"
- content="""
-Ah, OK. I assumed the metadata would be attached to a key, not part of the key. This seems to make upgrades/extensions down the line harder than they need to be, but you are right that this way, merges are not, and never will be, an issue.
-
-Though with the SHA1 backend, changing files can be tracked. This means that tracking changes in mtime or other is possible. It also means that there are potential merge issues. But I won't argue the point endlessly. I can accept design decisions :)
-
-The prefix at work is from a university netblock so yes, it might be on a few hundred proxy lists etc.
-"""]]
diff --git a/doc/todo/openwrt_package/comment_4_132e67b34f9c616217e037e4ecac70a4._comment b/doc/todo/openwrt_package/comment_4_132e67b34f9c616217e037e4ecac70a4._comment
new file mode 100644
index 000000000..6e5411dc3
--- /dev/null
+++ b/doc/todo/openwrt_package/comment_4_132e67b34f9c616217e037e4ecac70a4._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2015-01-13T20:39:53Z"
+ content="""
+I checked, and the current status is that mips and mipsel in Debian have
+up-to-date builds of ghc and git-annex.
+"""]]
diff --git a/doc/todo/optinally_transfer_file_unencryptedly.mdwn b/doc/todo/optinally_transfer_file_unencryptedly.mdwn
deleted file mode 100644
index ef27dc521..000000000
--- a/doc/todo/optinally_transfer_file_unencryptedly.mdwn
+++ /dev/null
@@ -1,6 +0,0 @@
-I have a git-annex repository on a NSLU 2, and transfers are much slower over ssh compared to unencrypted transfers (no wonder at that CPU speed). For the files that I am transferring, no encryption would be necessary. Unfortunately, ssh in Debian does not support "-c none" to disable encryption.
-
-It would be nice if git-annex would have a way of conveniently transferring files in another way than SSH. I’m not sure what a good way would be – maybe launching a one-shot HTTP-server on the sending end? Haskell libraries for that would be available... Of course it is not always the case that the host reachable with "ssh foo" is also reachable via TCP at "foo:1234"... And there are surely more problem. But still, it would be nice :-)
-
-> Setting `remote.name.annex-rsync-transport = rsh` will now
-> make rsync special remotes use rsh instead of ssh. [[done]]
diff --git a/doc/todo/optinally_transfer_file_unencryptedly/comment_1_4be47e7ac85d0f4e7029a96b615545a7._comment b/doc/todo/optinally_transfer_file_unencryptedly/comment_1_4be47e7ac85d0f4e7029a96b615545a7._comment
deleted file mode 100644
index 948845b23..000000000
--- a/doc/todo/optinally_transfer_file_unencryptedly/comment_1_4be47e7ac85d0f4e7029a96b615545a7._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="guilhem"
- ip="129.16.20.212"
- subject="rsh?"
- date="2013-04-09T16:11:50Z"
- content="""
-I don't use it myself, but rsync can be used with others remote shells, among which rsh supports unencrypted streams. You probably want to set up a secure authorization mechanism to deny access to intruders, and for that kerberos comes to the rescue :-) I didn't try the combination, but it should work over git-annex already.
-"""]]
diff --git a/doc/todo/parallel_get.mdwn b/doc/todo/parallel_get.mdwn
new file mode 100644
index 000000000..119d0783e
--- /dev/null
+++ b/doc/todo/parallel_get.mdwn
@@ -0,0 +1,73 @@
+Wish: `git annex get [files] -jN` should run up to N downloads of files
+concurrently.
+
+This can already be done by just starting up N separate git-annex
+processes all trying to get the same files. They'll coordinate themselves
+to avoid downloading the same file twice.
+
+But, the output of concurrent git annex get's in a single teminal is a
+mess.
+
+It would be nice to have something similar to docker's output when fetching
+layers of an image. Something like:
+
+ get foo1 ok
+ get foo2 ok
+ get foo3 -> 5% 100 KiB/s
+ get foo4 -> 3% 90 KiB/s
+ get foo5 -> 20% 1 MiB/s
+
+Where the bottom N lines are progress displays for the downloads that are
+currently in progress. When a download finishes, it can scroll up the
+screen with "ok".
+
+ get foo1 ok
+ get foo2 ok
+ get foo5 ok
+ get foo3 -> 5% 100 KiB/s
+ get foo4 -> 3% 90 KiB/s
+ get foo6 -> 0% 110 Kib/S
+
+This display could perhaps be generalized for other concurrent actions.
+For example, drop:
+
+ drop foo1 ok
+ drop foo2 failed
+ Not enough copies ...
+ drop foo3 -> (checking r1...)
+ drop foo4 -> (checking r2...)
+
+But, do get first.
+
+Pain points:
+
+1. Currently, git-annex lets tools like rsync and wget display their own
+ progress. This makes sense for the single-file at a time get, because
+ rsync can display better output than just a percentage. (This is especially
+ the case with aria2c for torrents, which displays seeder/leecher info in
+ addition to percentage.)
+
+ But in multi-get mode, the progress display would be simplified. git-annex
+ can already get percent done information, either as reported by individiual
+ backends, or by falling back to polling the file as it's downloaded.
+
+2. The mechanics of updating the screen for a multi-line progress output
+ require some terminal handling code. Using eg, curses, in a mode that
+ doesn't take over the whole screen display, but just moves the cursor
+ up to the line for the progress that needs updating and redraws that
+ line. Doing this portably is probably going to be a pain, especially
+ I have no idea if it can be done on Windows.
+
+ An alternative would be a display more like apt uses for concurrent
+ downloads, all on one line:
+
+ get foo1 ok
+ get foo2 ok
+ get [foo3 -> 5% 100 KiB/s] [foo4 -> 3% 90 KiB/s] [foo5 -> 20% 1 MiB/s]
+
+ The problem with that is it has to avoid scrolling off the right
+ side, so it probably has to truncate the line. Since filenames
+ are often longer than "fooN", it probably has to elipsise the filename.
+ This approach is just not as flexible or nice in general.
+
+See also: [[parallel_possibilities]]
diff --git a/doc/todo/parallel_get/comment_1_5b7517214148731f81be6e61233ce13c._comment b/doc/todo/parallel_get/comment_1_5b7517214148731f81be6e61233ce13c._comment
new file mode 100644
index 000000000..327e7a315
--- /dev/null
+++ b/doc/todo/parallel_get/comment_1_5b7517214148731f81be6e61233ce13c._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnx8kHW66N3BqmkVpgtXDlYMvr8TJ5VvfY"
+ nickname="Yaroslav"
+ subject="spinning wheel"
+ date="2014-12-22T20:33:44Z"
+ content="""
+Just tried torrents backend -- it works -- THANKS!!!
+But amount of output dumped upon user is somewhat outstanding (I can't even scroll terminal back far enough for 1 file fetch). May be for such backends, where no easy/reasonable way to estimate progress it would be possible at least to have some spinning wheel animation which would react (spin) to any output received from the corresponding downloader/backend? (unless in debug mode in which normal output probably should be shown as well)
+"""]]
diff --git a/doc/todo/parallel_get/comment_2_c8548608023ef3d95035fe97164c8cd7._comment b/doc/todo/parallel_get/comment_2_c8548608023ef3d95035fe97164c8cd7._comment
new file mode 100644
index 000000000..a454de31a
--- /dev/null
+++ b/doc/todo/parallel_get/comment_2_c8548608023ef3d95035fe97164c8cd7._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnx8kHW66N3BqmkVpgtXDlYMvr8TJ5VvfY"
+ nickname="Yaroslav"
+ subject="even less verbose"
+ date="2014-12-23T16:50:36Z"
+ content="""
+While working on this one, might be worth even reserving even a quieter mode of operation which would e.g. just report a # of already processed files. e.g.
+
+\"0% done: fetched 100 out of 1,234,567 files\"
+
+;-) ?
+"""]]
diff --git a/doc/todo/parallel_get/comment_3_36bfc494c34a6701c4780d13d669ff71._comment b/doc/todo/parallel_get/comment_3_36bfc494c34a6701c4780d13d669ff71._comment
new file mode 100644
index 000000000..0fecfc514
--- /dev/null
+++ b/doc/todo/parallel_get/comment_3_36bfc494c34a6701c4780d13d669ff71._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnx8kHW66N3BqmkVpgtXDlYMvr8TJ5VvfY"
+ nickname="Yaroslav"
+ subject="comment 3"
+ date="2014-12-23T16:52:43Z"
+ content="""
+actually a similar or exactly the same summary line might be worth appearing in the \"regular\" mode as well to give user better estimate of overall progress. If total size is known, it would also be nice if overall % in size (not just a # of items) was reported
+"""]]
diff --git a/doc/todo/preferred_content_numcopies_check.mdwn b/doc/todo/preferred_content_numcopies_check.mdwn
deleted file mode 100644
index 2e007460f..000000000
--- a/doc/todo/preferred_content_numcopies_check.mdwn
+++ /dev/null
@@ -1,86 +0,0 @@
-The assistant and git annex sync --content do not try to proactively
-download content that is not otherwise wanted in order to get numcopies
-satisfied. (Unlike get --auto, which does take numcopies into account.)
-
-Should these automated systems try to proactively satisfy numcopies? I
-don't feel they should. It could result in surprising results. For example,
-a transfer repository, which is of limited size, could start being filled
-up with lots of content that all clients have, just because numcopies was
-set to a larger number than the total number of clients. Another example,
-a source repository on eg an Android phone, should never have content in it
-that was not created on that device.
-
-However, it would make sense for some specific
-types of repositories to proactively get content to satisfy numcopies.
-Currently some types of repositories use "or (not copies=semitrusted+:1)",
-to ensure that if the only copy of a file is on a dead repository, they
-will try to get that file before the repo goes away. This is done
-by client repositories, and backup, and archive. Probably the same set
-would make sense to proactively satisfy numcopies.
-
-So, a new type of preferred content expression is called for. Such as, for
-example, "numcopiesneeded=1". Which indicates that at least 1 more copy
-is needed to satifsy numcopies.
-
-(Note that it should only count semittrusted and higher trust
-level repos as satisfying numcopies.)
-
-But, preferred content expressions can only operate on info stored in the
-git repo, or they will fail to be stable. Ie, repo A needs to be able to
-calculate whether a file is preferred content by repo B and get the same
-result as when repo B calculates that.
-
-numcopies is currently configured in 3 places:
-
-* .git/config `annex.numcopies` (global, stored only locally)
-* .gitattributes `annex.numcopies` (per file, stored in git repo)
-* --numcopies (not relevant)
-
-So, need to add a global numcopies setting that is stored in the git repo.
-That could either be a file in the git-annex branch, or just
-`* annex.numcopies=2` in the toplevel .gitattributes. Note that the
-assistant needs to be able to query and set it, which I think argues
-against using .gitattributes for it. Also arguing against that is that the
-.git/config numcopies valie applies even to objects with no file in the
-work tree, which gitattributes settings do not.
-
-Conclusion:
-
-* Add to the git-annex branch a numcopies file that holds the global
- numcopies default if present. **done**
-* Modify the assistant to use it when configuring numcopies. **done**
-* To deprecate .git/config's annex.numcopies, only make it take effect
- when there is no numcopies file in the git-annex branch. **done**
-* Add "numcopiesneeded=N" preferred content expression using the git-annex
- branch numcopies setting, overridden by any .gitattributes numcopies setting
- for a particular file. It should ignore the other ways to specify
- numcopies, particularly git config annex.numcopies. **done**
-* Make the repo groups that currently end with "or (not copies=semitrusted+:1)"
- to instead end with "or numcopiesneeded=1" **done**
-* See if "numcopiesneeded=N" can check .gitattributes without getting
- a lot slower. If now, perhaps add a "numcopiesneededaccurate=N" that
- checks it. **done**
-
-[[done]]
-
-## Stability analysis
-
-If a remote prefers eg, "blah or numcopiesneeded=1", and
-file $foo does not match blah, but needs more copies, then then the
-expression will match.
-
-So, git-annex will get $foo, adding a copy. Which means that the
-numcopiesneeded=1 will no longer match, so the file is no longer wanted
-now that it has been downloaded.
-
-Now there are two cases for what can happen:
-
-* git-annex tries to drop $foo, but fails because it cannot find enough
- other copies
-* git-annex copies $foo to some other remote that wants it, and then
- manages to drop $foo from the local remote.
-
-This seems ok. Files flow through repos and they act like transfer
-repos when there are not enough copies.
-
---[[Joey]]
diff --git a/doc/todo/pushpull.mdwn b/doc/todo/pushpull.mdwn
deleted file mode 100644
index 6828b35b2..000000000
--- a/doc/todo/pushpull.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
---push/--pull should take a reponame and files, and push those files
- to that repo; dropping them from the current repo
-
-[[done]] (move --from/--to)
diff --git a/doc/todo/quvi_0.9_support.mdwn b/doc/todo/quvi_0.9_support.mdwn
deleted file mode 100644
index 36280452a..000000000
--- a/doc/todo/quvi_0.9_support.mdwn
+++ /dev/null
@@ -1,8 +0,0 @@
-quvi 0.9 has a completely different interface; git-annex needs to be made
-to detect and use it.
-
-I have already fixed the worst problem, which caused git-annex addurl to
-think that every url was a valid quvi url. --[[Joey]]
-
-> [[done]], 0.9 is supported, although the version is detected at build
-> time. --[[Joey]]
diff --git a/doc/todo/read-only_removable_drives.mdwn b/doc/todo/read-only_removable_drives.mdwn
new file mode 100644
index 000000000..9dfc3569c
--- /dev/null
+++ b/doc/todo/read-only_removable_drives.mdwn
@@ -0,0 +1,17 @@
+Here's yet another weird use case. I have a ext3 external drive for storing media that i brought to the office. Naturally, all files on the drive are owned by my desktop user (uid = 1000). In the office, my userid is different (say 1001), so git-annex doesn't see the removable drive at all (which is a little confusing). But even if i try to add the repo on the drive as an external repo, it says it can't write to it (which is true).
+
+I would expect it to at least be able to leech the files off of it.
+
+Otherwise, I would welcome advice on how to fix this problem without doing a `sudo chown -R` every time i plug this drive somewhere ... --[[anarcat]]
+
+> Workaround: `sudo setfacl -R -m u:anarcat:rwx /media/foo/annex`
+
+Note: this seems like there was at least one dupe opened about this in [[bugs/annex_get_fails_from_read-only_filesystem]].
+
+I concede that this may refer to many different issues, so here's a short inventory of issues with readonly repositories:
+
+* trying to add an external readonly drive through the webapp: not detected: see [[todo/show_readonly_removable_drives_in_the_webapp]]
+* trying to add an external readonly drive through the commandline: fails to sync? - couldn't reproduce locally, i will need to go back to that machine for more tests :(
+* trying to add a ssh readonly remote through the webapp: fails to sync and considers the remote "git-only" (which also fails) - couldn't reproduce locally either - maybe this is related to the upgrade option in [[bugs/annex_get_fails_from_read-only_filesystem/]]
+* trying to add a local readonly remote through the webapp: fails to add, see [[bugs/cannot_add_local_readonly_repo_through_the_webapp]]
+* failing to sync with a readonly remote of a different version: still an issue, see [[bugs/annex_get_fails_from_read-only_filesystem/]] - at least content should be syncable even if the upgrade fails (think of failure conditions such as broken hard drives that are put in readonly mode or ddrescue'd disk images)
diff --git a/doc/todo/read-only_removable_drives/comment_1_979455e3694ae2403134ed6fa2add2fa._comment b/doc/todo/read-only_removable_drives/comment_1_979455e3694ae2403134ed6fa2add2fa._comment
new file mode 100644
index 000000000..ac98d6845
--- /dev/null
+++ b/doc/todo/read-only_removable_drives/comment_1_979455e3694ae2403134ed6fa2add2fa._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-05-16T18:10:28Z"
+ content="""
+The assistant ignores drives that it cannot write to. This is a very good heuristic to avoid listing every special device in linux, OSX, etc as possible removable drives. I don't think it makes sense for the assistant to try to handle this use case.
+
+Is there some problem using git-annex at the command line with a remote that is read-only? I don't see any problem in my tests.
+
+<pre>
+joey@darkstar:~/tmp/r>git annex drop
+drop foo ok
+(Recording state in git...)
+joey@darkstar:~/tmp/r>ls -ld ../readonly
+drwxr-xr-x 3 root root 4096 May 16 14:08 ../readonly/
+joey@darkstar:~/tmp/r>git annex get --from readonly
+get foo (from readonly...) ok
+(Recording state in git...)
+</pre>
+"""]]
diff --git a/doc/todo/read-only_removable_drives/comment_2_08fced29b86b21f63bb0868747227e08._comment b/doc/todo/read-only_removable_drives/comment_2_08fced29b86b21f63bb0868747227e08._comment
new file mode 100644
index 000000000..e89e4a546
--- /dev/null
+++ b/doc/todo/read-only_removable_drives/comment_2_08fced29b86b21f63bb0868747227e08._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="72.0.72.144"
+ subject="this also affects ssh remotes"
+ date="2014-10-05T15:26:52Z"
+ content="""
+so i tried another experiment today: i tried to allow access to a remote user to my /srv/foo annex. the annex is writable by me, but not by the user, yet i was expecting the user to be able to sync with it. not push, mind you, but at least pull: in a \"git-only\" scenario, that would be perfectly possible. yet the assistant freaks out because it can't run git-annex on the repo because of a write failure on some pack files, and downgrades the repository to a \"git-only\" repo, which is also inaccurate: it can't sync the metadata either...
+
+i would have expected this repository to be marked as \"readonly\" and the user be capable of fetching new changes automatically from the \"central repo\".
+
+maybe that's the essence of the todo here... --[[anarcat]]
+"""]]
diff --git a/doc/todo/read-only_removable_drives/comment_3_2675e211c7bd248b7f7c1bbc6fd46679._comment b/doc/todo/read-only_removable_drives/comment_3_2675e211c7bd248b7f7c1bbc6fd46679._comment
new file mode 100644
index 000000000..3ce119e67
--- /dev/null
+++ b/doc/todo/read-only_removable_drives/comment_3_2675e211c7bd248b7f7c1bbc6fd46679._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 3"
+ date="2014-10-06T16:03:04Z"
+ content="""
+Note that I still don't have a test case that reproduces this. I have tried and failed a second time to reproduce the original reported problem.
+
+Also, one issue per bug report tends to result in happier developers.
+"""]]
diff --git a/doc/todo/read-only_removable_drives/comment_4_9e9bc6dd5fa8c4cf7f2511b771bd1bc7._comment b/doc/todo/read-only_removable_drives/comment_4_9e9bc6dd5fa8c4cf7f2511b771bd1bc7._comment
new file mode 100644
index 000000000..2f79d2f4a
--- /dev/null
+++ b/doc/todo/read-only_removable_drives/comment_4_9e9bc6dd5fa8c4cf7f2511b771bd1bc7._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 4"
+ date="2014-10-06T16:06:52Z"
+ content="""
+Of course, git-annex sync fails when it tries to git push to the removable repo. I don't see that causing any problems in practice.
+"""]]
diff --git a/doc/todo/read-only_removable_drives/comment_5_a693c5744bfc6c33f5605aa9d9c0bfe0._comment b/doc/todo/read-only_removable_drives/comment_5_a693c5744bfc6c33f5605aa9d9c0bfe0._comment
new file mode 100644
index 000000000..ed24a1054
--- /dev/null
+++ b/doc/todo/read-only_removable_drives/comment_5_a693c5744bfc6c33f5605aa9d9c0bfe0._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.54"
+ subject="comment 5"
+ date="2014-10-06T16:10:02Z"
+ content="""
+I guess that the actual problem encountered is entirely limited to the webapp, where if the user chooses \"Add another repository\", then enters the path to an existing, read-only repository, and clicks Make Repository, the webapp replies \"Cannot write a repository there.\"
+"""]]
diff --git a/doc/todo/read-only_removable_drives/comment_6_737e3d315f29a4fc61597ce4f9ec6206._comment b/doc/todo/read-only_removable_drives/comment_6_737e3d315f29a4fc61597ce4f9ec6206._comment
new file mode 100644
index 000000000..de662d9a5
--- /dev/null
+++ b/doc/todo/read-only_removable_drives/comment_6_737e3d315f29a4fc61597ce4f9ec6206._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="anarcat"
+ ip="70.83.139.100"
+ subject="maybe this should be split up, here are the issues i know about"
+ date="2014-10-06T16:14:36Z"
+ content="""
+well this specific issue is more about how git-annex cannot get files off readonly medium, whether it is webapp or not.
+
+maybe it would be wiser to split this up in separate bug reports, because I had at least three different situations:
+
+* trying to add an external readonly drive through the webapp: not detected
+* trying to add an external readonly drive through the commandline: fails to sync? - to be confirmed
+* trying to add a ssh readonly remote through the webapp: fails to sync and considers the remote \"git-only\" (which also fails)
+
+I would need to try the third case through the commandline.
+
+And then there's the upgrade scenario in [[bugs/annex_get_fails_from_read-only_filesystem/]].
+
+Did i miss anything?
+"""]]
diff --git a/doc/todo/read-only_removable_drives/comment_7_16c8652d38ae57db4ed1860a4733a18b._comment b/doc/todo/read-only_removable_drives/comment_7_16c8652d38ae57db4ed1860a4733a18b._comment
new file mode 100644
index 000000000..121d6768d
--- /dev/null
+++ b/doc/todo/read-only_removable_drives/comment_7_16c8652d38ae57db4ed1860a4733a18b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ ip="72.0.72.144"
+ subject="comment 7"
+ date="2014-10-20T20:04:09Z"
+ content="""
+alright, i documented those issues more distinctively in the summary. hopefully that will clear things up a little. i still need to do some work to reproduce two of those issues, maybe a lot of this is related to the upgrade problem mentionned in [[bugs/annex_get_fails_from_read-only_filesystem/]].
+"""]]
diff --git a/doc/todo/remote_groups_support_for_sync.mdwn b/doc/todo/remote_groups_support_for_sync.mdwn
new file mode 100644
index 000000000..b49016427
--- /dev/null
+++ b/doc/todo/remote_groups_support_for_sync.mdwn
@@ -0,0 +1,5 @@
+`git remote update $group` looks at the $group.away git config and fetches
+from the listed remotes. It would be useful if `git annex sync $group` did the same.
+--[[Joey]]
+
+[[done]]
diff --git a/doc/todo/replace_dataenc_with_sandi.mdwn b/doc/todo/replace_dataenc_with_sandi.mdwn
new file mode 100644
index 000000000..a35e54efd
--- /dev/null
+++ b/doc/todo/replace_dataenc_with_sandi.mdwn
@@ -0,0 +1,4 @@
+<https://github.com/joeyh/git-annex/pull/15>
+
+sandi is available in jessie, but not wheezy, so this is pending
+EOL of wheezy support. --[[Joey]]
diff --git a/doc/todo/required_content.mdwn b/doc/todo/required_content.mdwn
index 851e652ae..6afeee5c9 100644
--- a/doc/todo/required_content.mdwn
+++ b/doc/todo/required_content.mdwn
@@ -5,3 +5,19 @@ like preferred content, which is enforced. So, required content.
For example, I might want a repository that is required to contain
`*.jpeg`. This would make get --auto get it (it's implicitly part of the
preferred content), and would make drop refuse to drop it.
+
+> I've implemented the basic required content. Currently only configurable
+> via `vicfg`, because I don't think a lot of people are going to want to
+> use it.
+>
+> Note that I did not yet add the active verification discussed below.
+> So if required content is set to `not inallgroup=backup`, or
+> `not copies=10`, trying to drop a file will not go off and prove
+> that there are 10 copies or that the file is in every repository in
+> the backup group. It will assume that the location log is accurate
+> and go by that.
+>
+> I think this is enough to cover Richard's case, at least.
+> In his example, A B and C are in group anchor and have required
+> content set to `include=*`, and D E F have it set to
+> `not inallgroup=anchor`. --[[Joey]]
diff --git a/doc/todo/required_content/comment_3_b16a8e8b45ceee887c8c0167b7859654._comment b/doc/todo/required_content/comment_3_b16a8e8b45ceee887c8c0167b7859654._comment
new file mode 100644
index 000000000..f4047baf5
--- /dev/null
+++ b/doc/todo/required_content/comment_3_b16a8e8b45ceee887c8c0167b7859654._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
+ nickname="Richard"
+ subject="comment 3"
+ date="2014-05-18T06:49:35Z"
+ content="""
+ 22:34:10 < joeyh> required content is implemented, though active verification is not
+"""]]
diff --git a/doc/todo/resuming_encrypted_uploads.mdwn b/doc/todo/resuming_encrypted_uploads.mdwn
index b3aaa7f96..44a58a141 100644
--- a/doc/todo/resuming_encrypted_uploads.mdwn
+++ b/doc/todo/resuming_encrypted_uploads.mdwn
@@ -20,3 +20,10 @@ sometimes need to manually dropunused old uploads, that never completed.
The question, then, is whether resuming uploads is useful enough to add
this overhead and user-visible complexity.
--[[Joey]]
+
+> The new-style chunking code chunks and then encrypts. This means that
+> each individual chunk is a stand-alone file that can be decrypted later,
+> and so resumes of uploads to encrypted, chunked remotes works now.
+>
+> I think that's better than the ideas discussed above, so [[done]]
+> --[[Joey]]
diff --git a/doc/todo/rsync.mdwn b/doc/todo/rsync.mdwn
deleted file mode 100644
index 3353f19c4..000000000
--- a/doc/todo/rsync.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-Transferring a file from a ssh:// remote should use rsync to allow resuming
-of a prior transfer.
-
-[[done]]
diff --git a/doc/todo/separate_rsync_bwlimit_options_for_upload_and_download.mdwn b/doc/todo/separate_rsync_bwlimit_options_for_upload_and_download.mdwn
deleted file mode 100644
index 2b93ad2d6..000000000
--- a/doc/todo/separate_rsync_bwlimit_options_for_upload_and_download.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-The bandwidth for upload and download are often different. It would be useful to have different settings for upload and download limits.
-As it is, I have to keep changing annex-rsync-options options between uploads and downloads.
-
-> [[done]] --[[Joey]]
diff --git a/doc/todo/sharedRepository_mode_not_supported_by_git-annex.mdwn b/doc/todo/sharedRepository_mode_not_supported_by_git-annex.mdwn
new file mode 100644
index 000000000..85005dbc1
--- /dev/null
+++ b/doc/todo/sharedRepository_mode_not_supported_by_git-annex.mdwn
@@ -0,0 +1,7 @@
+git's core.SharedRepository is supported by git-annex, but only
+with the group/all/world/everybody settings. core.SharedRepository=0644
+etc is not supported.
+
+There's no insormountable reason why not, Joey just hates umask mode math
+stuff and nobody has sent a patch. Note that Annex.Content.freezeContent
+should remove the write bit from files, no matter what.
diff --git a/doc/todo/show_readonly_removable_drives_in_the_webapp.mdwn b/doc/todo/show_readonly_removable_drives_in_the_webapp.mdwn
new file mode 100644
index 000000000..e0e570fe0
--- /dev/null
+++ b/doc/todo/show_readonly_removable_drives_in_the_webapp.mdwn
@@ -0,0 +1,15 @@
+Coming from [[todo/read-only_removable_drives/]], this is use case 1: use inserts an `ext` formatted filesystem that he built at home (so files are owned by uid `1000`) in the office computer (where he is uid `1001`). Now, this is a limitation of UNIX-style removable drives, admittedly, but I would expect to be able to sync "down" from the hard drives to copy the contents locally.
+
+So in short, expected behavior:
+
+1. insert the drive
+2. drive is shown in the webapp menu
+3. add the drive as a remote for the local repo
+4. sync the content from the drive to the local repo
+
+Actual behavior:
+
+1. insert the drive
+2. drive is not shown in the webapp menu
+
+--[[anarcat]]
diff --git a/doc/todo/show_readonly_removable_drives_in_the_webapp/comment_1_c41140289f9b062e96cfd5d9d5382155._comment b/doc/todo/show_readonly_removable_drives_in_the_webapp/comment_1_c41140289f9b062e96cfd5d9d5382155._comment
new file mode 100644
index 000000000..faa49bf14
--- /dev/null
+++ b/doc/todo/show_readonly_removable_drives_in_the_webapp/comment_1_c41140289f9b062e96cfd5d9d5382155._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-21T16:33:25Z"
+ content="""
+The webapp only shows drives the user can write to, because
+in general, there are a vast number of mounted things in modern
+OS's that the user would be very puzzled to see listed as removable
+drives. Such as tmpfs and cgroup mount points, and efi boot partitions.
+Complicating the webapp with knowledge to filter such things out would be a
+constantly losing battle.
+
+I guess it would be ok to add a "not listed here?" link in the webapp
+that allowed chosing from a full list or entering the path by hand.
+"""]]
diff --git a/doc/todo/show_readonly_removable_drives_in_the_webapp/comment_2_b9236ea884a2934dd0c8e511a80f4fda._comment b/doc/todo/show_readonly_removable_drives_in_the_webapp/comment_2_b9236ea884a2934dd0c8e511a80f4fda._comment
new file mode 100644
index 000000000..9aa4c179e
--- /dev/null
+++ b/doc/todo/show_readonly_removable_drives_in_the_webapp/comment_2_b9236ea884a2934dd0c8e511a80f4fda._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="anarcat"
+ ip="70.83.139.100"
+ subject="comment 2"
+ date="2014-10-30T15:15:57Z"
+ content="""
+yep, that would be fine.
+"""]]
diff --git a/doc/todo/special_remote_for_amazon_glacier.mdwn b/doc/todo/special_remote_for_amazon_glacier.mdwn
deleted file mode 100644
index 9b8b9d74e..000000000
--- a/doc/todo/special_remote_for_amazon_glacier.mdwn
+++ /dev/null
@@ -1,30 +0,0 @@
-Amazon's new glacier service would be a nice special remote to support for
-long-term archival.
-
-The main difficulty is that glacier is organized into vaults, and accessing
-a file in a vault takes ~4 hours. A naive implementation would make `git
-annex get` wait for 4 hours, which is certainly not reasonable.
-
-One approach I am pondering is to make each glacier vault a separate
-special remote. You could then request git-annex to spin up a remote, and
-come back later, and be able to access the data stored in it (need to check
-if glacier would also allow adding new data to it then). This is
-conceptually similar to using git-annex with offline removable drives,
-except with glacier, you have a controllable robot to get them plugged in. :)
-
-Ideally, git-annex would arrange for glacier to send it a message when the
-vault becomes available, and the user could queue a list of commands to
-run, or files to transfer, at that point.
-
---[[Joey]]
-
-> [[done]]! --[[Joey]]
-
------
-
-> In the coming months, Amazon S3 will introduce an option that will allow customers to seamlessly move data between Amazon S3 and Amazon Glacier based on data lifecycle policies.
-
--- <http://aws.amazon.com/glacier/faqs/#How_should_I_choose_between_Amazon_Glacier_and_Amazon_S3>
-
->> They did, but it's IMHO not very useful for git-annex. It's rather
->> intended to allow aging S3 storage out to Glacier. --[[Joey]]
diff --git a/doc/todo/special_remote_for_amazon_glacier/comment_1_68f129441eefcbfebf7a9db680f52759._comment b/doc/todo/special_remote_for_amazon_glacier/comment_1_68f129441eefcbfebf7a9db680f52759._comment
deleted file mode 100644
index 68593be42..000000000
--- a/doc/todo/special_remote_for_amazon_glacier/comment_1_68f129441eefcbfebf7a9db680f52759._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://mike.magin.org/"
- nickname="mmagin"
- subject="comment 1"
- date="2012-09-14T04:19:53Z"
- content="""
-When I first heard about Glacier, it sounded great for a cheap backup copy, and I was thinking about writing a \"hook\" remote, but once I read some better analysis of the pricing (e.g. [[http://www.daemonology.net/blog/2012-09-04-thoughts-on-glacier-pricing.html]]) I rapidly lost interest.
-"""]]
diff --git a/doc/todo/special_remote_for_amazon_glacier/comment_2_c5eeaf8ceee414fa0379831ca52e290c._comment b/doc/todo/special_remote_for_amazon_glacier/comment_2_c5eeaf8ceee414fa0379831ca52e290c._comment
deleted file mode 100644
index 701047f91..000000000
--- a/doc/todo/special_remote_for_amazon_glacier/comment_2_c5eeaf8ceee414fa0379831ca52e290c._comment
+++ /dev/null
@@ -1,7 +0,0 @@
-[[!comment format=mdwn
- username="basak"
- subject="comment 2"
- date="2012-09-21T22:21:04Z"
- content="""
-I've created a glacier command line interface that integrates with git-annex [here](https://github.com/basak/glacier-cli), currently using the hook special remote mechanism. To get around the time delay, operations which require a job submission will submit the job and then fail. Retrying again four hours later should then succeed. It seems to work pretty well with git-annex.
-"""]]
diff --git a/doc/todo/speed_up_fsck.mdwn b/doc/todo/speed_up_fsck.mdwn
deleted file mode 100644
index 5d5e867f8..000000000
--- a/doc/todo/speed_up_fsck.mdwn
+++ /dev/null
@@ -1,40 +0,0 @@
-moving to the git-annex branch has slowed down fsck worse than most
-commands. Actually, some commands have sped up, while others like get
-are slightly slower but are swamped by the normal runtime.
-
-For fsck though, it has to pull each file's location log info out of git.
-And, it's typically run on the entire tree.
-
-Another slow one in `git annex copy --from`.
-
-It would be possible to run a single `git cat-file --batch` and pass it
-sha1s of location logs for file that is going to be fsked (gotten via
-`read-tree`). Then just read its output until the next requested sha1 to
-chunk it, and pass this in to fsck in a closure.
-
-The difficulty, besides writing that is that everything that works with
-location logs now reads them out of git, would need to find a way to
-provide the info on a side channel of some sort.
-
-If this is implemented, the same infrastructure could be used for other
-commands like whereis and add. --[[Joey]]
-
-> Updated plan:
->
-> Run `git ls-file --batch`, and cache its stdin and out handles in Branch
-> state.
->
-> To see a git-annex branch file, send it something like
-> "git-annex:uuid.log", and read the content fron stdout handle.
->
-> To detect the end of content, send "TOKEN\n", and look for
-> "TOKEN missing" in its output. A good choice for TOKEN is anything
-> that will never exist in the repo; 40 0's would be a fairly good choice,
-> but even better seems to be something completely invalid and impossible
-> to have as a sha1 or filename or ref: "".
->
-> Hmm, except that's actually an error message sent to stderr. Unless
-> stderr is connected to stdout, it might be better to look for a known,
-> empty object. Could just add a git-annex:empty file to that end.
-
-[[done]] --[[Joey]]
diff --git a/doc/todo/ssh_special_remote.mdwn b/doc/todo/ssh_special_remote.mdwn
new file mode 100644
index 000000000..be38f4209
--- /dev/null
+++ b/doc/todo/ssh_special_remote.mdwn
@@ -0,0 +1,44 @@
+ssh:// remotes are not special remotes. Perhaps it would be useful to have
+a special remote that wraps a ssh:// remote? This would allow setting up a
+ssh:// remote that can be enabled using the webapp's normal UI for enabling
+special remotes.
+
+Enabling such a special remote would just make a regular git remote, so
+there would be no need to implement the methods to get/put data. (Although
+it might need to provide stubs to appease the compiler.)
+
+> Above is done. The command line interface in initremote and enableremote
+> is not too easy or perhaps useful, but it works great in the webapp.
+> --[[Joey]]
+
+It could optionally embed the ssh private key into the git-annex branch as
+a credential, for when you want anyone who has access to the git repo to be
+able to use the (locked-down) git-annex-shell on that server.
+
+> Leaving this todo open for this ssh private key embedcreds part.
+> I think it makes sense to do, but it it probably not too easy.
+> ([[webapp_ssh_setup_should_work_with_locked_down_git-annex-shell_account]]
+> needs to be fixed first). --[[Joey]]
+
+[[!meta title="remember ssh remote including optionally ssh key"]]
+
+----
+
+I am on the fence about whether this would be useful, and would appreciate
+use cases.
+
+One use case I was thinking about was a LAN with a central server, with a
+shared account with a git-annex repository on it. But then I realized this
+wouldn't really help set up git-annex in that situation, most of the time,
+because new clients would have the central server added as their first
+remote.
+
+(It would help if one client paired with another new client, but
+that is unncessarily round-about most of the time.)
+
+It might help in a more complex situation, where the LAN is not the whole
+network an a client might come onto the LAN already knowing about the
+central server there. --[[Joey]]
+
+A very compelling use case is switching from XMPP to a ssh server,
+and wanting to make it easy for users. --[[Joey]]
diff --git a/doc/todo/stream_feature__63__/comment_1_99f1f1872f86d4571c03a99fff1a7212._comment b/doc/todo/stream_feature__63__/comment_1_99f1f1872f86d4571c03a99fff1a7212._comment
new file mode 100644
index 000000000..82b43335f
--- /dev/null
+++ b/doc/todo/stream_feature__63__/comment_1_99f1f1872f86d4571c03a99fff1a7212._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn4bbuawnh-nSo9pAh8irYAcV4MQCcfdHo"
+ nickname="Stefan"
+ subject="did I wrote this suggestion"
+ date="2015-02-11T17:25:52Z"
+ content="""
+thought about that feature just now and found this feature request here, just wonder if I wrote it, sounds a bit like me. If not I add a +1 to it :)
+"""]]
diff --git a/doc/todo/support-non-utf8-locales.mdwn b/doc/todo/support-non-utf8-locales.mdwn
deleted file mode 100644
index da40118d5..000000000
--- a/doc/todo/support-non-utf8-locales.mdwn
+++ /dev/null
@@ -1,26 +0,0 @@
-Currenty, git-annex forces output, particularly of filenames, in a utf-8
-locale.
-
-Note that this does not mean it cannot be used with filenames in other
-encodings. git-annex is entirely encoding agnostic when it comes to
-manipulating filenames. It just *displays* their names always converted to
-utf-8, which may not look right when you have a non-utf8 locale.
-
-This had to be done to work around some bugs with haskell's handling
-of filename encodings. In particular,
-
-* [[bugs/unhappy_without_UTF8_locale]]: haskell crashes when told to output
- a string with characters > 255 in a non-utf8 locale.
-* [[bugs/problems_with_utf8_names]]: On many OSs, haskell expects
- non-decoded raw char8 in FilePaths. In order to display a filename,
- though, it needs to first be decoded, and git-annex currently assumes
- it was encoded as utf8.
-
-git-annex's behavior is unlikely to improve much until haskell's
-support for utf8 filenames improves. --[[Joey]]
-
-> [[done]] -- I just turned off all encoding handling on stdout and stderr,
-> which avoids these problems nicely. Git-annex now displays just what it
-> input, at least on platforms where haskell does not decode unicode in
-> FilePaths. This will later be a problem when it gets localized, but for
-> now works great. --[[Joey]]
diff --git a/doc/todo/support_S3_multipart_uploads.mdwn b/doc/todo/support_S3_multipart_uploads.mdwn
deleted file mode 100644
index 711ac41b2..000000000
--- a/doc/todo/support_S3_multipart_uploads.mdwn
+++ /dev/null
@@ -1,14 +0,0 @@
-Did not know of this when I wrote S3 support. Ability to resume large
-uploads would be good.
-
-<http://aws.typepad.com/aws/2010/11/amazon-s3-multipart-upload.html>
-
-Also allows supporting files > 5 gb, a S3 limit I was not aware of.
-
-NB: It would work just as well to split the object and upload the N parts
-to S3, but not bother with S3's paperwork to rejoin them into one object.
-Only reasons not to do that are a) backwards compatability with
-the existing S3 remote and b) this would not allow accessing the content
-in S3 w/o using git-annex, which could be useful in some scenarios.
-
---[[Joey]]
diff --git a/doc/todo/support_for_lossy_remotes.mdwn b/doc/todo/support_for_lossy_remotes.mdwn
deleted file mode 100644
index 23083b2d7..000000000
--- a/doc/todo/support_for_lossy_remotes.mdwn
+++ /dev/null
@@ -1,11 +0,0 @@
-I'm curious if there's a possibility to support lossy remotes. It may be handy to support syncing to special remotes that do lossy compression on the files (e.g., videos and images). For example, one could imagine having a YouTube special remote that only syncs video files. The original files wouldn't be available for download due to the transcoding and compression that YouTube does, so they wouldn't count towards the number of copies. In this YouTube example, the user gains:
-
-1. an online place that their videos are available from
-2. a worst-case scenario "backup"
-3. a remote that they could download smaller video files
-
-> [[done]]; lossy remotes are supported as seen with `git annex addurl
-> --fast` and also with the new addurl support for using quvi to get
-> videos fro youtube. Just make a key with a URL or something in it, and
-> no size or checksum, and any content will be assumed to be the right
-> content. --[[Joey]]
diff --git a/doc/todo/support_for_lossy_remotes/comment_1_f5cd9f9deab13ab2d2290ad763906dd3._comment b/doc/todo/support_for_lossy_remotes/comment_1_f5cd9f9deab13ab2d2290ad763906dd3._comment
deleted file mode 100644
index 1e895944c..000000000
--- a/doc/todo/support_for_lossy_remotes/comment_1_f5cd9f9deab13ab2d2290ad763906dd3._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.90"
- subject="comment 1"
- date="2013-07-16T19:16:54Z"
- content="""
-There is already one example of a lossy remote: If you use `git annex addurl --relaxed` it generates a key that just uses the url, without its size. When retreiving such a key, any content will be accepted.
-"""]]
diff --git a/doc/todo/support_for_writing_external_special_remotes.mdwn b/doc/todo/support_for_writing_external_special_remotes.mdwn
deleted file mode 100644
index 1732f77ea..000000000
--- a/doc/todo/support_for_writing_external_special_remotes.mdwn
+++ /dev/null
@@ -1,27 +0,0 @@
-It would be good to have something in between the hook special remote and
-the built-in special remotes. The hook is easy to set up, but its simple
-interface misses some features that a more full-features interface could
-provide to a third-party program that wants to provide the best possible
-special remote it can w/o being written in haskell:
-
-* No way to send progress updates when uploading, so no progress bars for uploads from hook special remotes in the webapp.
-* No way to verify the `initremote` parameters include all needed configuration, and do any initalization needed.
-* No way to query and/or set the remote.log while it's running. (Well, technically, `git annex enableremote` can set values..)
-* No way to store per-key information to the git-annex branch.
-* No (easy) way to split files into chunks.
-
-Some of these features could be added to git-annex as subcommands. Which would
-improve the general programmability and flexability of git-annex. OTOH,
-running `git-annex upload-progress` repeatedly is pretty ugly. Or the
-interface could provide a channel for the program and git-annex to
-communicate back and forth on. Maybe a mix of the two?
-
-A final feature such an interface should provide is the ability to drop a
-program into PATH and have it just work, without the user needing to do any
-configuration beyond `initremote`. So, `git annex initremote foo type=$bar`
-should look for `git-annex-remote-$bar` in PATH if that's not a built-in
-special remote name.
-
---[[Joey]]
-
-[[done]]
diff --git a/doc/todo/support_fsck_in_bare_repos.mdwn b/doc/todo/support_fsck_in_bare_repos.mdwn
deleted file mode 100644
index 32ced467e..000000000
--- a/doc/todo/support_fsck_in_bare_repos.mdwn
+++ /dev/null
@@ -1,17 +0,0 @@
-What is says on the tin:
-
- 22:56:54 < RichiH> joeyh_: by the way, i have been thinking about fsck on bare repos
- 22:57:37 < RichiH> joeyh_: the best i could come with is to have a bare and a non-bare access the same repo store
- 22:58:00 < RichiH> joeyh_: alternatively, with the SHA* backend, you have all the information to verify that the local data is correct
- 22:58:41 < RichiH> and verifying that would already be a plus. if there really _is_ a problem, having the SHA is enough to track issues down
- 23:09:50 < joeyh_> oh, I think I have code that fsck could use on bare repos already.. just a matter of wiring it up
- 23:10:42 < joeyh_> feel free to reopen a bug or whatever so I remember.. the unused command's branch content enumeration could be used in a bare repo
- 23:14:51 < joeyh_> unused/dropunused could work in bare repos too btw
-
-> Also `status`'s total annex keys/size could be handled for bare repos. --[[Joey]]
-
->> Fsck is done. Rest not done yet. --[[Joey]]
-
->>> all [[done]]! --[[Joey]]
-
-[[!meta title="support unused, dropunused in bare repos"]]
diff --git a/doc/todo/symlink_farming_commit_hook.mdwn b/doc/todo/symlink_farming_commit_hook.mdwn
deleted file mode 100644
index 3e93cb34b..000000000
--- a/doc/todo/symlink_farming_commit_hook.mdwn
+++ /dev/null
@@ -1,14 +0,0 @@
-TODO: implement below
-
-git-annex does use a lot of symlinks. Specicially, relative symlinks,
-that are checked into git. To allow you to move those around without
-annoyance, git-annex can run as a post-commit hook. This way, you can `git mv`
-a symlink to an annexed file, and as soon as you commit, it will be fixed
-up.
-
-`git annex init` tries to set up a post-commit hook that is itself a symlink
-back to git-annex. If you want to have your own shell script in the post-commit
-hook, just make it call `git annex` with no parameters. git-annex will detect
-when it's run from a git hook and do the necessary fixups.
-
-[[done]]
diff --git a/doc/todo/symlink_git-annex_binaries_to___126____47__.local__47__bin_for_prebuilt_package.mdwn b/doc/todo/symlink_git-annex_binaries_to___126____47__.local__47__bin_for_prebuilt_package.mdwn
deleted file mode 100644
index 627143924..000000000
--- a/doc/todo/symlink_git-annex_binaries_to___126____47__.local__47__bin_for_prebuilt_package.mdwn
+++ /dev/null
@@ -1,22 +0,0 @@
-Instead of changing the `PATH`, it should be possible to symlink the binaries to the `~/.local/bin` directory.
-
-Here is a script I put on the prebuilt package (its basename is unimportant but it must be placed along with the git-annex script):
-
- #!/bin/sh
- link="$(readlink "$0")"
- base="$(cd "$(dirname "$0")"; cd "$(dirname "$link")"; echo "$PWD")"
- name="$(basename "$0")"
- exec "$base/$name" "$@"
-
-Symlink this script to `~/.local/bin/git-annex`, `~/.local/bin/git-annex-shell` and `~/.local/bin/git-annex-webapp`. on my system I have:
-
- lrwxrwxrwx. 1 mildred mildred 36 Dec 13 12:12 git-annex -> ../opt/git-annex.linux/run-git-annex
- lrwxrwxrwx. 1 mildred mildred 36 Dec 13 12:12 git-annex-shell -> ../opt/git-annex.linux/run-git-annex
- lrwxrwxrwx. 1 mildred mildred 36 Dec 13 12:12 git-annex-webapp -> ../opt/git-annex.linux/run-git-annex
-
-The script will detect the installation directory using `readlink`. Both absolute and relative links works. Then it starts the correct script depending on the basename of the link.
-
-It should be possible to link the `git-annex`, `git-annex-webapp` and `git-annex-shell` scripts instead if they used `readlink` to find out the location of the prebuilt package.
-
-> I've made the scripts look at readlink, so [[done]].
-> --[[Joey]]
diff --git a/doc/todo/tahoe_lfs_for_reals.mdwn b/doc/todo/tahoe_lfs_for_reals.mdwn
index e5b4a841d..2caeef11d 100644
--- a/doc/todo/tahoe_lfs_for_reals.mdwn
+++ b/doc/todo/tahoe_lfs_for_reals.mdwn
@@ -12,10 +12,12 @@ but a tahoe-lafs special remote would be more flexible.
To support a special remote, a mapping is needed from git-annex keys to
Tahoe keys, stored in the git-annex branch.
-> This is now done, however, there are 2 known
+> This is now done, however, there are 3 known
> problems:
>
> * tahoe start run unncessarily <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2149>
> * web.port can conflict <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2147>
->
+> * Nothing renews leases, which is a problem on grids that expire.
+> <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2212>
+
> --[[Joey]]
diff --git a/doc/todo/untracked_remotes.mdwn b/doc/todo/untracked_remotes.mdwn
deleted file mode 100644
index f538c7560..000000000
--- a/doc/todo/untracked_remotes.mdwn
+++ /dev/null
@@ -1,27 +0,0 @@
-Seems that a fairly common desire in some use cases is to be able to make a
-clone of a repository and be able to get files, without updating the
-location tracking information. (And without even recording a uuid in the
-remote.log.) Use cases include wanting to have temporary
-clones without cluttering history, and centralized development where the
-developers don't care to know about one-another's systems.
-
-It seems that such an untracked repository would need to automatically
-consider itself untrusted. Is that enough to avoid losing data?
-
-> [[done]]; set remote.<name>.annex-readonly=true to prevent
-> git-annex from pushing changes to the remote, or modifying the contents
-> of the remote in any way.
->
-> Note that I am intentionally not making this feature be about security.
-> The remote can still tell if you're connecting to it, and indeed if it
-> really wants to, and git-annex-shell is being used on the remote, it can
-> determine your local repository's uuid.
->
-> This allows for some complicated setups. For example, a public repository
-> P can be a readonly remote of a clone on your laptop L, and L in turn has
-> another, non-readonly remote D on a removable drive. This allows L and D
-> to keep track of which files one-another have, without leaking this info
-> to P. But note that if L adds P as a remote, it also has to mark it
-> readonly, to avoid leaking data.
->
-> --[[Joey]]
diff --git a/doc/todo/untracked_remotes/comment_1_ccc743554cf9270e1db5275273b28265._comment b/doc/todo/untracked_remotes/comment_1_ccc743554cf9270e1db5275273b28265._comment
deleted file mode 100644
index bab26dc10..000000000
--- a/doc/todo/untracked_remotes/comment_1_ccc743554cf9270e1db5275273b28265._comment
+++ /dev/null
@@ -1,43 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 1"
- date="2014-01-01T21:32:56Z"
- content="""
-Such a class of repositories would be very useful, indeed.
-
-A good name would probably be, in descending order:
-
-* ephemeral
-* volatile
-* transient
-* fleeting
-
-It would be somewhere in between 'untrusted' and 'dead'.
-
-I can see two approaches working nicely, here:
-
-1. Local location log
-2. Local location log in another branch / directory
-3. No location log
-
-In the first case, location data would be added to the local location log, but any `git annex sync` or similar would parse the location log and strip out all mentions of the UUID in question.
-This would be somewhat slower when synching, but would ensure that all operations which rely on local logs operate normally.
-
-In the second case, location data would be kept in a different location.
-This would have the benefit of a clean separation and quicker merges, but induces overhead for lookups.
-On the other hand, if those lookups are wrapped cleanly, only those functions would need to know about the different locations.
-
-In the last case, no local logs would be kept.
-
-
-All in all, I think I would prefer the first option.
-
-The one thing that's hard/impossible by design is for other remotes to strip out the data.
-As the repository would not be known to other remotes, they would simply continue the carry the data.
-This can be worked around by setting the repository to "dead".
-Ephemeral repositories would not correct "dead" info about themselves; they _would_ start behaving normally once set to trusted, semit-trusted, or untrusted, though.
-
-
-Richard
-"""]]
diff --git a/doc/todo/untracked_remotes/comment_2_48cc5d0e2282fa53625e0037a035fee3._comment b/doc/todo/untracked_remotes/comment_2_48cc5d0e2282fa53625e0037a035fee3._comment
deleted file mode 100644
index 1233a4379..000000000
--- a/doc/todo/untracked_remotes/comment_2_48cc5d0e2282fa53625e0037a035fee3._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.227"
- subject="comment 2"
- date="2014-01-01T22:30:07Z"
- content="""
-3. doesn't work because there could be a special remote or another repository that an untracked repo communicates with (forming their own little subnet hidden from the main network), and so it needs to use remote.log and location tracking for that in the usual way.
-
-It might suffice to make `git annex sync` not push any branches from an untracked repo to its remotes. Its git-annex branch would thus diverge locally, but still contain the global state. There is probably a way to make git refuse to push a branch (at least when naively running `git push` -- I never completely understand how git tracking branches work). Or a pre-push hook could be installed to block an accidential push.
-
-The uuid of an untracked repo would also leak out in the remoteuuid parameter passed to git-annex-shell. That may not matter (as long as it's not used to update the location log, which it doesn't seem to be; the remoteuuid is only used for displaying transfers AFAICS).
-
-----
-
-I'm still be worried about handling numcopies though. Suppose an untracked repo runs `git annex drop --from publicrepo`. We don't want to end up with the numcopies satisfied by the untracked repo and the other remotes that only it can access, because this would seem to make a file vanish from the public network's perspective. `git annex move` is even worse a problem, and even setting the untracked repo to untrusted or dead wouldn't help if the only copies of files are moved to it.
-
-It seems that an untracked repo should refuse to remove content from the repositories it's \"hiding\" from, and if it's never going to git push to it, there is also no point in uploading annexed objects to it either. So, perhaps make `git.<remote>.annex-read-only = true` be used to configure a remote as read-only, and refuse to push any git branches to a read-only remote, as well as prohibit storekey and removekey being used with any read-only remote (which might be a special remote).
-"""]]
diff --git a/doc/todo/untracked_remotes/comment_3_0d07c5bc8d42f35351c11411eaca88df._comment b/doc/todo/untracked_remotes/comment_3_0d07c5bc8d42f35351c11411eaca88df._comment
deleted file mode 100644
index 946eeaa6c..000000000
--- a/doc/todo/untracked_remotes/comment_3_0d07c5bc8d42f35351c11411eaca88df._comment
+++ /dev/null
@@ -1,29 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 3"
- date="2014-01-02T00:26:14Z"
- content="""
-Regarding 1.: If two untracked repositories are talking to each other, they should not be tracked at all, so I don't see any issue there.
-If an untracked repository communicates with a tracked one, the untracked one should still send updates for the tracked one when synching.
-The solution might really simply be a specific untracked location log distinct from the rest.
-This would even allow merging changes back into the main log if the user decides to track a repository after all.
-
-Regarding pushing to tracking branches: This behavior will change soon and you can override it; see the manpage for `git-config(1)` at push.default.
-
-Location leaks could be solved by passing `00000000-0000-0000-0000-000000000002` as UUID.
-Using that UUID might also be the solution for all untracked repos as it's trivial to special case for this, but:
-* What happens when you switch a known repo to untracked? What happens to its UUID in various logs? Maybe introduce a specific discard log which tries to get rid of all data concerning those UUIDs?
-* What happens when you switch a repo from untracked to tracked? Simply generate (reactivate?) a UUID and switch all local occurences of `00000000-0000-0000-0000-000000000002` to the new UUID?
-
-`git annex drop --from publicrepo` is not allowed to take local copies into account to satisfy `numcopies`, simple as that.
-IMO, this is the only valid approach, as that mirrors the global view from all other repos.
-For all intents and purposes, an untracked repo does not exist.
-
-
-The complement, a read-only repo, would also be very useful.
-Such a repo would hold data, but it would never accept location data of anywhere besides itself and the web remote.
-
-
-Richard
-"""]]
diff --git a/doc/todo/untracked_remotes/comment_4_75ae13c2135a2951b2af548139cb25cd._comment b/doc/todo/untracked_remotes/comment_4_75ae13c2135a2951b2af548139cb25cd._comment
deleted file mode 100644
index fd9397531..000000000
--- a/doc/todo/untracked_remotes/comment_4_75ae13c2135a2951b2af548139cb25cd._comment
+++ /dev/null
@@ -1,46 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 4"
- date="2014-01-02T01:15:40Z"
- content="""
-Another use case of read-only repos:
-
-Instead of merging pull requests or anything, with git-annex, it makes most sense to simply set up the other party as a remote and `git annex sync`.
-This will attempt to push to the other remote.
-
-In this specific case:
-
- % git annex sync
- commit
- ok
- pull origin
- ok
- pull greggrossmeier
- ok
- push origin
- Counting objects: 113, done.
- Delta compression using up to 4 threads.
- Compressing objects: 100% (84/84), done.
- Writing objects: 100% (98/98), 25.16 KiB | 0 bytes/s, done.
- Total 98 (delta 17), reused 1 (delta 0)
- To git@github.com:RichiH/conference_proceedings.git
- * [new branch] git-annex -> synced/git-annex
- * [new branch] master -> synced/master
- ok
- push greggrossmeier
- Username for 'https://github.com':
- Password for 'https://github.com':
- remote: Anonymous access to greggrossmeier/conference_proceedings.git denied.
- fatal: Authentication failed for 'https://github.com/greggrossmeier/conference_proceedings.git/'
- Username for 'https://github.com':
- Password for 'https://github.com':
-
- Pushing to greggrossmeier failed.
-
- (non-fast-forward problems can be solved by setting receive.denyNonFastforwards to false in the remote's git config)
- failed
- git-annex: sync: 1 failed
- %
-
-"""]]
diff --git a/doc/todo/unwanted_repository_version_upgrades.mdwn b/doc/todo/unwanted_repository_version_upgrades.mdwn
new file mode 100644
index 000000000..189550803
--- /dev/null
+++ b/doc/todo/unwanted_repository_version_upgrades.mdwn
@@ -0,0 +1,25 @@
+Is it possible to freeze or peg repositories at a particular version, or to prevent automatic repository version upgrades? Is it possible to "downgrade" a repository?
+
+### Please describe the problem.
+
+We have a number of repositories on a shared file server. These repositories are accessed by multiple machines. Some of these repositories appear to have gotten upgraded and are now unusable on machines running older versions of git-annex.
+
+We're getting this message:
+[[!format sh """
+user@system:/path/to/repository$ git annex status
+git-annex: Repository version 5 is not supported. Upgrade git-annex.
+"""]]
+
+The machine experiencing the problem is running Debian Wheezy (Stable).
+[[!format sh """
+user@system:/path/to/repository$ git version
+git version 1.7.10.4
+user@system:/path/to/repository$ git annex version
+git-annex version: 3.20120629
+local repository version: 5
+default repository version: 3
+supported repository versions: 3
+upgrade supported from repository versions: 0 1 2
+"""]]
+
+I'm guessing that one of the machines with access to this repository was running a newer version of git-annex, and that the repository was upgraded in the course of some action.
diff --git a/doc/todo/unwanted_repository_version_upgrades/comment_1_48f71865b65db4574a10e5c32ee22197._comment b/doc/todo/unwanted_repository_version_upgrades/comment_1_48f71865b65db4574a10e5c32ee22197._comment
new file mode 100644
index 000000000..2eee18f1a
--- /dev/null
+++ b/doc/todo/unwanted_repository_version_upgrades/comment_1_48f71865b65db4574a10e5c32ee22197._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-06-04T18:14:19Z"
+ content="""
+If your repository is not using direct mode, it's completely safe to edit .git/config and set the version back to 3. There is no change between 3 and 5 for indirect mode repositories.
+
+Unfortunately, using git-annex version 5 will automatically upgrade the repository to 5 again. In general, I only want git-annex to support one version at a time, to avoid complicating the code. I did try leaving the indirect mode repositories at v3, but that didn't work out (some details in [[!commit b1d7474c1d713a5b422948178abb4e5f39e85096]]).
+
+I kind of think that part of the problem is that you're using git-annex repositories accessed via a file server. If your server had git-annex installed on it and the clients talked to it only by sshing in and running git-annex-shell, it would not matter if the clients had a newer version, because they'd never access the central repository directly.
+"""]]
diff --git a/doc/todo/use_cp_reflink.mdwn b/doc/todo/use_cp_reflink.mdwn
deleted file mode 100644
index 39518abf1..000000000
--- a/doc/todo/use_cp_reflink.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-The unlock command needs to copy a file, and it would be great to use this:
- cp --reflink=auto src dst
-
-O(1) overhead on BTRFS. Needs coreutils 7.6; and remember that git-annex
-may be used on systems without coreutils..
-
-[[done]]
diff --git a/doc/todo/using_file_metadata_for_preferred___40__wanted__41___content.mdwn b/doc/todo/using_file_metadata_for_preferred___40__wanted__41___content.mdwn
new file mode 100644
index 000000000..d9226d21f
--- /dev/null
+++ b/doc/todo/using_file_metadata_for_preferred___40__wanted__41___content.mdwn
@@ -0,0 +1,12 @@
+Having the option of choosing for every file if we want it in our repository or not would be a great feature. It is currently possible using the wanted expression, but it is not very flexible, or it becomes unmaintainable.
+
+I tried with two repositories a and b, with the following wanted expressions :
+
+* for a: `not metadata=unwanted=<uuid-of-a>`
+* for b: `not metadata=unwanted=<uuid-of-b>`
+
+I think those expressions should be included in standard wanted expressions.
+
+Also, to improbe the feature, it should be possible to set (or remove) metadata in directories, and those should automatically affect their content.
+
+And we could imagine a `git annex unwant` command that would add the unwanted metadata to a file, copy it to other repositories, and attempt to drop it.
diff --git a/doc/todo/using_url_backend.mdwn b/doc/todo/using_url_backend.mdwn
deleted file mode 100644
index 1f3cd5628..000000000
--- a/doc/todo/using_url_backend.mdwn
+++ /dev/null
@@ -1,11 +0,0 @@
-There is no way to `git annex add` a file using the URL [[backend|backends]].
-
-For now, we have to manually make the symlink. Something like this:
-
- ln -s .git/annex/URL:http:%%www.example.com%foo.tar.gz
-
-Note the escaping of slashes.
-
-A `git annex register <url>` command could do this..
-
-[[done]]
diff --git a/doc/todo/utilising_the_mklink_command_on_windows_to_utilise_symlinks_and_therefore_indirect_mode_on_windows.mdwn b/doc/todo/utilising_the_mklink_command_on_windows_to_utilise_symlinks_and_therefore_indirect_mode_on_windows.mdwn
new file mode 100644
index 000000000..263035fa0
--- /dev/null
+++ b/doc/todo/utilising_the_mklink_command_on_windows_to_utilise_symlinks_and_therefore_indirect_mode_on_windows.mdwn
@@ -0,0 +1,7 @@
+It seems like it is possible to achieve this now on later versions of Windows (7 and above).
+
+The mklink tool creates a symlink that works on windows.
+
+There would be some work required so that a linux symlink and a windows symlink are considered the same, a user has recommend 'git update-index --assume-unchanged' for this.
+
+There is a good write up of someone using this approach on vanilla git here: http://stackoverflow.com/questions/5917249/git-symlinks-in-windows
diff --git a/doc/todo/utilising_the_mklink_command_on_windows_to_utilise_symlinks_and_therefore_indirect_mode_on_windows/comment_1_f974b0fc908277fcc35ee6c8073b65c8._comment b/doc/todo/utilising_the_mklink_command_on_windows_to_utilise_symlinks_and_therefore_indirect_mode_on_windows/comment_1_f974b0fc908277fcc35ee6c8073b65c8._comment
new file mode 100644
index 000000000..7e44497e8
--- /dev/null
+++ b/doc/todo/utilising_the_mklink_command_on_windows_to_utilise_symlinks_and_therefore_indirect_mode_on_windows/comment_1_f974b0fc908277fcc35ee6c8073b65c8._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="Karl"
+ subject="Symbolic links are not supported by Windows applications"
+ date="2015-02-06T22:27:27Z"
+ content="""
+Hi!
+
+I did research the practical usage of (real) NTFS-links (junktions + links) when I was programming http://tagstore.org since it would have been a clean solution for that purpose as well.
+
+However, I have to say that NTFS-links only work in theory. First of all, you have to be Administrator to create links by mklink. And secondly, most end-user applications can't cope with links.
+
+The latter one is the real fun-killing issue: many applications (even from Microsoft) are renaming a freshly opened file to a temporary file name. When the user is appending data, the temporary file gets updated. Only when the user is (manually) saving, a *new* file with the original file name is created. This results in *replacing* the original file with the new copy. Unfortunately, links are not handled properly. This way, many applications end up replacing the original linked file with an ordinary file when saving.
+"""]]
diff --git a/doc/todo/vicfg_comment_gotcha.mdwn b/doc/todo/vicfg_comment_gotcha.mdwn
new file mode 100644
index 000000000..910af01a4
--- /dev/null
+++ b/doc/todo/vicfg_comment_gotcha.mdwn
@@ -0,0 +1,20 @@
+A user might run vicfg and want to reset a line back to the default value
+from the value they have periously set. A natural way to do that is to
+comment out the line (or delete it). However, what that actually does is
+vicfg parses the result and skips over that setting, since it's not
+present, and so no change is saved.
+
+It could try to parse commented out lines and detect deleted lines,
+but that way lies madness. Also, it's not at all clear what the "default"
+should be in response to such an action. The default varies per type of
+configuration, and vicfg does't know about defaults.
+
+> [[fixed|done]]; this was a job for Data.Default! --[[Joey]]
+
+Instead, I think it should detect when a setting provided in the input
+version of the file is not present in the output version, and plop the user
+back into the editor with an error, telling them that cannot be handled,
+and suggesting they instead change the value to the value they now want it
+to have.
+
+> Nah, too complicated.
diff --git a/doc/todo/view_git_annex_log_in_webapp.mdwn b/doc/todo/view_git_annex_log_in_webapp.mdwn
new file mode 100644
index 000000000..63b2792a8
--- /dev/null
+++ b/doc/todo/view_git_annex_log_in_webapp.mdwn
@@ -0,0 +1,7 @@
+Just gave git annex a quick try for a few minutes and I must admit it's pretty great.
+
+A must have feature for me is to be able to view git annex log in the web app as "git annex log" doesn't got BIDI support (RTL scripts like Arabic, Farsi, Hebrew).
+Adding Bi-directional text support would be too much to ask from a developer that don't know these languages thus the solution is to use the already the web browser to handle that.
+
+> Closing as it's not clear what the submitter wanted done here. [[done]]
+> --[[Joey]]
diff --git a/doc/todo/view_git_annex_log_in_webapp/comment_1_945054441d93423b2c7b81712b364a3c._comment b/doc/todo/view_git_annex_log_in_webapp/comment_1_945054441d93423b2c7b81712b364a3c._comment
new file mode 100644
index 000000000..362119bae
--- /dev/null
+++ b/doc/todo/view_git_annex_log_in_webapp/comment_1_945054441d93423b2c7b81712b364a3c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmHp5oVW8Z9v_vHs5FRtlYj80TYMQWVTS0"
+ nickname="dhead"
+ subject="comment 1"
+ date="2014-05-30T00:13:27Z"
+ content="""
+...the already built in BIDI support the web browser to handle that.
+"""]]
diff --git a/doc/todo/view_git_annex_log_in_webapp/comment_2_0f434dfe80e90951870218bc1b76c374._comment b/doc/todo/view_git_annex_log_in_webapp/comment_2_0f434dfe80e90951870218bc1b76c374._comment
new file mode 100644
index 000000000..f9e14a55f
--- /dev/null
+++ b/doc/todo/view_git_annex_log_in_webapp/comment_2_0f434dfe80e90951870218bc1b76c374._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.176"
+ subject="comment 2"
+ date="2014-05-30T00:32:25Z"
+ content="""
+I don't understand this request at all
+
+* There are plenty of console emulators with bidi support. If you need bidi support, surely you have already found and are using one of them?
+* `git annex log` does not output much that seems likely to need bidi support. At least no more than any other git-annex command, specifically names of remotes, and names of files.
+* `git annex log` is a low-level tool, almost a debugging tool. Users of the webapp might be interested in which repositories a file has gotten to, but surely not the history of past locations of files.
+"""]]
diff --git a/doc/todo/webapp_nudge_when_less_than_numcopies_clones.mdwn b/doc/todo/webapp_nudge_when_less_than_numcopies_clones.mdwn
new file mode 100644
index 000000000..ee38d0fff
--- /dev/null
+++ b/doc/todo/webapp_nudge_when_less_than_numcopies_clones.mdwn
@@ -0,0 +1,7 @@
+Currently, nothing stops a user from setting up ~/annex, adding some special remote, and never once ending up with a clone of their repository, so there is really no backup of the repository as a whole, despite the special remotes.
+
+Potentially adding to the confusion, they might have remotes in repository groups "full backup" or "backup", and so think everything is backed up.
+
+Webapp could count the number of known remote uuids that are not special remotes, and require there to be at least numcopies of them (excluding the current repo I suppose), and pop up a nudge with a button that presents the various available ways to make a non-special remote.
+
+Working out if a remote uuid is a special remote is probably the hard bit. A special remote will be listed in uuid.log, with a type other than gcrypt or git. Any other uuid, that is not dead, can count as 1 clone. This does not handle git remotes that are not using git-annex (eg github), so it could also look through the git remote list and count any that don't have an annex-uuid.
diff --git a/doc/todo/webapp_ssh_setup_should_work_with_locked_down_git-annex-shell_account.mdwn b/doc/todo/webapp_ssh_setup_should_work_with_locked_down_git-annex-shell_account.mdwn
new file mode 100644
index 000000000..d91bd4be5
--- /dev/null
+++ b/doc/todo/webapp_ssh_setup_should_work_with_locked_down_git-annex-shell_account.mdwn
@@ -0,0 +1,7 @@
+When the webapp is used to set up a ssh repository, it should detect if
+there is already a repository, and sshing in to the server forces running
+git-annex-shell (perhaps by it being set to the user's login shell).
+
+In this case it should just use the already set up repository. Note that
+it would not be possible to add a new repository on the server using only
+git-annex-shell. --[[Joey]]
diff --git a/doc/todo/whishlist:_git_annex_drop_--dry-run.mdwn b/doc/todo/whishlist:_git_annex_drop_--dry-run.mdwn
deleted file mode 100644
index 6bbfd7a4d..000000000
--- a/doc/todo/whishlist:_git_annex_drop_--dry-run.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-It'd be useful to be able to see what `git annex drop` would do *before* asking it to drop any files.
-
-For example, I just set up my preferred contents expressions, and I don't know if I got them right. Before dropping anything from this repo, it'd be nice to check what would happen. I know git annex drop will only drop files that are above their minimum numcopies, but I'd still like to avoid heavyweight copying in case I got my preferred contents expressions wrong.
-
-> [[done]]; added --want-get and --want-drop. --[[Joey]]
diff --git a/doc/todo/whishlist:_git_annex_drop_--dry-run/comment_1_20ecfa8ffa52c238d21b904076ac69a2._comment b/doc/todo/whishlist:_git_annex_drop_--dry-run/comment_1_20ecfa8ffa52c238d21b904076ac69a2._comment
deleted file mode 100644
index 098d399e3..000000000
--- a/doc/todo/whishlist:_git_annex_drop_--dry-run/comment_1_20ecfa8ffa52c238d21b904076ac69a2._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.47"
- subject="comment 1"
- date="2013-10-28T17:11:04Z"
- content="""
-It would be nice, but it adds quite a lot of complexity to have a --dry-run, and if I add it to just drop, the next bug is going to ask for get to have it..
-
-I feel that the right approach is to add a --wanted, which could then be used with find to find files that are and are not wanted, according to the preferred content settings. To see what it would want to get: `git annex find --wanted --not --in .` To see what it would want to drop: `git annex find --not --wanted --in .`
-"""]]
diff --git a/doc/todo/whishlist:_git_annex_drop_--dry-run/comment_2_d19bc268c9467d24baa8d8f77a6e5e09._comment b/doc/todo/whishlist:_git_annex_drop_--dry-run/comment_2_d19bc268c9467d24baa8d8f77a6e5e09._comment
deleted file mode 100644
index 3f1102985..000000000
--- a/doc/todo/whishlist:_git_annex_drop_--dry-run/comment_2_d19bc268c9467d24baa8d8f77a6e5e09._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnWwEEA3CurHkBjIYaJsJzFc4jtY2SCkrQ"
- nickname="Diego"
- subject="comment 2"
- date="2013-10-29T00:28:51Z"
- content="""
-That makes sense, and thanks for adding this feature so quickly!
-"""]]
diff --git a/doc/todo/whishlist:_temporary_relinking_to_remotes.mdwn b/doc/todo/whishlist:_temporary_relinking_to_remotes.mdwn
new file mode 100644
index 000000000..3b1ca70eb
--- /dev/null
+++ b/doc/todo/whishlist:_temporary_relinking_to_remotes.mdwn
@@ -0,0 +1,30 @@
+Imagine the following situation:
+You have a directory structure like this:
+
+`./`
+`+--dir1`
+`|+--file1 (local)`
+`|+--file2 (remote1)`
+`|+--file3 (remote2)`
+
+Now when these files are quite big and you need them in one directory temporarily you would need to use `git annex get dir1` to copy them all over to local. This can take some time.
+
+I whish we had a command like this:
+`git annex getlinks dir1`
+where git annex would try to not link to the missing local objects but to the remote ones. So there is no need to copy the data around just to use it for a short time. After you are done you could use `git annex resetlinks dir1` to reset the links to the local objects.
+
+I know that many specialremotes will not support this without much hassle, but it would be cool to be able to get atleast the links from external drives and maybe ssh remotes via sshfs.
+To keep the data consistent there can be a constraint that every action (add, sync, commit or others) first issue a `resetlinks`.
+
+What do you think of that?
+
+> Already implemented via the `annex.hardlink` configuration.
+>
+> I don't think that separate commands/options to control whether or not
+> to hard link makes sense, because a repository containing hardlinks
+> needs to be set as untrusted to avoid breaking numcopies counting.
+> Which is done automatically by git-annex when it detects the repository
+> was cloned with `git clone --shared`.
+>
+> [[done]]
+> --[[Joey]]
diff --git a/doc/todo/whislist:_allow_setting_annex-ignore_from_the_webapp.mdwn b/doc/todo/whislist:_allow_setting_annex-ignore_from_the_webapp.mdwn
deleted file mode 100644
index 67996281e..000000000
--- a/doc/todo/whislist:_allow_setting_annex-ignore_from_the_webapp.mdwn
+++ /dev/null
@@ -1,2 +0,0 @@
-I would like to be able to set 'annex-ignore' for remote servers through the webapp.
-Maybe a checkbox beneath "Syncing enabled" with something like "Also sync content" that it's checked by default?
diff --git a/doc/todo/windows_git-annex_service.mdwn b/doc/todo/windows_git-annex_service.mdwn
new file mode 100644
index 000000000..5a7e91752
--- /dev/null
+++ b/doc/todo/windows_git-annex_service.mdwn
@@ -0,0 +1,30 @@
+## git-annex as service on windows
+
+Use nssm to run git-annex as a service. Will need to include it in the
+git-annex bundle.
+
+Problem: nssm runs git-annex as a service as a LocalService user. (Or some
+similar user.) This leads to permission problems, when the normal user
+tries to write to its directory.
+
+Solution: Make `git-annex mkservice $repo` command (only avilable on
+Windows) that does:
+
+1. git -c core.sharedRepository=true init $repo
+2. cd $repo; git annex init
+4. chmod 777 -R $repo
+5. Add $repo to C:\.config\git-annex\autostart
+6. If git-annex service does not yet exist in nssm, set it up and start it.
+
+**Problem**: With 2 users writing to one repository, files and subdirs
+will end up owned by git-annex or by the desktop user, and the other user
+won't be able to eg, edit a file or remove a file from a directory.
+
+Make git-annex read `C:\.config\git-annex\autostart`
+on Windows, in addition to the one in $HOME. This way, `git annex assistant
+--autostart` and `git annex webapp` will use it, no matter which user.
+
+WIP git branch: `winservice`
+
+> I am calling this [[done]], it's not done using a service, but it works.
+> --[[Joey]]
diff --git a/doc/todo/windows_git-annex_service/comment_11_c3af14453e99dae5425deaa26ca7310e._comment b/doc/todo/windows_git-annex_service/comment_11_c3af14453e99dae5425deaa26ca7310e._comment
new file mode 100644
index 000000000..83e2ba514
--- /dev/null
+++ b/doc/todo/windows_git-annex_service/comment_11_c3af14453e99dae5425deaa26ca7310e._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm9ocq1Kb0WL-cz-LPpvd2Xm-q8tIQvqXA"
+ nickname="Dominik"
+ subject="running as service"
+ date="2014-05-13T17:40:57Z"
+ content="""
+Hey, just tried git-annex on windows. Love the idea, but the windows port still seems to be a work in progress. I thought I'd check in here and see if i could help. Maybe this is a start:
+
+You can setup any executable file as a windows service using Sc.exe included in the Windows Resource Kit.
+https://support.microsoft.com/kb/251192?SmcNavTabIndex=1
+Its pretty easy and straightforward
+
+Another option would be installing the service using nsis, here is one possible plugin that should do the trick: http://nsis.sourceforge.net/NSIS_Simple_Service_Plugin
+"""]]
diff --git a/doc/todo/windows_git-annex_service/comment_11_e2dda1037cc85f03613f2774c139ad56._comment b/doc/todo/windows_git-annex_service/comment_11_e2dda1037cc85f03613f2774c139ad56._comment
new file mode 100644
index 000000000..df945b517
--- /dev/null
+++ b/doc/todo/windows_git-annex_service/comment_11_e2dda1037cc85f03613f2774c139ad56._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 11"
+ date="2014-06-16T23:47:36Z"
+ content="""
+I am stuck with apparently intractable permissions problems, if the git-annex service doesn't run as the same user who wants to use the git-annex repository.
+
+nssm is supposed to let the user the service runs as be set on the Log on tab, but I cannot get it to accept any user/password there, on my XP test VM. If anyone gets that tab in nssm to work, let me know.
+"""]]
diff --git a/doc/todo/windows_git-annex_service/comment_12_249a48a241f14f32dab49f381d2de3b3._comment b/doc/todo/windows_git-annex_service/comment_12_249a48a241f14f32dab49f381d2de3b3._comment
new file mode 100644
index 000000000..9b7e87654
--- /dev/null
+++ b/doc/todo/windows_git-annex_service/comment_12_249a48a241f14f32dab49f381d2de3b3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm9ocq1Kb0WL-cz-LPpvd2Xm-q8tIQvqXA"
+ nickname="Dominik"
+ subject="comment 12"
+ date="2014-06-17T00:01:35Z"
+ content="""
+To get rid of permission problems, you may find setacl useful. Chmod and chown from msys dont't seem to work correctly with windows 8
+"""]]
diff --git a/doc/todo/windows_git-annex_service/comment_12_d3d91ddc00bc275455022d86b779b148._comment b/doc/todo/windows_git-annex_service/comment_12_d3d91ddc00bc275455022d86b779b148._comment
new file mode 100644
index 000000000..df4545911
--- /dev/null
+++ b/doc/todo/windows_git-annex_service/comment_12_d3d91ddc00bc275455022d86b779b148._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 12"
+ date="2014-05-15T20:36:09Z"
+ content="""
+@Dominik, thanks for the links. Now that the webapp handles prompting for ssh passwords, the console is entirely vestigial and I'd like to get rid of it. The sc commands seems possible to use; there are also haskell libraries for building windows services.
+
+The tricky part is that multiple git-annex assistant processes can be running, if there are multiple local repositories. This seems to be hard to do as a service.
+"""]]
diff --git a/doc/todo/windows_git-annex_service/comment_13_59fbe4d07cdbeb786bae792f9c709ddd._comment b/doc/todo/windows_git-annex_service/comment_13_59fbe4d07cdbeb786bae792f9c709ddd._comment
new file mode 100644
index 000000000..3d630ed0c
--- /dev/null
+++ b/doc/todo/windows_git-annex_service/comment_13_59fbe4d07cdbeb786bae792f9c709ddd._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://johan.kiviniemi.name/"
+ nickname="Johan"
+ subject="comment 13"
+ date="2014-05-16T02:27:51Z"
+ content="""
+“The tricky part is that multiple git-annex assistant processes can be running, if there are multiple local repositories.”
+
+This would probably mean a lot of work, but it might be nice if there was just a single git-annex assistant per user which could take care of multiple local repos. The UI would be nicer, too, since the status of and notifications from every repository could be shown in the same place.
+"""]]
diff --git a/doc/todo/windows_git-annex_service/comment_13_f1d254fe85b0e5cbc7edf9096af4f942._comment b/doc/todo/windows_git-annex_service/comment_13_f1d254fe85b0e5cbc7edf9096af4f942._comment
new file mode 100644
index 000000000..894eb4b6c
--- /dev/null
+++ b/doc/todo/windows_git-annex_service/comment_13_f1d254fe85b0e5cbc7edf9096af4f942._comment
@@ -0,0 +1,27 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 13"
+ date="2014-06-17T16:52:55Z"
+ content="""
+I have messed with the windows ACLs some yesterday, but I don't know how or if it's possible to set ACLs on a directory, such that everything created inside it will be writable by two different users. Certainly this is doable on POSIX; if it's doable on Windows, I'll revisit services.
+
+----
+
+
+For now, it seems that a better option may be to not run git-annex as a service, but use various dos-window hiding technologies.
+
+<http://stackoverflow.com/questions/21031171/how-to-run-a-command-on-the-background-on-windows/21031281#21031281>
+
+I have successfully gotten this to work using nircmd. make a git-annex-webapp.bat, containing:
+
+<pre>
+title GitAnnex
+nircmd.exe win hide ititle \"GitAnnex\"
+git annex webapp
+</pre>
+
+This works, although the DOS box flashes onscreen for maybe 1/10th of a second before nircmd hides it. A git-annex-assistant.bat could run git-annex assistant --autostart, and would be suitable to be setup to run on startup.
+
+(It seems that it's possible to write a VBScript or C# program that sets up a hidden WScript.Shell and runs a command in it. That might avoid the window flash. However, it seems hard to get VBScript to run, and I have not investigated C#.)
+"""]]
diff --git a/doc/todo/windows_git-annex_service/comment_14_79fc0ff98c5bba2ed616e52e5a58e28f._comment b/doc/todo/windows_git-annex_service/comment_14_79fc0ff98c5bba2ed616e52e5a58e28f._comment
new file mode 100644
index 000000000..9d7fb9ff0
--- /dev/null
+++ b/doc/todo/windows_git-annex_service/comment_14_79fc0ff98c5bba2ed616e52e5a58e28f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm9ocq1Kb0WL-cz-LPpvd2Xm-q8tIQvqXA"
+ nickname="Dominik"
+ subject="multiple git-annex assistant processes"
+ date="2014-05-16T23:05:28Z"
+ content="""
+shouldn't be a problem though if all processes are spawned from the same service though, right? Or what problems did you have in mind?
+"""]]
diff --git a/doc/todo/windows_git-annex_service/comment_14_7d5fdac0084c4742967879f5f0f9fccf._comment b/doc/todo/windows_git-annex_service/comment_14_7d5fdac0084c4742967879f5f0f9fccf._comment
new file mode 100644
index 000000000..5aba4e8e4
--- /dev/null
+++ b/doc/todo/windows_git-annex_service/comment_14_7d5fdac0084c4742967879f5f0f9fccf._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 14"
+ date="2014-06-17T16:56:32Z"
+ content="""
+Note that nircmd is not free software; but can be distributed free of charge, provided all the files in the zip are included and unmodified. Sucks, but it's windows..
+"""]]
diff --git a/doc/todo/windows_git-annex_service/comment_15_8f10491f8c0a151284e6d81a83eab212._comment b/doc/todo/windows_git-annex_service/comment_15_8f10491f8c0a151284e6d81a83eab212._comment
new file mode 100644
index 000000000..c7247ce45
--- /dev/null
+++ b/doc/todo/windows_git-annex_service/comment_15_8f10491f8c0a151284e6d81a83eab212._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 15"
+ date="2014-06-17T17:10:28Z"
+ content="""
+<http://www.ntwind.com/software/hstart.html> is another option.
+
+How to run VB script:
+
+<http://stackoverflow.com/questions/289498/running-batch-file-in-background-when-windows-boots-up>
+"""]]
diff --git a/doc/todo/windows_git-annex_service/comment_15_fcd34607116183cc1a764fb307eabe0a._comment b/doc/todo/windows_git-annex_service/comment_15_fcd34607116183cc1a764fb307eabe0a._comment
new file mode 100644
index 000000000..57505d1d9
--- /dev/null
+++ b/doc/todo/windows_git-annex_service/comment_15_fcd34607116183cc1a764fb307eabe0a._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 15"
+ date="2014-06-04T20:49:26Z"
+ content="""
+`sc` can only be used by the administrator. That is problimatic.
+
+Also, in order for sc to be used, the program has to have support for it. It cannot be any arbitrary program. win32-service adds such support. However, I have not been able to get programs using win32-service to build: <https://github.com/mikesteele81/Win32-services/issues/3>
+"""]]
diff --git a/doc/todo/windows_git-annex_service/comment_16_51800fd83cd979b021eabdd4c44cfd61._comment b/doc/todo/windows_git-annex_service/comment_16_51800fd83cd979b021eabdd4c44cfd61._comment
new file mode 100644
index 000000000..7efe7b338
--- /dev/null
+++ b/doc/todo/windows_git-annex_service/comment_16_51800fd83cd979b021eabdd4c44cfd61._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 16"
+ date="2014-06-17T17:18:34Z"
+ content="""
+Using wscript to run a file containing this will start the webapp w/o any console flicker:
+
+<pre>
+Set objshell=CreateObject(\"Wscript.Shell\")
+objShell.Run(\"git-annex webapp\"), 0, False
+</pre>
+"""]]
diff --git a/doc/todo/windows_git-annex_service/comment_16_6a6424f23772e57f1adb1807ca8b93fa._comment b/doc/todo/windows_git-annex_service/comment_16_6a6424f23772e57f1adb1807ca8b93fa._comment
new file mode 100644
index 000000000..53b705d05
--- /dev/null
+++ b/doc/todo/windows_git-annex_service/comment_16_6a6424f23772e57f1adb1807ca8b93fa._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="service not needed"
+ date="2014-06-04T21:16:06Z"
+ content="""
+Seems that all I need to do is pass -optl-mwindows when building git-annex; this will produce a binary that does not open a console window when started from the start menu, but still runs in the background. So it will work as the webapp.
+
+**However**, it can't be used at the command line. So, I think I should make a git-annex-webapp shim that's built that way and starts the real webapp.
+
+But, some work needs to be done, because when run this way, git-annex can't write to stdout or stderr, which it tries to do, and so crashes on startup.
+
+Also, when git-annex is built that way and tries to run git.. windows helpfully opens a command.exe to display any output git might have. So we get lots of flickering command.exe windows.
+"""]]
diff --git a/doc/todo/windows_git-annex_service/comment_17_62a1a33c2aaf4b0b8a0149ec526907d7._comment b/doc/todo/windows_git-annex_service/comment_17_62a1a33c2aaf4b0b8a0149ec526907d7._comment
new file mode 100644
index 000000000..520e50154
--- /dev/null
+++ b/doc/todo/windows_git-annex_service/comment_17_62a1a33c2aaf4b0b8a0149ec526907d7._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm9ocq1Kb0WL-cz-LPpvd2Xm-q8tIQvqXA"
+ nickname="Dominik"
+ subject="comment 17"
+ date="2014-06-05T16:42:02Z"
+ content="""
+Actually you can create a service from any program or batch file using srvany.exe from the windows resource kit: http://support.microsoft.com/kb/137890. An alternative would be the Non-Sucking Service Manager http://nssm.cc/
+Also nsis has some plugins for creating services, but i havent tried any of them: http://nsis.sourceforge.net/How_do_I_start/stop/create/remove/check_a_service
+
+Upsides:
+1) You don't have to touch your code or change anything in the compilation just to create the service
+2) git-annex will still work fine from the console
+Downside: You'd have to include an extra binary or plugin in your installer for creating the service
+
+But I'm pretty sure that none of the commandline calls would pop up in a new window that way, but if you need the verbose mode, you could still start the webapp from console instead as service and everything will show as expected
+"""]]
diff --git a/doc/todo/windows_git-annex_service/comment_18_3a408492107ca6f120b631ce8c41faef._comment b/doc/todo/windows_git-annex_service/comment_18_3a408492107ca6f120b631ce8c41faef._comment
new file mode 100644
index 000000000..494e3f43a
--- /dev/null
+++ b/doc/todo/windows_git-annex_service/comment_18_3a408492107ca6f120b631ce8c41faef._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="nssm notes"
+ date="2014-06-10T18:16:00Z"
+ content="""
+* Have to install and run nssm as an administrator. (It may be possible to get it to run as a non-administrator user if the admin sets it up. I haven't succeeded.)
+* `nssm install git-annex`
+* Set path to git-annex, and set Arguments to: `assistant --autostart`
+* In Exit tab, change Restart to \"No action\"
+* In Process tab, uncheck \"Console window\"
+* Repositories to start up have to be listed in `C:\Documents and Settings\LocalService\.config\git-annex\autostart`
+ (rather than the normal user home directory)
+
+After all that it works! Even opening git-annex webapp from the menu avoids the console window (it appears briefly but then goes away).
+
+Most of this setup could be boiled down to a command line invocation, which git-annex could do at install time. However, it would still need to be run by the admin. Luckily the git-annex installation process already only works as admin (and I guess I could close the bug about that if it gets a legitimate reason to need admin..)
+
+Some changes in git-annex would improve this.
+
+* Maybe have a way to specify the user that git-annex is running on behalf of, and look in that user's home directory, rather than LocalService. (Other parts of the webapp UI, like adding a new repository, also use LocalService as the home directory, which is confusing).
+* Starting the webapp for the first time to create a repository still opens a console window, so find a workaround for this.
+"""]]
diff --git a/doc/todo/windows_git-annex_service/comment_19_c6cbc8fe9218f90c661cd1026658c939._comment b/doc/todo/windows_git-annex_service/comment_19_c6cbc8fe9218f90c661cd1026658c939._comment
new file mode 100644
index 000000000..ec3cf7b09
--- /dev/null
+++ b/doc/todo/windows_git-annex_service/comment_19_c6cbc8fe9218f90c661cd1026658c939._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm9ocq1Kb0WL-cz-LPpvd2Xm-q8tIQvqXA"
+ nickname="Dominik"
+ subject="comment 19"
+ date="2014-06-10T18:24:22Z"
+ content="""
+That sounds great! I'll try it out on windows 8 aswell once i get around to it.
+"""]]
diff --git a/doc/todo/windows_git-annex_service/comment_20_ca245781a37db5546da3f7204adbeebb._comment b/doc/todo/windows_git-annex_service/comment_20_ca245781a37db5546da3f7204adbeebb._comment
new file mode 100644
index 000000000..badb5308a
--- /dev/null
+++ b/doc/todo/windows_git-annex_service/comment_20_ca245781a37db5546da3f7204adbeebb._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 20"
+ date="2014-06-10T19:11:57Z"
+ content="""
+This seems pretty close to a command line to install the service with nssm.
+
+<pre>
+nssm install git-annex 'C:\Program Files\Git\cmd\git-annex.exe' assistant --autostart
+nssm set git-annex AppExit 0 Ignore
+nssm set git-annex AppExit 1 Ignore
+nssm set git-annex AppDirectory C:\
+nssm set git-annex AppNoConsole 1
+nssm start git-annex
+</pre>
+"""]]
diff --git a/doc/todo/windows_support.mdwn b/doc/todo/windows_support.mdwn
index 0afcbb4fe..42f804195 100644
--- a/doc/todo/windows_support.mdwn
+++ b/doc/todo/windows_support.mdwn
@@ -1,20 +1,16 @@
-The git-annex Windows port is not ready for prime time. But it does exist
-now! --[[Joey]]
+The git-annex Windows port is beta, but rapidly becoming polished and
+usable!
## status
-* Doesn't daemonize. Maybe use
- <http://hackage.haskell.org/package/Win32-services>
- or perhaps easier,
- <http://hackage.haskell.org/package/Win32-services-wrapper>
+* There can be problems when the git-annex repository is in a deep
+ or long path. Ie, `C:\loooooooooooooooooongdir\`.
+ [Details here](http://git-annex.branchable.com/bugs/__34__git-annex:_direct:_1_failed__34___on_Windows)
+ Workaround: Put your git-annex repo in `C:\annex` or some similar short
+ path if possible.
* XMPP library not yet built. (See below.)
-* View debug log is empty in windows -- all logs go to console.
- This messes up a few parts of UI that direct user to the debug log.
- Should try to get rid of the console, but only once ssh passwords
- (and possibly gpg) are not prompted there anymore.
-
* Local pairing seems to fail, after acking on Linux box, it stalls.
(Also, of course, the Windows box is unlikely to have a ssh server,
so only pairing with a !Windows box will work.)
@@ -67,9 +63,6 @@ seems unreliable/broken on Windows.
## minor problems
-* rsync special remotes with a rsyncurl of a local directory are known
- buggy. (git-annex tells rsync C:foo and it thinks it means a remote host
- named C...)
* webapp lets user choose to encrypt repo, and generate gpg key,
before checking that gcrypt is not installed
* Ssh connection caching does not work on Windows, so `git annex get`
diff --git a/doc/todo/windows_support/comment_11_c91eb7da8ee05064a5bc4a6e2203314b._comment b/doc/todo/windows_support/comment_11_c91eb7da8ee05064a5bc4a6e2203314b._comment
new file mode 100644
index 000000000..f4a2eaa7f
--- /dev/null
+++ b/doc/todo/windows_support/comment_11_c91eb7da8ee05064a5bc4a6e2203314b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 11"
+ date="2014-06-16T23:48:03Z"
+ content="""
+service stuff moved to [[todo/windows_git-annex_service]]
+"""]]
diff --git a/doc/todo/windows_support/comment_12_0775dc22516cfa8c5e7deea954084947._comment b/doc/todo/windows_support/comment_12_0775dc22516cfa8c5e7deea954084947._comment
new file mode 100644
index 000000000..0c3aa46d4
--- /dev/null
+++ b/doc/todo/windows_support/comment_12_0775dc22516cfa8c5e7deea954084947._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkQOUUx4LVAk6EnstSLvdv7gZc0NsRlHXw"
+ nickname="Dave"
+ subject="windows port volunteer tester"
+ date="2014-09-08T15:39:03Z"
+ content="""
+Hello.
+
+I volunteer to test the Windows port. I can only do so on the work computer. :)
+
+I know how to produce a Minimal Reproducible Example. Are there some areas that need attention?
+
+I've enabled the 'email replies to me' ikiwiki feature. (Nice plugin.)
+
+Cheers,
+
+--Dave
+"""]]
diff --git a/doc/todo/wishlist:_--dry-run_option_for_all_commands.mdwn b/doc/todo/wishlist:_--dry-run_option_for_all_commands.mdwn
new file mode 100644
index 000000000..fbea1b6fa
--- /dev/null
+++ b/doc/todo/wishlist:_--dry-run_option_for_all_commands.mdwn
@@ -0,0 +1,3 @@
+Could a --dry-run option be added to the git annex commands? Or, at least, to the most common ones like `git annex add`.
+
+Given that there is no undo command, it would be nice to have the ability to simulate what git annex will do.
diff --git a/doc/todo/wishlist:_--maxdepth_option_for_git_annex_find.mdwn b/doc/todo/wishlist:_--maxdepth_option_for_git_annex_find.mdwn
new file mode 100644
index 000000000..c309f2491
--- /dev/null
+++ b/doc/todo/wishlist:_--maxdepth_option_for_git_annex_find.mdwn
@@ -0,0 +1,22 @@
+`git annex find` currently makes for a great way to find which files are already local, and don't need to get `git annex get` gotten; obviously `ls` just shows me all the files in a given directory, disregarding git-annex (and without recursing to subdirectories). I think that adding a '--maxdepth' option to `git annex find` would make it much easier to use at directories high up in the directory structure, since currently `git annex find` recurses all subdirectories necessarily, when I really just want to see whether or not there are git-annex files present from a given directory.
+
+Obviously, since directories themselves are not git-annex objects, there is no way to say whether or not they are "present", but perhaps the most intuitive would be to say whether or not any git-annex files under a given directory are present.
+
+For example, if I have:
+./
++-- subdir0/
+| +-- file0 (present in local git-annex repo)
+| +-- file1 (present in local git-annex repo)
++-- subdir1/
+| +-- file0 (not present in local git-annex repo)
+| +-- file1 (not present in local git-annex repo)
++-- file2 (present in local git-annex repo)
+
+and I type `git annex find --maxdepth 1 .`, the output might look something like:
+subdir0/
+file2
+
+rather than:
+subdir0/file0
+subdir0/file1
+file2
diff --git a/doc/todo/wishlist:_--maxdepth_option_for_git_annex_find/comment_1_c355878ac49bbb23a4cf82fe685da9ee._comment b/doc/todo/wishlist:_--maxdepth_option_for_git_annex_find/comment_1_c355878ac49bbb23a4cf82fe685da9ee._comment
new file mode 100644
index 000000000..73d4cba5f
--- /dev/null
+++ b/doc/todo/wishlist:_--maxdepth_option_for_git_annex_find/comment_1_c355878ac49bbb23a4cf82fe685da9ee._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 1"
+ date="2014-07-21T17:28:53Z"
+ content="""
+`find --maxdepth` is a nice optimisation because it can short-circuit when it gets deep in the tree. However, `git annex find` is built on top of `git ls-files --cached`, which has no equivilant way to short-circuit. I am not sure if the format of the index makes it practical for it to get a --maxdepth option (it may need to traverse the whole index, or might be able to short-circuit).
+
+I don't see any point in adding a --matdepth to git-annex if it doesn't actually make it any faster, so getting such a thing into `git ls-files` would be the first step. So, suggest filing a feature request on git.
+"""]]
diff --git a/doc/todo/wishlist:_--maxdepth_option_for_git_annex_find/comment_2_da30a066c4de465fe172ad01057e2380._comment b/doc/todo/wishlist:_--maxdepth_option_for_git_annex_find/comment_2_da30a066c4de465fe172ad01057e2380._comment
new file mode 100644
index 000000000..944f36088
--- /dev/null
+++ b/doc/todo/wishlist:_--maxdepth_option_for_git_annex_find/comment_2_da30a066c4de465fe172ad01057e2380._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlScsufvQF7s8TVTwPd-h_QiP5Hn_i-hrs"
+ nickname="Jason"
+ subject="comment 2"
+ date="2014-07-21T18:37:19Z"
+ content="""
+I see your point, `git ls-files` may still have to walk the whole tree, precluding a speed advantage.
+But I guess the point of what I was saying was more that a way summarize from a high level what is here and what is not would be nice.
+I certainly understand if this is not something you see as worthwhile, but if someone were inclined to write a patch (if ever I find the time) that would add a `--maxdepth` option that would merely summarize the results of `git annex find` would it be something you would be inclined to include in the main repo (providing, of course, that you find the behavior sensible)?
+"""]]
diff --git a/doc/todo/wishlist:_--maxdepth_option_for_git_annex_find/comment_3_f3eadd6241f5cc2886515b2826dc5cf9._comment b/doc/todo/wishlist:_--maxdepth_option_for_git_annex_find/comment_3_f3eadd6241f5cc2886515b2826dc5cf9._comment
new file mode 100644
index 000000000..8da436e09
--- /dev/null
+++ b/doc/todo/wishlist:_--maxdepth_option_for_git_annex_find/comment_3_f3eadd6241f5cc2886515b2826dc5cf9._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 3"
+ date="2014-07-21T18:40:00Z"
+ content="""
+I think that --maxdepth has a well-defined meaning and this summary option would need to be named something else.
+
+I don't object to the idea of implementing it. However, I don't know that it would be very easy to implement either.
+"""]]
diff --git a/doc/todo/wishlist:_--maxdepth_option_for_git_annex_find/comment_4_c766c1465407324fc933db78be325b33._comment b/doc/todo/wishlist:_--maxdepth_option_for_git_annex_find/comment_4_c766c1465407324fc933db78be325b33._comment
new file mode 100644
index 000000000..6025101e2
--- /dev/null
+++ b/doc/todo/wishlist:_--maxdepth_option_for_git_annex_find/comment_4_c766c1465407324fc933db78be325b33._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlScsufvQF7s8TVTwPd-h_QiP5Hn_i-hrs"
+ nickname="Jason"
+ subject="good point"
+ date="2014-07-21T19:22:30Z"
+ content="""
+You make another good point `--maxdepth` is vague in this context...
+I guess if we were to decide to come up with a summary option, it will have be named something else, like `--summary-depth`, where the default would be to represent all files of whatever depth, and specifying the option would take the output that would otherwise get from `git annex find <opts>`, truncate the paths to a certain depth, and then make a set thereof (to remove the many dups), that way any directory that had any files that would have been output by `git annex find <opts>`, that would also be at or above a certain depth, would be listed.
+
+I think if I get a chance I'll try to implement something like this.
+
+"""]]
diff --git a/doc/todo/wishlist:_Add_--byte-limit_option.mdwn b/doc/todo/wishlist:_Add_--byte-limit_option.mdwn
new file mode 100644
index 000000000..28642b50d
--- /dev/null
+++ b/doc/todo/wishlist:_Add_--byte-limit_option.mdwn
@@ -0,0 +1,14 @@
+This option is related to `--time-limit`, but stops after processing X
+bytes. For example, I often need to free up a certain amount of space on
+a disk and want `git-annex move` to stop after it has copied a specified
+amount of data:
+
+ git annex move --to otherdisk --byte-limit 3G
+ git annex drop --auto --byte-limit 500m
+ git annex get --byte-limit 500m
+
+I've been using some `annex.diskreserve` trickery now and then to
+accomplish this, but it's a bit cumbersome and also not a very precise
+way to specify the amount I want to copy/move/get. The last example
+would also be a useful command to limit the traffic when I'm connecting
+via mobile – get as much as possible, but don't blow the mobile quota.
diff --git a/doc/todo/wishlist:_Add_to_Android_version_to_Google_Play.mdwn b/doc/todo/wishlist:_Add_to_Android_version_to_Google_Play.mdwn
deleted file mode 100644
index f9016fb4d..000000000
--- a/doc/todo/wishlist:_Add_to_Android_version_to_Google_Play.mdwn
+++ /dev/null
@@ -1,9 +0,0 @@
-If possible a frequently updated daily build in separate package for those more adventurous of us.
-
-It would make installing and testing much easier and no need to change configuration settings to allow untrusted source.
-
-> While it's vaid to wish that someone might put the apk into Google Play,
-> I a) don't feel it's ready b) don't know if I want to go through
-> the rigamarole required to use that service and c) don't feel this
-> bug tracker is an appropriate place to track what is effectively a
-> nontechnical request. [[done]] --[[Joey]]
diff --git a/doc/todo/wishlist:_An_--all_option_for_dropunused.mdwn b/doc/todo/wishlist:_An_--all_option_for_dropunused.mdwn
deleted file mode 100644
index bd35c0e55..000000000
--- a/doc/todo/wishlist:_An_--all_option_for_dropunused.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-Cleaning out a repository is presently a fairly manual process. Am I missing a UI trick? "dropunsed" with no arguments prints nothing at all; I think in that case it should display the list of what could be dropped.
-
-> [[done]]; comments seem satisfactory and I see no reason to complicate
-> dropunused to output something unused already outputs. --[[Joey]]
diff --git a/doc/todo/wishlist:_An_--all_option_for_dropunused/comment_1_d8726d108b3b40116b4ec3c9935f2dff._comment b/doc/todo/wishlist:_An_--all_option_for_dropunused/comment_1_d8726d108b3b40116b4ec3c9935f2dff._comment
deleted file mode 100644
index 6c728a5d0..000000000
--- a/doc/todo/wishlist:_An_--all_option_for_dropunused/comment_1_d8726d108b3b40116b4ec3c9935f2dff._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.23"
- subject="comment 1"
- date="2012-10-22T15:35:30Z"
- content="""
-`git annex unused` prints the list
-"""]]
diff --git a/doc/todo/wishlist:_An_--all_option_for_dropunused/comment_2_578248f7686ba2d80d7dc8b17c0cdf52._comment b/doc/todo/wishlist:_An_--all_option_for_dropunused/comment_2_578248f7686ba2d80d7dc8b17c0cdf52._comment
deleted file mode 100644
index a87a367d6..000000000
--- a/doc/todo/wishlist:_An_--all_option_for_dropunused/comment_2_578248f7686ba2d80d7dc8b17c0cdf52._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://hands.com/~phil/"
- nickname="hands"
- subject="and you can specify ranges to dropunused"
- date="2012-11-02T09:07:48Z"
- content="""
-so having run:
-
- git annex unused
-
-you can then run:
-
- git annex dropunused 1-10000
-
-or whatever, and it deletes the items in that range from the most recent <tt>unused</tt> invocation
-"""]]
diff --git a/doc/todo/wishlist:_An_option_like_--git-dir.mdwn b/doc/todo/wishlist:_An_option_like_--git-dir.mdwn
deleted file mode 100644
index 0582d9892..000000000
--- a/doc/todo/wishlist:_An_option_like_--git-dir.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-I'm currently integrating git-annex support into a filesystem synchronization tool that I use, and I have a use case where I'd like to run "git annex sync' on a local directory, and then automatically ssh over to remote hosts and run "git annex sync" in the related annex on that remote host. However, while I can easily "cd" on the local, there is no really easy way to "cd" on the remote without a hack.
-
-If I could say: git annex --annex-dir=PATH sync, where PATH is the annex directory, it would solve all my problems, and would also provide a nice correlation to the --git-dir option used by most Git commands. The basic idea is that I shouldn't have to be IN the directory to run git-annex commands, I should be able to tell git-annex which directory to apply its commands to.
-
-> AFAIK this is fully supported for some time, so [[done]] --[[Joey]]
diff --git a/doc/todo/wishlist:_An_option_like_--git-dir/comment_1_5d877d90b8bdf21d4b8649744d229efd._comment b/doc/todo/wishlist:_An_option_like_--git-dir/comment_1_5d877d90b8bdf21d4b8649744d229efd._comment
deleted file mode 100644
index 8e7c3c03e..000000000
--- a/doc/todo/wishlist:_An_option_like_--git-dir/comment_1_5d877d90b8bdf21d4b8649744d229efd._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
- nickname="Justin"
- subject="What about..."
- date="2012-10-16T16:43:29Z"
- content="""
- ssh remotehost \"cd /path/to/annex && git annex sync\"
-"""]]
diff --git a/doc/todo/wishlist:_An_option_like_--git-dir/comment_2_462264821cbc48a433330cbf7ec6044d._comment b/doc/todo/wishlist:_An_option_like_--git-dir/comment_2_462264821cbc48a433330cbf7ec6044d._comment
deleted file mode 100644
index 980658dc6..000000000
--- a/doc/todo/wishlist:_An_option_like_--git-dir/comment_2_462264821cbc48a433330cbf7ec6044d._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="2001:4978:f:21a::2"
- subject="comment 2"
- date="2012-10-17T18:31:58Z"
- content="""
-You can use `GIT_DIR`. It would not be hard to add a --git-dir option, the only catch is how to communicate that state on to where it constructs its git repository data structure. (I suppose it could just set GIT_DIR..)
-"""]]
diff --git a/doc/todo/wishlist:_An_option_like_--git-dir/comment_3_0c3709b07a0a1091ceeee73b69e0f7ac._comment b/doc/todo/wishlist:_An_option_like_--git-dir/comment_3_0c3709b07a0a1091ceeee73b69e0f7ac._comment
deleted file mode 100644
index a76c42d9d..000000000
--- a/doc/todo/wishlist:_An_option_like_--git-dir/comment_3_0c3709b07a0a1091ceeee73b69e0f7ac._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://me.yahoo.com/a/2grhJvAC049fJnvALDXek.6MRZMTlg--#eec89"
- nickname="John"
- subject="Response"
- date="2012-10-20T05:21:13Z"
- content="""
-@Justin If you have full shell access on the remote your solution works fine, but not if git-annex is the only binary you are allowed to execute.
-"""]]
diff --git a/doc/todo/wishlist:_GnuPG_options.mdwn b/doc/todo/wishlist:_GnuPG_options.mdwn
deleted file mode 100644
index 2cadf8213..000000000
--- a/doc/todo/wishlist:_GnuPG_options.mdwn
+++ /dev/null
@@ -1,16 +0,0 @@
-[Maybe I should have extented [[wishlist:_simpler_gpg_usage/]], but I thought I'd make my own since it's perhaps too old.]
-
-I second Justin and [[his idea|wishlist:_simpler_gpg_usage/#comment-e120f8ede0d4cffce17cbf84564211c1]] of having per-remote GnuPG options. I'd even go one step further, and propose the option in the <tt>.gitattributes</tt> file. Indeed by default GnuPG compresses the data before encryption, which doesn't make a lot of sense for git-annex (in my use-case at least); My work-around to save this waste of CPU cycles was to customize my <tt>gpg.conf</tt>, but it's somewhat dirty since I do want to use compression in general.
-
-Here is how I envision the <tt>.git/config</tt>:
-<pre> <code>[annex]
- gnupg-options = --s2k-cipher-algo AES256 --s2k-digest-algo SHA512 --s2k-count 8388608 --cipher-algo AES256 --compress-algo none
-</code></pre>
-
-And compression could be enabled on say, text files, with a suitable wildcard in the <tt>.gitattributes</tt> file.
-<pre> <code>*.txt annex.gnupg-options="--s2k-cipher-algo AES256 --s2k-digest-algo SHA512 --s2k-count 8388608 --cipher-algo AES256 --compress-algo zlib"
-</code></pre>
-
-This is something I could probably hack on if you think it'd be a worthwhile option ;-)
-
-> Done, and [[done]]! --[[Joey]]
diff --git a/doc/todo/wishlist:_GnuPG_options/comment_1_6662e8a71ce20acc62147ef41ecffa50._comment b/doc/todo/wishlist:_GnuPG_options/comment_1_6662e8a71ce20acc62147ef41ecffa50._comment
deleted file mode 100644
index b756eccad..000000000
--- a/doc/todo/wishlist:_GnuPG_options/comment_1_6662e8a71ce20acc62147ef41ecffa50._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-03-09T01:54:30Z"
- content="""
-I'd be happy to apply a patch implementing annex.gnupg-options and/or per-remote remote.annex-gnupg-options, and I don't think it would be very hard to do.
-
-The gitattributes thing would be harder to do efficiently, and seems overkill.
-
-
-"""]]
diff --git a/doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size.mdwn b/doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size.mdwn
deleted file mode 100644
index 12688951d..000000000
--- a/doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size.mdwn
+++ /dev/null
@@ -1,10 +0,0 @@
-When using SSH remote repository, git-annex uses rsync to download or upload files one at a time. I would like to have a preview of the overall transfer size so that I can estimate the transfer duration.
-
-This could be done as an option of get, move or copy, or as a separated command.
-
-If part of get, move or copy, git-annex could print how much has been done or how much left between every files.
-
-Thanks.
-
-> [[done]]; `git-annex status .` seems to cover the requested use case.
-> --[[Joey]]
diff --git a/doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_1_019a2457e07377510feaa089a93bd76c._comment b/doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_1_019a2457e07377510feaa089a93bd76c._comment
deleted file mode 100644
index 4a59f37f1..000000000
--- a/doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_1_019a2457e07377510feaa089a93bd76c._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.193"
- subject="comment 1"
- date="2013-06-25T17:26:25Z"
- content="""
-git-annex is designed to work with really large trees of files, and so it processes files one at a time in a stream. To get an overall estimate of the size, it would need to traverse the whole directory to get the total, and then traverse it again to perform the transfer. This would make no-op transfers take twice as long, which is why I'm unlikely to implement it.
-"""]]
diff --git a/doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_3_29a154699339bf040af0ee8aa24034f1._comment b/doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_3_29a154699339bf040af0ee8aa24034f1._comment
deleted file mode 100644
index 9f0c04017..000000000
--- a/doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_3_29a154699339bf040af0ee8aa24034f1._comment
+++ /dev/null
@@ -1,15 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnHRhCe3qwVKQ8_NOGGSYJnAMW6FFyKbOc"
- nickname="Holger"
- subject="comment 3"
- date="2013-07-02T04:05:06Z"
- content="""
-What do you think of the following simpler variant:
-
- % git annex size myfile1.zip
- myfile1.zip is 1329 MB
- % git annex size mydir/
- mydir contains 2803 files totaling 328 GB.
-
-If you're worried about running over the tree twice, it may be a good idea to store the size of a subtree along with the other metadata.
-"""]]
diff --git a/doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_3_8f7e1c4a5c714cbd719ee170354d79fa._comment b/doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_3_8f7e1c4a5c714cbd719ee170354d79fa._comment
deleted file mode 100644
index fa9fdfb56..000000000
--- a/doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_3_8f7e1c4a5c714cbd719ee170354d79fa._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.193"
- subject="comment 3"
- date="2013-07-02T17:04:47Z"
- content="""
-You can get info like that by running `git annex status .`
-
-This can also be used to find out how big a download is before starting it. For example, to find all files that are not present locally before running git-annex get:
-
-`git annex status . --not --in here`
-"""]]
diff --git a/doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_4_c7335f757e5546aa841cab38fffe7605._comment b/doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_4_c7335f757e5546aa841cab38fffe7605._comment
deleted file mode 100644
index b9212a24d..000000000
--- a/doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_4_c7335f757e5546aa841cab38fffe7605._comment
+++ /dev/null
@@ -1,19 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnHRhCe3qwVKQ8_NOGGSYJnAMW6FFyKbOc"
- nickname="Holger"
- subject="comment 4"
- date="2013-07-02T21:09:03Z"
- content="""
-That's so cool, thanks!
-
-Do you think it'd be a major change to the repository format if the size of any directory was stored there so that this kind of status lookup becomes a constant time operation? The two most important operations are probably:
-
-* The total size of a directory, counting only files present here
-* The total size of a directory, counting all files present at any location
-
-Of course, if the above two were constant time operations, you get --not here for free, too.
-
-To implement this, each node in the directory tree could have two additional 64 bit fields that hold the number of bytes in all files present anywhere (and this set of numbers is synchronized between all repositories), and the number of bytes in all files present here (only kept locally). This is only a small storage overhead (<16 MB if you have a million nodes) and suffices for repositories of size at most 2^64 bytes = 16 exabytes (probably more since most users will be ok with float accuracy). The numbers can be updated in logarithmic time every time a file changes. Instead of two numbers, it may not be that costly to store k numbers where k is the number of locations that a repository is connected to, since k is typically pretty small.
-
-The number of files can be stored in a similar way.
-"""]]
diff --git a/doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_5_d2a845354f23d07880612740cf99ddd4._comment b/doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_5_d2a845354f23d07880612740cf99ddd4._comment
deleted file mode 100644
index 7e160bebf..000000000
--- a/doc/todo/wishlist:_Have_a_preview_of_download_or_upload_size/comment_5_d2a845354f23d07880612740cf99ddd4._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawnHRhCe3qwVKQ8_NOGGSYJnAMW6FFyKbOc"
- nickname="Holger"
- subject="comment 5"
- date="2013-07-03T02:43:32Z"
- content="""
-Btw, this would also provide a cheap test for whether we need to recurse into the folder in certain copy or get actions (e.g., if number of bytes present here equals number of bytes globally present, we don't need to recurse).
-"""]]
diff --git a/doc/todo/wishlist:_Parity_files_for_encrypted_remotes.mdwn b/doc/todo/wishlist:_Parity_files_for_encrypted_remotes.mdwn
new file mode 100644
index 000000000..34f06ad63
--- /dev/null
+++ b/doc/todo/wishlist:_Parity_files_for_encrypted_remotes.mdwn
@@ -0,0 +1,7 @@
+I have data that has accompanying parity files. This is supposed to add some
+security to file integrity; however, it only works as long as the files are
+available unencrypted. In case of encrypted special remotes the existing parity files
+won't be of any use if the encrypted versions of files get corrupted in the remote location.
+
+Would it be worthwhile for git-annex to generate its own
+parity files for the encrypted data in encrypted special remotes?
diff --git a/doc/todo/wishlist:_Prevent_repeated_password_prompts_for_one_command.mdwn b/doc/todo/wishlist:_Prevent_repeated_password_prompts_for_one_command.mdwn
deleted file mode 100644
index cb170dbe4..000000000
--- a/doc/todo/wishlist:_Prevent_repeated_password_prompts_for_one_command.mdwn
+++ /dev/null
@@ -1,45 +0,0 @@
-Simple, when performing various git annex command over ssh, in particular a multi-file get, and using password authentication, git annex will prompt more than once for a user password. This makes batch updates very inconvenient.
-
-> I'd suggest using ssh-agent, or a passwordless ssh key. Possibly in
-> combination with [[git-annex-shell]] if you want to lock down a
-> particular ssh key to only being able to use git-annex and git-daemon.
->
-> Combining multiple operations into a single ssh is on the todo list, but
-> very far down it. --[[Joey]]
-
->> OTOH, automatically running ssh in ControlMaster mode (and stopping it
->> at exit) would be useful and not hard thing for git-annex to do.
->>
->> It'd just need to set the appropriate config options, setting
->> ControlPath to a per-remote socket location that includes git-annex's
->> pid. Then at shutdown, run `ssh -O exit` on each such socket.
->>
->> Complicated slightly by not doing this if the user has already set up
->> more broad ssh connection caching.
->>
->> [[done]]! --[[Joey]]
-
----
-
-Slightly more elaborate design for using ssh connection caching:
-
-* Per-uuid ssh socket in `.git/annex/ssh/user@host.socket`
-* Can be shared among concurrent git-annex processes as well as ssh
- invocations inside the current git-annex.
-* Also a lock file, `.git/annex/ssh/user@host.lock`.
- Open and take shared lock before running ssh; store lock in lock pool.
- (Not locking socket directly, because ssh might want to.)
-* Run ssh like: `ssh -S .git/annex/ssh/user@host.socket -o ControlMaster=auto -o ControlPersist=yes user@host`
-* At shutdown, enumerate all existing sockets, and on each:
- 1. Drop any shared lock.
- 2. Attempt to take an exclusive lock (non-blocking).
- 3. `ssh -q -S .git/annex/ssh/user@host.socket -o ControlMaster=auto -o ControlPersist=yes -O stop user@host`
- (Will exit nonzero if ssh is not running on that socket.)
- 4. And then remove the socket and the lock file.
-* Do same *at startup*. Why? In case an old git-annex was interrupted
- and left behind a ssh. May have moved to a different network
- in the meantime, etc, and be stalled waiting for a response from the
- network, or talking to the wrong interface or something.
- (Ie, the reason why I don't use ssh connection caching by default.)
-* User should be able to override this, to use their own preferred
- connection caching setup. `annex.sshcaching=false`
diff --git a/doc/todo/wishlist:_Prevent_repeated_password_prompts_for_one_command/comment_1_3f9c0d08932c2ede61c802a91261a1f7._comment b/doc/todo/wishlist:_Prevent_repeated_password_prompts_for_one_command/comment_1_3f9c0d08932c2ede61c802a91261a1f7._comment
deleted file mode 100644
index 2801d8e68..000000000
--- a/doc/todo/wishlist:_Prevent_repeated_password_prompts_for_one_command/comment_1_3f9c0d08932c2ede61c802a91261a1f7._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 1"
- date="2011-05-06T18:30:02Z"
- content="""
-Unless you are forced to use a password, you should really be using a ssh key.
-
- ssh-keygen
- #put local .ssh/id_?sa.pub into remote .ssh/authorized_keys (which needs to be chmod 600)
- ssh-add
- git annex whatever
-
-"""]]
diff --git a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates.mdwn b/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates.mdwn
deleted file mode 100644
index 933653578..000000000
--- a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates.mdwn
+++ /dev/null
@@ -1,28 +0,0 @@
-(Hi, this is paulproteus@debian, AKA Asheesh).
-
-I've been enjoying using git-annex to archive my data.
-
-It's great that, by using git-annex and the SHA1 backend, I get a space-saving kind of deduplication through the symbolic links.
-
-I'm looking for the ability to filter files, before they get added to the annex, so that I don't add new files whose content is already in the annex.look That would help me in terms of personal file organization.
-
-It seems there is not, so this is a wishlist bug filed so that maybe such a thing might exist. What I would really like to do is:
-
-* $ git annex add --no-add-if-already-present .
-* $ git commit -m "Slurping in some photos I found on my old laptop hard drive"
-
-And then I'd do something like:
-
-* $ git clean -f
-
-to remove the files that didn't get annexed in this run. That way, only one filename would ever point to a particular SHA1.
-
-I want this because I have copies of various of mine (photos, in particular) scattered across various hard disks. If this feature existed, I could comfortably toss them all into one git annex that grew, bit by bit, to store all of these files exactly once.
-
-(I would be even happier for "git annex add --unlink-duplicates .")
-
-(Another way to do this would be to "git annex add" them all, and then use a "git annex remove-duplicates" that could prompt me about which files are duplicates of each other, and then I could pipe that command's output into xargs git rm.)
-
-(As I write this, I realize it's possible to parse the destination of the symlink in a way that does this..)
-
-> [[done]]; see [[tips/finding_duplicate_files]] --[[Joey]]
diff --git a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_10_d78d79fb2f3713aa69f45d2691cf8dfe._comment b/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_10_d78d79fb2f3713aa69f45d2691cf8dfe._comment
deleted file mode 100644
index 5dbb66cf6..000000000
--- a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_10_d78d79fb2f3713aa69f45d2691cf8dfe._comment
+++ /dev/null
@@ -1,68 +0,0 @@
-[[!comment format=mdwn
- username="http://adamspiers.myopenid.com/"
- nickname="Adam"
- subject="comment 10"
- date="2011-12-23T17:22:11Z"
- content="""
-> Your perl script is not O(n). Inserting into perl hash tables has
-> overhead of minimum O(n log n).
-
-What's your source for this assertion? I would expect an amortized
-average of `O(1)` per insertion, i.e. `O(n)` for full population.
-
-> Not counting the overhead of resizing hash tables,
-> the grevious slowdown if the bucket size is overcome by data (it
-> probably falls back to a linked list or something then), and the
-> overhead of traversing the hash tables to get data out.
-
-None of which necessarily change the algorithmic complexity. However
-real benchmarks are far more useful here than complexity analysis, and
-[the dangers of premature optimization](http://c2.com/cgi/wiki?PrematureOptimization)
-should not be forgotten.
-
-> Your memory size calculations ignore the overhead of a hash table or
-> other data structure to store the data in, which will tend to be
-> more than the actual data size it's storing. I estimate your 50
-> million number is off by at least one order of magnitude, and more
-> likely two;
-
-Sure, I was aware of that, but my point still stands. Even 500k keys
-per 1GB of RAM does not sound expensive to me.
-
-> in any case I don't want git-annex to use 1 gb of ram.
-
-Why not? What's the maximum it should use? 512MB? 256MB?
-32MB? I don't see the sense in the author of a program
-dictating thresholds which are entirely dependent on the context
-in which the program is *run*, not the context in which it's *written*.
-That's why systems have files such as `/etc/security/limits.conf`.
-
-You said you want git-annex to scale to enormous repositories. If you
-impose an arbitrary memory restriction such as the above, that means
-avoiding implementing *any* kind of functionality which requires `O(n)`
-memory or worse. Isn't it reasonable to assume that many users use
-git-annex on repositories which are *not* enormous? Even when they do
-work with enormous repositories, just like with any other program,
-they would naturally expect certain operations to take longer or
-become impractical without sufficient RAM. That's why I say that this
-restriction amounts to throwing out the baby with the bathwater.
-It just means that those who need the functionality would have to
-reimplement it themselves, assuming they are able, which is likely
-to result in more wheel reinventions. I've already shared
-[my implementation](https://github.com/aspiers/git-config/blob/master/bin/git-annex-finddups)
-but how many people are likely to find it, let alone get it working?
-
-> Little known fact: sort(1) will use a temp file as a buffer if too
-> much memory is needed to hold the data to sort.
-
-Interesting. Presumably you are referring to some undocumented
-behaviour, rather than `--batch-size` which only applies when merging
-multiple files, and not when only sorting STDIN.
-
-> It's also written in the most efficient language possible and has
-> been ruthlessly optimised for 30 years, so I would be very surprised
-> if it was not the best choice.
-
-It's the best choice for sorting. But sorting purely to detect
-duplicates is a dismally bad choice.
-"""]]
diff --git a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_11_4316d9d74312112dc4c823077af7febe._comment b/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_11_4316d9d74312112dc4c823077af7febe._comment
deleted file mode 100644
index 286487eee..000000000
--- a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_11_4316d9d74312112dc4c823077af7febe._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 11"
- date="2011-12-23T17:52:21Z"
- content="""
-I don't think that [[tips/finding_duplicate_files]] is hard to find, and the multiple different ways it shows to deal with the duplicate files shows the flexability of the unix pipeline approach.
-"""]]
diff --git a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_12_ed6d07f16a11c6eee7e3d5005e8e6fa3._comment b/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_12_ed6d07f16a11c6eee7e3d5005e8e6fa3._comment
deleted file mode 100644
index 909beed83..000000000
--- a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_12_ed6d07f16a11c6eee7e3d5005e8e6fa3._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 12"
- date="2011-12-23T18:02:24Z"
- content="""
-BTW, sort -S '90%' benchmarks consistently 2x as fast as perl's hashes all the way up to 1 million files. Of course the pipeline approach allows you to swap in perl or whatever else is best for you at scale.
-"""]]
diff --git a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_1_fd213310ee548d8726791d2b02237fde._comment b/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_1_fd213310ee548d8726791d2b02237fde._comment
deleted file mode 100644
index 094e4526e..000000000
--- a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_1_fd213310ee548d8726791d2b02237fde._comment
+++ /dev/null
@@ -1,29 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 1"
- date="2011-01-27T18:29:44Z"
- content="""
-Hey Asheesh, I'm happy you're finding git-annex useful.
-
-So, there are two forms of duplication going on here. There's duplication of the content, and duplication of the filenames
-pointing at that content.
-
-Duplication of the filenames is probably not a concern, although it's what I thought you were talking about at first. It's probably info worth recording that backup-2010/some_dir/foo and backup-2009/other_dir/foo are two names you've used for the same content in the past. If you really wanted to remove backup-2009/foo, you could do it by writing a script that looks at the basenames of the symlink targets and removes files that point to the same content as other files.
-
-Using SHA1 ensures that the same key is used for identical files, so generally avoids duplication of content. But if you have 2 disks with an identical file on each, and make them both into annexes, then git-annex will happily retain both
-copies of the content, one per disk. It generally considers keeping copies of content a good thing. :)
-
-So, what if you want to remove the unnecessary copies? Well, there's a really simple way:
-
-<pre>
-cd /media/usb-1
-git remote add other-disk /media/usb-0
-git annex add
-git annex drop
-</pre>
-
-This asks git-annex to add everything to the annex, but then remove any file contents that it can safely remove. What can it safely remove? Well, anything that it can verify is on another repository such as \"other-disk\"! So, this will happily drop any duplicated file contents, while leaving all the rest alone.
-
-In practice, you might not want to have all your old backup disks mounted at the same time and configured as remotes. Look into configuring [[trust]] to avoid needing do to that. If usb-0 is already a trusted disk, all you need is a simple \"git annex drop\" on usb-1.
-"""]]
diff --git a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_2_4394bde1c6fd44acae649baffe802775._comment b/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_2_4394bde1c6fd44acae649baffe802775._comment
deleted file mode 100644
index 04d58a459..000000000
--- a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_2_4394bde1c6fd44acae649baffe802775._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkjvjLHW9Omza7x1VEzIFQ8Z5honhRB90I"
- nickname="Asheesh"
- subject="I actually *do* want to avoid duplication of filenames"
- date="2011-01-28T07:30:05Z"
- content="""
-I really do want just one filename per file, at least for some cases.
-
-For my photos, there's no benefit to having a few filenames point to the same file. As I'm putting them all into the git-annex, that is a good time to remove the pure duplicates so that I don't e.g. see them twice when browsing the directory as a gallery. Also, I am uploading my photos to the web, and I want to avoid uploading the same photo (by content) twice.
-
-I hope that makes things clearer!
-
-For now I'm just doing this:
-
-* paulproteus@renaissance:/mnt/backups-terabyte/paulproteus/sd-card-from-2011-01-06/sd-cards/DCIM/100CANON $ for file in *; do hash=$(sha1sum \"$file\"); if ls /home/paulproteus/Photos/in-flickr/.git-annex | grep -q \"$hash\"; then echo already annexed ; else flickr_upload \"$file\" && mv \"$file\" \"/home/paulproteus/Photos/in-flickr/2011-01-28/from-some-nested-sd-card-bk\" && (cd /home/paulproteus/Photos/in-flickr/2011-01-28/from-some-nested-sd-card-bk && git annex add . && git commit -m ...) ; fi; done
-
-(Yeah, Flickr for my photos for now. I feel sad about betraying the principle of autonomo.us-ness.)
-"""]]
diff --git a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_3_076cb22057583957d5179d8ba9004605._comment b/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_3_076cb22057583957d5179d8ba9004605._comment
deleted file mode 100644
index d11119bc3..000000000
--- a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_3_076cb22057583957d5179d8ba9004605._comment
+++ /dev/null
@@ -1,18 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkjvjLHW9Omza7x1VEzIFQ8Z5honhRB90I"
- nickname="Asheesh"
- subject="Duplication of the filenames is what I am concerned about"
- date="2011-04-29T11:48:22Z"
- content="""
-For what it's worth, yes, I want to actually forget I ever had the same file in the filesystem with a duplicated name. I'm not just aiming to clean up the disk's space usage; I'm also aiming to clean things up so that navigating the filesystem is easier.
-
-I can write my own script to do that based on the symlinks' target (and I wrote something along those lines), but I still think it'd be nicer if git-annex supported this use case.
-
-Perhaps:
-
-<pre>git annex drop --by-contents</pre>
-
-could let me remove a file from git-annex if the contents are available through a different name. (Right now, \"git annex drop\" requires the name *and* contents match.)
-
--- Asheesh.
-"""]]
diff --git a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_4_f120d1e83c1a447f2ecce302fc69cf74._comment b/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_4_f120d1e83c1a447f2ecce302fc69cf74._comment
deleted file mode 100644
index a218ee3d5..000000000
--- a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_4_f120d1e83c1a447f2ecce302fc69cf74._comment
+++ /dev/null
@@ -1,35 +0,0 @@
-[[!comment format=mdwn
- username="http://adamspiers.myopenid.com/"
- nickname="Adam"
- subject="List the duplicate filenames, then let the user decide what to do"
- date="2011-12-22T12:31:29Z"
- content="""
-I have the same use case as Asheesh but I want to be able to see which filenames point to the same objects and then decide which of the duplicates to drop myself. I think
-
- git annex drop --by-contents
-
-would be the wrong approach because how does git-annex know which ones to drop? There's too much potential for error.
-
-Instead it would be great to have something like
-
- git annex finddups
-
-While it's easy enough to knock up a bit of shell or Perl to achieve this, that relies on knowledge of the annex symlink structure, so I think really it belongs inside git-annex.
-
-If this command gave output similar to the excellent `fastdup` utility:
-
- Scanning for files... 672 files in 10.439 seconds
- Comparing 2 sets of files...
-
- 2 files (70.71 MB/ea)
- /home/adam/media/flat/tour/flat-tour.3gp
- /home/adam/videos/tour.3gp
-
- Found 1 duplicate of 1 file (70.71 MB wasted)
- Scanned 672 files (1.96 GB) in 11.415 seconds
-
-then you could do stuff like
-
- git annex finddups | grep /home/adam/media/flat | xargs rm
-
-"""]]
diff --git a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_5_5c30294b3c59fdebb1eef0ae5da4cd4f._comment b/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_5_5c30294b3c59fdebb1eef0ae5da4cd4f._comment
deleted file mode 100644
index e48a4a9b3..000000000
--- a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_5_5c30294b3c59fdebb1eef0ae5da4cd4f._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://adamspiers.myopenid.com/"
- nickname="Adam"
- subject="Here's a Perl version"
- date="2011-12-22T15:43:51Z"
- content="""
-https://github.com/aspiers/git-config/blob/master/bin/git-annex-finddups
-
-but it would be better in git-annex itself ...
-"""]]
diff --git a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_6_f24541ada1c86d755acba7e9fa7cff24._comment b/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_6_f24541ada1c86d755acba7e9fa7cff24._comment
deleted file mode 100644
index 5d8ac8e61..000000000
--- a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_6_f24541ada1c86d755acba7e9fa7cff24._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 6"
- date="2011-12-22T16:39:24Z"
- content="""
-My main concern with putting this in git-annex is that finding duplicates necessarily involves storing a list of every key and file in the repository, and git-annex is very carefully built to avoid things that require non-constant memory use, so that it can scale to very big repositories. (The only exception is the `unused` command, and reducing its memory usage is a continuing goal.)
-
-So I would rather come at this from a different angle.. like providing a way to output a list of files and their associated keys, which the user can then use in their own shell pipelines to find duplicate keys:
-
- git annex find --include '*' --format='${file} ${key}\n' | sort --key 2 | uniq --all-repeated --skip-fields=1
-
-Which is implemented now!
-
-(Making that pipeline properly handle filenames with spaces is left as an exercise for the reader..)
-"""]]
diff --git a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_7_c39f1bb7c61a89b238c61bee1c049767._comment b/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_7_c39f1bb7c61a89b238c61bee1c049767._comment
deleted file mode 100644
index a33700280..000000000
--- a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_7_c39f1bb7c61a89b238c61bee1c049767._comment
+++ /dev/null
@@ -1,54 +0,0 @@
-[[!comment format=mdwn
- username="http://adamspiers.myopenid.com/"
- nickname="Adam"
- subject="comment 7"
- date="2011-12-22T20:04:14Z"
- content="""
-> My main concern with putting this in git-annex is that finding
-> duplicates necessarily involves storing a list of every key and file
-> in the repository
-
-Only if you want to search the *whole* repository for duplicates, and if
-you do, then you're necessarily going to have to chew up memory in
-some process anyway, so what difference whether it's git-annex or
-(say) a Perl wrapper?
-
-> and git-annex is very carefully built to avoid things that require
-> non-constant memory use, so that it can scale to very big
-> repositories.
-
-That's a worthy goal, but if everything could be implemented with an
-O(1) memory footprint then we'd be in much more pleasant world :-)
-Even O(n) isn't that bad ...
-
-That aside, I like your `--format=\"%f %k\n\"` idea a lot. That opens
-up the \"black box\" of `.git/annex/objects` and makes nice things
-possible, as your pipeline already demonstrates. However, I'm not
-sure why you think `git annex find | sort | uniq` would be more
-efficient. Not only does the sort require the very thing you were
-trying to avoid (i.e. the whole list in memory), but it's also
-O(n log n) which is significantly slower than my O(n) Perl script
-linked above.
-
-More considerations about this pipeline:
-
-* Doesn't it only include locally available files? Ideally it should
- spot duplicates even when the backing blob is not available locally.
-* What's the point of `--include '*'` ? Doesn't `git annex find`
- with no arguments already include all files, modulo the requirement
- above that they're locally available?
-* Any user using this `git annex find | ...` approach is likely to
- run up against its limitations sooner rather than later, because
- they're already used to the plethora of options `find(1)` provides.
- Rather than reinventing the wheel, is there some way `git annex find`
- could harness the power of `find(1)` ?
-
-Those considerations aside, a combined approach would be to implement
-
- git annex find --format=...
-
-and then alter my Perl wrapper to `popen(2)` from that rather than using
-`File::Find`. But I doubt you would want to ship Perl wrappers in the
-distribution, so if you don't provide a Haskell equivalent then users
-who can't code are left high and dry.
-"""]]
diff --git a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_8_221ed2e53420278072a6d879c6f251d1._comment b/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_8_221ed2e53420278072a6d879c6f251d1._comment
deleted file mode 100644
index 5ac292afe..000000000
--- a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_8_221ed2e53420278072a6d879c6f251d1._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://adamspiers.myopenid.com/"
- nickname="Adam"
- subject="How much memory would it actually use anyway?"
- date="2011-12-22T20:15:22Z"
- content="""
-Another thought - an SHA1 digest is 20 bytes. That means you can fit over 50 million keys into 1GB of RAM. Granted you also need memory to store the values (pathnames) which in many cases will be longer, and some users may also choose more expensive backends than SHA1 ... but even so, it seems to me that you are at risk of throwing the baby out with the bath water.
-"""]]
diff --git a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_9_aecfa896c97b9448f235bce18a40621d._comment b/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_9_aecfa896c97b9448f235bce18a40621d._comment
deleted file mode 100644
index 82c6921eb..000000000
--- a/doc/todo/wishlist:_Provide_a___34__git_annex__34___command_that_will_skip_duplicates/comment_9_aecfa896c97b9448f235bce18a40621d._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 9"
- date="2011-12-23T16:07:39Z"
- content="""
-Adam, to answer a lot of points breifly..
-
-* --include='*' makes find list files whether their contents are present or not
-* Your perl script is not O(n). Inserting into perl hash tables has overhead of minimum O(n log n). Not counting the overhead of resizing hash tables, the grevious slowdown if the bucket size is overcome by data (it probably falls back to a linked list or something then), and the overhead of traversing the hash tables to get data out.
-* I think that git-annex's set of file matching options is coming along nicely, and new ones can easily be added, so see no need to pull in unix find(1).
-* Your memory size calculations ignore the overhead of a hash table or other data structure to store the data in, which will tend to be more than the actual data size it's storing. I estimate your 50 million number is off by at least one order of magnitude, and more likely two; in any case I don't want git-annex to use 1 gb of ram.
-* Little known fact: sort(1) will use a temp file as a buffer if too much memory is needed to hold the data to sort. It's also written in the most efficient language possible and has been ruthlessly optimised for 30 years, so I would be very surprised if it was not the best choice.
-"""]]
diff --git a/doc/todo/wishlist:_Restore_s3_files_moved_to_Glacier/comment_1_eb934756cb2af7fa13ad3b5fad7f85b2._comment b/doc/todo/wishlist:_Restore_s3_files_moved_to_Glacier/comment_1_eb934756cb2af7fa13ad3b5fad7f85b2._comment
new file mode 100644
index 000000000..92554aa31
--- /dev/null
+++ b/doc/todo/wishlist:_Restore_s3_files_moved_to_Glacier/comment_1_eb934756cb2af7fa13ad3b5fad7f85b2._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkAUMhKOSkh9JaBA6xst3XxQIIsDEq5Zd4"
+ nickname="Ovidiu"
+ subject="Keen to see this happen too!"
+ date="2014-05-08T21:44:30Z"
+ content="""
+Or alternatively support for S3 Lifecycle Rules.
+I'm not exactly sure what git-annex assistant does if it backs up into a S3 bucket with i.e. a rule to archive everything 1 month later into Glacier. Can it restore/access?
+"""]]
diff --git a/doc/todo/wishlist:_Tell_git_annex___40__assistant__41___which_files___40__not__41___to_annex_via_.gitattributes.mdwn b/doc/todo/wishlist:_Tell_git_annex___40__assistant__41___which_files___40__not__41___to_annex_via_.gitattributes.mdwn
deleted file mode 100644
index f65a95f45..000000000
--- a/doc/todo/wishlist:_Tell_git_annex___40__assistant__41___which_files___40__not__41___to_annex_via_.gitattributes.mdwn
+++ /dev/null
@@ -1,9 +0,0 @@
-Title says it all.
-
-It would be nice if I could tell git annex (assistant) which files (not) to annex (automatically).
-
-[[!tag /design/assistant]]
-
-> [[done]]; use `annex.largefiles` git config to configure criteria for
-> which files should be annexed. The rest will be added to git as normal
-> files. --[[Joey]]
diff --git a/doc/todo/wishlist:__--dry*/comment_1_03bf493d5a7f957339f9aa388ba85ef8._comment b/doc/todo/wishlist:__--dry*/comment_1_03bf493d5a7f957339f9aa388ba85ef8._comment
new file mode 100644
index 000000000..2e314afbc
--- /dev/null
+++ b/doc/todo/wishlist:__--dry*/comment_1_03bf493d5a7f957339f9aa388ba85ef8._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-11-03T16:44:45Z"
+ content="""
+This would add a lot of complexity; it's not like I could switch off
+running all external commands, since many external commands are run to
+query state to decide what to do. And then there's large chunks of code
+that actually do stuff and would have to all be guarded to not run.
+
+I don't see the benefit to justify this work. `git annex add` is entirely
+predictable; it's very similar to `git add`. Which itself lacks a dry-run
+option. And like `git add`, you can certianly undo the effects of `git
+annex add`.
+"""]]
diff --git a/doc/todo/wishlist:___34__git_annex_add__34___multiple_processes.mdwn b/doc/todo/wishlist:___34__git_annex_add__34___multiple_processes.mdwn
deleted file mode 100644
index a04af05b4..000000000
--- a/doc/todo/wishlist:___34__git_annex_add__34___multiple_processes.mdwn
+++ /dev/null
@@ -1,10 +0,0 @@
-Hello,
-
-i'm in the process of managing my music collection with git-annex. The initial "git annex add" using the sha1 banckend is quite long an i was wondering that it could be nice to launch multiple "sha1sum" processes in parallel to speed up things.
-
-Anyway, thanks for this wonderful piece of software.
-
-Jean-Baptiste
-
-> closing as dup of [[parallel possibilities]] (also see comments below)
-> [[done]] --[[Joey]]
diff --git a/doc/todo/wishlist:___34__git_annex_add__34___multiple_processes/comment_1_85b14478411a33e6186a64bd41f0910d._comment b/doc/todo/wishlist:___34__git_annex_add__34___multiple_processes/comment_1_85b14478411a33e6186a64bd41f0910d._comment
deleted file mode 100644
index 2364b7fb8..000000000
--- a/doc/todo/wishlist:___34__git_annex_add__34___multiple_processes/comment_1_85b14478411a33e6186a64bd41f0910d._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 1"
- date="2011-02-25T19:12:42Z"
- content="""
-I'd expect the checksumming to be disk bound, not CPU bound, on most systems.
-
-I suggest you start off on the WORM backend, and then you can run a job later to [[migrate|walkthrough#index14h2]] to the SHA1 backend.
-"""]]
diff --git a/doc/todo/wishlist:___34__git_annex_add__34___multiple_processes/comment_2_82e857f463cfdf73c70f6c0a9f9a31d6._comment b/doc/todo/wishlist:___34__git_annex_add__34___multiple_processes/comment_2_82e857f463cfdf73c70f6c0a9f9a31d6._comment
deleted file mode 100644
index 9b8240658..000000000
--- a/doc/todo/wishlist:___34__git_annex_add__34___multiple_processes/comment_2_82e857f463cfdf73c70f6c0a9f9a31d6._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 2"
- date="2011-02-25T19:54:28Z"
- content="""
-But, see [[todo/parallel_possibilities]]
-"""]]
diff --git a/doc/todo/wishlist:___34__git_annex_add__34___multiple_processes/comment_3_8af85eba7472d9025c6fae4f03e3ad75._comment b/doc/todo/wishlist:___34__git_annex_add__34___multiple_processes/comment_3_8af85eba7472d9025c6fae4f03e3ad75._comment
deleted file mode 100644
index ee769f0dd..000000000
--- a/doc/todo/wishlist:___34__git_annex_add__34___multiple_processes/comment_3_8af85eba7472d9025c6fae4f03e3ad75._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="jbd"
- ip="89.158.228.148"
- subject="comment 3"
- date="2011-02-26T10:26:12Z"
- content="""
-Thank your for your answer and the link !
-"""]]
diff --git a/doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__/comment_3_3e830035df580601f038ce3a7003c39d._comment b/doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__/comment_3_3e830035df580601f038ce3a7003c39d._comment
new file mode 100644
index 000000000..8b4b132cb
--- /dev/null
+++ b/doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__/comment_3_3e830035df580601f038ce3a7003c39d._comment
@@ -0,0 +1,63 @@
+[[!comment format=mdwn
+ username="erics"
+ ip="76.10.136.8"
+ subject="comment 3"
+ date="2014-05-04T00:48:55Z"
+ content="""
+I think things would be simpler if a \"drop --relaxed\" file were to look to
+the outside world just like one that was dropped without \"--relaxed\".
+In particular, even if a file is dropped with \"--relaxed\":
+
+ - the file's work-tree symlink should be broken synchronously by the
+ \"drop --relaxed\" command (as opposed to only being broken later,
+ if and when the file physically goes away)
+
+ - other repos should no longer see the file as available from this repo
+
+Basically, the idea is to add a third state, but **not** a user-visible one.
+Rather, it should be a well hidden implementation detail, which doesn't
+affect the conceptual model (very much like git's own distinction between
+loose and packed objects). Thus, *logically dropped* would be a
+better name than *potentially dropped*.
+
+Corollaries:
+
+ - A logically (but not physically) dropped file should *not* count towards
+ satisfying the numcopies limit, i.e. if some other repo has been asked
+ to drop the file too
+
+ - That in turn means that \"git annex drop --relaxed\" needs to satisfy a
+ numcopies check at the time the user runs it; it's not enough to only do
+ the check later, at physical-deletion time. (At that point, there should probably be
+ a second numcopies check. I don't know whether the model requires it,
+ but even if not, paranoia is good :-) )
+
+ - If the user wants to use the file again, they have to \"git annex get\" it
+ again, just like usual -- but if the file hasn't been physically deleted yet,
+ the \"get\" will be nearly instantaneous, since the data won't have to be copied
+
+One possible implementation would be to have \"drop --relaxed\" behave almost identically
+to a non-relaxed drop -- do all the same safety checks, bookkeeping, etc. The only
+difference would be to have it rename the file at the end, rather
+than deleting it outright. (Logically dropped files could stay in their same
+directory, but with a distinguishing filename, or they could be moved to a
+parallel tree, e.g. *.git/annex/dropped*. I don't have an opinion on that choice;
+I've just picked one arbitrarily to keep talking about.)
+
+\"get\" would simply search .git/annex/dropped before going off to remote
+repos, and if the file is found there, would move (not copy) it back into
+.git/annex/objects.
+
+An alternative might be to set some kind of *logically dropped* flag, but
+that would probably be a much more intrusive change; a lot of places in the
+code would have to check the flag. Doing it as a file rename would make for a much more
+localized change; most of git-annex would completely ignore .git/annex/dropped, and just go
+about its business as it has always done.
+
+(It might be tempting to think of (or even implement) .git/annex/dropped as a
+very low-cost remote, but that's not accurate; the semantics are different.)
+
+I'm just starting to experiment with git-annex, so I can only hope that what
+I'm saying isn't completely silly...
+
+"""]]
diff --git a/doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__/comment_4_e5516689bc128c061dcd66649dc69584._comment b/doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__/comment_4_e5516689bc128c061dcd66649dc69584._comment
new file mode 100644
index 000000000..3e2d6689c
--- /dev/null
+++ b/doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__/comment_4_e5516689bc128c061dcd66649dc69584._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="216.145.95.162"
+ subject="comment 4"
+ date="2014-05-19T16:56:15Z"
+ content="""
+erics, that all makes a lot of sense, except I don't know if there's actually a use case for a git-annex that behaves that way. It doesn't seem to solve the original use case.
+
+I'd be inclinded to instead use the new metadata support. A file could have a tag that indicates it's not strongly wanted, and if git-annex get doesn't have enough space it could seek out and drop such files.
+"""]]
diff --git a/doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__/comment_5_be740e4b06d9130ae6afc5783da3c0e0._comment b/doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__/comment_5_be740e4b06d9130ae6afc5783da3c0e0._comment
new file mode 100644
index 000000000..32beef427
--- /dev/null
+++ b/doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__/comment_5_be740e4b06d9130ae6afc5783da3c0e0._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="erics"
+ ip="76.10.136.8"
+ subject="comment 5"
+ date="2014-06-03T17:49:10Z"
+ content="""
+> It doesn't seem to solve the original use case.
+
+It doesn't? The OP requested:
+
+> I would like to hold onto this data if possible, but if you need the space, please delete it
+
+It looks to me as though my suggestion does just that -- or am I misunderstanding what they asked for?
+"""]]
diff --git a/doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__/comment_6_79d115f95cec46bb51e7fba078524db1._comment b/doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__/comment_6_79d115f95cec46bb51e7fba078524db1._comment
new file mode 100644
index 000000000..6e376e316
--- /dev/null
+++ b/doc/todo/wishlist:___96__git_annex_drop_--relaxed__96__/comment_6_79d115f95cec46bb51e7fba078524db1._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="erics"
+ ip="76.10.136.8"
+ subject="Metadata vs &quot;drop --relaxed&quot;"
+ date="2014-06-03T18:20:50Z"
+ content="""
+[This isn't as much about my suggested implementation for \"drop --relaxed\" as about whether the feature is worth providing in the first place. I'm not arguing strongly for it, actually; just continuing the discussion.]
+
+> I'd be inclinded to instead use the new metadata support.
+
+I see metadata as more for static attributes of a given file -- this thing is \"a picture\", \"related to project X\", \"from Mary\". Thus, the combination of metadata plus preferred-content settings seems to me more suitable for static preferences (likely ones that implement some kind of policy, however informal); e.g. \"this repo wants pictures but not mp3s\", or \"Mary's stuff but not Alex's\".
+
+\"drop --relaxed\", on the other hand, would be good for more ad-hoc usage: \"disk space is getting tight; hmm, I'm not using *foo* today, so git-annex, please delete my local copy of *${myrepo}/foo* -- but only as much as you have to, because I'm going to want it again tomorrow\".
+
+One reason not to want to use metadata and preferred-content settings for such short-term, ad-hoc needs is that you then have to remember to go undo the changes later. That's even worse if you had to add ad-hoc metadata, and now have to go delete it all again. Undoing a \"drop --relaxed\", on the other hand, consists of a simple \"git annex get\".
+
+"""]]
diff --git a/doc/todo/wishlist:___96__git_annex_fsck_--checksums__96___--_verify_checksums_but_disregard_annex.numcopies.mdwn b/doc/todo/wishlist:___96__git_annex_fsck_--checksums__96___--_verify_checksums_but_disregard_annex.numcopies.mdwn
deleted file mode 100644
index 67a7e13e1..000000000
--- a/doc/todo/wishlist:___96__git_annex_fsck_--checksums__96___--_verify_checksums_but_disregard_annex.numcopies.mdwn
+++ /dev/null
@@ -1,12 +0,0 @@
-As the title says, I would like to see an option where git-annex verifies
-that all checksums are OK but not that the required number of copies or
-other possible metrics are fulfilled.
-
--- RichiH
-
-> --numcopies is provided for times when you want to temporarily override
-> annex.numcopies. So, `git annex fsck --numcopies=0`
->
-> I don't see any reason to want to disable the other checks and fixups
-> fsck does (of bad location log data, for example). So, [[done]]
-> --[[Joey]]
diff --git a/doc/todo/wishlist:___96__git_annex_fsck_--checksums__96___--_verify_checksums_but_disregard_annex.numcopies/comment_1_6bcf067e4860bdfeb1d7b9fd1702a43a._comment b/doc/todo/wishlist:___96__git_annex_fsck_--checksums__96___--_verify_checksums_but_disregard_annex.numcopies/comment_1_6bcf067e4860bdfeb1d7b9fd1702a43a._comment
deleted file mode 100644
index c8f40caf7..000000000
--- a/doc/todo/wishlist:___96__git_annex_fsck_--checksums__96___--_verify_checksums_but_disregard_annex.numcopies/comment_1_6bcf067e4860bdfeb1d7b9fd1702a43a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 1"
- date="2013-07-10T23:09:31Z"
- content="""
-As a side note, --numcopies was broken, but it's been fixed with 4.20130709.
-"""]]
diff --git a/doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex.mdwn b/doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex.mdwn
deleted file mode 100644
index cd679485b..000000000
--- a/doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex.mdwn
+++ /dev/null
@@ -1,13 +0,0 @@
-`git annex import` would copy data over from external places into the annex. It would be run from within the annex and in the target location where the files need to end up.
-
-Two basic modes of operation:
-
-* If run on a normal directory, e.g. an SD card, it would simply copy over and `git annex add $newstuff`
-
-* If run on another indirect annex, it would copy over the symlinks, copy over the object data, verify that the checksums are OK and add to the annex
-
-An optional `git annex import --copy-only` would copy over and verify the data, but not yet add it. That would allow the user to import into a decent data structure. If run on non-annexed data, `git annex import --copy-only` would ideally calculate checksums and create symlinks already; thus ensuring data integrity as early as possible.
-
--- RichiH
-
-> [[done]] --[[Joey]] in 2012
diff --git a/doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_1_b9fd1bfaf9a3d238fdb7bc9c2d75fe5f._comment b/doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_1_b9fd1bfaf9a3d238fdb7bc9c2d75fe5f._comment
deleted file mode 100644
index ff9030c99..000000000
--- a/doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_1_b9fd1bfaf9a3d238fdb7bc9c2d75fe5f._comment
+++ /dev/null
@@ -1,22 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.254.222"
- subject="comment 1"
- date="2013-07-07T18:09:20Z"
- content="""
-This is such a good idea that I went into the time machine and arranged for it to be implemented in June 2012:
-
-<pre>
- import [path ...]
- Moves files from somewhere outside the git work‐
- ing copy, and adds them to the annex. Individual
- files to import can be specified. If a direc‐
- tory is specified, all files in it are imported,
- and any subdirectory structure inside it is pre‐
- served.
-
- git annex import /media/camera/DCIM/
-</pre>
-
-I don't see much use for `--copy-only` though. so did not implement it them (also I needed to spend some of my time at the race track). It seems to me that using `--copy-only` as you describe it would do everything except for add the files to git. You can get the same behavior by using `git annex import`, which only stages the new files but does not commit them, and then moving files around and running `git annex add` on them, followed by committing.
-"""]]
diff --git a/doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_2_56f6972413c6f0d9f414245b6f4d27b9._comment b/doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_2_56f6972413c6f0d9f414245b6f4d27b9._comment
deleted file mode 100644
index ccdf2e704..000000000
--- a/doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_2_56f6972413c6f0d9f414245b6f4d27b9._comment
+++ /dev/null
@@ -1,62 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 2"
- date="2013-07-10T23:25:52Z"
- content="""
-Ugh, learn to read, etc...
-
-It's not possible to import from other annexes, though. Importing just the files from an indirect repo does nothing:
-
- ~/test-annex--foo % git annex status
- supported backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
- supported remote types: git S3 bup directory rsync web webdav glacier hook
- repository mode: indirect
- trusted repositories: 0
- semitrusted repositories: 2
- 00000000-0000-0000-0000-000000000001 -- web
- 8105410b-d8ca-4de4-bb6a-91b9772250dc -- here (richih@adamantium:~/test-annex--foo)
- untrusted repositories: 0
- transfers in progress: none
- available local disk space: 52 gigabytes (+1 megabyte reserved)
- local annex keys: 1
- local annex size: 4 bytes
- known annex keys: 1
- known annex size: 4 bytes
- bloom filter size: 16 mebibytes (0% full)
- backend usage:
- SHA256E: 2
- ~/test-annex--foo % ls -l
- total 4
- lrwxrwxrwx 1 richih richih 178 Jul 11 01:21 bar -> .git/annex/objects/g7/9v/SHA256E-s4--7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730/SHA256E-s4--7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730
- ~/test-annex--foo % cd ../test-annex
- ~/test-annex % git annex status
- supported backends: SHA256E SHA1E SHA512E SHA224E SHA384E SHA256 SHA1 SHA512 SHA224 SHA384 WORM URL
- supported remote types: git S3 bup directory rsync web webdav glacier hook
- repository mode: indirect
- trusted repositories: (merging synced/git-annex into git-annex...)
- 0
- semitrusted repositories: 3
- 00000000-0000-0000-0000-000000000001 -- web
- 7c50da8c-dc76-4b4a-b46d-8dd16385691a -- here (richih@adamantium:~/test-annex)
- d4104a13-a2eb-4f5c-ba54-990ece5c81df -- richih@adamantium:~/test-annex-2
- untrusted repositories: 0
- transfers in progress: none
- available local disk space: 52 gigabytes (+1 megabyte reserved)
- local annex keys: 1
- local annex size: 4 bytes
- known annex keys: 1
- known annex size: 4 bytes
- bloom filter size: 16 mebibytes (0% full)
- backend usage:
- SHA256E: 2
- ~/test-annex % ls -l
- total 4
- lrwxrwxrwx 1 richih richih 178 Jul 11 01:20 foo -> .git/annex/objects/91/9x/SHA256E-s4--b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c/SHA256E-s4--b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c
- ~/test-annex % git annex import ../test-annex--foo/bar
- ~/test-annex % ls -l
- total 4
- lrwxrwxrwx 1 richih richih 178 Jul 11 01:20 foo -> .git/annex/objects/91/9x/SHA256E-s4--b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c/SHA256E-s4--b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c
- ~/test-annex %
-
-"""]]
diff --git a/doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_3_2c094bef802a2182de4fcd0def1ad29b._comment b/doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_3_2c094bef802a2182de4fcd0def1ad29b._comment
deleted file mode 100644
index d3870e7c9..000000000
--- a/doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_3_2c094bef802a2182de4fcd0def1ad29b._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 3"
- date="2013-07-11T11:54:25Z"
- content="""
-To expand on this a bit:
-
-* I meant \"ugh, me\" not \"ugh, anyone else\"; I simply did not see it...
-* `git annex import` on a separate annex should copy over the symlinks and the objects behind it and then run `git annex add`, thus verifying, fixing symlinks, etc, imo.
-* Something that may not be said often enough: Thanks :)
-"""]]
diff --git a/doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_4_14915c43001f7f72c9fe5119a104ef5c._comment b/doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_4_14915c43001f7f72c9fe5119a104ef5c._comment
deleted file mode 100644
index 4d4c1fbc5..000000000
--- a/doc/todo/wishlist:___96__git_annex_import__96___--_An_easy_way_to_get_data_into_an_annex/comment_4_14915c43001f7f72c9fe5119a104ef5c._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 4"
- date="2013-07-13T15:25:56Z"
- content="""
-After more deliberation, there should probably be an option to not have `git annex import` run `git annex add` automagically (but still call `git annex fix`) so manual shuffling around of files is still possible.
-
-See [[doc/bugs/__96__git_annex_fix__96___run_on_non-annexed_files_is_no-op]] for more of the rationale on this.
-"""]]
diff --git a/doc/todo/wishlist:___96__git_annex_sync_-m__96__.mdwn b/doc/todo/wishlist:___96__git_annex_sync_-m__96__.mdwn
index 92b5dee27..c83d4db5c 100644
--- a/doc/todo/wishlist:___96__git_annex_sync_-m__96__.mdwn
+++ b/doc/todo/wishlist:___96__git_annex_sync_-m__96__.mdwn
@@ -8,3 +8,4 @@ works, if I run
git annex should use that commit message instead of the default ones. That way, I could use [[sync]] directly and not be forced to commit prior to syncing just to make sure I have a useful commit message.
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/todo/wishlist:___96__git_annex_sync__96___without_auto-commit.mdwn b/doc/todo/wishlist:___96__git_annex_sync__96___without_auto-commit.mdwn
new file mode 100644
index 000000000..b7a7865c8
--- /dev/null
+++ b/doc/todo/wishlist:___96__git_annex_sync__96___without_auto-commit.mdwn
@@ -0,0 +1,5 @@
+I would like to have way, ideally a per-repo-cloud setting which syncs around automatically, to not have `git annex sync` autocommit staged additions.
+
+I often have quite complex additions with a mix of `git add` and `git annex add` in various stages of completion; running `git annex sync` regularly to see what state the other repos are in should not autocommit if possible.
+
+Richard
diff --git a/doc/todo/wishlist:___96__git_annex_sync__96___without_auto-commit/comment_1_fff7cdff9e4bc988139152a799b65c99._comment b/doc/todo/wishlist:___96__git_annex_sync__96___without_auto-commit/comment_1_fff7cdff9e4bc988139152a799b65c99._comment
new file mode 100644
index 000000000..1e455c486
--- /dev/null
+++ b/doc/todo/wishlist:___96__git_annex_sync__96___without_auto-commit/comment_1_fff7cdff9e4bc988139152a799b65c99._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="92.227.51.179"
+ subject="comment 1"
+ date="2014-05-13T20:23:11Z"
+ content="""
+This could be particularly useful for direct-mode repositories.
+"""]]
diff --git a/doc/todo/wishlist:___96__git_annex_sync__96___without_auto-commit/comment_2_b8dd92d7710a9d194312058e53c38d21._comment b/doc/todo/wishlist:___96__git_annex_sync__96___without_auto-commit/comment_2_b8dd92d7710a9d194312058e53c38d21._comment
new file mode 100644
index 000000000..cc6cd727b
--- /dev/null
+++ b/doc/todo/wishlist:___96__git_annex_sync__96___without_auto-commit/comment_2_b8dd92d7710a9d194312058e53c38d21._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="92.227.51.179"
+ subject="comment 2"
+ date="2014-05-13T20:27:38Z"
+ content="""
+I filed a bug today, which boils down to a related issue.
+
+http://git-annex.branchable.com/bugs/git_annex_list__47__whereis_and_uncommited_local_changes/
+"""]]
diff --git a/doc/todo/wishlist:___96__git_annex_sync__96___without_auto-commit/comment_3_206e319f6d7c6b0d1f05af2475a8b335._comment b/doc/todo/wishlist:___96__git_annex_sync__96___without_auto-commit/comment_3_206e319f6d7c6b0d1f05af2475a8b335._comment
new file mode 100644
index 000000000..8e2a57e14
--- /dev/null
+++ b/doc/todo/wishlist:___96__git_annex_sync__96___without_auto-commit/comment_3_206e319f6d7c6b0d1f05af2475a8b335._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 3"
+ date="2014-05-16T19:02:08Z"
+ content="""
+Well, you could: git fetch --all; git annex merge; git push origin
+"""]]
diff --git a/doc/todo/wishlist:_a_spec.remote_for_network_directories_that_would_mount_them_whenever_needed___40__e.g.__44___with_WebDAV__41__.mdwn b/doc/todo/wishlist:_a_spec.remote_for_network_directories_that_would_mount_them_whenever_needed___40__e.g.__44___with_WebDAV__41__.mdwn
deleted file mode 100644
index df589be93..000000000
--- a/doc/todo/wishlist:_a_spec.remote_for_network_directories_that_would_mount_them_whenever_needed___40__e.g.__44___with_WebDAV__41__.mdwn
+++ /dev/null
@@ -1,29 +0,0 @@
-I've seen the [[tips/using box.com as a special remote]] for using mounted WebDAV remote directory for storage of the tracked files.
-
-It's quite close to a scenario familiar to me, although with a difference.
-
-Let me describe my situation.
-
-I worked on a supplement to a set of textbooks. My work was dependent on the revision of the textbooks (for correct references, etc.). The textbooks were being edited by the author, and published in a WebDAV directory.
-
-So I set up a Git repo for my work, and also a branch to track the revisions of the textbooks which [I updated by copying them from the WebDAV directory (after mounting it)](http://unix.stackexchange.com/q/25015/4319). The branch where my work was in was either based on the textbooks branch (and rebased/merged and edited to reflect the changes in the new revisions of the textbooks when needed) or contained the repo with textbooks as a submodule.
-
-The textbooks were large files, so I didn't want them be a part of the Git repo with my supplement work when I publish the repo. But I wanted for those who looked into my public repo to understand how to get the textbooks I'm referring to.
-
-I haven't solved this problem for myself completely. Now I see I could use git-annex for this. I t would track the state of the textbooks in the repo, without actually storing them there, and whenever one would need to get the missing textbooks in a clone of the repo, git-annex could handle the download from the WebDAV directory for him, right?
-
-I simply wrote down the rules for reproducing these downloading and saving operations, together with source URL (as a [Makefile](https://gitorious.org/primary-school-informatics-problems/received_2011-11-mathinf-initial-edition/blobs/RULES/Makefile)):
-
-whenever I wanted to update the revisions of the textbooks (or to download them the first time), I would checkout the branch which included this Makefile and was for holding the textbooks, and the run:
-
- make get
-
--- this target had the temporary mountpoint for the remote directory as prerequisite, and there was a rule to create it, and mount the specified URL at it; then it would sync the files, and I could use Git to track the changes. After I was done inspecting the remote directory, I had to clean up the temporary mountpoint fby unmounting and deleting it. I didn't make it do this automatically after a `get` operation for performance reasons (caching of the remote directory would help if I wanted to access it once again).
-
-So, this differs from [[tips/using box.com as a special remote]] in that the tip for WebDAV suggest to handle the mounting manually, and git-annex knows nothing about the WebDAV URL where the content comes from.
-
-So here's my wish: a [[special remote|special remotes]] to track the WebDAV URLs in the repo, and mount the remote directory automatically under the hood, whenever one wants to get a file from there. (Then I assume it should also unmount it immediately in order to clean up after itself, despite possible inefficiencies).
-
-> I think the hooks are enough.. If not, you can use a hook special remote
-> or the external special remote protocol to make your own custom special
-> remote. So, [[done]] --[[Joey]]
diff --git a/doc/todo/wishlist:_a_spec.remote_for_network_directories_that_would_mount_them_whenever_needed___40__e.g.__44___with_WebDAV__41__/comment_1_f46b0c9b49607e9f4f7a27f5a331ce83._comment b/doc/todo/wishlist:_a_spec.remote_for_network_directories_that_would_mount_them_whenever_needed___40__e.g.__44___with_WebDAV__41__/comment_1_f46b0c9b49607e9f4f7a27f5a331ce83._comment
deleted file mode 100644
index 32dd9c039..000000000
--- a/doc/todo/wishlist:_a_spec.remote_for_network_directories_that_would_mount_them_whenever_needed___40__e.g.__44___with_WebDAV__41__/comment_1_f46b0c9b49607e9f4f7a27f5a331ce83._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.153.14.141"
- subject="comment 1"
- date="2012-09-25T22:56:22Z"
- content="""
-Note that git-annex already has the git configs `remote.<name>.annex-start-command` and `remote.<name>.annex-stop-command` which can be used to handle mounting and umounting.
-"""]]
diff --git a/doc/todo/wishlist:_a_spec.remote_for_network_directories_that_would_mount_them_whenever_needed___40__e.g.__44___with_WebDAV__41__/comment_2_1b34e1dd72011c65e881dec2543a0373._comment b/doc/todo/wishlist:_a_spec.remote_for_network_directories_that_would_mount_them_whenever_needed___40__e.g.__44___with_WebDAV__41__/comment_2_1b34e1dd72011c65e881dec2543a0373._comment
deleted file mode 100644
index 80c5ed2a9..000000000
--- a/doc/todo/wishlist:_a_spec.remote_for_network_directories_that_would_mount_them_whenever_needed___40__e.g.__44___with_WebDAV__41__/comment_2_1b34e1dd72011c65e881dec2543a0373._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://lj.rossia.org/users/imz/"
- ip="79.165.56.162"
- subject="comment 2"
- date="2012-09-25T23:33:23Z"
- content="""
-I see, thanks for pointing at these config options! Perhaps, that'll be enough.
-
-I'll have to see whether the information on how to access the remote copy (the source URL and how to mount it) saved in config variables will be transferred to the clones of the repo.
-
-AFAIU [[location tracking]], usually, git-annex would transfer the information on where to look for copies from one repo to another.
-"""]]
diff --git a/doc/todo/wishlist:_add_--symlink_option_to_import.mdwn b/doc/todo/wishlist:_add_--symlink_option_to_import.mdwn
new file mode 100644
index 000000000..c6c5e66a4
--- /dev/null
+++ b/doc/todo/wishlist:_add_--symlink_option_to_import.mdwn
@@ -0,0 +1,3 @@
+Make 'git annex import' for each imported file leave a symlink behind. One may consider this a bit nasty as this introduces symlinks out of the annex. There are also some things careful to consider, link to the annexed symlinks or into the .git/annex/objects store? the first breaks views, the second relies on implementation details. Shall these be absolute (i'd say yes) or relative (won't harm) links etc. But after all it gives a easier migration and possibly even some new usage to manage files outside of the annex. A sister-command for 'export' comes in mind, drop a symlink anywhere. Anyways, when you feel this is a good idea, keep it, otherwise just delete this idea. Thanks ;)
+
+> Closing as I don't think this is a good idea. [[done]] --[[Joey]]
diff --git a/doc/todo/wishlist:_add_--symlink_option_to_import/comment_1_d5d853142d401b95577567e3eb43495e._comment b/doc/todo/wishlist:_add_--symlink_option_to_import/comment_1_d5d853142d401b95577567e3eb43495e._comment
new file mode 100644
index 000000000..62d4264cb
--- /dev/null
+++ b/doc/todo/wishlist:_add_--symlink_option_to_import/comment_1_d5d853142d401b95577567e3eb43495e._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 1"
+ date="2014-07-15T18:53:47Z"
+ content="""
+Well, it's easy enough to make symlinks to content in a git-annex repository yourself if you want to. I don't see why this belongs in `git annex import`, which is too complicated already.
+"""]]
diff --git a/doc/todo/wishlist:_add_repository_name_to_commit_messages.mdwn b/doc/todo/wishlist:_add_repository_name_to_commit_messages.mdwn
new file mode 100644
index 000000000..1c37cc18b
--- /dev/null
+++ b/doc/todo/wishlist:_add_repository_name_to_commit_messages.mdwn
@@ -0,0 +1,3 @@
+The commit messages made by git-annex are quite spartan, especially in direct mode where one cannot enter its own commit messages. This means that all that the messages say is "branch created", "git-annex automatic sync", "update", "merging" or little more.
+
+It would be nice if git-annex could add at least the name of the repository/remote to the commit message. This would make the log a lot more clear, especially when dealing with problems or bugs.
diff --git a/doc/todo/wishlist:_add_systemd_services_file_samples_for_assistant_and_webapp/comment_3_f465134958d858a8be21f252abd78aae._comment b/doc/todo/wishlist:_add_systemd_services_file_samples_for_assistant_and_webapp/comment_3_f465134958d858a8be21f252abd78aae._comment
new file mode 100644
index 000000000..f2cadb8b0
--- /dev/null
+++ b/doc/todo/wishlist:_add_systemd_services_file_samples_for_assistant_and_webapp/comment_3_f465134958d858a8be21f252abd78aae._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm_YXzEdPHzbSGVwtmTR7g1BqDtTnIBB5s"
+ nickname="Matthias"
+ subject="User doesn't have to be logged in"
+ date="2014-11-26T11:29:10Z"
+ content="""
+my git-annex backend systems don't even have a GUI , much less a logged-in user on them.
+"""]]
diff --git a/doc/todo/wishlist:_add_systemd_services_file_samples_for_assistant_and_webapp/comment_4_268b35928a7a192644d32b6c1d12ecc4._comment b/doc/todo/wishlist:_add_systemd_services_file_samples_for_assistant_and_webapp/comment_4_268b35928a7a192644d32b6c1d12ecc4._comment
new file mode 100644
index 000000000..552b6c189
--- /dev/null
+++ b/doc/todo/wishlist:_add_systemd_services_file_samples_for_assistant_and_webapp/comment_4_268b35928a7a192644d32b6c1d12ecc4._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2014-12-01T22:19:51Z"
+ content="""
+I don't know what the plans are exactly for the user-mode systemd.
+
+It seems to me that, if it eventually becomes the session manager for the
+desktop, then it will probably grow a generator to handle XDG autostart
+.desktop files, and generate systemd services for them. Or, those XDG
+autostart files will become deprecated, and programs will ship user-mode
+service files.
+
+In the first case, git-annex doesn't need to include a systemd file, and in
+the second case it should. So best it seems to wait and see, or hear from
+someone with more information.
+"""]]
diff --git a/doc/todo/wishlist:_addurl_https:.mdwn b/doc/todo/wishlist:_addurl_https:.mdwn
deleted file mode 100644
index 0a62eda6d..000000000
--- a/doc/todo/wishlist:_addurl_https:.mdwn
+++ /dev/null
@@ -1,11 +0,0 @@
-It would be nice if "git annex addurl" allowed https: urls, rather than just http:.
-To give an example, here is a PDF file:
-
- https://www.fbo.gov/utils/view?id=59ba4c8aa59101a09827ab7b9a787b05
-
-If you switch the https: to http: it redirects you back to https:.
-
-As more sites provide https: for non-secret traffic, this becomes more of an issue.
-
-> I've gotten rid of the use of the HTTP library, now it just uses curl.
-> [[done]] --[[Joey]]
diff --git a/doc/todo/wishlist:_addurl_https:/comment_1_4e8f5e1fc52c3000eb2a1dad0624906e._comment b/doc/todo/wishlist:_addurl_https:/comment_1_4e8f5e1fc52c3000eb2a1dad0624906e._comment
deleted file mode 100644
index fa500b1dd..000000000
--- a/doc/todo/wishlist:_addurl_https:/comment_1_4e8f5e1fc52c3000eb2a1dad0624906e._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="2001:4978:f:21a::2"
- subject="comment 1"
- date="2013-01-26T08:44:38Z"
- content="""
-This works fine with \"git annex addurl\".
-
-However, with --fast, it fails:
-
- git-annex: user error (https not supported)
-
-This is because the Haskell HTTP library doesn't support https yet. <https://github.com/haskell/HTTP/issues/17> Seems to be very little momentum on fixing that, perhaps I need to switch the code to use http-enumerator, which does.
-"""]]
diff --git a/doc/todo/wishlist:_allow_configuration_of_downloader_for_addurl.mdwn b/doc/todo/wishlist:_allow_configuration_of_downloader_for_addurl.mdwn
deleted file mode 100644
index 81f7ee4c0..000000000
--- a/doc/todo/wishlist:_allow_configuration_of_downloader_for_addurl.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-It would be neat if Git annex addurl allowed a configuration option for a download manager command to do the actual download in place of wget/curl with a placeholder for the file name to save to & URL to get from (if that's all annex needs). That would allow the user to choose a graphical download manager if desired to make progress easier to monitor. The specific circumstance I'm seeing is with [[wishlist:_an___34__assistant__34___for_web-browsing_--_tracking_the_sources_of_the_downloads]]. I found that the existing Firefox addon [FlashGot](http://flashgot.net/) can run any command with arbitrary arguments including placeholders. Right now I've got a [script](https://gist.github.com/andyg0808/5342434) that changes to a user-selected directory and then runs git-annex addurl in it with the provided url. It works fine as a download manager for FlashGot. The issue is that there is no progress information for large file downloads. If git-annex could start a separate download manager to do the actual download, then the user would be able to check status at any time, even though the git-annex command was run from a GUI and not a terminal.
-
-> [[done]], you can use `annex.web-download-command` now. --[[Joey]]
diff --git a/doc/todo/wishlist:_allow_the_same_remote_to_be_accissable_via_different_methods.mdwn b/doc/todo/wishlist:_allow_the_same_remote_to_be_accissable_via_different_methods.mdwn
deleted file mode 100644
index 849e73cc3..000000000
--- a/doc/todo/wishlist:_allow_the_same_remote_to_be_accissable_via_different_methods.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-This is a wishlist item:
-
-Please allow the same remote to be available via different remotes. So in my LAN my remote is available using a ssh-connection, and when I travel with my laptop, the git-annex can also reach this remote using the Jabber transport.
-
-> [[done]]; this has always been fully supported. --[[Joey]]
diff --git a/doc/todo/wishlist:_allow_the_same_remote_to_be_accissable_via_different_methods/comment_1_abb6263f3807160222bba1122475c89c._comment b/doc/todo/wishlist:_allow_the_same_remote_to_be_accissable_via_different_methods/comment_1_abb6263f3807160222bba1122475c89c._comment
deleted file mode 100644
index a95ba56f9..000000000
--- a/doc/todo/wishlist:_allow_the_same_remote_to_be_accissable_via_different_methods/comment_1_abb6263f3807160222bba1122475c89c._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="2001:4978:f:21a::2"
- subject="comment 1"
- date="2013-08-07T16:09:26Z"
- content="""
-You can have as many git remotes as you like all pointing at the same repository via different paths. git-annex fully supports this AFAIK. Are you having some problem with it?
-"""]]
diff --git a/doc/todo/wishlist:_allow_users_to_provide_UUID_when_running___96__git_annex_init__96__.mdwn b/doc/todo/wishlist:_allow_users_to_provide_UUID_when_running___96__git_annex_init__96__.mdwn
deleted file mode 100644
index 0dc9ec08a..000000000
--- a/doc/todo/wishlist:_allow_users_to_provide_UUID_when_running___96__git_annex_init__96__.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-As there's no way to permanently hide remotes and I have to recreate two repos now, I would love to be able to re-use the old UUIDs to remove clutter.
-
-> git-annex already provides a way to do this: Copy `.git/config` from the
-> original repo (or use `git-config` to set `annex.uuid`) *before* running
-> `git annex init`. [[done]] --[[Joey]]
diff --git a/doc/todo/wishlist:_annex.largefiles_support_for_mimetypes/comment_2_975edca7ec87158216d9e106903dfb48._comment b/doc/todo/wishlist:_annex.largefiles_support_for_mimetypes/comment_2_975edca7ec87158216d9e106903dfb48._comment
new file mode 100644
index 000000000..ba88bfb7c
--- /dev/null
+++ b/doc/todo/wishlist:_annex.largefiles_support_for_mimetypes/comment_2_975edca7ec87158216d9e106903dfb48._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="zardoz"
+ ip="78.48.163.229"
+ subject="comment 2"
+ date="2014-08-02T14:29:26Z"
+ content="""
+This could be achieved in a generic way by allowing filter binaries in expressions, which are run on the filename and return 0 or 1.
+"""]]
diff --git a/doc/todo/wishlist:_annex.largefiles_support_for_mimetypes/comment_3_b2774d265de303143523607053811d23._comment b/doc/todo/wishlist:_annex.largefiles_support_for_mimetypes/comment_3_b2774d265de303143523607053811d23._comment
new file mode 100644
index 000000000..b2bcd87eb
--- /dev/null
+++ b/doc/todo/wishlist:_annex.largefiles_support_for_mimetypes/comment_3_b2774d265de303143523607053811d23._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.7"
+ subject="comment 3"
+ date="2014-08-12T18:58:49Z"
+ content="""
+I think that to support this, the annex.largefiles preferred content expression would need to be supplimented with checks not available in the normal preferred content language.
+
+In general, it's important that preferred content expressions be able to be evaluated without having the file content locally available, and it needs to be possible for a repository to evaluate the preferred content of a sibling repository and know if its sibling wants a file. These things would be defeated by any mime-based expressions. So such expressions should only be available in annex.largefiles and not in other preferred content expressions.
+
+Calling out to `file` or some other external program could work. Although speed can be important. If the assistant is seeing a file frequently change, it's not ideal for it to be repeatedly running `file` on it. There does not seem to be a pure haskell MIME type checking library available at present.
+"""]]
diff --git a/doc/todo/wishlist:_assistant_autostart_port_and_secret_configuration.mdwn b/doc/todo/wishlist:_assistant_autostart_port_and_secret_configuration.mdwn
deleted file mode 100644
index a1aec1d49..000000000
--- a/doc/todo/wishlist:_assistant_autostart_port_and_secret_configuration.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-When starting the assistant when logging in to the system (`--autostart`) it choses a new port an secret everytime. Having the assistant open in a pinned firefox tab which automatically restores when firefox starts we need to get the url from `.git/annex/url` and copy/paste it into the pinned tab. It would be very nice to have a configuration option which assigns a fixed port and secret so everytime the assistant is autostarted it uses the same settings and firefox is happy to open it automatically on start.
-
-> Closing, I've removed the option to choose webapp ports entirely.
-> [[done]] --[[Joey]]
diff --git a/doc/todo/wishlist:_assistant_autostart_port_and_secret_configuration/comment_1_be53b8456eed7eadad5d4b8465c8a42b._comment b/doc/todo/wishlist:_assistant_autostart_port_and_secret_configuration/comment_1_be53b8456eed7eadad5d4b8465c8a42b._comment
deleted file mode 100644
index 651937802..000000000
--- a/doc/todo/wishlist:_assistant_autostart_port_and_secret_configuration/comment_1_be53b8456eed7eadad5d4b8465c8a42b._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.64"
- subject="comment 1"
- date="2013-11-22T16:58:51Z"
- content="""
-It's impossible to guarantee a program will be able to get a particular port. Any other program could be using that port number.
-
-This is why `git annex webapp` opens the webapp using whatever url the assistant has picked. I recommend that rather than using a pinned tab, you make an icon on your desktop that runs `git annex webapp`, and use that to open the app when you want it, much as you'd open any other app. If you wanted to, you could make your system run `git annex webapp` on startup instead of `git annex assistant --autostart`, and you'd get the browser tab opened automatically on start.
-"""]]
diff --git a/doc/todo/wishlist:_command_options_changes.mdwn b/doc/todo/wishlist:_command_options_changes.mdwn
deleted file mode 100644
index b15440181..000000000
--- a/doc/todo/wishlist:_command_options_changes.mdwn
+++ /dev/null
@@ -1,17 +0,0 @@
-Some suggestions for changes to command options:
-
- * --verbose:
- * add alternate: -v
-
- * --from:
- * replace with: -s $SOURCE || --source=$SOURCE
-
- * --to:
- * replace with: -d $DESTINATION || --destination=$DESTINATION
-
- * --force:
- * add alternate: -F
- * "-f" was removed in v0.20110417
- * since it forces unsafe operations, should be capitalized to reduce chance of accidental usage.
-
-[[done]], see comments
diff --git a/doc/todo/wishlist:_command_options_changes/comment_1_bfba72a696789bf21b2435dea15f967a._comment b/doc/todo/wishlist:_command_options_changes/comment_1_bfba72a696789bf21b2435dea15f967a._comment
deleted file mode 100644
index 0ab113211..000000000
--- a/doc/todo/wishlist:_command_options_changes/comment_1_bfba72a696789bf21b2435dea15f967a._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 1"
- date="2011-04-17T23:46:37Z"
- content="""
---to and --from seem to have different semantics than --source and --destination. Subtle, but still different.
-
-That being said, I am not sure --from and --to are needed at all. Calling the local repo . and all remotes by their name, they are arguably redundant and removing them would make the syntax a lot prettier; mv and cp don't need them, either.
-
-I am not sure changing syntax at this point is considered good style though personally, I wouldn't mind adapting and would actually prefer it over using --to and --from.
-
--v and -q would be nice.
-
-
-Richard
-"""]]
diff --git a/doc/todo/wishlist:_command_options_changes/comment_2_f6a637c78c989382e3c22d41b7fb4cc2._comment b/doc/todo/wishlist:_command_options_changes/comment_2_f6a637c78c989382e3c22d41b7fb4cc2._comment
deleted file mode 100644
index 0072ae1d7..000000000
--- a/doc/todo/wishlist:_command_options_changes/comment_2_f6a637c78c989382e3c22d41b7fb4cc2._comment
+++ /dev/null
@@ -1,19 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 2"
- date="2011-04-19T20:13:10Z"
- content="""
-Let's see..
-
-* -v is already an alias for --verbose
-
-* I don't find --source and --destination as easy to type or as clear as --from or --to.
-
-* -F is fast, so it cannot be used for --force. And I have no desire to make it easy to mistype a short option and enable --force; it can lose data.
-
-@richard while it would be possible to support some syntax like \"git annex copy . remote\"; what is it supposed to do if there are local files named foo and bar, and a remotes named foo and bar? Does \"git annex copy foo bar\" copy file foo to remote bar, or file bar from remote foo? I chose to use --from/--to to specify remotes independant of files to avoid such
-ambiguity, which plain old `cp` doesn't have since it's operating entirely on filesystem objects, not both filesystem objects and abstract remotes.
-
-Seems like nothing to do here. [[done]] --[[Joey]]
-"""]]
diff --git a/doc/todo/wishlist:_command_options_changes/comment_3_bf1114533d2895804e531e76eb6b8095._comment b/doc/todo/wishlist:_command_options_changes/comment_3_bf1114533d2895804e531e76eb6b8095._comment
deleted file mode 100644
index 9fcbae6d2..000000000
--- a/doc/todo/wishlist:_command_options_changes/comment_3_bf1114533d2895804e531e76eb6b8095._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 3"
- date="2011-04-20T21:28:06Z"
- content="""
-Good point. scp fixes this by using a colon, but as colons aren't needed in git-annex remotes' names... -- RichiH
-"""]]
diff --git a/doc/todo/wishlist:_define_remotes_that_must_have_all_files.mdwn b/doc/todo/wishlist:_define_remotes_that_must_have_all_files.mdwn
deleted file mode 100644
index a3beaadae..000000000
--- a/doc/todo/wishlist:_define_remotes_that_must_have_all_files.mdwn
+++ /dev/null
@@ -1,22 +0,0 @@
-I would like to be able to name a few remotes that must retain *all* annexed
-files. `git-annex fsck` should warn me if any files are missing from those
-remotes, even if `annex.numcopies` has been satisfied by other remotes.
-
-I imagine this could also be useful for bup remotes, but I haven't actually
-looked at those yet.
-
-Based on existing output, this is what a warning message could look like:
-
- fsck FILE
- 3 of 3 trustworthy copies of FILE exist.
- FILE is, however, still missing from these required remotes:
- UUID -- Backup Drive 1
- UUID -- Backup Drive 2
- Back it up with git-annex copy.
- Warning
-
-What do you think?
-
-> I think that [[required_content]] will make it easy to configure
-> such remotes, so this is another reason to build that. Closing
-> this bug as a dup of that one; [[done]] --[[Joey]]
diff --git a/doc/todo/wishlist:_define_remotes_that_must_have_all_files/comment_1_cceccc1a1730ac688d712b81a44e31c3._comment b/doc/todo/wishlist:_define_remotes_that_must_have_all_files/comment_1_cceccc1a1730ac688d712b81a44e31c3._comment
deleted file mode 100644
index 1f65fd982..000000000
--- a/doc/todo/wishlist:_define_remotes_that_must_have_all_files/comment_1_cceccc1a1730ac688d712b81a44e31c3._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 1"
- date="2011-04-23T16:27:13Z"
- content="""
-Seems to have a scalability problem, what happens when such a repository becomes full?
-
-Another way to accomplish I think the same thing is to pick the repositories that you would include in such a set, and make all other repositories untrusted. And set numcopies as desired. Then git-annex will never remove files from the set of non-untrusted repositories, and fsck will warn if a file is present on only an untrusted repository.
-"""]]
diff --git a/doc/todo/wishlist:_define_remotes_that_must_have_all_files/comment_2_eec848fcf3979c03cbff2b7407c75a7a._comment b/doc/todo/wishlist:_define_remotes_that_must_have_all_files/comment_2_eec848fcf3979c03cbff2b7407c75a7a._comment
deleted file mode 100644
index 1855cdda0..000000000
--- a/doc/todo/wishlist:_define_remotes_that_must_have_all_files/comment_2_eec848fcf3979c03cbff2b7407c75a7a._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="gernot"
- ip="87.79.209.169"
- subject="comment 2"
- date="2011-04-24T11:20:05Z"
- content="""
-Right, I have thought about untrusting all but a few remotes to achieve
-something similar before and I'm sure it would kind of work. It would be more
-of an ugly workaround, however, because I would have to untrust remotes that
-are, in reality, at least semi-trusted. That's why an extra option/attribute
-for that kind of purpose/remote would be nice.
-
-Obviously I didn't see the scalability problem though. Good Point. Maybe I can
-achieve the same thing by writing a log parsing script for myself?
-
-"""]]
diff --git a/doc/todo/wishlist:_detection_of_merge_conflicts.mdwn b/doc/todo/wishlist:_detection_of_merge_conflicts.mdwn
deleted file mode 100644
index 1b4caeff0..000000000
--- a/doc/todo/wishlist:_detection_of_merge_conflicts.mdwn
+++ /dev/null
@@ -1,13 +0,0 @@
-A conflict during sync or merge is something that requires user intervention, or at least notification. For that reason it would be nice if git annex returned a nonzero exit status when such a conflict happened during a sync or a merge. This is what git does after a conflicting pull, and would make it easier to spot a conflict in automated syncs without having to parse annex output or the logs.
-
-> Good idea, [[done]]. --[[Joey]]
-
-Also, it would be nice if your new `git annex status` were able to inform about remaining conflicts in the repo, for instance by reporting files with variant-XXX suffix.
-
-> Hmm, that would need a separate pass through the whole tree, since
-> currently it can use `git ls-files` to find only modified/deleted/new
-> files. I would rather not make the new `git annex status` slower for
-> this.
->
-> It would be possible to add it to `git annex info` (old `status`)
-> which already has to look through the entire work tree.
diff --git a/doc/todo/wishlist:_disable_automatic_commits.mdwn b/doc/todo/wishlist:_disable_automatic_commits.mdwn
index 14c131796..03ed40211 100644
--- a/doc/todo/wishlist:_disable_automatic_commits.mdwn
+++ b/doc/todo/wishlist:_disable_automatic_commits.mdwn
@@ -7,8 +7,8 @@ history. Some motivating reasons:
* manual choice of which files to annex (based on predicted usage) could be useful, e.g. a repo might contain a 4MB PDF which you want available in *every* remote even without `git annex get`, and also some 2MB images which are only required in some remotes
-> This particular case is now catered to by the "manual" repository group
-> in preferred content settings. --[[Joey]]
+> This particular case is now catered to by the ["manual" repository group](/preferred_content/standard_groups/)
+> in [[preferred content]] settings. --[[Joey]]
Obviously this needs to be configurable at least per repository, and
ideally perhaps even per remote, since usage habits can vary from machine
diff --git a/doc/todo/wishlist:_display_name_of_object_when_addWatcher_gets_a_permission_denied.mdwn b/doc/todo/wishlist:_display_name_of_object_when_addWatcher_gets_a_permission_denied.mdwn
deleted file mode 100644
index 837f0a587..000000000
--- a/doc/todo/wishlist:_display_name_of_object_when_addWatcher_gets_a_permission_denied.mdwn
+++ /dev/null
@@ -1,6 +0,0 @@
-When addWatcher gets a permission denied, it would be helpful to display the name of the object on which the permission was denied, in the error message which shows in the webapp.
-
-> I have made the inotify code more robust; now it doesn't crash if it
-> cannot read a directory or a file, and only logs a warning, which includes
-> the directory name.
-> [[done]] --[[Joey]]
diff --git a/doc/todo/wishlist:_display_name_of_object_when_addWatcher_gets_a_permission_denied/comment_1_d2665e7347689b520d37561cfddf0aa8._comment b/doc/todo/wishlist:_display_name_of_object_when_addWatcher_gets_a_permission_denied/comment_1_d2665e7347689b520d37561cfddf0aa8._comment
deleted file mode 100644
index de0528855..000000000
--- a/doc/todo/wishlist:_display_name_of_object_when_addWatcher_gets_a_permission_denied/comment_1_d2665e7347689b520d37561cfddf0aa8._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.152.108.220"
- subject="comment 1"
- date="2013-09-25T18:47:13Z"
- content="""
-This is an exception from the inotify library, which is what contains the `addWatch` function. I catch and display the exception. Since `addWatch` is only passed a directory to watch, the most I could do is tack on the name of the directory when displaying the exception. That does not seem likely to be much help?
-"""]]
diff --git a/doc/todo/wishlist:_display_name_of_object_when_addWatcher_gets_a_permission_denied/comment_2_db153571a32fb072453ed583e3e9ccf4._comment b/doc/todo/wishlist:_display_name_of_object_when_addWatcher_gets_a_permission_denied/comment_2_db153571a32fb072453ed583e3e9ccf4._comment
deleted file mode 100644
index e0199a42d..000000000
--- a/doc/todo/wishlist:_display_name_of_object_when_addWatcher_gets_a_permission_denied/comment_2_db153571a32fb072453ed583e3e9ccf4._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl-g0hYpGY11pBP_42lHh5GWTyFuB4UwH8"
- nickname="Nicolas"
- subject="comment 2"
- date="2013-09-25T23:08:56Z"
- content="""
-Well, of course it would not be as helpful as if the inotify exception would contain the name of the exact object on which it got a permission denied (would this be a valid wishlist request for inotify?), but I think that displaying the name of the directory would already be better than nothing.
-"""]]
diff --git a/doc/todo/wishlist:_do_not_import_new_files.mdwn b/doc/todo/wishlist:_do_not_import_new_files.mdwn
new file mode 100644
index 000000000..62dc6334a
--- /dev/null
+++ b/doc/todo/wishlist:_do_not_import_new_files.mdwn
@@ -0,0 +1,7 @@
+[[!meta title="mass reinject of any known content from a directory"]]
+
+Right now `git annex import DIR/*` will import all the files in DIR, both those that are already known to git-annex and those that are new. Using the option `--skip-duplicates` one can import only new files that are in DIR but unknown to git-annex.
+
+It would be nice if there were an opposite `--only-duplicates` option that could be used to import only the files that are already known to git, ignoring the new files in DIR.
+
+PS: it would also be nice to have aliases like `--only-new-files` and `--skip-new-files` for `--skip-duplicates` and `--only-duplicates`.
diff --git a/doc/todo/wishlist:_do_not_import_new_files/comment_1_b41c214599d6601257a9d824cebbffcc._comment b/doc/todo/wishlist:_do_not_import_new_files/comment_1_b41c214599d6601257a9d824cebbffcc._comment
new file mode 100644
index 000000000..fbb5571cb
--- /dev/null
+++ b/doc/todo/wishlist:_do_not_import_new_files/comment_1_b41c214599d6601257a9d824cebbffcc._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://ypid.wordpress.com/"
+ ip="213.153.84.215"
+ subject="gitignore"
+ date="2014-07-12T17:59:42Z"
+ content="""
+Hi
+
+The gitignore file is probably what you are looking for which is also honored by git-annex. Some documentation:
+
+* [On git-scm](http://git-scm.com/docs/gitignore)
+* [On gitready](http://de.gitready.com/beginner/2009/01/19/ignoring-files.html)
+* [On github](https://help.github.com/articles/ignoring-files)
+"""]]
diff --git a/doc/todo/wishlist:_do_not_import_new_files/comment_2_7b26171458baaf5c0057276d2d97e14c._comment b/doc/todo/wishlist:_do_not_import_new_files/comment_2_7b26171458baaf5c0057276d2d97e14c._comment
new file mode 100644
index 000000000..bedf9a54c
--- /dev/null
+++ b/doc/todo/wishlist:_do_not_import_new_files/comment_2_7b26171458baaf5c0057276d2d97e14c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 2"
+ date="2014-07-14T18:30:38Z"
+ content="""
+You can use --clean-duplicates unless your goal is for some reason to add the duplicate files to your repository a second time.
+"""]]
diff --git a/doc/todo/wishlist:_do_not_import_new_files/comment_3_6f80ce6cee4519d4f69193d5086e194a._comment b/doc/todo/wishlist:_do_not_import_new_files/comment_3_6f80ce6cee4519d4f69193d5086e194a._comment
new file mode 100644
index 000000000..e66cc5ea9
--- /dev/null
+++ b/doc/todo/wishlist:_do_not_import_new_files/comment_3_6f80ce6cee4519d4f69193d5086e194a._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="http://svario.it/gioele"
+ nickname="gioele"
+ subject="comment 3"
+ date="2014-07-15T06:54:40Z"
+ content="""
+> You can use --clean-duplicates unless your goal is for some reason to add the duplicate files to your repository a second time.
+
+My use case is that I clone an existing remote on a PC where there are already some of the annexed files (+ others).
+
+My workflow would be:
+
+* clone git-annex server:~/Documents.git
+* git annex init \"other pc\"
+* git annex import --skip-new (or --only-duplicates) ~/Dump/*
+
+~/Dump contains many other files in addition to those found in the Documents repository.
+
+In this case --clean-duplicate would not be the correct solution.
+"""]]
diff --git a/doc/todo/wishlist:_do_not_import_new_files/comment_4_22a7a03c30174e42e6d8e639e31e1d34._comment b/doc/todo/wishlist:_do_not_import_new_files/comment_4_22a7a03c30174e42e6d8e639e31e1d34._comment
new file mode 100644
index 000000000..f53fb6395
--- /dev/null
+++ b/doc/todo/wishlist:_do_not_import_new_files/comment_4_22a7a03c30174e42e6d8e639e31e1d34._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 4"
+ date="2014-07-15T19:01:24Z"
+ content="""
+So the goal is to inject any known objects from the dump into the local annex to avoid needing to re-transfer them.
+
+It seems to me that in this case, you would not even want to create new symlinks in the git repository.
+
+`git annex reinject` might be a better place to put code to handle this than `git annex import`.
+"""]]
diff --git a/doc/todo/wishlist:_do_not_import_new_files/comment_5_4294e92e2f4efb9dd10b280f5c9843f7._comment b/doc/todo/wishlist:_do_not_import_new_files/comment_5_4294e92e2f4efb9dd10b280f5c9843f7._comment
new file mode 100644
index 000000000..e312c083d
--- /dev/null
+++ b/doc/todo/wishlist:_do_not_import_new_files/comment_5_4294e92e2f4efb9dd10b280f5c9843f7._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.2"
+ subject="comment 5"
+ date="2014-07-15T19:13:05Z"
+ content="""
+A fundamental problem with this idea is that git-annex's keys can use any of many checksumming backends. So, which checksum should it try? Running every possible checksum on a file is going to re-read it repeatedly and be expensive.
+
+`git annex import` avoids this problem by using whatever the default backend is configured to be for the filename it's importing. This is good enough to make repeated runs of `git annex import` work ok, but when we get into trying to reinject whole directory trees like this, I don't think that's good enough.
+"""]]
diff --git a/doc/todo/wishlist:_dropping_git-annex_history.mdwn b/doc/todo/wishlist:_dropping_git-annex_history.mdwn
deleted file mode 100644
index 8286699c7..000000000
--- a/doc/todo/wishlist:_dropping_git-annex_history.mdwn
+++ /dev/null
@@ -1,28 +0,0 @@
-In real life discussions with git-annex users at DebConf, the idea was proposed to have a way to drop the history of the git-annex branch, and replace it with a new branch with just the current state of the repository.
-
-The only thing that breaks when this is done, in theory, is `git annex log`, which can't show the location history
-of files.
-
-The crucial thing is that this operation would only need to be done in one repository, and it would then record some information in its (new) git-annex branch, so when it was pushed to other repositories, git-annex there could notice that history had been dropped, and do the same. So, even if you have rarely used offline archive repositories, the history dropping would eventually reach them, without needing to remember to do it.
-
-There was speculation that it would be enough to record eg, the SHA of the top commit on the old branch. That may not be good enough, because another remote may have not gotten that SHA into its branch yet, or may have commits on top of that SHA.
-
-Maybe instead we want to record the SHA of the *first* commit to the old git-annex branch. This way, we can tell if the branch that got deleted is the one we're currently using. And if it is, we create a new branch with the current state of *our* branch, and then union merge the other branch into it.
-
-Hmm, another wrinkle is that, when this indication propigates from remote A to remote B, remote B may also have some git-annex branches available for remotes C and D, which have not transitioned, and E, which has transitioned already. It seems B should first union merge C and D into B, and then flatten B to B', and then union merge A and E into B'.
-
-I think that'd work!
-
---[[Joey]]
-
-Will also allow dropping dead remotes from history. Just remove all
-references to them when rewriting the branch. May or may not be desirable;
-I sometimes care about dead remotes that I hope to one day recuscitate.
-(OTOH, I can always run git annex fsck in them to get their location
-tracking back, if I do manage to get them back.)
-
---[[Joey]]
-
-See also : [[forum/safely_dropping_git-annex_history]]
-
-> [[done]] --[[Joey]]
diff --git a/doc/todo/wishlist:_dropping_git-annex_history/comment_1_a4bee2e26b22a9bdaadc05b7227769ef._comment b/doc/todo/wishlist:_dropping_git-annex_history/comment_1_a4bee2e26b22a9bdaadc05b7227769ef._comment
deleted file mode 100644
index 043e674ed..000000000
--- a/doc/todo/wishlist:_dropping_git-annex_history/comment_1_a4bee2e26b22a9bdaadc05b7227769ef._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.63"
- subject="comment 1"
- date="2013-08-24T19:39:45Z"
- content="""
-BTW, a motivation for this is that some of us have old repositories that have been upgrades all the way from annex.version 1 and have a lot of cruft in them because of it. (I have repos that have been upgraded from annex.version 0, but this would not help with that cruft which is on the master branch!)
-
-Also, people worry that eg, a large copy back and forth bloats history, and having a way to unbloat it if it ever gets actually annoyingly bloated would stop them pestering me. ;)
-"""]]
diff --git a/doc/todo/wishlist:_dropping_git-annex_history/comment_2_f6d750bfe0c9d8a2aa6bc218ca5c49cc._comment b/doc/todo/wishlist:_dropping_git-annex_history/comment_2_f6d750bfe0c9d8a2aa6bc218ca5c49cc._comment
deleted file mode 100644
index a60973b82..000000000
--- a/doc/todo/wishlist:_dropping_git-annex_history/comment_2_f6d750bfe0c9d8a2aa6bc218ca5c49cc._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 2"
- date="2013-08-27T20:02:23Z"
- content="""
-If starting commit id _and_ commit id from when history is being dropped are documented, you could potentially drop more data.
-
-* Don't have any commits in common? Full merge.
-* Only share the starting ids? Reduce local history as much as possible, and then merge.
-* Share both starting id and have the last id somewhere in history? Take history from last id up to current, reduce that, and merge.
-
--- RichiH
-"""]]
diff --git a/doc/todo/wishlist:_git-annex_replicate.mdwn b/doc/todo/wishlist:_git-annex_replicate.mdwn
deleted file mode 100644
index 9ac6ade75..000000000
--- a/doc/todo/wishlist:_git-annex_replicate.mdwn
+++ /dev/null
@@ -1,22 +0,0 @@
-I'd like to be able to do something like the following:
-
- * Create encrypted git-annex remotes on a couple of semi-trusted machines - ones that have good connectivity, but non-redundant hardware
- * set numcopies=3
- * run `git-annex replicate` and have git-annex run the appropriate copy commands to make sure every file is on at least 3 machines
-
-There would also likely be a `git annex rebalance` command which could be used if remotes were added or removed. If possible, it should copy files between servers directly, rather than proxy through a potentially slow client.
-
-There might be the need to have a 'replication_priority' option for each remote that configures which machines would be preferred. That way you could set your local server to a high priority to ensure that it is always 1 of the 3 machines used and files are distributed across 2 of the remaining remotes. Other than priority, other options that might help:
-
- * maxspace - A self imposed quota per remote machine. git-annex replicate should try to replicate files first to machines with more free space. maxspace would change the free space calculation to be `min(actual_free_space, maxspace - space_used_by_git_annex)
- * bandwidth - when replication files, copies should be done between machines with the highest available bandwidth. ( I think this option could be useful for git-annex get in general)
-
-> `git annex sync --content` handles this now. [[done]]
->
-> You do need to run it, or the assistant, on each node that needs
-> to copy files to spread them through the network.
->
-> A `git annex rebalance`
-> is essentially the same as sshing to the remote and running `git annex
-> sync --content` there. Assuming the remote repository itself has enough
-> remotes set up that git-annex is able to copy files around. --[[Joey]]
diff --git a/doc/todo/wishlist:_git-annex_replicate/comment_1_9926132ec6052760cdf28518a24e2358._comment b/doc/todo/wishlist:_git-annex_replicate/comment_1_9926132ec6052760cdf28518a24e2358._comment
deleted file mode 100644
index cec971ee3..000000000
--- a/doc/todo/wishlist:_git-annex_replicate/comment_1_9926132ec6052760cdf28518a24e2358._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 1"
- date="2011-04-22T18:27:00Z"
- content="""
-While having remotes redistribute introduces some obvious security concerns, I might use it.
-
-As remotes support a cost factor already, you can basically implement bandwidth through that.
-"""]]
diff --git a/doc/todo/wishlist:_git-annex_replicate/comment_2_c43932f4194aba8fb2470b18e0817599._comment b/doc/todo/wishlist:_git-annex_replicate/comment_2_c43932f4194aba8fb2470b18e0817599._comment
deleted file mode 100644
index 9d50d1531..000000000
--- a/doc/todo/wishlist:_git-annex_replicate/comment_2_c43932f4194aba8fb2470b18e0817599._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 2"
- date="2011-04-23T16:22:07Z"
- content="""
-Besides the cost values, annex.diskreserve was recently added. (But is not available for special remotes.)
-
-I have held off on adding high-level management stuff like this to git-annex, as it's hard to make it generic enough to cover use cases.
-
-A low-level way to accomplish this would be to have a way for `git annex get` and/or `copy` to skip files when `numcopies` is already satisfied. Then cron jobs could be used.
-"""]]
diff --git a/doc/todo/wishlist:_git-annex_replicate/comment_3_c13f4f9c3d5884fc6255fd04feadc2b1._comment b/doc/todo/wishlist:_git-annex_replicate/comment_3_c13f4f9c3d5884fc6255fd04feadc2b1._comment
deleted file mode 100644
index e7eb06b3b..000000000
--- a/doc/todo/wishlist:_git-annex_replicate/comment_3_c13f4f9c3d5884fc6255fd04feadc2b1._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
- nickname="Justin"
- subject="comment 3"
- date="2011-04-23T17:54:42Z"
- content="""
-Hmm, so it seems there is almost a way to do this already.
-
-I think the one thing that isn't currently possible is to have 'plain' ssh remotes.. basically something just like the directory remote, but able to take a ssh user@host/path url. something like sshfs could be used to fake this, but for things like fsck you would want to do the sha1 calculations on the remote host.
-"""]]
diff --git a/doc/todo/wishlist:_git-annex_replicate/comment_4_63f24abf086d644dced8b01e1a9948c9._comment b/doc/todo/wishlist:_git-annex_replicate/comment_4_63f24abf086d644dced8b01e1a9948c9._comment
deleted file mode 100644
index 3805464a6..000000000
--- a/doc/todo/wishlist:_git-annex_replicate/comment_4_63f24abf086d644dced8b01e1a9948c9._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 4"
- date="2011-09-19T18:54:46Z"
- content="""
-git annex get/copy/drop all now support a --auto flag, which makes them only act on files that have not enough or too many copies. This allows for some crude replication; it doesn't take into account which repositories should be filled up more (beyond honoring annex.diskreserve), nor does it try to optimally use bandwidth (beyond honoring configured annex-cost). You have to run it in every repository that you want to participate in the replication, too. But it's probably a Good Enough solution. See [[walkthrough/automatically_managing_content]].
-"""]]
diff --git a/doc/todo/wishlist:_git_annex_diff.mdwn b/doc/todo/wishlist:_git_annex_diff.mdwn
index 4acfee255..3af7bef6a 100644
--- a/doc/todo/wishlist:_git_annex_diff.mdwn
+++ b/doc/todo/wishlist:_git_annex_diff.mdwn
@@ -7,3 +7,7 @@ Should be relatively simple, only there would have to be a way to deal with the
Of course you wouldn't want to diff two large files, but with git annex assistant, all files are annexed by default (right?), so this would be useful.
There might already be a way to easily diff two versions of an annexed file which I'm missing -- in that case please point me to it! :)
+
+> [[done]]; rather than adding a `git annex diff`, I made git-annex be able to be used as a git diff driver command,
+> which in turn can run some third-party external diff driver that does
+> some smart handling of binary files.
diff --git a/doc/todo/wishlist:_git_annex_diff/comment_2_2e8324f47b66dce385263e258e94da16._comment b/doc/todo/wishlist:_git_annex_diff/comment_2_2e8324f47b66dce385263e258e94da16._comment
new file mode 100644
index 000000000..83501b791
--- /dev/null
+++ b/doc/todo/wishlist:_git_annex_diff/comment_2_2e8324f47b66dce385263e258e94da16._comment
@@ -0,0 +1,32 @@
+[[!comment format=mdwn
+ username="Bram"
+ ip="81.20.68.186"
+ subject="Diff of unlocked file"
+ date="2014-10-14T10:11:04Z"
+ content="""
+I wrote a little shell script that implements part of this request. It shows the diff between an unlocked file and its locked version (i.e. the current edits that have not yet been annexed).
+This only works in non-direct mode, and obviously with 'diffable' content only.
+
+Usage is simple, the only parameter it requires is the unlocked filename.
+
+ #!/bin/bash
+
+ DIFF=\"diff\"
+ FILE=\"$1\"
+ KEY=$(git annex lookupkey \"$FILE\")
+
+ GITPATH=\"$(git rev-parse --show-toplevel)/.git\"
+ ANNEXPATH=$GITPATH/annex/objects/$(git annex examinekey --format='${hashdirmixed}${key}/${key}' \"$KEY\")
+
+ if [ -L \"$FILE\" ]; then
+ echo \"$FILE is not unlocked.\" > /dev/stderr
+ else
+ if [ -r \"$ANNEXPATH\" ]; then
+ $DIFF \"$ANNEXPATH\" \"$FILE\"
+ else
+ echo \"Cannot find $ANNEXPATH\" > /dev/stderr
+ exit 1
+ fi
+ exit 1
+ fi
+"""]]
diff --git a/doc/todo/wishlist:_git_annex_info_._also_return_numcopies_setting.mdwn b/doc/todo/wishlist:_git_annex_info_._also_return_numcopies_setting.mdwn
new file mode 100644
index 000000000..ac29c169f
--- /dev/null
+++ b/doc/todo/wishlist:_git_annex_info_._also_return_numcopies_setting.mdwn
@@ -0,0 +1,44 @@
+The stats produced by `git annex info .` are nice but I often find myself separately looking up the actual numcopies set value. Can this also be included in the report please?
+
+> There is not necessarily one single numcopies setting; gitattributes
+> can configure different numcopies for different files.
+>
+> The numcopies stats in the report are reported as plus or
+> minus relative to the numcopies setting. Using a relative number like
+> that, it can eliminate the complexity of which files have which
+> numcompies setting.
+
+<pre>
+numcopies stats:
+ numcopies +0: 27
+ numcopies +1: 43
+ numcopies +2: 1
+</pre>
+
+> What could be added is a summary of the absolute number of copies
+> that exist of files, without taking the numcopies configuration
+> into account.
+
+<pre>
+absolute number of copies:
+ 1 copy: 47
+ 2 copies: 23
+ 3 copies: 1
+</pre>
+
+> It turns out you can already get this display though!
+> Just use `git annex info . --numcopies=0`.
+
+<pre>
+numcopies stats:
+ numcopies +1: 47
+ numcopies +2: 23
+ numcopies +3: 1
+</pre>
+
+> So, in this mode, it's showing the number of copies that exist of files,
+> relative to numcopies, which is forced to be 0. So, there are 47 files
+> with 1 copy, 23 with 2 copies, and 1 with 3 copies.
+>
+> I think I've convinced myself no changes need to be made! [[done]]
+> --[[Joey]]
diff --git a/doc/todo/wishlist:_git_annex_info_UUID.mdwn b/doc/todo/wishlist:_git_annex_info_UUID.mdwn
index 0d1270e1e..5b9633e18 100644
--- a/doc/todo/wishlist:_git_annex_info_UUID.mdwn
+++ b/doc/todo/wishlist:_git_annex_info_UUID.mdwn
@@ -6,3 +6,6 @@ It would be nice if I could see that info, preferably with a timestamp telling m
Thanks,
Richard
+
+> I left out the stuff that `vicfg` displays. But otherwise
+> everything mentioned on this page is [[done]]. --[[Joey]]
diff --git a/doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults.mdwn b/doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults.mdwn
deleted file mode 100644
index e1dc89a96..000000000
--- a/doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults.mdwn
+++ /dev/null
@@ -1,20 +0,0 @@
-I am running centralized git-annex exclusively.
-
-Similar to
-
- git annex get
-
-I'd like to have a
-
- git annex put
-
-which would put all files on the default remote(s).
-
-My main reason for not wanting to use copy --to is that I need to specify the remote's name in this case which makes writing a wrapper unnecessarily hard. Also, this would allow
-
- mr push
-
-to do the right thing all by itself.
-
-> I feel that the new `git annex sync --content` is pretty close to what's
-> requested here. [[done]] --[[Joey]]
diff --git a/doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults/comment_1_d5413c8acce308505e4e2bec82fb1261._comment b/doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults/comment_1_d5413c8acce308505e4e2bec82fb1261._comment
deleted file mode 100644
index fe1d5520f..000000000
--- a/doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults/comment_1_d5413c8acce308505e4e2bec82fb1261._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 1"
- date="2011-04-04T18:13:46Z"
- content="""
-This begs the question: What is the default remote? It's probably *not* the same repository that git's master branch is tracking (ie, origin/master). It seems there would have to be an annex.defaultremote setting.
-
-BTW, mr can easily be configured on a per-repo basis so that \"mr push\" copies to somewhere: `push = git push; git annex push wherever`
-"""]]
diff --git a/doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults/comment_2_0aa227c85d34dfff4e94febca44abea8._comment b/doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults/comment_2_0aa227c85d34dfff4e94febca44abea8._comment
deleted file mode 100644
index 3090b575b..000000000
--- a/doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults/comment_2_0aa227c85d34dfff4e94febca44abea8._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 2"
- date="2011-04-04T20:45:30Z"
- content="""
-In my case, the remotes are the same, but adding a new option could make sense.
-
-And while I can tell mr what to do explicitly, I would prefer if it did the right thing all by itself. Having to change configs in two separate places is less than ideal.
-
-I am not sure what you mean by `git annex push` as that does not exist. Did you mean copy?
-"""]]
diff --git a/doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults/comment_3_2082f4d708a584a1403cc1d4d005fb56._comment b/doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults/comment_3_2082f4d708a584a1403cc1d4d005fb56._comment
deleted file mode 100644
index 01dc7813f..000000000
--- a/doc/todo/wishlist:_git_annex_put_--_same_as_get__44___but_for_defaults/comment_3_2082f4d708a584a1403cc1d4d005fb56._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 1"
- date="2011-04-04T10:28:01Z"
- content="""
-Going one step further, a --min-copy could put all files so that numcopies is satisfied. --all could push to all available ones.
-
-To take everything another step further, if it was possible to group remotes, one could act on the groups. \"all\" would be an obvious choice for a group that always exists, everything else would be set up by the user.
-"""]]
diff --git a/doc/todo/wishlist:_git_annex_status.mdwn b/doc/todo/wishlist:_git_annex_status.mdwn
deleted file mode 100644
index 6bb5d71f1..000000000
--- a/doc/todo/wishlist:_git_annex_status.mdwn
+++ /dev/null
@@ -1,21 +0,0 @@
-Ideally, it would look similar to this. And yes, I put "put" in there ;)
-
- non-annex % git annex status
- git annex status: error: not a git annex repository
- annex % git annex status
- annex object storage version: A
- annex backend engine: {WORM,SHA512,...}
- Estimated local annex size: B MiB
- Estimated total annex size: C MiB
- Files without file size information in local annex: D
- Files without file size information in total annex: E
- Last fsck: datetime
- Last git pull: datetime - $annex_name
- Last git push: datetime - $annex_name
- Last git annex get: datetime - $annex_name
- Last git annex put: datetime - $annex_name
- annex %
-
-Datetime could be ISO's YYYY-MM-DDThh:mm:ss or, personal preference, YYYY-MM-DD--hh-mm-ss. I prefer the latter as it's DNS-, tag- and filename-safe which is why I am using it for everything. In a perfect world, ISO would standardize YYYY-MM-DD-T-hh-mm-ss-Z[-SSSSSSSS][--$timezone], but meh.
-
-[[done]]
diff --git a/doc/todo/wishlist:_git_annex_status/comment_1_994bfd12c5d82e08040d6116915c5090._comment b/doc/todo/wishlist:_git_annex_status/comment_1_994bfd12c5d82e08040d6116915c5090._comment
deleted file mode 100644
index 7b5e7bd44..000000000
--- a/doc/todo/wishlist:_git_annex_status/comment_1_994bfd12c5d82e08040d6116915c5090._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 1"
- date="2011-04-08T07:23:08Z"
- content="""
-+1 for this feature, I've been longing for something like this other than rolling my own perl/shell scripts to parse the outputs of \"git annex whereis .\" to see how many files are on my machine or not.
-"""]]
diff --git a/doc/todo/wishlist:_git_annex_status/comment_2_c2b0ce025805b774dc77ce264a222824._comment b/doc/todo/wishlist:_git_annex_status/comment_2_c2b0ce025805b774dc77ce264a222824._comment
deleted file mode 100644
index 21f9d713c..000000000
--- a/doc/todo/wishlist:_git_annex_status/comment_2_c2b0ce025805b774dc77ce264a222824._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://christian.amsuess.com/chrysn"
- nickname="chrysn"
- subject="format, respect working directory"
- date="2011-04-26T12:31:02Z"
- content="""
-we could include the information about the current directory as well, if the command is not issued in the local git root directory. to avoid large numbers of similar lines, that could look like this:
-
- Estimated annex size: B MiB (of C MiB; [B/C]%)
- Estimated annex size in $PWD: B' MiB (of C' MiB; [B'/C']%)
-
-with the percentages being replaced with \"complete\" if really all files are present (and not just many enough for the value to be rounded to 100%).
-"""]]
diff --git a/doc/todo/wishlist:_git_annex_status/comment_3_d1fd70c67243971c96d59e1ffb7ef6e7._comment b/doc/todo/wishlist:_git_annex_status/comment_3_d1fd70c67243971c96d59e1ffb7ef6e7._comment
deleted file mode 100644
index 39986144b..000000000
--- a/doc/todo/wishlist:_git_annex_status/comment_3_d1fd70c67243971c96d59e1ffb7ef6e7._comment
+++ /dev/null
@@ -1,23 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 3"
- date="2011-05-17T01:15:10Z"
- content="""
-What a good idea!
-
-150 lines of haskell later, I have this:
-
-<pre>
-# git annex status
-supported backends: WORM SHA1 SHA256 SHA512 SHA224 SHA384 SHA1E SHA256E SHA512E SHA224E SHA384E URL
-supported remote types: git S3 bup directory rsync hook
-local annex keys: 32
-local annex size: 58 megabytes
-total annex keys: 38158
-total annex size: 6 terabytes (but 1632 keys have unknown size)
-backend usage:
- SHA1: 1789
- WORM: 36369
-</pre>
-"""]]
diff --git a/doc/todo/wishlist:_git_annex_status/comment_4_9aeeb83d202dc8fb33ff364b0705ad94._comment b/doc/todo/wishlist:_git_annex_status/comment_4_9aeeb83d202dc8fb33ff364b0705ad94._comment
deleted file mode 100644
index f006f88a0..000000000
--- a/doc/todo/wishlist:_git_annex_status/comment_4_9aeeb83d202dc8fb33ff364b0705ad94._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://christian.amsuess.com/chrysn"
- nickname="chrysn"
- subject="status of other remotes?"
- date="2011-06-15T08:39:24Z"
- content="""
-using the location tracking information, it should be possible to show the status of other remotes as well. what about supporting `--from=...` or `--all`? (thus, among other things, one could determine if a remote has a complete checkout.)
-"""]]
diff --git a/doc/todo/wishlist:_git_backend_for_git-annex.mdwn b/doc/todo/wishlist:_git_backend_for_git-annex.mdwn
deleted file mode 100644
index fd1b40bff..000000000
--- a/doc/todo/wishlist:_git_backend_for_git-annex.mdwn
+++ /dev/null
@@ -1,9 +0,0 @@
-Preamble: Obviously, the core feature of git-annex is the ability to keep a subset of files in a local repo. The main trade-off is that you don't get version tracking.
-
-Use case: On my laptop, I might not have enough disk space to store everything. Not so for my main box nor my backup server. And I would _really_ like to have proper version tracking for many of my files. Thus...
-
-Wish: ...why not use git as a version backend? That way, I could just push all my stuff to the central instance(s) and have the best of both worlds. Depending on what backend is used in the local repos, it might make sense to define a list of supported client backends with pre-computed keys.
-
--- RichiH
-
-[[done]] (bup)
diff --git a/doc/todo/wishlist:_git_backend_for_git-annex/comment_1_04319051fedc583e6c326bb21fcce5a5._comment b/doc/todo/wishlist:_git_backend_for_git-annex/comment_1_04319051fedc583e6c326bb21fcce5a5._comment
deleted file mode 100644
index a691393b1..000000000
--- a/doc/todo/wishlist:_git_backend_for_git-annex/comment_1_04319051fedc583e6c326bb21fcce5a5._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 1"
- date="2011-03-28T16:01:30Z"
- content="""
-Indeed, see [[todo/add_a_git_backend]], where you and I have already discussed this idea. :)
-
-With the new support for special remotes, which will be used by S3, it would be possible to make such a git repo, using bup, be a special remote. I think it would be pretty easy to implement now. Not a priority for me though.
-"""]]
diff --git a/doc/todo/wishlist:_git_backend_for_git-annex/comment_2_7f529f19a47e10b571f65ab382e97fd5._comment b/doc/todo/wishlist:_git_backend_for_git-annex/comment_2_7f529f19a47e10b571f65ab382e97fd5._comment
deleted file mode 100644
index 14798e7a7..000000000
--- a/doc/todo/wishlist:_git_backend_for_git-annex/comment_2_7f529f19a47e10b571f65ab382e97fd5._comment
+++ /dev/null
@@ -1,14 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 2"
- date="2011-03-28T17:47:38Z"
- content="""
-On the plus side, the past me wanted exactly what I had in mind.
-
-On the meh side, I really forgot about this conversation :/
-
-When you say this todo is not a priority, does that mean there's no ETA at all and that it will most likely sleep for a long time? Or the almost usual \"what the heck, I will just wizard it up in two lines of haskell\"?
-
--- RichiH
-"""]]
diff --git a/doc/todo/wishlist:_git_backend_for_git-annex/comment_3_a077bbad3e4b07cce019eb55a45330e7._comment b/doc/todo/wishlist:_git_backend_for_git-annex/comment_3_a077bbad3e4b07cce019eb55a45330e7._comment
deleted file mode 100644
index 8c3286d27..000000000
--- a/doc/todo/wishlist:_git_backend_for_git-annex/comment_3_a077bbad3e4b07cce019eb55a45330e7._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 3"
- date="2011-03-28T20:05:13Z"
- content="""
-Probably more like 150 lines of haskell. Maybe just 50 lines if the bup repository is required to be on the same computer as the git-annex repository.
-
-Since I do have some repositories where I'd appreciate this level of assurance that data not be lost, it's mostly a matter of me finding a free day.
-"""]]
diff --git a/doc/todo/wishlist:_git_backend_for_git-annex/comment_4_ecca429e12d734b509c671166a676c9d._comment b/doc/todo/wishlist:_git_backend_for_git-annex/comment_4_ecca429e12d734b509c671166a676c9d._comment
deleted file mode 100644
index cf649a8a2..000000000
--- a/doc/todo/wishlist:_git_backend_for_git-annex/comment_4_ecca429e12d734b509c671166a676c9d._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 4"
- date="2011-03-28T20:45:35Z"
- content="""
-Personally, I would not mind a requirement to keep a local bup repo. I wouldn't want my data to to unncessarily complex setups, anyway. -- RichiH
-"""]]
diff --git a/doc/todo/wishlist:_git_backend_for_git-annex/comment_5_3459f0b41d818c23c8fb33edb89df634._comment b/doc/todo/wishlist:_git_backend_for_git-annex/comment_5_3459f0b41d818c23c8fb33edb89df634._comment
deleted file mode 100644
index a1300f2e6..000000000
--- a/doc/todo/wishlist:_git_backend_for_git-annex/comment_5_3459f0b41d818c23c8fb33edb89df634._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 5"
- date="2011-04-08T20:59:37Z"
- content="""
-My estimates were pretty close -- the new bup special remote type took 133 lines of code, and 2 hours to write. A testament to the flexibility of the special remote infrastructure. :)
-"""]]
diff --git a/doc/todo/wishlist:_incremental_unannex___40__currently_requires_twice_the_size_of_repo_to_complete__41__.mdwn b/doc/todo/wishlist:_incremental_unannex___40__currently_requires_twice_the_size_of_repo_to_complete__41__.mdwn
deleted file mode 100644
index 420fb882c..000000000
--- a/doc/todo/wishlist:_incremental_unannex___40__currently_requires_twice_the_size_of_repo_to_complete__41__.mdwn
+++ /dev/null
@@ -1,10 +0,0 @@
-I recently tried to use unannex for a large repo and it failed because the repo size was more than half the disk size. Unannex should work incrementally so this isn't a problem.
-
-Proposed solution:
-copy a file, hash it, iff hash check is okay, delete from objects, continue to next file
-
-> That won't work, because multiple files can point to a key.
->
-> I am not happy with unannex's behavior, but I was less happy
-> when people were constantly filing bugs about it misbehaving in that
-> situttion. If you dislike the copying, use --fast. [[done]] --[[Joey]]
diff --git a/doc/todo/wishlist:_incremental_unannex___40__currently_requires_twice_the_size_of_repo_to_complete__41__/comment_1_067b29fc47d26b9da0766f9810684ae8._comment b/doc/todo/wishlist:_incremental_unannex___40__currently_requires_twice_the_size_of_repo_to_complete__41__/comment_1_067b29fc47d26b9da0766f9810684ae8._comment
deleted file mode 100644
index 372bb621f..000000000
--- a/doc/todo/wishlist:_incremental_unannex___40__currently_requires_twice_the_size_of_repo_to_complete__41__/comment_1_067b29fc47d26b9da0766f9810684ae8._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="GLITTAH"
- ip="78.108.63.46"
- subject="comment 1"
- date="2013-11-19T18:15:15Z"
- content="""
-Perhaps when unannex is invoked, it could check to see if there is enough disk space before it begins copying files. Maybe even warn the user of too little disk space and remind them of --fast.
-
-(Sorry for the dupe!)
-"""]]
diff --git a/doc/todo/wishlist:_metadata_metadata_view.mdwn b/doc/todo/wishlist:_metadata_metadata_view.mdwn
deleted file mode 100644
index a4b243cdd..000000000
--- a/doc/todo/wishlist:_metadata_metadata_view.mdwn
+++ /dev/null
@@ -1,23 +0,0 @@
-Currently looking at the metadata and views.
-
-One of the things I would like to do is have a view that shows files by metadata metadata.. for example, "when the file last had tags changed".
-
-Something along the lines of
-
- $ git annex view metadata-tag-mtime=YYYYMMDD
- view (searching...)
-
- Switched to branch 'views/metadata/tag/mtime/YYYYMMDD'
- ok
-
- $ ls
- 20130816
- 20130921
- 20131015
-
-This would allow me to review files that haven't had any tag changes applied for a while and thus, may need the tags updating.
-
-I've done this in every tagging system I've used by (ab)using mtime, but that requires an additional step (of touching the file).
-
-> [[done]]; "$field-lastchanged" is automatically made available for each
-> field! --[[Joey]]
diff --git a/doc/todo/wishlist:_metadata_metadata_view/comment_1_79dbf48cf2e0d649f32bd077f0c9bc5a._comment b/doc/todo/wishlist:_metadata_metadata_view/comment_1_79dbf48cf2e0d649f32bd077f0c9bc5a._comment
deleted file mode 100644
index 126a9148c..000000000
--- a/doc/todo/wishlist:_metadata_metadata_view/comment_1_79dbf48cf2e0d649f32bd077f0c9bc5a._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.154"
- subject="comment 1"
- date="2014-03-18T17:09:55Z"
- content="""
-I think this would be pretty easy to do actually. No need to trawl through git history to find when a field changed; the metadata log file format includes the timestamp when a line was changed, so it would only need to find the newest timestamp for the field in the current version of the file.
-"""]]
diff --git a/doc/todo/wishlist:_metadata_metadata_view/comment_2_5763d0e403c476ac692c1cd50630f824._comment b/doc/todo/wishlist:_metadata_metadata_view/comment_2_5763d0e403c476ac692c1cd50630f824._comment
deleted file mode 100644
index 8b3fc3108..000000000
--- a/doc/todo/wishlist:_metadata_metadata_view/comment_2_5763d0e403c476ac692c1cd50630f824._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="Xyem"
- ip="87.194.19.134"
- subject="comment 2"
- date="2014-03-19T11:18:19Z"
- content="""
-Can $field be a glob? i.e. *
-
-I'm looking for the files to be organised to the last change date to *any* metadata, not a specific field.
-
-For example, I may have added some vacation photos and set some metadata (location=Malta), a couple of months later, gone through and added metadata to some of them (person=Susan, event=Wedding Reception). 3 months later, I want to see a directory containing those that were initially added and metadata'd(?) with \"location=Malta\" and not touched since, and another showing those that had gotten additional metadata so I know which ones I should be looking at.
-"""]]
diff --git a/doc/todo/wishlist:_metadata_metadata_view/comment_3_797e6578c60d8e2ed1f61a8d6403575f._comment b/doc/todo/wishlist:_metadata_metadata_view/comment_3_797e6578c60d8e2ed1f61a8d6403575f._comment
deleted file mode 100644
index aff5afbcf..000000000
--- a/doc/todo/wishlist:_metadata_metadata_view/comment_3_797e6578c60d8e2ed1f61a8d6403575f._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.102"
- subject="comment 3"
- date="2014-03-19T23:14:24Z"
- content="""
-I added a toplevel \"lastchanged\" that applies to all the fields. (Also when the last change was unsetting a field, the toplevel lastchanged will show the time of that which is otherwise not visible by collecting the lastchanged-* fields).
-"""]]
diff --git a/doc/todo/wishlist:_metadata_metadata_view/comment_4_d271fe711b3fe5ffeb52f1caf44622b3._comment b/doc/todo/wishlist:_metadata_metadata_view/comment_4_d271fe711b3fe5ffeb52f1caf44622b3._comment
deleted file mode 100644
index 4bc147c4e..000000000
--- a/doc/todo/wishlist:_metadata_metadata_view/comment_4_d271fe711b3fe5ffeb52f1caf44622b3._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="Xyem"
- ip="87.194.19.134"
- subject="comment 4"
- date="2014-03-20T08:14:20Z"
- content="""
-Awesome! :)
-
-Thank you for adding this, I hope others find it as useful as I will.
-"""]]
diff --git a/doc/todo/wishlist:_more_descriptive_commit_messages_in_git-annex_branch.mdwn b/doc/todo/wishlist:_more_descriptive_commit_messages_in_git-annex_branch.mdwn
deleted file mode 100644
index 8b6350a55..000000000
--- a/doc/todo/wishlist:_more_descriptive_commit_messages_in_git-annex_branch.mdwn
+++ /dev/null
@@ -1,55 +0,0 @@
-as of git-annex version 3.20110719, all git-annex commits only contain the word "update" as a commit message. given that the contents of the commit are pretty non-descriptive (SHA1 hashes for file names, uuids for repository names), i suggest to have more descriptive commit messages, as shown here:
-
- /mnt/usb_disk/photos/2011$ git annex get
- /mnt/usb_disk/photos/2011$ git show git-annex
- [...]
- usb-disk-photos: get 2011
-
- * 10 files retrieved from 2 sources (9 from local-harddisk, 1 from my-server)
- * 120 files were already present
- * 2 files could not be retrieved
- /mnt/usb_disk/photos/2011$ cd ~/photos/2011/07
- ~/photos/2011/07$ git copy --to my-server
- ~/photos/2011/07$ git show git-annex
- [...]
- local-harddisk: copy 2011/07 to my-server
-
- * 20 files pushed
- ~/photos/2011/07$
-
-in my opinion, the messages should at least contain
-
-* what command was used
-* in which repository they were executed
-* which files or directories they affected (not necessarily all files, but what was given on command line or implicitly from the working directory)
-
---[[chrysn]]
-
-> The implementation of the git-annex branch precludes more descriptive
-> commit messages, since a single commit can include changes that were
-> previously staged to the branch's index file, or spooled to its journal
-> by other git-annex commands (either concurrently running or
-> interrupted commands, or even changes needed to automatically merge
-> other git-annex branches).
->
-> It would be possible to make it *less* verbose, with an empty commit
-> message. :) --[[Joey]]
-
->> Closing as this is literally impossible to do without making
->> git-annex worse. [[done]] --[[Joey]]
-
-> I'm not sure that the requested feature is that far off. There are two
-> aspects, that can be solved relatively easy:
->
-> * Recording the name of the remote the commit was issued on. This
-> information is simply constant per remote.
->
-> * While it is true that there is no 1 on 1 correspondence between commands
-> and git-annex commits, it would be entirely possible to add a "message
-> journal". Every command issued would start out with writing its
-> invocation to the message journal. At the time the journal ends up being
-> committed to the git-annex branch, the message journal is used as the
-> body of the commit message and truncated.
->
-> It is true that these suggestions do not address every aspect of the
-> original report, but they would solve about 90%. --[[HelmutGrohne]]
diff --git a/doc/todo/wishlist:_option_to_disable_url_checking_with_addurl.mdwn b/doc/todo/wishlist:_option_to_disable_url_checking_with_addurl.mdwn
deleted file mode 100644
index d0b847933..000000000
--- a/doc/todo/wishlist:_option_to_disable_url_checking_with_addurl.mdwn
+++ /dev/null
@@ -1,9 +0,0 @@
-I'm testing out an idea of using filter-branch on a git repository to both retroactively annex and AND record a weburl for all relevant files.
-
-c.f. [http://git-annex.branchable.com/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo/](http://git-annex.branchable.com/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo/)
-
-The bottleneck I'm hitting here seems to be the fact that `git annex addurl` diligently checks each url to see that it is accessible, which adds up quickly if many files are to be processed.
-
-It would be great if addurl had an option to disable checking the url, in order to speed up large batch jobs like this.
-
-> --relaxed added [[done]] --[[Joey]]
diff --git a/doc/todo/wishlist:_option_to_disable_url_checking_with_addurl/comment_1_868a380faa1e55faa3c2d314e3258e86._comment b/doc/todo/wishlist:_option_to_disable_url_checking_with_addurl/comment_1_868a380faa1e55faa3c2d314e3258e86._comment
deleted file mode 100644
index 4bdf4c97b..000000000
--- a/doc/todo/wishlist:_option_to_disable_url_checking_with_addurl/comment_1_868a380faa1e55faa3c2d314e3258e86._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- nickname="joey"
- subject="comment 1"
- date="2013-03-11T18:19:34Z"
- content="""
-It does this to get the size of the url, so it can record this in the key. It would be possible to add a flag to skip that (--fast is already taken of course), but then you tend to get a lot of keys in your repository with no size info attached, which makes `git annex status` complain that it cannot tell you exactly how big your repo is, and is generally not the best. It also defeats annex.diskreserve checking, for example.
-
-With --fast, the size is the only info available to ensure that the content behind the url has not changed when downloading it later. I suppose for some urls you may not want that checked, and so a --relaxed type option could make sense in that use case as well, although with the above caveat.
-"""]]
diff --git a/doc/todo/wishlist:_provide_a_config_option_for_using_new_hashing_scheme_in_non-bare_remotes.mdwn b/doc/todo/wishlist:_provide_a_config_option_for_using_new_hashing_scheme_in_non-bare_remotes.mdwn
new file mode 100644
index 000000000..b18eace9a
--- /dev/null
+++ b/doc/todo/wishlist:_provide_a_config_option_for_using_new_hashing_scheme_in_non-bare_remotes.mdwn
@@ -0,0 +1,5 @@
+I understand that for backwards compatibility the non-bare remotes use the old "mixed" case scheme. However, for new annexes, it'd make sense to be able to use the new one so the scheme matches in all remotes.
+
+> If this option existed then every clone of a repository would need to set
+> it, or files would be hashed into the wrong location and would appear not
+> visible. Sounds like a bug magnet to me; not attractive. --[[Joey]]
diff --git a/doc/todo/wishlist:_push_to_cia.vc_from_the_website__39__s_repo__44___not_your_personal_one.mdwn b/doc/todo/wishlist:_push_to_cia.vc_from_the_website__39__s_repo__44___not_your_personal_one.mdwn
deleted file mode 100644
index f9b4c8c35..000000000
--- a/doc/todo/wishlist:_push_to_cia.vc_from_the_website__39__s_repo__44___not_your_personal_one.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-I just added a CIA bot to #vcs-home and tracking commits immediately would be nice. -- RichiH
-
-[[done]]
diff --git a/doc/todo/wishlist:_push_to_cia.vc_from_the_website__39__s_repo__44___not_your_personal_one/comment_1_3480b0ec629ef29a151408d869186bf8._comment b/doc/todo/wishlist:_push_to_cia.vc_from_the_website__39__s_repo__44___not_your_personal_one/comment_1_3480b0ec629ef29a151408d869186bf8._comment
deleted file mode 100644
index 5d0edce2e..000000000
--- a/doc/todo/wishlist:_push_to_cia.vc_from_the_website__39__s_repo__44___not_your_personal_one/comment_1_3480b0ec629ef29a151408d869186bf8._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 1"
- date="2011-09-19T18:57:52Z"
- content="""
-JFTR, pushing now happens automatically from branchable.
-"""]]
diff --git a/doc/todo/wishlist:_query_things_like_description__44___trust_level.mdwn b/doc/todo/wishlist:_query_things_like_description__44___trust_level.mdwn
deleted file mode 100644
index d158850cd..000000000
--- a/doc/todo/wishlist:_query_things_like_description__44___trust_level.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-It would be helpful to have a way to query things like a repository's description and trust level, without having to poke in the git-annex branch. For example, "git annex describe ." currently clears the description but could print the current one instead.
-
-> `git annex status` now breaks down the repository list by type. [[done]]
-> --[[Joey]]
diff --git a/doc/todo/wishlist:_query_things_like_description__44___trust_level/comment_1_14311384788312b96e550749ab7de9ea._comment b/doc/todo/wishlist:_query_things_like_description__44___trust_level/comment_1_14311384788312b96e550749ab7de9ea._comment
deleted file mode 100644
index 3ac4ba267..000000000
--- a/doc/todo/wishlist:_query_things_like_description__44___trust_level/comment_1_14311384788312b96e550749ab7de9ea._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 1"
- date="2011-10-27T17:09:33Z"
- content="""
-`git annex describe` only sets the description to avoid complication. Imagine using it in a script for example.
-
-`git annex status` shows the description. It does not show the trust level because I have not thought of a visually pleasing and compact way to show it in the repository list there.. suggestions appreciated, since the same list is used by `whereis`, and showing trust levels there would be particularly useful.
-"""]]
diff --git a/doc/todo/wishlist:_query_things_like_description__44___trust_level/comment_2_342d1ac07573c7ef4e27f003a692e261._comment b/doc/todo/wishlist:_query_things_like_description__44___trust_level/comment_2_342d1ac07573c7ef4e27f003a692e261._comment
deleted file mode 100644
index 3bb92919f..000000000
--- a/doc/todo/wishlist:_query_things_like_description__44___trust_level/comment_2_342d1ac07573c7ef4e27f003a692e261._comment
+++ /dev/null
@@ -1,32 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U"
- nickname="Richard"
- subject="comment 2"
- date="2011-10-29T18:28:13Z"
- content="""
-Possible solutions:
-
-This:
-
- trusted repositories:
- UUID -- foo
- semi-trusted repositories:
- UUID -- bar
- untrusted repositories:
- UUID -- baz
-
-or this:
-
- UUID -- trusted -- foo
- UUID -- semi-trusted -- bar
- UUID -- untrusted -- baz
-
-or this:
-
- known repositories (!/*/X):
- UUID -- ! foo
- UUID -- * bar
- UUID -- X baz
-
-If you want to reformat this output, putting 'here', 'origin', etc into fixed formatting might make sense, as well. -- Richard
-"""]]
diff --git a/doc/todo/wishlist:_simple_url_for_webapp.mdwn b/doc/todo/wishlist:_simple_url_for_webapp.mdwn
deleted file mode 100644
index 4549f2e74..000000000
--- a/doc/todo/wishlist:_simple_url_for_webapp.mdwn
+++ /dev/null
@@ -1,36 +0,0 @@
-### Please describe the problem.
-
-The environment is os/x with chrome as the browser.
-
-Let's say I close the tab with the webapp running in it. The 'git-annex webapp' process is still running, according to 'ps'.
-
-So I open a new tab, but then what do I type into the browser url bar to get the app back? What is usually there is a loopback address and an authorisation hash.
-
-* Should I double-click on the git-annex icon in the dock (or Applications directory)?
-* I figured out from observing the startup that if I give the url ://localhost/Users/me/annex/.git/annex/webapp.html I will get redirected to the right place.
-Should I set up a bookmark for that?
-
-### What steps will reproduce the problem?
-
-see above.
-
-### What version of git-annex are you using? On what operating system?
-
-Version: 4.20130723-ge023649
-Build flags: Assistant Webapp Pairing Testsuite S3 WebDAV FsEvents XMPP DNS
-os: os/x 10.8.4
-
-### Please provide any additional information below.
-
-I notice that in the webapp ui, all the items at the top of the page highlight when one hovers over them and have useful URLs attached,
-with the exception of the 'git-annex' item at the far left.What if that had the entry point url attached to it (so one could bookmark that)?
-
-> The git-annex assistant is designed to stay running in the background whether you have the web browser open or not. You can open the web display at any time by
-> using the git-annex menu item (on linux) or running the git-annex-webapp
-> program (which is in the DMG on OSX).
->
-> If the file:// url were exposed to users, it would not work if
-> the assistant had not already been started. This is why there is a program
-> to open the webapp, not an url.
->
-> Not a bug; [[done]] --[[Joey]]
diff --git a/doc/todo/wishlist:_simple_url_for_webapp/comment_1_552aad504fbb68d1f85abfde8c535e69._comment b/doc/todo/wishlist:_simple_url_for_webapp/comment_1_552aad504fbb68d1f85abfde8c535e69._comment
deleted file mode 100644
index 1211be9b5..000000000
--- a/doc/todo/wishlist:_simple_url_for_webapp/comment_1_552aad504fbb68d1f85abfde8c535e69._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkfHTPsiAcHEEN7Xl7WxiZmYq-vX7azxFY"
- nickname="Vincent"
- subject="comment 1"
- date="2013-07-24T14:46:22Z"
- content="""
-typo
-
-url should be - file://localhost/Users/me/annex/.git/annex/webapp.html
-"""]]
diff --git a/doc/todo/wishlist:_simpler_gpg_usage.mdwn b/doc/todo/wishlist:_simpler_gpg_usage.mdwn
deleted file mode 100644
index 1236ee234..000000000
--- a/doc/todo/wishlist:_simpler_gpg_usage.mdwn
+++ /dev/null
@@ -1,12 +0,0 @@
-This is my current understanding on how one must use gpg with git-annex:
-
- * Generate(or copy around) a gpg key on every machine that needs to access the encrypted remote.
- * git annex initremote myremote encryption=KEY for each key that you generated
-
-What I'm trying to figure out is if I can generate a no-passphrase gpg key and commit it to the repository, and have git-annex use that. That way any new clones of the annex automatically have access to any encrypted remotes, without having to do any key management.
-
-I think I can generate a no-passphrase key, but then I still have to manually copy it around to each machine.
-
-I'm not a huge gpg user so part of this is me wanting to avoid having to manage and keeping track of the keys. This would probably be a non-issue if I used gpg on more machines and was more comfortable with it.
-
-[[done]]
diff --git a/doc/todo/wishlist:_simpler_gpg_usage/comment_1_6923fa6ebc0bbe7d93edb1d01d7c46c5._comment b/doc/todo/wishlist:_simpler_gpg_usage/comment_1_6923fa6ebc0bbe7d93edb1d01d7c46c5._comment
deleted file mode 100644
index f96f5c377..000000000
--- a/doc/todo/wishlist:_simpler_gpg_usage/comment_1_6923fa6ebc0bbe7d93edb1d01d7c46c5._comment
+++ /dev/null
@@ -1,19 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
- nickname="Justin"
- subject="comment 1"
- date="2012-04-29T01:41:57Z"
- content="""
-Thinking about this more, I think minimally git-annex could support a
-
- remote.<name>.gpg-options
-
-or
-
- remote.<name>.gpg-keyring
-
-for options to be passed to gpg. I'm not sure how automatically setting it to $ANNEX_ROOT/.gnupg/.. would work.
-
-
-I need to read the encryption code to fully understand it, but I also wonder if there is not also a way to just bypass gpg entirely and store the remote-encryption keys locally in plain text.
-"""]]
diff --git a/doc/todo/wishlist:_simpler_gpg_usage/comment_2_6fc874b6c391df242bd2592c4a65eae8._comment b/doc/todo/wishlist:_simpler_gpg_usage/comment_2_6fc874b6c391df242bd2592c4a65eae8._comment
deleted file mode 100644
index 2e12d86d4..000000000
--- a/doc/todo/wishlist:_simpler_gpg_usage/comment_2_6fc874b6c391df242bd2592c4a65eae8._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 2"
- date="2012-04-29T02:39:20Z"
- content="""
-The encryption uses a symmetric cipher that is stored in the git repository already. It's just stored encrypted to the various gpg keys that have been configured to use it. It would certainly be possible to store the symmetric cipher unencrypted in the git repo.
-
-I don't see your idea of gpg-options saving any work. It would still require you to do key distribution and run commands in each repo to set it up.
-"""]]
diff --git a/doc/todo/wishlist:_simpler_gpg_usage/comment_3_012f340c8c572fe598fc860c1046dabd._comment b/doc/todo/wishlist:_simpler_gpg_usage/comment_3_012f340c8c572fe598fc860c1046dabd._comment
deleted file mode 100644
index 051f17a24..000000000
--- a/doc/todo/wishlist:_simpler_gpg_usage/comment_3_012f340c8c572fe598fc860c1046dabd._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 3"
- date="2012-04-29T02:41:38Z"
- content="""
-BTW re your Tweet.. I was so happy to be able to use 'c i a' in Crypto.hs. :)
-"""]]
diff --git a/doc/todo/wishlist:_simpler_gpg_usage/comment_4_e0c2a13217b795964f3b630c001661ef._comment b/doc/todo/wishlist:_simpler_gpg_usage/comment_4_e0c2a13217b795964f3b630c001661ef._comment
deleted file mode 100644
index c9e337541..000000000
--- a/doc/todo/wishlist:_simpler_gpg_usage/comment_4_e0c2a13217b795964f3b630c001661ef._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
- nickname="Justin"
- subject="comment 4"
- date="2012-04-29T03:09:03Z"
- content="""
-I got a good laugh out of it :-)
-
-Storing the key unencrypted would make things easier.. I think at least for my use-cases I don't require another layer of protection on top of the ssh keys that provide access to the encrypted remotes themselves.
-"""]]
diff --git a/doc/todo/wishlist:_simpler_gpg_usage/comment_5_9668b58eb71901e1db8da7db38e068ca._comment b/doc/todo/wishlist:_simpler_gpg_usage/comment_5_9668b58eb71901e1db8da7db38e068ca._comment
deleted file mode 100644
index 60b98bde5..000000000
--- a/doc/todo/wishlist:_simpler_gpg_usage/comment_5_9668b58eb71901e1db8da7db38e068ca._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 5"
- date="2012-04-29T18:04:13Z"
- content="""
-encryption=shared is now supported
-"""]]
diff --git a/doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote.mdwn b/doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote.mdwn
deleted file mode 100644
index 229dc258b..000000000
--- a/doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote.mdwn
+++ /dev/null
@@ -1,22 +0,0 @@
-The [[Web special remote|special remotes/web]] could possibly be improved by detecting when URLs reference a Youtube video page and using [youtube-dl](http://rg3.github.com/youtube-dl/) instead of wget to download the page. Youtube-dl can also handle several other video sites such as vimeo.com and blip.tv, so if this idea were to be implemented, it might make sense to borrow the regular expressions that youtube-dl uses to identify video URLs. A quick grep through the youtube-dl source for the identifier _VALID_URL should find those regexes (in Python's regex format).
-
-> This is something I've thought about doing for a while..
-> Two things I have not figured out:
->
-> * Seems that this should really be user-configurable or a plugin system,
-> to handle more than just this one case.
-> * Youtube-dl breaks from time to time, I really trust these urls a lot
-> less than regular urls. Perhaps per-url trust levels are called for by
-> this.
->
-> --[[Joey]]
-
-> > There's a library for this called [quvi](http://quvi.sourceforge.net/) which supports many
-> > different sites and also allows fetching the URL (as opposed to just
-> > downloading the file). It seems to me this would be the best tool
-> > for this task. One problem to consider here is that a single youtube
-> > URL may yield different file contents depending on the quality
-> > chosen. Also, it seems that the URLs guessed by quvi may be
-> > ephemeral. --[[anarcat]]
-
-> [[done]]!!! --[[Joey]]
diff --git a/doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_1_1a383c30df4fb1767f13d8c670b0c0b5._comment b/doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_1_1a383c30df4fb1767f13d8c670b0c0b5._comment
deleted file mode 100644
index 5569ff94a..000000000
--- a/doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_1_1a383c30df4fb1767f13d8c670b0c0b5._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://rmunn.myopenid.com/"
- nickname="rmunn"
- subject="comment 1"
- date="2012-06-12T15:52:35Z"
- content="""
-* One way to handle the configuration might be with regular expressions. If the URL matches regex A, handle it with downloader A' (with option set A''). If the URL matches regex B, handle it with downloader B' and option set B''. And so on. Then if nothing is matched, the default downloader is wget/curl.
-
-* In my experience, youtube-dl breakages are fixed relatively quickly; a much more serious problem from a trust standpoint is that Youtube videos often disappear. Sometimes due to a legitimate copyright claim, sometimes due to illegitimate copyright claims. (I've seen both happen). Or because the video uploader decided to upload *other* videos that violated copyright, and Youtube closed his/her account, thereby removing *all* his/her videos from the Web. Youtube is definitely an untrustworthy repository as far as \"the file will still be there later on\" is concerned. Perhaps a default trust relationship could go along with the regexes? URLs matching regex A are semitrusted, while URLs matching regex B are untrusted.
-"""]]
diff --git a/doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_2_81f7f893ac36c145b31f02db6a682a17._comment b/doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_2_81f7f893ac36c145b31f02db6a682a17._comment
deleted file mode 100644
index a25b3c89d..000000000
--- a/doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_2_81f7f893ac36c145b31f02db6a682a17._comment
+++ /dev/null
@@ -1,20 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.63"
- subject="quvi thoughts. excited!"
- date="2013-08-22T18:22:51Z"
- content="""
-Anarcat's quvi suggestion is interesting, because it seems to simplify the whole thing down to just `addurl`, which git-annex is already good at.
-
-If quvi manages to find the url that can be used to download the actual video file, without needing to run a special downloader, then all you really need, it seems, is `git annex addurl --relaxed $(quvi youtube-url)` The --relaxed will make git-annex not care if the content or size of the url's content varies in the future. Since --relaxed skips the actual download, you'd want to follow that with `git annex get`, since we don't know how long these urls will last..
-
-I suppose git-annex could, if quvi is available, make any attempt to download a web special remote url that
-matches the `quvi --support` output run the url through quvi to get the real url and download that instead. The difficulties with this approach:
-
-* would need to read and parse `quvi --support` every time it gets an url from the web special remote? (I don't think I'd want to link with libquvi, although that would be possible, just because this is an edge thing.)
-* what it an url that had been supported stopped being supported -- we'd not want to download the raw url in that case
-* putting the quvi support here doesn't allow relaxed mode to be set when `addurl` adds the url.
-
-Maybe it would be better to keep the support in `addurl`, and record the url generated by quvi. That url would probably be more likely to break in the future, but that kind of breakage is why `git annex untrust web` is wise..
-Keeping the support in `addurl` would also let it use the title that quvi also returns to determine the filename it creates.
-"""]]
diff --git a/doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_3_a7e3cd68c5e5f05139151a58f358df95._comment b/doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_3_a7e3cd68c5e5f05139151a58f358df95._comment
deleted file mode 100644
index c4d8cf754..000000000
--- a/doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_3_a7e3cd68c5e5f05139151a58f358df95._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.0.63"
- subject="comment 3"
- date="2013-08-22T18:44:15Z"
- content="""
-Since the quvi urls are quite likely to break as the CDNs etc change things around, maybe it would be better to somehow have addurl tag an url as needing to be downloaded with quvi. Then `git annex get` could re-run quvi to get an url to download.
-
-We could expand url syntax for this. `quvi:http://youtube.com/foo`
-This also allows for future expansion for other similar things.
-
-I'd be inclined to still make `addurl` automatically try quvi to see if an url is supported, rather than requiring the user fix up the url themselves. But if trying quvi turns out to be too expensive, manually specifying it in the url would also work.
-"""]]
diff --git a/doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_4_a57947ed257b28bbe995a68bfeb5eeaa._comment b/doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_4_a57947ed257b28bbe995a68bfeb5eeaa._comment
deleted file mode 100644
index ee0ab45e7..000000000
--- a/doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_4_a57947ed257b28bbe995a68bfeb5eeaa._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://rmunn.myopenid.com/"
- nickname="rmunn"
- subject="comment 4"
- date="2013-08-24T15:31:36Z"
- content="""
-Either quvi or youtube-dl might be a good possibility: youtube-dl has the --get-url option (or -g for short) that outputs just the download URL (and nothing else) to stdout. So if for some reason quvi turned out not to be suitable, it wouldn't necessarily mean the idea would have to be abandoned.
-"""]]
diff --git a/doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_5_a0612ae05dbda7f7935be648b42b30fc._comment b/doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_5_a0612ae05dbda7f7935be648b42b30fc._comment
deleted file mode 100644
index 38ac09511..000000000
--- a/doc/todo/wishlist:_special-case_handling_of_Youtube_URLs_in_Web_special_remote/comment_5_a0612ae05dbda7f7935be648b42b30fc._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://id.koumbit.net/anarcat"
- ip="72.0.72.144"
- subject="aaaaawesome!"
- date="2013-08-26T04:43:27Z"
- content="""
-wow, thanks! i am happy my little suggestion led to an actual implentation, great!
-"""]]
diff --git a/doc/todo/wishlist:_special_remote_Ubuntu_One/comment_2_17e948acb1e29793cf172cd6def4160b._comment b/doc/todo/wishlist:_special_remote_Ubuntu_One/comment_2_17e948acb1e29793cf172cd6def4160b._comment
new file mode 100644
index 000000000..20230e3f9
--- /dev/null
+++ b/doc/todo/wishlist:_special_remote_Ubuntu_One/comment_2_17e948acb1e29793cf172cd6def4160b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="madduck"
+ ip="2001:a60:f0fb:0:224:d7ff:fe04:c82c"
+ subject="Ubuntu One to be discontinued"
+ date="2014-04-07T05:11:52Z"
+ content="""
+Thanksfully, Canonical have stopped this silliness, Ubuntu One will be discontinued, so this todo can be marked \"wontfix\" and archived.
+"""]]
diff --git a/doc/todo/wishlist:_special_remote_for_sftp_or_rsync.mdwn b/doc/todo/wishlist:_special_remote_for_sftp_or_rsync.mdwn
deleted file mode 100644
index d3c855655..000000000
--- a/doc/todo/wishlist:_special_remote_for_sftp_or_rsync.mdwn
+++ /dev/null
@@ -1,28 +0,0 @@
-i think it would be useful to have a fourth kind of [[special_remotes]]
-that connects to a dumb storage using sftp or rsync. this can be emulated
-by using sshfs, but that means lots of round-trips through the system and
-is limited to platforms where sshfs is available.
-
-typical use cases are backups to storate shared between a group of people
-where each user only has limited access (sftp or rsync), when using
-[[special_remotes/bup]] is not an option.
-
-an alternative to implementing yet another special remote would be to have
-some kind of plugin system by which external programs can provide an
-interface to key-value stores (i'd implement the sftp backend myself, but
-haven't learned haskell yet).
-
-> Ask and ye [[shall receive|special_remotes/rsync]].
->
-> Sometimes I almost think that a generic configurable special remote that
-> just uses configured shell commands would be useful.. But there's really
-> no comparison with sitting down and writing code tuned to work with
-> a given transport like rsync, when it comes to reliability and taking
-> advantage of its abilities (like resuming). --[[Joey]]
-
->> big thanks, and bonus points for identical formats, so converting from
->> directory to rsync is just a matter of changing ``type`` from ``directory``
->> to ``rsync`` in ``.git-annex/remote.log`` and replacing the directory info
->> with ``annex-rsyncurl = <host>:<dir>`` in ``.git/config``. --[[chrysn]]
-
-[[done]]
diff --git a/doc/todo/wishlist:_special_remote_for_sftp_or_rsync/comment_1_6f07d9cc92cf8b4927b3a7d1820c9140._comment b/doc/todo/wishlist:_special_remote_for_sftp_or_rsync/comment_1_6f07d9cc92cf8b4927b3a7d1820c9140._comment
deleted file mode 100644
index c513ed400..000000000
--- a/doc/todo/wishlist:_special_remote_for_sftp_or_rsync/comment_1_6f07d9cc92cf8b4927b3a7d1820c9140._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 1"
- date="2011-04-28T07:47:38Z"
- content="""
-+1 for a generic user configurable backend that a user can put shell commands in, which has a disclaimer such that if a user hangs themselves with misconfiguration then its their own fault :P
-
-I would love to be able to quickly plugin an irods/sector set of put/get/delete/stat(get info) commands into git-annex to access my private clouds which aren't s3 compatible.
-"""]]
diff --git a/doc/todo/wishlist:_special_remote_for_sftp_or_rsync/comment_2_84e4414c88ae91c048564a2cdc2d3250._comment b/doc/todo/wishlist:_special_remote_for_sftp_or_rsync/comment_2_84e4414c88ae91c048564a2cdc2d3250._comment
deleted file mode 100644
index 6243708f9..000000000
--- a/doc/todo/wishlist:_special_remote_for_sftp_or_rsync/comment_2_84e4414c88ae91c048564a2cdc2d3250._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 2"
- date="2011-04-28T21:22:03Z"
- content="""
-Ask and ye shalle receive with an Abbot on top: [[special_remotes/hook]]
-"""]]
diff --git a/doc/todo/wishlist:_special_remote_for_sftp_or_rsync/comment_3_79de7ac44e3c0f0f5691a56d3fb88897._comment b/doc/todo/wishlist:_special_remote_for_sftp_or_rsync/comment_3_79de7ac44e3c0f0f5691a56d3fb88897._comment
deleted file mode 100644
index dc21ec488..000000000
--- a/doc/todo/wishlist:_special_remote_for_sftp_or_rsync/comment_3_79de7ac44e3c0f0f5691a56d3fb88897._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkSq2FDpK2n66QRUxtqqdbyDuwgbQmUWus"
- nickname="Jimmy"
- subject="comment 3"
- date="2011-04-29T10:43:31Z"
- content="""
-Cool!, I just tried adding tahoe-lafs as a remote, and it wasn't too hard.
-"""]]
diff --git a/doc/todo/wishlist:_special_remote_mega.co.nz.mdwn b/doc/todo/wishlist:_special_remote_mega.co.nz.mdwn
deleted file mode 100644
index 41164084a..000000000
--- a/doc/todo/wishlist:_special_remote_mega.co.nz.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-mega.co.nz has 50gb for free accounts. They also have an API, so I guess it wouldn't be too hard to use it as a special remote.
-
-[[done]], see [[tips/megaannex]].
diff --git a/doc/todo/wishlist:_special_remote_mega.co.nz/comment_2_6ca08ef808d4336fc42d0f279d6627b5._comment b/doc/todo/wishlist:_special_remote_mega.co.nz/comment_2_6ca08ef808d4336fc42d0f279d6627b5._comment
deleted file mode 100644
index 542b92a67..000000000
--- a/doc/todo/wishlist:_special_remote_mega.co.nz/comment_2_6ca08ef808d4336fc42d0f279d6627b5._comment
+++ /dev/null
@@ -1,44 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmLB39PC89rfGaA8SwrsnB6tbumezj-aC0"
- nickname="Tobias"
- subject="Usage of mega hook"
- date="2013-05-21T09:09:28Z"
- content="""
-megaannex
-=========
-
-Hook program for gitannex to use mega.co.nz as backend
-
-# Requirements:
-
- requests>=0.10
- pycrypto
-
-Credit for the mega api interface goes to: https://github.com/richardasaurus/mega.py
-
-## Install
-Clone the git repository in your home folder.
-
- git clone git://github.com/TobiasTheViking/megaannex.git
-
-This should make a ~/megannex folder
-
-## Setup
-Run the program once to make an empty config file
-
- cd ~/megaannex; python2 megaannex.py
-
-Edit the megaannex.conf file. Add your mega.co.nz username and password
-
-Note: The folder option in the megaannex.conf file isn't yet used.
-
-## Commands for gitannex:
-
- git config annex.mega-store-hook '/usr/bin/python2 ~/megaannex/megaannex.py store --subject $ANNEX_KEY --file $ANNEX_FILE'
- git config annex.mega-retrieve-hook '/usr/bin/python2 ~/megaannex/megaannex.py getfile --subject $ANNEX_KEY --file $ANNEX_FILE'
- git config annex.mega-checkpresent-hook '/usr/bin/python2 ~/megaannex/megaannex.py fileexists --subject $ANNEX_KEY'
- git config annex.mega-remove-hook '/usr/bin/python2 ~/megaannex/megaannex.py delete --subject $ANNEX_KEY'
- git annex initremote mega type=hook hooktype=mega encryption=shared
- git annex describe mega \"the mega.co.nz library\"
-
-"""]]
diff --git a/doc/todo/wishlist:_support_copy_--from__61__x_--to__61__y.mdwn b/doc/todo/wishlist:_support_copy_--from__61__x_--to__61__y.mdwn
deleted file mode 100644
index b4f966abb..000000000
--- a/doc/todo/wishlist:_support_copy_--from__61__x_--to__61__y.mdwn
+++ /dev/null
@@ -1,29 +0,0 @@
-I'd like to be able to:
-
- git annex copy --from=x --to=y .
-
-Use case (true story) follows:
-
-My desktop hard drive was filling up. I dropped some large files which are also stored (via git-annex) on my backup drive. While these aren't irreplaceable files, I'd prefer to have at least two copies of everything I've decided I care enough about to archive. Later, I get a 2nd external drive, and I:
-
- git annex copy --to=new-external-drive .
-
-Fantastic! Now I've got everything that was important/useful enough to keep on my desktop backed up a 2nd time onto my new drive.
-
-But my new drive doesn't have a copy of any of the files I dropped from my desktop. I would like to be able to:
-
- git annex copy --from=old-external-drive --to=new-external-drive .
-
-on my desktop, and then my new drive would have a copy of everything, and my desktop drive would still have plenty of space (ie the files I'd dropped to make space would still not be stored on the desktop).
-
-The git repos on these external drives are both bare (as in ``git init --bare``) because they are used only for backups. Thus I operate on them only as remotes from my main (desktop) repo.
-
-> I have now implemented the --all option, and it's the default when
-> running `git annex get` inside a bare repo.
->
-> So, the solution is to `cd` to the repository on old-external-drive,
-> and `git remote add newdrive /path/to/new/drive/repo`. Then run `git
-> annex copy --all --to newdrive` and it'll move everything.
->
-> Calling this [[done]] unless there are other use cases where the double
-> copy method is really needed? --[[Joey]]
diff --git a/doc/todo/wishlist:_support_copy_--from__61__x_--to__61__y/comment_1_cf8e0f16b723516374c95a93e4da42fc._comment b/doc/todo/wishlist:_support_copy_--from__61__x_--to__61__y/comment_1_cf8e0f16b723516374c95a93e4da42fc._comment
deleted file mode 100644
index cee50a345..000000000
--- a/doc/todo/wishlist:_support_copy_--from__61__x_--to__61__y/comment_1_cf8e0f16b723516374c95a93e4da42fc._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="4.154.4.193"
- subject="comment 1"
- date="2013-06-30T17:43:50Z"
- content="""
-A reasonable use case indeed.
-
-It seems to me that [[add_-all_option]] could also satisfy this use case, as then you could run `git annex get --all` in the new bare remote.
-
-That would have the benefit of not doing a double copy.
-"""]]
diff --git a/doc/todo/wishlist:_support_copy_--from__61__x_--to__61__y/comment_2_d35359c9dd4dd4365d9a7caf695ff833._comment b/doc/todo/wishlist:_support_copy_--from__61__x_--to__61__y/comment_2_d35359c9dd4dd4365d9a7caf695ff833._comment
deleted file mode 100644
index 8305679a3..000000000
--- a/doc/todo/wishlist:_support_copy_--from__61__x_--to__61__y/comment_2_d35359c9dd4dd4365d9a7caf695ff833._comment
+++ /dev/null
@@ -1,16 +0,0 @@
-[[!comment format=mdwn
- username="http://jasonwoof.com/"
- nickname="JasonWoof"
- subject="thanks, good enough for now."
- date="2013-07-15T19:27:58Z"
- content="""
-the ``--all`` option works for this use case. That takes care of my problem. Thank you!
-
-I can imagine other use cases where I'd want ``--from`` and ``--to`` at once, such as:
-
-1. same situation with my two bare external drives, but I want to only copy my audio-book collection to the new drive, and not my movies.
-
-2. I've got a large online storage (eg rsync.net) and want copy everything from there onto my new external drive.
-
-I leave it up to your good judgement when/if this is worth doing.
-"""]]
diff --git a/doc/todo/wishlist:_support_drop__44___find_on_special_remotes.mdwn b/doc/todo/wishlist:_support_drop__44___find_on_special_remotes.mdwn
deleted file mode 100644
index 24cacbf71..000000000
--- a/doc/todo/wishlist:_support_drop__44___find_on_special_remotes.mdwn
+++ /dev/null
@@ -1,18 +0,0 @@
-Currently there is no way to drop files, or list what files are available, on a special remote.
-It would be good if "git annex drop" and "git annex find" supported the --from argument.
-
-> I agree, drop should support --from.
->> [[done]] --[[Joey]]
->
-> To find files *believed* to be present in a given remote, use
-> `git annex find --in remote`
-> Note that it might show out of date info, since it does not actually go
-> check the current contents of the remote. The only reason to support
-> `find --from` would be to always check, but I don't think that's needed.
-> --[[Joey]]
-
-For commands that don't support the --from argument, it would also be nice to print an error.
-Currently running "git annex drop --from usbdrive" doesn't behave as hoped and instead drops
-all content from the local annex.
-
-> This is done now. --[[Joey]]
diff --git a/doc/todo/wishlist:_support_drop__44___find_on_special_remotes/comment_1_f11ed642a83d965076778a162f701e84._comment b/doc/todo/wishlist:_support_drop__44___find_on_special_remotes/comment_1_f11ed642a83d965076778a162f701e84._comment
deleted file mode 100644
index 6028933b4..000000000
--- a/doc/todo/wishlist:_support_drop__44___find_on_special_remotes/comment_1_f11ed642a83d965076778a162f701e84._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joey.kitenet.net/"
- nickname="joey"
- subject="comment 1"
- date="2011-10-27T17:13:43Z"
- content="""
-Well, I don't think you mean \"special remotes\", but just any old remote (special or not).
-"""]]
diff --git a/doc/todo/wishlist:_support_for_more_ssh_urls_.mdwn b/doc/todo/wishlist:_support_for_more_ssh_urls_.mdwn
deleted file mode 100644
index 55b8120a7..000000000
--- a/doc/todo/wishlist:_support_for_more_ssh_urls_.mdwn
+++ /dev/null
@@ -1,22 +0,0 @@
-git-annex does not seem to support all kinds of urls that git does.
-
-Specifically, if I have ~/bar set up on host foo:
-
- [remote "foo"]
- ## this one is not recognized as ssh url at all
- # url = foo:bar
- ## this one makes git-annex try to access '/~/bar' literally
- # url = ssh://foo/~/bar
- ## this one works
- url = ssh://foo/home/tv/bar
-
-> scp-style is now supported.
-
-> `~` expansions (for the user's home, or other users)
-> are somewhat tricky to support as they require running
-> code on the remote to lookup homedirs. If git-annex grows a
-> `git annex shell` that is run on the remote side
-> (something I am [[considering|todo/git-annex-shell]] for other reasons), it
-> could handle the expansions there. --[[Joey]]
-
-> Update: Now `~` expansions are supported. [[done]]
diff --git a/doc/todo/wishlist:_use_hardlinks_for_local_clones/comment_2_ad51dced0c0146e1867830b93b520118._comment b/doc/todo/wishlist:_use_hardlinks_for_local_clones/comment_2_ad51dced0c0146e1867830b93b520118._comment
new file mode 100644
index 000000000..8476b4220
--- /dev/null
+++ b/doc/todo/wishlist:_use_hardlinks_for_local_clones/comment_2_ad51dced0c0146e1867830b93b520118._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlUGPPMvAP5Hu0NyNqeRMPC4pANeJNHZ0o"
+ nickname="Sylvain"
+ subject="why worry about modifications ?"
+ date="2014-11-02T17:46:57Z"
+ content="""
+I don't understand why you worry about having one remote modify the file locally which would get propagated to the other because of the hardlinks. When using checksumming, the repos would be pretty screwed if someone would do that anyways.
+
+In other words, hardlinking the SHA-checksummed files in .git/annex/objects/ across repos and/or between e.g. a directory remote and a repo would sound a pretty safe and nice optimization to me. I am like the OP, deduplication that does not require brtfs would be a great git annex feature.
+"""]]
diff --git a/doc/todo/wishlist:_use_hardlinks_for_local_clones/comment_3_650ded07dfb4c0c598f6ae649e45760b._comment b/doc/todo/wishlist:_use_hardlinks_for_local_clones/comment_3_650ded07dfb4c0c598f6ae649e45760b._comment
new file mode 100644
index 000000000..c2e5fa207
--- /dev/null
+++ b/doc/todo/wishlist:_use_hardlinks_for_local_clones/comment_3_650ded07dfb4c0c598f6ae649e45760b._comment
@@ -0,0 +1,30 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkHTRzRZoBFEDl9XcTfVveW8yO7CTKMg-o"
+ nickname="Felix"
+ subject="use your own cp"
+ date="2015-02-04T14:16:14Z"
+ content="""
+As a workaround one could use another cp. Maybe something like this:
+
+Make an executable shell script \"cp\":
+
+ #!/bin/sh
+
+ p1=\"$1\"
+ shift
+
+ if [ \"$p1\" = '--reflink=auto' ] ; then
+ p1='--link'
+ fi
+
+ exec /bin/cp \"$p1\" \"$@\"
+
+
+And put it into a directory which is found before the \"real\" cp:
+
+ export PATH=/path/to/special/cp/:$PATH
+
+
+This \"cp\" makes a hardlink if the '--reflink=auto' parameter is used (1st).
+
+"""]]
diff --git a/doc/todo/wishlist:_use_hardlinks_for_local_clones/comment_4_e0be9631d7f017dbff5baaabbd0e2d5c._comment b/doc/todo/wishlist:_use_hardlinks_for_local_clones/comment_4_e0be9631d7f017dbff5baaabbd0e2d5c._comment
new file mode 100644
index 000000000..69dc0a6ce
--- /dev/null
+++ b/doc/todo/wishlist:_use_hardlinks_for_local_clones/comment_4_e0be9631d7f017dbff5baaabbd0e2d5c._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2015-02-04T20:03:19Z"
+ content="""
+No, please don't wrap your `cp`. Forcing git-annex to hard link
+files like that can result in data loss, in a number of different
+scenarios. And it's generally asking for a broken system.
+
+Since version 5.20140915, you can "git clone --shared" and
+this will set up a clone of a repository in which git-annex will
+use hardlinks, in a safe and reliable way. (Notably it marks the clone
+as untrusted.)
+"""]]
diff --git a/doc/todo/wishlist:_vicfg_possible_repo_group_names.mdwn b/doc/todo/wishlist:_vicfg_possible_repo_group_names.mdwn
deleted file mode 100644
index e30cc619a..000000000
--- a/doc/todo/wishlist:_vicfg_possible_repo_group_names.mdwn
+++ /dev/null
@@ -1,16 +0,0 @@
-git annex vicfg should display valid repository group names
-
-For trust levels the possible values are displayed:
-
- # Repository trust configuration
- # (Valid trust levels: trusted semitrusted untrusted dead)
- ...
-
-The same is not currently done for repository groups
-
- # Repository groups
- # (Separate group names with spaces)
-
-Thanks.
-
-> [[done]] --[[Joey]]
diff --git a/doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_2_06230669218541ac392d674bedd43176._comment b/doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_2_06230669218541ac392d674bedd43176._comment
new file mode 100644
index 000000000..79ebb5e7c
--- /dev/null
+++ b/doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_2_06230669218541ac392d674bedd43176._comment
@@ -0,0 +1,43 @@
+[[!comment format=mdwn
+ username="http://olivier.mehani.name/"
+ nickname="olivier-mehani"
+ subject="Manual solution"
+ date="2014-06-14T13:59:38Z"
+ content="""
+My problem stems from the fact that I manually git clone the git-annex repo, which prevents the assistant from creating the setup to use passwordless keys. I just reverse-engineered a working setup to work up what I was missing. I jot it down here for reference, but I guess the bottomline is that if you want to use the assistant with a repo, do it from the start.
+
+I assume that the client has a clone of the git(-annex) repo of the server.
+
+ client$ git clone server:annex
+
+Our goal is to let git-annex on the client know that there is a specific key to use when connecting to server that will let it access the git-annex-shell (without a password). We first create the key.
+
+ client:~$ ssh-keygen -t rsa -f ~/.ssh/git-annex/key.git-annex-server-user_annex
+ [enter an empty passphrase]
+
+We can then create a virtual SSH host on the client that will use this key to connect to the server, in client:~/.ssh/config:
+
+ # Added manually for git-annex
+ Host git-annex-server-user_annex
+ Hostname server
+ Port 22
+ IdentityFile ~/.ssh/git-annex/key.git-annex-server-user_annex
+ IdentitiesOnly yes
+ StrictHostKeyChecking yes
+
+(git-annex seems to use .2F (%2F) to encode path separators in the filenames.)
+
+The server then needs to know to let the key in, but only for git-annex in the specific folder. This is done in server:.ssh/authorized_keys:
+
+ command=\"GIT_ANNEX_SHELL_DIRECTORY='annex' ~/.ssh/git-annex-shell\",no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAA... user@client
+
+The bit starting with ssh-rsa is the public key created in client:.ssh/git-annex/key.git-annex-server-user_annex.pub at the same time as the private key.
+
+Finally, all that remains is to change the remote in the client clone to use the virtual SSH host.
+
+ client:~/annex $ git remote set-url origin ssh://user@git-annex-server-user_annex/~/annex
+ client:~/annex $ git remote set-url origin --push ssh://user@git-annex-server-user_annex/~/annex
+
+If everything worked, a sync from the client should now work without asking for a password, and starting the assistant will not either.
+
+"""]]
diff --git a/doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_3_002afd775b82a0ced609c8305803a6c2._comment b/doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_3_002afd775b82a0ced609c8305803a6c2._comment
new file mode 100644
index 000000000..2515349a6
--- /dev/null
+++ b/doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_3_002afd775b82a0ced609c8305803a6c2._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="http://olivier.mehani.name/"
+ nickname="olivier-mehani"
+ subject="comment 3"
+ date="2014-06-14T14:15:55Z"
+ content="""
+After having done that on my first test repo, git-annex could sync, but failed to get the files.
+
+ client:~/annex$ git annex get file
+ get file (not available)
+ Try making some of these repositories available:
+ 12345678-90ab-cdef-1234567890abcdef1 -- user@server:~/annex [origin]
+
+ (Note that these git remotes have annex-ignore set: origin)
+ failed
+ git-annex: get: 1 failed
+
+The note helps: the problem is with the origin remote having annex-ignore set. git-annex therefore ignores it. This is easily fixed by just setting the flag to false.
+
+ client:~/annex$ git config remote.origin.annex-ignore false
+
+"""]]
diff --git a/doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_4_9e8fdc41fdefcb8be0d6bae7cd4a04a9._comment b/doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_4_9e8fdc41fdefcb8be0d6bae7cd4a04a9._comment
new file mode 100644
index 000000000..06d16239a
--- /dev/null
+++ b/doc/todo/wishlist__91__webapp__93__:_add_an_option_to_install__SSH_key_on_remote/comment_4_9e8fdc41fdefcb8be0d6bae7cd4a04a9._comment
@@ -0,0 +1,59 @@
+[[!comment format=mdwn
+ username="http://olivier.mehani.name/"
+ nickname="olivier-mehani"
+ subject="comment 4"
+ date="2014-07-09T01:09:33Z"
+ content="""
+And the ultimate, copy/pastable one, using shell variables:
+
+ export GASERVER=server
+ export GAUSER=user
+ export GAPATH=/path
+
+For the new client (using bash):
+
+ export GASANEPATH=${GAPATH//\//.2F}
+ export GASSHHOSTNAME=${GASERVER}-${GAUSER}_${GASANEPATH}
+ ssh-keygen -t rsa -f ~/.ssh/git-annex/key.git-annex-$GASSHHOSTNAME
+ cat << EOF >> ~/.ssh/config
+ # Added manually for git-annex
+ Host git-annex-$GASSHHOSTNAME
+ Hostname $GASERVER
+ IdentityFile ~/.ssh/git-annex/key.git-annex-$GASSHHOSTNAME
+ IdentitiesOnly yes
+ StrictHostKeyChecking yes
+ EOF
+ ssh-copy-id -i ~/.ssh/git-annex/key.git-annex-$GASSHHOSTNAME $GAUSER@$GASERVER
+ git remote add ${GASERVER/.*/} ssh://${GAUSER}@git-annex-${GASSHHOSTNAME}${GAPATH}
+ git config remote.${GASERVER/.*/}.annex-ignore false
+
+After the `ssh-copy-id` stage, the key can be used to get a full session. This
+needs to be limited on the server, by prepending the following to the newly
+added key in `.ssh/authorized_keys`, replacing `GAPATH` by the value of `$GAPATH`:
+
+ command=\"GIT_ANNEX_SHELL_DIRECTORY='GAPATH' ~/.ssh/git-annex-shell\",no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-pty
+
+From the client, one can make sure this has been limite properly by trying to log in with the key:
+
+ ssh -i ~/.ssh/git-annex/key.git-annex-$GASSHHOSTNAME $GAUSER@$GASERVER -o IdentitiesOnly=yes
+
+It should reply with the `git-annex-shell` helper complaing:
+
+ git-annex-shell: bad parameters
+
+ Usage: git-annex-shell [-c] command [parameters ...] [option ...]
+
+ Plumbing commands:
+
+ commit DIRECTORY commits any staged changes to the git-annex branch
+ configlist DIRECTORY outputs relevant git configuration
+ dropkey DIRECTORY KEY ... drops annexed content for specified keys
+ gcryptsetup DIRECTORY VALUE sets up gcrypt repository
+ inannex DIRECTORY KEY ... checks if keys are present in the annex
+ notifychanges DIRECTORY sends notification when git refs are changed
+ recvkey DIRECTORY KEY runs rsync in server mode to receive content
+ sendkey DIRECTORY KEY runs rsync in server mode to send content
+ transferinfo DIRECTORY KEY updates sender on number of bytes of content received
+
+... and this should be all set.
+"""]]
diff --git a/doc/tuning.mdwn b/doc/tuning.mdwn
new file mode 100644
index 000000000..cbe0eca64
--- /dev/null
+++ b/doc/tuning.mdwn
@@ -0,0 +1,46 @@
+git-annex now has experimental support for tuning a repository for
+different work loads.
+
+For example, a repository with a very large number of files in it may work
+better if git-annex uses some nonstandard hash format, for either the
+`.git/annex/objects/` directory, or for the log files in the git-annex
+branch.
+
+A repository can currently only be tuned when it is first created; this is
+done by passing `-c name=value` parameters to `git annex init`.
+
+For example, this will make git-annex use only 1 level for hash directories
+in `.git/annex/objects`:
+
+ git -c annex.tune.objecthash1=true annex init
+
+It's very important to keep in mind that this makes a nonstandard format
+git-annex repository. In general, this cannot safely be used with
+git-annex older than version 5.20150128. Older version of git-annex will
+not understand and will get confused and perhaps do bad things.
+
+Also, it's not safe to merge two separate git repositories that have been
+tuned differently (or one tuned and the other one not). git-annex will
+prevent merging their git-annex branches together, but it cannot prevent
+`git merge remote/master` merging two branches, and the result will be ugly
+at best (`git annex fix` can fix up the mess somewhat).
+
+Again, tuned repositories are an experimental feature; use with caution!
+
+The following tuning parameters are available:
+
+* `annex.tune.objecthash1=true`
+ Use just one level of hash directories in `.git/annex/objects/`,
+ instead of the default two levels.
+
+* `annex.tune.objecthashlower=true`
+ Make the hash directories in `.git/annex/objects/` use
+ all lower-case, instead of the default mixed-case.
+
+* `annex.tune.branchhash1=true`
+ Use just one level of hash directories in the git-annex branch,
+ instead of the default two levels.
+
+Note that git-annex will automatically propigate these setting to
+`.git/config` for tuned repositories. You should never directly change
+these settings in `.git/config`
diff --git a/doc/tuning/comment_1_f8af8e9b696d32d238ebd56a3b8058c4._comment b/doc/tuning/comment_1_f8af8e9b696d32d238ebd56a3b8058c4._comment
new file mode 100644
index 000000000..92a26fb1d
--- /dev/null
+++ b/doc/tuning/comment_1_f8af8e9b696d32d238ebd56a3b8058c4._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnx8kHW66N3BqmkVpgtXDlYMvr8TJ5VvfY"
+ nickname="Yaroslav"
+ subject="annex.tune.objecthashlower=true is not just &quot;lower&quot; letters used but a different strategy altogether"
+ date="2015-02-01T02:58:26Z"
+ content="""
+it starts to use 2 levels (even if annex.tune.objecthash1=true) of hash directories having 3 characters in the filename at each level. So it is not just \"taken existing hash directories (1 or 2 levels) and use their lower-case version. It is a different way to create the hash directories:
+
+e.g. one with objecthas1=true
+
+1 -> .git/annex/objects/qj/SHA256E-s6--ecdc5536f73bdae8816f0ea40726ef5e9b810d914493075903bb90623d97b1d8/SHA256E-s6--ecdc5536f73bdae8816f0ea40726ef5e9b810d914493075903bb90623d97b1d8
+
+and if I provide all three options at once:
+
+1 -> .git/annex/objects/ccf/a40/SHA256E-s6--ecdc5536f73bdae8816f0ea40726ef5e9b810d914493075903bb90623d97b1d8/SHA256E-s6--ecdc5536f73bdae8816f0ea40726ef5e9b810d914493075903bb90623d97b1d8
+
+"""]]
diff --git a/doc/tuning/comment_2_a0091dbb39b79dfe101d05f9a5db216f._comment b/doc/tuning/comment_2_a0091dbb39b79dfe101d05f9a5db216f._comment
new file mode 100644
index 000000000..364d2c9da
--- /dev/null
+++ b/doc/tuning/comment_2_a0091dbb39b79dfe101d05f9a5db216f._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2015-02-04T17:09:41Z"
+ content="""
+Right, it's not simply lower-casing but a different hash strategy
+as described in [[internals/hashing]].
+
+Combining annex.tune.objecthashlower and annex.tune.objecthash1 will
+result in one level of hash directories. If you get two levels then
+you probabaly typoed "objecthas1" ...
+"""]]
diff --git a/doc/upgrades/insecure_embedded_creds.mdwn b/doc/upgrades/insecure_embedded_creds.mdwn
new file mode 100644
index 000000000..a221fb51f
--- /dev/null
+++ b/doc/upgrades/insecure_embedded_creds.mdwn
@@ -0,0 +1,42 @@
+git-annex had a bug in the S3 and Glacier remotes where if embedcreds=yes
+was set, and the remote used encryption=pubkey or encryption=hybrid,
+the embedded AWS credentials were stored in the git repository
+in (effectively) plaintext, not encrypted as they were supposed to be.
+
+That means that anyone who gets a copy of the git repository can extract the
+AWS credentials from it. Which would be bad..
+
+A remote with this problem cannot be enabled using `git annex
+enableremote`. Old versions of git-annex will fail with a gpg error;
+the current version will fail with a pointer to this web page.
+
+If your repository has this problem, chose from one of these approaches
+to deal with it:
+
+1. Change your AWS credentials, so the ones stored in the clear in git
+ won't be used.
+
+ After changing the credentials, make sure you have a
+ fixed version of git-annex, and you can then re-embed the new creds
+ into the repository, encrypted this time, by setting the
+ `AWS_SECRET_ACCESS_KEY` and `AWS_ACCESS_KEY_ID` environment variables,
+ and running `git annex enableremote $remotename embedcreds=yes`
+
+2. Fix the problem and then remove the history of the git-annex branch
+ of the repository.
+
+ Make sure you have a fixed version of git-annex, and force git-annex
+ to rewrite the embedded creds, with encryption this time, by setting
+ by setting the `AWS_SECRET_ACCESS_KEY` and `AWS_ACCESS_KEY_ID`
+ environment variables, and running `git annex enableremote $remotename embedcreds=yes`
+
+ Then, to get rid of old versions of the git-annex branch that still
+ contain the creds in cleartext, you can use `git annex forget`;
+ note that it will remove other historical data too.
+
+ Keep in mind that this will not necessarily delete data from clones
+ you do not control.
+
+3. If you're sure that you're the only one who has access to the repository,
+ you could decide to leave it as-is. It's no more insecure than if you
+ had used encryption=shared in the first place when setting it up.
diff --git a/doc/use_case/Bob.mdwn b/doc/use_case/Bob.mdwn
index 7a90cdd11..9477dbd3d 100644
--- a/doc/use_case/Bob.mdwn
+++ b/doc/use_case/Bob.mdwn
@@ -19,7 +19,7 @@ even if the world has forgotten about git-annex and git.
<small>[[more about future-proofing|future_proofing]]</small>
Run in a cron job, git-annex adds new files to archival drives at night. It
-also helps Bob keep track of intentional, and unintentional copies of
+also helps Bob keep track of intentional and unintentional copies of
files, and logs information he can use to decide when it's time to duplicate
the content of old drives.
<small>[[more about backup copies|copies]]</small>
diff --git a/doc/users/anarcat.mdwn b/doc/users/anarcat.mdwn
index df98c9330..7a911e78f 100644
--- a/doc/users/anarcat.mdwn
+++ b/doc/users/anarcat.mdwn
@@ -9,7 +9,7 @@ My tips
... or the ones I commented it, to be more precise.
-[[!inline pages="tips/* and and link(users/anarcat) and !bugs/*/*" sort=mtime feeds=no actions=yes archive=yes show=0]]
+[[!inline pages="tips/* and and link(users/anarcat)" sort=mtime feeds=no actions=yes archive=yes show=0]]
My todos
@@ -18,13 +18,13 @@ My todos
... same.
[[!inline pages="todo/* and !todo/done and !link(todo/done) and
-link(users/anarcat) and !todo/*/*" sort=mtime feeds=no actions=yes archive=yes show=0]]
+link(users/anarcat)" sort=mtime feeds=no actions=yes archive=yes show=0]]
Done
----
[[!inline pages="todo/* and !todo/done and link(todo/done) and
-link(users/anarcat) and !todo/*/*" feeds=no actions=yes archive=yes show=0]]
+link(users/anarcat)" feeds=no actions=yes archive=yes show=0]]
My bugs
=======
@@ -32,13 +32,13 @@ My bugs
... same.
[[!inline pages="bugs/* and !bugs/done and !link(bugs/done) and
-link(users/anarcat) and !bugs/*/*" sort=mtime feeds=no actions=yes archive=yes show=0]]
+link(users/anarcat)" sort=mtime feeds=no actions=yes archive=yes show=0 template=buglist]]
Fixed
-----
[[!inline pages="bugs/* and !bugs/done and link(bugs/done) and
-link(users/anarcat) and !bugs/*/*" feeds=no actions=yes archive=yes show=0]]
+link(users/anarcat)" feeds=no actions=yes archive=yes show=0 template=buglist]]
Forum posts
===========
@@ -46,3 +46,10 @@ Forum posts
Forums where I posted.
[[!inline pages="forum/* and link(users/anarcat)" sort=mtime feeds=no actions=yes archive=yes show=0]]
+
+Git annex dev news
+==================
+
+I find the recent changes a little too noisy, but i want more than just the [[news]], so i made up this little hybrid feed:
+
+[[!inline pages="(news/* and !news/*/* and !*/Discussion) or (devblog/* and !devblog/*/*)" feedonly="yes"]]
diff --git a/doc/users/chris.mdwn b/doc/users/chris.mdwn
new file mode 100644
index 000000000..3320ddcaa
--- /dev/null
+++ b/doc/users/chris.mdwn
@@ -0,0 +1 @@
+Visit my page <a href="http://www.cybr.eu">Cybr</a> or my private page <a href="http://www.ca84.com">ca84</a> if you like to contact me.
diff --git a/doc/users/james.mdwn b/doc/users/james.mdwn
new file mode 100644
index 000000000..4dc622387
--- /dev/null
+++ b/doc/users/james.mdwn
@@ -0,0 +1 @@
+hello, I am [[James Richardson|http://jamestechnotes.com/]].
diff --git a/doc/users/joey.mdwn b/doc/users/joey.mdwn
index 306e1cc76..2180dd64f 100644
--- a/doc/users/joey.mdwn
+++ b/doc/users/joey.mdwn
@@ -1,2 +1,2 @@
-Joey Hess <joey@kitenet.net>
-<http://kitenet.net/~joey/>
+Joey Hess <id@joeyh.name>
+<https://joeyh.name/>
diff --git a/doc/users/tobiastheviking.mdwn b/doc/users/tobiastheviking.mdwn
index 0629e34a9..31398dae9 100644
--- a/doc/users/tobiastheviking.mdwn
+++ b/doc/users/tobiastheviking.mdwn
@@ -2,19 +2,12 @@ Tobias Ussing
See:
-[[https://github.com/TobiasTheViking/flickrannex/]]
-
-[[https://github.com/TobiasTheViking/imapannex]]
-
-[[https://github.com/TobiasTheViking/dropboxannex]]
-
-[[https://github.com/TobiasTheViking/skydriveannex]]
-
-[[https://github.com/TobiasTheViking/googledriveannex]]
-
-[[https://github.com/TobiasTheViking/owncloudannex]]
-
-[[https://github.com/TobiasTheViking/megaannex]]
-
-[[http://git-annex.branchable.com/forum/nntp__47__usenet_special_remote/]]
+* [[tips/flickrannex]] - [[https://github.com/TobiasTheViking/flickrannex/]]
+* [[tips/imapannex]] - [[https://github.com/TobiasTheViking/imapannex]]
+* [[tips/dropboxannex]] - [[https://github.com/TobiasTheViking/dropboxannex]]
+* [[tips/skydriveannex]] - [[https://github.com/TobiasTheViking/skydriveannex]]
+* [[tips/googledriveannex]] - [[https://github.com/TobiasTheViking/googledriveannex]]
+* [[tips/owncloudannex]] - [[https://github.com/TobiasTheViking/owncloudannex]]
+* [[tips/megaannex]] - [[https://github.com/TobiasTheViking/megaannex]]
+* [[forum/nntp__47__usenet_special_remote/]]
diff --git a/doc/videos.mdwn b/doc/videos.mdwn
index f1adeeac4..4bfcdbc9f 100644
--- a/doc/videos.mdwn
+++ b/doc/videos.mdwn
@@ -1,7 +1,7 @@
Talks and screencasts about git-annex.
These videos are also available in a public git-annex repository
-`git clone http://downloads.kitenet.net/.git/`
+`git clone https://downloads.kitenet.net/.git/`
[[!inline pages="./videos/* and !./videos/*/* and !*/Discussion" show="2"]]
diff --git a/doc/videos/git-annex_assistant_lan.mdwn b/doc/videos/git-annex_assistant_lan.mdwn
new file mode 100644
index 000000000..aa9245fe5
--- /dev/null
+++ b/doc/videos/git-annex_assistant_lan.mdwn
@@ -0,0 +1,6 @@
+<video controls width=400>
+<source src="https://downloads.kitenet.net/videos/git-annex/git-annex-lan.webm">
+</video><br>
+A <a href="https://downloads.kitenet.net/videos/git-annex/git-annex-lan.webm">10 minute screencast</a>
+showing how to get started using the [[git-annex assistant|/assistant]],
+including sharing files on a local network, and installation on a server.
diff --git a/doc/videos/git-annex_assistant_lan/comment_1_df8c8b6d9d63fbf5462b225edbb23c82._comment b/doc/videos/git-annex_assistant_lan/comment_1_df8c8b6d9d63fbf5462b225edbb23c82._comment
new file mode 100644
index 000000000..8c67a5cfb
--- /dev/null
+++ b/doc/videos/git-annex_assistant_lan/comment_1_df8c8b6d9d63fbf5462b225edbb23c82._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://alan.petitepomme.net/"
+ nickname="Alan Schmitt"
+ subject="How is the binary found on the server?"
+ date="2014-06-05T12:05:40Z"
+ content="""
+Great screencast! There is one thing that intrigues me: since you simply uncompress the binary in some folder, how does gitannex figures out where the binary lives there?
+"""]]
diff --git a/doc/videos/git-annex_assistant_lan/comment_2_d4e3122da9c9e27fbe872e09fcde762b._comment b/doc/videos/git-annex_assistant_lan/comment_2_d4e3122da9c9e27fbe872e09fcde762b._comment
new file mode 100644
index 000000000..c62f1d016
--- /dev/null
+++ b/doc/videos/git-annex_assistant_lan/comment_2_d4e3122da9c9e27fbe872e09fcde762b._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="magic"
+ date="2014-06-10T16:13:35Z"
+ content="""
+In the screencast, I run git-annex after unpacking it, and this lets it register where it's installed at.
+
+So it is important to run git-annex after you unpack it.
+"""]]
diff --git a/doc/videos/git-annex_assistant_lan/comment_3_d43ee0a335c2f010b437cf28437455c2._comment b/doc/videos/git-annex_assistant_lan/comment_3_d43ee0a335c2f010b437cf28437455c2._comment
new file mode 100644
index 000000000..39fb1aefc
--- /dev/null
+++ b/doc/videos/git-annex_assistant_lan/comment_3_d43ee0a335c2f010b437cf28437455c2._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://alan.petitepomme.net/"
+ nickname="Alan Schmitt"
+ subject="Where is it registered?"
+ date="2014-06-11T11:27:02Z"
+ content="""
+I'm curious: how do you register it? Does it only work on Linux? (I've had to add paths to my setup under OS X, so it would be great if there was such a simpler way.)
+"""]]
diff --git a/doc/videos/git-annex_assistant_lan/comment_4_c710e27db41311b157d8caaafc32dc7e._comment b/doc/videos/git-annex_assistant_lan/comment_4_c710e27db41311b157d8caaafc32dc7e._comment
new file mode 100644
index 000000000..1035f6348
--- /dev/null
+++ b/doc/videos/git-annex_assistant_lan/comment_4_c710e27db41311b157d8caaafc32dc7e._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="108.236.230.124"
+ subject="comment 4"
+ date="2014-06-11T19:56:49Z"
+ content="""
+Running git-annex will also register it on OSX. The registration just consists of making a ~/.ssh/git-annex-shell that runs the real git-annex-shell. The assistant detects when it needs to use that wrapper when setting up a repository.
+"""]]
diff --git a/doc/walkthrough.mdwn b/doc/walkthrough.mdwn
index 1d69daa88..94889864a 100644
--- a/doc/walkthrough.mdwn
+++ b/doc/walkthrough.mdwn
@@ -3,7 +3,6 @@ A walkthrough of the basic features of git-annex.
[[!toc]]
[[!inline feeds=no trail=yes show=0 template=walkthrough pagenames="""
- walkthrough/setup_git
walkthrough/creating_a_repository
walkthrough/adding_a_remote
walkthrough/adding_files
@@ -15,6 +14,7 @@ A walkthrough of the basic features of git-annex.
walkthrough/removing_files:_When_things_go_wrong
walkthrough/modifying_annexed_files
walkthrough/using_ssh_remotes
+ walkthrough/using_special_remotes
walkthrough/moving_file_content_between_repositories
walkthrough/quiet_please:_When_git-annex_seems_to_skip_files
walkthrough/using_tags_and_branches
diff --git a/doc/walkthrough/automatically_managing_content.mdwn b/doc/walkthrough/automatically_managing_content.mdwn
index 0080ebcb5..ec55c1cc8 100644
--- a/doc/walkthrough/automatically_managing_content.mdwn
+++ b/doc/walkthrough/automatically_managing_content.mdwn
@@ -13,7 +13,7 @@ file.
0c443de8-e644-11df-acbf-f7cd7ca6210d -- laptop
whereis other_file (3 copies)
0c443de8-e644-11df-acbf-f7cd7ca6210d -- laptop
- 62b39bbe-4149-11e0-af01-bb89245a1e61 -- here (usb drive)
+ 62b39bbe-4149-11e0-af01-bb89245a1e61 -- usb drive [here]
7570b02e-15e9-11e0-adf0-9f3f94cb2eaa -- backup drive
What would be handy is some automated versions of get and drop, that only
@@ -31,7 +31,7 @@ work toward having two copies of your files.
# git annex whereis
whereis my_cool_big_file (2 copies)
0c443de8-e644-11df-acbf-f7cd7ca6210d -- laptop
- 62b39bbe-4149-11e0-af01-bb89245a1e61 -- here (usb drive)
+ 62b39bbe-4149-11e0-af01-bb89245a1e61 -- usb drive [here]
whereis other_file (2 copies)
0c443de8-e644-11df-acbf-f7cd7ca6210d -- laptop
7570b02e-15e9-11e0-adf0-9f3f94cb2eaa -- backup drive
diff --git a/doc/walkthrough/backups/comment_1_d0244791d2abbf29553546a6a6568a0f._comment b/doc/walkthrough/backups/comment_1_d0244791d2abbf29553546a6a6568a0f._comment
new file mode 100644
index 000000000..466b3d369
--- /dev/null
+++ b/doc/walkthrough/backups/comment_1_d0244791d2abbf29553546a6a6568a0f._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="madduck"
+ ip="2001:a60:f0fb:0:224:d7ff:fe04:c82c"
+ subject="Warn while inconsistent"
+ date="2014-04-06T20:44:17Z"
+ content="""
+Sure, git-annex prevents me from dropping files unless there are numcopies around elsewhere, but shouldn't it also ensure that numcopies cannot be set unless that requirement is already met?
+
+Furthermore, shouldn't it ensure that when new files are added, they are automatically distributed to fulfill the requirement?
+"""]]
diff --git a/doc/walkthrough/renaming_files.mdwn b/doc/walkthrough/renaming_files.mdwn
index 85964d1ea..8dec44d8b 100644
--- a/doc/walkthrough/renaming_files.mdwn
+++ b/doc/walkthrough/renaming_files.mdwn
@@ -11,3 +11,7 @@ Notice that, since annexed files are represented by symlinks,
the symlink will break when the file is moved into a subdirectory.
But, git-annex will fix this up for you when you commit --
it has a pre-commit hook that watches for and corrects broken symlinks.
+
+(Note that if a repository is in direct mode, you can't run normal git
+commands in it. Instead, just move the files using non-git commands, and
+`git annex add` and `git annex sync`.)
diff --git a/doc/walkthrough/setup_git.mdwn b/doc/walkthrough/setup_git.mdwn
deleted file mode 100644
index 9b4ef0185..000000000
--- a/doc/walkthrough/setup_git.mdwn
+++ /dev/null
@@ -1,2 +0,0 @@
-If you haven't configured your identity for GIT, you will have to do this before git annex will work.
-
diff --git a/doc/walkthrough/transferring_files:_When_things_go_wrong.mdwn b/doc/walkthrough/transferring_files:_When_things_go_wrong.mdwn
index cfb70aaf9..d3db8c328 100644
--- a/doc/walkthrough/transferring_files:_When_things_go_wrong.mdwn
+++ b/doc/walkthrough/transferring_files:_When_things_go_wrong.mdwn
@@ -5,7 +5,7 @@ or file server is not accessible, it will let you know what it needs to get
it:
# git annex get video/hackity_hack_and_kaxxt.mov
- get video/_why_hackity_hack_and_kaxxt.mov (not available)
+ get video/hackity_hack_and_kaxxt.mov (not available)
Unable to access these remotes: usbdrive, server
Try making some of these repositories available:
5863d8c0-d9a9-11df-adb2-af51e6559a49 -- my home file server
diff --git a/doc/walkthrough/unused_data/comment_2_e2ccd9a209c7a104004e998135d4b675._comment b/doc/walkthrough/unused_data/comment_2_e2ccd9a209c7a104004e998135d4b675._comment
new file mode 100644
index 000000000..91075ce24
--- /dev/null
+++ b/doc/walkthrough/unused_data/comment_2_e2ccd9a209c7a104004e998135d4b675._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn3p4i4lk_zMilvjnJ9sS6g2nerpgz0Fjc"
+ nickname="Matthias"
+ subject="Keep historical data, but delete data never referenced"
+ date="2014-10-26T12:06:25Z"
+ content="""
+Is there an easy solution for the following? There are two kinds of \"unused\" I would like to treat differently:
+
+1. Kind \"really unused\": Was added once to the annex, but symlink was never committed
+2. Kind \"only history\": A commit contains a symlink to the data, but no active branch
+
+I want to preserve \"only history\", and only drop \"really unused\". What is an elegant way to do this? Thanks for your suggestions.
+"""]]
diff --git a/doc/walkthrough/unused_data/comment_3_5f973eb7c265015fcd400b6b0bbdf235._comment b/doc/walkthrough/unused_data/comment_3_5f973eb7c265015fcd400b6b0bbdf235._comment
new file mode 100644
index 000000000..dcca0b095
--- /dev/null
+++ b/doc/walkthrough/unused_data/comment_3_5f973eb7c265015fcd400b6b0bbdf235._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2014-10-31T20:31:39Z"
+ content="""
+`git-annex unused` looks at what data is used by git branches and tags, but
+not by other commits. It's a reasonable request and I have made a todo for
+it: [[todo/find_unused_in_any_commit]] .. But I am unure if it can be
+implemented to run fast enough to be usable.
+"""]]
diff --git a/doc/walkthrough/using_ddar.mdwn b/doc/walkthrough/using_ddar.mdwn
new file mode 100644
index 000000000..50f9eedde
--- /dev/null
+++ b/doc/walkthrough/using_ddar.mdwn
@@ -0,0 +1,32 @@
+Another [[special_remote|special_remotes]] that git-annex can use is
+a [[special_remotes/ddar]] repository. ddar stores large file contents
+in a directory structure of its own, with deduplication. For remote
+repositories, ddar requires that ssh is available on the remote, with ddar also
+installed remotely. When copying files to the remote, ddar only needs to send
+over the network the parts of the files that are not already present remotely.
+
+Unlike bup, ddar uses its own storage format, which allows for both creation
+and deletion of de-deduplicated files.
+
+Here's how to create a ddar remote, and describe it.
+
+[[!template id=note text="""
+Instead of specifying a remote system, you could choose to make a ddar
+remote that is only accessible on the current system, by passing
+"ddarrepo=/big/myddar".
+"""]]
+
+ # git annex initremote myddar type=ddar encryption=none ddarrepo=example.com:/big/myddar
+ initremote ddar (ddar init)
+ Initialized empty Git repository in /big/myddar/
+ ok
+ # git annex describe myddar "my ddar repository at example.com"
+ describe myddar ok
+
+Now the remote can be used like any other remote.
+
+ # git annex move my_cool_big_file --to myddar
+ move my_cool_big_file (to myddar...)
+ ok
+
+See [[special_remotes/ddar]] for details.
diff --git a/doc/walkthrough/using_special_remotes.mdwn b/doc/walkthrough/using_special_remotes.mdwn
new file mode 100644
index 000000000..427baadd9
--- /dev/null
+++ b/doc/walkthrough/using_special_remotes.mdwn
@@ -0,0 +1,53 @@
+We've seen above that git-annex can be used to store files in
+regular git remotes, accessed either via ssh, or on a removable drive. But
+git-annex can also store files in Amazon S3, Glacier, on a rsync server, in
+WebDAV, or even pull files down from the web and bittorrent.
+This and much more is made possible by [[special_remotes]].
+
+These are not normal git repositories; indeed the git repository is not
+stored on a special remote. But git-annex can store the contents of files
+in special remotes, and operate on them much as it would on any other
+remote. Bonus: Files stored on special remotes can easily be
+[[encrypted|encryption]]!
+
+All you need to get started using a special remote is to initialize it.
+This is done using the `git annex initremote` command, which needs to be
+passed different parameters depending on the type of special remote.
+
+Some special remotes also need things like passwords to be set in
+environment variables. Don't worry -- it will prompt if you leave anything off.
+So feel free to make any kind of special remote instead of the S3 remote
+used in this example.
+
+ # export AWS_ACCESS_KEY_ID="somethingotherthanthis"
+ # export AWS_SECRET_ACCESS_KEY="s3kr1t"
+ # git annex initremote mys3 type=S3 chunk=1MiB encryption=shared
+ initremote mys3 (shared encryption) (checking bucket) (creating bucket in US) ok
+
+Now you can store files on the newly initialized special remote.
+
+ # git annex copy my_cool_big_file --to mys3
+ copy my_cool_big_file (to mys3...) ok
+
+Once you've initialized a special remote in one repository, you can enable
+use of the same special remote in other clones of the repository.
+If the mys3 remote above was initialized on your laptop, you'll also want
+to enable it on your desktop.
+
+To do so, first get git-annex in sync (so it knows about
+the special remote that was added in the other repository), and then
+use `git annex enableremote`.
+
+ desktop# git annex sync
+ desktop# export AWS_ACCESS_KEY_ID="somethingotherthanthis"
+ desktop# export AWS_SECRET_ACCESS_KEY="s3kr1t"
+ desktop# git annex enableremote mys3
+ enableremote mys3 (checking bucket) ok
+
+And now you can download files from the special remote:
+
+ desktop# git annex get my_cool_big_file --from mys3
+ get my_cool_big_file (from mys3...) ok
+
+This has only scratched the surface of what can be done with
+[[special_remotes]].
diff --git a/doc/walkthrough/using_ssh_remotes.mdwn b/doc/walkthrough/using_ssh_remotes.mdwn
index 1dc8fa55b..ee8b629fa 100644
--- a/doc/walkthrough/using_ssh_remotes.mdwn
+++ b/doc/walkthrough/using_ssh_remotes.mdwn
@@ -5,13 +5,13 @@ that is truly remote, a host accessed by ssh.
Say you have a desktop on the same network as your laptop and want
to clone the laptop's annex to it:
- # git clone ssh://mylaptop/home/me/annex ~/annex
- # cd ~/annex
- # git annex init "my desktop"
+ desktop# git clone ssh://mylaptop/home/me/annex ~/annex
+ desktop# cd ~/annex
+ desktop# git annex init "my desktop"
Now you can get files and they will be transferred (using `rsync` via `ssh`):
- # git annex get my_cool_big_file
+ desktop# git annex get my_cool_big_file
get my_cool_big_file (getting UUID for origin...) (from origin...)
SHA256-s86050597--6ae2688bc533437766a48aa19f2c06be14d1bab9c70b468af445d4f07b65f41e 100% 2159 2.1KB/s 00:00
ok
@@ -19,7 +19,7 @@ Now you can get files and they will be transferred (using `rsync` via `ssh`):
When you drop files, git-annex will ssh over to the remote and make
sure the file's content is still there before removing it locally:
- # git annex drop my_cool_big_file
+ desktop# git annex drop my_cool_big_file
drop my_cool_big_file (checking origin..) ok
Note that normally git-annex prefers to use non-ssh remotes, like
diff --git a/git-annex.cabal b/git-annex.cabal
index d4da142a3..986ba6be8 100644
--- a/git-annex.cabal
+++ b/git-annex.cabal
@@ -1,8 +1,8 @@
Name: git-annex
-Version: 5.20140306
+Version: 5.20150205
Cabal-Version: >= 1.8
License: GPL-3
-Maintainer: Joey Hess <joey@kitenet.net>
+Maintainer: Joey Hess <id@joeyh.name>
Author: Joey Hess
Stability: Stable
Copyright: 2010-2014 Joey Hess
@@ -18,13 +18,18 @@ Description:
dealing with files larger than git can currently easily handle, whether due
to limitations in memory, time, or disk space.
.
- Even without file content tracking, being able to manage files with git,
- move files around and delete files with versioned directory trees, and use
- branches and distributed clones, are all very handy reasons to use git. And
- annexed files can co-exist in the same git repository with regularly
- versioned files, which is convenient for maintaining documents, Makefiles,
- etc that are associated with annexed files but that benefit from full
- revision control.
+ It can store large files in many places, from local hard drives, to a
+ large number of cloud storage services, including S3, WebDAV,
+ and rsync, with a dozen cloud storage providers usable via plugins.
+ Files can be stored encrypted with gpg, so that the cloud storage
+ provider cannot see your data. git-annex keeps track of where each file
+ is stored, so it knows how many copies are available, and has many
+ facilities to ensure your data is preserved.
+ .
+ git-annex can also be used to keep a folder in sync between computers,
+ noticing when files are changed, and automatically committing them
+ to git and transferring them to other computers. The git-annex webapp
+ makes it easy to set up and use git-annex this way.
Flag S3
Description: Enable S3 support
@@ -82,34 +87,46 @@ Flag Quvi
Flag Tahoe
Description: Enable the tahoe special remote
-Flag CryptoHash
- Description: Enable use of cryptohash for checksumming
+Flag DesktopNotify
+ Description: Enable desktop environment notifications
+
+Flag TorrentParser
+ Description: Use haskell torrent library to parse torrent files
Flag EKG
Description: Enable use of EKG to monitor git-annex as it runs (at http://localhost:4242/)
Default: False
+Flag network-uri
+ Description: Get Network.URI from the network-uri package
+ Default: True
+
Executable git-annex
Main-Is: git-annex.hs
Build-Depends: MissingH, hslogger, directory, filepath,
- containers, utf8-string, network (>= 2.0), mtl (>= 2),
- bytestring, old-locale, time, HTTP,
- extensible-exceptions, dataenc, SHA, process, json,
- base (>= 4.5 && < 4.9), monad-control, MonadCatchIO-transformers,
- IfElse, text, QuickCheck >= 2.1, bloomfilter, edit-distance, process,
+ containers, utf8-string, mtl (>= 2),
+ bytestring, old-locale, time, dataenc, SHA, process, json,
+ base (>= 4.5 && < 4.9), monad-control, exceptions (>= 0.6), transformers,
+ IfElse, text, QuickCheck >= 2.1, bloomfilter, edit-distance,
SafeSemaphore, uuid, random, dlist, unix-compat, async, stm (>= 2.3),
- data-default, case-insensitive
+ data-default, case-insensitive, http-conduit, http-types,
+ cryptohash (>= 0.10.0)
CC-Options: -Wall
GHC-Options: -Wall
Extensions: PackageImports
-- Some things don't work with the non-threaded RTS.
GHC-Options: -threaded
+ if flag(network-uri)
+ Build-Depends: network-uri (>= 2.6), network (>= 2.6)
+ else
+ Build-Depends: network (< 2.6), network (>= 2.0)
+
if flag(Production)
GHC-Options: -O2
if (os(windows))
- Build-Depends: Win32, Win32-extras
+ Build-Depends: Win32, Win32-extras, unix-compat (>= 0.4.1.3), setenv
C-Sources: Utility/winprocess.c
else
Build-Depends: unix
@@ -121,7 +138,7 @@ Executable git-annex
if flag(TestSuite)
Build-Depends: tasty (>= 0.7), tasty-hunit, tasty-quickcheck, tasty-rerun,
- optparse-applicative
+ optparse-applicative (>= 0.9.1), crypto-api
CPP-Options: -DWITH_TESTSUITE
if flag(TDFA)
@@ -129,18 +146,13 @@ Executable git-annex
CPP-Options: -DWITH_TDFA
else
Build-Depends: regex-compat
-
- if flag(CryptoHash)
- Build-Depends: cryptohash (>= 0.10.0)
- CPP-Options: -DWITH_CRYPTOHASH
if flag(S3)
- Build-Depends: hS3
+ Build-Depends: conduit, resourcet, conduit-extra, aws (>= 0.9.2), http-client
CPP-Options: -DWITH_S3
if flag(WebDAV)
- Build-Depends: DAV ((>= 0.3 && < 0.6) || > 0.6),
- http-client, http-conduit, http-types, lifted-base
+ Build-Depends: DAV (>= 1.0), http-client
CPP-Options: -DWITH_WEBDAV
if flag(Assistant) && ! os(solaris)
@@ -167,10 +179,16 @@ Executable git-annex
CPP-Options: -DWITH_KQUEUE
C-Sources: Utility/libkqueue.c
- if os(linux) && flag(Dbus)
- Build-Depends: dbus (>= 0.10.3)
- CPP-Options: -DWITH_DBUS
+ if (os(linux))
+ if flag(Dbus)
+ Build-Depends: dbus (>= 0.10.3)
+ CPP-Options: -DWITH_DBUS
+ if flag(DesktopNotify)
+ if flag(Dbus)
+ Build-Depends: dbus (>= 0.10.3), fdo-notify (>= 0.3)
+ CPP-Options: -DWITH_DESKTOP_NOTIFY -DWITH_DBUS_NOTIFICATIONS
+
if flag(Android)
Build-Depends: data-endian
CPP-Options: -D__ANDROID__ -DANDROID_SPLICES -D__NO_TH__
@@ -180,13 +198,13 @@ Executable git-annex
if flag(Webapp)
Build-Depends:
yesod, yesod-default, yesod-static, yesod-form, yesod-core,
- http-types, transformers, wai, wai-logger, warp, warp-tls,
+ wai, wai-extra, warp, warp-tls,
blaze-builder, crypto-api, hamlet, clientsession,
- template-haskell, data-default, aeson, network-conduit,
- byteable
+ template-haskell, aeson, path-pieces,
+ shakespeare
CPP-Options: -DWITH_WEBAPP
if flag(Webapp) && flag (Webapp-secure)
- Build-Depends: warp-tls (>= 1.4), securemem
+ Build-Depends: warp-tls (>= 1.4), securemem, byteable
CPP-Options: -DWITH_WEBAPP_SECURE
if flag(Pairing)
@@ -213,6 +231,10 @@ Executable git-annex
Build-Depends: aeson
CPP-Options: -DWITH_TAHOE
+ if flag(TorrentParser)
+ Build-Depends: torrent (>= 10000.0.0)
+ CPP-Options: -DWITH_TORRENTPARSER
+
if flag(EKG)
Build-Depends: ekg
GHC-Options: -with-rtsopts=-T
diff --git a/git-annex.hs b/git-annex.hs
index a96dd8cbd..17ce807af 100644
--- a/git-annex.hs
+++ b/git-annex.hs
@@ -1,6 +1,6 @@
{- git-annex main program dispatch
-
- - Copyright 2010-2014 Joey Hess <joey@kitenet.net>
+ - Copyright 2010-2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -9,6 +9,7 @@
import System.Environment (getArgs, getProgName)
import System.FilePath
+import Network.Socket (withSocketsDo)
import qualified CmdLine.GitAnnex
import qualified CmdLine.GitAnnexShell
@@ -19,13 +20,10 @@ import qualified Test
#ifdef mingw32_HOST_OS
import Utility.UserInfo
import Utility.Env
-import Config.Files
-import System.Process
-import System.Exit
#endif
main :: IO ()
-main = do
+main = withSocketsDo $ do
ps <- getArgs
run ps =<< getProgName
where
@@ -33,7 +31,9 @@ main = do
| isshell n = CmdLine.GitAnnexShell.run ps
| otherwise =
#ifdef mingw32_HOST_OS
- winEnv gitannex ps
+ do
+ winEnv
+ gitannex ps
#else
gitannex ps
#endif
@@ -48,29 +48,18 @@ main = do
isshell n = takeFileName n == "git-annex-shell"
#ifdef mingw32_HOST_OS
-{- On Windows, if HOME is not set, probe it and set it, re-execing
- - git-annex with the new environment.
- -
- - This is a workaround for some Cygwin commands needing HOME to be set,
- - and for there being no known way to set environment variables on
- - Windows, except by passing an environment in each call to a program.
- - While ugly, this workaround is easier than trying to ensure HOME is set
- - in all calls to the affected programs.
+{- On Windows, if HOME is not set, probe it and set it.
+ - This is a workaround for some Cygwin commands needing HOME to be set.
+ -
+ - If TZ is set, unset it.
+ - TZ being set can interfere with workarounds for Windows timezone
+ - horribleness, and prevents getCurrentTimeZone from seeing the system
+ - time zone.
-}
-winEnv :: ([String] -> IO ()) -> [String] -> IO ()
-winEnv a ps = go =<< getEnv "HOME"
- where
- go (Just _) = a ps
- go Nothing = do
- home <- myHomeDir
- putStrLn $ "** Windows hack; overrideing HOME to " ++ home
- e <- getEnvironment
- let eoverride =
- [ ("HOME", home)
- , ("CYGWIN", "nodosfilewarning")
- ]
- cmd <- readProgramFile
- (_, _, _, pid) <- createProcess (proc cmd ps)
- { env = Just $ e ++ eoverride }
- exitWith =<< waitForProcess pid
+winEnv :: IO ()
+winEnv = do
+ home <- myHomeDir
+ setEnv "HOME" home False
+ setEnv "CYGWIN" "nodosfilewarning" True
+ unsetEnv "TZ"
#endif
diff --git a/git-union-merge.hs b/git-union-merge.hs
index 0e4cd644c..31c71ba72 100644
--- a/git-union-merge.hs
+++ b/git-union-merge.hs
@@ -1,6 +1,6 @@
{- git-union-merge program
-
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
diff --git a/standalone/android/Makefile b/standalone/android/Makefile
index 404841bc0..261259bf4 100644
--- a/standalone/android/Makefile
+++ b/standalone/android/Makefile
@@ -1,95 +1,29 @@
# Cross-compiles utilities needed for git-annex on Android,
# and builds the Android app.
-# Add Android cross-compiler to PATH (as installed by ghc-android)
-ANDROID_CROSS_COMPILER?=$(HOME)/.ghc/$(shell cat abiversion)/bin
-PATH:=$(ANDROID_CROSS_COMPILER):$(PATH)
+build:
+ ./buildapk 4
+ ./buildapk 5
-# Paths to the Android SDK and NDK.
-export ANDROID_SDK_ROOT?=$(HOME)/.android/adt-bundle-linux-x86/sdk
-export ANDROID_NDK_ROOT?=$(HOME)/.android/android-ndk
+# Targets below are used by buildapk, which sets
+# GIT_ANNEX_ANDROID_SOURCETREE
-# Where to store the source tree used to build utilities. This
-# directory will be created by `make source`.
-GIT_ANNEX_ANDROID_SOURCETREE?=$(HOME)/.android/git-annex-sourcetree
-
-GITTREE=$(GIT_ANNEX_ANDROID_SOURCETREE)/git/installed-tree
-
-VER=$(shell perl -e '$$_=<>;print m/\((.*?)\)/'<../../CHANGELOG)
-
-build: start
- if [ ! -e "$(GIT_ANNEX_ANDROID_SOURCETREE)" ]; then $(MAKE) source; fi
- $(MAKE) $(GIT_ANNEX_ANDROID_SOURCETREE)/openssl/build-stamp
- $(MAKE) $(GIT_ANNEX_ANDROID_SOURCETREE)/openssh/build-stamp
- $(MAKE) $(GIT_ANNEX_ANDROID_SOURCETREE)/busybox/build-stamp
- $(MAKE) $(GIT_ANNEX_ANDROID_SOURCETREE)/rsync/build-stamp
- $(MAKE) $(GIT_ANNEX_ANDROID_SOURCETREE)/gnupg/build-stamp
- $(MAKE) $(GIT_ANNEX_ANDROID_SOURCETREE)/git/build-stamp
- $(MAKE) $(GIT_ANNEX_ANDROID_SOURCETREE)/term/build-stamp
-
- perl -i -pe 's/(android:versionName=)"[^"]+"/$$1"'$(VER)'"/' $(GIT_ANNEX_ANDROID_SOURCETREE)/term/AndroidManifest.xml
-
- # Debug build because it does not need signing keys.
- cd $(GIT_ANNEX_ANDROID_SOURCETREE)/term && tools/build-debug
-
- # Install executables as pseudo-libraries so they will be
- # unpacked from the .apk.
- mkdir -p $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi
- cp $(GIT_ANNEX_ANDROID_SOURCETREE)/busybox/busybox $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/lib.busybox.so
- cp $(GIT_ANNEX_ANDROID_SOURCETREE)/openssh/ssh $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/lib.ssh.so
- cp $(GIT_ANNEX_ANDROID_SOURCETREE)/openssh/ssh-keygen $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/lib.ssh-keygen.so
- cp $(GIT_ANNEX_ANDROID_SOURCETREE)/rsync/rsync $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/lib.rsync.so
- cp $(GIT_ANNEX_ANDROID_SOURCETREE)/gnupg/g10/gpg $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/lib.gpg.so
- cp $(GIT_ANNEX_ANDROID_SOURCETREE)/git/git $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/lib.git.so
- cp $(GIT_ANNEX_ANDROID_SOURCETREE)/git/git-shell $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/lib.git-shell.so
- cp $(GIT_ANNEX_ANDROID_SOURCETREE)/git/git-upload-pack $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/lib.git-upload-pack.so
- arm-linux-androideabi-strip --strip-unneeded --remove-section=.comment --remove-section=.note $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/*
- cp runshell $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/lib.runshell.so
- cp start $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/lib.start.so
-
- # remove git stuff we don't need to save space
- rm -rf $(GITTREE)/bin/git-cvsserver \
- $(GITTREE)/libexec/git-core/git-daemon \
- $(GITTREE)/libexec/git-core/git-show-index \
- $(GITTREE)/libexec/git-core/mergetools \
- $(GITTREE)/libexec/git-core/git-credential-* \
- $(GITTREE)/libexec/git-core/git-cvsserver \
- $(GITTREE)/libexec/git-core/git-cvsimport \
- $(GITTREE)/libexec/git-core/git-fast-import \
- $(GITTREE)/libexec/git-core/git-http-backend \
- $(GITTREE)/libexec/git-core/git-imap-send \
- $(GITTREE)/libexec/git-core/git-instaweb \
- $(GITTREE)/libexec/git-core/git-p4 \
- $(GITTREE)/libexec/git-core/git-remote-test* \
- $(GITTREE)/libexec/git-core/git-submodule \
- $(GITTREE)/libexec/git-core/git-svn \
- $(GITTREE)/libexec/git-core/git-web--browse
- # Most of git is in one multicall binary, but a few important
- # commands are still shell scripts. Those are put into
- # a tarball, along with a list of all the links that should be
- # set up.
- cd $(GITTREE) && mkdir -p links
- cd $(GITTREE) && find -samefile bin/git -not -wholename ./bin/git > links/git
- cd $(GITTREE) && find -samefile bin/git-shell -not -wholename ./bin/git-shell > links/git-shell
- cd $(GITTREE) && find -samefile bin/git-upload-pack -not -wholename ./bin/git-upload-pack > links/git-upload-pack
- cd $(GITTREE) && find -type f -not -samefile bin/git -not -samefile bin/git-shell -not -samefile bin/git-upload-pack|tar czf ../git.tar.gz -T -
- cp $(GIT_ANNEX_ANDROID_SOURCETREE)/git/git.tar.gz $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/lib.git.tar.gz.so
-
- git rev-parse HEAD > $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/lib.version.so
-
- mkdir -p ../../tmp/4.0 ../../tmp/4.3
-
- cp ../../tmp/androidtree/dist/build/git-annex/4.3/git-annex $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/lib.git-annex.so
- arm-linux-androideabi-strip --strip-unneeded --remove-section=.comment --remove-section=.note $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/lib.git-annex.so
- cd $(GIT_ANNEX_ANDROID_SOURCETREE)/term && ant debug
- cp $(GIT_ANNEX_ANDROID_SOURCETREE)/term/bin/Term-debug.apk ../../tmp/4.3/git-annex.apk
+source: $(GIT_ANNEX_ANDROID_SOURCETREE)
- cp ../../tmp/androidtree/dist/build/git-annex/4.0/git-annex $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/lib.git-annex.so
- arm-linux-androideabi-strip --strip-unneeded --remove-section=.comment --remove-section=.note $(GIT_ANNEX_ANDROID_SOURCETREE)/term/libs/armeabi/lib.git-annex.so
- cd $(GIT_ANNEX_ANDROID_SOURCETREE)/term && ant debug
- cp $(GIT_ANNEX_ANDROID_SOURCETREE)/term/bin/Term-debug.apk ../../tmp/4.0/git-annex.apk
+$(GIT_ANNEX_ANDROID_SOURCETREE):
+ mkdir -p $(GIT_ANNEX_ANDROID_SOURCETREE)
+ git clone git://git.debian.org/git/d-i/busybox $(GIT_ANNEX_ANDROID_SOURCETREE)/busybox
+ git clone git://git.kernel.org/pub/scm/git/git.git $(GIT_ANNEX_ANDROID_SOURCETREE)/git
+ git clone git://git.samba.org/rsync.git $(GIT_ANNEX_ANDROID_SOURCETREE)/rsync
+ git clone git://git.gnupg.org/gnupg.git $(GIT_ANNEX_ANDROID_SOURCETREE)/gnupg
+ git clone git://git.openssl.org/openssl $(GIT_ANNEX_ANDROID_SOURCETREE)/openssl
+ git clone git://github.com/CyanogenMod/android_external_openssh.git $(GIT_ANNEX_ANDROID_SOURCETREE)/openssh
+ git clone git://github.com/jackpal/Android-Terminal-Emulator.git $(GIT_ANNEX_ANDROID_SOURCETREE)/term
$(GIT_ANNEX_ANDROID_SOURCETREE)/openssl/build-stamp:
+ # This is a version which the openssh below can build with.
+ # Newer versions changed something to do with BIGNUM.
+ cd $(GIT_ANNEX_ANDROID_SOURCETREE)/openssl && git reset --hard 616f71e486d693991b594439c884ec624b32c2d4
cd $(GIT_ANNEX_ANDROID_SOURCETREE)/openssl && CC=$$(which cc) ./Configure android
cd $(GIT_ANNEX_ANDROID_SOURCETREE)/openssl && $(MAKE)
touch $@
@@ -113,14 +47,16 @@ $(GIT_ANNEX_ANDROID_SOURCETREE)/busybox/build-stamp: busybox_config
cd $(GIT_ANNEX_ANDROID_SOURCETREE)/busybox && $(MAKE)
touch $@
-$(GIT_ANNEX_ANDROID_SOURCETREE)/git/build-stamp:
- cd $(GIT_ANNEX_ANDROID_SOURCETREE)/git && $(MAKE) install NO_OPENSSL=1 NO_GETTEXT=1 NO_GECOS_IN_PWENT=1 NO_GETPASS=1 NO_NSEC=1 NO_MKDTEMP=1 NO_PTHREADS=1 NO_PERL=1 NO_CURL=1 NO_EXPAT=1 NO_TCLTK=1 NO_ICONV=1 prefix= DESTDIR=installed-tree
+$(GIT_ANNEX_ANDROID_SOURCETREE)/git/build-stamp: git.patch
+ # This is a known-good version that the patch works with.
+ cat git.patch | (cd $(GIT_ANNEX_ANDROID_SOURCETREE)/git && git reset --hard f9dc5d65ca31cb79893e1296efe37727bf58f3f3 && git am)
+ cd $(GIT_ANNEX_ANDROID_SOURCETREE)/git && $(MAKE) install NO_OPENSSL=1 NO_GETTEXT=1 NO_GECOS_IN_PWENT=1 NO_GETPASS=1 NO_NSEC=1 NO_MKDTEMP=1 NO_PTHREADS=1 NO_PERL=1 NO_CURL=1 NO_EXPAT=1 NO_TCLTK=1 NO_ICONV=1 HAVE_CLOCK_GETTIME= prefix= DESTDIR=installed-tree
touch $@
$(GIT_ANNEX_ANDROID_SOURCETREE)/rsync/build-stamp: rsync.patch
# This is a known-good version that the patch works with.
cat rsync.patch | (cd $(GIT_ANNEX_ANDROID_SOURCETREE)/rsync && git reset --hard eec26089b1c7bdbb260674480ffe6ece257bca63 && git am)
- cp $(GIT_ANNEX_ANDROID_SOURCETREE)/automake/lib/config.sub $(GIT_ANNEX_ANDROID_SOURCETREE)/automake/lib/config.guess $(GIT_ANNEX_ANDROID_SOURCETREE)/rsync/
+ cp /usr/share/misc/config.sub /usr/share/misc/config.guess $(GIT_ANNEX_ANDROID_SOURCETREE)/rsync/
cd $(GIT_ANNEX_ANDROID_SOURCETREE)/rsync && ./configure --host=arm-linux-androideabi --disable-locale --disable-iconv-open --disable-iconv --disable-acl-support --disable-xattr-support
cd $(GIT_ANNEX_ANDROID_SOURCETREE)/rsync && $(MAKE)
touch $@
@@ -144,25 +80,5 @@ $(GIT_ANNEX_ANDROID_SOURCETREE)/term/build-stamp: term.patch icons
# app, if it's also installed.
cd $(GIT_ANNEX_ANDROID_SOURCETREE)/term && find -name .git -prune -o -type f -print0 | xargs -0 perl -pi -e 's/jackpal/ga/g'
cd $(GIT_ANNEX_ANDROID_SOURCETREE)/term && perl -pi -e 's/Terminal Emulator/Git Annex/g' res/*/strings.xml
- cd $(GIT_ANNEX_ANDROID_SOURCETREE)/term && echo y | tools/update.sh
+ cd $(GIT_ANNEX_ANDROID_SOURCETREE)/term && echo y | tools/update.sh || true
touch $@
-
-source: $(GIT_ANNEX_ANDROID_SOURCETREE)
-
-$(GIT_ANNEX_ANDROID_SOURCETREE):
- mkdir -p $(GIT_ANNEX_ANDROID_SOURCETREE)
- git clone git://git.savannah.gnu.org/automake.git $(GIT_ANNEX_ANDROID_SOURCETREE)/automake
- git clone git://git.debian.org/git/d-i/busybox $(GIT_ANNEX_ANDROID_SOURCETREE)/busybox
- git clone git://git.kernel.org/pub/scm/git/git.git $(GIT_ANNEX_ANDROID_SOURCETREE)/git
- git clone git://git.samba.org/rsync.git $(GIT_ANNEX_ANDROID_SOURCETREE)/rsync
- git clone git://git.gnupg.org/gnupg.git $(GIT_ANNEX_ANDROID_SOURCETREE)/gnupg
- git clone git://git.openssl.org/openssl $(GIT_ANNEX_ANDROID_SOURCETREE)/openssl
- git clone git://github.com/CyanogenMod/android_external_openssh.git $(GIT_ANNEX_ANDROID_SOURCETREE)/openssh
- git clone git://github.com/jackpal/Android-Terminal-Emulator.git $(GIT_ANNEX_ANDROID_SOURCETREE)/term
-
-clean:
- rm -rf $(GITTREE)
- rm -f start
-
-reallyclean: clean
- rm -rf $(GIT_ANNEX_ANDROID_SOURCETREE)
diff --git a/standalone/android/buildapk b/standalone/android/buildapk
new file mode 100755
index 000000000..063fe6c83
--- /dev/null
+++ b/standalone/android/buildapk
@@ -0,0 +1,145 @@
+#!/bin/sh
+#
+# Cross-compiles utilities needed for git-annex on Android,
+# and builds the Android app.
+
+set -e
+
+androidversion=$1
+if [ -z "$androidversion" ]; then
+ echo "need android version (4 or 5) as parameter" >&2
+ exit 1
+fi
+
+VER="$(perl -e '$_=<>;print m/\((.*?)\)/'<../../CHANGELOG)"
+
+wrap () {
+ sed -e "s!PROG!$1!" -e "s!OPTS!$3!" < wrapper.pl > "$2"
+ chmod +x "$2"
+}
+
+# Add Android cross-compiler to PATH (as installed by ghc-android)
+androidtoolchain="$HOME/.ghc/$(cat abiversion)/bin"
+# For Android 5, use a wrapped version of the C compiler,
+# which sets PIE build flags.
+if [ "$androidversion" = 5 ]; then
+ rm -rf "$androidtoolchain/5"
+ mkdir -p "$androidtoolchain/5"
+ for f in $(find "$androidtoolchain" -maxdepth 1 -not -type d -printf '%f\n'); do
+ src="$androidtoolchain/$f"
+ dest="$androidtoolchain/5/$f"
+ case "$f" in
+ *-ld*)
+ wrap "$src" "$dest" "-pie"
+ ;;
+ *-gcc)
+ wrap "$src" "$dest" "-pie -fPIE"
+ ;;
+ *'-g++')
+ wrap "$src" "$dest" "-pie -fPIE"
+ ;;
+ *)
+ cp -a "$src" "$dest"
+ ;;
+ esac
+ done
+ PATH="$androidtoolchain/5:$PATH"
+else
+ PATH="$androidtoolchain:$PATH"
+fi
+export PATH
+
+# Paths to the Android SDK and NDK.
+export ANDROID_SDK_ROOT="$HOME/.android/adt-bundle-linux-x86/sdk"
+export ANDROID_NDK_ROOT="$HOME/.android/android-ndk"
+
+GIT_ANNEX_ANDROID_SOURCETREE="$HOME/.android/git-annex-sourcetree"
+export GIT_ANNEX_ANDROID_SOURCETREE
+if [ ! -e "$GIT_ANNEX_ANDROID_SOURCETREE" ]; then
+ make source
+fi
+src="$GIT_ANNEX_ANDROID_SOURCETREE-$androidversion"
+if [ ! -e "$src" ] ; then
+ cp -a "$GIT_ANNEX_ANDROID_SOURCETREE" "$src"
+fi
+GIT_ANNEX_ANDROID_SOURCETREE="$src"
+export GIT_ANNEX_ANDROID_SOURCETREE
+
+gittree="$GIT_ANNEX_ANDROID_SOURCETREE/git/installed-tree"
+
+make "$GIT_ANNEX_ANDROID_SOURCETREE/openssl/build-stamp"
+make "$GIT_ANNEX_ANDROID_SOURCETREE/openssh/build-stamp"
+make "$GIT_ANNEX_ANDROID_SOURCETREE/busybox/build-stamp"
+make "$GIT_ANNEX_ANDROID_SOURCETREE/rsync/build-stamp"
+make "$GIT_ANNEX_ANDROID_SOURCETREE/gnupg/build-stamp"
+make "$GIT_ANNEX_ANDROID_SOURCETREE/git/build-stamp"
+make "$GIT_ANNEX_ANDROID_SOURCETREE/term/build-stamp"
+
+perl -i -pe 's/(android:versionName=)"[^"]+"/$1"'"$VER"'"/' \
+ "$GIT_ANNEX_ANDROID_SOURCETREE/term/AndroidManifest.xml"
+
+# Debug build because it does not need signing keys.
+(cd "$GIT_ANNEX_ANDROID_SOURCETREE/term" && tools/build-debug)
+
+# Install executables as pseudo-libraries so they will be
+# unpacked from the .apk.
+mkdir -p "$GIT_ANNEX_ANDROID_SOURCETREE/term/libs/armeabi"
+cp "$GIT_ANNEX_ANDROID_SOURCETREE/busybox/busybox" "$GIT_ANNEX_ANDROID_SOURCETREE/term/libs/armeabi/lib.busybox.so"
+cp "$GIT_ANNEX_ANDROID_SOURCETREE/openssh/ssh" "$GIT_ANNEX_ANDROID_SOURCETREE/term/libs/armeabi/lib.ssh.so"
+cp "$GIT_ANNEX_ANDROID_SOURCETREE/openssh/ssh-keygen" "$GIT_ANNEX_ANDROID_SOURCETREE/term/libs/armeabi/lib.ssh-keygen.so"
+cp "$GIT_ANNEX_ANDROID_SOURCETREE/rsync/rsync" "$GIT_ANNEX_ANDROID_SOURCETREE/term/libs/armeabi/lib.rsync.so"
+cp "$GIT_ANNEX_ANDROID_SOURCETREE/gnupg/g10/gpg" "$GIT_ANNEX_ANDROID_SOURCETREE/term/libs/armeabi/lib.gpg.so"
+cp "$GIT_ANNEX_ANDROID_SOURCETREE/git/git" "$GIT_ANNEX_ANDROID_SOURCETREE/term/libs/armeabi/lib.git.so"
+cp "$GIT_ANNEX_ANDROID_SOURCETREE/git/git-shell" "$GIT_ANNEX_ANDROID_SOURCETREE/term/libs/armeabi/lib.git-shell.so"
+cp "$GIT_ANNEX_ANDROID_SOURCETREE/git/git-upload-pack" "$GIT_ANNEX_ANDROID_SOURCETREE/term/libs/armeabi/lib.git-upload-pack.so"
+arm-linux-androideabi-strip --strip-unneeded --remove-section=.comment --remove-section=.note "$GIT_ANNEX_ANDROID_SOURCETREE"/term/libs/armeabi/*
+cp runshell "$GIT_ANNEX_ANDROID_SOURCETREE/term/libs/armeabi/lib.runshell.so"
+cc start.c -o "$GIT_ANNEX_ANDROID_SOURCETREE/term/libs/armeabi/lib.start.so"
+
+# remove git stuff we don't need to save space
+rm -rf $gittree/bin/git-cvsserver \
+ $gittree/libexec/git-core/git-daemon \
+ $gittree/libexec/git-core/git-show-index \
+ $gittree/libexec/git-core/mergetools \
+ $gittree/libexec/git-core/git-credential-* \
+ $gittree/libexec/git-core/git-cvsserver \
+ $gittree/libexec/git-core/git-cvsimport \
+ $gittree/libexec/git-core/git-fast-import \
+ $gittree/libexec/git-core/git-http-backend \
+ $gittree/libexec/git-core/git-imap-send \
+ $gittree/libexec/git-core/git-instaweb \
+ $gittree/libexec/git-core/git-p4 \
+ $gittree/libexec/git-core/git-remote-test* \
+ $gittree/libexec/git-core/git-submodule \
+ $gittree/libexec/git-core/git-svn \
+ $gittree/libexec/git-core/git-web--browse
+
+# Most of git is in one multicall binary, but a few important
+# commands are still shell scripts. Those are put into
+# a tarball, along with a list of all the links that should be
+# set up.
+(cd $gittree && mkdir -p links)
+(cd $gittree && find -samefile bin/git -not -wholename ./bin/git > links/git)
+(cd $gittree && find -samefile bin/git-shell -not -wholename ./bin/git-shell > links/git-shell)
+(cd $gittree && find -samefile bin/git-upload-pack -not -wholename ./bin/git-upload-pack > links/git-upload-pack)
+(cd $gittree && find -type f -not -samefile bin/git -not -samefile bin/git-shell -not -samefile bin/git-upload-pack | tar czf ../git.tar.gz -T -)
+(cp "$GIT_ANNEX_ANDROID_SOURCETREE/git/git.tar.gz" "$GIT_ANNEX_ANDROID_SOURCETREE/term/libs/armeabi/lib.git.tar.gz.so")
+
+git rev-parse HEAD > "$GIT_ANNEX_ANDROID_SOURCETREE/term/libs/armeabi/lib.version.so"
+cp ../trustedkeys.gpg "$GIT_ANNEX_ANDROID_SOURCETREE/term/libs/armeabi/lib.trustedkeys.so"
+
+genapk () {
+ mkdir -p ../../tmp/$1; \
+ cp ../../tmp/androidtree/dist/build/git-annex/$1/git-annex "$GIT_ANNEX_ANDROID_SOURCETREE/term/libs/armeabi/lib.git-annex.so"
+ arm-linux-androideabi-strip --strip-unneeded --remove-section=.comment --remove-section=.note "$GIT_ANNEX_ANDROID_SOURCETREE/term/libs/armeabi/lib.git-annex.so"
+ (cd "$GIT_ANNEX_ANDROID_SOURCETREE/term" && ant debug)
+ cp "$GIT_ANNEX_ANDROID_SOURCETREE/term/bin/Term-debug.apk" ../../tmp/$1/git-annex.apk
+}
+
+if [ "$androidversion" = 4 ]; then
+ for v in 4.0 4.3; do
+ genapk $v
+ done
+else
+ genapk 5.0
+fi
diff --git a/standalone/android/buildchroot b/standalone/android/buildchroot
index 44337eb0c..e64bdd03d 100755
--- a/standalone/android/buildchroot
+++ b/standalone/android/buildchroot
@@ -5,7 +5,7 @@ if [ "$(whoami)" != root ]; then
exit 1
fi
-debootstrap --arch=i386 stable debian-stable-android
+debootstrap --arch=i386 jessie debian-stable-android
cp $0-inchroot debian-stable-android/tmp
cp $0-inchroot-asuser debian-stable-android/tmp
cp $(dirname $0)/abiversion debian-stable-android/tmp
@@ -20,7 +20,7 @@ chroot debian-stable-android "tmp/$(basename $0)-inchroot"
echo
echo
-echo "debian-stable-android is set up, with a user androidbuilder"
+echo "debian-stable-android is set up, with a user builder"
echo "your next step is probably to check out git-annex in this chroot"
echo "and run standalone/android/install-haskell-packages"
echo
diff --git a/standalone/android/buildchroot-inchroot b/standalone/android/buildchroot-inchroot
index a5fa2ce85..69653b758 100755
--- a/standalone/android/buildchroot-inchroot
+++ b/standalone/android/buildchroot-inchroot
@@ -1,26 +1,27 @@
#!/bin/sh
# Runs inside the chroot set up by buildchroot
set -e
+set -x
if [ "$(whoami)" != root ]; then
echo "Must run this as root!" >&2
exit 1
fi
# java needs this mounted to work
-mount -t proc proc /proc
+mount -t proc proc /proc || true
-echo "deb-src http://ftp.us.debian.org/debian stable main" >> /etc/apt/sources.list
+echo "deb-src http://ftp.us.debian.org/debian jessie main" >> /etc/apt/sources.list
apt-get update
apt-get -y install build-essential ghc git libncurses5-dev cabal-install
apt-get -y install happy alex
-apt-get -y install llvm-3.0 # not 3.1; buggy on arm. 3.2 is ok too
+apt-get -y install llvm-3.4
apt-get -y install ca-certificates curl file m4 autoconf zlib1g-dev
-apt-get -y install libgnutls-dev libxml2-dev libgsasl7-dev pkg-config c2hs
+apt-get -y install libgnutls28-dev libxml2-dev libgsasl7-dev pkg-config c2hs
apt-get -y install ant default-jdk rsync wget gnupg lsof
apt-get -y install gettext unzip python
+apt-get -y install locales automake
+echo en_US.UTF-8 UTF-8 >> /etc/locale.gen
+locale-gen
apt-get clean
-wget http://snapshot.debian.org/archive/debian/20130903T155330Z/pool/main/a/automake-1.14/automake_1.14-1_all.deb
-dpkg -i automake*.deb
-rm *.deb
-useradd androidbuilder --create-home
-su androidbuilder -c $0-asuser
+useradd builder --create-home || true
+su builder -c $0-asuser
diff --git a/standalone/android/buildchroot-inchroot-asuser b/standalone/android/buildchroot-inchroot-asuser
index 710e76e46..a7bea231a 100755
--- a/standalone/android/buildchroot-inchroot-asuser
+++ b/standalone/android/buildchroot-inchroot-asuser
@@ -1,18 +1,23 @@
#!/bin/sh
# Runs inside the chroot set up by buildchroot, as the user it creates
set -e
+set -x
+
+# Put in /tmp by buildchroot, but when bootstrapping with propellor,
+# this is run inside a checked out git-annex tree.
+if [ -e /tmp/abiversion ]; then
+ ABIVERSION=$(cat /tmp/abiversion)
+else
+ ABIVERSION=$(cat standalone/android/abiversion)
+fi
cd
-rm -rf .ghc .cabal
-cabal update
-cabal install happy alex --bindir=$HOME/bin
-PATH=$HOME/bin:$PATH
-export PATH
+rm -rf .ghc .cabal .android
mkdir -p .android
cd .android
git clone https://github.com/joeyh/ghc-android
cd ghc-android
-git checkout stable-ghc-snapshot
+git checkout jessie-ghc-snapshot
./build
# This saves 2 gb, and the same sources are in build-*/ghc
@@ -29,10 +34,7 @@ mv adt-bundle-linux-x86-* adt-bundle-linux-x86
rm -rf adt-bundle-linux-x86/eclipse
# The git-annex android Makefile needs this cc symlink.
-ln -s arm-linux-androideabi-gcc $HOME/.ghc/$(cat /tmp/abiversion)/bin/cc
-
-cd
-git clone git://git-annex.branchable.com/ git-annex
+ln -s arm-linux-androideabi-gcc $HOME/.ghc/$ABIVERSION/bin/cc
git config --global user.email androidbuilder@example.com
git config --global user.name androidbuilder
diff --git a/standalone/android/cabal.config b/standalone/android/cabal.config
new file mode 100644
index 000000000..4eecbfeaf
--- /dev/null
+++ b/standalone/android/cabal.config
@@ -0,0 +1,208 @@
+constraints: Crypto ==4.2.5.1,
+ DAV ==1.0.3,
+ HTTP ==4000.2.17,
+ HUnit ==1.2.5.2,
+ IfElse ==0.85,
+ MissingH ==1.2.1.0,
+ MonadRandom ==0.1.13,
+ QuickCheck ==2.7.6,
+ SHA ==1.6.1,
+ SafeSemaphore ==0.10.1,
+ aeson ==0.7.0.6,
+ ansi-terminal ==0.6.1.1,
+ ansi-wl-pprint ==0.6.7.1,
+ appar ==0.1.4,
+ asn1-encoding ==0.8.1.3,
+ asn1-parse ==0.8.1,
+ asn1-types ==0.2.3,
+ async ==2.0.1.5,
+ attoparsec ==0.11.3.4,
+ attoparsec-conduit ==1.1.0,
+ authenticate ==1.3.2.10,
+ base-unicode-symbols ==0.2.2.4,
+ base16-bytestring ==0.1.1.6,
+ base64-bytestring ==1.0.0.1,
+ bifunctors ==4.1.1.1,
+ bloomfilter ==2.0.0.0,
+ byteable ==0.1.1,
+ byteorder ==1.0.4,
+ case-insensitive ==1.2.0.1,
+ cereal ==0.4.0.1,
+ cipher-aes ==0.2.8,
+ cipher-des ==0.0.6,
+ cipher-rc4 ==0.1.4,
+ clientsession ==0.9.0.3,
+ comonad ==4.2,
+ conduit ==1.1.6,
+ conduit-extra ==1.1.3,
+ connection ==0.2.3,
+ contravariant ==0.6.1.1,
+ cookie ==0.4.1.2,
+ cprng-aes ==0.5.2,
+ crypto-api ==0.13.2,
+ crypto-cipher-types ==0.0.9,
+ crypto-numbers ==0.2.3,
+ crypto-pubkey ==0.2.4,
+ crypto-pubkey-types ==0.4.2.2,
+ crypto-random ==0.0.7,
+ cryptohash ==0.11.6,
+ cryptohash-conduit ==0.1.1,
+ css-text ==0.1.2.1,
+ shakespeare-text ==1.0.2,
+ data-default ==0.5.3,
+ data-default-class ==0.0.1,
+ data-default-instances-base ==0.0.1,
+ data-default-instances-containers ==0.0.1,
+ data-default-instances-dlist ==0.0.1,
+ data-default-instances-old-locale ==0.0.1,
+ dataenc ==0.14.0.7,
+ dbus ==0.10.8,
+ distributive ==0.4.4,
+ dlist ==0.7.0.1,
+ dns ==1.3.0,
+ edit-distance ==0.2.1.2,
+ either ==4.3,
+ email-validate ==1.0.0,
+ entropy ==0.2.1,
+ errors ==1.4.7,
+ exceptions ==0.6.1,
+ failure ==0.2.0.3,
+ fast-logger ==2.1.5,
+ fdo-notify ==0.3.1,
+ feed ==0.3.9.2,
+ file-embed ==0.0.6,
+ fingertree ==0.1.0.0,
+ free ==4.9,
+ gnuidn ==0.2,
+ gnutls ==0.1.4,
+ gsasl ==0.3.5,
+ hS3 ==0.5.7,
+ hamlet ==1.1.9.2,
+ hashable ==1.2.1.0,
+ hinotify ==0.3.5,
+ hjsmin ==0.1.4.7,
+ hslogger ==1.2.1,
+ http-client ==0.3.8.2,
+ http-client-tls ==0.2.2,
+ http-conduit ==2.1.2.3,
+ http-date ==0.0.2,
+ http-types ==0.8.5,
+ hxt ==9.3.1.4,
+ hxt-charproperties ==9.1.1.1,
+ hxt-regex-xmlschema ==9.0.4,
+ hxt-unicode ==9.0.2.2,
+ idna ==0.2,
+ iproute ==1.2.11,
+ json ==0.5,
+ keys ==3.10.1,
+ language-javascript ==0.5.13,
+ lens ==4.4.0.2,
+ libxml-sax ==0.7.5,
+ mime-mail ==0.4.1.2,
+ mime-types ==0.1.0.4,
+ mmorph ==1.0.3,
+ monad-control ==0.3.2.2,
+ monad-logger ==0.3.6.1,
+ monad-loops ==0.4.2.1,
+ monads-tf ==0.1.0.2,
+ mtl ==2.1.2,
+ nats ==0.1.2,
+ network ==2.4.1.2,
+ network-conduit ==1.1.0,
+ network-info ==0.2.0.5,
+ network-multicast ==0.0.10,
+ network-protocol-xmpp ==0.4.6,
+ network-uri ==2.6.0.1,
+ optparse-applicative ==0.10.0,
+ parallel ==3.2.0.4,
+ path-pieces ==0.1.4,
+ pem ==0.2.2,
+ persistent ==1.3.3,
+ persistent-template ==1.3.2.2,
+ pointed ==4.0,
+ prelude-extras ==0.4,
+ profunctors ==4.0.4,
+ publicsuffixlist ==0.1,
+ punycode ==2.0,
+ random ==1.0.1.1,
+ ranges ==0.2.4,
+ reducers ==3.10.2.1,
+ reflection ==1.2.0.1,
+ regex-base ==0.93.2,
+ regex-compat ==0.95.1,
+ regex-posix ==0.95.2,
+ regex-tdfa ==1.2.0,
+ resource-pool ==0.2.1.1,
+ resourcet ==1.1.2.3,
+ safe ==0.3.8,
+ securemem ==0.1.3,
+ semigroupoids ==4.2,
+ semigroups ==0.15.3,
+ shakespeare ==1.2.1.1,
+ shakespeare-css ==1.0.7.4,
+ shakespeare-i18n ==1.0.0.5,
+ shakespeare-js ==1.2.0.4,
+ silently ==1.2.4.1,
+ simple-sendfile ==0.2.14,
+ skein ==1.0.9,
+ socks ==0.5.4,
+ split ==0.2.2,
+ stm ==2.4.2,
+ stm-chans ==3.0.0.2,
+ streaming-commons ==0.1.4.1,
+ stringprep ==0.1.5,
+ stringsearch ==0.3.6.5,
+ syb ==0.4.0,
+ system-fileio ==0.3.14,
+ system-filepath ==0.4.12,
+ tagged ==0.7.2,
+ tagsoup ==0.13.1,
+ tagstream-conduit ==0.5.5.1,
+ tasty ==0.10,
+ tasty-hunit ==0.9,
+ tasty-quickcheck ==0.8.1,
+ tasty-rerun ==1.1.3,
+ text ==1.1.1.0,
+ text-icu ==0.6.3.7,
+ tf-random ==0.5,
+ tls ==1.2.9,
+ transformers ==0.3.0.0,
+ transformers-base ==0.4.1,
+ transformers-compat ==0.3.3.3,
+ unbounded-delays ==0.1.0.8,
+ unix-compat ==0.4.1.3,
+ unix-time ==0.2.2,
+ unordered-containers ==0.2.5.0,
+ utf8-string ==0.3.7,
+ uuid ==1.3.3,
+ vault ==0.3.0.3,
+ vector ==0.10.0.1,
+ void ==0.6.1,
+ wai ==3.0.1.1,
+ wai-app-static ==3.0.0.1,
+ wai-extra ==3.0.1.2,
+ wai-logger ==2.1.1,
+ warp ==3.0.0.5,
+ warp-tls ==3.0.0,
+ word8 ==0.1.1,
+ x509 ==1.4.11,
+ x509-store ==1.4.4,
+ x509-system ==1.4.5,
+ x509-validation ==1.5.0,
+ xml ==1.3.13,
+ xml-conduit ==1.2.1,
+ xml-hamlet ==0.4.0.9,
+ xml-types ==0.3.4,
+ xss-sanitize ==0.3.5.2,
+ yaml ==0.8.9.3,
+ yesod ==1.2.6.1,
+ yesod-auth ==1.3.4.6,
+ yesod-core ==1.2.20.1,
+ yesod-default ==1.2.0,
+ yesod-form ==1.3.16,
+ yesod-persistent ==1.2.3.1,
+ yesod-routes ==1.2.0.7,
+ yesod-static ==1.2.4,
+ zlib ==0.5.4.1,
+ bytestring ==0.10.4.0,
+ scientific ==0.3.3.1
diff --git a/standalone/android/git.patch b/standalone/android/git.patch
new file mode 100644
index 000000000..ecf095849
--- /dev/null
+++ b/standalone/android/git.patch
@@ -0,0 +1,47 @@
+From 6134cc328f513e32895462e884487513b28029ba Mon Sep 17 00:00:00 2001
+From: Joey Hess <joey@kitenet.net>
+Date: Wed, 13 Aug 2014 13:50:56 -0400
+Subject: [PATCH] avoid using of chmod on android when changing config
+
+This breaks on Android's /sdcard, which has a variety of FUSE
+implentations, all total shite.
+---
+ config.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/config.c b/config.c
+index 058505c..16854b2 100644
+--- a/config.c
++++ b/config.c
+@@ -1634,12 +1634,14 @@ int git_config_set_multivar_in_file(const char *config_filename,
+ MAP_PRIVATE, in_fd, 0);
+ close(in_fd);
+
++ /* not on android
+ if (chmod(lock->filename, st.st_mode & 07777) < 0) {
+ error("chmod on %s failed: %s",
+ lock->filename, strerror(errno));
+ ret = CONFIG_NO_WRITE;
+ goto out_free;
+ }
++ */
+
+ if (store.seen == 0)
+ store.seen = 1;
+@@ -1813,11 +1815,13 @@ int git_config_rename_section_in_file(const char *config_filename,
+
+ fstat(fileno(config_file), &st);
+
++ /* not on android
+ if (chmod(lock->filename, st.st_mode & 07777) < 0) {
+ ret = error("chmod on %s failed: %s",
+ lock->filename, strerror(errno));
+ goto out;
+ }
++ */
+
+ while (fgets(buf, sizeof(buf), config_file)) {
+ int i;
+--
+2.1.0.rc1
+
diff --git a/standalone/android/haskell-patches/MissingH_1.2.0.0_0001-fix-build-not-Android-specific.patch b/standalone/android/haskell-patches/MissingH_1.2.0.0_0001-fix-build-not-Android-specific.patch
deleted file mode 100644
index 50f641da7..000000000
--- a/standalone/android/haskell-patches/MissingH_1.2.0.0_0001-fix-build-not-Android-specific.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 8c4220e4dd48ad197aa0ad49214e6e7bd768044e Mon Sep 17 00:00:00 2001
-From: Joey Hess <joey@kitenet.net>
-Date: Thu, 28 Feb 2013 23:28:57 -0400
-Subject: [PATCH] fix build (not Android specific)
-
----
- src/System/Cmd/Utils.hs | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/System/Cmd/Utils.hs b/src/System/Cmd/Utils.hs
-index a9fa46f..6c6aba2 100644
---- a/src/System/Cmd/Utils.hs
-+++ b/src/System/Cmd/Utils.hs
-@@ -325,7 +325,7 @@ forceSuccess (PipeHandle pid fp args funcname) =
- Just (Exited (ExitSuccess)) -> return ()
- Just (Exited (ExitFailure fc)) ->
- cmdfailed funcname fp args fc
-- Just (Terminated sig) ->
-+ Just (Terminated sig _) ->
- warnfail fp args $ "Terminated by signal " ++ show sig
- Just (Stopped sig) ->
- warnfail fp args $ "Stopped by signal " ++ show sig
-@@ -351,7 +351,7 @@ safeSystem command args =
- case ec of
- Exited ExitSuccess -> return ()
- Exited (ExitFailure fc) -> cmdfailed "safeSystem" command args fc
-- Terminated s -> cmdsignalled "safeSystem" command args s
-+ Terminated s _ -> cmdsignalled "safeSystem" command args s
- Stopped s -> cmdsignalled "safeSystem" command args s
- #endif
-
---
-1.7.10.4
-
diff --git a/standalone/android/haskell-patches/bloomfilter_fix-build-with-newer-base.patch b/standalone/android/haskell-patches/bloomfilter_fix-build-with-newer-base.patch
deleted file mode 100644
index d2f783a7f..000000000
--- a/standalone/android/haskell-patches/bloomfilter_fix-build-with-newer-base.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 09bcaf4f203c39c967a6951d56fd015347bb5dae Mon Sep 17 00:00:00 2001
-From: foo <foo@bar>
-Date: Sat, 21 Sep 2013 21:57:21 +0000
-Subject: [PATCH] fix build with newer base
-
----
- Data/BloomFilter/Array.hs | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/Data/BloomFilter/Array.hs b/Data/BloomFilter/Array.hs
-index e085bbe..d94757a 100644
---- a/Data/BloomFilter/Array.hs
-+++ b/Data/BloomFilter/Array.hs
-@@ -3,7 +3,8 @@
-
- module Data.BloomFilter.Array (newArray) where
-
--import Control.Monad.ST (ST, unsafeIOToST)
-+import Control.Monad.ST (ST)
-+import Control.Monad.ST.Unsafe (unsafeIOToST)
- import Data.Array.Base (MArray, STUArray(..), unsafeNewArray_)
- #if __GLASGOW_HASKELL__ >= 704
- import Foreign.C.Types (CInt(..), CSize(..))
---
-1.7.10.4
-
diff --git a/standalone/android/haskell-patches/distributive_0.3-0001-fixes-for-cross-build.patch b/standalone/android/haskell-patches/distributive_0.3-0001-fixes-for-cross-build.patch
deleted file mode 100644
index 4859be9a4..000000000
--- a/standalone/android/haskell-patches/distributive_0.3-0001-fixes-for-cross-build.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 6cd7b7d3a8e38ada9b1e3989770525c63f9f1d7d Mon Sep 17 00:00:00 2001
-From: androidbuilder <androidbuilder@example.com>
-Date: Fri, 18 Oct 2013 23:10:16 +0000
-Subject: [PATCH] cross build
-
----
- distributive.cabal | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/distributive.cabal b/distributive.cabal
-index 5d4ac69..82d7593 100644
---- a/distributive.cabal
-+++ b/distributive.cabal
-@@ -12,7 +12,7 @@ bug-reports: http://github.com/ekmett/distributive/issues
- copyright: Copyright (C) 2011-2013 Edward A. Kmett
- synopsis: Haskell 98 Distributive functors -- Dual to Traversable
- description: Haskell 98 Distributive functors -- Dual to Traversable
--build-type: Custom
-+build-type: Simple
- extra-source-files:
- .ghci
- .travis.yml
---
-1.7.10.4
-
diff --git a/standalone/android/haskell-patches/distributive_0.4.4_0001-fixes-for-cross-build.patch b/standalone/android/haskell-patches/distributive_0.4.4_0001-fixes-for-cross-build.patch
new file mode 100644
index 000000000..4229d644d
--- /dev/null
+++ b/standalone/android/haskell-patches/distributive_0.4.4_0001-fixes-for-cross-build.patch
@@ -0,0 +1,25 @@
+From 86eca0993e1716b4db14570836efbe838626892f Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Sun, 25 May 2014 09:11:15 +0200
+Subject: [PATCH] cross build
+
+---
+ distributive.cabal | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/distributive.cabal b/distributive.cabal
+index 9be5133..3e72c65 100644
+--- a/distributive.cabal
++++ b/distributive.cabal
+@@ -12,7 +12,7 @@ bug-reports: http://github.com/ekmett/distributive/issues
+ copyright: Copyright (C) 2011-2014 Edward A. Kmett
+ synopsis: Distributive functors -- Dual to Traversable
+ description: Distributive functors -- Dual to Traversable
+-build-type: Custom
++build-type: Simple
+ extra-source-files:
+ .ghci
+ .travis.yml
+--
+2.0.0.rc2
+
diff --git a/standalone/android/haskell-patches/dns_use-android-net.dns1-command-instead-of-resolv.conf.patch b/standalone/android/haskell-patches/dns_use-android-net.dns1-command-instead-of-resolv.conf.patch
index 030f59ed1..962a64207 100644
--- a/standalone/android/haskell-patches/dns_use-android-net.dns1-command-instead-of-resolv.conf.patch
+++ b/standalone/android/haskell-patches/dns_use-android-net.dns1-command-instead-of-resolv.conf.patch
@@ -1,31 +1,35 @@
-From bf2126a729e87c5eae7893a48f850993498a666a Mon Sep 17 00:00:00 2001
-From: Joey Hess <joey@kitenet.net>
-Date: Tue, 3 Dec 2013 13:11:15 -0400
-Subject: [PATCH] use android net.dns1 command instead of resolv.conf file
+From 087f1ae5e17f0e6d7c9f6b4092a5bb5bb6f5bf60 Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Thu, 16 Oct 2014 02:59:11 +0000
+Subject: [PATCH] port
-Android has no /etc/resolv.conf. Some might have /system/etc/resolv.conf,
-but even that does not seem likely.
-
-This is likely a little slow, but is at least fine for git-annex's uses,
-since it only uses this library for occasional SRV lookups.
---
- Network/DNS/Resolver.hs | 11 +++++++----
+ Network/DNS/Resolver.hs | 13 ++++++++-----
dns.cabal | 1 +
- 2 files changed, 8 insertions(+), 4 deletions(-)
+ 2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/Network/DNS/Resolver.hs b/Network/DNS/Resolver.hs
-index 9e6c951..c210763 100644
+index 5721e03..c4400d1 100644
--- a/Network/DNS/Resolver.hs
+++ b/Network/DNS/Resolver.hs
-@@ -27,6 +27,7 @@ import Network.Socket.ByteString.Lazy
+@@ -19,7 +19,7 @@ module Network.DNS.Resolver (
+ ) where
+
+ import Control.Applicative ((<$>), (<*>), pure)
+-import Control.Exception (bracket)
++import Control.Exception (bracket, catch, IOException)
+ import qualified Data.ByteString.Char8 as BS
+ import Data.Char (isSpace)
+ import Data.List (isPrefixOf)
+@@ -32,6 +32,7 @@ import Network.Socket (AddrInfoFlag(..), AddrInfo(..), defaultHints, getAddrInfo
import Prelude hiding (lookup)
- import System.Random
- import System.Timeout
+ import System.Random (getStdRandom, randomR)
+ import System.Timeout (timeout)
+import System.Process
#if mingw32_HOST_OS == 1
import Network.Socket (send)
-@@ -111,10 +112,12 @@ makeResolvSeed conf = ResolvSeed <$> addr
+@@ -130,10 +131,12 @@ makeResolvSeed conf = ResolvSeed <$> addr
where
addr = case resolvInfo conf of
RCHostName numhost -> makeAddrInfo numhost
@@ -43,17 +47,17 @@ index 9e6c951..c210763 100644
makeAddrInfo :: HostName -> IO AddrInfo
makeAddrInfo addr = do
diff --git a/dns.cabal b/dns.cabal
-index 0a7e6f8..06f5a90 100644
+index ceaf5f4..cd15e61 100644
--- a/dns.cabal
+++ b/dns.cabal
@@ -37,6 +37,7 @@ Library
, network >= 2.3
- , network-conduit
, random
+ , resourcet
+ , process
else
Build-Depends: base >= 4 && < 5
, attoparsec
--
-1.8.4.4
+2.1.1
diff --git a/standalone/android/haskell-patches/entropy_cross-build.patch b/standalone/android/haskell-patches/entropy_cross-build.patch
deleted file mode 100644
index 5e09fdc8f..000000000
--- a/standalone/android/haskell-patches/entropy_cross-build.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 10da50b5eea1e615af1d3b242f422ad278c9f268 Mon Sep 17 00:00:00 2001
-From: dummy <dummy@example.com>
-Date: Fri, 18 Oct 2013 23:16:41 +0000
-Subject: [PATCH] cross build
-
----
- entropy.cabal | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/entropy.cabal b/entropy.cabal
-index e69dec4..4fa3774 100644
---- a/entropy.cabal
-+++ b/entropy.cabal
-@@ -14,7 +14,7 @@ category: Data, Cryptography
- homepage: https://github.com/TomMD/entropy
- bug-reports: https://github.com/TomMD/entropy/issues
- stability: stable
--build-type: Custom
-+build-type: Simple
- cabal-version: >=1.10
- tested-with: GHC == 7.6.3
- -- data-files:
---
-1.7.10.4
-
diff --git a/standalone/android/haskell-patches/gnuidn_fix-build-with-new-base.patch b/standalone/android/haskell-patches/gnuidn_fix-build-with-new-base.patch
new file mode 100644
index 000000000..ff9d8f245
--- /dev/null
+++ b/standalone/android/haskell-patches/gnuidn_fix-build-with-new-base.patch
@@ -0,0 +1,50 @@
+From afdec6c9e66211a0ac8419fffe191b059d1fd00c Mon Sep 17 00:00:00 2001
+From: foo <foo@bar>
+Date: Sun, 22 Sep 2013 17:24:33 +0000
+Subject: [PATCH] fix build with new base
+
+---
+ Data/Text/IDN/IDNA.chs | 1 +
+ Data/Text/IDN/Punycode.chs | 1 +
+ Data/Text/IDN/StringPrep.chs | 1 +
+ 3 files changed, 3 insertions(+)
+
+diff --git a/Data/Text/IDN/IDNA.chs b/Data/Text/IDN/IDNA.chs
+index ed29ee4..dbb4ba5 100644
+--- a/Data/Text/IDN/IDNA.chs
++++ b/Data/Text/IDN/IDNA.chs
+@@ -31,6 +31,7 @@ import Foreign
+ import Foreign.C
+
+ import Data.Text.IDN.Internal
++import System.IO.Unsafe
+
+ #include <idna.h>
+ #include <idn-free.h>
+diff --git a/Data/Text/IDN/Punycode.chs b/Data/Text/IDN/Punycode.chs
+index 24b5fa6..4e62555 100644
+--- a/Data/Text/IDN/Punycode.chs
++++ b/Data/Text/IDN/Punycode.chs
+@@ -32,6 +32,7 @@ import Data.List (unfoldr)
+ import qualified Data.ByteString as B
+ import qualified Data.Text as T
+
++import System.IO.Unsafe
+ import Foreign
+ import Foreign.C
+
+diff --git a/Data/Text/IDN/StringPrep.chs b/Data/Text/IDN/StringPrep.chs
+index 752dc9e..5e9fd84 100644
+--- a/Data/Text/IDN/StringPrep.chs
++++ b/Data/Text/IDN/StringPrep.chs
+@@ -39,6 +39,7 @@ import qualified Data.ByteString as B
+ import qualified Data.Text as T
+ import qualified Data.Text.Encoding as TE
+
++import System.IO.Unsafe
+ import Foreign
+ import Foreign.C
+
+--
+1.7.10.4
+
diff --git a/standalone/android/haskell-patches/gnutls_0.1.4-0001-statically-link-with-gnutls.patch b/standalone/android/haskell-patches/gnutls_0.1.4-0001-statically-link-with-gnutls.patch
index 24f17cc6f..6f75da240 100644
--- a/standalone/android/haskell-patches/gnutls_0.1.4-0001-statically-link-with-gnutls.patch
+++ b/standalone/android/haskell-patches/gnutls_0.1.4-0001-statically-link-with-gnutls.patch
@@ -1,23 +1,29 @@
-From 67435289745b2f96fc9d1cd8e0263ef0565e4789 Mon Sep 17 00:00:00 2001
-From: Joey Hess <joey@kitenet.net>
-Date: Tue, 26 Nov 2013 19:18:28 +0000
-Subject: [PATCH] hack gnutls to statically link
+From 311aab1ae9d7a653edfbec1351f548b98de85c4b Mon Sep 17 00:00:00 2001
+From: androidbuilder <androidbuilder@example.com>
+Date: Mon, 26 May 2014 21:54:18 +0000
+Subject: [PATCH] hack gnutls to link on android
This uses a hardcoded path to the library, which includes the
arm-linux-androideabi-4.8 part. Will need to be changed when that changes..
+
+Have to list all the libraries that gnutls depends on, pkgconfig depends
+seems not to be working.
---
- gnutls.cabal | 6 ++----
- 1 file changed, 2 insertions(+), 4 deletions(-)
+ gnutls.cabal | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/gnutls.cabal b/gnutls.cabal
-index 5bfe687..ff1d08c 100644
+index 5bfe687..61db23f 100644
--- a/gnutls.cabal
+++ b/gnutls.cabal
-@@ -31,16 +31,14 @@ source-repository this
+@@ -31,16 +31,17 @@ source-repository this
library
hs-source-dirs: lib
ghc-options: -Wall -O2
-+ LD-Options: -L /home/androidbuilder/.ghc/android-14/arm-linux-androideabi-4.8/sysroot/usr/lib/ -l:libgnutls.a -l:libnettle.a -l:libhogweed.a -l:libgmp.a
++ LD-Options: -L /home/builder/.ghc/android-14/arm-linux-androideabi-4.8/sysroot/usr/lib/
++
++ extra-libraries: gnutls nettle hogweed gmp z
++ pkgconfig-depends: gnutls
build-depends:
base >= 4.0 && < 5.0
diff --git a/standalone/android/haskell-patches/libxml-sax_text-dep.patch b/standalone/android/haskell-patches/libxml-sax_text-dep.patch
deleted file mode 100644
index c9b4fdb78..000000000
--- a/standalone/android/haskell-patches/libxml-sax_text-dep.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From d4c861dbdee34cb2434085b9ece62c416d4cad79 Mon Sep 17 00:00:00 2001
-From: androidbuilder <androidbuilder@example.com>
-Date: Sat, 8 Feb 2014 17:19:37 +0000
-Subject: [PATCH] text dependency
-
----
- libxml-sax.cabal | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/libxml-sax.cabal b/libxml-sax.cabal
-index 60dba81..d6883bd 100644
---- a/libxml-sax.cabal
-+++ b/libxml-sax.cabal
-@@ -35,7 +35,7 @@ library
- build-depends:
- base >= 4.1 && < 5.0
- , bytestring >= 0.9
-- , text >= 0.7 && < 0.12
-+ , text
- , xml-types >= 0.3 && < 0.4
-
- exposed-modules:
---
-1.7.10.4
-
diff --git a/standalone/android/haskell-patches/lifted-base_crossbuild.patch b/standalone/android/haskell-patches/lifted-base_crossbuild.patch
deleted file mode 100644
index 945aee491..000000000
--- a/standalone/android/haskell-patches/lifted-base_crossbuild.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 8a98fa29048b508c64d5bb1e03ef89bfad8adc01 Mon Sep 17 00:00:00 2001
-From: foo <foo@bar>
-Date: Sat, 21 Sep 2013 21:34:17 +0000
-Subject: [PATCH] crossbuild
-
----
- lifted-base.cabal | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/lifted-base.cabal b/lifted-base.cabal
-index 24f2860..3bef225 100644
---- a/lifted-base.cabal
-+++ b/lifted-base.cabal
-@@ -9,7 +9,7 @@ Copyright: (c) 2011-2012 Bas van Dijk, Anders Kaseorg
- Homepage: https://github.com/basvandijk/lifted-base
- Bug-reports: https://github.com/basvandijk/lifted-base/issues
- Category: Control
--Build-type: Custom
-+Build-type: Simple
- Cabal-version: >= 1.8
- Description: @lifted-base@ exports IO operations from the base library lifted to
- any instance of 'MonadBase' or 'MonadBaseControl'.
---
-1.7.10.4
-
diff --git a/standalone/android/haskell-patches/network-protocol-xmpp_text-dapendency.patch b/standalone/android/haskell-patches/network-protocol-xmpp_text-dapendency.patch
deleted file mode 100644
index 798781837..000000000
--- a/standalone/android/haskell-patches/network-protocol-xmpp_text-dapendency.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 8f124aad6d04abba5729af21ba3b50944f165d4b Mon Sep 17 00:00:00 2001
-From: androidbuilder <androidbuilder@example.com>
-Date: Sat, 8 Feb 2014 17:20:41 +0000
-Subject: [PATCH] text dependency
-
----
- network-protocol-xmpp.cabal | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/network-protocol-xmpp.cabal b/network-protocol-xmpp.cabal
-index 2500075..d709a15 100644
---- a/network-protocol-xmpp.cabal
-+++ b/network-protocol-xmpp.cabal
-@@ -36,7 +36,7 @@ library
- , libxml-sax >= 0.7 && < 0.8
- , monads-tf >= 0.1 && < 0.2
- , network >= 2.2
-- , text >= 0.10 && < 0.12
-+ , text
- , transformers >= 0.2
- , xml-types >= 0.3 && < 0.4
-
---
-1.7.10.4
-
diff --git a/standalone/android/haskell-patches/network_2.4.1.0_0001-android-port-fixes.patch b/standalone/android/haskell-patches/network_2.4.1.0_0001-android-port-fixes.patch
deleted file mode 100644
index 66c0de544..000000000
--- a/standalone/android/haskell-patches/network_2.4.1.0_0001-android-port-fixes.patch
+++ /dev/null
@@ -1,1924 +0,0 @@
-From 3b478080f72240e0eb4b03b7eae52a0f5385bfef Mon Sep 17 00:00:00 2001
-From: dummy <dummy@example.com>
-Date: Thu, 26 Dec 2013 12:35:39 -0400
-Subject: [PATCH] android port fixes
-
-Build note: Ensure a hsc2hs in PATH is modified to pass -x to the real
-one, to enable cross-compiling.
----
- Network/Socket.hsc | 22 +-
- Network/Socket/ByteString.hsc | 2 +-
- Network/Socket/Internal.hsc | 2 +-
- Network/Socket/Types.hsc | 4 +-
- cbits/HsNet.c | 14 +
- config.guess | 562 ++++++++++++++++++++++-------------------
- config.sub | 384 ++++++++++++++++++++--------
- configure | 1 +
- 8 files changed, 608 insertions(+), 383 deletions(-)
-
-diff --git a/Network/Socket.hsc b/Network/Socket.hsc
-index 6d304bb..9b34776 100644
---- a/Network/Socket.hsc
-+++ b/Network/Socket.hsc
-@@ -35,7 +35,7 @@ module Network.Socket
- , SockAddr(..)
- , SocketStatus(..)
- , HostAddress
--#if defined(IPV6_SOCKET_SUPPORT)
-+#if defined(IPV6_SOCKET_SUPPORTNO)
- , HostAddress6
- , FlowInfo
- , ScopeID
-@@ -52,7 +52,7 @@ module Network.Socket
- , HostName
- , ServiceName
-
--#if defined(IPV6_SOCKET_SUPPORT)
-+#if defined(IPV6_SOCKET_SUPPORT) || 1
- , AddrInfo(..)
-
- , AddrInfoFlag(..)
-@@ -134,7 +134,7 @@ module Network.Socket
- -- * Special constants
- , aNY_PORT
- , iNADDR_ANY
--#if defined(IPV6_SOCKET_SUPPORT)
-+#if defined(IPV6_SOCKET_SUPPORTNO)
- , iN6ADDR_ANY
- #endif
- , sOMAXCONN
-@@ -326,16 +326,6 @@ socket family stype protocol = do
- setNonBlockIfNeeded fd
- socket_status <- newMVar NotConnected
- let sock = MkSocket fd family stype protocol socket_status
--#if HAVE_DECL_IPV6_V6ONLY
--# if defined(mingw32_HOST_OS)
-- -- the IPv6Only option is only supported on Windows Vista and later,
-- -- so trying to change it might throw an error
-- when (family == AF_INET6) $
-- E.catch (setSocketOption sock IPv6Only 0) $ (\(_ :: E.IOException) -> return ())
--# else
-- when (family == AF_INET6) $ setSocketOption sock IPv6Only 0
--# endif
--#endif
- return sock
-
- -- | Build a pair of connected socket objects using the given address
-@@ -1059,9 +1049,9 @@ aNY_PORT = 0
- iNADDR_ANY :: HostAddress
- iNADDR_ANY = htonl (#const INADDR_ANY)
-
--foreign import CALLCONV unsafe "htonl" htonl :: Word32 -> Word32
-+foreign import CALLCONV unsafe "my_htonl" htonl :: Word32 -> Word32
-
--#if defined(IPV6_SOCKET_SUPPORT)
-+#if defined(IPV6_SOCKET_SUPPORTNO)
- -- | The IPv6 wild card address.
-
- iN6ADDR_ANY :: HostAddress6
-@@ -1239,7 +1229,7 @@ unpackBits ((k,v):xs) r
- -----------------------------------------------------------------------------
- -- Address and service lookups
-
--#if defined(IPV6_SOCKET_SUPPORT)
-+#if defined(IPV6_SOCKET_SUPPORT) || 1
-
- -- | Flags that control the querying behaviour of 'getAddrInfo'.
- data AddrInfoFlag
-diff --git a/Network/Socket/ByteString.hsc b/Network/Socket/ByteString.hsc
-index e21ad1b..c2dd70a 100644
---- a/Network/Socket/ByteString.hsc
-+++ b/Network/Socket/ByteString.hsc
-@@ -197,7 +197,7 @@ sendMany sock@(MkSocket fd _ _ _ _) cs = do
- liftM fromIntegral . withIOVec cs $ \(iovsPtr, iovsLen) ->
- throwSocketErrorWaitWrite sock "writev" $
- c_writev (fromIntegral fd) iovsPtr
-- (fromIntegral (min iovsLen (#const IOV_MAX)))
-+ (fromIntegral (min iovsLen (0x0026)))
- #else
- sendMany sock = sendAll sock . B.concat
- #endif
-diff --git a/Network/Socket/Internal.hsc b/Network/Socket/Internal.hsc
-index 83333f7..0dd6a7d 100644
---- a/Network/Socket/Internal.hsc
-+++ b/Network/Socket/Internal.hsc
-@@ -24,7 +24,7 @@ module Network.Socket.Internal
- (
- -- * Socket addresses
- HostAddress
--#if defined(IPV6_SOCKET_SUPPORT)
-+#if defined(IPV6_SOCKET_SUPPORTNO)
- , HostAddress6
- , FlowInfo
- , ScopeID
-diff --git a/Network/Socket/Types.hsc b/Network/Socket/Types.hsc
-index 48a43bb..1c5994f 100644
---- a/Network/Socket/Types.hsc
-+++ b/Network/Socket/Types.hsc
-@@ -711,8 +711,8 @@ intToPortNumber v = PortNum (htons (fromIntegral v))
- portNumberToInt :: PortNumber -> Int
- portNumberToInt (PortNum po) = fromIntegral (ntohs po)
-
--foreign import CALLCONV unsafe "ntohs" ntohs :: Word16 -> Word16
--foreign import CALLCONV unsafe "htons" htons :: Word16 -> Word16
-+foreign import CALLCONV unsafe "my_ntohs" ntohs :: Word16 -> Word16
-+foreign import CALLCONV unsafe "my_htons" htons :: Word16 -> Word16
- --foreign import CALLCONV unsafe "ntohl" ntohl :: Word32 -> Word32
-
- instance Enum PortNumber where
-diff --git a/cbits/HsNet.c b/cbits/HsNet.c
-index 86b55dc..5ea1199 100644
---- a/cbits/HsNet.c
-+++ b/cbits/HsNet.c
-@@ -6,3 +6,17 @@
-
- #define INLINE
- #include "HsNet.h"
-+
-+#include <sys/endian.h>
-+uint16_t my_htons(uint16_t v)
-+{
-+ htons(v);
-+}
-+uint32_t my_htonl(uint32_t v)
-+{
-+ htonl(v);
-+}
-+uint16_t my_ntohs(uint16_t v)
-+{
-+ ntohs(v);
-+}
-diff --git a/config.guess b/config.guess
-index c38553d..1804e9f 100644
---- a/config.guess
-+++ b/config.guess
-@@ -1,13 +1,14 @@
- #! /bin/sh
- # Attempt to guess a canonical system name.
- # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
--# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-+# 2011, 2012, 2013 Free Software Foundation, Inc.
-
--timestamp='2006-02-23'
-+timestamp='2012-12-29'
-
- # This file is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by
--# the Free Software Foundation; either version 2 of the License, or
-+# the Free Software Foundation; either version 3 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful, but
-@@ -16,26 +17,22 @@ timestamp='2006-02-23'
- # General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
--# along with this program; if not, write to the Free Software
--# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
--# 02110-1301, USA.
-+# along with this program; if not, see <http://www.gnu.org/licenses/>.
- #
- # As a special exception to the GNU General Public License, if you
- # distribute this file as part of a program that contains a
- # configuration script generated by Autoconf, you may include it under
--# the same distribution terms that you use for the rest of that program.
--
--
--# Originally written by Per Bothner <per@bothner.com>.
--# Please send patches to <config-patches@gnu.org>. Submit a context
--# diff and a properly formatted ChangeLog entry.
-+# the same distribution terms that you use for the rest of that
-+# program. This Exception is an additional permission under section 7
-+# of the GNU General Public License, version 3 ("GPLv3").
-+#
-+# Originally written by Per Bothner.
- #
--# This script attempts to guess a canonical system name similar to
--# config.sub. If it succeeds, it prints the system name on stdout, and
--# exits with 0. Otherwise, it exits with 1.
-+# You can get the latest version of this script from:
-+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
- #
--# The plan is that this can be called by configure scripts if you
--# don't specify an explicit build system type.
-+# Please send patches with a ChangeLog entry to config-patches@gnu.org.
-+
-
- me=`echo "$0" | sed -e 's,.*/,,'`
-
-@@ -55,8 +52,9 @@ version="\
- GNU config.guess ($timestamp)
-
- Originally written by Per Bothner.
--Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
--Free Software Foundation, Inc.
-+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
-+2012, 2013 Free Software Foundation, Inc.
-
- This is free software; see the source for copying conditions. There is NO
- warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-@@ -143,7 +141,7 @@ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
- case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- *:NetBSD:*:*)
- # NetBSD (nbsd) targets should (where applicable) match one or
-- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
-+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
-@@ -160,6 +158,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- arm*) machine=arm-unknown ;;
- sh3el) machine=shl-unknown ;;
- sh3eb) machine=sh-unknown ;;
-+ sh5el) machine=sh5le-unknown ;;
- *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
- esac
- # The Operating System including object format, if it has switched
-@@ -168,7 +167,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- eval $set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-- | grep __ELF__ >/dev/null
-+ | grep -q __ELF__
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
-@@ -178,7 +177,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- fi
- ;;
- *)
-- os=netbsd
-+ os=netbsd
- ;;
- esac
- # The OS release
-@@ -199,6 +198,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit ;;
-+ *:Bitrig:*:*)
-+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
-+ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
-+ exit ;;
- *:OpenBSD:*:*)
- UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
- echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
-@@ -210,7 +213,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
- exit ;;
- macppc:MirBSD:*:*)
-- echo powerppc-unknown-mirbsd${UNAME_RELEASE}
-+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
- exit ;;
- *:MirBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-@@ -221,7 +224,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- ;;
- *5.*)
-- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
- ;;
- esac
- # According to Compaq, /usr/sbin/psrinfo has been available on
-@@ -267,7 +270,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-- exit ;;
-+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
-+ exitcode=$?
-+ trap '' 0
-+ exit $exitcode ;;
- Alpha\ *:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # Should we change UNAME_MACHINE based on the output of uname instead
-@@ -293,12 +299,12 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- echo s390-ibm-zvmoe
- exit ;;
- *:OS400:*:*)
-- echo powerpc-ibm-os400
-+ echo powerpc-ibm-os400
- exit ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
- exit ;;
-- arm:riscos:*:*|arm:RISCOS:*:*)
-+ arm*:riscos:*:*|arm*:RISCOS:*:*)
- echo arm-unknown-riscos
- exit ;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-@@ -322,14 +328,33 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- case `/usr/bin/uname -p` in
- sparc) echo sparc-icl-nx7; exit ;;
- esac ;;
-+ s390x:SunOS:*:*)
-+ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-+ exit ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
-- i86pc:SunOS:5.*:*)
-- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
-+ echo i386-pc-auroraux${UNAME_RELEASE}
-+ exit ;;
-+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-+ eval $set_cc_for_build
-+ SUN_ARCH="i386"
-+ # If there is a compiler, see if it is configured for 64-bit objects.
-+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
-+ # This test works for both compilers.
-+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-+ grep IS_64BIT_ARCH >/dev/null
-+ then
-+ SUN_ARCH="x86_64"
-+ fi
-+ fi
-+ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
-@@ -373,23 +398,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-- echo m68k-atari-mint${UNAME_RELEASE}
-+ echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
-- exit ;;
-+ exit ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-- echo m68k-atari-mint${UNAME_RELEASE}
-+ echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-- echo m68k-milan-mint${UNAME_RELEASE}
-- exit ;;
-+ echo m68k-milan-mint${UNAME_RELEASE}
-+ exit ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-- echo m68k-hades-mint${UNAME_RELEASE}
-- exit ;;
-+ echo m68k-hades-mint${UNAME_RELEASE}
-+ exit ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-- echo m68k-unknown-mint${UNAME_RELEASE}
-- exit ;;
-+ echo m68k-unknown-mint${UNAME_RELEASE}
-+ exit ;;
- m68k:machten:*:*)
- echo m68k-apple-machten${UNAME_RELEASE}
- exit ;;
-@@ -459,8 +484,8 @@ EOF
- echo m88k-motorola-sysv3
- exit ;;
- AViiON:dgux:*:*)
-- # DG/UX returns AViiON for all architectures
-- UNAME_PROCESSOR=`/usr/bin/uname -p`
-+ # DG/UX returns AViiON for all architectures
-+ UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
- then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-@@ -473,7 +498,7 @@ EOF
- else
- echo i586-dg-dgux${UNAME_RELEASE}
- fi
-- exit ;;
-+ exit ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit ;;
-@@ -530,7 +555,7 @@ EOF
- echo rs6000-ibm-aix3.2
- fi
- exit ;;
-- *:AIX:*:[45])
-+ *:AIX:*:[4567])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
- if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
-@@ -573,52 +598,52 @@ EOF
- 9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-- case "${sc_cpu_version}" in
-- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-- 532) # CPU_PA_RISC2_0
-- case "${sc_kernel_bits}" in
-- 32) HP_ARCH="hppa2.0n" ;;
-- 64) HP_ARCH="hppa2.0w" ;;
-+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-+ case "${sc_cpu_version}" in
-+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-+ 532) # CPU_PA_RISC2_0
-+ case "${sc_kernel_bits}" in
-+ 32) HP_ARCH="hppa2.0n" ;;
-+ 64) HP_ARCH="hppa2.0w" ;;
- '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
-- esac ;;
-- esac
-+ esac ;;
-+ esac
- fi
- if [ "${HP_ARCH}" = "" ]; then
- eval $set_cc_for_build
-- sed 's/^ //' << EOF >$dummy.c
-+ sed 's/^ //' << EOF >$dummy.c
-
-- #define _HPUX_SOURCE
-- #include <stdlib.h>
-- #include <unistd.h>
-+ #define _HPUX_SOURCE
-+ #include <stdlib.h>
-+ #include <unistd.h>
-
-- int main ()
-- {
-- #if defined(_SC_KERNEL_BITS)
-- long bits = sysconf(_SC_KERNEL_BITS);
-- #endif
-- long cpu = sysconf (_SC_CPU_VERSION);
-+ int main ()
-+ {
-+ #if defined(_SC_KERNEL_BITS)
-+ long bits = sysconf(_SC_KERNEL_BITS);
-+ #endif
-+ long cpu = sysconf (_SC_CPU_VERSION);
-
-- switch (cpu)
-- {
-- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-- case CPU_PA_RISC2_0:
-- #if defined(_SC_KERNEL_BITS)
-- switch (bits)
-- {
-- case 64: puts ("hppa2.0w"); break;
-- case 32: puts ("hppa2.0n"); break;
-- default: puts ("hppa2.0"); break;
-- } break;
-- #else /* !defined(_SC_KERNEL_BITS) */
-- puts ("hppa2.0"); break;
-- #endif
-- default: puts ("hppa1.0"); break;
-- }
-- exit (0);
-- }
-+ switch (cpu)
-+ {
-+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-+ case CPU_PA_RISC2_0:
-+ #if defined(_SC_KERNEL_BITS)
-+ switch (bits)
-+ {
-+ case 64: puts ("hppa2.0w"); break;
-+ case 32: puts ("hppa2.0n"); break;
-+ default: puts ("hppa2.0"); break;
-+ } break;
-+ #else /* !defined(_SC_KERNEL_BITS) */
-+ puts ("hppa2.0"); break;
-+ #endif
-+ default: puts ("hppa1.0"); break;
-+ }
-+ exit (0);
-+ }
- EOF
- (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
- test -z "$HP_ARCH" && HP_ARCH=hppa
-@@ -638,7 +663,7 @@ EOF
- # => hppa64-hp-hpux11.23
-
- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-- grep __LP64__ >/dev/null
-+ grep -q __LP64__
- then
- HP_ARCH="hppa2.0w"
- else
-@@ -709,22 +734,22 @@ EOF
- exit ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
-- exit ;;
-+ exit ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
-- exit ;;
-+ exit ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
-- exit ;;
-+ exit ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
-- exit ;;
-+ exit ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
-- exit ;;
-+ exit ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
-@@ -748,14 +773,14 @@ EOF
- exit ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-- exit ;;
-+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-+ exit ;;
- 5000:UNIX_System_V:4.*:*)
-- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-@@ -767,38 +792,51 @@ EOF
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit ;;
- *:FreeBSD:*:*)
-- case ${UNAME_MACHINE} in
-- pc98)
-- echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-+ UNAME_PROCESSOR=`/usr/bin/uname -p`
-+ case ${UNAME_PROCESSOR} in
-+ amd64)
-+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- *)
-- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-+ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- esac
- exit ;;
- i*:CYGWIN*:*)
- echo ${UNAME_MACHINE}-pc-cygwin
- exit ;;
-- i*:MINGW*:*)
-- echo ${UNAME_MACHINE}-pc-mingw32
-+ *:MINGW64*:*)
-+ echo ${UNAME_MACHINE}-pc-mingw64
- exit ;;
-- i*:MSYS_NT-*:*:*)
-+ *:MINGW*:*)
- echo ${UNAME_MACHINE}-pc-mingw32
- exit ;;
-+ i*:MSYS*:*)
-+ echo ${UNAME_MACHINE}-pc-msys
-+ exit ;;
- i*:windows32*:*)
-- # uname -m includes "-pc" on this system.
-- echo ${UNAME_MACHINE}-mingw32
-+ # uname -m includes "-pc" on this system.
-+ echo ${UNAME_MACHINE}-mingw32
- exit ;;
- i*:PW*:*)
- echo ${UNAME_MACHINE}-pc-pw32
- exit ;;
-- x86:Interix*:[345]*)
-- echo i586-pc-interix${UNAME_RELEASE}
-- exit ;;
-- EM64T:Interix*:[345]*)
-- echo x86_64-unknown-interix${UNAME_RELEASE}
-- exit ;;
-+ *:Interix*:*)
-+ case ${UNAME_MACHINE} in
-+ x86)
-+ echo i586-pc-interix${UNAME_RELEASE}
-+ exit ;;
-+ authenticamd | genuineintel | EM64T)
-+ echo x86_64-unknown-interix${UNAME_RELEASE}
-+ exit ;;
-+ IA64)
-+ echo ia64-unknown-interix${UNAME_RELEASE}
-+ exit ;;
-+ esac ;;
- [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
- echo i${UNAME_MACHINE}-pc-mks
- exit ;;
-+ 8664:Windows_NT:*)
-+ echo x86_64-pc-mks
-+ exit ;;
- i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-@@ -828,17 +866,68 @@ EOF
- i*86:Minix:*:*)
- echo ${UNAME_MACHINE}-pc-minix
- exit ;;
-+ aarch64:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
-+ exit ;;
-+ aarch64_be:Linux:*:*)
-+ UNAME_MACHINE=aarch64_be
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
-+ exit ;;
-+ alpha:Linux:*:*)
-+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-+ EV5) UNAME_MACHINE=alphaev5 ;;
-+ EV56) UNAME_MACHINE=alphaev56 ;;
-+ PCA56) UNAME_MACHINE=alphapca56 ;;
-+ PCA57) UNAME_MACHINE=alphapca56 ;;
-+ EV6) UNAME_MACHINE=alphaev6 ;;
-+ EV67) UNAME_MACHINE=alphaev67 ;;
-+ EV68*) UNAME_MACHINE=alphaev68 ;;
-+ esac
-+ objdump --private-headers /bin/sh | grep -q ld.so.1
-+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
-+ exit ;;
- arm*:Linux:*:*)
-+ eval $set_cc_for_build
-+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
-+ | grep -q __ARM_EABI__
-+ then
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
-+ else
-+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
-+ | grep -q __ARM_PCS_VFP
-+ then
-+ echo ${UNAME_MACHINE}-unknown-linux-gnueabi
-+ else
-+ echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
-+ fi
-+ fi
-+ exit ;;
-+ avr32*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- cris:Linux:*:*)
-- echo cris-axis-linux-gnu
-+ echo ${UNAME_MACHINE}-axis-linux-gnu
- exit ;;
- crisv32:Linux:*:*)
-- echo crisv32-axis-linux-gnu
-+ echo ${UNAME_MACHINE}-axis-linux-gnu
- exit ;;
- frv:Linux:*:*)
-- echo frv-unknown-linux-gnu
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
-+ exit ;;
-+ hexagon:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
-+ exit ;;
-+ i*86:Linux:*:*)
-+ LIBC=gnu
-+ eval $set_cc_for_build
-+ sed 's/^ //' << EOF >$dummy.c
-+ #ifdef __dietlibc__
-+ LIBC=dietlibc
-+ #endif
-+EOF
-+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
-+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
- exit ;;
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
-@@ -849,74 +938,33 @@ EOF
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
-- mips:Linux:*:*)
-- eval $set_cc_for_build
-- sed 's/^ //' << EOF >$dummy.c
-- #undef CPU
-- #undef mips
-- #undef mipsel
-- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-- CPU=mipsel
-- #else
-- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-- CPU=mips
-- #else
-- CPU=
-- #endif
-- #endif
--EOF
-- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-- /^CPU/{
-- s: ::g
-- p
-- }'`"
-- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-- ;;
-- mips64:Linux:*:*)
-+ mips:Linux:*:* | mips64:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
-- #undef mips64
-- #undef mips64el
-+ #undef ${UNAME_MACHINE}
-+ #undef ${UNAME_MACHINE}el
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-- CPU=mips64el
-+ CPU=${UNAME_MACHINE}el
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-- CPU=mips64
-+ CPU=${UNAME_MACHINE}
- #else
- CPU=
- #endif
- #endif
- EOF
-- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-- /^CPU/{
-- s: ::g
-- p
-- }'`"
-+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
- ;;
- or32:Linux:*:*)
-- echo or32-unknown-linux-gnu
-- exit ;;
-- ppc:Linux:*:*)
-- echo powerpc-unknown-linux-gnu
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
-- ppc64:Linux:*:*)
-- echo powerpc64-unknown-linux-gnu
-+ padre:Linux:*:*)
-+ echo sparc-unknown-linux-gnu
- exit ;;
-- alpha:Linux:*:*)
-- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-- EV5) UNAME_MACHINE=alphaev5 ;;
-- EV56) UNAME_MACHINE=alphaev56 ;;
-- PCA56) UNAME_MACHINE=alphapca56 ;;
-- PCA57) UNAME_MACHINE=alphapca56 ;;
-- EV6) UNAME_MACHINE=alphaev6 ;;
-- EV67) UNAME_MACHINE=alphaev67 ;;
-- EV68*) UNAME_MACHINE=alphaev68 ;;
-- esac
-- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
-- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
-+ parisc64:Linux:*:* | hppa64:Linux:*:*)
-+ echo hppa64-unknown-linux-gnu
- exit ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
-@@ -926,14 +974,17 @@ EOF
- *) echo hppa-unknown-linux-gnu ;;
- esac
- exit ;;
-- parisc64:Linux:*:* | hppa64:Linux:*:*)
-- echo hppa64-unknown-linux-gnu
-+ ppc64:Linux:*:*)
-+ echo powerpc64-unknown-linux-gnu
-+ exit ;;
-+ ppc:Linux:*:*)
-+ echo powerpc-unknown-linux-gnu
- exit ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
- exit ;;
- sh64*:Linux:*:*)
-- echo ${UNAME_MACHINE}-unknown-linux-gnu
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
-@@ -941,75 +992,18 @@ EOF
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
-+ tile*:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
-+ exit ;;
- vax:Linux:*:*)
- echo ${UNAME_MACHINE}-dec-linux-gnu
- exit ;;
- x86_64:Linux:*:*)
-- echo x86_64-unknown-linux-gnu
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
-+ exit ;;
-+ xtensa*:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
-- i*86:Linux:*:*)
-- # The BFD linker knows what the default object file format is, so
-- # first see if it will tell us. cd to the root directory to prevent
-- # problems with other programs or directories called `ld' in the path.
-- # Set LC_ALL=C to ensure ld outputs messages in English.
-- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
-- | sed -ne '/supported targets:/!d
-- s/[ ][ ]*/ /g
-- s/.*supported targets: *//
-- s/ .*//
-- p'`
-- case "$ld_supported_targets" in
-- elf32-i386)
-- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
-- ;;
-- a.out-i386-linux)
-- echo "${UNAME_MACHINE}-pc-linux-gnuaout"
-- exit ;;
-- coff-i386)
-- echo "${UNAME_MACHINE}-pc-linux-gnucoff"
-- exit ;;
-- "")
-- # Either a pre-BFD a.out linker (linux-gnuoldld) or
-- # one that does not give us useful --help.
-- echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
-- exit ;;
-- esac
-- # Determine whether the default compiler is a.out or elf
-- eval $set_cc_for_build
-- sed 's/^ //' << EOF >$dummy.c
-- #include <features.h>
-- #ifdef __ELF__
-- # ifdef __GLIBC__
-- # if __GLIBC__ >= 2
-- LIBC=gnu
-- # else
-- LIBC=gnulibc1
-- # endif
-- # else
-- LIBC=gnulibc1
-- # endif
-- #else
-- #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__sun)
-- LIBC=gnu
-- #else
-- LIBC=gnuaout
-- #endif
-- #endif
-- #ifdef __dietlibc__
-- LIBC=dietlibc
-- #endif
--EOF
-- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-- /^LIBC/{
-- s: ::g
-- p
-- }'`"
-- test x"${LIBC}" != x && {
-- echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
-- exit
-- }
-- test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
-- ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
-@@ -1017,11 +1011,11 @@ EOF
- echo i386-sequent-sysv4
- exit ;;
- i*86:UNIX_SV:4.2MP:2.*)
-- # Unixware is an offshoot of SVR4, but it has its own version
-- # number series starting with 2...
-- # I am not positive that other SVR4 systems won't match this,
-+ # Unixware is an offshoot of SVR4, but it has its own version
-+ # number series starting with 2...
-+ # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
-- # Use sysv4.2uw... so that sysv4* matches it.
-+ # Use sysv4.2uw... so that sysv4* matches it.
- echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit ;;
- i*86:OS/2:*:*)
-@@ -1038,7 +1032,7 @@ EOF
- i*86:syllable:*:*)
- echo ${UNAME_MACHINE}-pc-syllable
- exit ;;
-- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
-+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- i*86:*DOS:*:*)
-@@ -1053,7 +1047,7 @@ EOF
- fi
- exit ;;
- i*86:*:5:[678]*)
-- # UnixWare 7.x, OpenUNIX and OpenServer 6.
-+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
- case `/bin/uname -X | grep "^Machine"` in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
-@@ -1081,10 +1075,13 @@ EOF
- exit ;;
- pc:*:*:*)
- # Left here for compatibility:
-- # uname -m prints for DJGPP always 'pc', but it prints nothing about
-- # the processor, so we play safe by assuming i386.
-- echo i386-pc-msdosdjgpp
-- exit ;;
-+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
-+ # the processor, so we play safe by assuming i586.
-+ # Note: whatever this is, it MUST be the same as what config.sub
-+ # prints for the "djgpp" host, or else GDB configury will decide that
-+ # this is a cross-build.
-+ echo i586-pc-msdosdjgpp
-+ exit ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit ;;
-@@ -1119,8 +1116,18 @@ EOF
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-- && { echo i486-ncr-sysv4; exit; } ;;
-+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-+ && { echo i486-ncr-sysv4; exit; } ;;
-+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
-+ OS_REL='.3'
-+ test -r /etc/.relid \
-+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
-+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
-+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit ;;
-@@ -1133,7 +1140,7 @@ EOF
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit ;;
-- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
-+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
- echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- SM[BE]S:UNIX_SV:*:*)
-@@ -1153,10 +1160,10 @@ EOF
- echo ns32k-sni-sysv
- fi
- exit ;;
-- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-- # says <Richard.M.Bartel@ccMail.Census.GOV>
-- echo i586-unisys-sysv4
-- exit ;;
-+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-+ # says <Richard.M.Bartel@ccMail.Census.GOV>
-+ echo i586-unisys-sysv4
-+ exit ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
-@@ -1182,11 +1189,11 @@ EOF
- exit ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
-- echo mips-nec-sysv${UNAME_RELEASE}
-+ echo mips-nec-sysv${UNAME_RELEASE}
- else
-- echo mips-unknown-sysv${UNAME_RELEASE}
-+ echo mips-unknown-sysv${UNAME_RELEASE}
- fi
-- exit ;;
-+ exit ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit ;;
-@@ -1196,6 +1203,12 @@ EOF
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit ;;
-+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
-+ echo i586-pc-haiku
-+ exit ;;
-+ x86_64:Haiku:*:*)
-+ echo x86_64-unknown-haiku
-+ exit ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux${UNAME_RELEASE}
- exit ;;
-@@ -1205,6 +1218,15 @@ EOF
- SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux${UNAME_RELEASE}
- exit ;;
-+ SX-7:SUPER-UX:*:*)
-+ echo sx7-nec-superux${UNAME_RELEASE}
-+ exit ;;
-+ SX-8:SUPER-UX:*:*)
-+ echo sx8-nec-superux${UNAME_RELEASE}
-+ exit ;;
-+ SX-8R:SUPER-UX:*:*)
-+ echo sx8r-nec-superux${UNAME_RELEASE}
-+ exit ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit ;;
-@@ -1214,6 +1236,16 @@ EOF
- *:Darwin:*:*)
- UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- case $UNAME_PROCESSOR in
-+ i386)
-+ eval $set_cc_for_build
-+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-+ grep IS_64BIT_ARCH >/dev/null
-+ then
-+ UNAME_PROCESSOR="x86_64"
-+ fi
-+ fi ;;
- unknown) UNAME_PROCESSOR=powerpc ;;
- esac
- echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-@@ -1229,7 +1261,10 @@ EOF
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit ;;
-- NSE-?:NONSTOP_KERNEL:*:*)
-+ NEO-?:NONSTOP_KERNEL:*:*)
-+ echo neo-tandem-nsk${UNAME_RELEASE}
-+ exit ;;
-+ NSE-*:NONSTOP_KERNEL:*:*)
- echo nse-tandem-nsk${UNAME_RELEASE}
- exit ;;
- NSR-?:NONSTOP_KERNEL:*:*)
-@@ -1274,13 +1309,13 @@ EOF
- echo pdp10-unknown-its
- exit ;;
- SEI:*:*:SEIUX)
-- echo mips-sei-seiux${UNAME_RELEASE}
-+ echo mips-sei-seiux${UNAME_RELEASE}
- exit ;;
- *:DragonFly:*:*)
- echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit ;;
- *:*VMS:*:*)
-- UNAME_MACHINE=`(uname -p) 2>/dev/null`
-+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
- case "${UNAME_MACHINE}" in
- A*) echo alpha-dec-vms ; exit ;;
- I*) echo ia64-dec-vms ; exit ;;
-@@ -1295,11 +1330,14 @@ EOF
- i*86:rdos:*:*)
- echo ${UNAME_MACHINE}-pc-rdos
- exit ;;
-+ i*86:AROS:*:*)
-+ echo ${UNAME_MACHINE}-pc-aros
-+ exit ;;
-+ x86_64:VMkernel:*:*)
-+ echo ${UNAME_MACHINE}-unknown-esx
-+ exit ;;
- esac
-
--#echo '(No uname command or uname output not recognized.)' 1>&2
--#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
--
- eval $set_cc_for_build
- cat >$dummy.c <<EOF
- #ifdef _SEQUENT_
-@@ -1317,11 +1355,11 @@ main ()
- #include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
- #ifdef NEWSOS4
-- "4"
-+ "4"
- #else
-- ""
-+ ""
- #endif
-- ); exit (0);
-+ ); exit (0);
- #endif
- #endif
-
-@@ -1455,9 +1493,9 @@ This script, last modified $timestamp, has failed to recognize
- the operating system you are using. It is advised that you
- download the most up to date version of the config scripts from
-
-- http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
-+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
- and
-- http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
-+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
- If the version you run ($0) is already up to date, please
- send the following data and any information you think might be
-diff --git a/config.sub b/config.sub
-index ad9f395..802a224 100644
---- a/config.sub
-+++ b/config.sub
-@@ -1,43 +1,42 @@
- #! /bin/sh
- # Configuration validation subroutine script.
- # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
--# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-+# 2011, 2012, 2013 Free Software Foundation, Inc.
-
--timestamp='2006-02-23'
-+timestamp='2012-12-29'
-
--# This file is (in principle) common to ALL GNU software.
--# The presence of a machine in this file suggests that SOME GNU software
--# can handle that machine. It does not imply ALL GNU software can.
--#
--# This file is free software; you can redistribute it and/or modify
--# it under the terms of the GNU General Public License as published by
--# the Free Software Foundation; either version 2 of the License, or
-+# This file is free software; you can redistribute it and/or modify it
-+# under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 3 of the License, or
- # (at your option) any later version.
- #
--# This program is distributed in the hope that it will be useful,
--# but WITHOUT ANY WARRANTY; without even the implied warranty of
--# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--# GNU General Public License for more details.
-+# This program is distributed in the hope that it will be useful, but
-+# WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+# General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
--# along with this program; if not, write to the Free Software
--# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
--# 02110-1301, USA.
-+# along with this program; if not, see <http://www.gnu.org/licenses/>.
- #
- # As a special exception to the GNU General Public License, if you
- # distribute this file as part of a program that contains a
- # configuration script generated by Autoconf, you may include it under
--# the same distribution terms that you use for the rest of that program.
-+# the same distribution terms that you use for the rest of that
-+# program. This Exception is an additional permission under section 7
-+# of the GNU General Public License, version 3 ("GPLv3").
-
-
--# Please send patches to <config-patches@gnu.org>. Submit a context
--# diff and a properly formatted ChangeLog entry.
-+# Please send patches with a ChangeLog entry to config-patches@gnu.org.
- #
- # Configuration subroutine to validate and canonicalize a configuration type.
- # Supply the specified configuration type as an argument.
- # If it is invalid, we print an error message on stderr and exit with code 1.
- # Otherwise, we print the canonical config type on stdout and succeed.
-
-+# You can get the latest version of this script from:
-+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-+
- # This file is supposed to be the same for all GNU packages
- # and recognize all the CPU types, system types and aliases
- # that are meaningful with *any* GNU software.
-@@ -71,8 +70,9 @@ Report bugs and patches to <config-patches@gnu.org>."
- version="\
- GNU config.sub ($timestamp)
-
--Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
--Free Software Foundation, Inc.
-+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
-+2012, 2013 Free Software Foundation, Inc.
-
- This is free software; see the source for copying conditions. There is NO
- warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-@@ -119,12 +119,18 @@ esac
- # Here we must recognize all the valid KERNEL-OS combinations.
- maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
- case $maybe_os in
-- nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
-- uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
-+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-+ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-+ knetbsd*-gnu* | netbsd*-gnu* | \
-+ kopensolaris*-gnu* | \
- storm-chaos* | os2-emx* | rtmk-nova*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
-+ android-linux)
-+ os=-linux-android
-+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
-+ ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
-@@ -147,10 +153,13 @@ case $os in
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-- -apple | -axis | -knuth | -cray)
-+ -apple | -axis | -knuth | -cray | -microblaze*)
- os=
- basic_machine=$1
- ;;
-+ -bluegene*)
-+ os=-cnk
-+ ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
-@@ -165,10 +174,10 @@ case $os in
- os=-chorusos
- basic_machine=$1
- ;;
-- -chorusrdb)
-- os=-chorusrdb
-+ -chorusrdb)
-+ os=-chorusrdb
- basic_machine=$1
-- ;;
-+ ;;
- -hiux*)
- os=-hiuxwe2
- ;;
-@@ -213,6 +222,12 @@ case $os in
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
-+ -lynx*178)
-+ os=-lynxos178
-+ ;;
-+ -lynx*5)
-+ os=-lynxos5
-+ ;;
- -lynx*)
- os=-lynxos
- ;;
-@@ -237,23 +252,34 @@ case $basic_machine in
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
-+ | aarch64 | aarch64_be \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- | am33_2.0 \
-- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
-+ | arc \
-+ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
-+ | avr | avr32 \
-+ | be32 | be64 \
- | bfin \
- | c4x | clipper \
- | d10v | d30v | dlx | dsp16xx \
-- | fr30 | frv \
-+ | epiphany \
-+ | fido | fr30 | frv \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-+ | hexagon \
- | i370 | i860 | i960 | ia64 \
- | ip2k | iq2000 \
-- | m32r | m32rle | m68000 | m68k | m88k | maxq | mb | microblaze | mcore \
-+ | le32 | le64 \
-+ | lm32 \
-+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
-+ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
-- | mips64vr | mips64vrel \
-+ | mips64octeon | mips64octeonel \
- | mips64orion | mips64orionel \
-+ | mips64r5900 | mips64r5900el \
-+ | mips64vr | mips64vrel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
-@@ -266,31 +292,42 @@ case $basic_machine in
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipstx39 | mipstx39el \
- | mn10200 | mn10300 \
-+ | moxie \
- | mt \
- | msp430 \
-+ | nds32 | nds32le | nds32be \
- | nios | nios2 \
- | ns16k | ns32k \
-+ | open8 \
- | or32 \
- | pdp10 | pdp11 | pj | pjl \
-- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
-+ | powerpc | powerpc64 | powerpc64le | powerpcle \
- | pyramid \
-- | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
-+ | rl78 | rx \
-+ | score \
-+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
-- | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
-- | sparcv8 | sparcv9 | sparcv9b \
-- | strongarm \
-- | tahoe | thumb | tic4x | tic80 | tron \
-- | v850 | v850e \
-+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
-+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-+ | spu \
-+ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
-+ | ubicom32 \
-+ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
- | we32k \
-- | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
-- | z8k)
-+ | x86 | xc16x | xstormy16 | xtensa \
-+ | z8k | z80)
- basic_machine=$basic_machine-unknown
- ;;
-- m32c)
-- basic_machine=$basic_machine-unknown
-+ c54x)
-+ basic_machine=tic54x-unknown
-+ ;;
-+ c55x)
-+ basic_machine=tic55x-unknown
- ;;
-- m6811 | m68hc11 | m6812 | m68hc12)
-- # Motorola 68HC11/12.
-+ c6x)
-+ basic_machine=tic6x-unknown
-+ ;;
-+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
-@@ -300,6 +337,21 @@ case $basic_machine in
- basic_machine=mt-unknown
- ;;
-
-+ strongarm | thumb | xscale)
-+ basic_machine=arm-unknown
-+ ;;
-+ xgate)
-+ basic_machine=$basic_machine-unknown
-+ os=-none
-+ ;;
-+ xscaleeb)
-+ basic_machine=armeb-unknown
-+ ;;
-+
-+ xscaleel)
-+ basic_machine=armel-unknown
-+ ;;
-+
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
-@@ -314,29 +366,37 @@ case $basic_machine in
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
-+ | aarch64-* | aarch64_be-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
- | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
-- | avr-* \
-+ | avr-* | avr32-* \
-+ | be32-* | be64-* \
- | bfin-* | bs2000-* \
-- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
-+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
- | clipper-* | craynv-* | cydra-* \
- | d10v-* | d30v-* | dlx-* \
- | elxsi-* \
-- | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
-+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-+ | hexagon-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | ip2k-* | iq2000-* \
-- | m32r-* | m32rle-* \
-+ | le32-* | le64-* \
-+ | lm32-* \
-+ | m32c-* | m32r-* | m32rle-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-- | m88110-* | m88k-* | maxq-* | mcore-* \
-+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
-+ | microblaze-* | microblazeel-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- | mips16-* \
- | mips64-* | mips64el-* \
-- | mips64vr-* | mips64vrel-* \
-+ | mips64octeon-* | mips64octeonel-* \
- | mips64orion-* | mips64orionel-* \
-+ | mips64r5900-* | mips64r5900el-* \
-+ | mips64vr-* | mips64vrel-* \
- | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* \
- | mips64vr5000-* | mips64vr5000el-* \
-@@ -351,29 +411,36 @@ case $basic_machine in
- | mmix-* \
- | mt-* \
- | msp430-* \
-+ | nds32-* | nds32le-* | nds32be-* \
- | nios-* | nios2-* \
- | none-* | np1-* | ns16k-* | ns32k-* \
-+ | open8-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
-+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
- | pyramid-* \
-- | romp-* | rs6000-* \
-- | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \
-+ | rl78-* | romp-* | rs6000-* | rx-* \
-+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-- | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
-+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
- | sparclite-* \
-- | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
-- | tahoe-* | thumb-* \
-+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
-+ | tahoe-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-+ | tile*-* \
- | tron-* \
-- | v850-* | v850e-* | vax-* \
-+ | ubicom32-* \
-+ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
-+ | vax-* \
- | we32k-* \
-- | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
-- | xstormy16-* | xtensa-* \
-+ | x86-* | x86_64-* | xc16x-* | xps100-* \
-+ | xstormy16-* | xtensa*-* \
- | ymp-* \
-- | z8k-*)
-+ | z8k-* | z80-*)
- ;;
-- m32c-*)
-+ # Recognize the basic CPU types without company name, with glob match.
-+ xtensa*)
-+ basic_machine=$basic_machine-unknown
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
-@@ -391,7 +458,7 @@ case $basic_machine in
- basic_machine=a29k-amd
- os=-udi
- ;;
-- abacus)
-+ abacus)
- basic_machine=abacus-unknown
- ;;
- adobe68k)
-@@ -437,6 +504,10 @@ case $basic_machine in
- basic_machine=m68k-apollo
- os=-bsd
- ;;
-+ aros)
-+ basic_machine=i386-pc
-+ os=-aros
-+ ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
-@@ -445,10 +516,35 @@ case $basic_machine in
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
-+ blackfin)
-+ basic_machine=bfin-unknown
-+ os=-linux
-+ ;;
-+ blackfin-*)
-+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ os=-linux
-+ ;;
-+ bluegene*)
-+ basic_machine=powerpc-ibm
-+ os=-cnk
-+ ;;
-+ c54x-*)
-+ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ;;
-+ c55x-*)
-+ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ;;
-+ c6x-*)
-+ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ;;
- c90)
- basic_machine=c90-cray
- os=-unicos
- ;;
-+ cegcc)
-+ basic_machine=arm-unknown
-+ os=-cegcc
-+ ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
-@@ -477,8 +573,8 @@ case $basic_machine in
- basic_machine=craynv-cray
- os=-unicosmp
- ;;
-- cr16c)
-- basic_machine=cr16c-unknown
-+ cr16 | cr16-*)
-+ basic_machine=cr16-unknown
- os=-elf
- ;;
- crds | unos)
-@@ -516,6 +612,10 @@ case $basic_machine in
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
-+ dicos)
-+ basic_machine=i686-pc
-+ os=-dicos
-+ ;;
- djgpp)
- basic_machine=i586-pc
- os=-msdosdjgpp
-@@ -631,7 +731,6 @@ case $basic_machine in
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- ;;
--# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i*86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
-@@ -670,6 +769,14 @@ case $basic_machine in
- basic_machine=m68k-isi
- os=-sysv
- ;;
-+ m68knommu)
-+ basic_machine=m68k-unknown
-+ os=-linux
-+ ;;
-+ m68knommu-*)
-+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ os=-linux
-+ ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
-@@ -681,10 +788,21 @@ case $basic_machine in
- basic_machine=ns32k-utek
- os=-sysv
- ;;
-+ microblaze*)
-+ basic_machine=microblaze-xilinx
-+ ;;
-+ mingw64)
-+ basic_machine=x86_64-pc
-+ os=-mingw64
-+ ;;
- mingw32)
- basic_machine=i386-pc
- os=-mingw32
- ;;
-+ mingw32ce)
-+ basic_machine=arm-unknown
-+ os=-mingw32ce
-+ ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
-@@ -713,10 +831,18 @@ case $basic_machine in
- ms1-*)
- basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
- ;;
-+ msys)
-+ basic_machine=i386-pc
-+ os=-msys
-+ ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
-+ nacl)
-+ basic_machine=le32-unknown
-+ os=-nacl
-+ ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
-@@ -781,6 +907,12 @@ case $basic_machine in
- np1)
- basic_machine=np1-gould
- ;;
-+ neo-tandem)
-+ basic_machine=neo-tandem
-+ ;;
-+ nse-tandem)
-+ basic_machine=nse-tandem
-+ ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
-@@ -811,6 +943,14 @@ case $basic_machine in
- basic_machine=i860-intel
- os=-osf
- ;;
-+ parisc)
-+ basic_machine=hppa-unknown
-+ os=-linux
-+ ;;
-+ parisc-*)
-+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ os=-linux
-+ ;;
- pbd)
- basic_machine=sparc-tti
- ;;
-@@ -855,9 +995,10 @@ case $basic_machine in
- ;;
- power) basic_machine=power-ibm
- ;;
-- ppc) basic_machine=powerpc-unknown
-+ ppc | ppcbe) basic_machine=powerpc-unknown
- ;;
-- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ppc-* | ppcbe-*)
-+ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
-@@ -882,7 +1023,11 @@ case $basic_machine in
- basic_machine=i586-unknown
- os=-pw32
- ;;
-- rdos)
-+ rdos | rdos64)
-+ basic_machine=x86_64-pc
-+ os=-rdos
-+ ;;
-+ rdos32)
- basic_machine=i386-pc
- os=-rdos
- ;;
-@@ -912,6 +1057,10 @@ case $basic_machine in
- sb1el)
- basic_machine=mipsisa64sb1el-unknown
- ;;
-+ sde)
-+ basic_machine=mipsisa32-sde
-+ os=-elf
-+ ;;
- sei)
- basic_machine=mips-sei
- os=-seiux
-@@ -923,6 +1072,9 @@ case $basic_machine in
- basic_machine=sh-hitachi
- os=-hms
- ;;
-+ sh5el)
-+ basic_machine=sh5le-unknown
-+ ;;
- sh64)
- basic_machine=sh64-unknown
- ;;
-@@ -944,6 +1096,9 @@ case $basic_machine in
- basic_machine=i860-stratus
- os=-sysv4
- ;;
-+ strongarm-* | thumb-*)
-+ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ;;
- sun2)
- basic_machine=m68000-sun
- ;;
-@@ -1000,17 +1155,9 @@ case $basic_machine in
- basic_machine=t90-cray
- os=-unicos
- ;;
-- tic54x | c54x*)
-- basic_machine=tic54x-unknown
-- os=-coff
-- ;;
-- tic55x | c55x*)
-- basic_machine=tic55x-unknown
-- os=-coff
-- ;;
-- tic6x | c6x*)
-- basic_machine=tic6x-unknown
-- os=-coff
-+ tile*)
-+ basic_machine=$basic_machine-unknown
-+ os=-linux-gnu
- ;;
- tx39)
- basic_machine=mipstx39-unknown
-@@ -1079,6 +1226,9 @@ case $basic_machine in
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
-+ xscale-* | xscalee[bl]-*)
-+ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
-+ ;;
- ymp)
- basic_machine=ymp-cray
- os=-unicos
-@@ -1087,6 +1237,10 @@ case $basic_machine in
- basic_machine=z8k-unknown
- os=-sim
- ;;
-+ z80-*-coff)
-+ basic_machine=z80-unknown
-+ os=-sim
-+ ;;
- none)
- basic_machine=none-none
- os=-none
-@@ -1125,10 +1279,10 @@ case $basic_machine in
- we32k)
- basic_machine=we32k-att
- ;;
-- sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
-+ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
- basic_machine=sh-unknown
- ;;
-- sparc | sparcv8 | sparcv9 | sparcv9b)
-+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
- basic_machine=sparc-sun
- ;;
- cydra)
-@@ -1172,9 +1326,12 @@ esac
- if [ x"$os" != x"" ]
- then
- case $os in
-- # First match some system type aliases
-- # that might get confused with valid system types.
-+ # First match some system type aliases
-+ # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
-+ -auroraux)
-+ os=-auroraux
-+ ;;
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
-@@ -1195,21 +1352,23 @@ case $os in
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
-- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
-+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
-+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-+ | -sym* | -kopensolaris* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-- | -aos* \
-+ | -aos* | -aros* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-- | -openbsd* | -solidbsd* \
-+ | -bitrig* | -openbsd* | -solidbsd* \
- | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
- | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-- | -chorusos* | -chorusrdb* \
-- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-- | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
-+ | -chorusos* | -chorusrdb* | -cegcc* \
-+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-+ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
-+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
- | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-@@ -1217,7 +1376,7 @@ case $os in
- | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
- | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-- | -skyos* | -haiku* | -rdos*)
-+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
-@@ -1256,7 +1415,7 @@ case $os in
- -opened*)
- os=-openedition
- ;;
-- -os400*)
-+ -os400*)
- os=-os400
- ;;
- -wince*)
-@@ -1305,7 +1464,7 @@ case $os in
- -sinix*)
- os=-sysv4
- ;;
-- -tpf*)
-+ -tpf*)
- os=-tpf
- ;;
- -triton*)
-@@ -1347,6 +1506,11 @@ case $os in
- -zvmoe)
- os=-zvmoe
- ;;
-+ -dicos*)
-+ os=-dicos
-+ ;;
-+ -nacl*)
-+ ;;
- -none)
- ;;
- *)
-@@ -1369,6 +1533,12 @@ else
- # system, and we'll never get to this point.
-
- case $basic_machine in
-+ score-*)
-+ os=-elf
-+ ;;
-+ spu-*)
-+ os=-elf
-+ ;;
- *-acorn)
- os=-riscix1.2
- ;;
-@@ -1378,9 +1548,21 @@ case $basic_machine in
- arm*-semi)
- os=-aout
- ;;
-- c4x-* | tic4x-*)
-- os=-coff
-- ;;
-+ c4x-* | tic4x-*)
-+ os=-coff
-+ ;;
-+ hexagon-*)
-+ os=-elf
-+ ;;
-+ tic54x-*)
-+ os=-coff
-+ ;;
-+ tic55x-*)
-+ os=-coff
-+ ;;
-+ tic6x-*)
-+ os=-coff
-+ ;;
- # This must come before the *-dec entry.
- pdp10-*)
- os=-tops20
-@@ -1399,13 +1581,13 @@ case $basic_machine in
- ;;
- m68000-sun)
- os=-sunos3
-- # This also exists in the configure program, but was not the
-- # default.
-- # os=-sunos4
- ;;
- m68*-cisco)
- os=-aout
- ;;
-+ mep-*)
-+ os=-elf
-+ ;;
- mips*-cisco)
- os=-elf
- ;;
-@@ -1430,7 +1612,7 @@ case $basic_machine in
- *-ibm)
- os=-aix
- ;;
-- *-knuth)
-+ *-knuth)
- os=-mmixware
- ;;
- *-wec)
-@@ -1535,7 +1717,7 @@ case $basic_machine in
- -sunos*)
- vendor=sun
- ;;
-- -aix*)
-+ -cnk*|-aix*)
- vendor=ibm
- ;;
- -beos*)
-diff --git a/configure b/configure
-index 1e352d9..e375246 100755
---- a/configure
-+++ b/configure
-@@ -1,4 +1,5 @@
- #! /bin/sh
-+set -- --host=arm-linux-androideabi
- # Guess values for system-dependent variables and create Makefiles.
- # Generated by GNU Autoconf 2.68 for Haskell network package 2.3.0.14.
- #
---
-1.7.10.4
-
diff --git a/standalone/android/haskell-patches/network_2.4.1.0_0003-configure-misdetects-accept4.patch b/standalone/android/haskell-patches/network_2.4.1.0_0003-configure-misdetects-accept4.patch
index 116fa320e..084d355ba 100644
--- a/standalone/android/haskell-patches/network_2.4.1.0_0003-configure-misdetects-accept4.patch
+++ b/standalone/android/haskell-patches/network_2.4.1.0_0003-configure-misdetects-accept4.patch
@@ -1,26 +1,26 @@
-From 63a7a97511266c1a9d2414d3314ee17fc88bb8f2 Mon Sep 17 00:00:00 2001
+From 478fc7ae42030c1345e75727e54e1f8f895d3e22 Mon Sep 17 00:00:00 2001
From: dummy <dummy@example.com>
-Date: Fri, 18 Oct 2013 15:58:35 +0000
-Subject: [PATCH] configure misdetects accept4
+Date: Wed, 15 Oct 2014 15:16:21 +0000
+Subject: [PATCH] avoid accept4
---
- Network/Socket.hsc | 4 ++--
+ Network/Socket.hsc | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Network/Socket.hsc b/Network/Socket.hsc
-index 9af31f8..6c21209 100644
+index 2fe62ee..94db7a4 100644
--- a/Network/Socket.hsc
+++ b/Network/Socket.hsc
-@@ -503,7 +503,7 @@ accept sock@(MkSocket s family stype protocol status) = do
- return new_sock
+@@ -511,7 +511,7 @@ accept sock@(MkSocket s family stype protocol status) = do
#else
with (fromIntegral sz) $ \ ptr_len -> do
+ new_sock <-
-# ifdef HAVE_ACCEPT4
+#if 0
- new_sock <- throwSocketErrorIfMinus1RetryMayBlock "accept"
+ throwSocketErrorIfMinus1RetryMayBlock "accept"
(threadWaitRead (fromIntegral s))
(c_accept4 s sockaddr ptr_len (#const SOCK_NONBLOCK))
-@@ -1615,7 +1615,7 @@ foreign import CALLCONV SAFE_ON_WIN "connect"
+@@ -1602,7 +1602,7 @@ foreign import CALLCONV SAFE_ON_WIN "connect"
c_connect :: CInt -> Ptr SockAddr -> CInt{-CSockLen???-} -> IO CInt
foreign import CALLCONV unsafe "accept"
c_accept :: CInt -> Ptr SockAddr -> Ptr CInt{-CSockLen???-} -> IO CInt
@@ -30,5 +30,5 @@ index 9af31f8..6c21209 100644
c_accept4 :: CInt -> Ptr SockAddr -> Ptr CInt{-CSockLen???-} -> CInt -> IO CInt
#endif
--
-1.7.10.4
+2.1.1
diff --git a/standalone/android/haskell-patches/network_2.5.0.0_0001-android-port-fixes.patch b/standalone/android/haskell-patches/network_2.5.0.0_0001-android-port-fixes.patch
new file mode 100644
index 000000000..325b89fb4
--- /dev/null
+++ b/standalone/android/haskell-patches/network_2.5.0.0_0001-android-port-fixes.patch
@@ -0,0 +1,161 @@
+From b3cb294077b627892721a2ebf9e0ce81f35f8c4c Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Sun, 25 May 2014 09:28:45 +0200
+Subject: [PATCH] android port fixes
+
+Build note: Ensure a hsc2hs in PATH is modified to pass -x to the real
+one, to enable cross-compiling.
+---
+ Network/Socket.hsc | 22 ++++++----------------
+ Network/Socket/ByteString.hsc | 2 +-
+ Network/Socket/Internal.hsc | 2 +-
+ Network/Socket/Types.hsc | 4 ++--
+ cbits/HsNet.c | 14 ++++++++++++++
+ configure | 1 +
+ 6 files changed, 25 insertions(+), 20 deletions(-)
+
+diff --git a/Network/Socket.hsc b/Network/Socket.hsc
+index 607b270..04a83e8 100644
+--- a/Network/Socket.hsc
++++ b/Network/Socket.hsc
+@@ -35,7 +35,7 @@ module Network.Socket
+ , SockAddr(..)
+ , SocketStatus(..)
+ , HostAddress
+-#if defined(IPV6_SOCKET_SUPPORT)
++#if defined(IPV6_SOCKET_SUPPORTNO)
+ , HostAddress6
+ , FlowInfo
+ , ScopeID
+@@ -52,7 +52,7 @@ module Network.Socket
+ , HostName
+ , ServiceName
+
+-#if defined(IPV6_SOCKET_SUPPORT)
++#if defined(IPV6_SOCKET_SUPPORT) || 1
+ , AddrInfo(..)
+
+ , AddrInfoFlag(..)
+@@ -134,7 +134,7 @@ module Network.Socket
+ -- * Special constants
+ , aNY_PORT
+ , iNADDR_ANY
+-#if defined(IPV6_SOCKET_SUPPORT)
++#if defined(IPV6_SOCKET_SUPPORTNO)
+ , iN6ADDR_ANY
+ #endif
+ , sOMAXCONN
+@@ -326,16 +326,6 @@ socket family stype protocol = do
+ setNonBlockIfNeeded fd
+ socket_status <- newMVar NotConnected
+ let sock = MkSocket fd family stype protocol socket_status
+-#if HAVE_DECL_IPV6_V6ONLY
+-# if defined(mingw32_HOST_OS)
+- -- the IPv6Only option is only supported on Windows Vista and later,
+- -- so trying to change it might throw an error
+- when (family == AF_INET6) $
+- E.catch (setSocketOption sock IPv6Only 0) $ (\(_ :: E.IOException) -> return ())
+-# else
+- when (family == AF_INET6) $ setSocketOption sock IPv6Only 0
+-# endif
+-#endif
+ return sock
+
+ -- | Build a pair of connected socket objects using the given address
+@@ -1061,9 +1051,9 @@ aNY_PORT = 0
+ iNADDR_ANY :: HostAddress
+ iNADDR_ANY = htonl (#const INADDR_ANY)
+
+-foreign import CALLCONV unsafe "htonl" htonl :: Word32 -> Word32
++foreign import CALLCONV unsafe "my_htonl" htonl :: Word32 -> Word32
+
+-#if defined(IPV6_SOCKET_SUPPORT)
++#if defined(IPV6_SOCKET_SUPPORTNO)
+ -- | The IPv6 wild card address.
+
+ iN6ADDR_ANY :: HostAddress6
+@@ -1241,7 +1231,7 @@ unpackBits ((k,v):xs) r
+ -----------------------------------------------------------------------------
+ -- Address and service lookups
+
+-#if defined(IPV6_SOCKET_SUPPORT)
++#if defined(IPV6_SOCKET_SUPPORT) || 1
+
+ -- | Flags that control the querying behaviour of 'getAddrInfo'.
+ data AddrInfoFlag
+diff --git a/Network/Socket/ByteString.hsc b/Network/Socket/ByteString.hsc
+index e21ad1b..c2dd70a 100644
+--- a/Network/Socket/ByteString.hsc
++++ b/Network/Socket/ByteString.hsc
+@@ -197,7 +197,7 @@ sendMany sock@(MkSocket fd _ _ _ _) cs = do
+ liftM fromIntegral . withIOVec cs $ \(iovsPtr, iovsLen) ->
+ throwSocketErrorWaitWrite sock "writev" $
+ c_writev (fromIntegral fd) iovsPtr
+- (fromIntegral (min iovsLen (#const IOV_MAX)))
++ (fromIntegral (min iovsLen (0x0026)))
+ #else
+ sendMany sock = sendAll sock . B.concat
+ #endif
+diff --git a/Network/Socket/Internal.hsc b/Network/Socket/Internal.hsc
+index 83333f7..0dd6a7d 100644
+--- a/Network/Socket/Internal.hsc
++++ b/Network/Socket/Internal.hsc
+@@ -24,7 +24,7 @@ module Network.Socket.Internal
+ (
+ -- * Socket addresses
+ HostAddress
+-#if defined(IPV6_SOCKET_SUPPORT)
++#if defined(IPV6_SOCKET_SUPPORTNO)
+ , HostAddress6
+ , FlowInfo
+ , ScopeID
+diff --git a/Network/Socket/Types.hsc b/Network/Socket/Types.hsc
+index 48a43bb..1c5994f 100644
+--- a/Network/Socket/Types.hsc
++++ b/Network/Socket/Types.hsc
+@@ -711,8 +711,8 @@ intToPortNumber v = PortNum (htons (fromIntegral v))
+ portNumberToInt :: PortNumber -> Int
+ portNumberToInt (PortNum po) = fromIntegral (ntohs po)
+
+-foreign import CALLCONV unsafe "ntohs" ntohs :: Word16 -> Word16
+-foreign import CALLCONV unsafe "htons" htons :: Word16 -> Word16
++foreign import CALLCONV unsafe "my_ntohs" ntohs :: Word16 -> Word16
++foreign import CALLCONV unsafe "my_htons" htons :: Word16 -> Word16
+ --foreign import CALLCONV unsafe "ntohl" ntohl :: Word32 -> Word32
+
+ instance Enum PortNumber where
+diff --git a/cbits/HsNet.c b/cbits/HsNet.c
+index 86b55dc..5ea1199 100644
+--- a/cbits/HsNet.c
++++ b/cbits/HsNet.c
+@@ -6,3 +6,17 @@
+
+ #define INLINE
+ #include "HsNet.h"
++
++#include <sys/endian.h>
++uint16_t my_htons(uint16_t v)
++{
++ htons(v);
++}
++uint32_t my_htonl(uint32_t v)
++{
++ htonl(v);
++}
++uint16_t my_ntohs(uint16_t v)
++{
++ ntohs(v);
++}
+diff --git a/configure b/configure
+index db8240d..41674d9 100755
+--- a/configure
++++ b/configure
+@@ -1,4 +1,5 @@
+ #! /bin/sh
++set -- --host=arm-linux-androideabi
+ # Guess values for system-dependent variables and create Makefiles.
+ # Generated by GNU Autoconf 2.69 for Haskell network package 2.3.0.14.
+ #
+--
+2.0.0.rc2
+
diff --git a/standalone/android/haskell-patches/primitive_0.5.0.1_0001-disable-i386-opt-stuff-to-allow-cross-compilation.patch b/standalone/android/haskell-patches/primitive_0.5.0.1_0001-disable-i386-opt-stuff-to-allow-cross-compilation.patch
deleted file mode 100644
index 1bd926871..000000000
--- a/standalone/android/haskell-patches/primitive_0.5.0.1_0001-disable-i386-opt-stuff-to-allow-cross-compilation.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 5cb5c3dabb213f809b8328b0b4049f7c754e9c77 Mon Sep 17 00:00:00 2001
-From: Joey Hess <joey@kitenet.net>
-Date: Thu, 28 Feb 2013 23:34:32 -0400
-Subject: [PATCH] disable i386 opt stuff to allow cross-compilation
-
----
- primitive.cabal | 3 ---
- 1 file changed, 3 deletions(-)
-
-diff --git a/primitive.cabal b/primitive.cabal
-index 8c4328a..9a6093f 100644
---- a/primitive.cabal
-+++ b/primitive.cabal
-@@ -51,7 +51,4 @@ Library
- includes: primitive-memops.h
- c-sources: cbits/primitive-memops.c
- cc-options: -O3 -ftree-vectorize -fomit-frame-pointer
-- if arch(i386) || arch(x86_64) {
-- cc-options: -msse2
-- }
-
---
-1.7.10.4
-
diff --git a/standalone/android/haskell-patches/primitive_0.5.3.0_0001-disable-i386-opt-stuff-to-allow-cross-compilation.patch b/standalone/android/haskell-patches/primitive_0.5.3.0_0001-disable-i386-opt-stuff-to-allow-cross-compilation.patch
new file mode 100644
index 000000000..efee692b5
--- /dev/null
+++ b/standalone/android/haskell-patches/primitive_0.5.3.0_0001-disable-i386-opt-stuff-to-allow-cross-compilation.patch
@@ -0,0 +1,25 @@
+From ff2d1519fb294a123636ac6bd80e50741922c856 Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Sun, 25 May 2014 09:41:13 +0200
+Subject: [PATCH] disable i386 opt stuff to allow cross-compilation
+
+---
+ primitive.cabal | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/primitive.cabal b/primitive.cabal
+index 9651dfd..b655e8d 100644
+--- a/primitive.cabal
++++ b/primitive.cabal
+@@ -47,8 +47,6 @@ Library
+ cc-options: -O3 -fomit-frame-pointer -Wall
+ if !os(solaris)
+ cc-options: -ftree-vectorize
+- if arch(i386) || arch(x86_64)
+- cc-options: -msse2
+
+ source-repository head
+ type: git
+--
+2.0.0.rc2
+
diff --git a/standalone/no-th/haskell-patches/shakespeare-text_remove-TH.patch b/standalone/android/haskell-patches/shakespeare-text_remove-TH.patch
index 4af0995bd..ece906f4b 100644
--- a/standalone/no-th/haskell-patches/shakespeare-text_remove-TH.patch
+++ b/standalone/android/haskell-patches/shakespeare-text_remove-TH.patch
@@ -1,6 +1,6 @@
-From f94ab5c4fe8f01cb9353a9d246e8f7c48475d834 Mon Sep 17 00:00:00 2001
-From: Joey Hess <joey@kitenet.net>
-Date: Wed, 18 Dec 2013 04:10:23 +0000
+From dca2a30ca06865bf66cd25cc14b06f5d28190231 Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Thu, 16 Oct 2014 02:46:57 +0000
Subject: [PATCH] remove TH
---
@@ -8,7 +8,7 @@ Subject: [PATCH] remove TH
1 file changed, 11 insertions(+), 114 deletions(-)
diff --git a/Text/Shakespeare/Text.hs b/Text/Shakespeare/Text.hs
-index 738164b..65818ee 100644
+index 6865a5a..e25a8be 100644
--- a/Text/Shakespeare/Text.hs
+++ b/Text/Shakespeare/Text.hs
@@ -7,18 +7,18 @@ module Text.Shakespeare.Text
@@ -41,9 +41,9 @@ index 738164b..65818ee 100644
) where
import Language.Haskell.TH.Quote (QuasiQuoter (..))
-@@ -43,106 +43,3 @@ instance ToText TL.Text where toText = fromLazyText
- instance ToText Int32 where toText = toText . show
+@@ -45,106 +45,3 @@ instance ToText Int32 where toText = toText . show
instance ToText Int64 where toText = toText . show
+ instance ToText Int where toText = toText . show
-settings :: Q ShakespeareSettings
-settings = do
@@ -149,5 +149,5 @@ index 738164b..65818ee 100644
- rendered <- shakespeareFile rs{ justVarInterpolation = True } fp
- return (render `AppE` rendered)
--
-1.8.5.1
+2.1.1
diff --git a/standalone/android/haskell-patches/system-filepath_cross-build.patch b/standalone/android/haskell-patches/system-filepath_cross-build.patch
index 430e8f99f..c9f9304a4 100644
--- a/standalone/android/haskell-patches/system-filepath_cross-build.patch
+++ b/standalone/android/haskell-patches/system-filepath_cross-build.patch
@@ -1,14 +1,14 @@
-From 9345a1ad95cc263f99ef124c7a386fb5aaa5405b Mon Sep 17 00:00:00 2001
-From: androidbuilder <androidbuilder@example.com>
-Date: Fri, 7 Feb 2014 22:18:12 +0000
-Subject: [PATCH] fix
+From 0e728d5b049224394908d793c73902a8c981e636 Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Mon, 26 May 2014 01:04:40 +0000
+Subject: [PATCH] fix cross build
---
system-filepath.cabal | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/system-filepath.cabal b/system-filepath.cabal
-index d5fbbdd..efdf9ca 100644
+index d6aa726..f4e5e0f 100644
--- a/system-filepath.cabal
+++ b/system-filepath.cabal
@@ -6,7 +6,7 @@ license-file: license.txt
@@ -17,7 +17,7 @@ index d5fbbdd..efdf9ca 100644
copyright: John Millikin 2010-2012
-build-type: Custom
+build-type: Simple
- cabal-version: >= 1.6
+ cabal-version: >= 1.8
category: System
stability: experimental
--
diff --git a/standalone/android/haskell-patches/unbounded-delays_crossbuild.patch b/standalone/android/haskell-patches/unbounded-delays_crossbuild.patch
new file mode 100644
index 000000000..dd0a7fca9
--- /dev/null
+++ b/standalone/android/haskell-patches/unbounded-delays_crossbuild.patch
@@ -0,0 +1,25 @@
+From 0ad071f80ee72e7b8ca5b0b70dfae5bbf8677969 Mon Sep 17 00:00:00 2001
+From: Joey Hess <joey@kitenet.net>
+Date: Wed, 12 Mar 2014 12:18:17 -0400
+Subject: [PATCH] cross build
+
+---
+ unbounded-delays.cabal | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/unbounded-delays.cabal b/unbounded-delays.cabal
+index 76d0a50..0f27569 100644
+--- a/unbounded-delays.cabal
++++ b/unbounded-delays.cabal
+@@ -1,7 +1,7 @@
+ name: unbounded-delays
+ version: 0.1.0.6
+ cabal-version: >= 1.6
+-build-type: Custom
++build-type: Simple
+ author: Bas van Dijk <v.dijk.bas@gmail.com>
+ Roel van Dijk <vandijk.roel@gmail.com>
+ maintainer: Bas van Dijk <v.dijk.bas@gmail.com>
+--
+1.7.10.4
+
diff --git a/standalone/android/haskell-patches/unix-time_hack-for-Bionic.patch b/standalone/android/haskell-patches/unix-time_hack-for-Bionic.patch
index be7956bea..16c4f92a2 100644
--- a/standalone/android/haskell-patches/unix-time_hack-for-Bionic.patch
+++ b/standalone/android/haskell-patches/unix-time_hack-for-Bionic.patch
@@ -1,11 +1,11 @@
-From e6d5c141186dbdbe97c698294485ffc4dcd3a843 Mon Sep 17 00:00:00 2001
+From db9eb179885874af342bb2c3adef7185496ba1f1 Mon Sep 17 00:00:00 2001
From: dummy <dummy@example.com>
-Date: Fri, 18 Oct 2013 16:45:50 +0000
-Subject: [PATCH] hack for bionic + cross build
+Date: Wed, 15 Oct 2014 16:37:32 +0000
+Subject: [PATCH] hack for bionic
---
- Data/UnixTime/Types.hsc | 12 ------------
- cbits/conv.c | 2 +-
+ Data/UnixTime/Types.hsc | 12 ------------
+ cbits/conv.c | 2 +-
2 files changed, 1 insertion(+), 13 deletions(-)
diff --git a/Data/UnixTime/Types.hsc b/Data/UnixTime/Types.hsc
@@ -39,10 +39,10 @@ index d30f39b..ec7ca4c 100644
-- Format of the strptime()/strftime() style.
type Format = ByteString
diff --git a/cbits/conv.c b/cbits/conv.c
-index 7ff7b87..2e4c870 100644
+index ec31fef..b7bc0f9 100644
--- a/cbits/conv.c
+++ b/cbits/conv.c
-@@ -55,7 +55,7 @@ time_t c_parse_unix_time_gmt(char *fmt, char *src) {
+@@ -96,7 +96,7 @@ time_t c_parse_unix_time_gmt(char *fmt, char *src) {
#else
strptime(src, fmt, &dst);
#endif
@@ -52,5 +52,5 @@ index 7ff7b87..2e4c870 100644
size_t c_format_unix_time(char *fmt, time_t src, char* dst, int siz) {
--
-1.7.10.4
+2.1.1
diff --git a/standalone/android/haskell-patches/vector_hack-to-build-with-new-ghc.patch b/standalone/android/haskell-patches/vector_hack-to-build-with-new-ghc.patch
deleted file mode 100644
index 4d39e91cf..000000000
--- a/standalone/android/haskell-patches/vector_hack-to-build-with-new-ghc.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From b0a79f4f98188ba5d43b7e3912b36d34d099ab65 Mon Sep 17 00:00:00 2001
-From: dummy <dummy@example.com>
-Date: Fri, 18 Oct 2013 23:20:35 +0000
-Subject: [PATCH] cross build
-
----
- Data/Vector/Fusion/Stream/Monadic.hs | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/Data/Vector/Fusion/Stream/Monadic.hs b/Data/Vector/Fusion/Stream/Monadic.hs
-index 51fec75..b089b3d 100644
---- a/Data/Vector/Fusion/Stream/Monadic.hs
-+++ b/Data/Vector/Fusion/Stream/Monadic.hs
-@@ -101,7 +101,6 @@ import GHC.Exts ( SpecConstrAnnotation(..) )
-
- data SPEC = SPEC | SPEC2
- #if __GLASGOW_HASKELL__ >= 700
--{-# ANN type SPEC ForceSpecConstr #-}
- #endif
-
- emptyStream :: String
---
-1.7.10.4
-
diff --git a/standalone/android/haskell-patches/x509-system_support-Android-cert-store.patch b/standalone/android/haskell-patches/x509-system_support-Android-cert-store.patch
index b3aa407df..14ed66089 100644
--- a/standalone/android/haskell-patches/x509-system_support-Android-cert-store.patch
+++ b/standalone/android/haskell-patches/x509-system_support-Android-cert-store.patch
@@ -1,36 +1,27 @@
-From 2c736615e38ee4f582af9d98d7169cf07b84d875 Mon Sep 17 00:00:00 2001
-From: Joey Hess <joey@kitenet.net>
-Date: Mon, 10 Feb 2014 23:27:32 +0000
+From 61d0e47cd038f25157e48385fc080d0d374b214d Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Tue, 14 Oct 2014 02:07:57 +0000
Subject: [PATCH] support Android cert store
-Android puts it in a different place and has only hashed files.
+Android has only hashsed cert files.
See https://github.com/vincenthz/hs-certificate/issues/19
---
- System/X509/Unix.hs | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
+ System/X509/Unix.hs | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/System/X509/Unix.hs b/System/X509/Unix.hs
-index cbf9bbe..cab4f4a 100644
+index 9df3331..a30da26 100644
--- a/System/X509/Unix.hs
+++ b/System/X509/Unix.hs
-@@ -34,7 +34,7 @@ import qualified Control.Exception as E
- import Data.Char
-
- defaultSystemPath :: FilePath
--defaultSystemPath = "/etc/ssl/certs/"
-+defaultSystemPath = "/system/etc/security/cacerts/"
-
- envPathOverride :: String
- envPathOverride = "SYSTEM_CERTIFICATE_PATH"
-@@ -46,7 +46,7 @@ listDirectoryCerts path = (map (path </>) . filter isCert <$> getDirectoryConten
+@@ -56,7 +56,7 @@ listDirectoryCerts path = do
&& isDigit (s !! 9)
&& (s !! 8) == '.'
&& all isHexDigit (take 8 s)
- isCert x = (not $ isPrefixOf "." x) && (not $ isHashedFile x)
+ isCert x = (not $ isPrefixOf "." x)
- getSystemCertificateStore :: IO CertificateStore
- getSystemCertificateStore = makeCertificateStore . concat <$> (getSystemPath >>= listDirectoryCerts >>= mapM readCertificates)
+ getDirContents = E.catch (Just <$> getDirectoryContents path) emptyPaths
+ where emptyPaths :: E.IOException -> IO (Maybe [FilePath])
--
1.7.10.4
diff --git a/standalone/android/install-haskell-packages b/standalone/android/install-haskell-packages
index 19e6b5c1c..fcc31c71c 100755
--- a/standalone/android/install-haskell-packages
+++ b/standalone/android/install-haskell-packages
@@ -4,13 +4,14 @@
#
# You should install ghc-android first.
#
-# Note that the newest version of packages is installed.
-# It attempts to reuse patches for older versions, but
-# new versions of packages often break cross-compilation by adding TH,
-# etc
+# The cabal.config is used to pin the haskell packages to the last
+# versions that have been gotten working. To update, delete the
+# cabal.config, run this script with an empty cabal and fix up the broken
+# patches, and then use cabal freeze to generate a new cabal.config.
#
-# Future work: Convert to using the method used here:
-# https://github.com/kaoskorobase/ghc-ios-cabal-scripts/
+# This only installs haskell packages for ghc-android. The host ghc
+# also needs to have all the git-annex build deps installed, in similar
+# versions. Those are installed from Debian packages using apt.
set -e
@@ -18,20 +19,22 @@ if [ ! -d haskell-patches ]; then
cd standalone/android
fi
-cabalopts="$@"
-
-cabalinstall () {
- echo cabal install "$@" "$cabalopts"
- eval cabal install "$@" "$cabalopts"
+setupcabal () {
+ # Some packages fail to install in a non unicode locale.
+ LANG=en_US.UTF-8
+ export LANG
}
patched () {
pkg=$1
ver=$2
if [ -z "$ver" ]; then
- cabal unpack $pkg
+ ver="$(grep " $pkg " ../cabal.config | cut -d= -f 3 | sed 's/,$//')"
+ fi
+ if [ -z "$ver" ]; then
+ cabal unpack --pristine $pkg
else
- cabal unpack $pkg-$ver
+ cabal unpack --pristine $pkg-$ver
fi
cd $pkg*
git init
@@ -39,6 +42,7 @@ patched () {
git config user.email dummy@example.com
git add .
git commit -m "pre-patched state of $pkg"
+ ln -sf ../../cabal.config
for patch in ../../haskell-patches/${pkg}_* ../../../no-th/haskell-patches/${pkg}_*; do
if [ -e "$patch" ]; then
echo trying $patch
@@ -49,15 +53,24 @@ patched () {
fi
fi
done
- cabalinstall
+ if [ -e config.sub ]; then
+ cp /usr/share/misc/config.sub .
+ fi
+ if [ -e config.guess ]; then
+ cp /usr/share/misc/config.guess .
+ fi
+ cabal install # --reinstall --force-reinstalls
+ rm -f cabal.config
+
rm -rf $pkg*
cd ..
}
installgitannexdeps () {
pushd ../..
- echo cabal install --only-dependencies "$@"
+ ln -sf standalone/android/cabal.config
cabal install --only-dependencies "$@"
+ rm -f cabal.config
popd
}
@@ -65,19 +78,19 @@ install_pkgs () {
rm -rf tmp
mkdir tmp
cd tmp
-
+cat <<EOF
+EOF
patched network
patched unix-time
patched lifted-base
patched zlib
patched MissingH
- patched bloomfilter
patched distributive
patched comonad
patched iproute
patched primitive
patched socks
- patched entropy
+ # patched entropy # needed for newer version, not current pinned version
patched vector
patched stm-chans
patched persistent
@@ -88,11 +101,13 @@ install_pkgs () {
patched x509-system
patched persistent-template
patched system-filepath
+ patched optparse-applicative
patched wai-app-static
patched shakespeare
patched shakespeare-css
patched shakespeare-js
patched yesod-routes
+ patched hamlet
patched yesod-core
patched yesod-persistent
patched yesod-form
@@ -106,7 +121,8 @@ install_pkgs () {
patched uuid
patched dns
patched gnutls
- patched libxml-sax
+ patched unbounded-delays
+ patched gnuidn
patched network-protocol-xmpp
cd ..
@@ -114,17 +130,11 @@ install_pkgs () {
installgitannexdeps -fAndroid -f-Pairing
}
-echo
-echo
-echo native build
-echo
+# native cabal needs its own update
cabal update
-installgitannexdeps
-echo
-echo
-echo cross build
-echo
PATH=$HOME/.ghc/$(cat abiversion)/bin:$HOME/.ghc/$(cat abiversion)/arm-linux-androideabi/bin:$PATH
+setupcabal
cabal update
+
install_pkgs
diff --git a/standalone/android/runshell b/standalone/android/runshell
index ef6744494..68f23b481 100755
--- a/standalone/android/runshell
+++ b/standalone/android/runshell
@@ -30,7 +30,7 @@ buildtree () {
$cmd ln -s "$base/lib/lib.$prog.so" "$base/bin/$prog"
done
- $cmd --install $base/bin
+ $cmd --install -s $base/bin
$cmd rm -rf "$base/bin.old"
@@ -53,6 +53,7 @@ buildtree () {
$cmd echo "exec $base/lib/lib.start.so" >> "$base/runshell"
$cmd chmod 755 runshell
+ $cmd cat "$base/lib/lib.trustedkeys.so" > "$base/bin/trustedkeys.gpg"
$cmd cat "$base/lib/lib.version.so" > "$base/installed-version"
$cmd echo "Installation complete"
}
diff --git a/standalone/android/term.patch b/standalone/android/term.patch
index 5f7d40335..c0ceefd74 100644
--- a/standalone/android/term.patch
+++ b/standalone/android/term.patch
@@ -585,7 +585,7 @@ index 57219c3..79b45ef 100755
# Make sure target-11 is installed
-$ANDROID update sdk -u -t android-11
-+$ANDROID update sdk -u -t android-17
++$ANDROID update sdk -u -t android-19
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
ATE_ROOT="$( cd $DIR/.. && pwd )"
@@ -594,5 +594,5 @@ index 57219c3..79b45ef 100755
PROJECT_DIR="$( dirname "$PROJECT_FILE" )"
echo "Updating $PROJECT_FILE"
- $ANDROID update project -p "$PROJECT_DIR" --target android-11
-+ $ANDROID update project -p "$PROJECT_DIR" --target android-17
++ $ANDROID update project -p "$PROJECT_DIR" --target android-19
done
diff --git a/standalone/android/wrapper.pl b/standalone/android/wrapper.pl
new file mode 100644
index 000000000..a7136a950
--- /dev/null
+++ b/standalone/android/wrapper.pl
@@ -0,0 +1,10 @@
+#!/usr/bin/perl
+my $prog=q{PROG}; # replaced
+my @opts=qw{OPTS}; # replaced
+
+if (grep { $_ eq "-r" || $_ eq "--relocatable" } @ARGV) {
+ exec($prog,@ARGV) || die "failed to run $prog";
+}
+else {
+ exec($prog,@opts,@ARGV) || die "failed to run $prog";
+}
diff --git a/standalone/licences.gz b/standalone/licences.gz
index 422f84225..e85b038fb 100644
--- a/standalone/licences.gz
+++ b/standalone/licences.gz
Binary files differ
diff --git a/standalone/linux/cabal.config b/standalone/linux/cabal.config
new file mode 100644
index 000000000..4eecbfeaf
--- /dev/null
+++ b/standalone/linux/cabal.config
@@ -0,0 +1,208 @@
+constraints: Crypto ==4.2.5.1,
+ DAV ==1.0.3,
+ HTTP ==4000.2.17,
+ HUnit ==1.2.5.2,
+ IfElse ==0.85,
+ MissingH ==1.2.1.0,
+ MonadRandom ==0.1.13,
+ QuickCheck ==2.7.6,
+ SHA ==1.6.1,
+ SafeSemaphore ==0.10.1,
+ aeson ==0.7.0.6,
+ ansi-terminal ==0.6.1.1,
+ ansi-wl-pprint ==0.6.7.1,
+ appar ==0.1.4,
+ asn1-encoding ==0.8.1.3,
+ asn1-parse ==0.8.1,
+ asn1-types ==0.2.3,
+ async ==2.0.1.5,
+ attoparsec ==0.11.3.4,
+ attoparsec-conduit ==1.1.0,
+ authenticate ==1.3.2.10,
+ base-unicode-symbols ==0.2.2.4,
+ base16-bytestring ==0.1.1.6,
+ base64-bytestring ==1.0.0.1,
+ bifunctors ==4.1.1.1,
+ bloomfilter ==2.0.0.0,
+ byteable ==0.1.1,
+ byteorder ==1.0.4,
+ case-insensitive ==1.2.0.1,
+ cereal ==0.4.0.1,
+ cipher-aes ==0.2.8,
+ cipher-des ==0.0.6,
+ cipher-rc4 ==0.1.4,
+ clientsession ==0.9.0.3,
+ comonad ==4.2,
+ conduit ==1.1.6,
+ conduit-extra ==1.1.3,
+ connection ==0.2.3,
+ contravariant ==0.6.1.1,
+ cookie ==0.4.1.2,
+ cprng-aes ==0.5.2,
+ crypto-api ==0.13.2,
+ crypto-cipher-types ==0.0.9,
+ crypto-numbers ==0.2.3,
+ crypto-pubkey ==0.2.4,
+ crypto-pubkey-types ==0.4.2.2,
+ crypto-random ==0.0.7,
+ cryptohash ==0.11.6,
+ cryptohash-conduit ==0.1.1,
+ css-text ==0.1.2.1,
+ shakespeare-text ==1.0.2,
+ data-default ==0.5.3,
+ data-default-class ==0.0.1,
+ data-default-instances-base ==0.0.1,
+ data-default-instances-containers ==0.0.1,
+ data-default-instances-dlist ==0.0.1,
+ data-default-instances-old-locale ==0.0.1,
+ dataenc ==0.14.0.7,
+ dbus ==0.10.8,
+ distributive ==0.4.4,
+ dlist ==0.7.0.1,
+ dns ==1.3.0,
+ edit-distance ==0.2.1.2,
+ either ==4.3,
+ email-validate ==1.0.0,
+ entropy ==0.2.1,
+ errors ==1.4.7,
+ exceptions ==0.6.1,
+ failure ==0.2.0.3,
+ fast-logger ==2.1.5,
+ fdo-notify ==0.3.1,
+ feed ==0.3.9.2,
+ file-embed ==0.0.6,
+ fingertree ==0.1.0.0,
+ free ==4.9,
+ gnuidn ==0.2,
+ gnutls ==0.1.4,
+ gsasl ==0.3.5,
+ hS3 ==0.5.7,
+ hamlet ==1.1.9.2,
+ hashable ==1.2.1.0,
+ hinotify ==0.3.5,
+ hjsmin ==0.1.4.7,
+ hslogger ==1.2.1,
+ http-client ==0.3.8.2,
+ http-client-tls ==0.2.2,
+ http-conduit ==2.1.2.3,
+ http-date ==0.0.2,
+ http-types ==0.8.5,
+ hxt ==9.3.1.4,
+ hxt-charproperties ==9.1.1.1,
+ hxt-regex-xmlschema ==9.0.4,
+ hxt-unicode ==9.0.2.2,
+ idna ==0.2,
+ iproute ==1.2.11,
+ json ==0.5,
+ keys ==3.10.1,
+ language-javascript ==0.5.13,
+ lens ==4.4.0.2,
+ libxml-sax ==0.7.5,
+ mime-mail ==0.4.1.2,
+ mime-types ==0.1.0.4,
+ mmorph ==1.0.3,
+ monad-control ==0.3.2.2,
+ monad-logger ==0.3.6.1,
+ monad-loops ==0.4.2.1,
+ monads-tf ==0.1.0.2,
+ mtl ==2.1.2,
+ nats ==0.1.2,
+ network ==2.4.1.2,
+ network-conduit ==1.1.0,
+ network-info ==0.2.0.5,
+ network-multicast ==0.0.10,
+ network-protocol-xmpp ==0.4.6,
+ network-uri ==2.6.0.1,
+ optparse-applicative ==0.10.0,
+ parallel ==3.2.0.4,
+ path-pieces ==0.1.4,
+ pem ==0.2.2,
+ persistent ==1.3.3,
+ persistent-template ==1.3.2.2,
+ pointed ==4.0,
+ prelude-extras ==0.4,
+ profunctors ==4.0.4,
+ publicsuffixlist ==0.1,
+ punycode ==2.0,
+ random ==1.0.1.1,
+ ranges ==0.2.4,
+ reducers ==3.10.2.1,
+ reflection ==1.2.0.1,
+ regex-base ==0.93.2,
+ regex-compat ==0.95.1,
+ regex-posix ==0.95.2,
+ regex-tdfa ==1.2.0,
+ resource-pool ==0.2.1.1,
+ resourcet ==1.1.2.3,
+ safe ==0.3.8,
+ securemem ==0.1.3,
+ semigroupoids ==4.2,
+ semigroups ==0.15.3,
+ shakespeare ==1.2.1.1,
+ shakespeare-css ==1.0.7.4,
+ shakespeare-i18n ==1.0.0.5,
+ shakespeare-js ==1.2.0.4,
+ silently ==1.2.4.1,
+ simple-sendfile ==0.2.14,
+ skein ==1.0.9,
+ socks ==0.5.4,
+ split ==0.2.2,
+ stm ==2.4.2,
+ stm-chans ==3.0.0.2,
+ streaming-commons ==0.1.4.1,
+ stringprep ==0.1.5,
+ stringsearch ==0.3.6.5,
+ syb ==0.4.0,
+ system-fileio ==0.3.14,
+ system-filepath ==0.4.12,
+ tagged ==0.7.2,
+ tagsoup ==0.13.1,
+ tagstream-conduit ==0.5.5.1,
+ tasty ==0.10,
+ tasty-hunit ==0.9,
+ tasty-quickcheck ==0.8.1,
+ tasty-rerun ==1.1.3,
+ text ==1.1.1.0,
+ text-icu ==0.6.3.7,
+ tf-random ==0.5,
+ tls ==1.2.9,
+ transformers ==0.3.0.0,
+ transformers-base ==0.4.1,
+ transformers-compat ==0.3.3.3,
+ unbounded-delays ==0.1.0.8,
+ unix-compat ==0.4.1.3,
+ unix-time ==0.2.2,
+ unordered-containers ==0.2.5.0,
+ utf8-string ==0.3.7,
+ uuid ==1.3.3,
+ vault ==0.3.0.3,
+ vector ==0.10.0.1,
+ void ==0.6.1,
+ wai ==3.0.1.1,
+ wai-app-static ==3.0.0.1,
+ wai-extra ==3.0.1.2,
+ wai-logger ==2.1.1,
+ warp ==3.0.0.5,
+ warp-tls ==3.0.0,
+ word8 ==0.1.1,
+ x509 ==1.4.11,
+ x509-store ==1.4.4,
+ x509-system ==1.4.5,
+ x509-validation ==1.5.0,
+ xml ==1.3.13,
+ xml-conduit ==1.2.1,
+ xml-hamlet ==0.4.0.9,
+ xml-types ==0.3.4,
+ xss-sanitize ==0.3.5.2,
+ yaml ==0.8.9.3,
+ yesod ==1.2.6.1,
+ yesod-auth ==1.3.4.6,
+ yesod-core ==1.2.20.1,
+ yesod-default ==1.2.0,
+ yesod-form ==1.3.16,
+ yesod-persistent ==1.2.3.1,
+ yesod-routes ==1.2.0.7,
+ yesod-static ==1.2.4,
+ zlib ==0.5.4.1,
+ bytestring ==0.10.4.0,
+ scientific ==0.3.3.1
diff --git a/standalone/linux/install-haskell-packages b/standalone/linux/install-haskell-packages
index b47c39aad..4c1f3dc51 100755
--- a/standalone/linux/install-haskell-packages
+++ b/standalone/linux/install-haskell-packages
@@ -3,37 +3,42 @@
# to all the necessary haskell packages being installed, with the
# necessary patches to work on architectures that lack template haskell.
#
-# Note that the newest version of packages is installed.
-# It attempts to reuse patches for older versions, but
-# new versions of packages often break cross-compilation by adding TH,
-# etc
-#
-# Future work: Convert to using the method used here:
-# https://github.com/kaoskorobase/ghc-ios-cabal-scripts/
+# The cabal.config is used to pin the haskell packages to the last
+# versions that have been gotten working. To update, delete the
+# cabal.config, run this script with an empty cabal and fix up the broken
+# patches, and then use cabal freeze to generate a new cabal.config.
set -e
-if [ ! -d ../haskell-patches ]; then
+if [ ! -d haskell-patches ]; then
cd standalone/linux
fi
cabalopts="$@"
cabalinstall () {
- echo cabal install "$@" "$cabalopts"
- eval cabal install "$@" "$cabalopts"
+ echo cabal install -j1 "$@" "$cabalopts"
+ eval cabal install -j1 "$@" "$cabalopts"
}
patched () {
pkg=$1
- shift 1
- cabal unpack $pkg
+ ver=$2
+ if [ -z "$ver" ]; then
+ ver="$(grep " $pkg " ../cabal.config | cut -d= -f 3 | sed 's/,$//')"
+ fi
+ if [ -z "$ver" ]; then
+ cabal unpack --pristine $pkg
+ else
+ cabal unpack --pristine $pkg-$ver
+ fi
cd $pkg*
git init
git config user.name dummy
git config user.email dummy@example.com
git add .
git commit -m "pre-patched state of $pkg"
+ ln -sf ../../cabal.config
for patch in ../../haskell-patches/${pkg}_* ../../../no-th/haskell-patches/${pkg}_*; do
if [ -e "$patch" ]; then
echo trying $patch
@@ -44,15 +49,20 @@ patched () {
fi
fi
done
- cabalinstall "$@"
- rm -rf $pkg*
+ cabalinstall
+ rm -f cabal.config
cd ..
+ rm -rf $pkg*
}
installgitannexdeps () {
pushd ../..
+ ln -sf standalone/linux/cabal.config
+ echo "cabal install QuickCheck -f-templateHaskell"
+ cabal install -j1 QuickCheck -f-templateHaskell
echo cabal install --only-dependencies "$@"
- cabal install --only-dependencies "$@"
+ cabal install -j1 --only-dependencies "$@"
+ rm -f cabal.config
popd
}
@@ -63,18 +73,18 @@ install_pkgs () {
patched network
patched wai-app-static
+ patched vector
+ patched aeson
patched shakespeare
- patched shakespeare-css
patched yesod-routes
- patched hamlet
patched monad-logger
- patched shakespeare-i18n
+ patched skein
patched shakespeare-js
+ patched hamlet
patched yesod-core
patched persistent
patched persistent-template
patched file-embed
- patched shakespeare-text
patched process-conduit
patched yesod-static
patched yesod-persistent
@@ -94,4 +104,9 @@ install_pkgs () {
}
cabal update
+
+# Some packages fail to install in a non unicode locale.
+LANG=C.UTF-8
+export LANG
+
install_pkgs
diff --git a/standalone/linux/skel/git b/standalone/linux/skel/git
index f32cf8193..7fbf82715 100755
--- a/standalone/linux/skel/git
+++ b/standalone/linux/skel/git
@@ -1,5 +1,5 @@
#!/bin/sh
-link="$(readlink "$0")" || true
+link="$(readlink -f "$0" 2>/dev/null || readlink "$0")" || true
if [ -n "$link" ]; then
base="$(dirname "$link")"
else
diff --git a/standalone/linux/skel/git-annex b/standalone/linux/skel/git-annex
index 27df466e4..7fc864d87 100755
--- a/standalone/linux/skel/git-annex
+++ b/standalone/linux/skel/git-annex
@@ -1,5 +1,5 @@
#!/bin/sh
-link="$(readlink "$0")" || true
+link="$(readlink -f "$0" 2>/dev/null || readlink "$0")" || true
if [ -n "$link" ]; then
base="$(dirname "$link")"
else
diff --git a/standalone/linux/skel/git-annex-shell b/standalone/linux/skel/git-annex-shell
index a07895591..37dbca049 100755
--- a/standalone/linux/skel/git-annex-shell
+++ b/standalone/linux/skel/git-annex-shell
@@ -1,5 +1,5 @@
#!/bin/sh
-link="$(readlink "$0")" || true
+link="$(readlink -f "$0" 2>/dev/null || readlink "$0")" || true
if [ -n "$link" ]; then
base="$(dirname "$link")"
else
diff --git a/standalone/linux/skel/git-annex-webapp b/standalone/linux/skel/git-annex-webapp
index acf2a5135..24a533969 100755
--- a/standalone/linux/skel/git-annex-webapp
+++ b/standalone/linux/skel/git-annex-webapp
@@ -1,5 +1,5 @@
#!/bin/sh
-link="$(readlink "$0")" || true
+link="$(readlink -f "$0" 2>/dev/null || readlink "$0")" || true
if [ -n "$link" ]; then
base="$(dirname "$link")"
else
diff --git a/standalone/linux/skel/git-receive-pack b/standalone/linux/skel/git-receive-pack
index 32d166e84..718541786 100755
--- a/standalone/linux/skel/git-receive-pack
+++ b/standalone/linux/skel/git-receive-pack
@@ -1,5 +1,5 @@
#!/bin/sh
-link="$(readlink "$0")" || true
+link="$(readlink -f "$0" 2>/dev/null || readlink "$0")" || true
if [ -n "$link" ]; then
base="$(dirname "$link")"
else
diff --git a/standalone/linux/skel/git-shell b/standalone/linux/skel/git-shell
index e3cef0f67..20c184bdf 100755
--- a/standalone/linux/skel/git-shell
+++ b/standalone/linux/skel/git-shell
@@ -1,5 +1,5 @@
#!/bin/sh
-link="$(readlink "$0")" || true
+link="$(readlink -f "$0" 2>/dev/null || readlink "$0")" || true
if [ -n "$link" ]; then
base="$(dirname "$link")"
else
diff --git a/standalone/linux/skel/git-upload-pack b/standalone/linux/skel/git-upload-pack
index f05aad83e..1df3f3f6c 100755
--- a/standalone/linux/skel/git-upload-pack
+++ b/standalone/linux/skel/git-upload-pack
@@ -1,5 +1,5 @@
#!/bin/sh
-link="$(readlink "$0")" || true
+link="$(readlink -f "$0" 2>/dev/null || readlink "$0")" || true
if [ -n "$link" ]; then
base="$(dirname "$link")"
else
diff --git a/standalone/linux/skel/runshell b/standalone/linux/skel/runshell
index 4481b0d7f..73703358d 100755
--- a/standalone/linux/skel/runshell
+++ b/standalone/linux/skel/runshell
@@ -34,11 +34,26 @@ if [ ! -e "$HOME/.ssh/git-annex-shell" ]; then
(
echo "#!/bin/sh"
echo "set -e"
+ echo "if [ \"x\$SSH_ORIGINAL_COMMAND\" != \"x\" ]; then"
echo "exec $base/runshell git-annex-shell -c \"\$SSH_ORIGINAL_COMMAND\""
+ echo "else"
+ echo "exec $base/runshell git-annex-shell -c \"\$@\""
+ echo "fi"
) > "$HOME/.ssh/git-annex-shell"
chmod +x "$HOME/.ssh/git-annex-shell"
fi
+# And this shim is used by the webapp when adding a remote ssh server.
+if [ ! -e "$HOME/.ssh/git-annex-wrapper" ]; then
+ mkdir "$HOME/.ssh" >/dev/null 2>&1 || true
+ (
+ echo "#!/bin/sh"
+ echo "set -e"
+ echo "exec $base/runshell \"\$@\""
+ ) > "$HOME/.ssh/git-annex-wrapper"
+ chmod +x "$HOME/.ssh/git-annex-wrapper"
+fi
+
# Put our binaries first, to avoid issues with out of date or incompatable
# system binaries.
ORIG_PATH="$PATH"
diff --git a/standalone/no-th/evilsplicer-headers.hs b/standalone/no-th/evilsplicer-headers.hs
index ef9e2603a..2e23df0ce 100644
--- a/standalone/no-th/evilsplicer-headers.hs
+++ b/standalone/no-th/evilsplicer-headers.hs
@@ -13,6 +13,7 @@ import qualified Data.Map as Data.Map.Base
import qualified Data.Foldable
import qualified Data.Text
import qualified Data.Text.Lazy.Builder
+import qualified Data.Text.Lazy.Builder as Data.Text.Internal.Builder
import qualified Text.Shakespeare
import qualified Text.Hamlet
import qualified Text.Julius
@@ -29,6 +30,9 @@ import qualified Data.Text.Encoding
import qualified Network.Wai
import qualified Network.Wai as Network.Wai.Internal
import qualified Yesod.Core.Types
+import qualified GHC.IO
+import qualified Data.ByteString.Unsafe
+import qualified Data.ByteString.Char8
{- End EvilSplicer headers. -}
diff --git a/standalone/no-th/haskell-patches/DAV_build-without-TH.patch b/standalone/no-th/haskell-patches/DAV_build-without-TH.patch
index d57d79a11..6d17d634e 100644
--- a/standalone/no-th/haskell-patches/DAV_build-without-TH.patch
+++ b/standalone/no-th/haskell-patches/DAV_build-without-TH.patch
@@ -1,70 +1,72 @@
-From a908cec3ae1644d72d04ccc7657433d8335665bc Mon Sep 17 00:00:00 2001
+From e54cfacbb9fb24f75d3d93cd8ee6da67b161574f Mon Sep 17 00:00:00 2001
From: dummy <dummy@example.com>
-Date: Sat, 8 Feb 2014 17:11:05 +0000
-Subject: [PATCH] expand TH
+Date: Thu, 16 Oct 2014 02:51:28 +0000
+Subject: [PATCH] remove TH
---
- DAV.cabal | 24 +---
- Network/Protocol/HTTP/DAV.hs | 96 ++++++++++++----
- Network/Protocol/HTTP/DAV/TH.hs | 232 ++++++++++++++++++++++++++++++++++++++-
- 3 files changed, 307 insertions(+), 45 deletions(-)
+ DAV.cabal | 28 +----
+ Network/Protocol/HTTP/DAV.hs | 92 +++++++++++++---
+ Network/Protocol/HTTP/DAV/TH.hs | 232 +++++++++++++++++++++++++++++++++++++++-
+ 3 files changed, 306 insertions(+), 46 deletions(-)
diff --git a/DAV.cabal b/DAV.cabal
-index 3a755bb..748b0e1 100644
+index 95fffd8..5669c51 100644
--- a/DAV.cabal
+++ b/DAV.cabal
-@@ -42,29 +42,7 @@ library
- , transformers-base
- , xml-conduit >= 1.0 && <= 1.2
- , xml-hamlet >= 0.4 && <= 0.5
+@@ -47,33 +47,7 @@ library
+ , utf8-string
+ , xml-conduit >= 1.0 && < 1.3
+ , xml-hamlet >= 0.4 && < 0.5
-executable hdav
- main-is: hdav.hs
- ghc-options: -Wall
-- build-depends: base >= 4.5 && <= 5
+- build-depends: base >= 4.5 && < 5
- , bytestring
- , bytestring
- , case-insensitive >= 0.4
- , containers
-- , either >= 4.1
+- , data-default
+- , either >= 4.3
- , errors
+- , exceptions
- , http-client >= 0.2
- , http-client-tls >= 0.2
- , http-types >= 0.7
- , lens >= 3.0
-- , lifted-base >= 0.1
-- , monad-control >= 0.3.2
- , mtl >= 2.1
-- , network >= 2.3
-- , optparse-applicative >= 0.5.0
+- , optparse-applicative >= 0.10.0
- , transformers >= 0.3
- , transformers-base
-- , xml-conduit >= 1.0 && <= 1.2
-- , xml-hamlet >= 0.4 && <= 0.5
+- , utf8-string
+- , xml-conduit >= 1.0 && < 1.3
+- , xml-hamlet >= 0.4 && < 0.5
+- if flag(network-uri)
+- build-depends: network-uri >= 2.6, network >= 2.6
+- else
+- build-depends: network >= 2.3 && <2.6
+ , text
source-repository head
type: git
diff --git a/Network/Protocol/HTTP/DAV.hs b/Network/Protocol/HTTP/DAV.hs
-index 94d21bc..c48618f 100644
+index 4c6d68f..55979b6 100644
--- a/Network/Protocol/HTTP/DAV.hs
+++ b/Network/Protocol/HTTP/DAV.hs
-@@ -78,7 +78,7 @@ import Network.HTTP.Types (hContentType, Method, Status, RequestHeaders, unautho
-
+@@ -82,6 +82,7 @@ import Network.HTTP.Types (hContentType, Method, Status, RequestHeaders, unautho
import qualified Text.XML as XML
import Text.XML.Cursor (($/), (&/), element, node, fromDocument, checkName)
--import Text.Hamlet.XML (xml)
+ import Text.Hamlet.XML (xml)
+import qualified Data.Text
import Data.CaseInsensitive (mk)
-@@ -336,28 +336,84 @@ makeCollection url username password = choke $ evalDAVT url $ do
+@@ -330,31 +331,88 @@ withLockIfPossibleForDelete nocreate f = do
propname :: XML.Document
propname = XML.Document (XML.Prologue [] Nothing []) root []
where
- root = XML.Element "D:propfind" (Map.fromList [("xmlns:D", "DAV:")]) [xml|
-<D:allprop>
-|]
--
+ root = XML.Element "D:propfind" (Map.fromList [("xmlns:D", "DAV:")]) $ concat
+ [[XML.NodeElement
+ (XML.Element
@@ -72,9 +74,11 @@ index 94d21bc..c48618f 100644
+ (Data.Text.pack "D:allprop") Nothing Nothing)
+ Map.empty
+ (concat []))]]
++
+
locky :: XML.Document
locky = XML.Document (XML.Prologue [] Nothing []) root []
-- where
+ where
- root = XML.Element "D:lockinfo" (Map.fromList [("xmlns:D", "DAV:")]) [xml|
-<D:lockscope>
- <D:exclusive>
@@ -82,38 +86,37 @@ index 94d21bc..c48618f 100644
- <D:write>
-<D:owner>Haskell DAV user
-|]
-+ where
-+ root = XML.Element "D:lockinfo" (Map.fromList [("xmlns:D", "DAV:")]) $ concat
-+ [[XML.NodeElement
-+ (XML.Element
-+ (XML.Name
-+ (Data.Text.pack "D:lockscope") Nothing Nothing)
-+ Map.empty
-+ (concat
-+ [[XML.NodeElement
-+ (XML.Element
-+ (XML.Name
-+ (Data.Text.pack "D:exclusive") Nothing Nothing)
-+ Map.empty
-+ (concat []))]]))],
-+ [XML.NodeElement
-+ (XML.Element
-+ (XML.Name
-+ (Data.Text.pack "D:locktype") Nothing Nothing)
-+ Map.empty
-+ (concat
-+ [[XML.NodeElement
-+ (XML.Element
-+ (XML.Name (Data.Text.pack "D:write") Nothing Nothing)
-+ Map.empty
-+ (concat []))]]))],
-+ [XML.NodeElement
-+ (XML.Element
-+ (XML.Name (Data.Text.pack "D:owner") Nothing Nothing)
-+ Map.empty
-+ (concat
-+ [[XML.NodeContent
-+ (Data.Text.pack "Haskell DAV user")]]))]]
++ root = XML.Element "D:lockinfo" (Map.fromList [("xmlns:D", "DAV:")]) $ concat
++ [[XML.NodeElement
++ (XML.Element
++ (XML.Name
++ (Data.Text.pack "D:lockscope") Nothing Nothing)
++ Map.empty
++ (concat
++ [[XML.NodeElement
++ (XML.Element
++ (XML.Name
++ (Data.Text.pack "D:exclusive") Nothing Nothing)
++ Map.empty
++ (concat []))]]))],
++ [XML.NodeElement
++ (XML.Element
++ (XML.Name
++ (Data.Text.pack "D:locktype") Nothing Nothing)
++ Map.empty
++ (concat
++ [[XML.NodeElement
++ (XML.Element
++ (XML.Name (Data.Text.pack "D:write") Nothing Nothing)
++ Map.empty
++ (concat []))]]))],
++ [XML.NodeElement
++ (XML.Element
++ (XML.Name (Data.Text.pack "D:owner") Nothing Nothing)
++ Map.empty
++ (concat
++ [[XML.NodeContent
++ (Data.Text.pack "Haskell DAV user")]]))]]
+
calendarquery :: XML.Document
@@ -146,8 +149,7 @@ index 94d21bc..c48618f 100644
+ (concat []))]]))],
+ [XML.NodeElement
+ (XML.Element
-+ (XML.Name
-+ (Data.Text.pack "C:filter") Nothing Nothing)
++ (XML.Name (Data.Text.pack "C:filter") Nothing Nothing)
+ Map.empty
+ (concat
+ [[XML.NodeElement
@@ -161,8 +163,11 @@ index 94d21bc..c48618f 100644
+ Map.empty)
+ (concat []))]]))]]
+
+
+ -- | Normally, DAVT actions act on the url that is provided to eg, evalDAVT.
+ -- Sometimes, it's useful to adjust the url that is acted on, while
diff --git a/Network/Protocol/HTTP/DAV/TH.hs b/Network/Protocol/HTTP/DAV/TH.hs
-index b072116..5a01bf9 100644
+index 0ecd476..1653bf6 100644
--- a/Network/Protocol/HTTP/DAV/TH.hs
+++ b/Network/Protocol/HTTP/DAV/TH.hs
@@ -20,9 +20,11 @@
@@ -173,8 +178,8 @@ index b072116..5a01bf9 100644
+import Control.Lens
import qualified Data.ByteString as B
import Network.HTTP.Client (Manager, Request)
-+import qualified Control.Lens.Type
+import qualified Data.Functor
++import qualified Control.Lens.Type
data Depth = Depth0 | Depth1 | DepthInfinity
instance Read Depth where
@@ -185,231 +190,231 @@ index b072116..5a01bf9 100644
-makeLenses ''DAVContext
+allowedMethods :: Control.Lens.Type.Lens' DAVContext [B.ByteString]
+allowedMethods
-+ _f_a2PF
-+ (DAVContext __allowedMethods'_a2PG
-+ __baseRequest_a2PI
-+ __basicusername_a2PJ
-+ __basicpassword_a2PK
-+ __complianceClasses_a2PL
-+ __depth_a2PM
-+ __httpManager_a2PN
-+ __lockToken_a2PO
-+ __userAgent_a2PP)
-+ = ((\ __allowedMethods_a2PH
++ _f_a3iH
++ (DAVContext __allowedMethods'_a3iI
++ __baseRequest_a3iK
++ __basicusername_a3iL
++ __basicpassword_a3iM
++ __complianceClasses_a3iN
++ __depth_a3iO
++ __httpManager_a3iP
++ __lockToken_a3iQ
++ __userAgent_a3iR)
++ = ((\ __allowedMethods_a3iJ
+ -> DAVContext
-+ __allowedMethods_a2PH
-+ __baseRequest_a2PI
-+ __basicusername_a2PJ
-+ __basicpassword_a2PK
-+ __complianceClasses_a2PL
-+ __depth_a2PM
-+ __httpManager_a2PN
-+ __lockToken_a2PO
-+ __userAgent_a2PP)
-+ Data.Functor.<$> (_f_a2PF __allowedMethods'_a2PG))
++ __allowedMethods_a3iJ
++ __baseRequest_a3iK
++ __basicusername_a3iL
++ __basicpassword_a3iM
++ __complianceClasses_a3iN
++ __depth_a3iO
++ __httpManager_a3iP
++ __lockToken_a3iQ
++ __userAgent_a3iR)
++ Data.Functor.<$> (_f_a3iH __allowedMethods'_a3iI))
+{-# INLINE allowedMethods #-}
+baseRequest :: Control.Lens.Type.Lens' DAVContext Request
+baseRequest
-+ _f_a2PQ
-+ (DAVContext __allowedMethods_a2PR
-+ __baseRequest'_a2PS
-+ __basicusername_a2PU
-+ __basicpassword_a2PV
-+ __complianceClasses_a2PW
-+ __depth_a2PX
-+ __httpManager_a2PY
-+ __lockToken_a2PZ
-+ __userAgent_a2Q0)
-+ = ((\ __baseRequest_a2PT
++ _f_a3iS
++ (DAVContext __allowedMethods_a3iT
++ __baseRequest'_a3iU
++ __basicusername_a3iW
++ __basicpassword_a3iX
++ __complianceClasses_a3iY
++ __depth_a3iZ
++ __httpManager_a3j0
++ __lockToken_a3j1
++ __userAgent_a3j2)
++ = ((\ __baseRequest_a3iV
+ -> DAVContext
-+ __allowedMethods_a2PR
-+ __baseRequest_a2PT
-+ __basicusername_a2PU
-+ __basicpassword_a2PV
-+ __complianceClasses_a2PW
-+ __depth_a2PX
-+ __httpManager_a2PY
-+ __lockToken_a2PZ
-+ __userAgent_a2Q0)
-+ Data.Functor.<$> (_f_a2PQ __baseRequest'_a2PS))
++ __allowedMethods_a3iT
++ __baseRequest_a3iV
++ __basicusername_a3iW
++ __basicpassword_a3iX
++ __complianceClasses_a3iY
++ __depth_a3iZ
++ __httpManager_a3j0
++ __lockToken_a3j1
++ __userAgent_a3j2)
++ Data.Functor.<$> (_f_a3iS __baseRequest'_a3iU))
+{-# INLINE baseRequest #-}
+basicpassword :: Control.Lens.Type.Lens' DAVContext B.ByteString
+basicpassword
-+ _f_a2Q1
-+ (DAVContext __allowedMethods_a2Q2
-+ __baseRequest_a2Q3
-+ __basicusername_a2Q4
-+ __basicpassword'_a2Q5
-+ __complianceClasses_a2Q7
-+ __depth_a2Q8
-+ __httpManager_a2Q9
-+ __lockToken_a2Qa
-+ __userAgent_a2Qb)
-+ = ((\ __basicpassword_a2Q6
++ _f_a3j3
++ (DAVContext __allowedMethods_a3j4
++ __baseRequest_a3j5
++ __basicusername_a3j6
++ __basicpassword'_a3j7
++ __complianceClasses_a3j9
++ __depth_a3ja
++ __httpManager_a3jb
++ __lockToken_a3jc
++ __userAgent_a3jd)
++ = ((\ __basicpassword_a3j8
+ -> DAVContext
-+ __allowedMethods_a2Q2
-+ __baseRequest_a2Q3
-+ __basicusername_a2Q4
-+ __basicpassword_a2Q6
-+ __complianceClasses_a2Q7
-+ __depth_a2Q8
-+ __httpManager_a2Q9
-+ __lockToken_a2Qa
-+ __userAgent_a2Qb)
-+ Data.Functor.<$> (_f_a2Q1 __basicpassword'_a2Q5))
++ __allowedMethods_a3j4
++ __baseRequest_a3j5
++ __basicusername_a3j6
++ __basicpassword_a3j8
++ __complianceClasses_a3j9
++ __depth_a3ja
++ __httpManager_a3jb
++ __lockToken_a3jc
++ __userAgent_a3jd)
++ Data.Functor.<$> (_f_a3j3 __basicpassword'_a3j7))
+{-# INLINE basicpassword #-}
+basicusername :: Control.Lens.Type.Lens' DAVContext B.ByteString
+basicusername
-+ _f_a2Qc
-+ (DAVContext __allowedMethods_a2Qd
-+ __baseRequest_a2Qe
-+ __basicusername'_a2Qf
-+ __basicpassword_a2Qh
-+ __complianceClasses_a2Qi
-+ __depth_a2Qj
-+ __httpManager_a2Qk
-+ __lockToken_a2Ql
-+ __userAgent_a2Qm)
-+ = ((\ __basicusername_a2Qg
++ _f_a3je
++ (DAVContext __allowedMethods_a3jf
++ __baseRequest_a3jg
++ __basicusername'_a3jh
++ __basicpassword_a3jj
++ __complianceClasses_a3jk
++ __depth_a3jl
++ __httpManager_a3jm
++ __lockToken_a3jn
++ __userAgent_a3jo)
++ = ((\ __basicusername_a3ji
+ -> DAVContext
-+ __allowedMethods_a2Qd
-+ __baseRequest_a2Qe
-+ __basicusername_a2Qg
-+ __basicpassword_a2Qh
-+ __complianceClasses_a2Qi
-+ __depth_a2Qj
-+ __httpManager_a2Qk
-+ __lockToken_a2Ql
-+ __userAgent_a2Qm)
-+ Data.Functor.<$> (_f_a2Qc __basicusername'_a2Qf))
++ __allowedMethods_a3jf
++ __baseRequest_a3jg
++ __basicusername_a3ji
++ __basicpassword_a3jj
++ __complianceClasses_a3jk
++ __depth_a3jl
++ __httpManager_a3jm
++ __lockToken_a3jn
++ __userAgent_a3jo)
++ Data.Functor.<$> (_f_a3je __basicusername'_a3jh))
+{-# INLINE basicusername #-}
+complianceClasses ::
+ Control.Lens.Type.Lens' DAVContext [B.ByteString]
+complianceClasses
-+ _f_a2Qn
-+ (DAVContext __allowedMethods_a2Qo
-+ __baseRequest_a2Qp
-+ __basicusername_a2Qq
-+ __basicpassword_a2Qr
-+ __complianceClasses'_a2Qs
-+ __depth_a2Qu
-+ __httpManager_a2Qv
-+ __lockToken_a2Qw
-+ __userAgent_a2Qx)
-+ = ((\ __complianceClasses_a2Qt
++ _f_a3jp
++ (DAVContext __allowedMethods_a3jq
++ __baseRequest_a3jr
++ __basicusername_a3js
++ __basicpassword_a3jt
++ __complianceClasses'_a3ju
++ __depth_a3jw
++ __httpManager_a3jx
++ __lockToken_a3jy
++ __userAgent_a3jz)
++ = ((\ __complianceClasses_a3jv
+ -> DAVContext
-+ __allowedMethods_a2Qo
-+ __baseRequest_a2Qp
-+ __basicusername_a2Qq
-+ __basicpassword_a2Qr
-+ __complianceClasses_a2Qt
-+ __depth_a2Qu
-+ __httpManager_a2Qv
-+ __lockToken_a2Qw
-+ __userAgent_a2Qx)
-+ Data.Functor.<$> (_f_a2Qn __complianceClasses'_a2Qs))
++ __allowedMethods_a3jq
++ __baseRequest_a3jr
++ __basicusername_a3js
++ __basicpassword_a3jt
++ __complianceClasses_a3jv
++ __depth_a3jw
++ __httpManager_a3jx
++ __lockToken_a3jy
++ __userAgent_a3jz)
++ Data.Functor.<$> (_f_a3jp __complianceClasses'_a3ju))
+{-# INLINE complianceClasses #-}
+depth :: Control.Lens.Type.Lens' DAVContext (Maybe Depth)
+depth
-+ _f_a2Qy
-+ (DAVContext __allowedMethods_a2Qz
-+ __baseRequest_a2QA
-+ __basicusername_a2QB
-+ __basicpassword_a2QC
-+ __complianceClasses_a2QD
-+ __depth'_a2QE
-+ __httpManager_a2QG
-+ __lockToken_a2QH
-+ __userAgent_a2QI)
-+ = ((\ __depth_a2QF
++ _f_a3jA
++ (DAVContext __allowedMethods_a3jB
++ __baseRequest_a3jC
++ __basicusername_a3jD
++ __basicpassword_a3jE
++ __complianceClasses_a3jF
++ __depth'_a3jG
++ __httpManager_a3jI
++ __lockToken_a3jJ
++ __userAgent_a3jK)
++ = ((\ __depth_a3jH
+ -> DAVContext
-+ __allowedMethods_a2Qz
-+ __baseRequest_a2QA
-+ __basicusername_a2QB
-+ __basicpassword_a2QC
-+ __complianceClasses_a2QD
-+ __depth_a2QF
-+ __httpManager_a2QG
-+ __lockToken_a2QH
-+ __userAgent_a2QI)
-+ Data.Functor.<$> (_f_a2Qy __depth'_a2QE))
++ __allowedMethods_a3jB
++ __baseRequest_a3jC
++ __basicusername_a3jD
++ __basicpassword_a3jE
++ __complianceClasses_a3jF
++ __depth_a3jH
++ __httpManager_a3jI
++ __lockToken_a3jJ
++ __userAgent_a3jK)
++ Data.Functor.<$> (_f_a3jA __depth'_a3jG))
+{-# INLINE depth #-}
-+httpManager :: Control.Lens.Type.Lens' DAVContext Manager
++httpManager :: Control.Lens.Type.Lens' DAVContext (Maybe Manager)
+httpManager
-+ _f_a2QJ
-+ (DAVContext __allowedMethods_a2QK
-+ __baseRequest_a2QL
-+ __basicusername_a2QM
-+ __basicpassword_a2QN
-+ __complianceClasses_a2QO
-+ __depth_a2QP
-+ __httpManager'_a2QQ
-+ __lockToken_a2QS
-+ __userAgent_a2QT)
-+ = ((\ __httpManager_a2QR
++ _f_a3jL
++ (DAVContext __allowedMethods_a3jM
++ __baseRequest_a3jN
++ __basicusername_a3jO
++ __basicpassword_a3jP
++ __complianceClasses_a3jQ
++ __depth_a3jR
++ __httpManager'_a3jS
++ __lockToken_a3jU
++ __userAgent_a3jV)
++ = ((\ __httpManager_a3jT
+ -> DAVContext
-+ __allowedMethods_a2QK
-+ __baseRequest_a2QL
-+ __basicusername_a2QM
-+ __basicpassword_a2QN
-+ __complianceClasses_a2QO
-+ __depth_a2QP
-+ __httpManager_a2QR
-+ __lockToken_a2QS
-+ __userAgent_a2QT)
-+ Data.Functor.<$> (_f_a2QJ __httpManager'_a2QQ))
++ __allowedMethods_a3jM
++ __baseRequest_a3jN
++ __basicusername_a3jO
++ __basicpassword_a3jP
++ __complianceClasses_a3jQ
++ __depth_a3jR
++ __httpManager_a3jT
++ __lockToken_a3jU
++ __userAgent_a3jV)
++ Data.Functor.<$> (_f_a3jL __httpManager'_a3jS))
+{-# INLINE httpManager #-}
+lockToken ::
+ Control.Lens.Type.Lens' DAVContext (Maybe B.ByteString)
+lockToken
-+ _f_a2QU
-+ (DAVContext __allowedMethods_a2QV
-+ __baseRequest_a2QW
-+ __basicusername_a2QX
-+ __basicpassword_a2QY
-+ __complianceClasses_a2QZ
-+ __depth_a2R0
-+ __httpManager_a2R1
-+ __lockToken'_a2R2
-+ __userAgent_a2R4)
-+ = ((\ __lockToken_a2R3
++ _f_a3jW
++ (DAVContext __allowedMethods_a3jX
++ __baseRequest_a3jY
++ __basicusername_a3jZ
++ __basicpassword_a3k0
++ __complianceClasses_a3k1
++ __depth_a3k2
++ __httpManager_a3k3
++ __lockToken'_a3k4
++ __userAgent_a3k6)
++ = ((\ __lockToken_a3k5
+ -> DAVContext
-+ __allowedMethods_a2QV
-+ __baseRequest_a2QW
-+ __basicusername_a2QX
-+ __basicpassword_a2QY
-+ __complianceClasses_a2QZ
-+ __depth_a2R0
-+ __httpManager_a2R1
-+ __lockToken_a2R3
-+ __userAgent_a2R4)
-+ Data.Functor.<$> (_f_a2QU __lockToken'_a2R2))
++ __allowedMethods_a3jX
++ __baseRequest_a3jY
++ __basicusername_a3jZ
++ __basicpassword_a3k0
++ __complianceClasses_a3k1
++ __depth_a3k2
++ __httpManager_a3k3
++ __lockToken_a3k5
++ __userAgent_a3k6)
++ Data.Functor.<$> (_f_a3jW __lockToken'_a3k4))
+{-# INLINE lockToken #-}
+userAgent :: Control.Lens.Type.Lens' DAVContext B.ByteString
+userAgent
-+ _f_a2R5
-+ (DAVContext __allowedMethods_a2R6
-+ __baseRequest_a2R7
-+ __basicusername_a2R8
-+ __basicpassword_a2R9
-+ __complianceClasses_a2Ra
-+ __depth_a2Rb
-+ __httpManager_a2Rc
-+ __lockToken_a2Rd
-+ __userAgent'_a2Re)
-+ = ((\ __userAgent_a2Rf
++ _f_a3k7
++ (DAVContext __allowedMethods_a3k8
++ __baseRequest_a3k9
++ __basicusername_a3ka
++ __basicpassword_a3kb
++ __complianceClasses_a3kc
++ __depth_a3kd
++ __httpManager_a3ke
++ __lockToken_a3kf
++ __userAgent'_a3kg)
++ = ((\ __userAgent_a3kh
+ -> DAVContext
-+ __allowedMethods_a2R6
-+ __baseRequest_a2R7
-+ __basicusername_a2R8
-+ __basicpassword_a2R9
-+ __complianceClasses_a2Ra
-+ __depth_a2Rb
-+ __httpManager_a2Rc
-+ __lockToken_a2Rd
-+ __userAgent_a2Rf)
-+ Data.Functor.<$> (_f_a2R5 __userAgent'_a2Re))
++ __allowedMethods_a3k8
++ __baseRequest_a3k9
++ __basicusername_a3ka
++ __basicpassword_a3kb
++ __complianceClasses_a3kc
++ __depth_a3kd
++ __httpManager_a3ke
++ __lockToken_a3kf
++ __userAgent_a3kh)
++ Data.Functor.<$> (_f_a3k7 __userAgent'_a3kg))
+{-# INLINE userAgent #-}
--
-1.7.10.4
+2.1.1
diff --git a/standalone/no-th/haskell-patches/aeson_remove-TH.patch b/standalone/no-th/haskell-patches/aeson_remove-TH.patch
new file mode 100644
index 000000000..dc40de79e
--- /dev/null
+++ b/standalone/no-th/haskell-patches/aeson_remove-TH.patch
@@ -0,0 +1,40 @@
+From f147ec9aeaa03ca6e30232c84c413ef29b95fb62 Mon Sep 17 00:00:00 2001
+From: Your Name <you@example.com>
+Date: Tue, 20 May 2014 19:53:55 +0000
+Subject: [PATCH] avoid TH
+
+---
+ aeson.cabal | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/aeson.cabal b/aeson.cabal
+index 493d625..02dc6f4 100644
+--- a/aeson.cabal
++++ b/aeson.cabal
+@@ -88,7 +88,6 @@ library
+ Data.Aeson.Generic
+ Data.Aeson.Parser
+ Data.Aeson.Types
+- Data.Aeson.TH
+
+ other-modules:
+ Data.Aeson.Functions
+@@ -121,7 +120,6 @@ library
+ old-locale,
+ scientific >= 0.3.1 && < 0.4,
+ syb,
+- template-haskell >= 2.4,
+ time,
+ unordered-containers >= 0.2.3.0,
+ vector >= 0.7.1
+@@ -164,7 +162,6 @@ test-suite tests
+ base,
+ containers,
+ bytestring,
+- template-haskell,
+ test-framework,
+ test-framework-quickcheck2,
+ test-framework-hunit,
+--
+2.0.0.rc2
+
diff --git a/standalone/no-th/haskell-patches/file-embed_remove-TH.patch b/standalone/no-th/haskell-patches/file-embed_remove-TH.patch
index e637465e1..12e344504 100644
--- a/standalone/no-th/haskell-patches/file-embed_remove-TH.patch
+++ b/standalone/no-th/haskell-patches/file-embed_remove-TH.patch
@@ -1,6 +1,6 @@
-From cd49a96991dc3dd8867038fa9d426a8ccdb25f8d Mon Sep 17 00:00:00 2001
+From 497d09a91f9eb1e5979948cd128078491b0e8bca Mon Sep 17 00:00:00 2001
From: Joey Hess <joey@kitenet.net>
-Date: Tue, 17 Dec 2013 18:40:48 +0000
+Date: Fri, 12 Sep 2014 20:52:08 -0400
Subject: [PATCH] remove TH
---
@@ -8,7 +8,7 @@ Subject: [PATCH] remove TH
1 file changed, 5 insertions(+), 82 deletions(-)
diff --git a/Data/FileEmbed.hs b/Data/FileEmbed.hs
-index 5617493..ad92cdc 100644
+index 5617493..adacdba 100644
--- a/Data/FileEmbed.hs
+++ b/Data/FileEmbed.hs
@@ -17,13 +17,13 @@
@@ -19,7 +19,7 @@ index 5617493..ad92cdc 100644
- , embedOneFileOf
- , embedDir
- , getDir
-+ -- embedFile
++ -- embedFile
+ --, embedOneFileOf
+ --, embedDir
+ getDir
@@ -30,7 +30,7 @@ index 5617493..ad92cdc 100644
#endif
, inject
, injectFile
-@@ -56,72 +56,11 @@ import Data.ByteString.Unsafe (unsafePackAddressLen)
+@@ -56,73 +56,12 @@ import Data.ByteString.Unsafe (unsafePackAddressLen)
import System.IO.Unsafe (unsafePerformIO)
import System.FilePath ((</>))
@@ -81,7 +81,7 @@ index 5617493..ad92cdc 100644
- e <- ListE <$> ((runIO $ fileList fp) >>= mapM (pairToExp fp))
- return $ SigE e typ
-
---- | Get a directory tree in the IO monad.
+ -- | Get a directory tree in the IO monad.
--
-- This is the workhorse of 'embedDir'
getDir :: FilePath -> IO [(FilePath, B.ByteString)]
@@ -100,9 +100,10 @@ index 5617493..ad92cdc 100644
- helper <- [| stringToBs |]
- let chars = B8.unpack bs
- return $! AppE helper $! LitE $! StringL chars
-
+-
stringToBs :: String -> B.ByteString
stringToBs = B8.pack
+
@@ -164,22 +103,6 @@ padSize i =
let s = show i
in replicate (sizeLen - length s) '0' ++ s
@@ -127,5 +128,5 @@ index 5617493..ad92cdc 100644
inject :: B.ByteString -- ^ bs to inject
-> B.ByteString -- ^ original BS containing dummy
--
-1.8.5.1
+2.1.0
diff --git a/standalone/no-th/haskell-patches/hamlet_hack_TH.patch b/standalone/no-th/haskell-patches/hamlet_hack_TH.patch
new file mode 100644
index 000000000..c4e11ca82
--- /dev/null
+++ b/standalone/no-th/haskell-patches/hamlet_hack_TH.patch
@@ -0,0 +1,205 @@
+From 0509d4383c328c20be61cf3e3bbc98a0a1161588 Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Thu, 16 Oct 2014 02:21:17 +0000
+Subject: [PATCH] hack TH
+
+---
+ Text/Hamlet.hs | 86 +++++++++++++++++-----------------------------------
+ Text/Hamlet/Parse.hs | 3 +-
+ 2 files changed, 29 insertions(+), 60 deletions(-)
+
+diff --git a/Text/Hamlet.hs b/Text/Hamlet.hs
+index 9500ecb..ec8471a 100644
+--- a/Text/Hamlet.hs
++++ b/Text/Hamlet.hs
+@@ -11,36 +11,36 @@
+ module Text.Hamlet
+ ( -- * Plain HTML
+ Html
+- , shamlet
+- , shamletFile
+- , xshamlet
+- , xshamletFile
++ --, shamlet
++ --, shamletFile
++ --, xshamlet
++ --, xshamletFile
+ -- * Hamlet
+ , HtmlUrl
+- , hamlet
+- , hamletFile
+- , hamletFileReload
+- , ihamletFileReload
+- , xhamlet
+- , xhamletFile
++ --, hamlet
++ --, hamletFile
++ --, hamletFileReload
++ --, ihamletFileReload
++ --, xhamlet
++ --, xhamletFile
+ -- * I18N Hamlet
+ , HtmlUrlI18n
+- , ihamlet
+- , ihamletFile
++ --, ihamlet
++ --, ihamletFile
+ -- * Type classes
+ , ToAttributes (..)
+ -- * Internal, for making more
+ , HamletSettings (..)
+ , NewlineStyle (..)
+- , hamletWithSettings
+- , hamletFileWithSettings
++ --, hamletWithSettings
++ --, hamletFileWithSettings
+ , defaultHamletSettings
+ , xhtmlHamletSettings
+- , Env (..)
+- , HamletRules (..)
+- , hamletRules
+- , ihamletRules
+- , htmlRules
++ --, Env (..)
++ --, HamletRules (..)
++ --, hamletRules
++ --, ihamletRules
++ --, htmlRules
+ , CloseStyle (..)
+ -- * Used by generated code
+ , condH
+@@ -110,47 +110,9 @@ type HtmlUrl url = Render url -> Html
+ -- | A function generating an 'Html' given a message translator and a URL rendering function.
+ type HtmlUrlI18n msg url = Translate msg -> Render url -> Html
+
+-docsToExp :: Env -> HamletRules -> Scope -> [Doc] -> Q Exp
+-docsToExp env hr scope docs = do
+- exps <- mapM (docToExp env hr scope) docs
+- case exps of
+- [] -> [|return ()|]
+- [x] -> return x
+- _ -> return $ DoE $ map NoBindS exps
+-
+ unIdent :: Ident -> String
+ unIdent (Ident s) = s
+
+-bindingPattern :: Binding -> Q (Pat, [(Ident, Exp)])
+-bindingPattern (BindAs i@(Ident s) b) = do
+- name <- newName s
+- (pattern, scope) <- bindingPattern b
+- return (AsP name pattern, (i, VarE name):scope)
+-bindingPattern (BindVar i@(Ident s))
+- | all isDigit s = do
+- return (LitP $ IntegerL $ read s, [])
+- | otherwise = do
+- name <- newName s
+- return (VarP name, [(i, VarE name)])
+-bindingPattern (BindTuple is) = do
+- (patterns, scopes) <- fmap unzip $ mapM bindingPattern is
+- return (TupP patterns, concat scopes)
+-bindingPattern (BindList is) = do
+- (patterns, scopes) <- fmap unzip $ mapM bindingPattern is
+- return (ListP patterns, concat scopes)
+-bindingPattern (BindConstr con is) = do
+- (patterns, scopes) <- fmap unzip $ mapM bindingPattern is
+- return (ConP (mkConName con) patterns, concat scopes)
+-bindingPattern (BindRecord con fields wild) = do
+- let f (Ident field,b) =
+- do (p,s) <- bindingPattern b
+- return ((mkName field,p),s)
+- (patterns, scopes) <- fmap unzip $ mapM f fields
+- (patterns1, scopes1) <- if wild
+- then bindWildFields con $ map fst fields
+- else return ([],[])
+- return (RecP (mkConName con) (patterns++patterns1), concat scopes ++ scopes1)
+-
+ mkConName :: DataConstr -> Name
+ mkConName = mkName . conToStr
+
+@@ -158,6 +120,7 @@ conToStr :: DataConstr -> String
+ conToStr (DCUnqualified (Ident x)) = x
+ conToStr (DCQualified (Module xs) (Ident x)) = intercalate "." $ xs ++ [x]
+
++{-
+ -- Wildcards bind all of the unbound fields to variables whose name
+ -- matches the field name.
+ --
+@@ -296,10 +259,12 @@ hamlet = hamletWithSettings hamletRules defaultHamletSettings
+
+ xhamlet :: QuasiQuoter
+ xhamlet = hamletWithSettings hamletRules xhtmlHamletSettings
++-}
+
+ asHtmlUrl :: HtmlUrl url -> HtmlUrl url
+ asHtmlUrl = id
+
++{-
+ hamletRules :: Q HamletRules
+ hamletRules = do
+ i <- [|id|]
+@@ -360,6 +325,7 @@ hamletFromString :: Q HamletRules -> HamletSettings -> String -> Q Exp
+ hamletFromString qhr set s = do
+ hr <- qhr
+ hrWithEnv hr $ \env -> docsToExp env hr [] $ docFromString set s
++-}
+
+ docFromString :: HamletSettings -> String -> [Doc]
+ docFromString set s =
+@@ -367,6 +333,7 @@ docFromString set s =
+ Error s' -> error s'
+ Ok (_, d) -> d
+
++{-
+ hamletFileWithSettings :: Q HamletRules -> HamletSettings -> FilePath -> Q Exp
+ hamletFileWithSettings qhr set fp = do
+ #ifdef GHC_7_4
+@@ -408,6 +375,7 @@ strToExp s@(c:_)
+ | isUpper c = ConE $ mkName s
+ | otherwise = VarE $ mkName s
+ strToExp "" = error "strToExp on empty string"
++-}
+
+ -- | Checks for truth in the left value in each pair in the first argument. If
+ -- a true exists, then the corresponding right action is performed. Only the
+@@ -452,7 +420,7 @@ hamletUsedIdentifiers settings =
+ data HamletRuntimeRules = HamletRuntimeRules {
+ hrrI18n :: Bool
+ }
+-
++{-
+ hamletFileReloadWithSettings :: HamletRuntimeRules
+ -> HamletSettings -> FilePath -> Q Exp
+ hamletFileReloadWithSettings hrr settings fp = do
+@@ -479,7 +447,7 @@ hamletFileReloadWithSettings hrr settings fp = do
+ c VTUrlParam = [|EUrlParam|]
+ c VTMixin = [|\r -> EMixin $ \c -> r c|]
+ c VTMsg = [|EMsg|]
+-
++-}
+ -- move to Shakespeare.Base?
+ readFileUtf8 :: FilePath -> IO String
+ readFileUtf8 fp = fmap TL.unpack $ readUtf8File fp
+diff --git a/Text/Hamlet/Parse.hs b/Text/Hamlet/Parse.hs
+index b7e2954..1f14946 100644
+--- a/Text/Hamlet/Parse.hs
++++ b/Text/Hamlet/Parse.hs
+@@ -616,6 +616,7 @@ data NewlineStyle = NoNewlines -- ^ never add newlines
+ | DefaultNewlineStyle
+ deriving Show
+
++{-
+ instance Lift NewlineStyle where
+ lift NoNewlines = [|NoNewlines|]
+ lift NewlinesText = [|NewlinesText|]
+@@ -627,7 +628,7 @@ instance Lift (String -> CloseStyle) where
+
+ instance Lift HamletSettings where
+ lift (HamletSettings a b c d) = [|HamletSettings $(lift a) $(lift b) $(lift c) $(lift d)|]
+-
++-}
+
+ htmlEmptyTags :: Set String
+ htmlEmptyTags = Set.fromAscList
+--
+2.1.1
+
diff --git a/standalone/no-th/haskell-patches/hamlet_remove-TH.patch b/standalone/no-th/haskell-patches/hamlet_remove-TH.patch
deleted file mode 100644
index 04989b148..000000000
--- a/standalone/no-th/haskell-patches/hamlet_remove-TH.patch
+++ /dev/null
@@ -1,205 +0,0 @@
-From 60d7ac8aa1b3282a06ea7b17680dfc32c61fcbf6 Mon Sep 17 00:00:00 2001
-From: dummy <dummy@example.com>
-Date: Thu, 6 Mar 2014 23:19:40 +0000
-Subject: [PATCH] remove TH
-
----
- Text/Hamlet.hs | 86 +++++++++++++++++-----------------------------------
- Text/Hamlet/Parse.hs | 3 +-
- 2 files changed, 29 insertions(+), 60 deletions(-)
-
-diff --git a/Text/Hamlet.hs b/Text/Hamlet.hs
-index 9500ecb..ec8471a 100644
---- a/Text/Hamlet.hs
-+++ b/Text/Hamlet.hs
-@@ -11,36 +11,36 @@
- module Text.Hamlet
- ( -- * Plain HTML
- Html
-- , shamlet
-- , shamletFile
-- , xshamlet
-- , xshamletFile
-+ --, shamlet
-+ --, shamletFile
-+ --, xshamlet
-+ --, xshamletFile
- -- * Hamlet
- , HtmlUrl
-- , hamlet
-- , hamletFile
-- , hamletFileReload
-- , ihamletFileReload
-- , xhamlet
-- , xhamletFile
-+ --, hamlet
-+ --, hamletFile
-+ --, hamletFileReload
-+ --, ihamletFileReload
-+ --, xhamlet
-+ --, xhamletFile
- -- * I18N Hamlet
- , HtmlUrlI18n
-- , ihamlet
-- , ihamletFile
-+ --, ihamlet
-+ --, ihamletFile
- -- * Type classes
- , ToAttributes (..)
- -- * Internal, for making more
- , HamletSettings (..)
- , NewlineStyle (..)
-- , hamletWithSettings
-- , hamletFileWithSettings
-+ --, hamletWithSettings
-+ --, hamletFileWithSettings
- , defaultHamletSettings
- , xhtmlHamletSettings
-- , Env (..)
-- , HamletRules (..)
-- , hamletRules
-- , ihamletRules
-- , htmlRules
-+ --, Env (..)
-+ --, HamletRules (..)
-+ --, hamletRules
-+ --, ihamletRules
-+ --, htmlRules
- , CloseStyle (..)
- -- * Used by generated code
- , condH
-@@ -110,47 +110,9 @@ type HtmlUrl url = Render url -> Html
- -- | A function generating an 'Html' given a message translator and a URL rendering function.
- type HtmlUrlI18n msg url = Translate msg -> Render url -> Html
-
--docsToExp :: Env -> HamletRules -> Scope -> [Doc] -> Q Exp
--docsToExp env hr scope docs = do
-- exps <- mapM (docToExp env hr scope) docs
-- case exps of
-- [] -> [|return ()|]
-- [x] -> return x
-- _ -> return $ DoE $ map NoBindS exps
--
- unIdent :: Ident -> String
- unIdent (Ident s) = s
-
--bindingPattern :: Binding -> Q (Pat, [(Ident, Exp)])
--bindingPattern (BindAs i@(Ident s) b) = do
-- name <- newName s
-- (pattern, scope) <- bindingPattern b
-- return (AsP name pattern, (i, VarE name):scope)
--bindingPattern (BindVar i@(Ident s))
-- | all isDigit s = do
-- return (LitP $ IntegerL $ read s, [])
-- | otherwise = do
-- name <- newName s
-- return (VarP name, [(i, VarE name)])
--bindingPattern (BindTuple is) = do
-- (patterns, scopes) <- fmap unzip $ mapM bindingPattern is
-- return (TupP patterns, concat scopes)
--bindingPattern (BindList is) = do
-- (patterns, scopes) <- fmap unzip $ mapM bindingPattern is
-- return (ListP patterns, concat scopes)
--bindingPattern (BindConstr con is) = do
-- (patterns, scopes) <- fmap unzip $ mapM bindingPattern is
-- return (ConP (mkConName con) patterns, concat scopes)
--bindingPattern (BindRecord con fields wild) = do
-- let f (Ident field,b) =
-- do (p,s) <- bindingPattern b
-- return ((mkName field,p),s)
-- (patterns, scopes) <- fmap unzip $ mapM f fields
-- (patterns1, scopes1) <- if wild
-- then bindWildFields con $ map fst fields
-- else return ([],[])
-- return (RecP (mkConName con) (patterns++patterns1), concat scopes ++ scopes1)
--
- mkConName :: DataConstr -> Name
- mkConName = mkName . conToStr
-
-@@ -158,6 +120,7 @@ conToStr :: DataConstr -> String
- conToStr (DCUnqualified (Ident x)) = x
- conToStr (DCQualified (Module xs) (Ident x)) = intercalate "." $ xs ++ [x]
-
-+{-
- -- Wildcards bind all of the unbound fields to variables whose name
- -- matches the field name.
- --
-@@ -296,10 +259,12 @@ hamlet = hamletWithSettings hamletRules defaultHamletSettings
-
- xhamlet :: QuasiQuoter
- xhamlet = hamletWithSettings hamletRules xhtmlHamletSettings
-+-}
-
- asHtmlUrl :: HtmlUrl url -> HtmlUrl url
- asHtmlUrl = id
-
-+{-
- hamletRules :: Q HamletRules
- hamletRules = do
- i <- [|id|]
-@@ -360,6 +325,7 @@ hamletFromString :: Q HamletRules -> HamletSettings -> String -> Q Exp
- hamletFromString qhr set s = do
- hr <- qhr
- hrWithEnv hr $ \env -> docsToExp env hr [] $ docFromString set s
-+-}
-
- docFromString :: HamletSettings -> String -> [Doc]
- docFromString set s =
-@@ -367,6 +333,7 @@ docFromString set s =
- Error s' -> error s'
- Ok (_, d) -> d
-
-+{-
- hamletFileWithSettings :: Q HamletRules -> HamletSettings -> FilePath -> Q Exp
- hamletFileWithSettings qhr set fp = do
- #ifdef GHC_7_4
-@@ -408,6 +375,7 @@ strToExp s@(c:_)
- | isUpper c = ConE $ mkName s
- | otherwise = VarE $ mkName s
- strToExp "" = error "strToExp on empty string"
-+-}
-
- -- | Checks for truth in the left value in each pair in the first argument. If
- -- a true exists, then the corresponding right action is performed. Only the
-@@ -452,7 +420,7 @@ hamletUsedIdentifiers settings =
- data HamletRuntimeRules = HamletRuntimeRules {
- hrrI18n :: Bool
- }
--
-+{-
- hamletFileReloadWithSettings :: HamletRuntimeRules
- -> HamletSettings -> FilePath -> Q Exp
- hamletFileReloadWithSettings hrr settings fp = do
-@@ -479,7 +447,7 @@ hamletFileReloadWithSettings hrr settings fp = do
- c VTUrlParam = [|EUrlParam|]
- c VTMixin = [|\r -> EMixin $ \c -> r c|]
- c VTMsg = [|EMsg|]
--
-+-}
- -- move to Shakespeare.Base?
- readFileUtf8 :: FilePath -> IO String
- readFileUtf8 fp = fmap TL.unpack $ readUtf8File fp
-diff --git a/Text/Hamlet/Parse.hs b/Text/Hamlet/Parse.hs
-index b7e2954..1f14946 100644
---- a/Text/Hamlet/Parse.hs
-+++ b/Text/Hamlet/Parse.hs
-@@ -616,6 +616,7 @@ data NewlineStyle = NoNewlines -- ^ never add newlines
- | DefaultNewlineStyle
- deriving Show
-
-+{-
- instance Lift NewlineStyle where
- lift NoNewlines = [|NoNewlines|]
- lift NewlinesText = [|NewlinesText|]
-@@ -627,7 +628,7 @@ instance Lift (String -> CloseStyle) where
-
- instance Lift HamletSettings where
- lift (HamletSettings a b c d) = [|HamletSettings $(lift a) $(lift b) $(lift c) $(lift d)|]
--
-+-}
-
- htmlEmptyTags :: Set String
- htmlEmptyTags = Set.fromAscList
---
-1.9.0
-
diff --git a/standalone/no-th/haskell-patches/lens_no-TH.patch b/standalone/no-th/haskell-patches/lens_no-TH.patch
index 60600a375..bc453bfa1 100644
--- a/standalone/no-th/haskell-patches/lens_no-TH.patch
+++ b/standalone/no-th/haskell-patches/lens_no-TH.patch
@@ -1,21 +1,20 @@
-From 66fdbc0cb69036b61552a3bce7e995ea2a7f76c1 Mon Sep 17 00:00:00 2001
+From 10c9ade98b3ac2054947f411d77db2eb28896b9f Mon Sep 17 00:00:00 2001
From: dummy <dummy@example.com>
-Date: Fri, 7 Mar 2014 05:43:33 +0000
-Subject: [PATCH] TH
+Date: Thu, 16 Oct 2014 01:43:10 +0000
+Subject: [PATCH] avoid TH
---
- lens.cabal | 19 +------------------
- src/Control/Lens.hs | 8 ++------
- src/Control/Lens/Cons.hs | 2 --
- src/Control/Lens/Internal/Fold.hs | 2 --
- src/Control/Lens/Internal/Reflection.hs | 2 --
- src/Control/Lens/Operators.hs | 2 +-
- src/Control/Lens/Prism.hs | 2 --
- src/Control/Monad/Primitive/Lens.hs | 1 -
- 8 files changed, 4 insertions(+), 34 deletions(-)
+ lens.cabal | 17 +----------------
+ src/Control/Lens.hs | 8 ++------
+ src/Control/Lens/Cons.hs | 2 --
+ src/Control/Lens/Internal/Fold.hs | 2 --
+ src/Control/Lens/Operators.hs | 2 +-
+ src/Control/Lens/Prism.hs | 2 --
+ src/Control/Monad/Primitive/Lens.hs | 1 -
+ 7 files changed, 4 insertions(+), 30 deletions(-)
diff --git a/lens.cabal b/lens.cabal
-index 790a9d7..7cd3ff9 100644
+index 5388301..d7b02b9 100644
--- a/lens.cabal
+++ b/lens.cabal
@@ -10,7 +10,7 @@ stability: provisional
@@ -25,17 +24,9 @@ index 790a9d7..7cd3ff9 100644
-build-type: Custom
+build-type: Simple
-- build-tools: cpphs
- tested-with: GHC == 7.6.3
+ tested-with: GHC == 7.4.1, GHC == 7.4.2, GHC == 7.6.3, GHC == 7.8.1, GHC == 7.8.2
synopsis: Lenses, Folds and Traversals
-@@ -177,7 +177,6 @@ flag lib-Werror
-
- library
- build-depends:
-- aeson >= 0.7 && < 0.8,
- array >= 0.3.0.2 && < 0.6,
- base >= 4.3 && < 5,
- bifunctors >= 4 && < 5,
-@@ -216,7 +215,6 @@ library
+@@ -217,7 +217,6 @@ library
Control.Exception.Lens
Control.Lens
Control.Lens.Action
@@ -43,7 +34,23 @@ index 790a9d7..7cd3ff9 100644
Control.Lens.Combinators
Control.Lens.Cons
Control.Lens.Each
-@@ -251,22 +249,18 @@ library
+@@ -234,8 +233,6 @@ library
+ Control.Lens.Internal.Context
+ Control.Lens.Internal.Deque
+ Control.Lens.Internal.Exception
+- Control.Lens.Internal.FieldTH
+- Control.Lens.Internal.PrismTH
+ Control.Lens.Internal.Fold
+ Control.Lens.Internal.Getter
+ Control.Lens.Internal.Indexed
+@@ -247,25 +244,21 @@ library
+ Control.Lens.Internal.Reflection
+ Control.Lens.Internal.Review
+ Control.Lens.Internal.Setter
+- Control.Lens.Internal.TH
+ Control.Lens.Internal.Zoom
+ Control.Lens.Iso
+ Control.Lens.Lens
Control.Lens.Level
Control.Lens.Loupe
Control.Lens.Operators
@@ -62,11 +69,7 @@ index 790a9d7..7cd3ff9 100644
Control.Monad.Primitive.Lens
Control.Parallel.Strategies.Lens
Control.Seq.Lens
-- Data.Aeson.Lens
- Data.Array.Lens
- Data.Bits.Lens
- Data.ByteString.Lens
-@@ -289,17 +283,10 @@ library
+@@ -291,12 +284,8 @@ library
Data.Typeable.Lens
Data.Vector.Lens
Data.Vector.Generic.Lens
@@ -78,13 +81,8 @@ index 790a9d7..7cd3ff9 100644
- Language.Haskell.TH.Lens
Numeric.Lens
-- other-modules:
-- Control.Lens.Internal.TupleIxedTH
--
- if flag(safe)
- cpp-options: -DSAFE=1
-
-@@ -396,7 +383,6 @@ test-suite doctests
+ other-modules:
+@@ -403,7 +392,6 @@ test-suite doctests
deepseq,
doctest >= 0.9.1,
filepath,
@@ -92,7 +90,7 @@ index 790a9d7..7cd3ff9 100644
mtl,
nats,
parallel,
-@@ -434,7 +420,6 @@ benchmark plated
+@@ -441,7 +429,6 @@ benchmark plated
comonad,
criterion,
deepseq,
@@ -100,7 +98,7 @@ index 790a9d7..7cd3ff9 100644
lens,
transformers
-@@ -469,7 +454,6 @@ benchmark unsafe
+@@ -476,7 +463,6 @@ benchmark unsafe
comonads-fd,
criterion,
deepseq,
@@ -108,7 +106,7 @@ index 790a9d7..7cd3ff9 100644
lens,
transformers
-@@ -486,6 +470,5 @@ benchmark zipper
+@@ -493,6 +479,5 @@ benchmark zipper
comonads-fd,
criterion,
deepseq,
@@ -189,24 +187,11 @@ index ab09c6b..43aa905 100644
------------------------------------------------------------------------------
-- Folding
------------------------------------------------------------------------------
-diff --git a/src/Control/Lens/Internal/Reflection.hs b/src/Control/Lens/Internal/Reflection.hs
-index bf09f2c..c9e112f 100644
---- a/src/Control/Lens/Internal/Reflection.hs
-+++ b/src/Control/Lens/Internal/Reflection.hs
-@@ -64,8 +64,6 @@ import Data.Word
- import Data.Typeable
- import Data.Reflection
-
--{-# ANN module "HLint: ignore Avoid lambda" #-}
--
- class Typeable s => B s where
- reflectByte :: proxy s -> IntPtr
-
diff --git a/src/Control/Lens/Operators.hs b/src/Control/Lens/Operators.hs
-index 3e14c55..989eb92 100644
+index 9992e63..631e8e6 100644
--- a/src/Control/Lens/Operators.hs
+++ b/src/Control/Lens/Operators.hs
-@@ -110,7 +110,7 @@ module Control.Lens.Operators
+@@ -111,7 +111,7 @@ module Control.Lens.Operators
, (<#~)
, (<#=)
-- * "Control.Lens.Plated"
@@ -216,10 +201,10 @@ index 3e14c55..989eb92 100644
, ( # )
-- * "Control.Lens.Setter"
diff --git a/src/Control/Lens/Prism.hs b/src/Control/Lens/Prism.hs
-index 9e0bec7..0cf6737 100644
+index b75c870..c6c6596 100644
--- a/src/Control/Lens/Prism.hs
+++ b/src/Control/Lens/Prism.hs
-@@ -59,8 +59,6 @@ import Unsafe.Coerce
+@@ -61,8 +61,6 @@ import Unsafe.Coerce
import Data.Profunctor.Unsafe
#endif
@@ -241,5 +226,5 @@ index ee942c6..2f37134 100644
prim :: (PrimMonad m) => Iso' (m a) (State# (PrimState m) -> (# State# (PrimState m), a #))
prim = iso internal primitive
--
-1.9.0
+2.1.1
diff --git a/standalone/no-th/haskell-patches/optparse-applicative_remove-ANN.patch b/standalone/no-th/haskell-patches/optparse-applicative_remove-ANN.patch
new file mode 100644
index 000000000..1bb843524
--- /dev/null
+++ b/standalone/no-th/haskell-patches/optparse-applicative_remove-ANN.patch
@@ -0,0 +1,33 @@
+From b128590966d4946219e45e2efd88acf7a354abc2 Mon Sep 17 00:00:00 2001
+From: androidbuilder <androidbuilder@example.com>
+Date: Tue, 14 Oct 2014 02:28:02 +0000
+Subject: [PATCH] remove ANN
+
+---
+ Options/Applicative.hs | 2 --
+ Options/Applicative/Help/Core.hs | 2 --
+ 2 files changed, 4 deletions(-)
+
+diff --git a/Options/Applicative.hs b/Options/Applicative.hs
+index bd4129d..f412062 100644
+--- a/Options/Applicative.hs
++++ b/Options/Applicative.hs
+@@ -34,5 +34,3 @@ import Options.Applicative.Common
+ import Options.Applicative.Builder
+ import Options.Applicative.Builder.Completer
+ import Options.Applicative.Extra
+-
+-{-# ANN module "HLint: ignore Use import/export shortcut" #-}
+diff --git a/Options/Applicative/Help/Core.hs b/Options/Applicative/Help/Core.hs
+index 0a79169..3f1ce3f 100644
+--- a/Options/Applicative/Help/Core.hs
++++ b/Options/Applicative/Help/Core.hs
+@@ -139,5 +139,3 @@ parserUsage pprefs p progn = hsep
+ [ string "Usage:"
+ , string progn
+ , align (extractChunk (briefDesc pprefs p)) ]
+-
+-{-# ANN footerHelp "HLint: ignore Eta reduce" #-}
+--
+1.7.10.4
+
diff --git a/standalone/no-th/haskell-patches/persistent-template_stub-out.patch b/standalone/no-th/haskell-patches/persistent-template_stub-out.patch
index 29002eb32..f3ee63e06 100644
--- a/standalone/no-th/haskell-patches/persistent-template_stub-out.patch
+++ b/standalone/no-th/haskell-patches/persistent-template_stub-out.patch
@@ -1,25 +1,25 @@
-From 4b958f97bffdeedc0c946d5fdc9749d2cc566fcc Mon Sep 17 00:00:00 2001
+From e6542197f1da6984bb6cd3310dba77363dfab2d9 Mon Sep 17 00:00:00 2001
From: dummy <dummy@example.com>
-Date: Thu, 26 Dec 2013 15:54:37 -0400
+Date: Thu, 16 Oct 2014 01:51:02 +0000
Subject: [PATCH] stub out
---
- persistent-template.cabal | 2 +-
+ persistent-template.cabal | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/persistent-template.cabal b/persistent-template.cabal
-index c4aee68..7905278 100644
+index 59b4149..e11b418 100644
--- a/persistent-template.cabal
+++ b/persistent-template.cabal
-@@ -24,7 +24,7 @@ library
+@@ -26,7 +26,7 @@ library
, aeson
, monad-logger
, unordered-containers
- exposed-modules: Database.Persist.TH
-+ exposed-modules:
++ exposed-modules:
ghc-options: -Wall
if impl(ghc >= 7.4)
cpp-options: -DGHC_7_4
--
-1.7.10.4
+2.1.1
diff --git a/standalone/no-th/haskell-patches/persistent_1.1.5.1_0001-disable-TH.patch b/standalone/no-th/haskell-patches/persistent_1.1.5.1_0001-disable-TH.patch
index 7a66e1fd1..cd86ccd2d 100644
--- a/standalone/no-th/haskell-patches/persistent_1.1.5.1_0001-disable-TH.patch
+++ b/standalone/no-th/haskell-patches/persistent_1.1.5.1_0001-disable-TH.patch
@@ -1,14 +1,14 @@
-From efd18199fa245e51e6137036062ded8b0b26f78c Mon Sep 17 00:00:00 2001
+From aae3ace106cf26c931cc94c96fb6fbfe83f950f2 Mon Sep 17 00:00:00 2001
From: dummy <dummy@example.com>
-Date: Tue, 17 Dec 2013 18:08:22 +0000
-Subject: [PATCH] disable TH
+Date: Wed, 15 Oct 2014 17:05:37 +0000
+Subject: [PATCH] avoid TH
---
Database/Persist/Sql/Raw.hs | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/Database/Persist/Sql/Raw.hs b/Database/Persist/Sql/Raw.hs
-index 73189dd..d432790 100644
+index 3ac2ca9..bcc2011 100644
--- a/Database/Persist/Sql/Raw.hs
+++ b/Database/Persist/Sql/Raw.hs
@@ -11,7 +11,7 @@ import Data.IORef (writeIORef, readIORef, newIORef)
@@ -20,7 +20,7 @@ index 73189dd..d432790 100644
import Data.Int (Int64)
import Control.Monad.Trans.Class (lift)
import qualified Data.Text as T
-@@ -22,7 +22,6 @@ rawQuery :: (MonadSqlPersist m, MonadResource m)
+@@ -23,7 +23,6 @@ rawQuery :: (MonadSqlPersist m, MonadResource m)
-> [PersistValue]
-> Source m [PersistValue]
rawQuery sql vals = do
@@ -28,7 +28,7 @@ index 73189dd..d432790 100644
conn <- lift askSqlConn
bracketP
(getStmtConn conn sql)
-@@ -34,7 +33,6 @@ rawExecute x y = liftM (const ()) $ rawExecuteCount x y
+@@ -35,7 +34,6 @@ rawExecute x y = liftM (const ()) $ rawExecuteCount x y
rawExecuteCount :: MonadSqlPersist m => Text -> [PersistValue] -> m Int64
rawExecuteCount sql vals = do
@@ -37,5 +37,5 @@ index 73189dd..d432790 100644
res <- liftIO $ stmtExecute stmt vals
liftIO $ stmtReset stmt
--
-1.8.5.1
+2.1.1
diff --git a/standalone/no-th/haskell-patches/process-conduit_avoid-TH.patch b/standalone/no-th/haskell-patches/process-conduit_avoid-TH.patch
index 9298c6833..875119afd 100644
--- a/standalone/no-th/haskell-patches/process-conduit_avoid-TH.patch
+++ b/standalone/no-th/haskell-patches/process-conduit_avoid-TH.patch
@@ -1,24 +1,24 @@
-From c9f40fae5f7f44c7c28b243bf924606ef4f26700 Mon Sep 17 00:00:00 2001
-From: Joey Hess <joey@kitenet.net>
-Date: Wed, 18 Dec 2013 04:17:59 +0000
-Subject: [PATCH] avoid TH
+From ed77588c57704030a9d412dd49f11c172c6268ab Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Tue, 14 Oct 2014 03:46:03 +0000
+Subject: [PATCH] unused
---
- process-conduit.cabal | 1 -
+ process-conduit.cabal | 1 -
1 file changed, 1 deletion(-)
diff --git a/process-conduit.cabal b/process-conduit.cabal
-index c917d90..4410e2c 100644
+index 34bb168..2f137a8 100644
--- a/process-conduit.cabal
+++ b/process-conduit.cabal
-@@ -24,7 +24,6 @@ source-repository head
-
- library
- exposed-modules: Data.Conduit.Process
-- System.Process.QQ
-
- build-depends: base == 4.*
- , template-haskell >= 2.4
+@@ -22,7 +22,6 @@ source-repository head
+
+ library
+ exposed-modules: Data.Conduit.ProcessOld
+- System.Process.QQ
+
+ build-depends: base == 4.*
+ , template-haskell >= 2.4
--
-1.8.5.1
+1.7.10.4
diff --git a/standalone/no-th/haskell-patches/shakespeare-css_1.0.2_0002-expose-modules-used-by-TH.patch b/standalone/no-th/haskell-patches/shakespeare-css_1.0.2_0002-expose-modules-used-by-TH.patch
deleted file mode 100644
index 5bf57d527..000000000
--- a/standalone/no-th/haskell-patches/shakespeare-css_1.0.2_0002-expose-modules-used-by-TH.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 23e96f0d948e7a26febf1745a4c373faf579c8ee Mon Sep 17 00:00:00 2001
-From: Joey Hess <joey@kitenet.net>
-Date: Mon, 15 Apr 2013 16:32:31 -0400
-Subject: [PATCH] expose modules used by TH
-
----
- shakespeare-css.cabal | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/shakespeare-css.cabal b/shakespeare-css.cabal
-index de2497b..468353a 100644
---- a/shakespeare-css.cabal
-+++ b/shakespeare-css.cabal
-@@ -39,8 +39,8 @@ library
-
- exposed-modules: Text.Cassius
- Text.Lucius
-- other-modules: Text.MkSizeType
- Text.Css
-+ other-modules: Text.MkSizeType
- Text.IndentToBrace
- Text.CssCommon
- ghc-options: -Wall
---
-1.8.2.rc3
-
diff --git a/standalone/no-th/haskell-patches/shakespeare-css_1.0.2_0003-remove-more-TH.patch b/standalone/no-th/haskell-patches/shakespeare-css_1.0.2_0003-remove-more-TH.patch
deleted file mode 100644
index c57eb01c6..000000000
--- a/standalone/no-th/haskell-patches/shakespeare-css_1.0.2_0003-remove-more-TH.patch
+++ /dev/null
@@ -1,351 +0,0 @@
-From 8c9e29d3716bcbbfc3144cf1f8af0569212a5878 Mon Sep 17 00:00:00 2001
-From: dummy <dummy@example.com>
-Date: Tue, 17 Dec 2013 06:33:03 +0000
-Subject: [PATCH] remove more TH
-
----
- Text/Cassius.hs | 23 ---------
- Text/Css.hs | 151 ------------------------------------------------------
- Text/CssCommon.hs | 4 --
- Text/Lucius.hs | 46 +----------------
- 4 files changed, 2 insertions(+), 222 deletions(-)
-
-diff --git a/Text/Cassius.hs b/Text/Cassius.hs
-index ce05374..ae56b0a 100644
---- a/Text/Cassius.hs
-+++ b/Text/Cassius.hs
-@@ -13,10 +13,6 @@ module Text.Cassius
- , renderCss
- , renderCssUrl
- -- * Parsing
-- , cassius
-- , cassiusFile
-- , cassiusFileDebug
-- , cassiusFileReload
- -- * ToCss instances
- -- ** Color
- , Color (..)
-@@ -27,11 +23,8 @@ module Text.Cassius
- , AbsoluteUnit (..)
- , AbsoluteSize (..)
- , absoluteSize
-- , EmSize (..)
-- , ExSize (..)
- , PercentageSize (..)
- , percentageSize
-- , PixelSize (..)
- -- * Internal
- , cassiusUsedIdentifiers
- ) where
-@@ -42,25 +35,9 @@ import Language.Haskell.TH.Quote (QuasiQuoter (..))
- import Language.Haskell.TH.Syntax
- import qualified Data.Text.Lazy as TL
- import Text.CssCommon
--import Text.Lucius (lucius)
- import qualified Text.Lucius
- import Text.IndentToBrace (i2b)
-
--cassius :: QuasiQuoter
--cassius = QuasiQuoter { quoteExp = quoteExp lucius . i2b }
--
--cassiusFile :: FilePath -> Q Exp
--cassiusFile fp = do
--#ifdef GHC_7_4
-- qAddDependentFile fp
--#endif
-- contents <- fmap TL.unpack $ qRunIO $ readUtf8File fp
-- quoteExp cassius contents
--
--cassiusFileDebug, cassiusFileReload :: FilePath -> Q Exp
--cassiusFileDebug = cssFileDebug True [|Text.Lucius.parseTopLevels|] Text.Lucius.parseTopLevels
--cassiusFileReload = cassiusFileDebug
--
- -- | Determine which identifiers are used by the given template, useful for
- -- creating systems like yesod devel.
- cassiusUsedIdentifiers :: String -> [(Deref, VarType)]
-diff --git a/Text/Css.hs b/Text/Css.hs
-index fb06dd2..954e574 100644
---- a/Text/Css.hs
-+++ b/Text/Css.hs
-@@ -169,22 +169,6 @@ cssUsedIdentifiers toi2b parseBlocks s' =
- (scope, rest') = go rest
- go' (Attr k v) = k ++ v
-
--cssFileDebug :: Bool -- ^ perform the indent-to-brace conversion
-- -> Q Exp
-- -> Parser [TopLevel Unresolved]
-- -> FilePath
-- -> Q Exp
--cssFileDebug toi2b parseBlocks' parseBlocks fp = do
-- s <- fmap TL.unpack $ qRunIO $ readUtf8File fp
--#ifdef GHC_7_4
-- qAddDependentFile fp
--#endif
-- let vs = cssUsedIdentifiers toi2b parseBlocks s
-- c <- mapM vtToExp vs
-- cr <- [|cssRuntime toi2b|]
-- parseBlocks'' <- parseBlocks'
-- return $ cr `AppE` parseBlocks'' `AppE` (LitE $ StringL fp) `AppE` ListE c
--
- combineSelectors :: HasLeadingSpace
- -> [Contents]
- -> [Contents]
-@@ -290,18 +274,6 @@ cssRuntime toi2b parseBlocks fp cd render' = unsafePerformIO $ do
-
- addScope scope = map (DerefIdent . Ident *** CDPlain . fromString) scope ++ cd
-
--vtToExp :: (Deref, VarType) -> Q Exp
--vtToExp (d, vt) = do
-- d' <- lift d
-- c' <- c vt
-- return $ TupE [d', c' `AppE` derefToExp [] d]
-- where
-- c :: VarType -> Q Exp
-- c VTPlain = [|CDPlain . toCss|]
-- c VTUrl = [|CDUrl|]
-- c VTUrlParam = [|CDUrlParam|]
-- c VTMixin = [|CDMixin|]
--
- getVars :: Monad m => [(String, String)] -> Content -> m [(Deref, VarType)]
- getVars _ ContentRaw{} = return []
- getVars scope (ContentVar d) =
-@@ -345,111 +317,8 @@ compressBlock (Block x y blocks mixins) =
- cc (ContentRaw a:ContentRaw b:c) = cc $ ContentRaw (a ++ b) : c
- cc (a:b) = a : cc b
-
--blockToMixin :: Name
-- -> Scope
-- -> Block Unresolved
-- -> Q Exp
--blockToMixin r scope (Block _sel props subblocks mixins) =
-- [|Mixin
-- { mixinAttrs = concat
-- $ $(listE $ map go props)
-- : map mixinAttrs $mixinsE
-- -- FIXME too many complications to implement sublocks for now...
-- , mixinBlocks = [] -- foldr (.) id $(listE $ map subGo subblocks) []
-- }|]
-- {-
-- . foldr (.) id $(listE $ map subGo subblocks)
-- . (concatMap mixinBlocks $mixinsE ++)
-- |]
-- -}
-- where
-- mixinsE = return $ ListE $ map (derefToExp []) mixins
-- go (Attr x y) = conE 'Attr
-- `appE` (contentsToBuilder r scope x)
-- `appE` (contentsToBuilder r scope y)
-- subGo (Block sel' b c d) = blockToCss r scope $ Block sel' b c d
--
--blockToCss :: Name
-- -> Scope
-- -> Block Unresolved
-- -> Q Exp
--blockToCss r scope (Block sel props subblocks mixins) =
-- [|((Block
-- { blockSelector = $(selectorToBuilder r scope sel)
-- , blockAttrs = concat
-- $ $(listE $ map go props)
-- : map mixinAttrs $mixinsE
-- , blockBlocks = ()
-- , blockMixins = ()
-- } :: Block Resolved):)
-- . foldr (.) id $(listE $ map subGo subblocks)
-- . (concatMap mixinBlocks $mixinsE ++)
-- |]
-- where
-- mixinsE = return $ ListE $ map (derefToExp []) mixins
-- go (Attr x y) = conE 'Attr
-- `appE` (contentsToBuilder r scope x)
-- `appE` (contentsToBuilder r scope y)
-- subGo (hls, Block sel' b c d) =
-- blockToCss r scope $ Block sel'' b c d
-- where
-- sel'' = combineSelectors hls sel sel'
--
--selectorToBuilder :: Name -> Scope -> [Contents] -> Q Exp
--selectorToBuilder r scope sels =
-- contentsToBuilder r scope $ intercalate [ContentRaw ","] sels
--
--contentsToBuilder :: Name -> Scope -> [Content] -> Q Exp
--contentsToBuilder r scope contents =
-- appE [|mconcat|] $ listE $ map (contentToBuilder r scope) contents
--
--contentToBuilder :: Name -> Scope -> Content -> Q Exp
--contentToBuilder _ _ (ContentRaw x) =
-- [|fromText . pack|] `appE` litE (StringL x)
--contentToBuilder _ scope (ContentVar d) =
-- case d of
-- DerefIdent (Ident s)
-- | Just val <- lookup s scope -> [|fromText . pack|] `appE` litE (StringL val)
-- _ -> [|toCss|] `appE` return (derefToExp [] d)
--contentToBuilder r _ (ContentUrl u) =
-- [|fromText|] `appE`
-- (varE r `appE` return (derefToExp [] u) `appE` listE [])
--contentToBuilder r _ (ContentUrlParam u) =
-- [|fromText|] `appE`
-- ([|uncurry|] `appE` varE r `appE` return (derefToExp [] u))
--contentToBuilder _ _ ContentMixin{} = error "contentToBuilder on ContentMixin"
--
- type Scope = [(String, String)]
-
--topLevelsToCassius :: [TopLevel Unresolved]
-- -> Q Exp
--topLevelsToCassius a = do
-- r <- newName "_render"
-- lamE [varP r] $ appE [|CssNoWhitespace . foldr ($) []|] $ fmap ListE $ go r [] a
-- where
-- go _ _ [] = return []
-- go r scope (TopBlock b:rest) = do
-- e <- [|(++) $ map TopBlock ($(blockToCss r scope b) [])|]
-- es <- go r scope rest
-- return $ e : es
-- go r scope (TopAtBlock name s b:rest) = do
-- let s' = contentsToBuilder r scope s
-- e <- [|(:) $ TopAtBlock $(lift name) $(s') $(blocksToCassius r scope b)|]
-- es <- go r scope rest
-- return $ e : es
-- go r scope (TopAtDecl dec cs:rest) = do
-- e <- [|(:) $ TopAtDecl $(lift dec) $(contentsToBuilder r scope cs)|]
-- es <- go r scope rest
-- return $ e : es
-- go r scope (TopVar k v:rest) = go r ((k, v) : scope) rest
--
--blocksToCassius :: Name
-- -> Scope
-- -> [Block Unresolved]
-- -> Q Exp
--blocksToCassius r scope a = do
-- appE [|foldr ($) []|] $ listE $ map (blockToCss r scope) a
--
- renderCss :: Css -> TL.Text
- renderCss css =
- toLazyText $ mconcat $ map go tops
-@@ -518,23 +387,3 @@ renderBlock haveWhiteSpace indent (Block sel attrs () ())
- | haveWhiteSpace = fromString ";\n"
- | otherwise = singleton ';'
-
--instance Lift Mixin where
-- lift (Mixin a b) = [|Mixin a b|]
--instance Lift (Attr Unresolved) where
-- lift (Attr k v) = [|Attr k v :: Attr Unresolved |]
--instance Lift (Attr Resolved) where
-- lift (Attr k v) = [|Attr $(liftBuilder k) $(liftBuilder v) :: Attr Resolved |]
--
--liftBuilder :: Builder -> Q Exp
--liftBuilder b = [|fromText $ pack $(lift $ TL.unpack $ toLazyText b)|]
--
--instance Lift Content where
-- lift (ContentRaw s) = [|ContentRaw s|]
-- lift (ContentVar d) = [|ContentVar d|]
-- lift (ContentUrl d) = [|ContentUrl d|]
-- lift (ContentUrlParam d) = [|ContentUrlParam d|]
-- lift (ContentMixin m) = [|ContentMixin m|]
--instance Lift (Block Unresolved) where
-- lift (Block a b c d) = [|Block a b c d|]
--instance Lift (Block Resolved) where
-- lift (Block a b () ()) = [|Block $(liftBuilder a) b () ()|]
-diff --git a/Text/CssCommon.hs b/Text/CssCommon.hs
-index 719e0a8..8c40e8c 100644
---- a/Text/CssCommon.hs
-+++ b/Text/CssCommon.hs
-@@ -1,4 +1,3 @@
--{-# LANGUAGE TemplateHaskell #-}
- {-# LANGUAGE GeneralizedNewtypeDeriving #-}
- {-# LANGUAGE FlexibleInstances #-}
- {-# LANGUAGE CPP #-}
-@@ -156,6 +155,3 @@ showSize :: Rational -> String -> String
- showSize value' unit = printf "%f" value ++ unit
- where value = fromRational value' :: Double
-
--mkSizeType "EmSize" "em"
--mkSizeType "ExSize" "ex"
--mkSizeType "PixelSize" "px"
-diff --git a/Text/Lucius.hs b/Text/Lucius.hs
-index c2c4352..8b2bb9c 100644
---- a/Text/Lucius.hs
-+++ b/Text/Lucius.hs
-@@ -8,13 +8,9 @@
- {-# OPTIONS_GHC -fno-warn-missing-fields #-}
- module Text.Lucius
- ( -- * Parsing
-- lucius
-- , luciusFile
-- , luciusFileDebug
-- , luciusFileReload
- -- ** Mixins
-- , luciusMixin
-- , Mixin
-+ -- luciusMixin
-+ Mixin
- -- ** Runtime
- , luciusRT
- , luciusRT'
-@@ -40,11 +36,8 @@ module Text.Lucius
- , AbsoluteUnit (..)
- , AbsoluteSize (..)
- , absoluteSize
-- , EmSize (..)
-- , ExSize (..)
- , PercentageSize (..)
- , percentageSize
-- , PixelSize (..)
- -- * Internal
- , parseTopLevels
- , luciusUsedIdentifiers
-@@ -66,18 +59,6 @@ import Data.Monoid (mconcat)
- import Data.List (isSuffixOf)
- import Control.Arrow (second)
-
---- |
----
---- >>> renderCss ([lucius|foo{bar:baz}|] undefined)
---- "foo{bar:baz}"
--lucius :: QuasiQuoter
--lucius = QuasiQuoter { quoteExp = luciusFromString }
--
--luciusFromString :: String -> Q Exp
--luciusFromString s =
-- topLevelsToCassius
-- $ either (error . show) id $ parse parseTopLevels s s
--
- whiteSpace :: Parser ()
- whiteSpace = many whiteSpace1 >> return ()
-
-@@ -217,17 +198,6 @@ parseComment = do
- _ <- manyTill anyChar $ try $ string "*/"
- return $ ContentRaw ""
-
--luciusFile :: FilePath -> Q Exp
--luciusFile fp = do
--#ifdef GHC_7_4
-- qAddDependentFile fp
--#endif
-- contents <- fmap TL.unpack $ qRunIO $ readUtf8File fp
-- luciusFromString contents
--
--luciusFileDebug, luciusFileReload :: FilePath -> Q Exp
--luciusFileDebug = cssFileDebug False [|parseTopLevels|] parseTopLevels
--luciusFileReload = luciusFileDebug
-
- parseTopLevels :: Parser [TopLevel Unresolved]
- parseTopLevels =
-@@ -376,15 +346,3 @@ luciusRTMinified tl scope = either Left (Right . renderCss . CssNoWhitespace) $
- -- creating systems like yesod devel.
- luciusUsedIdentifiers :: String -> [(Deref, VarType)]
- luciusUsedIdentifiers = cssUsedIdentifiers False parseTopLevels
--
--luciusMixin :: QuasiQuoter
--luciusMixin = QuasiQuoter { quoteExp = luciusMixinFromString }
--
--luciusMixinFromString :: String -> Q Exp
--luciusMixinFromString s' = do
-- r <- newName "_render"
-- case fmap compressBlock $ parse parseBlock s s of
-- Left e -> error $ show e
-- Right block -> blockToMixin r [] block
-- where
-- s = concat ["mixin{", s', "}"]
---
-1.8.5.1
-
diff --git a/standalone/no-th/haskell-patches/shakespeare-css_remove_TH.patch b/standalone/no-th/haskell-patches/shakespeare-css_remove_TH.patch
new file mode 100644
index 000000000..82e2c6420
--- /dev/null
+++ b/standalone/no-th/haskell-patches/shakespeare-css_remove_TH.patch
@@ -0,0 +1,366 @@
+From 657fa7135bbcf3d5adb3cc0032e09887dd80a2a7 Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Thu, 16 Oct 2014 02:05:14 +0000
+Subject: [PATCH] hack TH
+
+---
+ Text/Cassius.hs | 23 --------
+ Text/Css.hs | 151 --------------------------------------------------
+ Text/CssCommon.hs | 4 --
+ Text/Lucius.hs | 46 +--------------
+ shakespeare-css.cabal | 2 +-
+ 5 files changed, 3 insertions(+), 223 deletions(-)
+
+diff --git a/Text/Cassius.hs b/Text/Cassius.hs
+index 91fc90f..c515807 100644
+--- a/Text/Cassius.hs
++++ b/Text/Cassius.hs
+@@ -13,10 +13,6 @@ module Text.Cassius
+ , renderCss
+ , renderCssUrl
+ -- * Parsing
+- , cassius
+- , cassiusFile
+- , cassiusFileDebug
+- , cassiusFileReload
+ -- * ToCss instances
+ -- ** Color
+ , Color (..)
+@@ -27,11 +23,8 @@ module Text.Cassius
+ , AbsoluteUnit (..)
+ , AbsoluteSize (..)
+ , absoluteSize
+- , EmSize (..)
+- , ExSize (..)
+ , PercentageSize (..)
+ , percentageSize
+- , PixelSize (..)
+ -- * Internal
+ , cassiusUsedIdentifiers
+ ) where
+@@ -43,25 +36,9 @@ import Language.Haskell.TH.Quote (QuasiQuoter (..))
+ import Language.Haskell.TH.Syntax
+ import qualified Data.Text.Lazy as TL
+ import Text.CssCommon
+-import Text.Lucius (lucius)
+ import qualified Text.Lucius
+ import Text.IndentToBrace (i2b)
+
+-cassius :: QuasiQuoter
+-cassius = QuasiQuoter { quoteExp = quoteExp lucius . i2b }
+-
+-cassiusFile :: FilePath -> Q Exp
+-cassiusFile fp = do
+-#ifdef GHC_7_4
+- qAddDependentFile fp
+-#endif
+- contents <- fmap TL.unpack $ qRunIO $ readUtf8File fp
+- quoteExp cassius contents
+-
+-cassiusFileDebug, cassiusFileReload :: FilePath -> Q Exp
+-cassiusFileDebug = cssFileDebug True [|Text.Lucius.parseTopLevels|] Text.Lucius.parseTopLevels
+-cassiusFileReload = cassiusFileDebug
+-
+ -- | Determine which identifiers are used by the given template, useful for
+ -- creating systems like yesod devel.
+ cassiusUsedIdentifiers :: String -> [(Deref, VarType)]
+diff --git a/Text/Css.hs b/Text/Css.hs
+index 75dc549..20c206c 100644
+--- a/Text/Css.hs
++++ b/Text/Css.hs
+@@ -166,22 +166,6 @@ cssUsedIdentifiers toi2b parseBlocks s' =
+ (scope, rest') = go rest
+ go' (Attr k v) = k ++ v
+
+-cssFileDebug :: Bool -- ^ perform the indent-to-brace conversion
+- -> Q Exp
+- -> Parser [TopLevel Unresolved]
+- -> FilePath
+- -> Q Exp
+-cssFileDebug toi2b parseBlocks' parseBlocks fp = do
+- s <- fmap TL.unpack $ qRunIO $ readUtf8File fp
+-#ifdef GHC_7_4
+- qAddDependentFile fp
+-#endif
+- let vs = cssUsedIdentifiers toi2b parseBlocks s
+- c <- mapM vtToExp vs
+- cr <- [|cssRuntime toi2b|]
+- parseBlocks'' <- parseBlocks'
+- return $ cr `AppE` parseBlocks'' `AppE` (LitE $ StringL fp) `AppE` ListE c
+-
+ combineSelectors :: HasLeadingSpace
+ -> [Contents]
+ -> [Contents]
+@@ -287,18 +271,6 @@ cssRuntime toi2b parseBlocks fp cd render' = unsafePerformIO $ do
+
+ addScope scope = map (DerefIdent . Ident *** CDPlain . fromString) scope ++ cd
+
+-vtToExp :: (Deref, VarType) -> Q Exp
+-vtToExp (d, vt) = do
+- d' <- lift d
+- c' <- c vt
+- return $ TupE [d', c' `AppE` derefToExp [] d]
+- where
+- c :: VarType -> Q Exp
+- c VTPlain = [|CDPlain . toCss|]
+- c VTUrl = [|CDUrl|]
+- c VTUrlParam = [|CDUrlParam|]
+- c VTMixin = [|CDMixin|]
+-
+ getVars :: Monad m => [(String, String)] -> Content -> m [(Deref, VarType)]
+ getVars _ ContentRaw{} = return []
+ getVars scope (ContentVar d) =
+@@ -342,111 +314,8 @@ compressBlock (Block x y blocks mixins) =
+ cc (ContentRaw a:ContentRaw b:c) = cc $ ContentRaw (a ++ b) : c
+ cc (a:b) = a : cc b
+
+-blockToMixin :: Name
+- -> Scope
+- -> Block Unresolved
+- -> Q Exp
+-blockToMixin r scope (Block _sel props subblocks mixins) =
+- [|Mixin
+- { mixinAttrs = concat
+- $ $(listE $ map go props)
+- : map mixinAttrs $mixinsE
+- -- FIXME too many complications to implement sublocks for now...
+- , mixinBlocks = [] -- foldr (.) id $(listE $ map subGo subblocks) []
+- }|]
+- {-
+- . foldr (.) id $(listE $ map subGo subblocks)
+- . (concatMap mixinBlocks $mixinsE ++)
+- |]
+- -}
+- where
+- mixinsE = return $ ListE $ map (derefToExp []) mixins
+- go (Attr x y) = conE 'Attr
+- `appE` (contentsToBuilder r scope x)
+- `appE` (contentsToBuilder r scope y)
+- subGo (Block sel' b c d) = blockToCss r scope $ Block sel' b c d
+-
+-blockToCss :: Name
+- -> Scope
+- -> Block Unresolved
+- -> Q Exp
+-blockToCss r scope (Block sel props subblocks mixins) =
+- [|((Block
+- { blockSelector = $(selectorToBuilder r scope sel)
+- , blockAttrs = concat
+- $ $(listE $ map go props)
+- : map mixinAttrs $mixinsE
+- , blockBlocks = ()
+- , blockMixins = ()
+- } :: Block Resolved):)
+- . foldr (.) id $(listE $ map subGo subblocks)
+- . (concatMap mixinBlocks $mixinsE ++)
+- |]
+- where
+- mixinsE = return $ ListE $ map (derefToExp []) mixins
+- go (Attr x y) = conE 'Attr
+- `appE` (contentsToBuilder r scope x)
+- `appE` (contentsToBuilder r scope y)
+- subGo (hls, Block sel' b c d) =
+- blockToCss r scope $ Block sel'' b c d
+- where
+- sel'' = combineSelectors hls sel sel'
+-
+-selectorToBuilder :: Name -> Scope -> [Contents] -> Q Exp
+-selectorToBuilder r scope sels =
+- contentsToBuilder r scope $ intercalate [ContentRaw ","] sels
+-
+-contentsToBuilder :: Name -> Scope -> [Content] -> Q Exp
+-contentsToBuilder r scope contents =
+- appE [|mconcat|] $ listE $ map (contentToBuilder r scope) contents
+-
+-contentToBuilder :: Name -> Scope -> Content -> Q Exp
+-contentToBuilder _ _ (ContentRaw x) =
+- [|fromText . pack|] `appE` litE (StringL x)
+-contentToBuilder _ scope (ContentVar d) =
+- case d of
+- DerefIdent (Ident s)
+- | Just val <- lookup s scope -> [|fromText . pack|] `appE` litE (StringL val)
+- _ -> [|toCss|] `appE` return (derefToExp [] d)
+-contentToBuilder r _ (ContentUrl u) =
+- [|fromText|] `appE`
+- (varE r `appE` return (derefToExp [] u) `appE` listE [])
+-contentToBuilder r _ (ContentUrlParam u) =
+- [|fromText|] `appE`
+- ([|uncurry|] `appE` varE r `appE` return (derefToExp [] u))
+-contentToBuilder _ _ ContentMixin{} = error "contentToBuilder on ContentMixin"
+-
+ type Scope = [(String, String)]
+
+-topLevelsToCassius :: [TopLevel Unresolved]
+- -> Q Exp
+-topLevelsToCassius a = do
+- r <- newName "_render"
+- lamE [varP r] $ appE [|CssNoWhitespace . foldr ($) []|] $ fmap ListE $ go r [] a
+- where
+- go _ _ [] = return []
+- go r scope (TopBlock b:rest) = do
+- e <- [|(++) $ map TopBlock ($(blockToCss r scope b) [])|]
+- es <- go r scope rest
+- return $ e : es
+- go r scope (TopAtBlock name s b:rest) = do
+- let s' = contentsToBuilder r scope s
+- e <- [|(:) $ TopAtBlock $(lift name) $(s') $(blocksToCassius r scope b)|]
+- es <- go r scope rest
+- return $ e : es
+- go r scope (TopAtDecl dec cs:rest) = do
+- e <- [|(:) $ TopAtDecl $(lift dec) $(contentsToBuilder r scope cs)|]
+- es <- go r scope rest
+- return $ e : es
+- go r scope (TopVar k v:rest) = go r ((k, v) : scope) rest
+-
+-blocksToCassius :: Name
+- -> Scope
+- -> [Block Unresolved]
+- -> Q Exp
+-blocksToCassius r scope a = do
+- appE [|foldr ($) []|] $ listE $ map (blockToCss r scope) a
+-
+ renderCss :: Css -> TL.Text
+ renderCss css =
+ toLazyText $ mconcat $ map go tops
+@@ -515,23 +384,3 @@ renderBlock haveWhiteSpace indent (Block sel attrs () ())
+ | haveWhiteSpace = fromString ";\n"
+ | otherwise = singleton ';'
+
+-instance Lift Mixin where
+- lift (Mixin a b) = [|Mixin a b|]
+-instance Lift (Attr Unresolved) where
+- lift (Attr k v) = [|Attr k v :: Attr Unresolved |]
+-instance Lift (Attr Resolved) where
+- lift (Attr k v) = [|Attr $(liftBuilder k) $(liftBuilder v) :: Attr Resolved |]
+-
+-liftBuilder :: Builder -> Q Exp
+-liftBuilder b = [|fromText $ pack $(lift $ TL.unpack $ toLazyText b)|]
+-
+-instance Lift Content where
+- lift (ContentRaw s) = [|ContentRaw s|]
+- lift (ContentVar d) = [|ContentVar d|]
+- lift (ContentUrl d) = [|ContentUrl d|]
+- lift (ContentUrlParam d) = [|ContentUrlParam d|]
+- lift (ContentMixin m) = [|ContentMixin m|]
+-instance Lift (Block Unresolved) where
+- lift (Block a b c d) = [|Block a b c d|]
+-instance Lift (Block Resolved) where
+- lift (Block a b () ()) = [|Block $(liftBuilder a) b () ()|]
+diff --git a/Text/CssCommon.hs b/Text/CssCommon.hs
+index 719e0a8..8c40e8c 100644
+--- a/Text/CssCommon.hs
++++ b/Text/CssCommon.hs
+@@ -1,4 +1,3 @@
+-{-# LANGUAGE TemplateHaskell #-}
+ {-# LANGUAGE GeneralizedNewtypeDeriving #-}
+ {-# LANGUAGE FlexibleInstances #-}
+ {-# LANGUAGE CPP #-}
+@@ -156,6 +155,3 @@ showSize :: Rational -> String -> String
+ showSize value' unit = printf "%f" value ++ unit
+ where value = fromRational value' :: Double
+
+-mkSizeType "EmSize" "em"
+-mkSizeType "ExSize" "ex"
+-mkSizeType "PixelSize" "px"
+diff --git a/Text/Lucius.hs b/Text/Lucius.hs
+index 346883d..f38492b 100644
+--- a/Text/Lucius.hs
++++ b/Text/Lucius.hs
+@@ -8,13 +8,9 @@
+ {-# OPTIONS_GHC -fno-warn-missing-fields #-}
+ module Text.Lucius
+ ( -- * Parsing
+- lucius
+- , luciusFile
+- , luciusFileDebug
+- , luciusFileReload
+ -- ** Mixins
+- , luciusMixin
+- , Mixin
++ -- luciusMixin
++ Mixin
+ -- ** Runtime
+ , luciusRT
+ , luciusRT'
+@@ -40,11 +36,8 @@ module Text.Lucius
+ , AbsoluteUnit (..)
+ , AbsoluteSize (..)
+ , absoluteSize
+- , EmSize (..)
+- , ExSize (..)
+ , PercentageSize (..)
+ , percentageSize
+- , PixelSize (..)
+ -- * Internal
+ , parseTopLevels
+ , luciusUsedIdentifiers
+@@ -67,18 +60,6 @@ import Data.List (isSuffixOf)
+ import Control.Arrow (second)
+ import Text.Shakespeare (VarType)
+
+--- |
+---
+--- >>> renderCss ([lucius|foo{bar:baz}|] undefined)
+--- "foo{bar:baz}"
+-lucius :: QuasiQuoter
+-lucius = QuasiQuoter { quoteExp = luciusFromString }
+-
+-luciusFromString :: String -> Q Exp
+-luciusFromString s =
+- topLevelsToCassius
+- $ either (error . show) id $ parse parseTopLevels s s
+-
+ whiteSpace :: Parser ()
+ whiteSpace = many whiteSpace1 >> return ()
+
+@@ -218,17 +199,6 @@ parseComment = do
+ _ <- manyTill anyChar $ try $ string "*/"
+ return $ ContentRaw ""
+
+-luciusFile :: FilePath -> Q Exp
+-luciusFile fp = do
+-#ifdef GHC_7_4
+- qAddDependentFile fp
+-#endif
+- contents <- fmap TL.unpack $ qRunIO $ readUtf8File fp
+- luciusFromString contents
+-
+-luciusFileDebug, luciusFileReload :: FilePath -> Q Exp
+-luciusFileDebug = cssFileDebug False [|parseTopLevels|] parseTopLevels
+-luciusFileReload = luciusFileDebug
+
+ parseTopLevels :: Parser [TopLevel Unresolved]
+ parseTopLevels =
+@@ -377,15 +347,3 @@ luciusRTMinified tl scope = either Left (Right . renderCss . CssNoWhitespace) $
+ -- creating systems like yesod devel.
+ luciusUsedIdentifiers :: String -> [(Deref, VarType)]
+ luciusUsedIdentifiers = cssUsedIdentifiers False parseTopLevels
+-
+-luciusMixin :: QuasiQuoter
+-luciusMixin = QuasiQuoter { quoteExp = luciusMixinFromString }
+-
+-luciusMixinFromString :: String -> Q Exp
+-luciusMixinFromString s' = do
+- r <- newName "_render"
+- case fmap compressBlock $ parse parseBlock s s of
+- Left e -> error $ show e
+- Right block -> blockToMixin r [] block
+- where
+- s = concat ["mixin{", s', "}"]
+diff --git a/shakespeare-css.cabal b/shakespeare-css.cabal
+index 2d3b25a..cc0553c 100644
+--- a/shakespeare-css.cabal
++++ b/shakespeare-css.cabal
+@@ -35,8 +35,8 @@ library
+
+ exposed-modules: Text.Cassius
+ Text.Lucius
+- other-modules: Text.MkSizeType
+ Text.Css
++ other-modules: Text.MkSizeType
+ Text.IndentToBrace
+ Text.CssCommon
+ ghc-options: -Wall
+--
+2.1.1
+
diff --git a/standalone/no-th/haskell-patches/shakespeare-i18n_0001-remove-TH.patch b/standalone/no-th/haskell-patches/shakespeare-i18n_0001-remove-TH.patch
deleted file mode 100644
index 3c6924039..000000000
--- a/standalone/no-th/haskell-patches/shakespeare-i18n_0001-remove-TH.patch
+++ /dev/null
@@ -1,215 +0,0 @@
-From 57ad7d1512a3144fd0b00f9796d5fd9e0ea86852 Mon Sep 17 00:00:00 2001
-From: Joey Hess <joey@kitenet.net>
-Date: Tue, 17 Dec 2013 16:30:59 +0000
-Subject: [PATCH] remove TH
-
----
- Text/Shakespeare/I18N.hs | 178 ++---------------------------------------------
- 1 file changed, 4 insertions(+), 174 deletions(-)
-
-diff --git a/Text/Shakespeare/I18N.hs b/Text/Shakespeare/I18N.hs
-index 2077914..2289214 100644
---- a/Text/Shakespeare/I18N.hs
-+++ b/Text/Shakespeare/I18N.hs
-@@ -51,10 +51,10 @@
- --
- -- You can also adapt those instructions for use with other systems.
- module Text.Shakespeare.I18N
-- ( mkMessage
-- , mkMessageFor
-- , mkMessageVariant
-- , RenderMessage (..)
-+ --( mkMessage
-+ --, mkMessageFor
-+ ---, mkMessageVariant
-+ ( RenderMessage (..)
- , ToMessage (..)
- , SomeMessage (..)
- , Lang
-@@ -105,143 +105,6 @@ instance RenderMessage master Text where
- -- | an RFC1766 / ISO 639-1 language code (eg, @fr@, @en-GB@, etc).
- type Lang = Text
-
---- |generate translations from translation files
----
---- This function will:
----
---- 1. look in the supplied subdirectory for files ending in @.msg@
----
---- 2. generate a type based on the constructors found
----
---- 3. create a 'RenderMessage' instance
----
--mkMessage :: String -- ^ base name to use for translation type
-- -> FilePath -- ^ subdirectory which contains the translation files
-- -> Lang -- ^ default translation language
-- -> Q [Dec]
--mkMessage dt folder lang =
-- mkMessageCommon True "Msg" "Message" dt dt folder lang
--
--
---- | create 'RenderMessage' instance for an existing data-type
--mkMessageFor :: String -- ^ master translation data type
-- -> String -- ^ existing type to add translations for
-- -> FilePath -- ^ path to translation folder
-- -> Lang -- ^ default language
-- -> Q [Dec]
--mkMessageFor master dt folder lang = mkMessageCommon False "" "" master dt folder lang
--
---- | create an additional set of translations for a type created by `mkMessage`
--mkMessageVariant :: String -- ^ master translation data type
-- -> String -- ^ existing type to add translations for
-- -> FilePath -- ^ path to translation folder
-- -> Lang -- ^ default language
-- -> Q [Dec]
--mkMessageVariant master dt folder lang = mkMessageCommon False "Msg" "Message" master dt folder lang
--
---- |used by 'mkMessage' and 'mkMessageFor' to generate a 'RenderMessage' and possibly a message data type
--mkMessageCommon :: Bool -- ^ generate a new datatype from the constructors found in the .msg files
-- -> String -- ^ string to append to constructor names
-- -> String -- ^ string to append to datatype name
-- -> String -- ^ base name of master datatype
-- -> String -- ^ base name of translation datatype
-- -> FilePath -- ^ path to translation folder
-- -> Lang -- ^ default lang
-- -> Q [Dec]
--mkMessageCommon genType prefix postfix master dt folder lang = do
-- files <- qRunIO $ getDirectoryContents folder
-- (_files', contents) <- qRunIO $ fmap (unzip . catMaybes) $ mapM (loadLang folder) files
--#ifdef GHC_7_4
-- mapM_ qAddDependentFile _files'
--#endif
-- sdef <-
-- case lookup lang contents of
-- Nothing -> error $ "Did not find main language file: " ++ unpack lang
-- Just def -> toSDefs def
-- mapM_ (checkDef sdef) $ map snd contents
-- let mname = mkName $ dt ++ postfix
-- c1 <- fmap concat $ mapM (toClauses prefix dt) contents
-- c2 <- mapM (sToClause prefix dt) sdef
-- c3 <- defClause
-- return $
-- ( if genType
-- then ((DataD [] mname [] (map (toCon dt) sdef) []) :)
-- else id)
-- [ InstanceD
-- []
-- (ConT ''RenderMessage `AppT` (ConT $ mkName master) `AppT` ConT mname)
-- [ FunD (mkName "renderMessage") $ c1 ++ c2 ++ [c3]
-- ]
-- ]
--
--toClauses :: String -> String -> (Lang, [Def]) -> Q [Clause]
--toClauses prefix dt (lang, defs) =
-- mapM go defs
-- where
-- go def = do
-- a <- newName "lang"
-- (pat, bod) <- mkBody dt (prefix ++ constr def) (map fst $ vars def) (content def)
-- guard <- fmap NormalG [|$(return $ VarE a) == pack $(lift $ unpack lang)|]
-- return $ Clause
-- [WildP, ConP (mkName ":") [VarP a, WildP], pat]
-- (GuardedB [(guard, bod)])
-- []
--
--mkBody :: String -- ^ datatype
-- -> String -- ^ constructor
-- -> [String] -- ^ variable names
-- -> [Content]
-- -> Q (Pat, Exp)
--mkBody dt cs vs ct = do
-- vp <- mapM go vs
-- let pat = RecP (mkName cs) (map (varName dt *** VarP) vp)
-- let ct' = map (fixVars vp) ct
-- pack' <- [|Data.Text.pack|]
-- tomsg <- [|toMessage|]
-- let ct'' = map (toH pack' tomsg) ct'
-- mapp <- [|mappend|]
-- let app a b = InfixE (Just a) mapp (Just b)
-- e <-
-- case ct'' of
-- [] -> [|mempty|]
-- [x] -> return x
-- (x:xs) -> return $ foldl' app x xs
-- return (pat, e)
-- where
-- toH pack' _ (Raw s) = pack' `AppE` SigE (LitE (StringL s)) (ConT ''String)
-- toH _ tomsg (Var d) = tomsg `AppE` derefToExp [] d
-- go x = do
-- let y = mkName $ '_' : x
-- return (x, y)
-- fixVars vp (Var d) = Var $ fixDeref vp d
-- fixVars _ (Raw s) = Raw s
-- fixDeref vp (DerefIdent (Ident i)) = DerefIdent $ Ident $ fixIdent vp i
-- fixDeref vp (DerefBranch a b) = DerefBranch (fixDeref vp a) (fixDeref vp b)
-- fixDeref _ d = d
-- fixIdent vp i =
-- case lookup i vp of
-- Nothing -> i
-- Just y -> nameBase y
--
--sToClause :: String -> String -> SDef -> Q Clause
--sToClause prefix dt sdef = do
-- (pat, bod) <- mkBody dt (prefix ++ sconstr sdef) (map fst $ svars sdef) (scontent sdef)
-- return $ Clause
-- [WildP, ConP (mkName "[]") [], pat]
-- (NormalB bod)
-- []
--
--defClause :: Q Clause
--defClause = do
-- a <- newName "sub"
-- c <- newName "langs"
-- d <- newName "msg"
-- rm <- [|renderMessage|]
-- return $ Clause
-- [VarP a, ConP (mkName ":") [WildP, VarP c], VarP d]
-- (NormalB $ rm `AppE` VarE a `AppE` VarE c `AppE` VarE d)
-- []
--
- toCon :: String -> SDef -> Con
- toCon dt (SDef c vs _) =
- RecC (mkName $ "Msg" ++ c) $ map go vs
-@@ -257,39 +120,6 @@ varName a y =
- upper (x:xs) = toUpper x : xs
- upper [] = []
-
--checkDef :: [SDef] -> [Def] -> Q ()
--checkDef x y =
-- go (sortBy (comparing sconstr) x) (sortBy (comparing constr) y)
-- where
-- go _ [] = return ()
-- go [] (b:_) = error $ "Extra message constructor: " ++ constr b
-- go (a:as) (b:bs)
-- | sconstr a < constr b = go as (b:bs)
-- | sconstr a > constr b = error $ "Extra message constructor: " ++ constr b
-- | otherwise = do
-- go' (svars a) (vars b)
-- go as bs
-- go' ((an, at):as) ((bn, mbt):bs)
-- | an /= bn = error "Mismatched variable names"
-- | otherwise =
-- case mbt of
-- Nothing -> go' as bs
-- Just bt
-- | at == bt -> go' as bs
-- | otherwise -> error "Mismatched variable types"
-- go' [] [] = return ()
-- go' _ _ = error "Mistmached variable count"
--
--toSDefs :: [Def] -> Q [SDef]
--toSDefs = mapM toSDef
--
--toSDef :: Def -> Q SDef
--toSDef d = do
-- vars' <- mapM go $ vars d
-- return $ SDef (constr d) vars' (content d)
-- where
-- go (a, Just b) = return (a, b)
-- go (a, Nothing) = error $ "Main language missing type for " ++ show (constr d, a)
-
- data SDef = SDef
- { sconstr :: String
---
-1.8.5.1
-
diff --git a/standalone/no-th/haskell-patches/shakespeare-js_0001-remove-TH.patch b/standalone/no-th/haskell-patches/shakespeare-js_0001-remove-TH.patch
deleted file mode 100644
index 52b4b3b7c..000000000
--- a/standalone/no-th/haskell-patches/shakespeare-js_0001-remove-TH.patch
+++ /dev/null
@@ -1,316 +0,0 @@
-From be50798c9abc22648a0a3eb81db462abea79698c Mon Sep 17 00:00:00 2001
-From: Joey Hess <joey@kitenet.net>
-Date: Tue, 17 Dec 2013 16:47:03 +0000
-Subject: [PATCH] remove TH
-
----
- Text/Coffee.hs | 56 ++++-----------------------------------------
- Text/Julius.hs | 67 +++++++++---------------------------------------------
- Text/Roy.hs | 51 ++++-------------------------------------
- Text/TypeScript.hs | 51 ++++-------------------------------------
- 4 files changed, 24 insertions(+), 201 deletions(-)
-
-diff --git a/Text/Coffee.hs b/Text/Coffee.hs
-index 488c81b..61db85b 100644
---- a/Text/Coffee.hs
-+++ b/Text/Coffee.hs
-@@ -51,13 +51,13 @@ module Text.Coffee
- -- ** Template-Reading Functions
- -- | These QuasiQuoter and Template Haskell methods return values of
- -- type @'JavascriptUrl' url@. See the Yesod book for details.
-- coffee
-- , coffeeFile
-- , coffeeFileReload
-- , coffeeFileDebug
-+ -- coffee
-+ --, coffeeFile
-+ --, coffeeFileReload
-+ --, coffeeFileDebug
-
- #ifdef TEST_EXPORT
-- , coffeeSettings
-+ --, coffeeSettings
- #endif
- ) where
-
-@@ -65,49 +65,3 @@ import Language.Haskell.TH.Quote (QuasiQuoter (..))
- import Language.Haskell.TH.Syntax
- import Text.Shakespeare
- import Text.Julius
--
--coffeeSettings :: Q ShakespeareSettings
--coffeeSettings = do
-- jsettings <- javascriptSettings
-- return $ jsettings { varChar = '%'
-- , preConversion = Just PreConvert {
-- preConvert = ReadProcess "coffee" ["-spb"]
-- , preEscapeIgnoreBalanced = "'\"`" -- don't insert backtacks for variable already inside strings or backticks.
-- , preEscapeIgnoreLine = "#" -- ignore commented lines
-- , wrapInsertion = Just WrapInsertion {
-- wrapInsertionIndent = Just " "
-- , wrapInsertionStartBegin = "("
-- , wrapInsertionSeparator = ", "
-- , wrapInsertionStartClose = ") =>"
-- , wrapInsertionEnd = ""
-- , wrapInsertionAddParens = False
-- }
-- }
-- }
--
---- | Read inline, quasiquoted CoffeeScript.
--coffee :: QuasiQuoter
--coffee = QuasiQuoter { quoteExp = \s -> do
-- rs <- coffeeSettings
-- quoteExp (shakespeare rs) s
-- }
--
---- | Read in a CoffeeScript template file. This function reads the file once, at
---- compile time.
--coffeeFile :: FilePath -> Q Exp
--coffeeFile fp = do
-- rs <- coffeeSettings
-- shakespeareFile rs fp
--
---- | Read in a CoffeeScript template file. This impure function uses
---- unsafePerformIO to re-read the file on every call, allowing for rapid
---- iteration.
--coffeeFileReload :: FilePath -> Q Exp
--coffeeFileReload fp = do
-- rs <- coffeeSettings
-- shakespeareFileReload rs fp
--
---- | Deprecated synonym for 'coffeeFileReload'
--coffeeFileDebug :: FilePath -> Q Exp
--coffeeFileDebug = coffeeFileReload
--{-# DEPRECATED coffeeFileDebug "Please use coffeeFileReload instead." #-}
-diff --git a/Text/Julius.hs b/Text/Julius.hs
-index ec30690..5b5a075 100644
---- a/Text/Julius.hs
-+++ b/Text/Julius.hs
-@@ -14,17 +14,17 @@ module Text.Julius
- -- ** Template-Reading Functions
- -- | These QuasiQuoter and Template Haskell methods return values of
- -- type @'JavascriptUrl' url@. See the Yesod book for details.
-- js
-- , julius
-- , juliusFile
-- , jsFile
-- , juliusFileDebug
-- , jsFileDebug
-- , juliusFileReload
-- , jsFileReload
-+ -- js
-+ -- julius
-+ -- juliusFile
-+ -- jsFile
-+ --, juliusFileDebug
-+ --, jsFileDebug
-+ --, juliusFileReload
-+ --, jsFileReload
-
- -- * Datatypes
-- , JavascriptUrl
-+ JavascriptUrl
- , Javascript (..)
- , RawJavascript (..)
-
-@@ -37,9 +37,9 @@ module Text.Julius
- , renderJavascriptUrl
-
- -- ** internal, used by 'Text.Coffee'
-- , javascriptSettings
-+ --, javascriptSettings
- -- ** internal
-- , juliusUsedIdentifiers
-+ --, juliusUsedIdentifiers
- , asJavascriptUrl
- ) where
-
-@@ -102,48 +102,3 @@ instance RawJS TL.Text where rawJS = RawJavascript . fromLazyText
- instance RawJS Builder where rawJS = RawJavascript
- instance RawJS Bool where rawJS = RawJavascript . unJavascript . toJavascript
-
--javascriptSettings :: Q ShakespeareSettings
--javascriptSettings = do
-- toJExp <- [|toJavascript|]
-- wrapExp <- [|Javascript|]
-- unWrapExp <- [|unJavascript|]
-- asJavascriptUrl' <- [|asJavascriptUrl|]
-- return $ defaultShakespeareSettings { toBuilder = toJExp
-- , wrap = wrapExp
-- , unwrap = unWrapExp
-- , modifyFinalValue = Just asJavascriptUrl'
-- }
--
--js, julius :: QuasiQuoter
--js = QuasiQuoter { quoteExp = \s -> do
-- rs <- javascriptSettings
-- quoteExp (shakespeare rs) s
-- }
--
--julius = js
--
--jsFile, juliusFile :: FilePath -> Q Exp
--jsFile fp = do
-- rs <- javascriptSettings
-- shakespeareFile rs fp
--
--juliusFile = jsFile
--
--
--jsFileReload, juliusFileReload :: FilePath -> Q Exp
--jsFileReload fp = do
-- rs <- javascriptSettings
-- shakespeareFileReload rs fp
--
--juliusFileReload = jsFileReload
--
--jsFileDebug, juliusFileDebug :: FilePath -> Q Exp
--juliusFileDebug = jsFileReload
--{-# DEPRECATED juliusFileDebug "Please use juliusFileReload instead." #-}
--jsFileDebug = jsFileReload
--{-# DEPRECATED jsFileDebug "Please use jsFileReload instead." #-}
--
---- | Determine which identifiers are used by the given template, useful for
---- creating systems like yesod devel.
--juliusUsedIdentifiers :: String -> [(Deref, VarType)]
--juliusUsedIdentifiers = shakespeareUsedIdentifiers defaultShakespeareSettings
-diff --git a/Text/Roy.hs b/Text/Roy.hs
-index 8bffc5a..8bf2a09 100644
---- a/Text/Roy.hs
-+++ b/Text/Roy.hs
-@@ -39,12 +39,12 @@ module Text.Roy
- -- ** Template-Reading Functions
- -- | These QuasiQuoter and Template Haskell methods return values of
- -- type @'JavascriptUrl' url@. See the Yesod book for details.
-- roy
-- , royFile
-- , royFileReload
-+ -- roy
-+ --, royFile
-+ --, royFileReload
-
- #ifdef TEST_EXPORT
-- , roySettings
-+ --, roySettings
- #endif
- ) where
-
-@@ -53,46 +53,3 @@ import Language.Haskell.TH.Syntax
- import Text.Shakespeare
- import Text.Julius
-
---- | The Roy language compiles down to Javascript.
---- We do this compilation once at compile time to avoid needing to do it during the request.
---- We call this a preConversion because other shakespeare modules like Lucius use Haskell to compile during the request instead rather than a system call.
--roySettings :: Q ShakespeareSettings
--roySettings = do
-- jsettings <- javascriptSettings
-- return $ jsettings { varChar = '#'
-- , preConversion = Just PreConvert {
-- preConvert = ReadProcess "roy" ["--stdio", "--browser"]
-- , preEscapeIgnoreBalanced = "'\""
-- , preEscapeIgnoreLine = "//"
-- , wrapInsertion = Just WrapInsertion {
-- wrapInsertionIndent = Just " "
-- , wrapInsertionStartBegin = "(\\"
-- , wrapInsertionSeparator = " "
-- , wrapInsertionStartClose = " ->\n"
-- , wrapInsertionEnd = ")"
-- , wrapInsertionAddParens = True
-- }
-- }
-- }
--
---- | Read inline, quasiquoted Roy.
--roy :: QuasiQuoter
--roy = QuasiQuoter { quoteExp = \s -> do
-- rs <- roySettings
-- quoteExp (shakespeare rs) s
-- }
--
---- | Read in a Roy template file. This function reads the file once, at
---- compile time.
--royFile :: FilePath -> Q Exp
--royFile fp = do
-- rs <- roySettings
-- shakespeareFile rs fp
--
---- | Read in a Roy template file. This impure function uses
---- unsafePerformIO to re-read the file on every call, allowing for rapid
---- iteration.
--royFileReload :: FilePath -> Q Exp
--royFileReload fp = do
-- rs <- roySettings
-- shakespeareFileReload rs fp
-diff --git a/Text/TypeScript.hs b/Text/TypeScript.hs
-index 70c8820..5be994a 100644
---- a/Text/TypeScript.hs
-+++ b/Text/TypeScript.hs
-@@ -57,12 +57,12 @@ module Text.TypeScript
- -- ** Template-Reading Functions
- -- | These QuasiQuoter and Template Haskell methods return values of
- -- type @'JavascriptUrl' url@. See the Yesod book for details.
-- tsc
-- , typeScriptFile
-- , typeScriptFileReload
-+ -- tsc
-+ --, typeScriptFile
-+ --, typeScriptFileReload
-
- #ifdef TEST_EXPORT
-- , typeScriptSettings
-+ --, typeScriptSettings
- #endif
- ) where
-
-@@ -71,46 +71,3 @@ import Language.Haskell.TH.Syntax
- import Text.Shakespeare
- import Text.Julius
-
---- | The TypeScript language compiles down to Javascript.
---- We do this compilation once at compile time to avoid needing to do it during the request.
---- We call this a preConversion because other shakespeare modules like Lucius use Haskell to compile during the request instead rather than a system call.
--typeScriptSettings :: Q ShakespeareSettings
--typeScriptSettings = do
-- jsettings <- javascriptSettings
-- return $ jsettings { varChar = '#'
-- , preConversion = Just PreConvert {
-- preConvert = ReadProcess "sh" ["-c", "TMP_IN=$(mktemp XXXXXXXXXX.ts); TMP_OUT=$(mktemp XXXXXXXXXX.js); cat /dev/stdin > ${TMP_IN} && tsc --out ${TMP_OUT} ${TMP_IN} && cat ${TMP_OUT}; rm ${TMP_IN} && rm ${TMP_OUT}"]
-- , preEscapeIgnoreBalanced = "'\""
-- , preEscapeIgnoreLine = "//"
-- , wrapInsertion = Just WrapInsertion {
-- wrapInsertionIndent = Nothing
-- , wrapInsertionStartBegin = ";(function("
-- , wrapInsertionSeparator = ", "
-- , wrapInsertionStartClose = "){"
-- , wrapInsertionEnd = "})"
-- , wrapInsertionAddParens = False
-- }
-- }
-- }
--
---- | Read inline, quasiquoted TypeScript
--tsc :: QuasiQuoter
--tsc = QuasiQuoter { quoteExp = \s -> do
-- rs <- typeScriptSettings
-- quoteExp (shakespeare rs) s
-- }
--
---- | Read in a TypeScript template file. This function reads the file once, at
---- compile time.
--typeScriptFile :: FilePath -> Q Exp
--typeScriptFile fp = do
-- rs <- typeScriptSettings
-- shakespeareFile rs fp
--
---- | Read in a Roy template file. This impure function uses
---- unsafePerformIO to re-read the file on every call, allowing for rapid
---- iteration.
--typeScriptFileReload :: FilePath -> Q Exp
--typeScriptFileReload fp = do
-- rs <- typeScriptSettings
-- shakespeareFileReload rs fp
---
-1.8.5.1
-
diff --git a/standalone/no-th/haskell-patches/shakespeare-js_hack_TH.patch b/standalone/no-th/haskell-patches/shakespeare-js_hack_TH.patch
new file mode 100644
index 000000000..905467130
--- /dev/null
+++ b/standalone/no-th/haskell-patches/shakespeare-js_hack_TH.patch
@@ -0,0 +1,316 @@
+From 26f7328b0123d3ffa66873b91189ba3bdae3356c Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Thu, 16 Oct 2014 02:07:32 +0000
+Subject: [PATCH] hack TH
+
+---
+ Text/Coffee.hs | 56 ++++-----------------------------------------
+ Text/Julius.hs | 67 +++++++++---------------------------------------------
+ Text/Roy.hs | 51 ++++-------------------------------------
+ Text/TypeScript.hs | 51 ++++-------------------------------------
+ 4 files changed, 24 insertions(+), 201 deletions(-)
+
+diff --git a/Text/Coffee.hs b/Text/Coffee.hs
+index 488c81b..61db85b 100644
+--- a/Text/Coffee.hs
++++ b/Text/Coffee.hs
+@@ -51,13 +51,13 @@ module Text.Coffee
+ -- ** Template-Reading Functions
+ -- | These QuasiQuoter and Template Haskell methods return values of
+ -- type @'JavascriptUrl' url@. See the Yesod book for details.
+- coffee
+- , coffeeFile
+- , coffeeFileReload
+- , coffeeFileDebug
++ -- coffee
++ --, coffeeFile
++ --, coffeeFileReload
++ --, coffeeFileDebug
+
+ #ifdef TEST_EXPORT
+- , coffeeSettings
++ --, coffeeSettings
+ #endif
+ ) where
+
+@@ -65,49 +65,3 @@ import Language.Haskell.TH.Quote (QuasiQuoter (..))
+ import Language.Haskell.TH.Syntax
+ import Text.Shakespeare
+ import Text.Julius
+-
+-coffeeSettings :: Q ShakespeareSettings
+-coffeeSettings = do
+- jsettings <- javascriptSettings
+- return $ jsettings { varChar = '%'
+- , preConversion = Just PreConvert {
+- preConvert = ReadProcess "coffee" ["-spb"]
+- , preEscapeIgnoreBalanced = "'\"`" -- don't insert backtacks for variable already inside strings or backticks.
+- , preEscapeIgnoreLine = "#" -- ignore commented lines
+- , wrapInsertion = Just WrapInsertion {
+- wrapInsertionIndent = Just " "
+- , wrapInsertionStartBegin = "("
+- , wrapInsertionSeparator = ", "
+- , wrapInsertionStartClose = ") =>"
+- , wrapInsertionEnd = ""
+- , wrapInsertionAddParens = False
+- }
+- }
+- }
+-
+--- | Read inline, quasiquoted CoffeeScript.
+-coffee :: QuasiQuoter
+-coffee = QuasiQuoter { quoteExp = \s -> do
+- rs <- coffeeSettings
+- quoteExp (shakespeare rs) s
+- }
+-
+--- | Read in a CoffeeScript template file. This function reads the file once, at
+--- compile time.
+-coffeeFile :: FilePath -> Q Exp
+-coffeeFile fp = do
+- rs <- coffeeSettings
+- shakespeareFile rs fp
+-
+--- | Read in a CoffeeScript template file. This impure function uses
+--- unsafePerformIO to re-read the file on every call, allowing for rapid
+--- iteration.
+-coffeeFileReload :: FilePath -> Q Exp
+-coffeeFileReload fp = do
+- rs <- coffeeSettings
+- shakespeareFileReload rs fp
+-
+--- | Deprecated synonym for 'coffeeFileReload'
+-coffeeFileDebug :: FilePath -> Q Exp
+-coffeeFileDebug = coffeeFileReload
+-{-# DEPRECATED coffeeFileDebug "Please use coffeeFileReload instead." #-}
+diff --git a/Text/Julius.hs b/Text/Julius.hs
+index ec30690..5b5a075 100644
+--- a/Text/Julius.hs
++++ b/Text/Julius.hs
+@@ -14,17 +14,17 @@ module Text.Julius
+ -- ** Template-Reading Functions
+ -- | These QuasiQuoter and Template Haskell methods return values of
+ -- type @'JavascriptUrl' url@. See the Yesod book for details.
+- js
+- , julius
+- , juliusFile
+- , jsFile
+- , juliusFileDebug
+- , jsFileDebug
+- , juliusFileReload
+- , jsFileReload
++ -- js
++ -- julius
++ -- juliusFile
++ -- jsFile
++ --, juliusFileDebug
++ --, jsFileDebug
++ --, juliusFileReload
++ --, jsFileReload
+
+ -- * Datatypes
+- , JavascriptUrl
++ JavascriptUrl
+ , Javascript (..)
+ , RawJavascript (..)
+
+@@ -37,9 +37,9 @@ module Text.Julius
+ , renderJavascriptUrl
+
+ -- ** internal, used by 'Text.Coffee'
+- , javascriptSettings
++ --, javascriptSettings
+ -- ** internal
+- , juliusUsedIdentifiers
++ --, juliusUsedIdentifiers
+ , asJavascriptUrl
+ ) where
+
+@@ -102,48 +102,3 @@ instance RawJS TL.Text where rawJS = RawJavascript . fromLazyText
+ instance RawJS Builder where rawJS = RawJavascript
+ instance RawJS Bool where rawJS = RawJavascript . unJavascript . toJavascript
+
+-javascriptSettings :: Q ShakespeareSettings
+-javascriptSettings = do
+- toJExp <- [|toJavascript|]
+- wrapExp <- [|Javascript|]
+- unWrapExp <- [|unJavascript|]
+- asJavascriptUrl' <- [|asJavascriptUrl|]
+- return $ defaultShakespeareSettings { toBuilder = toJExp
+- , wrap = wrapExp
+- , unwrap = unWrapExp
+- , modifyFinalValue = Just asJavascriptUrl'
+- }
+-
+-js, julius :: QuasiQuoter
+-js = QuasiQuoter { quoteExp = \s -> do
+- rs <- javascriptSettings
+- quoteExp (shakespeare rs) s
+- }
+-
+-julius = js
+-
+-jsFile, juliusFile :: FilePath -> Q Exp
+-jsFile fp = do
+- rs <- javascriptSettings
+- shakespeareFile rs fp
+-
+-juliusFile = jsFile
+-
+-
+-jsFileReload, juliusFileReload :: FilePath -> Q Exp
+-jsFileReload fp = do
+- rs <- javascriptSettings
+- shakespeareFileReload rs fp
+-
+-juliusFileReload = jsFileReload
+-
+-jsFileDebug, juliusFileDebug :: FilePath -> Q Exp
+-juliusFileDebug = jsFileReload
+-{-# DEPRECATED juliusFileDebug "Please use juliusFileReload instead." #-}
+-jsFileDebug = jsFileReload
+-{-# DEPRECATED jsFileDebug "Please use jsFileReload instead." #-}
+-
+--- | Determine which identifiers are used by the given template, useful for
+--- creating systems like yesod devel.
+-juliusUsedIdentifiers :: String -> [(Deref, VarType)]
+-juliusUsedIdentifiers = shakespeareUsedIdentifiers defaultShakespeareSettings
+diff --git a/Text/Roy.hs b/Text/Roy.hs
+index 6e5e246..9ab0dbc 100644
+--- a/Text/Roy.hs
++++ b/Text/Roy.hs
+@@ -39,12 +39,12 @@ module Text.Roy
+ -- ** Template-Reading Functions
+ -- | These QuasiQuoter and Template Haskell methods return values of
+ -- type @'JavascriptUrl' url@. See the Yesod book for details.
+- roy
+- , royFile
+- , royFileReload
++ -- roy
++ --, royFile
++ --, royFileReload
+
+ #ifdef TEST_EXPORT
+- , roySettings
++ --, roySettings
+ #endif
+ ) where
+
+@@ -53,46 +53,3 @@ import Language.Haskell.TH.Syntax
+ import Text.Shakespeare
+ import Text.Julius
+
+--- | The Roy language compiles down to Javascript.
+--- We do this compilation once at compile time to avoid needing to do it during the request.
+--- We call this a preConversion because other shakespeare modules like Lucius use Haskell to compile during the request instead rather than a system call.
+-roySettings :: Q ShakespeareSettings
+-roySettings = do
+- jsettings <- javascriptSettings
+- return $ jsettings { varChar = '#'
+- , preConversion = Just PreConvert {
+- preConvert = ReadProcess "roy" ["--stdio", "--browser"]
+- , preEscapeIgnoreBalanced = "'\""
+- , preEscapeIgnoreLine = "//"
+- , wrapInsertion = Just WrapInsertion {
+- wrapInsertionIndent = Just " "
+- , wrapInsertionStartBegin = "(\\"
+- , wrapInsertionSeparator = " "
+- , wrapInsertionStartClose = " ->\n"
+- , wrapInsertionEnd = ")"
+- , wrapInsertionAddParens = True
+- }
+- }
+- }
+-
+--- | Read inline, quasiquoted Roy.
+-roy :: QuasiQuoter
+-roy = QuasiQuoter { quoteExp = \s -> do
+- rs <- roySettings
+- quoteExp (shakespeare rs) s
+- }
+-
+--- | Read in a Roy template file. This function reads the file once, at
+--- compile time.
+-royFile :: FilePath -> Q Exp
+-royFile fp = do
+- rs <- roySettings
+- shakespeareFile rs fp
+-
+--- | Read in a Roy template file. This impure function uses
+--- unsafePerformIO to re-read the file on every call, allowing for rapid
+--- iteration.
+-royFileReload :: FilePath -> Q Exp
+-royFileReload fp = do
+- rs <- roySettings
+- shakespeareFileReload rs fp
+diff --git a/Text/TypeScript.hs b/Text/TypeScript.hs
+index 70c8820..5be994a 100644
+--- a/Text/TypeScript.hs
++++ b/Text/TypeScript.hs
+@@ -57,12 +57,12 @@ module Text.TypeScript
+ -- ** Template-Reading Functions
+ -- | These QuasiQuoter and Template Haskell methods return values of
+ -- type @'JavascriptUrl' url@. See the Yesod book for details.
+- tsc
+- , typeScriptFile
+- , typeScriptFileReload
++ -- tsc
++ --, typeScriptFile
++ --, typeScriptFileReload
+
+ #ifdef TEST_EXPORT
+- , typeScriptSettings
++ --, typeScriptSettings
+ #endif
+ ) where
+
+@@ -71,46 +71,3 @@ import Language.Haskell.TH.Syntax
+ import Text.Shakespeare
+ import Text.Julius
+
+--- | The TypeScript language compiles down to Javascript.
+--- We do this compilation once at compile time to avoid needing to do it during the request.
+--- We call this a preConversion because other shakespeare modules like Lucius use Haskell to compile during the request instead rather than a system call.
+-typeScriptSettings :: Q ShakespeareSettings
+-typeScriptSettings = do
+- jsettings <- javascriptSettings
+- return $ jsettings { varChar = '#'
+- , preConversion = Just PreConvert {
+- preConvert = ReadProcess "sh" ["-c", "TMP_IN=$(mktemp XXXXXXXXXX.ts); TMP_OUT=$(mktemp XXXXXXXXXX.js); cat /dev/stdin > ${TMP_IN} && tsc --out ${TMP_OUT} ${TMP_IN} && cat ${TMP_OUT}; rm ${TMP_IN} && rm ${TMP_OUT}"]
+- , preEscapeIgnoreBalanced = "'\""
+- , preEscapeIgnoreLine = "//"
+- , wrapInsertion = Just WrapInsertion {
+- wrapInsertionIndent = Nothing
+- , wrapInsertionStartBegin = ";(function("
+- , wrapInsertionSeparator = ", "
+- , wrapInsertionStartClose = "){"
+- , wrapInsertionEnd = "})"
+- , wrapInsertionAddParens = False
+- }
+- }
+- }
+-
+--- | Read inline, quasiquoted TypeScript
+-tsc :: QuasiQuoter
+-tsc = QuasiQuoter { quoteExp = \s -> do
+- rs <- typeScriptSettings
+- quoteExp (shakespeare rs) s
+- }
+-
+--- | Read in a TypeScript template file. This function reads the file once, at
+--- compile time.
+-typeScriptFile :: FilePath -> Q Exp
+-typeScriptFile fp = do
+- rs <- typeScriptSettings
+- shakespeareFile rs fp
+-
+--- | Read in a Roy template file. This impure function uses
+--- unsafePerformIO to re-read the file on every call, allowing for rapid
+--- iteration.
+-typeScriptFileReload :: FilePath -> Q Exp
+-typeScriptFileReload fp = do
+- rs <- typeScriptSettings
+- shakespeareFileReload rs fp
+--
+2.1.1
+
diff --git a/standalone/no-th/haskell-patches/shakespeare_remove-TH.patch b/standalone/no-th/haskell-patches/shakespeare_remove-TH.patch
new file mode 100644
index 000000000..940514756
--- /dev/null
+++ b/standalone/no-th/haskell-patches/shakespeare_remove-TH.patch
@@ -0,0 +1,181 @@
+From 38a22dae4f7f9726379fdaa3f85d78d75eee9d8e Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Thu, 16 Oct 2014 02:01:22 +0000
+Subject: [PATCH] hack TH
+
+---
+ Text/Shakespeare.hs | 70 ++++++++----------------------------------------
+ Text/Shakespeare/Base.hs | 28 -------------------
+ 2 files changed, 11 insertions(+), 87 deletions(-)
+
+diff --git a/Text/Shakespeare.hs b/Text/Shakespeare.hs
+index 68e344f..97361a2 100644
+--- a/Text/Shakespeare.hs
++++ b/Text/Shakespeare.hs
+@@ -14,12 +14,12 @@ module Text.Shakespeare
+ , WrapInsertion (..)
+ , PreConversion (..)
+ , defaultShakespeareSettings
+- , shakespeare
+- , shakespeareFile
+- , shakespeareFileReload
++ -- , shakespeare
++ -- , shakespeareFile
++ -- , shakespeareFileReload
+ -- * low-level
+- , shakespeareFromString
+- , shakespeareUsedIdentifiers
++ -- , shakespeareFromString
++ -- , shakespeareUsedIdentifiers
+ , RenderUrl
+ , VarType (..)
+ , Deref
+@@ -154,38 +154,6 @@ defaultShakespeareSettings = ShakespeareSettings {
+ , modifyFinalValue = Nothing
+ }
+
+-instance Lift PreConvert where
+- lift (PreConvert convert ignore comment wrapInsertion) =
+- [|PreConvert $(lift convert) $(lift ignore) $(lift comment) $(lift wrapInsertion)|]
+-
+-instance Lift WrapInsertion where
+- lift (WrapInsertion indent sb sep sc e wp) =
+- [|WrapInsertion $(lift indent) $(lift sb) $(lift sep) $(lift sc) $(lift e) $(lift wp)|]
+-
+-instance Lift PreConversion where
+- lift (ReadProcess command args) =
+- [|ReadProcess $(lift command) $(lift args)|]
+- lift Id = [|Id|]
+-
+-instance Lift ShakespeareSettings where
+- lift (ShakespeareSettings x1 x2 x3 x4 x5 x6 x7 x8 x9) =
+- [|ShakespeareSettings
+- $(lift x1) $(lift x2) $(lift x3)
+- $(liftExp x4) $(liftExp x5) $(liftExp x6) $(lift x7) $(lift x8) $(liftMExp x9)|]
+- where
+- liftExp (VarE n) = [|VarE $(liftName n)|]
+- liftExp (ConE n) = [|ConE $(liftName n)|]
+- liftExp _ = error "liftExp only supports VarE and ConE"
+- liftMExp Nothing = [|Nothing|]
+- liftMExp (Just e) = [|Just|] `appE` liftExp e
+- liftName (Name (OccName a) b) = [|Name (OccName $(lift a)) $(liftFlavour b)|]
+- liftFlavour NameS = [|NameS|]
+- liftFlavour (NameQ (ModName a)) = [|NameQ (ModName $(lift a))|]
+- liftFlavour (NameU _) = error "liftFlavour NameU" -- [|NameU $(lift $ fromIntegral a)|]
+- liftFlavour (NameL _) = error "liftFlavour NameL" -- [|NameU $(lift $ fromIntegral a)|]
+- liftFlavour (NameG ns (PkgName p) (ModName m)) = [|NameG $(liftNS ns) (PkgName $(lift p)) (ModName $(lift m))|]
+- liftNS VarName = [|VarName|]
+- liftNS DataName = [|DataName|]
+
+ type QueryParameters = [(TS.Text, TS.Text)]
+ type RenderUrl url = (url -> QueryParameters -> TS.Text)
+@@ -349,6 +317,7 @@ pack' = TS.pack
+ {-# NOINLINE pack' #-}
+ #endif
+
++{-
+ contentsToShakespeare :: ShakespeareSettings -> [Content] -> Q Exp
+ contentsToShakespeare rs a = do
+ r <- newName "_render"
+@@ -400,16 +369,19 @@ shakespeareFile r fp =
+ qAddDependentFile fp >>
+ #endif
+ readFileQ fp >>= shakespeareFromString r
++-}
+
+ data VarType = VTPlain | VTUrl | VTUrlParam | VTMixin
+ deriving (Show, Eq, Ord, Enum, Bounded, Typeable, Data, Generic)
+
++{-
+ getVars :: Content -> [(Deref, VarType)]
+ getVars ContentRaw{} = []
+ getVars (ContentVar d) = [(d, VTPlain)]
+ getVars (ContentUrl d) = [(d, VTUrl)]
+ getVars (ContentUrlParam d) = [(d, VTUrlParam)]
+ getVars (ContentMix d) = [(d, VTMixin)]
++-}
+
+ data VarExp url = EPlain Builder
+ | EUrl url
+@@ -418,8 +390,10 @@ data VarExp url = EPlain Builder
+
+ -- | Determine which identifiers are used by the given template, useful for
+ -- creating systems like yesod devel.
++{-
+ shakespeareUsedIdentifiers :: ShakespeareSettings -> String -> [(Deref, VarType)]
+ shakespeareUsedIdentifiers settings = concatMap getVars . contentFromString settings
++-}
+
+ type MTime = UTCTime
+
+@@ -436,28 +410,6 @@ insertReloadMap :: FilePath -> (MTime, [Content]) -> IO [Content]
+ insertReloadMap fp (mt, content) = atomicModifyIORef reloadMapRef
+ (\reloadMap -> (M.insert fp (mt, content) reloadMap, content))
+
+-shakespeareFileReload :: ShakespeareSettings -> FilePath -> Q Exp
+-shakespeareFileReload settings fp = do
+- str <- readFileQ fp
+- s <- qRunIO $ preFilter (Just fp) settings str
+- let b = shakespeareUsedIdentifiers settings s
+- c <- mapM vtToExp b
+- rt <- [|shakespeareRuntime settings fp|]
+- wrap' <- [|\x -> $(return $ wrap settings) . x|]
+- return $ wrap' `AppE` (rt `AppE` ListE c)
+- where
+- vtToExp :: (Deref, VarType) -> Q Exp
+- vtToExp (d, vt) = do
+- d' <- lift d
+- c' <- c vt
+- return $ TupE [d', c' `AppE` derefToExp [] d]
+- where
+- c :: VarType -> Q Exp
+- c VTPlain = [|EPlain . $(return $
+- InfixE (Just $ unwrap settings) (VarE '(.)) (Just $ toBuilder settings))|]
+- c VTUrl = [|EUrl|]
+- c VTUrlParam = [|EUrlParam|]
+- c VTMixin = [|\x -> EMixin $ \r -> $(return $ unwrap settings) $ x r|]
+
+
+
+diff --git a/Text/Shakespeare/Base.hs b/Text/Shakespeare/Base.hs
+index a0e983c..23b4692 100644
+--- a/Text/Shakespeare/Base.hs
++++ b/Text/Shakespeare/Base.hs
+@@ -52,34 +52,6 @@ data Deref = DerefModulesIdent [String] Ident
+ | DerefTuple [Deref]
+ deriving (Show, Eq, Read, Data, Typeable, Ord)
+
+-instance Lift Ident where
+- lift (Ident s) = [|Ident|] `appE` lift s
+-instance Lift Deref where
+- lift (DerefModulesIdent v s) = do
+- dl <- [|DerefModulesIdent|]
+- v' <- lift v
+- s' <- lift s
+- return $ dl `AppE` v' `AppE` s'
+- lift (DerefIdent s) = do
+- dl <- [|DerefIdent|]
+- s' <- lift s
+- return $ dl `AppE` s'
+- lift (DerefBranch x y) = do
+- x' <- lift x
+- y' <- lift y
+- db <- [|DerefBranch|]
+- return $ db `AppE` x' `AppE` y'
+- lift (DerefIntegral i) = [|DerefIntegral|] `appE` lift i
+- lift (DerefRational r) = do
+- n <- lift $ numerator r
+- d <- lift $ denominator r
+- per <- [|(%) :: Int -> Int -> Ratio Int|]
+- dr <- [|DerefRational|]
+- return $ dr `AppE` InfixE (Just n) per (Just d)
+- lift (DerefString s) = [|DerefString|] `appE` lift s
+- lift (DerefList x) = [|DerefList $(lift x)|]
+- lift (DerefTuple x) = [|DerefTuple $(lift x)|]
+-
+ derefParens, derefCurlyBrackets :: UserParser a Deref
+ derefParens = between (char '(') (char ')') parseDeref
+ derefCurlyBrackets = between (char '{') (char '}') parseDeref
+--
+2.1.1
+
diff --git a/standalone/no-th/haskell-patches/shakespeare_remove-th.patch b/standalone/no-th/haskell-patches/shakespeare_remove-th.patch
deleted file mode 100644
index 024ec2e20..000000000
--- a/standalone/no-th/haskell-patches/shakespeare_remove-th.patch
+++ /dev/null
@@ -1,189 +0,0 @@
-From 753f8ce37e096a343f1dd02a696a287bc91c24a0 Mon Sep 17 00:00:00 2001
-From: Joey Hess <joey@kitenet.net>
-Date: Thu, 6 Mar 2014 22:34:03 +0000
-Subject: [PATCH] remove TH
-
----
- Text/Shakespeare.hs | 73 ++++++++++--------------------------------------
- Text/Shakespeare/Base.hs | 28 -------------------
- 2 files changed, 14 insertions(+), 87 deletions(-)
-
-diff --git a/Text/Shakespeare.hs b/Text/Shakespeare.hs
-index 68e344f..aef741c 100644
---- a/Text/Shakespeare.hs
-+++ b/Text/Shakespeare.hs
-@@ -14,17 +14,20 @@ module Text.Shakespeare
- , WrapInsertion (..)
- , PreConversion (..)
- , defaultShakespeareSettings
-- , shakespeare
-- , shakespeareFile
-- , shakespeareFileReload
-+ -- , shakespeare
-+ -- , shakespeareFile
-+ -- , shakespeareFileReload
- -- * low-level
-- , shakespeareFromString
-- , shakespeareUsedIdentifiers
-+ -- , shakespeareFromString
-+ -- , shakespeareUsedIdentifiers
- , RenderUrl
- , VarType (..)
- , Deref
- , Parser
-
-+ -- used by TH
-+ , pack'
-+
- #ifdef TEST_EXPORT
- , preFilter
- #endif
-@@ -154,38 +157,6 @@ defaultShakespeareSettings = ShakespeareSettings {
- , modifyFinalValue = Nothing
- }
-
--instance Lift PreConvert where
-- lift (PreConvert convert ignore comment wrapInsertion) =
-- [|PreConvert $(lift convert) $(lift ignore) $(lift comment) $(lift wrapInsertion)|]
--
--instance Lift WrapInsertion where
-- lift (WrapInsertion indent sb sep sc e wp) =
-- [|WrapInsertion $(lift indent) $(lift sb) $(lift sep) $(lift sc) $(lift e) $(lift wp)|]
--
--instance Lift PreConversion where
-- lift (ReadProcess command args) =
-- [|ReadProcess $(lift command) $(lift args)|]
-- lift Id = [|Id|]
--
--instance Lift ShakespeareSettings where
-- lift (ShakespeareSettings x1 x2 x3 x4 x5 x6 x7 x8 x9) =
-- [|ShakespeareSettings
-- $(lift x1) $(lift x2) $(lift x3)
-- $(liftExp x4) $(liftExp x5) $(liftExp x6) $(lift x7) $(lift x8) $(liftMExp x9)|]
-- where
-- liftExp (VarE n) = [|VarE $(liftName n)|]
-- liftExp (ConE n) = [|ConE $(liftName n)|]
-- liftExp _ = error "liftExp only supports VarE and ConE"
-- liftMExp Nothing = [|Nothing|]
-- liftMExp (Just e) = [|Just|] `appE` liftExp e
-- liftName (Name (OccName a) b) = [|Name (OccName $(lift a)) $(liftFlavour b)|]
-- liftFlavour NameS = [|NameS|]
-- liftFlavour (NameQ (ModName a)) = [|NameQ (ModName $(lift a))|]
-- liftFlavour (NameU _) = error "liftFlavour NameU" -- [|NameU $(lift $ fromIntegral a)|]
-- liftFlavour (NameL _) = error "liftFlavour NameL" -- [|NameU $(lift $ fromIntegral a)|]
-- liftFlavour (NameG ns (PkgName p) (ModName m)) = [|NameG $(liftNS ns) (PkgName $(lift p)) (ModName $(lift m))|]
-- liftNS VarName = [|VarName|]
-- liftNS DataName = [|DataName|]
-
- type QueryParameters = [(TS.Text, TS.Text)]
- type RenderUrl url = (url -> QueryParameters -> TS.Text)
-@@ -349,6 +320,7 @@ pack' = TS.pack
- {-# NOINLINE pack' #-}
- #endif
-
-+{-
- contentsToShakespeare :: ShakespeareSettings -> [Content] -> Q Exp
- contentsToShakespeare rs a = do
- r <- newName "_render"
-@@ -400,16 +372,19 @@ shakespeareFile r fp =
- qAddDependentFile fp >>
- #endif
- readFileQ fp >>= shakespeareFromString r
-+-}
-
- data VarType = VTPlain | VTUrl | VTUrlParam | VTMixin
- deriving (Show, Eq, Ord, Enum, Bounded, Typeable, Data, Generic)
-
-+{-
- getVars :: Content -> [(Deref, VarType)]
- getVars ContentRaw{} = []
- getVars (ContentVar d) = [(d, VTPlain)]
- getVars (ContentUrl d) = [(d, VTUrl)]
- getVars (ContentUrlParam d) = [(d, VTUrlParam)]
- getVars (ContentMix d) = [(d, VTMixin)]
-+-}
-
- data VarExp url = EPlain Builder
- | EUrl url
-@@ -418,8 +393,10 @@ data VarExp url = EPlain Builder
-
- -- | Determine which identifiers are used by the given template, useful for
- -- creating systems like yesod devel.
-+{-
- shakespeareUsedIdentifiers :: ShakespeareSettings -> String -> [(Deref, VarType)]
- shakespeareUsedIdentifiers settings = concatMap getVars . contentFromString settings
-+-}
-
- type MTime = UTCTime
-
-@@ -436,28 +413,6 @@ insertReloadMap :: FilePath -> (MTime, [Content]) -> IO [Content]
- insertReloadMap fp (mt, content) = atomicModifyIORef reloadMapRef
- (\reloadMap -> (M.insert fp (mt, content) reloadMap, content))
-
--shakespeareFileReload :: ShakespeareSettings -> FilePath -> Q Exp
--shakespeareFileReload settings fp = do
-- str <- readFileQ fp
-- s <- qRunIO $ preFilter (Just fp) settings str
-- let b = shakespeareUsedIdentifiers settings s
-- c <- mapM vtToExp b
-- rt <- [|shakespeareRuntime settings fp|]
-- wrap' <- [|\x -> $(return $ wrap settings) . x|]
-- return $ wrap' `AppE` (rt `AppE` ListE c)
-- where
-- vtToExp :: (Deref, VarType) -> Q Exp
-- vtToExp (d, vt) = do
-- d' <- lift d
-- c' <- c vt
-- return $ TupE [d', c' `AppE` derefToExp [] d]
-- where
-- c :: VarType -> Q Exp
-- c VTPlain = [|EPlain . $(return $
-- InfixE (Just $ unwrap settings) (VarE '(.)) (Just $ toBuilder settings))|]
-- c VTUrl = [|EUrl|]
-- c VTUrlParam = [|EUrlParam|]
-- c VTMixin = [|\x -> EMixin $ \r -> $(return $ unwrap settings) $ x r|]
-
-
-
-diff --git a/Text/Shakespeare/Base.hs b/Text/Shakespeare/Base.hs
-index a0e983c..23b4692 100644
---- a/Text/Shakespeare/Base.hs
-+++ b/Text/Shakespeare/Base.hs
-@@ -52,34 +52,6 @@ data Deref = DerefModulesIdent [String] Ident
- | DerefTuple [Deref]
- deriving (Show, Eq, Read, Data, Typeable, Ord)
-
--instance Lift Ident where
-- lift (Ident s) = [|Ident|] `appE` lift s
--instance Lift Deref where
-- lift (DerefModulesIdent v s) = do
-- dl <- [|DerefModulesIdent|]
-- v' <- lift v
-- s' <- lift s
-- return $ dl `AppE` v' `AppE` s'
-- lift (DerefIdent s) = do
-- dl <- [|DerefIdent|]
-- s' <- lift s
-- return $ dl `AppE` s'
-- lift (DerefBranch x y) = do
-- x' <- lift x
-- y' <- lift y
-- db <- [|DerefBranch|]
-- return $ db `AppE` x' `AppE` y'
-- lift (DerefIntegral i) = [|DerefIntegral|] `appE` lift i
-- lift (DerefRational r) = do
-- n <- lift $ numerator r
-- d <- lift $ denominator r
-- per <- [|(%) :: Int -> Int -> Ratio Int|]
-- dr <- [|DerefRational|]
-- return $ dr `AppE` InfixE (Just n) per (Just d)
-- lift (DerefString s) = [|DerefString|] `appE` lift s
-- lift (DerefList x) = [|DerefList $(lift x)|]
-- lift (DerefTuple x) = [|DerefTuple $(lift x)|]
--
- derefParens, derefCurlyBrackets :: UserParser a Deref
- derefParens = between (char '(') (char ')') parseDeref
- derefCurlyBrackets = between (char '{') (char '}') parseDeref
---
-1.9.0
-
diff --git a/standalone/android/haskell-patches/skein_hardcode_little-endian.patch b/standalone/no-th/haskell-patches/skein_hardcode_little-endian.patch
index 788d8e521..7333742b0 100644
--- a/standalone/android/haskell-patches/skein_hardcode_little-endian.patch
+++ b/standalone/no-th/haskell-patches/skein_hardcode_little-endian.patch
@@ -3,6 +3,8 @@ From: foo <foo@bar>
Date: Sun, 22 Sep 2013 00:18:12 +0000
Subject: [PATCH] hardcode little endian
+This is the same as building with a cabal flag.
+
---
c_impl/optimized/skein_port.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/standalone/no-th/haskell-patches/vector_hack-to-build-with-new-ghc.patch b/standalone/no-th/haskell-patches/vector_hack-to-build-with-new-ghc.patch
new file mode 100644
index 000000000..f89f0d60b
--- /dev/null
+++ b/standalone/no-th/haskell-patches/vector_hack-to-build-with-new-ghc.patch
@@ -0,0 +1,49 @@
+From 6ffd4fcb7d27ec6df709d80a40a262406446a259 Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Wed, 15 Oct 2014 17:00:56 +0000
+Subject: [PATCH] cross build
+
+---
+ Data/Vector/Fusion/Stream/Monadic.hs | 1 -
+ Data/Vector/Unboxed/Base.hs | 13 -------------
+ 2 files changed, 14 deletions(-)
+
+diff --git a/Data/Vector/Fusion/Stream/Monadic.hs b/Data/Vector/Fusion/Stream/Monadic.hs
+index 51fec75..b089b3d 100644
+--- a/Data/Vector/Fusion/Stream/Monadic.hs
++++ b/Data/Vector/Fusion/Stream/Monadic.hs
+@@ -101,7 +101,6 @@ import GHC.Exts ( SpecConstrAnnotation(..) )
+
+ data SPEC = SPEC | SPEC2
+ #if __GLASGOW_HASKELL__ >= 700
+-{-# ANN type SPEC ForceSpecConstr #-}
+ #endif
+
+ emptyStream :: String
+diff --git a/Data/Vector/Unboxed/Base.hs b/Data/Vector/Unboxed/Base.hs
+index 00350cb..34bfc4a 100644
+--- a/Data/Vector/Unboxed/Base.hs
++++ b/Data/Vector/Unboxed/Base.hs
+@@ -65,19 +65,6 @@ vectorTyCon = mkTyCon3 "vector"
+ vectorTyCon m s = mkTyCon $ m ++ "." ++ s
+ #endif
+
+-instance Typeable1 Vector where
+- typeOf1 _ = mkTyConApp (vectorTyCon "Data.Vector.Unboxed" "Vector") []
+-
+-instance Typeable2 MVector where
+- typeOf2 _ = mkTyConApp (vectorTyCon "Data.Vector.Unboxed.Mutable" "MVector") []
+-
+-instance (Data a, Unbox a) => Data (Vector a) where
+- gfoldl = G.gfoldl
+- toConstr _ = error "toConstr"
+- gunfold _ _ = error "gunfold"
+- dataTypeOf _ = G.mkType "Data.Vector.Unboxed.Vector"
+- dataCast1 = G.dataCast
+-
+ -- ----
+ -- Unit
+ -- ----
+--
+2.1.1
+
diff --git a/standalone/no-th/haskell-patches/wai-app-static_deal-with-TH.patch b/standalone/no-th/haskell-patches/wai-app-static_deal-with-TH.patch
index b9f4283ca..93314312f 100644
--- a/standalone/no-th/haskell-patches/wai-app-static_deal-with-TH.patch
+++ b/standalone/no-th/haskell-patches/wai-app-static_deal-with-TH.patch
@@ -1,6 +1,6 @@
-From 8cc398092892377d5fdbda990a2e860155422afa Mon Sep 17 00:00:00 2001
-From: foo <foo@bar>
-Date: Sun, 22 Sep 2013 07:29:39 +0000
+From 3aef808eee43c973ae1fbf6e8769d89b7f0d355b Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Tue, 10 Jun 2014 14:47:42 +0000
Subject: [PATCH] deal with TH
Export modules referenced by it.
@@ -14,7 +14,7 @@ Splicer.
3 files changed, 5 insertions(+), 11 deletions(-)
diff --git a/Network/Wai/Application/Static.hs b/Network/Wai/Application/Static.hs
-index f2fa743..1a82b30 100644
+index db2b835..b2c1aec 100644
--- a/Network/Wai/Application/Static.hs
+++ b/Network/Wai/Application/Static.hs
@@ -33,8 +33,6 @@ import Control.Monad.IO.Class (liftIO)
@@ -26,13 +26,13 @@ index f2fa743..1a82b30 100644
import Data.Text (Text)
import qualified Data.Text as T
-@@ -198,8 +196,6 @@ staticAppPieces _ _ req
+@@ -198,8 +196,6 @@ staticAppPieces _ _ req sendResponse
H.status405
[("Content-Type", "text/plain")]
"Only GET is supported"
--staticAppPieces _ [".hidden", "folder.png"] _ = return $ W.responseLBS H.status200 [("Content-Type", "image/png")] $ L.fromChunks [$(embedFile "images/folder.png")]
--staticAppPieces _ [".hidden", "haskell.png"] _ = return $ W.responseLBS H.status200 [("Content-Type", "image/png")] $ L.fromChunks [$(embedFile "images/haskell.png")]
- staticAppPieces ss rawPieces req = liftIO $ do
+-staticAppPieces _ [".hidden", "folder.png"] _ sendResponse = sendResponse $ W.responseLBS H.status200 [("Content-Type", "image/png")] $ L.fromChunks [$(embedFile "images/folder.png")]
+-staticAppPieces _ [".hidden", "haskell.png"] _ sendResponse = sendResponse $ W.responseLBS H.status200 [("Content-Type", "image/png")] $ L.fromChunks [$(embedFile "images/haskell.png")]
+ staticAppPieces ss rawPieces req sendResponse = liftIO $ do
case toPieces rawPieces of
Just pieces -> checkPieces ss pieces req >>= response
diff --git a/WaiAppStatic/Storage/Embedded.hs b/WaiAppStatic/Storage/Embedded.hs
@@ -55,7 +55,7 @@ index daa6e50..9873d4e 100644
-import WaiAppStatic.Storage.Embedded.TH
+--import WaiAppStatic.Storage.Embedded.TH
diff --git a/wai-app-static.cabal b/wai-app-static.cabal
-index 5d81150..8f8c144 100644
+index ef6f898..9a59d71 100644
--- a/wai-app-static.cabal
+++ b/wai-app-static.cabal
@@ -33,7 +33,6 @@ library
@@ -66,10 +66,10 @@ index 5d81150..8f8c144 100644
, text >= 0.7
, blaze-builder >= 0.2.1.4
, base64-bytestring >= 0.1
-@@ -57,9 +56,8 @@ library
- WaiAppStatic.Storage.Embedded
+@@ -61,9 +60,8 @@ library
WaiAppStatic.Listing
WaiAppStatic.Types
+ WaiAppStatic.CmdLine
- other-modules: Util
WaiAppStatic.Storage.Embedded.Runtime
- WaiAppStatic.Storage.Embedded.TH
@@ -78,5 +78,5 @@ index 5d81150..8f8c144 100644
extensions: CPP
--
-1.8.5.1
+2.0.0
diff --git a/standalone/no-th/haskell-patches/yesod-auth_don-t-really-build.patch b/standalone/no-th/haskell-patches/yesod-auth_don-t-really-build.patch
index 7016e001c..3e0d0d9ba 100644
--- a/standalone/no-th/haskell-patches/yesod-auth_don-t-really-build.patch
+++ b/standalone/no-th/haskell-patches/yesod-auth_don-t-really-build.patch
@@ -1,19 +1,19 @@
-From 3eb7b0a42099721dc19363ac41319efeed4ac5f9 Mon Sep 17 00:00:00 2001
-From: foo <foo@bar>
-Date: Sun, 22 Sep 2013 05:19:53 +0000
+From 583575461dc58b76c6c7e14d429f73182d49ef81 Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Tue, 10 Jun 2014 20:29:51 +0000
Subject: [PATCH] don't really build
---
- yesod-auth.cabal | 11 +----------
- 1 file changed, 1 insertion(+), 10 deletions(-)
+ yesod-auth.cabal | 11 -----------
+ 1 file changed, 11 deletions(-)
diff --git a/yesod-auth.cabal b/yesod-auth.cabal
-index 591ced5..11217be 100644
+index 906c08b..b4bc841 100644
--- a/yesod-auth.cabal
+++ b/yesod-auth.cabal
-@@ -52,16 +52,7 @@ library
- , safe
- , time
+@@ -65,17 +65,6 @@ library
+ , conduit-extra
+ , attoparsec-conduit
- exposed-modules: Yesod.Auth
- Yesod.Auth.BrowserId
@@ -21,14 +21,14 @@ index 591ced5..11217be 100644
- Yesod.Auth.Email
- Yesod.Auth.OpenId
- Yesod.Auth.Rpxnow
-- Yesod.Auth.HashDB
- Yesod.Auth.Message
- Yesod.Auth.GoogleEmail
+- Yesod.Auth.GoogleEmail2
- other-modules: Yesod.Auth.Routes
-+ exposed-modules:
+- Yesod.PasswordStore
ghc-options: -Wall
source-repository head
--
-1.7.10.4
+2.0.0
diff --git a/standalone/no-th/haskell-patches/yesod-core_expand_TH.patch b/standalone/no-th/haskell-patches/yesod-core_expand_TH.patch
index 5609fb459..f58fcb353 100644
--- a/standalone/no-th/haskell-patches/yesod-core_expand_TH.patch
+++ b/standalone/no-th/haskell-patches/yesod-core_expand_TH.patch
@@ -1,25 +1,24 @@
-From be8d5895522da0397fd594d5553ed7d3641eb399 Mon Sep 17 00:00:00 2001
+From f1feea61dcba0b16afed5ce8dd5d2433fe505461 Mon Sep 17 00:00:00 2001
From: dummy <dummy@example.com>
-Date: Fri, 7 Mar 2014 01:40:29 +0000
-Subject: [PATCH] remove and expand TH
+Date: Thu, 16 Oct 2014 02:15:23 +0000
+Subject: [PATCH] hack TH
-fix Loc from MonadLogger
---
Yesod/Core.hs | 30 +++---
- Yesod/Core/Class/Yesod.hs | 257 ++++++++++++++++++++++++++++++---------------
- Yesod/Core/Dispatch.hs | 37 ++-----
+ Yesod/Core/Class/Yesod.hs | 256 ++++++++++++++++++++++++++++++---------------
+ Yesod/Core/Dispatch.hs | 38 ++-----
Yesod/Core/Handler.hs | 25 ++---
- Yesod/Core/Internal/Run.hs | 8 +-
+ Yesod/Core/Internal/Run.hs | 6 +-
Yesod/Core/Internal/TH.hs | 111 --------------------
Yesod/Core/Types.hs | 3 +-
Yesod/Core/Widget.hs | 32 +-----
- 8 files changed, 215 insertions(+), 288 deletions(-)
+ 8 files changed, 213 insertions(+), 288 deletions(-)
diff --git a/Yesod/Core.hs b/Yesod/Core.hs
-index 12e59d5..2817a69 100644
+index 9b29317..7c0792d 100644
--- a/Yesod/Core.hs
+++ b/Yesod/Core.hs
-@@ -29,16 +29,16 @@ module Yesod.Core
+@@ -31,16 +31,16 @@ module Yesod.Core
, unauthorizedI
-- * Logging
, LogLevel (..)
@@ -46,7 +45,7 @@ index 12e59d5..2817a69 100644
-- * Sessions
, SessionBackend (..)
, customizeSessionCookies
-@@ -85,17 +85,15 @@ module Yesod.Core
+@@ -87,17 +87,15 @@ module Yesod.Core
, readIntegral
-- * Shakespeare
-- ** Hamlet
@@ -69,7 +68,7 @@ index 12e59d5..2817a69 100644
, renderCssUrl
) where
diff --git a/Yesod/Core/Class/Yesod.hs b/Yesod/Core/Class/Yesod.hs
-index 140600b..75daabc 100644
+index 8631d27..c40eb10 100644
--- a/Yesod/Core/Class/Yesod.hs
+++ b/Yesod/Core/Class/Yesod.hs
@@ -5,18 +5,22 @@
@@ -105,11 +104,11 @@ index 140600b..75daabc 100644
import Network.HTTP.Types (encodePath)
import qualified Network.Wai as W
import Data.Default (def)
-@@ -94,18 +97,27 @@ class RenderRoute site => Yesod site where
+@@ -94,18 +97,26 @@ class RenderRoute site => Yesod site where
defaultLayout w = do
p <- widgetToPageContent w
mmsg <- getMessage
-- giveUrlRenderer [hamlet|
+- withUrlRenderer [hamlet|
- $newline never
- $doctype 5
- <html>
@@ -121,7 +120,7 @@ index 140600b..75daabc 100644
- <p .message>#{msg}
- ^{pageBody p}
- |]
-+ giveUrlRenderer $ \ _render_aHra
++ withUrlRenderer $ \ _render_aHra
+ -> do { id
+ ((Text.Blaze.Internal.preEscapedText . T.pack)
+ "<!DOCTYPE html>\n<html><head><title>");
@@ -141,11 +140,10 @@ index 140600b..75daabc 100644
+ Text.Hamlet.asHtmlUrl (pageBody p) _render_aHra;
+ id
+ ((Text.Blaze.Internal.preEscapedText . T.pack) "</body></html>") }
-+
-- | Override the rendering function for a particular URL. One use case for
-- this is to offload static hosting to a different domain name to avoid
-@@ -374,45 +386,103 @@ widgetToPageContent w = do
+@@ -374,45 +385,103 @@ widgetToPageContent w = do
-- modernizr should be at the end of the <head> http://www.modernizr.com/docs/#installing
-- the asynchronous loader means your page doesn't have to wait for all the js to load
let (mcomplete, asyncScripts) = asyncHelper render scripts jscript jsLoc
@@ -288,7 +286,7 @@ index 140600b..75daabc 100644
return $ PageContent title headAll $
case jsLoader master of
-@@ -442,10 +512,13 @@ defaultErrorHandler NotFound = selectRep $ do
+@@ -442,10 +511,13 @@ defaultErrorHandler NotFound = selectRep $ do
r <- waiRequest
let path' = TE.decodeUtf8With TEE.lenientDecode $ W.rawPathInfo r
setTitle "Not Found"
@@ -306,7 +304,7 @@ index 140600b..75daabc 100644
provideRep $ return $ object ["message" .= ("Not Found" :: Text)]
-- For API requests.
-@@ -455,10 +528,11 @@ defaultErrorHandler NotFound = selectRep $ do
+@@ -455,10 +527,11 @@ defaultErrorHandler NotFound = selectRep $ do
defaultErrorHandler NotAuthenticated = selectRep $ do
provideRep $ defaultLayout $ do
setTitle "Not logged in"
@@ -322,7 +320,7 @@ index 140600b..75daabc 100644
provideRep $ do
-- 401 *MUST* include a WWW-Authenticate header
-@@ -480,10 +554,13 @@ defaultErrorHandler NotAuthenticated = selectRep $ do
+@@ -480,10 +553,13 @@ defaultErrorHandler NotAuthenticated = selectRep $ do
defaultErrorHandler (PermissionDenied msg) = selectRep $ do
provideRep $ defaultLayout $ do
setTitle "Permission Denied"
@@ -340,7 +338,7 @@ index 140600b..75daabc 100644
provideRep $
return $ object $ [
"message" .= ("Permission Denied. " <> msg)
-@@ -492,30 +569,42 @@ defaultErrorHandler (PermissionDenied msg) = selectRep $ do
+@@ -492,30 +568,42 @@ defaultErrorHandler (PermissionDenied msg) = selectRep $ do
defaultErrorHandler (InvalidArgs ia) = selectRep $ do
provideRep $ defaultLayout $ do
setTitle "Invalid Arguments"
@@ -398,7 +396,7 @@ index 140600b..75daabc 100644
provideRep $ return $ object ["message" .= ("Bad method" :: Text), "method" .= TE.decodeUtf8With TEE.lenientDecode m]
asyncHelper :: (url -> [x] -> Text)
-@@ -682,8 +771,4 @@ loadClientSession key getCachedDate sessionName req = load
+@@ -682,8 +770,4 @@ loadClientSession key getCachedDate sessionName req = load
-- turn the TH Loc loaction information into a human readable string
-- leaving out the loc_end parameter
fileLocationToString :: Loc -> String
@@ -409,7 +407,7 @@ index 140600b..75daabc 100644
- char = show . snd . loc_start
+fileLocationToString loc = "unknown"
diff --git a/Yesod/Core/Dispatch.hs b/Yesod/Core/Dispatch.hs
-index e6f489d..3ff37c1 100644
+index e0d1f0e..cc23fdd 100644
--- a/Yesod/Core/Dispatch.hs
+++ b/Yesod/Core/Dispatch.hs
@@ -1,4 +1,3 @@
@@ -446,7 +444,7 @@ index e6f489d..3ff37c1 100644
, PathMultiPiece (..)
, Texts
-- * Convert to WAI
-@@ -128,13 +127,6 @@ toWaiAppLogger logger site = do
+@@ -135,13 +134,6 @@ toWaiAppLogger logger site = do
, yreSite = site
, yreSessionBackend = sb
}
@@ -460,10 +458,11 @@ index e6f489d..3ff37c1 100644
middleware <- mkDefaultMiddlewares logger
return $ middleware $ toWaiAppYre yre
-@@ -163,13 +155,7 @@ warp port site = do
+@@ -170,14 +162,7 @@ warp port site = do
]
-}
, Network.Wai.Handler.Warp.settingsOnException = const $ \e ->
+- when (shouldLog' e) $
- messageLoggerSource
- site
- logger
@@ -471,11 +470,11 @@ index e6f489d..3ff37c1 100644
- "yesod-core"
- LevelError
- (toLogStr $ "Exception from Warp: " ++ show e)
-+ error (show e)
++ when (shouldLog' e) $ error (show e)
}
-
- -- | A default set of middlewares.
-@@ -194,7 +180,6 @@ mkDefaultMiddlewares logger = do
+ where
+ shouldLog' =
+@@ -211,7 +196,6 @@ defaultMiddlewaresNoLogging = acceptOverride . autohead . gzip def . methodOverr
-- | Deprecated synonym for 'warp'.
warpDebug :: YesodDispatch site => Int -> site -> IO ()
warpDebug = warp
@@ -484,10 +483,10 @@ index e6f489d..3ff37c1 100644
-- | Runs your application using default middlewares (i.e., via 'toWaiApp'). It
-- reads port information from the PORT environment variable, as used by tools
diff --git a/Yesod/Core/Handler.hs b/Yesod/Core/Handler.hs
-index 7c561c5..847d475 100644
+index d2b196b..13cac17 100644
--- a/Yesod/Core/Handler.hs
+++ b/Yesod/Core/Handler.hs
-@@ -164,7 +164,7 @@ import Data.Text.Encoding (decodeUtf8With, encodeUtf8)
+@@ -174,7 +174,7 @@ import Data.Text.Encoding (decodeUtf8With, encodeUtf8)
import Data.Text.Encoding.Error (lenientDecode)
import qualified Data.Text.Lazy as TL
import qualified Text.Blaze.Html.Renderer.Text as RenderText
@@ -496,19 +495,19 @@ index 7c561c5..847d475 100644
import qualified Data.ByteString as S
import qualified Data.ByteString.Lazy as L
-@@ -198,6 +198,7 @@ import Data.CaseInsensitive (CI)
- #if MIN_VERSION_wai(2, 0, 0)
- import qualified System.PosixCompat.Files as PC
- #endif
+@@ -203,6 +203,7 @@ import Control.Exception (throwIO)
+ import Blaze.ByteString.Builder (Builder)
+ import Safe (headMay)
+ import Data.CaseInsensitive (CI)
+import qualified Text.Blaze.Internal
-
- get :: MonadHandler m => m GHState
- get = liftHandlerT $ HandlerT $ I.readIORef . handlerState
-@@ -748,19 +749,15 @@ redirectToPost :: (MonadHandler m, RedirectUrl (HandlerSite m) url)
+ import qualified Data.Conduit.List as CL
+ import Control.Monad (unless)
+ import Control.Monad.Trans.Resource (MonadResource, InternalState, runResourceT, withInternalState, getInternalState, liftResourceT, resourceForkIO
+@@ -855,19 +856,15 @@ redirectToPost :: (MonadHandler m, RedirectUrl (HandlerSite m) url)
-> m a
redirectToPost url = do
urlText <- toTextUrl url
-- giveUrlRenderer [hamlet|
+- withUrlRenderer [hamlet|
-$newline never
-$doctype 5
-
@@ -521,7 +520,7 @@ index 7c561c5..847d475 100644
- <p>Javascript has been disabled; please click on the button below to be redirected.
- <input type="submit" value="Continue">
-|] >>= sendResponse
-+ giveUrlRenderer $ \ _render_awps
++ withUrlRenderer $ \ _render_awps
+ -> do { id
+ ((Text.Blaze.Internal.preEscapedText . T.pack)
+ "<!DOCTYPE html>\n<html><head><title>Redirecting...</title></head><body onload=\"document.getElementById('form').submit()\"><form id=\"form\" method=\"post\" action=\"");
@@ -534,21 +533,19 @@ index 7c561c5..847d475 100644
-- | Wraps the 'Content' generated by 'hamletToContent' in a 'RepHtml'.
hamletToRepHtml :: MonadHandler m => HtmlUrl (Route (HandlerSite m)) -> m Html
diff --git a/Yesod/Core/Internal/Run.hs b/Yesod/Core/Internal/Run.hs
-index 10871a2..e8d1907 100644
+index 311f208..63f666f 100644
--- a/Yesod/Core/Internal/Run.hs
+++ b/Yesod/Core/Internal/Run.hs
-@@ -15,8 +15,8 @@ import qualified Control.Exception as E
- import Control.Exception.Lifted (catch)
+@@ -16,7 +16,7 @@ import Control.Exception.Lifted (catch)
+ import Control.Monad (mplus)
import Control.Monad.IO.Class (MonadIO)
import Control.Monad.IO.Class (liftIO)
-import Control.Monad.Logger (LogLevel (LevelError), LogSource,
-- liftLoc)
+import Control.Monad.Logger (Loc, LogLevel (LevelError), LogSource,
-+ )
+ liftLoc)
import Control.Monad.Trans.Resource (runResourceT, withInternalState, runInternalState, createInternalState, closeInternalState)
import qualified Data.ByteString as S
- import qualified Data.ByteString.Char8 as S8
-@@ -30,7 +30,7 @@ import qualified Data.Text as T
+@@ -31,7 +31,7 @@ import qualified Data.Text as T
import Data.Text.Encoding (encodeUtf8)
import Data.Text.Encoding (decodeUtf8With)
import Data.Text.Encoding.Error (lenientDecode)
@@ -557,7 +554,7 @@ index 10871a2..e8d1907 100644
import qualified Network.HTTP.Types as H
import Network.Wai
#if MIN_VERSION_wai(2, 0, 0)
-@@ -131,8 +131,6 @@ safeEh :: (Loc -> LogSource -> LogLevel -> LogStr -> IO ())
+@@ -158,8 +158,6 @@ safeEh :: (Loc -> LogSource -> LogLevel -> LogStr -> IO ())
-> ErrorResponse
-> YesodApp
safeEh log' er req = do
@@ -686,18 +683,18 @@ index 7e84c1c..a273c29 100644
- ]
- return $ LetE [fun] (VarE helper)
diff --git a/Yesod/Core/Types.hs b/Yesod/Core/Types.hs
-index de09f78..9183a64 100644
+index 388dfe3..b3fce0f 100644
--- a/Yesod/Core/Types.hs
+++ b/Yesod/Core/Types.hs
-@@ -17,6 +17,7 @@ import Control.Exception (Exception)
- import Control.Monad (liftM, ap)
- import Control.Monad.Base (MonadBase (liftBase))
+@@ -21,6 +21,7 @@ import Control.Monad.Catch (MonadCatch (..))
+ import Control.Monad.Catch (MonadMask (..))
+ #endif
import Control.Monad.IO.Class (MonadIO (liftIO))
+import qualified Control.Monad.Logger
import Control.Monad.Logger (LogLevel, LogSource,
MonadLogger (..))
import Control.Monad.Trans.Control (MonadBaseControl (..))
-@@ -179,7 +180,7 @@ data RunHandlerEnv site = RunHandlerEnv
+@@ -191,7 +192,7 @@ data RunHandlerEnv site = RunHandlerEnv
, rheRoute :: !(Maybe (Route site))
, rheSite :: !site
, rheUpload :: !(RequestBodyLength -> FileUpload)
@@ -707,7 +704,7 @@ index de09f78..9183a64 100644
-- ^ How to respond when an error is thrown internally.
--
diff --git a/Yesod/Core/Widget.hs b/Yesod/Core/Widget.hs
-index a972efa..156cd45 100644
+index 481199e..8489fbe 100644
--- a/Yesod/Core/Widget.hs
+++ b/Yesod/Core/Widget.hs
@@ -16,8 +16,8 @@ module Yesod.Core.Widget
@@ -730,7 +727,7 @@ index a972efa..156cd45 100644
, asWidgetT
) where
-@@ -189,35 +189,9 @@ addScriptRemote = flip addScriptRemoteAttrs []
+@@ -207,35 +207,9 @@ addScriptRemote = flip addScriptRemoteAttrs []
addScriptRemoteAttrs :: MonadWidget m => Text -> [(Text, Text)] -> m ()
addScriptRemoteAttrs x y = tell $ GWData mempty mempty (toUnique $ Script (Remote x) y) mempty mempty mempty mempty
@@ -767,5 +764,5 @@ index a972efa..156cd45 100644
ihamletToRepHtml :: (MonadHandler m, RenderMessage (HandlerSite m) message)
=> HtmlUrlI18n message (Route (HandlerSite m))
--
-1.9.0
+2.1.1
diff --git a/standalone/no-th/haskell-patches/yesod-form_spliced-TH.patch b/standalone/no-th/haskell-patches/yesod-form_spliced-TH.patch
index 18cae3a34..84314a8d9 100644
--- a/standalone/no-th/haskell-patches/yesod-form_spliced-TH.patch
+++ b/standalone/no-th/haskell-patches/yesod-form_spliced-TH.patch
@@ -1,19 +1,235 @@
-From 9f62992414f900fcafa00a838925e24c4365c50f Mon Sep 17 00:00:00 2001
+From 1b24ece1a40c9365f719472ca6e342c8c4065c25 Mon Sep 17 00:00:00 2001
From: dummy <dummy@example.com>
-Date: Fri, 7 Feb 2014 23:11:31 +0000
-Subject: [PATCH] splice TH
+Date: Thu, 16 Oct 2014 02:31:20 +0000
+Subject: [PATCH] hack TH
---
- Yesod/Form/Fields.hs | 771 +++++++++++++++++++++++++++++++++++------------
- Yesod/Form/Functions.hs | 239 ++++++++++++---
- Yesod/Form/Jquery.hs | 129 ++++++--
- Yesod/Form/MassInput.hs | 233 +++++++++++---
- Yesod/Form/Nic.hs | 65 +++-
- yesod-form.cabal | 1 +
- 6 files changed, 1127 insertions(+), 311 deletions(-)
+ Yesod/Form/Bootstrap3.hs | 186 +++++++++--
+ Yesod/Form/Fields.hs | 816 +++++++++++++++++++++++++++++++++++------------
+ Yesod/Form/Functions.hs | 257 ++++++++++++---
+ Yesod/Form/Jquery.hs | 134 ++++++--
+ Yesod/Form/MassInput.hs | 226 ++++++++++---
+ Yesod/Form/Nic.hs | 67 +++-
+ 6 files changed, 1322 insertions(+), 364 deletions(-)
+diff --git a/Yesod/Form/Bootstrap3.hs b/Yesod/Form/Bootstrap3.hs
+index 84e85fc..1954fb4 100644
+--- a/Yesod/Form/Bootstrap3.hs
++++ b/Yesod/Form/Bootstrap3.hs
+@@ -26,6 +26,9 @@ import Data.String (IsString(..))
+ import Yesod.Core
+
+ import qualified Data.Text as T
++import qualified Text.Hamlet
++import qualified Text.Blaze.Internal
++import qualified Data.Foldable
+
+ import Yesod.Form.Types
+ import Yesod.Form.Functions
+@@ -152,44 +155,144 @@ renderBootstrap3 formLayout aform fragment = do
+ let views = views' []
+ has (Just _) = True
+ has Nothing = False
+- widget = [whamlet|
+- $newline never
+- #{fragment}
+- $forall view <- views
+- <div .form-group :fvRequired view:.required :not $ fvRequired view:.optional :has $ fvErrors view:.has-error>
+- $case formLayout
+- $of BootstrapBasicForm
+- $if fvId view /= bootstrapSubmitId
+- <label for=#{fvId view}>#{fvLabel view}
+- ^{fvInput view}
+- ^{helpWidget view}
+- $of BootstrapInlineForm
+- $if fvId view /= bootstrapSubmitId
+- <label .sr-only for=#{fvId view}>#{fvLabel view}
+- ^{fvInput view}
+- ^{helpWidget view}
+- $of BootstrapHorizontalForm labelOffset labelSize inputOffset inputSize
+- $if fvId view /= bootstrapSubmitId
+- <label .control-label .#{toOffset labelOffset} .#{toColumn labelSize} for=#{fvId view}>#{fvLabel view}
+- <div .#{toOffset inputOffset} .#{toColumn inputSize}>
+- ^{fvInput view}
+- ^{helpWidget view}
+- $else
+- <div .#{toOffset (addGO inputOffset (addGO labelOffset labelSize))} .#{toColumn inputSize}>
+- ^{fvInput view}
+- ^{helpWidget view}
+- |]
++ widget = do { (asWidgetT . toWidget) (toHtml fragment);
++ Data.Foldable.mapM_
++ (\ view_as0a
++ -> do { (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack)
++ "<div class=\"form-group ");
++ Text.Hamlet.condH
++ [(fvRequired view_as0a,
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack) "required "))]
++ Nothing;
++ Text.Hamlet.condH
++ [(not (fvRequired view_as0a),
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack) "optional "))]
++ Nothing;
++ Text.Hamlet.condH
++ [(has (fvErrors view_as0a),
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack) "has-error"))]
++ Nothing;
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");
++ case formLayout of {
++ ; BootstrapBasicForm
++ -> do { Text.Hamlet.condH
++ [((/=) (fvId view_as0a) bootstrapSubmitId,
++ do { (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack)
++ "<label for=\"");
++ (asWidgetT . toWidget) (toHtml (fvId view_as0a));
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");
++ (asWidgetT . toWidget) (toHtml (fvLabel view_as0a));
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack)
++ "</label>") })]
++ Nothing;
++ (asWidgetT . toWidget) (fvInput view_as0a);
++ (asWidgetT . toWidget) (helpWidget view_as0a) }
++ ; BootstrapInlineForm
++ -> do { Text.Hamlet.condH
++ [((/=) (fvId view_as0a) bootstrapSubmitId,
++ do { (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack)
++ "<label class=\"sr-only\" for=\"");
++ (asWidgetT . toWidget) (toHtml (fvId view_as0a));
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");
++ (asWidgetT . toWidget) (toHtml (fvLabel view_as0a));
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack)
++ "</label>") })]
++ Nothing;
++ (asWidgetT . toWidget) (fvInput view_as0a);
++ (asWidgetT . toWidget) (helpWidget view_as0a) }
++ ; BootstrapHorizontalForm labelOffset_as0b
++ labelSize_as0c
++ inputOffset_as0d
++ inputSize_as0e
++ -> Text.Hamlet.condH
++ [((/=) (fvId view_as0a) bootstrapSubmitId,
++ do { (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack)
++ "<label class=\"control-label ");
++ (asWidgetT . toWidget) (toHtml (toOffset labelOffset_as0b));
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack) " ");
++ (asWidgetT . toWidget) (toHtml (toColumn labelSize_as0c));
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack) "\" for=\"");
++ (asWidgetT . toWidget) (toHtml (fvId view_as0a));
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");
++ (asWidgetT . toWidget) (toHtml (fvLabel view_as0a));
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack)
++ "</label><div class=\"");
++ (asWidgetT . toWidget) (toHtml (toOffset inputOffset_as0d));
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack) " ");
++ (asWidgetT . toWidget) (toHtml (toColumn inputSize_as0e));
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");
++ (asWidgetT . toWidget) (fvInput view_as0a);
++ (asWidgetT . toWidget) (helpWidget view_as0a);
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack) "</div>") })]
++ (Just
++ (do { (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack)
++ "<div class=\"");
++ (asWidgetT . toWidget)
++ (toHtml
++ (toOffset
++ (addGO
++ inputOffset_as0d
++ (addGO labelOffset_as0b labelSize_as0c))));
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack) " ");
++ (asWidgetT . toWidget) (toHtml (toColumn inputSize_as0e));
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack) "\">");
++ (asWidgetT . toWidget) (fvInput view_as0a);
++ (asWidgetT . toWidget) (helpWidget view_as0a);
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack)
++ "</div>") })) };
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack) "</div>") })
++ views }
++
+ return (res, widget)
+
+
+ -- | (Internal) Render a help widget for tooltips and errors.
+ helpWidget :: FieldView site -> WidgetT site IO ()
+-helpWidget view = [whamlet|
+- $maybe tt <- fvTooltip view
+- <span .help-block>#{tt}
+- $maybe err <- fvErrors view
+- <span .help-block>#{err}
+-|]
++helpWidget view = do { Text.Hamlet.maybeH
++ (fvTooltip view)
++ (\ tt_as0k
++ -> do { (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack)
++ "<span class=\"help-block\">");
++ (asWidgetT . toWidget) (toHtml tt_as0k);
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack) "</span>") })
++ Nothing;
++ Text.Hamlet.maybeH
++ (fvErrors view)
++ (\ err_as0l
++ -> do { (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack)
++ "<span class=\"help-block\">");
++ (asWidgetT . toWidget) (toHtml err_as0l);
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack) "</span>") })
++ Nothing }
++
+
+
+ -- | How the 'bootstrapSubmit' button should be rendered.
+@@ -244,7 +347,22 @@ mbootstrapSubmit
+ => BootstrapSubmit msg -> MForm m (FormResult (), FieldView site)
+ mbootstrapSubmit (BootstrapSubmit msg classes attrs) =
+ let res = FormSuccess ()
+- widget = [whamlet|<button class="btn #{classes}" type=submit *{attrs}>_{msg}|]
++ widget = do { (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack)
++ "<button class=\"btn ");
++ (asWidgetT . toWidget) (toHtml classes);
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack)
++ "\" type=\"submit\"");
++ (asWidgetT . toWidget)
++ ((Text.Hamlet.attrsToHtml . Text.Hamlet.toAttributes) attrs);
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack) ">");
++ ((liftM (toHtml .) getMessageRender)
++ >>= (\ urender_as0w -> (asWidgetT . toWidget) (urender_as0w msg)));
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . T.pack) "</button>") }
++
+ fv = FieldView { fvLabel = ""
+ , fvTooltip = Nothing
+ , fvId = bootstrapSubmitId
diff --git a/Yesod/Form/Fields.hs b/Yesod/Form/Fields.hs
-index 97d0034..016c98b 100644
+index c6091a9..9e6bd4e 100644
--- a/Yesod/Form/Fields.hs
+++ b/Yesod/Form/Fields.hs
@@ -1,4 +1,3 @@
@@ -21,7 +237,17 @@ index 97d0034..016c98b 100644
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-@@ -36,15 +35,11 @@ module Yesod.Form.Fields
+@@ -18,9 +17,6 @@ module Yesod.Form.Fields
+ , timeField
+ , htmlField
+ , emailField
+- , multiEmailField
+- , searchField
+- , AutoFocus
+ , urlField
+ , doubleField
+ , parseDate
+@@ -37,15 +33,11 @@ module Yesod.Form.Fields
, selectFieldList
, radioField
, radioFieldList
@@ -37,8 +263,8 @@ index 97d0034..016c98b 100644
, optionsPairs
, optionsEnum
) where
-@@ -70,6 +65,15 @@ import Text.HTML.SanitizeXSS (sanitizeBalance)
- import Control.Monad (when, unless)
+@@ -72,6 +64,15 @@ import Control.Monad (when, unless)
+ import Data.Either (partitionEithers)
import Data.Maybe (listToMaybe, fromMaybe)
+import qualified Text.Blaze as Text.Blaze.Internal
@@ -53,11 +279,11 @@ index 97d0034..016c98b 100644
import qualified Blaze.ByteString.Builder.Html.Utf8 as B
import Blaze.ByteString.Builder (writeByteString, toLazyByteString)
import Blaze.ByteString.Builder.Internal.Write (fromWriteList)
-@@ -82,14 +86,12 @@ import Data.Text (Text, unpack, pack)
+@@ -91,15 +92,12 @@ import qualified Data.Text as T (drop, dropWhile)
import qualified Data.Text.Read
import qualified Data.Map as Map
--import Yesod.Persist (selectList, runDB, Filter, SelectOpt, Key, YesodPersist, PersistEntity, PersistQuery, YesodDB)
+-import Yesod.Persist (selectList, runDB, Filter, SelectOpt, Key, YesodPersist, PersistEntity, PersistQuery)
import Control.Arrow ((&&&))
import Control.Applicative ((<$>), (<|>))
@@ -65,10 +291,11 @@ index 97d0034..016c98b 100644
import Data.Attoparsec.Text (Parser, char, string, digit, skipSpace, endOfInput, parseOnly)
-import Yesod.Persist.Core
-
+-
defaultFormMessage :: FormMessage -> Text
defaultFormMessage = englishFormMessage
-@@ -102,10 +104,24 @@ intField = Field
+
+@@ -111,10 +109,25 @@ intField = Field
Right (a, "") -> Right a
_ -> Left $ MsgInvalidInteger s
@@ -76,28 +303,29 @@ index 97d0034..016c98b 100644
-$newline never
-<input id="#{theId}" name="#{name}" *{attrs} type="number" step=1 :isReq:required="" value="#{showVal val}">
-|]
-+ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_arOn
++ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_aJJh
+ -> do { id
+ ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
+ id (toHtml theId);
+ id ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\"");
+ id (toHtml name);
+ id
-+ ((Text.Blaze.Internal.preEscapedText . pack) "\" type=\"number\"");
-+ Text.Hamlet.condH
++ ((Text.Blaze.Internal.preEscapedText . pack)
++ "\" type=\"number\" step=\"1\"");
++ condH
+ [(isReq,
+ id ((Text.Blaze.Internal.preEscapedText . pack) " required=\"\""))]
+ Nothing;
+ id ((Text.Blaze.Internal.preEscapedText . pack) " value=\"");
+ id (toHtml (showVal val));
+ id ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ id ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
++ id ((attrsToHtml . toAttributes) attrs);
+ id ((Text.Blaze.Internal.preEscapedText . pack) ">") }
+
, fieldEnctype = UrlEncoded
}
where
-@@ -119,10 +135,24 @@ doubleField = Field
+@@ -128,10 +141,25 @@ doubleField = Field
Right (a, "") -> Right a
_ -> Left $ MsgInvalidNumber s
@@ -105,28 +333,29 @@ index 97d0034..016c98b 100644
-$newline never
-<input id="#{theId}" name="#{name}" *{attrs} type="number" step=any :isReq:required="" value="#{showVal val}">
-|]
-+ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_arOz
++ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_aJJu
+ -> do { id
+ ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
+ id (toHtml theId);
+ id ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\"");
+ id (toHtml name);
+ id
-+ ((Text.Blaze.Internal.preEscapedText . pack) "\" type=\"text\"");
-+ Text.Hamlet.condH
++ ((Text.Blaze.Internal.preEscapedText . pack)
++ "\" type=\"number\" step=\"any\"");
++ condH
+ [(isReq,
+ id ((Text.Blaze.Internal.preEscapedText . pack) " required=\"\""))]
+ Nothing;
+ id ((Text.Blaze.Internal.preEscapedText . pack) " value=\"");
+ id (toHtml (showVal val));
+ id ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ id ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
++ id ((attrsToHtml . toAttributes) attrs);
+ id ((Text.Blaze.Internal.preEscapedText . pack) ">") }
+
, fieldEnctype = UrlEncoded
}
where showVal = either id (pack . show)
-@@ -130,10 +160,24 @@ $newline never
+@@ -139,10 +167,24 @@ $newline never
dayField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Day
dayField = Field
{ fieldParse = parseHelper $ parseDate . unpack
@@ -134,7 +363,7 @@ index 97d0034..016c98b 100644
-$newline never
-<input id="#{theId}" name="#{name}" *{attrs} type="date" :isReq:required="" value="#{showVal val}">
-|]
-+ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_arOJ
++ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_aJJF
+ -> do { id
+ ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
+ id (toHtml theId);
@@ -142,20 +371,20 @@ index 97d0034..016c98b 100644
+ id (toHtml name);
+ id
+ ((Text.Blaze.Internal.preEscapedText . pack) "\" type=\"date\"");
-+ Text.Hamlet.condH
++ condH
+ [(isReq,
+ id ((Text.Blaze.Internal.preEscapedText . pack) " required=\"\""))]
+ Nothing;
+ id ((Text.Blaze.Internal.preEscapedText . pack) " value=\"");
+ id (toHtml (showVal val));
+ id ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ id ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
++ id ((attrsToHtml . toAttributes) attrs);
+ id ((Text.Blaze.Internal.preEscapedText . pack) ">") }
+
, fieldEnctype = UrlEncoded
}
where showVal = either id (pack . show)
-@@ -141,10 +185,23 @@ $newline never
+@@ -150,10 +192,23 @@ $newline never
timeField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m TimeOfDay
timeField = Field
{ fieldParse = parseHelper parseTime
@@ -163,42 +392,47 @@ index 97d0034..016c98b 100644
-$newline never
-<input id="#{theId}" name="#{name}" *{attrs} :isReq:required="" value="#{showVal val}">
-|]
-+ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_arOW
++ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_aJJT
+ -> do { id
+ ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
+ id (toHtml theId);
+ id ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\"");
+ id (toHtml name);
+ id ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ Text.Hamlet.condH
++ condH
+ [(isReq,
+ id ((Text.Blaze.Internal.preEscapedText . pack) " required=\"\""))]
+ Nothing;
+ id ((Text.Blaze.Internal.preEscapedText . pack) " value=\"");
+ id (toHtml (showVal val));
+ id ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ id ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
++ id ((attrsToHtml . toAttributes) attrs);
+ id ((Text.Blaze.Internal.preEscapedText . pack) ">") }
+
, fieldEnctype = UrlEncoded
}
where
-@@ -157,10 +214,18 @@ $newline never
+@@ -166,10 +221,23 @@ $newline never
htmlField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Html
htmlField = Field
{ fieldParse = parseHelper $ Right . preEscapedText . sanitizeBalance
-- , fieldView = \theId name attrs val _isReq -> toWidget [hamlet|
+- , fieldView = \theId name attrs val isReq -> toWidget [hamlet|
-$newline never
--<textarea id="#{theId}" name="#{name}" *{attrs}>#{showVal val}
+-<textarea :isReq:required="" id="#{theId}" name="#{name}" *{attrs}>#{showVal val}
-|]
-+ , fieldView = \theId name attrs val _isReq -> toWidget $ \ _render_arP6
++ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_aJK4
+ -> do { id
-+ ((Text.Blaze.Internal.preEscapedText . pack) "<textarea id=\"");
++ ((Text.Blaze.Internal.preEscapedText . pack) "<textarea");
++ condH
++ [(isReq,
++ id ((Text.Blaze.Internal.preEscapedText . pack) " required=\"\""))]
++ Nothing;
++ id ((Text.Blaze.Internal.preEscapedText . pack) " id=\"");
+ id (toHtml theId);
+ id ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\"");
+ id (toHtml name);
+ id ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ id ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
++ id ((attrsToHtml . toAttributes) attrs);
+ id ((Text.Blaze.Internal.preEscapedText . pack) ">");
+ id (toHtml (showVal val));
+ id ((Text.Blaze.Internal.preEscapedText . pack) "</textarea>") }
@@ -206,16 +440,7 @@ index 97d0034..016c98b 100644
, fieldEnctype = UrlEncoded
}
where showVal = either id (pack . renderHtml)
-@@ -169,8 +234,6 @@ $newline never
- -- br-tags.
- newtype Textarea = Textarea { unTextarea :: Text }
- deriving (Show, Read, Eq, PersistField, Ord)
--instance PersistFieldSql Textarea where
-- sqlType _ = SqlString
- instance ToHtml Textarea where
- toHtml =
- unsafeByteString
-@@ -188,10 +251,18 @@ instance ToHtml Textarea where
+@@ -197,10 +265,18 @@ instance ToHtml Textarea where
textareaField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Textarea
textareaField = Field
{ fieldParse = parseHelper $ Right . Textarea
@@ -223,14 +448,14 @@ index 97d0034..016c98b 100644
-$newline never
-<textarea id="#{theId}" name="#{name}" *{attrs}>#{either id unTextarea val}
-|]
-+ , fieldView = \theId name attrs val _isReq -> toWidget $ \ _render_arPf
++ , fieldView = \theId name attrs val _isReq -> toWidget $ \ _render_aJKe
+ -> do { id
+ ((Text.Blaze.Internal.preEscapedText . pack) "<textarea id=\"");
+ id (toHtml theId);
+ id ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\"");
+ id (toHtml name);
+ id ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ id ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
++ id ((attrsToHtml . toAttributes) attrs);
+ id ((Text.Blaze.Internal.preEscapedText . pack) ">");
+ id (toHtml (either id unTextarea val));
+ id ((Text.Blaze.Internal.preEscapedText . pack) "</textarea>") }
@@ -238,7 +463,7 @@ index 97d0034..016c98b 100644
, fieldEnctype = UrlEncoded
}
-@@ -199,10 +270,19 @@ hiddenField :: (Monad m, PathPiece p, RenderMessage (HandlerSite m) FormMessage)
+@@ -208,10 +284,19 @@ hiddenField :: (Monad m, PathPiece p, RenderMessage (HandlerSite m) FormMessage)
=> Field m p
hiddenField = Field
{ fieldParse = parseHelper $ maybe (Left MsgValueRequired) Right . fromPathPiece
@@ -246,7 +471,7 @@ index 97d0034..016c98b 100644
-$newline never
-<input type="hidden" id="#{theId}" name="#{name}" *{attrs} value="#{either id toPathPiece val}">
-|]
-+ , fieldView = \theId name attrs val _isReq -> toWidget $ \ _render_arPo
++ , fieldView = \theId name attrs val _isReq -> toWidget $ \ _render_aJKo
+ -> do { id
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "<input type=\"hidden\" id=\"");
@@ -256,13 +481,13 @@ index 97d0034..016c98b 100644
+ id ((Text.Blaze.Internal.preEscapedText . pack) "\" value=\"");
+ id (toHtml (either id toPathPiece val));
+ id ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ id ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
++ id ((attrsToHtml . toAttributes) attrs);
+ id ((Text.Blaze.Internal.preEscapedText . pack) ">") }
+
, fieldEnctype = UrlEncoded
}
-@@ -210,20 +290,55 @@ textField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Tex
+@@ -219,20 +304,53 @@ textField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Tex
textField = Field
{ fieldParse = parseHelper $ Right
, fieldView = \theId name attrs val isReq ->
@@ -270,28 +495,26 @@ index 97d0034..016c98b 100644
-$newline never
-<input id="#{theId}" name="#{name}" *{attrs} type="text" :isReq:required value="#{either id id val}">
-|]
-+ do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml theId);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml theId);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml name);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml name);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\" type=\"text\"");
-+ Text.Hamlet.condH
++ condH
+ [(isReq,
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) " required"))]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) " value=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ (toHtml (either id id val));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml (either id id val));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) ((attrsToHtml . toAttributes) attrs);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) ">") }
+
, fieldEnctype = UrlEncoded
@@ -304,7 +527,7 @@ index 97d0034..016c98b 100644
-$newline never
-<input id="#{theId}" name="#{name}" *{attrs} type="password" :isReq:required="" value="#{either id id val}">
-|]
-+ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_arPF
++ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_aJKH
+ -> do { id
+ ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
+ id (toHtml theId);
@@ -313,20 +536,20 @@ index 97d0034..016c98b 100644
+ id
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "\" type=\"password\"");
-+ Text.Hamlet.condH
++ condH
+ [(isReq,
+ id ((Text.Blaze.Internal.preEscapedText . pack) " required=\"\""))]
+ Nothing;
+ id ((Text.Blaze.Internal.preEscapedText . pack) " value=\"");
+ id (toHtml (either id id val));
+ id ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ id ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
++ id ((attrsToHtml . toAttributes) attrs);
+ id ((Text.Blaze.Internal.preEscapedText . pack) ">") }
+
, fieldEnctype = UrlEncoded
}
-@@ -295,10 +410,24 @@ emailField = Field
+@@ -304,10 +422,24 @@ emailField = Field
case Email.canonicalizeEmail $ encodeUtf8 s of
Just e -> Right $ decodeUtf8With lenientDecode e
Nothing -> Left $ MsgInvalidEmail s
@@ -334,7 +557,7 @@ index 97d0034..016c98b 100644
-$newline never
-<input id="#{theId}" name="#{name}" *{attrs} type="email" :isReq:required="" value="#{either id id val}">
-|]
-+ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_arQe
++ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_aJLq
+ -> do { id
+ ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
+ id (toHtml theId);
@@ -342,54 +565,82 @@ index 97d0034..016c98b 100644
+ id (toHtml name);
+ id
+ ((Text.Blaze.Internal.preEscapedText . pack) "\" type=\"email\"");
-+ Text.Hamlet.condH
++ condH
+ [(isReq,
+ id ((Text.Blaze.Internal.preEscapedText . pack) " required=\"\""))]
+ Nothing;
+ id ((Text.Blaze.Internal.preEscapedText . pack) " value=\"");
+ id (toHtml (either id id val));
+ id ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ id ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
++ id ((attrsToHtml . toAttributes) attrs);
+ id ((Text.Blaze.Internal.preEscapedText . pack) ">") }
+
, fieldEnctype = UrlEncoded
}
-@@ -307,20 +436,78 @@ searchField :: Monad m => RenderMessage (HandlerSite m) FormMessage => AutoFocus
+@@ -322,10 +454,25 @@ multiEmailField = Field
+ in case partitionEithers addrs of
+ ([], good) -> Right good
+ (bad, _) -> Left $ MsgInvalidEmail $ cat bad
+- , fieldView = \theId name attrs val isReq -> toWidget [hamlet|
+-$newline never
+-<input id="#{theId}" name="#{name}" *{attrs} type="email" multiple :isReq:required="" value="#{either id cat val}">
+-|]
++ , fieldView = \theId name attrs val isReq -> toWidget $ \ _render_aJMd
++ -> do { id
++ ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
++ id (toHtml theId);
++ id ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\"");
++ id (toHtml name);
++ id
++ ((Text.Blaze.Internal.preEscapedText . pack)
++ "\" type=\"email\" multiple");
++ condH
++ [(isReq,
++ id ((Text.Blaze.Internal.preEscapedText . pack) " required=\"\""))]
++ Nothing;
++ id ((Text.Blaze.Internal.preEscapedText . pack) " value=\"");
++ id (toHtml (either id cat val));
++ id ((Text.Blaze.Internal.preEscapedText . pack) "\"");
++ id ((attrsToHtml . toAttributes) attrs);
++ id ((Text.Blaze.Internal.preEscapedText . pack) ">") }
++
+ , fieldEnctype = UrlEncoded
+ }
+ where
+@@ -341,20 +488,75 @@ searchField :: Monad m => RenderMessage (HandlerSite m) FormMessage => AutoFocus
searchField autoFocus = Field
{ fieldParse = parseHelper Right
, fieldView = \theId name attrs val isReq -> do
-- [whamlet|\
+- [whamlet|
-$newline never
-<input id="#{theId}" name="#{name}" *{attrs} type="search" :isReq:required="" :autoFocus:autofocus="" value="#{either id id val}">
-|]
-+ do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml theId);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml theId);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml name);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml name);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\" type=\"search\"");
-+ Text.Hamlet.condH
++ condH
+ [(isReq,
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) " required=\"\""))]
+ Nothing;
-+ Text.Hamlet.condH
++ condH
+ [(autoFocus,
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) " autofocus=\"\""))]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) " value=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ (toHtml (either id id val));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml (either id id val));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) ((attrsToHtml . toAttributes) attrs);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) ">") }
+
when autoFocus $ do
@@ -402,15 +653,15 @@ index 97d0034..016c98b 100644
- ##{theId}
- -webkit-appearance: textfield
- |]
-+ do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "<script>if (!('autofocus' in document.createElement('input'))) {document.getElementById('");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml theId);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml theId);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "').focus();}</script>") }
+
-+ toWidget $ \ _render_arQv
++ toWidget $ \ _render_aJMx
+ -> (Text.Css.CssNoWhitespace
+ . (foldr ($) []))
+ [((++)
@@ -422,7 +673,7 @@ index 97d0034..016c98b 100644
+ . Text.Css.pack)
+ "#",
+ toCss theId],
-+ Text.Css.blockAttrs = (concat
++ Text.Css.blockAttrs = (Prelude.concat
+ $ ([Text.Css.Attr
+ (Data.Monoid.mconcat
+ [(Text.Css.fromText
@@ -437,8 +688,7 @@ index 97d0034..016c98b 100644
+ Text.Css.mixinAttrs
+ []))),
+ Text.Css.blockBlocks = (),
-+ Text.Css.blockMixins = ()}
-+ :)
++ Text.Css.blockMixins = ()} :)
+ . ((foldr (.) id [])
+ . (concatMap Text.Css.mixinBlocks [] ++)))
+ [])))]
@@ -446,39 +696,37 @@ index 97d0034..016c98b 100644
, fieldEnctype = UrlEncoded
}
-@@ -331,7 +518,30 @@ urlField = Field
+@@ -365,7 +567,28 @@ urlField = Field
Nothing -> Left $ MsgInvalidUrl s
Just _ -> Right s
, fieldView = \theId name attrs val isReq ->
- [whamlet|<input ##{theId} name=#{name} *{attrs} type=url :isReq:required value=#{either id id val}>|]
-+ do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml theId);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml theId);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml name);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml name);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\" type=\"url\"");
-+ Text.Hamlet.condH
++ condH
+ [(isReq,
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) " required"))]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) " value=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ (toHtml (either id id val));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml (either id id val));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) ((attrsToHtml . toAttributes) attrs);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) ">") }
+
, fieldEnctype = UrlEncoded
}
-@@ -344,18 +554,56 @@ selectField :: (Eq a, RenderMessage site FormMessage)
+@@ -378,18 +601,54 @@ selectField :: (Eq a, RenderMessage site FormMessage)
=> HandlerT site IO (OptionList a)
-> Field (HandlerT site IO) a
selectField = selectFieldHelper
@@ -494,60 +742,58 @@ index 97d0034..016c98b 100644
-$newline never
-<option value=#{value} :isSel:selected>#{text}
-|]) -- inside
-+ (\theId name attrs inside -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\theId name attrs inside -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "<select id=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml theId);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml theId);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml name);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml name);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) ((attrsToHtml . toAttributes) attrs);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) ">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) inside;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) inside;
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</select>") })
+ -- outside
-+ (\_theId _name isSel -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\_theId _name isSel -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "<option value=\"none\"");
-+ Text.Hamlet.condH
++ condH
+ [(isSel,
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) " selected"))]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) ">");
+ ((Control.Monad.liftM (toHtml .) getMessageRender)
+ >>=
-+ (\ urender_arQS
-+ -> (Yesod.Core.Widget.asWidgetT . toWidget)
-+ (urender_arQS MsgSelectNone)));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\ urender_aJMX
++ -> (asWidgetT . toWidget) (urender_aJMX MsgSelectNone)));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</option>") })
+ -- onOpt
-+ (\_theId _name _attrs value isSel text -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\_theId _name _attrs value isSel text -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "<option value=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml value);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml value);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ Text.Hamlet.condH
++ condH
+ [(isSel,
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) " selected"))]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) ">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml text);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml text);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</option>") })
+ -- inside
multiSelectFieldList :: (Eq a, RenderMessage site FormMessage, RenderMessage site msg)
=> [(msg, a)]
-@@ -378,11 +626,48 @@ multiSelectField ioptlist =
+@@ -412,11 +671,45 @@ multiSelectField ioptlist =
view theId name attrs val isReq = do
opts <- fmap olOptions $ handlerToWidget ioptlist
let selOpts = map (id &&& (optselected val)) opts
@@ -556,68 +802,52 @@ index 97d0034..016c98b 100644
- $forall (opt, optsel) <- selOpts
- <option value=#{optionExternalValue opt} :optsel:selected>#{optionDisplay opt}
- |]
-+ do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "<select id=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml theId);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml theId);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml name);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml name);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ Text.Hamlet.condH
++ condH
+ [(isReq,
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) " required"))]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) " multiple");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) ((attrsToHtml . toAttributes) attrs);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) ">");
+ Data.Foldable.mapM_
-+ (\ (opt_arRl, optsel_arRm)
-+ -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\ (opt_aJNs, optsel_aJNt)
++ -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "<option value=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ (toHtml (optionExternalValue opt_arRl));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml (optionExternalValue opt_aJNs));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ Text.Hamlet.condH
-+ [(optsel_arRm,
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ condH
++ [(optsel_aJNt,
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) " selected"))]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) ">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ (toHtml (optionDisplay opt_arRl));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml (optionDisplay opt_aJNs));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</option>") })
+ selOpts;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</select>") }
+
where
optselected (Left _) _ = False
optselected (Right vals) opt = (optionInternalValue opt) `elem` vals
-@@ -392,67 +677,172 @@ radioFieldList :: (Eq a, RenderMessage site FormMessage, RenderMessage site msg)
- -> Field (HandlerT site IO) a
- radioFieldList = radioField . optionsPairs
-
--checkboxesFieldList :: (Eq a, RenderMessage site FormMessage, RenderMessage site msg) => [(msg, a)]
-- -> Field (HandlerT site IO) [a]
--checkboxesFieldList = checkboxesField . optionsPairs
--
--checkboxesField :: (Eq a, RenderMessage site FormMessage)
-- => HandlerT site IO (OptionList a)
-- -> Field (HandlerT site IO) [a]
--checkboxesField ioptlist = (multiSelectField ioptlist)
-- { fieldView =
-- \theId name attrs val isReq -> do
-- opts <- fmap olOptions $ handlerToWidget ioptlist
-- let optselected (Left _) _ = False
-- optselected (Right vals) opt = (optionInternalValue opt) `elem` vals
+@@ -439,54 +732,196 @@ checkboxesField ioptlist = (multiSelectField ioptlist)
+ opts <- fmap olOptions $ handlerToWidget ioptlist
+ let optselected (Left _) _ = False
+ optselected (Right vals) opt = (optionInternalValue opt) `elem` vals
- [whamlet|
- <span ##{theId}>
- $forall opt <- opts
@@ -625,7 +855,38 @@ index 97d0034..016c98b 100644
- <input type=checkbox name=#{name} value=#{optionExternalValue opt} *{attrs} :optselected val opt:checked>
- #{optionDisplay opt}
- |]
-- }
++ do { (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . pack) "<span id=\"");
++ (asWidgetT . toWidget) (toHtml theId);
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . pack) "\">");
++ Data.Foldable.mapM_
++ (\ opt_aJNI
++ -> do { (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . pack)
++ "<label><input type=\"checkbox\" name=\"");
++ (asWidgetT . toWidget) (toHtml name);
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . pack) "\" value=\"");
++ (asWidgetT . toWidget) (toHtml (optionExternalValue opt_aJNI));
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . pack) "\"");
++ condH
++ [(optselected val opt_aJNI,
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . pack) " checked"))]
++ Nothing;
++ (asWidgetT . toWidget) ((attrsToHtml . toAttributes) attrs);
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . pack) ">");
++ (asWidgetT . toWidget) (toHtml (optionDisplay opt_aJNI));
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . pack) "</label>") })
++ opts;
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . pack) "</span>") }
++
+ }
radioField :: (Eq a, RenderMessage site FormMessage)
=> HandlerT site IO (OptionList a)
@@ -649,78 +910,76 @@ index 97d0034..016c98b 100644
- <input id=#{theId}-#{value} type=radio name=#{name} value=#{value} :isSel:checked *{attrs}>
- \#{text}
-|])
-+ (\theId _name _attrs inside -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\theId _name _attrs inside -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "<div id=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml theId);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml theId);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) inside;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) inside;
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</div>") })
+
-+ (\theId name isSel -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\theId name isSel -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "<label class=\"radio\" for=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml theId);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml theId);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "-none\"><div><input id=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml theId);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml theId);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "-none\" type=\"radio\" name=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml name);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml name);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\" value=\"none\"");
-+ Text.Hamlet.condH
++ condH
+ [(isSel,
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) " checked"))]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) ">");
+ ((Control.Monad.liftM (toHtml .) getMessageRender)
+ >>=
-+ (\ urender_arRA
-+ -> (Yesod.Core.Widget.asWidgetT . toWidget)
-+ (urender_arRA MsgSelectNone)));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\ urender_aJNY
++ -> (asWidgetT . toWidget) (urender_aJNY MsgSelectNone)));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</div></label>") })
+
-+ (\theId name attrs value isSel text -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\theId name attrs value isSel text -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "<label class=\"radio\" for=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml theId);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml theId);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "-");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml value);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml value);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "\"><div><input id=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml theId);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml theId);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "-");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml value);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml value);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "\" type=\"radio\" name=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml name);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml name);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\" value=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml value);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml value);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ Text.Hamlet.condH
++ condH
+ [(isSel,
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) " checked"))]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) ((attrsToHtml . toAttributes) attrs);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) ">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml text);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml text);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</div></label>") })
+
@@ -732,90 +991,84 @@ index 97d0034..016c98b 100644
- $if not isReq
- <input id=#{theId}-none *{attrs} type=radio name=#{name} value=none checked>
- <label for=#{theId}-none>_{MsgSelectNone}
-+ , fieldView = \theId name attrs val isReq -> do { Text.Hamlet.condH
+-
++ , fieldView = \theId name attrs val isReq -> do { condH
+ [(not isReq,
-+ do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml theId);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml theId);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "-none\" type=\"radio\" name=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml name);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml name);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "\" value=\"none\" checked");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) ((attrsToHtml . toAttributes) attrs);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "><label for=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml theId);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml theId);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "-none\">");
+ ((Control.Monad.liftM (toHtml .) getMessageRender)
+ >>=
-+ (\ urender_arRX
-+ -> (Yesod.Core.Widget.asWidgetT . toWidget)
-+ (urender_arRX MsgSelectNone)));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\ urender_aJOn
++ -> (asWidgetT . toWidget) (urender_aJOn MsgSelectNone)));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</label>") })]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml theId);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml theId);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "-yes\" type=\"radio\" name=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml name);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml name);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\" value=\"yes\"");
-+ Text.Hamlet.condH
++ condH
+ [(showVal id val,
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) " checked"))]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) ((attrsToHtml . toAttributes) attrs);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "><label for=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml theId);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml theId);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "-yes\">");
+ ((Control.Monad.liftM (toHtml .) getMessageRender)
+ >>=
-+ (\ urender_arRY
-+ -> (Yesod.Core.Widget.asWidgetT . toWidget)
-+ (urender_arRY MsgBoolYes)));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\ urender_aJOo
++ -> (asWidgetT . toWidget) (urender_aJOo MsgBoolYes)));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "</label><input id=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml theId);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml theId);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "-no\" type=\"radio\" name=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml name);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml name);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\" value=\"no\"");
-+ Text.Hamlet.condH
++ condH
+ [(showVal not val,
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) " checked"))]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) ((attrsToHtml . toAttributes) attrs);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "><label for=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml theId);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml theId);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "-no\">");
+ ((Control.Monad.liftM (toHtml .) getMessageRender)
+ >>=
-+ (\ urender_arRZ
-+ -> (Yesod.Core.Widget.asWidgetT . toWidget)
-+ (urender_arRZ MsgBoolNo)));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\ urender_aJOp
++ -> (asWidgetT . toWidget) (urender_aJOp MsgBoolNo)));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</label>") }
--
-<input id=#{theId}-yes *{attrs} type=radio name=#{name} value=yes :showVal id val:checked>
-<label for=#{theId}-yes>_{MsgBoolYes}
-
@@ -825,7 +1078,7 @@ index 97d0034..016c98b 100644
, fieldEnctype = UrlEncoded
}
where
-@@ -478,10 +868,25 @@ $newline never
+@@ -512,10 +947,24 @@ $newline never
checkBoxField :: Monad m => RenderMessage (HandlerSite m) FormMessage => Field m Bool
checkBoxField = Field
{ fieldParse = \e _ -> return $ checkBoxParser e
@@ -833,38 +1086,46 @@ index 97d0034..016c98b 100644
-$newline never
-<input id=#{theId} *{attrs} type=checkbox name=#{name} value=yes :showVal id val:checked>
-|]
-+ , fieldView = \theId name attrs val _ -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ , fieldView = \theId name attrs val _ -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml theId);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml theId);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "\" type=\"checkbox\" name=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml name);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml name);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\" value=\"yes\"");
-+ Text.Hamlet.condH
++ condH
+ [(showVal id val,
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) " checked"))]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) ((attrsToHtml . toAttributes) attrs);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) ">") }
+
, fieldEnctype = UrlEncoded
}
-@@ -525,49 +930,7 @@ optionsPairs opts = do
+@@ -559,69 +1008,6 @@ optionsPairs opts = do
optionsEnum :: (MonadHandler m, Show a, Enum a, Bounded a) => m (OptionList a)
optionsEnum = optionsPairs $ map (\x -> (pack $ show x, x)) [minBound..maxBound]
+-#if MIN_VERSION_persistent(2, 0, 0)
+-optionsPersist :: ( YesodPersist site, PersistEntity a
+- , PersistQuery (PersistEntityBackend a)
+- , PathPiece (Key a)
+- , RenderMessage site msg
+- , YesodPersistBackend site ~ PersistEntityBackend a
+- )
+-#else
-optionsPersist :: ( YesodPersist site, PersistEntity a
-- , PersistQuery (YesodDB site)
+- , PersistQuery (YesodPersistBackend site (HandlerT site IO))
- , PathPiece (Key a)
-- , PersistEntityBackend a ~ PersistMonadBackend (YesodDB site)
+- , PersistEntityBackend a ~ PersistMonadBackend (YesodPersistBackend site (HandlerT site IO))
- , RenderMessage site msg
- )
+-#endif
- => [Filter a]
- -> [SelectOpt a]
- -> (a -> msg)
@@ -882,6 +1143,16 @@ index 97d0034..016c98b 100644
--- the entire @Entity@.
---
--- Since 1.3.2
+-#if MIN_VERSION_persistent(2, 0, 0)
+-optionsPersistKey
+- :: (YesodPersist site
+- , PersistEntity a
+- , PersistQuery (PersistEntityBackend a)
+- , PathPiece (Key a)
+- , RenderMessage site msg
+- , YesodPersistBackend site ~ PersistEntityBackend a
+- )
+-#else
-optionsPersistKey
- :: (YesodPersist site
- , PersistEntity a
@@ -889,6 +1160,7 @@ index 97d0034..016c98b 100644
- , PathPiece (Key a)
- , RenderMessage site msg
- , PersistEntityBackend a ~ PersistMonadBackend (YesodDB site))
+-#endif
- => [Filter a]
- -> [SelectOpt a]
- -> (a -> msg)
@@ -902,18 +1174,17 @@ index 97d0034..016c98b 100644
- , optionInternalValue = key
- , optionExternalValue = toPathPiece key
- }) pairs
-+
selectFieldHelper
:: (Eq a, RenderMessage site FormMessage)
-@@ -611,9 +974,21 @@ fileField = Field
+@@ -665,9 +1051,21 @@ fileField = Field
case files of
[] -> Right Nothing
file:_ -> Right $ Just file
- , fieldView = \id' name attrs _ isReq -> toWidget [hamlet|
- <input id=#{id'} name=#{name} *{attrs} type=file :isReq:required>
- |]
-+ , fieldView = \id' name attrs _ isReq -> toWidget $ \ _render_arSN
++ , fieldView = \id' name attrs _ isReq -> toWidget $ \ _render_aJPt
+ -> do { id
+ ((Text.Blaze.Internal.preEscapedText . pack) "<input id=\"");
+ id (toHtml id');
@@ -921,17 +1192,17 @@ index 97d0034..016c98b 100644
+ id (toHtml name);
+ id
+ ((Text.Blaze.Internal.preEscapedText . pack) "\" type=\"file\"");
-+ Text.Hamlet.condH
++ condH
+ [(isReq,
+ id ((Text.Blaze.Internal.preEscapedText . pack) " required"))]
+ Nothing;
-+ id ((Text.Hamlet.attrsToHtml . toAttributes) attrs);
++ id ((attrsToHtml . toAttributes) attrs);
+ id ((Text.Blaze.Internal.preEscapedText . pack) ">") }
+
, fieldEnctype = Multipart
}
-@@ -640,10 +1015,20 @@ fileAFormReq fs = AForm $ \(site, langs) menvs ints -> do
+@@ -694,10 +1092,19 @@ fileAFormReq fs = AForm $ \(site, langs) menvs ints -> do
{ fvLabel = toHtml $ renderMessage site langs $ fsLabel fs
, fvTooltip = fmap (toHtml . renderMessage site langs) $ fsTooltip fs
, fvId = id'
@@ -939,24 +1210,23 @@ index 97d0034..016c98b 100644
-$newline never
-<input type=file name=#{name} ##{id'} *{fsAttrs fs}>
-|]
-+ , fvInput = do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ , fvInput = do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "<input type=\"file\" name=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml name);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml name);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\" id=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml id');
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml id');
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ ((Text.Hamlet.attrsToHtml . toAttributes) (fsAttrs fs));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) ((attrsToHtml . toAttributes) (fsAttrs fs));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) ">") }
+
, fvErrors = errs
, fvRequired = True
}
-@@ -672,10 +1057,20 @@ fileAFormOpt fs = AForm $ \(master, langs) menvs ints -> do
+@@ -726,10 +1133,19 @@ fileAFormOpt fs = AForm $ \(master, langs) menvs ints -> do
{ fvLabel = toHtml $ renderMessage master langs $ fsLabel fs
, fvTooltip = fmap (toHtml . renderMessage master langs) $ fsTooltip fs
, fvId = id'
@@ -964,33 +1234,32 @@ index 97d0034..016c98b 100644
-$newline never
-<input type=file name=#{name} ##{id'} *{fsAttrs fs}>
-|]
-+ , fvInput = do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ , fvInput = do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "<input type=\"file\" name=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml name);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml name);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\" id=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml id');
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml id');
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ ((Text.Hamlet.attrsToHtml . toAttributes) (fsAttrs fs));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) ((attrsToHtml . toAttributes) (fsAttrs fs));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) ">") }
+
, fvErrors = errs
, fvRequired = False
}
diff --git a/Yesod/Form/Functions.hs b/Yesod/Form/Functions.hs
-index 8a36710..8675a10 100644
+index 9e6abaf..0c2a0ce 100644
--- a/Yesod/Form/Functions.hs
+++ b/Yesod/Form/Functions.hs
-@@ -53,12 +53,16 @@ import Text.Blaze (Markup, toMarkup)
+@@ -60,12 +60,16 @@ import Text.Blaze (Markup, toMarkup)
#define toHtml toMarkup
import Yesod.Core
import Network.Wai (requestMethod)
-import Text.Hamlet (shamlet)
-+--`import Text.Hamlet (shamlet)
++--import Text.Hamlet (shamlet)
import Data.Monoid (mempty)
import Data.Maybe (listToMaybe, fromMaybe)
import qualified Data.Map as Map
@@ -1003,7 +1272,7 @@ index 8a36710..8675a10 100644
-- | Get a unique identifier.
newFormIdent :: Monad m => MForm m Text
-@@ -210,7 +214,14 @@ postHelper form env = do
+@@ -217,7 +221,14 @@ postHelper form env = do
let token =
case reqToken req of
Nothing -> mempty
@@ -1019,7 +1288,7 @@ index 8a36710..8675a10 100644
m <- getYesod
langs <- languages
((res, xml), enctype) <- runFormGeneric (form token) m langs env
-@@ -279,7 +290,12 @@ getHelper :: MonadHandler m
+@@ -297,7 +308,12 @@ getHelper :: MonadHandler m
-> Maybe (Env, FileEnv)
-> m (a, Enctype)
getHelper form env = do
@@ -1033,16 +1302,39 @@ index 8a36710..8675a10 100644
langs <- languages
m <- getYesod
runFormGeneric (form fragment) m langs env
-@@ -293,19 +309,66 @@ renderTable, renderDivs, renderDivsNoLabels :: Monad m => FormRender m a
+@@ -332,10 +348,15 @@ identifyForm
+ identifyForm identVal form = \fragment -> do
+ -- Create hidden <input>.
+ let fragment' =
+- [shamlet|
+- <input type=hidden name=#{identifyFormKey} value=#{identVal}>
+- #{fragment}
+- |]
++ do { id
++ ((Text.Blaze.Internal.preEscapedText . pack)
++ "<input type=\"hidden\" name=\"");
++ id (toHtml identifyFormKey);
++ id ((Text.Blaze.Internal.preEscapedText . pack) "\" value=\"");
++ id (toHtml identVal);
++ id ((Text.Blaze.Internal.preEscapedText . pack) "\">");
++ id (toHtml fragment) }
++
+
+ -- Check if we got its value back.
+ mp <- askParams
+@@ -365,22 +386,70 @@ renderTable, renderDivs, renderDivsNoLabels :: Monad m => FormRender m a
renderTable aform fragment = do
(res, views') <- aFormToForm aform
let views = views' []
- let widget = [whamlet|
-$newline never
--\#{fragment}
--$forall view <- views
+-$if null views
+- \#{fragment}
+-$forall (isFirst, view) <- addIsFirst views
- <tr :fvRequired view:.required :not $ fvRequired view:.optional>
- <td>
+- $if isFirst
+- \#{fragment}
- <label for=#{fvId view}>#{fvLabel view}
- $maybe tt <- fvTooltip view
- <div .tooltip>#{tt}
@@ -1050,70 +1342,74 @@ index 8a36710..8675a10 100644
- $maybe err <- fvErrors view
- <td .errors>#{err}
-|]
-+ let widget = do { (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml fragment);
++ let widget = do { Text.Hamlet.condH
++ [(null views, (asWidgetT . toWidget) (toHtml fragment))] Nothing;
+ Data.Foldable.mapM_
-+ (\ view_aagq
-+ -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\ (isFirst_ab5u, view_ab5v)
++ -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "<tr");
+ Text.Hamlet.condH
-+ [(or [fvRequired view_aagq, not (fvRequired view_aagq)],
-+ do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ [(or [fvRequired view_ab5v, not (fvRequired view_ab5v)],
++ do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) " class=\"");
+ Text.Hamlet.condH
-+ [(fvRequired view_aagq,
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ [(fvRequired view_ab5v,
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "required "))]
+ Nothing;
+ Text.Hamlet.condH
-+ [(not (fvRequired view_aagq),
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ [(not (fvRequired view_ab5v),
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "optional"))]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\"") })]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ ((Text.Blaze.Internal.preEscapedText . pack) "><td><label for=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml (fvId view_aagq));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . pack) "><td>");
++ Text.Hamlet.condH
++ [(isFirst_ab5u, (asWidgetT . toWidget) (toHtml fragment))] Nothing;
++ (asWidgetT . toWidget)
++ ((Text.Blaze.Internal.preEscapedText . pack) "<label for=\"");
++ (asWidgetT . toWidget) (toHtml (fvId view_ab5v));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ (toHtml (fvLabel view_aagq));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml (fvLabel view_ab5v));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</label>");
+ Text.Hamlet.maybeH
-+ (fvTooltip view_aagq)
-+ (\ tt_aagr
-+ -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (fvTooltip view_ab5v)
++ (\ tt_ab5w
++ -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "<div class=\"tooltip\">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml tt_aagr);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml tt_ab5w);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</div>") })
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</td><td>");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (fvInput view_aagq);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (fvInput view_ab5v);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</td>");
+ Text.Hamlet.maybeH
-+ (fvErrors view_aagq)
-+ (\ err_aags
-+ -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (fvErrors view_ab5v)
++ (\ err_ab5x
++ -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "<td class=\"errors\">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml err_aags);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml err_ab5x);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</td>") })
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</tr>") })
-+ views }
++ (addIsFirst views) }
+
return (res, widget)
-
- -- | render a field inside a div
-@@ -318,19 +381,67 @@ renderDivsMaybeLabels :: Monad m => Bool -> FormRender m a
+ where
+ addIsFirst [] = []
+@@ -396,19 +465,66 @@ renderDivsMaybeLabels :: Monad m => Bool -> FormRender m a
renderDivsMaybeLabels withLabels aform fragment = do
(res, views') <- aFormToForm aform
let views = views' []
@@ -1130,71 +1426,70 @@ index 8a36710..8675a10 100644
- $maybe err <- fvErrors view
- <div .errors>#{err}
-|]
-+ let widget = do { (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml fragment);
++ let widget = do { (asWidgetT . toWidget) (toHtml fragment);
+ Data.Foldable.mapM_
-+ (\ view_aagE
-+ -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\ view_ab5K
++ -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "<div");
+ Text.Hamlet.condH
-+ [(or [fvRequired view_aagE, not (fvRequired view_aagE)],
-+ do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ [(or [fvRequired view_ab5K, not (fvRequired view_ab5K)],
++ do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) " class=\"");
+ Text.Hamlet.condH
-+ [(fvRequired view_aagE,
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ [(fvRequired view_ab5K,
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "required "))]
+ Nothing;
+ Text.Hamlet.condH
-+ [(not (fvRequired view_aagE),
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ [(not (fvRequired view_ab5K),
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "optional"))]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\"") })]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) ">");
+ Text.Hamlet.condH
+ [(withLabels,
-+ do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "<label for=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml (fvId view_aagE));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml (fvId view_ab5K));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ (toHtml (fvLabel view_aagE));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml (fvLabel view_ab5K));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</label>") })]
+ Nothing;
+ Text.Hamlet.maybeH
-+ (fvTooltip view_aagE)
-+ (\ tt_aagF
-+ -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (fvTooltip view_ab5K)
++ (\ tt_ab5L
++ -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "<div class=\"tooltip\">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml tt_aagF);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml tt_ab5L);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</div>") })
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (fvInput view_aagE);
++ (asWidgetT . toWidget) (fvInput view_ab5K);
+ Text.Hamlet.maybeH
-+ (fvErrors view_aagE)
-+ (\ err_aagG
-+ -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (fvErrors view_ab5K)
++ (\ err_ab5M
++ -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "<div class=\"errors\">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml err_aagG);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml err_ab5M);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</div>") })
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</div>") })
+ views }
+
return (res, widget)
- -- | Render a form using Bootstrap-friendly shamlet syntax.
-@@ -354,19 +465,63 @@ renderBootstrap aform fragment = do
+ -- | Render a form using Bootstrap v2-friendly shamlet syntax.
+@@ -436,19 +552,62 @@ renderBootstrap2 aform fragment = do
let views = views' []
has (Just _) = True
has Nothing = False
@@ -1211,73 +1506,79 @@ index 8a36710..8675a10 100644
- $maybe err <- fvErrors view
- <span .help-block>#{err}
- |]
-+ let widget = do { (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml fragment);
++ let widget = do { (asWidgetT . toWidget) (toHtml fragment);
+ Data.Foldable.mapM_
-+ (\ view_aagR
-+ -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\ view_ab5Y
++ -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "<div class=\"control-group clearfix ");
+ Text.Hamlet.condH
-+ [(fvRequired view_aagR,
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ [(fvRequired view_ab5Y,
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "required "))]
+ Nothing;
+ Text.Hamlet.condH
-+ [(not (fvRequired view_aagR),
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ [(not (fvRequired view_ab5Y),
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "optional "))]
+ Nothing;
+ Text.Hamlet.condH
-+ [(has (fvErrors view_aagR),
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ [(has (fvErrors view_ab5Y),
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "error"))]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "\"><label class=\"control-label\" for=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml (fvId view_aagR));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml (fvId view_ab5Y));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "\">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ (toHtml (fvLabel view_aagR));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml (fvLabel view_ab5Y));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "</label><div class=\"controls input\">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (fvInput view_aagR);
++ (asWidgetT . toWidget) (fvInput view_ab5Y);
+ Text.Hamlet.maybeH
-+ (fvTooltip view_aagR)
-+ (\ tt_aagS
-+ -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (fvTooltip view_ab5Y)
++ (\ tt_ab5Z
++ -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "<span class=\"help-block\">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml tt_aagS);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml tt_ab5Z);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</span>") })
+ Nothing;
+ Text.Hamlet.maybeH
-+ (fvErrors view_aagR)
-+ (\ err_aagT
-+ -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (fvErrors view_ab5Y)
++ (\ err_ab60
++ -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack)
+ "<span class=\"help-block\">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml err_aagT);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml err_ab60);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</span>") })
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . pack) "</div></div>") })
+ views }
+
return (res, widget)
- check :: (Monad m, RenderMessage (HandlerSite m) msg)
+ -- | Deprecated synonym for 'renderBootstrap2'.
diff --git a/Yesod/Form/Jquery.hs b/Yesod/Form/Jquery.hs
-index 2c4ae25..ed9b366 100644
+index 362eb8a..1df9966 100644
--- a/Yesod/Form/Jquery.hs
+++ b/Yesod/Form/Jquery.hs
-@@ -12,12 +12,24 @@ module Yesod.Form.Jquery
- , Default (..)
- ) where
+@@ -17,11 +17,23 @@ import Yesod.Core
+ import Yesod.Form
+ import Data.Time (Day)
+ import Data.Default
+-import Text.Hamlet (shamlet)
+-import Text.Julius (julius, rawJS)
++--import Text.Hamlet (shamlet)
++import Text.Julius (rawJS)
+ import Data.Text (Text, pack, unpack)
+ import Data.Monoid (mconcat)
+import qualified Text.Blaze as Text.Blaze.Internal
+import qualified Text.Blaze.Internal
@@ -1291,18 +1592,10 @@ index 2c4ae25..ed9b366 100644
+import qualified Data.Text.Lazy.Builder
+import qualified Text.Shakespeare
+
- import Yesod.Core
- import Yesod.Form
- import Data.Time (Day)
- import Data.Default
--import Text.Hamlet (shamlet)
--import Text.Julius (julius, rawJS)
-+--import Text.Hamlet (shamlet)
-+import Text.Julius (rawJS)
- import Data.Text (Text, pack, unpack)
- import Data.Monoid (mconcat)
-
-@@ -60,27 +72,59 @@ jqueryDayField jds = Field
+ -- | Gets the Google hosted jQuery UI 1.8 CSS file with the given theme.
+ googleHostedJqueryUiCss :: Text -> Text
+ googleHostedJqueryUiCss theme = mconcat
+@@ -61,27 +73,59 @@ jqueryDayField jds = Field
. readMay
. unpack
, fieldView = \theId name attrs val isReq -> do
@@ -1345,7 +1638,7 @@ index 2c4ae25..ed9b366 100644
-});
-|]
+ toWidget $ Text.Julius.asJavascriptUrl
-+ (\ _render_a1lYC
++ (\ _render_a2l4S
+ -> mconcat
+ [Text.Julius.Javascript
+ ((Data.Text.Lazy.Builder.fromText
@@ -1380,8 +1673,8 @@ index 2c4ae25..ed9b366 100644
, fieldEnctype = UrlEncoded
}
where
-@@ -101,16 +145,47 @@ jqueryAutocompleteField :: (RenderMessage site FormMessage, YesodJquery site)
- jqueryAutocompleteField src = Field
+@@ -108,16 +152,52 @@ jqueryAutocompleteField' :: (RenderMessage site FormMessage, YesodJquery site)
+ jqueryAutocompleteField' minLen src = Field
{ fieldParse = parseHelper $ Right
, fieldView = \theId name attrs val isReq -> do
- toWidget [shamlet|
@@ -1410,10 +1703,10 @@ index 2c4ae25..ed9b366 100644
addScript' urlJqueryUiJs
addStylesheet' urlJqueryUiCss
- toWidget [julius|
--$(function(){$("##{rawJS theId}").autocomplete({source:"@{src}",minLength:2})});
+-$(function(){$("##{rawJS theId}").autocomplete({source:"@{src}",minLength:#{toJSON minLen}})});
-|]
+ toWidget $ Text.Julius.asJavascriptUrl
-+ (\ _render_a1lYP
++ (\ _render_a2l58
+ -> mconcat
+ [Text.Julius.Javascript
+ ((Data.Text.Lazy.Builder.fromText
@@ -1426,17 +1719,22 @@ index 2c4ae25..ed9b366 100644
+ "\").autocomplete({source:\""),
+ Text.Julius.Javascript
+ (Data.Text.Lazy.Builder.fromText
-+ (_render_a1lYP src [])),
++ (_render_a2l58 src [])),
+ Text.Julius.Javascript
+ ((Data.Text.Lazy.Builder.fromText
+ . Text.Shakespeare.pack')
-+ "\",minLength:2})});")])
++ "\",minLength:"),
++ Text.Julius.toJavascript (toJSON minLen),
++ Text.Julius.Javascript
++ ((Data.Text.Lazy.Builder.fromText
++ . Text.Shakespeare.pack')
++ "})});")])
+
, fieldEnctype = UrlEncoded
}
diff --git a/Yesod/Form/MassInput.hs b/Yesod/Form/MassInput.hs
-index 332eb66..5015e7b 100644
+index a2b434d..75eb484 100644
--- a/Yesod/Form/MassInput.hs
+++ b/Yesod/Form/MassInput.hs
@@ -9,6 +9,16 @@ module Yesod.Form.MassInput
@@ -1455,8 +1753,8 @@ index 332eb66..5015e7b 100644
+
import Yesod.Form.Types
import Yesod.Form.Functions
- import Yesod.Form.Fields (boolField)
-@@ -70,16 +80,28 @@ inputList label fixXml single mdef = formToAForm $ do
+ import Yesod.Form.Fields (checkBoxField)
+@@ -70,16 +80,27 @@ inputList label fixXml single mdef = formToAForm $ do
{ fvLabel = label
, fvTooltip = Nothing
, fvId = theId
@@ -1470,32 +1768,31 @@ index 332eb66..5015e7b 100644
- <input type=checkbox name=#{addName}>
- Add another row
-|]
-+ , fvInput = do { (Yesod.Core.Widget.asWidgetT . toWidget) (fixXml views);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ , fvInput = do { (asWidgetT . toWidget) (fixXml views);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "<p>");
+ Data.Foldable.mapM_
-+ (\ xml_aUS3 -> (Yesod.Core.Widget.asWidgetT . toWidget) xml_aUS3)
-+ xmls;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\ xml_a1yM1 -> (asWidgetT . toWidget) xml_a1yM1) xmls;
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "<input class=\"count\" type=\"hidden\" name=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml countName);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml countName);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "\" value=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml count);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml count);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "\"><input type=\"checkbox\" name=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml addName);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml addName);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "\">Add another row</p>") }
+
, fvErrors = Nothing
, fvRequired = False
}])
-@@ -92,10 +114,14 @@ withDelete af = do
+@@ -92,10 +113,14 @@ withDelete af = do
deleteName <- newFormIdent
(menv, _, _) <- ask
res <- case menv >>= Map.lookup deleteName . fst of
@@ -1503,18 +1800,18 @@ index 332eb66..5015e7b 100644
-$newline never
-<input type=hidden name=#{deleteName} value=yes>
-|]
-+ Just ("yes":_) -> return $ Left $ do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ Just ("yes":_) -> return $ Left $ do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "<input type=\"hidden\" name=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml deleteName);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml deleteName);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "\" value=\"yes\">") }
+
_ -> do
- (_, xml2) <- aFormToForm $ areq boolField FieldSettings
+ (_, xml2) <- aFormToForm $ areq checkBoxField FieldSettings
{ fsLabel = SomeMessage MsgDelete
-@@ -121,32 +147,155 @@ fixme eithers =
+@@ -121,32 +146,149 @@ fixme eithers =
massDivs, massTable
:: [[FieldView site]]
-> WidgetT site IO ()
@@ -1532,153 +1829,147 @@ index 332eb66..5015e7b 100644
- <div .errors>#{err}
-|]
+massDivs viewss = Data.Foldable.mapM_
-+ (\ views_aUSm
-+ -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\ views_a1yMm
++ -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "<fieldset>");
+ Data.Foldable.mapM_
-+ (\ view_aUSn
-+ -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\ view_a1yMn
++ -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "<div");
+ Text.Hamlet.condH
-+ [(or [fvRequired view_aUSn, not (fvRequired view_aUSn)],
-+ do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ [(or [fvRequired view_a1yMn, not (fvRequired view_a1yMn)],
++ do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ " class=\"");
+ Text.Hamlet.condH
-+ [(fvRequired view_aUSn,
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ [(fvRequired view_a1yMn,
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "required "))]
+ Nothing;
+ Text.Hamlet.condH
-+ [(not (fvRequired view_aUSn),
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ [(not (fvRequired view_a1yMn),
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "optional"))]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "\"") })]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "><label for=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml (fvId view_aUSn));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml (fvId view_a1yMn));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "\">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ (toHtml (fvLabel view_aUSn));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml (fvLabel view_a1yMn));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</label>");
+ Text.Hamlet.maybeH
-+ (fvTooltip view_aUSn)
-+ (\ tt_aUSo
-+ -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (fvTooltip view_a1yMn)
++ (\ tt_a1yMo
++ -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "<div class=\"tooltip\">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ (toHtml tt_aUSo);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml tt_a1yMo);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "</div>") })
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (fvInput view_aUSn);
++ (asWidgetT . toWidget) (fvInput view_a1yMn);
+ Text.Hamlet.maybeH
-+ (fvErrors view_aUSn)
-+ (\ err_aUSp
-+ -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (fvErrors view_a1yMn)
++ (\ err_a1yMp
++ -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "<div class=\"errors\">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ (toHtml err_aUSp);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml err_a1yMp);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "</div>") })
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</div>") })
-+ views_aUSm;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ views_a1yMm;
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "</fieldset>") })
+ viewss
+
+
+massTable viewss = Data.Foldable.mapM_
-+ (\ views_aUSu
-+ -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\ views_a1yMv
++ -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "<fieldset><table>");
+ Data.Foldable.mapM_
-+ (\ view_aUSv
-+ -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (\ view_a1yMw
++ -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "<tr");
+ Text.Hamlet.condH
-+ [(or [fvRequired view_aUSv, not (fvRequired view_aUSv)],
-+ do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ [(or [fvRequired view_a1yMw, not (fvRequired view_a1yMw)],
++ do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ " class=\"");
+ Text.Hamlet.condH
-+ [(fvRequired view_aUSv,
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ [(fvRequired view_a1yMw,
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "required "))]
+ Nothing;
+ Text.Hamlet.condH
-+ [(not (fvRequired view_aUSv),
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ [(not (fvRequired view_a1yMw),
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "optional"))]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "\"") })]
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "><td><label for=\"");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (toHtml (fvId view_aUSv));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml (fvId view_a1yMw));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "\">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ (toHtml (fvLabel view_aUSv));
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml (fvLabel view_a1yMw));
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</label>");
+ Text.Hamlet.maybeH
-+ (fvTooltip view_aUSv)
-+ (\ tt_aUSw
-+ -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (fvTooltip view_a1yMw)
++ (\ tt_a1yMx
++ -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "<div class=\"tooltip\">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ (toHtml tt_aUSw);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml tt_a1yMx);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "</div>") })
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "</td><td>");
-+ (Yesod.Core.Widget.asWidgetT . toWidget) (fvInput view_aUSv);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (fvInput view_a1yMw);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</td>");
+ Text.Hamlet.maybeH
-+ (fvErrors view_aUSv)
-+ (\ err_aUSx
-+ -> do { (Yesod.Core.Widget.asWidgetT . toWidget)
++ (fvErrors view_a1yMw)
++ (\ err_a1yMy
++ -> do { (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "<td class=\"errors\">");
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
-+ (toHtml err_aUSx);
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget) (toHtml err_a1yMy);
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "</td>") })
+ Nothing;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack) "</tr>") })
-+ views_aUSu;
-+ (Yesod.Core.Widget.asWidgetT . toWidget)
++ views_a1yMv;
++ (asWidgetT . toWidget)
+ ((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
+ "</table></fieldset>") })
+ viewss
@@ -1699,10 +1990,10 @@ index 332eb66..5015e7b 100644
- <td .errors>#{err}
-|]
diff --git a/Yesod/Form/Nic.hs b/Yesod/Form/Nic.hs
-index 2862678..04ddaba 100644
+index 7e4af07..b59745a 100644
--- a/Yesod/Form/Nic.hs
+++ b/Yesod/Form/Nic.hs
-@@ -9,11 +9,24 @@ module Yesod.Form.Nic
+@@ -9,11 +9,22 @@ module Yesod.Form.Nic
, nicHtmlField
) where
@@ -1718,24 +2009,22 @@ index 2862678..04ddaba 100644
+import qualified Data.Text.Lazy.Builder
+import qualified Text.Shakespeare
+
-+
import Yesod.Core
import Yesod.Form
import Text.HTML.SanitizeXSS (sanitizeBalance)
-import Text.Hamlet (shamlet)
-import Text.Julius (julius, rawJS)
-+--import Text.Hamlet (shamlet)
+import Text.Julius ( rawJS)
import Text.Blaze.Html.Renderer.String (renderHtml)
import Data.Text (Text, pack)
import Data.Maybe (listToMaybe)
-@@ -27,20 +40,48 @@ nicHtmlField :: YesodNic site => Field (HandlerT site IO) Html
+@@ -27,20 +38,52 @@ nicHtmlField :: YesodNic site => Field (HandlerT site IO) Html
nicHtmlField = Field
{ fieldParse = \e _ -> return . Right . fmap (preEscapedToMarkup . sanitizeBalance) . listToMaybe $ e
- , fieldView = \theId name attrs val _isReq -> do
+ , fieldView = \theId name attrs val isReq -> do
- toWidget [shamlet|
-$newline never
-- <textarea id="#{theId}" *{attrs} name="#{name}" .html>#{showVal val}
+- <textarea id="#{theId}" *{attrs} name="#{name}" :isReq:required .html>#{showVal val}
-|]
+ toWidget $ do { id
+ ((Text.Blaze.Internal.preEscapedText . pack)
@@ -1744,6 +2033,10 @@ index 2862678..04ddaba 100644
+ id ((Text.Blaze.Internal.preEscapedText . pack) "\" name=\"");
+ id (toHtml name);
+ id ((Text.Blaze.Internal.preEscapedText . pack) "\"");
++ Text.Hamlet.condH
++ [(isReq,
++ id ((Text.Blaze.Internal.preEscapedText . pack) " required"))]
++ Nothing;
+ id ((Text.Hamlet.attrsToHtml . Text.Hamlet.toAttributes) attrs);
+ id ((Text.Blaze.Internal.preEscapedText . pack) ">");
+ id (toHtml (showVal val));
@@ -1760,12 +2053,12 @@ index 2862678..04ddaba 100644
-(function(){new nicEditor({fullPanel:true}).panelInstance("#{rawJS theId}")})();
-|]
+ BottomOfHeadBlocking -> Text.Julius.asJavascriptUrl
-+ (\ _render_a1qhO
++ (\ _render_a2rMh
+ -> Data.Monoid.mconcat
+ [Text.Julius.Javascript
+ ((Data.Text.Lazy.Builder.fromText
+ . Text.Shakespeare.pack')
-+ "\nbkLib.onDomLoaded(function(){new nicEditor({true}).panelInstance(\""),
++ "\nbkLib.onDomLoaded(function(){new nicEditor({fullPanel:true}).panelInstance(\""),
+ Text.Julius.toJavascript (rawJS theId),
+ Text.Julius.Javascript
+ ((Data.Text.Lazy.Builder.fromText
@@ -1773,12 +2066,12 @@ index 2862678..04ddaba 100644
+ "\")});")])
+
+ _ -> Text.Julius.asJavascriptUrl
-+ (\ _render_a1qhS
++ (\ _render_a2rMm
+ -> Data.Monoid.mconcat
+ [Text.Julius.Javascript
+ ((Data.Text.Lazy.Builder.fromText
+ . Text.Shakespeare.pack')
-+ "\n(function(){new nicEditor({true}).panelInstance(\""),
++ "\n(function(){new nicEditor({fullPanel:true}).panelInstance(\""),
+ Text.Julius.toJavascript (rawJS theId),
+ Text.Julius.Javascript
+ ((Data.Text.Lazy.Builder.fromText
@@ -1788,18 +2081,6 @@ index 2862678..04ddaba 100644
, fieldEnctype = UrlEncoded
}
where
-diff --git a/yesod-form.cabal b/yesod-form.cabal
-index 1f6e0e1..4667861 100644
---- a/yesod-form.cabal
-+++ b/yesod-form.cabal
-@@ -19,6 +19,7 @@ library
- , time >= 1.1.4
- , hamlet >= 1.1 && < 1.2
- , shakespeare-css >= 1.0 && < 1.1
-+ , shakespeare
- , shakespeare-js >= 1.0.2 && < 1.3
- , persistent >= 1.2 && < 1.4
- , template-haskell
--
-1.7.10.4
+2.1.1
diff --git a/standalone/no-th/haskell-patches/yesod-persistent_do-not-really-build.patch b/standalone/no-th/haskell-patches/yesod-persistent_do-not-really-build.patch
index ecccf75ac..76aad4e34 100644
--- a/standalone/no-th/haskell-patches/yesod-persistent_do-not-really-build.patch
+++ b/standalone/no-th/haskell-patches/yesod-persistent_do-not-really-build.patch
@@ -1,26 +1,33 @@
-From 03819615edb1c5f7414768dae84234d6791bd758 Mon Sep 17 00:00:00 2001
-From: foo <foo@bar>
-Date: Sun, 22 Sep 2013 04:11:46 +0000
-Subject: [PATCH] do not really build
+From e82ed4e6fd7b5ea6dbe474b5de2755ec5794161c Mon Sep 17 00:00:00 2001
+From: dummy <dummy@example.com>
+Date: Thu, 16 Oct 2014 02:23:50 +0000
+Subject: [PATCH] stub out
---
- yesod-persistent.cabal | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
+ yesod-persistent.cabal | 10 ----------
+ 1 file changed, 10 deletions(-)
diff --git a/yesod-persistent.cabal b/yesod-persistent.cabal
-index 98c2146..11960cf 100644
+index b116f3a..017b184 100644
--- a/yesod-persistent.cabal
+++ b/yesod-persistent.cabal
-@@ -23,8 +23,7 @@ library
- , lifted-base
- , pool-conduit
- , resourcet
+@@ -14,16 +14,6 @@ description: Some helpers for using Persistent from Yesod.
+
+ library
+ build-depends: base >= 4 && < 5
+- , yesod-core >= 1.2.2 && < 1.3
+- , persistent >= 1.2 && < 2.1
+- , persistent-template >= 1.2 && < 2.1
+- , transformers >= 0.2.2
+- , blaze-builder
+- , conduit
+- , resourcet >= 0.4.5
+- , resource-pool
- exposed-modules: Yesod.Persist
- Yesod.Persist.Core
-+ exposed-modules:
ghc-options: -Wall
test-suite test
--
-1.7.10.4
+2.1.1
diff --git a/standalone/no-th/haskell-patches/yesod-static_hack.patch b/standalone/no-th/haskell-patches/yesod-static_hack.patch
index 4cf977bae..46e4b654c 100644
--- a/standalone/no-th/haskell-patches/yesod-static_hack.patch
+++ b/standalone/no-th/haskell-patches/yesod-static_hack.patch
@@ -1,31 +1,27 @@
-From 885cc873196f535de7cd1ac2ccfa217d10308d1f Mon Sep 17 00:00:00 2001
+From 606c5f4f4b2d476d274907eb2bb8c12b60fc451f Mon Sep 17 00:00:00 2001
From: dummy <dummy@example.com>
-Date: Fri, 7 Mar 2014 02:28:34 +0000
-Subject: [PATCH] avoid building with jsmin
+Date: Wed, 21 May 2014 04:43:30 +0000
+Subject: [PATCH] remove TH
-jsmin needs language-javascript, which fails to build for android due to
-a problem or incompatability with happy.
-
-This also avoids all the TH code.
---
Yesod/EmbeddedStatic/Generators.hs | 3 +--
Yesod/Static.hs | 29 ++++++++++++++++++-----------
- yesod-static.cabal | 7 -------
- 3 files changed, 19 insertions(+), 20 deletions(-)
+ yesod-static.cabal | 9 ---------
+ 3 files changed, 19 insertions(+), 22 deletions(-)
diff --git a/Yesod/EmbeddedStatic/Generators.hs b/Yesod/EmbeddedStatic/Generators.hs
-index e83785d..6b1c10e 100644
+index 08febb9..e3a6d51 100644
--- a/Yesod/EmbeddedStatic/Generators.hs
+++ b/Yesod/EmbeddedStatic/Generators.hs
-@@ -43,7 +43,6 @@ import Language.Haskell.TH
+@@ -42,7 +42,6 @@ import Language.Haskell.TH
import Network.Mime (defaultMimeLookup)
import System.Directory (doesDirectoryExist, getDirectoryContents, findExecutable)
import System.FilePath ((</>))
-import Text.Jasmine (minifym)
import qualified Data.ByteString.Lazy as BL
import qualified Data.Conduit.List as C
- import qualified Data.Text as T
-@@ -158,7 +157,7 @@ concatFilesWith loc process files = do
+ import Data.Conduit.Binary (sourceHandle)
+@@ -162,7 +161,7 @@ concatFilesWith loc process files = do
-- | Convienient rexport of 'minifym' with a type signature to work with 'concatFilesWith'.
jasmine :: BL.ByteString -> IO BL.ByteString
@@ -35,7 +31,7 @@ index e83785d..6b1c10e 100644
-- | Use <https://github.com/mishoo/UglifyJS2 UglifyJS2> to compress javascript.
-- Assumes @uglifyjs@ is located in the path and uses options @[\"-m\", \"-c\"]@
diff --git a/Yesod/Static.hs b/Yesod/Static.hs
-index dd21791..37f7e00 100644
+index 725ebf4..33eaffd 100644
--- a/Yesod/Static.hs
+++ b/Yesod/Static.hs
@@ -37,8 +37,8 @@ module Yesod.Static
@@ -74,9 +70,9 @@ index dd21791..37f7e00 100644
-import Data.FileEmbed (embedDir)
+import Data.FileEmbed
+ import Control.Monad.Trans.Resource (runResourceT)
import Yesod.Core
- import Yesod.Core.Types
-@@ -135,6 +135,7 @@ staticDevel dir = do
+@@ -136,6 +136,7 @@ staticDevel dir = do
hashLookup <- cachedETagLookupDevel dir
return $ Static $ webAppSettingsWithLookup (F.decodeString dir) hashLookup
@@ -84,7 +80,7 @@ index dd21791..37f7e00 100644
-- | Produce a 'Static' based on embedding all of the static files' contents in the
-- executable at compile time.
--
-@@ -149,6 +150,7 @@ staticDevel dir = do
+@@ -150,6 +151,7 @@ staticDevel dir = do
-- This will cause yesod to embed those assets into the generated HTML file itself.
embed :: Prelude.FilePath -> Q Exp
embed fp = [|Static (embeddedSettings $(embedDir fp))|]
@@ -92,7 +88,7 @@ index dd21791..37f7e00 100644
instance RenderRoute Static where
-- | A route on the static subsite (see also 'staticFiles').
-@@ -214,6 +216,7 @@ getFileListPieces = flip evalStateT M.empty . flip go id
+@@ -215,6 +217,7 @@ getFileListPieces = flip evalStateT M.empty . flip go id
put $ M.insert s s m
return s
@@ -100,7 +96,7 @@ index dd21791..37f7e00 100644
-- | Template Haskell function that automatically creates routes
-- for all of your static files.
--
-@@ -266,7 +269,7 @@ staticFilesList dir fs =
+@@ -267,7 +270,7 @@ staticFilesList dir fs =
-- see if their copy is up-to-date.
publicFiles :: Prelude.FilePath -> Q [Dec]
publicFiles dir = mkStaticFiles' dir "StaticRoute" False
@@ -109,7 +105,7 @@ index dd21791..37f7e00 100644
mkHashMap :: Prelude.FilePath -> IO (M.Map F.FilePath S8.ByteString)
mkHashMap dir = do
-@@ -309,6 +312,7 @@ cachedETagLookup dir = do
+@@ -310,6 +313,7 @@ cachedETagLookup dir = do
etags <- mkHashMap dir
return $ (\f -> return $ M.lookup f etags)
@@ -117,7 +113,7 @@ index dd21791..37f7e00 100644
mkStaticFiles :: Prelude.FilePath -> Q [Dec]
mkStaticFiles fp = mkStaticFiles' fp "StaticRoute" True
-@@ -356,6 +360,7 @@ mkStaticFilesList fp fs routeConName makeHash = do
+@@ -357,6 +361,7 @@ mkStaticFilesList fp fs routeConName makeHash = do
[ Clause [] (NormalB $ (ConE route) `AppE` f' `AppE` qs) []
]
]
@@ -125,7 +121,7 @@ index dd21791..37f7e00 100644
base64md5File :: Prelude.FilePath -> IO String
base64md5File = fmap (base64 . encode) . hashFile
-@@ -394,7 +399,7 @@ base64 = map tr
+@@ -395,7 +400,7 @@ base64 = map tr
-- single static file at compile time.
data CombineType = JS | CSS
@@ -134,7 +130,7 @@ index dd21791..37f7e00 100644
combineStatics' :: CombineType
-> CombineSettings
-> [Route Static] -- ^ files to combine
-@@ -428,7 +433,7 @@ combineStatics' combineType CombineSettings {..} routes = do
+@@ -429,7 +434,7 @@ combineStatics' combineType CombineSettings {..} routes = do
case combineType of
JS -> "js"
CSS -> "css"
@@ -143,7 +139,7 @@ index dd21791..37f7e00 100644
-- | Data type for holding all settings for combining files.
--
-- This data type is a settings type. For more information, see:
-@@ -504,6 +509,7 @@ instance Default CombineSettings where
+@@ -505,6 +510,7 @@ instance Default CombineSettings where
errorIntro :: [FilePath] -> [Char] -> [Char]
errorIntro fps s = "Error minifying " ++ show fps ++ ": " ++ s
@@ -151,7 +147,7 @@ index dd21791..37f7e00 100644
liftRoutes :: [Route Static] -> Q Exp
liftRoutes =
fmap ListE . mapM go
-@@ -550,4 +556,5 @@ combineScripts' :: Bool -- ^ development? if so, perform no combining
+@@ -551,4 +557,5 @@ combineScripts' :: Bool -- ^ development? if so, perform no combining
-> Q Exp
combineScripts' development cs con routes
| development = [| mapM_ (addScript . $(return $ ConE con)) $(liftRoutes routes) |]
@@ -159,36 +155,39 @@ index dd21791..37f7e00 100644
+ | otherwise = [| addScript $ $(return $ ConE con) $(combineStatics' JS cs routes) |]a
+-}
diff --git a/yesod-static.cabal b/yesod-static.cabal
-index 3423149..416aae6 100644
+index 2582a95..5df03b3 100644
--- a/yesod-static.cabal
+++ b/yesod-static.cabal
-@@ -48,18 +48,12 @@ library
+@@ -49,7 +49,6 @@ library
, data-default
, shakespeare-css >= 1.0.3
, mime-types >= 0.1
- , hjsmin
- , process-conduit >= 1.0 && < 1.1
, filepath >= 1.3
, resourcet >= 0.4
, unordered-containers >= 0.2
+@@ -62,13 +61,6 @@ library
+ , hashable >= 1.1
exposed-modules: Yesod.Static
- Yesod.EmbeddedStatic
- Yesod.EmbeddedStatic.Generators
- Yesod.EmbeddedStatic.Types
+- Yesod.EmbeddedStatic.Css.AbsoluteUrl
-
- other-modules: Yesod.EmbeddedStatic.Internal
+- Yesod.EmbeddedStatic.Css.Util
ghc-options: -Wall
extensions: TemplateHaskell
-@@ -99,7 +93,6 @@ test-suite tests
+@@ -108,7 +100,6 @@ test-suite tests
, data-default
, shakespeare-css
, mime-types
- , hjsmin
- , process-conduit
, filepath
, resourcet
+ , unordered-containers
--
-1.9.0
+2.0.0.rc2
diff --git a/standalone/no-th/haskell-patches/yesod_hack-TH.patch b/standalone/no-th/haskell-patches/yesod_hack-TH.patch
index b8991b86e..ebf8a786b 100644
--- a/standalone/no-th/haskell-patches/yesod_hack-TH.patch
+++ b/standalone/no-th/haskell-patches/yesod_hack-TH.patch
@@ -1,13 +1,13 @@
-From 369c99b9de0c82578f5221fdabc42ea9ba59ddea Mon Sep 17 00:00:00 2001
+From 59091cd37958fee79b9e346fe3118d5ed7d0104b Mon Sep 17 00:00:00 2001
From: dummy <dummy@example.com>
-Date: Fri, 7 Mar 2014 04:10:02 +0000
-Subject: [PATCH] hack to TH
+Date: Thu, 16 Oct 2014 02:36:37 +0000
+Subject: [PATCH] hack TH
---
Yesod.hs | 19 ++++++++++++--
- Yesod/Default/Main.hs | 25 +------------------
+ Yesod/Default/Main.hs | 31 +----------------------
Yesod/Default/Util.hs | 69 ++-------------------------------------------------
- 3 files changed, 20 insertions(+), 93 deletions(-)
+ 3 files changed, 20 insertions(+), 99 deletions(-)
diff --git a/Yesod.hs b/Yesod.hs
index b367144..fbe309c 100644
@@ -41,7 +41,7 @@ index b367144..fbe309c 100644
+insert = undefined
+
diff --git a/Yesod/Default/Main.hs b/Yesod/Default/Main.hs
-index 0780539..ad99ccd 100644
+index 565ed35..bf46642 100644
--- a/Yesod/Default/Main.hs
+++ b/Yesod/Default/Main.hs
@@ -1,10 +1,8 @@
@@ -55,7 +55,7 @@ index 0780539..ad99ccd 100644
, defaultRunner
, defaultDevelApp
, LogFunc
-@@ -22,7 +20,7 @@ import Control.Monad (when)
+@@ -23,7 +21,7 @@ import Control.Monad (when)
import System.Environment (getEnvironment)
import Data.Maybe (fromMaybe)
import Safe (readMay)
@@ -64,7 +64,7 @@ index 0780539..ad99ccd 100644
import System.Log.FastLogger (LogStr, toLogStr)
import Language.Haskell.TH.Syntax (qLocation)
-@@ -54,27 +52,6 @@ defaultMain load getApp = do
+@@ -55,33 +53,6 @@ defaultMain load getApp = do
type LogFunc = Loc -> LogSource -> LogLevel -> LogStr -> IO ()
@@ -82,16 +82,22 @@ index 0780539..ad99ccd 100644
- runSettings defaultSettings
- { settingsPort = appPort config
- , settingsHost = appHost config
-- , settingsOnException = const $ \e -> logFunc
+- , settingsOnException = const $ \e -> when (shouldLog' e) $ logFunc
- $(qLocation >>= liftLoc)
- "yesod"
- LevelError
- (toLogStr $ "Exception from Warp: " ++ show e)
- } app
--
+- where
+- shouldLog' =
+-#if MIN_VERSION_warp(2,1,3)
+- Warp.defaultShouldDisplayException
+-#else
+- const True
+-#endif
+
-- | Run your application continously, listening for SIGINT and exiting
-- when received
- --
diff --git a/Yesod/Default/Util.hs b/Yesod/Default/Util.hs
index a10358e..0547424 100644
--- a/Yesod/Default/Util.hs
@@ -189,5 +195,5 @@ index a10358e..0547424 100644
- else return $ Just ex
- else return Nothing
--
-1.9.0
+2.1.1
diff --git a/standalone/osx/git-annex.app/Contents/MacOS/runshell b/standalone/osx/git-annex.app/Contents/MacOS/runshell
index 9f1457e25..c5d689c6e 100755
--- a/standalone/osx/git-annex.app/Contents/MacOS/runshell
+++ b/standalone/osx/git-annex.app/Contents/MacOS/runshell
@@ -36,11 +36,26 @@ if [ ! -e "$HOME/.ssh/git-annex-shell" ]; then
(
echo "#!/bin/sh"
echo "set -e"
+ echo "if [ \"x\$SSH_ORIGINAL_COMMAND\" != \"x\" ]; then"
echo "exec $base/runshell git-annex-shell -c \"\$SSH_ORIGINAL_COMMAND\""
+ echo "else"
+ echo "exec $base/runshell git-annex-shell -c \"\$@\""
+ echo "fi"
) > "$HOME/.ssh/git-annex-shell"
chmod +x "$HOME/.ssh/git-annex-shell"
fi
+# And this shim is used by the webapp when adding a remote ssh server.
+if [ ! -e "$HOME/.ssh/git-annex-wrapper" ]; then
+ mkdir "$HOME/.ssh" >/dev/null 2>&1 || true
+ (
+ echo "#!/bin/sh"
+ echo "set -e"
+ echo "exec $base/runshell \"\$@\""
+ ) > "$HOME/.ssh/git-annex-wrapper"
+ chmod +x "$HOME/.ssh/git-annex-wrapper"
+fi
+
# Put our binaries first, to avoid issues with out of date or incompatable
# system binaries.
ORIG_PATH="$PATH"
diff --git a/standalone/trustedkeys.gpg b/standalone/trustedkeys.gpg
new file mode 100644
index 000000000..0742182ae
--- /dev/null
+++ b/standalone/trustedkeys.gpg
Binary files differ
diff --git a/standalone/windows/build.sh b/standalone/windows/build.sh
index 8751e4573..09161c569 100755
--- a/standalone/windows/build.sh
+++ b/standalone/windows/build.sh
@@ -7,9 +7,9 @@ set -x
set -e
# Path to the Haskell Platform.
-HP="/c/Program Files (x86)/Haskell Platform/2013.2.0.0"
+#HP="/c/haskell/2014.2.0.0" # now in the default PATH
-PATH="$HP/bin:$HP/lib/extralibs/bin:/c/Program Files (x86)/NSIS:/c/msysgit/cmd:/c/msysgit/bin:$PATH"
+PATH="/c/Program Files (x86)/NSIS:/c/msysgit/cmd:$PATH"
# Run a command with the cygwin environment available.
# However, programs not from cygwin are preferred.
@@ -35,6 +35,10 @@ rm -f git-annex-installer.exe
# for haskell libraries to link them with the cygwin library.
cabal update || true
+# This workaround is still needed, it seems.
+#cabal install transformers-compat -fthree
+#cabal install DAV-1.0
+
cabal install --only-dependencies || true
# Detect when the last build was an incremental build and failed,
@@ -57,14 +61,28 @@ fi
# Build the installer
cabal install nsis
-ghc --make Build/NullSoftInstaller.hs
+ghc -fforce-recomp --make Build/NullSoftInstaller.hs
# Want to include cygwin programs in bundle, not others, since
# it includes the cygwin libs that go with them.
withcygpreferred Build/NullSoftInstaller.exe
rm -f last-incremental-failed
+rm -f dist/build-version
+ghc --make Build/BuildVersion.hs
+Build/BuildVersion > dist/build-version
+
# Test git-annex
-# (doesn't currently work well on autobuilder, reason unknown)
-rm -rf .t
-withcyg dist/build/git-annex/git-annex.exe test || true
+# The test is run in c:/WINDOWS/Temp, because running it in the autobuilder
+# directory runs afoul of Windows's short PATH_MAX.
+PATH="$(pwd)/dist/build/git-annex/:$PATH"
+export PATH
+mkdir -p c:/WINDOWS/Temp/git-annex-test/
+cd c:/WINDOWS/Temp/git-annex-test/
+if withcyg git-annex.exe test; then
+ rm -rf .t
+else
+ rm -rf .t
+ echo "Test suite failure; failing build!"
+ false
+fi